tx · 3c47ovWmHkH9beGT95icSEVokLD97HPmzmXZpBgihEf5

3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa:  -0.03700000 Waves

2023.05.27 12:10 [2596165] smart account 3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa > SELF 0.00000000 Waves

{ "type": 13, "id": "3c47ovWmHkH9beGT95icSEVokLD97HPmzmXZpBgihEf5", "fee": 3700000, "feeAssetId": null, "timestamp": 1685178635759, "version": 2, "chainId": 84, "sender": "3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa", "senderPublicKey": "4EBKd2zSCvpiSLeyovT5FUuMvGpi6oxdBAbvQybSYi6p", "proofs": [ "3qcVWvVdh15Ltf5E8BAeba1Fn7cdFLpgqG1nr7Q7sTQtjRnzEFBEnL1ngTWLj1QiNa5W1WfT18ewAif76pA8dMWz" ], "script": "base64:BgJrCAISBAoCCAgSAwoBCBIAEgQKAggBEgMKAQESDwoNCAEBAQEBAQgBAQEBARIMCgoIAQEBCAEBAQEIEgUKAwgIARIICgYICAEBAQESDgoMCAgBAQEBAQEICAEBEgMKAQESBAoCAQgSBAoCAQhEABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AAVrX2FtbQIFa19hbW0AEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19leGVjdXRlZE9yZGVycwIQa19leGVjdXRlZE9yZGVycwAQa19jYW5jZWxlZE9yZGVycwIQa19jYW5jZWxlZE9yZGVycwAHa19vcmRlcgIHa19vcmRlcgAOa19vcmRlclJlcXVlc3QCCmtfb3JkZXJSZXEADWtfbGFzdE9yZGVySWQCDWtfbGFzdE9yZGVySWQAEGtfdHJhZGVyT3JkZXJDbnQCEGtfdHJhZGVyT3JkZXJDbnQAEGtfdHJhZGVyT3JkZXJJZHMCEGtfdHJhZGVyT3JkZXJJZHMADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQACGtfc2VuZGVyAghrX3NlbmRlcgANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAEU1RPUAABAARUQUtFAAIABUxJTUlUAAMABExPTkcAAQAFU0hPUlQAAgAISU5DUkVBU0UAAQAIREVDUkVBU0UAAgAZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQAKAARUSU1FCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoBA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEEbWludgICX3gCX3kDCQBmAgUCX3gFAl95BQJfeQUCX3gBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBEGV4ZWN1dGVkT3JkZXJLZXkBCF9vcmRlcklkCQCsAgIJAKwCAgUQa19leGVjdXRlZE9yZGVycwIBXwkApAMBBQhfb3JkZXJJZAEQY2FuY2VsZWRPcmRlcktleQEIX29yZGVySWQJAKwCAgkArAICBRBrX2NhbmNlbGVkT3JkZXJzAgFfCQCkAwEFCF9vcmRlcklkAQhvcmRlcktleQEIX29yZGVySWQJAQ50b0NvbXBvc2l0ZUtleQIFB2tfb3JkZXIJAKQDAQUIX29yZGVySWQBD29yZGVyUmVxdWVzdEtleQIIX29yZGVySWQFX3R5cGUJAKwCAgkArAICCQCsAgIJAKwCAgUOa19vcmRlclJlcXVlc3QCAV8JAKQDAQUIX29yZGVySWQCAV8JAKQDAQUFX3R5cGUBE3RyYWRlck9yZGVyQ291bnRLZXkCBF9hbW0HX3RyYWRlcgkArAICCQCsAgIJAKwCAgkArAICBRBrX3RyYWRlck9yZGVyQ250AgFfBQRfYW1tAgFfBQdfdHJhZGVyARF0cmFkZXJPcmRlcklkc0tleQIEX2FtbQdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfdHJhZGVyT3JkZXJJZHMCAV8FBF9hbW0CAV8FB190cmFkZXIBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19tYW5hZ2VyX2FkZHJlc3MCD01hbmFnZXIgbm90IHNldAELaXNXaGl0ZWxpc3QBCF9hZGRyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIJAQtjb29yZGluYXRvcgAJAQ50b0NvbXBvc2l0ZUtleQIFBWtfYW1tBQhfYWRkcmVzcwcBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEHaXNWYWxpZAEIX29yZGVySWQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARBleGVjdXRlZE9yZGVyS2V5AQUIX29yZGVySWQHCQACAQkArAICAhhPcmRlciBhbHJlYWR5IGV4ZWN1dGVkOiAJAKQDAQUIX29yZGVySWQDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARBjYW5jZWxlZE9yZGVyS2V5AQUIX29yZGVySWQHCQACAQkArAICAhlPcmRlciBhbHJlYWR5IGNhbmNlbGxlZDogCQCkAwEFCF9vcmRlcklkBgEOZ2V0U3ByZWFkTGltaXQACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUNa19zcHJlYWRMaW1pdAIUU3ByZWFkIGxpbWl0IG5vdCBzZXQBDmN1cnJlbnRPcmRlcklkAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1rX2xhc3RPcmRlcklkAAABE2dldFRyYWRlck9yZGVyQ291bnQCBF9hbW0HX3RyYWRlcgQDa2V5CQETdHJhZGVyT3JkZXJDb3VudEtleQIFBF9hbW0FB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABEnRyYWRlckFtbU9yZGVyc0lkcwIEX2FtbQdfdHJhZGVyBANrZXkJARF0cmFkZXJPcmRlcklkc0tleQIFBF9hbW0FB190cmFkZXIEA3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAMJAAACBQN2YWwCAAUDbmlsCQC1CQIFA3ZhbAIBLAEQaGF2ZU9yZGVyUmVxdWVzdAIIX29yZGVySWQFX3R5cGUEA2tleQkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5AQ9nZXRPcmRlclJlcXVlc3QCCF9vcmRlcklkBV90eXBlBANrZXkJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUED29yZGVyUmVxdWVzdFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICAhtOb3Qgb3JkZXIgcmVxdWVzdCBmb3Iga2V5OiAFA2tleQQUb3JkZXJSZXF1ZXN0UGFydExpc3QJALUJAgUPb3JkZXJSZXF1ZXN0U3RyAgEsBAdvcmRlcklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAAAg9JbnZhbGlkIG9yZGVySWQEA2FtbQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAABBAZ0cmFkZXIJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAgQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAwIMSW52YWxpZCB0eXBlBAx0cmlnZ2VyUHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFFG9yZGVyUmVxdWVzdFBhcnRMaXN0AAQCFEludmFsaWQgdHJpZ2dlclByaWNlBApsaW1pdFByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAFAhJJbnZhbGlkIGxpbWl0UHJpY2UJAJgKBgUHb3JkZXJJZAUDYW1tBQZ0cmFkZXIFBHR5cGUFDHRyaWdnZXJQcmljZQUKbGltaXRQcmljZQEIZ2V0T3JkZXIBCF9vcmRlcklkBAhvcmRlclN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAQhvcmRlcktleQEFCF9vcmRlcklkCQCsAgICEkludmFsaWQgb3JkZXIgaWQ6IAkApAMBBQhfb3JkZXJJZAQNb3JkZXJQYXJ0TGlzdAkAtQkCBQhvcmRlclN0cgIBLAQDYW1tCQCRAwIFDW9yZGVyUGFydExpc3QAAAQGdHJhZGVyCQCRAwIFDW9yZGVyUGFydExpc3QAAQQIYW1vdW50SW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAgIQSW52YWxpZCBhbW91bnRJbgQIbGV2ZXJhZ2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAwIQSW52YWxpZCBsZXZlcmFnZQQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAEAgxJbnZhbGlkIHR5cGUEDHRyaWdnZXJQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAFAhRJbnZhbGlkIHRyaWdnZXJQcmljZQQLcGF5bWVudFVzZG4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABgITSW52YWxpZCBwYXltZW50VXNkbgQEc2lkZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAHAgxJbnZhbGlkIHNpZGUEB3JlZkxpbmsJAJEDAgUNb3JkZXJQYXJ0TGlzdAAIBApwb3NpdGlvbklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAkCEkludmFsaWQgcG9zaXRpb25JZAQKbGltaXRQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAKAhJJbnZhbGlkIGxpbWl0UHJpY2UECmV4cGlyYXRpb24DCQBmAgkAkAMBBQ1vcmRlclBhcnRMaXN0AAsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QACwISSW52YWxpZCBleHBpcmF0aW9uAAAEC21hcmtldFByaWNlAwkAZgIJAJADAQUNb3JkZXJQYXJ0TGlzdAAMCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAwCGEludmFsaWQgb3JkZXJNYXJrZXRQcmljZQAACQCfCg0FA2FtbQUGdHJhZGVyBQhhbW91bnRJbgUIbGV2ZXJhZ2UFBHR5cGUFDHRyaWdnZXJQcmljZQULcGF5bWVudFVzZG4FBHNpZGUFB3JlZkxpbmsFCnBvc2l0aW9uSWQFCmxpbWl0UHJpY2UFCmV4cGlyYXRpb24FC21hcmtldFByaWNlAQ5nZXRNYXJrZXRQcmljZQEEX2FtbQQBcwkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAhBjb21wdXRlU3BvdFByaWNlBQNuaWwFA25pbAMJAAACBQFzBQFzBANyZXMEByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIDSW50BAF0BQckbWF0Y2gwBQF0CQACAQIfSW52YWxpZCBjb21wdXRlU3BvdFByaWNlIHJlc3VsdAkBBXZhbHVlAQUDcmVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQZnZXRGZWUCBF9hbW0HX3RyYWRlcgQBcwkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAh9jb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0CQDMCAIFB190cmFkZXIJAMwIAgIABQNuaWwFA25pbAMJAAACBQFzBQFzBANyZXMEByRtYXRjaDAFAXMDCQABAgUHJG1hdGNoMAIOKEludCwgQm9vbGVhbikEAXQFByRtYXRjaDAIBQF0Al8xCQACAQIuSW52YWxpZCBjb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0IHJlc3VsdAkBBXZhbHVlAQUDcmVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIKX29yZGVyU2lkZQpfb3JkZXJUeXBlAwMJAAACBQpfb3JkZXJUeXBlBQRUQUtFBgkAAAIFCl9vcmRlclR5cGUFBFNUT1ADCQAAAgUKX29yZGVyU2lkZQUETE9ORwUFU0hPUlQFBExPTkcFCl9vcmRlclNpZGUBD2dldFBvc2l0aW9uU2l6ZQMEX2FtbQdfdHJhZGVyCl9kaXJlY3Rpb24EA2FtbQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24EB3NpemVLZXkJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQNhbW0FB3NpemVLZXkAAAENZ2V0UG9zaXRpb25JZAMEX2FtbQdfdHJhZGVyCl9kaXJlY3Rpb24EA2FtbQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24EBnNlcUtleQkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQtwb3NpdGlvbktleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQNhbW0FBnNlcUtleQAAAQlnZXRTcHJlYWQBBl9wcmljZQkBBG11bGQCBQZfcHJpY2UJAQ5nZXRTcHJlYWRMaW1pdAABCXNhdmVPcmRlcg4IX29yZGVySWQEX2FtbQdfdHJhZGVyCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3R5cGUNX3RyaWdnZXJQcmljZQxfcGF5bWVudFVzZG4FX3NpZGUIX3JlZkxpbmsLX3Bvc2l0aW9uSWQLX2xpbWl0UHJpY2ULX2V4cGlyYXRpb24RX29yZGVyTWFya2V0UHJpY2UECG9yZGVyU3RyCQC5CQIJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIJAKQDAQUJX2Ftb3VudEluCQDMCAIJAKQDAQUJX2xldmVyYWdlCQDMCAIJAKQDAQUFX3R5cGUJAMwIAgkApAMBBQ1fdHJpZ2dlclByaWNlCQDMCAIJAKQDAQUMX3BheW1lbnRVc2RuCQDMCAIJAKQDAQUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgkApAMBBQtfcG9zaXRpb25JZAkAzAgCCQCkAwEFC19saW1pdFByaWNlCQDMCAIJAKQDAQULX2V4cGlyYXRpb24JAMwIAgkApAMBBRFfb3JkZXJNYXJrZXRQcmljZQUDbmlsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQhvcmRlcktleQEFCF9vcmRlcklkBQhvcmRlclN0cgUDbmlsARBzYXZlT3JkZXJSZXF1ZXN0Bghfb3JkZXJJZARfYW1tB190cmFkZXIFX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQQLb3JkZXJSZXFTdHIJALkJAgkAzAgCCQCkAwEFCF9vcmRlcklkCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCCQCkAwEFBV90eXBlCQDMCAIJAKQDAQUNX3RyaWdnZXJQcmljZQkAzAgCCQCkAwEFC19saW1pdFByaWNlBQNuaWwCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQULb3JkZXJSZXFTdHIFA25pbAEQdXBkYXRlT3JkZXJJZFN0cgMPX29yZGVySWRzTmV3U3RyBF9hbW0HX3RyYWRlcgkAzAgCCQELU3RyaW5nRW50cnkCCQERdHJhZGVyT3JkZXJJZHNLZXkCBQRfYW1tBQdfdHJhZGVyBQ9fb3JkZXJJZHNOZXdTdHIFA25pbAEUYWRkUmVtb3ZlT3JkZXJJZExpc3QFCV9vcmRlcklkcwhfb3JkZXJJZARfYW1tB190cmFkZXIEX2FkZAQLb3JkZXJJZHNOZXcDBQRfYWRkCQDNCAIFCV9vcmRlcklkcwkApAMBBQhfb3JkZXJJZAkA0QgCBQlfb3JkZXJJZHMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQlfb3JkZXJJZHMJAKQDAQUIX29yZGVySWQJAKwCAgISTm8gb3JkZXIgd2l0aCBpZDogCQCkAwEFCF9vcmRlcklkBQtvcmRlcklkc05ldwEQYWRkUmVtb3ZlT3JkZXJJZAQIX29yZGVySWQEX2FtbQdfdHJhZGVyBF9hZGQECG9yZGVySWRzCQESdHJhZGVyQW1tT3JkZXJzSWRzAgUEX2FtbQUHX3RyYWRlcgQLb3JkZXJJZHNOZXcJARRhZGRSZW1vdmVPcmRlcklkTGlzdAUFCG9yZGVySWRzBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUEX2FkZAQOb3JkZXJJZHNOZXdTdHIJALkJAgULb3JkZXJJZHNOZXcCASwJARB1cGRhdGVPcmRlcklkU3RyAwUOb3JkZXJJZHNOZXdTdHIFBF9hbW0FB190cmFkZXIBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBF9hbW0HX3RyYWRlcgZfY291bnQDCQBmAgAABQZfY291bnQJAAIBCQCsAgICFUludmFsaWQgb3JkZXIgY291bnQ6IAkApAMBBQZfY291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARN0cmFkZXJPcmRlckNvdW50S2V5AgUEX2FtbQUHX3RyYWRlcgUGX2NvdW50BQNuaWwBEXVwZGF0ZUxhc3RPcmRlcklkAQxfbGFzdE9yZGVySWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfbGFzdE9yZGVySWQFDF9sYXN0T3JkZXJJZAUDbmlsARBtYXJrRXhlY3V0ZU9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19leGVjdXRlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEPbWFya0NhbmNlbE9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19jYW5jZWxlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEOZ2V0UG9zaXRpb25JZHMCBF9hbW0HX3RyYWRlcgQQbG9uZ1Bvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFBExPTkcEFWN1cnJlbnRMb25nUG9zaXRpb25JZAMJAQIhPQIFEGxvbmdQb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBQRMT05HAAAEEXNob3J0UG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUFU0hPUlQEFmN1cnJlbnRTaG9ydFBvc2l0aW9uSWQDCQECIT0CBRFzaG9ydFBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFBVNIT1JUAAAJAMwIAgUVY3VycmVudExvbmdQb3NpdGlvbklkCQDMCAIFFmN1cnJlbnRTaG9ydFBvc2l0aW9uSWQFA25pbA0BaQESY2xlYW5VcFN0YWxlT3JkZXJzAgRfYW1tB190cmFkZXIEBm9yZGVycwkBEnRyYWRlckFtbU9yZGVyc0lkcwIFBF9hbW0FB190cmFkZXIEC3Bvc2l0aW9uSWRzCQEOZ2V0UG9zaXRpb25JZHMCBQRfYW1tBQdfdHJhZGVyCgEKY2xlYW5VcE9uZQIEX2FjYwhfb3JkZXJJZAQKb3JkZXJJZEludAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFCF9vcmRlcklkAhBJbnZhbGlkIG9yZGVyIGlkBA0kdDAxMTc2NjExOTgyCQEIZ2V0T3JkZXIBBQpvcmRlcklkSW50BANfeDEIBQ0kdDAxMTc2NjExOTgyAl8xBANfeDIIBQ0kdDAxMTc2NjExOTgyAl8yBANfeDMIBQ0kdDAxMTc2NjExOTgyAl8zBANfeDQIBQ0kdDAxMTc2NjExOTgyAl80BAVfdHlwZQgFDSR0MDExNzY2MTE5ODICXzUEA194NQgFDSR0MDExNzY2MTE5ODICXzYEA194NggFDSR0MDExNzY2MTE5ODICXzcEA194NwgFDSR0MDExNzY2MTE5ODICXzgEA194OAgFDSR0MDExNzY2MTE5ODICXzkEC19wb3NpdGlvbklkCAUNJHQwMTE3NjYxMTk4MgNfMTAEA194OQgFDSR0MDExNzY2MTE5ODIDXzExBAtfZXhwaXJhdGlvbggFDSR0MDExNzY2MTE5ODIDXzEyBBpjYW5jZWxUYWtlU3RvcE9mTm9Qb3NpdGlvbgMDAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFCQECIT0CCQCRAwIFC3Bvc2l0aW9uSWRzAAAFC19wb3NpdGlvbklkBwkBAiE9AgkAkQMCBQtwb3NpdGlvbklkcwABBQtfcG9zaXRpb25JZAcEFGNhbmNlbExpbWl0SWZFeHBpcmVkAwkAAAIFBV90eXBlBQVMSU1JVAkAZwIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQtfZXhwaXJhdGlvbgcDAwUaY2FuY2VsVGFrZVN0b3BPZk5vUG9zaXRpb24GBRRjYW5jZWxMaW1pdElmRXhwaXJlZAQGY2hhbmdlCQEPbWFya0NhbmNlbE9yZGVyAQUKb3JkZXJJZEludAQMbmV3T3JkZXJMaXN0CQEUYWRkUmVtb3ZlT3JkZXJJZExpc3QFCAUEX2FjYwJfMQUKb3JkZXJJZEludAUEX2FtbQUHX3RyYWRlcgcJAJQKAgUMbmV3T3JkZXJMaXN0CQDOCAIIBQRfYWNjAl8yBQZjaGFuZ2UFBF9hY2MEDSR0MDEyNTE0MTI1ODkKAAIkbAUGb3JkZXJzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQZvcmRlcnMFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2xlYW5VcE9uZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQJbmV3T3JkZXJzCAUNJHQwMTI1MTQxMjU4OQJfMQQNY2FuY2VsQWN0aW9ucwgFDSR0MDEyNTE0MTI1ODkCXzIJAM4IAgkAzggCBQ1jYW5jZWxBY3Rpb25zCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIJAJADAQUJbmV3T3JkZXJzCQEQdXBkYXRlT3JkZXJJZFN0cgMJALkJAgUJbmV3T3JkZXJzAgEsBQRfYW1tBQdfdHJhZGVyAWkBCnNldENvbnRleHQBB19zZW5kZXIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5Pbmx5IHNlbGYtY2FsbAkAzAgCCQELU3RyaW5nRW50cnkCBQhrX3NlbmRlcgUHX3NlbmRlcgUDbmlsAWkBDHJlc2V0Q29udGV4dAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg5Pbmx5IHNlbGYtY2FsbAkAzAgCCQELRGVsZXRlRW50cnkBBQhrX3NlbmRlcgUDbmlsAWkBCmluaXRpYWxpemUCDF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQDAwMJAQtpbml0aWFsaXplZAAGAwkAZgIAAAUMX3NwcmVhZExpbWl0BgkAZgIFDF9zcHJlYWRMaW1pdAkAaQIFDERFQ0lNQUxfVU5JVAAKBgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVW5hYmxlIHRvIGluaXRpYWxpemUJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGBQNuaWwBaQEOY2hhbmdlU2V0dGluZ3MBDF9zcHJlYWRMaW1pdAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgMJAGYCAAAFDF9zcHJlYWRMaW1pdAYJAGYCBQxfc3ByZWFkTGltaXQJAGkCBQxERUNJTUFMX1VOSVQACgkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQFA25pbAFpAQtjcmVhdGVPcmRlcg0EX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsRX3N0b3BUcmlnZ2VyUHJpY2UPX3N0b3BMaW1pdFByaWNlEV90YWtlVHJpZ2dlclByaWNlD190YWtlTGltaXRQcmljZQtfZXhwaXJhdGlvbgQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAjVJbnZhbGlkIGNyZWF0ZU9yZGVyIHBhcmFtZXRlcnM6IGludmFsaWQgcGF5bWVudCBjb3VudAQNJHQwMTU1NzgxNTgzMAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJQKAgkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIQSW52YWxpZCBhc3NldCBpZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAJQKAgIAAAAEDnBheW1lbnRBc3NldElkCAUNJHQwMTU1NzgxNTgzMAJfMQQNcGF5bWVudEFtb3VudAgFDSR0MDE1NTc4MTU4MzACXzIEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQVfdHlwZQkAzAgCBQ1fdHJpZ2dlclByaWNlCQDMCAIFC19saW1pdFByaWNlCQDMCAIFCV9hbW91bnRJbgkAzAgCBQlfbGV2ZXJhZ2UJAMwIAgUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgUOcGF5bWVudEFzc2V0SWQJAMwIAgUNcGF5bWVudEFtb3VudAkAzAgCBQtfZXhwaXJhdGlvbgUDbmlsBQNuaWwDCQAAAgUGZG9DYWxsBQZkb0NhbGwEB29yZGVySWQEByRtYXRjaDAFBmRvQ2FsbAMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAFAXQJAAIBAhtJbnZhbGlkIElEIG9mIGNyZWF0ZWQgb3JkZXIDCQAAAgUFX3R5cGUFBUxJTUlUBAhtYWtlU3RvcAMJAGYCBRFfc3RvcFRyaWdnZXJQcmljZQAABApkb01ha2VTdG9wCQD8BwQFBHRoaXMCGmludGVybmFsQ3JlYXRlT3JkZXJSZXF1ZXN0CQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQdvcmRlcklkCQDMCAIFBFNUT1AJAMwIAgURX3N0b3BUcmlnZ2VyUHJpY2UJAMwIAgUPX3N0b3BMaW1pdFByaWNlBQNuaWwFA25pbAMJAAACBQpkb01ha2VTdG9wBQpkb01ha2VTdG9wBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAQIbWFrZVRha2UDCQBmAgURX3Rha2VUcmlnZ2VyUHJpY2UAAAQKZG9NYWtlVGFrZQkA/AcEBQR0aGlzAhppbnRlcm5hbENyZWF0ZU9yZGVyUmVxdWVzdAkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUHb3JkZXJJZAkAzAgCBQRUQUtFCQDMCAIFEV90YWtlVHJpZ2dlclByaWNlCQDMCAIFD190YWtlTGltaXRQcmljZQUDbmlsBQNuaWwDCQAAAgUKZG9NYWtlVGFrZQUKZG9NYWtlVGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAM4IAgUIbWFrZVN0b3AFCG1ha2VUYWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEcaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcwoEX2FtbQpfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rEV9zdG9wVHJpZ2dlclByaWNlD19zdG9wTGltaXRQcmljZRFfdGFrZVRyaWdnZXJQcmljZQ9fdGFrZUxpbWl0UHJpY2UKX3ByaWNlRGF0YQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQtpc1doaXRlbGlzdAEFBF9hbW0JAAIBAi9JbnZhbGlkIGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MgcGFyYW1ldGVycwQMcG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUKX2RpcmVjdGlvbgMJAQIhPQIFDHBvc2l0aW9uU2l6ZQAACQACAQJCSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uV2l0aFN0b3BMb3NzIHBhcmFtZXRlcnM6IG9ubHkgbmV3IHBvc2l0aW9uBAxkb1NldENvbnRleHQJAPwHBAUEdGhpcwIKc2V0Q29udGV4dAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQxkb1NldENvbnRleHQFDGRvU2V0Q29udGV4dAQOZG9PcGVuUG9zaXRpb24JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIQaW5jcmVhc2VQb3NpdGlvbgkAzAgCBQpfZGlyZWN0aW9uCQDMCAIFCV9sZXZlcmFnZQkAzAgCBRNfbWluQmFzZUFzc2V0QW1vdW50CQDMCAIFCF9yZWZMaW5rCQDMCAIFCl9wcmljZURhdGEFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUOZG9PcGVuUG9zaXRpb24FDmRvT3BlblBvc2l0aW9uBA5kb1Jlc2V0Q29udGV4dAkA/AcEBQR0aGlzAgxyZXNldENvbnRleHQFA25pbAUDbmlsAwkAAAIFDmRvUmVzZXRDb250ZXh0BQ5kb1Jlc2V0Q29udGV4dAQSb3BlbmVkUG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUKX2RpcmVjdGlvbgMJAAACBRJvcGVuZWRQb3NpdGlvblNpemUFEm9wZW5lZFBvc2l0aW9uU2l6ZQQIYW1vdW50SW4JAQNhYnMBBRJvcGVuZWRQb3NpdGlvblNpemUDCQAAAgUIYW1vdW50SW4FCGFtb3VudEluBAxzdG9wTG9zc1NpZGUDCQBmAgAABRJvcGVuZWRQb3NpdGlvblNpemUFBExPTkcFBVNIT1JUBA1jaGVja0Ftb3VudEluAwkAZwIAAAUIYW1vdW50SW4EBGRhdGEJALkJAgkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIJAMwIAgkApAMBBQpfZGlyZWN0aW9uCQDMCAIJAKQDAQUJX2xldmVyYWdlCQDMCAIJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAkAzAgCBQhfcmVmTGluawkAzAgCBQpfcHJpY2VEYXRhBQNuaWwCASwJAAIBCQCsAgIJAKwCAgkArAICAhFJbnZhbGlkIGFtb3VudEluPQkApAMBBQhhbW91bnRJbgIhIGFmdGVyIHN1Y2Nlc3MgaW5jcmVhc2VQb3NpdGlvbjogBQRkYXRhAAADCQAAAgUNY2hlY2tBbW91bnRJbgUNY2hlY2tBbW91bnRJbgQRZG9DcmVhdGVTdG9wT3JkZXIDCQBmAgURX3N0b3BUcmlnZ2VyUHJpY2UAAAQRZG9DcmVhdGVTdG9wT3JkZXIJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUEU1RPUAkAzAgCBRFfc3RvcFRyaWdnZXJQcmljZQkAzAgCBQ9fc3RvcExpbWl0UHJpY2UJAMwIAgUIYW1vdW50SW4JAMwIAgAACQDMCAIFDHN0b3BMb3NzU2lkZQkAzAgCBQhfcmVmTGluawkAzAgCAgAJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgURZG9DcmVhdGVTdG9wT3JkZXIFEWRvQ3JlYXRlU3RvcE9yZGVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRFkb0NyZWF0ZVN0b3BPcmRlcgURZG9DcmVhdGVTdG9wT3JkZXIEEWRvQ3JlYXRlVGFrZU9yZGVyAwkAZgIFEV90YWtlVHJpZ2dlclByaWNlAAAEEWRvQ3JlYXRlVGFrZU9yZGVyCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBFRBS0UJAMwIAgURX3Rha2VUcmlnZ2VyUHJpY2UJAMwIAgUPX3Rha2VMaW1pdFByaWNlCQDMCAIFCGFtb3VudEluCQDMCAIAAAkAzAgCBQxzdG9wTG9zc1NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFEWRvQ3JlYXRlVGFrZU9yZGVyBRFkb0NyZWF0ZVRha2VPcmRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgURZG9DcmVhdGVUYWtlT3JkZXIFEWRvQ3JlYXRlVGFrZU9yZGVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZaW50ZXJuYWxNYXJrT3JkZXJFeGVjdXRlZAMEX2FtbQdfdHJhZGVyCF9vcmRlcklkAwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQtpc1doaXRlbGlzdAEFBF9hbW0GCQEBIQEJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAixJbnZhbGlkIGludGVybmFsTWFya09yZGVyRXhlY3V0ZWQgcGFyYW1ldGVycwQTbmV3VHJhZGVyT3JkZXJDb3VudAkAZQIJARNnZXRUcmFkZXJPcmRlckNvdW50AgUEX2FtbQUHX3RyYWRlcgABCQDOCAIJAM4IAgkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyBRNuZXdUcmFkZXJPcmRlckNvdW50CQEQYWRkUmVtb3ZlT3JkZXJJZAQFCF9vcmRlcklkBQRfYW1tBQdfdHJhZGVyBwkBEG1hcmtFeGVjdXRlT3JkZXIBBQhfb3JkZXJJZAFpARppbnRlcm5hbENyZWF0ZU9yZGVyUmVxdWVzdAYHX3RyYWRlcgRfYW1tCF9vcmRlcklkBV90eXBlDV90cmlnZ2VyUHJpY2ULX2xpbWl0UHJpY2UDAwMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkAZwIAAAUNX3RyaWdnZXJQcmljZQYJAGYCAAAFC19saW1pdFByaWNlBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQItSW52YWxpZCBpbnRlcm5hbENyZWF0ZU9yZGVyUmVxdWVzdCBwYXJhbWV0ZXJzCQEQc2F2ZU9yZGVyUmVxdWVzdAYFCF9vcmRlcklkBQRfYW1tBQdfdHJhZGVyBQVfdHlwZQUNX3RyaWdnZXJQcmljZQULX2xpbWl0UHJpY2UBaQETaW50ZXJuYWxDcmVhdGVPcmRlcgwHX3RyYWRlcgRfYW1tBV90eXBlDV90cmlnZ2VyUHJpY2ULX2xpbWl0UHJpY2UJX2Ftb3VudEluCV9sZXZlcmFnZQVfc2lkZQhfcmVmTGluaw9fcGF5bWVudEFzc2V0SWQOX3BheW1lbnRBbW91bnQLX2V4cGlyYXRpb24DAwMDAwMDAwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQtpc1doaXRlbGlzdAEFBF9hbW0GCQBnAgAABQ1fdHJpZ2dlclByaWNlBgkAZgIAAAULX2xpbWl0UHJpY2UGCQBnAgAABQlfYW1vdW50SW4GCQBmAgAABQlfbGV2ZXJhZ2UGCQEBIQEDCQAAAgUFX3NpZGUFBExPTkcGCQAAAgUFX3NpZGUFBVNIT1JUBgkBASEBAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQYJAAACBQVfdHlwZQUFTElNSVQGCQEBIQEJAAACCAUBaQZjYWxsZXIFBHRoaXMGCQBmAgAABQtfZXhwaXJhdGlvbgkAAgECJkludmFsaWQgaW50ZXJuYWxDcmVhdGVPcmRlciBwYXJhbWV0ZXJzBAdvcmRlcklkCQBkAgkBDmN1cnJlbnRPcmRlcklkAAABBBFwb3NpdGlvbkRpcmVjdGlvbgkBFGdldFBvc2l0aW9uRGlyZWN0aW9uAgUFX3NpZGUFBV90eXBlBBNuZXdUcmFkZXJPcmRlckNvdW50CQBkAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEEDHBvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uBBBvcmRlck1hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBApfZGlyZWN0aW9uAwMDCQAAAgUMcG9zaXRpb25TaXplAAAGAwkAZgIFDHBvc2l0aW9uU2l6ZQAACQAAAgUFX3NpZGUFBExPTkcHBgMJAGYCAAAFDHBvc2l0aW9uU2l6ZQkAAAIFBV9zaWRlBQVTSE9SVAcFCElOQ1JFQVNFBQhERUNSRUFTRQMDCQAAAgUMcG9zaXRpb25TaXplAAADCQAAAgUFX3R5cGUFBFNUT1AGCQAAAgUFX3R5cGUFBFRBS0UHCQACAQIrQ2FuIG5vdCBjcmVhdGUgU1RPUC9UQUtFIG9yZGVyOiBubyBwb3NpdGlvbgQLdXNkblBheW1lbnQDCQAAAgUKX2RpcmVjdGlvbgUISU5DUkVBU0UDAwkBAiE9AgUPX3BheW1lbnRBc3NldElkCQDYBAEJAQpxdW90ZUFzc2V0AAYJAQIhPQIFDl9wYXltZW50QW1vdW50BQlfYW1vdW50SW4JAAIBAjRJbnZhbGlkIGNyZWF0ZUxpbWl0T3JkZXIgcGFyYW1ldGVyczogaW52YWxpZCBwYXltZW50BAVzdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOX3BheW1lbnRBbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFDl9wYXltZW50QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAADCQAAAgULdXNkblBheW1lbnQFC3VzZG5QYXltZW50BApwb3NpdGlvbklkAwkBAiE9AgUMcG9zaXRpb25TaXplAAAJAQ1nZXRQb3NpdGlvbklkAwUEX2FtbQUHX3RyYWRlcgURcG9zaXRpb25EaXJlY3Rpb24AAAMDAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFCQAAAgUKcG9zaXRpb25JZAAABwkAAgECP1NUT1AgYW5kIFRBS0Ugb3JkZXIgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHBvc2l0aW9uIHdpdGggaWQgIT0gMAMJAGYCBRNuZXdUcmFkZXJPcmRlckNvdW50BRlNQVhfVFJBREVSX09SREVSU19QRVJfQU1NCQACAQIwSW52YWxpZCBjcmVhdGVMaW1pdE9yZGVyIHBhcmFtZXRlcnM6IG9yZGVyIGNvdW50BAljaGFuZ2VTZXQJAM4IAgkAzggCCQDOCAIJAQlzYXZlT3JkZXIOBQdvcmRlcklkBQRfYW1tBQdfdHJhZGVyBQlfYW1vdW50SW4FCV9sZXZlcmFnZQUFX3R5cGUFDV90cmlnZ2VyUHJpY2UFC3VzZG5QYXltZW50BQVfc2lkZQUIX3JlZkxpbmsFCnBvc2l0aW9uSWQFC19saW1pdFByaWNlBQtfZXhwaXJhdGlvbgUQb3JkZXJNYXJrZXRQcmljZQkBEGFkZFJlbW92ZU9yZGVySWQEBQdvcmRlcklkBQRfYW1tBQdfdHJhZGVyBgkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyBRNuZXdUcmFkZXJPcmRlckNvdW50CQERdXBkYXRlTGFzdE9yZGVySWQBBQdvcmRlcklkCQCUCgIFCWNoYW5nZVNldAUHb3JkZXJJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjYW5jZWxPcmRlcgEIX29yZGVySWQEDSR0MDI1NDY2MjU2MTYJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMjU0NjYyNTYxNgJfMQQHX3RyYWRlcggFDSR0MDI1NDY2MjU2MTYCXzIECV9hbW91bnRJbggFDSR0MDI1NDY2MjU2MTYCXzMECV9sZXZlcmFnZQgFDSR0MDI1NDY2MjU2MTYCXzQEBV90eXBlCAUNJHQwMjU0NjYyNTYxNgJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDI1NDY2MjU2MTYCXzYEC19hbW91bnRVc2RuCAUNJHQwMjU0NjYyNTYxNgJfNwMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQEHaXNWYWxpZAEFCF9vcmRlcklkBgkBASEBCQAAAgkApQgBCAUBaQZjYWxsZXIFB190cmFkZXIJAAIBAh5JbnZhbGlkIGNhbmNlbE9yZGVyIHBhcmFtZXRlcnMEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAQTbmV3VHJhZGVyT3JkZXJDb3VudAkAZQIJARNnZXRUcmFkZXJPcmRlckNvdW50AgUEX2FtbQUHX3RyYWRlcgABBAh3aXRoZHJhdwMJAGYCBQtfYW1vdW50VXNkbgAABAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIFC19hbW91bnRVc2RuBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQh3aXRoZHJhdwUId2l0aGRyYXcJAM4IAgkAzggCCQDOCAIJAQ9tYXJrQ2FuY2VsT3JkZXIBBQhfb3JkZXJJZAkBEGFkZFJlbW92ZU9yZGVySWQEBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgcJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAMJAGYCBQtfYW1vdW50VXNkbgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULX2Ftb3VudFVzZG4JAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMZXhlY3V0ZU9yZGVyAghfb3JkZXJJZApfcHJpY2VEYXRhBA0kdDAyNjgzNDI3MDk2CQEIZ2V0T3JkZXIBBQhfb3JkZXJJZAQEX2FtbQgFDSR0MDI2ODM0MjcwOTYCXzEEB190cmFkZXIIBQ0kdDAyNjgzNDI3MDk2Al8yBAlfYW1vdW50SW4IBQ0kdDAyNjgzNDI3MDk2Al8zBAlfbGV2ZXJhZ2UIBQ0kdDAyNjgzNDI3MDk2Al80BAVfdHlwZQgFDSR0MDI2ODM0MjcwOTYCXzUEDV90cmlnZ2VyUHJpY2UIBQ0kdDAyNjgzNDI3MDk2Al82BAtfYW1vdW50VXNkbggFDSR0MDI2ODM0MjcwOTYCXzcEBV9zaWRlCAUNJHQwMjY4MzQyNzA5NgJfOAQIX3JlZkxpbmsIBQ0kdDAyNjgzNDI3MDk2Al85BAtfcG9zaXRpb25JZAgFDSR0MDI2ODM0MjcwOTYDXzEwBAtfbGltaXRQcmljZQgFDSR0MDI2ODM0MjcwOTYDXzExBApfdGltZXN0YW1wCAUNJHQwMjY4MzQyNzA5NgNfMTIEEV9vcmRlck1hcmtldFByaWNlCAUNJHQwMjY4MzQyNzA5NgNfMTMEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAQRcG9zaXRpb25EaXJlY3Rpb24JARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIFBV9zaWRlBQVfdHlwZQMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQJAAIBAh9JbnZhbGlkIGV4ZWN1dGVPcmRlciBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQxwb3NpdGlvblNpemUFDHBvc2l0aW9uU2l6ZQQRY3VycmVudFBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgAABA0kdDAyNzYwMzMxNTY0AwkAAAIFBV90eXBlBQRTVE9QBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgECK0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQDCQAAAgUSX3Bvc2l0aW9uRGlyZWN0aW9uBQRMT05HCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQMFDGlzRXhlY3V0YWJsZQkAlQoDAg1jbG9zZVBvc2l0aW9uCQDMCAIJAQRtaW52AgUJX2Ftb3VudEluCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIFEXBvc2l0aW9uRGlyZWN0aW9uCQDMCAIJAQRtdWxkAgULX2xpbWl0UHJpY2UJAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgcJAMwIAgUKX3ByaWNlRGF0YQUDbmlsBQNuaWwJAAIBAjFDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogdHJpZ2dlclByaWNlIG1pc21hdGNoAwkAAAIFBV90eXBlBQRUQUtFBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgEJAKwCAgkArAICCQCsAgICLENhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQgCQCkAwEFEWN1cnJlbnRQb3NpdGlvbklkAgIhPQkApAMBBQtfcG9zaXRpb25JZAMJAAACBRJfcG9zaXRpb25EaXJlY3Rpb24FBExPTkcJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQkAZwIFDV90cmlnZ2VyUHJpY2UFC21hcmtldFByaWNlAwUMaXNFeGVjdXRhYmxlCQCVCgMCDWNsb3NlUG9zaXRpb24JAMwIAgkBBG1pbnYCBQlfYW1vdW50SW4JAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgURcG9zaXRpb25EaXJlY3Rpb24JAMwIAgkBBG11bGQCBQtfbGltaXRQcmljZQkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCBwkAzAgCBQpfcHJpY2VEYXRhBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBUxJTUlUBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQSaXNFeGVjdXRhYmxlQnlTdG9wAwkAAAIFC19saW1pdFByaWNlAAAGAwkAZgIFC19saW1pdFByaWNlBRFfb3JkZXJNYXJrZXRQcmljZQkAZwIFC21hcmtldFByaWNlBQtfbGltaXRQcmljZQkAZwIFC19saW1pdFByaWNlBQttYXJrZXRQcmljZQQbaXNFeGVjdXRhYmxlRm9yVHJpZ2dlclByaWNlAwkAAAIFBV9zaWRlBQRMT05HCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQQMaXNFeGVjdXRhYmxlAwUSaXNFeGVjdXRhYmxlQnlTdG9wBRtpc0V4ZWN1dGFibGVGb3JUcmlnZ2VyUHJpY2UHAwUMaXNFeGVjdXRhYmxlBAxtYXJnaW5BbW91bnQJAQRkaXZkAgULX2Ftb3VudFVzZG4JAGQCCQEEbXVsZAIJAQZnZXRGZWUCBQRfYW1tBQdfdHJhZGVyBQlfbGV2ZXJhZ2UFDERFQ0lNQUxfVU5JVAQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFDG1hcmdpbkFtb3VudAUJX2xldmVyYWdlBBdpZGVhbE1pbkJhc2VBc3NldEFtb3VudAkBBGRpdmQCBQxvcGVuTm90aW9uYWwFDV90cmlnZ2VyUHJpY2UEEm1pbkJhc2VBc3NldEFtb3VudAkAZQIFF2lkZWFsTWluQmFzZUFzc2V0QW1vdW50CQEEbXVsZAIFF2lkZWFsTWluQmFzZUFzc2V0QW1vdW50CQEOZ2V0U3ByZWFkTGltaXQACQCVCgMCEGluY3JlYXNlUG9zaXRpb24JAMwIAgUFX3NpZGUJAMwIAgUJX2xldmVyYWdlCQDMCAIFEm1pbkJhc2VBc3NldEFtb3VudAkAzAgCBQhfcmVmTGluawkAzAgCBQpfcHJpY2VEYXRhBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAULX2Ftb3VudFVzZG4FA25pbAkAAgECMkNhbiBub3QgZXhlY3V0ZSBMSU1JVCBvcmRlcjogdHJpZ2dlclByaWNlIG1pc21hdGNoCQACAQkArAICAhRJbnZhbGlkIG9yZGVyIHR5cGU6IAkApAMBBQVfdHlwZQQGbWV0aG9kCAUNJHQwMjc2MDMzMTU2NAJfMQQEYXJncwgFDSR0MDI3NjAzMzE1NjQCXzIECHBheW1lbnRzCAUNJHQwMjc2MDMzMTU2NAJfMwQId2l0aGRyYXcDCQAAAgkAkAMBBQhwYXltZW50cwABBAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIICQCRAwIFCHBheW1lbnRzAAAGYW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQh3aXRoZHJhdwUId2l0aGRyYXcEDGRvU2V0Q29udGV4dAkA/AcEBQR0aGlzAgpzZXRDb250ZXh0CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFDGRvU2V0Q29udGV4dAUMZG9TZXRDb250ZXh0BA9kb0Nsb3NlUG9zaXRpb24JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQUGbWV0aG9kBQRhcmdzBQhwYXltZW50cwMJAAACBQ9kb0Nsb3NlUG9zaXRpb24FD2RvQ2xvc2VQb3NpdGlvbgQOZG9SZXNldENvbnRleHQJAPwHBAUEdGhpcwIMcmVzZXRDb250ZXh0BQNuaWwFA25pbAMJAAACBQ5kb1Jlc2V0Q29udGV4dAUOZG9SZXNldENvbnRleHQEE2V4ZWN1dGVPcmRlclJlcXVlc3QDCQAAAgUFX3R5cGUFBUxJTUlUBA9uZXdQb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQ9uZXdQb3NpdGlvblNpemUFD25ld1Bvc2l0aW9uU2l6ZQQNbmV3UG9zaXRpb25JZAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQ1uZXdQb3NpdGlvbklkBQ1uZXdQb3NpdGlvbklkBBFwb3NpdGlvblNpemVEZWx0YQkAZQIFD25ld1Bvc2l0aW9uU2l6ZQUMcG9zaXRpb25TaXplBA5jbG9zZU9yZGVyU2lkZQMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUFU0hPUlQFBExPTkcEDW1ha2VUYWtlT3JkZXIDCQEQaGF2ZU9yZGVyUmVxdWVzdAIFCF9vcmRlcklkBQRUQUtFBA0kdDAzMjUyNjMyNzI1CQEPZ2V0T3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFRBS0UECm5ld09yZGVySWQIBQ0kdDAzMjUyNjMyNzI1Al8xBAZuZXdBbW0IBQ0kdDAzMjUyNjMyNzI1Al8yBAluZXdUcmFkZXIIBQ0kdDAzMjUyNjMyNzI1Al8zBAduZXdUeXBlCAUNJHQwMzI1MjYzMjcyNQJfNAQPbmV3VHJpZ2dlclByaWNlCAUNJHQwMzI1MjYzMjcyNQJfNQQNbmV3TGltaXRQcmljZQgFDSR0MDMyNTI2MzI3MjUCXzYEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFCW5ld1RyYWRlcgkAzAgCBQZuZXdBbW0JAMwIAgUHbmV3VHlwZQkAzAgCBQ9uZXdUcmlnZ2VyUHJpY2UJAMwIAgUNbmV3TGltaXRQcmljZQkAzAgCBRFwb3NpdGlvblNpemVEZWx0YQkAzAgCAAAJAMwIAgUOY2xvc2VPcmRlclNpZGUJAMwIAgIACQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAMJAAACBQZkb0NhbGwFBmRvQ2FsbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNbWFrZVRha2VPcmRlcgUNbWFrZVRha2VPcmRlcgQNbWFrZVN0b3BPcmRlcgMJARBoYXZlT3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFNUT1AEDSR0MDMzMjk4MzM0OTcJAQ9nZXRPcmRlclJlcXVlc3QCBQhfb3JkZXJJZAUEU1RPUAQKbmV3T3JkZXJJZAgFDSR0MDMzMjk4MzM0OTcCXzEEBm5ld0FtbQgFDSR0MDMzMjk4MzM0OTcCXzIECW5ld1RyYWRlcggFDSR0MDMzMjk4MzM0OTcCXzMEB25ld1R5cGUIBQ0kdDAzMzI5ODMzNDk3Al80BA9uZXdUcmlnZ2VyUHJpY2UIBQ0kdDAzMzI5ODMzNDk3Al81BA1uZXdMaW1pdFByaWNlCAUNJHQwMzMyOTgzMzQ5NwJfNgQGZG9DYWxsCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUJbmV3VHJhZGVyCQDMCAIFBm5ld0FtbQkAzAgCBQduZXdUeXBlCQDMCAIFD25ld1RyaWdnZXJQcmljZQkAzAgCBQ1uZXdMaW1pdFByaWNlCQDMCAIFEXBvc2l0aW9uU2l6ZURlbHRhCQDMCAIAAAkAzAgCBQ5jbG9zZU9yZGVyU2lkZQkAzAgCAgAJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBmRvQ2FsbAUGZG9DYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1tYWtlU3RvcE9yZGVyBQ1tYWtlU3RvcE9yZGVyCQDOCAIFDW1ha2VUYWtlT3JkZXIFDW1ha2VTdG9wT3JkZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNleGVjdXRlT3JkZXJSZXF1ZXN0BRNleGVjdXRlT3JkZXJSZXF1ZXN0BBNkb01hcmtPcmRlckV4ZWN1dGVkCQD8BwQFBHRoaXMCGWludGVybmFsTWFya09yZGVyRXhlY3V0ZWQJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIFCF9vcmRlcklkBQNuaWwFA25pbAMJAAACBRNkb01hcmtPcmRlckV4ZWN1dGVkBRNkb01hcmtPcmRlckV4ZWN1dGVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUdmlld19jYW5FeGVjdXRlT3JkZXICCF9vcmRlcklkCl9wcmljZURhdGEEAXMJAPwHBAUEdGhpcwIMZXhlY3V0ZU9yZGVyCQDMCAIFCF9vcmRlcklkCQDMCAIFCl9wcmljZURhdGEFA25pbAUDbmlsAwkAAAIFAXMFAXMJAAIBAgdTdWNjZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleTToC6Q=", "height": 2596165, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6ZD2cVk8pEHH5nRKaERNwRTzuYhXP6e6UCqqBEQjY1R5 Next: Eyuu2F6JpJ9FpbBT6W3bJh857HkZJtngdPaxMbLF1fN4 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_coordinatorAddress"
55
66 let b = "k_admin_address"
77
88 let c = "k_quote_asset"
99
1010 let d = "k_amm"
1111
1212 let e = "k_manager_address"
1313
1414 let f = "k_positionSequence"
1515
1616 let g = "k_positionSize"
1717
1818 let h = "k_executedOrders"
1919
2020 let i = "k_canceledOrders"
2121
2222 let j = "k_order"
2323
2424 let k = "k_orderReq"
2525
2626 let l = "k_lastOrderId"
2727
2828 let m = "k_traderOrderCnt"
2929
3030 let n = "k_traderOrderIds"
3131
3232 let o = "k_spreadLimit"
3333
3434 let p = "k_sender"
3535
3636 let q = "k_initialized"
3737
3838 let r = 1
3939
4040 let s = 2
4141
4242 let t = 3
4343
4444 let u = 1
4545
4646 let v = 2
4747
4848 let w = 1
4949
5050 let x = 2
5151
5252 let y = 10
5353
5454 let z = lastBlock.timestamp
5555
5656 let A = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
5757
5858 func B (C) = if ((C > 0))
5959 then C
6060 else -(C)
6161
6262
6363 func D (C,E) = fraction(C, A, E, HALFEVEN)
6464
6565
6666 func F (C,E) = fraction(C, E, A, HALFEVEN)
6767
6868
6969 func G (C,E) = if ((C > E))
7070 then E
7171 else C
7272
7373
7474 func H (I,J) = ((I + "_") + J)
7575
7676
7777 func K (L) = ((h + "_") + toString(L))
7878
7979
8080 func M (L) = ((i + "_") + toString(L))
8181
8282
8383 func N (L) = H(j, toString(L))
8484
8585
8686 func O (L,P) = ((((k + "_") + toString(L)) + "_") + toString(P))
8787
8888
8989 func Q (R,S) = ((((m + "_") + R) + "_") + S)
9090
9191
9292 func T (R,S) = ((((n + "_") + R) + "_") + S)
9393
9494
9595 func U () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
9696
9797
9898 func V () = addressFromString(getStringValue(U(), b))
9999
100100
101101 func W () = fromBase58String(getStringValue(U(), c))
102102
103103
104104 func X () = valueOrErrorMessage(addressFromString(getStringValue(U(), e)), "Manager not set")
105105
106106
107107 func Y (J) = valueOrElse(getBoolean(U(), H(d, J)), false)
108108
109109
110110 func Z () = valueOrElse(getBoolean(this, q), false)
111111
112112
113113 func aa (L) = if (valueOrElse(getBoolean(this, K(L)), false))
114114 then throw(("Order already executed: " + toString(L)))
115115 else if (valueOrElse(getBoolean(this, M(L)), false))
116116 then throw(("Order already cancelled: " + toString(L)))
117117 else true
118118
119119
120120 func ab () = valueOrErrorMessage(getInteger(this, o), "Spread limit not set")
121121
122122
123123 func ac () = valueOrElse(getInteger(this, l), 0)
124124
125125
126126 func ad (R,S) = {
127127 let ae = Q(R, S)
128128 valueOrElse(getInteger(this, ae), 0)
129129 }
130130
131131
132132 func af (R,S) = {
133133 let ae = T(R, S)
134134 let ag = valueOrElse(getString(this, ae), "")
135135 if ((ag == ""))
136136 then nil
137137 else split(ag, ",")
138138 }
139139
140140
141141 func ah (L,P) = {
142142 let ae = O(L, P)
143143 isDefined(getString(this, ae))
144144 }
145145
146146
147147 func ai (L,P) = {
148148 let ae = O(L, P)
149149 let aj = valueOrErrorMessage(getString(this, ae), ("Not order request for key: " + ae))
150150 let ak = split(aj, ",")
151151 let al = valueOrErrorMessage(parseInt(ak[0]), "Invalid orderId")
152152 let am = ak[1]
153153 let an = ak[2]
154154 let ao = valueOrErrorMessage(parseInt(ak[3]), "Invalid type")
155155 let ap = valueOrErrorMessage(parseInt(ak[4]), "Invalid triggerPrice")
156156 let aq = valueOrErrorMessage(parseInt(ak[5]), "Invalid limitPrice")
157157 $Tuple6(al, am, an, ao, ap, aq)
158158 }
159159
160160
161161 func ar (L) = {
162162 let as = valueOrErrorMessage(getString(this, N(L)), ("Invalid order id: " + toString(L)))
163163 let at = split(as, ",")
164164 let am = at[0]
165165 let an = at[1]
166166 let au = valueOrErrorMessage(parseInt(at[2]), "Invalid amountIn")
167167 let av = valueOrErrorMessage(parseInt(at[3]), "Invalid leverage")
168168 let ao = valueOrErrorMessage(parseInt(at[4]), "Invalid type")
169169 let ap = valueOrErrorMessage(parseInt(at[5]), "Invalid triggerPrice")
170170 let aw = valueOrErrorMessage(parseInt(at[6]), "Invalid paymentUsdn")
171171 let ax = valueOrErrorMessage(parseInt(at[7]), "Invalid side")
172172 let ay = at[8]
173173 let az = valueOrErrorMessage(parseInt(at[9]), "Invalid positionId")
174174 let aq = valueOrErrorMessage(parseInt(at[10]), "Invalid limitPrice")
175175 let aA = if ((size(at) > 11))
176176 then valueOrErrorMessage(parseInt(at[11]), "Invalid expiration")
177177 else 0
178178 let aB = if ((size(at) > 12))
179179 then valueOrErrorMessage(parseInt(at[12]), "Invalid orderMarketPrice")
180180 else 0
181181 $Tuple13(am, an, au, av, ao, ap, aw, ax, ay, az, aq, aA, aB)
182182 }
183183
184184
185185 func aC (R) = {
186186 let aD = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
187187 if ((aD == aD))
188188 then {
189189 let aE = {
190190 let aF = aD
191191 if ($isInstanceOf(aF, "Int"))
192192 then {
193193 let aG = aF
194194 aG
195195 }
196196 else throw("Invalid computeSpotPrice result")
197197 }
198198 value(aE)
199199 }
200200 else throw("Strict value is not equal to itself.")
201201 }
202202
203203
204204 func aH (R,S) = {
205205 let aD = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
206206 if ((aD == aD))
207207 then {
208208 let aE = {
209209 let aF = aD
210210 if ($isInstanceOf(aF, "(Int, Boolean)"))
211211 then {
212212 let aG = aF
213213 aG._1
214214 }
215215 else throw("Invalid computeFeeForTraderWithArtifact result")
216216 }
217217 value(aE)
218218 }
219219 else throw("Strict value is not equal to itself.")
220220 }
221221
222222
223223 func aI (aJ,aK) = if (if ((aK == s))
224224 then true
225225 else (aK == r))
226226 then if ((aJ == u))
227227 then v
228228 else u
229229 else aJ
230230
231231
232232 func aL (R,S,aM) = {
233233 let am = addressFromStringValue(R)
234234 let aN = ((S + "_") + toString(aM))
235235 let aO = H(g, aN)
236236 valueOrElse(getInteger(am, aO), 0)
237237 }
238238
239239
240240 func aP (R,S,aM) = {
241241 let am = addressFromStringValue(R)
242242 let aN = ((S + "_") + toString(aM))
243243 let aQ = H(f, aN)
244244 valueOrElse(getInteger(am, aQ), 0)
245245 }
246246
247247
248248 func aR (aS) = F(aS, ab())
249249
250250
251251 func aT (L,R,S,aU,aV,P,aW,aX,aY,aZ,ba,bb,bc,bd) = {
252252 let as = makeString([R, S, toString(aU), toString(aV), toString(P), toString(aW), toString(aX), toString(aY), aZ, toString(ba), toString(bb), toString(bc), toString(bd)], ",")
253253 [StringEntry(N(L), as)]
254254 }
255255
256256
257257 func be (L,R,S,P,aW,bb) = {
258258 let bf = makeString([toString(L), R, S, toString(P), toString(aW), toString(bb)], ",")
259259 [StringEntry(O(L, P), bf)]
260260 }
261261
262262
263263 func bg (bh,R,S) = [StringEntry(T(R, S), bh)]
264264
265265
266266 func bi (bj,L,R,S,bk) = {
267267 let bl = if (bk)
268268 then (bj :+ toString(L))
269269 else removeByIndex(bj, valueOrErrorMessage(indexOf(bj, toString(L)), ("No order with id: " + toString(L))))
270270 bl
271271 }
272272
273273
274274 func bm (L,R,S,bk) = {
275275 let bn = af(R, S)
276276 let bl = bi(bn, L, R, S, bk)
277277 let bo = makeString(bl, ",")
278278 bg(bo, R, S)
279279 }
280280
281281
282282 func bp (R,S,bq) = if ((0 > bq))
283283 then throw(("Invalid order count: " + toString(bq)))
284284 else [IntegerEntry(Q(R, S), bq)]
285285
286286
287287 func br (bs) = [IntegerEntry(l, bs)]
288288
289289
290290 func bt (L) = [BooleanEntry(H(h, toString(L)), true)]
291291
292292
293293 func bu (L) = [BooleanEntry(H(i, toString(L)), true)]
294294
295295
296296 func bv (R,S) = {
297297 let bw = aL(R, S, u)
298298 let bx = if ((bw != 0))
299299 then aP(R, S, u)
300300 else 0
301301 let by = aL(R, S, v)
302302 let bz = if ((by != 0))
303303 then aP(R, S, v)
304304 else 0
305305 [bx, bz]
306306 }
307307
308308
309309 @Callable(bA)
310310 func cleanUpStaleOrders (R,S) = {
311311 let bB = af(R, S)
312312 let bC = bv(R, S)
313313 func bD (bE,L) = {
314314 let bF = valueOrErrorMessage(parseInt(L), "Invalid order id")
315315 let bG = ar(bF)
316316 let bH = bG._1
317317 let bI = bG._2
318318 let bJ = bG._3
319319 let bK = bG._4
320320 let P = bG._5
321321 let bL = bG._6
322322 let bM = bG._7
323323 let bN = bG._8
324324 let bO = bG._9
325325 let ba = bG._10
326326 let bP = bG._11
327327 let bc = bG._12
328328 let bQ = if (if (if ((P == r))
329329 then true
330330 else (P == s))
331331 then (bC[0] != ba)
332332 else false)
333333 then (bC[1] != ba)
334334 else false
335335 let bR = if ((P == t))
336336 then (lastBlock.timestamp >= bc)
337337 else false
338338 if (if (bQ)
339339 then true
340340 else bR)
341341 then {
342342 let bS = bu(bF)
343343 let bT = bi(bE._1, bF, R, S, false)
344344 $Tuple2(bT, (bE._2 ++ bS))
345345 }
346346 else bE
347347 }
348348
349349 let bU = {
350350 let bV = bB
351351 let bW = size(bV)
352352 let bX = $Tuple2(bB, nil)
353353 func bY (bZ,ca) = if ((ca >= bW))
354354 then bZ
355355 else bD(bZ, bV[ca])
356356
357357 func cb (bZ,ca) = if ((ca >= bW))
358358 then bZ
359359 else throw("List size exceeds 10")
360360
361361 cb(bY(bY(bY(bY(bY(bY(bY(bY(bY(bY(bX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
362362 }
363363 let cc = bU._1
364364 let cd = bU._2
365365 ((cd ++ bp(R, S, size(cc))) ++ bg(makeString(cc, ","), R, S))
366366 }
367367
368368
369369
370370 @Callable(bA)
371371 func setContext (ce) = if ((bA.caller != this))
372372 then throw("Only self-call")
373373 else [StringEntry(p, ce)]
374374
375375
376376
377377 @Callable(bA)
378378 func resetContext () = if ((bA.caller != this))
379379 then throw("Only self-call")
380380 else [DeleteEntry(p)]
381381
382382
383383
384384 @Callable(bA)
385385 func initialize (cf,cg) = if (if (if (Z())
386386 then true
387387 else if ((0 > cg))
388388 then true
389389 else (cg > (A / 10)))
390390 then true
391391 else (bA.caller != this))
392392 then throw("Unable to initialize")
393393 else [StringEntry(a, toString(addressFromStringValue(cf))), IntegerEntry(o, cg), BooleanEntry(q, true)]
394394
395395
396396
397397 @Callable(bA)
398398 func changeSettings (cg) = if (if ((bA.caller != V()))
399399 then true
400400 else if ((0 > cg))
401401 then true
402402 else (cg > (A / 10)))
403403 then throw("Invalid changeSettings params")
404404 else [IntegerEntry(o, cg)]
405405
406406
407407
408408 @Callable(bA)
409409 func createOrder (R,P,aW,bb,aU,aV,aY,aZ,ch,ci,cj,ck,bc) = {
410410 let S = toString(bA.caller)
411411 let cl = invoke(this, "cleanUpStaleOrders", [R, S], nil)
412412 if ((cl == cl))
413413 then if ((size(bA.payments) > 1))
414414 then throw("Invalid createOrder parameters: invalid payment count")
415415 else {
416416 let cm = if ((size(bA.payments) == 1))
417417 then $Tuple2(toBase58String(valueOrErrorMessage(bA.payments[0].assetId, "Invalid asset id")), bA.payments[0].amount)
418418 else $Tuple2("", 0)
419419 let cn = cm._1
420420 let co = cm._2
421421 let cp = invoke(this, "internalCreateOrder", [S, R, P, aW, bb, aU, aV, aY, aZ, cn, co, bc], nil)
422422 if ((cp == cp))
423423 then {
424424 let al = {
425425 let aF = cp
426426 if ($isInstanceOf(aF, "Int"))
427427 then {
428428 let aG = aF
429429 aG
430430 }
431431 else throw("Invalid ID of created order")
432432 }
433433 if ((P == t))
434434 then {
435435 let cq = if ((ch > 0))
436436 then {
437437 let cr = invoke(this, "internalCreateOrderRequest", [S, R, al, r, ch, ci], nil)
438438 if ((cr == cr))
439439 then nil
440440 else throw("Strict value is not equal to itself.")
441441 }
442442 else nil
443443 let cs = if ((cj > 0))
444444 then {
445445 let ct = invoke(this, "internalCreateOrderRequest", [S, R, al, s, cj, ck], nil)
446446 if ((ct == ct))
447447 then nil
448448 else throw("Strict value is not equal to itself.")
449449 }
450450 else nil
451451 (cq ++ cs)
452452 }
453453 else nil
454454 }
455455 else throw("Strict value is not equal to itself.")
456456 }
457457 else throw("Strict value is not equal to itself.")
458458 }
459459
460460
461461
462462 @Callable(bA)
463463 func increasePositionWithStopLoss (R,aM,aV,cu,aZ,ch,ci,cj,ck,cv) = {
464464 let S = toString(bA.caller)
465465 let cl = invoke(this, "cleanUpStaleOrders", [R, S], nil)
466466 if ((cl == cl))
467467 then if (if (!(Z()))
468468 then true
469469 else !(Y(R)))
470470 then throw("Invalid increasePositionWithStopLoss parameters")
471471 else {
472472 let cw = aL(R, S, aM)
473473 if ((cw != 0))
474474 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
475475 else {
476476 let cx = invoke(this, "setContext", [S], nil)
477477 if ((cx == cx))
478478 then {
479479 let cy = invoke(addressFromStringValue(R), "increasePosition", [aM, aV, cu, aZ, cv], bA.payments)
480480 if ((cy == cy))
481481 then {
482482 let cz = invoke(this, "resetContext", nil, nil)
483483 if ((cz == cz))
484484 then {
485485 let cA = aL(R, S, aM)
486486 if ((cA == cA))
487487 then {
488488 let au = B(cA)
489489 if ((au == au))
490490 then {
491491 let cB = if ((0 > cA))
492492 then u
493493 else v
494494 let cC = if ((0 >= au))
495495 then {
496496 let cD = makeString([R, S, toString(aM), toString(aV), toString(cu), aZ, cv], ",")
497497 throw(((("Invalid amountIn=" + toString(au)) + " after success increasePosition: ") + cD))
498498 }
499499 else 0
500500 if ((cC == cC))
501501 then {
502502 let cE = if ((ch > 0))
503503 then {
504504 let cE = invoke(this, "internalCreateOrder", [S, R, r, ch, ci, au, 0, cB, aZ, "", 0, 0], nil)
505505 if ((cE == cE))
506506 then nil
507507 else throw("Strict value is not equal to itself.")
508508 }
509509 else nil
510510 if ((cE == cE))
511511 then {
512512 let cF = if ((cj > 0))
513513 then {
514514 let cF = invoke(this, "internalCreateOrder", [S, R, s, cj, ck, au, 0, cB, aZ, "", 0, 0], nil)
515515 if ((cF == cF))
516516 then nil
517517 else throw("Strict value is not equal to itself.")
518518 }
519519 else nil
520520 if ((cF == cF))
521521 then nil
522522 else throw("Strict value is not equal to itself.")
523523 }
524524 else throw("Strict value is not equal to itself.")
525525 }
526526 else throw("Strict value is not equal to itself.")
527527 }
528528 else throw("Strict value is not equal to itself.")
529529 }
530530 else throw("Strict value is not equal to itself.")
531531 }
532532 else throw("Strict value is not equal to itself.")
533533 }
534534 else throw("Strict value is not equal to itself.")
535535 }
536536 else throw("Strict value is not equal to itself.")
537537 }
538538 }
539539 else throw("Strict value is not equal to itself.")
540540 }
541541
542542
543543
544544 @Callable(bA)
545545 func internalMarkOrderExecuted (R,S,L) = if (if (if (!(Z()))
546546 then true
547547 else !(Y(R)))
548548 then true
549549 else !((bA.caller == this)))
550550 then throw("Invalid internalMarkOrderExecuted parameters")
551551 else {
552552 let cG = (ad(R, S) - 1)
553553 ((bp(R, S, cG) ++ bm(L, R, S, false)) ++ bt(L))
554554 }
555555
556556
557557
558558 @Callable(bA)
559559 func internalCreateOrderRequest (S,R,L,P,aW,bb) = if (if (if (if (if (!(Z()))
560560 then true
561561 else !(Y(R)))
562562 then true
563563 else (0 >= aW))
564564 then true
565565 else (0 > bb))
566566 then true
567567 else !((bA.caller == this)))
568568 then throw("Invalid internalCreateOrderRequest parameters")
569569 else be(L, R, S, P, aW, bb)
570570
571571
572572
573573 @Callable(bA)
574574 func internalCreateOrder (S,R,P,aW,bb,aU,aV,aY,aZ,cH,cI,bc) = if (if (if (if (if (if (if (if (if (if (!(Z()))
575575 then true
576576 else !(Y(R)))
577577 then true
578578 else (0 >= aW))
579579 then true
580580 else (0 > bb))
581581 then true
582582 else (0 >= aU))
583583 then true
584584 else (0 > aV))
585585 then true
586586 else !(if ((aY == u))
587587 then true
588588 else (aY == v)))
589589 then true
590590 else !(if (if ((P == r))
591591 then true
592592 else (P == s))
593593 then true
594594 else (P == t)))
595595 then true
596596 else !((bA.caller == this)))
597597 then true
598598 else (0 > bc))
599599 then throw("Invalid internalCreateOrder parameters")
600600 else {
601601 let al = (ac() + 1)
602602 let cJ = aI(aY, P)
603603 let cG = (ad(R, S) + 1)
604604 let cw = aL(R, S, cJ)
605605 let cK = aC(R)
606606 let aM = if (if (if ((cw == 0))
607607 then true
608608 else if ((cw > 0))
609609 then (aY == u)
610610 else false)
611611 then true
612612 else if ((0 > cw))
613613 then (aY == v)
614614 else false)
615615 then w
616616 else x
617617 if (if ((cw == 0))
618618 then if ((P == r))
619619 then true
620620 else (P == s)
621621 else false)
622622 then throw("Can not create STOP/TAKE order: no position")
623623 else {
624624 let cL = if ((aM == w))
625625 then if (if ((cH != toBase58String(W())))
626626 then true
627627 else (cI != aU))
628628 then throw("Invalid createLimitOrder parameters: invalid payment")
629629 else {
630630 let cM = invoke(X(), "deposit", nil, [AttachedPayment(W(), cI)])
631631 if ((cM == cM))
632632 then cI
633633 else throw("Strict value is not equal to itself.")
634634 }
635635 else 0
636636 if ((cL == cL))
637637 then {
638638 let az = if ((cw != 0))
639639 then aP(R, S, cJ)
640640 else 0
641641 if (if (if ((P == r))
642642 then true
643643 else (P == s))
644644 then (az == 0)
645645 else false)
646646 then throw("STOP and TAKE order should be assigned to position with id != 0")
647647 else if ((cG > y))
648648 then throw("Invalid createLimitOrder parameters: order count")
649649 else {
650650 let cN = (((aT(al, R, S, aU, aV, P, aW, cL, aY, aZ, az, bb, bc, cK) ++ bm(al, R, S, true)) ++ bp(R, S, cG)) ++ br(al))
651651 $Tuple2(cN, al)
652652 }
653653 }
654654 else throw("Strict value is not equal to itself.")
655655 }
656656 }
657657
658658
659659
660660 @Callable(bA)
661661 func cancelOrder (L) = {
662662 let cO = ar(L)
663663 let R = cO._1
664664 let S = cO._2
665665 let aU = cO._3
666666 let aV = cO._4
667667 let P = cO._5
668668 let aW = cO._6
669669 let cP = cO._7
670670 if (if (if (!(Z()))
671671 then true
672672 else !(aa(L)))
673673 then true
674674 else !((toString(bA.caller) == S)))
675675 then throw("Invalid cancelOrder parameters")
676676 else {
677677 let cl = invoke(this, "cleanUpStaleOrders", [R, S], nil)
678678 if ((cl == cl))
679679 then {
680680 let cG = (ad(R, S) - 1)
681681 let cQ = if ((cP > 0))
682682 then {
683683 let cR = invoke(X(), "withdraw", [toBase58String(W()), cP], nil)
684684 if ((cR == cR))
685685 then nil
686686 else throw("Strict value is not equal to itself.")
687687 }
688688 else nil
689689 if ((cQ == cQ))
690690 then (((bu(L) ++ bm(L, R, S, false)) ++ bp(R, S, cG)) ++ (if ((cP > 0))
691691 then [ScriptTransfer(bA.caller, cP, W())]
692692 else nil))
693693 else throw("Strict value is not equal to itself.")
694694 }
695695 else throw("Strict value is not equal to itself.")
696696 }
697697 }
698698
699699
700700
701701 @Callable(bA)
702702 func executeOrder (L,cv) = {
703703 let cS = ar(L)
704704 let R = cS._1
705705 let S = cS._2
706706 let aU = cS._3
707707 let aV = cS._4
708708 let P = cS._5
709709 let aW = cS._6
710710 let cP = cS._7
711711 let aY = cS._8
712712 let aZ = cS._9
713713 let ba = cS._10
714714 let bb = cS._11
715715 let cT = cS._12
716716 let bd = cS._13
717717 let cl = invoke(this, "cleanUpStaleOrders", [R, S], nil)
718718 if ((cl == cl))
719719 then {
720720 let cJ = aI(aY, P)
721721 if (if (!(Z()))
722722 then true
723723 else !(aa(L)))
724724 then throw("Invalid executeOrder parameters")
725725 else {
726726 let cw = aL(R, S, cJ)
727727 if ((cw == cw))
728728 then {
729729 let cU = if ((cw != 0))
730730 then aP(R, S, cJ)
731731 else 0
732732 let cV = if ((P == r))
733733 then {
734734 let cW = if ((cw > 0))
735735 then u
736736 else if ((0 > cw))
737737 then v
738738 else throw("Can not execute STOP order: no open position")
739739 let aB = aC(R)
740740 let cX = if ((aY == cW))
741741 then throw("Can not execute STOP order: reduce only")
742742 else if ((cU != ba))
743743 then throw("Can not execute STOP order: position closed")
744744 else if ((cW == u))
745745 then (aW >= aB)
746746 else (aB >= aW)
747747 if (cX)
748748 then $Tuple3("closePosition", [G(aU, B(cw)), cJ, F(bb, B(cw)), false, cv], nil)
749749 else throw("Can not execute STOP order: triggerPrice mismatch")
750750 }
751751 else if ((P == s))
752752 then {
753753 let cW = if ((cw > 0))
754754 then u
755755 else if ((0 > cw))
756756 then v
757757 else throw("Can not execute STOP order: no open position")
758758 let aB = aC(R)
759759 let cX = if ((aY == cW))
760760 then throw("Can not execute TAKE order: reduce only")
761761 else if ((cU != ba))
762762 then throw(((("Can not execute TAKE order: position closed " + toString(cU)) + "!=") + toString(ba)))
763763 else if ((cW == u))
764764 then (aB >= aW)
765765 else (aW >= aB)
766766 if (cX)
767767 then $Tuple3("closePosition", [G(aU, B(cw)), cJ, F(bb, B(cw)), false, cv], nil)
768768 else throw("Can not execute TAKE order: triggerPrice mismatch")
769769 }
770770 else if ((P == t))
771771 then {
772772 let aB = aC(R)
773773 let cY = if ((bb == 0))
774774 then true
775775 else if ((bb > bd))
776776 then (aB >= bb)
777777 else (bb >= aB)
778778 let cZ = if ((aY == u))
779779 then (aW >= aB)
780780 else (aB >= aW)
781781 let cX = if (cY)
782782 then cZ
783783 else false
784784 if (cX)
785785 then {
786786 let da = D(cP, (F(aH(R, S), aV) + A))
787787 let db = F(da, aV)
788788 let dc = D(db, aW)
789789 let dd = (dc - F(dc, ab()))
790790 $Tuple3("increasePosition", [aY, aV, dd, aZ, cv], [AttachedPayment(W(), cP)])
791791 }
792792 else throw("Can not execute LIMIT order: triggerPrice mismatch")
793793 }
794794 else throw(("Invalid order type: " + toString(P)))
795795 let de = cV._1
796796 let df = cV._2
797797 let dg = cV._3
798798 let cQ = if ((size(dg) == 1))
799799 then {
800800 let cR = invoke(X(), "withdraw", [toBase58String(W()), dg[0].amount], nil)
801801 if ((cR == cR))
802802 then nil
803803 else throw("Strict value is not equal to itself.")
804804 }
805805 else nil
806806 if ((cQ == cQ))
807807 then {
808808 let cx = invoke(this, "setContext", [S], nil)
809809 if ((cx == cx))
810810 then {
811811 let dh = invoke(addressFromStringValue(R), de, df, dg)
812812 if ((dh == dh))
813813 then {
814814 let cz = invoke(this, "resetContext", nil, nil)
815815 if ((cz == cz))
816816 then {
817817 let di = if ((P == t))
818818 then {
819819 let dj = aL(R, S, cJ)
820820 if ((dj == dj))
821821 then {
822822 let dk = aP(R, S, cJ)
823823 if ((dk == dk))
824824 then {
825825 let dl = (dj - cw)
826826 let dm = if ((dj > 0))
827827 then v
828828 else u
829829 let dn = if (ah(L, s))
830830 then {
831831 let do = ai(L, s)
832832 let dp = do._1
833833 let dq = do._2
834834 let dr = do._3
835835 let ds = do._4
836836 let dt = do._5
837837 let du = do._6
838838 let cp = invoke(this, "internalCreateOrder", [dr, dq, ds, dt, du, dl, 0, dm, "", "", 0, 0], nil)
839839 if ((cp == cp))
840840 then nil
841841 else throw("Strict value is not equal to itself.")
842842 }
843843 else nil
844844 if ((dn == dn))
845845 then {
846846 let dv = if (ah(L, r))
847847 then {
848848 let dw = ai(L, r)
849849 let dp = dw._1
850850 let dq = dw._2
851851 let dr = dw._3
852852 let ds = dw._4
853853 let dt = dw._5
854854 let du = dw._6
855855 let cp = invoke(this, "internalCreateOrder", [dr, dq, ds, dt, du, dl, 0, dm, "", "", 0, 0], nil)
856856 if ((cp == cp))
857857 then nil
858858 else throw("Strict value is not equal to itself.")
859859 }
860860 else nil
861861 if ((dv == dv))
862862 then (dn ++ dv)
863863 else throw("Strict value is not equal to itself.")
864864 }
865865 else throw("Strict value is not equal to itself.")
866866 }
867867 else throw("Strict value is not equal to itself.")
868868 }
869869 else throw("Strict value is not equal to itself.")
870870 }
871871 else nil
872872 if ((di == di))
873873 then {
874874 let dx = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
875875 if ((dx == dx))
876876 then nil
877877 else throw("Strict value is not equal to itself.")
878878 }
879879 else throw("Strict value is not equal to itself.")
880880 }
881881 else throw("Strict value is not equal to itself.")
882882 }
883883 else throw("Strict value is not equal to itself.")
884884 }
885885 else throw("Strict value is not equal to itself.")
886886 }
887887 else throw("Strict value is not equal to itself.")
888888 }
889889 else throw("Strict value is not equal to itself.")
890890 }
891891 }
892892 else throw("Strict value is not equal to itself.")
893893 }
894894
895895
896896
897897 @Callable(bA)
898898 func view_canExecuteOrder (L,cv) = {
899899 let aD = invoke(this, "executeOrder", [L, cv], nil)
900900 if ((aD == aD))
901901 then throw("Success")
902902 else throw("Strict value is not equal to itself.")
903903 }
904904
905905
906906 @Verifier(dy)
907907 func dz () = {
908908 let dA = getString(this, a)
909909 if (isDefined(dA))
910910 then {
911911 let dB = getString(addressFromStringValue(value(dA)), b)
912912 if (isDefined(dB))
913913 then valueOrElse(getBoolean(addressFromStringValue(value(dB)), ((("status_" + toString(this)) + "_") + toBase58String(dy.id))), false)
914914 else throw("unable to verify: admin not set in coordinator")
915915 }
916916 else sigVerify(dy.bodyBytes, dy.proofs[0], dy.senderPublicKey)
917917 }
918918

github/deemru/w8io/873ac7e 
111.59 ms