tx · GuiBxDaMKMVd2vg7YfJ1dC9fBYWSF2tuvmwihwPodkG5

3N2PpSwSkK98YvLff2xQa6UcZ6LZ4suyFUF:  -0.07500000 Waves

2022.12.12 16:48 [2357201] smart account 3N2PpSwSkK98YvLff2xQa6UcZ6LZ4suyFUF > SELF 0.00000000 Waves

{ "type": 13, "id": "GuiBxDaMKMVd2vg7YfJ1dC9fBYWSF2tuvmwihwPodkG5", "fee": 7500000, "feeAssetId": null, "timestamp": 1670852939080, "version": 2, "chainId": 84, "sender": "3N2PpSwSkK98YvLff2xQa6UcZ6LZ4suyFUF", "senderPublicKey": "F7t5bFSaRPct8VH5ZVsR6Z5ZrmBs8ScAsYtnsNFgwgS3", "proofs": [ "63MNZCYk5RKXbdoUKpJhdowQkxxbCaV4sKpowJv7bZx3FJZ6T2zYAnh8qBtj4ejuEYkdH2gGncXoRdKiWjBTALGg" ], "script": "base64:BgJ6CAISABIAEgASABIDCgEBEgMKAQESDgoMAQEBAQEBAQEBAQEBEhQKEgEBAQEBAQEICAgIAQEBAQEBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESBAoCAQESAwoBCBIAEgASAwoBCBIDCgEBEgASABIDCgEIEgASBAoCCAjAAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AAVrX29yYQIFa19vcmEACWtfYmFsYW5jZQIJa19iYWxhbmNlAAprX3NlcXVlbmNlAgprX3NlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UAD2tfcG9zaXRpb25Bc3NldAIPa19wb3NpdGlvbkFzc2V0AA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19sYXN0RGF0YVN0cgINa19sYXN0RGF0YVN0cgAOa19sYXN0TWludXRlSWQCDmtfbGFzdE1pbnV0ZUlkAB1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UAE2tfdHdhcERhdGFMYXN0UHJpY2UCE2tfdHdhcERhdGFMYXN0UHJpY2UAGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAhprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfdmF1bHRfYWRkcmVzcwIPa192YXVsdF9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfcXVvdGVfc3Rha2luZwIPa19xdW90ZV9zdGFraW5nABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwAUa19jb2xsYXRlcmFsX2FkZHJlc3MCFGtfY29sbGF0ZXJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MAIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAiBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ5hZG1pblB1YmxpY0tleQAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19hZG1pbl9wdWJsaWNfa2V5AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0ARFjb2xsYXRlcmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRRrX2NvbGxhdGVyYWxfYWRkcmVzcwIaQ29sbGF0ZXJhbCBNYW5hZ2VyIG5vdCBzZXQBC3N3YXBBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABRJrX2V4Y2hhbmdlX2FkZHJlc3MCD05vIHN3YXAgYWRkcmVzcwIUSW52YWxpZCBzd2FwIGFkZHJlc3MAEWtfd2hpdGVsaXN0X2Fzc2V0AhFrX3doaXRlbGlzdF9hc3NldAEQaXNXaGl0ZWxpc3RBc3NldAEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEWNvbGxhdGVyYWxBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBwANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAPT1JBQ0xFX0lOVEVSVkFMAA8AB1NFQ09ORFMA6AcAD0RFQ0lNQUxfTlVNQkVSUwAGAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBXNxcnRkAQJfeAkBBHNxcnQEBQJfeAUPREVDSU1BTF9OVU1CRVJTBQ9ERUNJTUFMX05VTUJFUlMFCEhBTEZFVkVOAQRwb3dkAgJfeAJfeQkAbAYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQZic3FydGQBAl94CQEKc3FydEJpZ0ludAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJwb3dkAgJfeAJfeQkAdgYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBAg5JbnZhbGlkIG1hcmdpbgMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBAg5JbnZhbGlkIG1hcmdpbgYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCWCgQFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAlgoEAAAAAAAAAAABEGdldFBvc2l0aW9uQXNzZXQBB190cmFkZXIEEHBvc2l0aW9uQXNzZXRPcHQJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAckbWF0Y2gwBRBwb3NpdGlvbkFzc2V0T3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQNcG9zaXRpb25Bc3NldAUHJG1hdGNoMAUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQljbG9zZU9ubHkACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFC2tfY2xvc2VPbmx5BwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQBDWNhbGNJbnZhcmlhbnQEB19xdEFzdFIHX3F0QXN0VwdfYnNBc3RSB19ic0FzdFcEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYnF0QXN0VwkAtgIBBQdfcXRBc3RXBAdiYnNBc3RSCQC2AgEFB19ic0FzdFIEB2Jic0FzdFcJALYCAQUHX2JzQXN0VwkBBWJtdWxkAgkBBWJtdWxkAgUHYnF0QXN0UgUHYnF0QXN0VwkBBWJtdWxkAgUHYmJzQXN0UgUHYmJzQXN0VwEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAFrCQENY2FsY0ludmFyaWFudAQFB19xdEFzdFIFB19xdEFzdFcFB19ic0FzdFIFB19ic0FzdFcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQZfaXNBZGQJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBCQEEbXVsZAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFB19xdEFzdFcEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBBGRpdmQCCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgUHX3F0QXN0VwQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNjk0NjE3MTA5CQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjk0NjE3MTA5Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY5NDYxNzEwOQJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjk0NjE3MTA5Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4NTk2MTg3MjMDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg1OTYxODcyMwJfMQQHYmFkRGVidAgFDSR0MDE4NTk2MTg3MjMCXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAQFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBCQEEbXVsZAIFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgUQX2Jhc2VBc3NldFdlaWdodAQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE5OTExMjAwNzIJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5OTExMjAwNzICXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxOTkxMTIwMDcyAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE5OTExMjAwNzICXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQQIYmxvY2tLZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5AgADCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFD2tfb3JhX2Jsb2NrX2tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAECnByaWNlQWZ0ZXIJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgULb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIFDGF2ZXJhZ2VQcmljZQMJAGYCBQxhYnNQcmljZURpZmYJAQ5tYXhQcmljZVNwcmVhZAAJAAIBCQCsAgIJAKwCAgkArAICAg1QcmljZSBzcHJlYWQgCQCkAwEFDGFic1ByaWNlRGlmZgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBg1fcG9zaXRpb25TaXplB19vcHRpb24SX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQED3Bvc2l0aW9uU2l6ZUFicwkBA2FicwEFDV9wb3NpdGlvblNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwDCQAAAgUHX29wdGlvbgUPUE5MX09QVElPTl9TUE9UBA0kdDAyNDIzODI0NDU4CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQEE291dFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyNDIzODI0NDU4Al8xBAJ4MQgFDSR0MDI0MjM4MjQ0NTgCXzIEAngyCAUNJHQwMjQyMzgyNDQ1OAJfMwQCeDMIBQ0kdDAyNDIzODI0NDU4Al80BRNvdXRQb3NpdGlvbk5vdGlvbmFsCQEEbXVsZAIFD3Bvc2l0aW9uU2l6ZUFicwkBEmdldE9yYWNsZVR3YXBQcmljZQAFEHBvc2l0aW9uTm90aW9uYWwBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHDV9wb3NpdGlvblNpemUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0B19vcHRpb24DCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIVSW52YWxpZCBwb3NpdGlvbiBzaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsCQEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYFDV9wb3NpdGlvblNpemUFB19vcHRpb24FEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyNTg4MzI2MDExCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyNTg4MzI2MDExAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI1ODgzMjYwMTECXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjU4ODMyNjAxMQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyNTg4MzI2MDExAl80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcABQdfb3B0aW9uAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIHX3RyYWRlcgdfb3B0aW9uBA0kdDAyNjUyNDI2NjM1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyNjUyNDI2NjM1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI2NTI0MjY2MzUCXzIEA3BvbggFDSR0MDI2NTI0MjY2MzUCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjY1MjQyNjYzNQJfNAQNJHQwMjY2NDEyNjczNAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI2NjQxMjY3MzQCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyNjY0MTI2NzM0Al8yBA0kdDAyNjczOTI2OTA1CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyNjczOTI2OTA1Al8xBAdiYWREZWJ0CAUNJHQwMjY3MzkyNjkwNQJfMgkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUQcG9zaXRpb25Ob3Rpb25hbAEOZ2V0TWFyZ2luUmF0aW8BB190cmFkZXIJARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCB190cmFkZXINX3Bvc2l0aW9uU2l6ZQQMbWF4aW11bVJhdGlvCQEEdm1heAIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABBhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUFDG1heGltdW1SYXRpbwQKc3dhcFJlc3VsdAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUHBBxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUKc3dhcFJlc3VsdAJfMQQLcHJpY2VJbXBhY3QIBQpzd2FwUmVzdWx0Al83AwkAZgIJAQ5tYXhQcmljZUltcGFjdAAFC3ByaWNlSW1wYWN0BRxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQICQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcCXzEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIHX3RyYWRlchRfY2hlY2tNYXhQcmljZUltcGFjdAQNJHQwMjgxNDUyODI3MwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjgxNDUyODI3MwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyODE0NTI4MjczAl8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI4MTQ1MjgyNzMCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjgxNDUyODI3MwJfNAQNdW5yZWFsaXplZFBubAgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAJfMgQNJHQwMjgzNjgyODUzNgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMjgzNjgyODUzNgJfMQQHYmFkRGVidAgFDSR0MDI4MzY4Mjg1MzYCXzIEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBAS0BBQxwb3NpdGlvblNpemUEC3JlYWxpemVkUG5sBQ11bnJlYWxpemVkUG5sBA1tYXJnaW5Ub1ZhdWx0CQEBLQEFDHJlbWFpbk1hcmdpbgQNJHQwMjg2NjMyODkzNwkBCnN3YXBPdXRwdXQDCQBmAgUMcG9zaXRpb25TaXplAAAJAQNhYnMBBQxwb3NpdGlvblNpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMjg2NjMyODkzNwJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDI4NjYzMjg5MzcCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDI4NjYzMjg5MzcCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAyODY2MzI4OTM3Al80BA50b3RhbExvbmdBZnRlcggFDSR0MDI4NjYzMjg5MzcCXzUED3RvdGFsU2hvcnRBZnRlcggFDSR0MDI4NjYzMjg5MzcCXzYEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkAnwoNBRVleGNoYW5nZWRQb3NpdGlvblNpemUFB2JhZERlYnQFC3JlYWxpemVkUG5sBQ1tYXJnaW5Ub1ZhdWx0BRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUMcG9zaXRpb25TaXplAAAFFHBvc2l0aW9uT3Blbk5vdGlvbmFsAAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUMcG9zaXRpb25TaXplBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAAAARBnZXRUd2FwU3BvdFByaWNlAAQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQNc3RhcnRNaW51dGVJZAkAZQIFCG1pbnV0ZUlkBQ1UV0FQX0lOVEVSVkFMBAdsaXN0U3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAQEbGlzdAkAtQkCBQdsaXN0U3RyAgEsCgEIZmlsdGVyRm4CC2FjY3VtdWxhdG9yBG5leHQDCQBnAgUNc3RhcnRNaW51dGVJZAkBDXBhcnNlSW50VmFsdWUBBQRuZXh0CQDNCAIFC2FjY3VtdWxhdG9yCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQFC2FjY3VtdWxhdG9yBAVsaXN0RgoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmaWx0ZXJGbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAhtYXhJbmRleAMJAGYCCQCQAwEFBWxpc3RGAAAJAJYDAQUFbGlzdEYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsaXN0AAAEDGxhc3RNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAABBZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQMZW5kTGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABBJub3dDdW11bGF0aXZlUHJpY2UJAGQCBRZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFDGVuZExhc3RQcmljZQQYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABA5zdGFydExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABBRzdGFydEN1bXVsYXRpdmVQcmljZQkAZAIFGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQ1zdGFydE1pbnV0ZUlkBQhtYXhJbmRleAUOc3RhcnRMYXN0UHJpY2UJAGkCCQBlAgUSbm93Q3VtdWxhdGl2ZVByaWNlBRRzdGFydEN1bXVsYXRpdmVQcmljZQUNVFdBUF9JTlRFUlZBTAETZ2V0VGVybWluYWxBbW1TdGF0ZQAEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQCUCgIJAQZxdEFzdFIACQEGYnNBc3RSAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABA0kdDAzMTA2MDMxMjM5CQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHBBVjdXJyZW50TmV0TWFya2V0VmFsdWUIBQ0kdDAzMTA2MDMxMjM5Al8xBBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwMzEwNjAzMTIzOQJfMgQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwMzEwNjAzMTIzOQJfMwkAlAoCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUBE2dldFF1b3RlQXNzZXRXZWlnaHQEEGJhc2VBc3NldFJlc2VydmURdG90YWxQb3NpdGlvblNpemURcXVvdGVBc3NldFJlc2VydmULdGFyZ2V0UHJpY2UEAWIJALYCAQUQYmFzZUFzc2V0UmVzZXJ2ZQQCc3oJALYCAQURdG90YWxQb3NpdGlvblNpemUEAXEJALYCAQURcXVvdGVBc3NldFJlc2VydmUEAXAJALYCAQULdGFyZ2V0UHJpY2UEA2JzMgkBBWJwb3dkAgkAtwICBQFiBQJzegkAtgIBCQBoAgACBQxERUNJTUFMX1VOSVQEBHFiczIJAQVibXVsZAIFAXEFA2JzMgQDcHM0CQC5AgIJALYCAQAECQEFYm11bGQCBQFwBQJzegQDc3FyCQEGYnNxcnRkAQkBBWJtdWxkAgUEcWJzMgkAuAICBQFxBQNwczQEAmJxCQEFYm11bGQCBQFiBQFxBAJxcwkBBWJtdWxkAgUBcQUCc3oEA3RvcAkAtwICCQC3AgIJAL4CAQUDc3FyBQJicQUCcXMEA2JvdAkAuQICCQC2AgEAAgkBBWJtdWxkAgUBcQUCc3oEBnJlc3VsdAkBBWJkaXZkAgUDdG9wBQNib3QJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQEOX3Rlcm1pbmFsUHJpY2UEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAJAJQKAgAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgEOZ2V0QWRqdXN0ZWRGZWUCC19hcnRpZmFjdElkEF9iYXNlRmVlRGlzY291bnQECmJhc2VGZWVSYXcJAQNmZWUABAdiYXNlRmVlCQEEbXVsZAIFCmJhc2VGZWVSYXcFEF9iYXNlRmVlRGlzY291bnQEDSR0MDM0MzM4MzQ4MzMDCQECIT0CBQtfYXJ0aWZhY3RJZAIABAxhcnRpZmFjdEtpbmQJAQRzdHJBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUMa190b2tlbl90eXBlBQtfYXJ0aWZhY3RJZAMJAAACBQxhcnRpZmFjdEtpbmQFGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQQJcmVkdWN0aW9uCQEEaW50QQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdG9rZW5fcGFyYW0FC19hcnRpZmFjdElkBAthZGp1c3RlZEZlZQkBBG11bGQCBQdiYXNlRmVlBQlyZWR1Y3Rpb24JAJQKAgULYWRqdXN0ZWRGZWUGCQACAQIZSW52YWxpZCBhdHRhY2hlZCBhcnRpZmFjdAkAlAoCBQdiYXNlRmVlBwQLYWRqdXN0ZWRGZWUIBQ0kdDAzNDMzODM0ODMzAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDAzNDMzODM0ODMzAl8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgdfdHJhZGVyCF9hc3NldElkBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAwkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABgkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBC2lzU2FtZUFzc2V0AgdfdHJhZGVyCF9hc3NldElkCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwRfYW1tCF9hc3NldElkB190cmFkZXIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAgFfBQRfYW1tAgFfBQhfYXNzZXRJZAIBXwUHX3RyYWRlcgETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEHX3RyYWRlcgQNcG9zaXRpb25Bc3NldAkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyAwkAAAIFDXBvc2l0aW9uQXNzZXQJANgEAQkBCnF1b3RlQXNzZXQACQCUCgIAAAUNcG9zaXRpb25Bc3NldAQDa2V5CQEeZ2V0Qm9ycm93ZWRCeVRyYWRlckluTWFya2V0S2V5AwkApQgBBQR0aGlzBQ1wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAZib3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBEWNvbGxhdGVyYWxBZGRyZXNzAAUDa2V5AAAJAJQKAgUGYm9ycm93BQ1wb3NpdGlvbkFzc2V0ARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEEGRvR2V0RmVlRGlzY291bnQJAPwHBAkBDG1pbmVyQWRkcmVzcwACEmNvbXB1dGVGZWVEaXNjb3VudAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBRBkb0dldEZlZURpc2NvdW50BRBkb0dldEZlZURpc2NvdW50BAtmZWVEaXNjb3VudAQHJG1hdGNoMAUQZG9HZXRGZWVEaXNjb3VudAMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAiFJbnZhbGlkIGNvbXB1dGVGZWVEaXNjb3VudCByZXN1bHQEDSR0MDM2MDY0MzYxMzgJAQ5nZXRBZGp1c3RlZEZlZQIFC19hcnRpZmFjdElkBQtmZWVEaXNjb3VudAQLYWRqdXN0ZWRGZWUIBQ0kdDAzNjA2NDM2MTM4Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDAzNjA2NDM2MTM4Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDWdldEFydGlmYWN0SWQBAWkECmFydGlmYWN0SWQDCQBmAgkAkAMBCAUBaQhwYXltZW50cwABCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhJJbnZhbGlkIGFydGlmYWN0SWQCAAUKYXJ0aWZhY3RJZAENZGlzdHJpYnV0ZUZlZQEKX2ZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCQEEbXVsZAIFCl9mZWVBbW91bnQJARNmZWVUb1N0YWtlcnNQZXJjZW50AAQKZmVlVG9WYXVsdAkAZQIFCl9mZWVBbW91bnQFDGZlZVRvU3Rha2VycwkAlAoCBQxmZWVUb1N0YWtlcnMFCmZlZVRvVmF1bHQBDnVwZGF0ZVNldHRpbmdzDBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfaW5pdE1hcmdpblJhdGlvBRBfaW5pdE1hcmdpblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8FBF9tbXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwUUX2xpcXVpZGF0aW9uRmVlUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfZnVuZGluZ1BlcmlvZAUOX2Z1bmRpbmdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIFBWtfZmVlBQRfZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VJbXBhY3QFD19tYXhQcmljZUltcGFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlU3ByZWFkBQ9fbWF4UHJpY2VTcHJlYWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbWF4T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heE9yYWNsZURlbGF5BRRfZmVlVG9TdGFrZXJzUGVyY2VudAUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsARN1cGRhdGVQb3NpdGlvbkFzc2V0AghfYWRkcmVzcwhfYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzBQhfYXNzZXRJZAUDbmlsAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAg1pc05ld1Bvc2l0aW9uCF9hZGRyZXNzAwUNaXNOZXdQb3NpdGlvbgQPY3VycmVudFNlcXVlbmNlCQEMbGFzdFNlcXVlbmNlAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQhfYWRkcmVzcwkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprX3NlcXVlbmNlCQBkAgUPY3VycmVudFNlcXVlbmNlAAEFA25pbAUDbmlsAQ51cGRhdGVQb3NpdGlvbgUIX2FkZHJlc3MFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUDbmlsAQphcHBlbmRUd2FwAQZfcHJpY2UECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEEHByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAMJAGYCBRBwcmV2aW91c01pbnV0ZUlkBQhtaW51dGVJZAkAAgECEVRXQVAgb3V0LW9mLW9yZGVyBAxsYXN0TWludXRlSWQDCQAAAgUQcHJldmlvdXNNaW51dGVJZAAABQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAMJAGYCBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUQcHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUQcHJldmlvdXNNaW51dGVJZAUGX3ByaWNlBBNsYXN0Q3VtdWxhdGl2ZVByaWNlCQBkAgUTcHJldkN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQlwcmV2UHJpY2UEBGxpc3QJAQtwdXNoVG9RdWV1ZQMJAQlzdHJUb0xpc3QBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAUNVFdBUF9JTlRFUlZBTAkApAMBBQhtaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBl9wcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfbGFzdE1pbnV0ZUlkBQhtaW51dGVJZAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX2xhc3REYXRhU3RyCQEJbGlzdFRvU3RyAQUEbGlzdAUDbmlsBBh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQAAAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFCXByZXZQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBl9wcmljZQUDbmlsARF1cGRhdGVBbW1SZXNlcnZlcwIHX3F0QXN0UgdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFIFA25pbAEQdXBkYXRlQW1tV2VpZ2h0cwIHX3F0QXN0VwdfYnNBc3RXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3F1b3RlQXNzZXRXZWlnaHQFB19xdEFzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfYmFzZUFzc2V0V2VpZ2h0BQdfYnNBc3RXBQNuaWwBCXVwZGF0ZUFtbQgHX3F0QXN0UgdfYnNBc3RSF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyFV9vcGVuSW50ZXJlc3ROb3Rpb25hbBZfdG90YWxMb25nUG9zaXRpb25TaXplF190b3RhbFNob3J0UG9zaXRpb25TaXplFl90b3RhbExvbmdPcGVuTm90aW9uYWwXX3RvdGFsU2hvcnRPcGVuTm90aW9uYWwEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAMJAQIhPQIJAGUCBRZfdG90YWxMb25nUG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYSW52YWxpZCBBTU0gc3RhdGUgZGF0YTogCQCkAwEFFl90b3RhbExvbmdQb3NpdGlvblNpemUCBCArICAJAKQDAQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCBCAhPSAJAKQDAQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAM4IAgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19vcGVuSW50ZXJlc3RMb25nBRZfdG90YWxMb25nT3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX29wZW5JbnRlcmVzdFNob3J0BRdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAUDbmlsCQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcBDmRlbGV0ZVBvc2l0aW9uAQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQhfYWRkcmVzcwUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsAQ5kb0J1cm5BcnRpZmFjdAINX2J1cm5BcnRpZmFjdAFpAwUNX2J1cm5BcnRpZmFjdAkAzAgCCQEEQnVybgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhBJbnZhbGlkIGFydGlmYWN0AAEFA25pbAUDbmlsFwFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIUSW52YWxpZCBwYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFkludmFsaWQgdW5wYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDHNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIbSW52YWxpZCBzZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQYFA25pbAFpAQ51bnNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCB1bnNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEFGJhc2VBc3NldEFtb3VudFRvQWRkCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQVwcmljZQQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyAWkBDmNoYW5nZVNldHRpbmdzDBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncwwFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5AWkBCmluaXRpYWxpemUSB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQdfb3JhY2xlCl9vcmFjbGVLZXkPX29yYWNsZUJsb2NrS2V5DF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQdfcXRBc3RSBgkAZwIAAAUHX2JzQXN0UgYJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAQtpbml0aWFsaXplZAAJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tCAUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzDAUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkJAQ11cGRhdGVGdW5kaW5nBQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa19vcmEFB19vcmFjbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa19vcmFfa2V5BQpfb3JhY2xlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tfb3JhX2Jsb2NrX2tleQUPX29yYWNsZUJsb2NrS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IFA25pbAFpARBkZWNyZWFzZVBvc2l0aW9uAwdfYW1vdW50CV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpAwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEGcGF1c2VkAAkAAgECI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA0ODY3NzQ4ODE3CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0ODY3NzQ4ODE3Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ4Njc3NDg4MTcCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDg2Nzc0ODgxNwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0ODY3NzQ4ODE3Al80BApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA0ODk5MDQ5MDk0CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA0ODk5MDQ5MDk0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNDg5OTA0OTA5NAJfMgQNJHQwNDkxMDA1MTc1OAMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwEDSR0MDQ5NTE1NDk2OTkJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDA0OTUxNTQ5Njk5Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDk1MTU0OTY5OQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDk1MTU0OTY5OQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQ5NTE1NDk2OTkCXzQEGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50BRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMHCQACAQkArAICCQCsAgIJAKwCAgIlVG9vIGxpdHRsZSBiYXNlIGFzc2V0IGV4Y2hhbmdlZCwgZ290IAkApAMBBRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMCCiBleHBlY3RlZCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQLcmVhbGl6ZWRQbmwJAQRkaXZkAgkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUwMTM2NTAzODEJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA1MDEzNjUwMzgxAl8xBAdiYWREZWJ0CAUNJHQwNTAxMzY1MDM4MQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA1MDEzNjUwMzgxAl8zBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQxvcGVuTm90aW9uYWwEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAJ4KDAUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNDkxMDA1MTc1OAJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA0OTEwMDUxNzU4Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQ5MTAwNTE3NTgCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNDkxMDA1MTc1OAJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDkxMDA1MTc1OAJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5MTAwNTE3NTgCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0OTEwMDUxNzU4Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNDkxMDA1MTc1OAJfOAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA0OTEwMDUxNzU4Al85BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0OTEwMDUxNzU4A18xMAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA0OTEwMDUxNzU4A18xMQQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNDkxMDA1MTc1OANfMTIEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGluY3JlYXNlUG9zaXRpb24ECl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYDCQEBIQEFDGlzUXVvdGVBc3NldAkBASEBBRFpc0NvbGxhdGVyYWxBc3NldAcGCQEBIQEJARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNTMxOTY1MzI4MQkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA1MzE5NjUzMjgxAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA1MzE5NjUzMjgxAl8yBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAULYWRqdXN0ZWRGZWUEB19hbW91bnQJAGUCBQpfcmF3QW1vdW50BQxyYXdGZWVBbW91bnQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQDBRFpc0NvbGxhdGVyYWxBc3NldAQIZG9Cb3Jyb3cJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIGYm9ycm93CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFB19hbW91bnQFA25pbAMJAAACBQhkb0JvcnJvdwUIZG9Cb3Jyb3cEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDWJhbGFuY2VCZWZvcmUFDWJhbGFuY2VCZWZvcmUEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUMcmF3RmVlQW1vdW50BQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAEDGJhbGFuY2VBZnRlcgkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIED2V4Y2hhbmdlZEFtb3VudAkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQMJAAACBQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQxyYXdGZWVBbW91bnQDCQAAAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAUTZGlzdHJpYnV0ZUZlZUFtb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACFWFjY2VwdFBheW1lbnRXaXRoTGluawkAzAgCBQdfdHJhZGVyCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA1NDU5NzU0NzM3CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA1NDU5NzU0NzM3Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDU0NTk3NTQ3MzcCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNTQ1OTc1NDczNwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA1NDU5NzU0NzM3Al80BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNTUwMjY1ODA2NwMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDU1NDg4NTU2NjEJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA1NTQ4ODU1NjYxAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTU0ODg1NTY2MQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTU0ODg1NTY2MQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU1NDg4NTU2NjECXzQDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIJAGQCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAABBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAGQCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAQZaW5jcmVhc2VNYXJnaW5SZXF1aXJlbWVudAkBBGRpdmQCBQxvcGVuTm90aW9uYWwFCV9sZXZlcmFnZQQNJHQwNTYyNjk1NjUwOAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUZaW5jcmVhc2VNYXJnaW5SZXF1aXJlbWVudAQMcmVtYWluTWFyZ2luCAUNJHQwNTYyNjk1NjUwOAJfMQQCeDEIBQ0kdDA1NjI2OTU2NTA4Al8yBAJ4MggFDSR0MDU2MjY5NTY1MDgCXzMDCQEBIQEJARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQACAQIVT3ZlciBtYXggc3ByZWFkIGxpbWl0AwkBASEBCQEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIWT3ZlciBtYXggb3BlbiBub3Rpb25hbAkAngoMBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDU3NzY3NTc4ODMJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA1Nzc2NzU3ODgzAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwNTc3Njc1Nzg4MwJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDU1MDI2NTgwNjcCXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNTUwMjY1ODA2NwJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1NTAyNjU4MDY3Al8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDU1MDI2NTgwNjcCXzQEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDU1MDI2NTgwNjcCXzUEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NTAyNjU4MDY3Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTUwMjY1ODA2NwJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDU1MDI2NTgwNjcCXzgEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNTUwMjY1ODA2NwJfOQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNTUwMjY1ODA2NwNfMTAEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTUwMjY1ODA2NwNfMTEEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDU1MDI2NTgwNjcDXzEyBA0kdDA1ODA3MzU4MTMwCQENZGlzdHJpYnV0ZUZlZQEFCWZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCAUNJHQwNTgwNzM1ODEzMAJfMQQKZmVlVG9WYXVsdAgFDSR0MDU4MDczNTgxMzACXzIEBXN0YWtlAwUMaXNRdW90ZUFzc2V0BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyCQETdXBkYXRlUG9zaXRpb25Bc3NldAIFB190cmFkZXIFC19hc3NldElkU3RyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4ABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAAEEWlzQ29sbGF0ZXJhbEFzc2V0CQEQaXNXaGl0ZWxpc3RBc3NldAEFC19hc3NldElkU3RyAwMDAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQJAQEhAQURaXNDb2xsYXRlcmFsQXNzZXQHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaXNTYW1lQXNzZXQCBQdfdHJhZGVyBQtfYXNzZXRJZFN0cgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA2MDA3ODYwMTYzCQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDYwMDc4NjAxNjMCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDYwMDc4NjAxNjMCXzIEDHJhd0ZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50BQthZGp1c3RlZEZlZQQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFDHJhd0ZlZUFtb3VudAQTZGlzdHJpYnV0ZUZlZUFtb3VudAMFEWlzQ29sbGF0ZXJhbEFzc2V0BAhkb0JvcnJvdwkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgZib3Jyb3cJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUHX2Ftb3VudAUDbmlsAwkAAAIFCGRvQm9ycm93BQhkb0JvcnJvdwQNYmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQxyYXdGZWVBbW91bnQFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgQPZXhjaGFuZ2VkQW1vdW50CQBlAgUMYmFsYW5jZUFmdGVyBQ1iYWxhbmNlQmVmb3JlAwkAAAIFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FDHJhd0ZlZUFtb3VudAMJAAACBRNkaXN0cmlidXRlRmVlQW1vdW50BRNkaXN0cmlidXRlRmVlQW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAINYWNjZXB0UGF5bWVudAkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA2MTQ2MjYxNjAyCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2MTQ2MjYxNjAyAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDYxNDYyNjE2MDICXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjE0NjI2MTYwMgJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2MTQ2MjYxNjAyAl80BA0kdDA2MTYwODYxNjY1CQENZGlzdHJpYnV0ZUZlZQEFCWZlZUFtb3VudAQMZmVlVG9TdGFrZXJzCAUNJHQwNjE2MDg2MTY2NQJfMQQKZmVlVG9WYXVsdAgFDSR0MDYxNjA4NjE2NjUCXzIEBXN0YWtlAwUMaXNRdW90ZUFzc2V0BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkCQDMCAIHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQkAZAIFEW9sZFBvc2l0aW9uTWFyZ2luBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgEHX2Ftb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjI3Nzc2MjkxNwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjI3Nzc2MjkxNwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2Mjc3NzYyOTE3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDYyNzc3NjI5MTcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjI3Nzc2MjkxNwJfNAQLbWFyZ2luRGVsdGEJAQEtAQUHX2Ftb3VudAQNJHQwNjI5NTQ2MzEzMwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULbWFyZ2luRGVsdGEEDHJlbWFpbk1hcmdpbggFDSR0MDYyOTU0NjMxMzMCXzEEB2JhZERlYnQIBQ0kdDA2Mjk1NDYzMTMzAl8yAwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABA1xdW90ZUFzc2V0U3RyCQDYBAEJAQpxdW90ZUFzc2V0AAQNJHQwNjM1Nzc2MzYzMQkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDYzNTc3NjM2MzECXzEEB2Fzc2V0SWQIBQ0kdDA2MzU3NzYzNjMxAl8yBAd0b1JlcGF5AwkAZgIFB19hbW91bnQFCGJvcnJvd2VkBQhib3Jyb3dlZAUHX2Ftb3VudAQKdG9XaXRoZHJhdwMJAGYCBQhib3Jyb3dlZAUHX2Ftb3VudAAACQBlAgUHX2Ftb3VudAUIYm9ycm93ZWQEC2ZpbmFsQm9ycm93CQBlAgUIYm9ycm93ZWQFB3RvUmVwYXkEFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQMJAGYCBQtmaW5hbEJvcnJvdwAABQNuaWwJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgUNcXVvdGVBc3NldFN0cgQNZG9TYW5pdHlDaGVjawMJAQIhPQIJAGQCBQd0b1JlcGF5BQp0b1dpdGhkcmF3BQdfYW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCHRvUmVwYXk9CQCkAwEFB3RvUmVwYXkCDiArIHRvV2l0aGRyYXc9CQCkAwEFCnRvV2l0aGRyYXcCBCAhPSAJAKQDAQUHX2Ftb3VudAUDbmlsAwkAAAIFDWRvU2FuaXR5Q2hlY2sFDWRvU2FuaXR5Q2hlY2sECWRvVW5zdGFrZQMJAGYCBQp0b1dpdGhkcmF3AAAECWRvVW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUKdG9XaXRoZHJhdwUDbmlsBQNuaWwDCQAAAgUJZG9VbnN0YWtlBQlkb1Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCWRvVW5zdGFrZQUJZG9VbnN0YWtlBBZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uAwkAZgIFB3RvUmVwYXkAAAQHZG9SZXBheQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgVyZXBheQkAzAgCBQdfdHJhZGVyCQDMCAIFB3RvUmVwYXkJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUHZG9SZXBheQUHZG9SZXBheQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvUmVwYXkJANkEAQUHYXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplAwkAZgIFCnRvV2l0aGRyYXcAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQp0b1dpdGhkcmF3BQNuaWwJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQFFXN3aXRjaFBvc2l0aW9uVG9RdW90ZQUWcmV0dXJuQ29sbGF0ZXJhbEFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAgVfc2l6ZRRfbWluUXVvdGVBc3NldEFtb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgMDAwMDCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkAZwIAAAUFX3NpemUGCQBmAgAABRRfbWluUXVvdGVBc3NldEFtb3VudAkAAgECIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA2NTc4OTY1OTI5CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2NTc4OTY1OTI5Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDY1Nzg5NjU5MjkCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjU3ODk2NTkyOQJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2NTc4OTY1OTI5Al80BA0kdDA2NTkzNTcwMzcyAwkAZgIJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUFBV9zaXplBApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA2NjUyNjY2NzQ4CQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUGBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwNjY1MjY2Njc0OAJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDY2NTI2NjY3NDgCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDY2NTI2NjY3NDgCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2NjUyNjY2NzQ4Al80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDA2NjgzOTY2OTkzCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA2NjgzOTY2OTkzAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwNjY4Mzk2Njk5MwJfMgQCbXIJARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBA1yZWFsaXplZFJhdGlvCQEEZGl2ZAIJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDY3MjcyNjc1MTAJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA2NzI3MjY3NTEwAl8xBA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA2NzI3MjY3NTEwAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDY3MjcyNjc1MTACXzMEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEEW5ld1Bvc2l0aW9uTWFyZ2luCQEEbXVsZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQJtcgQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQDAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQChCg8FD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAkAZAIJAQNhYnMBCQBlAgUMcmVtYWluTWFyZ2luBRFuZXdQb3NpdGlvbk1hcmdpbgULcmVhbGl6ZWRQbmwFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAAAAwkAZgIFBV9zaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplCQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDY5MzEzNjk3MzIJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBgQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDY5MzEzNjk3MzICXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDY5MzEzNjk3MzICXzIEC3JlYWxpemVkUG5sCAUNJHQwNjkzMTM2OTczMgJfMwQNbWFyZ2luVG9WYXVsdAgFDSR0MDY5MzEzNjk3MzICXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2OTMxMzY5NzMyAl81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2OTMxMzY5NzMyAl82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjkzMTM2OTczMgJfNwQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDY5MzEzNjk3MzICXzgEAngyCAUNJHQwNjkzMTM2OTczMgJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2OTMxMzY5NzMyA18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjkzMTM2OTczMgNfMTEEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjkzMTM2OTczMgNfMTIEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY5MzEzNjk3MzIDXzEzAwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAoQoPAAAAAAAAAAAFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwFDW1hcmdpblRvVmF1bHQFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNjU5MzU3MDM3MgJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA2NTkzNTcwMzcyAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY1OTM1NzAzNzICXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjU5MzU3MDM3MgJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjU5MzU3MDM3MgJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA2NTkzNTcwMzcyAl82BA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNjU5MzU3MDM3MgJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDY1OTM1NzAzNzICXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDY1OTM1NzAzNzICXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2NTkzNTcwMzcyA18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDY1OTM1NzAzNzIDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDY1OTM1NzAzNzIDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA2NTkzNTcwMzcyA18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2NTkzNTcwMzcyA18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjU5MzU3MDM3MgNfMTUDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAiZVbmFibGUgdG8gY2xvc2UgcG9zaXRpb24gd2l0aCBiYWQgZGVidAQOd2l0aGRyYXdBbW91bnQJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDSR0MDcwNTgxNzA3ODgDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1hbW1OZXdCYWxhbmNlCAUNJHQwNzA1ODE3MDc4OAJfMQQDeDExCAUNJHQwNzA1ODE3MDc4OAJfMgQNJHQwNzA3OTU3MDg0OQkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDcwNzk1NzA4NDkCXzEEB2Fzc2V0SWQIBQ0kdDA3MDc5NTcwODQ5Al8yBA0kdDA3MDg2NDcxNzIzAwkAZgIFCGJvcnJvd2VkAAADCQBnAgUOd2l0aGRyYXdBbW91bnQFCGJvcnJvd2VkBAdkb1JlcGF5CQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACBXJlcGF5CQDMCAIFB190cmFkZXIJAMwIAgUIYm9ycm93ZWQJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUHZG9SZXBheQUHZG9SZXBheQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDl90cmFkZXJBZGRyZXNzBQhib3Jyb3dlZAkA2QQBBQdhc3NldElkBQNuaWwJAGUCBQ53aXRoZHJhd0Ftb3VudAUIYm9ycm93ZWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ED3JlYWxpemVBbmRDbG9zZQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAhhyZWFsaXplUGFydGlhbGx5QW5kQ2xvc2UJAMwIAgUHX3RyYWRlcgkAzAgCBQ53aXRoZHJhd0Ftb3VudAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQ9yZWFsaXplQW5kQ2xvc2UFD3JlYWxpemVBbmRDbG9zZQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDl90cmFkZXJBZGRyZXNzBQ53aXRoZHJhd0Ftb3VudAkA2QQBBQdhc3NldElkBQNuaWwAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQNuaWwFDndpdGhkcmF3QW1vdW50AwkAAAIFDSR0MDcwODY0NzE3MjMFDSR0MDcwODY0NzE3MjMEE3F1b3RlV2l0aGRyYXdBbW91bnQIBQ0kdDA3MDg2NDcxNzIzAl8yBBRzZW5kQ29sbGF0ZXJhbEFjdGlvbggFDSR0MDcwODY0NzE3MjMCXzEEB3Vuc3Rha2UDCQBmAgUTcXVvdGVXaXRoZHJhd0Ftb3VudAAABAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRNxdW90ZVdpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwkAAAIFD25ld1Bvc2l0aW9uU2l6ZQAACQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIDCQBmAgUTcXVvdGVXaXRoZHJhd0Ftb3VudAAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUTcXVvdGVXaXRoZHJhd0Ftb3VudAUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UFFHNlbmRDb2xsYXRlcmFsQWN0aW9uCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxpcXVpZGF0ZQEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBAttYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUDAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA0kdDA3NDAyMDc0MTcwCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA3NDAyMDc0MTcwAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDc0MDIwNzQxNzACXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzQwMjA3NDE3MAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3NDAyMDc0MTcwAl80BApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBA0kdDA3NDM5NTc0NDk5CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA3NDM5NTc0NDk5Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNzQzOTU3NDQ5OQJfMgQNJHQwNzQ1MDc3NDY5NAkBCXN3YXBJbnB1dAIFBWlzQWRkBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDA3NDUwNzc0Njk0Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzQ1MDc3NDY5NAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzQ1MDc3NDY5NAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDc0NTA3NzQ2OTQCXzQEEGxpcXVpZGF0aW9uUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUQbGlxdWlkYXRpb25SYXRpbwQNJHQwNzQ5ODM3NTIxNgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDc0OTgzNzUyMTYCXzEEB2JhZERlYnQIBQ0kdDA3NDk4Mzc1MjE2Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDc0OTgzNzUyMTYCXzMEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQRbmV3UG9zaXRpb25NYXJnaW4JAGUCBQxyZW1haW5NYXJnaW4FEmxpcXVpZGF0aW9uUGVuYWx0eQQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsBBRuZXdQb3NpdGlvbkxzdFVwZENQRgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA3NjM4NTc2NTE0AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDc2Mzg1NzY1MTQCXzEEA3gxMQgFDSR0MDc2Mzg1NzY1MTQCXzIEDSR0MDc2NTIyNzY1NzYJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA3NjUyMjc2NTc2Al8xBAdhc3NldElkCAUNJHQwNzY1MjI3NjU3NgJfMgQVZG9MaXF1aWRhdGVDb2xsYXRlcmFsAwkAZgIFCGJvcnJvd2VkAAAEEGNvbGxhdGVyYWxUb1NlbGwJAQRtdWxkAgUIYm9ycm93ZWQFEGxpcXVpZGF0aW9uUmF0aW8ED3JlYWxpemVBbmRDbG9zZQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAhByZWFsaXplUGFydGlhbGx5CQDMCAIFB190cmFkZXIJAMwIAgUHYXNzZXRJZAkAzAgCBRBjb2xsYXRlcmFsVG9TZWxsBQNuaWwFA25pbAMJAAACBQ9yZWFsaXplQW5kQ2xvc2UFD3JlYWxpemVBbmRDbG9zZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFEmxpcXVpZGF0aW9uUGVuYWx0eQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQAAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwNzgyNzE3ODc2NgkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDc4MjcxNzg3NjYCXzEEB2JhZERlYnQIBQ0kdDA3ODI3MTc4NzY2Al8yBAJ4MggFDSR0MDc4MjcxNzg3NjYCXzMEAngzCAUNJHQwNzgyNzE3ODc2NgJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc4MjcxNzg3NjYCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc4MjcxNzg3NjYCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3ODI3MTc4NzY2Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNzgyNzE3ODc2NgJfOAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDc4MjcxNzg3NjYCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNzgyNzE3ODc2NgNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDc4MjcxNzg3NjYDXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc4MjcxNzg3NjYDXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3ODI3MTc4NzY2A18xMwQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNzkxNzQ3OTMwMwMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA3OTE3NDc5MzAzAl8xBAN4MTEIBQ0kdDA3OTE3NDc5MzAzAl8yBA0kdDA3OTMxMTc5MzY1CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzkzMTE3OTM2NQJfMQQHYXNzZXRJZAgFDSR0MDc5MzExNzkzNjUCXzIEFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAMJAGYCBQhib3Jyb3dlZAAABA9yZWFsaXplQW5kQ2xvc2UJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIYcmVhbGl6ZVBhcnRpYWxseUFuZENsb3NlCQDMCAIFB190cmFkZXIJAMwIAgAACQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAQBeAMJAGYCBQdiYWREZWJ0AAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUHYmFkRGVidAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA0kdDA4MTE3MjgxMjM0CQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwODExNzI4MTIzNAJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDgxMTcyODEyMzQCXzIJAQ11cGRhdGVGdW5kaW5nBQkAZAIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAZAIJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFE2xvbmdQcmVtaXVtRnJhY3Rpb24JAGQCCQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UBaQEZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQAEDSR0MDgxNjE2ODE3MzcJARRnZXRTeW5jVGVybWluYWxQcmljZQEJARJnZXRPcmFjbGVUd2FwUHJpY2UABBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwODE2MTY4MTczNwJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwODE2MTY4MTczNwJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDgxNjE2ODE3MzcCXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwODIyMTM4MjMxNAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwODIyMTM4MjMxNAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA4MjIxMzgyMzE0Al8yBANwb24IBQ0kdDA4MjIxMzgyMzE0Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDgyMjEzODIzMTQCXzQEDSR0MDgyMzE3ODI0MTgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDgyMzE3ODI0MTgCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA4MjMxNzgyNDE4Al8yBA0kdDA4MjQyMTgyNTkzCQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA4MjQyMTgyNTkzAl8xBAdiYWREZWJ0CAUNJHQwODI0MjE4MjU5MwJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA4MjQyMTgyNTkzAl8zCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAQUGX3ByaWNlCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDgyOTQwODMwMjEJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDgyOTQwODMwMjECXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDgyOTQwODMwMjECXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNJHQwODMyNDA4MzMwMgkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgzMjQwODMzMDICXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MzI0MDgzMzAyAl8yBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBEGdldFR3YXBTcG90UHJpY2UACQEBcwEJARJnZXRPcmFjbGVUd2FwUHJpY2UAAWkBGHZpZXdfZ2V0Qm9ycm93ZWRCeVRyYWRlcgEHX3RyYWRlcgQNJHQwODM1OTI4MzY0NgkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDgzNTkyODM2NDYCXzEEB2Fzc2V0SWQIBQ0kdDA4MzU5MjgzNjQ2Al8yCQACAQkArAICCQEBcwEFCGJvcnJvd2VkBQdhc3NldElkAWkBEGNvbXB1dGVTcG90UHJpY2UABAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0AWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5APrjqBw=", "height": 2357201, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2BbNLcVVvi9U9wTDmo5ipjWEXhBKMaPMXivWkxRv1QcM Next: BSEqokPhs5v11eiXabLchX21Kstr3dFTbeyNBigrhzY8 Diff:
OldNewDifferences
4949
5050 let x = "k_maxOpenNotional"
5151
52-let y = "k_lastDataStr"
53-
54-let z = "k_lastMinuteId"
55-
56-let A = "k_twapDataLastCumulativePrice"
57-
58-let B = "k_twapDataLastPrice"
59-
60-let C = "k_twapDataPreviousMinuteId"
61-
62-let D = "k_latestLongPremiumFraction"
63-
64-let E = "k_latestShortPremiumFraction"
65-
66-let F = "k_nextFundingBlockMinTimestamp"
67-
68-let G = "k_longFundingRate"
69-
70-let H = "k_shortFundingRate"
71-
72-let I = "k_qtAstR"
73-
74-let J = "k_bsAstR"
75-
76-let K = "k_qtAstW"
77-
78-let L = "k_bsAstW"
79-
80-let M = "k_totalPositionSize"
81-
82-let N = "k_totalLongPositionSize"
83-
84-let O = "k_totalShortPositionSize"
85-
86-let P = "k_openInterestNotional"
87-
88-let Q = "k_openInterestShort"
89-
90-let R = "k_openInterestLong"
91-
92-let S = "k_coordinatorAddress"
93-
94-let T = "k_vault_address"
95-
96-let U = "k_admin_address"
97-
98-let V = "k_admin_public_key"
99-
100-let W = "k_quote_asset"
101-
102-let X = "k_quote_staking"
103-
104-let Y = "k_staking_address"
105-
106-let Z = "k_miner_address"
107-
108-let aa = "k_orders_address"
109-
110-let ab = "k_referral_address"
111-
112-let ac = "k_collateral_address"
113-
114-let ad = "k_exchange_address"
115-
116-let ae = "k_nft_manager_address"
117-
118-let af = "k_trader_market_asset_collateral"
119-
120-func ag (ah,ai) = ((ah + "_") + ai)
121-
122-
123-func aj () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
124-
125-
126-func ak () = addressFromString(getStringValue(aj(), U))
127-
128-
129-func al () = fromBase58String(getStringValue(aj(), V))
130-
131-
132-func am () = fromBase58String(getStringValue(aj(), W))
133-
134-
135-func an () = valueOrErrorMessage(addressFromString(getStringValue(aj(), X)), "Quote asset staking not set")
136-
137-
138-func ao () = valueOrErrorMessage(addressFromString(getStringValue(aj(), Y)), "Staking not set")
139-
140-
141-func ap () = valueOrErrorMessage(addressFromString(getStringValue(aj(), T)), "Vault not set")
142-
143-
144-func aq () = valueOrErrorMessage(addressFromString(getStringValue(aj(), Z)), "Miner not set")
145-
146-
147-func ar () = valueOrErrorMessage(addressFromString(getStringValue(aj(), aa)), "Orders not set")
148-
149-
150-func as () = valueOrErrorMessage(addressFromString(getStringValue(aj(), ab)), "Referral not set")
151-
152-
153-func at () = valueOrErrorMessage(addressFromString(getStringValue(aj(), ae)), "NFT Manager not set")
154-
155-
156-func au () = valueOrErrorMessage(addressFromString(getStringValue(aj(), ac)), "Collateral Manager not set")
157-
158-
159-func av () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aj(), ad), "No swap address")), "Invalid swap address")
160-
161-
162-let aw = "k_whitelist_asset"
163-
164-func ax (ay) = valueOrElse(getBoolean(au(), ag(aw, ay)), false)
165-
166-
167-let az = "k_token_param"
168-
169-let aA = "k_token_type"
170-
171-let aB = "fee_reduction"
172-
173-let aC = 1
174-
175-let aD = 2
176-
177-let aE = 15
178-
179-let aF = 15
180-
181-let aG = 1000
182-
183-let aH = 6
184-
185-let aI = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
186-
187-let aJ = (86400 * aI)
188-
189-let aK = 100
190-
191-let aL = 1
192-
193-let aM = 2
194-
195-func aN (aO) = (toString(aO) + ",")
196-
197-
198-func aP (aO,aQ) = fraction(aO, aI, aQ, HALFEVEN)
199-
200-
201-func aR (aO,aQ) = fraction(aO, aQ, aI, HALFEVEN)
202-
203-
204-func aS (aO) = sqrt(aO, aH, aH, HALFEVEN)
205-
206-
207-func aT (aO,aQ) = pow(aO, aH, aQ, aH, aH, HALFEVEN)
208-
209-
210-func aU (aO,aQ) = fraction(aO, toBigInt(aI), aQ, HALFEVEN)
211-
212-
213-func aV (aO,aQ) = fraction(aO, aQ, toBigInt(aI), HALFEVEN)
214-
215-
216-func aW (aO) = sqrtBigInt(aO, aH, aH, HALFEVEN)
217-
218-
219-func aX (aO,aQ) = pow(aO, aH, aQ, aH, aH, HALFEVEN)
220-
221-
222-func aY (aO) = if ((aO > 0))
223- then aO
224- else -(aO)
225-
226-
227-func aZ (aO,aQ) = if ((aO >= aQ))
228- then aO
229- else aQ
230-
231-
232-func ba (bb) = {
233- func bc (bd,be) = ((bd + be) + ",")
234-
235- let bf = {
236- let bg = bb
237- let bh = size(bg)
238- let bi = ""
239- func bj (bk,bl) = if ((bl >= bh))
240- then bk
241- else bc(bk, bg[bl])
242-
243- func bm (bk,bl) = if ((bl >= bh))
244- then bk
52+let y = "k_feeToStakersPercent"
53+
54+let z = "k_maxOracleDelay"
55+
56+let A = "k_lastDataStr"
57+
58+let B = "k_lastMinuteId"
59+
60+let C = "k_twapDataLastCumulativePrice"
61+
62+let D = "k_twapDataLastPrice"
63+
64+let E = "k_twapDataPreviousMinuteId"
65+
66+let F = "k_latestLongPremiumFraction"
67+
68+let G = "k_latestShortPremiumFraction"
69+
70+let H = "k_nextFundingBlockMinTimestamp"
71+
72+let I = "k_longFundingRate"
73+
74+let J = "k_shortFundingRate"
75+
76+let K = "k_qtAstR"
77+
78+let L = "k_bsAstR"
79+
80+let M = "k_qtAstW"
81+
82+let N = "k_bsAstW"
83+
84+let O = "k_totalPositionSize"
85+
86+let P = "k_totalLongPositionSize"
87+
88+let Q = "k_totalShortPositionSize"
89+
90+let R = "k_openInterestNotional"
91+
92+let S = "k_openInterestShort"
93+
94+let T = "k_openInterestLong"
95+
96+let U = "k_coordinatorAddress"
97+
98+let V = "k_vault_address"
99+
100+let W = "k_admin_address"
101+
102+let X = "k_admin_public_key"
103+
104+let Y = "k_quote_asset"
105+
106+let Z = "k_quote_staking"
107+
108+let aa = "k_staking_address"
109+
110+let ab = "k_miner_address"
111+
112+let ac = "k_orders_address"
113+
114+let ad = "k_referral_address"
115+
116+let ae = "k_collateral_address"
117+
118+let af = "k_exchange_address"
119+
120+let ag = "k_nft_manager_address"
121+
122+let ah = "k_trader_market_asset_collateral"
123+
124+func ai (aj,ak) = ((aj + "_") + ak)
125+
126+
127+func al () = valueOrErrorMessage(addressFromString(getStringValue(this, U)), "Coordinator not set")
128+
129+
130+func am () = addressFromString(getStringValue(al(), W))
131+
132+
133+func an () = fromBase58String(getStringValue(al(), X))
134+
135+
136+func ao () = fromBase58String(getStringValue(al(), Y))
137+
138+
139+func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), Z)), "Quote asset staking not set")
140+
141+
142+func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), aa)), "Staking not set")
143+
144+
145+func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), V)), "Vault not set")
146+
147+
148+func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Miner not set")
149+
150+
151+func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Orders not set")
152+
153+
154+func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Referral not set")
155+
156+
157+func av () = valueOrErrorMessage(addressFromString(getStringValue(al(), ag)), "NFT Manager not set")
158+
159+
160+func aw () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Collateral Manager not set")
161+
162+
163+func ax () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(al(), af), "No swap address")), "Invalid swap address")
164+
165+
166+let ay = "k_whitelist_asset"
167+
168+func az (aA) = valueOrElse(getBoolean(aw(), ai(ay, aA)), false)
169+
170+
171+let aB = "k_token_param"
172+
173+let aC = "k_token_type"
174+
175+let aD = "fee_reduction"
176+
177+let aE = 1
178+
179+let aF = 2
180+
181+let aG = 15
182+
183+let aH = 15
184+
185+let aI = 1000
186+
187+let aJ = 6
188+
189+let aK = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
190+
191+let aL = (86400 * aK)
192+
193+let aM = 100
194+
195+let aN = 1
196+
197+let aO = 2
198+
199+func aP (aQ) = (toString(aQ) + ",")
200+
201+
202+func aR (aQ,aS) = fraction(aQ, aK, aS, HALFEVEN)
203+
204+
205+func aT (aQ,aS) = fraction(aQ, aS, aK, HALFEVEN)
206+
207+
208+func aU (aQ) = sqrt(aQ, aJ, aJ, HALFEVEN)
209+
210+
211+func aV (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
212+
213+
214+func aW (aQ,aS) = fraction(aQ, toBigInt(aK), aS, HALFEVEN)
215+
216+
217+func aX (aQ,aS) = fraction(aQ, aS, toBigInt(aK), HALFEVEN)
218+
219+
220+func aY (aQ) = sqrtBigInt(aQ, aJ, aJ, HALFEVEN)
221+
222+
223+func aZ (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
224+
225+
226+func ba (aQ) = if ((aQ > 0))
227+ then aQ
228+ else -(aQ)
229+
230+
231+func bb (aQ,aS) = if ((aQ >= aS))
232+ then aQ
233+ else aS
234+
235+
236+func bc (bd) = {
237+ func be (bf,bg) = ((bf + bg) + ",")
238+
239+ let bh = {
240+ let bi = bd
241+ let bj = size(bi)
242+ let bk = ""
243+ func bl (bm,bn) = if ((bn >= bj))
244+ then bm
245+ else be(bm, bi[bn])
246+
247+ func bo (bm,bn) = if ((bn >= bj))
248+ then bm
245249 else throw("List size exceeds 20")
246250
247- bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
251+ 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)
248252 }
249- let bn = dropRight(bf, 1)
250- let bo = if ((take(bn, 1) == ","))
251- then drop(bn, 1)
252- else bn
253- bo
254- }
255-
256-
257-func bp (bq) = split(bq, ",")
258-
259-
260-func br (bb,bs,bt) = if ((size(bb) > bs))
261- then (removeByIndex(bb, 0) :+ bt)
262- else (bb :+ bt)
263-
264-
265-func bu (bv) = valueOrErrorMessage(getInteger(this, bv), ("no value for " + bv))
266-
267-
268-func bw (bv,bx) = valueOrElse(getInteger(this, bv), bx)
269-
270-
271-func by (ai,ah) = {
272- let be = valueOrErrorMessage(getString(ai, ah), ("No value for key " + ah))
273- be
274- }
275-
276-
277-func bz (ai,ah) = {
278- let be = valueOrErrorMessage(getInteger(ai, ah), ("No value for key " + ah))
279- be
280- }
281-
282-
283-func bA () = bu(d)
284-
285-
286-func bB () = bu(o)
287-
288-
289-func bC () = bu(q)
290-
291-
292-func bD () = bu(I)
293-
294-
295-func bE () = bu(J)
296-
297-
298-func bF () = bw(K, aI)
299-
300-
301-func bG () = bw(L, aI)
302-
303-
304-func bH () = bu(M)
305-
306-
307-func bI () = bu(P)
308-
309-
310-func bJ () = bu(Q)
311-
312-
313-func bK () = bu(R)
314-
315-
316-func bL () = bu(F)
317-
318-
319-func bM () = bu(p)
320-
321-
322-func bN () = (bM() * aI)
323-
324-
325-func bO () = (bM() * aG)
326-
327-
328-func bP () = bu(r)
329-
330-
331-func bQ () = bu(s)
332-
333-
334-func bR () = bu(t)
335-
336-
337-func bS () = bu(u)
338-
339-
340-func bT () = bu(v)
341-
342-
343-func bU () = bu(w)
344-
345-
346-func bV () = bu(x)
347-
348-
349-func bW () = bu(D)
350-
351-
352-func bX () = bu(E)
353-
354-
355-func bY () = bu(O)
356-
357-
358-func bZ () = bu(N)
359-
360-
361-func ca () = bw(e, 0)
362-
363-
364-func cb (cc) = valueOrElse(getString(ar(), "k_sender"), toString(cc.caller))
365-
366-
367-func cd (ce,cf,cg) = {
368- let ch = (ce - cf)
369- if (if (cg)
370- then (0 > ch)
253+ let bp = dropRight(bh, 1)
254+ let bq = if ((take(bp, 1) == ","))
255+ then drop(bp, 1)
256+ else bp
257+ bq
258+ }
259+
260+
261+func br (bs) = split(bs, ",")
262+
263+
264+func bt (bd,bu,bv) = if ((size(bd) > bu))
265+ then (removeByIndex(bd, 0) :+ bv)
266+ else (bd :+ bv)
267+
268+
269+func bw (bx) = valueOrErrorMessage(getInteger(this, bx), ("no value for " + bx))
270+
271+
272+func by (bx,bz) = valueOrElse(getInteger(this, bx), bz)
273+
274+
275+func bA (ak,aj) = {
276+ let bg = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
277+ bg
278+ }
279+
280+
281+func bB (ak,aj) = {
282+ let bg = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
283+ bg
284+ }
285+
286+
287+func bC () = bw(d)
288+
289+
290+func bD () = bw(o)
291+
292+
293+func bE () = bw(q)
294+
295+
296+func bF () = bw(K)
297+
298+
299+func bG () = bw(L)
300+
301+
302+func bH () = by(M, aK)
303+
304+
305+func bI () = by(N, aK)
306+
307+
308+func bJ () = bw(O)
309+
310+
311+func bK () = bw(R)
312+
313+
314+func bL () = bw(S)
315+
316+
317+func bM () = bw(T)
318+
319+
320+func bN () = bw(H)
321+
322+
323+func bO () = bw(p)
324+
325+
326+func bP () = (bO() * aK)
327+
328+
329+func bQ () = (bO() * aI)
330+
331+
332+func bR () = bw(r)
333+
334+
335+func bS () = bw(s)
336+
337+
338+func bT () = bw(t)
339+
340+
341+func bU () = bw(u)
342+
343+
344+func bV () = bw(v)
345+
346+
347+func bW () = bw(w)
348+
349+
350+func bX () = bw(x)
351+
352+
353+func bY () = bw(F)
354+
355+
356+func bZ () = bw(G)
357+
358+
359+func ca () = bw(Q)
360+
361+
362+func cb () = bw(P)
363+
364+
365+func cc () = by(e, 0)
366+
367+
368+func cd () = bw(y)
369+
370+
371+func ce () = bw(z)
372+
373+
374+func cf (cg) = valueOrElse(getString(at(), "k_sender"), toString(cg.caller))
375+
376+
377+func ch (ci,cj,ck) = {
378+ let cl = (ci - cj)
379+ if (if (ck)
380+ then (0 > cl)
371381 else false)
372382 then throw("Invalid margin")
373- else if (if (!(cg))
374- then (ch >= 0)
383+ else if (if (!(ck))
384+ then (cl >= 0)
375385 else false)
376386 then throw("Invalid margin")
377387 else true
378388 }
379389
380390
381-func ci (cj) = if ((cj == 0))
391+func cm (cn) = if ((cn == 0))
382392 then throw("Should not be called with _positionSize == 0")
383- else if ((cj > 0))
384- then bW()
385- else bX()
386-
387-
388-func ck (cl) = {
389- let cm = getInteger(this, ag(f, cl))
390- let cn = cm
391- if ($isInstanceOf(cn, "Int"))
393+ else if ((cn > 0))
394+ then bY()
395+ else bZ()
396+
397+
398+func co (cp) = {
399+ let cq = getInteger(this, ai(f, cp))
400+ let cr = cq
401+ if ($isInstanceOf(cr, "Int"))
392402 then {
393- let co = cn
394- $Tuple4(co, getIntegerValue(this, ag(g, cl)), getIntegerValue(this, ag(h, cl)), getIntegerValue(this, ag(i, cl)))
403+ let cs = cr
404+ $Tuple4(cs, getIntegerValue(this, ai(g, cp)), getIntegerValue(this, ai(h, cp)), getIntegerValue(this, ai(i, cp)))
395405 }
396406 else $Tuple4(0, 0, 0, 0)
397407 }
398408
399409
400-func cp (cl) = {
401- let cq = getString(this, ag(k, cl))
402- let cn = cq
403- if ($isInstanceOf(cn, "String"))
410+func ct (cp) = {
411+ let cu = getString(this, ai(k, cp))
412+ let cr = cu
413+ if ($isInstanceOf(cr, "String"))
404414 then {
405- let cr = cn
406- cr
407- }
408- else toBase58String(am())
409- }
410-
411-
412-func cs (cl) = if ((ck(cl)._1 == 0))
415+ let cv = cr
416+ cv
417+ }
418+ else toBase58String(ao())
419+ }
420+
421+
422+func cw (cp) = if ((co(cp)._1 == 0))
413423 then throw("No open position")
414424 else true
415425
416426
417-func ct () = valueOrElse(getBoolean(this, l), false)
418-
419-
420-func cu () = valueOrElse(getBoolean(this, m), false)
421-
422-
423-func cv () = valueOrElse(getBoolean(this, n), false)
424-
425-
426-func cw (cx,cy,cz) = if (cx)
427+func cx () = valueOrElse(getBoolean(this, l), false)
428+
429+
430+func cy () = valueOrElse(getBoolean(this, m), false)
431+
432+
433+func cz () = valueOrElse(getBoolean(this, n), false)
434+
435+
436+func cA (cB,cC,cD) = if (cB)
427437 then {
428- let cA = (bE() - cz)
429- if ((0 >= cA))
438+ let cE = (bG() - cD)
439+ if ((0 >= cE))
430440 then throw("Tx lead to base asset reserve <= 0, revert")
431- else $Tuple3((bD() + cy), cA, (bH() + cz))
441+ else $Tuple3((bF() + cC), cE, (bJ() + cD))
432442 }
433443 else {
434- let cB = (bD() - cy)
435- if ((0 >= cB))
444+ let cF = (bF() - cC)
445+ if ((0 >= cF))
436446 then throw("Tx lead to base quote reserve <= 0, revert")
437- else $Tuple3(cB, (bE() + cz), (bH() - cz))
447+ else $Tuple3(cF, (bG() + cD), (bJ() - cD))
438448 }
439449
440450
441-func cC (cD,cE,cF,cG) = {
442- let cH = toBigInt(cD)
443- let cI = toBigInt(cE)
444- let cJ = toBigInt(cF)
445- let cK = toBigInt(cG)
446- aV(aV(cH, cI), aV(cJ, cK))
447- }
448-
449-
450-func cL (cx,cy) = {
451- let cD = bD()
452- let cF = bE()
453- let cE = bF()
454- let cG = bG()
455- let bv = cC(cD, cE, cF, cG)
456- let cM = if (cx)
457- then (cD + cy)
458- else (cD - cy)
459- let cN = toInt(aU(bv, toBigInt(aR(cM, cE))))
460- let cO = aP(aY((cN - cF)), cE)
461- let cP = if (cx)
462- then cO
463- else -(cO)
464- let cQ = cw(cx, cy, cO)
465- let cR = cQ._1
466- let cS = cQ._2
467- let cT = cQ._3
468- let cU = aP(aR(cD, cE), aR(cF, cG))
469- let cV = aP(cy, cO)
470- let cW = aY((cU - cV))
471- let cX = (aI - aP(cU, (cU + cW)))
472- let cY = bT()
473- if ((cX > cY))
474- then throw(((((((((((((("Price impact " + toString(cX)) + " > max price impact ") + toString(cY)) + " before quote asset: ") + toString(cD)) + " before base asset: ") + toString(cF)) + " quote asset amount to exchange: ") + toString(cy)) + " price before: ") + toString(cU)) + " marketPrice: ") + toString(cV)))
475- else $Tuple4(cP, cR, cS, cT)
476- }
477-
478-
479-func cZ (da,db,dc,dd) = {
480- let de = if ((da != 0))
451+func cG (cH,cI,cJ,cK) = {
452+ let cL = toBigInt(cH)
453+ let cM = toBigInt(cI)
454+ let cN = toBigInt(cJ)
455+ let cO = toBigInt(cK)
456+ aX(aX(cL, cM), aX(cN, cO))
457+ }
458+
459+
460+func cP (cB,cC) = {
461+ let cH = bF()
462+ let cJ = bG()
463+ let cI = bH()
464+ let cK = bI()
465+ let bx = cG(cH, cI, cJ, cK)
466+ let cQ = if (cB)
467+ then (cH + cC)
468+ else (cH - cC)
469+ let cR = toInt(aW(bx, toBigInt(aT(cQ, cI))))
470+ let cS = aR(ba((cR - cJ)), cI)
471+ let cT = if (cB)
472+ then cS
473+ else -(cS)
474+ let cU = cA(cB, cC, cS)
475+ let cV = cU._1
476+ let cW = cU._2
477+ let cX = cU._3
478+ let cY = aR(aT(cH, cI), aT(cJ, cK))
479+ let cZ = aR(cC, cS)
480+ let da = ba((cY - cZ))
481+ let db = (aK - aR(cY, (cY + da)))
482+ let dc = bV()
483+ if ((db > dc))
484+ 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)))
485+ else $Tuple4(cT, cV, cW, cX)
486+ }
487+
488+
489+func dd (de,df,dg,dh) = {
490+ let di = if ((de != 0))
481491 then {
482- let df = ci(da)
483- aR((df - dc), da)
492+ let dj = cm(de)
493+ aT((dj - dg), de)
484494 }
485495 else 0
486- let dg = ((dd - de) + db)
487- let dh = if ((0 > dg))
488- then $Tuple2(0, aY(dg))
489- else $Tuple2(aY(dg), 0)
490- let di = dh._1
491- let dj = dh._2
492- $Tuple3(di, dj, de)
493- }
494-
495-
496-func dk (cx,cz,dl,dm,dn,do,dp) = {
497- let cU = aP(aR(dm, dn), aR(do, dp))
498- if ((cz == 0))
496+ let dk = ((dh - di) + df)
497+ let dl = if ((0 > dk))
498+ then $Tuple2(0, ba(dk))
499+ else $Tuple2(ba(dk), 0)
500+ let dm = dl._1
501+ let dn = dl._2
502+ $Tuple3(dm, dn, di)
503+ }
504+
505+
506+func do (cB,cD,dp,dq,dr,ds,dt) = {
507+ let cY = aR(aT(dq, dr), aT(ds, dt))
508+ if ((cD == 0))
499509 then throw("Invalid base asset amount")
500510 else {
501- let bv = cC(dm, dn, do, dp)
502- let dq = if (cx)
503- then (do + cz)
504- else (do - cz)
505- let dr = toInt(aU(bv, toBigInt(aR(dq, dp))))
506- let ds = aY((dr - aR(dm, dn)))
507- let cY = bT()
508- let dt = cw(!(cx), ds, cz)
509- let cR = dt._1
510- let cS = dt._2
511- let cT = dt._3
512- let cV = aP(ds, cz)
513- let cW = aY((cU - cV))
514- let cX = (aI - aP(cU, (cU + cW)))
515- if (if ((cX > cY))
516- then dl
511+ let bx = cG(dq, dr, ds, dt)
512+ let du = if (cB)
513+ then (ds + cD)
514+ else (ds - cD)
515+ let dv = toInt(aW(bx, toBigInt(aT(du, dt))))
516+ let dw = ba((dv - aT(dq, dr)))
517+ let dc = bV()
518+ let dx = cA(!(cB), dw, cD)
519+ let cV = dx._1
520+ let cW = dx._2
521+ let cX = dx._3
522+ let cZ = aR(dw, cD)
523+ let da = ba((cY - cZ))
524+ let db = (aK - aR(cY, (cY + da)))
525+ if (if ((db > dc))
526+ then dp
517527 else false)
518- then throw(((((((((((((("Price impact " + toString(cX)) + " > max price impact ") + toString(cY)) + " before quote asset: ") + toString(dm)) + " before base asset: ") + toString(do)) + " base asset amount to exchange: ") + toString(cz)) + " price before: ") + toString(cU)) + " market price: ") + toString(cV)))
519- else $Tuple7(ds, cR, cS, cT, (bZ() - (if (cx)
520- then aY(cz)
521- else 0)), (bY() - (if (!(cx))
522- then aY(cz)
523- else 0)), cX)
524- }
525- }
526-
527-
528-func du (cx,cz,dl) = dk(cx, cz, dl, bD(), bF(), bE(), bG())
529-
530-
531-func dv () = {
532- let dw = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
533- let dx = getStringValue(this, a)
534- let dy = getStringValue(this, b)
535- let dz = valueOrErrorMessage(getInteger(dw, dx), ((("Can not get oracle price. Oracle: " + toString(dw)) + " key: ") + dx))
536- dz
537- }
538-
539-
540-func dA (dm,do) = {
541- let dB = dv()
542- let dC = aP(dm, do)
543- let dD = aP((dB + dC), (2 * aI))
544- let dE = aP(aY((dB - dC)), dD)
545- if ((dE > bU()))
546- then throw(((("Price spread " + toString(dE)) + " > max price spread ") + toString(bU())))
528+ 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)))
529+ else $Tuple7(dw, cV, cW, cX, (cb() - (if (cB)
530+ then ba(cD)
531+ else 0)), (ca() - (if (!(cB))
532+ then ba(cD)
533+ else 0)), db)
534+ }
535+ }
536+
537+
538+func dy (cB,cD,dp) = do(cB, cD, dp, bF(), bH(), bG(), bI())
539+
540+
541+func dz () = {
542+ let dA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
543+ let dB = getStringValue(this, a)
544+ let dC = valueOrErrorMessage(getInteger(dA, dB), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + dB))
545+ let dD = valueOrElse(getString(this, b), "")
546+ if ((dD != ""))
547+ then {
548+ let dE = lastBlock.height
549+ let dF = valueOrErrorMessage(getInteger(dA, b), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + dD))
550+ if (((dE - dF) > ce()))
551+ then throw(((("Oracle stale data. Last oracle block: " + toString(dF)) + " current block: ") + toString(dE)))
552+ else dC
553+ }
554+ else dC
555+ }
556+
557+
558+func dG (dq,ds) = {
559+ let dH = dz()
560+ let cI = bH()
561+ 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())))
547567 else true
548568 }
549569
550570
551-func dF (dG,dH) = {
552- let dI = bV()
553- if ((dG > dI))
554- then throw(((("Long open notional " + toString(dG)) + " > max open notional ") + toString(dI)))
555- else if ((dH > dI))
556- then throw(((("Short open notional " + toString(dH)) + " > max open notional ") + toString(dI)))
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)))
557577 else true
558578 }
559579
560580
561-func dJ () = {
562- let dm = bD()
563- let do = bE()
564- let cE = bF()
565- let cG = bG()
566- aP(aR(dm, cE), aR(do, cG))
567- }
568-
569-
570-func dK () = {
571- let dB = dv()
572- let dL = dJ()
573- (aP(aY((dB - dL)), dB) > bS())
574- }
575-
576-
577-func dM (cj,dN,dm,dn,do,dp) = {
578- let dO = aY(cj)
579- let dP = (0 > cj)
580- let dQ = if ((dN == aL))
581+func dP () = {
582+ let dq = bF()
583+ let ds = bG()
584+ let cI = bH()
585+ let cK = bI()
586+ aR(aT(dq, cI), aT(ds, cK))
587+ }
588+
589+
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))
581601 then {
582- let dR = dk(!(dP), dO, false, dm, dn, do, dp)
583- let dS = dR._1
584- let dT = dR._2
585- let dU = dR._3
586- let dV = dR._4
587- dS
588- }
589- else aR(dO, dv())
590- dQ
591- }
592-
593-
594-func dW (cj,dX,dm,dn,do,dp,dN) = if ((cj == 0))
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))
595615 then throw("Invalid position size")
596616 else {
597- let dP = (0 > cj)
598- let dQ = dM(cj, dN, dm, dn, do, dp)
599- let dY = if (dP)
600- then (dX - dQ)
601- else (dQ - dX)
602- $Tuple2(dQ, dY)
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)
603623 }
604624
605625
606-func dZ (cl,dN) = {
607- let ea = ck(cl)
608- let co = ea._1
609- let eb = ea._2
610- let ec = ea._3
611- let ed = ea._4
612- dW(co, ec, bD(), bF(), bE(), bG(), dN)
613- }
614-
615-
616-func ee (ef,eg,eh) = aP((ef - eg), eh)
617-
618-
619-func ei (cl,dN) = {
620- let ej = ck(cl)
621- let co = ej._1
622- let eb = ej._2
623- let ek = ej._3
624- let ed = ej._4
625- let el = dZ(cl, dN)
626- let dQ = el._1
627- let dY = el._2
628- let em = cZ(co, eb, ed, dY)
629- let di = em._1
630- let dj = em._2
631- ee(di, dj, dQ)
632- }
633-
634-
635-func en (cl) = ei(cl, aL)
636-
637-
638-func eo (cl,cj) = {
639- let ep = aZ(bR(), (aI - aP(en(cl), bP())))
640- let eq = aR(aY(cj), ep)
641- let er = du((cj > 0), eq, false)
642- let es = er._1
643- let cX = er._7
644- if ((bT() > cX))
645- then es
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
664+ if ((bV() > db))
665+ then ey
646666 else {
647- let et = aR(aY(cj), bR())
648- let eu = du((cj > 0), et, false)._1
649- eu
650- }
651- }
652-
653-
654-func ev (cl,dl) = {
655- let ew = ck(cl)
656- let co = ew._1
657- let eb = ew._2
658- let ec = ew._3
659- let ed = ew._4
660- let dY = dZ(cl, aL)._2
661- let ex = cZ(co, eb, ed, dY)
662- let di = ex._1
663- let dj = ex._2
664- let et = -(co)
665- let ey = dY
666- let ez = -(di)
667- let eA = du((co > 0), aY(co), dl)
668- let eu = eA._1
669- let cM = eA._2
670- let cN = eA._3
671- let eB = eA._4
672- let eC = eA._5
673- let eD = eA._6
674- let eE = (bI() - ec)
675- $Tuple13(et, dj, ey, ez, cM, cN, eB, eE, eu, eC, eD, (bK() - (if ((co > 0))
676- then ec
677- else 0)), (bJ() - (if ((0 > co))
678- then ec
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
697+ else 0)), (bL() - (if ((0 > cs))
698+ then ei
679699 else 0)))
680700 }
681701
682702
683-func eF () = {
684- let eG = ((lastBlock.timestamp / 1000) / 60)
685- let eH = (eG - aE)
686- let eI = valueOrElse(getString(this, y), "")
687- let eJ = split(eI, ",")
688- func eK (bd,eL) = if ((eH >= parseIntValue(eL)))
689- then (bd :+ parseIntValue(eL))
690- else bd
691-
692- let eM = {
693- let bg = eJ
694- let bh = size(bg)
695- let bi = nil
696- func bj (bk,bl) = if ((bl >= bh))
697- then bk
698- else eK(bk, bg[bl])
699-
700- func bm (bk,bl) = if ((bl >= bh))
701- then bk
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))
710+ else bf
711+
712+ let eS = {
713+ let bi = eP
714+ let bj = size(bi)
715+ let bk = nil
716+ func bl (bm,bn) = if ((bn >= bj))
717+ then bm
718+ else eQ(bm, bi[bn])
719+
720+ func bo (bm,bn) = if ((bn >= bj))
721+ then bm
702722 else throw("List size exceeds 20")
703723
704- bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
724+ 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)
705725 }
706- let eN = if ((size(eM) > 0))
707- then max(eM)
708- else parseIntValue(eJ[0])
709- let eO = valueOrElse(getInteger(this, z), 0)
710- let eP = valueOrElse(getInteger(this, ((A + "_") + toString(eO))), 0)
711- let eQ = valueOrElse(getInteger(this, ((B + "_") + toString(eO))), 0)
712- let eR = (eP + ((eG - eO) * eQ))
713- let eS = valueOrElse(getInteger(this, ((A + "_") + toString(eN))), 0)
714- let eT = valueOrElse(getInteger(this, ((B + "_") + toString(eN))), 0)
715- let eU = (eS + ((eH - eN) * eT))
716- ((eR - eU) / aE)
717- }
718-
719-
720-func eV () = {
721- let cj = bH()
722- if ((cj == 0))
723- then $Tuple2(bD(), bE())
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 () = {
741+ let cn = bJ()
742+ if ((cn == 0))
743+ then $Tuple2(bF(), bG())
724744 else {
725- let eW = (cj > 0)
726- let eX = du(eW, aY(cj), false)
727- let eY = eX._1
728- let eZ = eX._2
729- let fa = eX._3
730- $Tuple2(eZ, fa)
731- }
732- }
733-
734-
735-func fb (fc,bH,fd,fe) = {
736- let ff = toBigInt(fc)
737- let fg = toBigInt(bH)
738- let fh = toBigInt(fd)
739- let fi = toBigInt(fe)
740- let fj = aX((ff + fg), toBigInt((2 * aI)))
741- let fk = aV(fh, fj)
742- let fl = (toBigInt(4) * aV(fi, fg))
743- let fm = aW(aV(fk, (fh - fl)))
744- let fn = aV(ff, fh)
745- let fo = aV(fh, fg)
746- let fp = ((-(fm) + fn) + fo)
747- let fq = (toBigInt(2) * aV(fh, fg))
748- let fr = aU(fp, fq)
749- toInt(fr)
750- }
751-
752-
753-func fs (ft) = {
754- let cj = bH()
755- if ((cj == 0))
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) = {
774+ let cn = bJ()
775+ if ((cn == 0))
756776 then {
757- let cD = bD()
758- let cF = bE()
759- let fu = aP(aR(ft, cF), cD)
760- $Tuple3(fu, aI, 0)
777+ let cH = bF()
778+ let cJ = bG()
779+ let fA = aR(aT(fz, cJ), cH)
780+ $Tuple3(fA, aK, 0)
761781 }
762782 else {
763- let eW = (cj > 0)
764- let eY = du(eW, aY(cj), false)._1
765- let cD = bD()
766- let cF = bE()
767- let fu = fb(cF, cj, cD, ft)
768- let fv = aI
769- let ez = dW(cj, eY, cD, fu, cF, fv, aL)._2
770- $Tuple3(fu, fv, ez)
771- }
772- }
773-
774-
775-func fw () = {
776- let fx = dv()
777- let fy = eF()
778- let fz = (fy - fx)
779- if (if ((bY() == 0))
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)
799+ if (if ((ca() == 0))
780800 then true
781- else (bZ() == 0))
801+ else (cb() == 0))
782802 then $Tuple2(0, 0)
783- else if ((0 > fz))
803+ else if ((0 > fF))
784804 then {
785- let fA = aP(aR(fz, bN()), aJ)
786- let fB = aP(aR(fA, bY()), bZ())
787- $Tuple2(fA, fB)
805+ let fG = aR(aT(fF, bP()), aL)
806+ let fH = aR(aT(fG, ca()), cb())
807+ $Tuple2(fG, fH)
788808 }
789809 else {
790- let fB = aP(aR(fz, bN()), aJ)
791- let fA = aP(aR(fB, bZ()), bY())
792- $Tuple2(fA, fB)
810+ let fH = aR(aT(fF, bP()), aL)
811+ let fG = aR(aT(fH, cb()), ca())
812+ $Tuple2(fG, fH)
793813 }
794814 }
795815
796816
797-func fC (fD,fE) = {
798- let fF = bB()
799- let fG = aR(fF, fE)
800- let fH = if ((fD != ""))
817+func fI (fJ,fK) = {
818+ let fL = bD()
819+ let fM = aT(fL, fK)
820+ let fN = if ((fJ != ""))
801821 then {
802- let fI = by(at(), ag(aA, fD))
803- if ((fI == aB))
822+ let fO = bA(av(), ai(aC, fJ))
823+ if ((fO == aD))
804824 then {
805- let fJ = bz(at(), ag(az, fD))
806- let fK = aR(fG, fJ)
807- $Tuple2(fK, true)
825+ let fP = bB(av(), ai(aB, fJ))
826+ let fQ = aT(fM, fP)
827+ $Tuple2(fQ, true)
808828 }
809829 else throw("Invalid attached artifact")
810830 }
811- else $Tuple2(fG, false)
812- let fK = fH._1
813- let fL = fH._2
814- $Tuple2(fK, fL)
815- }
816-
817-
818-func fM (fN,fO,fP,fQ,fR,fS,fT,fU,fV,dI) = [IntegerEntry(q, fN), IntegerEntry(r, fO), IntegerEntry(s, fP), IntegerEntry(p, fQ), IntegerEntry(o, fR), IntegerEntry(u, fS), IntegerEntry(v, fT), IntegerEntry(t, fU), IntegerEntry(w, fV), IntegerEntry(x, dI)]
819-
820-
821-func fW (fX,fY,fZ,ga,gb) = [IntegerEntry(F, fX), IntegerEntry(D, fY), IntegerEntry(E, fZ), IntegerEntry(G, ga), IntegerEntry(H, gb)]
822-
823-
824-func gc (ai,ay) = [StringEntry(ag(k, ai), ay)]
825-
826-
827-func gd (ge,ai) = if (ge)
828- then {
829- let gf = ca()
830-[IntegerEntry(ag(j, ai), (gf + 1)), IntegerEntry(e, (gf + 1))]
831- }
832- else nil
833-
834-
835-func gg (ai,gh,gi,gj,df) = [IntegerEntry(ag(f, ai), gh), IntegerEntry(ag(g, ai), gi), IntegerEntry(ag(h, ai), gj), IntegerEntry(ag(i, ai), df)]
836-
837-
838-func gk (gl) = {
839- let eG = ((lastBlock.timestamp / 1000) / 60)
840- let gm = valueOrElse(getInteger(this, z), 0)
841- if ((gm > eG))
842- then throw("TWAP out-of-order")
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))
841+ then true
842+ else (ct(cp) == aA)
843+ }
844+
845+
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) = {
853+ let cv = ct(cp)
854+ if ((cv == toBase58String(ao())))
855+ then $Tuple2(0, cv)
843856 else {
844- let eO = if ((gm == 0))
845- then eG
846- else gm
847- if ((eG > gm))
848- then {
849- let gn = valueOrElse(getInteger(this, ((A + "_") + toString(gm))), 0)
850- let go = valueOrElse(getInteger(this, ((B + "_") + toString(gm))), gl)
851- let gp = (gn + ((eG - eO) * go))
852- let eJ = br(bp(valueOrElse(getString(this, y), "")), aE, toString(eG))
853-[IntegerEntry(ag(A, toString(eG)), gp), IntegerEntry(ag(B, toString(eG)), gl), IntegerEntry(ag(C, toString(eG)), gm), IntegerEntry(z, eG), StringEntry(y, ba(eJ))]
854- }
855- else {
856- let gq = valueOrElse(getInteger(this, ag(C, toString(eG))), 0)
857- let gn = valueOrElse(getInteger(this, ag(A, toString(gq))), 0)
858- let go = valueOrElse(getInteger(this, ag(B, toString(gq))), gl)
859- let gp = (gn + ((eG - gq) * go))
860-[IntegerEntry(ag(A, toString(eG)), gp), IntegerEntry(ag(B, toString(eG)), gl)]
861- }
862- }
863- }
864-
865-
866-func gr (cD,cF) = [IntegerEntry(I, cD), IntegerEntry(J, cF)]
867-
868-
869-func gs (cE,cG) = [IntegerEntry(K, cE), IntegerEntry(L, cG)]
870-
871-
872-func gt (cD,cF,gu,gv,gw,gx,gy,gz) = {
873- let cE = bF()
874- let cG = bG()
875- if (((gw - gx) != gu))
876- then throw(((((("Invalid AMM state data: " + toString(gw)) + " + ") + toString(gx)) + " != ") + toString(gu)))
877- else ((gr(cD, cF) ++ [IntegerEntry(M, gu), IntegerEntry(P, gv), IntegerEntry(N, gw), IntegerEntry(O, gx), IntegerEntry(R, gy), IntegerEntry(Q, gz)]) ++ gk(aP(aR(cD, cE), aR(cF, cG))))
878- }
879-
880-
881-func gA (ai) = [DeleteEntry(ag(f, ai)), DeleteEntry(ag(g, ai)), DeleteEntry(ag(h, ai)), DeleteEntry(ag(i, ai)), DeleteEntry(ag(k, ai))]
882-
883-
884-func gB (ai,gC) = {
885- let gD = assetBalance(this, am())
886- if ((gC > gD))
887- then throw(((("Unable to withdraw " + toString(gC)) + " from contract balance ") + toString(gD)))
888- else [ScriptTransfer(ai, gC, am())]
889- }
890-
891-
892-func gE (cc) = if ((0 > cc))
893- then throw("Balance")
894- else [IntegerEntry(d, cc)]
895-
896-
897-func gF (cc) = [ScriptTransfer(ao(), cc, am())]
898-
899-
900-func gG (gH,cc) = if (gH)
901- then [Burn(valueOrErrorMessage(cc.payments[1].assetId, "Invalid artifact"), 1)]
902- else nil
903-
904-
905-func gI (cl,ay) = {
906- let gJ = ck(cl)._1
907- if ((gJ == 0))
908- then true
909- else (cp(cl) == ay)
910- }
911-
912-
913-func gK (cl,ay) = (cp(cl) == ay)
914-
915-
916-func gL (gM,ay,cl) = ((((((af + "_") + gM) + "_") + ay) + "_") + cl)
917-
918-
919-func gN (cl) = {
920- let cr = cp(cl)
921- if ((cr == toBase58String(am())))
922- then $Tuple2(0, cr)
923- else {
924- let gO = gL(toString(this), cr, cl)
925- let gP = valueOrElse(getInteger(au(), gO), 0)
926- $Tuple2(gP, cr)
927- }
928- }
929-
930-
931-func gQ (cl,fD) = {
932- let gR = invoke(aq(), "computeFeeDiscount", [cl], nil)
933- if ((gR == gR))
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))
934867 then {
935- let gS = {
936- let cn = gR
937- if ($isInstanceOf(cn, "Int"))
868+ let gc = {
869+ let cr = gb
870+ if ($isInstanceOf(cr, "Int"))
938871 then {
939- let gT = cn
940- gT
872+ let gd = cr
873+ gd
941874 }
942875 else throw("Invalid computeFeeDiscount result")
943876 }
944- let gU = fC(fD, gS)
945- let fK = gU._1
946- let fL = gU._2
947- $Tuple2(fK, fL)
877+ let ge = fI(fJ, gc)
878+ let fQ = ge._1
879+ let fR = ge._2
880+ $Tuple2(fQ, fR)
948881 }
949882 else throw("Strict value is not equal to itself.")
950883 }
951884
952885
953-func gV (cc) = {
954- let gW = if ((size(cc.payments) > 1))
955- then toBase58String(valueOrErrorMessage(cc.payments[1].assetId, "Invalid artifactId"))
886+func gf (cg) = {
887+ let gg = if ((size(cg.payments) > 1))
888+ then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
956889 else ""
957- gW
958- }
959-
960-
961-@Callable(cc)
962-func pause () = if ((cc.caller != ak()))
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)
911+ then {
912+ let gG = cc()
913+[IntegerEntry(ai(j, ak), (gG + 1)), IntegerEntry(e, (gG + 1))]
914+ }
915+ else nil
916+
917+
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))
925+ then throw("TWAP out-of-order")
926+ else {
927+ let eU = if ((gN == 0))
928+ then eM
929+ else gN
930+ if ((eM > gN))
931+ 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+ }
938+ 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+ }
945+ }
946+ }
947+
948+
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) = {
956+ let cI = bH()
957+ 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))
976+ then throw("Balance")
977+ else [IntegerEntry(d, cg)]
978+
979+
980+func hg (cg) = [ScriptTransfer(aq(), cg, ao())]
981+
982+
983+func hh (hi,cg) = if (hi)
984+ then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
985+ else nil
986+
987+
988+@Callable(cg)
989+func pause () = if ((cg.caller != am()))
963990 then throw("Invalid pause params")
964991 else [BooleanEntry(m, true)]
965992
966993
967994
968-@Callable(cc)
969-func unpause () = if ((cc.caller != ak()))
995+@Callable(cg)
996+func unpause () = if ((cg.caller != am()))
970997 then throw("Invalid unpause params")
971998 else [BooleanEntry(m, false)]
972999
9731000
9741001
975-@Callable(cc)
976-func setCloseOnly () = if ((cc.caller != ak()))
1002+@Callable(cg)
1003+func setCloseOnly () = if ((cg.caller != am()))
9771004 then throw("Invalid setCloseOnly params")
9781005 else [BooleanEntry(n, true)]
9791006
9801007
9811008
982-@Callable(cc)
983-func unsetCloseOnly () = if ((cc.caller != ak()))
1009+@Callable(cg)
1010+func unsetCloseOnly () = if ((cg.caller != am()))
9841011 then throw("Invalid unsetCloseOnly params")
9851012 else [BooleanEntry(n, false)]
9861013
9871014
9881015
989-@Callable(cc)
990-func addLiquidity (cy) = if (if ((cc.caller != ak()))
1016+@Callable(cg)
1017+func addLiquidity (cC) = if (if ((cg.caller != am()))
9911018 then true
992- else (0 >= cy))
1019+ else (0 >= cC))
9931020 then throw("Invalid addLiquidity params")
9941021 else {
995- let cD = bD()
996- let cF = bE()
997- let cE = bF()
998- let cG = bG()
999- let gl = aP(aR(cD, cE), aR(cF, cG))
1000- let gX = aP(cy, gl)
1001- let gY = (cD + cy)
1002- let gZ = (cF + gX)
1003- gr(gY, gZ)
1022+ let cH = bF()
1023+ let cJ = bG()
1024+ let cI = bH()
1025+ 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)
10041031 }
10051032
10061033
10071034
1008-@Callable(cc)
1009-func removeLiquidity (cy) = if (if ((cc.caller != ak()))
1035+@Callable(cg)
1036+func removeLiquidity (cC) = if (if ((cg.caller != am()))
10101037 then true
1011- else (0 >= cy))
1038+ else (0 >= cC))
10121039 then throw("Invalid removeLiquidity params")
10131040 else {
1014- let cD = bD()
1015- let cF = bE()
1016- let cE = bF()
1017- let cG = bG()
1018- let gl = aP(aR(cD, cE), aR(cF, cG))
1019- let ha = aP(cy, gl)
1020- let gY = (cD - cy)
1021- let gZ = (cF - ha)
1022- gr(gY, gZ)
1041+ let cH = bF()
1042+ let cJ = bG()
1043+ let cI = bH()
1044+ 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)
10231050 }
10241051
10251052
10261053
1027-@Callable(cc)
1028-func changeSettings (fN,fO,fP,fQ,fR,fS,fT,fU,fV,dI) = if ((cc.caller != ak()))
1054+@Callable(cg)
1055+func changeSettings (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = if ((cg.caller != am()))
10291056 then throw("Invalid changeSettings params")
1030- else fM(fN, fO, fP, fQ, fR, fS, fT, fU, fV, dI)
1031-
1032-
1033-
1034-@Callable(cc)
1035-func initialize (cD,cF,fQ,fN,fO,fP,fR,hb,hc,hd,fS,fT,fU,fV,dI) = if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cD))
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))
10361063 then true
1037- else (0 >= cF))
1064+ else (0 >= cJ))
10381065 then true
1039- else (0 >= fQ))
1066+ else (0 >= gp))
10401067 then true
1041- else (0 >= fN))
1068+ else (0 >= gm))
10421069 then true
1043- else (0 >= fO))
1070+ else (0 >= gn))
10441071 then true
1045- else (0 >= fP))
1072+ else (0 >= go))
10461073 then true
1047- else (0 >= fR))
1074+ else (0 >= gq))
10481075 then true
1049- else (0 >= fS))
1076+ else (0 >= gr))
10501077 then true
1051- else (0 >= fT))
1078+ else (0 >= gs))
10521079 then true
1053- else (0 >= fU))
1080+ else (0 >= gt))
10541081 then true
1055- else (0 >= fV))
1082+ else (0 >= gu))
10561083 then true
1057- else (0 >= dI))
1084+ else (0 >= dO))
10581085 then true
1059- else ct())
1086+ else (0 >= gv))
1087+ then true
1088+ else (gv > aK))
1089+ then true
1090+ else (0 >= gw))
1091+ then true
1092+ else cx())
10601093 then throw("Invalid initialize parameters")
1061- else ((((gt(cD, cF, 0, 0, 0, 0, 0, 0) ++ fM(fN, fO, fP, fQ, fR, fS, fT, fU, fV, dI)) ++ fW((lastBlock.timestamp + fQ), 0, 0, 0, 0)) ++ gE(0)) ++ [BooleanEntry(l, true), StringEntry(c, hb), StringEntry(a, hc), StringEntry(S, hd)])
1062-
1063-
1064-
1065-@Callable(cc)
1066-func decreasePosition (gC,he,hf) = {
1067- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1068- if ((hg == hg))
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))
10691102 then {
1070- let cl = cb(cc)
1071- if (if (if (if (if ((0 >= gC))
1072- then true
1073- else !(ct()))
1074- then true
1075- else !(cd(aP(aI, he), bC(), true)))
1076- then true
1077- else !(cs(cl)))
1078- then true
1079- else cu())
1103+ let cp = cf(cg)
1104+ if (if (if (if (if ((0 >= hd))
1105+ then true
1106+ else !(cx()))
1107+ then true
1108+ else !(ch(aR(aK, hs), bE(), true)))
1109+ then true
1110+ else !(cw(cp)))
1111+ then true
1112+ else cy())
10801113 then throw("Invalid decreasePosition parameters")
10811114 else {
1082- let hh = ck(cl)
1083- let gJ = hh._1
1084- let hi = hh._2
1085- let hj = hh._3
1086- let hk = hh._4
1087- let hl = if ((gJ > 0))
1088- then aD
1089- else aC
1090- let hm = (hl == aC)
1091- let hn = aR(gC, he)
1092- let ho = dZ(cl, aL)
1093- let hp = ho._1
1094- let dY = ho._2
1095- let hq = if ((hp > hn))
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))
1121+ then aF
1122+ 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))
10961129 then {
1097- let hr = cL(hm, hn)
1098- let et = hr._1
1099- let cM = hr._2
1100- let cN = hr._3
1101- let eB = hr._4
1102- let hs = aY(et)
1103- if (if ((hf != 0))
1104- then (hf > hs)
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)
11051138 else false)
1106- then throw(((("Too little base asset exchanged, got " + toString(hs)) + " expected ") + toString(hf)))
1139+ then throw(((("Too little base asset exchanged, got " + toString(hG)) + " expected ") + toString(ht)))
11071140 else {
1108- let ey = aP(aR(dY, hs), aY(gJ))
1109- let ht = cZ(gJ, hi, hk, ey)
1110- let di = ht._1
1111- let dj = ht._2
1112- let de = ht._3
1113- let eu = hn
1114- let hu = (dY - ey)
1115- let hv = if ((gJ > 0))
1116- then ((hp - eu) - hu)
1117- else ((hu + hp) - eu)
1118- let hw = (gJ + et)
1119- $Tuple12(hw, di, aY(hv), ci(hw), cN, cM, eB, (bI() - hn), (bZ() - (if ((hw > 0))
1120- then aY(et)
1121- else 0)), (bY() - (if ((0 > hw))
1122- then aY(et)
1123- else 0)), (bK() - (if ((hw > 0))
1124- then hn
1125- else 0)), (bJ() - (if ((0 > hw))
1126- then hn
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
11271160 else 0)))
11281161 }
11291162 }
11301163 else throw("Close position first")
1131- let hw = hq._1
1132- let hx = hq._2
1133- let hy = hq._3
1134- let hz = hq._4
1135- let cN = hq._5
1136- let cM = hq._6
1137- let eB = hq._7
1138- let eE = hq._8
1139- let eC = hq._9
1140- let eD = hq._10
1141- let hA = hq._11
1142- let hB = hq._12
1143- let hC = invoke(aq(), "notifyNotional", [cl, hy], nil)
1144- if ((hC == hC))
1145- then (gg(cl, hw, hx, hy, hz) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB))
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))
11461179 else throw("Strict value is not equal to itself.")
11471180 }
11481181 }
11511184
11521185
11531186
1154-@Callable(cc)
1155-func increasePosition (hl,he,hf,hD) = {
1156- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1157- if ((hg == hg))
1187+@Callable(cg)
1188+func increasePosition (hz,hs,ht,hR) = {
1189+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1190+ if ((hu == hu))
11581191 then {
1159- let cl = cb(cc)
1160- let hE = cc.payments[0].amount
1161- let ay = cc.payments[0].assetId
1162- let hF = toBase58String(value(ay))
1163- let hG = (ay == am())
1164- let hH = ax(hF)
1165- if (if (if (if (if (if (if (if (if ((hl != aC))
1166- then (hl != aD)
1192+ let cp = cf(cg)
1193+ let hS = cg.payments[0].amount
1194+ 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)
11671200 else false)
11681201 then true
1169- else (0 >= hE))
1170- then true
1171- else !(ct()))
1172- then true
1173- else if (!(hG))
1174- then !(hH)
1202+ else (0 >= hS))
1203+ then true
1204+ else !(cx()))
1205+ then true
1206+ else if (!(hU))
1207+ then !(hV)
11751208 else false)
11761209 then true
1177- else !(gI(cl, hF)))
1178- then true
1179- else !(cd(aP(aI, he), bC(), true)))
1180- then true
1181- else cu())
1182- then true
1183- else cv())
1210+ else !(fS(cp, hT)))
1211+ then true
1212+ else !(ch(aR(aK, hs), bE(), true)))
1213+ then true
1214+ else cy())
1215+ then true
1216+ else cz())
11841217 then throw("Invalid increasePosition parameters")
11851218 else {
1186- let hI = gQ(cl, gV(cc))
1187- let fK = hI._1
1188- let fL = hI._2
1189- let hJ = aR(hE, fK)
1190- let gC = (hE - hJ)
1191- let hK = if (hH)
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)
11921225 then {
1193- let hL = invoke(au(), "borrow", [cl], [AttachedPayment(ay, gC)])
1194- if ((hL == hL))
1226+ let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1227+ if ((hZ == hZ))
11951228 then {
1196- let hM = assetBalance(this, am())
1197- if ((hM == hM))
1229+ let ia = assetBalance(this, ao())
1230+ if ((ia == ia))
11981231 then {
1199- let hN = invoke(av(), "swap", [toBase58String(am()), 0], [AttachedPayment(ay, hJ)])
1200- if ((hN == hN))
1232+ let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1233+ if ((ib == ib))
12011234 then {
1202- let hO = assetBalance(this, am())
1203- if ((hO == hO))
1235+ let ic = assetBalance(this, ao())
1236+ if ((ic == ic))
12041237 then {
1205- let hP = (hO - hM)
1206- if ((hP == hP))
1207- then hP
1238+ let id = (ic - ia)
1239+ if ((id == id))
1240+ then id
12081241 else throw("Strict value is not equal to itself.")
12091242 }
12101243 else throw("Strict value is not equal to itself.")
12151248 }
12161249 else throw("Strict value is not equal to itself.")
12171250 }
1218- else hJ
1219- if ((hK == hK))
1251+ else hX
1252+ if ((hY == hY))
12201253 then {
1221- let hQ = invoke(as(), "acceptPaymentWithLink", [cl, hD], [AttachedPayment(am(), hK)])
1222- if ((hQ == hQ))
1254+ let ie = invoke(au(), "acceptPaymentWithLink", [cp, hR], [AttachedPayment(ao(), hY)])
1255+ if ((ie == ie))
12231256 then {
1224- let hR = {
1225- let cn = hQ
1226- if ($isInstanceOf(cn, "Int"))
1257+ let if = {
1258+ let cr = ie
1259+ if ($isInstanceOf(cr, "Int"))
12271260 then {
1228- let gT = cn
1229- gT
1261+ let gd = cr
1262+ gd
12301263 }
12311264 else throw("Invalid referrerFee")
12321265 }
1233- let hS = (hK - hR)
1234- let hT = ck(cl)
1235- let gJ = hT._1
1236- let hi = hT._2
1237- let hj = hT._3
1238- let hk = hT._4
1239- let ge = (gJ == 0)
1240- let hU = if ((gJ > 0))
1241- then (hl == aC)
1242- else (hl == aD)
1243- let hV = if (!(ge))
1244- then hU
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
12451278 else false
1246- let hm = (hl == aC)
1247- let hW = if (if (ge)
1279+ let hA = (hz == aE)
1280+ let ik = if (if (gF)
12481281 then true
1249- else hV)
1282+ else ij)
12501283 then {
1251- let hn = aR(gC, he)
1252- let hX = cL(hm, hn)
1253- let cP = hX._1
1254- let cM = hX._2
1255- let cN = hX._3
1256- let eB = hX._4
1257- if (if ((hf != 0))
1258- then (hf > aY(cP))
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))
12591292 else false)
1260- then throw(((("Limit error: " + toString(aY(cP))) + " < ") + toString(hf)))
1293+ then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(ht)))
12611294 else {
1262- let hw = (gJ + cP)
1263- let hA = (bK() + (if ((hw > 0))
1264- then hn
1295+ let hK = (fT + cT)
1296+ let hO = (bM() + (if ((hK > 0))
1297+ then hB
12651298 else 0))
1266- let hB = (bJ() + (if ((0 > hw))
1267- then hn
1299+ let hP = (bL() + (if ((0 > hK))
1300+ then hB
12681301 else 0))
1269- let hY = aP(hn, he)
1270- let hZ = cZ(gJ, hi, hk, hY)
1271- let di = hZ._1
1272- let dT = hZ._2
1273- let dU = hZ._3
1274- if (!(dA(cM, cN)))
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)))
12751308 then throw("Over max spread limit")
1276- else if (!(dF(hA, hB)))
1309+ else if (!(dL(hO, hP)))
12771310 then throw("Over max open notional")
1278- else $Tuple12(hw, di, (hj + hn), ci(hw), cN, cM, eB, (bI() + hn), (bZ() + (if ((hw > 0))
1279- then aY(cP)
1280- else 0)), (bY() + (if ((0 > hw))
1281- then aY(cP)
1282- else 0)), hA, hB)
1311+ else $Tuple12(hK, dm, (hx + hB), cm(hK), cR, cQ, eH, (bK() + hB), (cb() + (if ((hK > 0))
1312+ then ba(cT)
1313+ else 0)), (ca() + (if ((0 > hK))
1314+ then ba(cT)
1315+ else 0)), hO, hP)
12831316 }
12841317 }
12851318 else {
1286- let hn = aR(gC, he)
1287- let ia = dZ(toString(cc.caller), aL)
1288- let hp = ia._1
1289- let dY = ia._2
1290- if ((hp > hn))
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))
12911324 then throw("Use decreasePosition to decrease position size")
12921325 else throw("Close position first")
12931326 }
1294- let hw = hW._1
1295- let hx = hW._2
1296- let hy = hW._3
1297- let hz = hW._4
1298- let cN = hW._5
1299- let cM = hW._6
1300- let eB = hW._7
1301- let eE = hW._8
1302- let eC = hW._9
1303- let eD = hW._10
1304- let hA = hW._11
1305- let hB = hW._12
1306- let ib = (hS / 2)
1307- let ic = (hS - ib)
1308- let id = invoke(ap(), "addLocked", nil, [AttachedPayment(am(), gC)])
1309- if ((id == id))
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)
13101343 then {
1311- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1312- if ((ie == ie))
1344+ let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1345+ if ((iq == iq))
1346+ then nil
1347+ else throw("Strict value is not equal to itself.")
1348+ }
1349+ else nil
1350+ if ((iq == iq))
1351+ then {
1352+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1353+ if ((ir == ir))
13131354 then {
1314- let if = invoke(aq(), "notifyFees", [cl, hS], nil)
1315- if ((if == if))
1355+ let is = invoke(as(), "notifyFees", [cp, ig], nil)
1356+ if ((is == is))
13161357 then {
1317- let hC = invoke(aq(), "notifyNotional", [cl, hy], nil)
1318- if ((hC == hC))
1319- then ((((((gg(cl, hw, hx, hy, hz) ++ gd(ge, cl)) ++ gc(cl, hF)) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB)) ++ gF(ib)) ++ gE((bA() + gC))) ++ gG(fL, cc))
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))
13201361 else throw("Strict value is not equal to itself.")
13211362 }
13221363 else throw("Strict value is not equal to itself.")
13351376
13361377
13371378
1338-@Callable(cc)
1379+@Callable(cg)
13391380 func addMargin () = {
1340- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1341- if ((hg == hg))
1381+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1382+ if ((hu == hu))
13421383 then {
1343- let cl = toString(cc.caller)
1344- let hE = cc.payments[0].amount
1345- let ay = cc.payments[0].assetId
1346- let hF = toBase58String(value(ay))
1347- let hG = (ay == am())
1348- let hH = ax(hF)
1349- if (if (if (if (if (if (if (!(hG))
1350- then !(hH)
1384+ let cp = toString(cg.caller)
1385+ let hS = cg.payments[0].amount
1386+ 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)
13511392 else false)
13521393 then true
1353- else !(cs(toString(cc.caller))))
1354- then true
1355- else !(gK(cl, hF)))
1356- then true
1357- else !(ct()))
1358- then true
1359- else cu())
1360- then true
1361- else cv())
1394+ else !(cw(toString(cg.caller))))
1395+ then true
1396+ else !(fU(cp, hT)))
1397+ then true
1398+ else !(cx()))
1399+ then true
1400+ else cy())
1401+ then true
1402+ else cz())
13621403 then throw("Invalid addMargin parameters")
13631404 else {
1364- let ig = gQ(cl, gV(cc))
1365- let fK = ig._1
1366- let fL = ig._2
1367- let hJ = aR(hE, fK)
1368- let gC = (hE - hJ)
1369- let hK = if (hH)
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)
13701411 then {
1371- let hL = invoke(au(), "borrow", [cl], [AttachedPayment(ay, gC)])
1372- if ((hL == hL))
1412+ let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1413+ if ((hZ == hZ))
13731414 then {
1374- let hM = assetBalance(this, am())
1375- if ((hM == hM))
1415+ let ia = assetBalance(this, ao())
1416+ if ((ia == ia))
13761417 then {
1377- let hN = invoke(av(), "swap", [toBase58String(am()), 0], [AttachedPayment(ay, hJ)])
1378- if ((hN == hN))
1418+ let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1419+ if ((ib == ib))
13791420 then {
1380- let hO = assetBalance(this, am())
1381- if ((hO == hO))
1421+ let ic = assetBalance(this, ao())
1422+ if ((ic == ic))
13821423 then {
1383- let hP = (hO - hM)
1384- if ((hP == hP))
1385- then hP
1424+ let id = (ic - ia)
1425+ if ((id == id))
1426+ then id
13861427 else throw("Strict value is not equal to itself.")
13871428 }
13881429 else throw("Strict value is not equal to itself.")
13931434 }
13941435 else throw("Strict value is not equal to itself.")
13951436 }
1396- else hJ
1397- if ((hK == hK))
1437+ else hX
1438+ if ((hY == hY))
13981439 then {
1399- let hQ = invoke(as(), "acceptPayment", [cl], [AttachedPayment(am(), hK)])
1400- if ((hQ == hQ))
1440+ let ie = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), hY)])
1441+ if ((ie == ie))
14011442 then {
1402- let hR = {
1403- let cn = hQ
1404- if ($isInstanceOf(cn, "Int"))
1443+ let if = {
1444+ let cr = ie
1445+ if ($isInstanceOf(cr, "Int"))
14051446 then {
1406- let gT = cn
1407- gT
1447+ let gd = cr
1448+ gd
14081449 }
14091450 else throw("Invalid referrerFee")
14101451 }
1411- let hS = (hK - hR)
1412- let ih = ck(cl)
1413- let gJ = ih._1
1414- let hi = ih._2
1415- let hj = ih._3
1416- let hk = ih._4
1417- let ib = (hS / 2)
1418- let ic = (hS - ib)
1419- let id = invoke(ap(), "addLocked", nil, [AttachedPayment(am(), gC)])
1420- if ((id == id))
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)
14211462 then {
1422- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1423- if ((ie == ie))
1463+ let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1464+ if ((iq == iq))
1465+ then nil
1466+ else throw("Strict value is not equal to itself.")
1467+ }
1468+ else nil
1469+ if ((iq == iq))
1470+ then {
1471+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1472+ if ((ir == ir))
14241473 then {
1425- let if = invoke(aq(), "notifyFees", [cl, hS], nil)
1426- if ((if == if))
1427- then (((gg(cl, gJ, (hi + gC), hj, hk) ++ gF(ib)) ++ gE((bA() + gC))) ++ gG(fL, cc))
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))
14281477 else throw("Strict value is not equal to itself.")
14291478 }
14301479 else throw("Strict value is not equal to itself.")
14411490
14421491
14431492
1444-@Callable(cc)
1445-func removeMargin (gC) = {
1446- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1447- if ((hg == hg))
1493+@Callable(cg)
1494+func removeMargin (hd) = {
1495+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1496+ if ((hu == hu))
14481497 then {
1449- let cl = toString(cc.caller)
1450- if (if (if (if ((0 >= gC))
1451- then true
1452- else !(cs(cl)))
1453- then true
1454- else !(ct()))
1455- then true
1456- else cu())
1498+ let cp = toString(cg.caller)
1499+ if (if (if (if ((0 >= hd))
1500+ then true
1501+ else !(cw(cp)))
1502+ then true
1503+ else !(cx()))
1504+ then true
1505+ else cy())
14571506 then throw("Invalid removeMargin parameters")
14581507 else {
1459- let ii = ck(cl)
1460- let gJ = ii._1
1461- let hi = ii._2
1462- let hj = ii._3
1463- let hk = ii._4
1464- let ij = -(gC)
1465- let ik = cZ(gJ, hi, hk, ij)
1466- let di = ik._1
1467- let dj = ik._2
1468- if ((dj != 0))
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
1517+ if ((dn != 0))
14691518 then throw("Invalid removed margin amount")
14701519 else {
1471- let il = ee(di, dj, hj)
1472- if (!(cd(il, bC(), true)))
1473- then throw(((("Too much margin removed: " + toString(il)) + " < ") + toString(bC())))
1520+ let iz = ek(dm, dn, hx)
1521+ if (!(ch(iz, bE(), true)))
1522+ then throw(((("Too much margin removed: " + toString(iz)) + " < ") + toString(bE())))
14741523 else {
1475- let im = toBase58String(am())
1476- let in = gN(cl)
1477- let io = in._1
1478- let ip = in._2
1479- let iq = if ((gC > io))
1480- then io
1481- else gC
1482- let ir = if ((io > gC))
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))
14831532 then 0
1484- else (gC - io)
1485- let is = (io - iq)
1486- let it = if ((is > 0))
1533+ else (hd - iC)
1534+ let iG = (iC - iE)
1535+ let iH = if ((iG > 0))
14871536 then nil
1488- else gc(cl, im)
1489- let iu = if (((iq + ir) != gC))
1490- then throw(((((("toRepay=" + toString(iq)) + " + toWithdraw=") + toString(ir)) + " != ") + toString(gC)))
1537+ else gD(cp, iA)
1538+ let iI = if (((iE + iF) != hd))
1539+ then throw(((((("toRepay=" + toString(iE)) + " + toWithdraw=") + toString(iF)) + " != ") + toString(hd)))
14911540 else nil
1492- if ((iu == iu))
1541+ if ((iI == iI))
14931542 then {
1494- let iv = invoke(ap(), "withdrawLocked", [gC], nil)
1495- if ((iv == iv))
1543+ let iJ = if ((iF > 0))
14961544 then {
1497- let iw = if ((iq > 0))
1545+ let iJ = invoke(ar(), "withdrawLocked", [iF], nil)
1546+ if ((iJ == iJ))
1547+ then nil
1548+ else throw("Strict value is not equal to itself.")
1549+ }
1550+ else nil
1551+ if ((iJ == iJ))
1552+ then {
1553+ let iK = if ((iE > 0))
14981554 then {
1499- let ix = invoke(au(), "repay", [cl, ip], [AttachedPayment(am(), iq)])
1500- if ((ix == ix))
1501- then [ScriptTransfer(cc.caller, iq, fromBase58String(ip))]
1555+ let iL = invoke(aw(), "repay", [cp, iE, iD], nil)
1556+ if ((iL == iL))
1557+ then [ScriptTransfer(cg.caller, iE, fromBase58String(iD))]
15021558 else throw("Strict value is not equal to itself.")
15031559 }
15041560 else nil
1505- if ((iw == iw))
1506- then ((((gg(cl, gJ, di, hj, ci(gJ)) ++ (if ((ir > 0))
1507- then gB(cc.caller, ir)
1508- else nil)) ++ gE((bA() - gC))) ++ it) ++ iw)
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)
15091565 else throw("Strict value is not equal to itself.")
15101566 }
15111567 else throw("Strict value is not equal to itself.")
15201576
15211577
15221578
1523-@Callable(cc)
1524-func closePosition (gh,iy) = {
1525- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1526- if ((hg == hg))
1579+@Callable(cg)
1580+func closePosition (gI,iM) = {
1581+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1582+ if ((hu == hu))
15271583 then {
1528- let cl = cb(cc)
1529- let iz = valueOrErrorMessage(addressFromString(cl), "Invalid caller")
1530- if (if (if (if (if (!(cs(cl)))
1531- then true
1532- else !(ct()))
1533- then true
1534- else cu())
1535- then true
1536- else (0 >= gh))
1537- then true
1538- else (0 > iy))
1584+ let cp = cf(cg)
1585+ let iN = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
1586+ if (if (if (if (if (!(cw(cp)))
1587+ then true
1588+ else !(cx()))
1589+ then true
1590+ else cy())
1591+ then true
1592+ else (0 >= gI))
1593+ then true
1594+ else (0 > iM))
15391595 then throw("Invalid closePosition parameters")
15401596 else {
1541- let iA = ck(cl)
1542- let gJ = iA._1
1543- let hi = iA._2
1544- let hj = iA._3
1545- let hk = iA._4
1546- let iB = if ((aY(gJ) > gh))
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))
15471603 then {
1548- let hl = if ((gJ > 0))
1549- then aD
1550- else aC
1551- let hm = (hl == aC)
1552- let iC = du((gJ > 0), gh, true)
1553- let eu = iC._1
1554- let cM = iC._2
1555- let cN = iC._3
1556- let eB = iC._4
1557- let et = if ((gJ > 0))
1558- then -(gh)
1559- else gh
1560- let iD = dZ(cl, aL)
1561- let hp = iD._1
1562- let dY = iD._2
1563- let iE = aP(aY(et), aY(gJ))
1564- let ey = aR(dY, iE)
1565- let iF = cZ(gJ, hi, hk, ey)
1566- let di = iF._1
1567- let iG = iF._2
1568- let de = iF._3
1569- let hu = (dY - ey)
1570- let hv = if ((gJ > 0))
1571- then ((hp - eu) - hu)
1572- else ((hu + hp) - eu)
1573- let iH = aR(di, iE)
1574- let hw = (gJ + et)
1575- let hy = aY(hv)
1576- let iI = ci(hw)
1577- let eE = (bI() - eu)
1578- if (if ((iy != 0))
1579- then (iy > eu)
1604+ let hz = if ((fT > 0))
1605+ then aF
1606+ 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)
15801637 else false)
1581- then throw(((("Limit error: " + toString(eu)) + " < ") + toString(iy)))
1582- else $Tuple15(hw, iH, hy, iI, iG, ey, (aY((di - iH)) + ey), cM, cN, eB, eE, (bZ() - (if ((hw > 0))
1583- then aY(et)
1584- else 0)), (bY() - (if ((0 > hw))
1585- then aY(et)
1586- else 0)), (bK() - (if ((hw > 0))
1587- then eu
1588- else 0)), (bJ() - (if ((0 > hw))
1589- then eu
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
15901647 else 0)))
15911648 }
1592- else if ((gh > aY(gJ)))
1649+ else if ((gI > ba(fT)))
15931650 then throw("Invalid closePosition parameters")
15941651 else {
1595- let iJ = ev(cl, true)
1596- let eu = iJ._1
1597- let iG = iJ._2
1598- let ey = iJ._3
1599- let ez = iJ._4
1600- let cM = iJ._5
1601- let cN = iJ._6
1602- let eB = iJ._7
1603- let eE = iJ._8
1604- let dU = iJ._9
1605- let eC = iJ._10
1606- let eD = iJ._11
1607- let hA = iJ._12
1608- let hB = iJ._13
1609- if (if ((iy != 0))
1610- then (iy > eu)
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)
16111668 else false)
1612- then throw(((("Limit error: " + toString(eu)) + " < ") + toString(iy)))
1613- else $Tuple15(0, 0, 0, 0, iG, ey, ez, cM, cN, eB, eE, eC, eD, hA, hB)
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)
16141671 }
1615- let hw = iB._1
1616- let iH = iB._2
1617- let hy = iB._3
1618- let iI = iB._4
1619- let iG = iB._5
1620- let ey = iB._6
1621- let ez = iB._7
1622- let cM = iB._8
1623- let cN = iB._9
1624- let eB = iB._10
1625- let eE = iB._11
1626- let eC = iB._12
1627- let eD = iB._13
1628- let hA = iB._14
1629- let hB = iB._15
1630- if ((iG > 0))
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))
16311688 then throw("Unable to close position with bad debt")
16321689 else {
1633- let iK = aY(ez)
1634- let iL = (bA() - iK)
1635- let iM = if ((0 > iL))
1636- then $Tuple2(0, aY(iL))
1637- else $Tuple2(iL, 0)
1638- let iN = iM._1
1639- let iO = iM._2
1640- let iP = invoke(ap(), "withdrawLocked", [iK], nil)
1641- if ((iP == iP))
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))
1702+ 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))
1706+ else throw("Strict value is not equal to itself.")
1707+ }
1708+ else {
1709+ let jg = invoke(aw(), "realizePartiallyAndClose", [cp, iZ, iD], nil)
1710+ if ((jg == jg))
1711+ then $Tuple2([ScriptTransfer(iN, iZ, fromBase58String(iD))], 0)
1712+ else throw("Strict value is not equal to itself.")
1713+ }
1714+ else $Tuple2(nil, iZ)
1715+ if ((jf == jf))
16421716 then {
1643- let iQ = gN(cl)
1644- let io = iQ._1
1645- let ip = iQ._2
1646- let iR = if ((io > 0))
1647- then if ((iK >= io))
1648- then {
1649- let ix = invoke(au(), "repay", [cl, ip], [AttachedPayment(am(), io)])
1650- if ((ix == ix))
1651- then $Tuple2([ScriptTransfer(iz, io, fromBase58String(ip))], (iK - io))
1652- else throw("Strict value is not equal to itself.")
1653- }
1654- else {
1655- let iS = invoke(au(), "realizePartiallyAndClose", [cl, ip], [AttachedPayment(am(), iK)])
1656- if ((iS == iS))
1657- then $Tuple2([ScriptTransfer(iz, iK, fromBase58String(ip))], 0)
1658- else throw("Strict value is not equal to itself.")
1659- }
1660- else $Tuple2(nil, iK)
1661- if ((iR == iR))
1717+ let jh = jf._2
1718+ let ji = jf._1
1719+ let jj = if ((jh > 0))
16621720 then {
1663- let iT = iR._2
1664- let iU = iR._1
1665- let hC = invoke(aq(), "notifyNotional", [cl, 0], nil)
1666- if ((hC == hC))
1667- then (((((if ((hw == 0))
1668- then gA(cl)
1669- else gg(cl, hw, iH, hy, iI)) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB)) ++ (if ((iT > 0))
1670- then gB(iz, iT)
1671- else nil)) ++ gE(iN)) ++ iU)
1721+ let jj = invoke(ar(), "withdrawLocked", [jh], nil)
1722+ if ((jj == jj))
1723+ then nil
1724+ else throw("Strict value is not equal to itself.")
1725+ }
1726+ else nil
1727+ if ((jj == jj))
1728+ 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)
16721736 else throw("Strict value is not equal to itself.")
16731737 }
16741738 else throw("Strict value is not equal to itself.")
16821746
16831747
16841748
1685-@Callable(cc)
1686-func liquidate (cl) = {
1687- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1688- if ((hg == hg))
1749+@Callable(cg)
1750+func liquidate (cp) = {
1751+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1752+ if ((hu == hu))
16891753 then {
1690- let iV = ei(cl, aL)
1691- let il = if (dK())
1754+ let jk = eo(cp, aN)
1755+ let iz = if (dQ())
16921756 then {
1693- let iW = ei(cl, aM)
1694- aZ(iV, iW)
1757+ let jl = eo(cp, aO)
1758+ bb(jk, jl)
16951759 }
1696- else iV
1697- if (if (if (if (!(cd(il, bP(), false)))
1698- then true
1699- else !(cs(cl)))
1700- then true
1701- else !(ct()))
1702- then true
1703- else cu())
1760+ else jk
1761+ if (if (if (if (!(ch(iz, bR(), false)))
1762+ then true
1763+ else !(cw(cp)))
1764+ then true
1765+ else !(cx()))
1766+ then true
1767+ else cy())
17041768 then throw("Unable to liquidate")
1705- else if (if (if ((iV > bQ()))
1706- then (bR() > 0)
1769+ else if (if (if ((jk > bS()))
1770+ then (bT() > 0)
17071771 else false)
1708- then (aI > bR())
1772+ then (aK > bT())
17091773 else false)
17101774 then {
1711- let iX = ck(cl)
1712- let gJ = iX._1
1713- let hi = iX._2
1714- let hj = iX._3
1715- let hk = iX._4
1716- let hl = if ((gJ > 0))
1717- then aD
1718- else aC
1719- let hm = (hl == aC)
1720- let eu = eo(cl, gJ)
1721- let iY = dZ(cl, aL)
1722- let hp = iY._1
1723- let dY = iY._2
1724- let iZ = cL(hm, eu)
1725- let et = iZ._1
1726- let cM = iZ._2
1727- let cN = iZ._3
1728- let eB = iZ._4
1729- let ja = aP(aY(et), aY(gJ))
1730- let ey = aR(dY, ja)
1731- let jb = cZ(gJ, hi, hk, ey)
1732- let di = jb._1
1733- let dj = jb._2
1734- let de = jb._3
1735- let hu = (dY - ey)
1736- let hv = if ((gJ > 0))
1737- then ((hp - eu) - hu)
1738- else ((hu + hp) - eu)
1739- let jc = aR(eu, bQ())
1740- let jd = (jc / 2)
1741- let ic = (jc - jd)
1742- let iH = (di - jc)
1743- let hw = (gJ + et)
1744- let hy = aY(hv)
1745- let iI = ci(hw)
1746- let eE = (bI() - eu)
1747- let iL = (bA() - jc)
1748- let je = if ((0 > iL))
1749- then $Tuple2(0, aY(iL))
1750- else $Tuple2(iL, 0)
1751- let jf = je._1
1752- let iO = je._2
1753- let jg = gN(cl)
1754- let io = jg._1
1755- let ip = jg._2
1756- let jh = if ((io > 0))
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))
1781+ then aF
1782+ 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))
17571821 then {
1758- let ji = aR(io, ja)
1759- let iS = invoke(au(), "realizePartially", [cl, ip, ji], nil)
1760- if ((iS == iS))
1822+ let jx = aT(iC, jp)
1823+ let jg = invoke(aw(), "realizePartially", [cp, iD, jx], nil)
1824+ if ((jg == jg))
17611825 then nil
17621826 else throw("Strict value is not equal to itself.")
17631827 }
17641828 else nil
1765- if ((jh == jh))
1829+ if ((jw == jw))
17661830 then {
1767- let iP = invoke(ap(), "withdrawLocked", [jc], nil)
1768- if ((iP == iP))
1831+ let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1832+ if ((jj == jj))
17691833 then {
1770- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1771- if ((ie == ie))
1834+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1835+ if ((ir == ir))
17721836 then {
1773- let hC = invoke(aq(), "notifyNotional", [cl, hy], nil)
1774- if ((hC == hC))
1775- then (((gg(cl, hw, iH, hy, iI) ++ gt(cM, cN, eB, eE, (bZ() - (if ((hw > 0))
1776- then aY(et)
1777- else 0)), (bY() - (if ((0 > hw))
1778- then aY(et)
1779- else 0)), (bK() - (if ((hw > 0))
1780- then eu
1781- else 0)), (bJ() - (if ((0 > hw))
1782- then eu
1783- else 0)))) ++ gB(cc.caller, jd)) ++ gE(jf))
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))
17841848 else throw("Strict value is not equal to itself.")
17851849 }
17861850 else throw("Strict value is not equal to itself.")
17901854 else throw("Strict value is not equal to itself.")
17911855 }
17921856 else {
1793- let jj = ev(cl, false)
1794- let dT = jj._1
1795- let dj = jj._2
1796- let dU = jj._3
1797- let dV = jj._4
1798- let cM = jj._5
1799- let cN = jj._6
1800- let eB = jj._7
1801- let eE = jj._8
1802- let eu = jj._9
1803- let eC = jj._10
1804- let eD = jj._11
1805- let hA = jj._12
1806- let hB = jj._13
1807- let jc = aR(eu, bQ())
1808- let jd = (jc / 2)
1809- let ic = (jc - jd)
1810- let iL = (bA() - jc)
1811- let jk = if ((0 > iL))
1812- then $Tuple2(0, aY(iL))
1813- else $Tuple2(iL, 0)
1814- let jf = jk._1
1815- let iO = jk._2
1816- let jl = gN(cl)
1817- let io = jl._1
1818- let ip = jl._2
1819- let jh = if ((io > 0))
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))
18201884 then {
1821- let iS = invoke(au(), "realizePartiallyAndClose", [cl, ip], nil)
1822- if ((iS == iS))
1885+ let jg = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iD], nil)
1886+ if ((jg == jg))
18231887 then nil
18241888 else throw("Strict value is not equal to itself.")
18251889 }
18261890 else nil
1827- if ((jh == jh))
1891+ if ((jw == jw))
18281892 then {
1829- let gT = if ((dj > 0))
1893+ let gd = if ((dn > 0))
18301894 then {
1831- let jm = invoke(ap(), "exchangeFreeAndLocked", [dj], nil)
1832- if ((jm == jm))
1895+ let jB = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1896+ if ((jB == jB))
18331897 then nil
18341898 else throw("Strict value is not equal to itself.")
18351899 }
18361900 else nil
1837- if ((gT == gT))
1901+ if ((gd == gd))
18381902 then {
1839- let iP = invoke(ap(), "withdrawLocked", [jc], nil)
1840- if ((iP == iP))
1903+ let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1904+ if ((jj == jj))
18411905 then {
1842- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1843- if ((ie == ie))
1906+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1907+ if ((ir == ir))
18441908 then {
1845- let hC = invoke(aq(), "notifyNotional", [cl, 0], nil)
1846- if ((hC == hC))
1847- then (((gA(cl) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB)) ++ gB(cc.caller, jd)) ++ gE(jf))
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))
18481912 else throw("Strict value is not equal to itself.")
18491913 }
18501914 else throw("Strict value is not equal to itself.")
18611925
18621926
18631927
1864-@Callable(cc)
1928+@Callable(cg)
18651929 func payFunding () = {
1866- let jn = bL()
1867- if (if (if ((jn > lastBlock.timestamp))
1930+ let jC = bN()
1931+ if (if (if ((jC > lastBlock.timestamp))
18681932 then true
1869- else !(ct()))
1933+ else !(cx()))
18701934 then true
1871- else cu())
1872- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jn)))
1935+ else cy())
1936+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
18731937 else {
1874- let fx = dv()
1875- let jo = fw()
1876- let fA = jo._1
1877- let fB = jo._2
1878- fW((jn + bO()), (bW() + fB), (bX() + fA), aP(fB, fx), aP(fA, fx))
1879- }
1880- }
1881-
1882-
1883-
1884-@Callable(cc)
1938+ let fD = dz()
1939+ let jD = fC()
1940+ let fG = jD._1
1941+ let fH = jD._2
1942+ gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1943+ }
1944+ }
1945+
1946+
1947+
1948+@Callable(cg)
18851949 func syncTerminalPriceToOracle () = {
1886- let jp = fs(dv())
1887- let jq = jp._1
1888- let jr = jp._2
1889- let ez = jp._3
1890- let jm = invoke(ap(), "exchangeFreeAndLocked", [ez], nil)
1891- if ((jm == jm))
1892- then gs(jq, jr)
1950+ let jE = fy(dz())
1951+ let jF = jE._1
1952+ let jG = jE._2
1953+ let eF = jE._3
1954+ let jH = if ((eF != 0))
1955+ then {
1956+ let jH = invoke(ar(), "exchangeFreeAndLocked", [eF], nil)
1957+ if ((jH == jH))
1958+ then nil
1959+ else throw("Strict value is not equal to itself.")
1960+ }
1961+ else nil
1962+ if ((jH == jH))
1963+ then gT(jF, jG)
18931964 else throw("Strict value is not equal to itself.")
18941965 }
18951966
18961967
18971968
1898-@Callable(cc)
1899-func view_calcRemainMarginWithFundingPayment (cl) = {
1900- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1901- if ((hg == hg))
1969+@Callable(cg)
1970+func view_calcRemainMarginWithFundingPayment (cp) = {
1971+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1972+ if ((hu == hu))
19021973 then {
1903- let js = ck(cl)
1904- let co = js._1
1905- let eb = js._2
1906- let ek = js._3
1907- let ed = js._4
1908- let jt = dZ(cl, aL)
1909- let dQ = jt._1
1910- let dY = jt._2
1911- let ju = cZ(co, eb, ed, dY)
1912- let di = ju._1
1913- let dj = ju._2
1914- let de = ju._3
1915- throw((((((aN(di) + aN(de)) + aN(en(cl))) + aN(dY)) + aN(dj)) + aN(dQ)))
1974+ let jI = co(cp)
1975+ let cs = jI._1
1976+ let eh = jI._2
1977+ let eq = jI._3
1978+ let ej = jI._4
1979+ let jJ = ef(cp, aN)
1980+ let dW = jJ._1
1981+ let ee = jJ._2
1982+ let jK = dd(cs, eh, ej, ee)
1983+ let dm = jK._1
1984+ let dn = jK._2
1985+ let di = jK._3
1986+ throw((((((aP(dm) + aP(di)) + aP(et(cp))) + aP(ee)) + aP(dn)) + aP(dW)))
19161987 }
19171988 else throw("Strict value is not equal to itself.")
19181989 }
19191990
19201991
19211992
1922-@Callable(cc)
1923-func view_getPegAdjustCost (jv) = {
1924- let fr = fs(jv)
1925- throw(toString(fr._3))
1926- }
1927-
1928-
1929-
1930-@Callable(cc)
1993+@Callable(cg)
1994+func view_getPegAdjustCost (gM) = {
1995+ let fx = fy(gM)
1996+ throw(toString(fx._3))
1997+ }
1998+
1999+
2000+
2001+@Callable(cg)
19312002 func view_getTerminalAmmPrice () = {
1932- let jw = eV()
1933- let eZ = jw._1
1934- let fa = jw._2
1935- let gl = aP(aR(eZ, bF()), aR(fa, bG()))
1936- throw(toString(gl))
1937- }
1938-
1939-
1940-
1941-@Callable(cc)
2003+ let jL = fb()
2004+ let ff = jL._1
2005+ let fg = jL._2
2006+ let hj = aR(aT(ff, bH()), aT(fg, bI()))
2007+ throw(toString(hj))
2008+ }
2009+
2010+
2011+
2012+@Callable(cg)
19422013 func view_getFunding () = {
1943- let fx = dv()
1944- let jx = fw()
1945- let fA = jx._1
1946- let fB = jx._2
1947- let jy = aP(fB, fx)
1948- let jz = aP(fA, fx)
1949- throw((((aN(jy) + aN(jz)) + aN(eF())) + aN(dv())))
1950- }
1951-
1952-
1953-
1954-@Callable(cc)
1955-func view_getBorrowedByTrader (cl) = {
1956- let jA = gN(cl)
1957- let io = jA._1
1958- let ip = jA._2
1959- throw((aN(io) + ip))
1960- }
1961-
1962-
1963-
1964-@Callable(cc)
2014+ let fD = dz()
2015+ let jM = fC()
2016+ let fG = jM._1
2017+ let fH = jM._2
2018+ let jN = aR(fH, fD)
2019+ let jO = aR(fG, fD)
2020+ throw((((aP(jN) + aP(jO)) + aP(eL())) + aP(dz())))
2021+ }
2022+
2023+
2024+
2025+@Callable(cg)
2026+func view_getBorrowedByTrader (cp) = {
2027+ let jP = fX(cp)
2028+ let iC = jP._1
2029+ let iD = jP._2
2030+ throw((aP(iC) + iD))
2031+ }
2032+
2033+
2034+
2035+@Callable(cg)
19652036 func computeSpotPrice () = {
1966- let fr = dJ()
1967- $Tuple2(nil, fr)
1968- }
1969-
1970-
1971-
1972-@Callable(cc)
1973-func computeFeeForTraderWithArtifact (cl,fD) = {
1974- let fr = gQ(cl, fD)
1975- $Tuple2(nil, fr)
1976- }
1977-
1978-
1979-@Verifier(jB)
1980-func jC () = sigVerify(jB.bodyBytes, jB.proofs[0], al())
2037+ let fx = dP()
2038+ $Tuple2(nil, fx)
2039+ }
2040+
2041+
2042+
2043+@Callable(cg)
2044+func computeFeeForTraderWithArtifact (cp,fJ) = {
2045+ let fx = ga(cp, fJ)
2046+ $Tuple2(nil, fx)
2047+ }
2048+
2049+
2050+@Verifier(jQ)
2051+func jR () = sigVerify(jQ.bodyBytes, jQ.proofs[0], an())
19812052
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
52-let y = "k_lastDataStr"
53-
54-let z = "k_lastMinuteId"
55-
56-let A = "k_twapDataLastCumulativePrice"
57-
58-let B = "k_twapDataLastPrice"
59-
60-let C = "k_twapDataPreviousMinuteId"
61-
62-let D = "k_latestLongPremiumFraction"
63-
64-let E = "k_latestShortPremiumFraction"
65-
66-let F = "k_nextFundingBlockMinTimestamp"
67-
68-let G = "k_longFundingRate"
69-
70-let H = "k_shortFundingRate"
71-
72-let I = "k_qtAstR"
73-
74-let J = "k_bsAstR"
75-
76-let K = "k_qtAstW"
77-
78-let L = "k_bsAstW"
79-
80-let M = "k_totalPositionSize"
81-
82-let N = "k_totalLongPositionSize"
83-
84-let O = "k_totalShortPositionSize"
85-
86-let P = "k_openInterestNotional"
87-
88-let Q = "k_openInterestShort"
89-
90-let R = "k_openInterestLong"
91-
92-let S = "k_coordinatorAddress"
93-
94-let T = "k_vault_address"
95-
96-let U = "k_admin_address"
97-
98-let V = "k_admin_public_key"
99-
100-let W = "k_quote_asset"
101-
102-let X = "k_quote_staking"
103-
104-let Y = "k_staking_address"
105-
106-let Z = "k_miner_address"
107-
108-let aa = "k_orders_address"
109-
110-let ab = "k_referral_address"
111-
112-let ac = "k_collateral_address"
113-
114-let ad = "k_exchange_address"
115-
116-let ae = "k_nft_manager_address"
117-
118-let af = "k_trader_market_asset_collateral"
119-
120-func ag (ah,ai) = ((ah + "_") + ai)
121-
122-
123-func aj () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
124-
125-
126-func ak () = addressFromString(getStringValue(aj(), U))
127-
128-
129-func al () = fromBase58String(getStringValue(aj(), V))
130-
131-
132-func am () = fromBase58String(getStringValue(aj(), W))
133-
134-
135-func an () = valueOrErrorMessage(addressFromString(getStringValue(aj(), X)), "Quote asset staking not set")
136-
137-
138-func ao () = valueOrErrorMessage(addressFromString(getStringValue(aj(), Y)), "Staking not set")
139-
140-
141-func ap () = valueOrErrorMessage(addressFromString(getStringValue(aj(), T)), "Vault not set")
142-
143-
144-func aq () = valueOrErrorMessage(addressFromString(getStringValue(aj(), Z)), "Miner not set")
145-
146-
147-func ar () = valueOrErrorMessage(addressFromString(getStringValue(aj(), aa)), "Orders not set")
148-
149-
150-func as () = valueOrErrorMessage(addressFromString(getStringValue(aj(), ab)), "Referral not set")
151-
152-
153-func at () = valueOrErrorMessage(addressFromString(getStringValue(aj(), ae)), "NFT Manager not set")
154-
155-
156-func au () = valueOrErrorMessage(addressFromString(getStringValue(aj(), ac)), "Collateral Manager not set")
157-
158-
159-func av () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(aj(), ad), "No swap address")), "Invalid swap address")
160-
161-
162-let aw = "k_whitelist_asset"
163-
164-func ax (ay) = valueOrElse(getBoolean(au(), ag(aw, ay)), false)
165-
166-
167-let az = "k_token_param"
168-
169-let aA = "k_token_type"
170-
171-let aB = "fee_reduction"
172-
173-let aC = 1
174-
175-let aD = 2
176-
177-let aE = 15
178-
179-let aF = 15
180-
181-let aG = 1000
182-
183-let aH = 6
184-
185-let aI = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
186-
187-let aJ = (86400 * aI)
188-
189-let aK = 100
190-
191-let aL = 1
192-
193-let aM = 2
194-
195-func aN (aO) = (toString(aO) + ",")
196-
197-
198-func aP (aO,aQ) = fraction(aO, aI, aQ, HALFEVEN)
199-
200-
201-func aR (aO,aQ) = fraction(aO, aQ, aI, HALFEVEN)
202-
203-
204-func aS (aO) = sqrt(aO, aH, aH, HALFEVEN)
205-
206-
207-func aT (aO,aQ) = pow(aO, aH, aQ, aH, aH, HALFEVEN)
208-
209-
210-func aU (aO,aQ) = fraction(aO, toBigInt(aI), aQ, HALFEVEN)
211-
212-
213-func aV (aO,aQ) = fraction(aO, aQ, toBigInt(aI), HALFEVEN)
214-
215-
216-func aW (aO) = sqrtBigInt(aO, aH, aH, HALFEVEN)
217-
218-
219-func aX (aO,aQ) = pow(aO, aH, aQ, aH, aH, HALFEVEN)
220-
221-
222-func aY (aO) = if ((aO > 0))
223- then aO
224- else -(aO)
225-
226-
227-func aZ (aO,aQ) = if ((aO >= aQ))
228- then aO
229- else aQ
230-
231-
232-func ba (bb) = {
233- func bc (bd,be) = ((bd + be) + ",")
234-
235- let bf = {
236- let bg = bb
237- let bh = size(bg)
238- let bi = ""
239- func bj (bk,bl) = if ((bl >= bh))
240- then bk
241- else bc(bk, bg[bl])
242-
243- func bm (bk,bl) = if ((bl >= bh))
244- then bk
52+let y = "k_feeToStakersPercent"
53+
54+let z = "k_maxOracleDelay"
55+
56+let A = "k_lastDataStr"
57+
58+let B = "k_lastMinuteId"
59+
60+let C = "k_twapDataLastCumulativePrice"
61+
62+let D = "k_twapDataLastPrice"
63+
64+let E = "k_twapDataPreviousMinuteId"
65+
66+let F = "k_latestLongPremiumFraction"
67+
68+let G = "k_latestShortPremiumFraction"
69+
70+let H = "k_nextFundingBlockMinTimestamp"
71+
72+let I = "k_longFundingRate"
73+
74+let J = "k_shortFundingRate"
75+
76+let K = "k_qtAstR"
77+
78+let L = "k_bsAstR"
79+
80+let M = "k_qtAstW"
81+
82+let N = "k_bsAstW"
83+
84+let O = "k_totalPositionSize"
85+
86+let P = "k_totalLongPositionSize"
87+
88+let Q = "k_totalShortPositionSize"
89+
90+let R = "k_openInterestNotional"
91+
92+let S = "k_openInterestShort"
93+
94+let T = "k_openInterestLong"
95+
96+let U = "k_coordinatorAddress"
97+
98+let V = "k_vault_address"
99+
100+let W = "k_admin_address"
101+
102+let X = "k_admin_public_key"
103+
104+let Y = "k_quote_asset"
105+
106+let Z = "k_quote_staking"
107+
108+let aa = "k_staking_address"
109+
110+let ab = "k_miner_address"
111+
112+let ac = "k_orders_address"
113+
114+let ad = "k_referral_address"
115+
116+let ae = "k_collateral_address"
117+
118+let af = "k_exchange_address"
119+
120+let ag = "k_nft_manager_address"
121+
122+let ah = "k_trader_market_asset_collateral"
123+
124+func ai (aj,ak) = ((aj + "_") + ak)
125+
126+
127+func al () = valueOrErrorMessage(addressFromString(getStringValue(this, U)), "Coordinator not set")
128+
129+
130+func am () = addressFromString(getStringValue(al(), W))
131+
132+
133+func an () = fromBase58String(getStringValue(al(), X))
134+
135+
136+func ao () = fromBase58String(getStringValue(al(), Y))
137+
138+
139+func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), Z)), "Quote asset staking not set")
140+
141+
142+func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), aa)), "Staking not set")
143+
144+
145+func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), V)), "Vault not set")
146+
147+
148+func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Miner not set")
149+
150+
151+func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Orders not set")
152+
153+
154+func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Referral not set")
155+
156+
157+func av () = valueOrErrorMessage(addressFromString(getStringValue(al(), ag)), "NFT Manager not set")
158+
159+
160+func aw () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Collateral Manager not set")
161+
162+
163+func ax () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(al(), af), "No swap address")), "Invalid swap address")
164+
165+
166+let ay = "k_whitelist_asset"
167+
168+func az (aA) = valueOrElse(getBoolean(aw(), ai(ay, aA)), false)
169+
170+
171+let aB = "k_token_param"
172+
173+let aC = "k_token_type"
174+
175+let aD = "fee_reduction"
176+
177+let aE = 1
178+
179+let aF = 2
180+
181+let aG = 15
182+
183+let aH = 15
184+
185+let aI = 1000
186+
187+let aJ = 6
188+
189+let aK = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
190+
191+let aL = (86400 * aK)
192+
193+let aM = 100
194+
195+let aN = 1
196+
197+let aO = 2
198+
199+func aP (aQ) = (toString(aQ) + ",")
200+
201+
202+func aR (aQ,aS) = fraction(aQ, aK, aS, HALFEVEN)
203+
204+
205+func aT (aQ,aS) = fraction(aQ, aS, aK, HALFEVEN)
206+
207+
208+func aU (aQ) = sqrt(aQ, aJ, aJ, HALFEVEN)
209+
210+
211+func aV (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
212+
213+
214+func aW (aQ,aS) = fraction(aQ, toBigInt(aK), aS, HALFEVEN)
215+
216+
217+func aX (aQ,aS) = fraction(aQ, aS, toBigInt(aK), HALFEVEN)
218+
219+
220+func aY (aQ) = sqrtBigInt(aQ, aJ, aJ, HALFEVEN)
221+
222+
223+func aZ (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
224+
225+
226+func ba (aQ) = if ((aQ > 0))
227+ then aQ
228+ else -(aQ)
229+
230+
231+func bb (aQ,aS) = if ((aQ >= aS))
232+ then aQ
233+ else aS
234+
235+
236+func bc (bd) = {
237+ func be (bf,bg) = ((bf + bg) + ",")
238+
239+ let bh = {
240+ let bi = bd
241+ let bj = size(bi)
242+ let bk = ""
243+ func bl (bm,bn) = if ((bn >= bj))
244+ then bm
245+ else be(bm, bi[bn])
246+
247+ func bo (bm,bn) = if ((bn >= bj))
248+ then bm
245249 else throw("List size exceeds 20")
246250
247- bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
251+ 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)
248252 }
249- let bn = dropRight(bf, 1)
250- let bo = if ((take(bn, 1) == ","))
251- then drop(bn, 1)
252- else bn
253- bo
254- }
255-
256-
257-func bp (bq) = split(bq, ",")
258-
259-
260-func br (bb,bs,bt) = if ((size(bb) > bs))
261- then (removeByIndex(bb, 0) :+ bt)
262- else (bb :+ bt)
263-
264-
265-func bu (bv) = valueOrErrorMessage(getInteger(this, bv), ("no value for " + bv))
266-
267-
268-func bw (bv,bx) = valueOrElse(getInteger(this, bv), bx)
269-
270-
271-func by (ai,ah) = {
272- let be = valueOrErrorMessage(getString(ai, ah), ("No value for key " + ah))
273- be
274- }
275-
276-
277-func bz (ai,ah) = {
278- let be = valueOrErrorMessage(getInteger(ai, ah), ("No value for key " + ah))
279- be
280- }
281-
282-
283-func bA () = bu(d)
284-
285-
286-func bB () = bu(o)
287-
288-
289-func bC () = bu(q)
290-
291-
292-func bD () = bu(I)
293-
294-
295-func bE () = bu(J)
296-
297-
298-func bF () = bw(K, aI)
299-
300-
301-func bG () = bw(L, aI)
302-
303-
304-func bH () = bu(M)
305-
306-
307-func bI () = bu(P)
308-
309-
310-func bJ () = bu(Q)
311-
312-
313-func bK () = bu(R)
314-
315-
316-func bL () = bu(F)
317-
318-
319-func bM () = bu(p)
320-
321-
322-func bN () = (bM() * aI)
323-
324-
325-func bO () = (bM() * aG)
326-
327-
328-func bP () = bu(r)
329-
330-
331-func bQ () = bu(s)
332-
333-
334-func bR () = bu(t)
335-
336-
337-func bS () = bu(u)
338-
339-
340-func bT () = bu(v)
341-
342-
343-func bU () = bu(w)
344-
345-
346-func bV () = bu(x)
347-
348-
349-func bW () = bu(D)
350-
351-
352-func bX () = bu(E)
353-
354-
355-func bY () = bu(O)
356-
357-
358-func bZ () = bu(N)
359-
360-
361-func ca () = bw(e, 0)
362-
363-
364-func cb (cc) = valueOrElse(getString(ar(), "k_sender"), toString(cc.caller))
365-
366-
367-func cd (ce,cf,cg) = {
368- let ch = (ce - cf)
369- if (if (cg)
370- then (0 > ch)
253+ let bp = dropRight(bh, 1)
254+ let bq = if ((take(bp, 1) == ","))
255+ then drop(bp, 1)
256+ else bp
257+ bq
258+ }
259+
260+
261+func br (bs) = split(bs, ",")
262+
263+
264+func bt (bd,bu,bv) = if ((size(bd) > bu))
265+ then (removeByIndex(bd, 0) :+ bv)
266+ else (bd :+ bv)
267+
268+
269+func bw (bx) = valueOrErrorMessage(getInteger(this, bx), ("no value for " + bx))
270+
271+
272+func by (bx,bz) = valueOrElse(getInteger(this, bx), bz)
273+
274+
275+func bA (ak,aj) = {
276+ let bg = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
277+ bg
278+ }
279+
280+
281+func bB (ak,aj) = {
282+ let bg = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
283+ bg
284+ }
285+
286+
287+func bC () = bw(d)
288+
289+
290+func bD () = bw(o)
291+
292+
293+func bE () = bw(q)
294+
295+
296+func bF () = bw(K)
297+
298+
299+func bG () = bw(L)
300+
301+
302+func bH () = by(M, aK)
303+
304+
305+func bI () = by(N, aK)
306+
307+
308+func bJ () = bw(O)
309+
310+
311+func bK () = bw(R)
312+
313+
314+func bL () = bw(S)
315+
316+
317+func bM () = bw(T)
318+
319+
320+func bN () = bw(H)
321+
322+
323+func bO () = bw(p)
324+
325+
326+func bP () = (bO() * aK)
327+
328+
329+func bQ () = (bO() * aI)
330+
331+
332+func bR () = bw(r)
333+
334+
335+func bS () = bw(s)
336+
337+
338+func bT () = bw(t)
339+
340+
341+func bU () = bw(u)
342+
343+
344+func bV () = bw(v)
345+
346+
347+func bW () = bw(w)
348+
349+
350+func bX () = bw(x)
351+
352+
353+func bY () = bw(F)
354+
355+
356+func bZ () = bw(G)
357+
358+
359+func ca () = bw(Q)
360+
361+
362+func cb () = bw(P)
363+
364+
365+func cc () = by(e, 0)
366+
367+
368+func cd () = bw(y)
369+
370+
371+func ce () = bw(z)
372+
373+
374+func cf (cg) = valueOrElse(getString(at(), "k_sender"), toString(cg.caller))
375+
376+
377+func ch (ci,cj,ck) = {
378+ let cl = (ci - cj)
379+ if (if (ck)
380+ then (0 > cl)
371381 else false)
372382 then throw("Invalid margin")
373- else if (if (!(cg))
374- then (ch >= 0)
383+ else if (if (!(ck))
384+ then (cl >= 0)
375385 else false)
376386 then throw("Invalid margin")
377387 else true
378388 }
379389
380390
381-func ci (cj) = if ((cj == 0))
391+func cm (cn) = if ((cn == 0))
382392 then throw("Should not be called with _positionSize == 0")
383- else if ((cj > 0))
384- then bW()
385- else bX()
386-
387-
388-func ck (cl) = {
389- let cm = getInteger(this, ag(f, cl))
390- let cn = cm
391- if ($isInstanceOf(cn, "Int"))
393+ else if ((cn > 0))
394+ then bY()
395+ else bZ()
396+
397+
398+func co (cp) = {
399+ let cq = getInteger(this, ai(f, cp))
400+ let cr = cq
401+ if ($isInstanceOf(cr, "Int"))
392402 then {
393- let co = cn
394- $Tuple4(co, getIntegerValue(this, ag(g, cl)), getIntegerValue(this, ag(h, cl)), getIntegerValue(this, ag(i, cl)))
403+ let cs = cr
404+ $Tuple4(cs, getIntegerValue(this, ai(g, cp)), getIntegerValue(this, ai(h, cp)), getIntegerValue(this, ai(i, cp)))
395405 }
396406 else $Tuple4(0, 0, 0, 0)
397407 }
398408
399409
400-func cp (cl) = {
401- let cq = getString(this, ag(k, cl))
402- let cn = cq
403- if ($isInstanceOf(cn, "String"))
410+func ct (cp) = {
411+ let cu = getString(this, ai(k, cp))
412+ let cr = cu
413+ if ($isInstanceOf(cr, "String"))
404414 then {
405- let cr = cn
406- cr
407- }
408- else toBase58String(am())
409- }
410-
411-
412-func cs (cl) = if ((ck(cl)._1 == 0))
415+ let cv = cr
416+ cv
417+ }
418+ else toBase58String(ao())
419+ }
420+
421+
422+func cw (cp) = if ((co(cp)._1 == 0))
413423 then throw("No open position")
414424 else true
415425
416426
417-func ct () = valueOrElse(getBoolean(this, l), false)
418-
419-
420-func cu () = valueOrElse(getBoolean(this, m), false)
421-
422-
423-func cv () = valueOrElse(getBoolean(this, n), false)
424-
425-
426-func cw (cx,cy,cz) = if (cx)
427+func cx () = valueOrElse(getBoolean(this, l), false)
428+
429+
430+func cy () = valueOrElse(getBoolean(this, m), false)
431+
432+
433+func cz () = valueOrElse(getBoolean(this, n), false)
434+
435+
436+func cA (cB,cC,cD) = if (cB)
427437 then {
428- let cA = (bE() - cz)
429- if ((0 >= cA))
438+ let cE = (bG() - cD)
439+ if ((0 >= cE))
430440 then throw("Tx lead to base asset reserve <= 0, revert")
431- else $Tuple3((bD() + cy), cA, (bH() + cz))
441+ else $Tuple3((bF() + cC), cE, (bJ() + cD))
432442 }
433443 else {
434- let cB = (bD() - cy)
435- if ((0 >= cB))
444+ let cF = (bF() - cC)
445+ if ((0 >= cF))
436446 then throw("Tx lead to base quote reserve <= 0, revert")
437- else $Tuple3(cB, (bE() + cz), (bH() - cz))
447+ else $Tuple3(cF, (bG() + cD), (bJ() - cD))
438448 }
439449
440450
441-func cC (cD,cE,cF,cG) = {
442- let cH = toBigInt(cD)
443- let cI = toBigInt(cE)
444- let cJ = toBigInt(cF)
445- let cK = toBigInt(cG)
446- aV(aV(cH, cI), aV(cJ, cK))
447- }
448-
449-
450-func cL (cx,cy) = {
451- let cD = bD()
452- let cF = bE()
453- let cE = bF()
454- let cG = bG()
455- let bv = cC(cD, cE, cF, cG)
456- let cM = if (cx)
457- then (cD + cy)
458- else (cD - cy)
459- let cN = toInt(aU(bv, toBigInt(aR(cM, cE))))
460- let cO = aP(aY((cN - cF)), cE)
461- let cP = if (cx)
462- then cO
463- else -(cO)
464- let cQ = cw(cx, cy, cO)
465- let cR = cQ._1
466- let cS = cQ._2
467- let cT = cQ._3
468- let cU = aP(aR(cD, cE), aR(cF, cG))
469- let cV = aP(cy, cO)
470- let cW = aY((cU - cV))
471- let cX = (aI - aP(cU, (cU + cW)))
472- let cY = bT()
473- if ((cX > cY))
474- then throw(((((((((((((("Price impact " + toString(cX)) + " > max price impact ") + toString(cY)) + " before quote asset: ") + toString(cD)) + " before base asset: ") + toString(cF)) + " quote asset amount to exchange: ") + toString(cy)) + " price before: ") + toString(cU)) + " marketPrice: ") + toString(cV)))
475- else $Tuple4(cP, cR, cS, cT)
476- }
477-
478-
479-func cZ (da,db,dc,dd) = {
480- let de = if ((da != 0))
451+func cG (cH,cI,cJ,cK) = {
452+ let cL = toBigInt(cH)
453+ let cM = toBigInt(cI)
454+ let cN = toBigInt(cJ)
455+ let cO = toBigInt(cK)
456+ aX(aX(cL, cM), aX(cN, cO))
457+ }
458+
459+
460+func cP (cB,cC) = {
461+ let cH = bF()
462+ let cJ = bG()
463+ let cI = bH()
464+ let cK = bI()
465+ let bx = cG(cH, cI, cJ, cK)
466+ let cQ = if (cB)
467+ then (cH + cC)
468+ else (cH - cC)
469+ let cR = toInt(aW(bx, toBigInt(aT(cQ, cI))))
470+ let cS = aR(ba((cR - cJ)), cI)
471+ let cT = if (cB)
472+ then cS
473+ else -(cS)
474+ let cU = cA(cB, cC, cS)
475+ let cV = cU._1
476+ let cW = cU._2
477+ let cX = cU._3
478+ let cY = aR(aT(cH, cI), aT(cJ, cK))
479+ let cZ = aR(cC, cS)
480+ let da = ba((cY - cZ))
481+ let db = (aK - aR(cY, (cY + da)))
482+ let dc = bV()
483+ if ((db > dc))
484+ 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)))
485+ else $Tuple4(cT, cV, cW, cX)
486+ }
487+
488+
489+func dd (de,df,dg,dh) = {
490+ let di = if ((de != 0))
481491 then {
482- let df = ci(da)
483- aR((df - dc), da)
492+ let dj = cm(de)
493+ aT((dj - dg), de)
484494 }
485495 else 0
486- let dg = ((dd - de) + db)
487- let dh = if ((0 > dg))
488- then $Tuple2(0, aY(dg))
489- else $Tuple2(aY(dg), 0)
490- let di = dh._1
491- let dj = dh._2
492- $Tuple3(di, dj, de)
493- }
494-
495-
496-func dk (cx,cz,dl,dm,dn,do,dp) = {
497- let cU = aP(aR(dm, dn), aR(do, dp))
498- if ((cz == 0))
496+ let dk = ((dh - di) + df)
497+ let dl = if ((0 > dk))
498+ then $Tuple2(0, ba(dk))
499+ else $Tuple2(ba(dk), 0)
500+ let dm = dl._1
501+ let dn = dl._2
502+ $Tuple3(dm, dn, di)
503+ }
504+
505+
506+func do (cB,cD,dp,dq,dr,ds,dt) = {
507+ let cY = aR(aT(dq, dr), aT(ds, dt))
508+ if ((cD == 0))
499509 then throw("Invalid base asset amount")
500510 else {
501- let bv = cC(dm, dn, do, dp)
502- let dq = if (cx)
503- then (do + cz)
504- else (do - cz)
505- let dr = toInt(aU(bv, toBigInt(aR(dq, dp))))
506- let ds = aY((dr - aR(dm, dn)))
507- let cY = bT()
508- let dt = cw(!(cx), ds, cz)
509- let cR = dt._1
510- let cS = dt._2
511- let cT = dt._3
512- let cV = aP(ds, cz)
513- let cW = aY((cU - cV))
514- let cX = (aI - aP(cU, (cU + cW)))
515- if (if ((cX > cY))
516- then dl
511+ let bx = cG(dq, dr, ds, dt)
512+ let du = if (cB)
513+ then (ds + cD)
514+ else (ds - cD)
515+ let dv = toInt(aW(bx, toBigInt(aT(du, dt))))
516+ let dw = ba((dv - aT(dq, dr)))
517+ let dc = bV()
518+ let dx = cA(!(cB), dw, cD)
519+ let cV = dx._1
520+ let cW = dx._2
521+ let cX = dx._3
522+ let cZ = aR(dw, cD)
523+ let da = ba((cY - cZ))
524+ let db = (aK - aR(cY, (cY + da)))
525+ if (if ((db > dc))
526+ then dp
517527 else false)
518- then throw(((((((((((((("Price impact " + toString(cX)) + " > max price impact ") + toString(cY)) + " before quote asset: ") + toString(dm)) + " before base asset: ") + toString(do)) + " base asset amount to exchange: ") + toString(cz)) + " price before: ") + toString(cU)) + " market price: ") + toString(cV)))
519- else $Tuple7(ds, cR, cS, cT, (bZ() - (if (cx)
520- then aY(cz)
521- else 0)), (bY() - (if (!(cx))
522- then aY(cz)
523- else 0)), cX)
524- }
525- }
526-
527-
528-func du (cx,cz,dl) = dk(cx, cz, dl, bD(), bF(), bE(), bG())
529-
530-
531-func dv () = {
532- let dw = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
533- let dx = getStringValue(this, a)
534- let dy = getStringValue(this, b)
535- let dz = valueOrErrorMessage(getInteger(dw, dx), ((("Can not get oracle price. Oracle: " + toString(dw)) + " key: ") + dx))
536- dz
537- }
538-
539-
540-func dA (dm,do) = {
541- let dB = dv()
542- let dC = aP(dm, do)
543- let dD = aP((dB + dC), (2 * aI))
544- let dE = aP(aY((dB - dC)), dD)
545- if ((dE > bU()))
546- then throw(((("Price spread " + toString(dE)) + " > max price spread ") + toString(bU())))
528+ 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)))
529+ else $Tuple7(dw, cV, cW, cX, (cb() - (if (cB)
530+ then ba(cD)
531+ else 0)), (ca() - (if (!(cB))
532+ then ba(cD)
533+ else 0)), db)
534+ }
535+ }
536+
537+
538+func dy (cB,cD,dp) = do(cB, cD, dp, bF(), bH(), bG(), bI())
539+
540+
541+func dz () = {
542+ let dA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
543+ let dB = getStringValue(this, a)
544+ let dC = valueOrErrorMessage(getInteger(dA, dB), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + dB))
545+ let dD = valueOrElse(getString(this, b), "")
546+ if ((dD != ""))
547+ then {
548+ let dE = lastBlock.height
549+ let dF = valueOrErrorMessage(getInteger(dA, b), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + dD))
550+ if (((dE - dF) > ce()))
551+ then throw(((("Oracle stale data. Last oracle block: " + toString(dF)) + " current block: ") + toString(dE)))
552+ else dC
553+ }
554+ else dC
555+ }
556+
557+
558+func dG (dq,ds) = {
559+ let dH = dz()
560+ let cI = bH()
561+ 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())))
547567 else true
548568 }
549569
550570
551-func dF (dG,dH) = {
552- let dI = bV()
553- if ((dG > dI))
554- then throw(((("Long open notional " + toString(dG)) + " > max open notional ") + toString(dI)))
555- else if ((dH > dI))
556- then throw(((("Short open notional " + toString(dH)) + " > max open notional ") + toString(dI)))
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)))
557577 else true
558578 }
559579
560580
561-func dJ () = {
562- let dm = bD()
563- let do = bE()
564- let cE = bF()
565- let cG = bG()
566- aP(aR(dm, cE), aR(do, cG))
567- }
568-
569-
570-func dK () = {
571- let dB = dv()
572- let dL = dJ()
573- (aP(aY((dB - dL)), dB) > bS())
574- }
575-
576-
577-func dM (cj,dN,dm,dn,do,dp) = {
578- let dO = aY(cj)
579- let dP = (0 > cj)
580- let dQ = if ((dN == aL))
581+func dP () = {
582+ let dq = bF()
583+ let ds = bG()
584+ let cI = bH()
585+ let cK = bI()
586+ aR(aT(dq, cI), aT(ds, cK))
587+ }
588+
589+
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))
581601 then {
582- let dR = dk(!(dP), dO, false, dm, dn, do, dp)
583- let dS = dR._1
584- let dT = dR._2
585- let dU = dR._3
586- let dV = dR._4
587- dS
588- }
589- else aR(dO, dv())
590- dQ
591- }
592-
593-
594-func dW (cj,dX,dm,dn,do,dp,dN) = if ((cj == 0))
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))
595615 then throw("Invalid position size")
596616 else {
597- let dP = (0 > cj)
598- let dQ = dM(cj, dN, dm, dn, do, dp)
599- let dY = if (dP)
600- then (dX - dQ)
601- else (dQ - dX)
602- $Tuple2(dQ, dY)
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)
603623 }
604624
605625
606-func dZ (cl,dN) = {
607- let ea = ck(cl)
608- let co = ea._1
609- let eb = ea._2
610- let ec = ea._3
611- let ed = ea._4
612- dW(co, ec, bD(), bF(), bE(), bG(), dN)
613- }
614-
615-
616-func ee (ef,eg,eh) = aP((ef - eg), eh)
617-
618-
619-func ei (cl,dN) = {
620- let ej = ck(cl)
621- let co = ej._1
622- let eb = ej._2
623- let ek = ej._3
624- let ed = ej._4
625- let el = dZ(cl, dN)
626- let dQ = el._1
627- let dY = el._2
628- let em = cZ(co, eb, ed, dY)
629- let di = em._1
630- let dj = em._2
631- ee(di, dj, dQ)
632- }
633-
634-
635-func en (cl) = ei(cl, aL)
636-
637-
638-func eo (cl,cj) = {
639- let ep = aZ(bR(), (aI - aP(en(cl), bP())))
640- let eq = aR(aY(cj), ep)
641- let er = du((cj > 0), eq, false)
642- let es = er._1
643- let cX = er._7
644- if ((bT() > cX))
645- then es
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
664+ if ((bV() > db))
665+ then ey
646666 else {
647- let et = aR(aY(cj), bR())
648- let eu = du((cj > 0), et, false)._1
649- eu
650- }
651- }
652-
653-
654-func ev (cl,dl) = {
655- let ew = ck(cl)
656- let co = ew._1
657- let eb = ew._2
658- let ec = ew._3
659- let ed = ew._4
660- let dY = dZ(cl, aL)._2
661- let ex = cZ(co, eb, ed, dY)
662- let di = ex._1
663- let dj = ex._2
664- let et = -(co)
665- let ey = dY
666- let ez = -(di)
667- let eA = du((co > 0), aY(co), dl)
668- let eu = eA._1
669- let cM = eA._2
670- let cN = eA._3
671- let eB = eA._4
672- let eC = eA._5
673- let eD = eA._6
674- let eE = (bI() - ec)
675- $Tuple13(et, dj, ey, ez, cM, cN, eB, eE, eu, eC, eD, (bK() - (if ((co > 0))
676- then ec
677- else 0)), (bJ() - (if ((0 > co))
678- then ec
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
697+ else 0)), (bL() - (if ((0 > cs))
698+ then ei
679699 else 0)))
680700 }
681701
682702
683-func eF () = {
684- let eG = ((lastBlock.timestamp / 1000) / 60)
685- let eH = (eG - aE)
686- let eI = valueOrElse(getString(this, y), "")
687- let eJ = split(eI, ",")
688- func eK (bd,eL) = if ((eH >= parseIntValue(eL)))
689- then (bd :+ parseIntValue(eL))
690- else bd
691-
692- let eM = {
693- let bg = eJ
694- let bh = size(bg)
695- let bi = nil
696- func bj (bk,bl) = if ((bl >= bh))
697- then bk
698- else eK(bk, bg[bl])
699-
700- func bm (bk,bl) = if ((bl >= bh))
701- then bk
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))
710+ else bf
711+
712+ let eS = {
713+ let bi = eP
714+ let bj = size(bi)
715+ let bk = nil
716+ func bl (bm,bn) = if ((bn >= bj))
717+ then bm
718+ else eQ(bm, bi[bn])
719+
720+ func bo (bm,bn) = if ((bn >= bj))
721+ then bm
702722 else throw("List size exceeds 20")
703723
704- bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
724+ 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)
705725 }
706- let eN = if ((size(eM) > 0))
707- then max(eM)
708- else parseIntValue(eJ[0])
709- let eO = valueOrElse(getInteger(this, z), 0)
710- let eP = valueOrElse(getInteger(this, ((A + "_") + toString(eO))), 0)
711- let eQ = valueOrElse(getInteger(this, ((B + "_") + toString(eO))), 0)
712- let eR = (eP + ((eG - eO) * eQ))
713- let eS = valueOrElse(getInteger(this, ((A + "_") + toString(eN))), 0)
714- let eT = valueOrElse(getInteger(this, ((B + "_") + toString(eN))), 0)
715- let eU = (eS + ((eH - eN) * eT))
716- ((eR - eU) / aE)
717- }
718-
719-
720-func eV () = {
721- let cj = bH()
722- if ((cj == 0))
723- then $Tuple2(bD(), bE())
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 () = {
741+ let cn = bJ()
742+ if ((cn == 0))
743+ then $Tuple2(bF(), bG())
724744 else {
725- let eW = (cj > 0)
726- let eX = du(eW, aY(cj), false)
727- let eY = eX._1
728- let eZ = eX._2
729- let fa = eX._3
730- $Tuple2(eZ, fa)
731- }
732- }
733-
734-
735-func fb (fc,bH,fd,fe) = {
736- let ff = toBigInt(fc)
737- let fg = toBigInt(bH)
738- let fh = toBigInt(fd)
739- let fi = toBigInt(fe)
740- let fj = aX((ff + fg), toBigInt((2 * aI)))
741- let fk = aV(fh, fj)
742- let fl = (toBigInt(4) * aV(fi, fg))
743- let fm = aW(aV(fk, (fh - fl)))
744- let fn = aV(ff, fh)
745- let fo = aV(fh, fg)
746- let fp = ((-(fm) + fn) + fo)
747- let fq = (toBigInt(2) * aV(fh, fg))
748- let fr = aU(fp, fq)
749- toInt(fr)
750- }
751-
752-
753-func fs (ft) = {
754- let cj = bH()
755- if ((cj == 0))
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) = {
774+ let cn = bJ()
775+ if ((cn == 0))
756776 then {
757- let cD = bD()
758- let cF = bE()
759- let fu = aP(aR(ft, cF), cD)
760- $Tuple3(fu, aI, 0)
777+ let cH = bF()
778+ let cJ = bG()
779+ let fA = aR(aT(fz, cJ), cH)
780+ $Tuple3(fA, aK, 0)
761781 }
762782 else {
763- let eW = (cj > 0)
764- let eY = du(eW, aY(cj), false)._1
765- let cD = bD()
766- let cF = bE()
767- let fu = fb(cF, cj, cD, ft)
768- let fv = aI
769- let ez = dW(cj, eY, cD, fu, cF, fv, aL)._2
770- $Tuple3(fu, fv, ez)
771- }
772- }
773-
774-
775-func fw () = {
776- let fx = dv()
777- let fy = eF()
778- let fz = (fy - fx)
779- if (if ((bY() == 0))
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)
799+ if (if ((ca() == 0))
780800 then true
781- else (bZ() == 0))
801+ else (cb() == 0))
782802 then $Tuple2(0, 0)
783- else if ((0 > fz))
803+ else if ((0 > fF))
784804 then {
785- let fA = aP(aR(fz, bN()), aJ)
786- let fB = aP(aR(fA, bY()), bZ())
787- $Tuple2(fA, fB)
805+ let fG = aR(aT(fF, bP()), aL)
806+ let fH = aR(aT(fG, ca()), cb())
807+ $Tuple2(fG, fH)
788808 }
789809 else {
790- let fB = aP(aR(fz, bN()), aJ)
791- let fA = aP(aR(fB, bZ()), bY())
792- $Tuple2(fA, fB)
810+ let fH = aR(aT(fF, bP()), aL)
811+ let fG = aR(aT(fH, cb()), ca())
812+ $Tuple2(fG, fH)
793813 }
794814 }
795815
796816
797-func fC (fD,fE) = {
798- let fF = bB()
799- let fG = aR(fF, fE)
800- let fH = if ((fD != ""))
817+func fI (fJ,fK) = {
818+ let fL = bD()
819+ let fM = aT(fL, fK)
820+ let fN = if ((fJ != ""))
801821 then {
802- let fI = by(at(), ag(aA, fD))
803- if ((fI == aB))
822+ let fO = bA(av(), ai(aC, fJ))
823+ if ((fO == aD))
804824 then {
805- let fJ = bz(at(), ag(az, fD))
806- let fK = aR(fG, fJ)
807- $Tuple2(fK, true)
825+ let fP = bB(av(), ai(aB, fJ))
826+ let fQ = aT(fM, fP)
827+ $Tuple2(fQ, true)
808828 }
809829 else throw("Invalid attached artifact")
810830 }
811- else $Tuple2(fG, false)
812- let fK = fH._1
813- let fL = fH._2
814- $Tuple2(fK, fL)
815- }
816-
817-
818-func fM (fN,fO,fP,fQ,fR,fS,fT,fU,fV,dI) = [IntegerEntry(q, fN), IntegerEntry(r, fO), IntegerEntry(s, fP), IntegerEntry(p, fQ), IntegerEntry(o, fR), IntegerEntry(u, fS), IntegerEntry(v, fT), IntegerEntry(t, fU), IntegerEntry(w, fV), IntegerEntry(x, dI)]
819-
820-
821-func fW (fX,fY,fZ,ga,gb) = [IntegerEntry(F, fX), IntegerEntry(D, fY), IntegerEntry(E, fZ), IntegerEntry(G, ga), IntegerEntry(H, gb)]
822-
823-
824-func gc (ai,ay) = [StringEntry(ag(k, ai), ay)]
825-
826-
827-func gd (ge,ai) = if (ge)
828- then {
829- let gf = ca()
830-[IntegerEntry(ag(j, ai), (gf + 1)), IntegerEntry(e, (gf + 1))]
831- }
832- else nil
833-
834-
835-func gg (ai,gh,gi,gj,df) = [IntegerEntry(ag(f, ai), gh), IntegerEntry(ag(g, ai), gi), IntegerEntry(ag(h, ai), gj), IntegerEntry(ag(i, ai), df)]
836-
837-
838-func gk (gl) = {
839- let eG = ((lastBlock.timestamp / 1000) / 60)
840- let gm = valueOrElse(getInteger(this, z), 0)
841- if ((gm > eG))
842- then throw("TWAP out-of-order")
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))
841+ then true
842+ else (ct(cp) == aA)
843+ }
844+
845+
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) = {
853+ let cv = ct(cp)
854+ if ((cv == toBase58String(ao())))
855+ then $Tuple2(0, cv)
843856 else {
844- let eO = if ((gm == 0))
845- then eG
846- else gm
847- if ((eG > gm))
848- then {
849- let gn = valueOrElse(getInteger(this, ((A + "_") + toString(gm))), 0)
850- let go = valueOrElse(getInteger(this, ((B + "_") + toString(gm))), gl)
851- let gp = (gn + ((eG - eO) * go))
852- let eJ = br(bp(valueOrElse(getString(this, y), "")), aE, toString(eG))
853-[IntegerEntry(ag(A, toString(eG)), gp), IntegerEntry(ag(B, toString(eG)), gl), IntegerEntry(ag(C, toString(eG)), gm), IntegerEntry(z, eG), StringEntry(y, ba(eJ))]
854- }
855- else {
856- let gq = valueOrElse(getInteger(this, ag(C, toString(eG))), 0)
857- let gn = valueOrElse(getInteger(this, ag(A, toString(gq))), 0)
858- let go = valueOrElse(getInteger(this, ag(B, toString(gq))), gl)
859- let gp = (gn + ((eG - gq) * go))
860-[IntegerEntry(ag(A, toString(eG)), gp), IntegerEntry(ag(B, toString(eG)), gl)]
861- }
862- }
863- }
864-
865-
866-func gr (cD,cF) = [IntegerEntry(I, cD), IntegerEntry(J, cF)]
867-
868-
869-func gs (cE,cG) = [IntegerEntry(K, cE), IntegerEntry(L, cG)]
870-
871-
872-func gt (cD,cF,gu,gv,gw,gx,gy,gz) = {
873- let cE = bF()
874- let cG = bG()
875- if (((gw - gx) != gu))
876- then throw(((((("Invalid AMM state data: " + toString(gw)) + " + ") + toString(gx)) + " != ") + toString(gu)))
877- else ((gr(cD, cF) ++ [IntegerEntry(M, gu), IntegerEntry(P, gv), IntegerEntry(N, gw), IntegerEntry(O, gx), IntegerEntry(R, gy), IntegerEntry(Q, gz)]) ++ gk(aP(aR(cD, cE), aR(cF, cG))))
878- }
879-
880-
881-func gA (ai) = [DeleteEntry(ag(f, ai)), DeleteEntry(ag(g, ai)), DeleteEntry(ag(h, ai)), DeleteEntry(ag(i, ai)), DeleteEntry(ag(k, ai))]
882-
883-
884-func gB (ai,gC) = {
885- let gD = assetBalance(this, am())
886- if ((gC > gD))
887- then throw(((("Unable to withdraw " + toString(gC)) + " from contract balance ") + toString(gD)))
888- else [ScriptTransfer(ai, gC, am())]
889- }
890-
891-
892-func gE (cc) = if ((0 > cc))
893- then throw("Balance")
894- else [IntegerEntry(d, cc)]
895-
896-
897-func gF (cc) = [ScriptTransfer(ao(), cc, am())]
898-
899-
900-func gG (gH,cc) = if (gH)
901- then [Burn(valueOrErrorMessage(cc.payments[1].assetId, "Invalid artifact"), 1)]
902- else nil
903-
904-
905-func gI (cl,ay) = {
906- let gJ = ck(cl)._1
907- if ((gJ == 0))
908- then true
909- else (cp(cl) == ay)
910- }
911-
912-
913-func gK (cl,ay) = (cp(cl) == ay)
914-
915-
916-func gL (gM,ay,cl) = ((((((af + "_") + gM) + "_") + ay) + "_") + cl)
917-
918-
919-func gN (cl) = {
920- let cr = cp(cl)
921- if ((cr == toBase58String(am())))
922- then $Tuple2(0, cr)
923- else {
924- let gO = gL(toString(this), cr, cl)
925- let gP = valueOrElse(getInteger(au(), gO), 0)
926- $Tuple2(gP, cr)
927- }
928- }
929-
930-
931-func gQ (cl,fD) = {
932- let gR = invoke(aq(), "computeFeeDiscount", [cl], nil)
933- if ((gR == gR))
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))
934867 then {
935- let gS = {
936- let cn = gR
937- if ($isInstanceOf(cn, "Int"))
868+ let gc = {
869+ let cr = gb
870+ if ($isInstanceOf(cr, "Int"))
938871 then {
939- let gT = cn
940- gT
872+ let gd = cr
873+ gd
941874 }
942875 else throw("Invalid computeFeeDiscount result")
943876 }
944- let gU = fC(fD, gS)
945- let fK = gU._1
946- let fL = gU._2
947- $Tuple2(fK, fL)
877+ let ge = fI(fJ, gc)
878+ let fQ = ge._1
879+ let fR = ge._2
880+ $Tuple2(fQ, fR)
948881 }
949882 else throw("Strict value is not equal to itself.")
950883 }
951884
952885
953-func gV (cc) = {
954- let gW = if ((size(cc.payments) > 1))
955- then toBase58String(valueOrErrorMessage(cc.payments[1].assetId, "Invalid artifactId"))
886+func gf (cg) = {
887+ let gg = if ((size(cg.payments) > 1))
888+ then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
956889 else ""
957- gW
958- }
959-
960-
961-@Callable(cc)
962-func pause () = if ((cc.caller != ak()))
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)
911+ then {
912+ let gG = cc()
913+[IntegerEntry(ai(j, ak), (gG + 1)), IntegerEntry(e, (gG + 1))]
914+ }
915+ else nil
916+
917+
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))
925+ then throw("TWAP out-of-order")
926+ else {
927+ let eU = if ((gN == 0))
928+ then eM
929+ else gN
930+ if ((eM > gN))
931+ 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+ }
938+ 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+ }
945+ }
946+ }
947+
948+
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) = {
956+ let cI = bH()
957+ 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))
976+ then throw("Balance")
977+ else [IntegerEntry(d, cg)]
978+
979+
980+func hg (cg) = [ScriptTransfer(aq(), cg, ao())]
981+
982+
983+func hh (hi,cg) = if (hi)
984+ then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
985+ else nil
986+
987+
988+@Callable(cg)
989+func pause () = if ((cg.caller != am()))
963990 then throw("Invalid pause params")
964991 else [BooleanEntry(m, true)]
965992
966993
967994
968-@Callable(cc)
969-func unpause () = if ((cc.caller != ak()))
995+@Callable(cg)
996+func unpause () = if ((cg.caller != am()))
970997 then throw("Invalid unpause params")
971998 else [BooleanEntry(m, false)]
972999
9731000
9741001
975-@Callable(cc)
976-func setCloseOnly () = if ((cc.caller != ak()))
1002+@Callable(cg)
1003+func setCloseOnly () = if ((cg.caller != am()))
9771004 then throw("Invalid setCloseOnly params")
9781005 else [BooleanEntry(n, true)]
9791006
9801007
9811008
982-@Callable(cc)
983-func unsetCloseOnly () = if ((cc.caller != ak()))
1009+@Callable(cg)
1010+func unsetCloseOnly () = if ((cg.caller != am()))
9841011 then throw("Invalid unsetCloseOnly params")
9851012 else [BooleanEntry(n, false)]
9861013
9871014
9881015
989-@Callable(cc)
990-func addLiquidity (cy) = if (if ((cc.caller != ak()))
1016+@Callable(cg)
1017+func addLiquidity (cC) = if (if ((cg.caller != am()))
9911018 then true
992- else (0 >= cy))
1019+ else (0 >= cC))
9931020 then throw("Invalid addLiquidity params")
9941021 else {
995- let cD = bD()
996- let cF = bE()
997- let cE = bF()
998- let cG = bG()
999- let gl = aP(aR(cD, cE), aR(cF, cG))
1000- let gX = aP(cy, gl)
1001- let gY = (cD + cy)
1002- let gZ = (cF + gX)
1003- gr(gY, gZ)
1022+ let cH = bF()
1023+ let cJ = bG()
1024+ let cI = bH()
1025+ 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)
10041031 }
10051032
10061033
10071034
1008-@Callable(cc)
1009-func removeLiquidity (cy) = if (if ((cc.caller != ak()))
1035+@Callable(cg)
1036+func removeLiquidity (cC) = if (if ((cg.caller != am()))
10101037 then true
1011- else (0 >= cy))
1038+ else (0 >= cC))
10121039 then throw("Invalid removeLiquidity params")
10131040 else {
1014- let cD = bD()
1015- let cF = bE()
1016- let cE = bF()
1017- let cG = bG()
1018- let gl = aP(aR(cD, cE), aR(cF, cG))
1019- let ha = aP(cy, gl)
1020- let gY = (cD - cy)
1021- let gZ = (cF - ha)
1022- gr(gY, gZ)
1041+ let cH = bF()
1042+ let cJ = bG()
1043+ let cI = bH()
1044+ 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)
10231050 }
10241051
10251052
10261053
1027-@Callable(cc)
1028-func changeSettings (fN,fO,fP,fQ,fR,fS,fT,fU,fV,dI) = if ((cc.caller != ak()))
1054+@Callable(cg)
1055+func changeSettings (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = if ((cg.caller != am()))
10291056 then throw("Invalid changeSettings params")
1030- else fM(fN, fO, fP, fQ, fR, fS, fT, fU, fV, dI)
1031-
1032-
1033-
1034-@Callable(cc)
1035-func initialize (cD,cF,fQ,fN,fO,fP,fR,hb,hc,hd,fS,fT,fU,fV,dI) = if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cD))
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))
10361063 then true
1037- else (0 >= cF))
1064+ else (0 >= cJ))
10381065 then true
1039- else (0 >= fQ))
1066+ else (0 >= gp))
10401067 then true
1041- else (0 >= fN))
1068+ else (0 >= gm))
10421069 then true
1043- else (0 >= fO))
1070+ else (0 >= gn))
10441071 then true
1045- else (0 >= fP))
1072+ else (0 >= go))
10461073 then true
1047- else (0 >= fR))
1074+ else (0 >= gq))
10481075 then true
1049- else (0 >= fS))
1076+ else (0 >= gr))
10501077 then true
1051- else (0 >= fT))
1078+ else (0 >= gs))
10521079 then true
1053- else (0 >= fU))
1080+ else (0 >= gt))
10541081 then true
1055- else (0 >= fV))
1082+ else (0 >= gu))
10561083 then true
1057- else (0 >= dI))
1084+ else (0 >= dO))
10581085 then true
1059- else ct())
1086+ else (0 >= gv))
1087+ then true
1088+ else (gv > aK))
1089+ then true
1090+ else (0 >= gw))
1091+ then true
1092+ else cx())
10601093 then throw("Invalid initialize parameters")
1061- else ((((gt(cD, cF, 0, 0, 0, 0, 0, 0) ++ fM(fN, fO, fP, fQ, fR, fS, fT, fU, fV, dI)) ++ fW((lastBlock.timestamp + fQ), 0, 0, 0, 0)) ++ gE(0)) ++ [BooleanEntry(l, true), StringEntry(c, hb), StringEntry(a, hc), StringEntry(S, hd)])
1062-
1063-
1064-
1065-@Callable(cc)
1066-func decreasePosition (gC,he,hf) = {
1067- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1068- if ((hg == hg))
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))
10691102 then {
1070- let cl = cb(cc)
1071- if (if (if (if (if ((0 >= gC))
1072- then true
1073- else !(ct()))
1074- then true
1075- else !(cd(aP(aI, he), bC(), true)))
1076- then true
1077- else !(cs(cl)))
1078- then true
1079- else cu())
1103+ let cp = cf(cg)
1104+ if (if (if (if (if ((0 >= hd))
1105+ then true
1106+ else !(cx()))
1107+ then true
1108+ else !(ch(aR(aK, hs), bE(), true)))
1109+ then true
1110+ else !(cw(cp)))
1111+ then true
1112+ else cy())
10801113 then throw("Invalid decreasePosition parameters")
10811114 else {
1082- let hh = ck(cl)
1083- let gJ = hh._1
1084- let hi = hh._2
1085- let hj = hh._3
1086- let hk = hh._4
1087- let hl = if ((gJ > 0))
1088- then aD
1089- else aC
1090- let hm = (hl == aC)
1091- let hn = aR(gC, he)
1092- let ho = dZ(cl, aL)
1093- let hp = ho._1
1094- let dY = ho._2
1095- let hq = if ((hp > hn))
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))
1121+ then aF
1122+ 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))
10961129 then {
1097- let hr = cL(hm, hn)
1098- let et = hr._1
1099- let cM = hr._2
1100- let cN = hr._3
1101- let eB = hr._4
1102- let hs = aY(et)
1103- if (if ((hf != 0))
1104- then (hf > hs)
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)
11051138 else false)
1106- then throw(((("Too little base asset exchanged, got " + toString(hs)) + " expected ") + toString(hf)))
1139+ then throw(((("Too little base asset exchanged, got " + toString(hG)) + " expected ") + toString(ht)))
11071140 else {
1108- let ey = aP(aR(dY, hs), aY(gJ))
1109- let ht = cZ(gJ, hi, hk, ey)
1110- let di = ht._1
1111- let dj = ht._2
1112- let de = ht._3
1113- let eu = hn
1114- let hu = (dY - ey)
1115- let hv = if ((gJ > 0))
1116- then ((hp - eu) - hu)
1117- else ((hu + hp) - eu)
1118- let hw = (gJ + et)
1119- $Tuple12(hw, di, aY(hv), ci(hw), cN, cM, eB, (bI() - hn), (bZ() - (if ((hw > 0))
1120- then aY(et)
1121- else 0)), (bY() - (if ((0 > hw))
1122- then aY(et)
1123- else 0)), (bK() - (if ((hw > 0))
1124- then hn
1125- else 0)), (bJ() - (if ((0 > hw))
1126- then hn
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
11271160 else 0)))
11281161 }
11291162 }
11301163 else throw("Close position first")
1131- let hw = hq._1
1132- let hx = hq._2
1133- let hy = hq._3
1134- let hz = hq._4
1135- let cN = hq._5
1136- let cM = hq._6
1137- let eB = hq._7
1138- let eE = hq._8
1139- let eC = hq._9
1140- let eD = hq._10
1141- let hA = hq._11
1142- let hB = hq._12
1143- let hC = invoke(aq(), "notifyNotional", [cl, hy], nil)
1144- if ((hC == hC))
1145- then (gg(cl, hw, hx, hy, hz) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB))
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))
11461179 else throw("Strict value is not equal to itself.")
11471180 }
11481181 }
11491182 else throw("Strict value is not equal to itself.")
11501183 }
11511184
11521185
11531186
1154-@Callable(cc)
1155-func increasePosition (hl,he,hf,hD) = {
1156- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1157- if ((hg == hg))
1187+@Callable(cg)
1188+func increasePosition (hz,hs,ht,hR) = {
1189+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1190+ if ((hu == hu))
11581191 then {
1159- let cl = cb(cc)
1160- let hE = cc.payments[0].amount
1161- let ay = cc.payments[0].assetId
1162- let hF = toBase58String(value(ay))
1163- let hG = (ay == am())
1164- let hH = ax(hF)
1165- if (if (if (if (if (if (if (if (if ((hl != aC))
1166- then (hl != aD)
1192+ let cp = cf(cg)
1193+ let hS = cg.payments[0].amount
1194+ 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)
11671200 else false)
11681201 then true
1169- else (0 >= hE))
1170- then true
1171- else !(ct()))
1172- then true
1173- else if (!(hG))
1174- then !(hH)
1202+ else (0 >= hS))
1203+ then true
1204+ else !(cx()))
1205+ then true
1206+ else if (!(hU))
1207+ then !(hV)
11751208 else false)
11761209 then true
1177- else !(gI(cl, hF)))
1178- then true
1179- else !(cd(aP(aI, he), bC(), true)))
1180- then true
1181- else cu())
1182- then true
1183- else cv())
1210+ else !(fS(cp, hT)))
1211+ then true
1212+ else !(ch(aR(aK, hs), bE(), true)))
1213+ then true
1214+ else cy())
1215+ then true
1216+ else cz())
11841217 then throw("Invalid increasePosition parameters")
11851218 else {
1186- let hI = gQ(cl, gV(cc))
1187- let fK = hI._1
1188- let fL = hI._2
1189- let hJ = aR(hE, fK)
1190- let gC = (hE - hJ)
1191- let hK = if (hH)
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)
11921225 then {
1193- let hL = invoke(au(), "borrow", [cl], [AttachedPayment(ay, gC)])
1194- if ((hL == hL))
1226+ let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1227+ if ((hZ == hZ))
11951228 then {
1196- let hM = assetBalance(this, am())
1197- if ((hM == hM))
1229+ let ia = assetBalance(this, ao())
1230+ if ((ia == ia))
11981231 then {
1199- let hN = invoke(av(), "swap", [toBase58String(am()), 0], [AttachedPayment(ay, hJ)])
1200- if ((hN == hN))
1232+ let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1233+ if ((ib == ib))
12011234 then {
1202- let hO = assetBalance(this, am())
1203- if ((hO == hO))
1235+ let ic = assetBalance(this, ao())
1236+ if ((ic == ic))
12041237 then {
1205- let hP = (hO - hM)
1206- if ((hP == hP))
1207- then hP
1238+ let id = (ic - ia)
1239+ if ((id == id))
1240+ then id
12081241 else throw("Strict value is not equal to itself.")
12091242 }
12101243 else throw("Strict value is not equal to itself.")
12111244 }
12121245 else throw("Strict value is not equal to itself.")
12131246 }
12141247 else throw("Strict value is not equal to itself.")
12151248 }
12161249 else throw("Strict value is not equal to itself.")
12171250 }
1218- else hJ
1219- if ((hK == hK))
1251+ else hX
1252+ if ((hY == hY))
12201253 then {
1221- let hQ = invoke(as(), "acceptPaymentWithLink", [cl, hD], [AttachedPayment(am(), hK)])
1222- if ((hQ == hQ))
1254+ let ie = invoke(au(), "acceptPaymentWithLink", [cp, hR], [AttachedPayment(ao(), hY)])
1255+ if ((ie == ie))
12231256 then {
1224- let hR = {
1225- let cn = hQ
1226- if ($isInstanceOf(cn, "Int"))
1257+ let if = {
1258+ let cr = ie
1259+ if ($isInstanceOf(cr, "Int"))
12271260 then {
1228- let gT = cn
1229- gT
1261+ let gd = cr
1262+ gd
12301263 }
12311264 else throw("Invalid referrerFee")
12321265 }
1233- let hS = (hK - hR)
1234- let hT = ck(cl)
1235- let gJ = hT._1
1236- let hi = hT._2
1237- let hj = hT._3
1238- let hk = hT._4
1239- let ge = (gJ == 0)
1240- let hU = if ((gJ > 0))
1241- then (hl == aC)
1242- else (hl == aD)
1243- let hV = if (!(ge))
1244- then hU
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
12451278 else false
1246- let hm = (hl == aC)
1247- let hW = if (if (ge)
1279+ let hA = (hz == aE)
1280+ let ik = if (if (gF)
12481281 then true
1249- else hV)
1282+ else ij)
12501283 then {
1251- let hn = aR(gC, he)
1252- let hX = cL(hm, hn)
1253- let cP = hX._1
1254- let cM = hX._2
1255- let cN = hX._3
1256- let eB = hX._4
1257- if (if ((hf != 0))
1258- then (hf > aY(cP))
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))
12591292 else false)
1260- then throw(((("Limit error: " + toString(aY(cP))) + " < ") + toString(hf)))
1293+ then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(ht)))
12611294 else {
1262- let hw = (gJ + cP)
1263- let hA = (bK() + (if ((hw > 0))
1264- then hn
1295+ let hK = (fT + cT)
1296+ let hO = (bM() + (if ((hK > 0))
1297+ then hB
12651298 else 0))
1266- let hB = (bJ() + (if ((0 > hw))
1267- then hn
1299+ let hP = (bL() + (if ((0 > hK))
1300+ then hB
12681301 else 0))
1269- let hY = aP(hn, he)
1270- let hZ = cZ(gJ, hi, hk, hY)
1271- let di = hZ._1
1272- let dT = hZ._2
1273- let dU = hZ._3
1274- if (!(dA(cM, cN)))
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)))
12751308 then throw("Over max spread limit")
1276- else if (!(dF(hA, hB)))
1309+ else if (!(dL(hO, hP)))
12771310 then throw("Over max open notional")
1278- else $Tuple12(hw, di, (hj + hn), ci(hw), cN, cM, eB, (bI() + hn), (bZ() + (if ((hw > 0))
1279- then aY(cP)
1280- else 0)), (bY() + (if ((0 > hw))
1281- then aY(cP)
1282- else 0)), hA, hB)
1311+ else $Tuple12(hK, dm, (hx + hB), cm(hK), cR, cQ, eH, (bK() + hB), (cb() + (if ((hK > 0))
1312+ then ba(cT)
1313+ else 0)), (ca() + (if ((0 > hK))
1314+ then ba(cT)
1315+ else 0)), hO, hP)
12831316 }
12841317 }
12851318 else {
1286- let hn = aR(gC, he)
1287- let ia = dZ(toString(cc.caller), aL)
1288- let hp = ia._1
1289- let dY = ia._2
1290- if ((hp > hn))
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))
12911324 then throw("Use decreasePosition to decrease position size")
12921325 else throw("Close position first")
12931326 }
1294- let hw = hW._1
1295- let hx = hW._2
1296- let hy = hW._3
1297- let hz = hW._4
1298- let cN = hW._5
1299- let cM = hW._6
1300- let eB = hW._7
1301- let eE = hW._8
1302- let eC = hW._9
1303- let eD = hW._10
1304- let hA = hW._11
1305- let hB = hW._12
1306- let ib = (hS / 2)
1307- let ic = (hS - ib)
1308- let id = invoke(ap(), "addLocked", nil, [AttachedPayment(am(), gC)])
1309- if ((id == id))
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)
13101343 then {
1311- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1312- if ((ie == ie))
1344+ let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1345+ if ((iq == iq))
1346+ then nil
1347+ else throw("Strict value is not equal to itself.")
1348+ }
1349+ else nil
1350+ if ((iq == iq))
1351+ then {
1352+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1353+ if ((ir == ir))
13131354 then {
1314- let if = invoke(aq(), "notifyFees", [cl, hS], nil)
1315- if ((if == if))
1355+ let is = invoke(as(), "notifyFees", [cp, ig], nil)
1356+ if ((is == is))
13161357 then {
1317- let hC = invoke(aq(), "notifyNotional", [cl, hy], nil)
1318- if ((hC == hC))
1319- then ((((((gg(cl, hw, hx, hy, hz) ++ gd(ge, cl)) ++ gc(cl, hF)) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB)) ++ gF(ib)) ++ gE((bA() + gC))) ++ gG(fL, cc))
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))
13201361 else throw("Strict value is not equal to itself.")
13211362 }
13221363 else throw("Strict value is not equal to itself.")
13231364 }
13241365 else throw("Strict value is not equal to itself.")
13251366 }
13261367 else throw("Strict value is not equal to itself.")
13271368 }
13281369 else throw("Strict value is not equal to itself.")
13291370 }
13301371 else throw("Strict value is not equal to itself.")
13311372 }
13321373 }
13331374 else throw("Strict value is not equal to itself.")
13341375 }
13351376
13361377
13371378
1338-@Callable(cc)
1379+@Callable(cg)
13391380 func addMargin () = {
1340- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1341- if ((hg == hg))
1381+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1382+ if ((hu == hu))
13421383 then {
1343- let cl = toString(cc.caller)
1344- let hE = cc.payments[0].amount
1345- let ay = cc.payments[0].assetId
1346- let hF = toBase58String(value(ay))
1347- let hG = (ay == am())
1348- let hH = ax(hF)
1349- if (if (if (if (if (if (if (!(hG))
1350- then !(hH)
1384+ let cp = toString(cg.caller)
1385+ let hS = cg.payments[0].amount
1386+ 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)
13511392 else false)
13521393 then true
1353- else !(cs(toString(cc.caller))))
1354- then true
1355- else !(gK(cl, hF)))
1356- then true
1357- else !(ct()))
1358- then true
1359- else cu())
1360- then true
1361- else cv())
1394+ else !(cw(toString(cg.caller))))
1395+ then true
1396+ else !(fU(cp, hT)))
1397+ then true
1398+ else !(cx()))
1399+ then true
1400+ else cy())
1401+ then true
1402+ else cz())
13621403 then throw("Invalid addMargin parameters")
13631404 else {
1364- let ig = gQ(cl, gV(cc))
1365- let fK = ig._1
1366- let fL = ig._2
1367- let hJ = aR(hE, fK)
1368- let gC = (hE - hJ)
1369- let hK = if (hH)
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)
13701411 then {
1371- let hL = invoke(au(), "borrow", [cl], [AttachedPayment(ay, gC)])
1372- if ((hL == hL))
1412+ let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
1413+ if ((hZ == hZ))
13731414 then {
1374- let hM = assetBalance(this, am())
1375- if ((hM == hM))
1415+ let ia = assetBalance(this, ao())
1416+ if ((ia == ia))
13761417 then {
1377- let hN = invoke(av(), "swap", [toBase58String(am()), 0], [AttachedPayment(ay, hJ)])
1378- if ((hN == hN))
1418+ let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
1419+ if ((ib == ib))
13791420 then {
1380- let hO = assetBalance(this, am())
1381- if ((hO == hO))
1421+ let ic = assetBalance(this, ao())
1422+ if ((ic == ic))
13821423 then {
1383- let hP = (hO - hM)
1384- if ((hP == hP))
1385- then hP
1424+ let id = (ic - ia)
1425+ if ((id == id))
1426+ then id
13861427 else throw("Strict value is not equal to itself.")
13871428 }
13881429 else throw("Strict value is not equal to itself.")
13891430 }
13901431 else throw("Strict value is not equal to itself.")
13911432 }
13921433 else throw("Strict value is not equal to itself.")
13931434 }
13941435 else throw("Strict value is not equal to itself.")
13951436 }
1396- else hJ
1397- if ((hK == hK))
1437+ else hX
1438+ if ((hY == hY))
13981439 then {
1399- let hQ = invoke(as(), "acceptPayment", [cl], [AttachedPayment(am(), hK)])
1400- if ((hQ == hQ))
1440+ let ie = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), hY)])
1441+ if ((ie == ie))
14011442 then {
1402- let hR = {
1403- let cn = hQ
1404- if ($isInstanceOf(cn, "Int"))
1443+ let if = {
1444+ let cr = ie
1445+ if ($isInstanceOf(cr, "Int"))
14051446 then {
1406- let gT = cn
1407- gT
1447+ let gd = cr
1448+ gd
14081449 }
14091450 else throw("Invalid referrerFee")
14101451 }
1411- let hS = (hK - hR)
1412- let ih = ck(cl)
1413- let gJ = ih._1
1414- let hi = ih._2
1415- let hj = ih._3
1416- let hk = ih._4
1417- let ib = (hS / 2)
1418- let ic = (hS - ib)
1419- let id = invoke(ap(), "addLocked", nil, [AttachedPayment(am(), gC)])
1420- if ((id == id))
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)
14211462 then {
1422- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1423- if ((ie == ie))
1463+ let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
1464+ if ((iq == iq))
1465+ then nil
1466+ else throw("Strict value is not equal to itself.")
1467+ }
1468+ else nil
1469+ if ((iq == iq))
1470+ then {
1471+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1472+ if ((ir == ir))
14241473 then {
1425- let if = invoke(aq(), "notifyFees", [cl, hS], nil)
1426- if ((if == if))
1427- then (((gg(cl, gJ, (hi + gC), hj, hk) ++ gF(ib)) ++ gE((bA() + gC))) ++ gG(fL, cc))
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))
14281477 else throw("Strict value is not equal to itself.")
14291478 }
14301479 else throw("Strict value is not equal to itself.")
14311480 }
14321481 else throw("Strict value is not equal to itself.")
14331482 }
14341483 else throw("Strict value is not equal to itself.")
14351484 }
14361485 else throw("Strict value is not equal to itself.")
14371486 }
14381487 }
14391488 else throw("Strict value is not equal to itself.")
14401489 }
14411490
14421491
14431492
1444-@Callable(cc)
1445-func removeMargin (gC) = {
1446- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1447- if ((hg == hg))
1493+@Callable(cg)
1494+func removeMargin (hd) = {
1495+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1496+ if ((hu == hu))
14481497 then {
1449- let cl = toString(cc.caller)
1450- if (if (if (if ((0 >= gC))
1451- then true
1452- else !(cs(cl)))
1453- then true
1454- else !(ct()))
1455- then true
1456- else cu())
1498+ let cp = toString(cg.caller)
1499+ if (if (if (if ((0 >= hd))
1500+ then true
1501+ else !(cw(cp)))
1502+ then true
1503+ else !(cx()))
1504+ then true
1505+ else cy())
14571506 then throw("Invalid removeMargin parameters")
14581507 else {
1459- let ii = ck(cl)
1460- let gJ = ii._1
1461- let hi = ii._2
1462- let hj = ii._3
1463- let hk = ii._4
1464- let ij = -(gC)
1465- let ik = cZ(gJ, hi, hk, ij)
1466- let di = ik._1
1467- let dj = ik._2
1468- if ((dj != 0))
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
1517+ if ((dn != 0))
14691518 then throw("Invalid removed margin amount")
14701519 else {
1471- let il = ee(di, dj, hj)
1472- if (!(cd(il, bC(), true)))
1473- then throw(((("Too much margin removed: " + toString(il)) + " < ") + toString(bC())))
1520+ let iz = ek(dm, dn, hx)
1521+ if (!(ch(iz, bE(), true)))
1522+ then throw(((("Too much margin removed: " + toString(iz)) + " < ") + toString(bE())))
14741523 else {
1475- let im = toBase58String(am())
1476- let in = gN(cl)
1477- let io = in._1
1478- let ip = in._2
1479- let iq = if ((gC > io))
1480- then io
1481- else gC
1482- let ir = if ((io > gC))
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))
14831532 then 0
1484- else (gC - io)
1485- let is = (io - iq)
1486- let it = if ((is > 0))
1533+ else (hd - iC)
1534+ let iG = (iC - iE)
1535+ let iH = if ((iG > 0))
14871536 then nil
1488- else gc(cl, im)
1489- let iu = if (((iq + ir) != gC))
1490- then throw(((((("toRepay=" + toString(iq)) + " + toWithdraw=") + toString(ir)) + " != ") + toString(gC)))
1537+ else gD(cp, iA)
1538+ let iI = if (((iE + iF) != hd))
1539+ then throw(((((("toRepay=" + toString(iE)) + " + toWithdraw=") + toString(iF)) + " != ") + toString(hd)))
14911540 else nil
1492- if ((iu == iu))
1541+ if ((iI == iI))
14931542 then {
1494- let iv = invoke(ap(), "withdrawLocked", [gC], nil)
1495- if ((iv == iv))
1543+ let iJ = if ((iF > 0))
14961544 then {
1497- let iw = if ((iq > 0))
1545+ let iJ = invoke(ar(), "withdrawLocked", [iF], nil)
1546+ if ((iJ == iJ))
1547+ then nil
1548+ else throw("Strict value is not equal to itself.")
1549+ }
1550+ else nil
1551+ if ((iJ == iJ))
1552+ then {
1553+ let iK = if ((iE > 0))
14981554 then {
1499- let ix = invoke(au(), "repay", [cl, ip], [AttachedPayment(am(), iq)])
1500- if ((ix == ix))
1501- then [ScriptTransfer(cc.caller, iq, fromBase58String(ip))]
1555+ let iL = invoke(aw(), "repay", [cp, iE, iD], nil)
1556+ if ((iL == iL))
1557+ then [ScriptTransfer(cg.caller, iE, fromBase58String(iD))]
15021558 else throw("Strict value is not equal to itself.")
15031559 }
15041560 else nil
1505- if ((iw == iw))
1506- then ((((gg(cl, gJ, di, hj, ci(gJ)) ++ (if ((ir > 0))
1507- then gB(cc.caller, ir)
1508- else nil)) ++ gE((bA() - gC))) ++ it) ++ iw)
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)
15091565 else throw("Strict value is not equal to itself.")
15101566 }
15111567 else throw("Strict value is not equal to itself.")
15121568 }
15131569 else throw("Strict value is not equal to itself.")
15141570 }
15151571 }
15161572 }
15171573 }
15181574 else throw("Strict value is not equal to itself.")
15191575 }
15201576
15211577
15221578
1523-@Callable(cc)
1524-func closePosition (gh,iy) = {
1525- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1526- if ((hg == hg))
1579+@Callable(cg)
1580+func closePosition (gI,iM) = {
1581+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1582+ if ((hu == hu))
15271583 then {
1528- let cl = cb(cc)
1529- let iz = valueOrErrorMessage(addressFromString(cl), "Invalid caller")
1530- if (if (if (if (if (!(cs(cl)))
1531- then true
1532- else !(ct()))
1533- then true
1534- else cu())
1535- then true
1536- else (0 >= gh))
1537- then true
1538- else (0 > iy))
1584+ let cp = cf(cg)
1585+ let iN = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
1586+ if (if (if (if (if (!(cw(cp)))
1587+ then true
1588+ else !(cx()))
1589+ then true
1590+ else cy())
1591+ then true
1592+ else (0 >= gI))
1593+ then true
1594+ else (0 > iM))
15391595 then throw("Invalid closePosition parameters")
15401596 else {
1541- let iA = ck(cl)
1542- let gJ = iA._1
1543- let hi = iA._2
1544- let hj = iA._3
1545- let hk = iA._4
1546- let iB = if ((aY(gJ) > gh))
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))
15471603 then {
1548- let hl = if ((gJ > 0))
1549- then aD
1550- else aC
1551- let hm = (hl == aC)
1552- let iC = du((gJ > 0), gh, true)
1553- let eu = iC._1
1554- let cM = iC._2
1555- let cN = iC._3
1556- let eB = iC._4
1557- let et = if ((gJ > 0))
1558- then -(gh)
1559- else gh
1560- let iD = dZ(cl, aL)
1561- let hp = iD._1
1562- let dY = iD._2
1563- let iE = aP(aY(et), aY(gJ))
1564- let ey = aR(dY, iE)
1565- let iF = cZ(gJ, hi, hk, ey)
1566- let di = iF._1
1567- let iG = iF._2
1568- let de = iF._3
1569- let hu = (dY - ey)
1570- let hv = if ((gJ > 0))
1571- then ((hp - eu) - hu)
1572- else ((hu + hp) - eu)
1573- let iH = aR(di, iE)
1574- let hw = (gJ + et)
1575- let hy = aY(hv)
1576- let iI = ci(hw)
1577- let eE = (bI() - eu)
1578- if (if ((iy != 0))
1579- then (iy > eu)
1604+ let hz = if ((fT > 0))
1605+ then aF
1606+ 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)
15801637 else false)
1581- then throw(((("Limit error: " + toString(eu)) + " < ") + toString(iy)))
1582- else $Tuple15(hw, iH, hy, iI, iG, ey, (aY((di - iH)) + ey), cM, cN, eB, eE, (bZ() - (if ((hw > 0))
1583- then aY(et)
1584- else 0)), (bY() - (if ((0 > hw))
1585- then aY(et)
1586- else 0)), (bK() - (if ((hw > 0))
1587- then eu
1588- else 0)), (bJ() - (if ((0 > hw))
1589- then eu
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
15901647 else 0)))
15911648 }
1592- else if ((gh > aY(gJ)))
1649+ else if ((gI > ba(fT)))
15931650 then throw("Invalid closePosition parameters")
15941651 else {
1595- let iJ = ev(cl, true)
1596- let eu = iJ._1
1597- let iG = iJ._2
1598- let ey = iJ._3
1599- let ez = iJ._4
1600- let cM = iJ._5
1601- let cN = iJ._6
1602- let eB = iJ._7
1603- let eE = iJ._8
1604- let dU = iJ._9
1605- let eC = iJ._10
1606- let eD = iJ._11
1607- let hA = iJ._12
1608- let hB = iJ._13
1609- if (if ((iy != 0))
1610- then (iy > eu)
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)
16111668 else false)
1612- then throw(((("Limit error: " + toString(eu)) + " < ") + toString(iy)))
1613- else $Tuple15(0, 0, 0, 0, iG, ey, ez, cM, cN, eB, eE, eC, eD, hA, hB)
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)
16141671 }
1615- let hw = iB._1
1616- let iH = iB._2
1617- let hy = iB._3
1618- let iI = iB._4
1619- let iG = iB._5
1620- let ey = iB._6
1621- let ez = iB._7
1622- let cM = iB._8
1623- let cN = iB._9
1624- let eB = iB._10
1625- let eE = iB._11
1626- let eC = iB._12
1627- let eD = iB._13
1628- let hA = iB._14
1629- let hB = iB._15
1630- if ((iG > 0))
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))
16311688 then throw("Unable to close position with bad debt")
16321689 else {
1633- let iK = aY(ez)
1634- let iL = (bA() - iK)
1635- let iM = if ((0 > iL))
1636- then $Tuple2(0, aY(iL))
1637- else $Tuple2(iL, 0)
1638- let iN = iM._1
1639- let iO = iM._2
1640- let iP = invoke(ap(), "withdrawLocked", [iK], nil)
1641- if ((iP == iP))
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))
1702+ 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))
1706+ else throw("Strict value is not equal to itself.")
1707+ }
1708+ else {
1709+ let jg = invoke(aw(), "realizePartiallyAndClose", [cp, iZ, iD], nil)
1710+ if ((jg == jg))
1711+ then $Tuple2([ScriptTransfer(iN, iZ, fromBase58String(iD))], 0)
1712+ else throw("Strict value is not equal to itself.")
1713+ }
1714+ else $Tuple2(nil, iZ)
1715+ if ((jf == jf))
16421716 then {
1643- let iQ = gN(cl)
1644- let io = iQ._1
1645- let ip = iQ._2
1646- let iR = if ((io > 0))
1647- then if ((iK >= io))
1648- then {
1649- let ix = invoke(au(), "repay", [cl, ip], [AttachedPayment(am(), io)])
1650- if ((ix == ix))
1651- then $Tuple2([ScriptTransfer(iz, io, fromBase58String(ip))], (iK - io))
1652- else throw("Strict value is not equal to itself.")
1653- }
1654- else {
1655- let iS = invoke(au(), "realizePartiallyAndClose", [cl, ip], [AttachedPayment(am(), iK)])
1656- if ((iS == iS))
1657- then $Tuple2([ScriptTransfer(iz, iK, fromBase58String(ip))], 0)
1658- else throw("Strict value is not equal to itself.")
1659- }
1660- else $Tuple2(nil, iK)
1661- if ((iR == iR))
1717+ let jh = jf._2
1718+ let ji = jf._1
1719+ let jj = if ((jh > 0))
16621720 then {
1663- let iT = iR._2
1664- let iU = iR._1
1665- let hC = invoke(aq(), "notifyNotional", [cl, 0], nil)
1666- if ((hC == hC))
1667- then (((((if ((hw == 0))
1668- then gA(cl)
1669- else gg(cl, hw, iH, hy, iI)) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB)) ++ (if ((iT > 0))
1670- then gB(iz, iT)
1671- else nil)) ++ gE(iN)) ++ iU)
1721+ let jj = invoke(ar(), "withdrawLocked", [jh], nil)
1722+ if ((jj == jj))
1723+ then nil
1724+ else throw("Strict value is not equal to itself.")
1725+ }
1726+ else nil
1727+ if ((jj == jj))
1728+ 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)
16721736 else throw("Strict value is not equal to itself.")
16731737 }
16741738 else throw("Strict value is not equal to itself.")
16751739 }
16761740 else throw("Strict value is not equal to itself.")
16771741 }
16781742 }
16791743 }
16801744 else throw("Strict value is not equal to itself.")
16811745 }
16821746
16831747
16841748
1685-@Callable(cc)
1686-func liquidate (cl) = {
1687- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1688- if ((hg == hg))
1749+@Callable(cg)
1750+func liquidate (cp) = {
1751+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1752+ if ((hu == hu))
16891753 then {
1690- let iV = ei(cl, aL)
1691- let il = if (dK())
1754+ let jk = eo(cp, aN)
1755+ let iz = if (dQ())
16921756 then {
1693- let iW = ei(cl, aM)
1694- aZ(iV, iW)
1757+ let jl = eo(cp, aO)
1758+ bb(jk, jl)
16951759 }
1696- else iV
1697- if (if (if (if (!(cd(il, bP(), false)))
1698- then true
1699- else !(cs(cl)))
1700- then true
1701- else !(ct()))
1702- then true
1703- else cu())
1760+ else jk
1761+ if (if (if (if (!(ch(iz, bR(), false)))
1762+ then true
1763+ else !(cw(cp)))
1764+ then true
1765+ else !(cx()))
1766+ then true
1767+ else cy())
17041768 then throw("Unable to liquidate")
1705- else if (if (if ((iV > bQ()))
1706- then (bR() > 0)
1769+ else if (if (if ((jk > bS()))
1770+ then (bT() > 0)
17071771 else false)
1708- then (aI > bR())
1772+ then (aK > bT())
17091773 else false)
17101774 then {
1711- let iX = ck(cl)
1712- let gJ = iX._1
1713- let hi = iX._2
1714- let hj = iX._3
1715- let hk = iX._4
1716- let hl = if ((gJ > 0))
1717- then aD
1718- else aC
1719- let hm = (hl == aC)
1720- let eu = eo(cl, gJ)
1721- let iY = dZ(cl, aL)
1722- let hp = iY._1
1723- let dY = iY._2
1724- let iZ = cL(hm, eu)
1725- let et = iZ._1
1726- let cM = iZ._2
1727- let cN = iZ._3
1728- let eB = iZ._4
1729- let ja = aP(aY(et), aY(gJ))
1730- let ey = aR(dY, ja)
1731- let jb = cZ(gJ, hi, hk, ey)
1732- let di = jb._1
1733- let dj = jb._2
1734- let de = jb._3
1735- let hu = (dY - ey)
1736- let hv = if ((gJ > 0))
1737- then ((hp - eu) - hu)
1738- else ((hu + hp) - eu)
1739- let jc = aR(eu, bQ())
1740- let jd = (jc / 2)
1741- let ic = (jc - jd)
1742- let iH = (di - jc)
1743- let hw = (gJ + et)
1744- let hy = aY(hv)
1745- let iI = ci(hw)
1746- let eE = (bI() - eu)
1747- let iL = (bA() - jc)
1748- let je = if ((0 > iL))
1749- then $Tuple2(0, aY(iL))
1750- else $Tuple2(iL, 0)
1751- let jf = je._1
1752- let iO = je._2
1753- let jg = gN(cl)
1754- let io = jg._1
1755- let ip = jg._2
1756- let jh = if ((io > 0))
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))
1781+ then aF
1782+ 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))
17571821 then {
1758- let ji = aR(io, ja)
1759- let iS = invoke(au(), "realizePartially", [cl, ip, ji], nil)
1760- if ((iS == iS))
1822+ let jx = aT(iC, jp)
1823+ let jg = invoke(aw(), "realizePartially", [cp, iD, jx], nil)
1824+ if ((jg == jg))
17611825 then nil
17621826 else throw("Strict value is not equal to itself.")
17631827 }
17641828 else nil
1765- if ((jh == jh))
1829+ if ((jw == jw))
17661830 then {
1767- let iP = invoke(ap(), "withdrawLocked", [jc], nil)
1768- if ((iP == iP))
1831+ let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1832+ if ((jj == jj))
17691833 then {
1770- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1771- if ((ie == ie))
1834+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1835+ if ((ir == ir))
17721836 then {
1773- let hC = invoke(aq(), "notifyNotional", [cl, hy], nil)
1774- if ((hC == hC))
1775- then (((gg(cl, hw, iH, hy, iI) ++ gt(cM, cN, eB, eE, (bZ() - (if ((hw > 0))
1776- then aY(et)
1777- else 0)), (bY() - (if ((0 > hw))
1778- then aY(et)
1779- else 0)), (bK() - (if ((hw > 0))
1780- then eu
1781- else 0)), (bJ() - (if ((0 > hw))
1782- then eu
1783- else 0)))) ++ gB(cc.caller, jd)) ++ gE(jf))
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))
17841848 else throw("Strict value is not equal to itself.")
17851849 }
17861850 else throw("Strict value is not equal to itself.")
17871851 }
17881852 else throw("Strict value is not equal to itself.")
17891853 }
17901854 else throw("Strict value is not equal to itself.")
17911855 }
17921856 else {
1793- let jj = ev(cl, false)
1794- let dT = jj._1
1795- let dj = jj._2
1796- let dU = jj._3
1797- let dV = jj._4
1798- let cM = jj._5
1799- let cN = jj._6
1800- let eB = jj._7
1801- let eE = jj._8
1802- let eu = jj._9
1803- let eC = jj._10
1804- let eD = jj._11
1805- let hA = jj._12
1806- let hB = jj._13
1807- let jc = aR(eu, bQ())
1808- let jd = (jc / 2)
1809- let ic = (jc - jd)
1810- let iL = (bA() - jc)
1811- let jk = if ((0 > iL))
1812- then $Tuple2(0, aY(iL))
1813- else $Tuple2(iL, 0)
1814- let jf = jk._1
1815- let iO = jk._2
1816- let jl = gN(cl)
1817- let io = jl._1
1818- let ip = jl._2
1819- let jh = if ((io > 0))
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))
18201884 then {
1821- let iS = invoke(au(), "realizePartiallyAndClose", [cl, ip], nil)
1822- if ((iS == iS))
1885+ let jg = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iD], nil)
1886+ if ((jg == jg))
18231887 then nil
18241888 else throw("Strict value is not equal to itself.")
18251889 }
18261890 else nil
1827- if ((jh == jh))
1891+ if ((jw == jw))
18281892 then {
1829- let gT = if ((dj > 0))
1893+ let gd = if ((dn > 0))
18301894 then {
1831- let jm = invoke(ap(), "exchangeFreeAndLocked", [dj], nil)
1832- if ((jm == jm))
1895+ let jB = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
1896+ if ((jB == jB))
18331897 then nil
18341898 else throw("Strict value is not equal to itself.")
18351899 }
18361900 else nil
1837- if ((gT == gT))
1901+ if ((gd == gd))
18381902 then {
1839- let iP = invoke(ap(), "withdrawLocked", [jc], nil)
1840- if ((iP == iP))
1903+ let jj = invoke(ar(), "withdrawLocked", [jr], nil)
1904+ if ((jj == jj))
18411905 then {
1842- let ie = invoke(ap(), "addFree", nil, [AttachedPayment(am(), ic)])
1843- if ((ie == ie))
1906+ let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
1907+ if ((ir == ir))
18441908 then {
1845- let hC = invoke(aq(), "notifyNotional", [cl, 0], nil)
1846- if ((hC == hC))
1847- then (((gA(cl) ++ gt(cM, cN, eB, eE, eC, eD, hA, hB)) ++ gB(cc.caller, jd)) ++ gE(jf))
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))
18481912 else throw("Strict value is not equal to itself.")
18491913 }
18501914 else throw("Strict value is not equal to itself.")
18511915 }
18521916 else throw("Strict value is not equal to itself.")
18531917 }
18541918 else throw("Strict value is not equal to itself.")
18551919 }
18561920 else throw("Strict value is not equal to itself.")
18571921 }
18581922 }
18591923 else throw("Strict value is not equal to itself.")
18601924 }
18611925
18621926
18631927
1864-@Callable(cc)
1928+@Callable(cg)
18651929 func payFunding () = {
1866- let jn = bL()
1867- if (if (if ((jn > lastBlock.timestamp))
1930+ let jC = bN()
1931+ if (if (if ((jC > lastBlock.timestamp))
18681932 then true
1869- else !(ct()))
1933+ else !(cx()))
18701934 then true
1871- else cu())
1872- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jn)))
1935+ else cy())
1936+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
18731937 else {
1874- let fx = dv()
1875- let jo = fw()
1876- let fA = jo._1
1877- let fB = jo._2
1878- fW((jn + bO()), (bW() + fB), (bX() + fA), aP(fB, fx), aP(fA, fx))
1879- }
1880- }
1881-
1882-
1883-
1884-@Callable(cc)
1938+ let fD = dz()
1939+ let jD = fC()
1940+ let fG = jD._1
1941+ let fH = jD._2
1942+ gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1943+ }
1944+ }
1945+
1946+
1947+
1948+@Callable(cg)
18851949 func syncTerminalPriceToOracle () = {
1886- let jp = fs(dv())
1887- let jq = jp._1
1888- let jr = jp._2
1889- let ez = jp._3
1890- let jm = invoke(ap(), "exchangeFreeAndLocked", [ez], nil)
1891- if ((jm == jm))
1892- then gs(jq, jr)
1950+ let jE = fy(dz())
1951+ let jF = jE._1
1952+ let jG = jE._2
1953+ let eF = jE._3
1954+ let jH = if ((eF != 0))
1955+ then {
1956+ let jH = invoke(ar(), "exchangeFreeAndLocked", [eF], nil)
1957+ if ((jH == jH))
1958+ then nil
1959+ else throw("Strict value is not equal to itself.")
1960+ }
1961+ else nil
1962+ if ((jH == jH))
1963+ then gT(jF, jG)
18931964 else throw("Strict value is not equal to itself.")
18941965 }
18951966
18961967
18971968
1898-@Callable(cc)
1899-func view_calcRemainMarginWithFundingPayment (cl) = {
1900- let hg = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1901- if ((hg == hg))
1969+@Callable(cg)
1970+func view_calcRemainMarginWithFundingPayment (cp) = {
1971+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1972+ if ((hu == hu))
19021973 then {
1903- let js = ck(cl)
1904- let co = js._1
1905- let eb = js._2
1906- let ek = js._3
1907- let ed = js._4
1908- let jt = dZ(cl, aL)
1909- let dQ = jt._1
1910- let dY = jt._2
1911- let ju = cZ(co, eb, ed, dY)
1912- let di = ju._1
1913- let dj = ju._2
1914- let de = ju._3
1915- throw((((((aN(di) + aN(de)) + aN(en(cl))) + aN(dY)) + aN(dj)) + aN(dQ)))
1974+ let jI = co(cp)
1975+ let cs = jI._1
1976+ let eh = jI._2
1977+ let eq = jI._3
1978+ let ej = jI._4
1979+ let jJ = ef(cp, aN)
1980+ let dW = jJ._1
1981+ let ee = jJ._2
1982+ let jK = dd(cs, eh, ej, ee)
1983+ let dm = jK._1
1984+ let dn = jK._2
1985+ let di = jK._3
1986+ throw((((((aP(dm) + aP(di)) + aP(et(cp))) + aP(ee)) + aP(dn)) + aP(dW)))
19161987 }
19171988 else throw("Strict value is not equal to itself.")
19181989 }
19191990
19201991
19211992
1922-@Callable(cc)
1923-func view_getPegAdjustCost (jv) = {
1924- let fr = fs(jv)
1925- throw(toString(fr._3))
1926- }
1927-
1928-
1929-
1930-@Callable(cc)
1993+@Callable(cg)
1994+func view_getPegAdjustCost (gM) = {
1995+ let fx = fy(gM)
1996+ throw(toString(fx._3))
1997+ }
1998+
1999+
2000+
2001+@Callable(cg)
19312002 func view_getTerminalAmmPrice () = {
1932- let jw = eV()
1933- let eZ = jw._1
1934- let fa = jw._2
1935- let gl = aP(aR(eZ, bF()), aR(fa, bG()))
1936- throw(toString(gl))
1937- }
1938-
1939-
1940-
1941-@Callable(cc)
2003+ let jL = fb()
2004+ let ff = jL._1
2005+ let fg = jL._2
2006+ let hj = aR(aT(ff, bH()), aT(fg, bI()))
2007+ throw(toString(hj))
2008+ }
2009+
2010+
2011+
2012+@Callable(cg)
19422013 func view_getFunding () = {
1943- let fx = dv()
1944- let jx = fw()
1945- let fA = jx._1
1946- let fB = jx._2
1947- let jy = aP(fB, fx)
1948- let jz = aP(fA, fx)
1949- throw((((aN(jy) + aN(jz)) + aN(eF())) + aN(dv())))
1950- }
1951-
1952-
1953-
1954-@Callable(cc)
1955-func view_getBorrowedByTrader (cl) = {
1956- let jA = gN(cl)
1957- let io = jA._1
1958- let ip = jA._2
1959- throw((aN(io) + ip))
1960- }
1961-
1962-
1963-
1964-@Callable(cc)
2014+ let fD = dz()
2015+ let jM = fC()
2016+ let fG = jM._1
2017+ let fH = jM._2
2018+ let jN = aR(fH, fD)
2019+ let jO = aR(fG, fD)
2020+ throw((((aP(jN) + aP(jO)) + aP(eL())) + aP(dz())))
2021+ }
2022+
2023+
2024+
2025+@Callable(cg)
2026+func view_getBorrowedByTrader (cp) = {
2027+ let jP = fX(cp)
2028+ let iC = jP._1
2029+ let iD = jP._2
2030+ throw((aP(iC) + iD))
2031+ }
2032+
2033+
2034+
2035+@Callable(cg)
19652036 func computeSpotPrice () = {
1966- let fr = dJ()
1967- $Tuple2(nil, fr)
1968- }
1969-
1970-
1971-
1972-@Callable(cc)
1973-func computeFeeForTraderWithArtifact (cl,fD) = {
1974- let fr = gQ(cl, fD)
1975- $Tuple2(nil, fr)
1976- }
1977-
1978-
1979-@Verifier(jB)
1980-func jC () = sigVerify(jB.bodyBytes, jB.proofs[0], al())
2037+ let fx = dP()
2038+ $Tuple2(nil, fx)
2039+ }
2040+
2041+
2042+
2043+@Callable(cg)
2044+func computeFeeForTraderWithArtifact (cp,fJ) = {
2045+ let fx = ga(cp, fJ)
2046+ $Tuple2(nil, fx)
2047+ }
2048+
2049+
2050+@Verifier(jQ)
2051+func jR () = sigVerify(jQ.bodyBytes, jQ.proofs[0], an())
19812052

github/deemru/w8io/169f3d6 
708.70 ms