tx · FJwpmhb5qQTfzWQRFNnhoW6UrJXkRE9scZ5kKN4LqKXx

3N8G95pEaYEhZ4U3m3UrzpEzwBFn5vvXsZH:  -0.06000000 Waves

2022.10.06 10:16 [2260146] smart account 3N8G95pEaYEhZ4U3m3UrzpEzwBFn5vvXsZH > SELF 0.00000000 Waves

{ "type": 13, "id": "FJwpmhb5qQTfzWQRFNnhoW6UrJXkRE9scZ5kKN4LqKXx", "fee": 6000000, "feeAssetId": null, "timestamp": 1665040660971, "version": 2, "chainId": 84, "sender": "3N8G95pEaYEhZ4U3m3UrzpEzwBFn5vvXsZH", "senderPublicKey": "Hj6oyH6As5UWo8fZ1K4hPsEY7nxH3MvhBqDD6axiwjXs", "proofs": [ "55wd9crnAjpsqM8BAq5d7WVTw9RMVqnU3Sws5VNdwu8PvRPgp1pR6jpoPeNLk3xTRFLtW6fJriymMGuqBdThF651" ], "script": "base64:BgJxCAISABIAEgMKAQESAwoBARILCgkBAQEBAQEBAQESEAoOAQEBAQEBAQgICAEBAQESAwoBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESABIDCgEIEgASBAoCCAESAwoBARIAEgMKAQgSAwoBCBIDCgEBEgCKAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AAVrX29yYQIFa19vcmEACWtfYmFsYW5jZQIJa19iYWxhbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgAUa19wb3NpdGlvbkNsb3NlZERhdGUCFGtfcG9zaXRpb25DbG9zZWREYXRlAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQABWtfZmVlAgVrX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAUa19jdW11bGF0aXZlTm90aW9uYWwCFGtfY3VtdWxhdGl2ZU5vdGlvbmFsABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAE2tfaW5zdXJhbmNlX2FkZHJlc3MCE2tfaW5zdXJhbmNlX2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABFrX21hbmFnZXJfYWRkcmVzcwIRa19tYW5hZ2VyX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAg9TdGFraW5nIG5vdCBzZXQBEGluc3VyYW5jZUFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUTa19pbnN1cmFuY2VfYWRkcmVzcwIRSW5zdXJhbmNlIG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCDU1pbmVyIG5vdCBzZXQBDW9yZGVyc0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUQa19vcmRlcnNfYWRkcmVzcwIOT3JkZXJzIG5vdCBzZXQBD3JlZmVycmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX3JlZmVycmFsX2FkZHJlc3MCEFJlZmVycmFsIG5vdCBzZXQBDm1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQACERJUl9MT05HAAEACURJUl9TSE9SVAACAA1UV0FQX0lOVEVSVkFMAA8AD09SQUNMRV9JTlRFUlZBTAAPAAdTRUNPTkRTAOgHAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQESY3VtdWxhdGl2ZU5vdGlvbmFsAAkBA2ludAEFFGtfY3VtdWxhdGl2ZU5vdGlvbmFsARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQIOSW52YWxpZCBtYXJnaW4DAwkBASEBBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZwIFFHJlbWFpbmluZ01hcmdpblJhdGlvAAAHCQACAQIOSW52YWxpZCBtYXJnaW4GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlgoEBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAJYKBAAAAAAAAAAAARNyZXF1aXJlT3BlblBvc2l0aW9uAQdfdHJhZGVyAwkAAAIICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJYKBAkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQJAGQCCQESY3VtdWxhdGl2ZU5vdGlvbmFsAAURX3F1b3RlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJYKBAUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQESY3VtdWxhdGl2ZU5vdGlvbmFsAAURX3F1b3RlQXNzZXRBbW91bnQBCXN3YXBJbnB1dAIGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50BAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEAWsJAQRtdWxkAgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50CQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFWJhc2VBc3NldFJlc2VydmVBZnRlcgkBBGRpdmQCBQFrBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDEzMDE5MTMyMTIJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDEzMDE5MTMyMTICXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxMzAxOTEzMjEyAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDEzMDE5MTMyMTICXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDEzMDE5MTMyMTICXzQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlwoFBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQUYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE0NzAzMTQ4MzADCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTQ3MDMxNDgzMAJfMQQHYmFkRGVidAgFDSR0MDE0NzAzMTQ4MzACXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwUGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtwcmljZUJlZm9yZQkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlAwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUGX2lzQWRkCQBkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQJAGUCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAQPcXVvdGVBc3NldEFmdGVyCQEEZGl2ZAIFAWsFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyBRJfcXVvdGVBc3NldFJlc2VydmUEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE1ODA3MTYwMDAJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE1ODA3MTYwMDACXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNTgwNzE2MDAwAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE1ODA3MTYwMDACXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDE1ODA3MTYwMDACXzQEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmgoIBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZic0FzdFIAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAhibG9ja0tleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQUJbGFzdFZhbHVlARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AhJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQKcHJpY2VBZnRlcgkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBAxhdmVyYWdlUHJpY2UJAQRkaXZkAgkAZAIFC29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UDCQBmAgUMYWJzUHJpY2VEaWZmCQEObWF4UHJpY2VTcHJlYWQACQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBQxhYnNQcmljZURpZmYCFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAJAQRkaXZkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAQNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDE5MjE4MTkzODkJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBQkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMTkyMTgxOTM4OQJfMQQCeDEIBQ0kdDAxOTIxODE5Mzg5Al8yBAJ4MggFDSR0MDE5MjE4MTkzODkCXzMEAngzCAUNJHQwMTkyMTgxOTM4OQJfNAUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJARJnZXRPcmFjbGVUd2FwUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBQ1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX2Jhc2VBc3NldFJlc2VydmUHX29wdGlvbgMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBAUNX3Bvc2l0aW9uU2l6ZQUHX29wdGlvbgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMjA3MDYyMDgzNAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMjA3MDYyMDgzNAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyMDcwNjIwODM0Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDIwNzA2MjA4MzQCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjA3MDYyMDgzNAJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMFBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBmJzQXN0UgAFB19vcHRpb24BD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgdfdHJhZGVyB19vcHRpb24EDSR0MDIxMzE1MjE0MjYJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDIxMzE1MjE0MjYCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjEzMTUyMTQyNgJfMgQDcG9uCAUNJHQwMjEzMTUyMTQyNgJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyMTMxNTIxNDI2Al80BA0kdDAyMTQzMjIxNTI1CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjE0MzIyMTUyNQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDIxNDMyMjE1MjUCXzIEDSR0MDIxNTMwMjE2OTYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDIxNTMwMjE2OTYCXzEEB2JhZERlYnQIBQ0kdDAyMTUzMDIxNjk2Al8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwEHX3RyYWRlcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIHX3RyYWRlcg1fcG9zaXRpb25TaXplBAxtYXhpbXVtUmF0aW8JAQR2bWF4AgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzgDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBwJfMQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgdfdHJhZGVyFF9jaGVja01heFByaWNlSW1wYWN0BA0kdDAyMjkyOTIzMDU3CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyMjkyOTIzMDU3Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDIyOTI5MjMwNTcCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjI5MjkyMzA1NwJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyMjkyOTIzMDU3Al80BA11bnJlYWxpemVkUG5sCAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UAl8yBA0kdDAyMzE1MjIzMzIwCQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyMzE1MjIzMzIwAl8xBAdiYWREZWJ0CAUNJHQwMjMxNTIyMzMyMAJfMgQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEBLQEFDHBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwFDXVucmVhbGl6ZWRQbmwEDW1hcmdpblRvVmF1bHQJAQEtAQUMcmVtYWluTWFyZ2luBA0kdDAyMzQ0NzIzNzU4CQEKc3dhcE91dHB1dAMJAGYCBQxwb3NpdGlvblNpemUAAAkBA2FicwEFDHBvc2l0aW9uU2l6ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDAyMzQ0NzIzNzU4Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMjM0NDcyMzc1OAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMjM0NDcyMzc1OAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDIzNDQ3MjM3NTgCXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMjM0NDcyMzc1OAJfNQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAyMzQ0NzIzNzU4Al82BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAyMzQ0NzIzNzU4Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ4KDAUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBEGdldFBlZ0FkanVzdENvc3QBBl9wcmljZQQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBBBiYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQUbmV3UXVvdGVBc3NldFJlc2VydmUJAQRtdWxkAgUQYmFzZUFzc2V0UmVzZXJ2ZQUGX3ByaWNlBARjb3N0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMFBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFFG5ld1F1b3RlQXNzZXRSZXNlcnZlBRBiYXNlQXNzZXRSZXNlcnZlBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJQKAgUUbmV3UXVvdGVBc3NldFJlc2VydmUFBGNvc3QBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAJAJQKAgAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgEOdXBkYXRlU2V0dGluZ3MJEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAQ51cGRhdGVQb3NpdGlvbgUIX2FkZHJlc3MFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUDbmlsAQphcHBlbmRUd2FwAQVwcmljZQQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQVwcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfbGFzdE1pbnV0ZUlkBQhtaW51dGVJZAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX2xhc3REYXRhU3RyCQEJbGlzdFRvU3RyAQUEbGlzdAUDbmlsBBh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQAAAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQVwcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUFcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBCXVwZGF0ZUFtbQcHX3F0QXN0UgdfYnNBc3RSF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQMJAQIhPQIJAGUCBRZfdG90YWxMb25nUG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYSW52YWxpZCBBTU0gc3RhdGUgZGF0YTogCQCkAwEFFl90b3RhbExvbmdQb3NpdGlvblNpemUCBCArICAJAKQDAQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCBCAhPSAJAKQDAQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAM4IAgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa19jdW11bGF0aXZlTm90aW9uYWwFGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUDbmlsCQEKYXBwZW5kVHdhcAEJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUUa19wb3NpdGlvbkNsb3NlZERhdGUFCF9hZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsFQFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECGkludmFsaWQgdG9nZ2xlUGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAVwcmljZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBBRiYXNlQXNzZXRBbW91bnRUb0FkZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAVwcmljZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ5jaGFuZ2VTZXR0aW5ncwkQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MJBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAFpAQppbml0aWFsaXplDgdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUHX29yYWNsZQpfb3JhY2xlS2V5DF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAQtpbml0aWFsaXplZAAJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tBwUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncwkFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkCQENdXBkYXRlRnVuZGluZwUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtfb3JhBQdfb3JhY2xlCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtfb3JhX2tleQUKX29yYWNsZUtleQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yBQNuaWwBaQESc2V0SW5pdE1hcmdpblJhdGlvARBfaW5pdE1hcmdpblJhdGlvAwMJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQEBIQEJAQtpbml0aWFsaXplZAAJAAIBAiVJbnZhbGlkIHNldEluaXRNYXJnaW5SYXRpbyBwYXJhbWV0ZXJzCQEOdXBkYXRlU2V0dGluZ3MJBRBfaW5pdE1hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBEGZ1bmRpbmdQZXJpb2RSYXcACQEDZmVlAAkBC3NwcmVhZExpbWl0AAkBDm1heFByaWNlSW1wYWN0AAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBDm1heFByaWNlU3ByZWFkAAFpARBkZWNyZWFzZVBvc2l0aW9uAwdfYW1vdW50CV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50AwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBBnBhdXNlZAAJAAIBAiNJbnZhbGlkIGRlY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwMzc1MzQzNzY4NgkBC2dldFBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDM3NTM0Mzc2ODYCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzc1MzQzNzY4NgJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzNzUzNDM3Njg2Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM3NTM0Mzc2ODYCXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDM3ODU5Mzc5NzUJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzNzg1OTM3OTc1Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzc4NTkzNzk3NQJfMgQNJHQwMzc5ODE0MDUzMAMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwEDSR0MDM4MzU4Mzg1NzcJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVleGNoYW5nZWRQb3NpdGlvblNpemUIBQ0kdDAzODM1ODM4NTc3Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzgzNTgzODU3NwJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzgzNTgzODU3NwJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDM4MzU4Mzg1NzcCXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMzgzNTgzODU3NwJfNQQYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwcJAAIBCQCsAgIJAKwCAgkArAICAiVUb28gbGl0dGxlIGJhc2UgYXNzZXQgZXhjaGFuZ2VkLCBnb3QgCQCkAwEFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwIKIGV4cGVjdGVkIAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQNJHQwMzkwMTQzOTI1OQkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDM5MDE0MzkyNTkCXzEEB2JhZERlYnQIBQ0kdDAzOTAxNDM5MjU5Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDM5MDE0MzkyNTkCXzMEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFDG9wZW5Ob3Rpb25hbAQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkAnQoLBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwMzc5ODE0MDUzMAJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDAzNzk4MTQwNTMwAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM3OTgxNDA1MzACXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwMzc5ODE0MDUzMAJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzc5ODE0MDUzMAJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDM3OTgxNDA1MzACXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzNzk4MTQwNTMwAl83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDM3OTgxNDA1MzACXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDAzNzk4MTQwNTMwAl85BA50b3RhbExvbmdBZnRlcggFDSR0MDM3OTgxNDA1MzADXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAzNzk4MTQwNTMwA18xMQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQkApQgBCAUBaQZjYWxsZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQaW5jcmVhc2VQb3NpdGlvbgQKX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluawQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMDAwMDCQECIT0CBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkBAiE9AgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBwYJAGcCAAAFCl9yYXdBbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEGcGF1c2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQMcmF3RmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQJAQNmZWUABA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQxyYXdGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUMcmF3RmVlQW1vdW50BAlmZWVBbW91bnQJAGUCBQxyYXdGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA0MjA1OTQyMTk5CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0MjA1OTQyMTk5Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQyMDU5NDIxOTkCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDIwNTk0MjE5OQJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0MjA1OTQyMTk5Al80BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNDI0ODg0NTA1NgMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDQyOTEyNDMxMTgJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA0MjkxMjQzMTE4Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDI5MTI0MzExOAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDI5MTI0MzExOAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQyOTEyNDMxMTgCXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDI5MTI0MzExOAJfNQMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50CQEEZGl2ZAIFDG9wZW5Ob3Rpb25hbAUJX2xldmVyYWdlBA0kdDA0MzQ5OTQzNzM4CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50BAxyZW1haW5NYXJnaW4IBQ0kdDA0MzQ5OTQzNzM4Al8xBAJ4MQgFDSR0MDQzNDk5NDM3MzgCXzIEAngyCAUNJHQwNDM0OTk0MzczOAJfMwMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQJAJ0KCwUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNDQ3NDk0NDg2NQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDQ0NzQ5NDQ4NjUCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA0NDc0OTQ0ODY1Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNDI0ODg0NTA1NgJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA0MjQ4ODQ1MDU2Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQyNDg4NDUwNTYCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNDI0ODg0NTA1NgJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDI0ODg0NTA1NgJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQyNDg4NDUwNTYCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0MjQ4ODQ1MDU2Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQyNDg4NDUwNTYCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0MjQ4ODQ1MDU2Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDQyNDg4NDUwNTYDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0MjQ4ODQ1MDU2A18xMQQMZmVlVG9TdGFrZXJzCQBpAgUJZmVlQW1vdW50AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUJZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDmZlZVRvSW5zdXJhbmNlBQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKcXVvdGVBc3NldAAGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAxyYXdGZWVBbW91bnQJAQRtdWxkAgUKX3Jhd0Ftb3VudAkBA2ZlZQAEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAg1hY2NlcHRQYXltZW50CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQxyYXdGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBQxyYXdGZWVBbW91bnQFC3JlZmVycmVyRmVlBAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUMcmF3RmVlQW1vdW50BA0kdDA0NjkwMjQ3MDQyCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0NjkwMjQ3MDQyAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ2OTAyNDcwNDICXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDY5MDI0NzA0MgJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0NjkwMjQ3MDQyAl80BAxmZWVUb1N0YWtlcnMJAGkCBQlmZWVBbW91bnQAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBQlmZWVBbW91bnQFDGZlZVRvU3Rha2VycwQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgURb2xkUG9zaXRpb25NYXJnaW4FB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgEHX2Ftb3VudAMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDQ4MDE4NDgxNzAJAQtnZXRQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0ODAxODQ4MTcwAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQ4MDE4NDgxNzACXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDgwMTg0ODE3MAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0ODAxODQ4MTcwAl80BAttYXJnaW5EZWx0YQkBAS0BBQdfYW1vdW50BA0kdDA0ODIwNzQ4Mzg2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQttYXJnaW5EZWx0YQQMcmVtYWluTWFyZ2luCAUNJHQwNDgyMDc0ODM4NgJfMQQHYmFkRGVidAgFDSR0MDQ4MjA3NDgzODYCXzIDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgUHX2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgAEBmNhbGxlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkEDWNhbGxlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQZjYWxsZXICDkludmFsaWQgY2FsbGVyAwMDCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNDk1ODA0OTk1NwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFBmNhbGxlcgYEAngxCAUNJHQwNDk1ODA0OTk1NwJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNDk1ODA0OTk1NwJfMgQLcmVhbGl6ZWRQbmwIBQ0kdDA0OTU4MDQ5OTU3Al8zBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDk1ODA0OTk1NwJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5NTgwNDk5NTcCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ5NTgwNDk5NTcCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0OTU4MDQ5OTU3Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQ5NTgwNDk5NTcCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0OTU4MDQ5OTU3Al85BAJ4MggFDSR0MDQ5NTgwNDk5NTcDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDQ5NTgwNDk5NTcDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0OTU4MDQ5OTU3A18xMgMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BA53aXRoZHJhd0Ftb3VudAkBA2FicwEFDW1hcmdpblRvVmF1bHQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNJHQwNTAxNjY1MDMwOAMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDWFtbU5ld0JhbGFuY2UIBQ0kdDA1MDE2NjUwMzA4Al8xBBBnZXRGcm9tSW5zdXJhbmNlCAUNJHQwNTAxNjY1MDMwOAJfMgQBeAMJAGYCBRBnZXRGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgUQZ2V0RnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIJAGUCBQ53aXRoZHJhd0Ftb3VudAUQZ2V0RnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFBmNhbGxlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUGY2FsbGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AgUNY2FsbGVyQWRkcmVzcwUOd2l0aGRyYXdBbW91bnQJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEC21hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQMDAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcEDSR0MDUyMzc5NTI1MjkJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDUyMzc5NTI1MjkCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTIzNzk1MjUyOQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1MjM3OTUyNTI5Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDUyMzc5NTI1MjkCXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUyNzU0NTI4NTgJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDUyNzU0NTI4NTgCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA1Mjc1NDUyODU4Al8yBA0kdDA1Mjg2NjUzMTU2CQEJc3dhcElucHV0AgUFaXNBZGQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDUyODY2NTMxNTYCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1Mjg2NjUzMTU2Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1Mjg2NjUzMTU2Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTI4NjY1MzE1NgJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1Mjg2NjUzMTU2Al81BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDUzMjYzNTM0OTYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA1MzI2MzUzNDk2Al8xBAdiYWREZWJ0CAUNJHQwNTMyNjM1MzQ5NgJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA1MzI2MzUzNDk2Al8zBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBA5mZWVUb0luc3VyYW5jZQkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBBFuZXdQb3NpdGlvbk1hcmdpbgkAZQIFDHJlbWFpbk1hcmdpbgUSbGlxdWlkYXRpb25QZW5hbHR5BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDU0NjY5NTQ4MTIDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNTQ2Njk1NDgxMgJfMQQRdGFrZUZyb21JbnN1cmFuY2UIBQ0kdDA1NDY2OTU0ODEyAl8yBAF4AwkAZgIFEXRha2VGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BRF0YWtlRnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDU2MjU5NTY3MTQJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBwQCeDEIBQ0kdDA1NjI1OTU2NzE0Al8xBAdiYWREZWJ0CAUNJHQwNTYyNTk1NjcxNAJfMgQCeDIIBQ0kdDA1NjI1OTU2NzE0Al8zBAJ4MwgFDSR0MDU2MjU5NTY3MTQCXzQEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjI1OTU2NzE0Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NjI1OTU2NzE0Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTYyNTk1NjcxNAJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDA1NjI1OTU2NzE0Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTYyNTk1NjcxNAJfOQQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDU2MjU5NTY3MTQDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDU2MjU5NTY3MTQDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1NjI1OTU2NzE0A18xMgQSbGlxdWlkYXRpb25QZW5hbHR5CQEEbXVsZAIFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDU3MTI2NTcyNjkDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNTcxMjY1NzI2OQJfMQQRdGFrZUZyb21JbnN1cmFuY2UIBQ0kdDA1NzEyNjU3MjY5Al8yBAF4AwkAZgIFEXRha2VGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgURdGFrZUZyb21JbnN1cmFuY2UFA25pbAUDbmlsAwkAAAIFEXdpdGhkcmF3SW5zdXJhbmNlBRF3aXRoZHJhd0luc3VyYW5jZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUBeAUBeAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCCQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BRF0YWtlRnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQ5mZWVUb0luc3VyYW5jZQUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDSR0MDU4NzU1NTg4MTcJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA1ODc1NTU4ODE3Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNTg3NTU1ODgxNwJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQFpAQ5mb3JjZU1vdmVBc3NldAIHX3RyYWRlcgdfYW1vdW50AwMJAQIhPQIJAKcIAQkBDmFkbWluUHVibGljS2V5AAgFAWkGY2FsbGVyBgkAZgIAAAUHX2Ftb3VudAkAAgECIUludmFsaWQgZm9yY2VNb3ZlQXNzZXQgcGFyYW1ldGVycwQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCBQdfYW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAQh3aXRoZHJhdwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB190cmFkZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRqdXN0UGVnAQZfcHJpY2UDAwkBAiE9AgkApwgBCQEOYWRtaW5QdWJsaWNLZXkACAUBaQZjYWxsZXIGCQBmAgAABQZfcHJpY2UJAAIBAhxJbnZhbGlkIGFkanVzdFBlZyBwYXJhbWV0ZXJzBA0kdDA1OTgwODU5ODk0CQEQZ2V0UGVnQWRqdXN0Q29zdAEFBl9wcmljZQQUbmV3UXVvdGVBc3NldFJlc2VydmUIBQ0kdDA1OTgwODU5ODk0Al8xBA1wZWdDaGFuZ2VDb3N0CAUNJHQwNTk4MDg1OTg5NAJfMgMJAAACBQ1wZWdDaGFuZ2VDb3N0AAAJAAIBAhFOb3RoaW5nIHRvIGFkanVzdAMJAGYCBQ1wZWdDaGFuZ2VDb3N0AAAJARF1cGRhdGVBbW1SZXNlcnZlcwIFFG5ld1F1b3RlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCCQEDYWJzAQUNcGVnQ2hhbmdlQ29zdAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQEDYWJzAQUNcGVnQ2hhbmdlQ29zdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UJAM4IAgkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkBCGNiYWxhbmNlAAkBA2FicwEFDXBlZ0NoYW5nZUNvc3QJARF1cGRhdGVBbW1SZXNlcnZlcwIFFG5ld1F1b3RlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBtaWdyYXRlTGlxdWlkaXR5AAQGYW1vdW50CQEIY2JhbGFuY2UABAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIFBmFtb3VudAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFBmFtb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXZfZ2V0AQdfdHJhZGVyBA0kdDA2MTQ2MzYxNTIzCQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgcEAngxCAUNJHQwNjE0NjM2MTUyMwJfMQQCeDIIBQ0kdDA2MTQ2MzYxNTIzAl8yBAJ4MwgFDSR0MDYxNDYzNjE1MjMCXzMEAng0CAUNJHQwNjE0NjM2MTUyMwJfNAkAAgEJAKwCAgkArAICCQCsAgIJAQFzAQUCeDIJAQFzAQUCeDMJAQFzAQUCeDQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEDSR0MDYxNjcwNjE3ODEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDYxNjcwNjE3ODECXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwNjE2NzA2MTc4MQJfMgQDcG9uCAUNJHQwNjE2NzA2MTc4MQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2MTY3MDYxNzgxAl80BA0kdDA2MTc4NjYxODg3CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDA2MTc4NjYxODg3Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNjE3ODY2MTg4NwJfMgQNJHQwNjE4OTI2MjA3NAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNjE4OTI2MjA3NAJfMQQHYmFkRGVidAgFDSR0MDYxODkyNjIwNzQCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNjE4OTI2MjA3NAJfMwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAkBAXMBBRBwb3NpdGlvbk5vdGlvbmFsAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBARjb3N0CQEQZ2V0UGVnQWRqdXN0Q29zdAEFBl9wcmljZQkAAgEJAKQDAQgFBGNvc3QCXzIBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNJHQwNjI0NjU2MjUyNwkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDYyNDY1NjI1MjcCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA2MjQ2NTYyNTI3Al8yBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBEGdldFR3YXBTcG90UHJpY2UACQEBcwEJARJnZXRPcmFjbGVUd2FwUHJpY2UAAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5ALiUUaw=", "height": 2260146, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AjybwMU67a7qCVi95U9DeeFjL3rebKb7TeGDSzytFwqq Next: 8iqYrrRAKzR2kHBzQx24RtrsoGKdYdqHsf93zjTd5Ajz Diff:
OldNewDifferences
9595
9696 let U = "k_referral_address"
9797
98-func V () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
98+let V = "k_manager_address"
99+
100+func W () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
99101
100102
101-func W () = addressFromString(getStringValue(V(), N))
103+func X () = addressFromString(getStringValue(W(), N))
102104
103105
104-func X () = fromBase58String(getStringValue(V(), O))
106+func Y () = fromBase58String(getStringValue(W(), O))
105107
106108
107-func Y () = fromBase58String(getStringValue(V(), P))
109+func Z () = fromBase58String(getStringValue(W(), P))
108110
109111
110-func Z () = valueOrErrorMessage(addressFromString(getStringValue(V(), Q)), "Quote asset staking not set")
112+func aa () = valueOrErrorMessage(addressFromString(getStringValue(W(), Q)), "Quote asset staking not set")
111113
112114
113-func aa () = valueOrErrorMessage(addressFromString(getStringValue(V(), R)), "Staking not set")
115+func ab () = valueOrErrorMessage(addressFromString(getStringValue(W(), R)), "Staking not set")
114116
115117
116-func ab () = valueOrErrorMessage(addressFromString(getStringValue(V(), M)), "Insurance not set")
118+func ac () = valueOrErrorMessage(addressFromString(getStringValue(W(), M)), "Insurance not set")
117119
118120
119-func ac () = valueOrErrorMessage(addressFromString(getStringValue(V(), S)), "Miner not set")
121+func ad () = valueOrErrorMessage(addressFromString(getStringValue(W(), S)), "Miner not set")
120122
121123
122-func ad () = valueOrErrorMessage(addressFromString(getStringValue(V(), T)), "Orders not set")
124+func ae () = valueOrErrorMessage(addressFromString(getStringValue(W(), T)), "Orders not set")
123125
124126
125-func ae () = valueOrErrorMessage(addressFromString(getStringValue(V(), U)), "Referral not set")
127+func af () = valueOrErrorMessage(addressFromString(getStringValue(W(), U)), "Referral not set")
126128
127129
128-let af = 1
129-
130-let ag = 2
131-
132-let ah = 15
133-
134-let ai = 15
135-
136-let aj = 1000
137-
138-let ak = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
139-
140-let al = (86400 * ak)
141-
142-let am = 100
143-
144-let an = 1
145-
146-let ao = 2
147-
148-func ap (aq) = (toString(aq) + ",")
130+func ag () = valueOrErrorMessage(addressFromString(getStringValue(W(), V)), "Manager not set")
149131
150132
151-func ar (aq,as) = fraction(aq, ak, as, HALFEVEN)
133+let ah = 1
134+
135+let ai = 2
136+
137+let aj = 15
138+
139+let ak = 15
140+
141+let al = 1000
142+
143+let am = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
144+
145+let an = (86400 * am)
146+
147+let ao = 100
148+
149+let ap = 1
150+
151+let aq = 2
152+
153+func ar (as) = (toString(as) + ",")
152154
153155
154-func at (aq,as) = fraction(aq, as, ak, HALFEVEN)
156+func at (as,au) = fraction(as, am, au, HALFEVEN)
155157
156158
157-func au (aq) = if ((aq > 0))
158- then aq
159- else -(aq)
159+func av (as,au) = fraction(as, au, am, HALFEVEN)
160160
161161
162-func av (aq,as) = if ((aq >= as))
163- then aq
164- else as
162+func aw (as) = if ((as > 0))
163+ then as
164+ else -(as)
165165
166166
167-func aw (ax,ay) = ((ax + "_") + ay)
167+func ax (as,au) = if ((as >= au))
168+ then as
169+ else au
168170
169171
170-func az (aA) = {
171- func aB (aC,aD) = ((aC + aD) + ",")
172+func ay (az,aA) = ((az + "_") + aA)
172173
173- let aE = {
174- let aF = aA
175- let aG = size(aF)
176- let aH = ""
177- func aI (aJ,aK) = if ((aK >= aG))
178- then aJ
179- else aB(aJ, aF[aK])
180174
181- func aL (aJ,aK) = if ((aK >= aG))
182- then aJ
175+func aB (aC) = {
176+ func aD (aE,aF) = ((aE + aF) + ",")
177+
178+ let aG = {
179+ let aH = aC
180+ let aI = size(aH)
181+ let aJ = ""
182+ func aK (aL,aM) = if ((aM >= aI))
183+ then aL
184+ else aD(aL, aH[aM])
185+
186+ func aN (aL,aM) = if ((aM >= aI))
187+ then aL
183188 else throw("List size exceeds 20")
184189
185- aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
190+ aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
186191 }
187- let aM = dropRight(aE, 1)
188- let aN = if ((take(aM, 1) == ","))
189- then drop(aM, 1)
190- else aM
191- aN
192+ let aO = dropRight(aG, 1)
193+ let aP = if ((take(aO, 1) == ","))
194+ then drop(aO, 1)
195+ else aO
196+ aP
192197 }
193198
194199
195-func aO (aP) = split(aP, ",")
200+func aQ (aR) = split(aR, ",")
196201
197202
198-func aQ (aA,aR,aS) = if ((size(aA) > aR))
199- then (removeByIndex(aA, 0) :+ aS)
200- else (aA :+ aS)
203+func aS (aC,aT,aU) = if ((size(aC) > aT))
204+ then (removeByIndex(aC, 0) :+ aU)
205+ else (aC :+ aU)
201206
202207
203-func aT (aU) = valueOrErrorMessage(getInteger(this, aU), ("no value for " + aU))
208+func aV (aW) = valueOrErrorMessage(getInteger(this, aW), ("no value for " + aW))
204209
205210
206-func aV () = aT(d)
211+func aX () = aV(d)
207212
208213
209-func aW () = aT(l)
214+func aY () = aV(l)
210215
211216
212-func aX () = aT(n)
217+func aZ () = aV(n)
213218
214219
215-func aY () = aT(E)
220+func ba () = aV(E)
216221
217222
218-func aZ () = aT(F)
223+func bb () = aV(F)
219224
220225
221-func ba () = aT(G)
226+func bc () = aV(G)
222227
223228
224-func bb () = aT(J)
229+func bd () = aV(J)
225230
226231
227-func bc () = aT(K)
232+func be () = aV(K)
228233
229234
230-func bd () = aT(B)
235+func bf () = aV(B)
231236
232237
233-func be () = aT(m)
238+func bg () = aV(m)
234239
235240
236-func bf () = (be() * ak)
241+func bh () = (bg() * am)
237242
238243
239-func bg () = (be() * aj)
244+func bi () = (bg() * al)
240245
241246
242-func bh () = aT(o)
247+func bj () = aV(o)
243248
244249
245-func bi () = aT(p)
250+func bk () = aV(p)
246251
247252
248-func bj () = aT(q)
253+func bl () = aV(q)
249254
250255
251-func bk () = aT(r)
256+func bm () = aV(r)
252257
253258
254-func bl () = aT(s)
259+func bn () = aV(s)
255260
256261
257-func bm () = aT(t)
262+func bo () = aV(t)
258263
259264
260-func bn () = aT(z)
265+func bp () = aV(z)
261266
262267
263-func bo () = aT(A)
268+func bq () = aV(A)
264269
265270
266-func bp () = aT(I)
271+func br () = aV(I)
267272
268273
269-func bq () = aT(H)
274+func bs () = aV(H)
270275
271276
272-func br (bs) = valueOrElse(getString(ad(), "k_sender"), toString(bs.caller))
277+func bt (bu) = valueOrElse(getString(ae(), "k_sender"), toString(bu.caller))
273278
274279
275-func bt (bu,bv,bw) = {
276- let bx = (bu - bv)
277- if (if (bw)
278- then (0 > bx)
280+func bv (bw,bx,by) = {
281+ let bz = (bw - bx)
282+ if (if (by)
283+ then (0 > bz)
279284 else false)
280285 then throw("Invalid margin")
281- else if (if (!(bw))
282- then (bx >= 0)
286+ else if (if (!(by))
287+ then (bz >= 0)
283288 else false)
284289 then throw("Invalid margin")
285290 else true
286291 }
287292
288293
289-func by (bz) = if ((bz == 0))
294+func bA (bB) = if ((bB == 0))
290295 then throw("Should not be called with _positionSize == 0")
291- else if ((bz > 0))
292- then bn()
293- else bo()
296+ else if ((bB > 0))
297+ then bp()
298+ else bq()
294299
295300
296-func bA (bB) = {
297- let bC = getInteger(this, aw(e, bB))
298- let bD = bC
299- if ($isInstanceOf(bD, "Int"))
301+func bC (bD) = {
302+ let bE = getInteger(this, ay(e, bD))
303+ let bF = bE
304+ if ($isInstanceOf(bF, "Int"))
300305 then {
301- let bE = bD
302- $Tuple4(bE, getIntegerValue(this, aw(f, bB)), getIntegerValue(this, aw(g, bB)), getIntegerValue(this, aw(h, bB)))
306+ let bG = bF
307+ $Tuple4(bG, getIntegerValue(this, ay(f, bD)), getIntegerValue(this, ay(g, bD)), getIntegerValue(this, ay(h, bD)))
303308 }
304309 else $Tuple4(0, 0, 0, 0)
305310 }
306311
307312
308-func bF (bB) = if ((bA(bB)._1 == 0))
313+func bH (bD) = if ((bC(bD)._1 == 0))
309314 then throw("No open position")
310315 else true
311316
312317
313-func bG () = valueOrElse(getBoolean(this, j), false)
318+func bI () = valueOrElse(getBoolean(this, j), false)
314319
315320
316-func bH () = valueOrElse(getBoolean(this, k), false)
321+func bJ () = valueOrElse(getBoolean(this, k), false)
317322
318323
319-func bI (bJ,bK,bL) = if (bJ)
324+func bK (bL,bM,bN) = if (bL)
320325 then {
321- let bM = (aZ() - bL)
322- if ((0 >= bM))
326+ let bO = (bb() - bN)
327+ if ((0 >= bO))
323328 then throw("Tx lead to base asset reserve <= 0, revert")
324- else $Tuple4((aY() + bK), bM, (ba() + bL), (bb() + bK))
329+ else $Tuple4((ba() + bM), bO, (bc() + bN), (bd() + bM))
325330 }
326331 else {
327- let bN = (aY() - bK)
328- if ((0 >= bN))
332+ let bP = (ba() - bM)
333+ if ((0 >= bP))
329334 then throw("Tx lead to base quote reserve <= 0, revert")
330- else $Tuple4(bN, (aZ() + bL), (ba() - bL), (bb() - bK))
335+ else $Tuple4(bP, (bb() + bN), (bc() - bN), (bd() - bM))
331336 }
332337
333338
334-func bO (bJ,bK) = {
335- let bP = aY()
336- let bQ = aZ()
337- let aU = at(bP, bQ)
338- let bR = if (bJ)
339- then (bP + bK)
340- else (bP - bK)
341- let bS = ar(aU, bR)
342- let bT = au((bS - bQ))
343- let bU = if (bJ)
344- then bT
345- else -(bT)
346- let bV = bI(bJ, bK, bT)
347- let bW = bV._1
348- let bX = bV._2
349- let bY = bV._3
350- let bZ = bV._4
351- let ca = ar(bP, bQ)
352- let cb = ar(bK, bT)
353- let cc = au((ca - cb))
354- let cd = (ak - ar(ca, (ca + cc)))
355- let ce = bl()
356- if ((cd > ce))
357- then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(bP)) + " before base asset: ") + toString(bQ)) + " quote asset amount to exchange: ") + toString(bK)) + " price before: ") + toString(ca)) + " marketPrice: ") + toString(cb)))
358- else $Tuple5(bU, bW, bX, bY, bZ)
339+func bQ (bL,bM) = {
340+ let bR = ba()
341+ let bS = bb()
342+ let aW = av(bR, bS)
343+ let bT = if (bL)
344+ then (bR + bM)
345+ else (bR - bM)
346+ let bU = at(aW, bT)
347+ let bV = aw((bU - bS))
348+ let bW = if (bL)
349+ then bV
350+ else -(bV)
351+ let bX = bK(bL, bM, bV)
352+ let bY = bX._1
353+ let bZ = bX._2
354+ let ca = bX._3
355+ let cb = bX._4
356+ let cc = at(bR, bS)
357+ let cd = at(bM, bV)
358+ let ce = aw((cc - cd))
359+ let cf = (am - at(cc, (cc + ce)))
360+ let cg = bn()
361+ if ((cf > cg))
362+ then throw(((((((((((((("Price impact " + toString(cf)) + " > max price impact ") + toString(cg)) + " before quote asset: ") + toString(bR)) + " before base asset: ") + toString(bS)) + " quote asset amount to exchange: ") + toString(bM)) + " price before: ") + toString(cc)) + " marketPrice: ") + toString(cd)))
363+ else $Tuple5(bW, bY, bZ, ca, cb)
359364 }
360365
361366
362-func cf (cg,ch,ci,cj) = {
363- let ck = if ((cg != 0))
367+func ch (ci,cj,ck,cl) = {
368+ let cm = if ((ci != 0))
364369 then {
365- let cl = by(cg)
366- at((cl - ci), cg)
370+ let cn = bA(ci)
371+ av((cn - ck), ci)
367372 }
368373 else 0
369- let cm = ((cj - ck) + ch)
370- let cn = if ((0 > cm))
371- then $Tuple2(0, au(cm))
372- else $Tuple2(au(cm), 0)
373- let co = cn._1
374- let cp = cn._2
375- $Tuple3(co, cp, ck)
374+ let co = ((cl - cm) + cj)
375+ let cp = if ((0 > co))
376+ then $Tuple2(0, aw(co))
377+ else $Tuple2(aw(co), 0)
378+ let cq = cp._1
379+ let cr = cp._2
380+ $Tuple3(cq, cr, cm)
376381 }
377382
378383
379-func cq (bJ,bL,cr,cs,ct) = {
380- let ca = ar(cs, ct)
381- if ((bL == 0))
384+func cs (bL,bN,ct,cu,cv) = {
385+ let cc = at(cu, cv)
386+ if ((bN == 0))
382387 then throw("Invalid base asset amount")
383388 else {
384- let aU = at(cs, ct)
385- let cu = if (bJ)
386- then (ct + bL)
387- else (ct - bL)
388- let cv = ar(aU, cu)
389- let cw = au((cv - cs))
390- let ce = bl()
391- let cx = bI(!(bJ), cw, bL)
392- let bW = cx._1
393- let bX = cx._2
394- let bY = cx._3
395- let bZ = cx._4
396- let cb = ar(cw, bL)
397- let cc = au((ca - cb))
398- let cd = (ak - ar(ca, (ca + cc)))
399- if (if ((cd > ce))
400- then cr
389+ let aW = av(cu, cv)
390+ let cw = if (bL)
391+ then (cv + bN)
392+ else (cv - bN)
393+ let cx = at(aW, cw)
394+ let cy = aw((cx - cu))
395+ let cg = bn()
396+ let cz = bK(!(bL), cy, bN)
397+ let bY = cz._1
398+ let bZ = cz._2
399+ let ca = cz._3
400+ let cb = cz._4
401+ let cd = at(cy, bN)
402+ let ce = aw((cc - cd))
403+ let cf = (am - at(cc, (cc + ce)))
404+ if (if ((cf > cg))
405+ then ct
401406 else false)
402- then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(cs)) + " before base asset: ") + toString(ct)) + " base asset amount to exchange: ") + toString(bL)) + " price before: ") + toString(ca)) + " market price: ") + toString(cb)))
403- else $Tuple8(cw, bW, bX, bY, bZ, (bq() - (if (bJ)
404- then au(bL)
405- else 0)), (bp() - (if (!(bJ))
406- then au(bL)
407- else 0)), cd)
407+ then throw(((((((((((((("Price impact " + toString(cf)) + " > max price impact ") + toString(cg)) + " before quote asset: ") + toString(cu)) + " before base asset: ") + toString(cv)) + " base asset amount to exchange: ") + toString(bN)) + " price before: ") + toString(cc)) + " market price: ") + toString(cd)))
408+ else $Tuple8(cy, bY, bZ, ca, cb, (bs() - (if (bL)
409+ then aw(bN)
410+ else 0)), (br() - (if (!(bL))
411+ then aw(bN)
412+ else 0)), cf)
408413 }
409414 }
410415
411416
412-func cy (bJ,bL,cr) = cq(bJ, bL, cr, aY(), aZ())
417+func cA (bL,bN,ct) = cs(bL, bN, ct, ba(), bb())
413418
414419
415-func cz () = {
416- let cA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
417- let cB = getStringValue(this, a)
418- let cC = getStringValue(this, b)
419- let cD = valueOrErrorMessage(getInteger(cA, cB), ((("Can not get oracle price. Oracle: " + toString(cA)) + " key: ") + cB))
420- cD
420+func cB () = {
421+ let cC = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
422+ let cD = getStringValue(this, a)
423+ let cE = getStringValue(this, b)
424+ let cF = valueOrErrorMessage(getInteger(cC, cD), ((("Can not get oracle price. Oracle: " + toString(cC)) + " key: ") + cD))
425+ cF
421426 }
422427
423428
424-func cE (cs,ct) = {
425- let cF = cz()
426- let cG = ar(cs, ct)
427- let cH = ar((cF + cG), (2 * ak))
428- let cI = ar(au((cF - cG)), cH)
429- if ((cI > bm()))
430- then throw(((("Price spread " + toString(cI)) + " > max price spread ") + toString(bm())))
429+func cG (cu,cv) = {
430+ let cH = cB()
431+ let cI = at(cu, cv)
432+ let cJ = at((cH + cI), (2 * am))
433+ let cK = at(aw((cH - cI)), cJ)
434+ if ((cK > bo()))
435+ then throw(((("Price spread " + toString(cK)) + " > max price spread ") + toString(bo())))
431436 else true
432437 }
433438
434439
435-func cJ () = {
436- let cs = aY()
437- let ct = aZ()
438- ar(cs, ct)
440+func cL () = {
441+ let cu = ba()
442+ let cv = bb()
443+ at(cu, cv)
439444 }
440445
441446
442-func cK () = {
443- let cF = cz()
444- let cL = cJ()
445- (ar(au((cF - cL)), cF) > bk())
447+func cM () = {
448+ let cH = cB()
449+ let cN = cL()
450+ (at(aw((cH - cN)), cH) > bm())
446451 }
447452
448453
449-func cM (bz,cN,cs,ct) = {
450- let cO = au(bz)
451- let cP = (0 > bz)
452- let cQ = if ((cN == an))
454+func cO (bB,cP,cu,cv) = {
455+ let cQ = aw(bB)
456+ let cR = (0 > bB)
457+ let cS = if ((cP == ap))
453458 then {
454- let cR = cq(!(cP), cO, false, cs, ct)
455- let cS = cR._1
456- let cT = cR._2
457- let cU = cR._3
458- let cV = cR._4
459- cS
459+ let cT = cs(!(cR), cQ, false, cu, cv)
460+ let cU = cT._1
461+ let cV = cT._2
462+ let cW = cT._3
463+ let cX = cT._4
464+ cU
460465 }
461- else at(cO, cz())
462- cQ
466+ else av(cQ, cB())
467+ cS
463468 }
464469
465470
466-func cW (bz,cX,cs,ct,cN) = if ((bz == 0))
471+func cY (bB,cZ,cu,cv,cP) = if ((bB == 0))
467472 then throw("Invalid position size")
468473 else {
469- let cP = (0 > bz)
470- let cQ = cM(bz, cN, cs, ct)
471- let cY = if (cP)
472- then (cX - cQ)
473- else (cQ - cX)
474- $Tuple2(cQ, cY)
474+ let cR = (0 > bB)
475+ let cS = cO(bB, cP, cu, cv)
476+ let da = if (cR)
477+ then (cZ - cS)
478+ else (cS - cZ)
479+ $Tuple2(cS, da)
475480 }
476481
477482
478-func cZ (bB,cN) = {
479- let da = bA(bB)
480- let bE = da._1
481- let db = da._2
482- let dc = da._3
483- let dd = da._4
484- cW(bE, dc, aY(), aZ(), cN)
483+func db (bD,cP) = {
484+ let dc = bC(bD)
485+ let bG = dc._1
486+ let dd = dc._2
487+ let de = dc._3
488+ let df = dc._4
489+ cY(bG, de, ba(), bb(), cP)
485490 }
486491
487492
488-func de (df,dg,dh) = ar((df - dg), dh)
493+func dg (dh,di,dj) = at((dh - di), dj)
489494
490495
491-func di (bB,cN) = {
492- let dj = bA(bB)
493- let bE = dj._1
494- let db = dj._2
495- let dk = dj._3
496- let dd = dj._4
497- let dl = cZ(bB, cN)
498- let cQ = dl._1
499- let cY = dl._2
500- let dm = cf(bE, db, dd, cY)
501- let co = dm._1
502- let cp = dm._2
503- de(co, cp, cQ)
496+func dk (bD,cP) = {
497+ let dl = bC(bD)
498+ let bG = dl._1
499+ let dd = dl._2
500+ let dm = dl._3
501+ let df = dl._4
502+ let dn = db(bD, cP)
503+ let cS = dn._1
504+ let da = dn._2
505+ let do = ch(bG, dd, df, da)
506+ let cq = do._1
507+ let cr = do._2
508+ dg(cq, cr, cS)
504509 }
505510
506511
507-func dn (bB) = di(bB, an)
512+func dp (bD) = dk(bD, ap)
508513
509514
510-func do (bB,bz) = {
511- let dp = av(bj(), (ak - ar(dn(bB), bh())))
512- let dq = at(au(bz), dp)
513- let dr = cy((bz > 0), dq, false)
514- let ds = dr._1
515- let cd = dr._8
516- if ((bl() > cd))
517- then ds
515+func dq (bD,bB) = {
516+ let dr = ax(bl(), (am - at(dp(bD), bj())))
517+ let ds = av(aw(bB), dr)
518+ let dt = cA((bB > 0), ds, false)
519+ let du = dt._1
520+ let cf = dt._8
521+ if ((bn() > cf))
522+ then du
518523 else {
519- let dt = at(au(bz), bj())
520- let du = cy((bz > 0), dt, false)._1
521- du
524+ let dv = av(aw(bB), bl())
525+ let dw = cA((bB > 0), dv, false)._1
526+ dw
522527 }
523528 }
524529
525530
526-func dv (bB,cr) = {
527- let dw = bA(bB)
528- let bE = dw._1
529- let db = dw._2
530- let dc = dw._3
531- let dd = dw._4
532- let cY = cZ(bB, an)._2
533- let dx = cf(bE, db, dd, cY)
534- let co = dx._1
535- let cp = dx._2
536- let dt = -(bE)
537- let dy = cY
538- let dz = -(co)
539- let dA = cy((bE > 0), au(bE), cr)
540- let du = dA._1
541- let bR = dA._2
542- let bS = dA._3
543- let dB = dA._4
544- let dC = dA._5
545- let dD = dA._6
546- let dE = dA._7
547- let dF = (bc() - dc)
548- $Tuple12(dt, cp, dy, dz, bR, bS, dB, dC, dF, du, dD, dE)
531+func dx (bD,ct) = {
532+ let dy = bC(bD)
533+ let bG = dy._1
534+ let dd = dy._2
535+ let de = dy._3
536+ let df = dy._4
537+ let da = db(bD, ap)._2
538+ let dz = ch(bG, dd, df, da)
539+ let cq = dz._1
540+ let cr = dz._2
541+ let dv = -(bG)
542+ let dA = da
543+ let dB = -(cq)
544+ let dC = cA((bG > 0), aw(bG), ct)
545+ let dw = dC._1
546+ let bT = dC._2
547+ let bU = dC._3
548+ let dD = dC._4
549+ let dE = dC._5
550+ let dF = dC._6
551+ let dG = dC._7
552+ let dH = (be() - de)
553+ $Tuple12(dv, cr, dA, dB, bT, bU, dD, dE, dH, dw, dF, dG)
549554 }
550555
551556
552-func dG () = {
553- let dH = ((lastBlock.timestamp / 1000) / 60)
554- let dI = (dH - ah)
555- let dJ = valueOrElse(getString(this, u), "")
556- let dK = split(dJ, ",")
557- func dL (aC,dM) = if ((dI >= parseIntValue(dM)))
558- then (aC :+ parseIntValue(dM))
559- else aC
557+func dI () = {
558+ let dJ = ((lastBlock.timestamp / 1000) / 60)
559+ let dK = (dJ - aj)
560+ let dL = valueOrElse(getString(this, u), "")
561+ let dM = split(dL, ",")
562+ func dN (aE,dO) = if ((dK >= parseIntValue(dO)))
563+ then (aE :+ parseIntValue(dO))
564+ else aE
560565
561- let dN = {
562- let aF = dK
563- let aG = size(aF)
564- let aH = nil
565- func aI (aJ,aK) = if ((aK >= aG))
566- then aJ
567- else dL(aJ, aF[aK])
566+ let dP = {
567+ let aH = dM
568+ let aI = size(aH)
569+ let aJ = nil
570+ func aK (aL,aM) = if ((aM >= aI))
571+ then aL
572+ else dN(aL, aH[aM])
568573
569- func aL (aJ,aK) = if ((aK >= aG))
570- then aJ
574+ func aN (aL,aM) = if ((aM >= aI))
575+ then aL
571576 else throw("List size exceeds 20")
572577
573- aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
578+ aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
574579 }
575- let dO = if ((size(dN) > 0))
576- then max(dN)
577- else parseIntValue(dK[0])
578- let dP = valueOrElse(getInteger(this, v), 0)
579- let dQ = valueOrElse(getInteger(this, ((w + "_") + toString(dP))), 0)
580- let dR = valueOrElse(getInteger(this, ((x + "_") + toString(dP))), 0)
581- let dS = (dQ + ((dH - dP) * dR))
582- let dT = valueOrElse(getInteger(this, ((w + "_") + toString(dO))), 0)
583- let dU = valueOrElse(getInteger(this, ((x + "_") + toString(dO))), 0)
584- let dV = (dT + ((dI - dO) * dU))
585- ((dS - dV) / ah)
580+ let dQ = if ((size(dP) > 0))
581+ then max(dP)
582+ else parseIntValue(dM[0])
583+ let dR = valueOrElse(getInteger(this, v), 0)
584+ let dS = valueOrElse(getInteger(this, ((w + "_") + toString(dR))), 0)
585+ let dT = valueOrElse(getInteger(this, ((x + "_") + toString(dR))), 0)
586+ let dU = (dS + ((dJ - dR) * dT))
587+ let dV = valueOrElse(getInteger(this, ((w + "_") + toString(dQ))), 0)
588+ let dW = valueOrElse(getInteger(this, ((x + "_") + toString(dQ))), 0)
589+ let dX = (dV + ((dK - dQ) * dW))
590+ ((dU - dX) / aj)
586591 }
587592
588593
589-func dW (dX) = {
590- let bz = ba()
591- let dY = (bz > 0)
592- let dZ = cy(dY, au(bz), false)._1
593- let ea = aZ()
594- let eb = at(ea, dX)
595- let ec = cW(bz, dZ, eb, ea, an)._2
596- $Tuple2(eb, ec)
594+func dY (dZ) = {
595+ let bB = bc()
596+ let ea = (bB > 0)
597+ let eb = cA(ea, aw(bB), false)._1
598+ let ec = bb()
599+ let ed = av(ec, dZ)
600+ let ee = cY(bB, eb, ed, ec, ap)._2
601+ $Tuple2(ed, ee)
597602 }
598603
599604
600-func ed () = {
601- let ee = cz()
602- let ef = dG()
603- let eg = (ef - ee)
604- if (if ((bp() == 0))
605+func ef () = {
606+ let eg = cB()
607+ let eh = dI()
608+ let ei = (eh - eg)
609+ if (if ((br() == 0))
605610 then true
606- else (bq() == 0))
611+ else (bs() == 0))
607612 then $Tuple2(0, 0)
608- else if ((0 > eg))
613+ else if ((0 > ei))
609614 then {
610- let eh = ar(at(eg, bf()), al)
611- let ei = ar(at(eh, bp()), bq())
612- $Tuple2(eh, ei)
615+ let ej = at(av(ei, bh()), an)
616+ let ek = at(av(ej, br()), bs())
617+ $Tuple2(ej, ek)
613618 }
614619 else {
615- let ei = ar(at(eg, bf()), al)
616- let eh = ar(at(ei, bq()), bp())
617- $Tuple2(eh, ei)
620+ let ek = at(av(ei, bh()), an)
621+ let ej = at(av(ek, bs()), br())
622+ $Tuple2(ej, ek)
618623 }
619624 }
620625
621626
622-func ej (ek,el,em,en,eo,ep,eq,er,es) = [IntegerEntry(n, ek), IntegerEntry(o, el), IntegerEntry(p, em), IntegerEntry(m, en), IntegerEntry(l, eo), IntegerEntry(r, ep), IntegerEntry(s, eq), IntegerEntry(q, er), IntegerEntry(t, es)]
627+func el (em,en,eo,ep,eq,er,es,et,eu) = [IntegerEntry(n, em), IntegerEntry(o, en), IntegerEntry(p, eo), IntegerEntry(m, ep), IntegerEntry(l, eq), IntegerEntry(r, er), IntegerEntry(s, es), IntegerEntry(q, et), IntegerEntry(t, eu)]
623628
624629
625-func et (eu,ev,ew,ex,ey) = [IntegerEntry(B, eu), IntegerEntry(z, ev), IntegerEntry(A, ew), IntegerEntry(C, ex), IntegerEntry(D, ey)]
630+func ev (ew,ex,ey,ez,eA) = [IntegerEntry(B, ew), IntegerEntry(z, ex), IntegerEntry(A, ey), IntegerEntry(C, ez), IntegerEntry(D, eA)]
626631
627632
628-func ez (ay,eA,eB,eC,cl) = [IntegerEntry(aw(e, ay), eA), IntegerEntry(aw(f, ay), eB), IntegerEntry(aw(g, ay), eC), IntegerEntry(aw(h, ay), cl)]
633+func eB (aA,eC,eD,eE,cn) = [IntegerEntry(ay(e, aA), eC), IntegerEntry(ay(f, aA), eD), IntegerEntry(ay(g, aA), eE), IntegerEntry(ay(h, aA), cn)]
629634
630635
631-func eD (eE) = {
632- let dH = ((lastBlock.timestamp / 1000) / 60)
633- let eF = valueOrElse(getInteger(this, v), 0)
634- if ((eF > dH))
636+func eF (eG) = {
637+ let dJ = ((lastBlock.timestamp / 1000) / 60)
638+ let eH = valueOrElse(getInteger(this, v), 0)
639+ if ((eH > dJ))
635640 then throw("TWAP out-of-order")
636641 else {
637- let dP = if ((eF == 0))
638- then dH
639- else eF
640- if ((dH > eF))
642+ let dR = if ((eH == 0))
643+ then dJ
644+ else eH
645+ if ((dJ > eH))
641646 then {
642- let eG = valueOrElse(getInteger(this, ((w + "_") + toString(eF))), 0)
643- let eH = valueOrElse(getInteger(this, ((x + "_") + toString(eF))), eE)
644- let eI = (eG + ((dH - dP) * eH))
645- let dK = aQ(aO(valueOrElse(getString(this, u), "")), ah, toString(dH))
646-[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE), IntegerEntry(aw(y, toString(dH)), eF), IntegerEntry(v, dH), StringEntry(u, az(dK))]
647+ let eI = valueOrElse(getInteger(this, ((w + "_") + toString(eH))), 0)
648+ let eJ = valueOrElse(getInteger(this, ((x + "_") + toString(eH))), eG)
649+ let eK = (eI + ((dJ - dR) * eJ))
650+ let dM = aS(aQ(valueOrElse(getString(this, u), "")), aj, toString(dJ))
651+[IntegerEntry(ay(w, toString(dJ)), eK), IntegerEntry(ay(x, toString(dJ)), eG), IntegerEntry(ay(y, toString(dJ)), eH), IntegerEntry(v, dJ), StringEntry(u, aB(dM))]
647652 }
648653 else {
649- let eJ = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
650- let eG = valueOrElse(getInteger(this, aw(w, toString(eJ))), 0)
651- let eH = valueOrElse(getInteger(this, aw(x, toString(eJ))), eE)
652- let eI = (eG + ((dH - eJ) * eH))
653-[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE)]
654+ let eL = valueOrElse(getInteger(this, ay(y, toString(dJ))), 0)
655+ let eI = valueOrElse(getInteger(this, ay(w, toString(eL))), 0)
656+ let eJ = valueOrElse(getInteger(this, ay(x, toString(eL))), eG)
657+ let eK = (eI + ((dJ - eL) * eJ))
658+[IntegerEntry(ay(w, toString(dJ)), eK), IntegerEntry(ay(x, toString(dJ)), eG)]
654659 }
655660 }
656661 }
657662
658663
659-func eK (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
664+func eM (bR,bS) = [IntegerEntry(E, bR), IntegerEntry(F, bS)]
660665
661666
662-func eL (bP,bQ,eM,eN,eO,eP,eQ) = if (((eP - eQ) != eM))
663- then throw(((((("Invalid AMM state data: " + toString(eP)) + " + ") + toString(eQ)) + " != ") + toString(eM)))
664- else ((eK(bP, bQ) ++ [IntegerEntry(G, eM), IntegerEntry(J, eN), IntegerEntry(K, eO), IntegerEntry(H, eP), IntegerEntry(I, eQ)]) ++ eD(ar(bP, bQ)))
667+func eN (bR,bS,eO,eP,eQ,eR,eS) = if (((eR - eS) != eO))
668+ then throw(((((("Invalid AMM state data: " + toString(eR)) + " + ") + toString(eS)) + " != ") + toString(eO)))
669+ else ((eM(bR, bS) ++ [IntegerEntry(G, eO), IntegerEntry(J, eP), IntegerEntry(K, eQ), IntegerEntry(H, eR), IntegerEntry(I, eS)]) ++ eF(at(bR, bS)))
665670
666671
667-func eR (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
672+func eT (aA) = [DeleteEntry(ay(e, aA)), DeleteEntry(ay(f, aA)), DeleteEntry(ay(g, aA)), DeleteEntry(ay(h, aA)), IntegerEntry(ay(i, aA), lastBlock.timestamp)]
668673
669674
670-func eS (ay,eT) = {
671- let eU = assetBalance(this, Y())
672- if ((eT > eU))
673- then throw(((("Unable to withdraw " + toString(eT)) + " from contract balance ") + toString(eU)))
674- else [ScriptTransfer(ay, eT, Y())]
675+func eU (aA,eV) = {
676+ let eW = assetBalance(this, Z())
677+ if ((eV > eW))
678+ then throw(((("Unable to withdraw " + toString(eV)) + " from contract balance ") + toString(eW)))
679+ else [ScriptTransfer(aA, eV, Z())]
675680 }
676681
677682
678-func eV (bs) = if ((0 > bs))
683+func eX (bu) = if ((0 > bu))
679684 then throw("Balance")
680- else [IntegerEntry(d, bs)]
685+ else [IntegerEntry(d, bu)]
681686
682687
683-func eW (bs) = [ScriptTransfer(aa(), bs, Y())]
688+func eY (bu) = [ScriptTransfer(ab(), bu, Z())]
684689
685690
686-@Callable(bs)
687-func pause () = if ((bs.caller != W()))
691+@Callable(bu)
692+func pause () = if ((bu.caller != X()))
688693 then throw("Invalid togglePause params")
689694 else [BooleanEntry(k, true)]
690695
691696
692697
693-@Callable(bs)
694-func unpause () = if ((bs.caller != W()))
698+@Callable(bu)
699+func unpause () = if ((bu.caller != X()))
695700 then throw("Invalid togglePause params")
696701 else [BooleanEntry(k, false)]
697702
698703
699704
700-@Callable(bs)
701-func addLiquidity (bK) = if (if ((bs.caller != W()))
705+@Callable(bu)
706+func addLiquidity (bM) = if (if ((bu.caller != X()))
702707 then true
703- else (0 >= bK))
708+ else (0 >= bM))
704709 then throw("Invalid addLiquidity params")
705710 else {
706- let bP = aY()
707- let bQ = aZ()
708- let eE = ar(bP, bQ)
709- let eX = ar(bK, eE)
710- let eY = (bP + bK)
711- let eZ = (bQ + eX)
712- eK(eY, eZ)
711+ let bR = ba()
712+ let bS = bb()
713+ let eG = at(bR, bS)
714+ let eZ = at(bM, eG)
715+ let fa = (bR + bM)
716+ let fb = (bS + eZ)
717+ eM(fa, fb)
713718 }
714719
715720
716721
717-@Callable(bs)
718-func removeLiquidity (bK) = if (if ((bs.caller != W()))
722+@Callable(bu)
723+func removeLiquidity (bM) = if (if ((bu.caller != X()))
719724 then true
720- else (0 >= bK))
725+ else (0 >= bM))
721726 then throw("Invalid removeLiquidity params")
722727 else {
723- let bP = aY()
724- let bQ = aZ()
725- let eE = ar(bP, bQ)
726- let fa = ar(bK, eE)
727- let eY = (bP - bK)
728- let eZ = (bQ - fa)
729- eK(eY, eZ)
728+ let bR = ba()
729+ let bS = bb()
730+ let eG = at(bR, bS)
731+ let fc = at(bM, eG)
732+ let fa = (bR - bM)
733+ let fb = (bS - fc)
734+ eM(fa, fb)
730735 }
731736
732737
733738
734-@Callable(bs)
735-func changeSettings (ek,el,em,en,eo,ep,eq,er,es) = if ((bs.caller != W()))
739+@Callable(bu)
740+func changeSettings (em,en,eo,ep,eq,er,es,et,eu) = if ((bu.caller != X()))
736741 then throw("Invalid changeSettings params")
737- else ej(ek, el, em, en, eo, ep, eq, er, es)
742+ else el(em, en, eo, ep, eq, er, es, et, eu)
738743
739744
740745
741-@Callable(bs)
742-func initialize (bP,bQ,en,ek,el,em,eo,fb,fc,fd,ep,eq,er,es) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
746+@Callable(bu)
747+func initialize (bR,bS,ep,em,en,eo,eq,fd,fe,ff,er,es,et,eu) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bR))
743748 then true
744- else (0 >= bQ))
749+ else (0 >= bS))
750+ then true
751+ else (0 >= ep))
752+ then true
753+ else (0 >= em))
745754 then true
746755 else (0 >= en))
747756 then true
748- else (0 >= ek))
749- then true
750- else (0 >= el))
751- then true
752- else (0 >= em))
753- then true
754757 else (0 >= eo))
755- then true
756- else (0 >= ep))
757758 then true
758759 else (0 >= eq))
759760 then true
761762 then true
762763 else (0 >= es))
763764 then true
764- else bG())
765+ else (0 >= et))
766+ then true
767+ else (0 >= eu))
768+ then true
769+ else bI())
765770 then throw("Invalid initialize parameters")
766- else ((((eL(bP, bQ, 0, 0, 0, 0, 0) ++ ej(ek, el, em, en, eo, ep, eq, er, es)) ++ et((lastBlock.timestamp + en), 0, 0, 0, 0)) ++ eV(0)) ++ [BooleanEntry(j, true), StringEntry(c, fb), StringEntry(a, fc), StringEntry(L, fd)])
771+ else ((((eN(bR, bS, 0, 0, 0, 0, 0) ++ el(em, en, eo, ep, eq, er, es, et, eu)) ++ ev((lastBlock.timestamp + ep), 0, 0, 0, 0)) ++ eX(0)) ++ [BooleanEntry(j, true), StringEntry(c, fd), StringEntry(a, fe), StringEntry(L, ff)])
767772
768773
769774
770-@Callable(bs)
771-func setInitMarginRatio (ek) = if (if ((0 >= ek))
775+@Callable(bu)
776+func setInitMarginRatio (em) = if (if ((0 >= em))
772777 then true
773- else !(bG()))
778+ else !(bI()))
774779 then throw("Invalid setInitMarginRatio parameters")
775- else ej(ek, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
780+ else el(em, bj(), bk(), bg(), aY(), bm(), bn(), bl(), bo())
776781
777782
778783
779-@Callable(bs)
780-func decreasePosition (eT,fe,ff) = if (if (if (if (if ((0 >= eT))
784+@Callable(bu)
785+func decreasePosition (eV,fg,fh) = if (if (if (if (if ((0 >= eV))
781786 then true
782- else !(bG()))
787+ else !(bI()))
783788 then true
784- else !(bt(ar(ak, fe), aX(), true)))
789+ else !(bv(at(am, fg), aZ(), true)))
785790 then true
786- else !(bF(toString(bs.caller))))
791+ else !(bH(toString(bu.caller))))
787792 then true
788- else bH())
793+ else bJ())
789794 then throw("Invalid decreasePosition parameters")
790795 else {
791- let fg = bA(toString(bs.caller))
792- let fh = fg._1
793- let fi = fg._2
794- let fj = fg._3
795- let fk = fg._4
796- let fl = if ((fh > 0))
797- then ag
798- else af
799- let fm = (fl == af)
800- let fn = at(eT, fe)
801- let fo = cZ(toString(bs.caller), an)
802- let fp = fo._1
803- let cY = fo._2
804- let fq = if ((fp > fn))
796+ let fi = bC(toString(bu.caller))
797+ let fj = fi._1
798+ let fk = fi._2
799+ let fl = fi._3
800+ let fm = fi._4
801+ let fn = if ((fj > 0))
802+ then ai
803+ else ah
804+ let fo = (fn == ah)
805+ let fp = av(eV, fg)
806+ let fq = db(toString(bu.caller), ap)
807+ let fr = fq._1
808+ let da = fq._2
809+ let fs = if ((fr > fp))
805810 then {
806- let fr = bO(fm, fn)
807- let dt = fr._1
808- let bR = fr._2
809- let bS = fr._3
810- let dB = fr._4
811- let dC = fr._5
812- let fs = au(dt)
813- if (if ((ff != 0))
814- then (ff > fs)
811+ let ft = bQ(fo, fp)
812+ let dv = ft._1
813+ let bT = ft._2
814+ let bU = ft._3
815+ let dD = ft._4
816+ let dE = ft._5
817+ let fu = aw(dv)
818+ if (if ((fh != 0))
819+ then (fh > fu)
815820 else false)
816- then throw(((("Too little base asset exchanged, got " + toString(fs)) + " expected ") + toString(ff)))
821+ then throw(((("Too little base asset exchanged, got " + toString(fu)) + " expected ") + toString(fh)))
817822 else {
818- let dy = ar(at(cY, fs), au(fh))
819- let ft = cf(fh, fi, fk, dy)
820- let co = ft._1
821- let cp = ft._2
822- let ck = ft._3
823- let du = fn
824- let fu = (cY - dy)
825- let fv = if ((fh > 0))
826- then ((fp - du) - fu)
827- else ((fu + fp) - du)
828- let fw = (fh + dt)
829- $Tuple11(fw, co, au(fv), by(fw), bS, bR, dB, dC, (bc() - fn), (bq() - (if ((fw > 0))
830- then au(dt)
831- else 0)), (bp() - (if ((0 > fw))
832- then au(dt)
823+ let dA = at(av(da, fu), aw(fj))
824+ let fv = ch(fj, fk, fm, dA)
825+ let cq = fv._1
826+ let cr = fv._2
827+ let cm = fv._3
828+ let dw = fp
829+ let fw = (da - dA)
830+ let fx = if ((fj > 0))
831+ then ((fr - dw) - fw)
832+ else ((fw + fr) - dw)
833+ let fy = (fj + dv)
834+ $Tuple11(fy, cq, aw(fx), bA(fy), bU, bT, dD, dE, (be() - fp), (bs() - (if ((fy > 0))
835+ then aw(dv)
836+ else 0)), (br() - (if ((0 > fy))
837+ then aw(dv)
833838 else 0)))
834839 }
835840 }
836841 else throw("Close position first")
837- let fw = fq._1
838- let fx = fq._2
839- let fy = fq._3
840- let fz = fq._4
841- let bS = fq._5
842- let bR = fq._6
843- let dB = fq._7
844- let dC = fq._8
845- let dF = fq._9
846- let dD = fq._10
847- let dE = fq._11
848- let fA = invoke(ac(), "notifyNotional", [toString(bs.caller), fy], nil)
849- if ((fA == fA))
850- then (ez(toString(bs.caller), fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE))
842+ let fy = fs._1
843+ let fz = fs._2
844+ let fA = fs._3
845+ let fB = fs._4
846+ let bU = fs._5
847+ let bT = fs._6
848+ let dD = fs._7
849+ let dE = fs._8
850+ let dH = fs._9
851+ let dF = fs._10
852+ let dG = fs._11
853+ let fC = invoke(ad(), "notifyNotional", [toString(bu.caller), fA], nil)
854+ if ((fC == fC))
855+ then (eB(toString(bu.caller), fy, fz, fA, fB) ++ eN(bT, bU, dD, dE, dH, dF, dG))
851856 else throw("Strict value is not equal to itself.")
852857 }
853858
854859
855860
856-@Callable(bs)
857-func increasePosition (fl,fe,ff,fB) = {
858- let fC = bs.payments[0].amount
859- if (if (if (if (if (if (if ((fl != af))
860- then (fl != ag)
861+@Callable(bu)
862+func increasePosition (fn,fg,fh,fD) = {
863+ let fE = bu.payments[0].amount
864+ if (if (if (if (if (if (if ((fn != ah))
865+ then (fn != ai)
861866 else false)
862867 then true
863- else (0 >= fC))
868+ else (0 >= fE))
864869 then true
865- else !(bG()))
870+ else !(bI()))
866871 then true
867- else (bs.payments[0].assetId != Y()))
872+ else (bu.payments[0].assetId != Z()))
868873 then true
869- else !(bt(ar(ak, fe), aX(), true)))
874+ else !(bv(at(am, fg), aZ(), true)))
870875 then true
871- else bH())
876+ else bJ())
872877 then throw("Invalid increasePosition parameters")
873878 else {
874- let bB = toString(bs.caller)
875- let fD = at(fC, aW())
876- let fE = invoke(ae(), "acceptPaymentWithLink", [bB, fB], [AttachedPayment(Y(), fD)])
877- if ((fE == fE))
879+ let bD = toString(bu.caller)
880+ let fF = av(fE, aY())
881+ let fG = invoke(af(), "acceptPaymentWithLink", [bD, fD], [AttachedPayment(Z(), fF)])
882+ if ((fG == fG))
878883 then {
879- let fF = {
880- let bD = fE
881- if ($isInstanceOf(bD, "Int"))
884+ let fH = {
885+ let bF = fG
886+ if ($isInstanceOf(bF, "Int"))
882887 then {
883- let fG = bD
884- fG
888+ let fI = bF
889+ fI
885890 }
886891 else throw("Invalid referrerFee")
887892 }
888- let eT = (fC - fD)
889- let fH = (fD - fF)
890- let fI = bA(bB)
891- let fh = fI._1
892- let fi = fI._2
893- let fj = fI._3
894- let fk = fI._4
895- let fJ = (fh == 0)
896- let fK = if ((fh > 0))
897- then (fl == af)
898- else (fl == ag)
899- let fL = if (!(fJ))
900- then fK
893+ let eV = (fE - fF)
894+ let fJ = (fF - fH)
895+ let fK = bC(bD)
896+ let fj = fK._1
897+ let fk = fK._2
898+ let fl = fK._3
899+ let fm = fK._4
900+ let fL = (fj == 0)
901+ let fM = if ((fj > 0))
902+ then (fn == ah)
903+ else (fn == ai)
904+ let fN = if (!(fL))
905+ then fM
901906 else false
902- let fm = (fl == af)
903- let fM = if (if (fJ)
907+ let fo = (fn == ah)
908+ let fO = if (if (fL)
904909 then true
905- else fL)
910+ else fN)
906911 then {
907- let fn = at(eT, fe)
908- let fN = bO(fm, fn)
909- let bU = fN._1
910- let bR = fN._2
911- let bS = fN._3
912- let dB = fN._4
913- let dC = fN._5
914- if (if ((ff != 0))
915- then (ff > au(bU))
912+ let fp = av(eV, fg)
913+ let fP = bQ(fo, fp)
914+ let bW = fP._1
915+ let bT = fP._2
916+ let bU = fP._3
917+ let dD = fP._4
918+ let dE = fP._5
919+ if (if ((fh != 0))
920+ then (fh > aw(bW))
916921 else false)
917- then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(ff)))
922+ then throw(((("Limit error: " + toString(aw(bW))) + " < ") + toString(fh)))
918923 else {
919- let fw = (fh + bU)
920- let fO = ar(fn, fe)
921- let fP = cf(fh, fi, fk, fO)
922- let co = fP._1
923- let cT = fP._2
924- let cU = fP._3
925- if (!(cE(bR, bS)))
924+ let fy = (fj + bW)
925+ let fQ = at(fp, fg)
926+ let fR = ch(fj, fk, fm, fQ)
927+ let cq = fR._1
928+ let cV = fR._2
929+ let cW = fR._3
930+ if (!(cG(bT, bU)))
926931 then throw("Over max spread limit")
927- else $Tuple11(fw, co, (fj + fn), by(fw), bS, bR, dB, dC, (bc() + fn), (bq() + (if ((fw > 0))
928- then au(bU)
929- else 0)), (bp() + (if ((0 > fw))
930- then au(bU)
932+ else $Tuple11(fy, cq, (fl + fp), bA(fy), bU, bT, dD, dE, (be() + fp), (bs() + (if ((fy > 0))
933+ then aw(bW)
934+ else 0)), (br() + (if ((0 > fy))
935+ then aw(bW)
931936 else 0)))
932937 }
933938 }
934939 else {
935- let fn = at(eT, fe)
936- let fQ = cZ(toString(bs.caller), an)
937- let fp = fQ._1
938- let cY = fQ._2
939- if ((fp > fn))
940+ let fp = av(eV, fg)
941+ let fS = db(toString(bu.caller), ap)
942+ let fr = fS._1
943+ let da = fS._2
944+ if ((fr > fp))
940945 then throw("Use decreasePosition to decrease position size")
941946 else throw("Close position first")
942947 }
943- let fw = fM._1
944- let fx = fM._2
945- let fy = fM._3
946- let fz = fM._4
947- let bS = fM._5
948- let bR = fM._6
949- let dB = fM._7
950- let dC = fM._8
951- let dF = fM._9
952- let dD = fM._10
953- let dE = fM._11
954- let fR = (fH / 2)
955- let fS = (fH - fR)
956- let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
957- if ((fT == fT))
948+ let fy = fO._1
949+ let fz = fO._2
950+ let fA = fO._3
951+ let fB = fO._4
952+ let bU = fO._5
953+ let bT = fO._6
954+ let dD = fO._7
955+ let dE = fO._8
956+ let dH = fO._9
957+ let dF = fO._10
958+ let dG = fO._11
959+ let fT = (fJ / 2)
960+ let fU = (fJ - fT)
961+ let fV = invoke(ag(), "deposit", nil, [AttachedPayment(Z(), eV)])
962+ if ((fV == fV))
958963 then {
959- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
960- if ((fU == fU))
964+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
965+ if ((fW == fW))
961966 then {
962- let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
963- if ((fV == fV))
967+ let fX = invoke(ad(), "notifyFees", [bD, fJ], nil)
968+ if ((fX == fX))
964969 then {
965- let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
966- if ((fA == fA))
967- then (((ez(bB, fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eW(fR)) ++ eV((aV() + eT)))
970+ let fC = invoke(ad(), "notifyNotional", [bD, fA], nil)
971+ if ((fC == fC))
972+ then (((eB(bD, fy, fz, fA, fB) ++ eN(bT, bU, dD, dE, dH, dF, dG)) ++ eY(fT)) ++ eX((aX() + eV)))
968973 else throw("Strict value is not equal to itself.")
969974 }
970975 else throw("Strict value is not equal to itself.")
979984
980985
981986
982-@Callable(bs)
987+@Callable(bu)
983988 func addMargin () = {
984- let fC = bs.payments[0].amount
985- if (if (if (if ((bs.payments[0].assetId != Y()))
989+ let fE = bu.payments[0].amount
990+ if (if (if (if ((bu.payments[0].assetId != Z()))
986991 then true
987- else !(bF(toString(bs.caller))))
992+ else !(bH(toString(bu.caller))))
988993 then true
989- else !(bG()))
994+ else !(bI()))
990995 then true
991- else bH())
996+ else bJ())
992997 then throw("Invalid addMargin parameters")
993998 else {
994- let bB = toString(bs.caller)
995- let fD = at(fC, aW())
996- let fE = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fD)])
997- if ((fE == fE))
999+ let bD = toString(bu.caller)
1000+ let fF = av(fE, aY())
1001+ let fG = invoke(af(), "acceptPayment", [bD], [AttachedPayment(Z(), fF)])
1002+ if ((fG == fG))
9981003 then {
999- let fF = {
1000- let bD = fE
1001- if ($isInstanceOf(bD, "Int"))
1004+ let fH = {
1005+ let bF = fG
1006+ if ($isInstanceOf(bF, "Int"))
10021007 then {
1003- let fG = bD
1004- fG
1008+ let fI = bF
1009+ fI
10051010 }
10061011 else throw("Invalid referrerFee")
10071012 }
1008- let fH = (fD - fF)
1009- let eT = (fC - fD)
1010- let fW = bA(bB)
1011- let fh = fW._1
1012- let fi = fW._2
1013- let fj = fW._3
1014- let fk = fW._4
1015- let fR = (fH / 2)
1016- let fS = (fH - fR)
1017- let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
1018- if ((fT == fT))
1013+ let fJ = (fF - fH)
1014+ let eV = (fE - fF)
1015+ let fY = bC(bD)
1016+ let fj = fY._1
1017+ let fk = fY._2
1018+ let fl = fY._3
1019+ let fm = fY._4
1020+ let fT = (fJ / 2)
1021+ let fU = (fJ - fT)
1022+ let fV = invoke(ag(), "deposit", nil, [AttachedPayment(Z(), eV)])
1023+ if ((fV == fV))
10191024 then {
1020- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1021- if ((fU == fU))
1025+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
1026+ if ((fW == fW))
10221027 then {
1023- let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
1024- if ((fV == fV))
1025- then ((ez(bB, fh, (fi + eT), fj, fk) ++ eW(fR)) ++ eV((aV() + eT)))
1028+ let fX = invoke(ad(), "notifyFees", [bD, fJ], nil)
1029+ if ((fX == fX))
1030+ then ((eB(bD, fj, (fk + eV), fl, fm) ++ eY(fT)) ++ eX((aX() + eV)))
10261031 else throw("Strict value is not equal to itself.")
10271032 }
10281033 else throw("Strict value is not equal to itself.")
10351040
10361041
10371042
1038-@Callable(bs)
1039-func removeMargin (eT) = if (if (if (if ((0 >= eT))
1043+@Callable(bu)
1044+func removeMargin (eV) = if (if (if (if ((0 >= eV))
10401045 then true
1041- else !(bF(toString(bs.caller))))
1046+ else !(bH(toString(bu.caller))))
10421047 then true
1043- else !(bG()))
1048+ else !(bI()))
10441049 then true
1045- else bH())
1050+ else bJ())
10461051 then throw("Invalid removeMargin parameters")
10471052 else {
1048- let fX = bA(toString(bs.caller))
1049- let fh = fX._1
1050- let fi = fX._2
1051- let fj = fX._3
1052- let fk = fX._4
1053- let fY = -(eT)
1054- let fZ = cf(fh, fi, fk, fY)
1055- let co = fZ._1
1056- let cp = fZ._2
1057- if ((cp != 0))
1053+ let fZ = bC(toString(bu.caller))
1054+ let fj = fZ._1
1055+ let fk = fZ._2
1056+ let fl = fZ._3
1057+ let fm = fZ._4
1058+ let ga = -(eV)
1059+ let gb = ch(fj, fk, fm, ga)
1060+ let cq = gb._1
1061+ let cr = gb._2
1062+ if ((cr != 0))
10581063 then throw("Invalid removed margin amount")
10591064 else {
1060- let ga = de(co, cp, fj)
1061- if (!(bt(ga, aX(), true)))
1062- then throw(((("Too much margin removed: " + toString(ga)) + " < ") + toString(aX())))
1065+ let gc = dg(cq, cr, fl)
1066+ if (!(bv(gc, aZ(), true)))
1067+ then throw(((("Too much margin removed: " + toString(gc)) + " < ") + toString(aZ())))
10631068 else {
1064- let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1065- if ((gb == gb))
1066- then ((ez(toString(bs.caller), fh, co, fj, by(fh)) ++ eS(bs.caller, eT)) ++ eV((aV() - eT)))
1069+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), eV], nil)
1070+ if ((gd == gd))
1071+ then ((eB(toString(bu.caller), fj, cq, fl, bA(fj)) ++ eU(bu.caller, eV)) ++ eX((aX() - eV)))
10671072 else throw("Strict value is not equal to itself.")
10681073 }
10691074 }
10711076
10721077
10731078
1074-@Callable(bs)
1079+@Callable(bu)
10751080 func closePosition () = {
1076- let gc = br(bs)
1077- let gd = valueOrErrorMessage(addressFromString(gc), "Invalid caller")
1078- if (if (if (!(bF(gc)))
1081+ let ge = bt(bu)
1082+ let gf = valueOrErrorMessage(addressFromString(ge), "Invalid caller")
1083+ if (if (if (!(bH(ge)))
10791084 then true
1080- else !(bG()))
1085+ else !(bI()))
10811086 then true
1082- else bH())
1087+ else bJ())
10831088 then throw("Invalid closePosition parameters")
10841089 else {
1085- let ge = dv(gc, true)
1086- let cT = ge._1
1087- let gf = ge._2
1088- let dy = ge._3
1089- let dz = ge._4
1090- let bR = ge._5
1091- let bS = ge._6
1092- let dB = ge._7
1093- let dC = ge._8
1094- let dF = ge._9
1095- let cU = ge._10
1096- let dD = ge._11
1097- let dE = ge._12
1098- if ((gf > 0))
1090+ let gg = dx(ge, true)
1091+ let cV = gg._1
1092+ let gh = gg._2
1093+ let dA = gg._3
1094+ let dB = gg._4
1095+ let bT = gg._5
1096+ let bU = gg._6
1097+ let dD = gg._7
1098+ let dE = gg._8
1099+ let dH = gg._9
1100+ let cW = gg._10
1101+ let dF = gg._11
1102+ let dG = gg._12
1103+ if ((gh > 0))
10991104 then throw("Unable to close position with bad debt")
11001105 else {
1101- let gg = au(dz)
1102- let gh = (aV() - gg)
1103- let gi = if ((0 > gh))
1104- then $Tuple2(0, au(gh))
1105- else $Tuple2(gh, 0)
1106- let gj = gi._1
1107- let gk = gi._2
1108- let fG = if ((gk > 0))
1106+ let gi = aw(dB)
1107+ let gj = (aX() - gi)
1108+ let gk = if ((0 > gj))
1109+ then $Tuple2(0, aw(gj))
1110+ else $Tuple2(gj, 0)
1111+ let gl = gk._1
1112+ let gm = gk._2
1113+ let fI = if ((gm > 0))
11091114 then {
1110- let gl = invoke(ab(), "withdraw", [gk], nil)
1111- if ((gl == gl))
1115+ let gn = invoke(ac(), "withdraw", [gm], nil)
1116+ if ((gn == gn))
11121117 then nil
11131118 else throw("Strict value is not equal to itself.")
11141119 }
11151120 else nil
1116- if ((fG == fG))
1121+ if ((fI == fI))
11171122 then {
1118- let gb = invoke(Z(), "unlockNeutrino", [(gg - gk), toBase58String(Y())], nil)
1119- if ((gb == gb))
1123+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), (gi - gm)], nil)
1124+ if ((gd == gd))
11201125 then {
1121- let fA = invoke(ac(), "notifyNotional", [gc, 0], nil)
1122- if ((fA == fA))
1123- then (((eR(gc) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(gd, gg)) ++ eV(gj))
1126+ let fC = invoke(ad(), "notifyNotional", [ge, 0], nil)
1127+ if ((fC == fC))
1128+ then (((eT(ge) ++ eN(bT, bU, dD, dE, dH, dF, dG)) ++ eU(gf, gi)) ++ eX(gl))
11241129 else throw("Strict value is not equal to itself.")
11251130 }
11261131 else throw("Strict value is not equal to itself.")
11321137
11331138
11341139
1135-@Callable(bs)
1136-func liquidate (bB) = {
1137- let gm = di(bB, an)
1138- let ga = if (cK())
1140+@Callable(bu)
1141+func liquidate (bD) = {
1142+ let go = dk(bD, ap)
1143+ let gc = if (cM())
11391144 then {
1140- let gn = di(bB, ao)
1141- av(gm, gn)
1145+ let gp = dk(bD, aq)
1146+ ax(go, gp)
11421147 }
1143- else gm
1144- if (if (if (if (!(bt(ga, bh(), false)))
1148+ else go
1149+ if (if (if (if (!(bv(gc, bj(), false)))
11451150 then true
1146- else !(bF(bB)))
1151+ else !(bH(bD)))
11471152 then true
1148- else !(bG()))
1153+ else !(bI()))
11491154 then true
1150- else bH())
1155+ else bJ())
11511156 then throw("Unable to liquidate")
1152- else if (if (if ((gm > bi()))
1153- then (bj() > 0)
1157+ else if (if (if ((go > bk()))
1158+ then (bl() > 0)
11541159 else false)
1155- then (ak > bj())
1160+ then (am > bl())
11561161 else false)
11571162 then {
1158- let go = bA(bB)
1159- let fh = go._1
1160- let fi = go._2
1161- let fj = go._3
1162- let fk = go._4
1163- let fl = if ((fh > 0))
1164- then ag
1165- else af
1166- let fm = (fl == af)
1167- let du = do(bB, fh)
1168- let gp = cZ(bB, an)
1169- let fp = gp._1
1170- let cY = gp._2
1171- let gq = bO(fm, du)
1172- let dt = gq._1
1173- let bR = gq._2
1174- let bS = gq._3
1175- let dB = gq._4
1176- let dC = gq._5
1177- let dy = ar(at(cY, au(dt)), au(fh))
1178- let gr = cf(fh, fi, fk, dy)
1179- let co = gr._1
1180- let cp = gr._2
1181- let ck = gr._3
1182- let fu = (cY - dy)
1183- let fv = if ((fh > 0))
1184- then ((fp - du) - fu)
1185- else ((fu + fp) - du)
1186- let gs = at(du, bi())
1187- let gt = (gs / 2)
1188- let fS = (gs - gt)
1189- let gu = (co - gs)
1190- let fw = (fh + dt)
1191- let fy = au(fv)
1192- let gv = by(fw)
1193- let dF = (bc() - du)
1194- let gh = (aV() - gs)
1195- let gw = if ((0 > gh))
1196- then $Tuple2(0, au(gh))
1197- else $Tuple2(gh, 0)
1198- let gx = gw._1
1199- let gy = gw._2
1200- let fG = if ((gy > 0))
1163+ let gq = bC(bD)
1164+ let fj = gq._1
1165+ let fk = gq._2
1166+ let fl = gq._3
1167+ let fm = gq._4
1168+ let fn = if ((fj > 0))
1169+ then ai
1170+ else ah
1171+ let fo = (fn == ah)
1172+ let dw = dq(bD, fj)
1173+ let gr = db(bD, ap)
1174+ let fr = gr._1
1175+ let da = gr._2
1176+ let gs = bQ(fo, dw)
1177+ let dv = gs._1
1178+ let bT = gs._2
1179+ let bU = gs._3
1180+ let dD = gs._4
1181+ let dE = gs._5
1182+ let dA = at(av(da, aw(dv)), aw(fj))
1183+ let gt = ch(fj, fk, fm, dA)
1184+ let cq = gt._1
1185+ let cr = gt._2
1186+ let cm = gt._3
1187+ let fw = (da - dA)
1188+ let fx = if ((fj > 0))
1189+ then ((fr - dw) - fw)
1190+ else ((fw + fr) - dw)
1191+ let gu = av(dw, bk())
1192+ let gv = (gu / 2)
1193+ let fU = (gu - gv)
1194+ let gw = (cq - gu)
1195+ let fy = (fj + dv)
1196+ let fA = aw(fx)
1197+ let gx = bA(fy)
1198+ let dH = (be() - dw)
1199+ let gj = (aX() - gu)
1200+ let gy = if ((0 > gj))
1201+ then $Tuple2(0, aw(gj))
1202+ else $Tuple2(gj, 0)
1203+ let gz = gy._1
1204+ let gA = gy._2
1205+ let fI = if ((gA > 0))
12011206 then {
1202- let gl = invoke(ab(), "withdraw", [gy], nil)
1203- if ((gl == gl))
1207+ let gn = invoke(ac(), "withdraw", [gA], nil)
1208+ if ((gn == gn))
12041209 then nil
12051210 else throw("Strict value is not equal to itself.")
12061211 }
12071212 else nil
1208- if ((fG == fG))
1213+ if ((fI == fI))
12091214 then {
1210- let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1211- if ((gb == gb))
1215+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), (gu - gA)], nil)
1216+ if ((gd == gd))
12121217 then {
1213- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1214- if ((fU == fU))
1218+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
1219+ if ((fW == fW))
12151220 then {
1216- let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
1217- if ((fA == fA))
1218- then (((ez(bB, fw, gu, fy, gv) ++ eL(bR, bS, dB, dC, dF, (bq() - (if ((fw > 0))
1219- then au(dt)
1220- else 0)), (bp() - (if ((0 > fw))
1221- then au(dt)
1222- else 0)))) ++ eS(bs.caller, gt)) ++ eV(gx))
1221+ let fC = invoke(ad(), "notifyNotional", [bD, fA], nil)
1222+ if ((fC == fC))
1223+ then (((eB(bD, fy, gw, fA, gx) ++ eN(bT, bU, dD, dE, dH, (bs() - (if ((fy > 0))
1224+ then aw(dv)
1225+ else 0)), (br() - (if ((0 > fy))
1226+ then aw(dv)
1227+ else 0)))) ++ eU(bu.caller, gv)) ++ eX(gz))
12231228 else throw("Strict value is not equal to itself.")
12241229 }
12251230 else throw("Strict value is not equal to itself.")
12291234 else throw("Strict value is not equal to itself.")
12301235 }
12311236 else {
1232- let gz = dv(bB, false)
1233- let cT = gz._1
1234- let cp = gz._2
1235- let cU = gz._3
1236- let cV = gz._4
1237- let bR = gz._5
1238- let bS = gz._6
1239- let dB = gz._7
1240- let dC = gz._8
1241- let dF = gz._9
1242- let du = gz._10
1243- let dD = gz._11
1244- let dE = gz._12
1245- let gs = at(du, bi())
1246- let gt = (gs / 2)
1247- let fS = (gs - gt)
1248- let gh = (aV() - gs)
1249- let gA = if ((0 > gh))
1250- then $Tuple2(0, au(gh))
1251- else $Tuple2(gh, 0)
1252- let gx = gA._1
1253- let gy = gA._2
1254- let fG = if ((gy > 0))
1237+ let gB = dx(bD, false)
1238+ let cV = gB._1
1239+ let cr = gB._2
1240+ let cW = gB._3
1241+ let cX = gB._4
1242+ let bT = gB._5
1243+ let bU = gB._6
1244+ let dD = gB._7
1245+ let dE = gB._8
1246+ let dH = gB._9
1247+ let dw = gB._10
1248+ let dF = gB._11
1249+ let dG = gB._12
1250+ let gu = av(dw, bk())
1251+ let gv = (gu / 2)
1252+ let fU = (gu - gv)
1253+ let gj = (aX() - gu)
1254+ let gC = if ((0 > gj))
1255+ then $Tuple2(0, aw(gj))
1256+ else $Tuple2(gj, 0)
1257+ let gz = gC._1
1258+ let gA = gC._2
1259+ let fI = if ((gA > 0))
12551260 then {
1256- let gl = invoke(ab(), "withdraw", [gy], nil)
1257- if ((gl == gl))
1261+ let gn = invoke(ac(), "withdraw", [gA], nil)
1262+ if ((gn == gn))
12581263 then nil
12591264 else throw("Strict value is not equal to itself.")
12601265 }
12611266 else nil
1262- if ((fG == fG))
1267+ if ((fI == fI))
12631268 then {
1264- let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1265- if ((gb == gb))
1269+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), (gu - gA)], nil)
1270+ if ((gd == gd))
12661271 then {
1267- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1268- if ((fU == fU))
1272+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
1273+ if ((fW == fW))
12691274 then {
1270- let fA = invoke(ac(), "notifyNotional", [bB, 0], nil)
1271- if ((fA == fA))
1272- then (((eR(bB) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(bs.caller, gt)) ++ eV(gx))
1275+ let fC = invoke(ad(), "notifyNotional", [bD, 0], nil)
1276+ if ((fC == fC))
1277+ then (((eT(bD) ++ eN(bT, bU, dD, dE, dH, dF, dG)) ++ eU(bu.caller, gv)) ++ eX(gz))
12731278 else throw("Strict value is not equal to itself.")
12741279 }
12751280 else throw("Strict value is not equal to itself.")
12821287
12831288
12841289
1285-@Callable(bs)
1290+@Callable(bu)
12861291 func payFunding () = {
1287- let gB = bd()
1288- if (if (if ((gB > lastBlock.timestamp))
1292+ let gD = bf()
1293+ if (if (if ((gD > lastBlock.timestamp))
12891294 then true
1290- else !(bG()))
1295+ else !(bI()))
12911296 then true
1292- else bH())
1293- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gB)))
1297+ else bJ())
1298+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gD)))
12941299 else {
1295- let ee = cz()
1296- let gC = ed()
1297- let eh = gC._1
1298- let ei = gC._2
1299- et((gB + bg()), (bn() + ei), (bo() + eh), ar(ei, ee), ar(eh, ee))
1300+ let eg = cB()
1301+ let gE = ef()
1302+ let ej = gE._1
1303+ let ek = gE._2
1304+ ev((gD + bi()), (bp() + ek), (bq() + ej), at(ek, eg), at(ej, eg))
13001305 }
13011306 }
13021307
13031308
13041309
1305-@Callable(bs)
1306-func forceMoveAsset (bB,eT) = if (if ((addressFromPublicKey(X()) != bs.caller))
1310+@Callable(bu)
1311+func forceMoveAsset (bD,eV) = if (if ((addressFromPublicKey(Y()) != bu.caller))
13071312 then true
1308- else (0 > eT))
1313+ else (0 > eV))
13091314 then throw("Invalid forceMoveAsset parameters")
13101315 else {
1311- let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1312- if ((gb == gb))
1313- then (eS(addressFromStringValue(bB), eT) ++ eV((aV() - eT)))
1316+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), eV], nil)
1317+ if ((gd == gd))
1318+ then (eU(addressFromStringValue(bD), eV) ++ eX((aX() - eV)))
13141319 else throw("Strict value is not equal to itself.")
13151320 }
13161321
13171322
13181323
1319-@Callable(bs)
1320-func adjustPeg (dX) = if (if ((addressFromPublicKey(X()) != bs.caller))
1324+@Callable(bu)
1325+func adjustPeg (dZ) = if (if ((addressFromPublicKey(Y()) != bu.caller))
13211326 then true
1322- else (0 > dX))
1327+ else (0 > dZ))
13231328 then throw("Invalid adjustPeg parameters")
13241329 else {
1325- let gD = dW(dX)
1326- let eb = gD._1
1327- let gE = gD._2
1328- if ((gE == 0))
1330+ let gF = dY(dZ)
1331+ let ed = gF._1
1332+ let gG = gF._2
1333+ if ((gG == 0))
13291334 then throw("Nothing to adjust")
1330- else if ((gE > 0))
1331- then {
1332- let gl = invoke(ab(), "withdraw", [gE], nil)
1333- if ((gl == gl))
1335+ else if ((gG > 0))
1336+ then eM(ed, bb())
1337+ else {
1338+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), aw(gG)], nil)
1339+ if ((gd == gd))
13341340 then {
1335- let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gE)])
1336- if ((fT == fT))
1337- then (eV((aV() + gE)) ++ eK(eb, aZ()))
1338- else throw("Strict value is not equal to itself.")
1339- }
1340- else throw("Strict value is not equal to itself.")
1341- }
1342- else {
1343- let gb = invoke(Z(), "unlockNeutrino", [au(gE), toBase58String(Y())], nil)
1344- if ((gb == gb))
1345- then {
1346- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gE))])
1347- if ((fU == fU))
1348- then (eV((aV() - au(gE))) ++ eK(eb, aZ()))
1341+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), aw(gG))])
1342+ if ((fW == fW))
1343+ then (eX((aX() - aw(gG))) ++ eM(ed, bb()))
13491344 else throw("Strict value is not equal to itself.")
13501345 }
13511346 else throw("Strict value is not equal to itself.")
13541349
13551350
13561351
1357-@Callable(bs)
1358-func v_get (bB) = {
1359- let gF = dv(bB, false)
1360- let cT = gF._1
1361- let cU = gF._2
1362- let cV = gF._3
1363- let gG = gF._4
1364- throw((((ap(cU) + ap(cV)) + ap(gG)) + ap(dn(bB))))
1352+@Callable(bu)
1353+func migrateLiquidity () = {
1354+ let gH = aX()
1355+ let gd = invoke(aa(), "unlockNeutrino", [gH, toBase58String(Z())], nil)
1356+ if ((gd == gd))
1357+ then {
1358+ let fV = invoke(ag(), "deposit", nil, [AttachedPayment(Z(), gH)])
1359+ if ((fV == fV))
1360+ then nil
1361+ else throw("Strict value is not equal to itself.")
1362+ }
1363+ else throw("Strict value is not equal to itself.")
13651364 }
13661365
13671366
13681367
1369-@Callable(bs)
1370-func view_calcRemainMarginWithFundingPayment (bB) = {
1371- let gH = bA(bB)
1372- let bE = gH._1
1373- let db = gH._2
1374- let dk = gH._3
1375- let dd = gH._4
1376- let gI = cZ(bB, an)
1377- let cQ = gI._1
1378- let cY = gI._2
1379- let gJ = cf(bE, db, dd, cY)
1380- let co = gJ._1
1381- let cp = gJ._2
1382- let ck = gJ._3
1383- throw((((((ap(co) + ap(ck)) + ap(dn(bB))) + ap(cY)) + ap(cp)) + ap(cQ)))
1368+@Callable(bu)
1369+func v_get (bD) = {
1370+ let gI = dx(bD, false)
1371+ let cV = gI._1
1372+ let cW = gI._2
1373+ let cX = gI._3
1374+ let gJ = gI._4
1375+ throw((((ar(cW) + ar(cX)) + ar(gJ)) + ar(dp(bD))))
13841376 }
13851377
13861378
13871379
1388-@Callable(bs)
1389-func view_getPegAdjustCost (dX) = {
1390- let ec = dW(dX)
1391- throw(toString(ec._2))
1380+@Callable(bu)
1381+func view_calcRemainMarginWithFundingPayment (bD) = {
1382+ let gK = bC(bD)
1383+ let bG = gK._1
1384+ let dd = gK._2
1385+ let dm = gK._3
1386+ let df = gK._4
1387+ let gL = db(bD, ap)
1388+ let cS = gL._1
1389+ let da = gL._2
1390+ let gM = ch(bG, dd, df, da)
1391+ let cq = gM._1
1392+ let cr = gM._2
1393+ let cm = gM._3
1394+ throw((((((ar(cq) + ar(cm)) + ar(dp(bD))) + ar(da)) + ar(cr)) + ar(cS)))
13921395 }
13931396
13941397
13951398
1396-@Callable(bs)
1397-func view_getFunding () = {
1398- let ee = cz()
1399- let gK = ed()
1400- let eh = gK._1
1401- let ei = gK._2
1402- let gL = ar(ei, ee)
1403- let gM = ar(eh, ee)
1404- throw((((ap(gL) + ap(gM)) + ap(dG())) + ap(cz())))
1399+@Callable(bu)
1400+func view_getPegAdjustCost (dZ) = {
1401+ let ee = dY(dZ)
1402+ throw(toString(ee._2))
14051403 }
14061404
14071405
1408-@Verifier(gN)
1409-func gO () = sigVerify(gN.bodyBytes, gN.proofs[0], X())
1406+
1407+@Callable(bu)
1408+func view_getFunding () = {
1409+ let eg = cB()
1410+ let gN = ef()
1411+ let ej = gN._1
1412+ let ek = gN._2
1413+ let gO = at(ek, eg)
1414+ let gP = at(ej, eg)
1415+ throw((((ar(gO) + ar(gP)) + ar(dI())) + ar(cB())))
1416+ }
1417+
1418+
1419+@Verifier(gQ)
1420+func gR () = sigVerify(gQ.bodyBytes, gQ.proofs[0], Y())
14101421
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionClosedDate"
2121
2222 let j = "k_initialized"
2323
2424 let k = "k_paused"
2525
2626 let l = "k_fee"
2727
2828 let m = "k_fundingPeriod"
2929
3030 let n = "k_initMarginRatio"
3131
3232 let o = "k_mmr"
3333
3434 let p = "k_liquidationFeeRatio"
3535
3636 let q = "k_partLiquidationRatio"
3737
3838 let r = "k_spreadLimit"
3939
4040 let s = "k_maxPriceImpact"
4141
4242 let t = "k_maxPriceSpread"
4343
4444 let u = "k_lastDataStr"
4545
4646 let v = "k_lastMinuteId"
4747
4848 let w = "k_twapDataLastCumulativePrice"
4949
5050 let x = "k_twapDataLastPrice"
5151
5252 let y = "k_twapDataPreviousMinuteId"
5353
5454 let z = "k_latestLongPremiumFraction"
5555
5656 let A = "k_latestShortPremiumFraction"
5757
5858 let B = "k_nextFundingBlockMinTimestamp"
5959
6060 let C = "k_longFundingRate"
6161
6262 let D = "k_shortFundingRate"
6363
6464 let E = "k_qtAstR"
6565
6666 let F = "k_bsAstR"
6767
6868 let G = "k_totalPositionSize"
6969
7070 let H = "k_totalLongPositionSize"
7171
7272 let I = "k_totalShortPositionSize"
7373
7474 let J = "k_cumulativeNotional"
7575
7676 let K = "k_openInterestNotional"
7777
7878 let L = "k_coordinatorAddress"
7979
8080 let M = "k_insurance_address"
8181
8282 let N = "k_admin_address"
8383
8484 let O = "k_admin_public_key"
8585
8686 let P = "k_quote_asset"
8787
8888 let Q = "k_quote_staking"
8989
9090 let R = "k_staking_address"
9191
9292 let S = "k_miner_address"
9393
9494 let T = "k_orders_address"
9595
9696 let U = "k_referral_address"
9797
98-func V () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
98+let V = "k_manager_address"
99+
100+func W () = valueOrErrorMessage(addressFromString(getStringValue(this, L)), "Coordinator not set")
99101
100102
101-func W () = addressFromString(getStringValue(V(), N))
103+func X () = addressFromString(getStringValue(W(), N))
102104
103105
104-func X () = fromBase58String(getStringValue(V(), O))
106+func Y () = fromBase58String(getStringValue(W(), O))
105107
106108
107-func Y () = fromBase58String(getStringValue(V(), P))
109+func Z () = fromBase58String(getStringValue(W(), P))
108110
109111
110-func Z () = valueOrErrorMessage(addressFromString(getStringValue(V(), Q)), "Quote asset staking not set")
112+func aa () = valueOrErrorMessage(addressFromString(getStringValue(W(), Q)), "Quote asset staking not set")
111113
112114
113-func aa () = valueOrErrorMessage(addressFromString(getStringValue(V(), R)), "Staking not set")
115+func ab () = valueOrErrorMessage(addressFromString(getStringValue(W(), R)), "Staking not set")
114116
115117
116-func ab () = valueOrErrorMessage(addressFromString(getStringValue(V(), M)), "Insurance not set")
118+func ac () = valueOrErrorMessage(addressFromString(getStringValue(W(), M)), "Insurance not set")
117119
118120
119-func ac () = valueOrErrorMessage(addressFromString(getStringValue(V(), S)), "Miner not set")
121+func ad () = valueOrErrorMessage(addressFromString(getStringValue(W(), S)), "Miner not set")
120122
121123
122-func ad () = valueOrErrorMessage(addressFromString(getStringValue(V(), T)), "Orders not set")
124+func ae () = valueOrErrorMessage(addressFromString(getStringValue(W(), T)), "Orders not set")
123125
124126
125-func ae () = valueOrErrorMessage(addressFromString(getStringValue(V(), U)), "Referral not set")
127+func af () = valueOrErrorMessage(addressFromString(getStringValue(W(), U)), "Referral not set")
126128
127129
128-let af = 1
129-
130-let ag = 2
131-
132-let ah = 15
133-
134-let ai = 15
135-
136-let aj = 1000
137-
138-let ak = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
139-
140-let al = (86400 * ak)
141-
142-let am = 100
143-
144-let an = 1
145-
146-let ao = 2
147-
148-func ap (aq) = (toString(aq) + ",")
130+func ag () = valueOrErrorMessage(addressFromString(getStringValue(W(), V)), "Manager not set")
149131
150132
151-func ar (aq,as) = fraction(aq, ak, as, HALFEVEN)
133+let ah = 1
134+
135+let ai = 2
136+
137+let aj = 15
138+
139+let ak = 15
140+
141+let al = 1000
142+
143+let am = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
144+
145+let an = (86400 * am)
146+
147+let ao = 100
148+
149+let ap = 1
150+
151+let aq = 2
152+
153+func ar (as) = (toString(as) + ",")
152154
153155
154-func at (aq,as) = fraction(aq, as, ak, HALFEVEN)
156+func at (as,au) = fraction(as, am, au, HALFEVEN)
155157
156158
157-func au (aq) = if ((aq > 0))
158- then aq
159- else -(aq)
159+func av (as,au) = fraction(as, au, am, HALFEVEN)
160160
161161
162-func av (aq,as) = if ((aq >= as))
163- then aq
164- else as
162+func aw (as) = if ((as > 0))
163+ then as
164+ else -(as)
165165
166166
167-func aw (ax,ay) = ((ax + "_") + ay)
167+func ax (as,au) = if ((as >= au))
168+ then as
169+ else au
168170
169171
170-func az (aA) = {
171- func aB (aC,aD) = ((aC + aD) + ",")
172+func ay (az,aA) = ((az + "_") + aA)
172173
173- let aE = {
174- let aF = aA
175- let aG = size(aF)
176- let aH = ""
177- func aI (aJ,aK) = if ((aK >= aG))
178- then aJ
179- else aB(aJ, aF[aK])
180174
181- func aL (aJ,aK) = if ((aK >= aG))
182- then aJ
175+func aB (aC) = {
176+ func aD (aE,aF) = ((aE + aF) + ",")
177+
178+ let aG = {
179+ let aH = aC
180+ let aI = size(aH)
181+ let aJ = ""
182+ func aK (aL,aM) = if ((aM >= aI))
183+ then aL
184+ else aD(aL, aH[aM])
185+
186+ func aN (aL,aM) = if ((aM >= aI))
187+ then aL
183188 else throw("List size exceeds 20")
184189
185- aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
190+ aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
186191 }
187- let aM = dropRight(aE, 1)
188- let aN = if ((take(aM, 1) == ","))
189- then drop(aM, 1)
190- else aM
191- aN
192+ let aO = dropRight(aG, 1)
193+ let aP = if ((take(aO, 1) == ","))
194+ then drop(aO, 1)
195+ else aO
196+ aP
192197 }
193198
194199
195-func aO (aP) = split(aP, ",")
200+func aQ (aR) = split(aR, ",")
196201
197202
198-func aQ (aA,aR,aS) = if ((size(aA) > aR))
199- then (removeByIndex(aA, 0) :+ aS)
200- else (aA :+ aS)
203+func aS (aC,aT,aU) = if ((size(aC) > aT))
204+ then (removeByIndex(aC, 0) :+ aU)
205+ else (aC :+ aU)
201206
202207
203-func aT (aU) = valueOrErrorMessage(getInteger(this, aU), ("no value for " + aU))
208+func aV (aW) = valueOrErrorMessage(getInteger(this, aW), ("no value for " + aW))
204209
205210
206-func aV () = aT(d)
211+func aX () = aV(d)
207212
208213
209-func aW () = aT(l)
214+func aY () = aV(l)
210215
211216
212-func aX () = aT(n)
217+func aZ () = aV(n)
213218
214219
215-func aY () = aT(E)
220+func ba () = aV(E)
216221
217222
218-func aZ () = aT(F)
223+func bb () = aV(F)
219224
220225
221-func ba () = aT(G)
226+func bc () = aV(G)
222227
223228
224-func bb () = aT(J)
229+func bd () = aV(J)
225230
226231
227-func bc () = aT(K)
232+func be () = aV(K)
228233
229234
230-func bd () = aT(B)
235+func bf () = aV(B)
231236
232237
233-func be () = aT(m)
238+func bg () = aV(m)
234239
235240
236-func bf () = (be() * ak)
241+func bh () = (bg() * am)
237242
238243
239-func bg () = (be() * aj)
244+func bi () = (bg() * al)
240245
241246
242-func bh () = aT(o)
247+func bj () = aV(o)
243248
244249
245-func bi () = aT(p)
250+func bk () = aV(p)
246251
247252
248-func bj () = aT(q)
253+func bl () = aV(q)
249254
250255
251-func bk () = aT(r)
256+func bm () = aV(r)
252257
253258
254-func bl () = aT(s)
259+func bn () = aV(s)
255260
256261
257-func bm () = aT(t)
262+func bo () = aV(t)
258263
259264
260-func bn () = aT(z)
265+func bp () = aV(z)
261266
262267
263-func bo () = aT(A)
268+func bq () = aV(A)
264269
265270
266-func bp () = aT(I)
271+func br () = aV(I)
267272
268273
269-func bq () = aT(H)
274+func bs () = aV(H)
270275
271276
272-func br (bs) = valueOrElse(getString(ad(), "k_sender"), toString(bs.caller))
277+func bt (bu) = valueOrElse(getString(ae(), "k_sender"), toString(bu.caller))
273278
274279
275-func bt (bu,bv,bw) = {
276- let bx = (bu - bv)
277- if (if (bw)
278- then (0 > bx)
280+func bv (bw,bx,by) = {
281+ let bz = (bw - bx)
282+ if (if (by)
283+ then (0 > bz)
279284 else false)
280285 then throw("Invalid margin")
281- else if (if (!(bw))
282- then (bx >= 0)
286+ else if (if (!(by))
287+ then (bz >= 0)
283288 else false)
284289 then throw("Invalid margin")
285290 else true
286291 }
287292
288293
289-func by (bz) = if ((bz == 0))
294+func bA (bB) = if ((bB == 0))
290295 then throw("Should not be called with _positionSize == 0")
291- else if ((bz > 0))
292- then bn()
293- else bo()
296+ else if ((bB > 0))
297+ then bp()
298+ else bq()
294299
295300
296-func bA (bB) = {
297- let bC = getInteger(this, aw(e, bB))
298- let bD = bC
299- if ($isInstanceOf(bD, "Int"))
301+func bC (bD) = {
302+ let bE = getInteger(this, ay(e, bD))
303+ let bF = bE
304+ if ($isInstanceOf(bF, "Int"))
300305 then {
301- let bE = bD
302- $Tuple4(bE, getIntegerValue(this, aw(f, bB)), getIntegerValue(this, aw(g, bB)), getIntegerValue(this, aw(h, bB)))
306+ let bG = bF
307+ $Tuple4(bG, getIntegerValue(this, ay(f, bD)), getIntegerValue(this, ay(g, bD)), getIntegerValue(this, ay(h, bD)))
303308 }
304309 else $Tuple4(0, 0, 0, 0)
305310 }
306311
307312
308-func bF (bB) = if ((bA(bB)._1 == 0))
313+func bH (bD) = if ((bC(bD)._1 == 0))
309314 then throw("No open position")
310315 else true
311316
312317
313-func bG () = valueOrElse(getBoolean(this, j), false)
318+func bI () = valueOrElse(getBoolean(this, j), false)
314319
315320
316-func bH () = valueOrElse(getBoolean(this, k), false)
321+func bJ () = valueOrElse(getBoolean(this, k), false)
317322
318323
319-func bI (bJ,bK,bL) = if (bJ)
324+func bK (bL,bM,bN) = if (bL)
320325 then {
321- let bM = (aZ() - bL)
322- if ((0 >= bM))
326+ let bO = (bb() - bN)
327+ if ((0 >= bO))
323328 then throw("Tx lead to base asset reserve <= 0, revert")
324- else $Tuple4((aY() + bK), bM, (ba() + bL), (bb() + bK))
329+ else $Tuple4((ba() + bM), bO, (bc() + bN), (bd() + bM))
325330 }
326331 else {
327- let bN = (aY() - bK)
328- if ((0 >= bN))
332+ let bP = (ba() - bM)
333+ if ((0 >= bP))
329334 then throw("Tx lead to base quote reserve <= 0, revert")
330- else $Tuple4(bN, (aZ() + bL), (ba() - bL), (bb() - bK))
335+ else $Tuple4(bP, (bb() + bN), (bc() - bN), (bd() - bM))
331336 }
332337
333338
334-func bO (bJ,bK) = {
335- let bP = aY()
336- let bQ = aZ()
337- let aU = at(bP, bQ)
338- let bR = if (bJ)
339- then (bP + bK)
340- else (bP - bK)
341- let bS = ar(aU, bR)
342- let bT = au((bS - bQ))
343- let bU = if (bJ)
344- then bT
345- else -(bT)
346- let bV = bI(bJ, bK, bT)
347- let bW = bV._1
348- let bX = bV._2
349- let bY = bV._3
350- let bZ = bV._4
351- let ca = ar(bP, bQ)
352- let cb = ar(bK, bT)
353- let cc = au((ca - cb))
354- let cd = (ak - ar(ca, (ca + cc)))
355- let ce = bl()
356- if ((cd > ce))
357- then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(bP)) + " before base asset: ") + toString(bQ)) + " quote asset amount to exchange: ") + toString(bK)) + " price before: ") + toString(ca)) + " marketPrice: ") + toString(cb)))
358- else $Tuple5(bU, bW, bX, bY, bZ)
339+func bQ (bL,bM) = {
340+ let bR = ba()
341+ let bS = bb()
342+ let aW = av(bR, bS)
343+ let bT = if (bL)
344+ then (bR + bM)
345+ else (bR - bM)
346+ let bU = at(aW, bT)
347+ let bV = aw((bU - bS))
348+ let bW = if (bL)
349+ then bV
350+ else -(bV)
351+ let bX = bK(bL, bM, bV)
352+ let bY = bX._1
353+ let bZ = bX._2
354+ let ca = bX._3
355+ let cb = bX._4
356+ let cc = at(bR, bS)
357+ let cd = at(bM, bV)
358+ let ce = aw((cc - cd))
359+ let cf = (am - at(cc, (cc + ce)))
360+ let cg = bn()
361+ if ((cf > cg))
362+ then throw(((((((((((((("Price impact " + toString(cf)) + " > max price impact ") + toString(cg)) + " before quote asset: ") + toString(bR)) + " before base asset: ") + toString(bS)) + " quote asset amount to exchange: ") + toString(bM)) + " price before: ") + toString(cc)) + " marketPrice: ") + toString(cd)))
363+ else $Tuple5(bW, bY, bZ, ca, cb)
359364 }
360365
361366
362-func cf (cg,ch,ci,cj) = {
363- let ck = if ((cg != 0))
367+func ch (ci,cj,ck,cl) = {
368+ let cm = if ((ci != 0))
364369 then {
365- let cl = by(cg)
366- at((cl - ci), cg)
370+ let cn = bA(ci)
371+ av((cn - ck), ci)
367372 }
368373 else 0
369- let cm = ((cj - ck) + ch)
370- let cn = if ((0 > cm))
371- then $Tuple2(0, au(cm))
372- else $Tuple2(au(cm), 0)
373- let co = cn._1
374- let cp = cn._2
375- $Tuple3(co, cp, ck)
374+ let co = ((cl - cm) + cj)
375+ let cp = if ((0 > co))
376+ then $Tuple2(0, aw(co))
377+ else $Tuple2(aw(co), 0)
378+ let cq = cp._1
379+ let cr = cp._2
380+ $Tuple3(cq, cr, cm)
376381 }
377382
378383
379-func cq (bJ,bL,cr,cs,ct) = {
380- let ca = ar(cs, ct)
381- if ((bL == 0))
384+func cs (bL,bN,ct,cu,cv) = {
385+ let cc = at(cu, cv)
386+ if ((bN == 0))
382387 then throw("Invalid base asset amount")
383388 else {
384- let aU = at(cs, ct)
385- let cu = if (bJ)
386- then (ct + bL)
387- else (ct - bL)
388- let cv = ar(aU, cu)
389- let cw = au((cv - cs))
390- let ce = bl()
391- let cx = bI(!(bJ), cw, bL)
392- let bW = cx._1
393- let bX = cx._2
394- let bY = cx._3
395- let bZ = cx._4
396- let cb = ar(cw, bL)
397- let cc = au((ca - cb))
398- let cd = (ak - ar(ca, (ca + cc)))
399- if (if ((cd > ce))
400- then cr
389+ let aW = av(cu, cv)
390+ let cw = if (bL)
391+ then (cv + bN)
392+ else (cv - bN)
393+ let cx = at(aW, cw)
394+ let cy = aw((cx - cu))
395+ let cg = bn()
396+ let cz = bK(!(bL), cy, bN)
397+ let bY = cz._1
398+ let bZ = cz._2
399+ let ca = cz._3
400+ let cb = cz._4
401+ let cd = at(cy, bN)
402+ let ce = aw((cc - cd))
403+ let cf = (am - at(cc, (cc + ce)))
404+ if (if ((cf > cg))
405+ then ct
401406 else false)
402- then throw(((((((((((((("Price impact " + toString(cd)) + " > max price impact ") + toString(ce)) + " before quote asset: ") + toString(cs)) + " before base asset: ") + toString(ct)) + " base asset amount to exchange: ") + toString(bL)) + " price before: ") + toString(ca)) + " market price: ") + toString(cb)))
403- else $Tuple8(cw, bW, bX, bY, bZ, (bq() - (if (bJ)
404- then au(bL)
405- else 0)), (bp() - (if (!(bJ))
406- then au(bL)
407- else 0)), cd)
407+ then throw(((((((((((((("Price impact " + toString(cf)) + " > max price impact ") + toString(cg)) + " before quote asset: ") + toString(cu)) + " before base asset: ") + toString(cv)) + " base asset amount to exchange: ") + toString(bN)) + " price before: ") + toString(cc)) + " market price: ") + toString(cd)))
408+ else $Tuple8(cy, bY, bZ, ca, cb, (bs() - (if (bL)
409+ then aw(bN)
410+ else 0)), (br() - (if (!(bL))
411+ then aw(bN)
412+ else 0)), cf)
408413 }
409414 }
410415
411416
412-func cy (bJ,bL,cr) = cq(bJ, bL, cr, aY(), aZ())
417+func cA (bL,bN,ct) = cs(bL, bN, ct, ba(), bb())
413418
414419
415-func cz () = {
416- let cA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
417- let cB = getStringValue(this, a)
418- let cC = getStringValue(this, b)
419- let cD = valueOrErrorMessage(getInteger(cA, cB), ((("Can not get oracle price. Oracle: " + toString(cA)) + " key: ") + cB))
420- cD
420+func cB () = {
421+ let cC = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
422+ let cD = getStringValue(this, a)
423+ let cE = getStringValue(this, b)
424+ let cF = valueOrErrorMessage(getInteger(cC, cD), ((("Can not get oracle price. Oracle: " + toString(cC)) + " key: ") + cD))
425+ cF
421426 }
422427
423428
424-func cE (cs,ct) = {
425- let cF = cz()
426- let cG = ar(cs, ct)
427- let cH = ar((cF + cG), (2 * ak))
428- let cI = ar(au((cF - cG)), cH)
429- if ((cI > bm()))
430- then throw(((("Price spread " + toString(cI)) + " > max price spread ") + toString(bm())))
429+func cG (cu,cv) = {
430+ let cH = cB()
431+ let cI = at(cu, cv)
432+ let cJ = at((cH + cI), (2 * am))
433+ let cK = at(aw((cH - cI)), cJ)
434+ if ((cK > bo()))
435+ then throw(((("Price spread " + toString(cK)) + " > max price spread ") + toString(bo())))
431436 else true
432437 }
433438
434439
435-func cJ () = {
436- let cs = aY()
437- let ct = aZ()
438- ar(cs, ct)
440+func cL () = {
441+ let cu = ba()
442+ let cv = bb()
443+ at(cu, cv)
439444 }
440445
441446
442-func cK () = {
443- let cF = cz()
444- let cL = cJ()
445- (ar(au((cF - cL)), cF) > bk())
447+func cM () = {
448+ let cH = cB()
449+ let cN = cL()
450+ (at(aw((cH - cN)), cH) > bm())
446451 }
447452
448453
449-func cM (bz,cN,cs,ct) = {
450- let cO = au(bz)
451- let cP = (0 > bz)
452- let cQ = if ((cN == an))
454+func cO (bB,cP,cu,cv) = {
455+ let cQ = aw(bB)
456+ let cR = (0 > bB)
457+ let cS = if ((cP == ap))
453458 then {
454- let cR = cq(!(cP), cO, false, cs, ct)
455- let cS = cR._1
456- let cT = cR._2
457- let cU = cR._3
458- let cV = cR._4
459- cS
459+ let cT = cs(!(cR), cQ, false, cu, cv)
460+ let cU = cT._1
461+ let cV = cT._2
462+ let cW = cT._3
463+ let cX = cT._4
464+ cU
460465 }
461- else at(cO, cz())
462- cQ
466+ else av(cQ, cB())
467+ cS
463468 }
464469
465470
466-func cW (bz,cX,cs,ct,cN) = if ((bz == 0))
471+func cY (bB,cZ,cu,cv,cP) = if ((bB == 0))
467472 then throw("Invalid position size")
468473 else {
469- let cP = (0 > bz)
470- let cQ = cM(bz, cN, cs, ct)
471- let cY = if (cP)
472- then (cX - cQ)
473- else (cQ - cX)
474- $Tuple2(cQ, cY)
474+ let cR = (0 > bB)
475+ let cS = cO(bB, cP, cu, cv)
476+ let da = if (cR)
477+ then (cZ - cS)
478+ else (cS - cZ)
479+ $Tuple2(cS, da)
475480 }
476481
477482
478-func cZ (bB,cN) = {
479- let da = bA(bB)
480- let bE = da._1
481- let db = da._2
482- let dc = da._3
483- let dd = da._4
484- cW(bE, dc, aY(), aZ(), cN)
483+func db (bD,cP) = {
484+ let dc = bC(bD)
485+ let bG = dc._1
486+ let dd = dc._2
487+ let de = dc._3
488+ let df = dc._4
489+ cY(bG, de, ba(), bb(), cP)
485490 }
486491
487492
488-func de (df,dg,dh) = ar((df - dg), dh)
493+func dg (dh,di,dj) = at((dh - di), dj)
489494
490495
491-func di (bB,cN) = {
492- let dj = bA(bB)
493- let bE = dj._1
494- let db = dj._2
495- let dk = dj._3
496- let dd = dj._4
497- let dl = cZ(bB, cN)
498- let cQ = dl._1
499- let cY = dl._2
500- let dm = cf(bE, db, dd, cY)
501- let co = dm._1
502- let cp = dm._2
503- de(co, cp, cQ)
496+func dk (bD,cP) = {
497+ let dl = bC(bD)
498+ let bG = dl._1
499+ let dd = dl._2
500+ let dm = dl._3
501+ let df = dl._4
502+ let dn = db(bD, cP)
503+ let cS = dn._1
504+ let da = dn._2
505+ let do = ch(bG, dd, df, da)
506+ let cq = do._1
507+ let cr = do._2
508+ dg(cq, cr, cS)
504509 }
505510
506511
507-func dn (bB) = di(bB, an)
512+func dp (bD) = dk(bD, ap)
508513
509514
510-func do (bB,bz) = {
511- let dp = av(bj(), (ak - ar(dn(bB), bh())))
512- let dq = at(au(bz), dp)
513- let dr = cy((bz > 0), dq, false)
514- let ds = dr._1
515- let cd = dr._8
516- if ((bl() > cd))
517- then ds
515+func dq (bD,bB) = {
516+ let dr = ax(bl(), (am - at(dp(bD), bj())))
517+ let ds = av(aw(bB), dr)
518+ let dt = cA((bB > 0), ds, false)
519+ let du = dt._1
520+ let cf = dt._8
521+ if ((bn() > cf))
522+ then du
518523 else {
519- let dt = at(au(bz), bj())
520- let du = cy((bz > 0), dt, false)._1
521- du
524+ let dv = av(aw(bB), bl())
525+ let dw = cA((bB > 0), dv, false)._1
526+ dw
522527 }
523528 }
524529
525530
526-func dv (bB,cr) = {
527- let dw = bA(bB)
528- let bE = dw._1
529- let db = dw._2
530- let dc = dw._3
531- let dd = dw._4
532- let cY = cZ(bB, an)._2
533- let dx = cf(bE, db, dd, cY)
534- let co = dx._1
535- let cp = dx._2
536- let dt = -(bE)
537- let dy = cY
538- let dz = -(co)
539- let dA = cy((bE > 0), au(bE), cr)
540- let du = dA._1
541- let bR = dA._2
542- let bS = dA._3
543- let dB = dA._4
544- let dC = dA._5
545- let dD = dA._6
546- let dE = dA._7
547- let dF = (bc() - dc)
548- $Tuple12(dt, cp, dy, dz, bR, bS, dB, dC, dF, du, dD, dE)
531+func dx (bD,ct) = {
532+ let dy = bC(bD)
533+ let bG = dy._1
534+ let dd = dy._2
535+ let de = dy._3
536+ let df = dy._4
537+ let da = db(bD, ap)._2
538+ let dz = ch(bG, dd, df, da)
539+ let cq = dz._1
540+ let cr = dz._2
541+ let dv = -(bG)
542+ let dA = da
543+ let dB = -(cq)
544+ let dC = cA((bG > 0), aw(bG), ct)
545+ let dw = dC._1
546+ let bT = dC._2
547+ let bU = dC._3
548+ let dD = dC._4
549+ let dE = dC._5
550+ let dF = dC._6
551+ let dG = dC._7
552+ let dH = (be() - de)
553+ $Tuple12(dv, cr, dA, dB, bT, bU, dD, dE, dH, dw, dF, dG)
549554 }
550555
551556
552-func dG () = {
553- let dH = ((lastBlock.timestamp / 1000) / 60)
554- let dI = (dH - ah)
555- let dJ = valueOrElse(getString(this, u), "")
556- let dK = split(dJ, ",")
557- func dL (aC,dM) = if ((dI >= parseIntValue(dM)))
558- then (aC :+ parseIntValue(dM))
559- else aC
557+func dI () = {
558+ let dJ = ((lastBlock.timestamp / 1000) / 60)
559+ let dK = (dJ - aj)
560+ let dL = valueOrElse(getString(this, u), "")
561+ let dM = split(dL, ",")
562+ func dN (aE,dO) = if ((dK >= parseIntValue(dO)))
563+ then (aE :+ parseIntValue(dO))
564+ else aE
560565
561- let dN = {
562- let aF = dK
563- let aG = size(aF)
564- let aH = nil
565- func aI (aJ,aK) = if ((aK >= aG))
566- then aJ
567- else dL(aJ, aF[aK])
566+ let dP = {
567+ let aH = dM
568+ let aI = size(aH)
569+ let aJ = nil
570+ func aK (aL,aM) = if ((aM >= aI))
571+ then aL
572+ else dN(aL, aH[aM])
568573
569- func aL (aJ,aK) = if ((aK >= aG))
570- then aJ
574+ func aN (aL,aM) = if ((aM >= aI))
575+ then aL
571576 else throw("List size exceeds 20")
572577
573- aL(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aI(aH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
578+ aN(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aK(aJ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
574579 }
575- let dO = if ((size(dN) > 0))
576- then max(dN)
577- else parseIntValue(dK[0])
578- let dP = valueOrElse(getInteger(this, v), 0)
579- let dQ = valueOrElse(getInteger(this, ((w + "_") + toString(dP))), 0)
580- let dR = valueOrElse(getInteger(this, ((x + "_") + toString(dP))), 0)
581- let dS = (dQ + ((dH - dP) * dR))
582- let dT = valueOrElse(getInteger(this, ((w + "_") + toString(dO))), 0)
583- let dU = valueOrElse(getInteger(this, ((x + "_") + toString(dO))), 0)
584- let dV = (dT + ((dI - dO) * dU))
585- ((dS - dV) / ah)
580+ let dQ = if ((size(dP) > 0))
581+ then max(dP)
582+ else parseIntValue(dM[0])
583+ let dR = valueOrElse(getInteger(this, v), 0)
584+ let dS = valueOrElse(getInteger(this, ((w + "_") + toString(dR))), 0)
585+ let dT = valueOrElse(getInteger(this, ((x + "_") + toString(dR))), 0)
586+ let dU = (dS + ((dJ - dR) * dT))
587+ let dV = valueOrElse(getInteger(this, ((w + "_") + toString(dQ))), 0)
588+ let dW = valueOrElse(getInteger(this, ((x + "_") + toString(dQ))), 0)
589+ let dX = (dV + ((dK - dQ) * dW))
590+ ((dU - dX) / aj)
586591 }
587592
588593
589-func dW (dX) = {
590- let bz = ba()
591- let dY = (bz > 0)
592- let dZ = cy(dY, au(bz), false)._1
593- let ea = aZ()
594- let eb = at(ea, dX)
595- let ec = cW(bz, dZ, eb, ea, an)._2
596- $Tuple2(eb, ec)
594+func dY (dZ) = {
595+ let bB = bc()
596+ let ea = (bB > 0)
597+ let eb = cA(ea, aw(bB), false)._1
598+ let ec = bb()
599+ let ed = av(ec, dZ)
600+ let ee = cY(bB, eb, ed, ec, ap)._2
601+ $Tuple2(ed, ee)
597602 }
598603
599604
600-func ed () = {
601- let ee = cz()
602- let ef = dG()
603- let eg = (ef - ee)
604- if (if ((bp() == 0))
605+func ef () = {
606+ let eg = cB()
607+ let eh = dI()
608+ let ei = (eh - eg)
609+ if (if ((br() == 0))
605610 then true
606- else (bq() == 0))
611+ else (bs() == 0))
607612 then $Tuple2(0, 0)
608- else if ((0 > eg))
613+ else if ((0 > ei))
609614 then {
610- let eh = ar(at(eg, bf()), al)
611- let ei = ar(at(eh, bp()), bq())
612- $Tuple2(eh, ei)
615+ let ej = at(av(ei, bh()), an)
616+ let ek = at(av(ej, br()), bs())
617+ $Tuple2(ej, ek)
613618 }
614619 else {
615- let ei = ar(at(eg, bf()), al)
616- let eh = ar(at(ei, bq()), bp())
617- $Tuple2(eh, ei)
620+ let ek = at(av(ei, bh()), an)
621+ let ej = at(av(ek, bs()), br())
622+ $Tuple2(ej, ek)
618623 }
619624 }
620625
621626
622-func ej (ek,el,em,en,eo,ep,eq,er,es) = [IntegerEntry(n, ek), IntegerEntry(o, el), IntegerEntry(p, em), IntegerEntry(m, en), IntegerEntry(l, eo), IntegerEntry(r, ep), IntegerEntry(s, eq), IntegerEntry(q, er), IntegerEntry(t, es)]
627+func el (em,en,eo,ep,eq,er,es,et,eu) = [IntegerEntry(n, em), IntegerEntry(o, en), IntegerEntry(p, eo), IntegerEntry(m, ep), IntegerEntry(l, eq), IntegerEntry(r, er), IntegerEntry(s, es), IntegerEntry(q, et), IntegerEntry(t, eu)]
623628
624629
625-func et (eu,ev,ew,ex,ey) = [IntegerEntry(B, eu), IntegerEntry(z, ev), IntegerEntry(A, ew), IntegerEntry(C, ex), IntegerEntry(D, ey)]
630+func ev (ew,ex,ey,ez,eA) = [IntegerEntry(B, ew), IntegerEntry(z, ex), IntegerEntry(A, ey), IntegerEntry(C, ez), IntegerEntry(D, eA)]
626631
627632
628-func ez (ay,eA,eB,eC,cl) = [IntegerEntry(aw(e, ay), eA), IntegerEntry(aw(f, ay), eB), IntegerEntry(aw(g, ay), eC), IntegerEntry(aw(h, ay), cl)]
633+func eB (aA,eC,eD,eE,cn) = [IntegerEntry(ay(e, aA), eC), IntegerEntry(ay(f, aA), eD), IntegerEntry(ay(g, aA), eE), IntegerEntry(ay(h, aA), cn)]
629634
630635
631-func eD (eE) = {
632- let dH = ((lastBlock.timestamp / 1000) / 60)
633- let eF = valueOrElse(getInteger(this, v), 0)
634- if ((eF > dH))
636+func eF (eG) = {
637+ let dJ = ((lastBlock.timestamp / 1000) / 60)
638+ let eH = valueOrElse(getInteger(this, v), 0)
639+ if ((eH > dJ))
635640 then throw("TWAP out-of-order")
636641 else {
637- let dP = if ((eF == 0))
638- then dH
639- else eF
640- if ((dH > eF))
642+ let dR = if ((eH == 0))
643+ then dJ
644+ else eH
645+ if ((dJ > eH))
641646 then {
642- let eG = valueOrElse(getInteger(this, ((w + "_") + toString(eF))), 0)
643- let eH = valueOrElse(getInteger(this, ((x + "_") + toString(eF))), eE)
644- let eI = (eG + ((dH - dP) * eH))
645- let dK = aQ(aO(valueOrElse(getString(this, u), "")), ah, toString(dH))
646-[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE), IntegerEntry(aw(y, toString(dH)), eF), IntegerEntry(v, dH), StringEntry(u, az(dK))]
647+ let eI = valueOrElse(getInteger(this, ((w + "_") + toString(eH))), 0)
648+ let eJ = valueOrElse(getInteger(this, ((x + "_") + toString(eH))), eG)
649+ let eK = (eI + ((dJ - dR) * eJ))
650+ let dM = aS(aQ(valueOrElse(getString(this, u), "")), aj, toString(dJ))
651+[IntegerEntry(ay(w, toString(dJ)), eK), IntegerEntry(ay(x, toString(dJ)), eG), IntegerEntry(ay(y, toString(dJ)), eH), IntegerEntry(v, dJ), StringEntry(u, aB(dM))]
647652 }
648653 else {
649- let eJ = valueOrElse(getInteger(this, aw(y, toString(dH))), 0)
650- let eG = valueOrElse(getInteger(this, aw(w, toString(eJ))), 0)
651- let eH = valueOrElse(getInteger(this, aw(x, toString(eJ))), eE)
652- let eI = (eG + ((dH - eJ) * eH))
653-[IntegerEntry(aw(w, toString(dH)), eI), IntegerEntry(aw(x, toString(dH)), eE)]
654+ let eL = valueOrElse(getInteger(this, ay(y, toString(dJ))), 0)
655+ let eI = valueOrElse(getInteger(this, ay(w, toString(eL))), 0)
656+ let eJ = valueOrElse(getInteger(this, ay(x, toString(eL))), eG)
657+ let eK = (eI + ((dJ - eL) * eJ))
658+[IntegerEntry(ay(w, toString(dJ)), eK), IntegerEntry(ay(x, toString(dJ)), eG)]
654659 }
655660 }
656661 }
657662
658663
659-func eK (bP,bQ) = [IntegerEntry(E, bP), IntegerEntry(F, bQ)]
664+func eM (bR,bS) = [IntegerEntry(E, bR), IntegerEntry(F, bS)]
660665
661666
662-func eL (bP,bQ,eM,eN,eO,eP,eQ) = if (((eP - eQ) != eM))
663- then throw(((((("Invalid AMM state data: " + toString(eP)) + " + ") + toString(eQ)) + " != ") + toString(eM)))
664- else ((eK(bP, bQ) ++ [IntegerEntry(G, eM), IntegerEntry(J, eN), IntegerEntry(K, eO), IntegerEntry(H, eP), IntegerEntry(I, eQ)]) ++ eD(ar(bP, bQ)))
667+func eN (bR,bS,eO,eP,eQ,eR,eS) = if (((eR - eS) != eO))
668+ then throw(((((("Invalid AMM state data: " + toString(eR)) + " + ") + toString(eS)) + " != ") + toString(eO)))
669+ else ((eM(bR, bS) ++ [IntegerEntry(G, eO), IntegerEntry(J, eP), IntegerEntry(K, eQ), IntegerEntry(H, eR), IntegerEntry(I, eS)]) ++ eF(at(bR, bS)))
665670
666671
667-func eR (ay) = [DeleteEntry(aw(e, ay)), DeleteEntry(aw(f, ay)), DeleteEntry(aw(g, ay)), DeleteEntry(aw(h, ay)), IntegerEntry(aw(i, ay), lastBlock.timestamp)]
672+func eT (aA) = [DeleteEntry(ay(e, aA)), DeleteEntry(ay(f, aA)), DeleteEntry(ay(g, aA)), DeleteEntry(ay(h, aA)), IntegerEntry(ay(i, aA), lastBlock.timestamp)]
668673
669674
670-func eS (ay,eT) = {
671- let eU = assetBalance(this, Y())
672- if ((eT > eU))
673- then throw(((("Unable to withdraw " + toString(eT)) + " from contract balance ") + toString(eU)))
674- else [ScriptTransfer(ay, eT, Y())]
675+func eU (aA,eV) = {
676+ let eW = assetBalance(this, Z())
677+ if ((eV > eW))
678+ then throw(((("Unable to withdraw " + toString(eV)) + " from contract balance ") + toString(eW)))
679+ else [ScriptTransfer(aA, eV, Z())]
675680 }
676681
677682
678-func eV (bs) = if ((0 > bs))
683+func eX (bu) = if ((0 > bu))
679684 then throw("Balance")
680- else [IntegerEntry(d, bs)]
685+ else [IntegerEntry(d, bu)]
681686
682687
683-func eW (bs) = [ScriptTransfer(aa(), bs, Y())]
688+func eY (bu) = [ScriptTransfer(ab(), bu, Z())]
684689
685690
686-@Callable(bs)
687-func pause () = if ((bs.caller != W()))
691+@Callable(bu)
692+func pause () = if ((bu.caller != X()))
688693 then throw("Invalid togglePause params")
689694 else [BooleanEntry(k, true)]
690695
691696
692697
693-@Callable(bs)
694-func unpause () = if ((bs.caller != W()))
698+@Callable(bu)
699+func unpause () = if ((bu.caller != X()))
695700 then throw("Invalid togglePause params")
696701 else [BooleanEntry(k, false)]
697702
698703
699704
700-@Callable(bs)
701-func addLiquidity (bK) = if (if ((bs.caller != W()))
705+@Callable(bu)
706+func addLiquidity (bM) = if (if ((bu.caller != X()))
702707 then true
703- else (0 >= bK))
708+ else (0 >= bM))
704709 then throw("Invalid addLiquidity params")
705710 else {
706- let bP = aY()
707- let bQ = aZ()
708- let eE = ar(bP, bQ)
709- let eX = ar(bK, eE)
710- let eY = (bP + bK)
711- let eZ = (bQ + eX)
712- eK(eY, eZ)
711+ let bR = ba()
712+ let bS = bb()
713+ let eG = at(bR, bS)
714+ let eZ = at(bM, eG)
715+ let fa = (bR + bM)
716+ let fb = (bS + eZ)
717+ eM(fa, fb)
713718 }
714719
715720
716721
717-@Callable(bs)
718-func removeLiquidity (bK) = if (if ((bs.caller != W()))
722+@Callable(bu)
723+func removeLiquidity (bM) = if (if ((bu.caller != X()))
719724 then true
720- else (0 >= bK))
725+ else (0 >= bM))
721726 then throw("Invalid removeLiquidity params")
722727 else {
723- let bP = aY()
724- let bQ = aZ()
725- let eE = ar(bP, bQ)
726- let fa = ar(bK, eE)
727- let eY = (bP - bK)
728- let eZ = (bQ - fa)
729- eK(eY, eZ)
728+ let bR = ba()
729+ let bS = bb()
730+ let eG = at(bR, bS)
731+ let fc = at(bM, eG)
732+ let fa = (bR - bM)
733+ let fb = (bS - fc)
734+ eM(fa, fb)
730735 }
731736
732737
733738
734-@Callable(bs)
735-func changeSettings (ek,el,em,en,eo,ep,eq,er,es) = if ((bs.caller != W()))
739+@Callable(bu)
740+func changeSettings (em,en,eo,ep,eq,er,es,et,eu) = if ((bu.caller != X()))
736741 then throw("Invalid changeSettings params")
737- else ej(ek, el, em, en, eo, ep, eq, er, es)
742+ else el(em, en, eo, ep, eq, er, es, et, eu)
738743
739744
740745
741-@Callable(bs)
742-func initialize (bP,bQ,en,ek,el,em,eo,fb,fc,fd,ep,eq,er,es) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bP))
746+@Callable(bu)
747+func initialize (bR,bS,ep,em,en,eo,eq,fd,fe,ff,er,es,et,eu) = if (if (if (if (if (if (if (if (if (if (if (if ((0 >= bR))
743748 then true
744- else (0 >= bQ))
749+ else (0 >= bS))
750+ then true
751+ else (0 >= ep))
752+ then true
753+ else (0 >= em))
745754 then true
746755 else (0 >= en))
747756 then true
748- else (0 >= ek))
749- then true
750- else (0 >= el))
751- then true
752- else (0 >= em))
753- then true
754757 else (0 >= eo))
755- then true
756- else (0 >= ep))
757758 then true
758759 else (0 >= eq))
759760 then true
760761 else (0 >= er))
761762 then true
762763 else (0 >= es))
763764 then true
764- else bG())
765+ else (0 >= et))
766+ then true
767+ else (0 >= eu))
768+ then true
769+ else bI())
765770 then throw("Invalid initialize parameters")
766- else ((((eL(bP, bQ, 0, 0, 0, 0, 0) ++ ej(ek, el, em, en, eo, ep, eq, er, es)) ++ et((lastBlock.timestamp + en), 0, 0, 0, 0)) ++ eV(0)) ++ [BooleanEntry(j, true), StringEntry(c, fb), StringEntry(a, fc), StringEntry(L, fd)])
771+ else ((((eN(bR, bS, 0, 0, 0, 0, 0) ++ el(em, en, eo, ep, eq, er, es, et, eu)) ++ ev((lastBlock.timestamp + ep), 0, 0, 0, 0)) ++ eX(0)) ++ [BooleanEntry(j, true), StringEntry(c, fd), StringEntry(a, fe), StringEntry(L, ff)])
767772
768773
769774
770-@Callable(bs)
771-func setInitMarginRatio (ek) = if (if ((0 >= ek))
775+@Callable(bu)
776+func setInitMarginRatio (em) = if (if ((0 >= em))
772777 then true
773- else !(bG()))
778+ else !(bI()))
774779 then throw("Invalid setInitMarginRatio parameters")
775- else ej(ek, bh(), bi(), be(), aW(), bk(), bl(), bj(), bm())
780+ else el(em, bj(), bk(), bg(), aY(), bm(), bn(), bl(), bo())
776781
777782
778783
779-@Callable(bs)
780-func decreasePosition (eT,fe,ff) = if (if (if (if (if ((0 >= eT))
784+@Callable(bu)
785+func decreasePosition (eV,fg,fh) = if (if (if (if (if ((0 >= eV))
781786 then true
782- else !(bG()))
787+ else !(bI()))
783788 then true
784- else !(bt(ar(ak, fe), aX(), true)))
789+ else !(bv(at(am, fg), aZ(), true)))
785790 then true
786- else !(bF(toString(bs.caller))))
791+ else !(bH(toString(bu.caller))))
787792 then true
788- else bH())
793+ else bJ())
789794 then throw("Invalid decreasePosition parameters")
790795 else {
791- let fg = bA(toString(bs.caller))
792- let fh = fg._1
793- let fi = fg._2
794- let fj = fg._3
795- let fk = fg._4
796- let fl = if ((fh > 0))
797- then ag
798- else af
799- let fm = (fl == af)
800- let fn = at(eT, fe)
801- let fo = cZ(toString(bs.caller), an)
802- let fp = fo._1
803- let cY = fo._2
804- let fq = if ((fp > fn))
796+ let fi = bC(toString(bu.caller))
797+ let fj = fi._1
798+ let fk = fi._2
799+ let fl = fi._3
800+ let fm = fi._4
801+ let fn = if ((fj > 0))
802+ then ai
803+ else ah
804+ let fo = (fn == ah)
805+ let fp = av(eV, fg)
806+ let fq = db(toString(bu.caller), ap)
807+ let fr = fq._1
808+ let da = fq._2
809+ let fs = if ((fr > fp))
805810 then {
806- let fr = bO(fm, fn)
807- let dt = fr._1
808- let bR = fr._2
809- let bS = fr._3
810- let dB = fr._4
811- let dC = fr._5
812- let fs = au(dt)
813- if (if ((ff != 0))
814- then (ff > fs)
811+ let ft = bQ(fo, fp)
812+ let dv = ft._1
813+ let bT = ft._2
814+ let bU = ft._3
815+ let dD = ft._4
816+ let dE = ft._5
817+ let fu = aw(dv)
818+ if (if ((fh != 0))
819+ then (fh > fu)
815820 else false)
816- then throw(((("Too little base asset exchanged, got " + toString(fs)) + " expected ") + toString(ff)))
821+ then throw(((("Too little base asset exchanged, got " + toString(fu)) + " expected ") + toString(fh)))
817822 else {
818- let dy = ar(at(cY, fs), au(fh))
819- let ft = cf(fh, fi, fk, dy)
820- let co = ft._1
821- let cp = ft._2
822- let ck = ft._3
823- let du = fn
824- let fu = (cY - dy)
825- let fv = if ((fh > 0))
826- then ((fp - du) - fu)
827- else ((fu + fp) - du)
828- let fw = (fh + dt)
829- $Tuple11(fw, co, au(fv), by(fw), bS, bR, dB, dC, (bc() - fn), (bq() - (if ((fw > 0))
830- then au(dt)
831- else 0)), (bp() - (if ((0 > fw))
832- then au(dt)
823+ let dA = at(av(da, fu), aw(fj))
824+ let fv = ch(fj, fk, fm, dA)
825+ let cq = fv._1
826+ let cr = fv._2
827+ let cm = fv._3
828+ let dw = fp
829+ let fw = (da - dA)
830+ let fx = if ((fj > 0))
831+ then ((fr - dw) - fw)
832+ else ((fw + fr) - dw)
833+ let fy = (fj + dv)
834+ $Tuple11(fy, cq, aw(fx), bA(fy), bU, bT, dD, dE, (be() - fp), (bs() - (if ((fy > 0))
835+ then aw(dv)
836+ else 0)), (br() - (if ((0 > fy))
837+ then aw(dv)
833838 else 0)))
834839 }
835840 }
836841 else throw("Close position first")
837- let fw = fq._1
838- let fx = fq._2
839- let fy = fq._3
840- let fz = fq._4
841- let bS = fq._5
842- let bR = fq._6
843- let dB = fq._7
844- let dC = fq._8
845- let dF = fq._9
846- let dD = fq._10
847- let dE = fq._11
848- let fA = invoke(ac(), "notifyNotional", [toString(bs.caller), fy], nil)
849- if ((fA == fA))
850- then (ez(toString(bs.caller), fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE))
842+ let fy = fs._1
843+ let fz = fs._2
844+ let fA = fs._3
845+ let fB = fs._4
846+ let bU = fs._5
847+ let bT = fs._6
848+ let dD = fs._7
849+ let dE = fs._8
850+ let dH = fs._9
851+ let dF = fs._10
852+ let dG = fs._11
853+ let fC = invoke(ad(), "notifyNotional", [toString(bu.caller), fA], nil)
854+ if ((fC == fC))
855+ then (eB(toString(bu.caller), fy, fz, fA, fB) ++ eN(bT, bU, dD, dE, dH, dF, dG))
851856 else throw("Strict value is not equal to itself.")
852857 }
853858
854859
855860
856-@Callable(bs)
857-func increasePosition (fl,fe,ff,fB) = {
858- let fC = bs.payments[0].amount
859- if (if (if (if (if (if (if ((fl != af))
860- then (fl != ag)
861+@Callable(bu)
862+func increasePosition (fn,fg,fh,fD) = {
863+ let fE = bu.payments[0].amount
864+ if (if (if (if (if (if (if ((fn != ah))
865+ then (fn != ai)
861866 else false)
862867 then true
863- else (0 >= fC))
868+ else (0 >= fE))
864869 then true
865- else !(bG()))
870+ else !(bI()))
866871 then true
867- else (bs.payments[0].assetId != Y()))
872+ else (bu.payments[0].assetId != Z()))
868873 then true
869- else !(bt(ar(ak, fe), aX(), true)))
874+ else !(bv(at(am, fg), aZ(), true)))
870875 then true
871- else bH())
876+ else bJ())
872877 then throw("Invalid increasePosition parameters")
873878 else {
874- let bB = toString(bs.caller)
875- let fD = at(fC, aW())
876- let fE = invoke(ae(), "acceptPaymentWithLink", [bB, fB], [AttachedPayment(Y(), fD)])
877- if ((fE == fE))
879+ let bD = toString(bu.caller)
880+ let fF = av(fE, aY())
881+ let fG = invoke(af(), "acceptPaymentWithLink", [bD, fD], [AttachedPayment(Z(), fF)])
882+ if ((fG == fG))
878883 then {
879- let fF = {
880- let bD = fE
881- if ($isInstanceOf(bD, "Int"))
884+ let fH = {
885+ let bF = fG
886+ if ($isInstanceOf(bF, "Int"))
882887 then {
883- let fG = bD
884- fG
888+ let fI = bF
889+ fI
885890 }
886891 else throw("Invalid referrerFee")
887892 }
888- let eT = (fC - fD)
889- let fH = (fD - fF)
890- let fI = bA(bB)
891- let fh = fI._1
892- let fi = fI._2
893- let fj = fI._3
894- let fk = fI._4
895- let fJ = (fh == 0)
896- let fK = if ((fh > 0))
897- then (fl == af)
898- else (fl == ag)
899- let fL = if (!(fJ))
900- then fK
893+ let eV = (fE - fF)
894+ let fJ = (fF - fH)
895+ let fK = bC(bD)
896+ let fj = fK._1
897+ let fk = fK._2
898+ let fl = fK._3
899+ let fm = fK._4
900+ let fL = (fj == 0)
901+ let fM = if ((fj > 0))
902+ then (fn == ah)
903+ else (fn == ai)
904+ let fN = if (!(fL))
905+ then fM
901906 else false
902- let fm = (fl == af)
903- let fM = if (if (fJ)
907+ let fo = (fn == ah)
908+ let fO = if (if (fL)
904909 then true
905- else fL)
910+ else fN)
906911 then {
907- let fn = at(eT, fe)
908- let fN = bO(fm, fn)
909- let bU = fN._1
910- let bR = fN._2
911- let bS = fN._3
912- let dB = fN._4
913- let dC = fN._5
914- if (if ((ff != 0))
915- then (ff > au(bU))
912+ let fp = av(eV, fg)
913+ let fP = bQ(fo, fp)
914+ let bW = fP._1
915+ let bT = fP._2
916+ let bU = fP._3
917+ let dD = fP._4
918+ let dE = fP._5
919+ if (if ((fh != 0))
920+ then (fh > aw(bW))
916921 else false)
917- then throw(((("Limit error: " + toString(au(bU))) + " < ") + toString(ff)))
922+ then throw(((("Limit error: " + toString(aw(bW))) + " < ") + toString(fh)))
918923 else {
919- let fw = (fh + bU)
920- let fO = ar(fn, fe)
921- let fP = cf(fh, fi, fk, fO)
922- let co = fP._1
923- let cT = fP._2
924- let cU = fP._3
925- if (!(cE(bR, bS)))
924+ let fy = (fj + bW)
925+ let fQ = at(fp, fg)
926+ let fR = ch(fj, fk, fm, fQ)
927+ let cq = fR._1
928+ let cV = fR._2
929+ let cW = fR._3
930+ if (!(cG(bT, bU)))
926931 then throw("Over max spread limit")
927- else $Tuple11(fw, co, (fj + fn), by(fw), bS, bR, dB, dC, (bc() + fn), (bq() + (if ((fw > 0))
928- then au(bU)
929- else 0)), (bp() + (if ((0 > fw))
930- then au(bU)
932+ else $Tuple11(fy, cq, (fl + fp), bA(fy), bU, bT, dD, dE, (be() + fp), (bs() + (if ((fy > 0))
933+ then aw(bW)
934+ else 0)), (br() + (if ((0 > fy))
935+ then aw(bW)
931936 else 0)))
932937 }
933938 }
934939 else {
935- let fn = at(eT, fe)
936- let fQ = cZ(toString(bs.caller), an)
937- let fp = fQ._1
938- let cY = fQ._2
939- if ((fp > fn))
940+ let fp = av(eV, fg)
941+ let fS = db(toString(bu.caller), ap)
942+ let fr = fS._1
943+ let da = fS._2
944+ if ((fr > fp))
940945 then throw("Use decreasePosition to decrease position size")
941946 else throw("Close position first")
942947 }
943- let fw = fM._1
944- let fx = fM._2
945- let fy = fM._3
946- let fz = fM._4
947- let bS = fM._5
948- let bR = fM._6
949- let dB = fM._7
950- let dC = fM._8
951- let dF = fM._9
952- let dD = fM._10
953- let dE = fM._11
954- let fR = (fH / 2)
955- let fS = (fH - fR)
956- let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
957- if ((fT == fT))
948+ let fy = fO._1
949+ let fz = fO._2
950+ let fA = fO._3
951+ let fB = fO._4
952+ let bU = fO._5
953+ let bT = fO._6
954+ let dD = fO._7
955+ let dE = fO._8
956+ let dH = fO._9
957+ let dF = fO._10
958+ let dG = fO._11
959+ let fT = (fJ / 2)
960+ let fU = (fJ - fT)
961+ let fV = invoke(ag(), "deposit", nil, [AttachedPayment(Z(), eV)])
962+ if ((fV == fV))
958963 then {
959- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
960- if ((fU == fU))
964+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
965+ if ((fW == fW))
961966 then {
962- let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
963- if ((fV == fV))
967+ let fX = invoke(ad(), "notifyFees", [bD, fJ], nil)
968+ if ((fX == fX))
964969 then {
965- let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
966- if ((fA == fA))
967- then (((ez(bB, fw, fx, fy, fz) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eW(fR)) ++ eV((aV() + eT)))
970+ let fC = invoke(ad(), "notifyNotional", [bD, fA], nil)
971+ if ((fC == fC))
972+ then (((eB(bD, fy, fz, fA, fB) ++ eN(bT, bU, dD, dE, dH, dF, dG)) ++ eY(fT)) ++ eX((aX() + eV)))
968973 else throw("Strict value is not equal to itself.")
969974 }
970975 else throw("Strict value is not equal to itself.")
971976 }
972977 else throw("Strict value is not equal to itself.")
973978 }
974979 else throw("Strict value is not equal to itself.")
975980 }
976981 else throw("Strict value is not equal to itself.")
977982 }
978983 }
979984
980985
981986
982-@Callable(bs)
987+@Callable(bu)
983988 func addMargin () = {
984- let fC = bs.payments[0].amount
985- if (if (if (if ((bs.payments[0].assetId != Y()))
989+ let fE = bu.payments[0].amount
990+ if (if (if (if ((bu.payments[0].assetId != Z()))
986991 then true
987- else !(bF(toString(bs.caller))))
992+ else !(bH(toString(bu.caller))))
988993 then true
989- else !(bG()))
994+ else !(bI()))
990995 then true
991- else bH())
996+ else bJ())
992997 then throw("Invalid addMargin parameters")
993998 else {
994- let bB = toString(bs.caller)
995- let fD = at(fC, aW())
996- let fE = invoke(ae(), "acceptPayment", [bB], [AttachedPayment(Y(), fD)])
997- if ((fE == fE))
999+ let bD = toString(bu.caller)
1000+ let fF = av(fE, aY())
1001+ let fG = invoke(af(), "acceptPayment", [bD], [AttachedPayment(Z(), fF)])
1002+ if ((fG == fG))
9981003 then {
999- let fF = {
1000- let bD = fE
1001- if ($isInstanceOf(bD, "Int"))
1004+ let fH = {
1005+ let bF = fG
1006+ if ($isInstanceOf(bF, "Int"))
10021007 then {
1003- let fG = bD
1004- fG
1008+ let fI = bF
1009+ fI
10051010 }
10061011 else throw("Invalid referrerFee")
10071012 }
1008- let fH = (fD - fF)
1009- let eT = (fC - fD)
1010- let fW = bA(bB)
1011- let fh = fW._1
1012- let fi = fW._2
1013- let fj = fW._3
1014- let fk = fW._4
1015- let fR = (fH / 2)
1016- let fS = (fH - fR)
1017- let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), eT)])
1018- if ((fT == fT))
1013+ let fJ = (fF - fH)
1014+ let eV = (fE - fF)
1015+ let fY = bC(bD)
1016+ let fj = fY._1
1017+ let fk = fY._2
1018+ let fl = fY._3
1019+ let fm = fY._4
1020+ let fT = (fJ / 2)
1021+ let fU = (fJ - fT)
1022+ let fV = invoke(ag(), "deposit", nil, [AttachedPayment(Z(), eV)])
1023+ if ((fV == fV))
10191024 then {
1020- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1021- if ((fU == fU))
1025+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
1026+ if ((fW == fW))
10221027 then {
1023- let fV = invoke(ac(), "notifyFees", [bB, fH], nil)
1024- if ((fV == fV))
1025- then ((ez(bB, fh, (fi + eT), fj, fk) ++ eW(fR)) ++ eV((aV() + eT)))
1028+ let fX = invoke(ad(), "notifyFees", [bD, fJ], nil)
1029+ if ((fX == fX))
1030+ then ((eB(bD, fj, (fk + eV), fl, fm) ++ eY(fT)) ++ eX((aX() + eV)))
10261031 else throw("Strict value is not equal to itself.")
10271032 }
10281033 else throw("Strict value is not equal to itself.")
10291034 }
10301035 else throw("Strict value is not equal to itself.")
10311036 }
10321037 else throw("Strict value is not equal to itself.")
10331038 }
10341039 }
10351040
10361041
10371042
1038-@Callable(bs)
1039-func removeMargin (eT) = if (if (if (if ((0 >= eT))
1043+@Callable(bu)
1044+func removeMargin (eV) = if (if (if (if ((0 >= eV))
10401045 then true
1041- else !(bF(toString(bs.caller))))
1046+ else !(bH(toString(bu.caller))))
10421047 then true
1043- else !(bG()))
1048+ else !(bI()))
10441049 then true
1045- else bH())
1050+ else bJ())
10461051 then throw("Invalid removeMargin parameters")
10471052 else {
1048- let fX = bA(toString(bs.caller))
1049- let fh = fX._1
1050- let fi = fX._2
1051- let fj = fX._3
1052- let fk = fX._4
1053- let fY = -(eT)
1054- let fZ = cf(fh, fi, fk, fY)
1055- let co = fZ._1
1056- let cp = fZ._2
1057- if ((cp != 0))
1053+ let fZ = bC(toString(bu.caller))
1054+ let fj = fZ._1
1055+ let fk = fZ._2
1056+ let fl = fZ._3
1057+ let fm = fZ._4
1058+ let ga = -(eV)
1059+ let gb = ch(fj, fk, fm, ga)
1060+ let cq = gb._1
1061+ let cr = gb._2
1062+ if ((cr != 0))
10581063 then throw("Invalid removed margin amount")
10591064 else {
1060- let ga = de(co, cp, fj)
1061- if (!(bt(ga, aX(), true)))
1062- then throw(((("Too much margin removed: " + toString(ga)) + " < ") + toString(aX())))
1065+ let gc = dg(cq, cr, fl)
1066+ if (!(bv(gc, aZ(), true)))
1067+ then throw(((("Too much margin removed: " + toString(gc)) + " < ") + toString(aZ())))
10631068 else {
1064- let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1065- if ((gb == gb))
1066- then ((ez(toString(bs.caller), fh, co, fj, by(fh)) ++ eS(bs.caller, eT)) ++ eV((aV() - eT)))
1069+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), eV], nil)
1070+ if ((gd == gd))
1071+ then ((eB(toString(bu.caller), fj, cq, fl, bA(fj)) ++ eU(bu.caller, eV)) ++ eX((aX() - eV)))
10671072 else throw("Strict value is not equal to itself.")
10681073 }
10691074 }
10701075 }
10711076
10721077
10731078
1074-@Callable(bs)
1079+@Callable(bu)
10751080 func closePosition () = {
1076- let gc = br(bs)
1077- let gd = valueOrErrorMessage(addressFromString(gc), "Invalid caller")
1078- if (if (if (!(bF(gc)))
1081+ let ge = bt(bu)
1082+ let gf = valueOrErrorMessage(addressFromString(ge), "Invalid caller")
1083+ if (if (if (!(bH(ge)))
10791084 then true
1080- else !(bG()))
1085+ else !(bI()))
10811086 then true
1082- else bH())
1087+ else bJ())
10831088 then throw("Invalid closePosition parameters")
10841089 else {
1085- let ge = dv(gc, true)
1086- let cT = ge._1
1087- let gf = ge._2
1088- let dy = ge._3
1089- let dz = ge._4
1090- let bR = ge._5
1091- let bS = ge._6
1092- let dB = ge._7
1093- let dC = ge._8
1094- let dF = ge._9
1095- let cU = ge._10
1096- let dD = ge._11
1097- let dE = ge._12
1098- if ((gf > 0))
1090+ let gg = dx(ge, true)
1091+ let cV = gg._1
1092+ let gh = gg._2
1093+ let dA = gg._3
1094+ let dB = gg._4
1095+ let bT = gg._5
1096+ let bU = gg._6
1097+ let dD = gg._7
1098+ let dE = gg._8
1099+ let dH = gg._9
1100+ let cW = gg._10
1101+ let dF = gg._11
1102+ let dG = gg._12
1103+ if ((gh > 0))
10991104 then throw("Unable to close position with bad debt")
11001105 else {
1101- let gg = au(dz)
1102- let gh = (aV() - gg)
1103- let gi = if ((0 > gh))
1104- then $Tuple2(0, au(gh))
1105- else $Tuple2(gh, 0)
1106- let gj = gi._1
1107- let gk = gi._2
1108- let fG = if ((gk > 0))
1106+ let gi = aw(dB)
1107+ let gj = (aX() - gi)
1108+ let gk = if ((0 > gj))
1109+ then $Tuple2(0, aw(gj))
1110+ else $Tuple2(gj, 0)
1111+ let gl = gk._1
1112+ let gm = gk._2
1113+ let fI = if ((gm > 0))
11091114 then {
1110- let gl = invoke(ab(), "withdraw", [gk], nil)
1111- if ((gl == gl))
1115+ let gn = invoke(ac(), "withdraw", [gm], nil)
1116+ if ((gn == gn))
11121117 then nil
11131118 else throw("Strict value is not equal to itself.")
11141119 }
11151120 else nil
1116- if ((fG == fG))
1121+ if ((fI == fI))
11171122 then {
1118- let gb = invoke(Z(), "unlockNeutrino", [(gg - gk), toBase58String(Y())], nil)
1119- if ((gb == gb))
1123+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), (gi - gm)], nil)
1124+ if ((gd == gd))
11201125 then {
1121- let fA = invoke(ac(), "notifyNotional", [gc, 0], nil)
1122- if ((fA == fA))
1123- then (((eR(gc) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(gd, gg)) ++ eV(gj))
1126+ let fC = invoke(ad(), "notifyNotional", [ge, 0], nil)
1127+ if ((fC == fC))
1128+ then (((eT(ge) ++ eN(bT, bU, dD, dE, dH, dF, dG)) ++ eU(gf, gi)) ++ eX(gl))
11241129 else throw("Strict value is not equal to itself.")
11251130 }
11261131 else throw("Strict value is not equal to itself.")
11271132 }
11281133 else throw("Strict value is not equal to itself.")
11291134 }
11301135 }
11311136 }
11321137
11331138
11341139
1135-@Callable(bs)
1136-func liquidate (bB) = {
1137- let gm = di(bB, an)
1138- let ga = if (cK())
1140+@Callable(bu)
1141+func liquidate (bD) = {
1142+ let go = dk(bD, ap)
1143+ let gc = if (cM())
11391144 then {
1140- let gn = di(bB, ao)
1141- av(gm, gn)
1145+ let gp = dk(bD, aq)
1146+ ax(go, gp)
11421147 }
1143- else gm
1144- if (if (if (if (!(bt(ga, bh(), false)))
1148+ else go
1149+ if (if (if (if (!(bv(gc, bj(), false)))
11451150 then true
1146- else !(bF(bB)))
1151+ else !(bH(bD)))
11471152 then true
1148- else !(bG()))
1153+ else !(bI()))
11491154 then true
1150- else bH())
1155+ else bJ())
11511156 then throw("Unable to liquidate")
1152- else if (if (if ((gm > bi()))
1153- then (bj() > 0)
1157+ else if (if (if ((go > bk()))
1158+ then (bl() > 0)
11541159 else false)
1155- then (ak > bj())
1160+ then (am > bl())
11561161 else false)
11571162 then {
1158- let go = bA(bB)
1159- let fh = go._1
1160- let fi = go._2
1161- let fj = go._3
1162- let fk = go._4
1163- let fl = if ((fh > 0))
1164- then ag
1165- else af
1166- let fm = (fl == af)
1167- let du = do(bB, fh)
1168- let gp = cZ(bB, an)
1169- let fp = gp._1
1170- let cY = gp._2
1171- let gq = bO(fm, du)
1172- let dt = gq._1
1173- let bR = gq._2
1174- let bS = gq._3
1175- let dB = gq._4
1176- let dC = gq._5
1177- let dy = ar(at(cY, au(dt)), au(fh))
1178- let gr = cf(fh, fi, fk, dy)
1179- let co = gr._1
1180- let cp = gr._2
1181- let ck = gr._3
1182- let fu = (cY - dy)
1183- let fv = if ((fh > 0))
1184- then ((fp - du) - fu)
1185- else ((fu + fp) - du)
1186- let gs = at(du, bi())
1187- let gt = (gs / 2)
1188- let fS = (gs - gt)
1189- let gu = (co - gs)
1190- let fw = (fh + dt)
1191- let fy = au(fv)
1192- let gv = by(fw)
1193- let dF = (bc() - du)
1194- let gh = (aV() - gs)
1195- let gw = if ((0 > gh))
1196- then $Tuple2(0, au(gh))
1197- else $Tuple2(gh, 0)
1198- let gx = gw._1
1199- let gy = gw._2
1200- let fG = if ((gy > 0))
1163+ let gq = bC(bD)
1164+ let fj = gq._1
1165+ let fk = gq._2
1166+ let fl = gq._3
1167+ let fm = gq._4
1168+ let fn = if ((fj > 0))
1169+ then ai
1170+ else ah
1171+ let fo = (fn == ah)
1172+ let dw = dq(bD, fj)
1173+ let gr = db(bD, ap)
1174+ let fr = gr._1
1175+ let da = gr._2
1176+ let gs = bQ(fo, dw)
1177+ let dv = gs._1
1178+ let bT = gs._2
1179+ let bU = gs._3
1180+ let dD = gs._4
1181+ let dE = gs._5
1182+ let dA = at(av(da, aw(dv)), aw(fj))
1183+ let gt = ch(fj, fk, fm, dA)
1184+ let cq = gt._1
1185+ let cr = gt._2
1186+ let cm = gt._3
1187+ let fw = (da - dA)
1188+ let fx = if ((fj > 0))
1189+ then ((fr - dw) - fw)
1190+ else ((fw + fr) - dw)
1191+ let gu = av(dw, bk())
1192+ let gv = (gu / 2)
1193+ let fU = (gu - gv)
1194+ let gw = (cq - gu)
1195+ let fy = (fj + dv)
1196+ let fA = aw(fx)
1197+ let gx = bA(fy)
1198+ let dH = (be() - dw)
1199+ let gj = (aX() - gu)
1200+ let gy = if ((0 > gj))
1201+ then $Tuple2(0, aw(gj))
1202+ else $Tuple2(gj, 0)
1203+ let gz = gy._1
1204+ let gA = gy._2
1205+ let fI = if ((gA > 0))
12011206 then {
1202- let gl = invoke(ab(), "withdraw", [gy], nil)
1203- if ((gl == gl))
1207+ let gn = invoke(ac(), "withdraw", [gA], nil)
1208+ if ((gn == gn))
12041209 then nil
12051210 else throw("Strict value is not equal to itself.")
12061211 }
12071212 else nil
1208- if ((fG == fG))
1213+ if ((fI == fI))
12091214 then {
1210- let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1211- if ((gb == gb))
1215+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), (gu - gA)], nil)
1216+ if ((gd == gd))
12121217 then {
1213- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1214- if ((fU == fU))
1218+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
1219+ if ((fW == fW))
12151220 then {
1216- let fA = invoke(ac(), "notifyNotional", [bB, fy], nil)
1217- if ((fA == fA))
1218- then (((ez(bB, fw, gu, fy, gv) ++ eL(bR, bS, dB, dC, dF, (bq() - (if ((fw > 0))
1219- then au(dt)
1220- else 0)), (bp() - (if ((0 > fw))
1221- then au(dt)
1222- else 0)))) ++ eS(bs.caller, gt)) ++ eV(gx))
1221+ let fC = invoke(ad(), "notifyNotional", [bD, fA], nil)
1222+ if ((fC == fC))
1223+ then (((eB(bD, fy, gw, fA, gx) ++ eN(bT, bU, dD, dE, dH, (bs() - (if ((fy > 0))
1224+ then aw(dv)
1225+ else 0)), (br() - (if ((0 > fy))
1226+ then aw(dv)
1227+ else 0)))) ++ eU(bu.caller, gv)) ++ eX(gz))
12231228 else throw("Strict value is not equal to itself.")
12241229 }
12251230 else throw("Strict value is not equal to itself.")
12261231 }
12271232 else throw("Strict value is not equal to itself.")
12281233 }
12291234 else throw("Strict value is not equal to itself.")
12301235 }
12311236 else {
1232- let gz = dv(bB, false)
1233- let cT = gz._1
1234- let cp = gz._2
1235- let cU = gz._3
1236- let cV = gz._4
1237- let bR = gz._5
1238- let bS = gz._6
1239- let dB = gz._7
1240- let dC = gz._8
1241- let dF = gz._9
1242- let du = gz._10
1243- let dD = gz._11
1244- let dE = gz._12
1245- let gs = at(du, bi())
1246- let gt = (gs / 2)
1247- let fS = (gs - gt)
1248- let gh = (aV() - gs)
1249- let gA = if ((0 > gh))
1250- then $Tuple2(0, au(gh))
1251- else $Tuple2(gh, 0)
1252- let gx = gA._1
1253- let gy = gA._2
1254- let fG = if ((gy > 0))
1237+ let gB = dx(bD, false)
1238+ let cV = gB._1
1239+ let cr = gB._2
1240+ let cW = gB._3
1241+ let cX = gB._4
1242+ let bT = gB._5
1243+ let bU = gB._6
1244+ let dD = gB._7
1245+ let dE = gB._8
1246+ let dH = gB._9
1247+ let dw = gB._10
1248+ let dF = gB._11
1249+ let dG = gB._12
1250+ let gu = av(dw, bk())
1251+ let gv = (gu / 2)
1252+ let fU = (gu - gv)
1253+ let gj = (aX() - gu)
1254+ let gC = if ((0 > gj))
1255+ then $Tuple2(0, aw(gj))
1256+ else $Tuple2(gj, 0)
1257+ let gz = gC._1
1258+ let gA = gC._2
1259+ let fI = if ((gA > 0))
12551260 then {
1256- let gl = invoke(ab(), "withdraw", [gy], nil)
1257- if ((gl == gl))
1261+ let gn = invoke(ac(), "withdraw", [gA], nil)
1262+ if ((gn == gn))
12581263 then nil
12591264 else throw("Strict value is not equal to itself.")
12601265 }
12611266 else nil
1262- if ((fG == fG))
1267+ if ((fI == fI))
12631268 then {
1264- let gb = invoke(Z(), "unlockNeutrino", [(gs - gy), toBase58String(Y())], nil)
1265- if ((gb == gb))
1269+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), (gu - gA)], nil)
1270+ if ((gd == gd))
12661271 then {
1267- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), fS)])
1268- if ((fU == fU))
1272+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), fU)])
1273+ if ((fW == fW))
12691274 then {
1270- let fA = invoke(ac(), "notifyNotional", [bB, 0], nil)
1271- if ((fA == fA))
1272- then (((eR(bB) ++ eL(bR, bS, dB, dC, dF, dD, dE)) ++ eS(bs.caller, gt)) ++ eV(gx))
1275+ let fC = invoke(ad(), "notifyNotional", [bD, 0], nil)
1276+ if ((fC == fC))
1277+ then (((eT(bD) ++ eN(bT, bU, dD, dE, dH, dF, dG)) ++ eU(bu.caller, gv)) ++ eX(gz))
12731278 else throw("Strict value is not equal to itself.")
12741279 }
12751280 else throw("Strict value is not equal to itself.")
12761281 }
12771282 else throw("Strict value is not equal to itself.")
12781283 }
12791284 else throw("Strict value is not equal to itself.")
12801285 }
12811286 }
12821287
12831288
12841289
1285-@Callable(bs)
1290+@Callable(bu)
12861291 func payFunding () = {
1287- let gB = bd()
1288- if (if (if ((gB > lastBlock.timestamp))
1292+ let gD = bf()
1293+ if (if (if ((gD > lastBlock.timestamp))
12891294 then true
1290- else !(bG()))
1295+ else !(bI()))
12911296 then true
1292- else bH())
1293- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gB)))
1297+ else bJ())
1298+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(gD)))
12941299 else {
1295- let ee = cz()
1296- let gC = ed()
1297- let eh = gC._1
1298- let ei = gC._2
1299- et((gB + bg()), (bn() + ei), (bo() + eh), ar(ei, ee), ar(eh, ee))
1300+ let eg = cB()
1301+ let gE = ef()
1302+ let ej = gE._1
1303+ let ek = gE._2
1304+ ev((gD + bi()), (bp() + ek), (bq() + ej), at(ek, eg), at(ej, eg))
13001305 }
13011306 }
13021307
13031308
13041309
1305-@Callable(bs)
1306-func forceMoveAsset (bB,eT) = if (if ((addressFromPublicKey(X()) != bs.caller))
1310+@Callable(bu)
1311+func forceMoveAsset (bD,eV) = if (if ((addressFromPublicKey(Y()) != bu.caller))
13071312 then true
1308- else (0 > eT))
1313+ else (0 > eV))
13091314 then throw("Invalid forceMoveAsset parameters")
13101315 else {
1311- let gb = invoke(Z(), "unlockNeutrino", [eT, toBase58String(Y())], nil)
1312- if ((gb == gb))
1313- then (eS(addressFromStringValue(bB), eT) ++ eV((aV() - eT)))
1316+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), eV], nil)
1317+ if ((gd == gd))
1318+ then (eU(addressFromStringValue(bD), eV) ++ eX((aX() - eV)))
13141319 else throw("Strict value is not equal to itself.")
13151320 }
13161321
13171322
13181323
1319-@Callable(bs)
1320-func adjustPeg (dX) = if (if ((addressFromPublicKey(X()) != bs.caller))
1324+@Callable(bu)
1325+func adjustPeg (dZ) = if (if ((addressFromPublicKey(Y()) != bu.caller))
13211326 then true
1322- else (0 > dX))
1327+ else (0 > dZ))
13231328 then throw("Invalid adjustPeg parameters")
13241329 else {
1325- let gD = dW(dX)
1326- let eb = gD._1
1327- let gE = gD._2
1328- if ((gE == 0))
1330+ let gF = dY(dZ)
1331+ let ed = gF._1
1332+ let gG = gF._2
1333+ if ((gG == 0))
13291334 then throw("Nothing to adjust")
1330- else if ((gE > 0))
1331- then {
1332- let gl = invoke(ab(), "withdraw", [gE], nil)
1333- if ((gl == gl))
1335+ else if ((gG > 0))
1336+ then eM(ed, bb())
1337+ else {
1338+ let gd = invoke(ag(), "withdraw", [toBase58String(Z()), aw(gG)], nil)
1339+ if ((gd == gd))
13341340 then {
1335- let fT = invoke(Z(), "lockNeutrinoSP", [toString(aa()), am], [AttachedPayment(Y(), gE)])
1336- if ((fT == fT))
1337- then (eV((aV() + gE)) ++ eK(eb, aZ()))
1338- else throw("Strict value is not equal to itself.")
1339- }
1340- else throw("Strict value is not equal to itself.")
1341- }
1342- else {
1343- let gb = invoke(Z(), "unlockNeutrino", [au(gE), toBase58String(Y())], nil)
1344- if ((gb == gb))
1345- then {
1346- let fU = invoke(ab(), "deposit", nil, [AttachedPayment(Y(), au(gE))])
1347- if ((fU == fU))
1348- then (eV((aV() - au(gE))) ++ eK(eb, aZ()))
1341+ let fW = invoke(ac(), "deposit", nil, [AttachedPayment(Z(), aw(gG))])
1342+ if ((fW == fW))
1343+ then (eX((aX() - aw(gG))) ++ eM(ed, bb()))
13491344 else throw("Strict value is not equal to itself.")
13501345 }
13511346 else throw("Strict value is not equal to itself.")
13521347 }
13531348 }
13541349
13551350
13561351
1357-@Callable(bs)
1358-func v_get (bB) = {
1359- let gF = dv(bB, false)
1360- let cT = gF._1
1361- let cU = gF._2
1362- let cV = gF._3
1363- let gG = gF._4
1364- throw((((ap(cU) + ap(cV)) + ap(gG)) + ap(dn(bB))))
1352+@Callable(bu)
1353+func migrateLiquidity () = {
1354+ let gH = aX()
1355+ let gd = invoke(aa(), "unlockNeutrino", [gH, toBase58String(Z())], nil)
1356+ if ((gd == gd))
1357+ then {
1358+ let fV = invoke(ag(), "deposit", nil, [AttachedPayment(Z(), gH)])
1359+ if ((fV == fV))
1360+ then nil
1361+ else throw("Strict value is not equal to itself.")
1362+ }
1363+ else throw("Strict value is not equal to itself.")
13651364 }
13661365
13671366
13681367
1369-@Callable(bs)
1370-func view_calcRemainMarginWithFundingPayment (bB) = {
1371- let gH = bA(bB)
1372- let bE = gH._1
1373- let db = gH._2
1374- let dk = gH._3
1375- let dd = gH._4
1376- let gI = cZ(bB, an)
1377- let cQ = gI._1
1378- let cY = gI._2
1379- let gJ = cf(bE, db, dd, cY)
1380- let co = gJ._1
1381- let cp = gJ._2
1382- let ck = gJ._3
1383- throw((((((ap(co) + ap(ck)) + ap(dn(bB))) + ap(cY)) + ap(cp)) + ap(cQ)))
1368+@Callable(bu)
1369+func v_get (bD) = {
1370+ let gI = dx(bD, false)
1371+ let cV = gI._1
1372+ let cW = gI._2
1373+ let cX = gI._3
1374+ let gJ = gI._4
1375+ throw((((ar(cW) + ar(cX)) + ar(gJ)) + ar(dp(bD))))
13841376 }
13851377
13861378
13871379
1388-@Callable(bs)
1389-func view_getPegAdjustCost (dX) = {
1390- let ec = dW(dX)
1391- throw(toString(ec._2))
1380+@Callable(bu)
1381+func view_calcRemainMarginWithFundingPayment (bD) = {
1382+ let gK = bC(bD)
1383+ let bG = gK._1
1384+ let dd = gK._2
1385+ let dm = gK._3
1386+ let df = gK._4
1387+ let gL = db(bD, ap)
1388+ let cS = gL._1
1389+ let da = gL._2
1390+ let gM = ch(bG, dd, df, da)
1391+ let cq = gM._1
1392+ let cr = gM._2
1393+ let cm = gM._3
1394+ throw((((((ar(cq) + ar(cm)) + ar(dp(bD))) + ar(da)) + ar(cr)) + ar(cS)))
13921395 }
13931396
13941397
13951398
1396-@Callable(bs)
1397-func view_getFunding () = {
1398- let ee = cz()
1399- let gK = ed()
1400- let eh = gK._1
1401- let ei = gK._2
1402- let gL = ar(ei, ee)
1403- let gM = ar(eh, ee)
1404- throw((((ap(gL) + ap(gM)) + ap(dG())) + ap(cz())))
1399+@Callable(bu)
1400+func view_getPegAdjustCost (dZ) = {
1401+ let ee = dY(dZ)
1402+ throw(toString(ee._2))
14051403 }
14061404
14071405
1408-@Verifier(gN)
1409-func gO () = sigVerify(gN.bodyBytes, gN.proofs[0], X())
1406+
1407+@Callable(bu)
1408+func view_getFunding () = {
1409+ let eg = cB()
1410+ let gN = ef()
1411+ let ej = gN._1
1412+ let ek = gN._2
1413+ let gO = at(ek, eg)
1414+ let gP = at(ej, eg)
1415+ throw((((ar(gO) + ar(gP)) + ar(dI())) + ar(cB())))
1416+ }
1417+
1418+
1419+@Verifier(gQ)
1420+func gR () = sigVerify(gQ.bodyBytes, gQ.proofs[0], Y())
14101421

github/deemru/w8io/c3f4982 
533.46 ms