tx · CJ3TF2ncnaGaD7kABpBAmsHxh74RyPsSus7TuSwpwcgP

3MuCofTkjmv397dEuRXE3pZxTb4zDWa96uo:  -0.06000000 Waves

2022.09.21 12:59 [2238744] smart account 3MuCofTkjmv397dEuRXE3pZxTb4zDWa96uo > SELF 0.00000000 Waves

{ "type": 13, "id": "CJ3TF2ncnaGaD7kABpBAmsHxh74RyPsSus7TuSwpwcgP", "fee": 6000000, "feeAssetId": null, "timestamp": 1663754394993, "version": 2, "chainId": 84, "sender": "3MuCofTkjmv397dEuRXE3pZxTb4zDWa96uo", "senderPublicKey": "HGKkqEdKKPVXHMq25FyB6nm1kyvrixu1a8Av6wc9t5CG", "proofs": [ "2kQzMTpQg8HjSX1kGwuecSFj9oYSSV1UST8wdFZ1FDTXssTUqpiUe6YVrd6jgys7aUwbvR8WmqYxd8tq5MetGjTP" ], "script": "base64:BgJvCAISABIAEgMKAQESAwoBARILCgkBAQEBAQEBAQESEAoOAQEBAQEBAQgICAEBAQESAwoBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESABIDCgEIEgASBAoCCAESAwoBARIDCgEIEgMKAQgSAwoBARIAiAEACWtfb3JhX2tleQIJa19vcmFfa2V5AA9rX29yYV9ibG9ja19rZXkCD2tfb3JhX2Jsb2NrX2tleQAFa19vcmECBWtfb3JhAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AFGtfcG9zaXRpb25DbG9zZWREYXRlAhRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAIa19wYXVzZWQCCGtfcGF1c2VkAAVrX2ZlZQIFa19mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvABlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAhZrX3BhcnRMaXF1aWRhdGlvblJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0ABBrX21heFByaWNlU3ByZWFkAhBrX21heFByaWNlU3ByZWFkAA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFGtfY3VtdWxhdGl2ZU5vdGlvbmFsAhRrX2N1bXVsYXRpdmVOb3Rpb25hbAAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzABNrX2luc3VyYW5jZV9hZGRyZXNzAhNrX2luc3VyYW5jZV9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfcXVvdGVfc3Rha2luZwIPa19xdW90ZV9zdGFraW5nABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ5hZG1pblB1YmxpY0tleQAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19hZG1pbl9wdWJsaWNfa2V5AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEQaW5zdXJhbmNlQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRNrX2luc3VyYW5jZV9hZGRyZXNzAhFJbnN1cmFuY2Ugbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAPT1JBQ0xFX0lOVEVSVkFMAA8AB1NFQ09ORFMA6AcADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAIQUxMX0ZFRVMAZAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEdm1heAICX3gCX3kDCQBnAgUCX3gFAl95BQJfeAUCX3kBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBCWxpc3RUb1N0cgEFX2xpc3QKAQVfam9pbgILYWNjdW11bGF0b3IDdmFsCQCsAgIJAKwCAgULYWNjdW11bGF0b3IFA3ZhbAIBLAQKbmV3TGlzdFN0cgoAAiRsBQVfbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFX2pvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQLbmV3TGlzdFN0clUJALMCAgUKbmV3TGlzdFN0cgABBAtuZXdMaXN0U3RyUgMJAAACCQCvAgIFC25ld0xpc3RTdHJVAAECASwJALACAgULbmV3TGlzdFN0clUAAQULbmV3TGlzdFN0clUFC25ld0xpc3RTdHJSAQlzdHJUb0xpc3QBBF9zdHIJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9pbml0TWFyZ2luUmF0aW8ACQEDaW50AQURa19pbml0TWFyZ2luUmF0aW8BBnF0QXN0UgAJAQNpbnQBBRNrX3F1b3RlQXNzZXRSZXNlcnZlAQZic0FzdFIACQEDaW50AQUSa19iYXNlQXNzZXRSZXNlcnZlARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARJjdW11bGF0aXZlTm90aW9uYWwACQEDaW50AQUUa19jdW11bGF0aXZlTm90aW9uYWwBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAACQEDaW50AQUSa19uZXh0RnVuZGluZ0Jsb2NrARBmdW5kaW5nUGVyaW9kUmF3AAkBA2ludAEFD2tfZnVuZGluZ1BlcmlvZAEUZnVuZGluZ1BlcmlvZERlY2ltYWwACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQxERUNJTUFMX1VOSVQBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUHU0VDT05EUwEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJAQNpbnQBBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8BE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEDaW50AQUVa19saXF1aWRhdGlvbkZlZVJhdGlvARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAQNpbnQBBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAQtzcHJlYWRMaW1pdAAJAQNpbnQBBQ1rX3NwcmVhZExpbWl0AQ5tYXhQcmljZUltcGFjdAAJAQNpbnQBBRBrX21heFByaWNlSW1wYWN0AQ5tYXhQcmljZVNwcmVhZAAJAQNpbnQBBRBrX21heFByaWNlU3ByZWFkASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBAg5JbnZhbGlkIG1hcmdpbgMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBAg5JbnZhbGlkIG1hcmdpbgYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCWCgQFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAlgoEAAAAAAAAAAABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlgoECQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAkAZAIJARJjdW11bGF0aXZlTm90aW9uYWwABRFfcXVvdGVBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlgoEBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARJjdW11bGF0aXZlTm90aW9uYWwABRFfcXVvdGVBc3NldEFtb3VudAEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQBawkBBG11bGQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQEEZGl2ZAIFAWsFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBA2FicwEJAGUCBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFB19ic0FzdFIEFWFtb3VudEJhc2VBc3NldEJvdWdodAMFBl9pc0FkZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEBLQEFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQNJHQwMTI4MTYxMzAwOQkBDXVwZGF0ZVJlc2VydmUDBQZfaXNBZGQFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTI4MTYxMzAwOQJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDEyODE2MTMwMDkCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTI4MTYxMzAwOQJfMwQYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUNJHQwMTI4MTYxMzAwOQJfNAQLcHJpY2VCZWZvcmUJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCXCgUFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24MX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQMc2lnbmVkTWFyZ2luCQBkAgkAZQIFDF9tYXJnaW5EZWx0YQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTQ1MDAxNDYyNwMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxNDUwMDE0NjI3Al8xBAdiYWREZWJ0CAUNJHQwMTQ1MDAxNDYyNwJfMgkAlQoDBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50ARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdBJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC3ByaWNlQmVmb3JlCQEEZGl2ZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAQRkaXZkAgUBawUYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBA5xdW90ZUFzc2V0U29sZAkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMTU2MDQxNTc5NwkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTU2MDQxNTc5NwJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE1NjA0MTU3OTcCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTU2MDQxNTc5NwJfMwQYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUNJHQwMTU2MDQxNTc5NwJfNAQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCaCggFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEFGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAFC3ByaWNlSW1wYWN0AQpzd2FwT3V0cHV0AwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMFBQZfaXNBZGQFEF9iYXNlQXNzZXRBbW91bnQFFF9jaGVja01heFByaWNlSW1wYWN0CQEGcXRBc3RSAAkBBmJzQXN0UgABEmdldE9yYWNsZVR3YXBQcmljZQAEBm9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFBWtfb3JhAgAECHByaWNlS2V5CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrX29yYV9rZXkECGJsb2NrS2V5CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ9rX29yYV9ibG9ja19rZXkECWxhc3RWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIcHJpY2VLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBwcmljZS4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCHByaWNlS2V5BQlsYXN0VmFsdWUBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABApwcmljZUFmdGVyCQEEZGl2ZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgULb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIFDGF2ZXJhZ2VQcmljZQMJAGYCBQxhYnNQcmljZURpZmYJAQ5tYXhQcmljZVNwcmVhZAAJAAIBCQCsAgIJAKwCAgkArAICAg1QcmljZSBzcHJlYWQgCQCkAwEFDGFic1ByaWNlRGlmZgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBA1fcG9zaXRpb25TaXplB19vcHRpb24SX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ1fcG9zaXRpb25TaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsAwkAAAIFB19vcHRpb24FD1BOTF9PUFRJT05fU1BPVAQNJHQwMTkwMTUxOTE4NgkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMFCQEBIQEFB2lzU2hvcnQFD3Bvc2l0aW9uU2l6ZUFicwcFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEE291dFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAxOTAxNTE5MTg2Al8xBAJ4MQgFDSR0MDE5MDE1MTkxODYCXzIEAngyCAUNJHQwMTkwMTUxOTE4NgJfMwQCeDMIBQ0kdDAxOTAxNTE5MTg2Al80BRNvdXRQb3NpdGlvbk5vdGlvbmFsCQEEbXVsZAIFD3Bvc2l0aW9uU2l6ZUFicwkBEmdldE9yYWNsZVR3YXBQcmljZQAFEHBvc2l0aW9uTm90aW9uYWwBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMFDV9wb3NpdGlvblNpemUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwEBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyMDUwMzIwNjMxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyMDUwMzIwNjMxAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDIwNTAzMjA2MzECXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjA1MDMyMDYzMQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyMDUwMzIwNjMxAl80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwUFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGYnNBc3RSAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjExMTIyMTIyMwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjExMTIyMTIyMwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyMTExMjIxMjIzAl8yBANwb24IBQ0kdDAyMTExMjIxMjIzAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDIxMTEyMjEyMjMCXzQEDSR0MDIxMjI5MjEzMjIJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyMTIyOTIxMzIyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjEyMjkyMTMyMgJfMgQNJHQwMjEzMjcyMTQ5MwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjEzMjcyMTQ5MwJfMQQHYmFkRGVidAgFDSR0MDIxMzI3MjE0OTMCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfOAMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRVleGNoYW5nZWRQb3NpdGlvblNpemUHAl8xBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50ARVpbnRlcm5hbENsb3NlUG9zaXRpb24CB190cmFkZXIUX2NoZWNrTWF4UHJpY2VJbXBhY3QEDSR0MDIyNzI2MjI4NTQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDIyNzI2MjI4NTQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjI3MjYyMjg1NAJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyMjcyNjIyODU0Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDIyNzI2MjI4NTQCXzQEDXVucmVhbGl6ZWRQbmwICQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QCXzIEDSR0MDIyOTQ5MjMxMTcJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDIyOTQ5MjMxMTcCXzEEB2JhZERlYnQIBQ0kdDAyMjk0OTIzMTE3Al8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDIzMjQ0MjM1NTUJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDIzMjQ0MjM1NTUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyMzI0NDIzNTU1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyMzI0NDIzNTU1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMjMyNDQyMzU1NQJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAyMzI0NDIzNTU1Al81BA50b3RhbExvbmdBZnRlcggFDSR0MDIzMjQ0MjM1NTUCXzYED3RvdGFsU2hvcnRBZnRlcggFDSR0MDIzMjQ0MjM1NTUCXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkAngoMBRVleGNoYW5nZWRQb3NpdGlvblNpemUFB2JhZERlYnQFC3JlYWxpemVkUG5sBQ1tYXJnaW5Ub1ZhdWx0BRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyARBnZXRUd2FwU3BvdFByaWNlAAQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQNc3RhcnRNaW51dGVJZAkAZQIFCG1pbnV0ZUlkBQ1UV0FQX0lOVEVSVkFMBAdsaXN0U3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAQEbGlzdAkAtQkCBQdsaXN0U3RyAgEsCgEIZmlsdGVyRm4CC2FjY3VtdWxhdG9yBG5leHQDCQBnAgUNc3RhcnRNaW51dGVJZAkBDXBhcnNlSW50VmFsdWUBBQRuZXh0CQDNCAIFC2FjY3VtdWxhdG9yCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQFC2FjY3VtdWxhdG9yBAVsaXN0RgoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmaWx0ZXJGbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAhtYXhJbmRleAMJAGYCCQCQAwEFBWxpc3RGAAAJAJYDAQUFbGlzdEYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsaXN0AAAEDGxhc3RNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAABBZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQMZW5kTGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABBJub3dDdW11bGF0aXZlUHJpY2UJAGQCBRZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFDGVuZExhc3RQcmljZQQYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABA5zdGFydExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABBRzdGFydEN1bXVsYXRpdmVQcmljZQkAZAIFGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQ1zdGFydE1pbnV0ZUlkBQhtYXhJbmRleAUOc3RhcnRMYXN0UHJpY2UJAGkCCQBlAgUSbm93Q3VtdWxhdGl2ZVByaWNlBRRzdGFydEN1bXVsYXRpdmVQcmljZQUNVFdBUF9JTlRFUlZBTAEQZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcCXzEEEGJhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABBRuZXdRdW90ZUFzc2V0UmVzZXJ2ZQkBBG11bGQCBRBiYXNlQXNzZXRSZXNlcnZlBQZfcHJpY2UEBGNvc3QICQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwUFDV9wb3NpdGlvblNpemUFFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQUUbmV3UXVvdGVBc3NldFJlc2VydmUFEGJhc2VBc3NldFJlc2VydmUFD1BOTF9PUFRJT05fU1BPVAJfMgkAlAoCBRRuZXdRdW90ZUFzc2V0UmVzZXJ2ZQUEY29zdAEKZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDXNwb3RUd2FwUHJpY2UJARBnZXRUd2FwU3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFDXNwb3RUd2FwUHJpY2UFD3VuZGVybHlpbmdQcmljZQMDCQAAAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAAAGCQAAAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAkAlAoCAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAQ51cGRhdGVTZXR0aW5ncwkQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkBQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBQhfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQNuaWwBCmFwcGVuZFR3YXABBXByaWNlBAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBXByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQlwcmV2UHJpY2UEBGxpc3QJAQtwdXNoVG9RdWV1ZQMJAQlzdHJUb0xpc3QBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAUNVFdBUF9JTlRFUlZBTAkApAMBBQhtaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBXByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQVwcmljZQUDbmlsARF1cGRhdGVBbW1SZXNlcnZlcwIHX3F0QXN0UgdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFIFA25pbAEJdXBkYXRlQW1tBwdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyFV9vcGVuSW50ZXJlc3ROb3Rpb25hbBZfdG90YWxMb25nUG9zaXRpb25TaXplF190b3RhbFNob3J0UG9zaXRpb25TaXplAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrX2N1bXVsYXRpdmVOb3Rpb25hbAUYX2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX3Bvc2l0aW9uQ2xvc2VkRGF0ZQUIX2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwUAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhpJbnZhbGlkIHRvZ2dsZVBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBXByaWNlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEFGJhc2VBc3NldEFtb3VudFRvQWRkCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBXByaWNlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBDmNoYW5nZVNldHRpbmdzCRBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkAWkBCmluaXRpYWxpemUOB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQdfb3JhY2xlCl9vcmFjbGVLZXkMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZAMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0HBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzCQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQJAQ11cGRhdGVGdW5kaW5nBQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa19vcmEFB19vcmFjbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa19vcmFfa2V5BQpfb3JhY2xlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IFA25pbAFpARJzZXRJbml0TWFyZ2luUmF0aW8BEF9pbml0TWFyZ2luUmF0aW8DAwkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECJUludmFsaWQgc2V0SW5pdE1hcmdpblJhdGlvIHBhcmFtZXRlcnMJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQEQZnVuZGluZ1BlcmlvZFJhdwAJAQNmZWUACQELc3ByZWFkTGltaXQACQEObWF4UHJpY2VJbXBhY3QACQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEObWF4UHJpY2VTcHJlYWQAAWkBEGRlY3JlYXNlUG9zaXRpb24DB19hbW91bnQJX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEGcGF1c2VkAAkAAgECI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDAzNzMzMTM3NDgzCQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzczMzEzNzQ4MwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzNzMzMTM3NDgzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM3MzMxMzc0ODMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzczMzEzNzQ4MwJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzc2NTYzNzc3MgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDM3NjU2Mzc3NzICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzNzY1NjM3NzcyAl8yBA0kdDAzNzc3ODQwMzI3AwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAQNJHQwMzgxNTUzODM3NAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDM4MTU1MzgzNzQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzODE1NTM4Mzc0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzODE1NTM4Mzc0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzgxNTUzODM3NAJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzODE1NTM4Mzc0Al81BBhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAgEJAKwCAgkArAICCQCsAgICJVRvbyBsaXR0bGUgYmFzZSBhc3NldCBleGNoYW5nZWQsIGdvdCAJAKQDAQUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzAgogZXhwZWN0ZWQgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQEC3JlYWxpemVkUG5sCQEEZGl2ZAIJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDAzODgxMTM5MDU2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMzg4MTEzOTA1NgJfMQQHYmFkRGVidAgFDSR0MDM4ODExMzkwNTYCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwMzg4MTEzOTA1NgJfMwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUMb3Blbk5vdGlvbmFsBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQCdCgsFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDAzNzc3ODQwMzI3Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDM3Nzc4NDAzMjcCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzc3Nzg0MDMyNwJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDAzNzc3ODQwMzI3Al80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNzc3ODQwMzI3Al81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzc3Nzg0MDMyNwJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDM3Nzc4NDAzMjcCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMzc3Nzg0MDMyNwJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDM3Nzc4NDAzMjcCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMzc3Nzg0MDMyNwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDM3Nzc4NDAzMjcDXzExBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAkBA2ZlZQAEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDHJhd0ZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQECWZlZUFtb3VudAkAZQIFDHJhd0ZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDQxODU2NDE5OTYJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDQxODU2NDE5OTYCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNDE4NTY0MTk5NgJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0MTg1NjQxOTk2Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDQxODU2NDE5OTYCXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA0MjI4NTQ0ODUzAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNDI3MDk0MjkxNQkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDQyNzA5NDI5MTUCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0MjcwOTQyOTE1Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0MjcwOTQyOTE1Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNDI3MDk0MjkxNQJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA0MjcwOTQyOTE1Al81AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQJAQRkaXZkAgUMb3Blbk5vdGlvbmFsBQlfbGV2ZXJhZ2UEDSR0MDQzMjk2NDM1MzUJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQEDHJlbWFpbk1hcmdpbggFDSR0MDQzMjk2NDM1MzUCXzEEAngxCAUNJHQwNDMyOTY0MzUzNQJfMgQCeDIIBQ0kdDA0MzI5NjQzNTM1Al8zAwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAkAnQoLBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA0NDU0NjQ0NjYyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNDQ1NDY0NDY2MgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDQ0NTQ2NDQ2NjICXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA0MjI4NTQ0ODUzAl8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDQyMjg1NDQ4NTMCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDIyODU0NDg1MwJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA0MjI4NTQ0ODUzAl80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0MjI4NTQ0ODUzAl81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDIyODU0NDg1MwJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQyMjg1NDQ4NTMCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDIyODU0NDg1MwJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDQyMjg1NDQ4NTMCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNDIyODU0NDg1MwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDQyMjg1NDQ4NTMDXzExBAxmZWVUb1N0YWtlcnMJAGkCBQlmZWVBbW91bnQAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBQlmZWVBbW91bnQFDGZlZVRvU3Rha2VycwQFc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIObG9ja05ldXRyaW5vU1AJAMwIAgkApQgBCQEOc3Rha2luZ0FkZHJlc3MACQDMCAIFCEFMTF9GRUVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQMcmF3RmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQJAQNmZWUABA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAINYWNjZXB0UGF5bWVudAkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUMcmF3RmVlQW1vdW50BQtyZWZlcnJlckZlZQQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFDHJhd0ZlZUFtb3VudAQNJHQwNDY3NDY0Njg4NgkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNDY3NDY0Njg4NgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA0Njc0NjQ2ODg2Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQ2NzQ2NDY4ODYCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDY3NDY0Njg4NgJfNAQMZmVlVG9TdGFrZXJzCQBpAgUJZmVlQW1vdW50AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUJZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMEBXN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDmxvY2tOZXV0cmlub1NQCQDMCAIJAKUIAQkBDnN0YWtpbmdBZGRyZXNzAAkAzAgCBQhBTExfRkVFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgURb2xkUG9zaXRpb25NYXJnaW4FB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgEHX2Ftb3VudAMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDQ3OTExNDgwNjMJAQtnZXRQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0NzkxMTQ4MDYzAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ3OTExNDgwNjMCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDc5MTE0ODA2MwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0NzkxMTQ4MDYzAl80BAttYXJnaW5EZWx0YQkBAS0BBQdfYW1vdW50BA0kdDA0ODEwMDQ4Mjc5CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQttYXJnaW5EZWx0YQQMcmVtYWluTWFyZ2luCAUNJHQwNDgxMDA0ODI3OQJfMQQHYmFkRGVidAgFDSR0MDQ4MTAwNDgyNzkCXzIDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgUHX2Ftb3VudAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgAEBmNhbGxlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkEDWNhbGxlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQZjYWxsZXICDkludmFsaWQgY2FsbGVyAwMDCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNDk0ODI0OTg1OQkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFBmNhbGxlcgYEAngxCAUNJHQwNDk0ODI0OTg1OQJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNDk0ODI0OTg1OQJfMgQLcmVhbGl6ZWRQbmwIBQ0kdDA0OTQ4MjQ5ODU5Al8zBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDk0ODI0OTg1OQJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5NDgyNDk4NTkCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5NDgyNDk4NTkCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0OTQ4MjQ5ODU5Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQ5NDgyNDk4NTkCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0OTQ4MjQ5ODU5Al85BAJ4MggFDSR0MDQ5NDgyNDk4NTkDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDQ5NDgyNDk4NTkDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0OTQ4MjQ5ODU5A18xMgMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BA53aXRoZHJhd0Ftb3VudAkBA2FicwEFDW1hcmdpblRvVmF1bHQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNJHQwNTAwNjg1MDIxMAMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDWFtbU5ld0JhbGFuY2UIBQ0kdDA1MDA2ODUwMjEwAl8xBBBnZXRGcm9tSW5zdXJhbmNlCAUNJHQwNTAwNjg1MDIxMAJfMgQBeAMJAGYCBRBnZXRGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgUQZ2V0RnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIJAGUCBQ53aXRoZHJhd0Ftb3VudAUQZ2V0RnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFBmNhbGxlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUGY2FsbGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AgUNY2FsbGVyQWRkcmVzcwUOd2l0aGRyYXdBbW91bnQJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEC21hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQMDAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcEDSR0MDUyMjkwNTI0NDAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDUyMjkwNTI0NDACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTIyOTA1MjQ0MAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1MjI5MDUyNDQwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDUyMjkwNTI0NDACXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUyNjY1NTI3NjkJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDUyNjY1NTI3NjkCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA1MjY2NTUyNzY5Al8yBA0kdDA1Mjc3NzUzMDY3CQEJc3dhcElucHV0AgUFaXNBZGQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDUyNzc3NTMwNjcCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1Mjc3NzUzMDY3Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1Mjc3NzUzMDY3Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTI3Nzc1MzA2NwJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1Mjc3NzUzMDY3Al81BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUzMTc0NTM0MDcJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA1MzE3NDUzNDA3Al8xBAdiYWREZWJ0CAUNJHQwNTMxNzQ1MzQwNwJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA1MzE3NDUzNDA3Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBA5mZWVUb0luc3VyYW5jZQkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBBFuZXdQb3NpdGlvbk1hcmdpbgkAZQIFDHJlbWFpbk1hcmdpbgUSbGlxdWlkYXRpb25QZW5hbHR5BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDU0NTgwNTQ3MjMDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNTQ1ODA1NDcyMwJfMQQRdGFrZUZyb21JbnN1cmFuY2UIBQ0kdDA1NDU4MDU0NzIzAl8yBAF4AwkAZgIFEXRha2VGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BRF0YWtlRnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDU2MTc5NTY2MzQJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBwQCeDEIBQ0kdDA1NjE3OTU2NjM0Al8xBAdiYWREZWJ0CAUNJHQwNTYxNzk1NjYzNAJfMgQCeDIIBQ0kdDA1NjE3OTU2NjM0Al8zBAJ4MwgFDSR0MDU2MTc5NTY2MzQCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTYxNzk1NjYzNAJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTYxNzk1NjYzNAJfOQQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDU2MTc5NTY2MzQDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDU2MTc5NTY2MzQDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1NjE3OTU2NjM0A18xMgQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDU3MDQ2NTcxODkDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNTcwNDY1NzE4OQJfMQQRdGFrZUZyb21JbnN1cmFuY2UIBQ0kdDA1NzA0NjU3MTg5Al8yBAF4AwkAZgIFEXRha2VGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BRF0YWtlRnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDSR0MDU4Njg0NTg3NDYJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA1ODY4NDU4NzQ2Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNTg2ODQ1ODc0NgJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQFpAQ5mb3JjZU1vdmVBc3NldAIHX3RyYWRlcgdfYW1vdW50AwMJAQIhPQIJAKcIAQkBDmFkbWluUHVibGljS2V5AAgFAWkGY2FsbGVyBgkAZgIAAAUHX2Ftb3VudAkAAgECIUludmFsaWQgZm9yY2VNb3ZlQXNzZXQgcGFyYW1ldGVycwQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQdfYW1vdW50CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAQh3aXRoZHJhdwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB190cmFkZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRqdXN0UGVnAQZfcHJpY2UDAwkBAiE9AgkApwgBCQEOYWRtaW5QdWJsaWNLZXkACAUBaQZjYWxsZXIGCQBmAgAABQZfcHJpY2UJAAIBAhxJbnZhbGlkIGFkanVzdFBlZyBwYXJhbWV0ZXJzBA0kdDA1OTc0NjU5ODMyCQEQZ2V0UGVnQWRqdXN0Q29zdAEFBl9wcmljZQQUbmV3UXVvdGVBc3NldFJlc2VydmUIBQ0kdDA1OTc0NjU5ODMyAl8xBA1wZWdDaGFuZ2VDb3N0CAUNJHQwNTk3NDY1OTgzMgJfMgMJAAACBQ1wZWdDaGFuZ2VDb3N0AAAJAAIBAhFOb3RoaW5nIHRvIGFkanVzdAMJAGYCBQ1wZWdDaGFuZ2VDb3N0AAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgUNcGVnQ2hhbmdlQ29zdAUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBAVzdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg5sb2NrTmV1dHJpbm9TUAkAzAgCCQClCAEJAQ5zdGFraW5nQWRkcmVzcwAJAMwIAgUIQUxMX0ZFRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ1wZWdDaGFuZ2VDb3N0BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFDXBlZ0NoYW5nZUNvc3QJARF1cGRhdGVBbW1SZXNlcnZlcwIFFG5ld1F1b3RlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCCQEDYWJzAQUNcGVnQ2hhbmdlQ29zdAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQEDYWJzAQUNcGVnQ2hhbmdlQ29zdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UJAM4IAgkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkBCGNiYWxhbmNlAAkBA2FicwEFDXBlZ0NoYW5nZUNvc3QJARF1cGRhdGVBbW1SZXNlcnZlcwIFFG5ld1F1b3RlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQV2X2dldAEHX3RyYWRlcgQNJHQwNjEwNTc2MTExNwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDYxMDU3NjExMTcCXzEEAngyCAUNJHQwNjEwNTc2MTExNwJfMgQCeDMIBQ0kdDA2MTA1NzYxMTE3Al8zBAJ4NAgFDSR0MDYxMDU3NjExMTcCXzQJAAIBCQCsAgIJAKwCAgkArAICCQEBcwEFAngyCQEBcwEFAngzCQEBcwEFAng0CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBA0kdDA2MTI2NDYxMzc1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA2MTI2NDYxMzc1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDYxMjY0NjEzNzUCXzIEA3BvbggFDSR0MDYxMjY0NjEzNzUCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjEyNjQ2MTM3NQJfNAQNJHQwNjEzODA2MTQ4MQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjEzODA2MTQ4MQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDYxMzgwNjE0ODECXzIEDSR0MDYxNDg2NjE2NjgJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDYxNDg2NjE2NjgCXzEEB2JhZERlYnQIBQ0kdDA2MTQ4NjYxNjY4Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDYxNDg2NjE2NjgCXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQEY29zdAkBEGdldFBlZ0FkanVzdENvc3QBBQZfcHJpY2UJAAIBCQCkAwEIBQRjb3N0Al8yAWkBD3ZpZXdfZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDSR0MDYyMDU5NjIxMjEJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA2MjA1OTYyMTIxAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNjIwNTk2MjEyMQJfMgQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAOgg+lg==", "height": 2238744, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J68PxUYPz47WL64ij5ehnSXvWJfSUBa2YgGmV3WV9bud Next: 7rWVsYp68MHdRkwTSJofPtbk9x3zucckaQywP5rD5kTA Diff:
OldNewDifferences
597597 }
598598
599599
600-func ed (ee,ef,eg,eh,ei,ej,ek,el,em) = [IntegerEntry(n, ee), IntegerEntry(o, ef), IntegerEntry(p, eg), IntegerEntry(m, eh), IntegerEntry(l, ei), IntegerEntry(r, ej), IntegerEntry(s, ek), IntegerEntry(q, el), IntegerEntry(t, em)]
600+func ed () = {
601+ let ee = cz()
602+ let ef = dG()
603+ let eg = (ef - ee)
604+ if (if ((bp() == 0))
605+ then true
606+ else (bq() == 0))
607+ then $Tuple2(0, 0)
608+ else if ((0 > eg))
609+ then {
610+ let eh = ar(at(eg, bf()), al)
611+ let ei = ar(at(eh, bp()), bq())
612+ $Tuple2(eh, ei)
613+ }
614+ else {
615+ let ei = ar(at(eg, bf()), al)
616+ let eh = ar(at(ei, bq()), bp())
617+ $Tuple2(eh, ei)
618+ }
619+ }
601620
602621
603-func en (eo,ep,eq,er,es) = [IntegerEntry(B, eo), IntegerEntry(z, ep), IntegerEntry(A, eq), IntegerEntry(C, er), IntegerEntry(D, es)]
622+func ej (ek,el,em,en,eo,ep,eq,er,es) = [IntegerEntry(n, ek), IntegerEntry(o, el), IntegerEntry(p, em), IntegerEntry(m, en), IntegerEntry(l, eo), IntegerEntry(r, ep), IntegerEntry(s, eq), IntegerEntry(q, er), IntegerEntry(t, es)]
604623
605624
606-func et (ay,eu,ev,ew,cl) = [IntegerEntry(aw(e, ay), eu), IntegerEntry(aw(f, ay), ev), IntegerEntry(aw(g, ay), ew), IntegerEntry(aw(h, ay), cl)]
625+func et (eu,ev,ew,ex,ey) = [IntegerEntry(B, eu), IntegerEntry(z, ev), IntegerEntry(A, ew), IntegerEntry(C, ex), IntegerEntry(D, ey)]
607626
608627
609-func ex (ey) = {
628+func ez (ay,eA,eB,eC,cl) = [IntegerEntry(aw(e, ay), eA), IntegerEntry(aw(f, ay), eB), IntegerEntry(aw(g, ay), eC), IntegerEntry(aw(h, ay), cl)]
629+
630+
631+func eD (eE) = {
610632 let dH = ((lastBlock.timestamp / 1000) / 60)
611- let ez = valueOrElse(getInteger(this, v), 0)
612- if ((ez > dH))
633+ let eF = valueOrElse(getInteger(this, v), 0)
634+ if ((eF > dH))
613635 then throw("TWAP out-of-order")
614636 else {
615- let dP = if ((ez == 0))
637+ let dP = if ((eF == 0))
616638 then dH
617- else ez
618- if ((dH > ez))
639+ else eF
640+ if ((dH > eF))
619641 then {
620- let eA = valueOrElse(getInteger(this, ((w + "_") + toString(ez))), 0)
621- let eB = valueOrElse(getInteger(this, ((x + "_") + toString(ez))), ey)
622- let eC = (eA + ((dH - dP) * eB))
642+ let eG = valueOrElse(getInteger(this, ((w + "_") + toString(eF))), 0)
643+ let eH = valueOrElse(getInteger(this, ((x + "_") + toString(eF))), eE)
644+ let eI = (eG + ((dH - dP) * eH))
623645 let dK = aQ(aO(valueOrElse(getString(this, u), "")), ah, toString(dH))
624-[IntegerEntry(aw(w, toString(dH)), eC), IntegerEntry(aw(x, toString(dH)), ey), IntegerEntry(aw(y, toString(dH)), ez), IntegerEntry(v, dH), StringEntry(u, az(dK))]
646+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE), IntegerEntry(aw(y, toString(dH)), eF), IntegerEntry(v, dH), StringEntry(u, az(dK))]
625647 }
626648 else {
627- let eD = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
628- let eA = valueOrElse(getInteger(this, aw(w, toString(eD))), 0)
629- let eB = valueOrElse(getInteger(this, aw(x, toString(eD))), ey)
630- let eC = (eA + ((dH - eD) * eB))
631-[IntegerEntry(aw(w, toString(dH)), eC), IntegerEntry(aw(x, toString(dH)), ey)]
649+ let eJ = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
650+ let eG = valueOrElse(getInteger(this, aw(w, toString(eJ))), 0)
651+ let eH = valueOrElse(getInteger(this, aw(x, toString(eJ))), eE)
652+ let eI = (eG + ((dH - eJ) * eH))
653+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE)]
632654 }
633655 }
634656 }
635657
636658
637-func eE (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
659+func eK (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
638660
639661
640-func eF (bP,bQ,eG,eH,eI,eJ,eK) = if (((eJ - eK) != eG))
641- then throw(((((("Invalid AMM state data: " + toString(eJ)) + " + ") + toString(eK)) + " != ") + toString(eG)))
642- else ((eE(bP, bQ) ++ [IntegerEntry(G, eG), IntegerEntry(J, eH), IntegerEntry(K, eI), IntegerEntry(H, eJ), IntegerEntry(I, eK)]) ++ ex(ar(bP, bQ)))
662+func eL (bP,bQ,eM,eN,eO,eP,eQ) = if (((eP - eQ) != eM))
663+ then throw(((((("Invalid AMM state data: " + toString(eP)) + " + ") + toString(eQ)) + " != ") + toString(eM)))
664+ else ((eK(bP, bQ) ++ [IntegerEntry(G, eM), IntegerEntry(J, eN), IntegerEntry(K, eO), IntegerEntry(H, eP), IntegerEntry(I, eQ)]) ++ eD(ar(bP, bQ)))
643665
644666
645-func eL (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
667+func eR (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
646668
647669
648-func eM (ay,eN) = {
649- let eO = assetBalance(this, Y())
650- if ((eN > eO))
651- then throw(((("Unable to withdraw " + toString(eN)) + " from contract balance ") + toString(eO)))
652- else [ScriptTransfer(ay, eN, Y())]
670+func eS (ay,eT) = {
671+ let eU = assetBalance(this, Y())
672+ if ((eT > eU))
673+ then throw(((("Unable to withdraw " + toString(eT)) + " from contract balance ") + toString(eU)))
674+ else [ScriptTransfer(ay, eT, Y())]
653675 }
654676
655677
656-func eP (bs) = if ((0 > bs))
678+func eV (bs) = if ((0 > bs))
657679 then throw("Balance")
658680 else [IntegerEntry(d, bs)]
659681
660682
661-func eQ (bs) = [ScriptTransfer(aa(), bs, Y())]
683+func eW (bs) = [ScriptTransfer(aa(), bs, Y())]
662684
663685
664686 @Callable(bs)
683705 else {
684706 let bP = aY()
685707 let bQ = aZ()
686- let ey = ar(bP, bQ)
687- let eR = ar(bK, ey)
688- let eS = (bP + bK)
689- let eT = (bQ + eR)
690- eE(eS, eT)
708+ let eE = ar(bP, bQ)
709+ let eX = ar(bK, eE)
710+ let eY = (bP + bK)
711+ let eZ = (bQ + eX)
712+ eK(eY, eZ)
691713 }
692714
693715
700722 else {
701723 let bP = aY()
702724 let bQ = aZ()
703- let ey = ar(bP, bQ)
704- let eU = ar(bK, ey)
705- let eS = (bP - bK)
706- let eT = (bQ - eU)
707- eE(eS, eT)
725+ let eE = ar(bP, bQ)
726+ let fa = ar(bK, eE)
727+ let eY = (bP - bK)
728+ let eZ = (bQ - fa)
729+ eK(eY, eZ)
708730 }
709731
710732
711733
712734 @Callable(bs)
713-func changeSettings (ee,ef,eg,eh,ei,ej,ek,el,em) = if ((bs.caller != W()))
735+func changeSettings (ek,el,em,en,eo,ep,eq,er,es) = if ((bs.caller != W()))
714736 then throw("Invalid changeSettings params")
715- else ed(ee, ef, eg, eh, ei, ej, ek, el, em)
737+ else ej(ek, el, em, en, eo, ep, eq, er, es)
716738
717739
718740
719741 @Callable(bs)
720-func initialize (bP,bQ,eh,ee,ef,eg,ei,eV,eW,eX,ej,ek,el,em) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
742+func initialize (bP,bQ,en,ek,el,em,eo,fb,fc,fd,ep,eq,er,es) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
721743 then true
722744 else (0 >= bQ))
723745 then true
724- else (0 >= eh))
725- then true
726- else (0 >= ee))
727- then true
728- else (0 >= ef))
729- then true
730- else (0 >= eg))
731- then true
732- else (0 >= ei))
733- then true
734- else (0 >= ej))
746+ else (0 >= en))
735747 then true
736748 else (0 >= ek))
737749 then true
739751 then true
740752 else (0 >= em))
741753 then true
754+ else (0 >= eo))
755+ then true
756+ else (0 >= ep))
757+ then true
758+ else (0 >= eq))
759+ then true
760+ else (0 >= er))
761+ then true
762+ else (0 >= es))
763+ then true
742764 else bG())
743765 then throw("Invalid initialize parameters")
744- else ((((eF(bP, bQ, 0, 0, 0, 0, 0) ++ ed(ee, ef, eg, eh, ei, ej, ek, el, em)) ++ en((lastBlock.timestamp + eh), 0, 0, 0, 0)) ++ eP(0)) ++ [BooleanEntry(j, true), StringEntry(c, eV), StringEntry(a, eW), StringEntry(L, eX)])
766+ else ((((eL(bP, bQ, 0, 0, 0, 0, 0) ++ ej(ek, el, em, en, eo, ep, eq, er, es)) ++ et((lastBlock.timestamp + en), 0, 0, 0, 0)) ++ eV(0)) ++ [BooleanEntry(j, true), StringEntry(c, fb), StringEntry(a, fc), StringEntry(L, fd)])
745767
746768
747769
748770 @Callable(bs)
749-func setInitMarginRatio (ee) = if (if ((0 >= ee))
771+func setInitMarginRatio (ek) = if (if ((0 >= ek))
750772 then true
751773 else !(bG()))
752774 then throw("Invalid setInitMarginRatio parameters")
753- else ed(ee, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
775+ else ej(ek, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
754776
755777
756778
757779 @Callable(bs)
758-func decreasePosition (eN,eY,eZ) = if (if (if (if (if ((0 >= eN))
780+func decreasePosition (eT,fe,ff) = if (if (if (if (if ((0 >= eT))
759781 then true
760782 else !(bG()))
761783 then true
762- else !(bt(ar(ak, eY), aX(), true)))
784+ else !(bt(ar(ak, fe), aX(), true)))
763785 then true
764786 else !(bF(toString(bs.caller))))
765787 then true
766788 else bH())
767789 then throw("Invalid decreasePosition parameters")
768790 else {
769- let fa = bA(toString(bs.caller))
770- let fb = fa._1
771- let fc = fa._2
772- let fd = fa._3
773- let fe = fa._4
774- let ff = if ((fb > 0))
791+ let fg = bA(toString(bs.caller))
792+ let fh = fg._1
793+ let fi = fg._2
794+ let fj = fg._3
795+ let fk = fg._4
796+ let fl = if ((fh > 0))
775797 then ag
776798 else af
777- let fg = (ff == af)
778- let fh = at(eN, eY)
779- let fi = cZ(toString(bs.caller), an)
780- let fj = fi._1
781- let cY = fi._2
782- let fk = if ((fj > fh))
799+ let fm = (fl == af)
800+ let fn = at(eT, fe)
801+ let fo = cZ(toString(bs.caller), an)
802+ let fp = fo._1
803+ let cY = fo._2
804+ let fq = if ((fp > fn))
783805 then {
784- let fl = bO(fg, fh)
785- let dt = fl._1
786- let bR = fl._2
787- let bS = fl._3
788- let dB = fl._4
789- let dC = fl._5
790- let fm = au(dt)
791- if (if ((eZ != 0))
792- then (eZ > fm)
806+ let fr = bO(fm, fn)
807+ let dt = fr._1
808+ let bR = fr._2
809+ let bS = fr._3
810+ let dB = fr._4
811+ let dC = fr._5
812+ let fs = au(dt)
813+ if (if ((ff != 0))
814+ then (ff > fs)
793815 else false)
794- then throw(((("Too little base asset exchanged, got " + toString(fm)) + " expected ") + toString(eZ)))
816+ then throw(((("Too little base asset exchanged, got " + toString(fs)) + " expected ") + toString(ff)))
795817 else {
796- let dy = ar(at(cY, fm), au(fb))
797- let fn = cf(fb, fc, fe, dy)
798- let co = fn._1
799- let cp = fn._2
800- let ck = fn._3
801- let du = fh
802- let fo = (cY - dy)
803- let fp = if ((fb > 0))
804- then ((fj - du) - fo)
805- else ((fo + fj) - du)
806- let fq = (fb + dt)
807- $Tuple11(fq, co, au(fp), by(fq), bS, bR, dB, dC, (bc() - fh), (bq() - (if ((fq > 0))
818+ let dy = ar(at(cY, fs), au(fh))
819+ let ft = cf(fh, fi, fk, dy)
820+ let co = ft._1
821+ let cp = ft._2
822+ let ck = ft._3
823+ let du = fn
824+ let fu = (cY - dy)
825+ let fv = if ((fh > 0))
826+ then ((fp - du) - fu)
827+ else ((fu + fp) - du)
828+ let fw = (fh + dt)
829+ $Tuple11(fw, co, au(fv), by(fw), bS, bR, dB, dC, (bc() - fn), (bq() - (if ((fw > 0))
808830 then au(dt)
809- else 0)), (bp() - (if ((0 > fq))
831+ else 0)), (bp() - (if ((0 > fw))
810832 then au(dt)
811833 else 0)))
812834 }
813835 }
814836 else throw("Close position first")
815- let fq = fk._1
816- let fr = fk._2
817- let fs = fk._3
818- let ft = fk._4
819- let bS = fk._5
820- let bR = fk._6
821- let dB = fk._7
822- let dC = fk._8
823- let dF = fk._9
824- let dD = fk._10
825- let dE = fk._11
826- let fu = invoke(ac(), "notifyNotional", [toString(bs.caller), fs], nil)
827- if ((fu == fu))
828- then (et(toString(bs.caller), fq, fr, fs, ft) ++ eF(bR, bS, dB, dC, dF, dD, dE))
837+ let fw = fq._1
838+ let fx = fq._2
839+ let fy = fq._3
840+ let fz = fq._4
841+ let bS = fq._5
842+ let bR = fq._6
843+ let dB = fq._7
844+ let dC = fq._8
845+ let dF = fq._9
846+ let dD = fq._10
847+ let dE = fq._11
848+ let fA = invoke(ac(), "notifyNotional", [toString(bs.caller), fy], nil)
849+ if ((fA == fA))
850+ then (ez(toString(bs.caller), fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE))
829851 else throw("Strict value is not equal to itself.")
830852 }
831853
832854
833855
834856 @Callable(bs)
835-func increasePosition (ff,eY,eZ,fv) = {
836- let fw = bs.payments[0].amount
837- if (if (if (if (if (if (if ((ff != af))
838- then (ff != ag)
857+func increasePosition (fl,fe,ff,fB) = {
858+ let fC = bs.payments[0].amount
859+ if (if (if (if (if (if (if ((fl != af))
860+ then (fl != ag)
839861 else false)
840862 then true
841- else (0 >= fw))
863+ else (0 >= fC))
842864 then true
843865 else !(bG()))
844866 then true
845867 else (bs.payments[0].assetId != Y()))
846868 then true
847- else !(bt(ar(ak, eY), aX(), true)))
869+ else !(bt(ar(ak, fe), aX(), true)))
848870 then true
849871 else bH())
850872 then throw("Invalid increasePosition parameters")
851873 else {
852874 let bB = toString(bs.caller)
853- let fx = at(fw, aW())
854- let fy = invoke(ae(), "acceptPaymentWithLink", [bB, fv], [AttachedPayment(Y(), fx)])
855- if ((fy == fy))
875+ let fD = at(fC, aW())
876+ let fE = invoke(ae(), "acceptPaymentWithLink", [bB, fB], [AttachedPayment(Y(), fD)])
877+ if ((fE == fE))
856878 then {
857- let fz = {
858- let bD = fy
879+ let fF = {
880+ let bD = fE
859881 if ($isInstanceOf(bD, "Int"))
860882 then {
861- let fA = bD
862- fA
883+ let fG = bD
884+ fG
863885 }
864886 else throw("Invalid referrerFee")
865887 }
866- let eN = (fw - fx)
867- let fB = (fx - fz)
868- let fC = bA(bB)
869- let fb = fC._1
870- let fc = fC._2
871- let fd = fC._3
872- let fe = fC._4
873- let fD = (fb == 0)
874- let fE = if ((fb > 0))
875- then (ff == af)
876- else (ff == ag)
877- let fF = if (!(fD))
878- then fE
888+ let eT = (fC - fD)
889+ let fH = (fD - fF)
890+ let fI = bA(bB)
891+ let fh = fI._1
892+ let fi = fI._2
893+ let fj = fI._3
894+ let fk = fI._4
895+ let fJ = (fh == 0)
896+ let fK = if ((fh > 0))
897+ then (fl == af)
898+ else (fl == ag)
899+ let fL = if (!(fJ))
900+ then fK
879901 else false
880- let fg = (ff == af)
881- let fG = if (if (fD)
902+ let fm = (fl == af)
903+ let fM = if (if (fJ)
882904 then true
883- else fF)
905+ else fL)
884906 then {
885- let fh = at(eN, eY)
886- let fH = bO(fg, fh)
887- let bU = fH._1
888- let bR = fH._2
889- let bS = fH._3
890- let dB = fH._4
891- let dC = fH._5
892- if (if ((eZ != 0))
893- then (eZ > au(bU))
907+ let fn = at(eT, fe)
908+ let fN = bO(fm, fn)
909+ let bU = fN._1
910+ let bR = fN._2
911+ let bS = fN._3
912+ let dB = fN._4
913+ let dC = fN._5
914+ if (if ((ff != 0))
915+ then (ff > au(bU))
894916 else false)
895- then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(eZ)))
917+ then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(ff)))
896918 else {
897- let fq = (fb + bU)
898- let fI = ar(fh, eY)
899- let fJ = cf(fb, fc, fe, fI)
900- let co = fJ._1
901- let cT = fJ._2
902- let cU = fJ._3
919+ let fw = (fh + bU)
920+ let fO = ar(fn, fe)
921+ let fP = cf(fh, fi, fk, fO)
922+ let co = fP._1
923+ let cT = fP._2
924+ let cU = fP._3
903925 if (!(cE(bR, bS)))
904926 then throw("Over max spread limit")
905- else $Tuple11(fq, co, (fd + fh), by(fq), bS, bR, dB, dC, (bc() + fh), (bq() + (if ((fq > 0))
927+ else $Tuple11(fw, co, (fj + fn), by(fw), bS, bR, dB, dC, (bc() + fn), (bq() + (if ((fw > 0))
906928 then au(bU)
907- else 0)), (bp() + (if ((0 > fq))
929+ else 0)), (bp() + (if ((0 > fw))
908930 then au(bU)
909931 else 0)))
910932 }
911933 }
912934 else {
913- let fh = at(eN, eY)
914- let fK = cZ(toString(bs.caller), an)
915- let fj = fK._1
916- let cY = fK._2
917- if ((fj > fh))
935+ let fn = at(eT, fe)
936+ let fQ = cZ(toString(bs.caller), an)
937+ let fp = fQ._1
938+ let cY = fQ._2
939+ if ((fp > fn))
918940 then throw("Use decreasePosition to decrease position size")
919941 else throw("Close position first")
920942 }
921- let fq = fG._1
922- let fr = fG._2
923- let fs = fG._3
924- let ft = fG._4
925- let bS = fG._5
926- let bR = fG._6
927- let dB = fG._7
928- let dC = fG._8
929- let dF = fG._9
930- let dD = fG._10
931- let dE = fG._11
932- let fL = (fB / 2)
933- let fM = (fB - fL)
934- let fN = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eN)])
935- if ((fN == fN))
943+ let fw = fM._1
944+ let fx = fM._2
945+ let fy = fM._3
946+ let fz = fM._4
947+ let bS = fM._5
948+ let bR = fM._6
949+ let dB = fM._7
950+ let dC = fM._8
951+ let dF = fM._9
952+ let dD = fM._10
953+ let dE = fM._11
954+ let fR = (fH / 2)
955+ let fS = (fH - fR)
956+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
957+ if ((fT == fT))
936958 then {
937- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
938- if ((fO == fO))
959+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
960+ if ((fU == fU))
939961 then {
940- let fP = invoke(ac(), "notifyFees", [bB, fB], nil)
941- if ((fP == fP))
962+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
963+ if ((fV == fV))
942964 then {
943- let fu = invoke(ac(), "notifyNotional", [bB, fs], nil)
944- if ((fu == fu))
945- then (((et(bB, fq, fr, fs, ft) ++ eF(bR, bS, dB, dC, dF, dD, dE)) ++ eQ(fL)) ++ eP((aV() + eN)))
965+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
966+ if ((fA == fA))
967+ then (((ez(bB, fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eW(fR)) ++ eV((aV() + eT)))
946968 else throw("Strict value is not equal to itself.")
947969 }
948970 else throw("Strict value is not equal to itself.")
959981
960982 @Callable(bs)
961983 func addMargin () = {
962- let fw = bs.payments[0].amount
984+ let fC = bs.payments[0].amount
963985 if (if (if (if ((bs.payments[0].assetId != Y()))
964986 then true
965987 else !(bF(toString(bs.caller))))
970992 then throw("Invalid addMargin parameters")
971993 else {
972994 let bB = toString(bs.caller)
973- let fx = at(fw, aW())
974- let fy = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fx)])
975- if ((fy == fy))
995+ let fD = at(fC, aW())
996+ let fE = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fD)])
997+ if ((fE == fE))
976998 then {
977- let fz = {
978- let bD = fy
999+ let fF = {
1000+ let bD = fE
9791001 if ($isInstanceOf(bD, "Int"))
9801002 then {
981- let fA = bD
982- fA
1003+ let fG = bD
1004+ fG
9831005 }
9841006 else throw("Invalid referrerFee")
9851007 }
986- let fB = (fx - fz)
987- let eN = (fw - fx)
988- let fQ = bA(bB)
989- let fb = fQ._1
990- let fc = fQ._2
991- let fd = fQ._3
992- let fe = fQ._4
993- let fL = (fB / 2)
994- let fM = (fB - fL)
995- let fN = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eN)])
996- if ((fN == fN))
1008+ let fH = (fD - fF)
1009+ let eT = (fC - fD)
1010+ let fW = bA(bB)
1011+ let fh = fW._1
1012+ let fi = fW._2
1013+ let fj = fW._3
1014+ let fk = fW._4
1015+ let fR = (fH / 2)
1016+ let fS = (fH - fR)
1017+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
1018+ if ((fT == fT))
9971019 then {
998- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
999- if ((fO == fO))
1020+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1021+ if ((fU == fU))
10001022 then {
1001- let fP = invoke(ac(), "notifyFees", [bB, fB], nil)
1002- if ((fP == fP))
1003- then ((et(bB, fb, (fc + eN), fd, fe) ++ eQ(fL)) ++ eP((aV() + eN)))
1023+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
1024+ if ((fV == fV))
1025+ then ((ez(bB, fh, (fi + eT), fj, fk) ++ eW(fR)) ++ eV((aV() + eT)))
10041026 else throw("Strict value is not equal to itself.")
10051027 }
10061028 else throw("Strict value is not equal to itself.")
10141036
10151037
10161038 @Callable(bs)
1017-func removeMargin (eN) = if (if (if (if ((0 >= eN))
1039+func removeMargin (eT) = if (if (if (if ((0 >= eT))
10181040 then true
10191041 else !(bF(toString(bs.caller))))
10201042 then true
10231045 else bH())
10241046 then throw("Invalid removeMargin parameters")
10251047 else {
1026- let fR = bA(toString(bs.caller))
1027- let fb = fR._1
1028- let fc = fR._2
1029- let fd = fR._3
1030- let fe = fR._4
1031- let fS = -(eN)
1032- let fT = cf(fb, fc, fe, fS)
1033- let co = fT._1
1034- let cp = fT._2
1048+ let fX = bA(toString(bs.caller))
1049+ let fh = fX._1
1050+ let fi = fX._2
1051+ let fj = fX._3
1052+ let fk = fX._4
1053+ let fY = -(eT)
1054+ let fZ = cf(fh, fi, fk, fY)
1055+ let co = fZ._1
1056+ let cp = fZ._2
10351057 if ((cp != 0))
10361058 then throw("Invalid removed margin amount")
10371059 else {
1038- let fU = de(co, cp, fd)
1039- if (!(bt(fU, aX(), true)))
1040- then throw(((("Too much margin removed: " + toString(fU)) + " < ") + toString(aX())))
1060+ let ga = de(co, cp, fj)
1061+ if (!(bt(ga, aX(), true)))
1062+ then throw(((("Too much margin removed: " + toString(ga)) + " < ") + toString(aX())))
10411063 else {
1042- let fV = invoke(Z(), "unlockNeutrino", [eN, toBase58String(Y())], nil)
1043- if ((fV == fV))
1044- then ((et(toString(bs.caller), fb, co, fd, by(fb)) ++ eM(bs.caller, eN)) ++ eP((aV() - eN)))
1064+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1065+ if ((gb == gb))
1066+ then ((ez(toString(bs.caller), fh, co, fj, by(fh)) ++ eS(bs.caller, eT)) ++ eV((aV() - eT)))
10451067 else throw("Strict value is not equal to itself.")
10461068 }
10471069 }
10511073
10521074 @Callable(bs)
10531075 func closePosition () = {
1054- let fW = br(bs)
1055- let fX = valueOrErrorMessage(addressFromString(fW), "Invalid caller")
1056- if (if (if (!(bF(fW)))
1076+ let gc = br(bs)
1077+ let gd = valueOrErrorMessage(addressFromString(gc), "Invalid caller")
1078+ if (if (if (!(bF(gc)))
10571079 then true
10581080 else !(bG()))
10591081 then true
10601082 else bH())
10611083 then throw("Invalid closePosition parameters")
10621084 else {
1063- let fY = dv(fW, true)
1064- let cT = fY._1
1065- let fZ = fY._2
1066- let dy = fY._3
1067- let dz = fY._4
1068- let bR = fY._5
1069- let bS = fY._6
1070- let dB = fY._7
1071- let dC = fY._8
1072- let dF = fY._9
1073- let cU = fY._10
1074- let dD = fY._11
1075- let dE = fY._12
1076- if ((fZ > 0))
1085+ let ge = dv(gc, true)
1086+ let cT = ge._1
1087+ let gf = ge._2
1088+ let dy = ge._3
1089+ let dz = ge._4
1090+ let bR = ge._5
1091+ let bS = ge._6
1092+ let dB = ge._7
1093+ let dC = ge._8
1094+ let dF = ge._9
1095+ let cU = ge._10
1096+ let dD = ge._11
1097+ let dE = ge._12
1098+ if ((gf > 0))
10771099 then throw("Unable to close position with bad debt")
10781100 else {
1079- let ga = au(dz)
1080- let gb = (aV() - ga)
1081- let gc = if ((0 > gb))
1082- then $Tuple2(0, au(gb))
1083- else $Tuple2(gb, 0)
1084- let gd = gc._1
1085- let ge = gc._2
1086- let fA = if ((ge > 0))
1101+ let gg = au(dz)
1102+ let gh = (aV() - gg)
1103+ let gi = if ((0 > gh))
1104+ then $Tuple2(0, au(gh))
1105+ else $Tuple2(gh, 0)
1106+ let gj = gi._1
1107+ let gk = gi._2
1108+ let fG = if ((gk > 0))
10871109 then {
1088- let gf = invoke(ab(), "withdraw", [ge], nil)
1089- if ((gf == gf))
1110+ let gl = invoke(ab(), "withdraw", [gk], nil)
1111+ if ((gl == gl))
10901112 then nil
10911113 else throw("Strict value is not equal to itself.")
10921114 }
10931115 else nil
1094- if ((fA == fA))
1116+ if ((fG == fG))
10951117 then {
1096- let fV = invoke(Z(), "unlockNeutrino", [(ga - ge), toBase58String(Y())], nil)
1097- if ((fV == fV))
1118+ let gb = invoke(Z(), "unlockNeutrino", [(gg - gk), toBase58String(Y())], nil)
1119+ if ((gb == gb))
10981120 then {
1099- let fu = invoke(ac(), "notifyNotional", [fW, 0], nil)
1100- if ((fu == fu))
1101- then (((eL(fW) ++ eF(bR, bS, dB, dC, dF, dD, dE)) ++ eM(fX, ga)) ++ eP(gd))
1121+ let fA = invoke(ac(), "notifyNotional", [gc, 0], nil)
1122+ if ((fA == fA))
1123+ then (((eR(gc) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(gd, gg)) ++ eV(gj))
11021124 else throw("Strict value is not equal to itself.")
11031125 }
11041126 else throw("Strict value is not equal to itself.")
11121134
11131135 @Callable(bs)
11141136 func liquidate (bB) = {
1115- let gg = di(bB, an)
1116- let fU = if (cK())
1137+ let gm = di(bB, an)
1138+ let ga = if (cK())
11171139 then {
1118- let gh = di(bB, ao)
1119- av(gg, gh)
1140+ let gn = di(bB, ao)
1141+ av(gm, gn)
11201142 }
1121- else gg
1122- if (if (if (if (!(bt(fU, bh(), false)))
1143+ else gm
1144+ if (if (if (if (!(bt(ga, bh(), false)))
11231145 then true
11241146 else !(bF(bB)))
11251147 then true
11271149 then true
11281150 else bH())
11291151 then throw("Unable to liquidate")
1130- else if (if (if ((gg > bi()))
1152+ else if (if (if ((gm > bi()))
11311153 then (bj() > 0)
11321154 else false)
11331155 then (ak > bj())
11341156 else false)
11351157 then {
1136- let gi = bA(bB)
1137- let fb = gi._1
1138- let fc = gi._2
1139- let fd = gi._3
1140- let fe = gi._4
1141- let ff = if ((fb > 0))
1158+ let go = bA(bB)
1159+ let fh = go._1
1160+ let fi = go._2
1161+ let fj = go._3
1162+ let fk = go._4
1163+ let fl = if ((fh > 0))
11421164 then ag
11431165 else af
1144- let fg = (ff == af)
1145- let du = do(bB, fb)
1146- let gj = cZ(bB, an)
1147- let fj = gj._1
1148- let cY = gj._2
1149- let gk = bO(fg, du)
1150- let dt = gk._1
1151- let bR = gk._2
1152- let bS = gk._3
1153- let dB = gk._4
1154- let dC = gk._5
1155- let dy = ar(at(cY, au(dt)), au(fb))
1156- let gl = cf(fb, fc, fe, dy)
1157- let co = gl._1
1158- let cp = gl._2
1159- let ck = gl._3
1160- let fo = (cY - dy)
1161- let fp = if ((fb > 0))
1162- then ((fj - du) - fo)
1163- else ((fo + fj) - du)
1164- let gm = at(du, bi())
1165- let gn = (gm / 2)
1166- let fM = (gm - gn)
1167- let go = (co - gm)
1168- let fq = (fb + dt)
1169- let fs = au(fp)
1170- let gp = by(fq)
1166+ let fm = (fl == af)
1167+ let du = do(bB, fh)
1168+ let gp = cZ(bB, an)
1169+ let fp = gp._1
1170+ let cY = gp._2
1171+ let gq = bO(fm, du)
1172+ let dt = gq._1
1173+ let bR = gq._2
1174+ let bS = gq._3
1175+ let dB = gq._4
1176+ let dC = gq._5
1177+ let dy = ar(at(cY, au(dt)), au(fh))
1178+ let gr = cf(fh, fi, fk, dy)
1179+ let co = gr._1
1180+ let cp = gr._2
1181+ let ck = gr._3
1182+ let fu = (cY - dy)
1183+ let fv = if ((fh > 0))
1184+ then ((fp - du) - fu)
1185+ else ((fu + fp) - du)
1186+ let gs = at(du, bi())
1187+ let gt = (gs / 2)
1188+ let fS = (gs - gt)
1189+ let gu = (co - gs)
1190+ let fw = (fh + dt)
1191+ let fy = au(fv)
1192+ let gv = by(fw)
11711193 let dF = (bc() - du)
1172- let gb = (aV() - gm)
1173- let gq = if ((0 > gb))
1174- then $Tuple2(0, au(gb))
1175- else $Tuple2(gb, 0)
1176- let gr = gq._1
1177- let gs = gq._2
1178- let fA = if ((gs > 0))
1194+ let gh = (aV() - gs)
1195+ let gw = if ((0 > gh))
1196+ then $Tuple2(0, au(gh))
1197+ else $Tuple2(gh, 0)
1198+ let gx = gw._1
1199+ let gy = gw._2
1200+ let fG = if ((gy > 0))
11791201 then {
1180- let gf = invoke(ab(), "withdraw", [gs], nil)
1181- if ((gf == gf))
1202+ let gl = invoke(ab(), "withdraw", [gy], nil)
1203+ if ((gl == gl))
11821204 then nil
11831205 else throw("Strict value is not equal to itself.")
11841206 }
11851207 else nil
1186- if ((fA == fA))
1208+ if ((fG == fG))
11871209 then {
1188- let fV = invoke(Z(), "unlockNeutrino", [(gm - gs), toBase58String(Y())], nil)
1189- if ((fV == fV))
1210+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1211+ if ((gb == gb))
11901212 then {
1191- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
1192- if ((fO == fO))
1213+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1214+ if ((fU == fU))
11931215 then {
1194- let fu = invoke(ac(), "notifyNotional", [bB, fs], nil)
1195- if ((fu == fu))
1196- then (((et(bB, fq, go, fs, gp) ++ eF(bR, bS, dB, dC, dF, (bq() - (if ((fq > 0))
1216+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
1217+ if ((fA == fA))
1218+ then (((ez(bB, fw, gu, fy, gv) ++ eL(bR, bS, dB, dC, dF, (bq() - (if ((fw > 0))
11971219 then au(dt)
1198- else 0)), (bp() - (if ((0 > fq))
1220+ else 0)), (bp() - (if ((0 > fw))
11991221 then au(dt)
1200- else 0)))) ++ eM(bs.caller, gn)) ++ eP(gr))
1222+ else 0)))) ++ eS(bs.caller, gt)) ++ eV(gx))
12011223 else throw("Strict value is not equal to itself.")
12021224 }
12031225 else throw("Strict value is not equal to itself.")
12071229 else throw("Strict value is not equal to itself.")
12081230 }
12091231 else {
1210- let gt = dv(bB, false)
1211- let cT = gt._1
1212- let cp = gt._2
1213- let cU = gt._3
1214- let cV = gt._4
1215- let bR = gt._5
1216- let bS = gt._6
1217- let dB = gt._7
1218- let dC = gt._8
1219- let dF = gt._9
1220- let du = gt._10
1221- let dD = gt._11
1222- let dE = gt._12
1223- let gm = at(du, bi())
1224- let gn = (gm / 2)
1225- let fM = (gm - gn)
1226- let gb = (aV() - gm)
1227- let gu = if ((0 > gb))
1228- then $Tuple2(0, au(gb))
1229- else $Tuple2(gb, 0)
1230- let gr = gu._1
1231- let gs = gu._2
1232- let fA = if ((gs > 0))
1232+ let gz = dv(bB, false)
1233+ let cT = gz._1
1234+ let cp = gz._2
1235+ let cU = gz._3
1236+ let cV = gz._4
1237+ let bR = gz._5
1238+ let bS = gz._6
1239+ let dB = gz._7
1240+ let dC = gz._8
1241+ let dF = gz._9
1242+ let du = gz._10
1243+ let dD = gz._11
1244+ let dE = gz._12
1245+ let gs = at(du, bi())
1246+ let gt = (gs / 2)
1247+ let fS = (gs - gt)
1248+ let gh = (aV() - gs)
1249+ let gA = if ((0 > gh))
1250+ then $Tuple2(0, au(gh))
1251+ else $Tuple2(gh, 0)
1252+ let gx = gA._1
1253+ let gy = gA._2
1254+ let fG = if ((gy > 0))
12331255 then {
1234- let gf = invoke(ab(), "withdraw", [gs], nil)
1235- if ((gf == gf))
1256+ let gl = invoke(ab(), "withdraw", [gy], nil)
1257+ if ((gl == gl))
12361258 then nil
12371259 else throw("Strict value is not equal to itself.")
12381260 }
12391261 else nil
1240- if ((fA == fA))
1262+ if ((fG == fG))
12411263 then {
1242- let fV = invoke(Z(), "unlockNeutrino", [(gm - gs), toBase58String(Y())], nil)
1243- if ((fV == fV))
1264+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1265+ if ((gb == gb))
12441266 then {
1245- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
1246- if ((fO == fO))
1267+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1268+ if ((fU == fU))
12471269 then {
1248- let fu = invoke(ac(), "notifyNotional", [bB, 0], nil)
1249- if ((fu == fu))
1250- then (((eL(bB) ++ eF(bR, bS, dB, dC, dF, dD, dE)) ++ eM(bs.caller, gn)) ++ eP(gr))
1270+ let fA = invoke(ac(), "notifyNotional", [bB, 0], nil)
1271+ if ((fA == fA))
1272+ then (((eR(bB) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(bs.caller, gt)) ++ eV(gx))
12511273 else throw("Strict value is not equal to itself.")
12521274 }
12531275 else throw("Strict value is not equal to itself.")
12621284
12631285 @Callable(bs)
12641286 func payFunding () = {
1265- let gv = bd()
1266- if (if (if ((gv > lastBlock.timestamp))
1287+ let gB = bd()
1288+ if (if (if ((gB > lastBlock.timestamp))
12671289 then true
12681290 else !(bG()))
12691291 then true
12701292 else bH())
1271- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gv)))
1293+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gB)))
12721294 else {
1273- let gw = cz()
1274- let gx = dG()
1275- let gy = (gx - gw)
1276- let gz = if (if ((bp() == 0))
1277- then true
1278- else (bq() == 0))
1279- then $Tuple2(0, 0)
1280- else if ((0 > gy))
1281- then {
1282- let gA = ar(at(gy, bf()), al)
1283- let gB = ar(at(gA, bp()), bq())
1284- $Tuple2(gA, gB)
1285- }
1286- else {
1287- let gB = ar(at(gy, bf()), al)
1288- let gA = ar(at(gB, bq()), bp())
1289- $Tuple2(gA, gB)
1290- }
1291- let gA = gz._1
1292- let gB = gz._2
1293- en((gv + bg()), (bn() + gB), (bo() + gA), ar(gB, gw), ar(gA, gw))
1295+ let ee = cz()
1296+ let gC = ed()
1297+ let eh = gC._1
1298+ let ei = gC._2
1299+ et((gB + bg()), (bn() + ei), (bo() + eh), ar(ei, ee), ar(eh, ee))
12941300 }
12951301 }
12961302
12971303
12981304
12991305 @Callable(bs)
1300-func forceMoveAsset (bB,eN) = if (if ((addressFromPublicKey(X()) != bs.caller))
1306+func forceMoveAsset (bB,eT) = if (if ((addressFromPublicKey(X()) != bs.caller))
13011307 then true
1302- else (0 > eN))
1308+ else (0 > eT))
13031309 then throw("Invalid forceMoveAsset parameters")
13041310 else {
1305- let fV = invoke(Z(), "unlockNeutrino", [eN, toBase58String(Y())], nil)
1306- if ((fV == fV))
1307- then (eM(addressFromStringValue(bB), eN) ++ eP((aV() - eN)))
1311+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1312+ if ((gb == gb))
1313+ then (eS(addressFromStringValue(bB), eT) ++ eV((aV() - eT)))
13081314 else throw("Strict value is not equal to itself.")
13091315 }
13101316
13161322 else (0 > dX))
13171323 then throw("Invalid adjustPeg parameters")
13181324 else {
1319- let gC = dW(dX)
1320- let eb = gC._1
1321- let gD = gC._2
1322- if ((gD == 0))
1325+ let gD = dW(dX)
1326+ let eb = gD._1
1327+ let gE = gD._2
1328+ if ((gE == 0))
13231329 then throw("Nothing to adjust")
1324- else if ((gD > 0))
1330+ else if ((gE > 0))
13251331 then {
1326- let gf = invoke(ab(), "withdraw", [gD], nil)
1327- if ((gf == gf))
1332+ let gl = invoke(ab(), "withdraw", [gE], nil)
1333+ if ((gl == gl))
13281334 then {
1329- let fN = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gD)])
1330- if ((fN == fN))
1331- then (eP((aV() + gD)) ++ eE(eb, aZ()))
1335+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gE)])
1336+ if ((fT == fT))
1337+ then (eV((aV() + gE)) ++ eK(eb, aZ()))
13321338 else throw("Strict value is not equal to itself.")
13331339 }
13341340 else throw("Strict value is not equal to itself.")
13351341 }
13361342 else {
1337- let fV = invoke(Z(), "unlockNeutrino", [au(gD), toBase58String(Y())], nil)
1338- if ((fV == fV))
1343+ let gb = invoke(Z(), "unlockNeutrino", [au(gE), toBase58String(Y())], nil)
1344+ if ((gb == gb))
13391345 then {
1340- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gD))])
1341- if ((fO == fO))
1342- then (eP((aV() - au(gD))) ++ eE(eb, aZ()))
1346+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gE))])
1347+ if ((fU == fU))
1348+ then (eV((aV() - au(gE))) ++ eK(eb, aZ()))
13431349 else throw("Strict value is not equal to itself.")
13441350 }
13451351 else throw("Strict value is not equal to itself.")
13501356
13511357 @Callable(bs)
13521358 func v_get (bB) = {
1353- let gE = dv(bB, false)
1354- let cT = gE._1
1355- let cU = gE._2
1356- let cV = gE._3
1357- let gF = gE._4
1358- throw((((ap(cU) + ap(cV)) + ap(gF)) + ap(dn(bB))))
1359+ let gF = dv(bB, false)
1360+ let cT = gF._1
1361+ let cU = gF._2
1362+ let cV = gF._3
1363+ let gG = gF._4
1364+ throw((((ap(cU) + ap(cV)) + ap(gG)) + ap(dn(bB))))
13591365 }
13601366
13611367
13621368
13631369 @Callable(bs)
13641370 func view_calcRemainMarginWithFundingPayment (bB) = {
1365- let gG = bA(bB)
1366- let bE = gG._1
1367- let db = gG._2
1368- let dk = gG._3
1369- let dd = gG._4
1370- let gH = cZ(bB, an)
1371- let cQ = gH._1
1372- let cY = gH._2
1373- let gI = cf(bE, db, dd, cY)
1374- let co = gI._1
1375- let cp = gI._2
1376- let ck = gI._3
1371+ let gH = bA(bB)
1372+ let bE = gH._1
1373+ let db = gH._2
1374+ let dk = gH._3
1375+ let dd = gH._4
1376+ let gI = cZ(bB, an)
1377+ let cQ = gI._1
1378+ let cY = gI._2
1379+ let gJ = cf(bE, db, dd, cY)
1380+ let co = gJ._1
1381+ let cp = gJ._2
1382+ let ck = gJ._3
13771383 throw((((((ap(co) + ap(ck)) + ap(dn(bB))) + ap(cY)) + ap(cp)) + ap(cQ)))
13781384 }
13791385
13861392 }
13871393
13881394
1389-@Verifier(gJ)
1390-func gK () = sigVerify(gJ.bodyBytes, gJ.proofs[0], X())
1395+
1396+@Callable(bs)
1397+func view_getFunding () = {
1398+ let ee = cz()
1399+ let gK = ed()
1400+ let eh = gK._1
1401+ let ei = gK._2
1402+ let gL = ar(ei, ee)
1403+ let gM = ar(eh, ee)
1404+ throw((ap(gL) + ap(gM)))
1405+ }
1406+
1407+
1408+@Verifier(gN)
1409+func gO () = sigVerify(gN.bodyBytes, gN.proofs[0], X())
13911410
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionClosedDate"
2121
2222 let j = "k_initialized"
2323
2424 let k = "k_paused"
2525
2626 let l = "k_fee"
2727
2828 let m = "k_fundingPeriod"
2929
3030 let n = "k_initMarginRatio"
3131
3232 let o = "k_mmr"
3333
3434 let p = "k_liquidationFeeRatio"
3535
3636 let q = "k_partLiquidationRatio"
3737
3838 let r = "k_spreadLimit"
3939
4040 let s = "k_maxPriceImpact"
4141
4242 let t = "k_maxPriceSpread"
4343
4444 let u = "k_lastDataStr"
4545
4646 let v = "k_lastMinuteId"
4747
4848 let w = "k_twapDataLastCumulativePrice"
4949
5050 let x = "k_twapDataLastPrice"
5151
5252 let y = "k_twapDataPreviousMinuteId"
5353
5454 let z = "k_latestLongPremiumFraction"
5555
5656 let A = "k_latestShortPremiumFraction"
5757
5858 let B = "k_nextFundingBlockMinTimestamp"
5959
6060 let C = "k_longFundingRate"
6161
6262 let D = "k_shortFundingRate"
6363
6464 let E = "k_qtAstR"
6565
6666 let F = "k_bsAstR"
6767
6868 let G = "k_totalPositionSize"
6969
7070 let H = "k_totalLongPositionSize"
7171
7272 let I = "k_totalShortPositionSize"
7373
7474 let J = "k_cumulativeNotional"
7575
7676 let K = "k_openInterestNotional"
7777
7878 let L = "k_coordinatorAddress"
7979
8080 let M = "k_insurance_address"
8181
8282 let N = "k_admin_address"
8383
8484 let O = "k_admin_public_key"
8585
8686 let P = "k_quote_asset"
8787
8888 let Q = "k_quote_staking"
8989
9090 let R = "k_staking_address"
9191
9292 let S = "k_miner_address"
9393
9494 let T = "k_orders_address"
9595
9696 let U = "k_referral_address"
9797
9898 func V () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
9999
100100
101101 func W () = addressFromString(getStringValue(V(), N))
102102
103103
104104 func X () = fromBase58String(getStringValue(V(), O))
105105
106106
107107 func Y () = fromBase58String(getStringValue(V(), P))
108108
109109
110110 func Z () = valueOrErrorMessage(addressFromString(getStringValue(V(), Q)), "Quote asset staking not set")
111111
112112
113113 func aa () = valueOrErrorMessage(addressFromString(getStringValue(V(), R)), "Staking not set")
114114
115115
116116 func ab () = valueOrErrorMessage(addressFromString(getStringValue(V(), M)), "Insurance not set")
117117
118118
119119 func ac () = valueOrErrorMessage(addressFromString(getStringValue(V(), S)), "Miner not set")
120120
121121
122122 func ad () = valueOrErrorMessage(addressFromString(getStringValue(V(), T)), "Orders not set")
123123
124124
125125 func ae () = valueOrErrorMessage(addressFromString(getStringValue(V(), U)), "Referral not set")
126126
127127
128128 let af = 1
129129
130130 let ag = 2
131131
132132 let ah = 15
133133
134134 let ai = 15
135135
136136 let aj = 1000
137137
138138 let ak = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
139139
140140 let al = (86400 * ak)
141141
142142 let am = 100
143143
144144 let an = 1
145145
146146 let ao = 2
147147
148148 func ap (aq) = (toString(aq) + ",")
149149
150150
151151 func ar (aq,as) = fraction(aq, ak, as, HALFEVEN)
152152
153153
154154 func at (aq,as) = fraction(aq, as, ak, HALFEVEN)
155155
156156
157157 func au (aq) = if ((aq > 0))
158158 then aq
159159 else -(aq)
160160
161161
162162 func av (aq,as) = if ((aq >= as))
163163 then aq
164164 else as
165165
166166
167167 func aw (ax,ay) = ((ax + "_") + ay)
168168
169169
170170 func az (aA) = {
171171 func aB (aC,aD) = ((aC + aD) + ",")
172172
173173 let aE = {
174174 let aF = aA
175175 let aG = size(aF)
176176 let aH = ""
177177 func aI (aJ,aK) = if ((aK >= aG))
178178 then aJ
179179 else aB(aJ, aF[aK])
180180
181181 func aL (aJ,aK) = if ((aK >= aG))
182182 then aJ
183183 else throw("List size exceeds 20")
184184
185185 aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
186186 }
187187 let aM = dropRight(aE, 1)
188188 let aN = if ((take(aM, 1) == ","))
189189 then drop(aM, 1)
190190 else aM
191191 aN
192192 }
193193
194194
195195 func aO (aP) = split(aP, ",")
196196
197197
198198 func aQ (aA,aR,aS) = if ((size(aA) > aR))
199199 then (removeByIndex(aA, 0) :+ aS)
200200 else (aA :+ aS)
201201
202202
203203 func aT (aU) = valueOrErrorMessage(getInteger(this, aU), ("no value for " + aU))
204204
205205
206206 func aV () = aT(d)
207207
208208
209209 func aW () = aT(l)
210210
211211
212212 func aX () = aT(n)
213213
214214
215215 func aY () = aT(E)
216216
217217
218218 func aZ () = aT(F)
219219
220220
221221 func ba () = aT(G)
222222
223223
224224 func bb () = aT(J)
225225
226226
227227 func bc () = aT(K)
228228
229229
230230 func bd () = aT(B)
231231
232232
233233 func be () = aT(m)
234234
235235
236236 func bf () = (be() * ak)
237237
238238
239239 func bg () = (be() * aj)
240240
241241
242242 func bh () = aT(o)
243243
244244
245245 func bi () = aT(p)
246246
247247
248248 func bj () = aT(q)
249249
250250
251251 func bk () = aT(r)
252252
253253
254254 func bl () = aT(s)
255255
256256
257257 func bm () = aT(t)
258258
259259
260260 func bn () = aT(z)
261261
262262
263263 func bo () = aT(A)
264264
265265
266266 func bp () = aT(I)
267267
268268
269269 func bq () = aT(H)
270270
271271
272272 func br (bs) = valueOrElse(getString(ad(), "k_sender"), toString(bs.caller))
273273
274274
275275 func bt (bu,bv,bw) = {
276276 let bx = (bu - bv)
277277 if (if (bw)
278278 then (0 > bx)
279279 else false)
280280 then throw("Invalid margin")
281281 else if (if (!(bw))
282282 then (bx >= 0)
283283 else false)
284284 then throw("Invalid margin")
285285 else true
286286 }
287287
288288
289289 func by (bz) = if ((bz == 0))
290290 then throw("Should not be called with _positionSize == 0")
291291 else if ((bz > 0))
292292 then bn()
293293 else bo()
294294
295295
296296 func bA (bB) = {
297297 let bC = getInteger(this, aw(e, bB))
298298 let bD = bC
299299 if ($isInstanceOf(bD, "Int"))
300300 then {
301301 let bE = bD
302302 $Tuple4(bE, getIntegerValue(this, aw(f, bB)), getIntegerValue(this, aw(g, bB)), getIntegerValue(this, aw(h, bB)))
303303 }
304304 else $Tuple4(0, 0, 0, 0)
305305 }
306306
307307
308308 func bF (bB) = if ((bA(bB)._1 == 0))
309309 then throw("No open position")
310310 else true
311311
312312
313313 func bG () = valueOrElse(getBoolean(this, j), false)
314314
315315
316316 func bH () = valueOrElse(getBoolean(this, k), false)
317317
318318
319319 func bI (bJ,bK,bL) = if (bJ)
320320 then {
321321 let bM = (aZ() - bL)
322322 if ((0 >= bM))
323323 then throw("Tx lead to base asset reserve <= 0, revert")
324324 else $Tuple4((aY() + bK), bM, (ba() + bL), (bb() + bK))
325325 }
326326 else {
327327 let bN = (aY() - bK)
328328 if ((0 >= bN))
329329 then throw("Tx lead to base quote reserve <= 0, revert")
330330 else $Tuple4(bN, (aZ() + bL), (ba() - bL), (bb() - bK))
331331 }
332332
333333
334334 func bO (bJ,bK) = {
335335 let bP = aY()
336336 let bQ = aZ()
337337 let aU = at(bP, bQ)
338338 let bR = if (bJ)
339339 then (bP + bK)
340340 else (bP - bK)
341341 let bS = ar(aU, bR)
342342 let bT = au((bS - bQ))
343343 let bU = if (bJ)
344344 then bT
345345 else -(bT)
346346 let bV = bI(bJ, bK, bT)
347347 let bW = bV._1
348348 let bX = bV._2
349349 let bY = bV._3
350350 let bZ = bV._4
351351 let ca = ar(bP, bQ)
352352 let cb = ar(bK, bT)
353353 let cc = au((ca - cb))
354354 let cd = (ak - ar(ca, (ca + cc)))
355355 let ce = bl()
356356 if ((cd > ce))
357357 then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(bP)) + " before base asset: ") + toString(bQ)) + " quote asset amount to exchange: ") + toString(bK)) + " price before: ") + toString(ca)) + " marketPrice: ") + toString(cb)))
358358 else $Tuple5(bU, bW, bX, bY, bZ)
359359 }
360360
361361
362362 func cf (cg,ch,ci,cj) = {
363363 let ck = if ((cg != 0))
364364 then {
365365 let cl = by(cg)
366366 at((cl - ci), cg)
367367 }
368368 else 0
369369 let cm = ((cj - ck) + ch)
370370 let cn = if ((0 > cm))
371371 then $Tuple2(0, au(cm))
372372 else $Tuple2(au(cm), 0)
373373 let co = cn._1
374374 let cp = cn._2
375375 $Tuple3(co, cp, ck)
376376 }
377377
378378
379379 func cq (bJ,bL,cr,cs,ct) = {
380380 let ca = ar(cs, ct)
381381 if ((bL == 0))
382382 then throw("Invalid base asset amount")
383383 else {
384384 let aU = at(cs, ct)
385385 let cu = if (bJ)
386386 then (ct + bL)
387387 else (ct - bL)
388388 let cv = ar(aU, cu)
389389 let cw = au((cv - cs))
390390 let ce = bl()
391391 let cx = bI(!(bJ), cw, bL)
392392 let bW = cx._1
393393 let bX = cx._2
394394 let bY = cx._3
395395 let bZ = cx._4
396396 let cb = ar(cw, bL)
397397 let cc = au((ca - cb))
398398 let cd = (ak - ar(ca, (ca + cc)))
399399 if (if ((cd > ce))
400400 then cr
401401 else false)
402402 then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(cs)) + " before base asset: ") + toString(ct)) + " base asset amount to exchange: ") + toString(bL)) + " price before: ") + toString(ca)) + " market price: ") + toString(cb)))
403403 else $Tuple8(cw, bW, bX, bY, bZ, (bq() - (if (bJ)
404404 then au(bL)
405405 else 0)), (bp() - (if (!(bJ))
406406 then au(bL)
407407 else 0)), cd)
408408 }
409409 }
410410
411411
412412 func cy (bJ,bL,cr) = cq(bJ, bL, cr, aY(), aZ())
413413
414414
415415 func cz () = {
416416 let cA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
417417 let cB = getStringValue(this, a)
418418 let cC = getStringValue(this, b)
419419 let cD = valueOrErrorMessage(getInteger(cA, cB), ((("Can not get oracle price. Oracle: " + toString(cA)) + " key: ") + cB))
420420 cD
421421 }
422422
423423
424424 func cE (cs,ct) = {
425425 let cF = cz()
426426 let cG = ar(cs, ct)
427427 let cH = ar((cF + cG), (2 * ak))
428428 let cI = ar(au((cF - cG)), cH)
429429 if ((cI > bm()))
430430 then throw(((("Price spread " + toString(cI)) + " > max price spread ") + toString(bm())))
431431 else true
432432 }
433433
434434
435435 func cJ () = {
436436 let cs = aY()
437437 let ct = aZ()
438438 ar(cs, ct)
439439 }
440440
441441
442442 func cK () = {
443443 let cF = cz()
444444 let cL = cJ()
445445 (ar(au((cF - cL)), cF) > bk())
446446 }
447447
448448
449449 func cM (bz,cN,cs,ct) = {
450450 let cO = au(bz)
451451 let cP = (0 > bz)
452452 let cQ = if ((cN == an))
453453 then {
454454 let cR = cq(!(cP), cO, false, cs, ct)
455455 let cS = cR._1
456456 let cT = cR._2
457457 let cU = cR._3
458458 let cV = cR._4
459459 cS
460460 }
461461 else at(cO, cz())
462462 cQ
463463 }
464464
465465
466466 func cW (bz,cX,cs,ct,cN) = if ((bz == 0))
467467 then throw("Invalid position size")
468468 else {
469469 let cP = (0 > bz)
470470 let cQ = cM(bz, cN, cs, ct)
471471 let cY = if (cP)
472472 then (cX - cQ)
473473 else (cQ - cX)
474474 $Tuple2(cQ, cY)
475475 }
476476
477477
478478 func cZ (bB,cN) = {
479479 let da = bA(bB)
480480 let bE = da._1
481481 let db = da._2
482482 let dc = da._3
483483 let dd = da._4
484484 cW(bE, dc, aY(), aZ(), cN)
485485 }
486486
487487
488488 func de (df,dg,dh) = ar((df - dg), dh)
489489
490490
491491 func di (bB,cN) = {
492492 let dj = bA(bB)
493493 let bE = dj._1
494494 let db = dj._2
495495 let dk = dj._3
496496 let dd = dj._4
497497 let dl = cZ(bB, cN)
498498 let cQ = dl._1
499499 let cY = dl._2
500500 let dm = cf(bE, db, dd, cY)
501501 let co = dm._1
502502 let cp = dm._2
503503 de(co, cp, cQ)
504504 }
505505
506506
507507 func dn (bB) = di(bB, an)
508508
509509
510510 func do (bB,bz) = {
511511 let dp = av(bj(), (ak - ar(dn(bB), bh())))
512512 let dq = at(au(bz), dp)
513513 let dr = cy((bz > 0), dq, false)
514514 let ds = dr._1
515515 let cd = dr._8
516516 if ((bl() > cd))
517517 then ds
518518 else {
519519 let dt = at(au(bz), bj())
520520 let du = cy((bz > 0), dt, false)._1
521521 du
522522 }
523523 }
524524
525525
526526 func dv (bB,cr) = {
527527 let dw = bA(bB)
528528 let bE = dw._1
529529 let db = dw._2
530530 let dc = dw._3
531531 let dd = dw._4
532532 let cY = cZ(bB, an)._2
533533 let dx = cf(bE, db, dd, cY)
534534 let co = dx._1
535535 let cp = dx._2
536536 let dt = -(bE)
537537 let dy = cY
538538 let dz = -(co)
539539 let dA = cy((bE > 0), au(bE), cr)
540540 let du = dA._1
541541 let bR = dA._2
542542 let bS = dA._3
543543 let dB = dA._4
544544 let dC = dA._5
545545 let dD = dA._6
546546 let dE = dA._7
547547 let dF = (bc() - dc)
548548 $Tuple12(dt, cp, dy, dz, bR, bS, dB, dC, dF, du, dD, dE)
549549 }
550550
551551
552552 func dG () = {
553553 let dH = ((lastBlock.timestamp / 1000) / 60)
554554 let dI = (dH - ah)
555555 let dJ = valueOrElse(getString(this, u), "")
556556 let dK = split(dJ, ",")
557557 func dL (aC,dM) = if ((dI >= parseIntValue(dM)))
558558 then (aC :+ parseIntValue(dM))
559559 else aC
560560
561561 let dN = {
562562 let aF = dK
563563 let aG = size(aF)
564564 let aH = nil
565565 func aI (aJ,aK) = if ((aK >= aG))
566566 then aJ
567567 else dL(aJ, aF[aK])
568568
569569 func aL (aJ,aK) = if ((aK >= aG))
570570 then aJ
571571 else throw("List size exceeds 20")
572572
573573 aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
574574 }
575575 let dO = if ((size(dN) > 0))
576576 then max(dN)
577577 else parseIntValue(dK[0])
578578 let dP = valueOrElse(getInteger(this, v), 0)
579579 let dQ = valueOrElse(getInteger(this, ((w + "_") + toString(dP))), 0)
580580 let dR = valueOrElse(getInteger(this, ((x + "_") + toString(dP))), 0)
581581 let dS = (dQ + ((dH - dP) * dR))
582582 let dT = valueOrElse(getInteger(this, ((w + "_") + toString(dO))), 0)
583583 let dU = valueOrElse(getInteger(this, ((x + "_") + toString(dO))), 0)
584584 let dV = (dT + ((dI - dO) * dU))
585585 ((dS - dV) / ah)
586586 }
587587
588588
589589 func dW (dX) = {
590590 let bz = ba()
591591 let dY = (bz > 0)
592592 let dZ = cy(dY, au(bz), false)._1
593593 let ea = aZ()
594594 let eb = at(ea, dX)
595595 let ec = cW(bz, dZ, eb, ea, an)._2
596596 $Tuple2(eb, ec)
597597 }
598598
599599
600-func ed (ee,ef,eg,eh,ei,ej,ek,el,em) = [IntegerEntry(n, ee), IntegerEntry(o, ef), IntegerEntry(p, eg), IntegerEntry(m, eh), IntegerEntry(l, ei), IntegerEntry(r, ej), IntegerEntry(s, ek), IntegerEntry(q, el), IntegerEntry(t, em)]
600+func ed () = {
601+ let ee = cz()
602+ let ef = dG()
603+ let eg = (ef - ee)
604+ if (if ((bp() == 0))
605+ then true
606+ else (bq() == 0))
607+ then $Tuple2(0, 0)
608+ else if ((0 > eg))
609+ then {
610+ let eh = ar(at(eg, bf()), al)
611+ let ei = ar(at(eh, bp()), bq())
612+ $Tuple2(eh, ei)
613+ }
614+ else {
615+ let ei = ar(at(eg, bf()), al)
616+ let eh = ar(at(ei, bq()), bp())
617+ $Tuple2(eh, ei)
618+ }
619+ }
601620
602621
603-func en (eo,ep,eq,er,es) = [IntegerEntry(B, eo), IntegerEntry(z, ep), IntegerEntry(A, eq), IntegerEntry(C, er), IntegerEntry(D, es)]
622+func ej (ek,el,em,en,eo,ep,eq,er,es) = [IntegerEntry(n, ek), IntegerEntry(o, el), IntegerEntry(p, em), IntegerEntry(m, en), IntegerEntry(l, eo), IntegerEntry(r, ep), IntegerEntry(s, eq), IntegerEntry(q, er), IntegerEntry(t, es)]
604623
605624
606-func et (ay,eu,ev,ew,cl) = [IntegerEntry(aw(e, ay), eu), IntegerEntry(aw(f, ay), ev), IntegerEntry(aw(g, ay), ew), IntegerEntry(aw(h, ay), cl)]
625+func et (eu,ev,ew,ex,ey) = [IntegerEntry(B, eu), IntegerEntry(z, ev), IntegerEntry(A, ew), IntegerEntry(C, ex), IntegerEntry(D, ey)]
607626
608627
609-func ex (ey) = {
628+func ez (ay,eA,eB,eC,cl) = [IntegerEntry(aw(e, ay), eA), IntegerEntry(aw(f, ay), eB), IntegerEntry(aw(g, ay), eC), IntegerEntry(aw(h, ay), cl)]
629+
630+
631+func eD (eE) = {
610632 let dH = ((lastBlock.timestamp / 1000) / 60)
611- let ez = valueOrElse(getInteger(this, v), 0)
612- if ((ez > dH))
633+ let eF = valueOrElse(getInteger(this, v), 0)
634+ if ((eF > dH))
613635 then throw("TWAP out-of-order")
614636 else {
615- let dP = if ((ez == 0))
637+ let dP = if ((eF == 0))
616638 then dH
617- else ez
618- if ((dH > ez))
639+ else eF
640+ if ((dH > eF))
619641 then {
620- let eA = valueOrElse(getInteger(this, ((w + "_") + toString(ez))), 0)
621- let eB = valueOrElse(getInteger(this, ((x + "_") + toString(ez))), ey)
622- let eC = (eA + ((dH - dP) * eB))
642+ let eG = valueOrElse(getInteger(this, ((w + "_") + toString(eF))), 0)
643+ let eH = valueOrElse(getInteger(this, ((x + "_") + toString(eF))), eE)
644+ let eI = (eG + ((dH - dP) * eH))
623645 let dK = aQ(aO(valueOrElse(getString(this, u), "")), ah, toString(dH))
624-[IntegerEntry(aw(w, toString(dH)), eC), IntegerEntry(aw(x, toString(dH)), ey), IntegerEntry(aw(y, toString(dH)), ez), IntegerEntry(v, dH), StringEntry(u, az(dK))]
646+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE), IntegerEntry(aw(y, toString(dH)), eF), IntegerEntry(v, dH), StringEntry(u, az(dK))]
625647 }
626648 else {
627- let eD = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
628- let eA = valueOrElse(getInteger(this, aw(w, toString(eD))), 0)
629- let eB = valueOrElse(getInteger(this, aw(x, toString(eD))), ey)
630- let eC = (eA + ((dH - eD) * eB))
631-[IntegerEntry(aw(w, toString(dH)), eC), IntegerEntry(aw(x, toString(dH)), ey)]
649+ let eJ = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
650+ let eG = valueOrElse(getInteger(this, aw(w, toString(eJ))), 0)
651+ let eH = valueOrElse(getInteger(this, aw(x, toString(eJ))), eE)
652+ let eI = (eG + ((dH - eJ) * eH))
653+[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE)]
632654 }
633655 }
634656 }
635657
636658
637-func eE (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
659+func eK (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
638660
639661
640-func eF (bP,bQ,eG,eH,eI,eJ,eK) = if (((eJ - eK) != eG))
641- then throw(((((("Invalid AMM state data: " + toString(eJ)) + " + ") + toString(eK)) + " != ") + toString(eG)))
642- else ((eE(bP, bQ) ++ [IntegerEntry(G, eG), IntegerEntry(J, eH), IntegerEntry(K, eI), IntegerEntry(H, eJ), IntegerEntry(I, eK)]) ++ ex(ar(bP, bQ)))
662+func eL (bP,bQ,eM,eN,eO,eP,eQ) = if (((eP - eQ) != eM))
663+ then throw(((((("Invalid AMM state data: " + toString(eP)) + " + ") + toString(eQ)) + " != ") + toString(eM)))
664+ else ((eK(bP, bQ) ++ [IntegerEntry(G, eM), IntegerEntry(J, eN), IntegerEntry(K, eO), IntegerEntry(H, eP), IntegerEntry(I, eQ)]) ++ eD(ar(bP, bQ)))
643665
644666
645-func eL (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
667+func eR (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
646668
647669
648-func eM (ay,eN) = {
649- let eO = assetBalance(this, Y())
650- if ((eN > eO))
651- then throw(((("Unable to withdraw " + toString(eN)) + " from contract balance ") + toString(eO)))
652- else [ScriptTransfer(ay, eN, Y())]
670+func eS (ay,eT) = {
671+ let eU = assetBalance(this, Y())
672+ if ((eT > eU))
673+ then throw(((("Unable to withdraw " + toString(eT)) + " from contract balance ") + toString(eU)))
674+ else [ScriptTransfer(ay, eT, Y())]
653675 }
654676
655677
656-func eP (bs) = if ((0 > bs))
678+func eV (bs) = if ((0 > bs))
657679 then throw("Balance")
658680 else [IntegerEntry(d, bs)]
659681
660682
661-func eQ (bs) = [ScriptTransfer(aa(), bs, Y())]
683+func eW (bs) = [ScriptTransfer(aa(), bs, Y())]
662684
663685
664686 @Callable(bs)
665687 func pause () = if ((bs.caller != W()))
666688 then throw("Invalid togglePause params")
667689 else [BooleanEntry(k, true)]
668690
669691
670692
671693 @Callable(bs)
672694 func unpause () = if ((bs.caller != W()))
673695 then throw("Invalid togglePause params")
674696 else [BooleanEntry(k, false)]
675697
676698
677699
678700 @Callable(bs)
679701 func addLiquidity (bK) = if (if ((bs.caller != W()))
680702 then true
681703 else (0 >= bK))
682704 then throw("Invalid addLiquidity params")
683705 else {
684706 let bP = aY()
685707 let bQ = aZ()
686- let ey = ar(bP, bQ)
687- let eR = ar(bK, ey)
688- let eS = (bP + bK)
689- let eT = (bQ + eR)
690- eE(eS, eT)
708+ let eE = ar(bP, bQ)
709+ let eX = ar(bK, eE)
710+ let eY = (bP + bK)
711+ let eZ = (bQ + eX)
712+ eK(eY, eZ)
691713 }
692714
693715
694716
695717 @Callable(bs)
696718 func removeLiquidity (bK) = if (if ((bs.caller != W()))
697719 then true
698720 else (0 >= bK))
699721 then throw("Invalid removeLiquidity params")
700722 else {
701723 let bP = aY()
702724 let bQ = aZ()
703- let ey = ar(bP, bQ)
704- let eU = ar(bK, ey)
705- let eS = (bP - bK)
706- let eT = (bQ - eU)
707- eE(eS, eT)
725+ let eE = ar(bP, bQ)
726+ let fa = ar(bK, eE)
727+ let eY = (bP - bK)
728+ let eZ = (bQ - fa)
729+ eK(eY, eZ)
708730 }
709731
710732
711733
712734 @Callable(bs)
713-func changeSettings (ee,ef,eg,eh,ei,ej,ek,el,em) = if ((bs.caller != W()))
735+func changeSettings (ek,el,em,en,eo,ep,eq,er,es) = if ((bs.caller != W()))
714736 then throw("Invalid changeSettings params")
715- else ed(ee, ef, eg, eh, ei, ej, ek, el, em)
737+ else ej(ek, el, em, en, eo, ep, eq, er, es)
716738
717739
718740
719741 @Callable(bs)
720-func initialize (bP,bQ,eh,ee,ef,eg,ei,eV,eW,eX,ej,ek,el,em) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
742+func initialize (bP,bQ,en,ek,el,em,eo,fb,fc,fd,ep,eq,er,es) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
721743 then true
722744 else (0 >= bQ))
723745 then true
724- else (0 >= eh))
725- then true
726- else (0 >= ee))
727- then true
728- else (0 >= ef))
729- then true
730- else (0 >= eg))
731- then true
732- else (0 >= ei))
733- then true
734- else (0 >= ej))
746+ else (0 >= en))
735747 then true
736748 else (0 >= ek))
737749 then true
738750 else (0 >= el))
739751 then true
740752 else (0 >= em))
741753 then true
754+ else (0 >= eo))
755+ then true
756+ else (0 >= ep))
757+ then true
758+ else (0 >= eq))
759+ then true
760+ else (0 >= er))
761+ then true
762+ else (0 >= es))
763+ then true
742764 else bG())
743765 then throw("Invalid initialize parameters")
744- else ((((eF(bP, bQ, 0, 0, 0, 0, 0) ++ ed(ee, ef, eg, eh, ei, ej, ek, el, em)) ++ en((lastBlock.timestamp + eh), 0, 0, 0, 0)) ++ eP(0)) ++ [BooleanEntry(j, true), StringEntry(c, eV), StringEntry(a, eW), StringEntry(L, eX)])
766+ else ((((eL(bP, bQ, 0, 0, 0, 0, 0) ++ ej(ek, el, em, en, eo, ep, eq, er, es)) ++ et((lastBlock.timestamp + en), 0, 0, 0, 0)) ++ eV(0)) ++ [BooleanEntry(j, true), StringEntry(c, fb), StringEntry(a, fc), StringEntry(L, fd)])
745767
746768
747769
748770 @Callable(bs)
749-func setInitMarginRatio (ee) = if (if ((0 >= ee))
771+func setInitMarginRatio (ek) = if (if ((0 >= ek))
750772 then true
751773 else !(bG()))
752774 then throw("Invalid setInitMarginRatio parameters")
753- else ed(ee, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
775+ else ej(ek, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
754776
755777
756778
757779 @Callable(bs)
758-func decreasePosition (eN,eY,eZ) = if (if (if (if (if ((0 >= eN))
780+func decreasePosition (eT,fe,ff) = if (if (if (if (if ((0 >= eT))
759781 then true
760782 else !(bG()))
761783 then true
762- else !(bt(ar(ak, eY), aX(), true)))
784+ else !(bt(ar(ak, fe), aX(), true)))
763785 then true
764786 else !(bF(toString(bs.caller))))
765787 then true
766788 else bH())
767789 then throw("Invalid decreasePosition parameters")
768790 else {
769- let fa = bA(toString(bs.caller))
770- let fb = fa._1
771- let fc = fa._2
772- let fd = fa._3
773- let fe = fa._4
774- let ff = if ((fb > 0))
791+ let fg = bA(toString(bs.caller))
792+ let fh = fg._1
793+ let fi = fg._2
794+ let fj = fg._3
795+ let fk = fg._4
796+ let fl = if ((fh > 0))
775797 then ag
776798 else af
777- let fg = (ff == af)
778- let fh = at(eN, eY)
779- let fi = cZ(toString(bs.caller), an)
780- let fj = fi._1
781- let cY = fi._2
782- let fk = if ((fj > fh))
799+ let fm = (fl == af)
800+ let fn = at(eT, fe)
801+ let fo = cZ(toString(bs.caller), an)
802+ let fp = fo._1
803+ let cY = fo._2
804+ let fq = if ((fp > fn))
783805 then {
784- let fl = bO(fg, fh)
785- let dt = fl._1
786- let bR = fl._2
787- let bS = fl._3
788- let dB = fl._4
789- let dC = fl._5
790- let fm = au(dt)
791- if (if ((eZ != 0))
792- then (eZ > fm)
806+ let fr = bO(fm, fn)
807+ let dt = fr._1
808+ let bR = fr._2
809+ let bS = fr._3
810+ let dB = fr._4
811+ let dC = fr._5
812+ let fs = au(dt)
813+ if (if ((ff != 0))
814+ then (ff > fs)
793815 else false)
794- then throw(((("Too little base asset exchanged, got " + toString(fm)) + " expected ") + toString(eZ)))
816+ then throw(((("Too little base asset exchanged, got " + toString(fs)) + " expected ") + toString(ff)))
795817 else {
796- let dy = ar(at(cY, fm), au(fb))
797- let fn = cf(fb, fc, fe, dy)
798- let co = fn._1
799- let cp = fn._2
800- let ck = fn._3
801- let du = fh
802- let fo = (cY - dy)
803- let fp = if ((fb > 0))
804- then ((fj - du) - fo)
805- else ((fo + fj) - du)
806- let fq = (fb + dt)
807- $Tuple11(fq, co, au(fp), by(fq), bS, bR, dB, dC, (bc() - fh), (bq() - (if ((fq > 0))
818+ let dy = ar(at(cY, fs), au(fh))
819+ let ft = cf(fh, fi, fk, dy)
820+ let co = ft._1
821+ let cp = ft._2
822+ let ck = ft._3
823+ let du = fn
824+ let fu = (cY - dy)
825+ let fv = if ((fh > 0))
826+ then ((fp - du) - fu)
827+ else ((fu + fp) - du)
828+ let fw = (fh + dt)
829+ $Tuple11(fw, co, au(fv), by(fw), bS, bR, dB, dC, (bc() - fn), (bq() - (if ((fw > 0))
808830 then au(dt)
809- else 0)), (bp() - (if ((0 > fq))
831+ else 0)), (bp() - (if ((0 > fw))
810832 then au(dt)
811833 else 0)))
812834 }
813835 }
814836 else throw("Close position first")
815- let fq = fk._1
816- let fr = fk._2
817- let fs = fk._3
818- let ft = fk._4
819- let bS = fk._5
820- let bR = fk._6
821- let dB = fk._7
822- let dC = fk._8
823- let dF = fk._9
824- let dD = fk._10
825- let dE = fk._11
826- let fu = invoke(ac(), "notifyNotional", [toString(bs.caller), fs], nil)
827- if ((fu == fu))
828- then (et(toString(bs.caller), fq, fr, fs, ft) ++ eF(bR, bS, dB, dC, dF, dD, dE))
837+ let fw = fq._1
838+ let fx = fq._2
839+ let fy = fq._3
840+ let fz = fq._4
841+ let bS = fq._5
842+ let bR = fq._6
843+ let dB = fq._7
844+ let dC = fq._8
845+ let dF = fq._9
846+ let dD = fq._10
847+ let dE = fq._11
848+ let fA = invoke(ac(), "notifyNotional", [toString(bs.caller), fy], nil)
849+ if ((fA == fA))
850+ then (ez(toString(bs.caller), fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE))
829851 else throw("Strict value is not equal to itself.")
830852 }
831853
832854
833855
834856 @Callable(bs)
835-func increasePosition (ff,eY,eZ,fv) = {
836- let fw = bs.payments[0].amount
837- if (if (if (if (if (if (if ((ff != af))
838- then (ff != ag)
857+func increasePosition (fl,fe,ff,fB) = {
858+ let fC = bs.payments[0].amount
859+ if (if (if (if (if (if (if ((fl != af))
860+ then (fl != ag)
839861 else false)
840862 then true
841- else (0 >= fw))
863+ else (0 >= fC))
842864 then true
843865 else !(bG()))
844866 then true
845867 else (bs.payments[0].assetId != Y()))
846868 then true
847- else !(bt(ar(ak, eY), aX(), true)))
869+ else !(bt(ar(ak, fe), aX(), true)))
848870 then true
849871 else bH())
850872 then throw("Invalid increasePosition parameters")
851873 else {
852874 let bB = toString(bs.caller)
853- let fx = at(fw, aW())
854- let fy = invoke(ae(), "acceptPaymentWithLink", [bB, fv], [AttachedPayment(Y(), fx)])
855- if ((fy == fy))
875+ let fD = at(fC, aW())
876+ let fE = invoke(ae(), "acceptPaymentWithLink", [bB, fB], [AttachedPayment(Y(), fD)])
877+ if ((fE == fE))
856878 then {
857- let fz = {
858- let bD = fy
879+ let fF = {
880+ let bD = fE
859881 if ($isInstanceOf(bD, "Int"))
860882 then {
861- let fA = bD
862- fA
883+ let fG = bD
884+ fG
863885 }
864886 else throw("Invalid referrerFee")
865887 }
866- let eN = (fw - fx)
867- let fB = (fx - fz)
868- let fC = bA(bB)
869- let fb = fC._1
870- let fc = fC._2
871- let fd = fC._3
872- let fe = fC._4
873- let fD = (fb == 0)
874- let fE = if ((fb > 0))
875- then (ff == af)
876- else (ff == ag)
877- let fF = if (!(fD))
878- then fE
888+ let eT = (fC - fD)
889+ let fH = (fD - fF)
890+ let fI = bA(bB)
891+ let fh = fI._1
892+ let fi = fI._2
893+ let fj = fI._3
894+ let fk = fI._4
895+ let fJ = (fh == 0)
896+ let fK = if ((fh > 0))
897+ then (fl == af)
898+ else (fl == ag)
899+ let fL = if (!(fJ))
900+ then fK
879901 else false
880- let fg = (ff == af)
881- let fG = if (if (fD)
902+ let fm = (fl == af)
903+ let fM = if (if (fJ)
882904 then true
883- else fF)
905+ else fL)
884906 then {
885- let fh = at(eN, eY)
886- let fH = bO(fg, fh)
887- let bU = fH._1
888- let bR = fH._2
889- let bS = fH._3
890- let dB = fH._4
891- let dC = fH._5
892- if (if ((eZ != 0))
893- then (eZ > au(bU))
907+ let fn = at(eT, fe)
908+ let fN = bO(fm, fn)
909+ let bU = fN._1
910+ let bR = fN._2
911+ let bS = fN._3
912+ let dB = fN._4
913+ let dC = fN._5
914+ if (if ((ff != 0))
915+ then (ff > au(bU))
894916 else false)
895- then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(eZ)))
917+ then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(ff)))
896918 else {
897- let fq = (fb + bU)
898- let fI = ar(fh, eY)
899- let fJ = cf(fb, fc, fe, fI)
900- let co = fJ._1
901- let cT = fJ._2
902- let cU = fJ._3
919+ let fw = (fh + bU)
920+ let fO = ar(fn, fe)
921+ let fP = cf(fh, fi, fk, fO)
922+ let co = fP._1
923+ let cT = fP._2
924+ let cU = fP._3
903925 if (!(cE(bR, bS)))
904926 then throw("Over max spread limit")
905- else $Tuple11(fq, co, (fd + fh), by(fq), bS, bR, dB, dC, (bc() + fh), (bq() + (if ((fq > 0))
927+ else $Tuple11(fw, co, (fj + fn), by(fw), bS, bR, dB, dC, (bc() + fn), (bq() + (if ((fw > 0))
906928 then au(bU)
907- else 0)), (bp() + (if ((0 > fq))
929+ else 0)), (bp() + (if ((0 > fw))
908930 then au(bU)
909931 else 0)))
910932 }
911933 }
912934 else {
913- let fh = at(eN, eY)
914- let fK = cZ(toString(bs.caller), an)
915- let fj = fK._1
916- let cY = fK._2
917- if ((fj > fh))
935+ let fn = at(eT, fe)
936+ let fQ = cZ(toString(bs.caller), an)
937+ let fp = fQ._1
938+ let cY = fQ._2
939+ if ((fp > fn))
918940 then throw("Use decreasePosition to decrease position size")
919941 else throw("Close position first")
920942 }
921- let fq = fG._1
922- let fr = fG._2
923- let fs = fG._3
924- let ft = fG._4
925- let bS = fG._5
926- let bR = fG._6
927- let dB = fG._7
928- let dC = fG._8
929- let dF = fG._9
930- let dD = fG._10
931- let dE = fG._11
932- let fL = (fB / 2)
933- let fM = (fB - fL)
934- let fN = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eN)])
935- if ((fN == fN))
943+ let fw = fM._1
944+ let fx = fM._2
945+ let fy = fM._3
946+ let fz = fM._4
947+ let bS = fM._5
948+ let bR = fM._6
949+ let dB = fM._7
950+ let dC = fM._8
951+ let dF = fM._9
952+ let dD = fM._10
953+ let dE = fM._11
954+ let fR = (fH / 2)
955+ let fS = (fH - fR)
956+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
957+ if ((fT == fT))
936958 then {
937- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
938- if ((fO == fO))
959+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
960+ if ((fU == fU))
939961 then {
940- let fP = invoke(ac(), "notifyFees", [bB, fB], nil)
941- if ((fP == fP))
962+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
963+ if ((fV == fV))
942964 then {
943- let fu = invoke(ac(), "notifyNotional", [bB, fs], nil)
944- if ((fu == fu))
945- then (((et(bB, fq, fr, fs, ft) ++ eF(bR, bS, dB, dC, dF, dD, dE)) ++ eQ(fL)) ++ eP((aV() + eN)))
965+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
966+ if ((fA == fA))
967+ then (((ez(bB, fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eW(fR)) ++ eV((aV() + eT)))
946968 else throw("Strict value is not equal to itself.")
947969 }
948970 else throw("Strict value is not equal to itself.")
949971 }
950972 else throw("Strict value is not equal to itself.")
951973 }
952974 else throw("Strict value is not equal to itself.")
953975 }
954976 else throw("Strict value is not equal to itself.")
955977 }
956978 }
957979
958980
959981
960982 @Callable(bs)
961983 func addMargin () = {
962- let fw = bs.payments[0].amount
984+ let fC = bs.payments[0].amount
963985 if (if (if (if ((bs.payments[0].assetId != Y()))
964986 then true
965987 else !(bF(toString(bs.caller))))
966988 then true
967989 else !(bG()))
968990 then true
969991 else bH())
970992 then throw("Invalid addMargin parameters")
971993 else {
972994 let bB = toString(bs.caller)
973- let fx = at(fw, aW())
974- let fy = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fx)])
975- if ((fy == fy))
995+ let fD = at(fC, aW())
996+ let fE = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fD)])
997+ if ((fE == fE))
976998 then {
977- let fz = {
978- let bD = fy
999+ let fF = {
1000+ let bD = fE
9791001 if ($isInstanceOf(bD, "Int"))
9801002 then {
981- let fA = bD
982- fA
1003+ let fG = bD
1004+ fG
9831005 }
9841006 else throw("Invalid referrerFee")
9851007 }
986- let fB = (fx - fz)
987- let eN = (fw - fx)
988- let fQ = bA(bB)
989- let fb = fQ._1
990- let fc = fQ._2
991- let fd = fQ._3
992- let fe = fQ._4
993- let fL = (fB / 2)
994- let fM = (fB - fL)
995- let fN = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eN)])
996- if ((fN == fN))
1008+ let fH = (fD - fF)
1009+ let eT = (fC - fD)
1010+ let fW = bA(bB)
1011+ let fh = fW._1
1012+ let fi = fW._2
1013+ let fj = fW._3
1014+ let fk = fW._4
1015+ let fR = (fH / 2)
1016+ let fS = (fH - fR)
1017+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
1018+ if ((fT == fT))
9971019 then {
998- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
999- if ((fO == fO))
1020+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1021+ if ((fU == fU))
10001022 then {
1001- let fP = invoke(ac(), "notifyFees", [bB, fB], nil)
1002- if ((fP == fP))
1003- then ((et(bB, fb, (fc + eN), fd, fe) ++ eQ(fL)) ++ eP((aV() + eN)))
1023+ let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
1024+ if ((fV == fV))
1025+ then ((ez(bB, fh, (fi + eT), fj, fk) ++ eW(fR)) ++ eV((aV() + eT)))
10041026 else throw("Strict value is not equal to itself.")
10051027 }
10061028 else throw("Strict value is not equal to itself.")
10071029 }
10081030 else throw("Strict value is not equal to itself.")
10091031 }
10101032 else throw("Strict value is not equal to itself.")
10111033 }
10121034 }
10131035
10141036
10151037
10161038 @Callable(bs)
1017-func removeMargin (eN) = if (if (if (if ((0 >= eN))
1039+func removeMargin (eT) = if (if (if (if ((0 >= eT))
10181040 then true
10191041 else !(bF(toString(bs.caller))))
10201042 then true
10211043 else !(bG()))
10221044 then true
10231045 else bH())
10241046 then throw("Invalid removeMargin parameters")
10251047 else {
1026- let fR = bA(toString(bs.caller))
1027- let fb = fR._1
1028- let fc = fR._2
1029- let fd = fR._3
1030- let fe = fR._4
1031- let fS = -(eN)
1032- let fT = cf(fb, fc, fe, fS)
1033- let co = fT._1
1034- let cp = fT._2
1048+ let fX = bA(toString(bs.caller))
1049+ let fh = fX._1
1050+ let fi = fX._2
1051+ let fj = fX._3
1052+ let fk = fX._4
1053+ let fY = -(eT)
1054+ let fZ = cf(fh, fi, fk, fY)
1055+ let co = fZ._1
1056+ let cp = fZ._2
10351057 if ((cp != 0))
10361058 then throw("Invalid removed margin amount")
10371059 else {
1038- let fU = de(co, cp, fd)
1039- if (!(bt(fU, aX(), true)))
1040- then throw(((("Too much margin removed: " + toString(fU)) + " < ") + toString(aX())))
1060+ let ga = de(co, cp, fj)
1061+ if (!(bt(ga, aX(), true)))
1062+ then throw(((("Too much margin removed: " + toString(ga)) + " < ") + toString(aX())))
10411063 else {
1042- let fV = invoke(Z(), "unlockNeutrino", [eN, toBase58String(Y())], nil)
1043- if ((fV == fV))
1044- then ((et(toString(bs.caller), fb, co, fd, by(fb)) ++ eM(bs.caller, eN)) ++ eP((aV() - eN)))
1064+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1065+ if ((gb == gb))
1066+ then ((ez(toString(bs.caller), fh, co, fj, by(fh)) ++ eS(bs.caller, eT)) ++ eV((aV() - eT)))
10451067 else throw("Strict value is not equal to itself.")
10461068 }
10471069 }
10481070 }
10491071
10501072
10511073
10521074 @Callable(bs)
10531075 func closePosition () = {
1054- let fW = br(bs)
1055- let fX = valueOrErrorMessage(addressFromString(fW), "Invalid caller")
1056- if (if (if (!(bF(fW)))
1076+ let gc = br(bs)
1077+ let gd = valueOrErrorMessage(addressFromString(gc), "Invalid caller")
1078+ if (if (if (!(bF(gc)))
10571079 then true
10581080 else !(bG()))
10591081 then true
10601082 else bH())
10611083 then throw("Invalid closePosition parameters")
10621084 else {
1063- let fY = dv(fW, true)
1064- let cT = fY._1
1065- let fZ = fY._2
1066- let dy = fY._3
1067- let dz = fY._4
1068- let bR = fY._5
1069- let bS = fY._6
1070- let dB = fY._7
1071- let dC = fY._8
1072- let dF = fY._9
1073- let cU = fY._10
1074- let dD = fY._11
1075- let dE = fY._12
1076- if ((fZ > 0))
1085+ let ge = dv(gc, true)
1086+ let cT = ge._1
1087+ let gf = ge._2
1088+ let dy = ge._3
1089+ let dz = ge._4
1090+ let bR = ge._5
1091+ let bS = ge._6
1092+ let dB = ge._7
1093+ let dC = ge._8
1094+ let dF = ge._9
1095+ let cU = ge._10
1096+ let dD = ge._11
1097+ let dE = ge._12
1098+ if ((gf > 0))
10771099 then throw("Unable to close position with bad debt")
10781100 else {
1079- let ga = au(dz)
1080- let gb = (aV() - ga)
1081- let gc = if ((0 > gb))
1082- then $Tuple2(0, au(gb))
1083- else $Tuple2(gb, 0)
1084- let gd = gc._1
1085- let ge = gc._2
1086- let fA = if ((ge > 0))
1101+ let gg = au(dz)
1102+ let gh = (aV() - gg)
1103+ let gi = if ((0 > gh))
1104+ then $Tuple2(0, au(gh))
1105+ else $Tuple2(gh, 0)
1106+ let gj = gi._1
1107+ let gk = gi._2
1108+ let fG = if ((gk > 0))
10871109 then {
1088- let gf = invoke(ab(), "withdraw", [ge], nil)
1089- if ((gf == gf))
1110+ let gl = invoke(ab(), "withdraw", [gk], nil)
1111+ if ((gl == gl))
10901112 then nil
10911113 else throw("Strict value is not equal to itself.")
10921114 }
10931115 else nil
1094- if ((fA == fA))
1116+ if ((fG == fG))
10951117 then {
1096- let fV = invoke(Z(), "unlockNeutrino", [(ga - ge), toBase58String(Y())], nil)
1097- if ((fV == fV))
1118+ let gb = invoke(Z(), "unlockNeutrino", [(gg - gk), toBase58String(Y())], nil)
1119+ if ((gb == gb))
10981120 then {
1099- let fu = invoke(ac(), "notifyNotional", [fW, 0], nil)
1100- if ((fu == fu))
1101- then (((eL(fW) ++ eF(bR, bS, dB, dC, dF, dD, dE)) ++ eM(fX, ga)) ++ eP(gd))
1121+ let fA = invoke(ac(), "notifyNotional", [gc, 0], nil)
1122+ if ((fA == fA))
1123+ then (((eR(gc) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(gd, gg)) ++ eV(gj))
11021124 else throw("Strict value is not equal to itself.")
11031125 }
11041126 else throw("Strict value is not equal to itself.")
11051127 }
11061128 else throw("Strict value is not equal to itself.")
11071129 }
11081130 }
11091131 }
11101132
11111133
11121134
11131135 @Callable(bs)
11141136 func liquidate (bB) = {
1115- let gg = di(bB, an)
1116- let fU = if (cK())
1137+ let gm = di(bB, an)
1138+ let ga = if (cK())
11171139 then {
1118- let gh = di(bB, ao)
1119- av(gg, gh)
1140+ let gn = di(bB, ao)
1141+ av(gm, gn)
11201142 }
1121- else gg
1122- if (if (if (if (!(bt(fU, bh(), false)))
1143+ else gm
1144+ if (if (if (if (!(bt(ga, bh(), false)))
11231145 then true
11241146 else !(bF(bB)))
11251147 then true
11261148 else !(bG()))
11271149 then true
11281150 else bH())
11291151 then throw("Unable to liquidate")
1130- else if (if (if ((gg > bi()))
1152+ else if (if (if ((gm > bi()))
11311153 then (bj() > 0)
11321154 else false)
11331155 then (ak > bj())
11341156 else false)
11351157 then {
1136- let gi = bA(bB)
1137- let fb = gi._1
1138- let fc = gi._2
1139- let fd = gi._3
1140- let fe = gi._4
1141- let ff = if ((fb > 0))
1158+ let go = bA(bB)
1159+ let fh = go._1
1160+ let fi = go._2
1161+ let fj = go._3
1162+ let fk = go._4
1163+ let fl = if ((fh > 0))
11421164 then ag
11431165 else af
1144- let fg = (ff == af)
1145- let du = do(bB, fb)
1146- let gj = cZ(bB, an)
1147- let fj = gj._1
1148- let cY = gj._2
1149- let gk = bO(fg, du)
1150- let dt = gk._1
1151- let bR = gk._2
1152- let bS = gk._3
1153- let dB = gk._4
1154- let dC = gk._5
1155- let dy = ar(at(cY, au(dt)), au(fb))
1156- let gl = cf(fb, fc, fe, dy)
1157- let co = gl._1
1158- let cp = gl._2
1159- let ck = gl._3
1160- let fo = (cY - dy)
1161- let fp = if ((fb > 0))
1162- then ((fj - du) - fo)
1163- else ((fo + fj) - du)
1164- let gm = at(du, bi())
1165- let gn = (gm / 2)
1166- let fM = (gm - gn)
1167- let go = (co - gm)
1168- let fq = (fb + dt)
1169- let fs = au(fp)
1170- let gp = by(fq)
1166+ let fm = (fl == af)
1167+ let du = do(bB, fh)
1168+ let gp = cZ(bB, an)
1169+ let fp = gp._1
1170+ let cY = gp._2
1171+ let gq = bO(fm, du)
1172+ let dt = gq._1
1173+ let bR = gq._2
1174+ let bS = gq._3
1175+ let dB = gq._4
1176+ let dC = gq._5
1177+ let dy = ar(at(cY, au(dt)), au(fh))
1178+ let gr = cf(fh, fi, fk, dy)
1179+ let co = gr._1
1180+ let cp = gr._2
1181+ let ck = gr._3
1182+ let fu = (cY - dy)
1183+ let fv = if ((fh > 0))
1184+ then ((fp - du) - fu)
1185+ else ((fu + fp) - du)
1186+ let gs = at(du, bi())
1187+ let gt = (gs / 2)
1188+ let fS = (gs - gt)
1189+ let gu = (co - gs)
1190+ let fw = (fh + dt)
1191+ let fy = au(fv)
1192+ let gv = by(fw)
11711193 let dF = (bc() - du)
1172- let gb = (aV() - gm)
1173- let gq = if ((0 > gb))
1174- then $Tuple2(0, au(gb))
1175- else $Tuple2(gb, 0)
1176- let gr = gq._1
1177- let gs = gq._2
1178- let fA = if ((gs > 0))
1194+ let gh = (aV() - gs)
1195+ let gw = if ((0 > gh))
1196+ then $Tuple2(0, au(gh))
1197+ else $Tuple2(gh, 0)
1198+ let gx = gw._1
1199+ let gy = gw._2
1200+ let fG = if ((gy > 0))
11791201 then {
1180- let gf = invoke(ab(), "withdraw", [gs], nil)
1181- if ((gf == gf))
1202+ let gl = invoke(ab(), "withdraw", [gy], nil)
1203+ if ((gl == gl))
11821204 then nil
11831205 else throw("Strict value is not equal to itself.")
11841206 }
11851207 else nil
1186- if ((fA == fA))
1208+ if ((fG == fG))
11871209 then {
1188- let fV = invoke(Z(), "unlockNeutrino", [(gm - gs), toBase58String(Y())], nil)
1189- if ((fV == fV))
1210+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1211+ if ((gb == gb))
11901212 then {
1191- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
1192- if ((fO == fO))
1213+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1214+ if ((fU == fU))
11931215 then {
1194- let fu = invoke(ac(), "notifyNotional", [bB, fs], nil)
1195- if ((fu == fu))
1196- then (((et(bB, fq, go, fs, gp) ++ eF(bR, bS, dB, dC, dF, (bq() - (if ((fq > 0))
1216+ let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
1217+ if ((fA == fA))
1218+ then (((ez(bB, fw, gu, fy, gv) ++ eL(bR, bS, dB, dC, dF, (bq() - (if ((fw > 0))
11971219 then au(dt)
1198- else 0)), (bp() - (if ((0 > fq))
1220+ else 0)), (bp() - (if ((0 > fw))
11991221 then au(dt)
1200- else 0)))) ++ eM(bs.caller, gn)) ++ eP(gr))
1222+ else 0)))) ++ eS(bs.caller, gt)) ++ eV(gx))
12011223 else throw("Strict value is not equal to itself.")
12021224 }
12031225 else throw("Strict value is not equal to itself.")
12041226 }
12051227 else throw("Strict value is not equal to itself.")
12061228 }
12071229 else throw("Strict value is not equal to itself.")
12081230 }
12091231 else {
1210- let gt = dv(bB, false)
1211- let cT = gt._1
1212- let cp = gt._2
1213- let cU = gt._3
1214- let cV = gt._4
1215- let bR = gt._5
1216- let bS = gt._6
1217- let dB = gt._7
1218- let dC = gt._8
1219- let dF = gt._9
1220- let du = gt._10
1221- let dD = gt._11
1222- let dE = gt._12
1223- let gm = at(du, bi())
1224- let gn = (gm / 2)
1225- let fM = (gm - gn)
1226- let gb = (aV() - gm)
1227- let gu = if ((0 > gb))
1228- then $Tuple2(0, au(gb))
1229- else $Tuple2(gb, 0)
1230- let gr = gu._1
1231- let gs = gu._2
1232- let fA = if ((gs > 0))
1232+ let gz = dv(bB, false)
1233+ let cT = gz._1
1234+ let cp = gz._2
1235+ let cU = gz._3
1236+ let cV = gz._4
1237+ let bR = gz._5
1238+ let bS = gz._6
1239+ let dB = gz._7
1240+ let dC = gz._8
1241+ let dF = gz._9
1242+ let du = gz._10
1243+ let dD = gz._11
1244+ let dE = gz._12
1245+ let gs = at(du, bi())
1246+ let gt = (gs / 2)
1247+ let fS = (gs - gt)
1248+ let gh = (aV() - gs)
1249+ let gA = if ((0 > gh))
1250+ then $Tuple2(0, au(gh))
1251+ else $Tuple2(gh, 0)
1252+ let gx = gA._1
1253+ let gy = gA._2
1254+ let fG = if ((gy > 0))
12331255 then {
1234- let gf = invoke(ab(), "withdraw", [gs], nil)
1235- if ((gf == gf))
1256+ let gl = invoke(ab(), "withdraw", [gy], nil)
1257+ if ((gl == gl))
12361258 then nil
12371259 else throw("Strict value is not equal to itself.")
12381260 }
12391261 else nil
1240- if ((fA == fA))
1262+ if ((fG == fG))
12411263 then {
1242- let fV = invoke(Z(), "unlockNeutrino", [(gm - gs), toBase58String(Y())], nil)
1243- if ((fV == fV))
1264+ let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1265+ if ((gb == gb))
12441266 then {
1245- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fM)])
1246- if ((fO == fO))
1267+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1268+ if ((fU == fU))
12471269 then {
1248- let fu = invoke(ac(), "notifyNotional", [bB, 0], nil)
1249- if ((fu == fu))
1250- then (((eL(bB) ++ eF(bR, bS, dB, dC, dF, dD, dE)) ++ eM(bs.caller, gn)) ++ eP(gr))
1270+ let fA = invoke(ac(), "notifyNotional", [bB, 0], nil)
1271+ if ((fA == fA))
1272+ then (((eR(bB) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(bs.caller, gt)) ++ eV(gx))
12511273 else throw("Strict value is not equal to itself.")
12521274 }
12531275 else throw("Strict value is not equal to itself.")
12541276 }
12551277 else throw("Strict value is not equal to itself.")
12561278 }
12571279 else throw("Strict value is not equal to itself.")
12581280 }
12591281 }
12601282
12611283
12621284
12631285 @Callable(bs)
12641286 func payFunding () = {
1265- let gv = bd()
1266- if (if (if ((gv > lastBlock.timestamp))
1287+ let gB = bd()
1288+ if (if (if ((gB > lastBlock.timestamp))
12671289 then true
12681290 else !(bG()))
12691291 then true
12701292 else bH())
1271- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gv)))
1293+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gB)))
12721294 else {
1273- let gw = cz()
1274- let gx = dG()
1275- let gy = (gx - gw)
1276- let gz = if (if ((bp() == 0))
1277- then true
1278- else (bq() == 0))
1279- then $Tuple2(0, 0)
1280- else if ((0 > gy))
1281- then {
1282- let gA = ar(at(gy, bf()), al)
1283- let gB = ar(at(gA, bp()), bq())
1284- $Tuple2(gA, gB)
1285- }
1286- else {
1287- let gB = ar(at(gy, bf()), al)
1288- let gA = ar(at(gB, bq()), bp())
1289- $Tuple2(gA, gB)
1290- }
1291- let gA = gz._1
1292- let gB = gz._2
1293- en((gv + bg()), (bn() + gB), (bo() + gA), ar(gB, gw), ar(gA, gw))
1295+ let ee = cz()
1296+ let gC = ed()
1297+ let eh = gC._1
1298+ let ei = gC._2
1299+ et((gB + bg()), (bn() + ei), (bo() + eh), ar(ei, ee), ar(eh, ee))
12941300 }
12951301 }
12961302
12971303
12981304
12991305 @Callable(bs)
1300-func forceMoveAsset (bB,eN) = if (if ((addressFromPublicKey(X()) != bs.caller))
1306+func forceMoveAsset (bB,eT) = if (if ((addressFromPublicKey(X()) != bs.caller))
13011307 then true
1302- else (0 > eN))
1308+ else (0 > eT))
13031309 then throw("Invalid forceMoveAsset parameters")
13041310 else {
1305- let fV = invoke(Z(), "unlockNeutrino", [eN, toBase58String(Y())], nil)
1306- if ((fV == fV))
1307- then (eM(addressFromStringValue(bB), eN) ++ eP((aV() - eN)))
1311+ let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1312+ if ((gb == gb))
1313+ then (eS(addressFromStringValue(bB), eT) ++ eV((aV() - eT)))
13081314 else throw("Strict value is not equal to itself.")
13091315 }
13101316
13111317
13121318
13131319 @Callable(bs)
13141320 func adjustPeg (dX) = if (if ((addressFromPublicKey(X()) != bs.caller))
13151321 then true
13161322 else (0 > dX))
13171323 then throw("Invalid adjustPeg parameters")
13181324 else {
1319- let gC = dW(dX)
1320- let eb = gC._1
1321- let gD = gC._2
1322- if ((gD == 0))
1325+ let gD = dW(dX)
1326+ let eb = gD._1
1327+ let gE = gD._2
1328+ if ((gE == 0))
13231329 then throw("Nothing to adjust")
1324- else if ((gD > 0))
1330+ else if ((gE > 0))
13251331 then {
1326- let gf = invoke(ab(), "withdraw", [gD], nil)
1327- if ((gf == gf))
1332+ let gl = invoke(ab(), "withdraw", [gE], nil)
1333+ if ((gl == gl))
13281334 then {
1329- let fN = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gD)])
1330- if ((fN == fN))
1331- then (eP((aV() + gD)) ++ eE(eb, aZ()))
1335+ let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gE)])
1336+ if ((fT == fT))
1337+ then (eV((aV() + gE)) ++ eK(eb, aZ()))
13321338 else throw("Strict value is not equal to itself.")
13331339 }
13341340 else throw("Strict value is not equal to itself.")
13351341 }
13361342 else {
1337- let fV = invoke(Z(), "unlockNeutrino", [au(gD), toBase58String(Y())], nil)
1338- if ((fV == fV))
1343+ let gb = invoke(Z(), "unlockNeutrino", [au(gE), toBase58String(Y())], nil)
1344+ if ((gb == gb))
13391345 then {
1340- let fO = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gD))])
1341- if ((fO == fO))
1342- then (eP((aV() - au(gD))) ++ eE(eb, aZ()))
1346+ let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gE))])
1347+ if ((fU == fU))
1348+ then (eV((aV() - au(gE))) ++ eK(eb, aZ()))
13431349 else throw("Strict value is not equal to itself.")
13441350 }
13451351 else throw("Strict value is not equal to itself.")
13461352 }
13471353 }
13481354
13491355
13501356
13511357 @Callable(bs)
13521358 func v_get (bB) = {
1353- let gE = dv(bB, false)
1354- let cT = gE._1
1355- let cU = gE._2
1356- let cV = gE._3
1357- let gF = gE._4
1358- throw((((ap(cU) + ap(cV)) + ap(gF)) + ap(dn(bB))))
1359+ let gF = dv(bB, false)
1360+ let cT = gF._1
1361+ let cU = gF._2
1362+ let cV = gF._3
1363+ let gG = gF._4
1364+ throw((((ap(cU) + ap(cV)) + ap(gG)) + ap(dn(bB))))
13591365 }
13601366
13611367
13621368
13631369 @Callable(bs)
13641370 func view_calcRemainMarginWithFundingPayment (bB) = {
1365- let gG = bA(bB)
1366- let bE = gG._1
1367- let db = gG._2
1368- let dk = gG._3
1369- let dd = gG._4
1370- let gH = cZ(bB, an)
1371- let cQ = gH._1
1372- let cY = gH._2
1373- let gI = cf(bE, db, dd, cY)
1374- let co = gI._1
1375- let cp = gI._2
1376- let ck = gI._3
1371+ let gH = bA(bB)
1372+ let bE = gH._1
1373+ let db = gH._2
1374+ let dk = gH._3
1375+ let dd = gH._4
1376+ let gI = cZ(bB, an)
1377+ let cQ = gI._1
1378+ let cY = gI._2
1379+ let gJ = cf(bE, db, dd, cY)
1380+ let co = gJ._1
1381+ let cp = gJ._2
1382+ let ck = gJ._3
13771383 throw((((((ap(co) + ap(ck)) + ap(dn(bB))) + ap(cY)) + ap(cp)) + ap(cQ)))
13781384 }
13791385
13801386
13811387
13821388 @Callable(bs)
13831389 func view_getPegAdjustCost (dX) = {
13841390 let ec = dW(dX)
13851391 throw(toString(ec._2))
13861392 }
13871393
13881394
1389-@Verifier(gJ)
1390-func gK () = sigVerify(gJ.bodyBytes, gJ.proofs[0], X())
1395+
1396+@Callable(bs)
1397+func view_getFunding () = {
1398+ let ee = cz()
1399+ let gK = ed()
1400+ let eh = gK._1
1401+ let ei = gK._2
1402+ let gL = ar(ei, ee)
1403+ let gM = ar(eh, ee)
1404+ throw((ap(gL) + ap(gM)))
1405+ }
1406+
1407+
1408+@Verifier(gN)
1409+func gO () = sigVerify(gN.bodyBytes, gN.proofs[0], X())
13911410

github/deemru/w8io/169f3d6 
428.75 ms