tx · D3U1NZrYntYoAQiuS775RNur1fupPcWYyBm42cQB9gqC

3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa:  -0.03700000 Waves

2023.05.15 12:58 [2578921] smart account 3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa > SELF 0.00000000 Waves

{ "type": 13, "id": "D3U1NZrYntYoAQiuS775RNur1fupPcWYyBm42cQB9gqC", "fee": 3700000, "feeAssetId": null, "timestamp": 1684144706545, "version": 2, "chainId": 84, "sender": "3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa", "senderPublicKey": "4EBKd2zSCvpiSLeyovT5FUuMvGpi6oxdBAbvQybSYi6p", "proofs": [ "x7n3h64ym5DLCiUQ7QzA9mgAjjoQr3MNkUgVqRkZtbRCt2f8hwZFFGtCUCHUezgktxf79XhYrAEhdQPhmXcSd3t" ], "script": "base64:BgJlCAISBAoCCAgSAwoBCBIAEgMKAQgSDwoNCAEBAQEBAQgBAQEBARIMCgoIAQEBCAEBAQEIEgUKAwgIARIICgYICAEBAQESDgoMCAgBAQEBAQEICAEBEgMKAQESBAoCAQgSBAoCAQhCABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AAVrX2FtbQIFa19hbW0AEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19leGVjdXRlZE9yZGVycwIQa19leGVjdXRlZE9yZGVycwAQa19jYW5jZWxlZE9yZGVycwIQa19jYW5jZWxlZE9yZGVycwAHa19vcmRlcgIHa19vcmRlcgAOa19vcmRlclJlcXVlc3QCCmtfb3JkZXJSZXEADWtfbGFzdE9yZGVySWQCDWtfbGFzdE9yZGVySWQAEGtfdHJhZGVyT3JkZXJDbnQCEGtfdHJhZGVyT3JkZXJDbnQAEGtfdHJhZGVyT3JkZXJJZHMCEGtfdHJhZGVyT3JkZXJJZHMACGtfc2VuZGVyAghrX3NlbmRlcgANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAEU1RPUAABAARUQUtFAAIABUxJTUlUAAMABExPTkcAAQAFU0hPUlQAAgAISU5DUkVBU0UAAQAIREVDUkVBU0UAAgAZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQAKAARUSU1FCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoADFNQUkVBRF9MSU1JVAkAaQIFDERFQ0lNQUxfVU5JVADIAQEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEZGl2ZAICX3gCX3kJAG4EBQJfeAUMREVDSU1BTF9VTklUBQJfeQUISEFMRkVWRU4BBG11bGQCAl94Al95CQBuBAUCX3gFAl95BQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQRtaW52AgJfeAJfeQMJAGYCBQJfeAUCX3kFAl95BQJfeAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwEQZXhlY3V0ZWRPcmRlcktleQEIX29yZGVySWQJAKwCAgkArAICBRBrX2V4ZWN1dGVkT3JkZXJzAgFfCQCkAwEFCF9vcmRlcklkARBjYW5jZWxlZE9yZGVyS2V5AQhfb3JkZXJJZAkArAICCQCsAgIFEGtfY2FuY2VsZWRPcmRlcnMCAV8JAKQDAQUIX29yZGVySWQBCG9yZGVyS2V5AQhfb3JkZXJJZAkBDnRvQ29tcG9zaXRlS2V5AgUHa19vcmRlcgkApAMBBQhfb3JkZXJJZAEPb3JkZXJSZXF1ZXN0S2V5Aghfb3JkZXJJZAVfdHlwZQkArAICCQCsAgIJAKwCAgkArAICBQ5rX29yZGVyUmVxdWVzdAIBXwkApAMBBQhfb3JkZXJJZAIBXwkApAMBBQVfdHlwZQETdHJhZGVyT3JkZXJDb3VudEtleQIEX2FtbQdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfdHJhZGVyT3JkZXJDbnQCAV8FBF9hbW0CAV8FB190cmFkZXIBEXRyYWRlck9yZGVySWRzS2V5AgRfYW1tB190cmFkZXIJAKwCAgkArAICCQCsAgIJAKwCAgUQa190cmFkZXJPcmRlcklkcwIBXwUEX2FtbQIBXwUHX3RyYWRlcgELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBDm1hbmFnZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQBC2lzV2hpdGVsaXN0AQhfYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmwgCCQELY29vcmRpbmF0b3IACQEOdG9Db21wb3NpdGVLZXkCBQVrX2FtbQUIX2FkZHJlc3MHAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBB2lzVmFsaWQBCF9vcmRlcklkAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEQZXhlY3V0ZWRPcmRlcktleQEFCF9vcmRlcklkBwkAAgEJAKwCAgIYT3JkZXIgYWxyZWFkeSBleGVjdXRlZDogCQCkAwEFCF9vcmRlcklkAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEQY2FuY2VsZWRPcmRlcktleQEFCF9vcmRlcklkBwkAAgEJAKwCAgIZT3JkZXIgYWxyZWFkeSBjYW5jZWxsZWQ6IAkApAMBBQhfb3JkZXJJZAYBDmN1cnJlbnRPcmRlcklkAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ1rX2xhc3RPcmRlcklkAAABE2dldFRyYWRlck9yZGVyQ291bnQCBF9hbW0HX3RyYWRlcgQDa2V5CQETdHJhZGVyT3JkZXJDb3VudEtleQIFBF9hbW0FB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABEnRyYWRlckFtbU9yZGVyc0lkcwIEX2FtbQdfdHJhZGVyBANrZXkJARF0cmFkZXJPcmRlcklkc0tleQIFBF9hbW0FB190cmFkZXIEA3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAMJAAACBQN2YWwCAAUDbmlsCQC1CQIFA3ZhbAIBLAEQaGF2ZU9yZGVyUmVxdWVzdAIIX29yZGVySWQFX3R5cGUEA2tleQkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5AQ9nZXRPcmRlclJlcXVlc3QCCF9vcmRlcklkBV90eXBlBANrZXkJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUED29yZGVyUmVxdWVzdFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICAhtOb3Qgb3JkZXIgcmVxdWVzdCBmb3Iga2V5OiAFA2tleQQUb3JkZXJSZXF1ZXN0UGFydExpc3QJALUJAgUPb3JkZXJSZXF1ZXN0U3RyAgEsBAdvcmRlcklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAAAg9JbnZhbGlkIG9yZGVySWQEA2FtbQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAABBAZ0cmFkZXIJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAgQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAwIMSW52YWxpZCB0eXBlBAx0cmlnZ2VyUHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFFG9yZGVyUmVxdWVzdFBhcnRMaXN0AAQCFEludmFsaWQgdHJpZ2dlclByaWNlBApsaW1pdFByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAFAhJJbnZhbGlkIGxpbWl0UHJpY2UJAJgKBgUHb3JkZXJJZAUDYW1tBQZ0cmFkZXIFBHR5cGUFDHRyaWdnZXJQcmljZQUKbGltaXRQcmljZQEIZ2V0T3JkZXIBCF9vcmRlcklkBAhvcmRlclN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAQhvcmRlcktleQEFCF9vcmRlcklkCQCsAgICEkludmFsaWQgb3JkZXIgaWQ6IAkApAMBBQhfb3JkZXJJZAQNb3JkZXJQYXJ0TGlzdAkAtQkCBQhvcmRlclN0cgIBLAQDYW1tCQCRAwIFDW9yZGVyUGFydExpc3QAAAQGdHJhZGVyCQCRAwIFDW9yZGVyUGFydExpc3QAAQQIYW1vdW50SW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAgIQSW52YWxpZCBhbW91bnRJbgQIbGV2ZXJhZ2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QAAwIQSW52YWxpZCBsZXZlcmFnZQQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAEAgxJbnZhbGlkIHR5cGUEDHRyaWdnZXJQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAFAhRJbnZhbGlkIHRyaWdnZXJQcmljZQQLcGF5bWVudFVzZG4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABgITSW52YWxpZCBwYXltZW50VXNkbgQEc2lkZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAHAgxJbnZhbGlkIHNpZGUEB3JlZkxpbmsJAJEDAgUNb3JkZXJQYXJ0TGlzdAAIBApwb3NpdGlvbklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAkCEkludmFsaWQgcG9zaXRpb25JZAQKbGltaXRQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAKAhJJbnZhbGlkIGxpbWl0UHJpY2UECmV4cGlyYXRpb24DCQBmAgkAkAMBBQ1vcmRlclBhcnRMaXN0AAsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QACwISSW52YWxpZCBsaW1pdFByaWNlAAAJAJ4KDAUDYW1tBQZ0cmFkZXIFCGFtb3VudEluBQhsZXZlcmFnZQUEdHlwZQUMdHJpZ2dlclByaWNlBQtwYXltZW50VXNkbgUEc2lkZQUHcmVmTGluawUKcG9zaXRpb25JZAUKbGltaXRQcmljZQUKZXhwaXJhdGlvbgEOZ2V0TWFya2V0UHJpY2UBBF9hbW0EAXMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIQY29tcHV0ZVNwb3RQcmljZQUDbmlsBQNuaWwDCQAAAgUBcwUBcwQDcmVzBAckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACA0ludAQBdAUHJG1hdGNoMAUBdAkAAgECH0ludmFsaWQgY29tcHV0ZVNwb3RQcmljZSByZXN1bHQJAQV2YWx1ZQEFA3JlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEGZ2V0RmVlAgRfYW1tB190cmFkZXIEAXMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEX2FtbQIfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAkAzAgCBQdfdHJhZGVyCQDMCAICAAUDbmlsBQNuaWwDCQAAAgUBcwUBcwQDcmVzBAckbWF0Y2gwBQFzAwkAAQIFByRtYXRjaDACDihJbnQsIEJvb2xlYW4pBAF0BQckbWF0Y2gwCAUBdAJfMQkAAgECLkludmFsaWQgY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdCByZXN1bHQJAQV2YWx1ZQEFA3JlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEUZ2V0UG9zaXRpb25EaXJlY3Rpb24CCl9vcmRlclNpZGUKX29yZGVyVHlwZQMDCQAAAgUKX29yZGVyVHlwZQUEVEFLRQYJAAACBQpfb3JkZXJUeXBlBQRTVE9QAwkAAAIFCl9vcmRlclNpZGUFBExPTkcFBVNIT1JUBQRMT05HBQpfb3JkZXJTaWRlAQ9nZXRQb3NpdGlvblNpemUDBF9hbW0HX3RyYWRlcgpfZGlyZWN0aW9uBANhbW0JARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uBAdzaXplS2V5CQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUDYW1tBQdzaXplS2V5AAABDWdldFBvc2l0aW9uSWQDBF9hbW0HX3RyYWRlcgpfZGlyZWN0aW9uBANhbW0JARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uBAZzZXFLZXkJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUDYW1tBQZzZXFLZXkAAAEJZ2V0U3ByZWFkAQZfcHJpY2UJAQRtdWxkAgUGX3ByaWNlBQxTUFJFQURfTElNSVQBCXNhdmVPcmRlcg0IX29yZGVySWQEX2FtbQdfdHJhZGVyCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3R5cGUNX3RyaWdnZXJQcmljZQxfcGF5bWVudFVzZG4FX3NpZGUIX3JlZkxpbmsLX3Bvc2l0aW9uSWQLX2xpbWl0UHJpY2ULX2V4cGlyYXRpb24ECG9yZGVyU3RyCQC5CQIJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIJAKQDAQUJX2Ftb3VudEluCQDMCAIJAKQDAQUJX2xldmVyYWdlCQDMCAIJAKQDAQUFX3R5cGUJAMwIAgkApAMBBQ1fdHJpZ2dlclByaWNlCQDMCAIJAKQDAQUMX3BheW1lbnRVc2RuCQDMCAIJAKQDAQUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgkApAMBBQtfcG9zaXRpb25JZAkAzAgCCQCkAwEFC19saW1pdFByaWNlCQDMCAIJAKQDAQULX2V4cGlyYXRpb24FA25pbAIBLAkAzAgCCQELU3RyaW5nRW50cnkCCQEIb3JkZXJLZXkBBQhfb3JkZXJJZAUIb3JkZXJTdHIFA25pbAEQc2F2ZU9yZGVyUmVxdWVzdAYIX29yZGVySWQEX2FtbQdfdHJhZGVyBV90eXBlDV90cmlnZ2VyUHJpY2ULX2xpbWl0UHJpY2UEC29yZGVyUmVxU3RyCQC5CQIJAMwIAgkApAMBBQhfb3JkZXJJZAkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIJAMwIAgkApAMBBQVfdHlwZQkAzAgCCQCkAwEFDV90cmlnZ2VyUHJpY2UJAMwIAgkApAMBBQtfbGltaXRQcmljZQUDbmlsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUFC29yZGVyUmVxU3RyBQNuaWwBEHVwZGF0ZU9yZGVySWRTdHIDD19vcmRlcklkc05ld1N0cgRfYW1tB190cmFkZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEXRyYWRlck9yZGVySWRzS2V5AgUEX2FtbQUHX3RyYWRlcgUPX29yZGVySWRzTmV3U3RyBQNuaWwBFGFkZFJlbW92ZU9yZGVySWRMaXN0BQlfb3JkZXJJZHMIX29yZGVySWQEX2FtbQdfdHJhZGVyBF9hZGQEC29yZGVySWRzTmV3AwUEX2FkZAkAzQgCBQlfb3JkZXJJZHMJAKQDAQUIX29yZGVySWQJANEIAgUJX29yZGVySWRzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUJX29yZGVySWRzCQCkAwEFCF9vcmRlcklkCQCsAgICEk5vIG9yZGVyIHdpdGggaWQ6IAkApAMBBQhfb3JkZXJJZAULb3JkZXJJZHNOZXcBEGFkZFJlbW92ZU9yZGVySWQECF9vcmRlcklkBF9hbW0HX3RyYWRlcgRfYWRkBAhvcmRlcklkcwkBEnRyYWRlckFtbU9yZGVyc0lkcwIFBF9hbW0FB190cmFkZXIEC29yZGVySWRzTmV3CQEUYWRkUmVtb3ZlT3JkZXJJZExpc3QFBQhvcmRlcklkcwUIX29yZGVySWQFBF9hbW0FB190cmFkZXIFBF9hZGQEDm9yZGVySWRzTmV3U3RyCQC5CQIFC29yZGVySWRzTmV3AgEsCQEQdXBkYXRlT3JkZXJJZFN0cgMFDm9yZGVySWRzTmV3U3RyBQRfYW1tBQdfdHJhZGVyARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwRfYW1tB190cmFkZXIGX2NvdW50AwkAZgIAAAUGX2NvdW50CQACAQkArAICAhVJbnZhbGlkIG9yZGVyIGNvdW50OiAJAKQDAQUGX2NvdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETdHJhZGVyT3JkZXJDb3VudEtleQIFBF9hbW0FB190cmFkZXIFBl9jb3VudAUDbmlsARF1cGRhdGVMYXN0T3JkZXJJZAEMX2xhc3RPcmRlcklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX2xhc3RPcmRlcklkBQxfbGFzdE9yZGVySWQFA25pbAEQbWFya0V4ZWN1dGVPcmRlcgEIX29yZGVySWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfZXhlY3V0ZWRPcmRlcnMJAKQDAQUIX29yZGVySWQGBQNuaWwBD21hcmtDYW5jZWxPcmRlcgEIX29yZGVySWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfY2FuY2VsZWRPcmRlcnMJAKQDAQUIX29yZGVySWQGBQNuaWwBDmdldFBvc2l0aW9uSWRzAgRfYW1tB190cmFkZXIEEGxvbmdQb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBQRMT05HBBVjdXJyZW50TG9uZ1Bvc2l0aW9uSWQDCQECIT0CBRBsb25nUG9zaXRpb25TaXplAAAJAQ1nZXRQb3NpdGlvbklkAwUEX2FtbQUHX3RyYWRlcgUETE9ORwAABBFzaG9ydFBvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFBVNIT1JUBBZjdXJyZW50U2hvcnRQb3NpdGlvbklkAwkBAiE9AgURc2hvcnRQb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBQVTSE9SVAAACQDMCAIFFWN1cnJlbnRMb25nUG9zaXRpb25JZAkAzAgCBRZjdXJyZW50U2hvcnRQb3NpdGlvbklkBQNuaWwMAWkBEmNsZWFuVXBTdGFsZU9yZGVycwIEX2FtbQdfdHJhZGVyBAZvcmRlcnMJARJ0cmFkZXJBbW1PcmRlcnNJZHMCBQRfYW1tBQdfdHJhZGVyBAtwb3NpdGlvbklkcwkBDmdldFBvc2l0aW9uSWRzAgUEX2FtbQUHX3RyYWRlcgoBCmNsZWFuVXBPbmUCBF9hY2MIX29yZGVySWQECm9yZGVySWRJbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQhfb3JkZXJJZAIQSW52YWxpZCBvcmRlciBpZAQNJHQwMTEzNTkxMTU3NQkBCGdldE9yZGVyAQUKb3JkZXJJZEludAQDX3gxCAUNJHQwMTEzNTkxMTU3NQJfMQQDX3gyCAUNJHQwMTEzNTkxMTU3NQJfMgQDX3gzCAUNJHQwMTEzNTkxMTU3NQJfMwQDX3g0CAUNJHQwMTEzNTkxMTU3NQJfNAQFX3R5cGUIBQ0kdDAxMTM1OTExNTc1Al81BANfeDUIBQ0kdDAxMTM1OTExNTc1Al82BANfeDYIBQ0kdDAxMTM1OTExNTc1Al83BANfeDcIBQ0kdDAxMTM1OTExNTc1Al84BANfeDgIBQ0kdDAxMTM1OTExNTc1Al85BAtfcG9zaXRpb25JZAgFDSR0MDExMzU5MTE1NzUDXzEwBANfeDkIBQ0kdDAxMTM1OTExNTc1A18xMQQLX2V4cGlyYXRpb24IBQ0kdDAxMTM1OTExNTc1A18xMgQaY2FuY2VsVGFrZVN0b3BPZk5vUG9zaXRpb24DAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQkBAiE9AgkAkQMCBQtwb3NpdGlvbklkcwAABQtfcG9zaXRpb25JZAcJAQIhPQIJAJEDAgULcG9zaXRpb25JZHMAAQULX3Bvc2l0aW9uSWQHBBRjYW5jZWxMaW1pdElmRXhwaXJlZAMJAAACBQVfdHlwZQUFTElNSVQJAGcCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAULX2V4cGlyYXRpb24HAwMFGmNhbmNlbFRha2VTdG9wT2ZOb1Bvc2l0aW9uBgUUY2FuY2VsTGltaXRJZkV4cGlyZWQEBmNoYW5nZQkBD21hcmtDYW5jZWxPcmRlcgEFCm9yZGVySWRJbnQEDG5ld09yZGVyTGlzdAkBFGFkZFJlbW92ZU9yZGVySWRMaXN0BQgFBF9hY2MCXzEFCm9yZGVySWRJbnQFBF9hbW0FB190cmFkZXIHCQCUCgIFDG5ld09yZGVyTGlzdAkAzggCCAUEX2FjYwJfMgUGY2hhbmdlBQRfYWNjBA0kdDAxMjEwNzEyMTgyCgACJGwFBm9yZGVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUGb3JkZXJzBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmNsZWFuVXBPbmUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECW5ld09yZGVycwgFDSR0MDEyMTA3MTIxODICXzEEDWNhbmNlbEFjdGlvbnMIBQ0kdDAxMjEwNzEyMTgyAl8yCQDOCAIJAM4IAgUNY2FuY2VsQWN0aW9ucwkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyCQCQAwEFCW5ld09yZGVycwkBEHVwZGF0ZU9yZGVySWRTdHIDCQC5CQIFCW5ld09yZGVycwIBLAUEX2FtbQUHX3RyYWRlcgFpAQpzZXRDb250ZXh0AQdfc2VuZGVyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIOT25seSBzZWxmLWNhbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19zZW5kZXIFB19zZW5kZXIFA25pbAFpAQxyZXNldENvbnRleHQAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIOT25seSBzZWxmLWNhbGwJAMwIAgkBC0RlbGV0ZUVudHJ5AQUIa19zZW5kZXIFA25pbAFpAQppbml0aWFsaXplAQxfY29vcmRpbmF0b3IDAwkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECFFVuYWJsZSB0byBpbml0aWFsaXplCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDF9jb29yZGluYXRvcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQtjcmVhdGVPcmRlcg0EX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsRX3N0b3BUcmlnZ2VyUHJpY2UPX3N0b3BMaW1pdFByaWNlEV90YWtlVHJpZ2dlclByaWNlD190YWtlTGltaXRQcmljZQtfZXhwaXJhdGlvbgQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAjVJbnZhbGlkIGNyZWF0ZU9yZGVyIHBhcmFtZXRlcnM6IGludmFsaWQgcGF5bWVudCBjb3VudAQNJHQwMTQ3MDAxNDk1MgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJQKAgkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIQSW52YWxpZCBhc3NldCBpZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAJQKAgIAAAAEDnBheW1lbnRBc3NldElkCAUNJHQwMTQ3MDAxNDk1MgJfMQQNcGF5bWVudEFtb3VudAgFDSR0MDE0NzAwMTQ5NTICXzIEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQVfdHlwZQkAzAgCBQ1fdHJpZ2dlclByaWNlCQDMCAIFC19saW1pdFByaWNlCQDMCAIFCV9hbW91bnRJbgkAzAgCBQlfbGV2ZXJhZ2UJAMwIAgUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgUOcGF5bWVudEFzc2V0SWQJAMwIAgUNcGF5bWVudEFtb3VudAkAzAgCBQtfZXhwaXJhdGlvbgUDbmlsBQNuaWwDCQAAAgUGZG9DYWxsBQZkb0NhbGwEB29yZGVySWQEByRtYXRjaDAFBmRvQ2FsbAMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAFAXQJAAIBAhtJbnZhbGlkIElEIG9mIGNyZWF0ZWQgb3JkZXIDCQAAAgUFX3R5cGUFBUxJTUlUBAhtYWtlU3RvcAMJAGYCBRFfc3RvcFRyaWdnZXJQcmljZQAABApkb01ha2VTdG9wCQD8BwQFBHRoaXMCGmludGVybmFsQ3JlYXRlT3JkZXJSZXF1ZXN0CQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQdvcmRlcklkCQDMCAIFBFNUT1AJAMwIAgURX3N0b3BUcmlnZ2VyUHJpY2UJAMwIAgUPX3N0b3BMaW1pdFByaWNlBQNuaWwFA25pbAMJAAACBQpkb01ha2VTdG9wBQpkb01ha2VTdG9wBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAQIbWFrZVRha2UDCQBmAgURX3Rha2VUcmlnZ2VyUHJpY2UAAAQKZG9NYWtlVGFrZQkA/AcEBQR0aGlzAhppbnRlcm5hbENyZWF0ZU9yZGVyUmVxdWVzdAkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUHb3JkZXJJZAkAzAgCBQRUQUtFCQDMCAIFEV90YWtlVHJpZ2dlclByaWNlCQDMCAIFD190YWtlTGltaXRQcmljZQUDbmlsBQNuaWwDCQAAAgUKZG9NYWtlVGFrZQUKZG9NYWtlVGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAM4IAgUIbWFrZVN0b3AFCG1ha2VUYWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEcaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcwoEX2FtbQpfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rEV9zdG9wVHJpZ2dlclByaWNlD19zdG9wTGltaXRQcmljZRFfdGFrZVRyaWdnZXJQcmljZQ9fdGFrZUxpbWl0UHJpY2UKX3ByaWNlRGF0YQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQtpc1doaXRlbGlzdAEFBF9hbW0JAAIBAi9JbnZhbGlkIGluY3JlYXNlUG9zaXRpb25XaXRoU3RvcExvc3MgcGFyYW1ldGVycwQMcG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUKX2RpcmVjdGlvbgMJAQIhPQIFDHBvc2l0aW9uU2l6ZQAACQACAQJCSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uV2l0aFN0b3BMb3NzIHBhcmFtZXRlcnM6IG9ubHkgbmV3IHBvc2l0aW9uBAxkb1NldENvbnRleHQJAPwHBAUEdGhpcwIKc2V0Q29udGV4dAkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQxkb1NldENvbnRleHQFDGRvU2V0Q29udGV4dAQPZG9DbG9zZVBvc2l0aW9uCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0CEGluY3JlYXNlUG9zaXRpb24JAMwIAgUKX2RpcmVjdGlvbgkAzAgCBQlfbGV2ZXJhZ2UJAMwIAgUTX21pbkJhc2VBc3NldEFtb3VudAkAzAgCBQhfcmVmTGluawkAzAgCBQpfcHJpY2VEYXRhBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFD2RvQ2xvc2VQb3NpdGlvbgUPZG9DbG9zZVBvc2l0aW9uBA5kb1Jlc2V0Q29udGV4dAkA/AcEBQR0aGlzAgxyZXNldENvbnRleHQFA25pbAUDbmlsAwkAAAIFDmRvUmVzZXRDb250ZXh0BQ5kb1Jlc2V0Q29udGV4dAQSb3BlbmVkUG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUKX2RpcmVjdGlvbgMJAAACBRJvcGVuZWRQb3NpdGlvblNpemUFEm9wZW5lZFBvc2l0aW9uU2l6ZQQIYW1vdW50SW4JAQNhYnMBBRJvcGVuZWRQb3NpdGlvblNpemUEDHN0b3BMb3NzU2lkZQMJAGYCAAAFEm9wZW5lZFBvc2l0aW9uU2l6ZQUETE9ORwUFU0hPUlQEEWRvQ3JlYXRlU3RvcE9yZGVyAwkAZgIFEV9zdG9wVHJpZ2dlclByaWNlAAAEEWRvQ3JlYXRlU3RvcE9yZGVyCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUHX3RyYWRlcgkAzAgCBQRfYW1tCQDMCAIFBFNUT1AJAMwIAgURX3N0b3BUcmlnZ2VyUHJpY2UJAMwIAgUPX3N0b3BMaW1pdFByaWNlCQDMCAIFCGFtb3VudEluCQDMCAIAAAkAzAgCBQxzdG9wTG9zc1NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFEWRvQ3JlYXRlU3RvcE9yZGVyBRFkb0NyZWF0ZVN0b3BPcmRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgURZG9DcmVhdGVTdG9wT3JkZXIFEWRvQ3JlYXRlU3RvcE9yZGVyBBFkb0NyZWF0ZVRha2VPcmRlcgMJAGYCBRFfdGFrZVRyaWdnZXJQcmljZQAABBFkb0NyZWF0ZVRha2VPcmRlcgkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQRUQUtFCQDMCAIFEV90YWtlVHJpZ2dlclByaWNlCQDMCAIFD190YWtlTGltaXRQcmljZQkAzAgCBQhhbW91bnRJbgkAzAgCAAAJAMwIAgUMc3RvcExvc3NTaWRlCQDMCAIFCF9yZWZMaW5rCQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAMJAAACBRFkb0NyZWF0ZVRha2VPcmRlcgURZG9DcmVhdGVUYWtlT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFEWRvQ3JlYXRlVGFrZU9yZGVyBRFkb0NyZWF0ZVRha2VPcmRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGWludGVybmFsTWFya09yZGVyRXhlY3V0ZWQDBF9hbW0HX3RyYWRlcghfb3JkZXJJZAMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQIsSW52YWxpZCBpbnRlcm5hbE1hcmtPcmRlckV4ZWN1dGVkIHBhcmFtZXRlcnMEE25ld1RyYWRlck9yZGVyQ291bnQJAGUCCQETZ2V0VHJhZGVyT3JkZXJDb3VudAIFBF9hbW0FB190cmFkZXIAAQkAzggCCQDOCAIJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAkBEGFkZFJlbW92ZU9yZGVySWQEBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgcJARBtYXJrRXhlY3V0ZU9yZGVyAQUIX29yZGVySWQBaQEaaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QGB190cmFkZXIEX2FtbQhfb3JkZXJJZAVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlAwMDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQYJAGcCAAAFDV90cmlnZ2VyUHJpY2UGCQBmAgAABQtfbGltaXRQcmljZQYJAQEhAQkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLUludmFsaWQgaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QgcGFyYW1ldGVycwkBEHNhdmVPcmRlclJlcXVlc3QGBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUFX3R5cGUFDV90cmlnZ2VyUHJpY2UFC19saW1pdFByaWNlAWkBE2ludGVybmFsQ3JlYXRlT3JkZXIMB190cmFkZXIEX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsPX3BheW1lbnRBc3NldElkDl9wYXltZW50QW1vdW50C19leHBpcmF0aW9uAwMDAwMDAwMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkAZwIAAAUNX3RyaWdnZXJQcmljZQYJAGYCAAAFC19saW1pdFByaWNlBgkAZwIAAAUJX2Ftb3VudEluBgkAZgIAAAUJX2xldmVyYWdlBgkBASEBAwkAAAIFBV9zaWRlBQRMT05HBgkAAAIFBV9zaWRlBQVTSE9SVAYJAQEhAQMDCQAAAgUFX3R5cGUFBFNUT1AGCQAAAgUFX3R5cGUFBFRBS0UGCQAAAgUFX3R5cGUFBUxJTUlUBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAZgIAAAULX2V4cGlyYXRpb24JAAIBAiZJbnZhbGlkIGludGVybmFsQ3JlYXRlT3JkZXIgcGFyYW1ldGVycwQHb3JkZXJJZAkAZAIJAQ5jdXJyZW50T3JkZXJJZAAAAQQRcG9zaXRpb25EaXJlY3Rpb24JARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIFBV9zaWRlBQVfdHlwZQQTbmV3VHJhZGVyT3JkZXJDb3VudAkAZAIJARNnZXRUcmFkZXJPcmRlckNvdW50AgUEX2FtbQUHX3RyYWRlcgABBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgQKX2RpcmVjdGlvbgMDAwkAAAIFDHBvc2l0aW9uU2l6ZQAABgMJAGYCBQxwb3NpdGlvblNpemUAAAkAAAIFBV9zaWRlBQRMT05HBwYDCQBmAgAABQxwb3NpdGlvblNpemUJAAACBQVfc2lkZQUFU0hPUlQHBQhJTkNSRUFTRQUIREVDUkVBU0UDAwkAAAIFDHBvc2l0aW9uU2l6ZQAAAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFBwkAAgECK0NhbiBub3QgY3JlYXRlIFNUT1AvVEFLRSBvcmRlcjogbm8gcG9zaXRpb24EC3VzZG5QYXltZW50AwkAAAIFCl9kaXJlY3Rpb24FCElOQ1JFQVNFAwMJAQIhPQIFD19wYXltZW50QXNzZXRJZAkA2AQBCQEKcXVvdGVBc3NldAAGCQECIT0CBQ5fcGF5bWVudEFtb3VudAUJX2Ftb3VudEluCQACAQI0SW52YWxpZCBjcmVhdGVMaW1pdE9yZGVyIHBhcmFtZXRlcnM6IGludmFsaWQgcGF5bWVudAQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDl9wYXltZW50QW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQ5fcGF5bWVudEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFC3VzZG5QYXltZW50BQt1c2RuUGF5bWVudAQKcG9zaXRpb25JZAMJAQIhPQIFDHBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAAADAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQkAAAIFCnBvc2l0aW9uSWQAAAcJAAIBAj9TVE9QIGFuZCBUQUtFIG9yZGVyIHNob3VsZCBiZSBhc3NpZ25lZCB0byBwb3NpdGlvbiB3aXRoIGlkICE9IDADCQBmAgUTbmV3VHJhZGVyT3JkZXJDb3VudAUZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQkAAgECMEludmFsaWQgY3JlYXRlTGltaXRPcmRlciBwYXJhbWV0ZXJzOiBvcmRlciBjb3VudAQJY2hhbmdlU2V0CQDOCAIJAM4IAgkAzggCCQEJc2F2ZU9yZGVyDQUHb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUJX2Ftb3VudEluBQlfbGV2ZXJhZ2UFBV90eXBlBQ1fdHJpZ2dlclByaWNlBQt1c2RuUGF5bWVudAUFX3NpZGUFCF9yZWZMaW5rBQpwb3NpdGlvbklkBQtfbGltaXRQcmljZQULX2V4cGlyYXRpb24JARBhZGRSZW1vdmVPcmRlcklkBAUHb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgYJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAkBEXVwZGF0ZUxhc3RPcmRlcklkAQUHb3JkZXJJZAkAlAoCBQljaGFuZ2VTZXQFB29yZGVySWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELY2FuY2VsT3JkZXIBCF9vcmRlcklkBA0kdDAyNDA1MjI0MjcxCQEIZ2V0T3JkZXIBBQhfb3JkZXJJZAQEX2FtbQgFDSR0MDI0MDUyMjQyNzECXzEEB190cmFkZXIIBQ0kdDAyNDA1MjI0MjcxAl8yBAlfYW1vdW50SW4IBQ0kdDAyNDA1MjI0MjcxAl8zBAlfbGV2ZXJhZ2UIBQ0kdDAyNDA1MjI0MjcxAl80BAVfdHlwZQgFDSR0MDI0MDUyMjQyNzECXzUEDV90cmlnZ2VyUHJpY2UIBQ0kdDAyNDA1MjI0MjcxAl82BAtfYW1vdW50VXNkbggFDSR0MDI0MDUyMjQyNzECXzcEBV9zaWRlCAUNJHQwMjQwNTIyNDI3MQJfOAQIX3JlZkxpbmsIBQ0kdDAyNDA1MjI0MjcxAl85BAtfcG9zaXRpb25JZAgFDSR0MDI0MDUyMjQyNzEDXzEwBAtfbGltaXRQcmljZQgFDSR0MDI0MDUyMjQyNzEDXzExAwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQGCQEBIQEJAAACCQClCAEIBQFpBmNhbGxlcgUHX3RyYWRlcgkAAgECHkludmFsaWQgY2FuY2VsT3JkZXIgcGFyYW1ldGVycwQHY2xlYW5VcAkA/AcEBQR0aGlzAhJjbGVhblVwU3RhbGVPcmRlcnMJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyBQNuaWwFA25pbAMJAAACBQdjbGVhblVwBQdjbGVhblVwBBNuZXdUcmFkZXJPcmRlckNvdW50CQBlAgkBE2dldFRyYWRlck9yZGVyQ291bnQCBQRfYW1tBQdfdHJhZGVyAAEECHdpdGhkcmF3AwkAZgIFC19hbW91bnRVc2RuAAAEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgULX2Ftb3VudFVzZG4FA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwkAzggCCQDOCAIJAM4IAgkBD21hcmtDYW5jZWxPcmRlcgEFCF9vcmRlcklkCQEQYWRkUmVtb3ZlT3JkZXJJZAQFCF9vcmRlcklkBQRfYW1tBQdfdHJhZGVyBwkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyBRNuZXdUcmFkZXJPcmRlckNvdW50AwkAZgIFC19hbW91bnRVc2RuAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtfYW1vdW50VXNkbgkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxleGVjdXRlT3JkZXICCF9vcmRlcklkCl9wcmljZURhdGEEDSR0MDI1NDg5MjU3MDgJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMjU0ODkyNTcwOAJfMQQHX3RyYWRlcggFDSR0MDI1NDg5MjU3MDgCXzIECV9hbW91bnRJbggFDSR0MDI1NDg5MjU3MDgCXzMECV9sZXZlcmFnZQgFDSR0MDI1NDg5MjU3MDgCXzQEBV90eXBlCAUNJHQwMjU0ODkyNTcwOAJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDI1NDg5MjU3MDgCXzYEC19hbW91bnRVc2RuCAUNJHQwMjU0ODkyNTcwOAJfNwQFX3NpZGUIBQ0kdDAyNTQ4OTI1NzA4Al84BAhfcmVmTGluawgFDSR0MDI1NDg5MjU3MDgCXzkEC19wb3NpdGlvbklkCAUNJHQwMjU0ODkyNTcwOANfMTAEC19saW1pdFByaWNlCAUNJHQwMjU0ODkyNTcwOANfMTEEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAQRcG9zaXRpb25EaXJlY3Rpb24JARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIFBV9zaWRlBQVfdHlwZQMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQJAAIBAh9JbnZhbGlkIGV4ZWN1dGVPcmRlciBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQxwb3NpdGlvblNpemUFDHBvc2l0aW9uU2l6ZQQRY3VycmVudFBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgAABA0kdDAyNjIxNTI5NjM5AwkAAAIFBV90eXBlBQRTVE9QBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgECK0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQDCQAAAgUSX3Bvc2l0aW9uRGlyZWN0aW9uBQRMT05HCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQMFDGlzRXhlY3V0YWJsZQkAlQoDAg1jbG9zZVBvc2l0aW9uCQDMCAIJAQRtaW52AgUJX2Ftb3VudEluCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIFEXBvc2l0aW9uRGlyZWN0aW9uCQDMCAIJAQRtdWxkAgULX2xpbWl0UHJpY2UJAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgcJAMwIAgUKX3ByaWNlRGF0YQUDbmlsBQNuaWwJAAIBAjFDYW4gbm90IGV4ZWN1dGUgU1RPUCBvcmRlcjogdHJpZ2dlclByaWNlIG1pc21hdGNoAwkAAAIFBV90eXBlBQRUQUtFBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgEJAKwCAgkArAICCQCsAgICLENhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQgCQCkAwEFEWN1cnJlbnRQb3NpdGlvbklkAgIhPQkApAMBBQtfcG9zaXRpb25JZAMJAAACBRJfcG9zaXRpb25EaXJlY3Rpb24FBExPTkcJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQkAZwIFDV90cmlnZ2VyUHJpY2UFC21hcmtldFByaWNlAwUMaXNFeGVjdXRhYmxlCQCVCgMCDWNsb3NlUG9zaXRpb24JAMwIAgkBBG1pbnYCBQlfYW1vdW50SW4JAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgURcG9zaXRpb25EaXJlY3Rpb24JAMwIAgkBBG11bGQCBQtfbGltaXRQcmljZQkBA2FicwEFDHBvc2l0aW9uU2l6ZQkAzAgCBwkAzAgCBQpfcHJpY2VEYXRhBQNuaWwFA25pbAkAAgECMUNhbiBub3QgZXhlY3V0ZSBUQUtFIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gDCQAAAgUFX3R5cGUFBUxJTUlUBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQGc3ByZWFkAwkAAAIFC19saW1pdFByaWNlAAAJAQlnZXRTcHJlYWQBBQ1fdHJpZ2dlclByaWNlCQEDYWJzAQkAZQIFDV90cmlnZ2VyUHJpY2UFC19saW1pdFByaWNlBAxpc0V4ZWN1dGFibGUDCQBnAgULbWFya2V0UHJpY2UJAGUCBQ1fdHJpZ2dlclByaWNlBQZzcHJlYWQJAGcCCQBkAgUNX3RyaWdnZXJQcmljZQUGc3ByZWFkBQttYXJrZXRQcmljZQcDBQxpc0V4ZWN1dGFibGUED2Ftb3VudEluV2l0aEZlZQkAZQIFC19hbW91bnRVc2RuCQEEbXVsZAIFC19hbW91bnRVc2RuCQEGZ2V0RmVlAgUEX2FtbQUHX3RyYWRlcgkAlQoDAhBpbmNyZWFzZVBvc2l0aW9uCQDMCAIFBV9zaWRlCQDMCAIFCV9sZXZlcmFnZQkAzAgCAwkAAAIFC19saW1pdFByaWNlAAAAAAkBBGRpdmQCBQ9hbW91bnRJbldpdGhGZWUFC19saW1pdFByaWNlCQDMCAIFCF9yZWZMaW5rCQDMCAIFCl9wcmljZURhdGEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQtfYW1vdW50VXNkbgUDbmlsCQACAQIyQ2FuIG5vdCBleGVjdXRlIExJTUlUIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gJAAIBCQCsAgICFEludmFsaWQgb3JkZXIgdHlwZTogCQCkAwEFBV90eXBlBAZtZXRob2QIBQ0kdDAyNjIxNTI5NjM5Al8xBARhcmdzCAUNJHQwMjYyMTUyOTYzOQJfMgQIcGF5bWVudHMIBQ0kdDAyNjIxNTI5NjM5Al8zBAh3aXRoZHJhdwMJAAACCQCQAwEFCHBheW1lbnRzAAEEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAggJAJEDAgUIcGF5bWVudHMAAAZhbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwQMZG9TZXRDb250ZXh0CQD8BwQFBHRoaXMCCnNldENvbnRleHQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUMZG9TZXRDb250ZXh0BQxkb1NldENvbnRleHQED2RvQ2xvc2VQb3NpdGlvbgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tBQZtZXRob2QFBGFyZ3MFCHBheW1lbnRzAwkAAAIFD2RvQ2xvc2VQb3NpdGlvbgUPZG9DbG9zZVBvc2l0aW9uBA5kb1Jlc2V0Q29udGV4dAkA/AcEBQR0aGlzAgxyZXNldENvbnRleHQFA25pbAUDbmlsAwkAAAIFDmRvUmVzZXRDb250ZXh0BQ5kb1Jlc2V0Q29udGV4dAQTZXhlY3V0ZU9yZGVyUmVxdWVzdAMJAAACBQVfdHlwZQUFTElNSVQED25ld1Bvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAwkAAAIFD25ld1Bvc2l0aW9uU2l6ZQUPbmV3UG9zaXRpb25TaXplBA1uZXdQb3NpdGlvbklkCQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAwkAAAIFDW5ld1Bvc2l0aW9uSWQFDW5ld1Bvc2l0aW9uSWQEEXBvc2l0aW9uU2l6ZURlbHRhCQBlAgUPbmV3UG9zaXRpb25TaXplBQxwb3NpdGlvblNpemUEDmNsb3NlT3JkZXJTaWRlAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQVTSE9SVAUETE9ORwQNbWFrZVRha2VPcmRlcgMJARBoYXZlT3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFRBS0UEDSR0MDMwNjAxMzA4MDAJAQ9nZXRPcmRlclJlcXVlc3QCBQhfb3JkZXJJZAUEVEFLRQQKbmV3T3JkZXJJZAgFDSR0MDMwNjAxMzA4MDACXzEEBm5ld0FtbQgFDSR0MDMwNjAxMzA4MDACXzIECW5ld1RyYWRlcggFDSR0MDMwNjAxMzA4MDACXzMEB25ld1R5cGUIBQ0kdDAzMDYwMTMwODAwAl80BA9uZXdUcmlnZ2VyUHJpY2UIBQ0kdDAzMDYwMTMwODAwAl81BA1uZXdMaW1pdFByaWNlCAUNJHQwMzA2MDEzMDgwMAJfNgQGZG9DYWxsCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUJbmV3VHJhZGVyCQDMCAIFBm5ld0FtbQkAzAgCBQduZXdUeXBlCQDMCAIFD25ld1RyaWdnZXJQcmljZQkAzAgCBQ1uZXdMaW1pdFByaWNlCQDMCAIFEXBvc2l0aW9uU2l6ZURlbHRhCQDMCAIAAAkAzAgCBQ5jbG9zZU9yZGVyU2lkZQkAzAgCAgAJAMwIAgIACQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBmRvQ2FsbAUGZG9DYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1tYWtlVGFrZU9yZGVyBQ1tYWtlVGFrZU9yZGVyBA1tYWtlU3RvcE9yZGVyAwkBEGhhdmVPcmRlclJlcXVlc3QCBQhfb3JkZXJJZAUEU1RPUAQNJHQwMzEzNzMzMTU3MgkBD2dldE9yZGVyUmVxdWVzdAIFCF9vcmRlcklkBQRTVE9QBApuZXdPcmRlcklkCAUNJHQwMzEzNzMzMTU3MgJfMQQGbmV3QW1tCAUNJHQwMzEzNzMzMTU3MgJfMgQJbmV3VHJhZGVyCAUNJHQwMzEzNzMzMTU3MgJfMwQHbmV3VHlwZQgFDSR0MDMxMzczMzE1NzICXzQED25ld1RyaWdnZXJQcmljZQgFDSR0MDMxMzczMzE1NzICXzUEDW5ld0xpbWl0UHJpY2UIBQ0kdDAzMTM3MzMxNTcyAl82BAZkb0NhbGwJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQluZXdUcmFkZXIJAMwIAgUGbmV3QW1tCQDMCAIFB25ld1R5cGUJAMwIAgUPbmV3VHJpZ2dlclByaWNlCQDMCAIFDW5ld0xpbWl0UHJpY2UJAMwIAgURcG9zaXRpb25TaXplRGVsdGEJAMwIAgAACQDMCAIFDmNsb3NlT3JkZXJTaWRlCQDMCAICAAkAzAgCAgAJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUGZG9DYWxsBQZkb0NhbGwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDW1ha2VTdG9wT3JkZXIFDW1ha2VTdG9wT3JkZXIJAM4IAgUNbWFrZVRha2VPcmRlcgUNbWFrZVN0b3BPcmRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFE2V4ZWN1dGVPcmRlclJlcXVlc3QFE2V4ZWN1dGVPcmRlclJlcXVlc3QEE2RvTWFya09yZGVyRXhlY3V0ZWQJAPwHBAUEdGhpcwIZaW50ZXJuYWxNYXJrT3JkZXJFeGVjdXRlZAkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIJAMwIAgUIX29yZGVySWQFA25pbAUDbmlsAwkAAAIFE2RvTWFya09yZGVyRXhlY3V0ZWQFE2RvTWFya09yZGVyRXhlY3V0ZWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARR2aWV3X2NhbkV4ZWN1dGVPcmRlcgIIX29yZGVySWQKX3ByaWNlRGF0YQQBcwkA/AcEBQR0aGlzAgxleGVjdXRlT3JkZXIJAMwIAgUIX29yZGVySWQJAMwIAgUKX3ByaWNlRGF0YQUDbmlsBQNuaWwDCQAAAgUBcwUBcwkAAgECB1N1Y2Nlc3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5GWDpAA==", "height": 2578921, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8BvDNGLK6j3Up8oKjGFsGXPwf8869XzRh48XkMdCuD2Z Next: 6ZD2cVk8pEHH5nRKaERNwRTzuYhXP6e6UCqqBEQjY1R5 Diff:
OldNewDifferences
316316 let aX = bC._10
317317 let bL = bC._11
318318 let aZ = bC._12
319- if (if (if (if ((P == q))
319+ let bM = if (if (if ((P == q))
320320 then true
321321 else (P == r))
322322 then (by[0] != aX)
323323 else false)
324324 then (by[1] != aX)
325- else false)
325+ else false
326+ let bN = if ((P == s))
327+ then (lastBlock.timestamp >= aZ)
328+ else false
329+ if (if (bM)
330+ then true
331+ else bN)
326332 then {
327- let bM = bq(bB)
328- let bN = be(bA._1, bB, R, S, false)
329- $Tuple2(bN, (bA._2 ++ bM))
333+ let bO = bq(bB)
334+ let bP = be(bA._1, bB, R, S, false)
335+ $Tuple2(bP, (bA._2 ++ bO))
330336 }
331337 else bA
332338 }
333339
334- let bO = {
335- let bP = bx
336- let bQ = size(bP)
337- let bR = $Tuple2(bx, nil)
338- func bS (bT,bU) = if ((bU >= bQ))
339- then bT
340- else bz(bT, bP[bU])
340+ let bQ = {
341+ let bR = bx
342+ let bS = size(bR)
343+ let bT = $Tuple2(bx, nil)
344+ func bU (bV,bW) = if ((bW >= bS))
345+ then bV
346+ else bz(bV, bR[bW])
341347
342- func bV (bT,bU) = if ((bU >= bQ))
343- then bT
348+ func bX (bV,bW) = if ((bW >= bS))
349+ then bV
344350 else throw("List size exceeds 10")
345351
346- bV(bS(bS(bS(bS(bS(bS(bS(bS(bS(bS(bR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
352+ bX(bU(bU(bU(bU(bU(bU(bU(bU(bU(bU(bT, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
347353 }
348- let bW = bO._1
349- let bX = bO._2
350- ((bX ++ bl(R, S, size(bW))) ++ bc(makeString(bW, ","), R, S))
354+ let bY = bQ._1
355+ let bZ = bQ._2
356+ ((bZ ++ bl(R, S, size(bY))) ++ bc(makeString(bY, ","), R, S))
351357 }
352358
353359
354360
355361 @Callable(bw)
356-func setContext (bY) = if ((bw.caller != this))
362+func setContext (ca) = if ((bw.caller != this))
357363 then throw("Only self-call")
358- else [StringEntry(o, bY)]
364+ else [StringEntry(o, ca)]
359365
360366
361367
367373
368374
369375 @Callable(bw)
370-func initialize (bZ) = if (if (Y())
376+func initialize (cb) = if (if (Y())
371377 then true
372378 else (bw.caller != this))
373379 then throw("Unable to initialize")
374- else [StringEntry(a, toString(addressFromStringValue(bZ))), BooleanEntry(p, true)]
380+ else [StringEntry(a, toString(addressFromStringValue(cb))), BooleanEntry(p, true)]
375381
376382
377383
378384 @Callable(bw)
379-func createOrder (R,P,aT,aY,aR,aS,aV,aW,ca,cb,cc,cd,aZ) = {
385+func createOrder (R,P,aT,aY,aR,aS,aV,aW,cc,cd,ce,cf,aZ) = {
380386 let S = toString(bw.caller)
381- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
382- if ((ce == ce))
387+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
388+ if ((cg == cg))
383389 then if ((size(bw.payments) > 1))
384390 then throw("Invalid createOrder parameters: invalid payment count")
385391 else {
386- let cf = if ((size(bw.payments) == 1))
392+ let ch = if ((size(bw.payments) == 1))
387393 then $Tuple2(toBase58String(valueOrErrorMessage(bw.payments[0].assetId, "Invalid asset id")), bw.payments[0].amount)
388394 else $Tuple2("", 0)
389- let cg = cf._1
390- let ch = cf._2
391- let ci = invoke(this, "internalCreateOrder", [S, R, P, aT, aY, aR, aS, aV, aW, cg, ch, aZ], nil)
392- if ((ci == ci))
395+ let ci = ch._1
396+ let cj = ch._2
397+ let ck = invoke(this, "internalCreateOrder", [S, R, P, aT, aY, aR, aS, aV, aW, ci, cj, aZ], nil)
398+ if ((ck == ck))
393399 then {
394400 let aj = {
395- let aC = ci
401+ let aC = ck
396402 if ($isInstanceOf(aC, "Int"))
397403 then {
398404 let aD = aC
402408 }
403409 if ((P == s))
404410 then {
405- let cj = if ((ca > 0))
406- then {
407- let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, ca, cb], nil)
408- if ((ck == ck))
409- then nil
410- else throw("Strict value is not equal to itself.")
411- }
412- else nil
413411 let cl = if ((cc > 0))
414412 then {
415- let cm = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, cc, cd], nil)
413+ let cm = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, cc, cd], nil)
416414 if ((cm == cm))
417415 then nil
418416 else throw("Strict value is not equal to itself.")
419417 }
420418 else nil
421- (cj ++ cl)
419+ let cn = if ((ce > 0))
420+ then {
421+ let co = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, ce, cf], nil)
422+ if ((co == co))
423+ then nil
424+ else throw("Strict value is not equal to itself.")
425+ }
426+ else nil
427+ (cl ++ cn)
422428 }
423429 else nil
424430 }
430436
431437
432438 @Callable(bw)
433-func increasePositionWithStopLoss (R,aJ,aS,cn,aW,ca,cb,cc,cd) = {
439+func increasePositionWithStopLoss (R,aJ,aS,cp,aW,cc,cd,ce,cf,cq) = {
434440 let S = toString(bw.caller)
435- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
436- if ((ce == ce))
441+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
442+ if ((cg == cg))
437443 then if (if (!(Y()))
438444 then true
439445 else !(X(R)))
440446 then throw("Invalid increasePositionWithStopLoss parameters")
441447 else {
442- let co = aI(R, S, aJ)
443- if ((co != 0))
448+ let cr = aI(R, S, aJ)
449+ if ((cr != 0))
444450 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
445451 else {
446- let cp = invoke(this, "setContext", [S], nil)
447- if ((cp == cp))
452+ let cs = invoke(this, "setContext", [S], nil)
453+ if ((cs == cs))
448454 then {
449- let cq = invoke(addressFromStringValue(R), "increasePosition", [aJ, aS, cn, aW], bw.payments)
450- if ((cq == cq))
455+ let ct = invoke(addressFromStringValue(R), "increasePosition", [aJ, aS, cp, aW, cq], bw.payments)
456+ if ((ct == ct))
451457 then {
452- let cr = invoke(this, "resetContext", nil, nil)
453- if ((cr == cr))
458+ let cu = invoke(this, "resetContext", nil, nil)
459+ if ((cu == cu))
454460 then {
455- let cs = aI(R, S, aJ)
456- if ((cs == cs))
461+ let cv = aI(R, S, aJ)
462+ if ((cv == cv))
457463 then {
458- let as = B(cs)
459- let ct = if ((0 > cs))
464+ let as = B(cv)
465+ let cw = if ((0 > cv))
460466 then t
461467 else u
462- let cu = if ((ca > 0))
468+ let cx = if ((cc > 0))
463469 then {
464- let cu = invoke(this, "internalCreateOrder", [S, R, q, ca, cb, as, 0, ct, aW, "", 0, 0], nil)
465- if ((cu == cu))
470+ let cx = invoke(this, "internalCreateOrder", [S, R, q, cc, cd, as, 0, cw, aW, "", 0, 0], nil)
471+ if ((cx == cx))
466472 then nil
467473 else throw("Strict value is not equal to itself.")
468474 }
469475 else nil
470- if ((cu == cu))
476+ if ((cx == cx))
471477 then {
472- let cv = if ((cc > 0))
478+ let cy = if ((ce > 0))
473479 then {
474- let cv = invoke(this, "internalCreateOrder", [S, R, r, cc, cd, as, 0, ct, aW, "", 0, 0], nil)
475- if ((cv == cv))
480+ let cy = invoke(this, "internalCreateOrder", [S, R, r, ce, cf, as, 0, cw, aW, "", 0, 0], nil)
481+ if ((cy == cy))
476482 then nil
477483 else throw("Strict value is not equal to itself.")
478484 }
479485 else nil
480- if ((cv == cv))
486+ if ((cy == cy))
481487 then nil
482488 else throw("Strict value is not equal to itself.")
483489 }
505511 else !((bw.caller == this)))
506512 then throw("Invalid internalMarkOrderExecuted parameters")
507513 else {
508- let cw = (ab(R, S) - 1)
509- ((bl(R, S, cw) ++ bi(L, R, S, false)) ++ bp(L))
514+ let cz = (ab(R, S) - 1)
515+ ((bl(R, S, cz) ++ bi(L, R, S, false)) ++ bp(L))
510516 }
511517
512518
527533
528534
529535 @Callable(bw)
530-func internalCreateOrder (S,R,P,aT,aY,aR,aS,aV,aW,cx,cy,aZ) = if (if (if (if (if (if (if (if (if (if (!(Y()))
536+func internalCreateOrder (S,R,P,aT,aY,aR,aS,aV,aW,cA,cB,aZ) = if (if (if (if (if (if (if (if (if (if (!(Y()))
531537 then true
532538 else !(X(R)))
533539 then true
555561 then throw("Invalid internalCreateOrder parameters")
556562 else {
557563 let aj = (aa() + 1)
558- let cz = aF(aV, P)
559- let cw = (ab(R, S) + 1)
560- let co = aI(R, S, cz)
561- let aJ = if (if (if ((co == 0))
564+ let cC = aF(aV, P)
565+ let cz = (ab(R, S) + 1)
566+ let cr = aI(R, S, cC)
567+ let aJ = if (if (if ((cr == 0))
562568 then true
563- else if ((co > 0))
569+ else if ((cr > 0))
564570 then (aV == t)
565571 else false)
566572 then true
567- else if ((0 > co))
573+ else if ((0 > cr))
568574 then (aV == u)
569575 else false)
570576 then v
571577 else w
572- if (if ((co == 0))
578+ if (if ((cr == 0))
573579 then if ((P == q))
574580 then true
575581 else (P == r)
576582 else false)
577583 then throw("Can not create STOP/TAKE order: no position")
578584 else {
579- let cA = if ((aJ == v))
580- then if (if ((cx != toBase58String(V())))
585+ let cD = if ((aJ == v))
586+ then if (if ((cA != toBase58String(V())))
581587 then true
582- else (cy != aR))
588+ else (cB != aR))
583589 then throw("Invalid createLimitOrder parameters: invalid payment")
584590 else {
585- let cB = invoke(W(), "deposit", nil, [AttachedPayment(V(), cy)])
586- if ((cB == cB))
587- then cy
591+ let cE = invoke(W(), "deposit", nil, [AttachedPayment(V(), cB)])
592+ if ((cE == cE))
593+ then cB
588594 else throw("Strict value is not equal to itself.")
589595 }
590596 else 0
591- if ((cA == cA))
597+ if ((cD == cD))
592598 then {
593- let ax = if ((co != 0))
594- then aM(R, S, cz)
599+ let ax = if ((cr != 0))
600+ then aM(R, S, cC)
595601 else 0
596602 if (if (if ((P == q))
597603 then true
599605 then (ax == 0)
600606 else false)
601607 then throw("STOP and TAKE order should be assigned to position with id != 0")
602- else if ((cw > x))
608+ else if ((cz > x))
603609 then throw("Invalid createLimitOrder parameters: order count")
604610 else {
605- let cC = (((aQ(aj, R, S, aR, aS, P, aT, cA, aV, aW, ax, aY, aZ) ++ bi(aj, R, S, true)) ++ bl(R, S, cw)) ++ bn(aj))
606- $Tuple2(cC, aj)
611+ let cF = (((aQ(aj, R, S, aR, aS, P, aT, cD, aV, aW, ax, aY, aZ) ++ bi(aj, R, S, true)) ++ bl(R, S, cz)) ++ bn(aj))
612+ $Tuple2(cF, aj)
607613 }
608614 }
609615 else throw("Strict value is not equal to itself.")
614620
615621 @Callable(bw)
616622 func cancelOrder (L) = {
617- let cD = ap(L)
618- let R = cD._1
619- let S = cD._2
620- let aR = cD._3
621- let aS = cD._4
622- let P = cD._5
623- let aT = cD._6
624- let cE = cD._7
625- let aV = cD._8
626- let aW = cD._9
627- let aX = cD._10
628- let aY = cD._11
623+ let cG = ap(L)
624+ let R = cG._1
625+ let S = cG._2
626+ let aR = cG._3
627+ let aS = cG._4
628+ let P = cG._5
629+ let aT = cG._6
630+ let cH = cG._7
631+ let aV = cG._8
632+ let aW = cG._9
633+ let aX = cG._10
634+ let aY = cG._11
629635 if (if (if (!(Y()))
630636 then true
631637 else !(Z(L)))
633639 else !((toString(bw.caller) == S)))
634640 then throw("Invalid cancelOrder parameters")
635641 else {
636- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
637- if ((ce == ce))
642+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
643+ if ((cg == cg))
638644 then {
639- let cw = (ab(R, S) - 1)
640- let cF = if ((cE > 0))
645+ let cz = (ab(R, S) - 1)
646+ let cI = if ((cH > 0))
641647 then {
642- let cG = invoke(W(), "withdraw", [toBase58String(V()), cE], nil)
643- if ((cG == cG))
648+ let cJ = invoke(W(), "withdraw", [toBase58String(V()), cH], nil)
649+ if ((cJ == cJ))
644650 then nil
645651 else throw("Strict value is not equal to itself.")
646652 }
647653 else nil
648- if ((cF == cF))
649- then (((bq(L) ++ bi(L, R, S, false)) ++ bl(R, S, cw)) ++ (if ((cE > 0))
650- then [ScriptTransfer(bw.caller, cE, V())]
654+ if ((cI == cI))
655+ then (((bq(L) ++ bi(L, R, S, false)) ++ bl(R, S, cz)) ++ (if ((cH > 0))
656+ then [ScriptTransfer(bw.caller, cH, V())]
651657 else nil))
652658 else throw("Strict value is not equal to itself.")
653659 }
658664
659665
660666 @Callable(bw)
661-func executeOrder (L) = {
662- let cH = ap(L)
663- let R = cH._1
664- let S = cH._2
665- let aR = cH._3
666- let aS = cH._4
667- let P = cH._5
668- let aT = cH._6
669- let cE = cH._7
670- let aV = cH._8
671- let aW = cH._9
672- let aX = cH._10
673- let aY = cH._11
674- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
675- if ((ce == ce))
667+func executeOrder (L,cq) = {
668+ let cK = ap(L)
669+ let R = cK._1
670+ let S = cK._2
671+ let aR = cK._3
672+ let aS = cK._4
673+ let P = cK._5
674+ let aT = cK._6
675+ let cH = cK._7
676+ let aV = cK._8
677+ let aW = cK._9
678+ let aX = cK._10
679+ let aY = cK._11
680+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
681+ if ((cg == cg))
676682 then {
677- let cz = aF(aV, P)
683+ let cC = aF(aV, P)
678684 if (if (!(Y()))
679685 then true
680686 else !(Z(L)))
681687 then throw("Invalid executeOrder parameters")
682688 else {
683- let co = aI(R, S, cz)
684- if ((co == co))
689+ let cr = aI(R, S, cC)
690+ if ((cr == cr))
685691 then {
686- let cI = if ((co != 0))
687- then aM(R, S, cz)
692+ let cL = if ((cr != 0))
693+ then aM(R, S, cC)
688694 else 0
689- let cJ = if ((P == q))
695+ let cM = if ((P == q))
690696 then {
691- let cK = if ((co > 0))
697+ let cN = if ((cr > 0))
692698 then t
693- else if ((0 > co))
699+ else if ((0 > cr))
694700 then u
695701 else throw("Can not execute STOP order: no open position")
696- let cL = az(R)
697- let cM = if ((aV == cK))
702+ let cO = az(R)
703+ let cP = if ((aV == cN))
698704 then throw("Can not execute STOP order: reduce only")
699- else if ((cI != aX))
705+ else if ((cL != aX))
700706 then throw("Can not execute STOP order: position closed")
701- else if ((cK == t))
702- then (aT >= cL)
703- else (cL >= aT)
704- if (cM)
705- then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
707+ else if ((cN == t))
708+ then (aT >= cO)
709+ else (cO >= aT)
710+ if (cP)
711+ then $Tuple3("closePosition", [G(aR, B(cr)), cC, F(aY, B(cr)), false, cq], nil)
706712 else throw("Can not execute STOP order: triggerPrice mismatch")
707713 }
708714 else if ((P == r))
709715 then {
710- let cK = if ((co > 0))
716+ let cN = if ((cr > 0))
711717 then t
712- else if ((0 > co))
718+ else if ((0 > cr))
713719 then u
714720 else throw("Can not execute STOP order: no open position")
715- let cL = az(R)
716- let cM = if ((aV == cK))
721+ let cO = az(R)
722+ let cP = if ((aV == cN))
717723 then throw("Can not execute TAKE order: reduce only")
718- else if ((cI != aX))
719- then throw(((("Can not execute TAKE order: position closed " + toString(cI)) + "!=") + toString(aX)))
720- else if ((cK == t))
721- then (cL >= aT)
722- else (aT >= cL)
723- if (cM)
724- then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
724+ else if ((cL != aX))
725+ then throw(((("Can not execute TAKE order: position closed " + toString(cL)) + "!=") + toString(aX)))
726+ else if ((cN == t))
727+ then (cO >= aT)
728+ else (aT >= cO)
729+ if (cP)
730+ then $Tuple3("closePosition", [G(aR, B(cr)), cC, F(aY, B(cr)), false, cq], nil)
725731 else throw("Can not execute TAKE order: triggerPrice mismatch")
726732 }
727733 else if ((P == s))
728734 then {
729- let cL = az(R)
730- let cN = if ((aY == 0))
735+ let cO = az(R)
736+ let cQ = if ((aY == 0))
731737 then aO(aT)
732738 else B((aT - aY))
733- let cM = if ((cL >= (aT - cN)))
734- then ((aT + cN) >= cL)
739+ let cP = if ((cO >= (aT - cQ)))
740+ then ((aT + cQ) >= cO)
735741 else false
736- if (cM)
742+ if (cP)
737743 then {
738- let cO = (cE - F(cE, aE(R, S)))
744+ let cR = (cH - F(cH, aE(R, S)))
739745 $Tuple3("increasePosition", [aV, aS, if ((aY == 0))
740746 then 0
741- else D(cO, aY), aW], [AttachedPayment(V(), cE)])
747+ else D(cR, aY), aW, cq], [AttachedPayment(V(), cH)])
742748 }
743749 else throw("Can not execute LIMIT order: triggerPrice mismatch")
744750 }
745751 else throw(("Invalid order type: " + toString(P)))
746- let cP = cJ._1
747- let cQ = cJ._2
748- let cR = cJ._3
749- let cF = if ((size(cR) == 1))
752+ let cS = cM._1
753+ let cT = cM._2
754+ let cU = cM._3
755+ let cI = if ((size(cU) == 1))
750756 then {
751- let cG = invoke(W(), "withdraw", [toBase58String(V()), cR[0].amount], nil)
752- if ((cG == cG))
757+ let cJ = invoke(W(), "withdraw", [toBase58String(V()), cU[0].amount], nil)
758+ if ((cJ == cJ))
753759 then nil
754760 else throw("Strict value is not equal to itself.")
755761 }
756762 else nil
757- if ((cF == cF))
763+ if ((cI == cI))
758764 then {
759- let cp = invoke(this, "setContext", [S], nil)
760- if ((cp == cp))
765+ let cs = invoke(this, "setContext", [S], nil)
766+ if ((cs == cs))
761767 then {
762- let cq = invoke(addressFromStringValue(R), cP, cQ, cR)
763- if ((cq == cq))
768+ let ct = invoke(addressFromStringValue(R), cS, cT, cU)
769+ if ((ct == ct))
764770 then {
765- let cr = invoke(this, "resetContext", nil, nil)
766- if ((cr == cr))
771+ let cu = invoke(this, "resetContext", nil, nil)
772+ if ((cu == cu))
767773 then {
768- let cS = if ((P == s))
774+ let cV = if ((P == s))
769775 then {
770- let cT = aI(R, S, cz)
771- if ((cT == cT))
776+ let cW = aI(R, S, cC)
777+ if ((cW == cW))
772778 then {
773- let cU = aM(R, S, cz)
774- if ((cU == cU))
779+ let cX = aM(R, S, cC)
780+ if ((cX == cX))
775781 then {
776- let cV = (cT - co)
777- let cW = if ((cT > 0))
782+ let cY = (cW - cr)
783+ let cZ = if ((cW > 0))
778784 then u
779785 else t
780- let cX = if (af(L, r))
786+ let da = if (af(L, r))
781787 then {
782- let cY = ag(L, r)
783- let cZ = cY._1
784- let da = cY._2
785- let db = cY._3
786- let dc = cY._4
787- let dd = cY._5
788- let de = cY._6
789- let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
790- if ((ci == ci))
788+ let db = ag(L, r)
789+ let dc = db._1
790+ let dd = db._2
791+ let de = db._3
792+ let df = db._4
793+ let dg = db._5
794+ let dh = db._6
795+ let ck = invoke(this, "internalCreateOrder", [de, dd, df, dg, dh, cY, 0, cZ, "", "", 0, 0], nil)
796+ if ((ck == ck))
791797 then nil
792798 else throw("Strict value is not equal to itself.")
793799 }
794800 else nil
795- if ((cX == cX))
801+ if ((da == da))
796802 then {
797- let df = if (af(L, q))
803+ let di = if (af(L, q))
798804 then {
799- let dg = ag(L, q)
800- let cZ = dg._1
801- let da = dg._2
802- let db = dg._3
803- let dc = dg._4
804- let dd = dg._5
805- let de = dg._6
806- let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
807- if ((ci == ci))
805+ let dj = ag(L, q)
806+ let dc = dj._1
807+ let dd = dj._2
808+ let de = dj._3
809+ let df = dj._4
810+ let dg = dj._5
811+ let dh = dj._6
812+ let ck = invoke(this, "internalCreateOrder", [de, dd, df, dg, dh, cY, 0, cZ, "", "", 0, 0], nil)
813+ if ((ck == ck))
808814 then nil
809815 else throw("Strict value is not equal to itself.")
810816 }
811817 else nil
812- if ((df == df))
813- then (cX ++ df)
818+ if ((di == di))
819+ then (da ++ di)
814820 else throw("Strict value is not equal to itself.")
815821 }
816822 else throw("Strict value is not equal to itself.")
820826 else throw("Strict value is not equal to itself.")
821827 }
822828 else nil
823- if ((cS == cS))
829+ if ((cV == cV))
824830 then {
825- let dh = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
826- if ((dh == dh))
831+ let dk = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
832+ if ((dk == dk))
827833 then nil
828834 else throw("Strict value is not equal to itself.")
829835 }
846852
847853
848854 @Callable(bw)
849-func view_canExecuteOrder (L) = {
850- let aA = invoke(this, "executeOrder", [L], nil)
855+func view_canExecuteOrder (L,cq) = {
856+ let aA = invoke(this, "executeOrder", [L, cq], nil)
851857 if ((aA == aA))
852858 then throw("Success")
853859 else throw("Strict value is not equal to itself.")
854860 }
855861
856862
857-@Verifier(di)
858-func dj () = {
859- let dk = getString(this, a)
860- if (isDefined(dk))
863+@Verifier(dl)
864+func dm () = {
865+ let dn = getString(this, a)
866+ if (isDefined(dn))
861867 then {
862- let dl = getString(addressFromStringValue(value(dk)), b)
863- if (isDefined(dl))
864- then valueOrElse(getBoolean(addressFromStringValue(value(dl)), ((("status_" + toString(this)) + "_") + toBase58String(di.id))), false)
868+ let do = getString(addressFromStringValue(value(dn)), b)
869+ if (isDefined(do))
870+ then valueOrElse(getBoolean(addressFromStringValue(value(do)), ((("status_" + toString(this)) + "_") + toBase58String(dl.id))), false)
865871 else throw("unable to verify: admin not set in coordinator")
866872 }
867- else sigVerify(di.bodyBytes, di.proofs[0], di.senderPublicKey)
873+ else sigVerify(dl.bodyBytes, dl.proofs[0], dl.senderPublicKey)
868874 }
869875
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_sender"
3333
3434 let p = "k_initialized"
3535
3636 let q = 1
3737
3838 let r = 2
3939
4040 let s = 3
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 1
4747
4848 let w = 2
4949
5050 let x = 10
5151
5252 let y = lastBlock.timestamp
5353
5454 let z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
5555
5656 let A = (z / 200)
5757
5858 func B (C) = if ((C > 0))
5959 then C
6060 else -(C)
6161
6262
6363 func D (C,E) = fraction(C, z, E, HALFEVEN)
6464
6565
6666 func F (C,E) = fraction(C, E, z, 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 () = fromBase58String(getStringValue(U(), c))
9999
100100
101101 func W () = valueOrErrorMessage(addressFromString(getStringValue(U(), e)), "Manager not set")
102102
103103
104104 func X (J) = valueOrElse(getBoolean(U(), H(d, J)), false)
105105
106106
107107 func Y () = valueOrElse(getBoolean(this, p), false)
108108
109109
110110 func Z (L) = if (valueOrElse(getBoolean(this, K(L)), false))
111111 then throw(("Order already executed: " + toString(L)))
112112 else if (valueOrElse(getBoolean(this, M(L)), false))
113113 then throw(("Order already cancelled: " + toString(L)))
114114 else true
115115
116116
117117 func aa () = valueOrElse(getInteger(this, l), 0)
118118
119119
120120 func ab (R,S) = {
121121 let ac = Q(R, S)
122122 valueOrElse(getInteger(this, ac), 0)
123123 }
124124
125125
126126 func ad (R,S) = {
127127 let ac = T(R, S)
128128 let ae = valueOrElse(getString(this, ac), "")
129129 if ((ae == ""))
130130 then nil
131131 else split(ae, ",")
132132 }
133133
134134
135135 func af (L,P) = {
136136 let ac = O(L, P)
137137 isDefined(getString(this, ac))
138138 }
139139
140140
141141 func ag (L,P) = {
142142 let ac = O(L, P)
143143 let ah = valueOrErrorMessage(getString(this, ac), ("Not order request for key: " + ac))
144144 let ai = split(ah, ",")
145145 let aj = valueOrErrorMessage(parseInt(ai[0]), "Invalid orderId")
146146 let ak = ai[1]
147147 let al = ai[2]
148148 let am = valueOrErrorMessage(parseInt(ai[3]), "Invalid type")
149149 let an = valueOrErrorMessage(parseInt(ai[4]), "Invalid triggerPrice")
150150 let ao = valueOrErrorMessage(parseInt(ai[5]), "Invalid limitPrice")
151151 $Tuple6(aj, ak, al, am, an, ao)
152152 }
153153
154154
155155 func ap (L) = {
156156 let aq = valueOrErrorMessage(getString(this, N(L)), ("Invalid order id: " + toString(L)))
157157 let ar = split(aq, ",")
158158 let ak = ar[0]
159159 let al = ar[1]
160160 let as = valueOrErrorMessage(parseInt(ar[2]), "Invalid amountIn")
161161 let at = valueOrErrorMessage(parseInt(ar[3]), "Invalid leverage")
162162 let am = valueOrErrorMessage(parseInt(ar[4]), "Invalid type")
163163 let an = valueOrErrorMessage(parseInt(ar[5]), "Invalid triggerPrice")
164164 let au = valueOrErrorMessage(parseInt(ar[6]), "Invalid paymentUsdn")
165165 let av = valueOrErrorMessage(parseInt(ar[7]), "Invalid side")
166166 let aw = ar[8]
167167 let ax = valueOrErrorMessage(parseInt(ar[9]), "Invalid positionId")
168168 let ao = valueOrErrorMessage(parseInt(ar[10]), "Invalid limitPrice")
169169 let ay = if ((size(ar) > 11))
170170 then valueOrErrorMessage(parseInt(ar[11]), "Invalid limitPrice")
171171 else 0
172172 $Tuple12(ak, al, as, at, am, an, au, av, aw, ax, ao, ay)
173173 }
174174
175175
176176 func az (R) = {
177177 let aA = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
178178 if ((aA == aA))
179179 then {
180180 let aB = {
181181 let aC = aA
182182 if ($isInstanceOf(aC, "Int"))
183183 then {
184184 let aD = aC
185185 aD
186186 }
187187 else throw("Invalid computeSpotPrice result")
188188 }
189189 value(aB)
190190 }
191191 else throw("Strict value is not equal to itself.")
192192 }
193193
194194
195195 func aE (R,S) = {
196196 let aA = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
197197 if ((aA == aA))
198198 then {
199199 let aB = {
200200 let aC = aA
201201 if ($isInstanceOf(aC, "(Int, Boolean)"))
202202 then {
203203 let aD = aC
204204 aD._1
205205 }
206206 else throw("Invalid computeFeeForTraderWithArtifact result")
207207 }
208208 value(aB)
209209 }
210210 else throw("Strict value is not equal to itself.")
211211 }
212212
213213
214214 func aF (aG,aH) = if (if ((aH == r))
215215 then true
216216 else (aH == q))
217217 then if ((aG == t))
218218 then u
219219 else t
220220 else aG
221221
222222
223223 func aI (R,S,aJ) = {
224224 let ak = addressFromStringValue(R)
225225 let aK = ((S + "_") + toString(aJ))
226226 let aL = H(g, aK)
227227 valueOrElse(getInteger(ak, aL), 0)
228228 }
229229
230230
231231 func aM (R,S,aJ) = {
232232 let ak = addressFromStringValue(R)
233233 let aK = ((S + "_") + toString(aJ))
234234 let aN = H(f, aK)
235235 valueOrElse(getInteger(ak, aN), 0)
236236 }
237237
238238
239239 func aO (aP) = F(aP, A)
240240
241241
242242 func aQ (L,R,S,aR,aS,P,aT,aU,aV,aW,aX,aY,aZ) = {
243243 let aq = makeString([R, S, toString(aR), toString(aS), toString(P), toString(aT), toString(aU), toString(aV), aW, toString(aX), toString(aY), toString(aZ)], ",")
244244 [StringEntry(N(L), aq)]
245245 }
246246
247247
248248 func ba (L,R,S,P,aT,aY) = {
249249 let bb = makeString([toString(L), R, S, toString(P), toString(aT), toString(aY)], ",")
250250 [StringEntry(O(L, P), bb)]
251251 }
252252
253253
254254 func bc (bd,R,S) = [StringEntry(T(R, S), bd)]
255255
256256
257257 func be (bf,L,R,S,bg) = {
258258 let bh = if (bg)
259259 then (bf :+ toString(L))
260260 else removeByIndex(bf, valueOrErrorMessage(indexOf(bf, toString(L)), ("No order with id: " + toString(L))))
261261 bh
262262 }
263263
264264
265265 func bi (L,R,S,bg) = {
266266 let bj = ad(R, S)
267267 let bh = be(bj, L, R, S, bg)
268268 let bk = makeString(bh, ",")
269269 bc(bk, R, S)
270270 }
271271
272272
273273 func bl (R,S,bm) = if ((0 > bm))
274274 then throw(("Invalid order count: " + toString(bm)))
275275 else [IntegerEntry(Q(R, S), bm)]
276276
277277
278278 func bn (bo) = [IntegerEntry(l, bo)]
279279
280280
281281 func bp (L) = [BooleanEntry(H(h, toString(L)), true)]
282282
283283
284284 func bq (L) = [BooleanEntry(H(i, toString(L)), true)]
285285
286286
287287 func br (R,S) = {
288288 let bs = aI(R, S, t)
289289 let bt = if ((bs != 0))
290290 then aM(R, S, t)
291291 else 0
292292 let bu = aI(R, S, u)
293293 let bv = if ((bu != 0))
294294 then aM(R, S, u)
295295 else 0
296296 [bt, bv]
297297 }
298298
299299
300300 @Callable(bw)
301301 func cleanUpStaleOrders (R,S) = {
302302 let bx = ad(R, S)
303303 let by = br(R, S)
304304 func bz (bA,L) = {
305305 let bB = valueOrErrorMessage(parseInt(L), "Invalid order id")
306306 let bC = ap(bB)
307307 let bD = bC._1
308308 let bE = bC._2
309309 let bF = bC._3
310310 let bG = bC._4
311311 let P = bC._5
312312 let bH = bC._6
313313 let bI = bC._7
314314 let bJ = bC._8
315315 let bK = bC._9
316316 let aX = bC._10
317317 let bL = bC._11
318318 let aZ = bC._12
319- if (if (if (if ((P == q))
319+ let bM = if (if (if ((P == q))
320320 then true
321321 else (P == r))
322322 then (by[0] != aX)
323323 else false)
324324 then (by[1] != aX)
325- else false)
325+ else false
326+ let bN = if ((P == s))
327+ then (lastBlock.timestamp >= aZ)
328+ else false
329+ if (if (bM)
330+ then true
331+ else bN)
326332 then {
327- let bM = bq(bB)
328- let bN = be(bA._1, bB, R, S, false)
329- $Tuple2(bN, (bA._2 ++ bM))
333+ let bO = bq(bB)
334+ let bP = be(bA._1, bB, R, S, false)
335+ $Tuple2(bP, (bA._2 ++ bO))
330336 }
331337 else bA
332338 }
333339
334- let bO = {
335- let bP = bx
336- let bQ = size(bP)
337- let bR = $Tuple2(bx, nil)
338- func bS (bT,bU) = if ((bU >= bQ))
339- then bT
340- else bz(bT, bP[bU])
340+ let bQ = {
341+ let bR = bx
342+ let bS = size(bR)
343+ let bT = $Tuple2(bx, nil)
344+ func bU (bV,bW) = if ((bW >= bS))
345+ then bV
346+ else bz(bV, bR[bW])
341347
342- func bV (bT,bU) = if ((bU >= bQ))
343- then bT
348+ func bX (bV,bW) = if ((bW >= bS))
349+ then bV
344350 else throw("List size exceeds 10")
345351
346- bV(bS(bS(bS(bS(bS(bS(bS(bS(bS(bS(bR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
352+ bX(bU(bU(bU(bU(bU(bU(bU(bU(bU(bU(bT, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
347353 }
348- let bW = bO._1
349- let bX = bO._2
350- ((bX ++ bl(R, S, size(bW))) ++ bc(makeString(bW, ","), R, S))
354+ let bY = bQ._1
355+ let bZ = bQ._2
356+ ((bZ ++ bl(R, S, size(bY))) ++ bc(makeString(bY, ","), R, S))
351357 }
352358
353359
354360
355361 @Callable(bw)
356-func setContext (bY) = if ((bw.caller != this))
362+func setContext (ca) = if ((bw.caller != this))
357363 then throw("Only self-call")
358- else [StringEntry(o, bY)]
364+ else [StringEntry(o, ca)]
359365
360366
361367
362368 @Callable(bw)
363369 func resetContext () = if ((bw.caller != this))
364370 then throw("Only self-call")
365371 else [DeleteEntry(o)]
366372
367373
368374
369375 @Callable(bw)
370-func initialize (bZ) = if (if (Y())
376+func initialize (cb) = if (if (Y())
371377 then true
372378 else (bw.caller != this))
373379 then throw("Unable to initialize")
374- else [StringEntry(a, toString(addressFromStringValue(bZ))), BooleanEntry(p, true)]
380+ else [StringEntry(a, toString(addressFromStringValue(cb))), BooleanEntry(p, true)]
375381
376382
377383
378384 @Callable(bw)
379-func createOrder (R,P,aT,aY,aR,aS,aV,aW,ca,cb,cc,cd,aZ) = {
385+func createOrder (R,P,aT,aY,aR,aS,aV,aW,cc,cd,ce,cf,aZ) = {
380386 let S = toString(bw.caller)
381- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
382- if ((ce == ce))
387+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
388+ if ((cg == cg))
383389 then if ((size(bw.payments) > 1))
384390 then throw("Invalid createOrder parameters: invalid payment count")
385391 else {
386- let cf = if ((size(bw.payments) == 1))
392+ let ch = if ((size(bw.payments) == 1))
387393 then $Tuple2(toBase58String(valueOrErrorMessage(bw.payments[0].assetId, "Invalid asset id")), bw.payments[0].amount)
388394 else $Tuple2("", 0)
389- let cg = cf._1
390- let ch = cf._2
391- let ci = invoke(this, "internalCreateOrder", [S, R, P, aT, aY, aR, aS, aV, aW, cg, ch, aZ], nil)
392- if ((ci == ci))
395+ let ci = ch._1
396+ let cj = ch._2
397+ let ck = invoke(this, "internalCreateOrder", [S, R, P, aT, aY, aR, aS, aV, aW, ci, cj, aZ], nil)
398+ if ((ck == ck))
393399 then {
394400 let aj = {
395- let aC = ci
401+ let aC = ck
396402 if ($isInstanceOf(aC, "Int"))
397403 then {
398404 let aD = aC
399405 aD
400406 }
401407 else throw("Invalid ID of created order")
402408 }
403409 if ((P == s))
404410 then {
405- let cj = if ((ca > 0))
406- then {
407- let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, ca, cb], nil)
408- if ((ck == ck))
409- then nil
410- else throw("Strict value is not equal to itself.")
411- }
412- else nil
413411 let cl = if ((cc > 0))
414412 then {
415- let cm = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, cc, cd], nil)
413+ let cm = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, cc, cd], nil)
416414 if ((cm == cm))
417415 then nil
418416 else throw("Strict value is not equal to itself.")
419417 }
420418 else nil
421- (cj ++ cl)
419+ let cn = if ((ce > 0))
420+ then {
421+ let co = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, ce, cf], nil)
422+ if ((co == co))
423+ then nil
424+ else throw("Strict value is not equal to itself.")
425+ }
426+ else nil
427+ (cl ++ cn)
422428 }
423429 else nil
424430 }
425431 else throw("Strict value is not equal to itself.")
426432 }
427433 else throw("Strict value is not equal to itself.")
428434 }
429435
430436
431437
432438 @Callable(bw)
433-func increasePositionWithStopLoss (R,aJ,aS,cn,aW,ca,cb,cc,cd) = {
439+func increasePositionWithStopLoss (R,aJ,aS,cp,aW,cc,cd,ce,cf,cq) = {
434440 let S = toString(bw.caller)
435- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
436- if ((ce == ce))
441+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
442+ if ((cg == cg))
437443 then if (if (!(Y()))
438444 then true
439445 else !(X(R)))
440446 then throw("Invalid increasePositionWithStopLoss parameters")
441447 else {
442- let co = aI(R, S, aJ)
443- if ((co != 0))
448+ let cr = aI(R, S, aJ)
449+ if ((cr != 0))
444450 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
445451 else {
446- let cp = invoke(this, "setContext", [S], nil)
447- if ((cp == cp))
452+ let cs = invoke(this, "setContext", [S], nil)
453+ if ((cs == cs))
448454 then {
449- let cq = invoke(addressFromStringValue(R), "increasePosition", [aJ, aS, cn, aW], bw.payments)
450- if ((cq == cq))
455+ let ct = invoke(addressFromStringValue(R), "increasePosition", [aJ, aS, cp, aW, cq], bw.payments)
456+ if ((ct == ct))
451457 then {
452- let cr = invoke(this, "resetContext", nil, nil)
453- if ((cr == cr))
458+ let cu = invoke(this, "resetContext", nil, nil)
459+ if ((cu == cu))
454460 then {
455- let cs = aI(R, S, aJ)
456- if ((cs == cs))
461+ let cv = aI(R, S, aJ)
462+ if ((cv == cv))
457463 then {
458- let as = B(cs)
459- let ct = if ((0 > cs))
464+ let as = B(cv)
465+ let cw = if ((0 > cv))
460466 then t
461467 else u
462- let cu = if ((ca > 0))
468+ let cx = if ((cc > 0))
463469 then {
464- let cu = invoke(this, "internalCreateOrder", [S, R, q, ca, cb, as, 0, ct, aW, "", 0, 0], nil)
465- if ((cu == cu))
470+ let cx = invoke(this, "internalCreateOrder", [S, R, q, cc, cd, as, 0, cw, aW, "", 0, 0], nil)
471+ if ((cx == cx))
466472 then nil
467473 else throw("Strict value is not equal to itself.")
468474 }
469475 else nil
470- if ((cu == cu))
476+ if ((cx == cx))
471477 then {
472- let cv = if ((cc > 0))
478+ let cy = if ((ce > 0))
473479 then {
474- let cv = invoke(this, "internalCreateOrder", [S, R, r, cc, cd, as, 0, ct, aW, "", 0, 0], nil)
475- if ((cv == cv))
480+ let cy = invoke(this, "internalCreateOrder", [S, R, r, ce, cf, as, 0, cw, aW, "", 0, 0], nil)
481+ if ((cy == cy))
476482 then nil
477483 else throw("Strict value is not equal to itself.")
478484 }
479485 else nil
480- if ((cv == cv))
486+ if ((cy == cy))
481487 then nil
482488 else throw("Strict value is not equal to itself.")
483489 }
484490 else throw("Strict value is not equal to itself.")
485491 }
486492 else throw("Strict value is not equal to itself.")
487493 }
488494 else throw("Strict value is not equal to itself.")
489495 }
490496 else throw("Strict value is not equal to itself.")
491497 }
492498 else throw("Strict value is not equal to itself.")
493499 }
494500 }
495501 else throw("Strict value is not equal to itself.")
496502 }
497503
498504
499505
500506 @Callable(bw)
501507 func internalMarkOrderExecuted (R,S,L) = if (if (if (!(Y()))
502508 then true
503509 else !(X(R)))
504510 then true
505511 else !((bw.caller == this)))
506512 then throw("Invalid internalMarkOrderExecuted parameters")
507513 else {
508- let cw = (ab(R, S) - 1)
509- ((bl(R, S, cw) ++ bi(L, R, S, false)) ++ bp(L))
514+ let cz = (ab(R, S) - 1)
515+ ((bl(R, S, cz) ++ bi(L, R, S, false)) ++ bp(L))
510516 }
511517
512518
513519
514520 @Callable(bw)
515521 func internalCreateOrderRequest (S,R,L,P,aT,aY) = if (if (if (if (if (!(Y()))
516522 then true
517523 else !(X(R)))
518524 then true
519525 else (0 >= aT))
520526 then true
521527 else (0 > aY))
522528 then true
523529 else !((bw.caller == this)))
524530 then throw("Invalid internalCreateOrderRequest parameters")
525531 else ba(L, R, S, P, aT, aY)
526532
527533
528534
529535 @Callable(bw)
530-func internalCreateOrder (S,R,P,aT,aY,aR,aS,aV,aW,cx,cy,aZ) = if (if (if (if (if (if (if (if (if (if (!(Y()))
536+func internalCreateOrder (S,R,P,aT,aY,aR,aS,aV,aW,cA,cB,aZ) = if (if (if (if (if (if (if (if (if (if (!(Y()))
531537 then true
532538 else !(X(R)))
533539 then true
534540 else (0 >= aT))
535541 then true
536542 else (0 > aY))
537543 then true
538544 else (0 >= aR))
539545 then true
540546 else (0 > aS))
541547 then true
542548 else !(if ((aV == t))
543549 then true
544550 else (aV == u)))
545551 then true
546552 else !(if (if ((P == q))
547553 then true
548554 else (P == r))
549555 then true
550556 else (P == s)))
551557 then true
552558 else !((bw.caller == this)))
553559 then true
554560 else (0 > aZ))
555561 then throw("Invalid internalCreateOrder parameters")
556562 else {
557563 let aj = (aa() + 1)
558- let cz = aF(aV, P)
559- let cw = (ab(R, S) + 1)
560- let co = aI(R, S, cz)
561- let aJ = if (if (if ((co == 0))
564+ let cC = aF(aV, P)
565+ let cz = (ab(R, S) + 1)
566+ let cr = aI(R, S, cC)
567+ let aJ = if (if (if ((cr == 0))
562568 then true
563- else if ((co > 0))
569+ else if ((cr > 0))
564570 then (aV == t)
565571 else false)
566572 then true
567- else if ((0 > co))
573+ else if ((0 > cr))
568574 then (aV == u)
569575 else false)
570576 then v
571577 else w
572- if (if ((co == 0))
578+ if (if ((cr == 0))
573579 then if ((P == q))
574580 then true
575581 else (P == r)
576582 else false)
577583 then throw("Can not create STOP/TAKE order: no position")
578584 else {
579- let cA = if ((aJ == v))
580- then if (if ((cx != toBase58String(V())))
585+ let cD = if ((aJ == v))
586+ then if (if ((cA != toBase58String(V())))
581587 then true
582- else (cy != aR))
588+ else (cB != aR))
583589 then throw("Invalid createLimitOrder parameters: invalid payment")
584590 else {
585- let cB = invoke(W(), "deposit", nil, [AttachedPayment(V(), cy)])
586- if ((cB == cB))
587- then cy
591+ let cE = invoke(W(), "deposit", nil, [AttachedPayment(V(), cB)])
592+ if ((cE == cE))
593+ then cB
588594 else throw("Strict value is not equal to itself.")
589595 }
590596 else 0
591- if ((cA == cA))
597+ if ((cD == cD))
592598 then {
593- let ax = if ((co != 0))
594- then aM(R, S, cz)
599+ let ax = if ((cr != 0))
600+ then aM(R, S, cC)
595601 else 0
596602 if (if (if ((P == q))
597603 then true
598604 else (P == r))
599605 then (ax == 0)
600606 else false)
601607 then throw("STOP and TAKE order should be assigned to position with id != 0")
602- else if ((cw > x))
608+ else if ((cz > x))
603609 then throw("Invalid createLimitOrder parameters: order count")
604610 else {
605- let cC = (((aQ(aj, R, S, aR, aS, P, aT, cA, aV, aW, ax, aY, aZ) ++ bi(aj, R, S, true)) ++ bl(R, S, cw)) ++ bn(aj))
606- $Tuple2(cC, aj)
611+ let cF = (((aQ(aj, R, S, aR, aS, P, aT, cD, aV, aW, ax, aY, aZ) ++ bi(aj, R, S, true)) ++ bl(R, S, cz)) ++ bn(aj))
612+ $Tuple2(cF, aj)
607613 }
608614 }
609615 else throw("Strict value is not equal to itself.")
610616 }
611617 }
612618
613619
614620
615621 @Callable(bw)
616622 func cancelOrder (L) = {
617- let cD = ap(L)
618- let R = cD._1
619- let S = cD._2
620- let aR = cD._3
621- let aS = cD._4
622- let P = cD._5
623- let aT = cD._6
624- let cE = cD._7
625- let aV = cD._8
626- let aW = cD._9
627- let aX = cD._10
628- let aY = cD._11
623+ let cG = ap(L)
624+ let R = cG._1
625+ let S = cG._2
626+ let aR = cG._3
627+ let aS = cG._4
628+ let P = cG._5
629+ let aT = cG._6
630+ let cH = cG._7
631+ let aV = cG._8
632+ let aW = cG._9
633+ let aX = cG._10
634+ let aY = cG._11
629635 if (if (if (!(Y()))
630636 then true
631637 else !(Z(L)))
632638 then true
633639 else !((toString(bw.caller) == S)))
634640 then throw("Invalid cancelOrder parameters")
635641 else {
636- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
637- if ((ce == ce))
642+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
643+ if ((cg == cg))
638644 then {
639- let cw = (ab(R, S) - 1)
640- let cF = if ((cE > 0))
645+ let cz = (ab(R, S) - 1)
646+ let cI = if ((cH > 0))
641647 then {
642- let cG = invoke(W(), "withdraw", [toBase58String(V()), cE], nil)
643- if ((cG == cG))
648+ let cJ = invoke(W(), "withdraw", [toBase58String(V()), cH], nil)
649+ if ((cJ == cJ))
644650 then nil
645651 else throw("Strict value is not equal to itself.")
646652 }
647653 else nil
648- if ((cF == cF))
649- then (((bq(L) ++ bi(L, R, S, false)) ++ bl(R, S, cw)) ++ (if ((cE > 0))
650- then [ScriptTransfer(bw.caller, cE, V())]
654+ if ((cI == cI))
655+ then (((bq(L) ++ bi(L, R, S, false)) ++ bl(R, S, cz)) ++ (if ((cH > 0))
656+ then [ScriptTransfer(bw.caller, cH, V())]
651657 else nil))
652658 else throw("Strict value is not equal to itself.")
653659 }
654660 else throw("Strict value is not equal to itself.")
655661 }
656662 }
657663
658664
659665
660666 @Callable(bw)
661-func executeOrder (L) = {
662- let cH = ap(L)
663- let R = cH._1
664- let S = cH._2
665- let aR = cH._3
666- let aS = cH._4
667- let P = cH._5
668- let aT = cH._6
669- let cE = cH._7
670- let aV = cH._8
671- let aW = cH._9
672- let aX = cH._10
673- let aY = cH._11
674- let ce = invoke(this, "cleanUpStaleOrders", [R, S], nil)
675- if ((ce == ce))
667+func executeOrder (L,cq) = {
668+ let cK = ap(L)
669+ let R = cK._1
670+ let S = cK._2
671+ let aR = cK._3
672+ let aS = cK._4
673+ let P = cK._5
674+ let aT = cK._6
675+ let cH = cK._7
676+ let aV = cK._8
677+ let aW = cK._9
678+ let aX = cK._10
679+ let aY = cK._11
680+ let cg = invoke(this, "cleanUpStaleOrders", [R, S], nil)
681+ if ((cg == cg))
676682 then {
677- let cz = aF(aV, P)
683+ let cC = aF(aV, P)
678684 if (if (!(Y()))
679685 then true
680686 else !(Z(L)))
681687 then throw("Invalid executeOrder parameters")
682688 else {
683- let co = aI(R, S, cz)
684- if ((co == co))
689+ let cr = aI(R, S, cC)
690+ if ((cr == cr))
685691 then {
686- let cI = if ((co != 0))
687- then aM(R, S, cz)
692+ let cL = if ((cr != 0))
693+ then aM(R, S, cC)
688694 else 0
689- let cJ = if ((P == q))
695+ let cM = if ((P == q))
690696 then {
691- let cK = if ((co > 0))
697+ let cN = if ((cr > 0))
692698 then t
693- else if ((0 > co))
699+ else if ((0 > cr))
694700 then u
695701 else throw("Can not execute STOP order: no open position")
696- let cL = az(R)
697- let cM = if ((aV == cK))
702+ let cO = az(R)
703+ let cP = if ((aV == cN))
698704 then throw("Can not execute STOP order: reduce only")
699- else if ((cI != aX))
705+ else if ((cL != aX))
700706 then throw("Can not execute STOP order: position closed")
701- else if ((cK == t))
702- then (aT >= cL)
703- else (cL >= aT)
704- if (cM)
705- then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
707+ else if ((cN == t))
708+ then (aT >= cO)
709+ else (cO >= aT)
710+ if (cP)
711+ then $Tuple3("closePosition", [G(aR, B(cr)), cC, F(aY, B(cr)), false, cq], nil)
706712 else throw("Can not execute STOP order: triggerPrice mismatch")
707713 }
708714 else if ((P == r))
709715 then {
710- let cK = if ((co > 0))
716+ let cN = if ((cr > 0))
711717 then t
712- else if ((0 > co))
718+ else if ((0 > cr))
713719 then u
714720 else throw("Can not execute STOP order: no open position")
715- let cL = az(R)
716- let cM = if ((aV == cK))
721+ let cO = az(R)
722+ let cP = if ((aV == cN))
717723 then throw("Can not execute TAKE order: reduce only")
718- else if ((cI != aX))
719- then throw(((("Can not execute TAKE order: position closed " + toString(cI)) + "!=") + toString(aX)))
720- else if ((cK == t))
721- then (cL >= aT)
722- else (aT >= cL)
723- if (cM)
724- then $Tuple3("closePosition", [G(aR, B(co)), cz, F(aY, B(co)), false], nil)
724+ else if ((cL != aX))
725+ then throw(((("Can not execute TAKE order: position closed " + toString(cL)) + "!=") + toString(aX)))
726+ else if ((cN == t))
727+ then (cO >= aT)
728+ else (aT >= cO)
729+ if (cP)
730+ then $Tuple3("closePosition", [G(aR, B(cr)), cC, F(aY, B(cr)), false, cq], nil)
725731 else throw("Can not execute TAKE order: triggerPrice mismatch")
726732 }
727733 else if ((P == s))
728734 then {
729- let cL = az(R)
730- let cN = if ((aY == 0))
735+ let cO = az(R)
736+ let cQ = if ((aY == 0))
731737 then aO(aT)
732738 else B((aT - aY))
733- let cM = if ((cL >= (aT - cN)))
734- then ((aT + cN) >= cL)
739+ let cP = if ((cO >= (aT - cQ)))
740+ then ((aT + cQ) >= cO)
735741 else false
736- if (cM)
742+ if (cP)
737743 then {
738- let cO = (cE - F(cE, aE(R, S)))
744+ let cR = (cH - F(cH, aE(R, S)))
739745 $Tuple3("increasePosition", [aV, aS, if ((aY == 0))
740746 then 0
741- else D(cO, aY), aW], [AttachedPayment(V(), cE)])
747+ else D(cR, aY), aW, cq], [AttachedPayment(V(), cH)])
742748 }
743749 else throw("Can not execute LIMIT order: triggerPrice mismatch")
744750 }
745751 else throw(("Invalid order type: " + toString(P)))
746- let cP = cJ._1
747- let cQ = cJ._2
748- let cR = cJ._3
749- let cF = if ((size(cR) == 1))
752+ let cS = cM._1
753+ let cT = cM._2
754+ let cU = cM._3
755+ let cI = if ((size(cU) == 1))
750756 then {
751- let cG = invoke(W(), "withdraw", [toBase58String(V()), cR[0].amount], nil)
752- if ((cG == cG))
757+ let cJ = invoke(W(), "withdraw", [toBase58String(V()), cU[0].amount], nil)
758+ if ((cJ == cJ))
753759 then nil
754760 else throw("Strict value is not equal to itself.")
755761 }
756762 else nil
757- if ((cF == cF))
763+ if ((cI == cI))
758764 then {
759- let cp = invoke(this, "setContext", [S], nil)
760- if ((cp == cp))
765+ let cs = invoke(this, "setContext", [S], nil)
766+ if ((cs == cs))
761767 then {
762- let cq = invoke(addressFromStringValue(R), cP, cQ, cR)
763- if ((cq == cq))
768+ let ct = invoke(addressFromStringValue(R), cS, cT, cU)
769+ if ((ct == ct))
764770 then {
765- let cr = invoke(this, "resetContext", nil, nil)
766- if ((cr == cr))
771+ let cu = invoke(this, "resetContext", nil, nil)
772+ if ((cu == cu))
767773 then {
768- let cS = if ((P == s))
774+ let cV = if ((P == s))
769775 then {
770- let cT = aI(R, S, cz)
771- if ((cT == cT))
776+ let cW = aI(R, S, cC)
777+ if ((cW == cW))
772778 then {
773- let cU = aM(R, S, cz)
774- if ((cU == cU))
779+ let cX = aM(R, S, cC)
780+ if ((cX == cX))
775781 then {
776- let cV = (cT - co)
777- let cW = if ((cT > 0))
782+ let cY = (cW - cr)
783+ let cZ = if ((cW > 0))
778784 then u
779785 else t
780- let cX = if (af(L, r))
786+ let da = if (af(L, r))
781787 then {
782- let cY = ag(L, r)
783- let cZ = cY._1
784- let da = cY._2
785- let db = cY._3
786- let dc = cY._4
787- let dd = cY._5
788- let de = cY._6
789- let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
790- if ((ci == ci))
788+ let db = ag(L, r)
789+ let dc = db._1
790+ let dd = db._2
791+ let de = db._3
792+ let df = db._4
793+ let dg = db._5
794+ let dh = db._6
795+ let ck = invoke(this, "internalCreateOrder", [de, dd, df, dg, dh, cY, 0, cZ, "", "", 0, 0], nil)
796+ if ((ck == ck))
791797 then nil
792798 else throw("Strict value is not equal to itself.")
793799 }
794800 else nil
795- if ((cX == cX))
801+ if ((da == da))
796802 then {
797- let df = if (af(L, q))
803+ let di = if (af(L, q))
798804 then {
799- let dg = ag(L, q)
800- let cZ = dg._1
801- let da = dg._2
802- let db = dg._3
803- let dc = dg._4
804- let dd = dg._5
805- let de = dg._6
806- let ci = invoke(this, "internalCreateOrder", [db, da, dc, dd, de, cV, 0, cW, "", "", 0, 0], nil)
807- if ((ci == ci))
805+ let dj = ag(L, q)
806+ let dc = dj._1
807+ let dd = dj._2
808+ let de = dj._3
809+ let df = dj._4
810+ let dg = dj._5
811+ let dh = dj._6
812+ let ck = invoke(this, "internalCreateOrder", [de, dd, df, dg, dh, cY, 0, cZ, "", "", 0, 0], nil)
813+ if ((ck == ck))
808814 then nil
809815 else throw("Strict value is not equal to itself.")
810816 }
811817 else nil
812- if ((df == df))
813- then (cX ++ df)
818+ if ((di == di))
819+ then (da ++ di)
814820 else throw("Strict value is not equal to itself.")
815821 }
816822 else throw("Strict value is not equal to itself.")
817823 }
818824 else throw("Strict value is not equal to itself.")
819825 }
820826 else throw("Strict value is not equal to itself.")
821827 }
822828 else nil
823- if ((cS == cS))
829+ if ((cV == cV))
824830 then {
825- let dh = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
826- if ((dh == dh))
831+ let dk = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
832+ if ((dk == dk))
827833 then nil
828834 else throw("Strict value is not equal to itself.")
829835 }
830836 else throw("Strict value is not equal to itself.")
831837 }
832838 else throw("Strict value is not equal to itself.")
833839 }
834840 else throw("Strict value is not equal to itself.")
835841 }
836842 else throw("Strict value is not equal to itself.")
837843 }
838844 else throw("Strict value is not equal to itself.")
839845 }
840846 else throw("Strict value is not equal to itself.")
841847 }
842848 }
843849 else throw("Strict value is not equal to itself.")
844850 }
845851
846852
847853
848854 @Callable(bw)
849-func view_canExecuteOrder (L) = {
850- let aA = invoke(this, "executeOrder", [L], nil)
855+func view_canExecuteOrder (L,cq) = {
856+ let aA = invoke(this, "executeOrder", [L, cq], nil)
851857 if ((aA == aA))
852858 then throw("Success")
853859 else throw("Strict value is not equal to itself.")
854860 }
855861
856862
857-@Verifier(di)
858-func dj () = {
859- let dk = getString(this, a)
860- if (isDefined(dk))
863+@Verifier(dl)
864+func dm () = {
865+ let dn = getString(this, a)
866+ if (isDefined(dn))
861867 then {
862- let dl = getString(addressFromStringValue(value(dk)), b)
863- if (isDefined(dl))
864- then valueOrElse(getBoolean(addressFromStringValue(value(dl)), ((("status_" + toString(this)) + "_") + toBase58String(di.id))), false)
868+ let do = getString(addressFromStringValue(value(dn)), b)
869+ if (isDefined(do))
870+ then valueOrElse(getBoolean(addressFromStringValue(value(do)), ((("status_" + toString(this)) + "_") + toBase58String(dl.id))), false)
865871 else throw("unable to verify: admin not set in coordinator")
866872 }
867- else sigVerify(di.bodyBytes, di.proofs[0], di.senderPublicKey)
873+ else sigVerify(dl.bodyBytes, dl.proofs[0], dl.senderPublicKey)
868874 }
869875

github/deemru/w8io/169f3d6 
266.15 ms