tx · 8XZjmSv9YmBVodmaa5FhmYk9s7crxSb3CvXwCLDRiFeb

3MtoZUczzB13W1FBwFat4qUsPvZTmfbPgfD:  -0.07500000 Waves

2022.12.16 16:03 [2362899] smart account 3MtoZUczzB13W1FBwFat4qUsPvZTmfbPgfD > SELF 0.00000000 Waves

{ "type": 13, "id": "8XZjmSv9YmBVodmaa5FhmYk9s7crxSb3CvXwCLDRiFeb", "fee": 7500000, "feeAssetId": null, "timestamp": 1671195912498, "version": 2, "chainId": 84, "sender": "3MtoZUczzB13W1FBwFat4qUsPvZTmfbPgfD", "senderPublicKey": "A4SEfMUg91Ajmn3tCGwsoA6fGedNdTgs5GdAo5JdeP79", "proofs": [ "2SVPAT6uQxmuf1vu4864RJ77aq6tLoaMyHboWUh693yFHftthjvXVXEjbKkAJHArqZk4zHs9sBu4a4FKXb6nHnFN" ], "script": "base64:BgJ6CAISABIAEgASABIDCgEBEgMKAQESDgoMAQEBAQEBAQEBAQEBEhQKEgEBAQEBAQEICAgIAQEBAQEBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESBAoCAQESAwoBCBIAEgASAwoBCBIDCgEBEgASABIDCgEIEgASBAoCCAjBAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AAVrX29yYQIFa19vcmEACWtfYmFsYW5jZQIJa19iYWxhbmNlAAprX3NlcXVlbmNlAgprX3NlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UAD2tfcG9zaXRpb25Bc3NldAIPa19wb3NpdGlvbkFzc2V0AA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19sYXN0RGF0YVN0cgINa19sYXN0RGF0YVN0cgAOa19sYXN0TWludXRlSWQCDmtfbGFzdE1pbnV0ZUlkAB1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UAE2tfdHdhcERhdGFMYXN0UHJpY2UCE2tfdHdhcERhdGFMYXN0UHJpY2UAGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAhprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfdmF1bHRfYWRkcmVzcwIPa192YXVsdF9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfcXVvdGVfc3Rha2luZwIPa19xdW90ZV9zdGFraW5nABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwAUa19jb2xsYXRlcmFsX2FkZHJlc3MCFGtfY29sbGF0ZXJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MAIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAiBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ5hZG1pblB1YmxpY0tleQAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19hZG1pbl9wdWJsaWNfa2V5AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0ARFjb2xsYXRlcmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRRrX2NvbGxhdGVyYWxfYWRkcmVzcwIaQ29sbGF0ZXJhbCBNYW5hZ2VyIG5vdCBzZXQBC3N3YXBBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABRJrX2V4Y2hhbmdlX2FkZHJlc3MCD05vIHN3YXAgYWRkcmVzcwIUSW52YWxpZCBzd2FwIGFkZHJlc3MAEWtfd2hpdGVsaXN0X2Fzc2V0AhFrX3doaXRlbGlzdF9hc3NldAEQaXNXaGl0ZWxpc3RBc3NldAEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEWNvbGxhdGVyYWxBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBwANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAPT1JBQ0xFX0lOVEVSVkFMAA8AB1NFQ09ORFMA6AcAD0RFQ0lNQUxfTlVNQkVSUwAGAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBXNxcnRkAQJfeAkBBHNxcnQEBQJfeAUPREVDSU1BTF9OVU1CRVJTBQ9ERUNJTUFMX05VTUJFUlMFCEhBTEZFVkVOAQRwb3dkAgJfeAJfeQkAbAYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQZic3FydGQBAl94CQEKc3FydEJpZ0ludAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJwb3dkAgJfeAJfeQkAdgYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBAg5JbnZhbGlkIG1hcmdpbgMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBAg5JbnZhbGlkIG1hcmdpbgYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCWCgQFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAlgoEAAAAAAAAAAABEGdldFBvc2l0aW9uQXNzZXQBB190cmFkZXIEEHBvc2l0aW9uQXNzZXRPcHQJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAckbWF0Y2gwBRBwb3NpdGlvbkFzc2V0T3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQNcG9zaXRpb25Bc3NldAUHJG1hdGNoMAUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQljbG9zZU9ubHkACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFC2tfY2xvc2VPbmx5BwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQBDWNhbGNJbnZhcmlhbnQEB19xdEFzdFIHX3F0QXN0VwdfYnNBc3RSB19ic0FzdFcEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYnF0QXN0VwkAtgIBBQdfcXRBc3RXBAdiYnNBc3RSCQC2AgEFB19ic0FzdFIEB2Jic0FzdFcJALYCAQUHX2JzQXN0VwkBBWJtdWxkAgkBBWJtdWxkAgUHYnF0QXN0UgUHYnF0QXN0VwkBBWJtdWxkAgUHYmJzQXN0UgUHYmJzQXN0VwEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAFrCQENY2FsY0ludmFyaWFudAQFB19xdEFzdFIFB19xdEFzdFcFB19ic0FzdFIFB19ic0FzdFcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQZfaXNBZGQJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBCQEEbXVsZAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFB19xdEFzdFcEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBBGRpdmQCCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgUHX3F0QXN0VwQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNjk0NjE3MTA5CQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjk0NjE3MTA5Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY5NDYxNzEwOQJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjk0NjE3MTA5Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4NTk2MTg3MjMDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg1OTYxODcyMwJfMQQHYmFkRGVidAgFDSR0MDE4NTk2MTg3MjMCXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAQFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBCQEEbXVsZAIFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgUQX2Jhc2VBc3NldFdlaWdodAQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE5OTExMjAwNzIJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5OTExMjAwNzICXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxOTkxMTIwMDcyAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE5OTExMjAwNzICXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQQIYmxvY2tLZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5AgADCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQSYWJzUHJpY2VEaWZmQmVmb3JlCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UJAQZxdEFzdFIACQEGYnNBc3RSAAUHX3F0QXN0VwUHX2JzQXN0VwQRYWJzUHJpY2VEaWZmQWZ0ZXIJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwUHX2JzQXN0VwMDCQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIJAQ5tYXhQcmljZVNwcmVhZAAJAGYCBRFhYnNQcmljZURpZmZBZnRlcgUSYWJzUHJpY2VEaWZmQmVmb3JlBwkAAgEJAKwCAgkArAICCQCsAgICDVByaWNlIHNwcmVhZCAJAKQDAQURYWJzUHJpY2VEaWZmQWZ0ZXICFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIRX2xvbmdPcGVuTm90aW9uYWwSX3Nob3J0T3Blbk5vdGlvbmFsBBBfbWF4T3Blbk5vdGlvbmFsCQEPbWF4T3Blbk5vdGlvbmFsAAMJAGYCBRFfbG9uZ09wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICE0xvbmcgb3BlbiBub3Rpb25hbCAJAKQDAQURX2xvbmdPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsAwkAZgIFEl9zaG9ydE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICFFNob3J0IG9wZW4gbm90aW9uYWwgCQCkAwEFEl9zaG9ydE9wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ1fcG9zaXRpb25TaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsAwkAAAIFB19vcHRpb24FD1BOTF9PUFRJT05fU1BPVAQNJHQwMjQ2MzUyNDg1NQkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHCQEBIQEFB2lzU2hvcnQFD3Bvc2l0aW9uU2l6ZUFicwcFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BBNvdXRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjQ2MzUyNDg1NQJfMQQCeDEIBQ0kdDAyNDYzNTI0ODU1Al8yBAJ4MggFDSR0MDI0NjM1MjQ4NTUCXzMEAngzCAUNJHQwMjQ2MzUyNDg1NQJfNAUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJARJnZXRPcmFjbGVUd2FwUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjYyODAyNjQwOAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjYyODAyNjQwOAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNjI4MDI2NDA4Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI2MjgwMjY0MDgCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjYyODAyNjQwOAJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMjY5MjEyNzAzMgkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjY5MjEyNzAzMgJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNjkyMTI3MDMyAl8yBANwb24IBQ0kdDAyNjkyMTI3MDMyAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI2OTIxMjcwMzICXzQEDSR0MDI3MDM4MjcxMzEJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyNzAzODI3MTMxAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjcwMzgyNzEzMQJfMgQNJHQwMjcxMzYyNzMwMgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjcxMzYyNzMwMgJfMQQHYmFkRGVidAgFDSR0MDI3MTM2MjczMDICXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRVleGNoYW5nZWRQb3NpdGlvblNpemUHAl8xBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50ARVpbnRlcm5hbENsb3NlUG9zaXRpb24CB190cmFkZXIUX2NoZWNrTWF4UHJpY2VJbXBhY3QEDSR0MDI4NTQyMjg2NzAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI4NTQyMjg2NzACXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg1NDIyODY3MAJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyODU0MjI4NjcwAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI4NTQyMjg2NzACXzQEDXVucmVhbGl6ZWRQbmwICQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QCXzIEDSR0MDI4NzY1Mjg5MzMJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI4NzY1Mjg5MzMCXzEEB2JhZERlYnQIBQ0kdDAyODc2NTI4OTMzAl8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDI5MDYwMjkzMzQJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDI5MDYwMjkzMzQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTA2MDI5MzM0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAyOTA2MDI5MzM0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMjkwNjAyOTMzNAJfNAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAyOTA2MDI5MzM0Al81BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAyOTA2MDI5MzM0Al82BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ8KDQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFDHBvc2l0aW9uU2l6ZQAABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwAAAEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzE0NTczMTYzNgkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzE0NTczMTYzNgJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDMxNDU3MzE2MzYCXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDMxNDU3MzE2MzYCXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBANiczIJAQVicG93ZAIJALcCAgUBYgUCc3oJALYCAQkAaAIAAgUMREVDSU1BTF9VTklUBARxYnMyCQEFYm11bGQCBQFxBQNiczIEA3BzNAkAuQICCQC2AgEABAkBBWJtdWxkAgUBcAUCc3oEA3NxcgkBBmJzcXJ0ZAEJAQVibXVsZAIFBHFiczIJALgCAgUBcQUDcHM0BAJicQkBBWJtdWxkAgUBYgUBcQQCcXMJAQVibXVsZAIFAXEFAnN6BAN0b3AJALcCAgkAtwICCQC+AgEFA3NxcgUCYnEFAnFzBANib3QJALkCAgkAtgIBAAIJAQVibXVsZAIFAXEFAnN6BAZyZXN1bHQJAQViZGl2ZAIFA3RvcAUDYm90CQCgAwEFBnJlc3VsdAEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDDl90ZXJtaW5hbFByaWNlB19xdEFzdFIHX2JzQXN0UgQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQJbmV3UXRBc3RXCQETZ2V0UXVvdGVBc3NldFdlaWdodAQFB19ic0FzdFIFDV9wb3NpdGlvblNpemUFB19xdEFzdFIFDl90ZXJtaW5hbFByaWNlBAluZXdCc0FzdFcFDERFQ0lNQUxfVU5JVAQNbWFyZ2luVG9WYXVsdAgJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUNX3Bvc2l0aW9uU2l6ZQUVY3VycmVudE5ldE1hcmtldFZhbHVlBQdfcXRBc3RSBQluZXdRdEFzdFcFB19ic0FzdFIFCW5ld0JzQXN0VwUPUE5MX09QVElPTl9TUE9UAl8yCQCVCgMFCW5ld1F0QXN0VwUJbmV3QnNBc3RXBQ1tYXJnaW5Ub1ZhdWx0AQpnZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNc3BvdFR3YXBQcmljZQkBEGdldFR3YXBTcG90UHJpY2UABAdwcmVtaXVtCQBlAgUNc3BvdFR3YXBQcmljZQUPdW5kZXJseWluZ1ByaWNlAwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAACQCUCgIAAAAAAwkAZgIAAAUHcHJlbWl1bQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24EE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24BDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDAzNDY1NTM1MTUwAwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwMzQ2NTUzNTE1MAJfMQQMYnVybkFydGlmYWN0CAUNJHQwMzQ2NTUzNTE1MAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIHX3RyYWRlcghfYXNzZXRJZAQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQMJAAACBQ9vbGRQb3NpdGlvblNpemUAAAYJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAQtpc1NhbWVBc3NldAIHX3RyYWRlcghfYXNzZXRJZAkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMEX2FtbQhfYXNzZXRJZAdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBSBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAIBXwUEX2FtbQIBXwUIX2Fzc2V0SWQCAV8FB190cmFkZXIBE2dldEJvcnJvd2VkQnlUcmFkZXIBB190cmFkZXIEDXBvc2l0aW9uQXNzZXQJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgMJAAACBQ1wb3NpdGlvbkFzc2V0CQDYBAEJAQpxdW90ZUFzc2V0AAkAlAoCAAAFDXBvc2l0aW9uQXNzZXQEA2tleQkBHmdldEJvcnJvd2VkQnlUcmFkZXJJbk1hcmtldEtleQMJAKUIAQUEdGhpcwUNcG9zaXRpb25Bc3NldAUHX3RyYWRlcgQGYm9ycm93CQELdmFsdWVPckVsc2UCCQCaCAIJARFjb2xsYXRlcmFsQWRkcmVzcwAFA2tleQAACQCUCgIFBmJvcnJvdwUNcG9zaXRpb25Bc3NldAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDAzNjM4MTM2NDU1CQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwMzYzODEzNjQ1NQJfMQQMYnVybkFydGlmYWN0CAUNJHQwMzYzODEzNjQ1NQJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncwwQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAETdXBkYXRlUG9zaXRpb25Bc3NldAIIX2FkZHJlc3MIX2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQhfYWRkcmVzcwUIX2Fzc2V0SWQFA25pbAEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgINaXNOZXdQb3NpdGlvbghfYWRkcmVzcwMFDWlzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUIX2FkZHJlc3MJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAEOdXBkYXRlUG9zaXRpb24FCF9hZGRyZXNzBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzBQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzBQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FA25pbAEKYXBwZW5kVHdhcAEGX3ByaWNlBAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BBBwcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAADCQBmAgUQcHJldmlvdXNNaW51dGVJZAUIbWludXRlSWQJAAIBAhFUV0FQIG91dC1vZi1vcmRlcgQMbGFzdE1pbnV0ZUlkAwkAAAIFEHByZXZpb3VzTWludXRlSWQAAAUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQDCQBmAgUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFEHByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rX2xhc3RNaW51dGVJZAUIbWludXRlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19sYXN0RGF0YVN0cgkBCWxpc3RUb1N0cgEFBGxpc3QFA25pbAQYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkAAAEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUGX3ByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQlwcmV2UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQZfcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19xdW90ZUFzc2V0V2VpZ2h0BQdfcXRBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2Jhc2VBc3NldFdlaWdodAUHX2JzQXN0VwUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgUHX3F0QXN0UgUHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa190b3RhbFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwFFV9vcGVuSW50ZXJlc3ROb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXa190b3RhbExvbmdQb3NpdGlvblNpemUFFl90b3RhbExvbmdQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfb3BlbkludGVyZXN0TG9uZwUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19vcGVuSW50ZXJlc3RTaG9ydAUXX3RvdGFsU2hvcnRPcGVuTm90aW9uYWwFA25pbAkBCmFwcGVuZFR3YXABCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MFA25pbAEId2l0aGRyYXcCCF9hZGRyZXNzB19hbW91bnQEB2JhbGFuY2UJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAZgIFB19hbW91bnQFB2JhbGFuY2UJAAIBCQCsAgIJAKwCAgkArAICAhNVbmFibGUgdG8gd2l0aGRyYXcgCQCkAwEFB19hbW91bnQCFyBmcm9tIGNvbnRyYWN0IGJhbGFuY2UgCQCkAwEFB2JhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIX2FkZHJlc3MFB19hbW91bnQJAQpxdW90ZUFzc2V0AAUDbmlsAQ11cGRhdGVCYWxhbmNlAQFpAwkAZgIAAAUBaQkAAgECB0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYmFsYW5jZQUBaQUDbmlsAQt0cmFuc2ZlckZlZQEBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEOc3Rha2luZ0FkZHJlc3MABQFpCQEKcXVvdGVBc3NldAAFA25pbAEOZG9CdXJuQXJ0aWZhY3QCDV9idXJuQXJ0aWZhY3QBaQMFDV9idXJuQXJ0aWZhY3QJAMwIAgkBBEJ1cm4CCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAIQSW52YWxpZCBhcnRpZmFjdAABBQNuaWwFA25pbBcBaQEFcGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFEludmFsaWQgcGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAYFA25pbAFpAQd1bnBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIHVucGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxzZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECG0ludmFsaWQgc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkGBQNuaWwBaQEOdW5zZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgdW5zZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBRiYXNlQXNzZXRBbW91bnRUb0FkZAkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQEDSR0MDQ1NDc3NDU2MzIJARRnZXRTeW5jVGVybWluYWxQcmljZQMJARJnZXRPcmFjbGVUd2FwUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA0NTQ3NzQ1NjMyAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA0NTQ3NzQ1NjMyAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDU0Nzc0NTYzMgJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ5jaGFuZ2VTZXR0aW5ncwwQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5AwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MMBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQFpAQppbml0aWFsaXplEgdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUHX29yYWNsZQpfb3JhY2xlS2V5D19vcmFjbGVCbG9ja0tleQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5AwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBnAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQELaW5pdGlhbGl6ZWQACQACAQIdSW52YWxpZCBpbml0aWFsaXplIHBhcmFtZXRlcnMJAM4IAgkAzggCCQDOCAIJAM4IAgkBCXVwZGF0ZUFtbQgFB19xdEFzdFIFB19ic0FzdFIAAAAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncwwFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5CQENdXBkYXRlRnVuZGluZwUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtfb3JhBQdfb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtfb3JhX2tleQUKX29yYWNsZUtleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rX29yYV9ibG9ja19rZXkFD19vcmFjbGVCbG9ja0tleQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yBQNuaWwBaQEQZGVjcmVhc2VQb3NpdGlvbgMHX2Ftb3VudAlfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQMDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBBnBhdXNlZAAJAAIBAiNJbnZhbGlkIGRlY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNDk0NzU0OTYxNQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNDk0NzU0OTYxNQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA0OTQ3NTQ5NjE1Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQ5NDc1NDk2MTUCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDk0NzU0OTYxNQJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNDk3ODg0OTg5MgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNDk3ODg0OTg5MgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDQ5Nzg4NDk4OTICXzIEDSR0MDQ5ODk4NTI1NTYDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsBA0kdDA1MDMxMzUwNDk3CQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCAUNJHQwNTAzMTM1MDQ5NwJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDUwMzEzNTA0OTcCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDUwMzEzNTA0OTcCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1MDMxMzUwNDk3Al80BBhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAgEJAKwCAgkArAICCQCsAgICJVRvbyBsaXR0bGUgYmFzZSBhc3NldCBleGNoYW5nZWQsIGdvdCAJAKQDAQUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzAgogZXhwZWN0ZWQgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQEC3JlYWxpemVkUG5sCQEEZGl2ZAIJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDA1MDkzNDUxMTc5CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNTA5MzQ1MTE3OQJfMQQHYmFkRGVidAgFDSR0MDUwOTM0NTExNzkCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNTA5MzQ1MTE3OQJfMwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUMb3Blbk5vdGlvbmFsBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQCeCgwFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQxvcGVuTm90aW9uYWwAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAACQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDQ5ODk4NTI1NTYCXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNDk4OTg1MjU1NgJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0OTg5ODUyNTU2Al8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDQ5ODk4NTI1NTYCXzQEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5ODk4NTI1NTYCXzUEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0OTg5ODUyNTU2Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNDk4OTg1MjU1NgJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDQ5ODk4NTI1NTYCXzgEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNDk4OTg1MjU1NgJfOQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNDk4OTg1MjU1NgNfMTAEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNDk4OTg1MjU1NgNfMTEEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDQ5ODk4NTI1NTYDXzEyBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBpbmNyZWFzZVBvc2l0aW9uBApfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAAEEWlzQ29sbGF0ZXJhbEFzc2V0CQEQaXNXaGl0ZWxpc3RBc3NldAEFC19hc3NldElkU3RyAwMDAwMDAwMDCQECIT0CBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkBAiE9AgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBwYJAGcCAAAFCl9yYXdBbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDUzOTk0NTQwNzkJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyCQENZ2V0QXJ0aWZhY3RJZAEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNTM5OTQ1NDA3OQJfMQQMYnVybkFydGlmYWN0CAUNJHQwNTM5OTQ1NDA3OQJfMgQMcmF3RmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQFC2FkanVzdGVkRmVlBAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUMcmF3RmVlQW1vdW50BBNkaXN0cmlidXRlRmVlQW1vdW50AwURaXNDb2xsYXRlcmFsQXNzZXQECGRvQm9ycm93CQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACBmJvcnJvdwkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQdfYW1vdW50BQNuaWwDCQAAAgUIZG9Cb3Jyb3cFCGRvQm9ycm93BA1iYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQ1iYWxhbmNlQmVmb3JlBQ1iYWxhbmNlQmVmb3JlBAZkb1N3YXAJAPwHBAkBC3N3YXBBZGRyZXNzAAIEc3dhcAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFDHJhd0ZlZUFtb3VudAUDbmlsAwkAAAIFBmRvU3dhcAUGZG9Td2FwBAxiYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDGJhbGFuY2VBZnRlcgUMYmFsYW5jZUFmdGVyBA9leGNoYW5nZWRBbW91bnQJAGUCBQxiYWxhbmNlQWZ0ZXIFDWJhbGFuY2VCZWZvcmUDCQAAAgUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUMcmF3RmVlQW1vdW50AwkAAAIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFE2Rpc3RyaWJ1dGVGZWVBbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNTUzOTU1NTUzNQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTUzOTU1NTUzNQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1NTM5NTU1NTM1Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU1Mzk1NTU1MzUCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTUzOTU1NTUzNQJfNAQNaXNOZXdQb3NpdGlvbgkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABA9pc1NhbWVEaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkAAAIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAQOZXhwYW5kRXhpc3RpbmcDCQEBIQEFDWlzTmV3UG9zaXRpb24FD2lzU2FtZURpcmVjdGlvbgcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDU1ODI0NTg4NjUDAwUNaXNOZXdQb3NpdGlvbgYFDmV4cGFuZEV4aXN0aW5nBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA1NjI4NjU2NDU5CQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0CAUNJHQwNTYyODY1NjQ1OQJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDU2Mjg2NTY0NTkCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDU2Mjg2NTY0NTkCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1NjI4NjU2NDU5Al80AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQxvcGVuTm90aW9uYWwAAAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAEGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQJAQRkaXZkAgUMb3Blbk5vdGlvbmFsBQlfbGV2ZXJhZ2UEDSR0MDU3MDY3NTczMDYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQEDHJlbWFpbk1hcmdpbggFDSR0MDU3MDY3NTczMDYCXzEEAngxCAUNJHQwNTcwNjc1NzMwNgJfMgQCeDIIBQ0kdDA1NzA2NzU3MzA2Al8zAwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAMJAQEhAQkBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAAgECFk92ZXIgbWF4IG9wZW4gbm90aW9uYWwJAJ4KDAUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA1ODU2NTU4NjgxCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNTg1NjU1ODY4MQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDU4NTY1NTg2ODECXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA1NTgyNDU4ODY1Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDU1ODI0NTg4NjUCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTU4MjQ1ODg2NQJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA1NTgyNDU4ODY1Al80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NTgyNDU4ODY1Al81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTU4MjQ1ODg2NQJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU1ODI0NTg4NjUCXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA1NTgyNDU4ODY1Al84BA50b3RhbExvbmdBZnRlcggFDSR0MDU1ODI0NTg4NjUCXzkED3RvdGFsU2hvcnRBZnRlcggFDSR0MDU1ODI0NTg4NjUDXzEwBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDU1ODI0NTg4NjUDXzExBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1NTgyNDU4ODY1A18xMgQNJHQwNTg4NzE1ODkyOAkBDWRpc3RyaWJ1dGVGZWUBBQlmZWVBbW91bnQEDGZlZVRvU3Rha2VycwgFDSR0MDU4ODcxNTg5MjgCXzEECmZlZVRvVmF1bHQIBQ0kdDA1ODg3MTU4OTI4Al8yBAVzdGFrZQMFDGlzUXVvdGVBc3NldAQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYJAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAgUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgkBE3VwZGF0ZVBvc2l0aW9uQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTWFyZ2luAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQABBFpc0NvbGxhdGVyYWxBc3NldAkBEGlzV2hpdGVsaXN0QXNzZXQBBQtfYXNzZXRJZFN0cgMDAwMDAwMJAQEhAQUMaXNRdW90ZUFzc2V0CQEBIQEFEWlzQ29sbGF0ZXJhbEFzc2V0BwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2lzU2FtZUFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjA4NzY2MDk2MQkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA2MDg3NjYwOTYxAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA2MDg3NjYwOTYxAl8yBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAULYWRqdXN0ZWRGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQDBRFpc0NvbGxhdGVyYWxBc3NldAQIZG9Cb3Jyb3cJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIGYm9ycm93CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFB19hbW91bnQFA25pbAMJAAACBQhkb0JvcnJvdwUIZG9Cb3Jyb3cEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEDGJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIED2V4Y2hhbmdlZEFtb3VudAkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQMJAAACBQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQxyYXdGZWVBbW91bnQDCQAAAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAUTZGlzdHJpYnV0ZUZlZUFtb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACDWFjY2VwdFBheW1lbnQJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNjIyNjA2MjQwMAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjIyNjA2MjQwMAJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2MjI2MDYyNDAwAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYyMjYwNjI0MDACXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjIyNjA2MjQwMAJfNAQNJHQwNjI0MDY2MjQ2MwkBDWRpc3RyaWJ1dGVGZWUBBQlmZWVBbW91bnQEDGZlZVRvU3Rha2VycwgFDSR0MDYyNDA2NjI0NjMCXzEECmZlZVRvVmF1bHQIBQ0kdDA2MjQwNjYyNDYzAl8yBAVzdGFrZQMFDGlzUXVvdGVBc3NldAQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAkAzAgCBwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCBRFvbGRQb3NpdGlvbk1hcmdpbgUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4BB19hbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDYzNTc1NjM3MTUJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDYzNTc1NjM3MTUCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjM1NzU2MzcxNQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2MzU3NTYzNzE1Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDYzNTc1NjM3MTUCXzQEC21hcmdpbkRlbHRhCQEBLQEFB19hbW91bnQEDSR0MDYzNzUyNjM5MzEJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC21hcmdpbkRlbHRhBAxyZW1haW5NYXJnaW4IBQ0kdDA2Mzc1MjYzOTMxAl8xBAdiYWREZWJ0CAUNJHQwNjM3NTI2MzkzMQJfMgMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNcXVvdGVBc3NldFN0cgkA2AQBCQEKcXVvdGVBc3NldAAEDSR0MDY0Mzc1NjQ0MjkJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA2NDM3NTY0NDI5Al8xBAdhc3NldElkCAUNJHQwNjQzNzU2NDQyOQJfMgQHdG9SZXBheQMJAGYCBQdfYW1vdW50BQhib3Jyb3dlZAUIYm9ycm93ZWQFB19hbW91bnQECnRvV2l0aGRyYXcDCQBmAgUIYm9ycm93ZWQFB19hbW91bnQAAAkAZQIFB19hbW91bnQFCGJvcnJvd2VkBAtmaW5hbEJvcnJvdwkAZQIFCGJvcnJvd2VkBQd0b1JlcGF5BBVzd2l0Y2hQb3NpdGlvblRvUXVvdGUDCQBmAgULZmluYWxCb3Jyb3cAAAUDbmlsCQETdXBkYXRlUG9zaXRpb25Bc3NldAIFB190cmFkZXIFDXF1b3RlQXNzZXRTdHIEDWRvU2FuaXR5Q2hlY2sDCQECIT0CCQBkAgUHdG9SZXBheQUKdG9XaXRoZHJhdwUHX2Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgh0b1JlcGF5PQkApAMBBQd0b1JlcGF5Ag4gKyB0b1dpdGhkcmF3PQkApAMBBQp0b1dpdGhkcmF3AgQgIT0gCQCkAwEFB19hbW91bnQFA25pbAMJAAACBQ1kb1Nhbml0eUNoZWNrBQ1kb1Nhbml0eUNoZWNrBAlkb1Vuc3Rha2UDCQBmAgUKdG9XaXRoZHJhdwAABAlkb1Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFCnRvV2l0aGRyYXcFA25pbAUDbmlsAwkAAAIFCWRvVW5zdGFrZQUJZG9VbnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQlkb1Vuc3Rha2UFCWRvVW5zdGFrZQQWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgMJAGYCBQd0b1JlcGF5AAAEB2RvUmVwYXkJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIFcmVwYXkJAMwIAgUHX3RyYWRlcgkAzAgCBQd0b1JlcGF5CQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFB2RvUmVwYXkFB2RvUmVwYXkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQd0b1JlcGF5CQDZBAEFB2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFnJldHVybkNvbGxhdGVyYWxBY3Rpb24FFnJldHVybkNvbGxhdGVyYWxBY3Rpb24JAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQMJAGYCBQp0b1dpdGhkcmF3AAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUKdG9XaXRoZHJhdwUDbmlsCQENdXBkYXRlQmFsYW5jZQEJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BRVzd2l0Y2hQb3NpdGlvblRvUXVvdGUFFnJldHVybkNvbGxhdGVyYWxBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgIFX3NpemUUX21pblF1b3RlQXNzZXRBbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkEDl90cmFkZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUHX3RyYWRlcgIOSW52YWxpZCBjYWxsZXIDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNjY1ODc2NjcyNwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjY1ODc2NjcyNwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NjU4NzY2NzI3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY2NTg3NjY3MjcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjY1ODc2NjcyNwJfNAQNJHQwNjY3MzM3MTE3MAMJAGYCCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBQVfc2l6ZQQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNjczMjQ2NzU0NgkBCnN3YXBPdXRwdXQDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFBV9zaXplBgQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDY3MzI0Njc1NDYCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2NzMyNDY3NTQ2Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2NzMyNDY3NTQ2Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjczMjQ2NzU0NgJfNAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQEBLQEFBV9zaXplBQVfc2l6ZQQNJHQwNjc2Mzc2Nzc5MQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjc2Mzc2Nzc5MQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDY3NjM3Njc3OTECXzIEAm1yCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBQ1yZWFsaXplZFJhdGlvBA0kdDA2ODA3MDY4MzA4CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNjgwNzA2ODMwOAJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjgwNzA2ODMwOAJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA2ODA3MDY4MzA4Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsBBFuZXdQb3NpdGlvbk1hcmdpbgkBBG11bGQCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUCbXIED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAoQoPBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwJAGQCCQEDYWJzAQkAZQIFDHJlbWFpbk1hcmdpbgURbmV3UG9zaXRpb25NYXJnaW4FC3JlYWxpemVkUG5sBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQAAAMJAGYCBQVfc2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQkAAgECIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA3MDExMTcwNTMwCQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgYEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA3MDExMTcwNTMwAl8xBA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MDExMTcwNTMwAl8yBAtyZWFsaXplZFBubAgFDSR0MDcwMTExNzA1MzACXzMEDW1hcmdpblRvVmF1bHQIBQ0kdDA3MDExMTcwNTMwAl80BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzAxMTE3MDUzMAJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzAxMTE3MDUzMAJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDcwMTExNzA1MzACXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3MDExMTcwNTMwAl84BAJ4MggFDSR0MDcwMTExNzA1MzACXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNzAxMTE3MDUzMANfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDcwMTExNzA1MzADXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDcwMTExNzA1MzADXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MDExMTcwNTMwA18xMwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKEKDwAAAAAAAAAABQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sBQ1tYXJnaW5Ub1ZhdWx0BRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDY2NzMzNzExNzACXzEEEW5ld1Bvc2l0aW9uTWFyZ2luCAUNJHQwNjY3MzM3MTE3MAJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NjczMzcxMTcwAl8zBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY2NzMzNzExNzACXzQED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDY2NzMzNzExNzACXzUEC3JlYWxpemVkUG5sCAUNJHQwNjY3MzM3MTE3MAJfNgQNbWFyZ2luVG9WYXVsdAgFDSR0MDY2NzMzNzExNzACXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2NjczMzcxMTcwAl84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2NjczMzcxMTcwAl85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjY3MzM3MTE3MANfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA2NjczMzcxMTcwA18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2NjczMzcxMTcwA18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjY3MzM3MTE3MANfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjY3MzM3MTE3MANfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY2NzMzNzExNzADXzE1AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAACQACAQImVW5hYmxlIHRvIGNsb3NlIHBvc2l0aW9uIHdpdGggYmFkIGRlYnQEDndpdGhkcmF3QW1vdW50CQEDYWJzAQUNbWFyZ2luVG9WYXVsdAQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA0kdDA3MTM3OTcxNTg2AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNYW1tTmV3QmFsYW5jZQgFDSR0MDcxMzc5NzE1ODYCXzEEA3gxMQgFDSR0MDcxMzc5NzE1ODYCXzIEDSR0MDcxNTkzNzE2NDcJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA3MTU5MzcxNjQ3Al8xBAdhc3NldElkCAUNJHQwNzE1OTM3MTY0NwJfMgQNJHQwNzE2NjI3MjUyMQMJAGYCBQhib3Jyb3dlZAAAAwkAZwIFDndpdGhkcmF3QW1vdW50BQhib3Jyb3dlZAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFCGJvcnJvd2VkCQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFB2RvUmVwYXkFB2RvUmVwYXkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5fdHJhZGVyQWRkcmVzcwUIYm9ycm93ZWQJANkEAQUHYXNzZXRJZAUDbmlsCQBlAgUOd2l0aGRyYXdBbW91bnQFCGJvcnJvd2VkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlCQDMCAIFB190cmFkZXIJAMwIAgUOd2l0aGRyYXdBbW91bnQJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5fdHJhZGVyQWRkcmVzcwUOd2l0aGRyYXdBbW91bnQJANkEAQUHYXNzZXRJZAUDbmlsAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgUDbmlsBQ53aXRoZHJhd0Ftb3VudAMJAAACBQ0kdDA3MTY2MjcyNTIxBQ0kdDA3MTY2MjcyNTIxBBNxdW90ZVdpdGhkcmF3QW1vdW50CAUNJHQwNzE2NjI3MjUyMQJfMgQUc2VuZENvbGxhdGVyYWxBY3Rpb24IBQ0kdDA3MTY2MjcyNTIxAl8xBAd1bnN0YWtlAwkAZgIFE3F1b3RlV2l0aGRyYXdBbW91bnQAAAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUTcXVvdGVXaXRoZHJhd0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyAwkAZgIFE3F1b3RlV2l0aGRyYXdBbW91bnQAAAkBCHdpdGhkcmF3AgUOX3RyYWRlckFkZHJlc3MFE3F1b3RlV2l0aGRyYXdBbW91bnQFA25pbAkBDXVwZGF0ZUJhbGFuY2UBBQ1hbW1OZXdCYWxhbmNlBRRzZW5kQ29sbGF0ZXJhbEFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQPc3BvdE1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQLbWFyZ2luUmF0aW8DCQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEEW9yYWNsZU1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFEVBOTF9PUFRJT05fT1JBQ0xFCQEEdm1heAIFD3Nwb3RNYXJnaW5SYXRpbwURb3JhY2xlTWFyZ2luUmF0aW8FD3Nwb3RNYXJnaW5SYXRpbwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlAwMDCQBmAgUPc3BvdE1hcmdpblJhdGlvCQETbGlxdWlkYXRpb25GZWVSYXRpbwAJAGYCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AAAAHCQBmAgUMREVDSU1BTF9VTklUCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABwQNJHQwNzQ4MTg3NDk2OAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNzQ4MTg3NDk2OAJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA3NDgxODc0OTY4Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDc0ODE4NzQ5NjgCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzQ4MTg3NDk2OAJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNzUxOTM3NTI5NwkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNzUxOTM3NTI5NwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDc1MTkzNzUyOTcCXzIEDSR0MDc1MzA1NzU0OTIJAQlzd2FwSW5wdXQCBQVpc0FkZAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCAUNJHQwNzUzMDU3NTQ5MgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc1MzA1NzU0OTICXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc1MzA1NzU0OTICXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3NTMwNTc1NDkyAl80BBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFEGxpcXVpZGF0aW9uUmF0aW8EDSR0MDc1NzgxNzYwMTQJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA3NTc4MTc2MDE0Al8xBAdiYWREZWJ0CAUNJHQwNzU3ODE3NjAxNAJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA3NTc4MTc2MDE0Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBApmZWVUb1ZhdWx0CQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IEEW5ld1Bvc2l0aW9uTWFyZ2luCQBlAgUMcmVtYWluTWFyZ2luBRJsaXF1aWRhdGlvblBlbmFsdHkED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAQUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNzcxODM3NzMxMgMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA3NzE4Mzc3MzEyAl8xBAN4MTEIBQ0kdDA3NzE4Mzc3MzEyAl8yBA0kdDA3NzMyMDc3Mzc0CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzczMjA3NzM3NAJfMQQHYXNzZXRJZAgFDSR0MDc3MzIwNzczNzQCXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABBBjb2xsYXRlcmFsVG9TZWxsCQEEbXVsZAIFCGJvcnJvd2VkBRBsaXF1aWRhdGlvblJhdGlvBA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIQcmVhbGl6ZVBhcnRpYWxseQkAzAgCBQdfdHJhZGVyCQDMCAIFB2Fzc2V0SWQJAMwIAgUQY29sbGF0ZXJhbFRvU2VsbAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDc5MDY5Nzk1NjQJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBwQCeDEIBQ0kdDA3OTA2OTc5NTY0Al8xBAdiYWREZWJ0CAUNJHQwNzkwNjk3OTU2NAJfMgQCeDIIBQ0kdDA3OTA2OTc5NTY0Al8zBAJ4MwgFDSR0MDc5MDY5Nzk1NjQCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3OTA2OTc5NTY0Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3OTA2OTc5NTY0Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzkwNjk3OTU2NAJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDc5MDY5Nzk1NjQCXzgEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA3OTA2OTc5NTY0Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDc5MDY5Nzk1NjQDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3OTA2OTc5NTY0A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3OTA2OTc5NTY0A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzkwNjk3OTU2NANfMTMEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBApmZWVUb1ZhdWx0CQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDc5OTcyODAxMDEDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNzk5NzI4MDEwMQJfMQQDeDExCAUNJHQwNzk5NzI4MDEwMQJfMgQNJHQwODAxMDk4MDE2MwkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDgwMTA5ODAxNjMCXzEEB2Fzc2V0SWQIBQ0kdDA4MDEwOTgwMTYzAl8yBBVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwDCQBmAgUIYm9ycm93ZWQAAAQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACGHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZQkAzAgCBQdfdHJhZGVyCQDMCAIAAAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQ9yZWFsaXplQW5kQ2xvc2UFD3JlYWxpemVBbmRDbG9zZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwEAXgDCQBmAgUHYmFkRGVidAAABAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFB2JhZERlYnQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnBheUZ1bmRpbmcABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA0kdDA4MjAzOTgyMTAxCQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwODIwMzk4MjEwMQJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDgyMDM5ODIxMDECXzIJAQ11cGRhdGVGdW5kaW5nBQkAZAIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAZAIJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFE2xvbmdQcmVtaXVtRnJhY3Rpb24JAGQCCQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQAEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQNJHQwODI1MzM4MjY3MgkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBEmdldE9yYWNsZVR3YXBQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA4MjUzMzgyNjcyAl8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA4MjUzMzgyNjcyAl8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwODI1MzM4MjY3MgJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFE25ld1F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgUHX2JzQXN0UgUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA0kdDA4MzI0MTgzMzQyCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA4MzI0MTgzMzQyAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDgzMjQxODMzNDICXzIEA3BvbggFDSR0MDgzMjQxODMzNDICXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwODMyNDE4MzM0MgJfNAQNJHQwODMzNDU4MzQ0NgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwODMzNDU4MzQ0NgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDgzMzQ1ODM0NDYCXzIEDSR0MDgzNDQ5ODM2MjEJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDgzNDQ5ODM2MjECXzEEB2JhZERlYnQIBQ0kdDA4MzQ0OTgzNjIxAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDgzNDQ5ODM2MjECXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAZyZXN1bHQJARRnZXRTeW5jVGVybWluYWxQcmljZQMFBl9wcmljZQUHX3F0QXN0UgUHX2JzQXN0UgkAAgEJAKQDAQgFBnJlc3VsdAJfMwFpARh2aWV3X2dldFRlcm1pbmFsQW1tUHJpY2UABA0kdDA4NDAzNzg0MTE4CQETZ2V0VGVybWluYWxBbW1TdGF0ZQAEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDA4NDAzNzg0MTE4Al8xBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDA4NDAzNzg0MTE4Al8yBAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFcACQEEbXVsZAIFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0VwAJAAIBCQCkAwEFBXByaWNlAWkBD3ZpZXdfZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDSR0MDg0MzM3ODQzOTkJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NDMzNzg0Mzk5Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwODQzMzc4NDM5OQJfMgQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJARBnZXRUd2FwU3BvdFByaWNlAAkBAXMBCQESZ2V0T3JhY2xlVHdhcFByaWNlAAFpARh2aWV3X2dldEJvcnJvd2VkQnlUcmFkZXIBB190cmFkZXIEDSR0MDg0Njg5ODQ3NDMJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA4NDY4OTg0NzQzAl8xBAdhc3NldElkCAUNJHQwODQ2ODk4NDc0MwJfMgkAAgEJAKwCAgkBAXMBBQhib3Jyb3dlZAUHYXNzZXRJZAFpARBjb21wdXRlU3BvdFByaWNlAAQGcmVzdWx0CQEMZ2V0U3BvdFByaWNlAAkAlAoCBQNuaWwFBnJlc3VsdAFpAR9jb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBAZyZXN1bHQJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyBQtfYXJ0aWZhY3RJZAkAlAoCBQNuaWwFBnJlc3VsdAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQ5hZG1pblB1YmxpY0tleQDCYRmU", "height": 2362899, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JBA1KTNeUyLdcDHMzXpF3BQAQYAKx6yTHPwhje5aRjqU Next: 9z9TFTBnoasCLfXLbbqzQAUcMB9977wx9Xv4zUG8Kvdu Diff:
OldNewDifferences
555555 }
556556
557557
558-func dG (dq,ds) = {
559- let dH = dz()
558+func dG (dH,dq,ds,cI,cK) = {
559+ let dI = aR(aT(dq, cI), aT(ds, cK))
560+ let dJ = aR((dH + dI), (2 * aK))
561+ let dG = aR(ba((dH - dI)), dJ)
562+ dG
563+ }
564+
565+
566+func dK (dq,ds) = {
567+ let dL = dz()
560568 let cI = bH()
561569 let cK = bI()
562- let dI = aR(aT(dq, cI), aT(ds, cK))
563- let dJ = aR((dH + dI), (2 * aK))
564- let dK = aR(ba((dH - dI)), dJ)
565- if ((dK > bW()))
566- then throw(((("Price spread " + toString(dK)) + " > max price spread ") + toString(bW())))
570+ let dM = dG(dL, bF(), bG(), cI, cK)
571+ let dN = dG(dL, dq, ds, cI, cK)
572+ if (if ((dN > bW()))
573+ then (dN > dM)
574+ else false)
575+ then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bW())))
567576 else true
568577 }
569578
570579
571-func dL (dM,dN) = {
572- let dO = bX()
573- if ((dM > dO))
574- then throw(((("Long open notional " + toString(dM)) + " > max open notional ") + toString(dO)))
575- else if ((dN > dO))
576- then throw(((("Short open notional " + toString(dN)) + " > max open notional ") + toString(dO)))
580+func dO (dP,dQ) = {
581+ let dR = bX()
582+ if ((dP > dR))
583+ then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
584+ else if ((dQ > dR))
585+ then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
577586 else true
578587 }
579588
580589
581-func dP () = {
590+func dS () = {
582591 let dq = bF()
583592 let ds = bG()
584593 let cI = bH()
587596 }
588597
589598
590-func dQ () = {
591- let dH = dz()
592- let dR = dP()
593- (aR(ba((dH - dR)), dH) > bU())
594- }
595-
596-
597-func dS (cn,dT,dq,dr,ds,dt) = {
598- let dU = ba(cn)
599- let dV = (0 > cn)
600- let dW = if ((dT == aN))
599+func dT () = {
600+ let dL = dz()
601+ let dU = dS()
602+ (aR(ba((dL - dU)), dL) > bU())
603+ }
604+
605+
606+func dV (cn,dW,dq,dr,ds,dt) = {
607+ let dX = ba(cn)
608+ let dY = (0 > cn)
609+ let dZ = if ((dW == aN))
601610 then {
602- let dX = do(!(dV), dU, false, dq, dr, ds, dt)
603- let dY = dX._1
604- let dZ = dX._2
605- let ea = dX._3
606- let eb = dX._4
607- dY
608- }
609- else aT(dU, dz())
610- dW
611- }
612-
613-
614-func ec (cn,ed,dq,dr,ds,dt,dT) = if ((cn == 0))
611+ let ea = do(!(dY), dX, false, dq, dr, ds, dt)
612+ let eb = ea._1
613+ let ec = ea._2
614+ let ed = ea._3
615+ let ee = ea._4
616+ eb
617+ }
618+ else aT(dX, dz())
619+ dZ
620+ }
621+
622+
623+func ef (cn,eg,dq,dr,ds,dt,dW) = if ((cn == 0))
615624 then throw("Invalid position size")
616625 else {
617- let dV = (0 > cn)
618- let dW = dS(cn, dT, dq, dr, ds, dt)
619- let ee = if (dV)
620- then (ed - dW)
621- else (dW - ed)
622- $Tuple2(dW, ee)
626+ let dY = (0 > cn)
627+ let dZ = dV(cn, dW, dq, dr, ds, dt)
628+ let eh = if (dY)
629+ then (eg - dZ)
630+ else (dZ - eg)
631+ $Tuple2(dZ, eh)
623632 }
624633
625634
626-func ef (cp,dT) = {
627- let eg = co(cp)
628- let cs = eg._1
629- let eh = eg._2
630- let ei = eg._3
631- let ej = eg._4
632- ec(cs, ei, bF(), bH(), bG(), bI(), dT)
633- }
634-
635-
636-func ek (el,em,en) = aR((el - em), en)
637-
638-
639-func eo (cp,dT) = {
640- let ep = co(cp)
641- let cs = ep._1
642- let eh = ep._2
643- let eq = ep._3
644- let ej = ep._4
645- let er = ef(cp, dT)
646- let dW = er._1
647- let ee = er._2
648- let es = dd(cs, eh, ej, ee)
649- let dm = es._1
650- let dn = es._2
651- ek(dm, dn, dW)
652- }
653-
654-
655-func et (cp) = eo(cp, aN)
656-
657-
658-func eu (cp,cn) = {
659- let ev = bb(bT(), (aK - aR(et(cp), bR())))
660- let ew = aT(ba(cn), ev)
661- let ex = dy((cn > 0), ew, false)
662- let ey = ex._1
663- let db = ex._7
635+func ei (cp,dW) = {
636+ let ej = co(cp)
637+ let cs = ej._1
638+ let ek = ej._2
639+ let el = ej._3
640+ let em = ej._4
641+ ef(cs, el, bF(), bH(), bG(), bI(), dW)
642+ }
643+
644+
645+func en (eo,ep,eq) = aR((eo - ep), eq)
646+
647+
648+func er (cp,dW) = {
649+ let es = co(cp)
650+ let cs = es._1
651+ let ek = es._2
652+ let et = es._3
653+ let em = es._4
654+ let eu = ei(cp, dW)
655+ let dZ = eu._1
656+ let eh = eu._2
657+ let ev = dd(cs, ek, em, eh)
658+ let dm = ev._1
659+ let dn = ev._2
660+ en(dm, dn, dZ)
661+ }
662+
663+
664+func ew (cp) = er(cp, aN)
665+
666+
667+func ex (cp,cn) = {
668+ let ey = bb(bT(), (aK - aR(ew(cp), bR())))
669+ let ez = aT(ba(cn), ey)
670+ let eA = dy((cn > 0), ez, false)
671+ let eB = eA._1
672+ let db = eA._7
664673 if ((bV() > db))
665- then ey
674+ then eB
666675 else {
667- let ez = aT(ba(cn), bT())
668- let eA = dy((cn > 0), ez, false)._1
669- eA
670- }
671- }
672-
673-
674-func eB (cp,dp) = {
675- let eC = co(cp)
676- let cs = eC._1
677- let eh = eC._2
678- let ei = eC._3
679- let ej = eC._4
680- let ee = ef(cp, aN)._2
681- let eD = dd(cs, eh, ej, ee)
682- let dm = eD._1
683- let dn = eD._2
684- let ez = -(cs)
685- let eE = ee
686- let eF = -(dm)
687- let eG = dy((cs > 0), ba(cs), dp)
688- let eA = eG._1
689- let cQ = eG._2
690- let cR = eG._3
691- let eH = eG._4
692- let eI = eG._5
693- let eJ = eG._6
694- let eK = (bK() - ei)
695- $Tuple13(ez, dn, eE, eF, cQ, cR, eH, eK, eA, eI, eJ, (bM() - (if ((cs > 0))
696- then ei
676+ let eC = aT(ba(cn), bT())
677+ let eD = dy((cn > 0), eC, false)._1
678+ eD
679+ }
680+ }
681+
682+
683+func eE (cp,dp) = {
684+ let eF = co(cp)
685+ let cs = eF._1
686+ let ek = eF._2
687+ let el = eF._3
688+ let em = eF._4
689+ let eh = ei(cp, aN)._2
690+ let eG = dd(cs, ek, em, eh)
691+ let dm = eG._1
692+ let dn = eG._2
693+ let eC = -(cs)
694+ let eH = eh
695+ let eI = -(dm)
696+ let eJ = dy((cs > 0), ba(cs), dp)
697+ let eD = eJ._1
698+ let cQ = eJ._2
699+ let cR = eJ._3
700+ let eK = eJ._4
701+ let eL = eJ._5
702+ let eM = eJ._6
703+ let eN = (bK() - el)
704+ $Tuple13(eC, dn, eH, eI, cQ, cR, eK, eN, eD, eL, eM, (bM() - (if ((cs > 0))
705+ then el
697706 else 0)), (bL() - (if ((0 > cs))
698- then ei
707+ then el
699708 else 0)))
700709 }
701710
702711
703-func eL () = {
704- let eM = ((lastBlock.timestamp / 1000) / 60)
705- let eN = (eM - aG)
706- let eO = valueOrElse(getString(this, A), "")
707- let eP = split(eO, ",")
708- func eQ (bf,eR) = if ((eN >= parseIntValue(eR)))
709- then (bf :+ parseIntValue(eR))
712+func eO () = {
713+ let eP = ((lastBlock.timestamp / 1000) / 60)
714+ let eQ = (eP - aG)
715+ let eR = valueOrElse(getString(this, A), "")
716+ let eS = split(eR, ",")
717+ func eT (bf,eU) = if ((eQ >= parseIntValue(eU)))
718+ then (bf :+ parseIntValue(eU))
710719 else bf
711720
712- let eS = {
713- let bi = eP
721+ let eV = {
722+ let bi = eS
714723 let bj = size(bi)
715724 let bk = nil
716725 func bl (bm,bn) = if ((bn >= bj))
717726 then bm
718- else eQ(bm, bi[bn])
727+ else eT(bm, bi[bn])
719728
720729 func bo (bm,bn) = if ((bn >= bj))
721730 then bm
723732
724733 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
725734 }
726- let eT = if ((size(eS) > 0))
727- then max(eS)
728- else parseIntValue(eP[0])
729- let eU = valueOrElse(getInteger(this, B), 0)
730- let eV = valueOrElse(getInteger(this, ((C + "_") + toString(eU))), 0)
731- let eW = valueOrElse(getInteger(this, ((D + "_") + toString(eU))), 0)
732- let eX = (eV + ((eM - eU) * eW))
733- let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eT))), 0)
734- let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eT))), 0)
735- let fa = (eY + ((eN - eT) * eZ))
736- ((eX - fa) / aG)
737- }
738-
739-
740-func fb () = {
735+ let eW = if ((size(eV) > 0))
736+ then max(eV)
737+ else parseIntValue(eS[0])
738+ let eX = valueOrElse(getInteger(this, B), 0)
739+ let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eX))), 0)
740+ let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eX))), 0)
741+ let fa = (eY + ((eP - eX) * eZ))
742+ let fb = valueOrElse(getInteger(this, ((C + "_") + toString(eW))), 0)
743+ let fc = valueOrElse(getInteger(this, ((D + "_") + toString(eW))), 0)
744+ let fd = (fb + ((eQ - eW) * fc))
745+ ((fa - fd) / aG)
746+ }
747+
748+
749+func fe () = {
741750 let cn = bJ()
742751 if ((cn == 0))
743752 then $Tuple2(bF(), bG())
744753 else {
745- let fc = (cn > 0)
746- let fd = dy(fc, ba(cn), false)
747- let fe = fd._1
748- let ff = fd._2
749- let fg = fd._3
750- $Tuple2(ff, fg)
751- }
752- }
753-
754-
755-func fh (fi,bJ,fj,fk) = {
756- let fl = toBigInt(fi)
757- let fm = toBigInt(bJ)
758- let fn = toBigInt(fj)
759- let fo = toBigInt(fk)
760- let fp = aZ((fl + fm), toBigInt((2 * aK)))
761- let fq = aX(fn, fp)
762- let fr = (toBigInt(4) * aX(fo, fm))
763- let fs = aY(aX(fq, (fn - fr)))
764- let ft = aX(fl, fn)
765- let fu = aX(fn, fm)
766- let fv = ((-(fs) + ft) + fu)
767- let fw = (toBigInt(2) * aX(fn, fm))
768- let fx = aW(fv, fw)
769- toInt(fx)
770- }
771-
772-
773-func fy (fz) = {
754+ let ff = (cn > 0)
755+ let fg = dy(ff, ba(cn), false)
756+ let fh = fg._1
757+ let fi = fg._2
758+ let fj = fg._3
759+ $Tuple2(fi, fj)
760+ }
761+ }
762+
763+
764+func fk (fl,bJ,fm,fn) = {
765+ let fo = toBigInt(fl)
766+ let fp = toBigInt(bJ)
767+ let fq = toBigInt(fm)
768+ let fr = toBigInt(fn)
769+ let fs = aZ((fo + fp), toBigInt((2 * aK)))
770+ let ft = aX(fq, fs)
771+ let fu = (toBigInt(4) * aX(fr, fp))
772+ let fv = aY(aX(ft, (fq - fu)))
773+ let fw = aX(fo, fq)
774+ let fx = aX(fq, fp)
775+ let fy = ((-(fv) + fw) + fx)
776+ let fz = (toBigInt(2) * aX(fq, fp))
777+ let fA = aW(fy, fz)
778+ toInt(fA)
779+ }
780+
781+
782+func fB (fC,cH,cJ) = {
774783 let cn = bJ()
775784 if ((cn == 0))
776785 then {
777- let cH = bF()
778- let cJ = bG()
779- let fA = aR(aT(fz, cJ), cH)
780- $Tuple3(fA, aK, 0)
786+ let fD = aR(aT(fC, cJ), cH)
787+ $Tuple3(fD, aK, 0)
781788 }
782789 else {
783- let fc = (cn > 0)
784- let fe = dy(fc, ba(cn), false)._1
785- let cH = bF()
786- let cJ = bG()
787- let fA = fh(cJ, cn, cH, fz)
788- let fB = aK
789- let eF = ec(cn, fe, cH, fA, cJ, fB, aN)._2
790- $Tuple3(fA, fB, eF)
791- }
792- }
793-
794-
795-func fC () = {
796- let fD = dz()
797- let fE = eL()
798- let fF = (fE - fD)
790+ let ff = (cn > 0)
791+ let fh = dy(ff, ba(cn), false)._1
792+ let fD = fk(cJ, cn, cH, fC)
793+ let fE = aK
794+ let eI = ef(cn, fh, cH, fD, cJ, fE, aN)._2
795+ $Tuple3(fD, fE, eI)
796+ }
797+ }
798+
799+
800+func fF () = {
801+ let fG = dz()
802+ let fH = eO()
803+ let fI = (fH - fG)
799804 if (if ((ca() == 0))
800805 then true
801806 else (cb() == 0))
802807 then $Tuple2(0, 0)
803- else if ((0 > fF))
808+ else if ((0 > fI))
804809 then {
805- let fG = aR(aT(fF, bP()), aL)
806- let fH = aR(aT(fG, ca()), cb())
807- $Tuple2(fG, fH)
810+ let fJ = aR(aT(fI, bP()), aL)
811+ let fK = aR(aT(fJ, ca()), cb())
812+ $Tuple2(fJ, fK)
808813 }
809814 else {
810- let fH = aR(aT(fF, bP()), aL)
811- let fG = aR(aT(fH, cb()), ca())
812- $Tuple2(fG, fH)
815+ let fK = aR(aT(fI, bP()), aL)
816+ let fJ = aR(aT(fK, cb()), ca())
817+ $Tuple2(fJ, fK)
813818 }
814819 }
815820
816821
817-func fI (fJ,fK) = {
818- let fL = bD()
819- let fM = aT(fL, fK)
820- let fN = if ((fJ != ""))
822+func fL (fM,fN) = {
823+ let fO = bD()
824+ let fP = aT(fO, fN)
825+ let fQ = if ((fM != ""))
821826 then {
822- let fO = bA(av(), ai(aC, fJ))
823- if ((fO == aD))
827+ let fR = bA(av(), ai(aC, fM))
828+ if ((fR == aD))
824829 then {
825- let fP = bB(av(), ai(aB, fJ))
826- let fQ = aT(fM, fP)
827- $Tuple2(fQ, true)
830+ let fS = bB(av(), ai(aB, fM))
831+ let fT = aT(fP, fS)
832+ $Tuple2(fT, true)
828833 }
829834 else throw("Invalid attached artifact")
830835 }
831- else $Tuple2(fM, false)
832- let fQ = fN._1
833- let fR = fN._2
834- $Tuple2(fQ, fR)
835- }
836-
837-
838-func fS (cp,aA) = {
839- let fT = co(cp)._1
840- if ((fT == 0))
836+ else $Tuple2(fP, false)
837+ let fT = fQ._1
838+ let fU = fQ._2
839+ $Tuple2(fT, fU)
840+ }
841+
842+
843+func fV (cp,aA) = {
844+ let fW = co(cp)._1
845+ if ((fW == 0))
841846 then true
842847 else (ct(cp) == aA)
843848 }
844849
845850
846-func fU (cp,aA) = (ct(cp) == aA)
847-
848-
849-func fV (fW,aA,cp) = ((((((ah + "_") + fW) + "_") + aA) + "_") + cp)
850-
851-
852-func fX (cp) = {
851+func fX (cp,aA) = (ct(cp) == aA)
852+
853+
854+func fY (fZ,aA,cp) = ((((((ah + "_") + fZ) + "_") + aA) + "_") + cp)
855+
856+
857+func ga (cp) = {
853858 let cv = ct(cp)
854859 if ((cv == toBase58String(ao())))
855860 then $Tuple2(0, cv)
856861 else {
857- let fY = fV(toString(this), cv, cp)
858- let fZ = valueOrElse(getInteger(aw(), fY), 0)
859- $Tuple2(fZ, cv)
860- }
861- }
862-
863-
864-func ga (cp,fJ) = {
865- let gb = invoke(as(), "computeFeeDiscount", [cp], nil)
866- if ((gb == gb))
862+ let gb = fY(toString(this), cv, cp)
863+ let gc = valueOrElse(getInteger(aw(), gb), 0)
864+ $Tuple2(gc, cv)
865+ }
866+ }
867+
868+
869+func gd (cp,fM) = {
870+ let ge = invoke(as(), "computeFeeDiscount", [cp], nil)
871+ if ((ge == ge))
867872 then {
868- let gc = {
869- let cr = gb
873+ let gf = {
874+ let cr = ge
870875 if ($isInstanceOf(cr, "Int"))
871876 then {
872- let gd = cr
873- gd
877+ let gg = cr
878+ gg
874879 }
875880 else throw("Invalid computeFeeDiscount result")
876881 }
877- let ge = fI(fJ, gc)
878- let fQ = ge._1
879- let fR = ge._2
880- $Tuple2(fQ, fR)
882+ let gh = fL(fM, gf)
883+ let fT = gh._1
884+ let fU = gh._2
885+ $Tuple2(fT, fU)
881886 }
882887 else throw("Strict value is not equal to itself.")
883888 }
884889
885890
886-func gf (cg) = {
887- let gg = if ((size(cg.payments) > 1))
891+func gi (cg) = {
892+ let gj = if ((size(cg.payments) > 1))
888893 then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
889894 else ""
890- gg
891- }
892-
893-
894-func gh (gi) = {
895- let gj = aT(gi, cd())
896- let gk = (gi - gj)
897- $Tuple2(gj, gk)
898- }
899-
900-
901-func gl (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = [IntegerEntry(q, gm), IntegerEntry(r, gn), IntegerEntry(s, go), IntegerEntry(p, gp), IntegerEntry(o, gq), IntegerEntry(u, gr), IntegerEntry(v, gs), IntegerEntry(t, gt), IntegerEntry(w, gu), IntegerEntry(x, dO), IntegerEntry(y, gv), IntegerEntry(z, gv)]
902-
903-
904-func gx (gy,gz,gA,gB,gC) = [IntegerEntry(H, gy), IntegerEntry(F, gz), IntegerEntry(G, gA), IntegerEntry(I, gB), IntegerEntry(J, gC)]
905-
906-
907-func gD (ak,aA) = [StringEntry(ai(k, ak), aA)]
908-
909-
910-func gE (gF,ak) = if (gF)
895+ gj
896+ }
897+
898+
899+func gk (gl) = {
900+ let gm = aT(gl, cd())
901+ let gn = (gl - gm)
902+ $Tuple2(gm, gn)
903+ }
904+
905+
906+func go (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = [IntegerEntry(q, gp), IntegerEntry(r, gq), IntegerEntry(s, gr), IntegerEntry(p, gs), IntegerEntry(o, gt), IntegerEntry(u, gu), IntegerEntry(v, gv), IntegerEntry(t, gw), IntegerEntry(w, gx), IntegerEntry(x, dR), IntegerEntry(y, gy), IntegerEntry(z, gy)]
907+
908+
909+func gA (gB,gC,gD,gE,gF) = [IntegerEntry(H, gB), IntegerEntry(F, gC), IntegerEntry(G, gD), IntegerEntry(I, gE), IntegerEntry(J, gF)]
910+
911+
912+func gG (ak,aA) = [StringEntry(ai(k, ak), aA)]
913+
914+
915+func gH (gI,ak) = if (gI)
911916 then {
912- let gG = cc()
913-[IntegerEntry(ai(j, ak), (gG + 1)), IntegerEntry(e, (gG + 1))]
917+ let gJ = cc()
918+[IntegerEntry(ai(j, ak), (gJ + 1)), IntegerEntry(e, (gJ + 1))]
914919 }
915920 else nil
916921
917922
918-func gH (ak,gI,gJ,gK,dj) = [IntegerEntry(ai(f, ak), gI), IntegerEntry(ai(g, ak), gJ), IntegerEntry(ai(h, ak), gK), IntegerEntry(ai(i, ak), dj)]
919-
920-
921-func gL (gM) = {
922- let eM = ((lastBlock.timestamp / 1000) / 60)
923- let gN = valueOrElse(getInteger(this, B), 0)
924- if ((gN > eM))
923+func gK (ak,gL,gM,gN,dj) = [IntegerEntry(ai(f, ak), gL), IntegerEntry(ai(g, ak), gM), IntegerEntry(ai(h, ak), gN), IntegerEntry(ai(i, ak), dj)]
924+
925+
926+func gO (gP) = {
927+ let eP = ((lastBlock.timestamp / 1000) / 60)
928+ let gQ = valueOrElse(getInteger(this, B), 0)
929+ if ((gQ > eP))
925930 then throw("TWAP out-of-order")
926931 else {
927- let eU = if ((gN == 0))
928- then eM
929- else gN
930- if ((eM > gN))
932+ let eX = if ((gQ == 0))
933+ then eP
934+ else gQ
935+ if ((eP > gQ))
931936 then {
932- let gO = valueOrElse(getInteger(this, ((C + "_") + toString(gN))), 0)
933- let gP = valueOrElse(getInteger(this, ((D + "_") + toString(gN))), gM)
934- let gQ = (gO + ((eM - eU) * gP))
935- let eP = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eM))
936-[IntegerEntry(ai(C, toString(eM)), gQ), IntegerEntry(ai(D, toString(eM)), gM), IntegerEntry(ai(E, toString(eM)), gN), IntegerEntry(B, eM), StringEntry(A, bc(eP))]
937+ let gR = valueOrElse(getInteger(this, ((C + "_") + toString(gQ))), 0)
938+ let gS = valueOrElse(getInteger(this, ((D + "_") + toString(gQ))), gP)
939+ let gT = (gR + ((eP - eX) * gS))
940+ let eS = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eP))
941+[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP), IntegerEntry(ai(E, toString(eP)), gQ), IntegerEntry(B, eP), StringEntry(A, bc(eS))]
937942 }
938943 else {
939- let gR = valueOrElse(getInteger(this, ai(E, toString(eM))), 0)
940- let gO = valueOrElse(getInteger(this, ai(C, toString(gR))), 0)
941- let gP = valueOrElse(getInteger(this, ai(D, toString(gR))), gM)
942- let gQ = (gO + ((eM - gR) * gP))
943-[IntegerEntry(ai(C, toString(eM)), gQ), IntegerEntry(ai(D, toString(eM)), gM)]
944+ let gU = valueOrElse(getInteger(this, ai(E, toString(eP))), 0)
945+ let gR = valueOrElse(getInteger(this, ai(C, toString(gU))), 0)
946+ let gS = valueOrElse(getInteger(this, ai(D, toString(gU))), gP)
947+ let gT = (gR + ((eP - gU) * gS))
948+[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP)]
944949 }
945950 }
946951 }
947952
948953
949-func gS (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
950-
951-
952-func gT (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
953-
954-
955-func gU (cH,cJ,gV,gW,gX,gY,gZ,ha) = {
954+func gV (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
955+
956+
957+func gW (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
958+
959+
960+func gX (cH,cJ,gY,gZ,ha,hb,hc,hd) = {
956961 let cI = bH()
957962 let cK = bI()
958- if (((gX - gY) != gV))
959- then throw(((((("Invalid AMM state data: " + toString(gX)) + " + ") + toString(gY)) + " != ") + toString(gV)))
960- else ((gS(cH, cJ) ++ [IntegerEntry(O, gV), IntegerEntry(R, gW), IntegerEntry(P, gX), IntegerEntry(Q, gY), IntegerEntry(T, gZ), IntegerEntry(S, ha)]) ++ gL(aR(aT(cH, cI), aT(cJ, cK))))
961- }
962-
963-
964-func hb (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
965-
966-
967-func hc (ak,hd) = {
968- let he = assetBalance(this, ao())
969- if ((hd > he))
970- then throw(((("Unable to withdraw " + toString(hd)) + " from contract balance ") + toString(he)))
971- else [ScriptTransfer(ak, hd, ao())]
972- }
973-
974-
975-func hf (cg) = if ((0 > cg))
963+ if (((ha - hb) != gY))
964+ then throw(((((("Invalid AMM state data: " + toString(ha)) + " + ") + toString(hb)) + " != ") + toString(gY)))
965+ else ((gV(cH, cJ) ++ [IntegerEntry(O, gY), IntegerEntry(R, gZ), IntegerEntry(P, ha), IntegerEntry(Q, hb), IntegerEntry(T, hc), IntegerEntry(S, hd)]) ++ gO(aR(aT(cH, cI), aT(cJ, cK))))
966+ }
967+
968+
969+func he (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
970+
971+
972+func hf (ak,hg) = {
973+ let hh = assetBalance(this, ao())
974+ if ((hg > hh))
975+ then throw(((("Unable to withdraw " + toString(hg)) + " from contract balance ") + toString(hh)))
976+ else [ScriptTransfer(ak, hg, ao())]
977+ }
978+
979+
980+func hi (cg) = if ((0 > cg))
976981 then throw("Balance")
977982 else [IntegerEntry(d, cg)]
978983
979984
980-func hg (cg) = [ScriptTransfer(aq(), cg, ao())]
981-
982-
983-func hh (hi,cg) = if (hi)
985+func hj (cg) = [ScriptTransfer(aq(), cg, ao())]
986+
987+
988+func hk (hl,cg) = if (hl)
984989 then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
985990 else nil
986991
10231028 let cJ = bG()
10241029 let cI = bH()
10251030 let cK = bI()
1026- let hj = aR(aT(cH, cI), aT(cJ, cK))
1027- let hk = aR(cC, hj)
1028- let hl = (cH + cC)
1029- let hm = (cJ + hk)
1030- gS(hl, hm)
1031+ let hm = aR(aT(cH, cI), aT(cJ, cK))
1032+ let hn = (cH + cC)
1033+ let ho = (aR(aT(hn, cI), hm) - cJ)
1034+ let hp = (cJ + ho)
1035+ let hq = fB(dz(), hn, hp)
1036+ let hr = hq._1
1037+ let hs = hq._2
1038+ let eI = hq._3
1039+ let ht = if ((eI != 0))
1040+ then {
1041+ let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1042+ if ((ht == ht))
1043+ then nil
1044+ else throw("Strict value is not equal to itself.")
1045+ }
1046+ else nil
1047+ if ((ht == ht))
1048+ then (gV(hn, hp) ++ gW(hr, hs))
1049+ else throw("Strict value is not equal to itself.")
10311050 }
10321051
10331052
10421061 let cJ = bG()
10431062 let cI = bH()
10441063 let cK = bI()
1045- let hj = aR(aT(cH, cI), aT(cJ, cK))
1046- let hn = aR(cC, hj)
1047- let hl = (cH - cC)
1048- let hm = (cJ - hn)
1049- gS(hl, hm)
1064+ let hm = aR(aT(cH, cI), aT(cJ, cK))
1065+ let hu = aR(cC, hm)
1066+ let hn = (cH - cC)
1067+ let hp = (cJ - hu)
1068+ gV(hn, hp)
10501069 }
10511070
10521071
10531072
10541073 @Callable(cg)
1055-func changeSettings (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = if ((cg.caller != am()))
1074+func changeSettings (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = if ((cg.caller != am()))
10561075 then throw("Invalid changeSettings params")
1057- else gl(gm, gn, go, gp, gq, gr, gs, gt, gu, dO, gv, gw)
1058-
1059-
1060-
1061-@Callable(cg)
1062-func initialize (cH,cJ,gp,gm,gn,go,gq,ho,hp,hq,hr,gr,gs,gt,gu,dO,gv,gw) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
1076+ else go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)
1077+
1078+
1079+
1080+@Callable(cg)
1081+func initialize (cH,cJ,gs,gp,gq,gr,gt,hv,hw,hx,hy,gu,gv,gw,gx,dR,gy,gz) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
10631082 then true
10641083 else (0 >= cJ))
10651084 then true
1085+ else (0 >= gs))
1086+ then true
10661087 else (0 >= gp))
1067- then true
1068- else (0 >= gm))
1069- then true
1070- else (0 >= gn))
1071- then true
1072- else (0 >= go))
10731088 then true
10741089 else (0 >= gq))
10751090 then true
10761091 else (0 >= gr))
10771092 then true
1078- else (0 >= gs))
1079- then true
10801093 else (0 >= gt))
10811094 then true
10821095 else (0 >= gu))
10831096 then true
1084- else (0 >= dO))
1085- then true
10861097 else (0 >= gv))
1087- then true
1088- else (gv > aK))
10891098 then true
10901099 else (0 >= gw))
10911100 then true
1101+ else (0 >= gx))
1102+ then true
1103+ else (0 >= dR))
1104+ then true
1105+ else (0 >= gy))
1106+ then true
1107+ else (gy > aK))
1108+ then true
1109+ else (0 >= gz))
1110+ then true
10921111 else cx())
10931112 then throw("Invalid initialize parameters")
1094- else ((((gU(cH, cJ, 0, 0, 0, 0, 0, 0) ++ gl(gm, gn, go, gp, gq, gr, gs, gt, gu, dO, gv, gw)) ++ gx((lastBlock.timestamp + gp), 0, 0, 0, 0)) ++ hf(0)) ++ [BooleanEntry(l, true), StringEntry(c, ho), StringEntry(a, hp), StringEntry(b, hq), StringEntry(U, hr)])
1095-
1096-
1097-
1098-@Callable(cg)
1099-func decreasePosition (hd,hs,ht) = {
1100- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1101- if ((hu == hu))
1113+ else ((((gX(cH, cJ, 0, 0, 0, 0, 0, 0) ++ go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)) ++ gA((lastBlock.timestamp + gs), 0, 0, 0, 0)) ++ hi(0)) ++ [BooleanEntry(l, true), StringEntry(c, hv), StringEntry(a, hw), StringEntry(b, hx), StringEntry(U, hy)])
1114+
1115+
1116+
1117+@Callable(cg)
1118+func decreasePosition (hg,hz,hA) = {
1119+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1120+ if ((hB == hB))
11021121 then {
11031122 let cp = cf(cg)
1104- if (if (if (if (if ((0 >= hd))
1123+ if (if (if (if (if ((0 >= hg))
11051124 then true
11061125 else !(cx()))
11071126 then true
1108- else !(ch(aR(aK, hs), bE(), true)))
1127+ else !(ch(aR(aK, hz), bE(), true)))
11091128 then true
11101129 else !(cw(cp)))
11111130 then true
11121131 else cy())
11131132 then throw("Invalid decreasePosition parameters")
11141133 else {
1115- let hv = co(cp)
1116- let fT = hv._1
1117- let hw = hv._2
1118- let hx = hv._3
1119- let hy = hv._4
1120- let hz = if ((fT > 0))
1134+ let hC = co(cp)
1135+ let fW = hC._1
1136+ let hD = hC._2
1137+ let hE = hC._3
1138+ let hF = hC._4
1139+ let hG = if ((fW > 0))
11211140 then aF
11221141 else aE
1123- let hA = (hz == aE)
1124- let hB = aT(hd, hs)
1125- let hC = ef(cp, aN)
1126- let hD = hC._1
1127- let ee = hC._2
1128- let hE = if ((hD > hB))
1142+ let hH = (hG == aE)
1143+ let hI = aT(hg, hz)
1144+ let hJ = ei(cp, aN)
1145+ let hK = hJ._1
1146+ let eh = hJ._2
1147+ let hL = if ((hK > hI))
11291148 then {
1130- let hF = cP(hA, hB)
1131- let ez = hF._1
1132- let cQ = hF._2
1133- let cR = hF._3
1134- let eH = hF._4
1135- let hG = ba(ez)
1136- if (if ((ht != 0))
1137- then (ht > hG)
1149+ let hM = cP(hH, hI)
1150+ let eC = hM._1
1151+ let cQ = hM._2
1152+ let cR = hM._3
1153+ let eK = hM._4
1154+ let hN = ba(eC)
1155+ if (if ((hA != 0))
1156+ then (hA > hN)
11381157 else false)
1139- then throw(((("Too little base asset exchanged, got " + toString(hG)) + " expected ") + toString(ht)))
1158+ then throw(((("Too little base asset exchanged, got " + toString(hN)) + " expected ") + toString(hA)))
11401159 else {
1141- let eE = aR(aT(ee, hG), ba(fT))
1142- let hH = dd(fT, hw, hy, eE)
1143- let dm = hH._1
1144- let dn = hH._2
1145- let di = hH._3
1146- let eA = hB
1147- let hI = (ee - eE)
1148- let hJ = if ((fT > 0))
1149- then ((hD - eA) - hI)
1150- else ((hI + hD) - eA)
1151- let hK = (fT + ez)
1152- $Tuple12(hK, dm, ba(hJ), cm(hK), cR, cQ, eH, (bK() - hB), (cb() - (if ((hK > 0))
1153- then ba(ez)
1154- else 0)), (ca() - (if ((0 > hK))
1155- then ba(ez)
1156- else 0)), (bM() - (if ((hK > 0))
1157- then hB
1158- else 0)), (bL() - (if ((0 > hK))
1159- then hB
1160+ let eH = aR(aT(eh, hN), ba(fW))
1161+ let hO = dd(fW, hD, hF, eH)
1162+ let dm = hO._1
1163+ let dn = hO._2
1164+ let di = hO._3
1165+ let eD = hI
1166+ let hP = (eh - eH)
1167+ let hQ = if ((fW > 0))
1168+ then ((hK - eD) - hP)
1169+ else ((hP + hK) - eD)
1170+ let hR = (fW + eC)
1171+ $Tuple12(hR, dm, ba(hQ), cm(hR), cR, cQ, eK, (bK() - hI), (cb() - (if ((hR > 0))
1172+ then ba(eC)
1173+ else 0)), (ca() - (if ((0 > hR))
1174+ then ba(eC)
1175+ else 0)), (bM() - (if ((hR > 0))
1176+ then hI
1177+ else 0)), (bL() - (if ((0 > hR))
1178+ then hI
11601179 else 0)))
11611180 }
11621181 }
11631182 else throw("Close position first")
1164- let hK = hE._1
1165- let hL = hE._2
1166- let hM = hE._3
1167- let hN = hE._4
1168- let cR = hE._5
1169- let cQ = hE._6
1170- let eH = hE._7
1171- let eK = hE._8
1172- let eI = hE._9
1173- let eJ = hE._10
1174- let hO = hE._11
1175- let hP = hE._12
1176- let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
1177- if ((hQ == hQ))
1178- then (gH(cp, hK, hL, hM, hN) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP))
1183+ let hR = hL._1
1184+ let hS = hL._2
1185+ let hT = hL._3
1186+ let hU = hL._4
1187+ let cR = hL._5
1188+ let cQ = hL._6
1189+ let eK = hL._7
1190+ let eN = hL._8
1191+ let eL = hL._9
1192+ let eM = hL._10
1193+ let hV = hL._11
1194+ let hW = hL._12
1195+ let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1196+ if ((hX == hX))
1197+ then (gK(cp, hR, hS, hT, hU) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW))
11791198 else throw("Strict value is not equal to itself.")
11801199 }
11811200 }
11851204
11861205
11871206 @Callable(cg)
1188-func increasePosition (hz,hs,ht,hR) = {
1189- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1190- if ((hu == hu))
1207+func increasePosition (hG,hz,hA,hY) = {
1208+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1209+ if ((hB == hB))
11911210 then {
11921211 let cp = cf(cg)
1193- let hS = cg.payments[0].amount
1212+ let hZ = cg.payments[0].amount
11941213 let aA = cg.payments[0].assetId
1195- let hT = toBase58String(value(aA))
1196- let hU = (aA == ao())
1197- let hV = az(hT)
1198- if (if (if (if (if (if (if (if (if ((hz != aE))
1199- then (hz != aF)
1214+ let ia = toBase58String(value(aA))
1215+ let ib = (aA == ao())
1216+ let ic = az(ia)
1217+ if (if (if (if (if (if (if (if (if ((hG != aE))
1218+ then (hG != aF)
12001219 else false)
12011220 then true
1202- else (0 >= hS))
1221+ else (0 >= hZ))
12031222 then true
12041223 else !(cx()))
12051224 then true
1206- else if (!(hU))
1207- then !(hV)
1225+ else if (!(ib))
1226+ then !(ic)
12081227 else false)
12091228 then true
1210- else !(fS(cp, hT)))
1211- then true
1212- else !(ch(aR(aK, hs), bE(), true)))
1229+ else !(fV(cp, ia)))
1230+ then true
1231+ else !(ch(aR(aK, hz), bE(), true)))
12131232 then true
12141233 else cy())
12151234 then true
12161235 else cz())
12171236 then throw("Invalid increasePosition parameters")
12181237 else {
1219- let hW = ga(cp, gf(cg))
1220- let fQ = hW._1
1221- let fR = hW._2
1222- let hX = aT(hS, fQ)
1223- let hd = (hS - hX)
1224- let hY = if (hV)
1238+ let id = gd(cp, gi(cg))
1239+ let fT = id._1
1240+ let fU = id._2
1241+ let ie = aT(hZ, fT)
1242+ let hg = (hZ - ie)
1243+ let if = if (ic)
12251244 then {
1226- let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1227- if ((hZ == hZ))
1245+ let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1246+ if ((ig == ig))
12281247 then {
1229- let ia = assetBalance(this, ao())
1230- if ((ia == ia))
1248+ let ih = assetBalance(this, ao())
1249+ if ((ih == ih))
12311250 then {
1232- let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1233- if ((ib == ib))
1251+ let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1252+ if ((ii == ii))
12341253 then {
1235- let ic = assetBalance(this, ao())
1236- if ((ic == ic))
1254+ let ij = assetBalance(this, ao())
1255+ if ((ij == ij))
12371256 then {
1238- let id = (ic - ia)
1239- if ((id == id))
1240- then id
1257+ let ik = (ij - ih)
1258+ if ((ik == ik))
1259+ then ik
12411260 else throw("Strict value is not equal to itself.")
12421261 }
12431262 else throw("Strict value is not equal to itself.")
12481267 }
12491268 else throw("Strict value is not equal to itself.")
12501269 }
1251- else hX
1252- if ((hY == hY))
1270+ else ie
1271+ if ((if == if))
12531272 then {
1254- let ie = invoke(au(), "acceptPaymentWithLink", [cp, hR], [AttachedPayment(ao(), hY)])
1255- if ((ie == ie))
1273+ let il = invoke(au(), "acceptPaymentWithLink", [cp, hY], [AttachedPayment(ao(), if)])
1274+ if ((il == il))
12561275 then {
1257- let if = {
1258- let cr = ie
1276+ let im = {
1277+ let cr = il
12591278 if ($isInstanceOf(cr, "Int"))
12601279 then {
1261- let gd = cr
1262- gd
1280+ let gg = cr
1281+ gg
12631282 }
12641283 else throw("Invalid referrerFee")
12651284 }
1266- let ig = (hY - if)
1267- let ih = co(cp)
1268- let fT = ih._1
1269- let hw = ih._2
1270- let hx = ih._3
1271- let hy = ih._4
1272- let gF = (fT == 0)
1273- let ii = if ((fT > 0))
1274- then (hz == aE)
1275- else (hz == aF)
1276- let ij = if (!(gF))
1277- then ii
1285+ let in = (if - im)
1286+ let io = co(cp)
1287+ let fW = io._1
1288+ let hD = io._2
1289+ let hE = io._3
1290+ let hF = io._4
1291+ let gI = (fW == 0)
1292+ let ip = if ((fW > 0))
1293+ then (hG == aE)
1294+ else (hG == aF)
1295+ let iq = if (!(gI))
1296+ then ip
12781297 else false
1279- let hA = (hz == aE)
1280- let ik = if (if (gF)
1298+ let hH = (hG == aE)
1299+ let ir = if (if (gI)
12811300 then true
1282- else ij)
1301+ else iq)
12831302 then {
1284- let hB = aT(hd, hs)
1285- let il = cP(hA, hB)
1286- let cT = il._1
1287- let cQ = il._2
1288- let cR = il._3
1289- let eH = il._4
1290- if (if ((ht != 0))
1291- then (ht > ba(cT))
1303+ let hI = aT(hg, hz)
1304+ let is = cP(hH, hI)
1305+ let cT = is._1
1306+ let cQ = is._2
1307+ let cR = is._3
1308+ let eK = is._4
1309+ if (if ((hA != 0))
1310+ then (hA > ba(cT))
12921311 else false)
1293- then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(ht)))
1312+ then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(hA)))
12941313 else {
1295- let hK = (fT + cT)
1296- let hO = (bM() + (if ((hK > 0))
1297- then hB
1314+ let hR = (fW + cT)
1315+ let hV = (bM() + (if ((hR > 0))
1316+ then hI
12981317 else 0))
1299- let hP = (bL() + (if ((0 > hK))
1300- then hB
1318+ let hW = (bL() + (if ((0 > hR))
1319+ then hI
13011320 else 0))
1302- let im = aR(hB, hs)
1303- let in = dd(fT, hw, hy, im)
1304- let dm = in._1
1305- let dZ = in._2
1306- let ea = in._3
1307- if (!(dG(cQ, cR)))
1321+ let it = aR(hI, hz)
1322+ let iu = dd(fW, hD, hF, it)
1323+ let dm = iu._1
1324+ let ec = iu._2
1325+ let ed = iu._3
1326+ if (!(dK(cQ, cR)))
13081327 then throw("Over max spread limit")
1309- else if (!(dL(hO, hP)))
1328+ else if (!(dO(hV, hW)))
13101329 then throw("Over max open notional")
1311- else $Tuple12(hK, dm, (hx + hB), cm(hK), cR, cQ, eH, (bK() + hB), (cb() + (if ((hK > 0))
1330+ else $Tuple12(hR, dm, (hE + hI), cm(hR), cR, cQ, eK, (bK() + hI), (cb() + (if ((hR > 0))
13121331 then ba(cT)
1313- else 0)), (ca() + (if ((0 > hK))
1332+ else 0)), (ca() + (if ((0 > hR))
13141333 then ba(cT)
1315- else 0)), hO, hP)
1334+ else 0)), hV, hW)
13161335 }
13171336 }
13181337 else {
1319- let hB = aT(hd, hs)
1320- let io = ef(toString(cg.caller), aN)
1321- let hD = io._1
1322- let ee = io._2
1323- if ((hD > hB))
1338+ let hI = aT(hg, hz)
1339+ let iv = ei(toString(cg.caller), aN)
1340+ let hK = iv._1
1341+ let eh = iv._2
1342+ if ((hK > hI))
13241343 then throw("Use decreasePosition to decrease position size")
13251344 else throw("Close position first")
13261345 }
1327- let hK = ik._1
1328- let hL = ik._2
1329- let hM = ik._3
1330- let hN = ik._4
1331- let cR = ik._5
1332- let cQ = ik._6
1333- let eH = ik._7
1334- let eK = ik._8
1335- let eI = ik._9
1336- let eJ = ik._10
1337- let hO = ik._11
1338- let hP = ik._12
1339- let ip = gh(ig)
1340- let gj = ip._1
1341- let gk = ip._2
1342- let iq = if (hU)
1346+ let hR = ir._1
1347+ let hS = ir._2
1348+ let hT = ir._3
1349+ let hU = ir._4
1350+ let cR = ir._5
1351+ let cQ = ir._6
1352+ let eK = ir._7
1353+ let eN = ir._8
1354+ let eL = ir._9
1355+ let eM = ir._10
1356+ let hV = ir._11
1357+ let hW = ir._12
1358+ let iw = gk(in)
1359+ let gm = iw._1
1360+ let gn = iw._2
1361+ let ix = if (ib)
13431362 then {
1344- let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1345- if ((iq == iq))
1363+ let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1364+ if ((ix == ix))
13461365 then nil
13471366 else throw("Strict value is not equal to itself.")
13481367 }
13491368 else nil
1350- if ((iq == iq))
1369+ if ((ix == ix))
13511370 then {
1352- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1353- if ((ir == ir))
1371+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1372+ if ((iy == iy))
13541373 then {
1355- let is = invoke(as(), "notifyFees", [cp, ig], nil)
1356- if ((is == is))
1374+ let iz = invoke(as(), "notifyFees", [cp, in], nil)
1375+ if ((iz == iz))
13571376 then {
1358- let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
1359- if ((hQ == hQ))
1360- then ((((((gH(cp, hK, hL, hM, hN) ++ gE(gF, cp)) ++ gD(cp, hT)) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ hg(gj)) ++ hf((bC() + hd))) ++ hh(fR, cg))
1377+ let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1378+ if ((hX == hX))
1379+ then ((((((gK(cp, hR, hS, hT, hU) ++ gH(gI, cp)) ++ gG(cp, ia)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
13611380 else throw("Strict value is not equal to itself.")
13621381 }
13631382 else throw("Strict value is not equal to itself.")
13781397
13791398 @Callable(cg)
13801399 func addMargin () = {
1381- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1382- if ((hu == hu))
1400+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1401+ if ((hB == hB))
13831402 then {
13841403 let cp = toString(cg.caller)
1385- let hS = cg.payments[0].amount
1404+ let hZ = cg.payments[0].amount
13861405 let aA = cg.payments[0].assetId
1387- let hT = toBase58String(value(aA))
1388- let hU = (aA == ao())
1389- let hV = az(hT)
1390- if (if (if (if (if (if (if (!(hU))
1391- then !(hV)
1406+ let ia = toBase58String(value(aA))
1407+ let ib = (aA == ao())
1408+ let ic = az(ia)
1409+ if (if (if (if (if (if (if (!(ib))
1410+ then !(ic)
13921411 else false)
13931412 then true
13941413 else !(cw(toString(cg.caller))))
13951414 then true
1396- else !(fU(cp, hT)))
1415+ else !(fX(cp, ia)))
13971416 then true
13981417 else !(cx()))
13991418 then true
14021421 else cz())
14031422 then throw("Invalid addMargin parameters")
14041423 else {
1405- let it = ga(cp, gf(cg))
1406- let fQ = it._1
1407- let fR = it._2
1408- let hX = aT(hS, fQ)
1409- let hd = (hS - hX)
1410- let hY = if (hV)
1424+ let iA = gd(cp, gi(cg))
1425+ let fT = iA._1
1426+ let fU = iA._2
1427+ let ie = aT(hZ, fT)
1428+ let hg = (hZ - ie)
1429+ let if = if (ic)
14111430 then {
1412- let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1413- if ((hZ == hZ))
1431+ let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1432+ if ((ig == ig))
14141433 then {
1415- let ia = assetBalance(this, ao())
1416- if ((ia == ia))
1434+ let ih = assetBalance(this, ao())
1435+ if ((ih == ih))
14171436 then {
1418- let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1419- if ((ib == ib))
1437+ let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1438+ if ((ii == ii))
14201439 then {
1421- let ic = assetBalance(this, ao())
1422- if ((ic == ic))
1440+ let ij = assetBalance(this, ao())
1441+ if ((ij == ij))
14231442 then {
1424- let id = (ic - ia)
1425- if ((id == id))
1426- then id
1443+ let ik = (ij - ih)
1444+ if ((ik == ik))
1445+ then ik
14271446 else throw("Strict value is not equal to itself.")
14281447 }
14291448 else throw("Strict value is not equal to itself.")
14341453 }
14351454 else throw("Strict value is not equal to itself.")
14361455 }
1437- else hX
1438- if ((hY == hY))
1456+ else ie
1457+ if ((if == if))
14391458 then {
1440- let ie = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), hY)])
1441- if ((ie == ie))
1459+ let il = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), if)])
1460+ if ((il == il))
14421461 then {
1443- let if = {
1444- let cr = ie
1462+ let im = {
1463+ let cr = il
14451464 if ($isInstanceOf(cr, "Int"))
14461465 then {
1447- let gd = cr
1448- gd
1466+ let gg = cr
1467+ gg
14491468 }
14501469 else throw("Invalid referrerFee")
14511470 }
1452- let ig = (hY - if)
1453- let iu = co(cp)
1454- let fT = iu._1
1455- let hw = iu._2
1456- let hx = iu._3
1457- let hy = iu._4
1458- let iv = gh(ig)
1459- let gj = iv._1
1460- let gk = iv._2
1461- let iq = if (hU)
1471+ let in = (if - im)
1472+ let iB = co(cp)
1473+ let fW = iB._1
1474+ let hD = iB._2
1475+ let hE = iB._3
1476+ let hF = iB._4
1477+ let iC = gk(in)
1478+ let gm = iC._1
1479+ let gn = iC._2
1480+ let ix = if (ib)
14621481 then {
1463- let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1464- if ((iq == iq))
1482+ let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1483+ if ((ix == ix))
14651484 then nil
14661485 else throw("Strict value is not equal to itself.")
14671486 }
14681487 else nil
1469- if ((iq == iq))
1488+ if ((ix == ix))
14701489 then {
1471- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1472- if ((ir == ir))
1490+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1491+ if ((iy == iy))
14731492 then {
1474- let is = invoke(as(), "notifyFees", [cp, ig], nil)
1475- if ((is == is))
1476- then (((gH(cp, fT, (hw + hd), hx, hy) ++ hg(gj)) ++ hf((bC() + hd))) ++ hh(fR, cg))
1493+ let iz = invoke(as(), "notifyFees", [cp, in], nil)
1494+ if ((iz == iz))
1495+ then (((gK(cp, fW, (hD + hg), hE, hF) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
14771496 else throw("Strict value is not equal to itself.")
14781497 }
14791498 else throw("Strict value is not equal to itself.")
14911510
14921511
14931512 @Callable(cg)
1494-func removeMargin (hd) = {
1495- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1496- if ((hu == hu))
1513+func removeMargin (hg) = {
1514+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1515+ if ((hB == hB))
14971516 then {
14981517 let cp = toString(cg.caller)
1499- if (if (if (if ((0 >= hd))
1518+ if (if (if (if ((0 >= hg))
15001519 then true
15011520 else !(cw(cp)))
15021521 then true
15051524 else cy())
15061525 then throw("Invalid removeMargin parameters")
15071526 else {
1508- let iw = co(cp)
1509- let fT = iw._1
1510- let hw = iw._2
1511- let hx = iw._3
1512- let hy = iw._4
1513- let ix = -(hd)
1514- let iy = dd(fT, hw, hy, ix)
1515- let dm = iy._1
1516- let dn = iy._2
1527+ let iD = co(cp)
1528+ let fW = iD._1
1529+ let hD = iD._2
1530+ let hE = iD._3
1531+ let hF = iD._4
1532+ let iE = -(hg)
1533+ let iF = dd(fW, hD, hF, iE)
1534+ let dm = iF._1
1535+ let dn = iF._2
15171536 if ((dn != 0))
15181537 then throw("Invalid removed margin amount")
15191538 else {
1520- let iz = ek(dm, dn, hx)
1521- if (!(ch(iz, bE(), true)))
1522- then throw(((("Too much margin removed: " + toString(iz)) + " < ") + toString(bE())))
1539+ let iG = en(dm, dn, hE)
1540+ if (!(ch(iG, bE(), true)))
1541+ then throw(((("Too much margin removed: " + toString(iG)) + " < ") + toString(bE())))
15231542 else {
1524- let iA = toBase58String(ao())
1525- let iB = fX(cp)
1526- let iC = iB._1
1527- let iD = iB._2
1528- let iE = if ((hd > iC))
1529- then iC
1530- else hd
1531- let iF = if ((iC > hd))
1543+ let iH = toBase58String(ao())
1544+ let iI = ga(cp)
1545+ let iJ = iI._1
1546+ let iK = iI._2
1547+ let iL = if ((hg > iJ))
1548+ then iJ
1549+ else hg
1550+ let iM = if ((iJ > hg))
15321551 then 0
1533- else (hd - iC)
1534- let iG = (iC - iE)
1535- let iH = if ((iG > 0))
1552+ else (hg - iJ)
1553+ let iN = (iJ - iL)
1554+ let iO = if ((iN > 0))
15361555 then nil
1537- else gD(cp, iA)
1538- let iI = if (((iE + iF) != hd))
1539- then throw(((((("toRepay=" + toString(iE)) + " + toWithdraw=") + toString(iF)) + " != ") + toString(hd)))
1556+ else gG(cp, iH)
1557+ let iP = if (((iL + iM) != hg))
1558+ then throw(((((("toRepay=" + toString(iL)) + " + toWithdraw=") + toString(iM)) + " != ") + toString(hg)))
15401559 else nil
1541- if ((iI == iI))
1560+ if ((iP == iP))
15421561 then {
1543- let iJ = if ((iF > 0))
1562+ let iQ = if ((iM > 0))
15441563 then {
1545- let iJ = invoke(ar(), "withdrawLocked", [iF], nil)
1546- if ((iJ == iJ))
1564+ let iQ = invoke(ar(), "withdrawLocked", [iM], nil)
1565+ if ((iQ == iQ))
15471566 then nil
15481567 else throw("Strict value is not equal to itself.")
15491568 }
15501569 else nil
1551- if ((iJ == iJ))
1570+ if ((iQ == iQ))
15521571 then {
1553- let iK = if ((iE > 0))
1572+ let iR = if ((iL > 0))
15541573 then {
1555- let iL = invoke(aw(), "repay", [cp, iE, iD], nil)
1556- if ((iL == iL))
1557- then [ScriptTransfer(cg.caller, iE, fromBase58String(iD))]
1574+ let iS = invoke(aw(), "repay", [cp, iL, iK], nil)
1575+ if ((iS == iS))
1576+ then [ScriptTransfer(cg.caller, iL, fromBase58String(iK))]
15581577 else throw("Strict value is not equal to itself.")
15591578 }
15601579 else nil
1561- if ((iK == iK))
1562- then ((((gH(cp, fT, dm, hx, cm(fT)) ++ (if ((iF > 0))
1563- then hc(cg.caller, iF)
1564- else nil)) ++ hf((bC() - hd))) ++ iH) ++ iK)
1580+ if ((iR == iR))
1581+ then ((((gK(cp, fW, dm, hE, cm(fW)) ++ (if ((iM > 0))
1582+ then hf(cg.caller, iM)
1583+ else nil)) ++ hi((bC() - hg))) ++ iO) ++ iR)
15651584 else throw("Strict value is not equal to itself.")
15661585 }
15671586 else throw("Strict value is not equal to itself.")
15771596
15781597
15791598 @Callable(cg)
1580-func closePosition (gI,iM) = {
1581- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1582- if ((hu == hu))
1599+func closePosition (gL,iT) = {
1600+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1601+ if ((hB == hB))
15831602 then {
15841603 let cp = cf(cg)
1585- let iN = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
1604+ let iU = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
15861605 if (if (if (if (if (!(cw(cp)))
15871606 then true
15881607 else !(cx()))
15891608 then true
15901609 else cy())
15911610 then true
1592- else (0 >= gI))
1593- then true
1594- else (0 > iM))
1611+ else (0 >= gL))
1612+ then true
1613+ else (0 > iT))
15951614 then throw("Invalid closePosition parameters")
15961615 else {
1597- let iO = co(cp)
1598- let fT = iO._1
1599- let hw = iO._2
1600- let hx = iO._3
1601- let hy = iO._4
1602- let iP = if ((ba(fT) > gI))
1616+ let iV = co(cp)
1617+ let fW = iV._1
1618+ let hD = iV._2
1619+ let hE = iV._3
1620+ let hF = iV._4
1621+ let iW = if ((ba(fW) > gL))
16031622 then {
1604- let hz = if ((fT > 0))
1623+ let hG = if ((fW > 0))
16051624 then aF
16061625 else aE
1607- let hA = (hz == aE)
1608- let iQ = dy((fT > 0), gI, true)
1609- let eA = iQ._1
1610- let cQ = iQ._2
1611- let cR = iQ._3
1612- let eH = iQ._4
1613- let ez = if ((fT > 0))
1614- then -(gI)
1615- else gI
1616- let iR = ef(cp, aN)
1617- let hD = iR._1
1618- let ee = iR._2
1619- let iS = eo(cp, aN)
1620- let iT = aR(ba(ez), ba(fT))
1621- let eE = aT(ee, iT)
1622- let iU = dd(fT, hw, hy, eE)
1623- let dm = iU._1
1624- let iV = iU._2
1625- let di = iU._3
1626- let hI = (ee - eE)
1627- let hJ = if ((fT > 0))
1628- then ((hD - eA) - hI)
1629- else ((hI + hD) - eA)
1630- let hM = ba(hJ)
1631- let iW = aT(hM, iS)
1632- let hK = (fT + ez)
1633- let iX = cm(hK)
1634- let eK = (bK() - eA)
1635- if (if ((iM != 0))
1636- then (iM > eA)
1626+ let hH = (hG == aE)
1627+ let iX = dy((fW > 0), gL, true)
1628+ let eD = iX._1
1629+ let cQ = iX._2
1630+ let cR = iX._3
1631+ let eK = iX._4
1632+ let eC = if ((fW > 0))
1633+ then -(gL)
1634+ else gL
1635+ let iY = ei(cp, aN)
1636+ let hK = iY._1
1637+ let eh = iY._2
1638+ let iZ = er(cp, aN)
1639+ let ja = aR(ba(eC), ba(fW))
1640+ let eH = aT(eh, ja)
1641+ let jb = dd(fW, hD, hF, eH)
1642+ let dm = jb._1
1643+ let jc = jb._2
1644+ let di = jb._3
1645+ let hP = (eh - eH)
1646+ let hQ = if ((fW > 0))
1647+ then ((hK - eD) - hP)
1648+ else ((hP + hK) - eD)
1649+ let hT = ba(hQ)
1650+ let jd = aT(hT, iZ)
1651+ let hR = (fW + eC)
1652+ let je = cm(hR)
1653+ let eN = (bK() - eD)
1654+ if (if ((iT != 0))
1655+ then (iT > eD)
16371656 else false)
1638- then throw(((("Limit error: " + toString(eA)) + " < ") + toString(iM)))
1639- else $Tuple15(hK, iW, hM, iX, iV, eE, (ba((dm - iW)) + eE), cQ, cR, eH, eK, (cb() - (if ((hK > 0))
1640- then ba(ez)
1641- else 0)), (ca() - (if ((0 > hK))
1642- then ba(ez)
1643- else 0)), (bM() - (if ((hK > 0))
1644- then eA
1645- else 0)), (bL() - (if ((0 > hK))
1646- then eA
1657+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1658+ else $Tuple15(hR, jd, hT, je, jc, eH, (ba((dm - jd)) + eH), cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1659+ then ba(eC)
1660+ else 0)), (ca() - (if ((0 > hR))
1661+ then ba(eC)
1662+ else 0)), (bM() - (if ((hR > 0))
1663+ then eD
1664+ else 0)), (bL() - (if ((0 > hR))
1665+ then eD
16471666 else 0)))
16481667 }
1649- else if ((gI > ba(fT)))
1668+ else if ((gL > ba(fW)))
16501669 then throw("Invalid closePosition parameters")
16511670 else {
1652- let iY = eB(cp, true)
1653- let eA = iY._1
1654- let iV = iY._2
1655- let eE = iY._3
1656- let eF = iY._4
1657- let cQ = iY._5
1658- let cR = iY._6
1659- let eH = iY._7
1660- let eK = iY._8
1661- let ea = iY._9
1662- let eI = iY._10
1663- let eJ = iY._11
1664- let hO = iY._12
1665- let hP = iY._13
1666- if (if ((iM != 0))
1667- then (iM > eA)
1671+ let jf = eE(cp, true)
1672+ let eD = jf._1
1673+ let jc = jf._2
1674+ let eH = jf._3
1675+ let eI = jf._4
1676+ let cQ = jf._5
1677+ let cR = jf._6
1678+ let eK = jf._7
1679+ let eN = jf._8
1680+ let ed = jf._9
1681+ let eL = jf._10
1682+ let eM = jf._11
1683+ let hV = jf._12
1684+ let hW = jf._13
1685+ if (if ((iT != 0))
1686+ then (iT > eD)
16681687 else false)
1669- then throw(((("Limit error: " + toString(eA)) + " < ") + toString(iM)))
1670- else $Tuple15(0, 0, 0, 0, iV, eE, eF, cQ, cR, eH, eK, eI, eJ, hO, hP)
1688+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1689+ else $Tuple15(0, 0, 0, 0, jc, eH, eI, cQ, cR, eK, eN, eL, eM, hV, hW)
16711690 }
1672- let hK = iP._1
1673- let iW = iP._2
1674- let hM = iP._3
1675- let iX = iP._4
1676- let iV = iP._5
1677- let eE = iP._6
1678- let eF = iP._7
1679- let cQ = iP._8
1680- let cR = iP._9
1681- let eH = iP._10
1682- let eK = iP._11
1683- let eI = iP._12
1684- let eJ = iP._13
1685- let hO = iP._14
1686- let hP = iP._15
1687- if ((iV > 0))
1691+ let hR = iW._1
1692+ let jd = iW._2
1693+ let hT = iW._3
1694+ let je = iW._4
1695+ let jc = iW._5
1696+ let eH = iW._6
1697+ let eI = iW._7
1698+ let cQ = iW._8
1699+ let cR = iW._9
1700+ let eK = iW._10
1701+ let eN = iW._11
1702+ let eL = iW._12
1703+ let eM = iW._13
1704+ let hV = iW._14
1705+ let hW = iW._15
1706+ if ((jc > 0))
16881707 then throw("Unable to close position with bad debt")
16891708 else {
1690- let iZ = ba(eF)
1691- let ja = (bC() - iZ)
1692- let jb = if ((0 > ja))
1693- then $Tuple2(0, ba(ja))
1694- else $Tuple2(ja, 0)
1695- let jc = jb._1
1696- let jd = jb._2
1697- let je = fX(cp)
1698- let iC = je._1
1699- let iD = je._2
1700- let jf = if ((iC > 0))
1701- then if ((iZ >= iC))
1709+ let jg = ba(eI)
1710+ let jh = (bC() - jg)
1711+ let ji = if ((0 > jh))
1712+ then $Tuple2(0, ba(jh))
1713+ else $Tuple2(jh, 0)
1714+ let jj = ji._1
1715+ let jk = ji._2
1716+ let jl = ga(cp)
1717+ let iJ = jl._1
1718+ let iK = jl._2
1719+ let jm = if ((iJ > 0))
1720+ then if ((jg >= iJ))
17021721 then {
1703- let iL = invoke(aw(), "repay", [cp, iC, iD], nil)
1704- if ((iL == iL))
1705- then $Tuple2([ScriptTransfer(iN, iC, fromBase58String(iD))], (iZ - iC))
1722+ let iS = invoke(aw(), "repay", [cp, iJ, iK], nil)
1723+ if ((iS == iS))
1724+ then $Tuple2([ScriptTransfer(iU, iJ, fromBase58String(iK))], (jg - iJ))
17061725 else throw("Strict value is not equal to itself.")
17071726 }
17081727 else {
1709- let jg = invoke(aw(), "realizePartiallyAndClose", [cp, iZ, iD], nil)
1710- if ((jg == jg))
1711- then $Tuple2([ScriptTransfer(iN, iZ, fromBase58String(iD))], 0)
1728+ let jn = invoke(aw(), "realizePartiallyAndClose", [cp, jg, iK], nil)
1729+ if ((jn == jn))
1730+ then $Tuple2([ScriptTransfer(iU, jg, fromBase58String(iK))], 0)
17121731 else throw("Strict value is not equal to itself.")
17131732 }
1714- else $Tuple2(nil, iZ)
1715- if ((jf == jf))
1733+ else $Tuple2(nil, jg)
1734+ if ((jm == jm))
17161735 then {
1717- let jh = jf._2
1718- let ji = jf._1
1719- let jj = if ((jh > 0))
1736+ let jo = jm._2
1737+ let jp = jm._1
1738+ let jq = if ((jo > 0))
17201739 then {
1721- let jj = invoke(ar(), "withdrawLocked", [jh], nil)
1722- if ((jj == jj))
1740+ let jq = invoke(ar(), "withdrawLocked", [jo], nil)
1741+ if ((jq == jq))
17231742 then nil
17241743 else throw("Strict value is not equal to itself.")
17251744 }
17261745 else nil
1727- if ((jj == jj))
1746+ if ((jq == jq))
17281747 then {
1729- let hQ = invoke(as(), "notifyNotional", [cp, 0], nil)
1730- if ((hQ == hQ))
1731- then (((((if ((hK == 0))
1732- then hb(cp)
1733- else gH(cp, hK, iW, hM, iX)) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ (if ((jh > 0))
1734- then hc(iN, jh)
1735- else nil)) ++ hf(jc)) ++ ji)
1748+ let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1749+ if ((hX == hX))
1750+ then (((((if ((hR == 0))
1751+ then he(cp)
1752+ else gK(cp, hR, jd, hT, je)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ (if ((jo > 0))
1753+ then hf(iU, jo)
1754+ else nil)) ++ hi(jj)) ++ jp)
17361755 else throw("Strict value is not equal to itself.")
17371756 }
17381757 else throw("Strict value is not equal to itself.")
17481767
17491768 @Callable(cg)
17501769 func liquidate (cp) = {
1751- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1752- if ((hu == hu))
1770+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1771+ if ((hB == hB))
17531772 then {
1754- let jk = eo(cp, aN)
1755- let iz = if (dQ())
1773+ let jr = er(cp, aN)
1774+ let iG = if (dT())
17561775 then {
1757- let jl = eo(cp, aO)
1758- bb(jk, jl)
1776+ let js = er(cp, aO)
1777+ bb(jr, js)
17591778 }
1760- else jk
1761- if (if (if (if (!(ch(iz, bR(), false)))
1779+ else jr
1780+ if (if (if (if (!(ch(iG, bR(), false)))
17621781 then true
17631782 else !(cw(cp)))
17641783 then true
17661785 then true
17671786 else cy())
17681787 then throw("Unable to liquidate")
1769- else if (if (if ((jk > bS()))
1788+ else if (if (if ((jr > bS()))
17701789 then (bT() > 0)
17711790 else false)
17721791 then (aK > bT())
17731792 else false)
17741793 then {
1775- let jm = co(cp)
1776- let fT = jm._1
1777- let hw = jm._2
1778- let hx = jm._3
1779- let hy = jm._4
1780- let hz = if ((fT > 0))
1794+ let jt = co(cp)
1795+ let fW = jt._1
1796+ let hD = jt._2
1797+ let hE = jt._3
1798+ let hF = jt._4
1799+ let hG = if ((fW > 0))
17811800 then aF
17821801 else aE
1783- let hA = (hz == aE)
1784- let eA = eu(cp, fT)
1785- let jn = ef(cp, aN)
1786- let hD = jn._1
1787- let ee = jn._2
1788- let jo = cP(hA, eA)
1789- let ez = jo._1
1790- let cQ = jo._2
1791- let cR = jo._3
1792- let eH = jo._4
1793- let jp = aR(ba(ez), ba(fT))
1794- let eE = aT(ee, jp)
1795- let jq = dd(fT, hw, hy, eE)
1796- let dm = jq._1
1797- let dn = jq._2
1798- let di = jq._3
1799- let hI = (ee - eE)
1800- let hJ = if ((fT > 0))
1801- then ((hD - eA) - hI)
1802- else ((hI + hD) - eA)
1803- let jr = aT(eA, bS())
1804- let js = (jr / 2)
1805- let gk = (jr - js)
1806- let iW = (dm - jr)
1807- let hK = (fT + ez)
1808- let hM = ba(hJ)
1809- let iX = cm(hK)
1810- let eK = (bK() - eA)
1811- let ja = (bC() - jr)
1812- let jt = if ((0 > ja))
1813- then $Tuple2(0, ba(ja))
1814- else $Tuple2(ja, 0)
1815- let ju = jt._1
1816- let jd = jt._2
1817- let jv = fX(cp)
1818- let iC = jv._1
1819- let iD = jv._2
1820- let jw = if ((iC > 0))
1802+ let hH = (hG == aE)
1803+ let eD = ex(cp, fW)
1804+ let ju = ei(cp, aN)
1805+ let hK = ju._1
1806+ let eh = ju._2
1807+ let jv = cP(hH, eD)
1808+ let eC = jv._1
1809+ let cQ = jv._2
1810+ let cR = jv._3
1811+ let eK = jv._4
1812+ let jw = aR(ba(eC), ba(fW))
1813+ let eH = aT(eh, jw)
1814+ let jx = dd(fW, hD, hF, eH)
1815+ let dm = jx._1
1816+ let dn = jx._2
1817+ let di = jx._3
1818+ let hP = (eh - eH)
1819+ let hQ = if ((fW > 0))
1820+ then ((hK - eD) - hP)
1821+ else ((hP + hK) - eD)
1822+ let jy = aT(eD, bS())
1823+ let jz = (jy / 2)
1824+ let gn = (jy - jz)
1825+ let jd = (dm - jy)
1826+ let hR = (fW + eC)
1827+ let hT = ba(hQ)
1828+ let je = cm(hR)
1829+ let eN = (bK() - eD)
1830+ let jh = (bC() - jy)
1831+ let jA = if ((0 > jh))
1832+ then $Tuple2(0, ba(jh))
1833+ else $Tuple2(jh, 0)
1834+ let jB = jA._1
1835+ let jk = jA._2
1836+ let jC = ga(cp)
1837+ let iJ = jC._1
1838+ let iK = jC._2
1839+ let jD = if ((iJ > 0))
18211840 then {
1822- let jx = aT(iC, jp)
1823- let jg = invoke(aw(), "realizePartially", [cp, iD, jx], nil)
1824- if ((jg == jg))
1841+ let jE = aT(iJ, jw)
1842+ let jn = invoke(aw(), "realizePartially", [cp, iK, jE], nil)
1843+ if ((jn == jn))
18251844 then nil
18261845 else throw("Strict value is not equal to itself.")
18271846 }
18281847 else nil
1829- if ((jw == jw))
1848+ if ((jD == jD))
18301849 then {
1831- let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1832- if ((jj == jj))
1850+ let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1851+ if ((jq == jq))
18331852 then {
1834- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1835- if ((ir == ir))
1853+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1854+ if ((iy == iy))
18361855 then {
1837- let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
1838- if ((hQ == hQ))
1839- then (((gH(cp, hK, iW, hM, iX) ++ gU(cQ, cR, eH, eK, (cb() - (if ((hK > 0))
1840- then ba(ez)
1841- else 0)), (ca() - (if ((0 > hK))
1842- then ba(ez)
1843- else 0)), (bM() - (if ((hK > 0))
1844- then eA
1845- else 0)), (bL() - (if ((0 > hK))
1846- then eA
1847- else 0)))) ++ hc(cg.caller, js)) ++ hf(ju))
1856+ let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1857+ if ((hX == hX))
1858+ then (((gK(cp, hR, jd, hT, je) ++ gX(cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1859+ then ba(eC)
1860+ else 0)), (ca() - (if ((0 > hR))
1861+ then ba(eC)
1862+ else 0)), (bM() - (if ((hR > 0))
1863+ then eD
1864+ else 0)), (bL() - (if ((0 > hR))
1865+ then eD
1866+ else 0)))) ++ hf(cg.caller, jz)) ++ hi(jB))
18481867 else throw("Strict value is not equal to itself.")
18491868 }
18501869 else throw("Strict value is not equal to itself.")
18541873 else throw("Strict value is not equal to itself.")
18551874 }
18561875 else {
1857- let jy = eB(cp, false)
1858- let dZ = jy._1
1859- let dn = jy._2
1860- let ea = jy._3
1861- let eb = jy._4
1862- let cQ = jy._5
1863- let cR = jy._6
1864- let eH = jy._7
1865- let eK = jy._8
1866- let eA = jy._9
1867- let eI = jy._10
1868- let eJ = jy._11
1869- let hO = jy._12
1870- let hP = jy._13
1871- let jr = aT(eA, bS())
1872- let js = (jr / 2)
1873- let gk = (jr - js)
1874- let ja = (bC() - jr)
1875- let jz = if ((0 > ja))
1876- then $Tuple2(0, ba(ja))
1877- else $Tuple2(ja, 0)
1878- let ju = jz._1
1879- let jd = jz._2
1880- let jA = fX(cp)
1881- let iC = jA._1
1882- let iD = jA._2
1883- let jw = if ((iC > 0))
1876+ let jF = eE(cp, false)
1877+ let ec = jF._1
1878+ let dn = jF._2
1879+ let ed = jF._3
1880+ let ee = jF._4
1881+ let cQ = jF._5
1882+ let cR = jF._6
1883+ let eK = jF._7
1884+ let eN = jF._8
1885+ let eD = jF._9
1886+ let eL = jF._10
1887+ let eM = jF._11
1888+ let hV = jF._12
1889+ let hW = jF._13
1890+ let jy = aT(eD, bS())
1891+ let jz = (jy / 2)
1892+ let gn = (jy - jz)
1893+ let jh = (bC() - jy)
1894+ let jG = if ((0 > jh))
1895+ then $Tuple2(0, ba(jh))
1896+ else $Tuple2(jh, 0)
1897+ let jB = jG._1
1898+ let jk = jG._2
1899+ let jH = ga(cp)
1900+ let iJ = jH._1
1901+ let iK = jH._2
1902+ let jD = if ((iJ > 0))
18841903 then {
1885- let jg = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iD], nil)
1886- if ((jg == jg))
1904+ let jn = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iK], nil)
1905+ if ((jn == jn))
18871906 then nil
18881907 else throw("Strict value is not equal to itself.")
18891908 }
18901909 else nil
1891- if ((jw == jw))
1910+ if ((jD == jD))
18921911 then {
1893- let gd = if ((dn > 0))
1912+ let gg = if ((dn > 0))
18941913 then {
1895- let jB = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1896- if ((jB == jB))
1914+ let jI = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1915+ if ((jI == jI))
18971916 then nil
18981917 else throw("Strict value is not equal to itself.")
18991918 }
19001919 else nil
1901- if ((gd == gd))
1920+ if ((gg == gg))
19021921 then {
1903- let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1904- if ((jj == jj))
1922+ let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1923+ if ((jq == jq))
19051924 then {
1906- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1907- if ((ir == ir))
1925+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1926+ if ((iy == iy))
19081927 then {
1909- let hQ = invoke(as(), "notifyNotional", [cp, 0], nil)
1910- if ((hQ == hQ))
1911- then (((hb(cp) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ hc(cg.caller, js)) ++ hf(ju))
1928+ let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1929+ if ((hX == hX))
1930+ then (((he(cp) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hf(cg.caller, jz)) ++ hi(jB))
19121931 else throw("Strict value is not equal to itself.")
19131932 }
19141933 else throw("Strict value is not equal to itself.")
19271946
19281947 @Callable(cg)
19291948 func payFunding () = {
1930- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1931- if ((hu == hu))
1949+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1950+ if ((hB == hB))
19321951 then {
1933- let jC = bN()
1934- if (if (if ((jC > lastBlock.timestamp))
1952+ let jJ = bN()
1953+ if (if (if ((jJ > lastBlock.timestamp))
19351954 then true
19361955 else !(cx()))
19371956 then true
19381957 else cy())
1939- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
1958+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
19401959 else {
1941- let fD = dz()
1942- let jD = fC()
1943- let fG = jD._1
1944- let fH = jD._2
1945- gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1960+ let fG = dz()
1961+ let jK = fF()
1962+ let fJ = jK._1
1963+ let fK = jK._2
1964+ gA((jJ + bQ()), (bY() + fK), (bZ() + fJ), aR(fK, fG), aR(fJ, fG))
19461965 }
19471966 }
19481967 else throw("Strict value is not equal to itself.")
19521971
19531972 @Callable(cg)
19541973 func syncTerminalPriceToOracle () = {
1955- let jE = fy(dz())
1956- let jF = jE._1
1957- let jG = jE._2
1958- let eF = jE._3
1959- let jH = if ((eF != 0))
1974+ let cH = bF()
1975+ let cJ = bG()
1976+ let jL = fB(dz(), cH, cJ)
1977+ let hr = jL._1
1978+ let hs = jL._2
1979+ let eI = jL._3
1980+ let ht = if ((eI != 0))
19601981 then {
1961- let jH = invoke(ar(), "exchangeFreeAndLocked", [eF], nil)
1962- if ((jH == jH))
1982+ let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1983+ if ((ht == ht))
19631984 then nil
19641985 else throw("Strict value is not equal to itself.")
19651986 }
19661987 else nil
1967- if ((jH == jH))
1988+ if ((ht == ht))
1989+ then (gW(hr, hs) ++ gO(aR(aT(cH, hr), aT(cJ, hs))))
1990+ else throw("Strict value is not equal to itself.")
1991+ }
1992+
1993+
1994+
1995+@Callable(cg)
1996+func view_calcRemainMarginWithFundingPayment (cp) = {
1997+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1998+ if ((hB == hB))
19681999 then {
1969- let cH = bF()
1970- let cJ = bG()
1971- (gT(jF, jG) ++ gL(aR(aT(cH, jF), aT(cJ, jG))))
2000+ let jM = co(cp)
2001+ let cs = jM._1
2002+ let ek = jM._2
2003+ let et = jM._3
2004+ let em = jM._4
2005+ let jN = ei(cp, aN)
2006+ let dZ = jN._1
2007+ let eh = jN._2
2008+ let jO = dd(cs, ek, em, eh)
2009+ let dm = jO._1
2010+ let dn = jO._2
2011+ let di = jO._3
2012+ throw((((((aP(dm) + aP(di)) + aP(ew(cp))) + aP(eh)) + aP(dn)) + aP(dZ)))
19722013 }
19732014 else throw("Strict value is not equal to itself.")
19742015 }
19762017
19772018
19782019 @Callable(cg)
1979-func view_calcRemainMarginWithFundingPayment (cp) = {
1980- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1981- if ((hu == hu))
1982- then {
1983- let jI = co(cp)
1984- let cs = jI._1
1985- let eh = jI._2
1986- let eq = jI._3
1987- let ej = jI._4
1988- let jJ = ef(cp, aN)
1989- let dW = jJ._1
1990- let ee = jJ._2
1991- let jK = dd(cs, eh, ej, ee)
1992- let dm = jK._1
1993- let dn = jK._2
1994- let di = jK._3
1995- throw((((((aP(dm) + aP(di)) + aP(et(cp))) + aP(ee)) + aP(dn)) + aP(dW)))
1996- }
1997- else throw("Strict value is not equal to itself.")
1998- }
1999-
2000-
2001-
2002-@Callable(cg)
2003-func view_getPegAdjustCost (gM) = {
2004- let fx = fy(gM)
2005- throw(toString(fx._3))
2020+func view_getPegAdjustCost (gP) = {
2021+ let cH = bF()
2022+ let cJ = bG()
2023+ let fA = fB(gP, cH, cJ)
2024+ throw(toString(fA._3))
20062025 }
20072026
20082027
20092028
20102029 @Callable(cg)
20112030 func view_getTerminalAmmPrice () = {
2012- let jL = fb()
2013- let ff = jL._1
2014- let fg = jL._2
2015- let hj = aR(aT(ff, bH()), aT(fg, bI()))
2016- throw(toString(hj))
2031+ let jP = fe()
2032+ let fi = jP._1
2033+ let fj = jP._2
2034+ let hm = aR(aT(fi, bH()), aT(fj, bI()))
2035+ throw(toString(hm))
20172036 }
20182037
20192038
20202039
20212040 @Callable(cg)
20222041 func view_getFunding () = {
2023- let fD = dz()
2024- let jM = fC()
2025- let fG = jM._1
2026- let fH = jM._2
2027- let jN = aR(fH, fD)
2028- let jO = aR(fG, fD)
2029- throw((((aP(jN) + aP(jO)) + aP(eL())) + aP(dz())))
2042+ let fG = dz()
2043+ let jQ = fF()
2044+ let fJ = jQ._1
2045+ let fK = jQ._2
2046+ let jR = aR(fK, fG)
2047+ let jS = aR(fJ, fG)
2048+ throw((((aP(jR) + aP(jS)) + aP(eO())) + aP(dz())))
20302049 }
20312050
20322051
20332052
20342053 @Callable(cg)
20352054 func view_getBorrowedByTrader (cp) = {
2036- let jP = fX(cp)
2037- let iC = jP._1
2038- let iD = jP._2
2039- throw((aP(iC) + iD))
2055+ let jT = ga(cp)
2056+ let iJ = jT._1
2057+ let iK = jT._2
2058+ throw((aP(iJ) + iK))
20402059 }
20412060
20422061
20432062
20442063 @Callable(cg)
20452064 func computeSpotPrice () = {
2046- let fx = dP()
2047- $Tuple2(nil, fx)
2048- }
2049-
2050-
2051-
2052-@Callable(cg)
2053-func computeFeeForTraderWithArtifact (cp,fJ) = {
2054- let fx = ga(cp, fJ)
2055- $Tuple2(nil, fx)
2056- }
2057-
2058-
2059-@Verifier(jQ)
2060-func jR () = sigVerify(jQ.bodyBytes, jQ.proofs[0], an())
2065+ let fA = dS()
2066+ $Tuple2(nil, fA)
2067+ }
2068+
2069+
2070+
2071+@Callable(cg)
2072+func computeFeeForTraderWithArtifact (cp,fM) = {
2073+ let fA = gd(cp, fM)
2074+ $Tuple2(nil, fA)
2075+ }
2076+
2077+
2078+@Verifier(jU)
2079+func jV () = sigVerify(jU.bodyBytes, jU.proofs[0], an())
20612080
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_sequence"
1313
1414 let f = "k_positionSize"
1515
1616 let g = "k_positionMargin"
1717
1818 let h = "k_positionOpenNotional"
1919
2020 let i = "k_positionFraction"
2121
2222 let j = "k_positionSequence"
2323
2424 let k = "k_positionAsset"
2525
2626 let l = "k_initialized"
2727
2828 let m = "k_paused"
2929
3030 let n = "k_closeOnly"
3131
3232 let o = "k_fee"
3333
3434 let p = "k_fundingPeriod"
3535
3636 let q = "k_initMarginRatio"
3737
3838 let r = "k_mmr"
3939
4040 let s = "k_liquidationFeeRatio"
4141
4242 let t = "k_partLiquidationRatio"
4343
4444 let u = "k_spreadLimit"
4545
4646 let v = "k_maxPriceImpact"
4747
4848 let w = "k_maxPriceSpread"
4949
5050 let x = "k_maxOpenNotional"
5151
5252 let y = "k_feeToStakersPercent"
5353
5454 let z = "k_maxOracleDelay"
5555
5656 let A = "k_lastDataStr"
5757
5858 let B = "k_lastMinuteId"
5959
6060 let C = "k_twapDataLastCumulativePrice"
6161
6262 let D = "k_twapDataLastPrice"
6363
6464 let E = "k_twapDataPreviousMinuteId"
6565
6666 let F = "k_latestLongPremiumFraction"
6767
6868 let G = "k_latestShortPremiumFraction"
6969
7070 let H = "k_nextFundingBlockMinTimestamp"
7171
7272 let I = "k_longFundingRate"
7373
7474 let J = "k_shortFundingRate"
7575
7676 let K = "k_qtAstR"
7777
7878 let L = "k_bsAstR"
7979
8080 let M = "k_qtAstW"
8181
8282 let N = "k_bsAstW"
8383
8484 let O = "k_totalPositionSize"
8585
8686 let P = "k_totalLongPositionSize"
8787
8888 let Q = "k_totalShortPositionSize"
8989
9090 let R = "k_openInterestNotional"
9191
9292 let S = "k_openInterestShort"
9393
9494 let T = "k_openInterestLong"
9595
9696 let U = "k_coordinatorAddress"
9797
9898 let V = "k_vault_address"
9999
100100 let W = "k_admin_address"
101101
102102 let X = "k_admin_public_key"
103103
104104 let Y = "k_quote_asset"
105105
106106 let Z = "k_quote_staking"
107107
108108 let aa = "k_staking_address"
109109
110110 let ab = "k_miner_address"
111111
112112 let ac = "k_orders_address"
113113
114114 let ad = "k_referral_address"
115115
116116 let ae = "k_collateral_address"
117117
118118 let af = "k_exchange_address"
119119
120120 let ag = "k_nft_manager_address"
121121
122122 let ah = "k_trader_market_asset_collateral"
123123
124124 func ai (aj,ak) = ((aj + "_") + ak)
125125
126126
127127 func al () = valueOrErrorMessage(addressFromString(getStringValue(this, U)), "Coordinator not set")
128128
129129
130130 func am () = addressFromString(getStringValue(al(), W))
131131
132132
133133 func an () = fromBase58String(getStringValue(al(), X))
134134
135135
136136 func ao () = fromBase58String(getStringValue(al(), Y))
137137
138138
139139 func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), Z)), "Quote asset staking not set")
140140
141141
142142 func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), aa)), "Staking not set")
143143
144144
145145 func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), V)), "Vault not set")
146146
147147
148148 func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Miner not set")
149149
150150
151151 func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Orders not set")
152152
153153
154154 func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Referral not set")
155155
156156
157157 func av () = valueOrErrorMessage(addressFromString(getStringValue(al(), ag)), "NFT Manager not set")
158158
159159
160160 func aw () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Collateral Manager not set")
161161
162162
163163 func ax () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(al(), af), "No swap address")), "Invalid swap address")
164164
165165
166166 let ay = "k_whitelist_asset"
167167
168168 func az (aA) = valueOrElse(getBoolean(aw(), ai(ay, aA)), false)
169169
170170
171171 let aB = "k_token_param"
172172
173173 let aC = "k_token_type"
174174
175175 let aD = "fee_reduction"
176176
177177 let aE = 1
178178
179179 let aF = 2
180180
181181 let aG = 15
182182
183183 let aH = 15
184184
185185 let aI = 1000
186186
187187 let aJ = 6
188188
189189 let aK = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
190190
191191 let aL = (86400 * aK)
192192
193193 let aM = 100
194194
195195 let aN = 1
196196
197197 let aO = 2
198198
199199 func aP (aQ) = (toString(aQ) + ",")
200200
201201
202202 func aR (aQ,aS) = fraction(aQ, aK, aS, HALFEVEN)
203203
204204
205205 func aT (aQ,aS) = fraction(aQ, aS, aK, HALFEVEN)
206206
207207
208208 func aU (aQ) = sqrt(aQ, aJ, aJ, HALFEVEN)
209209
210210
211211 func aV (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
212212
213213
214214 func aW (aQ,aS) = fraction(aQ, toBigInt(aK), aS, HALFEVEN)
215215
216216
217217 func aX (aQ,aS) = fraction(aQ, aS, toBigInt(aK), HALFEVEN)
218218
219219
220220 func aY (aQ) = sqrtBigInt(aQ, aJ, aJ, HALFEVEN)
221221
222222
223223 func aZ (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
224224
225225
226226 func ba (aQ) = if ((aQ > 0))
227227 then aQ
228228 else -(aQ)
229229
230230
231231 func bb (aQ,aS) = if ((aQ >= aS))
232232 then aQ
233233 else aS
234234
235235
236236 func bc (bd) = {
237237 func be (bf,bg) = ((bf + bg) + ",")
238238
239239 let bh = {
240240 let bi = bd
241241 let bj = size(bi)
242242 let bk = ""
243243 func bl (bm,bn) = if ((bn >= bj))
244244 then bm
245245 else be(bm, bi[bn])
246246
247247 func bo (bm,bn) = if ((bn >= bj))
248248 then bm
249249 else throw("List size exceeds 20")
250250
251251 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
252252 }
253253 let bp = dropRight(bh, 1)
254254 let bq = if ((take(bp, 1) == ","))
255255 then drop(bp, 1)
256256 else bp
257257 bq
258258 }
259259
260260
261261 func br (bs) = split(bs, ",")
262262
263263
264264 func bt (bd,bu,bv) = if ((size(bd) > bu))
265265 then (removeByIndex(bd, 0) :+ bv)
266266 else (bd :+ bv)
267267
268268
269269 func bw (bx) = valueOrErrorMessage(getInteger(this, bx), ("no value for " + bx))
270270
271271
272272 func by (bx,bz) = valueOrElse(getInteger(this, bx), bz)
273273
274274
275275 func bA (ak,aj) = {
276276 let bg = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
277277 bg
278278 }
279279
280280
281281 func bB (ak,aj) = {
282282 let bg = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
283283 bg
284284 }
285285
286286
287287 func bC () = bw(d)
288288
289289
290290 func bD () = bw(o)
291291
292292
293293 func bE () = bw(q)
294294
295295
296296 func bF () = bw(K)
297297
298298
299299 func bG () = bw(L)
300300
301301
302302 func bH () = by(M, aK)
303303
304304
305305 func bI () = by(N, aK)
306306
307307
308308 func bJ () = bw(O)
309309
310310
311311 func bK () = bw(R)
312312
313313
314314 func bL () = bw(S)
315315
316316
317317 func bM () = bw(T)
318318
319319
320320 func bN () = bw(H)
321321
322322
323323 func bO () = bw(p)
324324
325325
326326 func bP () = (bO() * aK)
327327
328328
329329 func bQ () = (bO() * aI)
330330
331331
332332 func bR () = bw(r)
333333
334334
335335 func bS () = bw(s)
336336
337337
338338 func bT () = bw(t)
339339
340340
341341 func bU () = bw(u)
342342
343343
344344 func bV () = bw(v)
345345
346346
347347 func bW () = bw(w)
348348
349349
350350 func bX () = bw(x)
351351
352352
353353 func bY () = bw(F)
354354
355355
356356 func bZ () = bw(G)
357357
358358
359359 func ca () = bw(Q)
360360
361361
362362 func cb () = bw(P)
363363
364364
365365 func cc () = by(e, 0)
366366
367367
368368 func cd () = bw(y)
369369
370370
371371 func ce () = bw(z)
372372
373373
374374 func cf (cg) = valueOrElse(getString(at(), "k_sender"), toString(cg.caller))
375375
376376
377377 func ch (ci,cj,ck) = {
378378 let cl = (ci - cj)
379379 if (if (ck)
380380 then (0 > cl)
381381 else false)
382382 then throw("Invalid margin")
383383 else if (if (!(ck))
384384 then (cl >= 0)
385385 else false)
386386 then throw("Invalid margin")
387387 else true
388388 }
389389
390390
391391 func cm (cn) = if ((cn == 0))
392392 then throw("Should not be called with _positionSize == 0")
393393 else if ((cn > 0))
394394 then bY()
395395 else bZ()
396396
397397
398398 func co (cp) = {
399399 let cq = getInteger(this, ai(f, cp))
400400 let cr = cq
401401 if ($isInstanceOf(cr, "Int"))
402402 then {
403403 let cs = cr
404404 $Tuple4(cs, getIntegerValue(this, ai(g, cp)), getIntegerValue(this, ai(h, cp)), getIntegerValue(this, ai(i, cp)))
405405 }
406406 else $Tuple4(0, 0, 0, 0)
407407 }
408408
409409
410410 func ct (cp) = {
411411 let cu = getString(this, ai(k, cp))
412412 let cr = cu
413413 if ($isInstanceOf(cr, "String"))
414414 then {
415415 let cv = cr
416416 cv
417417 }
418418 else toBase58String(ao())
419419 }
420420
421421
422422 func cw (cp) = if ((co(cp)._1 == 0))
423423 then throw("No open position")
424424 else true
425425
426426
427427 func cx () = valueOrElse(getBoolean(this, l), false)
428428
429429
430430 func cy () = valueOrElse(getBoolean(this, m), false)
431431
432432
433433 func cz () = valueOrElse(getBoolean(this, n), false)
434434
435435
436436 func cA (cB,cC,cD) = if (cB)
437437 then {
438438 let cE = (bG() - cD)
439439 if ((0 >= cE))
440440 then throw("Tx lead to base asset reserve <= 0, revert")
441441 else $Tuple3((bF() + cC), cE, (bJ() + cD))
442442 }
443443 else {
444444 let cF = (bF() - cC)
445445 if ((0 >= cF))
446446 then throw("Tx lead to base quote reserve <= 0, revert")
447447 else $Tuple3(cF, (bG() + cD), (bJ() - cD))
448448 }
449449
450450
451451 func cG (cH,cI,cJ,cK) = {
452452 let cL = toBigInt(cH)
453453 let cM = toBigInt(cI)
454454 let cN = toBigInt(cJ)
455455 let cO = toBigInt(cK)
456456 aX(aX(cL, cM), aX(cN, cO))
457457 }
458458
459459
460460 func cP (cB,cC) = {
461461 let cH = bF()
462462 let cJ = bG()
463463 let cI = bH()
464464 let cK = bI()
465465 let bx = cG(cH, cI, cJ, cK)
466466 let cQ = if (cB)
467467 then (cH + cC)
468468 else (cH - cC)
469469 let cR = toInt(aW(bx, toBigInt(aT(cQ, cI))))
470470 let cS = aR(ba((cR - cJ)), cI)
471471 let cT = if (cB)
472472 then cS
473473 else -(cS)
474474 let cU = cA(cB, cC, cS)
475475 let cV = cU._1
476476 let cW = cU._2
477477 let cX = cU._3
478478 let cY = aR(aT(cH, cI), aT(cJ, cK))
479479 let cZ = aR(cC, cS)
480480 let da = ba((cY - cZ))
481481 let db = (aK - aR(cY, (cY + da)))
482482 let dc = bV()
483483 if ((db > dc))
484484 then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(cH)) + " before base asset: ") + toString(cJ)) + " quote asset amount to exchange: ") + toString(cC)) + " price before: ") + toString(cY)) + " marketPrice: ") + toString(cZ)))
485485 else $Tuple4(cT, cV, cW, cX)
486486 }
487487
488488
489489 func dd (de,df,dg,dh) = {
490490 let di = if ((de != 0))
491491 then {
492492 let dj = cm(de)
493493 aT((dj - dg), de)
494494 }
495495 else 0
496496 let dk = ((dh - di) + df)
497497 let dl = if ((0 > dk))
498498 then $Tuple2(0, ba(dk))
499499 else $Tuple2(ba(dk), 0)
500500 let dm = dl._1
501501 let dn = dl._2
502502 $Tuple3(dm, dn, di)
503503 }
504504
505505
506506 func do (cB,cD,dp,dq,dr,ds,dt) = {
507507 let cY = aR(aT(dq, dr), aT(ds, dt))
508508 if ((cD == 0))
509509 then throw("Invalid base asset amount")
510510 else {
511511 let bx = cG(dq, dr, ds, dt)
512512 let du = if (cB)
513513 then (ds + cD)
514514 else (ds - cD)
515515 let dv = toInt(aW(bx, toBigInt(aT(du, dt))))
516516 let dw = ba((dv - aT(dq, dr)))
517517 let dc = bV()
518518 let dx = cA(!(cB), dw, cD)
519519 let cV = dx._1
520520 let cW = dx._2
521521 let cX = dx._3
522522 let cZ = aR(dw, cD)
523523 let da = ba((cY - cZ))
524524 let db = (aK - aR(cY, (cY + da)))
525525 if (if ((db > dc))
526526 then dp
527527 else false)
528528 then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(dq)) + " before base asset: ") + toString(ds)) + " base asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cY)) + " market price: ") + toString(cZ)))
529529 else $Tuple7(dw, cV, cW, cX, (cb() - (if (cB)
530530 then ba(cD)
531531 else 0)), (ca() - (if (!(cB))
532532 then ba(cD)
533533 else 0)), db)
534534 }
535535 }
536536
537537
538538 func dy (cB,cD,dp) = do(cB, cD, dp, bF(), bH(), bG(), bI())
539539
540540
541541 func dz () = {
542542 let dA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
543543 let dB = getStringValue(this, a)
544544 let dC = valueOrErrorMessage(getInteger(dA, dB), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + dB))
545545 let dD = valueOrElse(getString(this, b), "")
546546 if ((dD != ""))
547547 then {
548548 let dE = lastBlock.height
549549 let dF = valueOrErrorMessage(getInteger(dA, dD), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + dD))
550550 if (((dE - dF) > ce()))
551551 then throw(((("Oracle stale data. Last oracle block: " + toString(dF)) + " current block: ") + toString(dE)))
552552 else dC
553553 }
554554 else dC
555555 }
556556
557557
558-func dG (dq,ds) = {
559- let dH = dz()
558+func dG (dH,dq,ds,cI,cK) = {
559+ let dI = aR(aT(dq, cI), aT(ds, cK))
560+ let dJ = aR((dH + dI), (2 * aK))
561+ let dG = aR(ba((dH - dI)), dJ)
562+ dG
563+ }
564+
565+
566+func dK (dq,ds) = {
567+ let dL = dz()
560568 let cI = bH()
561569 let cK = bI()
562- let dI = aR(aT(dq, cI), aT(ds, cK))
563- let dJ = aR((dH + dI), (2 * aK))
564- let dK = aR(ba((dH - dI)), dJ)
565- if ((dK > bW()))
566- then throw(((("Price spread " + toString(dK)) + " > max price spread ") + toString(bW())))
570+ let dM = dG(dL, bF(), bG(), cI, cK)
571+ let dN = dG(dL, dq, ds, cI, cK)
572+ if (if ((dN > bW()))
573+ then (dN > dM)
574+ else false)
575+ then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bW())))
567576 else true
568577 }
569578
570579
571-func dL (dM,dN) = {
572- let dO = bX()
573- if ((dM > dO))
574- then throw(((("Long open notional " + toString(dM)) + " > max open notional ") + toString(dO)))
575- else if ((dN > dO))
576- then throw(((("Short open notional " + toString(dN)) + " > max open notional ") + toString(dO)))
580+func dO (dP,dQ) = {
581+ let dR = bX()
582+ if ((dP > dR))
583+ then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
584+ else if ((dQ > dR))
585+ then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
577586 else true
578587 }
579588
580589
581-func dP () = {
590+func dS () = {
582591 let dq = bF()
583592 let ds = bG()
584593 let cI = bH()
585594 let cK = bI()
586595 aR(aT(dq, cI), aT(ds, cK))
587596 }
588597
589598
590-func dQ () = {
591- let dH = dz()
592- let dR = dP()
593- (aR(ba((dH - dR)), dH) > bU())
594- }
595-
596-
597-func dS (cn,dT,dq,dr,ds,dt) = {
598- let dU = ba(cn)
599- let dV = (0 > cn)
600- let dW = if ((dT == aN))
599+func dT () = {
600+ let dL = dz()
601+ let dU = dS()
602+ (aR(ba((dL - dU)), dL) > bU())
603+ }
604+
605+
606+func dV (cn,dW,dq,dr,ds,dt) = {
607+ let dX = ba(cn)
608+ let dY = (0 > cn)
609+ let dZ = if ((dW == aN))
601610 then {
602- let dX = do(!(dV), dU, false, dq, dr, ds, dt)
603- let dY = dX._1
604- let dZ = dX._2
605- let ea = dX._3
606- let eb = dX._4
607- dY
608- }
609- else aT(dU, dz())
610- dW
611- }
612-
613-
614-func ec (cn,ed,dq,dr,ds,dt,dT) = if ((cn == 0))
611+ let ea = do(!(dY), dX, false, dq, dr, ds, dt)
612+ let eb = ea._1
613+ let ec = ea._2
614+ let ed = ea._3
615+ let ee = ea._4
616+ eb
617+ }
618+ else aT(dX, dz())
619+ dZ
620+ }
621+
622+
623+func ef (cn,eg,dq,dr,ds,dt,dW) = if ((cn == 0))
615624 then throw("Invalid position size")
616625 else {
617- let dV = (0 > cn)
618- let dW = dS(cn, dT, dq, dr, ds, dt)
619- let ee = if (dV)
620- then (ed - dW)
621- else (dW - ed)
622- $Tuple2(dW, ee)
626+ let dY = (0 > cn)
627+ let dZ = dV(cn, dW, dq, dr, ds, dt)
628+ let eh = if (dY)
629+ then (eg - dZ)
630+ else (dZ - eg)
631+ $Tuple2(dZ, eh)
623632 }
624633
625634
626-func ef (cp,dT) = {
627- let eg = co(cp)
628- let cs = eg._1
629- let eh = eg._2
630- let ei = eg._3
631- let ej = eg._4
632- ec(cs, ei, bF(), bH(), bG(), bI(), dT)
633- }
634-
635-
636-func ek (el,em,en) = aR((el - em), en)
637-
638-
639-func eo (cp,dT) = {
640- let ep = co(cp)
641- let cs = ep._1
642- let eh = ep._2
643- let eq = ep._3
644- let ej = ep._4
645- let er = ef(cp, dT)
646- let dW = er._1
647- let ee = er._2
648- let es = dd(cs, eh, ej, ee)
649- let dm = es._1
650- let dn = es._2
651- ek(dm, dn, dW)
652- }
653-
654-
655-func et (cp) = eo(cp, aN)
656-
657-
658-func eu (cp,cn) = {
659- let ev = bb(bT(), (aK - aR(et(cp), bR())))
660- let ew = aT(ba(cn), ev)
661- let ex = dy((cn > 0), ew, false)
662- let ey = ex._1
663- let db = ex._7
635+func ei (cp,dW) = {
636+ let ej = co(cp)
637+ let cs = ej._1
638+ let ek = ej._2
639+ let el = ej._3
640+ let em = ej._4
641+ ef(cs, el, bF(), bH(), bG(), bI(), dW)
642+ }
643+
644+
645+func en (eo,ep,eq) = aR((eo - ep), eq)
646+
647+
648+func er (cp,dW) = {
649+ let es = co(cp)
650+ let cs = es._1
651+ let ek = es._2
652+ let et = es._3
653+ let em = es._4
654+ let eu = ei(cp, dW)
655+ let dZ = eu._1
656+ let eh = eu._2
657+ let ev = dd(cs, ek, em, eh)
658+ let dm = ev._1
659+ let dn = ev._2
660+ en(dm, dn, dZ)
661+ }
662+
663+
664+func ew (cp) = er(cp, aN)
665+
666+
667+func ex (cp,cn) = {
668+ let ey = bb(bT(), (aK - aR(ew(cp), bR())))
669+ let ez = aT(ba(cn), ey)
670+ let eA = dy((cn > 0), ez, false)
671+ let eB = eA._1
672+ let db = eA._7
664673 if ((bV() > db))
665- then ey
674+ then eB
666675 else {
667- let ez = aT(ba(cn), bT())
668- let eA = dy((cn > 0), ez, false)._1
669- eA
670- }
671- }
672-
673-
674-func eB (cp,dp) = {
675- let eC = co(cp)
676- let cs = eC._1
677- let eh = eC._2
678- let ei = eC._3
679- let ej = eC._4
680- let ee = ef(cp, aN)._2
681- let eD = dd(cs, eh, ej, ee)
682- let dm = eD._1
683- let dn = eD._2
684- let ez = -(cs)
685- let eE = ee
686- let eF = -(dm)
687- let eG = dy((cs > 0), ba(cs), dp)
688- let eA = eG._1
689- let cQ = eG._2
690- let cR = eG._3
691- let eH = eG._4
692- let eI = eG._5
693- let eJ = eG._6
694- let eK = (bK() - ei)
695- $Tuple13(ez, dn, eE, eF, cQ, cR, eH, eK, eA, eI, eJ, (bM() - (if ((cs > 0))
696- then ei
676+ let eC = aT(ba(cn), bT())
677+ let eD = dy((cn > 0), eC, false)._1
678+ eD
679+ }
680+ }
681+
682+
683+func eE (cp,dp) = {
684+ let eF = co(cp)
685+ let cs = eF._1
686+ let ek = eF._2
687+ let el = eF._3
688+ let em = eF._4
689+ let eh = ei(cp, aN)._2
690+ let eG = dd(cs, ek, em, eh)
691+ let dm = eG._1
692+ let dn = eG._2
693+ let eC = -(cs)
694+ let eH = eh
695+ let eI = -(dm)
696+ let eJ = dy((cs > 0), ba(cs), dp)
697+ let eD = eJ._1
698+ let cQ = eJ._2
699+ let cR = eJ._3
700+ let eK = eJ._4
701+ let eL = eJ._5
702+ let eM = eJ._6
703+ let eN = (bK() - el)
704+ $Tuple13(eC, dn, eH, eI, cQ, cR, eK, eN, eD, eL, eM, (bM() - (if ((cs > 0))
705+ then el
697706 else 0)), (bL() - (if ((0 > cs))
698- then ei
707+ then el
699708 else 0)))
700709 }
701710
702711
703-func eL () = {
704- let eM = ((lastBlock.timestamp / 1000) / 60)
705- let eN = (eM - aG)
706- let eO = valueOrElse(getString(this, A), "")
707- let eP = split(eO, ",")
708- func eQ (bf,eR) = if ((eN >= parseIntValue(eR)))
709- then (bf :+ parseIntValue(eR))
712+func eO () = {
713+ let eP = ((lastBlock.timestamp / 1000) / 60)
714+ let eQ = (eP - aG)
715+ let eR = valueOrElse(getString(this, A), "")
716+ let eS = split(eR, ",")
717+ func eT (bf,eU) = if ((eQ >= parseIntValue(eU)))
718+ then (bf :+ parseIntValue(eU))
710719 else bf
711720
712- let eS = {
713- let bi = eP
721+ let eV = {
722+ let bi = eS
714723 let bj = size(bi)
715724 let bk = nil
716725 func bl (bm,bn) = if ((bn >= bj))
717726 then bm
718- else eQ(bm, bi[bn])
727+ else eT(bm, bi[bn])
719728
720729 func bo (bm,bn) = if ((bn >= bj))
721730 then bm
722731 else throw("List size exceeds 20")
723732
724733 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
725734 }
726- let eT = if ((size(eS) > 0))
727- then max(eS)
728- else parseIntValue(eP[0])
729- let eU = valueOrElse(getInteger(this, B), 0)
730- let eV = valueOrElse(getInteger(this, ((C + "_") + toString(eU))), 0)
731- let eW = valueOrElse(getInteger(this, ((D + "_") + toString(eU))), 0)
732- let eX = (eV + ((eM - eU) * eW))
733- let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eT))), 0)
734- let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eT))), 0)
735- let fa = (eY + ((eN - eT) * eZ))
736- ((eX - fa) / aG)
737- }
738-
739-
740-func fb () = {
735+ let eW = if ((size(eV) > 0))
736+ then max(eV)
737+ else parseIntValue(eS[0])
738+ let eX = valueOrElse(getInteger(this, B), 0)
739+ let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eX))), 0)
740+ let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eX))), 0)
741+ let fa = (eY + ((eP - eX) * eZ))
742+ let fb = valueOrElse(getInteger(this, ((C + "_") + toString(eW))), 0)
743+ let fc = valueOrElse(getInteger(this, ((D + "_") + toString(eW))), 0)
744+ let fd = (fb + ((eQ - eW) * fc))
745+ ((fa - fd) / aG)
746+ }
747+
748+
749+func fe () = {
741750 let cn = bJ()
742751 if ((cn == 0))
743752 then $Tuple2(bF(), bG())
744753 else {
745- let fc = (cn > 0)
746- let fd = dy(fc, ba(cn), false)
747- let fe = fd._1
748- let ff = fd._2
749- let fg = fd._3
750- $Tuple2(ff, fg)
751- }
752- }
753-
754-
755-func fh (fi,bJ,fj,fk) = {
756- let fl = toBigInt(fi)
757- let fm = toBigInt(bJ)
758- let fn = toBigInt(fj)
759- let fo = toBigInt(fk)
760- let fp = aZ((fl + fm), toBigInt((2 * aK)))
761- let fq = aX(fn, fp)
762- let fr = (toBigInt(4) * aX(fo, fm))
763- let fs = aY(aX(fq, (fn - fr)))
764- let ft = aX(fl, fn)
765- let fu = aX(fn, fm)
766- let fv = ((-(fs) + ft) + fu)
767- let fw = (toBigInt(2) * aX(fn, fm))
768- let fx = aW(fv, fw)
769- toInt(fx)
770- }
771-
772-
773-func fy (fz) = {
754+ let ff = (cn > 0)
755+ let fg = dy(ff, ba(cn), false)
756+ let fh = fg._1
757+ let fi = fg._2
758+ let fj = fg._3
759+ $Tuple2(fi, fj)
760+ }
761+ }
762+
763+
764+func fk (fl,bJ,fm,fn) = {
765+ let fo = toBigInt(fl)
766+ let fp = toBigInt(bJ)
767+ let fq = toBigInt(fm)
768+ let fr = toBigInt(fn)
769+ let fs = aZ((fo + fp), toBigInt((2 * aK)))
770+ let ft = aX(fq, fs)
771+ let fu = (toBigInt(4) * aX(fr, fp))
772+ let fv = aY(aX(ft, (fq - fu)))
773+ let fw = aX(fo, fq)
774+ let fx = aX(fq, fp)
775+ let fy = ((-(fv) + fw) + fx)
776+ let fz = (toBigInt(2) * aX(fq, fp))
777+ let fA = aW(fy, fz)
778+ toInt(fA)
779+ }
780+
781+
782+func fB (fC,cH,cJ) = {
774783 let cn = bJ()
775784 if ((cn == 0))
776785 then {
777- let cH = bF()
778- let cJ = bG()
779- let fA = aR(aT(fz, cJ), cH)
780- $Tuple3(fA, aK, 0)
786+ let fD = aR(aT(fC, cJ), cH)
787+ $Tuple3(fD, aK, 0)
781788 }
782789 else {
783- let fc = (cn > 0)
784- let fe = dy(fc, ba(cn), false)._1
785- let cH = bF()
786- let cJ = bG()
787- let fA = fh(cJ, cn, cH, fz)
788- let fB = aK
789- let eF = ec(cn, fe, cH, fA, cJ, fB, aN)._2
790- $Tuple3(fA, fB, eF)
791- }
792- }
793-
794-
795-func fC () = {
796- let fD = dz()
797- let fE = eL()
798- let fF = (fE - fD)
790+ let ff = (cn > 0)
791+ let fh = dy(ff, ba(cn), false)._1
792+ let fD = fk(cJ, cn, cH, fC)
793+ let fE = aK
794+ let eI = ef(cn, fh, cH, fD, cJ, fE, aN)._2
795+ $Tuple3(fD, fE, eI)
796+ }
797+ }
798+
799+
800+func fF () = {
801+ let fG = dz()
802+ let fH = eO()
803+ let fI = (fH - fG)
799804 if (if ((ca() == 0))
800805 then true
801806 else (cb() == 0))
802807 then $Tuple2(0, 0)
803- else if ((0 > fF))
808+ else if ((0 > fI))
804809 then {
805- let fG = aR(aT(fF, bP()), aL)
806- let fH = aR(aT(fG, ca()), cb())
807- $Tuple2(fG, fH)
810+ let fJ = aR(aT(fI, bP()), aL)
811+ let fK = aR(aT(fJ, ca()), cb())
812+ $Tuple2(fJ, fK)
808813 }
809814 else {
810- let fH = aR(aT(fF, bP()), aL)
811- let fG = aR(aT(fH, cb()), ca())
812- $Tuple2(fG, fH)
815+ let fK = aR(aT(fI, bP()), aL)
816+ let fJ = aR(aT(fK, cb()), ca())
817+ $Tuple2(fJ, fK)
813818 }
814819 }
815820
816821
817-func fI (fJ,fK) = {
818- let fL = bD()
819- let fM = aT(fL, fK)
820- let fN = if ((fJ != ""))
822+func fL (fM,fN) = {
823+ let fO = bD()
824+ let fP = aT(fO, fN)
825+ let fQ = if ((fM != ""))
821826 then {
822- let fO = bA(av(), ai(aC, fJ))
823- if ((fO == aD))
827+ let fR = bA(av(), ai(aC, fM))
828+ if ((fR == aD))
824829 then {
825- let fP = bB(av(), ai(aB, fJ))
826- let fQ = aT(fM, fP)
827- $Tuple2(fQ, true)
830+ let fS = bB(av(), ai(aB, fM))
831+ let fT = aT(fP, fS)
832+ $Tuple2(fT, true)
828833 }
829834 else throw("Invalid attached artifact")
830835 }
831- else $Tuple2(fM, false)
832- let fQ = fN._1
833- let fR = fN._2
834- $Tuple2(fQ, fR)
835- }
836-
837-
838-func fS (cp,aA) = {
839- let fT = co(cp)._1
840- if ((fT == 0))
836+ else $Tuple2(fP, false)
837+ let fT = fQ._1
838+ let fU = fQ._2
839+ $Tuple2(fT, fU)
840+ }
841+
842+
843+func fV (cp,aA) = {
844+ let fW = co(cp)._1
845+ if ((fW == 0))
841846 then true
842847 else (ct(cp) == aA)
843848 }
844849
845850
846-func fU (cp,aA) = (ct(cp) == aA)
847-
848-
849-func fV (fW,aA,cp) = ((((((ah + "_") + fW) + "_") + aA) + "_") + cp)
850-
851-
852-func fX (cp) = {
851+func fX (cp,aA) = (ct(cp) == aA)
852+
853+
854+func fY (fZ,aA,cp) = ((((((ah + "_") + fZ) + "_") + aA) + "_") + cp)
855+
856+
857+func ga (cp) = {
853858 let cv = ct(cp)
854859 if ((cv == toBase58String(ao())))
855860 then $Tuple2(0, cv)
856861 else {
857- let fY = fV(toString(this), cv, cp)
858- let fZ = valueOrElse(getInteger(aw(), fY), 0)
859- $Tuple2(fZ, cv)
860- }
861- }
862-
863-
864-func ga (cp,fJ) = {
865- let gb = invoke(as(), "computeFeeDiscount", [cp], nil)
866- if ((gb == gb))
862+ let gb = fY(toString(this), cv, cp)
863+ let gc = valueOrElse(getInteger(aw(), gb), 0)
864+ $Tuple2(gc, cv)
865+ }
866+ }
867+
868+
869+func gd (cp,fM) = {
870+ let ge = invoke(as(), "computeFeeDiscount", [cp], nil)
871+ if ((ge == ge))
867872 then {
868- let gc = {
869- let cr = gb
873+ let gf = {
874+ let cr = ge
870875 if ($isInstanceOf(cr, "Int"))
871876 then {
872- let gd = cr
873- gd
877+ let gg = cr
878+ gg
874879 }
875880 else throw("Invalid computeFeeDiscount result")
876881 }
877- let ge = fI(fJ, gc)
878- let fQ = ge._1
879- let fR = ge._2
880- $Tuple2(fQ, fR)
882+ let gh = fL(fM, gf)
883+ let fT = gh._1
884+ let fU = gh._2
885+ $Tuple2(fT, fU)
881886 }
882887 else throw("Strict value is not equal to itself.")
883888 }
884889
885890
886-func gf (cg) = {
887- let gg = if ((size(cg.payments) > 1))
891+func gi (cg) = {
892+ let gj = if ((size(cg.payments) > 1))
888893 then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
889894 else ""
890- gg
891- }
892-
893-
894-func gh (gi) = {
895- let gj = aT(gi, cd())
896- let gk = (gi - gj)
897- $Tuple2(gj, gk)
898- }
899-
900-
901-func gl (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = [IntegerEntry(q, gm), IntegerEntry(r, gn), IntegerEntry(s, go), IntegerEntry(p, gp), IntegerEntry(o, gq), IntegerEntry(u, gr), IntegerEntry(v, gs), IntegerEntry(t, gt), IntegerEntry(w, gu), IntegerEntry(x, dO), IntegerEntry(y, gv), IntegerEntry(z, gv)]
902-
903-
904-func gx (gy,gz,gA,gB,gC) = [IntegerEntry(H, gy), IntegerEntry(F, gz), IntegerEntry(G, gA), IntegerEntry(I, gB), IntegerEntry(J, gC)]
905-
906-
907-func gD (ak,aA) = [StringEntry(ai(k, ak), aA)]
908-
909-
910-func gE (gF,ak) = if (gF)
895+ gj
896+ }
897+
898+
899+func gk (gl) = {
900+ let gm = aT(gl, cd())
901+ let gn = (gl - gm)
902+ $Tuple2(gm, gn)
903+ }
904+
905+
906+func go (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = [IntegerEntry(q, gp), IntegerEntry(r, gq), IntegerEntry(s, gr), IntegerEntry(p, gs), IntegerEntry(o, gt), IntegerEntry(u, gu), IntegerEntry(v, gv), IntegerEntry(t, gw), IntegerEntry(w, gx), IntegerEntry(x, dR), IntegerEntry(y, gy), IntegerEntry(z, gy)]
907+
908+
909+func gA (gB,gC,gD,gE,gF) = [IntegerEntry(H, gB), IntegerEntry(F, gC), IntegerEntry(G, gD), IntegerEntry(I, gE), IntegerEntry(J, gF)]
910+
911+
912+func gG (ak,aA) = [StringEntry(ai(k, ak), aA)]
913+
914+
915+func gH (gI,ak) = if (gI)
911916 then {
912- let gG = cc()
913-[IntegerEntry(ai(j, ak), (gG + 1)), IntegerEntry(e, (gG + 1))]
917+ let gJ = cc()
918+[IntegerEntry(ai(j, ak), (gJ + 1)), IntegerEntry(e, (gJ + 1))]
914919 }
915920 else nil
916921
917922
918-func gH (ak,gI,gJ,gK,dj) = [IntegerEntry(ai(f, ak), gI), IntegerEntry(ai(g, ak), gJ), IntegerEntry(ai(h, ak), gK), IntegerEntry(ai(i, ak), dj)]
919-
920-
921-func gL (gM) = {
922- let eM = ((lastBlock.timestamp / 1000) / 60)
923- let gN = valueOrElse(getInteger(this, B), 0)
924- if ((gN > eM))
923+func gK (ak,gL,gM,gN,dj) = [IntegerEntry(ai(f, ak), gL), IntegerEntry(ai(g, ak), gM), IntegerEntry(ai(h, ak), gN), IntegerEntry(ai(i, ak), dj)]
924+
925+
926+func gO (gP) = {
927+ let eP = ((lastBlock.timestamp / 1000) / 60)
928+ let gQ = valueOrElse(getInteger(this, B), 0)
929+ if ((gQ > eP))
925930 then throw("TWAP out-of-order")
926931 else {
927- let eU = if ((gN == 0))
928- then eM
929- else gN
930- if ((eM > gN))
932+ let eX = if ((gQ == 0))
933+ then eP
934+ else gQ
935+ if ((eP > gQ))
931936 then {
932- let gO = valueOrElse(getInteger(this, ((C + "_") + toString(gN))), 0)
933- let gP = valueOrElse(getInteger(this, ((D + "_") + toString(gN))), gM)
934- let gQ = (gO + ((eM - eU) * gP))
935- let eP = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eM))
936-[IntegerEntry(ai(C, toString(eM)), gQ), IntegerEntry(ai(D, toString(eM)), gM), IntegerEntry(ai(E, toString(eM)), gN), IntegerEntry(B, eM), StringEntry(A, bc(eP))]
937+ let gR = valueOrElse(getInteger(this, ((C + "_") + toString(gQ))), 0)
938+ let gS = valueOrElse(getInteger(this, ((D + "_") + toString(gQ))), gP)
939+ let gT = (gR + ((eP - eX) * gS))
940+ let eS = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eP))
941+[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP), IntegerEntry(ai(E, toString(eP)), gQ), IntegerEntry(B, eP), StringEntry(A, bc(eS))]
937942 }
938943 else {
939- let gR = valueOrElse(getInteger(this, ai(E, toString(eM))), 0)
940- let gO = valueOrElse(getInteger(this, ai(C, toString(gR))), 0)
941- let gP = valueOrElse(getInteger(this, ai(D, toString(gR))), gM)
942- let gQ = (gO + ((eM - gR) * gP))
943-[IntegerEntry(ai(C, toString(eM)), gQ), IntegerEntry(ai(D, toString(eM)), gM)]
944+ let gU = valueOrElse(getInteger(this, ai(E, toString(eP))), 0)
945+ let gR = valueOrElse(getInteger(this, ai(C, toString(gU))), 0)
946+ let gS = valueOrElse(getInteger(this, ai(D, toString(gU))), gP)
947+ let gT = (gR + ((eP - gU) * gS))
948+[IntegerEntry(ai(C, toString(eP)), gT), IntegerEntry(ai(D, toString(eP)), gP)]
944949 }
945950 }
946951 }
947952
948953
949-func gS (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
950-
951-
952-func gT (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
953-
954-
955-func gU (cH,cJ,gV,gW,gX,gY,gZ,ha) = {
954+func gV (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
955+
956+
957+func gW (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
958+
959+
960+func gX (cH,cJ,gY,gZ,ha,hb,hc,hd) = {
956961 let cI = bH()
957962 let cK = bI()
958- if (((gX - gY) != gV))
959- then throw(((((("Invalid AMM state data: " + toString(gX)) + " + ") + toString(gY)) + " != ") + toString(gV)))
960- else ((gS(cH, cJ) ++ [IntegerEntry(O, gV), IntegerEntry(R, gW), IntegerEntry(P, gX), IntegerEntry(Q, gY), IntegerEntry(T, gZ), IntegerEntry(S, ha)]) ++ gL(aR(aT(cH, cI), aT(cJ, cK))))
961- }
962-
963-
964-func hb (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
965-
966-
967-func hc (ak,hd) = {
968- let he = assetBalance(this, ao())
969- if ((hd > he))
970- then throw(((("Unable to withdraw " + toString(hd)) + " from contract balance ") + toString(he)))
971- else [ScriptTransfer(ak, hd, ao())]
972- }
973-
974-
975-func hf (cg) = if ((0 > cg))
963+ if (((ha - hb) != gY))
964+ then throw(((((("Invalid AMM state data: " + toString(ha)) + " + ") + toString(hb)) + " != ") + toString(gY)))
965+ else ((gV(cH, cJ) ++ [IntegerEntry(O, gY), IntegerEntry(R, gZ), IntegerEntry(P, ha), IntegerEntry(Q, hb), IntegerEntry(T, hc), IntegerEntry(S, hd)]) ++ gO(aR(aT(cH, cI), aT(cJ, cK))))
966+ }
967+
968+
969+func he (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
970+
971+
972+func hf (ak,hg) = {
973+ let hh = assetBalance(this, ao())
974+ if ((hg > hh))
975+ then throw(((("Unable to withdraw " + toString(hg)) + " from contract balance ") + toString(hh)))
976+ else [ScriptTransfer(ak, hg, ao())]
977+ }
978+
979+
980+func hi (cg) = if ((0 > cg))
976981 then throw("Balance")
977982 else [IntegerEntry(d, cg)]
978983
979984
980-func hg (cg) = [ScriptTransfer(aq(), cg, ao())]
981-
982-
983-func hh (hi,cg) = if (hi)
985+func hj (cg) = [ScriptTransfer(aq(), cg, ao())]
986+
987+
988+func hk (hl,cg) = if (hl)
984989 then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
985990 else nil
986991
987992
988993 @Callable(cg)
989994 func pause () = if ((cg.caller != am()))
990995 then throw("Invalid pause params")
991996 else [BooleanEntry(m, true)]
992997
993998
994999
9951000 @Callable(cg)
9961001 func unpause () = if ((cg.caller != am()))
9971002 then throw("Invalid unpause params")
9981003 else [BooleanEntry(m, false)]
9991004
10001005
10011006
10021007 @Callable(cg)
10031008 func setCloseOnly () = if ((cg.caller != am()))
10041009 then throw("Invalid setCloseOnly params")
10051010 else [BooleanEntry(n, true)]
10061011
10071012
10081013
10091014 @Callable(cg)
10101015 func unsetCloseOnly () = if ((cg.caller != am()))
10111016 then throw("Invalid unsetCloseOnly params")
10121017 else [BooleanEntry(n, false)]
10131018
10141019
10151020
10161021 @Callable(cg)
10171022 func addLiquidity (cC) = if (if ((cg.caller != am()))
10181023 then true
10191024 else (0 >= cC))
10201025 then throw("Invalid addLiquidity params")
10211026 else {
10221027 let cH = bF()
10231028 let cJ = bG()
10241029 let cI = bH()
10251030 let cK = bI()
1026- let hj = aR(aT(cH, cI), aT(cJ, cK))
1027- let hk = aR(cC, hj)
1028- let hl = (cH + cC)
1029- let hm = (cJ + hk)
1030- gS(hl, hm)
1031+ let hm = aR(aT(cH, cI), aT(cJ, cK))
1032+ let hn = (cH + cC)
1033+ let ho = (aR(aT(hn, cI), hm) - cJ)
1034+ let hp = (cJ + ho)
1035+ let hq = fB(dz(), hn, hp)
1036+ let hr = hq._1
1037+ let hs = hq._2
1038+ let eI = hq._3
1039+ let ht = if ((eI != 0))
1040+ then {
1041+ let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1042+ if ((ht == ht))
1043+ then nil
1044+ else throw("Strict value is not equal to itself.")
1045+ }
1046+ else nil
1047+ if ((ht == ht))
1048+ then (gV(hn, hp) ++ gW(hr, hs))
1049+ else throw("Strict value is not equal to itself.")
10311050 }
10321051
10331052
10341053
10351054 @Callable(cg)
10361055 func removeLiquidity (cC) = if (if ((cg.caller != am()))
10371056 then true
10381057 else (0 >= cC))
10391058 then throw("Invalid removeLiquidity params")
10401059 else {
10411060 let cH = bF()
10421061 let cJ = bG()
10431062 let cI = bH()
10441063 let cK = bI()
1045- let hj = aR(aT(cH, cI), aT(cJ, cK))
1046- let hn = aR(cC, hj)
1047- let hl = (cH - cC)
1048- let hm = (cJ - hn)
1049- gS(hl, hm)
1064+ let hm = aR(aT(cH, cI), aT(cJ, cK))
1065+ let hu = aR(cC, hm)
1066+ let hn = (cH - cC)
1067+ let hp = (cJ - hu)
1068+ gV(hn, hp)
10501069 }
10511070
10521071
10531072
10541073 @Callable(cg)
1055-func changeSettings (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = if ((cg.caller != am()))
1074+func changeSettings (gp,gq,gr,gs,gt,gu,gv,gw,gx,dR,gy,gz) = if ((cg.caller != am()))
10561075 then throw("Invalid changeSettings params")
1057- else gl(gm, gn, go, gp, gq, gr, gs, gt, gu, dO, gv, gw)
1058-
1059-
1060-
1061-@Callable(cg)
1062-func initialize (cH,cJ,gp,gm,gn,go,gq,ho,hp,hq,hr,gr,gs,gt,gu,dO,gv,gw) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
1076+ else go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)
1077+
1078+
1079+
1080+@Callable(cg)
1081+func initialize (cH,cJ,gs,gp,gq,gr,gt,hv,hw,hx,hy,gu,gv,gw,gx,dR,gy,gz) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
10631082 then true
10641083 else (0 >= cJ))
10651084 then true
1085+ else (0 >= gs))
1086+ then true
10661087 else (0 >= gp))
1067- then true
1068- else (0 >= gm))
1069- then true
1070- else (0 >= gn))
1071- then true
1072- else (0 >= go))
10731088 then true
10741089 else (0 >= gq))
10751090 then true
10761091 else (0 >= gr))
10771092 then true
1078- else (0 >= gs))
1079- then true
10801093 else (0 >= gt))
10811094 then true
10821095 else (0 >= gu))
10831096 then true
1084- else (0 >= dO))
1085- then true
10861097 else (0 >= gv))
1087- then true
1088- else (gv > aK))
10891098 then true
10901099 else (0 >= gw))
10911100 then true
1101+ else (0 >= gx))
1102+ then true
1103+ else (0 >= dR))
1104+ then true
1105+ else (0 >= gy))
1106+ then true
1107+ else (gy > aK))
1108+ then true
1109+ else (0 >= gz))
1110+ then true
10921111 else cx())
10931112 then throw("Invalid initialize parameters")
1094- else ((((gU(cH, cJ, 0, 0, 0, 0, 0, 0) ++ gl(gm, gn, go, gp, gq, gr, gs, gt, gu, dO, gv, gw)) ++ gx((lastBlock.timestamp + gp), 0, 0, 0, 0)) ++ hf(0)) ++ [BooleanEntry(l, true), StringEntry(c, ho), StringEntry(a, hp), StringEntry(b, hq), StringEntry(U, hr)])
1095-
1096-
1097-
1098-@Callable(cg)
1099-func decreasePosition (hd,hs,ht) = {
1100- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1101- if ((hu == hu))
1113+ else ((((gX(cH, cJ, 0, 0, 0, 0, 0, 0) ++ go(gp, gq, gr, gs, gt, gu, gv, gw, gx, dR, gy, gz)) ++ gA((lastBlock.timestamp + gs), 0, 0, 0, 0)) ++ hi(0)) ++ [BooleanEntry(l, true), StringEntry(c, hv), StringEntry(a, hw), StringEntry(b, hx), StringEntry(U, hy)])
1114+
1115+
1116+
1117+@Callable(cg)
1118+func decreasePosition (hg,hz,hA) = {
1119+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1120+ if ((hB == hB))
11021121 then {
11031122 let cp = cf(cg)
1104- if (if (if (if (if ((0 >= hd))
1123+ if (if (if (if (if ((0 >= hg))
11051124 then true
11061125 else !(cx()))
11071126 then true
1108- else !(ch(aR(aK, hs), bE(), true)))
1127+ else !(ch(aR(aK, hz), bE(), true)))
11091128 then true
11101129 else !(cw(cp)))
11111130 then true
11121131 else cy())
11131132 then throw("Invalid decreasePosition parameters")
11141133 else {
1115- let hv = co(cp)
1116- let fT = hv._1
1117- let hw = hv._2
1118- let hx = hv._3
1119- let hy = hv._4
1120- let hz = if ((fT > 0))
1134+ let hC = co(cp)
1135+ let fW = hC._1
1136+ let hD = hC._2
1137+ let hE = hC._3
1138+ let hF = hC._4
1139+ let hG = if ((fW > 0))
11211140 then aF
11221141 else aE
1123- let hA = (hz == aE)
1124- let hB = aT(hd, hs)
1125- let hC = ef(cp, aN)
1126- let hD = hC._1
1127- let ee = hC._2
1128- let hE = if ((hD > hB))
1142+ let hH = (hG == aE)
1143+ let hI = aT(hg, hz)
1144+ let hJ = ei(cp, aN)
1145+ let hK = hJ._1
1146+ let eh = hJ._2
1147+ let hL = if ((hK > hI))
11291148 then {
1130- let hF = cP(hA, hB)
1131- let ez = hF._1
1132- let cQ = hF._2
1133- let cR = hF._3
1134- let eH = hF._4
1135- let hG = ba(ez)
1136- if (if ((ht != 0))
1137- then (ht > hG)
1149+ let hM = cP(hH, hI)
1150+ let eC = hM._1
1151+ let cQ = hM._2
1152+ let cR = hM._3
1153+ let eK = hM._4
1154+ let hN = ba(eC)
1155+ if (if ((hA != 0))
1156+ then (hA > hN)
11381157 else false)
1139- then throw(((("Too little base asset exchanged, got " + toString(hG)) + " expected ") + toString(ht)))
1158+ then throw(((("Too little base asset exchanged, got " + toString(hN)) + " expected ") + toString(hA)))
11401159 else {
1141- let eE = aR(aT(ee, hG), ba(fT))
1142- let hH = dd(fT, hw, hy, eE)
1143- let dm = hH._1
1144- let dn = hH._2
1145- let di = hH._3
1146- let eA = hB
1147- let hI = (ee - eE)
1148- let hJ = if ((fT > 0))
1149- then ((hD - eA) - hI)
1150- else ((hI + hD) - eA)
1151- let hK = (fT + ez)
1152- $Tuple12(hK, dm, ba(hJ), cm(hK), cR, cQ, eH, (bK() - hB), (cb() - (if ((hK > 0))
1153- then ba(ez)
1154- else 0)), (ca() - (if ((0 > hK))
1155- then ba(ez)
1156- else 0)), (bM() - (if ((hK > 0))
1157- then hB
1158- else 0)), (bL() - (if ((0 > hK))
1159- then hB
1160+ let eH = aR(aT(eh, hN), ba(fW))
1161+ let hO = dd(fW, hD, hF, eH)
1162+ let dm = hO._1
1163+ let dn = hO._2
1164+ let di = hO._3
1165+ let eD = hI
1166+ let hP = (eh - eH)
1167+ let hQ = if ((fW > 0))
1168+ then ((hK - eD) - hP)
1169+ else ((hP + hK) - eD)
1170+ let hR = (fW + eC)
1171+ $Tuple12(hR, dm, ba(hQ), cm(hR), cR, cQ, eK, (bK() - hI), (cb() - (if ((hR > 0))
1172+ then ba(eC)
1173+ else 0)), (ca() - (if ((0 > hR))
1174+ then ba(eC)
1175+ else 0)), (bM() - (if ((hR > 0))
1176+ then hI
1177+ else 0)), (bL() - (if ((0 > hR))
1178+ then hI
11601179 else 0)))
11611180 }
11621181 }
11631182 else throw("Close position first")
1164- let hK = hE._1
1165- let hL = hE._2
1166- let hM = hE._3
1167- let hN = hE._4
1168- let cR = hE._5
1169- let cQ = hE._6
1170- let eH = hE._7
1171- let eK = hE._8
1172- let eI = hE._9
1173- let eJ = hE._10
1174- let hO = hE._11
1175- let hP = hE._12
1176- let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
1177- if ((hQ == hQ))
1178- then (gH(cp, hK, hL, hM, hN) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP))
1183+ let hR = hL._1
1184+ let hS = hL._2
1185+ let hT = hL._3
1186+ let hU = hL._4
1187+ let cR = hL._5
1188+ let cQ = hL._6
1189+ let eK = hL._7
1190+ let eN = hL._8
1191+ let eL = hL._9
1192+ let eM = hL._10
1193+ let hV = hL._11
1194+ let hW = hL._12
1195+ let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1196+ if ((hX == hX))
1197+ then (gK(cp, hR, hS, hT, hU) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW))
11791198 else throw("Strict value is not equal to itself.")
11801199 }
11811200 }
11821201 else throw("Strict value is not equal to itself.")
11831202 }
11841203
11851204
11861205
11871206 @Callable(cg)
1188-func increasePosition (hz,hs,ht,hR) = {
1189- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1190- if ((hu == hu))
1207+func increasePosition (hG,hz,hA,hY) = {
1208+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1209+ if ((hB == hB))
11911210 then {
11921211 let cp = cf(cg)
1193- let hS = cg.payments[0].amount
1212+ let hZ = cg.payments[0].amount
11941213 let aA = cg.payments[0].assetId
1195- let hT = toBase58String(value(aA))
1196- let hU = (aA == ao())
1197- let hV = az(hT)
1198- if (if (if (if (if (if (if (if (if ((hz != aE))
1199- then (hz != aF)
1214+ let ia = toBase58String(value(aA))
1215+ let ib = (aA == ao())
1216+ let ic = az(ia)
1217+ if (if (if (if (if (if (if (if (if ((hG != aE))
1218+ then (hG != aF)
12001219 else false)
12011220 then true
1202- else (0 >= hS))
1221+ else (0 >= hZ))
12031222 then true
12041223 else !(cx()))
12051224 then true
1206- else if (!(hU))
1207- then !(hV)
1225+ else if (!(ib))
1226+ then !(ic)
12081227 else false)
12091228 then true
1210- else !(fS(cp, hT)))
1211- then true
1212- else !(ch(aR(aK, hs), bE(), true)))
1229+ else !(fV(cp, ia)))
1230+ then true
1231+ else !(ch(aR(aK, hz), bE(), true)))
12131232 then true
12141233 else cy())
12151234 then true
12161235 else cz())
12171236 then throw("Invalid increasePosition parameters")
12181237 else {
1219- let hW = ga(cp, gf(cg))
1220- let fQ = hW._1
1221- let fR = hW._2
1222- let hX = aT(hS, fQ)
1223- let hd = (hS - hX)
1224- let hY = if (hV)
1238+ let id = gd(cp, gi(cg))
1239+ let fT = id._1
1240+ let fU = id._2
1241+ let ie = aT(hZ, fT)
1242+ let hg = (hZ - ie)
1243+ let if = if (ic)
12251244 then {
1226- let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1227- if ((hZ == hZ))
1245+ let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1246+ if ((ig == ig))
12281247 then {
1229- let ia = assetBalance(this, ao())
1230- if ((ia == ia))
1248+ let ih = assetBalance(this, ao())
1249+ if ((ih == ih))
12311250 then {
1232- let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1233- if ((ib == ib))
1251+ let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1252+ if ((ii == ii))
12341253 then {
1235- let ic = assetBalance(this, ao())
1236- if ((ic == ic))
1254+ let ij = assetBalance(this, ao())
1255+ if ((ij == ij))
12371256 then {
1238- let id = (ic - ia)
1239- if ((id == id))
1240- then id
1257+ let ik = (ij - ih)
1258+ if ((ik == ik))
1259+ then ik
12411260 else throw("Strict value is not equal to itself.")
12421261 }
12431262 else throw("Strict value is not equal to itself.")
12441263 }
12451264 else throw("Strict value is not equal to itself.")
12461265 }
12471266 else throw("Strict value is not equal to itself.")
12481267 }
12491268 else throw("Strict value is not equal to itself.")
12501269 }
1251- else hX
1252- if ((hY == hY))
1270+ else ie
1271+ if ((if == if))
12531272 then {
1254- let ie = invoke(au(), "acceptPaymentWithLink", [cp, hR], [AttachedPayment(ao(), hY)])
1255- if ((ie == ie))
1273+ let il = invoke(au(), "acceptPaymentWithLink", [cp, hY], [AttachedPayment(ao(), if)])
1274+ if ((il == il))
12561275 then {
1257- let if = {
1258- let cr = ie
1276+ let im = {
1277+ let cr = il
12591278 if ($isInstanceOf(cr, "Int"))
12601279 then {
1261- let gd = cr
1262- gd
1280+ let gg = cr
1281+ gg
12631282 }
12641283 else throw("Invalid referrerFee")
12651284 }
1266- let ig = (hY - if)
1267- let ih = co(cp)
1268- let fT = ih._1
1269- let hw = ih._2
1270- let hx = ih._3
1271- let hy = ih._4
1272- let gF = (fT == 0)
1273- let ii = if ((fT > 0))
1274- then (hz == aE)
1275- else (hz == aF)
1276- let ij = if (!(gF))
1277- then ii
1285+ let in = (if - im)
1286+ let io = co(cp)
1287+ let fW = io._1
1288+ let hD = io._2
1289+ let hE = io._3
1290+ let hF = io._4
1291+ let gI = (fW == 0)
1292+ let ip = if ((fW > 0))
1293+ then (hG == aE)
1294+ else (hG == aF)
1295+ let iq = if (!(gI))
1296+ then ip
12781297 else false
1279- let hA = (hz == aE)
1280- let ik = if (if (gF)
1298+ let hH = (hG == aE)
1299+ let ir = if (if (gI)
12811300 then true
1282- else ij)
1301+ else iq)
12831302 then {
1284- let hB = aT(hd, hs)
1285- let il = cP(hA, hB)
1286- let cT = il._1
1287- let cQ = il._2
1288- let cR = il._3
1289- let eH = il._4
1290- if (if ((ht != 0))
1291- then (ht > ba(cT))
1303+ let hI = aT(hg, hz)
1304+ let is = cP(hH, hI)
1305+ let cT = is._1
1306+ let cQ = is._2
1307+ let cR = is._3
1308+ let eK = is._4
1309+ if (if ((hA != 0))
1310+ then (hA > ba(cT))
12921311 else false)
1293- then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(ht)))
1312+ then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(hA)))
12941313 else {
1295- let hK = (fT + cT)
1296- let hO = (bM() + (if ((hK > 0))
1297- then hB
1314+ let hR = (fW + cT)
1315+ let hV = (bM() + (if ((hR > 0))
1316+ then hI
12981317 else 0))
1299- let hP = (bL() + (if ((0 > hK))
1300- then hB
1318+ let hW = (bL() + (if ((0 > hR))
1319+ then hI
13011320 else 0))
1302- let im = aR(hB, hs)
1303- let in = dd(fT, hw, hy, im)
1304- let dm = in._1
1305- let dZ = in._2
1306- let ea = in._3
1307- if (!(dG(cQ, cR)))
1321+ let it = aR(hI, hz)
1322+ let iu = dd(fW, hD, hF, it)
1323+ let dm = iu._1
1324+ let ec = iu._2
1325+ let ed = iu._3
1326+ if (!(dK(cQ, cR)))
13081327 then throw("Over max spread limit")
1309- else if (!(dL(hO, hP)))
1328+ else if (!(dO(hV, hW)))
13101329 then throw("Over max open notional")
1311- else $Tuple12(hK, dm, (hx + hB), cm(hK), cR, cQ, eH, (bK() + hB), (cb() + (if ((hK > 0))
1330+ else $Tuple12(hR, dm, (hE + hI), cm(hR), cR, cQ, eK, (bK() + hI), (cb() + (if ((hR > 0))
13121331 then ba(cT)
1313- else 0)), (ca() + (if ((0 > hK))
1332+ else 0)), (ca() + (if ((0 > hR))
13141333 then ba(cT)
1315- else 0)), hO, hP)
1334+ else 0)), hV, hW)
13161335 }
13171336 }
13181337 else {
1319- let hB = aT(hd, hs)
1320- let io = ef(toString(cg.caller), aN)
1321- let hD = io._1
1322- let ee = io._2
1323- if ((hD > hB))
1338+ let hI = aT(hg, hz)
1339+ let iv = ei(toString(cg.caller), aN)
1340+ let hK = iv._1
1341+ let eh = iv._2
1342+ if ((hK > hI))
13241343 then throw("Use decreasePosition to decrease position size")
13251344 else throw("Close position first")
13261345 }
1327- let hK = ik._1
1328- let hL = ik._2
1329- let hM = ik._3
1330- let hN = ik._4
1331- let cR = ik._5
1332- let cQ = ik._6
1333- let eH = ik._7
1334- let eK = ik._8
1335- let eI = ik._9
1336- let eJ = ik._10
1337- let hO = ik._11
1338- let hP = ik._12
1339- let ip = gh(ig)
1340- let gj = ip._1
1341- let gk = ip._2
1342- let iq = if (hU)
1346+ let hR = ir._1
1347+ let hS = ir._2
1348+ let hT = ir._3
1349+ let hU = ir._4
1350+ let cR = ir._5
1351+ let cQ = ir._6
1352+ let eK = ir._7
1353+ let eN = ir._8
1354+ let eL = ir._9
1355+ let eM = ir._10
1356+ let hV = ir._11
1357+ let hW = ir._12
1358+ let iw = gk(in)
1359+ let gm = iw._1
1360+ let gn = iw._2
1361+ let ix = if (ib)
13431362 then {
1344- let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1345- if ((iq == iq))
1363+ let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1364+ if ((ix == ix))
13461365 then nil
13471366 else throw("Strict value is not equal to itself.")
13481367 }
13491368 else nil
1350- if ((iq == iq))
1369+ if ((ix == ix))
13511370 then {
1352- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1353- if ((ir == ir))
1371+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1372+ if ((iy == iy))
13541373 then {
1355- let is = invoke(as(), "notifyFees", [cp, ig], nil)
1356- if ((is == is))
1374+ let iz = invoke(as(), "notifyFees", [cp, in], nil)
1375+ if ((iz == iz))
13571376 then {
1358- let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
1359- if ((hQ == hQ))
1360- then ((((((gH(cp, hK, hL, hM, hN) ++ gE(gF, cp)) ++ gD(cp, hT)) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ hg(gj)) ++ hf((bC() + hd))) ++ hh(fR, cg))
1377+ let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1378+ if ((hX == hX))
1379+ then ((((((gK(cp, hR, hS, hT, hU) ++ gH(gI, cp)) ++ gG(cp, ia)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
13611380 else throw("Strict value is not equal to itself.")
13621381 }
13631382 else throw("Strict value is not equal to itself.")
13641383 }
13651384 else throw("Strict value is not equal to itself.")
13661385 }
13671386 else throw("Strict value is not equal to itself.")
13681387 }
13691388 else throw("Strict value is not equal to itself.")
13701389 }
13711390 else throw("Strict value is not equal to itself.")
13721391 }
13731392 }
13741393 else throw("Strict value is not equal to itself.")
13751394 }
13761395
13771396
13781397
13791398 @Callable(cg)
13801399 func addMargin () = {
1381- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1382- if ((hu == hu))
1400+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1401+ if ((hB == hB))
13831402 then {
13841403 let cp = toString(cg.caller)
1385- let hS = cg.payments[0].amount
1404+ let hZ = cg.payments[0].amount
13861405 let aA = cg.payments[0].assetId
1387- let hT = toBase58String(value(aA))
1388- let hU = (aA == ao())
1389- let hV = az(hT)
1390- if (if (if (if (if (if (if (!(hU))
1391- then !(hV)
1406+ let ia = toBase58String(value(aA))
1407+ let ib = (aA == ao())
1408+ let ic = az(ia)
1409+ if (if (if (if (if (if (if (!(ib))
1410+ then !(ic)
13921411 else false)
13931412 then true
13941413 else !(cw(toString(cg.caller))))
13951414 then true
1396- else !(fU(cp, hT)))
1415+ else !(fX(cp, ia)))
13971416 then true
13981417 else !(cx()))
13991418 then true
14001419 else cy())
14011420 then true
14021421 else cz())
14031422 then throw("Invalid addMargin parameters")
14041423 else {
1405- let it = ga(cp, gf(cg))
1406- let fQ = it._1
1407- let fR = it._2
1408- let hX = aT(hS, fQ)
1409- let hd = (hS - hX)
1410- let hY = if (hV)
1424+ let iA = gd(cp, gi(cg))
1425+ let fT = iA._1
1426+ let fU = iA._2
1427+ let ie = aT(hZ, fT)
1428+ let hg = (hZ - ie)
1429+ let if = if (ic)
14111430 then {
1412- let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1413- if ((hZ == hZ))
1431+ let ig = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hg)])
1432+ if ((ig == ig))
14141433 then {
1415- let ia = assetBalance(this, ao())
1416- if ((ia == ia))
1434+ let ih = assetBalance(this, ao())
1435+ if ((ih == ih))
14171436 then {
1418- let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1419- if ((ib == ib))
1437+ let ii = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, ie)])
1438+ if ((ii == ii))
14201439 then {
1421- let ic = assetBalance(this, ao())
1422- if ((ic == ic))
1440+ let ij = assetBalance(this, ao())
1441+ if ((ij == ij))
14231442 then {
1424- let id = (ic - ia)
1425- if ((id == id))
1426- then id
1443+ let ik = (ij - ih)
1444+ if ((ik == ik))
1445+ then ik
14271446 else throw("Strict value is not equal to itself.")
14281447 }
14291448 else throw("Strict value is not equal to itself.")
14301449 }
14311450 else throw("Strict value is not equal to itself.")
14321451 }
14331452 else throw("Strict value is not equal to itself.")
14341453 }
14351454 else throw("Strict value is not equal to itself.")
14361455 }
1437- else hX
1438- if ((hY == hY))
1456+ else ie
1457+ if ((if == if))
14391458 then {
1440- let ie = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), hY)])
1441- if ((ie == ie))
1459+ let il = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), if)])
1460+ if ((il == il))
14421461 then {
1443- let if = {
1444- let cr = ie
1462+ let im = {
1463+ let cr = il
14451464 if ($isInstanceOf(cr, "Int"))
14461465 then {
1447- let gd = cr
1448- gd
1466+ let gg = cr
1467+ gg
14491468 }
14501469 else throw("Invalid referrerFee")
14511470 }
1452- let ig = (hY - if)
1453- let iu = co(cp)
1454- let fT = iu._1
1455- let hw = iu._2
1456- let hx = iu._3
1457- let hy = iu._4
1458- let iv = gh(ig)
1459- let gj = iv._1
1460- let gk = iv._2
1461- let iq = if (hU)
1471+ let in = (if - im)
1472+ let iB = co(cp)
1473+ let fW = iB._1
1474+ let hD = iB._2
1475+ let hE = iB._3
1476+ let hF = iB._4
1477+ let iC = gk(in)
1478+ let gm = iC._1
1479+ let gn = iC._2
1480+ let ix = if (ib)
14621481 then {
1463- let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1464- if ((iq == iq))
1482+ let ix = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hg)])
1483+ if ((ix == ix))
14651484 then nil
14661485 else throw("Strict value is not equal to itself.")
14671486 }
14681487 else nil
1469- if ((iq == iq))
1488+ if ((ix == ix))
14701489 then {
1471- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1472- if ((ir == ir))
1490+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1491+ if ((iy == iy))
14731492 then {
1474- let is = invoke(as(), "notifyFees", [cp, ig], nil)
1475- if ((is == is))
1476- then (((gH(cp, fT, (hw + hd), hx, hy) ++ hg(gj)) ++ hf((bC() + hd))) ++ hh(fR, cg))
1493+ let iz = invoke(as(), "notifyFees", [cp, in], nil)
1494+ if ((iz == iz))
1495+ then (((gK(cp, fW, (hD + hg), hE, hF) ++ hj(gm)) ++ hi((bC() + hg))) ++ hk(fU, cg))
14771496 else throw("Strict value is not equal to itself.")
14781497 }
14791498 else throw("Strict value is not equal to itself.")
14801499 }
14811500 else throw("Strict value is not equal to itself.")
14821501 }
14831502 else throw("Strict value is not equal to itself.")
14841503 }
14851504 else throw("Strict value is not equal to itself.")
14861505 }
14871506 }
14881507 else throw("Strict value is not equal to itself.")
14891508 }
14901509
14911510
14921511
14931512 @Callable(cg)
1494-func removeMargin (hd) = {
1495- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1496- if ((hu == hu))
1513+func removeMargin (hg) = {
1514+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1515+ if ((hB == hB))
14971516 then {
14981517 let cp = toString(cg.caller)
1499- if (if (if (if ((0 >= hd))
1518+ if (if (if (if ((0 >= hg))
15001519 then true
15011520 else !(cw(cp)))
15021521 then true
15031522 else !(cx()))
15041523 then true
15051524 else cy())
15061525 then throw("Invalid removeMargin parameters")
15071526 else {
1508- let iw = co(cp)
1509- let fT = iw._1
1510- let hw = iw._2
1511- let hx = iw._3
1512- let hy = iw._4
1513- let ix = -(hd)
1514- let iy = dd(fT, hw, hy, ix)
1515- let dm = iy._1
1516- let dn = iy._2
1527+ let iD = co(cp)
1528+ let fW = iD._1
1529+ let hD = iD._2
1530+ let hE = iD._3
1531+ let hF = iD._4
1532+ let iE = -(hg)
1533+ let iF = dd(fW, hD, hF, iE)
1534+ let dm = iF._1
1535+ let dn = iF._2
15171536 if ((dn != 0))
15181537 then throw("Invalid removed margin amount")
15191538 else {
1520- let iz = ek(dm, dn, hx)
1521- if (!(ch(iz, bE(), true)))
1522- then throw(((("Too much margin removed: " + toString(iz)) + " < ") + toString(bE())))
1539+ let iG = en(dm, dn, hE)
1540+ if (!(ch(iG, bE(), true)))
1541+ then throw(((("Too much margin removed: " + toString(iG)) + " < ") + toString(bE())))
15231542 else {
1524- let iA = toBase58String(ao())
1525- let iB = fX(cp)
1526- let iC = iB._1
1527- let iD = iB._2
1528- let iE = if ((hd > iC))
1529- then iC
1530- else hd
1531- let iF = if ((iC > hd))
1543+ let iH = toBase58String(ao())
1544+ let iI = ga(cp)
1545+ let iJ = iI._1
1546+ let iK = iI._2
1547+ let iL = if ((hg > iJ))
1548+ then iJ
1549+ else hg
1550+ let iM = if ((iJ > hg))
15321551 then 0
1533- else (hd - iC)
1534- let iG = (iC - iE)
1535- let iH = if ((iG > 0))
1552+ else (hg - iJ)
1553+ let iN = (iJ - iL)
1554+ let iO = if ((iN > 0))
15361555 then nil
1537- else gD(cp, iA)
1538- let iI = if (((iE + iF) != hd))
1539- then throw(((((("toRepay=" + toString(iE)) + " + toWithdraw=") + toString(iF)) + " != ") + toString(hd)))
1556+ else gG(cp, iH)
1557+ let iP = if (((iL + iM) != hg))
1558+ then throw(((((("toRepay=" + toString(iL)) + " + toWithdraw=") + toString(iM)) + " != ") + toString(hg)))
15401559 else nil
1541- if ((iI == iI))
1560+ if ((iP == iP))
15421561 then {
1543- let iJ = if ((iF > 0))
1562+ let iQ = if ((iM > 0))
15441563 then {
1545- let iJ = invoke(ar(), "withdrawLocked", [iF], nil)
1546- if ((iJ == iJ))
1564+ let iQ = invoke(ar(), "withdrawLocked", [iM], nil)
1565+ if ((iQ == iQ))
15471566 then nil
15481567 else throw("Strict value is not equal to itself.")
15491568 }
15501569 else nil
1551- if ((iJ == iJ))
1570+ if ((iQ == iQ))
15521571 then {
1553- let iK = if ((iE > 0))
1572+ let iR = if ((iL > 0))
15541573 then {
1555- let iL = invoke(aw(), "repay", [cp, iE, iD], nil)
1556- if ((iL == iL))
1557- then [ScriptTransfer(cg.caller, iE, fromBase58String(iD))]
1574+ let iS = invoke(aw(), "repay", [cp, iL, iK], nil)
1575+ if ((iS == iS))
1576+ then [ScriptTransfer(cg.caller, iL, fromBase58String(iK))]
15581577 else throw("Strict value is not equal to itself.")
15591578 }
15601579 else nil
1561- if ((iK == iK))
1562- then ((((gH(cp, fT, dm, hx, cm(fT)) ++ (if ((iF > 0))
1563- then hc(cg.caller, iF)
1564- else nil)) ++ hf((bC() - hd))) ++ iH) ++ iK)
1580+ if ((iR == iR))
1581+ then ((((gK(cp, fW, dm, hE, cm(fW)) ++ (if ((iM > 0))
1582+ then hf(cg.caller, iM)
1583+ else nil)) ++ hi((bC() - hg))) ++ iO) ++ iR)
15651584 else throw("Strict value is not equal to itself.")
15661585 }
15671586 else throw("Strict value is not equal to itself.")
15681587 }
15691588 else throw("Strict value is not equal to itself.")
15701589 }
15711590 }
15721591 }
15731592 }
15741593 else throw("Strict value is not equal to itself.")
15751594 }
15761595
15771596
15781597
15791598 @Callable(cg)
1580-func closePosition (gI,iM) = {
1581- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1582- if ((hu == hu))
1599+func closePosition (gL,iT) = {
1600+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1601+ if ((hB == hB))
15831602 then {
15841603 let cp = cf(cg)
1585- let iN = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
1604+ let iU = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
15861605 if (if (if (if (if (!(cw(cp)))
15871606 then true
15881607 else !(cx()))
15891608 then true
15901609 else cy())
15911610 then true
1592- else (0 >= gI))
1593- then true
1594- else (0 > iM))
1611+ else (0 >= gL))
1612+ then true
1613+ else (0 > iT))
15951614 then throw("Invalid closePosition parameters")
15961615 else {
1597- let iO = co(cp)
1598- let fT = iO._1
1599- let hw = iO._2
1600- let hx = iO._3
1601- let hy = iO._4
1602- let iP = if ((ba(fT) > gI))
1616+ let iV = co(cp)
1617+ let fW = iV._1
1618+ let hD = iV._2
1619+ let hE = iV._3
1620+ let hF = iV._4
1621+ let iW = if ((ba(fW) > gL))
16031622 then {
1604- let hz = if ((fT > 0))
1623+ let hG = if ((fW > 0))
16051624 then aF
16061625 else aE
1607- let hA = (hz == aE)
1608- let iQ = dy((fT > 0), gI, true)
1609- let eA = iQ._1
1610- let cQ = iQ._2
1611- let cR = iQ._3
1612- let eH = iQ._4
1613- let ez = if ((fT > 0))
1614- then -(gI)
1615- else gI
1616- let iR = ef(cp, aN)
1617- let hD = iR._1
1618- let ee = iR._2
1619- let iS = eo(cp, aN)
1620- let iT = aR(ba(ez), ba(fT))
1621- let eE = aT(ee, iT)
1622- let iU = dd(fT, hw, hy, eE)
1623- let dm = iU._1
1624- let iV = iU._2
1625- let di = iU._3
1626- let hI = (ee - eE)
1627- let hJ = if ((fT > 0))
1628- then ((hD - eA) - hI)
1629- else ((hI + hD) - eA)
1630- let hM = ba(hJ)
1631- let iW = aT(hM, iS)
1632- let hK = (fT + ez)
1633- let iX = cm(hK)
1634- let eK = (bK() - eA)
1635- if (if ((iM != 0))
1636- then (iM > eA)
1626+ let hH = (hG == aE)
1627+ let iX = dy((fW > 0), gL, true)
1628+ let eD = iX._1
1629+ let cQ = iX._2
1630+ let cR = iX._3
1631+ let eK = iX._4
1632+ let eC = if ((fW > 0))
1633+ then -(gL)
1634+ else gL
1635+ let iY = ei(cp, aN)
1636+ let hK = iY._1
1637+ let eh = iY._2
1638+ let iZ = er(cp, aN)
1639+ let ja = aR(ba(eC), ba(fW))
1640+ let eH = aT(eh, ja)
1641+ let jb = dd(fW, hD, hF, eH)
1642+ let dm = jb._1
1643+ let jc = jb._2
1644+ let di = jb._3
1645+ let hP = (eh - eH)
1646+ let hQ = if ((fW > 0))
1647+ then ((hK - eD) - hP)
1648+ else ((hP + hK) - eD)
1649+ let hT = ba(hQ)
1650+ let jd = aT(hT, iZ)
1651+ let hR = (fW + eC)
1652+ let je = cm(hR)
1653+ let eN = (bK() - eD)
1654+ if (if ((iT != 0))
1655+ then (iT > eD)
16371656 else false)
1638- then throw(((("Limit error: " + toString(eA)) + " < ") + toString(iM)))
1639- else $Tuple15(hK, iW, hM, iX, iV, eE, (ba((dm - iW)) + eE), cQ, cR, eH, eK, (cb() - (if ((hK > 0))
1640- then ba(ez)
1641- else 0)), (ca() - (if ((0 > hK))
1642- then ba(ez)
1643- else 0)), (bM() - (if ((hK > 0))
1644- then eA
1645- else 0)), (bL() - (if ((0 > hK))
1646- then eA
1657+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1658+ else $Tuple15(hR, jd, hT, je, jc, eH, (ba((dm - jd)) + eH), cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1659+ then ba(eC)
1660+ else 0)), (ca() - (if ((0 > hR))
1661+ then ba(eC)
1662+ else 0)), (bM() - (if ((hR > 0))
1663+ then eD
1664+ else 0)), (bL() - (if ((0 > hR))
1665+ then eD
16471666 else 0)))
16481667 }
1649- else if ((gI > ba(fT)))
1668+ else if ((gL > ba(fW)))
16501669 then throw("Invalid closePosition parameters")
16511670 else {
1652- let iY = eB(cp, true)
1653- let eA = iY._1
1654- let iV = iY._2
1655- let eE = iY._3
1656- let eF = iY._4
1657- let cQ = iY._5
1658- let cR = iY._6
1659- let eH = iY._7
1660- let eK = iY._8
1661- let ea = iY._9
1662- let eI = iY._10
1663- let eJ = iY._11
1664- let hO = iY._12
1665- let hP = iY._13
1666- if (if ((iM != 0))
1667- then (iM > eA)
1671+ let jf = eE(cp, true)
1672+ let eD = jf._1
1673+ let jc = jf._2
1674+ let eH = jf._3
1675+ let eI = jf._4
1676+ let cQ = jf._5
1677+ let cR = jf._6
1678+ let eK = jf._7
1679+ let eN = jf._8
1680+ let ed = jf._9
1681+ let eL = jf._10
1682+ let eM = jf._11
1683+ let hV = jf._12
1684+ let hW = jf._13
1685+ if (if ((iT != 0))
1686+ then (iT > eD)
16681687 else false)
1669- then throw(((("Limit error: " + toString(eA)) + " < ") + toString(iM)))
1670- else $Tuple15(0, 0, 0, 0, iV, eE, eF, cQ, cR, eH, eK, eI, eJ, hO, hP)
1688+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(iT)))
1689+ else $Tuple15(0, 0, 0, 0, jc, eH, eI, cQ, cR, eK, eN, eL, eM, hV, hW)
16711690 }
1672- let hK = iP._1
1673- let iW = iP._2
1674- let hM = iP._3
1675- let iX = iP._4
1676- let iV = iP._5
1677- let eE = iP._6
1678- let eF = iP._7
1679- let cQ = iP._8
1680- let cR = iP._9
1681- let eH = iP._10
1682- let eK = iP._11
1683- let eI = iP._12
1684- let eJ = iP._13
1685- let hO = iP._14
1686- let hP = iP._15
1687- if ((iV > 0))
1691+ let hR = iW._1
1692+ let jd = iW._2
1693+ let hT = iW._3
1694+ let je = iW._4
1695+ let jc = iW._5
1696+ let eH = iW._6
1697+ let eI = iW._7
1698+ let cQ = iW._8
1699+ let cR = iW._9
1700+ let eK = iW._10
1701+ let eN = iW._11
1702+ let eL = iW._12
1703+ let eM = iW._13
1704+ let hV = iW._14
1705+ let hW = iW._15
1706+ if ((jc > 0))
16881707 then throw("Unable to close position with bad debt")
16891708 else {
1690- let iZ = ba(eF)
1691- let ja = (bC() - iZ)
1692- let jb = if ((0 > ja))
1693- then $Tuple2(0, ba(ja))
1694- else $Tuple2(ja, 0)
1695- let jc = jb._1
1696- let jd = jb._2
1697- let je = fX(cp)
1698- let iC = je._1
1699- let iD = je._2
1700- let jf = if ((iC > 0))
1701- then if ((iZ >= iC))
1709+ let jg = ba(eI)
1710+ let jh = (bC() - jg)
1711+ let ji = if ((0 > jh))
1712+ then $Tuple2(0, ba(jh))
1713+ else $Tuple2(jh, 0)
1714+ let jj = ji._1
1715+ let jk = ji._2
1716+ let jl = ga(cp)
1717+ let iJ = jl._1
1718+ let iK = jl._2
1719+ let jm = if ((iJ > 0))
1720+ then if ((jg >= iJ))
17021721 then {
1703- let iL = invoke(aw(), "repay", [cp, iC, iD], nil)
1704- if ((iL == iL))
1705- then $Tuple2([ScriptTransfer(iN, iC, fromBase58String(iD))], (iZ - iC))
1722+ let iS = invoke(aw(), "repay", [cp, iJ, iK], nil)
1723+ if ((iS == iS))
1724+ then $Tuple2([ScriptTransfer(iU, iJ, fromBase58String(iK))], (jg - iJ))
17061725 else throw("Strict value is not equal to itself.")
17071726 }
17081727 else {
1709- let jg = invoke(aw(), "realizePartiallyAndClose", [cp, iZ, iD], nil)
1710- if ((jg == jg))
1711- then $Tuple2([ScriptTransfer(iN, iZ, fromBase58String(iD))], 0)
1728+ let jn = invoke(aw(), "realizePartiallyAndClose", [cp, jg, iK], nil)
1729+ if ((jn == jn))
1730+ then $Tuple2([ScriptTransfer(iU, jg, fromBase58String(iK))], 0)
17121731 else throw("Strict value is not equal to itself.")
17131732 }
1714- else $Tuple2(nil, iZ)
1715- if ((jf == jf))
1733+ else $Tuple2(nil, jg)
1734+ if ((jm == jm))
17161735 then {
1717- let jh = jf._2
1718- let ji = jf._1
1719- let jj = if ((jh > 0))
1736+ let jo = jm._2
1737+ let jp = jm._1
1738+ let jq = if ((jo > 0))
17201739 then {
1721- let jj = invoke(ar(), "withdrawLocked", [jh], nil)
1722- if ((jj == jj))
1740+ let jq = invoke(ar(), "withdrawLocked", [jo], nil)
1741+ if ((jq == jq))
17231742 then nil
17241743 else throw("Strict value is not equal to itself.")
17251744 }
17261745 else nil
1727- if ((jj == jj))
1746+ if ((jq == jq))
17281747 then {
1729- let hQ = invoke(as(), "notifyNotional", [cp, 0], nil)
1730- if ((hQ == hQ))
1731- then (((((if ((hK == 0))
1732- then hb(cp)
1733- else gH(cp, hK, iW, hM, iX)) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ (if ((jh > 0))
1734- then hc(iN, jh)
1735- else nil)) ++ hf(jc)) ++ ji)
1748+ let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1749+ if ((hX == hX))
1750+ then (((((if ((hR == 0))
1751+ then he(cp)
1752+ else gK(cp, hR, jd, hT, je)) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ (if ((jo > 0))
1753+ then hf(iU, jo)
1754+ else nil)) ++ hi(jj)) ++ jp)
17361755 else throw("Strict value is not equal to itself.")
17371756 }
17381757 else throw("Strict value is not equal to itself.")
17391758 }
17401759 else throw("Strict value is not equal to itself.")
17411760 }
17421761 }
17431762 }
17441763 else throw("Strict value is not equal to itself.")
17451764 }
17461765
17471766
17481767
17491768 @Callable(cg)
17501769 func liquidate (cp) = {
1751- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1752- if ((hu == hu))
1770+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1771+ if ((hB == hB))
17531772 then {
1754- let jk = eo(cp, aN)
1755- let iz = if (dQ())
1773+ let jr = er(cp, aN)
1774+ let iG = if (dT())
17561775 then {
1757- let jl = eo(cp, aO)
1758- bb(jk, jl)
1776+ let js = er(cp, aO)
1777+ bb(jr, js)
17591778 }
1760- else jk
1761- if (if (if (if (!(ch(iz, bR(), false)))
1779+ else jr
1780+ if (if (if (if (!(ch(iG, bR(), false)))
17621781 then true
17631782 else !(cw(cp)))
17641783 then true
17651784 else !(cx()))
17661785 then true
17671786 else cy())
17681787 then throw("Unable to liquidate")
1769- else if (if (if ((jk > bS()))
1788+ else if (if (if ((jr > bS()))
17701789 then (bT() > 0)
17711790 else false)
17721791 then (aK > bT())
17731792 else false)
17741793 then {
1775- let jm = co(cp)
1776- let fT = jm._1
1777- let hw = jm._2
1778- let hx = jm._3
1779- let hy = jm._4
1780- let hz = if ((fT > 0))
1794+ let jt = co(cp)
1795+ let fW = jt._1
1796+ let hD = jt._2
1797+ let hE = jt._3
1798+ let hF = jt._4
1799+ let hG = if ((fW > 0))
17811800 then aF
17821801 else aE
1783- let hA = (hz == aE)
1784- let eA = eu(cp, fT)
1785- let jn = ef(cp, aN)
1786- let hD = jn._1
1787- let ee = jn._2
1788- let jo = cP(hA, eA)
1789- let ez = jo._1
1790- let cQ = jo._2
1791- let cR = jo._3
1792- let eH = jo._4
1793- let jp = aR(ba(ez), ba(fT))
1794- let eE = aT(ee, jp)
1795- let jq = dd(fT, hw, hy, eE)
1796- let dm = jq._1
1797- let dn = jq._2
1798- let di = jq._3
1799- let hI = (ee - eE)
1800- let hJ = if ((fT > 0))
1801- then ((hD - eA) - hI)
1802- else ((hI + hD) - eA)
1803- let jr = aT(eA, bS())
1804- let js = (jr / 2)
1805- let gk = (jr - js)
1806- let iW = (dm - jr)
1807- let hK = (fT + ez)
1808- let hM = ba(hJ)
1809- let iX = cm(hK)
1810- let eK = (bK() - eA)
1811- let ja = (bC() - jr)
1812- let jt = if ((0 > ja))
1813- then $Tuple2(0, ba(ja))
1814- else $Tuple2(ja, 0)
1815- let ju = jt._1
1816- let jd = jt._2
1817- let jv = fX(cp)
1818- let iC = jv._1
1819- let iD = jv._2
1820- let jw = if ((iC > 0))
1802+ let hH = (hG == aE)
1803+ let eD = ex(cp, fW)
1804+ let ju = ei(cp, aN)
1805+ let hK = ju._1
1806+ let eh = ju._2
1807+ let jv = cP(hH, eD)
1808+ let eC = jv._1
1809+ let cQ = jv._2
1810+ let cR = jv._3
1811+ let eK = jv._4
1812+ let jw = aR(ba(eC), ba(fW))
1813+ let eH = aT(eh, jw)
1814+ let jx = dd(fW, hD, hF, eH)
1815+ let dm = jx._1
1816+ let dn = jx._2
1817+ let di = jx._3
1818+ let hP = (eh - eH)
1819+ let hQ = if ((fW > 0))
1820+ then ((hK - eD) - hP)
1821+ else ((hP + hK) - eD)
1822+ let jy = aT(eD, bS())
1823+ let jz = (jy / 2)
1824+ let gn = (jy - jz)
1825+ let jd = (dm - jy)
1826+ let hR = (fW + eC)
1827+ let hT = ba(hQ)
1828+ let je = cm(hR)
1829+ let eN = (bK() - eD)
1830+ let jh = (bC() - jy)
1831+ let jA = if ((0 > jh))
1832+ then $Tuple2(0, ba(jh))
1833+ else $Tuple2(jh, 0)
1834+ let jB = jA._1
1835+ let jk = jA._2
1836+ let jC = ga(cp)
1837+ let iJ = jC._1
1838+ let iK = jC._2
1839+ let jD = if ((iJ > 0))
18211840 then {
1822- let jx = aT(iC, jp)
1823- let jg = invoke(aw(), "realizePartially", [cp, iD, jx], nil)
1824- if ((jg == jg))
1841+ let jE = aT(iJ, jw)
1842+ let jn = invoke(aw(), "realizePartially", [cp, iK, jE], nil)
1843+ if ((jn == jn))
18251844 then nil
18261845 else throw("Strict value is not equal to itself.")
18271846 }
18281847 else nil
1829- if ((jw == jw))
1848+ if ((jD == jD))
18301849 then {
1831- let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1832- if ((jj == jj))
1850+ let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1851+ if ((jq == jq))
18331852 then {
1834- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1835- if ((ir == ir))
1853+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1854+ if ((iy == iy))
18361855 then {
1837- let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
1838- if ((hQ == hQ))
1839- then (((gH(cp, hK, iW, hM, iX) ++ gU(cQ, cR, eH, eK, (cb() - (if ((hK > 0))
1840- then ba(ez)
1841- else 0)), (ca() - (if ((0 > hK))
1842- then ba(ez)
1843- else 0)), (bM() - (if ((hK > 0))
1844- then eA
1845- else 0)), (bL() - (if ((0 > hK))
1846- then eA
1847- else 0)))) ++ hc(cg.caller, js)) ++ hf(ju))
1856+ let hX = invoke(as(), "notifyNotional", [cp, hT], nil)
1857+ if ((hX == hX))
1858+ then (((gK(cp, hR, jd, hT, je) ++ gX(cQ, cR, eK, eN, (cb() - (if ((hR > 0))
1859+ then ba(eC)
1860+ else 0)), (ca() - (if ((0 > hR))
1861+ then ba(eC)
1862+ else 0)), (bM() - (if ((hR > 0))
1863+ then eD
1864+ else 0)), (bL() - (if ((0 > hR))
1865+ then eD
1866+ else 0)))) ++ hf(cg.caller, jz)) ++ hi(jB))
18481867 else throw("Strict value is not equal to itself.")
18491868 }
18501869 else throw("Strict value is not equal to itself.")
18511870 }
18521871 else throw("Strict value is not equal to itself.")
18531872 }
18541873 else throw("Strict value is not equal to itself.")
18551874 }
18561875 else {
1857- let jy = eB(cp, false)
1858- let dZ = jy._1
1859- let dn = jy._2
1860- let ea = jy._3
1861- let eb = jy._4
1862- let cQ = jy._5
1863- let cR = jy._6
1864- let eH = jy._7
1865- let eK = jy._8
1866- let eA = jy._9
1867- let eI = jy._10
1868- let eJ = jy._11
1869- let hO = jy._12
1870- let hP = jy._13
1871- let jr = aT(eA, bS())
1872- let js = (jr / 2)
1873- let gk = (jr - js)
1874- let ja = (bC() - jr)
1875- let jz = if ((0 > ja))
1876- then $Tuple2(0, ba(ja))
1877- else $Tuple2(ja, 0)
1878- let ju = jz._1
1879- let jd = jz._2
1880- let jA = fX(cp)
1881- let iC = jA._1
1882- let iD = jA._2
1883- let jw = if ((iC > 0))
1876+ let jF = eE(cp, false)
1877+ let ec = jF._1
1878+ let dn = jF._2
1879+ let ed = jF._3
1880+ let ee = jF._4
1881+ let cQ = jF._5
1882+ let cR = jF._6
1883+ let eK = jF._7
1884+ let eN = jF._8
1885+ let eD = jF._9
1886+ let eL = jF._10
1887+ let eM = jF._11
1888+ let hV = jF._12
1889+ let hW = jF._13
1890+ let jy = aT(eD, bS())
1891+ let jz = (jy / 2)
1892+ let gn = (jy - jz)
1893+ let jh = (bC() - jy)
1894+ let jG = if ((0 > jh))
1895+ then $Tuple2(0, ba(jh))
1896+ else $Tuple2(jh, 0)
1897+ let jB = jG._1
1898+ let jk = jG._2
1899+ let jH = ga(cp)
1900+ let iJ = jH._1
1901+ let iK = jH._2
1902+ let jD = if ((iJ > 0))
18841903 then {
1885- let jg = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iD], nil)
1886- if ((jg == jg))
1904+ let jn = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iK], nil)
1905+ if ((jn == jn))
18871906 then nil
18881907 else throw("Strict value is not equal to itself.")
18891908 }
18901909 else nil
1891- if ((jw == jw))
1910+ if ((jD == jD))
18921911 then {
1893- let gd = if ((dn > 0))
1912+ let gg = if ((dn > 0))
18941913 then {
1895- let jB = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1896- if ((jB == jB))
1914+ let jI = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1915+ if ((jI == jI))
18971916 then nil
18981917 else throw("Strict value is not equal to itself.")
18991918 }
19001919 else nil
1901- if ((gd == gd))
1920+ if ((gg == gg))
19021921 then {
1903- let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1904- if ((jj == jj))
1922+ let jq = invoke(ar(), "withdrawLocked", [jy], nil)
1923+ if ((jq == jq))
19051924 then {
1906- let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1907- if ((ir == ir))
1925+ let iy = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gn)])
1926+ if ((iy == iy))
19081927 then {
1909- let hQ = invoke(as(), "notifyNotional", [cp, 0], nil)
1910- if ((hQ == hQ))
1911- then (((hb(cp) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ hc(cg.caller, js)) ++ hf(ju))
1928+ let hX = invoke(as(), "notifyNotional", [cp, 0], nil)
1929+ if ((hX == hX))
1930+ then (((he(cp) ++ gX(cQ, cR, eK, eN, eL, eM, hV, hW)) ++ hf(cg.caller, jz)) ++ hi(jB))
19121931 else throw("Strict value is not equal to itself.")
19131932 }
19141933 else throw("Strict value is not equal to itself.")
19151934 }
19161935 else throw("Strict value is not equal to itself.")
19171936 }
19181937 else throw("Strict value is not equal to itself.")
19191938 }
19201939 else throw("Strict value is not equal to itself.")
19211940 }
19221941 }
19231942 else throw("Strict value is not equal to itself.")
19241943 }
19251944
19261945
19271946
19281947 @Callable(cg)
19291948 func payFunding () = {
1930- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1931- if ((hu == hu))
1949+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1950+ if ((hB == hB))
19321951 then {
1933- let jC = bN()
1934- if (if (if ((jC > lastBlock.timestamp))
1952+ let jJ = bN()
1953+ if (if (if ((jJ > lastBlock.timestamp))
19351954 then true
19361955 else !(cx()))
19371956 then true
19381957 else cy())
1939- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
1958+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jJ)))
19401959 else {
1941- let fD = dz()
1942- let jD = fC()
1943- let fG = jD._1
1944- let fH = jD._2
1945- gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1960+ let fG = dz()
1961+ let jK = fF()
1962+ let fJ = jK._1
1963+ let fK = jK._2
1964+ gA((jJ + bQ()), (bY() + fK), (bZ() + fJ), aR(fK, fG), aR(fJ, fG))
19461965 }
19471966 }
19481967 else throw("Strict value is not equal to itself.")
19491968 }
19501969
19511970
19521971
19531972 @Callable(cg)
19541973 func syncTerminalPriceToOracle () = {
1955- let jE = fy(dz())
1956- let jF = jE._1
1957- let jG = jE._2
1958- let eF = jE._3
1959- let jH = if ((eF != 0))
1974+ let cH = bF()
1975+ let cJ = bG()
1976+ let jL = fB(dz(), cH, cJ)
1977+ let hr = jL._1
1978+ let hs = jL._2
1979+ let eI = jL._3
1980+ let ht = if ((eI != 0))
19601981 then {
1961- let jH = invoke(ar(), "exchangeFreeAndLocked", [eF], nil)
1962- if ((jH == jH))
1982+ let ht = invoke(ar(), "exchangeFreeAndLocked", [eI], nil)
1983+ if ((ht == ht))
19631984 then nil
19641985 else throw("Strict value is not equal to itself.")
19651986 }
19661987 else nil
1967- if ((jH == jH))
1988+ if ((ht == ht))
1989+ then (gW(hr, hs) ++ gO(aR(aT(cH, hr), aT(cJ, hs))))
1990+ else throw("Strict value is not equal to itself.")
1991+ }
1992+
1993+
1994+
1995+@Callable(cg)
1996+func view_calcRemainMarginWithFundingPayment (cp) = {
1997+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1998+ if ((hB == hB))
19681999 then {
1969- let cH = bF()
1970- let cJ = bG()
1971- (gT(jF, jG) ++ gL(aR(aT(cH, jF), aT(cJ, jG))))
2000+ let jM = co(cp)
2001+ let cs = jM._1
2002+ let ek = jM._2
2003+ let et = jM._3
2004+ let em = jM._4
2005+ let jN = ei(cp, aN)
2006+ let dZ = jN._1
2007+ let eh = jN._2
2008+ let jO = dd(cs, ek, em, eh)
2009+ let dm = jO._1
2010+ let dn = jO._2
2011+ let di = jO._3
2012+ throw((((((aP(dm) + aP(di)) + aP(ew(cp))) + aP(eh)) + aP(dn)) + aP(dZ)))
19722013 }
19732014 else throw("Strict value is not equal to itself.")
19742015 }
19752016
19762017
19772018
19782019 @Callable(cg)
1979-func view_calcRemainMarginWithFundingPayment (cp) = {
1980- let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1981- if ((hu == hu))
1982- then {
1983- let jI = co(cp)
1984- let cs = jI._1
1985- let eh = jI._2
1986- let eq = jI._3
1987- let ej = jI._4
1988- let jJ = ef(cp, aN)
1989- let dW = jJ._1
1990- let ee = jJ._2
1991- let jK = dd(cs, eh, ej, ee)
1992- let dm = jK._1
1993- let dn = jK._2
1994- let di = jK._3
1995- throw((((((aP(dm) + aP(di)) + aP(et(cp))) + aP(ee)) + aP(dn)) + aP(dW)))
1996- }
1997- else throw("Strict value is not equal to itself.")
1998- }
1999-
2000-
2001-
2002-@Callable(cg)
2003-func view_getPegAdjustCost (gM) = {
2004- let fx = fy(gM)
2005- throw(toString(fx._3))
2020+func view_getPegAdjustCost (gP) = {
2021+ let cH = bF()
2022+ let cJ = bG()
2023+ let fA = fB(gP, cH, cJ)
2024+ throw(toString(fA._3))
20062025 }
20072026
20082027
20092028
20102029 @Callable(cg)
20112030 func view_getTerminalAmmPrice () = {
2012- let jL = fb()
2013- let ff = jL._1
2014- let fg = jL._2
2015- let hj = aR(aT(ff, bH()), aT(fg, bI()))
2016- throw(toString(hj))
2031+ let jP = fe()
2032+ let fi = jP._1
2033+ let fj = jP._2
2034+ let hm = aR(aT(fi, bH()), aT(fj, bI()))
2035+ throw(toString(hm))
20172036 }
20182037
20192038
20202039
20212040 @Callable(cg)
20222041 func view_getFunding () = {
2023- let fD = dz()
2024- let jM = fC()
2025- let fG = jM._1
2026- let fH = jM._2
2027- let jN = aR(fH, fD)
2028- let jO = aR(fG, fD)
2029- throw((((aP(jN) + aP(jO)) + aP(eL())) + aP(dz())))
2042+ let fG = dz()
2043+ let jQ = fF()
2044+ let fJ = jQ._1
2045+ let fK = jQ._2
2046+ let jR = aR(fK, fG)
2047+ let jS = aR(fJ, fG)
2048+ throw((((aP(jR) + aP(jS)) + aP(eO())) + aP(dz())))
20302049 }
20312050
20322051
20332052
20342053 @Callable(cg)
20352054 func view_getBorrowedByTrader (cp) = {
2036- let jP = fX(cp)
2037- let iC = jP._1
2038- let iD = jP._2
2039- throw((aP(iC) + iD))
2055+ let jT = ga(cp)
2056+ let iJ = jT._1
2057+ let iK = jT._2
2058+ throw((aP(iJ) + iK))
20402059 }
20412060
20422061
20432062
20442063 @Callable(cg)
20452064 func computeSpotPrice () = {
2046- let fx = dP()
2047- $Tuple2(nil, fx)
2048- }
2049-
2050-
2051-
2052-@Callable(cg)
2053-func computeFeeForTraderWithArtifact (cp,fJ) = {
2054- let fx = ga(cp, fJ)
2055- $Tuple2(nil, fx)
2056- }
2057-
2058-
2059-@Verifier(jQ)
2060-func jR () = sigVerify(jQ.bodyBytes, jQ.proofs[0], an())
2065+ let fA = dS()
2066+ $Tuple2(nil, fA)
2067+ }
2068+
2069+
2070+
2071+@Callable(cg)
2072+func computeFeeForTraderWithArtifact (cp,fM) = {
2073+ let fA = gd(cp, fM)
2074+ $Tuple2(nil, fA)
2075+ }
2076+
2077+
2078+@Verifier(jU)
2079+func jV () = sigVerify(jU.bodyBytes, jU.proofs[0], an())
20612080

github/deemru/w8io/026f985 
607.11 ms