tx · a3rQrdX8a5KMy3oKXfT45zDMywFtHtu9mHVbi8zkBA8 3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK: -0.07000000 Waves 2023.02.13 12:51 [2447680] smart account 3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK > SELF 0.00000000 Waves
{ "type": 13, "id": "a3rQrdX8a5KMy3oKXfT45zDMywFtHtu9mHVbi8zkBA8", "fee": 7000000, "feeAssetId": null, "timestamp": 1676281850488, "version": 2, "chainId": 84, "sender": "3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK", "senderPublicKey": "FFdBua5rzzMkZebvsvmN7sAdU7XhFK8QNJ3hiwwxAYRA", "proofs": [ "4WJiw4b1wFY5FQEkxMUR88yyNFD1RGU5x2gX2JpEVjNtfHTt7Rmcd6wePzc3vhNstjsN7oGzcrgF5Zhh1QnxGxr4", "2Vq965aDuHx9Yu3UHvUYdqRH2i99WvzyJGMFij139anD6ptwscbCxPw42hf9Lh3BN1djermVuXtr7wrpTnuvSoVy" ], "script": "base64:BgJiCAISAwoBCBIDCgEIEgMKAQgSBAoCCAESBQoDAggBEgUKAwgBARIECgIICBIECgIICBIECgIIARIFCgMCCAESAwoBCBIECgIIAhIDCgEIEgMKARgSAwoBGBIECgIICBIAEgBgAAdrQWN0aXZlAgZhY3RpdmUAC2tBY3RpdmVHbG9iAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAPa0RlcHJlY2F0ZWRQb29sAgtkZXByZWNhdGVkXwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkABtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCHl9wcmV2aW91c19wb29sX2ZyYWN0aW9uX3Jld2FyZAATa0hlaWdodFBvb2xGcmFjdGlvbgIaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAE2tSZXdhcmRVcGRhdGVIZWlnaHQCFHJld2FyZF91cGRhdGVfaGVpZ2h0ABZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAhRfc2hhcmVfdG9rZW5zX2xvY2tlZAAWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAIVX3NoYXJlX3Rva2Vuc19ibG9ja2VkABprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQIaX3NoYXJlX3Rva2Vuc19ibG9ja2VkX3R5cGUAHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQCHF9zaGFyZV90b2tlbnNfYmxvY2tlZF9oZWlnaHQAF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsAhVfc2hhcmVfdG9rZW5zX3ZpcnR1YWwAFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMCGl90b3RhbF9zaGFyZV90b2tlbnNfbG9ja2VkABNrU2hhcmVUb2tlbnNWaXJ0dWFsAhtfdG90YWxfc2hhcmVfdG9rZW5zX3ZpcnR1YWwAC2tMb2NrUGFyYW1zAgxfbG9ja19wYXJhbXMADWtMb2NrV2F2ZXNGZWUCDmxvY2tfd2F2ZXNfZmVlAA5rUG9vbEJvb3N0Q29lZgILX2Jvb3N0X2NvZWYAEWtGYXJtTGFzdEludGVyZXN0Ag5fbGFzdF9pbnRlcmVzdAAVa0Zhcm1Vc2VyTGFzdEludGVyZXN0Ag5fbGFzdF9pbnRlcmVzdAASa0Jvb3N0TGFzdEludGVyZXN0AhBfbGFzdF9pbnRlcmVzdF9iABZrQm9vc3RVc2VyTGFzdEludGVyZXN0AhJfbGFzdF9pbnRlcmVzdF91X2IAE2tMYXN0SW50ZXJlc3RIZWlnaHQCFV9sYXN0X2ludGVyZXN0X2hlaWdodAAHa1NXT1BpZAIHU1dPUF9pZAAOa0F2YWlsYWJsZVNXT1ACD19hdmFpbGFibGVfU1dPUAAQa0hhcnZlc3RQb29sVm90ZQIYX2hhcnZlc3RfcG9vbF92b3RlX2dTV09QAAlrUG9vbFZvdGUCEF9wb29sX3ZvdGVfZ1NXT1AADWtVc2VyUG9vbFZvdGUCEF91c2VyX3ZvdGVfZ1NXT1AACmtQb29sU3RydWMCC19wb29sX3N0cnVjAA5rVXNlclBvb2xTdHJ1YwIQX3VzZXJfcG9vbF9zdHJ1YwAUa0hhcnZlc3RVc2VyUG9vbFZvdGUCHV9oYXJ2ZXN0X3VzZXJfcG9vbF92b3RlX2dTV09QABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AhRmaXJzdF9oYXJ2ZXN0X2hlaWdodAANa1NoYXJlTGltaXRGSAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAATa1N0cmF0QkZhcm1JbnRlcmVzdAIWX3N0cmF0X2JfZmFybV9pbnRlcmVzdAANa0NwbW1Db250cmFjdAINY3BtbV9jb250cmFjdAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAAtrR292QWRkcmVzcwISZ292ZXJuYW5jZV9hZGRyZXNzABFrTFBGYXJtaW5nQWRkcmVzcwIKbHBfZmFybWluZwAUa0Zhcm1pbmdUcmVhc3VyZUFkZHICEGZhcm1pbmdfdHJlYXN1cmUABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQAOdG90YWxWb3RlU2hhcmUAgMivoCUAC3NjYWxlVmFsdWU4AIDC1y8AEmxvY2tCb29zdENvZWZTY2FsZQDoBwAQZGVmUG9vbEJvb3N0Q29lZgD0AwAOc3RhcnRFbWlzc2lvbkgAn5OVAQAQc3dvcFllYXJFbWlzc2lvbgCAgOmDsd4WAA1ibG9ja3NQZXJZZWFyAPqPIAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEWFkbWluSW52b2tlUHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzABNmYXJtaW5nVHJlYXN1cmVBZGRyCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUUa0Zhcm1pbmdUcmVhc3VyZUFkZHIADGNwbW1Db250cmFjdAkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtDcG1tQ29udHJhY3QABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAEU1dPUAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrU1dPUGlkARZnZXRSZXdhcmRzUGVyQmxvY2tJbmZvAAQPZW1pc3Npb25QZXJpb2RzCQBpAgkAZQIFBmhlaWdodAUOc3RhcnRFbWlzc2lvbkgFDWJsb2Nrc1BlclllYXIKAQxjYWxjRW1pc3Npb24CA2FjYwFpBAskdDA0NzQ3NDc4NAUDYWNjBAtjdXJFbWlzc2lvbggFCyR0MDQ3NDc0Nzg0Al8xBAxwcmV2RW1pc3Npb24IBQskdDA0NzQ3NDc4NAJfMgMJAGYCBQ9lbWlzc2lvblBlcmlvZHMFAWkJAJQKAgkAawMFC2N1ckVtaXNzaW9uAEsAZAULY3VyRW1pc3Npb24JAJQKAgULY3VyRW1pc3Npb24FDHByZXZFbWlzc2lvbgQLJHQwNDk0MjUxMDgKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFEHN3b3BZZWFyRW1pc3Npb24FEHN3b3BZZWFyRW1pc3Npb24KAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNhbGNFbWlzc2lvbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAtjdXJFbWlzc2lvbggFCyR0MDQ5NDI1MTA4Al8xBAxwcmV2RW1pc3Npb24IBQskdDA0OTQyNTEwOAJfMgkAlQoDCQBpAgULY3VyRW1pc3Npb24FDWJsb2Nrc1BlclllYXIJAGkCBQxwcmV2RW1pc3Npb24FDWJsb2Nrc1BlclllYXIJAGQCBQ5zdGFydEVtaXNzaW9uSAkAaAIFDWJsb2Nrc1BlclllYXIFD2VtaXNzaW9uUGVyaW9kcwEVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AAABFGdldEZIU2hhcmVMaW1pdFRva2VuAQRwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEcG9vbAUNa1NoYXJlTGltaXRGSAkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUNa1NoYXJlTGltaXRGSAESZ2V0VG90YWxTaGFyZVRva2VuAQRwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMBDGdldFBvb2xWb3RlZAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ12b3RpbmdBZGRyZXNzCQCsAgIFBHBvb2wFCWtQb29sVm90ZQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ12b3RpbmdBZGRyZXNzCQCsAgIFBHBvb2wFCmtQb29sU3RydWMCAAIBXwAAAAABEGdldFVzZXJQb29sVm90ZWQCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ12b3RpbmdBZGRyZXNzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQRwb29sBQ1rVXNlclBvb2xWb3RlCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFDmtVc2VyUG9vbFN0cnVjAgACAV8AAAAAAQ9nZXRTaGFyZUFzc2V0SWQBBHBvb2wJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBDmNhbGNTY2FsZVZhbHVlAghhc3NldElkMQhhc3NldElkMgQQYXNzZXRJZDFEZWNpbWFscwgJAQV2YWx1ZQEJAOwHAQUIYXNzZXRJZDEIZGVjaW1hbHMEEGFzc2V0SWQyRGVjaW1hbHMICQEFdmFsdWUBCQDsBwEFCGFzc2V0SWQyCGRlY2ltYWxzBAtzY2FsZURpZ2l0cwkAZAIJAGUCBRBhc3NldElkMkRlY2ltYWxzBRBhc3NldElkMURlY2ltYWxzAAgJAGwGAAoAAAULc2NhbGVEaWdpdHMAAAAABQRET1dOARF1c2VyQXZhaWxhYmxlU1dPUAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QAAABCnJld2FyZEluZm8BBHBvb2wECyR0MDY5MjM3MDM4CQEWZ2V0UmV3YXJkc1BlckJsb2NrSW5mbwAEGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50CAULJHQwNjkyMzcwMzgCXzEEG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwgFCyR0MDY5MjM3MDM4Al8yBBhsYXN0RW1pc3Npb25VcGRhdGVIZWlnaHQIBQskdDA2OTIzNzAzOAJfMwQZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAKwCAgkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQScmV3YXJkVXBkYXRlSGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUKZ292QWRkcmVzcwUTa1Jld2FyZFVwZGF0ZUhlaWdodAkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFE2tSZXdhcmRVcGRhdGVIZWlnaHQCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgUScmV3YXJkVXBkYXRlSGVpZ2h0BBpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzCQCsAgIJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBFyZXdhcmRQb29sQ3VycmVudAkAawMFGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BRlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50BQ50b3RhbFZvdGVTaGFyZQQScmV3YXJkUG9vbFByZXZpb3VzCQBrAwUadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQFGnJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzBQ50b3RhbFZvdGVTaGFyZQQVcmV3YXJkUG9vbFByZXZDdXJyZW50CQBrAwUbdG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzBRlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50BQ50b3RhbFZvdGVTaGFyZQQWcmV3YXJkUG9vbFByZXZQcmV2aW91cwkAawMFG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwUacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMFDnRvdGFsVm90ZVNoYXJlAwMJAGYCBRFyZXdhcmRQb29sQ3VycmVudAUadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQGCQBmAgUScmV3YXJkUG9vbFByZXZpb3VzBRt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAIBAmJyZXdhcmRQb29sQ3VycmVudCA+IHRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50IG9yIHJld2FyZFBvb2xQcmV2aW91cyA+IHRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkAmQoHBRFyZXdhcmRQb29sQ3VycmVudAUScmV3YXJkVXBkYXRlSGVpZ2h0BRJyZXdhcmRQb29sUHJldmlvdXMFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQFGGxhc3RFbWlzc2lvblVwZGF0ZUhlaWdodAUVcmV3YXJkUG9vbFByZXZDdXJyZW50BRZyZXdhcmRQb29sUHJldlByZXZpb3VzARNnZXRMYXN0SW50ZXJlc3RJbmZvAQRwb29sBAxmYXJtSW50ZXJlc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0CQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BA1ib29zdEludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0AAAEEmxhc3RJbnRlcmVzdEhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAlQoDBRJsYXN0SW50ZXJlc3RIZWlnaHQFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAELY2FsY0Zhcm1Sd2QCBHBvb2wOY3VyVG90YWxSZXdhcmQEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgkAawMFDmN1clRvdGFsUmV3YXJkBRJsb2NrQm9vc3RDb2VmU2NhbGUJAGQCBQ1wb29sQm9vc3RDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUBDGNhbGNCb29zdFJ3ZAIEcG9vbA5jdXJUb3RhbFJld2FyZAQNcG9vbEJvb3N0Q29lZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQm9vc3RDb2VmBRBkZWZQb29sQm9vc3RDb2VmCQBrAwUOY3VyVG90YWxSZXdhcmQFDXBvb2xCb29zdENvZWYJAGQCBQ1wb29sQm9vc3RDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUBDGNhbGNJbnRlcmVzdAwEcG9vbBJsYXN0SW50ZXJlc3RIZWlnaHQScmV3YXJkVXBkYXRlSGVpZ2h0FnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQMZmFybUludGVyZXN0DWJvb3N0SW50ZXJlc3QJcG9vbFZvdGVkFWN1cnJlbnRSZXdhcmRQZXJCbG9jaxBzaGFyZVRva2VuTG9ja2VkFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sKc2NhbGVWYWx1ZQh0b0hlaWdodAQNJHQwMTAwNTIxMTIzNwMDAwkAZgIFEnJld2FyZFVwZGF0ZUhlaWdodAUIdG9IZWlnaHQJAAACBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHBgMJAGYCBQh0b0hlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0CQECIT0CBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHBAFyCQBoAgUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAZQIFCHRvSGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJUKAwUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0AwMDCQBmAgUIdG9IZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAAAIFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcJAGYCBRJsYXN0SW50ZXJlc3RIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAcEAXIJAGgCBRVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAGUCBQh0b0hlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0CQCVCgMFAXIFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAQJcndkQmZyVXBkCQBoAgUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAZQIFEnJld2FyZFVwZGF0ZUhlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0BAZmQmZyVXAJAGQCBQxmYXJtSW50ZXJlc3QJAGsDCQELY2FsY0Zhcm1Sd2QCBQRwb29sBQlyd2RCZnJVcGQFCnNjYWxlVmFsdWUFEHNoYXJlVG9rZW5Mb2NrZWQEBmJCZnJVcAkAZAIFDWJvb3N0SW50ZXJlc3QDCQBmAgUJcG9vbFZvdGVkAAAJAGsDCQEMY2FsY0Jvb3N0UndkAgUEcG9vbAUJcndkQmZyVXBkBQtzY2FsZVZhbHVlOAUJcG9vbFZvdGVkAAAEA3J3ZAkAaAIFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAZQIFCHRvSGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAJUKAwUDcndkBQZmQmZyVXAFBmJCZnJVcAQGcmV3YXJkCAUNJHQwMTAwNTIxMTIzNwJfMQQOZmFybUludHJCZWZvcmUIBQ0kdDAxMDA1MjExMjM3Al8yBA9ib29zdEludHJCZWZvcmUIBQ0kdDAxMDA1MjExMjM3Al8zBA9uZXdGYXJtSW50ZXJlc3QJAGQCBQ5mYXJtSW50ckJlZm9yZQkAawMJAQtjYWxjRmFybVJ3ZAIFBHBvb2wFBnJld2FyZAUKc2NhbGVWYWx1ZQUQc2hhcmVUb2tlbkxvY2tlZAQQbmV3Qm9vc3RJbnRlcmVzdAkAZAIFD2Jvb3N0SW50ckJlZm9yZQMJAGYCBQlwb29sVm90ZWQAAAkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQZyZXdhcmQFC3NjYWxlVmFsdWU4BQlwb29sVm90ZWQAAAkAlAoCBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QBCWNsYWltQ2FsYwIEcG9vbAR1c2VyBApzY2FsZVZhbHVlCQEOY2FsY1NjYWxlVmFsdWUCBQRTV09QCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQJcG9vbFZvdGVkCQEMZ2V0UG9vbFZvdGVkAQUEcG9vbAQKdVBvb2xWb3RlZAkBEGdldFVzZXJQb29sVm90ZWQCBQRwb29sBQR1c2VyBApzaGFyZVRva2VuCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQpzaGFyZVRva2VuBBJzdHJhdEJGYXJtSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU3RyYXRCRmFybUludGVyZXN0AAAEDSR0MDEyMDc1MTIxNTYJARNnZXRMYXN0SW50ZXJlc3RJbmZvAQUEcG9vbAQSbGFzdEludGVyZXN0SGVpZ2h0CAUNJHQwMTIwNzUxMjE1NgJfMQQMZmFybUludGVyZXN0CAUNJHQwMTIwNzUxMjE1NgJfMgQNYm9vc3RJbnRlcmVzdAgFDSR0MDEyMDc1MTIxNTYCXzMEDSR0MDEyMTYxMTI0MTgJAQpyZXdhcmRJbmZvAQUEcG9vbAQVY3VycmVudFJld2FyZFBlckJsb2NrCAUNJHQwMTIxNjExMjQxOAJfMQQScmV3YXJkVXBkYXRlSGVpZ2h0CAUNJHQwMTIxNjExMjQxOAJfMgQWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFDSR0MDEyMTYxMTI0MTgCXzMEFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQ0kdDAxMjE2MTEyNDE4Al80BBRlbWlzc2lvblVwZGF0ZUhlaWdodAgFDSR0MDEyMTYxMTI0MTgCXzUEGXByZXZDdXJyZW50UmV3YXJkUGVyQmxvY2sIBQ0kdDAxMjE2MTEyNDE4Al82BBpwcmV2UHJldmlvdXNSZXdhcmRQZXJCbG9jawgFDSR0MDEyMTYxMTI0MTgCXzcEDXVGYXJtSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QEDnVCb29zdEludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QDAwkAZgIFEnN0cmF0QkZhcm1JbnRlcmVzdAUNdUZhcm1JbnRlcmVzdAkAZgIFCnVQb29sVm90ZWQAAAcAAAUNYm9vc3RJbnRlcmVzdAQSdVNoYXJlVG9rZW5zU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQQdVNoYXJlVG9rZW5zVmlydAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUSdVNoYXJlVG9rZW5zU3Rha2VkAwkAAAIFEXRvdGFsU2hhcmVWaXJ0dWFsAAAECnRvVHJlYXN1cnkDCQBmAgUUZW1pc3Npb25VcGRhdGVIZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAkAZAIJAGgCBRlwcmV2Q3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUUZW1pc3Npb25VcGRhdGVIZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAkAaAIFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAZQIFBmhlaWdodAUUZW1pc3Npb25VcGRhdGVIZWlnaHQJAGgCBRVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAGUCBQZoZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAkAlgoEBQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QAAAUKdG9UcmVhc3VyeQQNJHQwMTMzNzYxNDUxMwMJAGYCBRRlbWlzc2lvblVwZGF0ZUhlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0BA0kdDAxMzc4OTE0MzQ4CQEMY2FsY0ludGVyZXN0DAUEcG9vbAUSbGFzdEludGVyZXN0SGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAUJcG9vbFZvdGVkBRlwcmV2Q3VycmVudFJld2FyZFBlckJsb2NrBRF0b3RhbFNoYXJlVmlydHVhbAUacHJldlByZXZpb3VzUmV3YXJkUGVyQmxvY2sFCnNjYWxlVmFsdWUFFGVtaXNzaW9uVXBkYXRlSGVpZ2h0BBNwcmV2TmV3RmFybUludGVyZXN0CAUNJHQwMTM3ODkxNDM0OAJfMQQUcHJldk5ld0Jvb3N0SW50ZXJlc3QIBQ0kdDAxMzc4OTE0MzQ4Al8yCQCVCgMFE3ByZXZOZXdGYXJtSW50ZXJlc3QFFHByZXZOZXdCb29zdEludGVyZXN0BRRlbWlzc2lvblVwZGF0ZUhlaWdodAkAlQoDBQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QFEmxhc3RJbnRlcmVzdEhlaWdodAQQcHJldkZhcm1JbnRlcmVzdAgFDSR0MDEzMzc2MTQ1MTMCXzEEEXByZXZCb29zdEludGVyZXN0CAUNJHQwMTMzNzYxNDUxMwJfMgQITElIZWlnaHQIBQ0kdDAxMzM3NjE0NTEzAl8zBA0kdDAxNDUyMjE0OTQ1CQEMY2FsY0ludGVyZXN0DAUEcG9vbAUITElIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAUQcHJldkZhcm1JbnRlcmVzdAURcHJldkJvb3N0SW50ZXJlc3QFCXBvb2xWb3RlZAUVY3VycmVudFJld2FyZFBlckJsb2NrBRF0b3RhbFNoYXJlVmlydHVhbAUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawUKc2NhbGVWYWx1ZQUGaGVpZ2h0BA9uZXdGYXJtSW50ZXJlc3QIBQ0kdDAxNDUyMjE0OTQ1Al8xBBBuZXdCb29zdEludGVyZXN0CAUNJHQwMTQ1MjIxNDk0NQJfMgQHZmFybVJ3ZAkAawMFEHVTaGFyZVRva2Vuc1ZpcnQJAGUCBQ9uZXdGYXJtSW50ZXJlc3QFDXVGYXJtSW50ZXJlc3QFCnNjYWxlVmFsdWUEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgQLYm9vc3RSd2RNYXgJAGsDCQBrAwUQdVNoYXJlVG9rZW5zVmlydAkAZQIFD25ld0Zhcm1JbnRlcmVzdAkAlgMBCQDMCAIFDXVGYXJtSW50ZXJlc3QJAMwIAgUSc3RyYXRCRmFybUludGVyZXN0BQNuaWwFCnNjYWxlVmFsdWUFDXBvb2xCb29zdENvZWYFEmxvY2tCb29zdENvZWZTY2FsZQQLY3VyQm9vc3RSd2QJAGsDCQBlAgUQbmV3Qm9vc3RJbnRlcmVzdAUOdUJvb3N0SW50ZXJlc3QFCnVQb29sVm90ZWQFC3NjYWxlVmFsdWU4BAhib29zdFJ3ZAkAlwMBCQDMCAIFC2Jvb3N0UndkTWF4CQDMCAIFC2N1ckJvb3N0UndkBQNuaWwECnRvVHJlYXN1cnkJAGUCBQtib29zdFJ3ZE1heAUIYm9vc3RSd2QDCQBmAgAABQp0b1RyZWFzdXJ5CQACAQIOdG9UcmVhc3VyeSA8IDAJAJYKBAUPbmV3RmFybUludGVyZXN0BRBuZXdCb29zdEludGVyZXN0CQBkAgUHZmFybVJ3ZAUIYm9vc3RSd2QFCnRvVHJlYXN1cnkBG2F2YWlsYWJsZUNsYWltQ2FsY0FsbEJ5VXNlcgIFcG9vbHMEdXNlcgoBDWNhbGNBdmFpbGFibGUCA2FjYwRwb29sBA0kdDAxNTgxNDE1ODQzBQNhY2MECG5ld1Bvb2xzCAUNJHQwMTU4MTQxNTg0MwJfMQQHYW1vdW50cwgFDSR0MDE1ODE0MTU4NDMCXzIEDSR0MDE1ODUyMTU5MDUJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAJmaQgFDSR0MDE1ODUyMTU5MDUCXzEEAmJpCAUNJHQwMTU4NTIxNTkwNQJfMgQLY2xhaW1BbW91bnQIBQ0kdDAxNTg1MjE1OTA1Al8zBAJ0dAgFDSR0MDE1ODUyMTU5MDUCXzQEDWF2YWlsYWJsZUZ1bmQJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAlAoCCQDNCAIFCG5ld1Bvb2xzBQRwb29sCQDNCAIFB2Ftb3VudHMFDWF2YWlsYWJsZUZ1bmQKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1jYWxjQXZhaWxhYmxlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA2MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAEVY2FuTG9ja0luRmlyc3RIYXJ2ZXN0BQRwb29sBHVzZXIVdXNlclNoYXJlVG9rZW5zU3Rha2VkCXBtdEFtb3VudAhsb2NrVHlwZQMJAGYCCQEVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AQUEcG9vbAUGaGVpZ2h0BA90b3RhbFZvdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNdm90aW5nQWRkcmVzcwkArAICBQRwb29sBRBrSGFydmVzdFBvb2xWb3RlAAAEDnVzZXJWb3RlQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFFGtIYXJ2ZXN0VXNlclBvb2xWb3RlAAAEEUZIU2hhcmVUb2tlbkxpbWl0CQEUZ2V0RkhTaGFyZUxpbWl0VG9rZW4BCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBBVGSFNoYXJlVG9rZW5Vc2VyTGltaXQJAGUCCQBrAwURRkhTaGFyZVRva2VuTGltaXQFDnVzZXJWb3RlQW1vdW50BQ90b3RhbFZvdGVBbW91bnQFFXVzZXJTaGFyZVRva2Vuc1N0YWtlZAMJAGYCBQhsb2NrVHlwZQAACQACAQIyWW91IGNhbid0IGxvY2sgc2hhcmVUb2tlbnMgdGlsbCBmaXJzdCBoYXJ2ZXN0IGVuZC4DCQAAAgUOdXNlclZvdGVBbW91bnQAAAAAAwkAZwIFCXBtdEFtb3VudAUVRkhTaGFyZVRva2VuVXNlckxpbWl0CQBlAgUJcG10QW1vdW50BRVGSFNoYXJlVG9rZW5Vc2VyTGltaXQAAAAAAQ1nZXRMb2NrUGFyYW1zAQR0eXBlBApsb2NrUGFyYW1zCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKQDAQUEdHlwZQULa0xvY2tQYXJhbXMJAKwCAgIeVGhlcmUgYXJlIG5vIGtleSBmb3IgbG9jayB0eXBlCQCkAwEFBHR5cGUCAV8JAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY2tQYXJhbXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY2tQYXJhbXMAAQEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNQb29sQ2FsbAIBaQRwb29sAwMJAAACCQClCAEIBQFpBmNhbGxlcgUEcG9vbAYJAAACCAUBaQZjYWxsZXIFDGNwbW1Db250cmFjdAUEdW5pdAkAAgECIE9ubHkgcG9vbCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uARFnZXREZXByZWNhdGVkUG9vbAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUJAKwCAgUPa0RlcHJlY2F0ZWRQb29sBQRwb29sBwEQaXNEZXByZWNhdGVkUG9vbAEEcG9vbAMJAQEhAQkBEWdldERlcHJlY2F0ZWRQb29sAQUEcG9vbAUEdW5pdAkAAgECL1Bvb2wgaXMgZGVwcmVjYXRlZC4gT25seSB1bmxvY2sgYWN0aW9uIGFsbG93ZWQuAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BE2NhbGNMb2NrU2hhcmVUb2tlbnMEAWkGY2FsbGVyBHBvb2wIbG9ja1R5cGUEDHNoYXJlQXNzZXRJZAkBD2dldFNoYXJlQXNzZXRJZAEFBHBvb2wEBHVzZXIJAKUIAQUGY2FsbGVyBAp0b3RhbFNoYXJlCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQp0b3RhbFNoYXJlBBB1c2VyU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQPdXNlckxvY2tlZEhlaWd0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQAAAQQdXNlckxvY2tlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkAAAEEXVzZXJBbW91bnRWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRB1c2VyU3Rha2VkQW1vdW50BBR0b3RhbFVzZXJTaGFyZVRva2VucwkAZAIJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTg5NTQxOTAwNgkBDWdldExvY2tQYXJhbXMBBQhsb2NrVHlwZQQKbG9ja1BlcmlvZAgFDSR0MDE4OTU0MTkwMDYCXzEECGxvY2tDb2VmCAUNJHQwMTg5NTQxOTAwNgJfMgQMbG9ja1dhdmVzRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBAhtXcm9uZyBzaGFyZXRva2VuIGluIHBheW1lbnQDCQBnAgAACAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECJVBheW1lbnQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABQhsb2NrVHlwZQkAAgECFWxvY2tUeXBlIG11c3QgYmUgPj0gMAQVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQEVY2FuTG9ja0luRmlyc3RIYXJ2ZXN0BQUEcG9vbAUEdXNlcgUQdXNlclN0YWtlZEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGxvY2tUeXBlAwkAAAIFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZIBA0kdDAxOTQzMzIxMzY3AwkAAAIFCGxvY2tUeXBlAAAEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBlAgkAZAIFEXVzZXJBbW91bnRWaXJ0dWFsCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQJAGUCCQBkAgUQdXNlclN0YWtlZEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwJAGUCCQBkAgURdG90YWxTaGFyZVZpcnR1YWwICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsCQBlAgkAZAIFCnRvdGFsU2hhcmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgDAwkAAAIFD3VzZXJMb2NrZWRIZWlndAAAAwMJAGYCAAIJAJADAQgFAWkIcGF5bWVudHMGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQFBHVuaXQGCQBmAgUMbG9ja1dhdmVzRmVlCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAcJAAIBCQCsAgIJAKwCAgIrWW91IG5lZWQgdG8gcGF5IGFkZGl0aW9uYWwgd2F2ZXMgY29taXNzaW9uIAkApAMBBQxsb2NrV2F2ZXNGZWUCBVdBVkVTAwkAZgIFD3VzZXJMb2NrZWRIZWlndAkAZAIFBmhlaWdodAUKbG9ja1BlcmlvZAkAAgECT1lvdSBjYW5ub3QgbG9jayBzaGFyZXRva2VucyBmb3IgYSBwZXJpb2QgbGVzcyB0aGFuIHdoYXQgeW91IGhhdmUgYWxyZWFkeSBsb2NrZWQEE3VzZXJMb2NrZWRBbW91bnROZXcJAGQCBRB1c2VyTG9ja2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQSdXNlckxvY2tlZEhlaWd0TmV3CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kBBR1c2VyQW1vdW50VmlydHVhbE5ldwkAZAIJAGsDBRN1c2VyTG9ja2VkQW1vdW50TmV3BQhsb2NrQ29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlBRB1c2VyU3Rha2VkQW1vdW50CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQFE3VzZXJMb2NrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQFEnVzZXJMb2NrZWRIZWlndE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUFCGxvY2tUeXBlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZAIJAGUCBRF0b3RhbFNoYXJlVmlydHVhbAURdXNlckFtb3VudFZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3BQNuaWwJAGQCBQp0b3RhbFNoYXJlCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQLbG9ja0VudHJpZXMIBQ0kdDAxOTQzMzIxMzY3Al8xBA10b3RhbFNoYXJlTmV3CAUNJHQwMTk0MzMyMTM2NwJfMgMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQxzaGFyZUFzc2V0SWQFDXRvdGFsU2hhcmVOZXcJAAIBAjBCYWxhbmNlIG9mIHNoYXJlLXRva2VuIGlzIGxvd2VyIHRoYW4gdG90YWxBbW91bnQEDSR0MDIxNDkyMjE1NzQJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyMTQ5MjIxNTc0Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMjE0OTIyMTU3NAJfMgQLY2xhaW1BbW91bnQIBQ0kdDAyMTQ5MjIxNTc0Al8zBAp0b1RyZWFzdXJlCAUNJHQwMjE0OTIyMTU3NAJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAQEdXBscAMJAAACCQCdCAIJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgd2ZXJzaW9uAgUzLjAuMAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAhJ1cGRhdGVVc2VySW50ZXJlc3QJAMwIAgUEdXNlcgkAzAgCBQRwb29sCQDMCAIFFHRvdGFsVXNlclNoYXJlVG9rZW5zBQNuaWwFA25pbAAAAwkAAAIFBHVwbHAFBHVwbHAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMFDXRvdGFsU2hhcmVOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbAULbG9ja0VudHJpZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF2NhbGNXaXRoZHJhd1NoYXJlVG9rZW5zBAFpBmNhbGxlcgRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEA2ludgMJARFnZXREZXByZWNhdGVkUG9vbAEFBHBvb2wJAPwHBAUEdGhpcwIYdW5sb2NrVXNlckxvY2tEZXByZWNhdGVkCQDMCAIFBHBvb2wJAMwIAgkApQgBBQZjYWxsZXIFA25pbAUDbmlsAAADCQAAAgUDaW52BQNpbnYEDXNoYXJlVG9rZW5zSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAQEdXNlcgkApQgBBQZjYWxsZXIEDSR0MDIyODcxMjI5NTMJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyMjg3MTIyOTUzAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMjI4NzEyMjk1MwJfMgQLY2xhaW1BbW91bnQIBQ0kdDAyMjg3MTIyOTUzAl8zBAp0b1RyZWFzdXJlCAUNJHQwMjI4NzEyMjk1MwJfNAQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZQIFEHVzZXJTdGFrZWRBbW91bnQFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEEWF2YWlsYWJsZUZ1bmRzTmV3CQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQEEHRvdGFsU2hhcmVBbW91bnQJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFEHRvdGFsU2hhcmVBbW91bnQEE3RvdGFsU2hhcmVBbW91bnROZXcJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BBR0b3RhbFNoYXJlVmlydHVhbE5ldwkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BBR1c2VyQW1vdW50VmlydHVhbE5ldwkAZQIFEXVzZXJBbW91bnRWaXJ0dWFsBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AwkAZgIFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFEHVzZXJTdGFrZWRBbW91bnQJAAIBAixXaXRoZHJhdyBhbW91bnQgbW9yZSB0aGVuIHVzZXIgbG9ja2VkIGFtb3VudAMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQ1zaGFyZVRva2Vuc0lkBRB0b3RhbFNoYXJlQW1vdW50CQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50BAR1cGxwAwkAAAIJAJ0IAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3ZlcnNpb24CBTMuMC4wCQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCEnVwZGF0ZVVzZXJJbnRlcmVzdAkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQFA25pbAUDbmlsAAADCQAAAgUEdXBscAUEdXBscAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwUTdG90YWxTaGFyZUFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBRR0b3RhbFNoYXJlVmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFDXNoYXJlVG9rZW5zSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEJY2FsY0NsYWltAwFpBHBvb2wGY2FsbGVyBA1zaGFyZVRva2Vuc0lkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQV2YWx1ZQEJAKYIAQUEcG9vbAIOc2hhcmVfYXNzZXRfaWQEBHVzZXIJAKUIAQUGY2FsbGVyBBBzaGFyZVRva2VuTG9ja2VkCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQNJHQwMjU0NjQyNTU0NgkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDI1NDY0MjU1NDYCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAyNTQ2NDI1NTQ2Al8yBAtjbGFpbUFtb3VudAgFDSR0MDI1NDY0MjU1NDYCXzMECnRvVHJlYXN1cmUIBQ0kdDAyNTQ2NDI1NTQ2Al80BA1hdmFpbGFibGVGdW5kCQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQDCQBmAgkBDmFjY291bnRCYWxhbmNlAQUNc2hhcmVUb2tlbnNJZAUQc2hhcmVUb2tlbkxvY2tlZAkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAQGdVRyYW5zAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUNYXZhaWxhYmxlRnVuZAUEU1dPUAUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QAAAJAMwIAgkBB1JlaXNzdWUDBQRTV09QCQBkAgUKdG9UcmVhc3VyZQUNYXZhaWxhYmxlRnVuZAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsBQZ1VHJhbnMFDWF2YWlsYWJsZUZ1bmQBEnVubG9ja1VzZXJMb2NrQ2FsYwMBaQRwb29sBHVzZXIEEXRvdGFsU2hhcmVWaXJ0dWFsCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEE3VzZXJTdGFrZWRBbW91bnROZXcJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50BA0kdDAyNjk0OTI3MDMxCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMjY5NDkyNzAzMQJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDI2OTQ5MjcwMzECXzIEC2NsYWltQW1vdW50CAUNJHQwMjY5NDkyNzAzMQJfMwQKdG9UcmVhc3VyZQgFDSR0MDI2OTQ5MjcwMzECXzQEEWF2YWlsYWJsZUZ1bmRzTmV3CQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZAIJAGUCBRF0b3RhbFNoYXJlVmlydHVhbAURdXNlckFtb3VudFZpcnR1YWwFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwSAWkBBGluaXQBB2Vhcmx5TFADCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQdrU1dPUGlkCQACAQIYU1dPUCBhbHJlYWR5IGluaXRpYWxpemVkBAppbml0QW1vdW50AICA6YOx3hYECVNXT1Bpc3N1ZQkAwggFAgRTV09QAhNTV09QIHByb3RvY29sIHRva2VuBQppbml0QW1vdW50AAgGBAZTV09QaWQJALgIAQUJU1dPUGlzc3VlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQDCCAUCBFNXT1ACE1NXT1AgcHJvdG9jb2wgdG9rZW4FCmluaXRBbW91bnQACAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUHa1NXT1BpZAkA2AQBBQZTV09QaWQFA25pbAFpARRpbml0UG9vbFNoYXJlRmFybWluZwEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAFpARJ1cGRhdGVQb29sSW50ZXJlc3QBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCAUBaQZjYWxsZXIFCmdvdkFkZHJlc3MJAAIBAiZPbmx5IEdvdmVybmFuY2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQEdXNlcgkApQgBCQCnCAEFEWFkbWluSW52b2tlUHViS2V5BA0kdDAyOTE5NzI5MjcxCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMjkxOTcyOTI3MQJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDI5MTk3MjkyNzECXzIED2Jvb3N0TFBpbnRlcmVzdAgFDSR0MDI5MTk3MjkyNzECXzMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBaQEPbG9ja1NoYXJlVG9rZW5zAgRwb29sCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEQaXNEZXByZWNhdGVkUG9vbAEFBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJARNjYWxjTG9ja1NoYXJlVG9rZW5zBAUBaQgFAWkGY2FsbGVyBQRwb29sBQhsb2NrVHlwZQFpARdsb2NrU2hhcmVUb2tlbnNGcm9tUG9vbAMLY2FsbGVyQnl0ZXMEcG9vbAhsb2NrVHlwZQkBC3ZhbHVlT3JFbHNlAgkBEGlzRGVwcmVjYXRlZFBvb2wBBQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNQb29sQ2FsbAIFAWkFBHBvb2wJARNjYWxjTG9ja1NoYXJlVG9rZW5zBAUBaQkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwUEcG9vbAUIbG9ja1R5cGUBaQEVbG9ja1N0YWtlZFNoYXJlVG9rZW5zAwRwb29sCGxvY2tUeXBlCmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJARBpc0RlcHJlY2F0ZWRQb29sAQUEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQMc2hhcmVBc3NldElkCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECnRvdGFsU2hhcmUJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFCnRvdGFsU2hhcmUEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABA91c2VyTG9ja2VkSGVpZ3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEFHRvdGFsVXNlclNoYXJlVG9rZW5zCQBkAgUQdXNlclN0YWtlZEFtb3VudAUQdXNlckxvY2tlZEFtb3VudAQNJHQwMzA5MDAzMDk1MgkBDWdldExvY2tQYXJhbXMBBQhsb2NrVHlwZQQKbG9ja1BlcmlvZAgFDSR0MDMwOTAwMzA5NTICXzEECGxvY2tDb2VmCAUNJHQwMzA5MDAzMDk1MgJfMgQMbG9ja1dhdmVzRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlAwkAZgIJARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBQRwb29sBQZoZWlnaHQJAAIBAjJZb3UgY2FuJ3QgbG9jayBzaGFyZVRva2VucyB0aWxsIGZpcnN0IGhhcnZlc3QgZW5kLgMJAGcCAAAFCGxvY2tUeXBlCQACAQIUbG9ja1R5cGUgbXVzdCBiZSA+IDADCQBmAgUKbG9ja0Ftb3VudAUQdXNlclN0YWtlZEFtb3VudAkAAgEJAKwCAgIZWW91IGNhbid0IGxvY2sgbW9yZSB0aGFuIAkApAMBBRB1c2VyU3Rha2VkQW1vdW50AwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDHNoYXJlQXNzZXRJZAUKdG90YWxTaGFyZQkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAADAwkAZgIAAQkAkAMBCAUBaQhwYXltZW50cwYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAYJAGYCBQxsb2NrV2F2ZXNGZWUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BwkAAgEJAKwCAgkArAICAitZb3UgbmVlZCB0byBwYXkgYWRkaXRpb25hbCB3YXZlcyBjb21pc3Npb24gCQCkAwEFDGxvY2tXYXZlc0ZlZQIFV0FWRVMDAwkAAAIFD3VzZXJMb2NrZWRIZWlndAAACQBnAgAABQpsb2NrQW1vdW50BwkAAgECIWxvY2tBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFCmxvY2tBbW91bnQJAAIBAhtsb2NrQW1vdW50IG11c3QgYmUgcG9zaXRpdmUDCQBmAgUPdXNlckxvY2tlZEhlaWd0CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kCQACAQJPWW91IGNhbm5vdCBsb2NrIHNoYXJldG9rZW5zIGZvciBhIHBlcmlvZCBsZXNzIHRoYW4gd2hhdCB5b3UgaGF2ZSBhbHJlYWR5IGxvY2tlZAQTdXNlckxvY2tlZEFtb3VudE5ldwkAZAIFEHVzZXJMb2NrZWRBbW91bnQFCmxvY2tBbW91bnQEE3VzZXJTdGFrZWRBbW91bnROZXcJAGUCBRB1c2VyU3Rha2VkQW1vdW50BQpsb2NrQW1vdW50BBJ1c2VyTG9ja2VkSGVpZ3ROZXcJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBkAgkAawMFE3VzZXJMb2NrZWRBbW91bnROZXcFCGxvY2tDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUFE3VzZXJTdGFrZWRBbW91bnROZXcEDSR0MDMyMjk4MzIzODAJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAzMjI5ODMyMzgwAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMzIyOTgzMjM4MAJfMgQLY2xhaW1BbW91bnQIBQ0kdDAzMjI5ODMyMzgwAl8zBAp0b1RyZWFzdXJlCAUNJHQwMzIyOTgzMjM4MAJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAUTdXNlckxvY2tlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAUSdXNlckxvY2tlZEhlaWd0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQUIbG9ja1R5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsAWkBDnVubG9ja1VzZXJMb2NrAgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAED3VzZXJMb2NrZWRIZWlndAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQJAKwCAgkArAICCQCsAgIJAKwCAgIRVGhlcmUgaXMgbm8gcG9vbCAFBHBvb2wCCSBvciB1c2VyIAUEdXNlcgIJd2l0aCBsb2NrAwkAZgIFD3VzZXJMb2NrZWRIZWlndAUGaGVpZ2h0CQACAQkArAICAiJZb3UgY2FuJ3QgdW5sb2NrIHNoYXJldG9rZW5zIHRpbGwgCQCkAwEFD3VzZXJMb2NrZWRIZWlndAkAzggCCQESdW5sb2NrVXNlckxvY2tDYWxjAwUBaQUEcG9vbAUEdXNlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUFBHVuaXQFA25pbAFpARh1bmxvY2tVc2VyTG9ja0RlcHJlY2F0ZWQCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpAwkBASEBCQERZ2V0RGVwcmVjYXRlZFBvb2wBBQRwb29sCQACAQIXUG9vbCBtdXN0IGJlIGRlcHJlY2F0ZWQDCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0CQDOCAIJARJ1bmxvY2tVc2VyTG9ja0NhbGMDBQFpBQRwb29sBQR1c2VyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa0xvY2tXYXZlc0ZlZQUEdW5pdAUDbmlsBQNuaWwBaQETd2l0aGRyYXdTaGFyZVRva2VucwIEcG9vbBlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQEXY2FsY1dpdGhkcmF3U2hhcmVUb2tlbnMEBQFpCAUBaQZjYWxsZXIFBHBvb2wFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQBaQEbd2l0aGRyYXdTaGFyZVRva2Vuc0Zyb21Qb29sAwtjYWxsZXJCeXRlcwRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc1Bvb2xDYWxsAgUBaQUEcG9vbAkBF2NhbGNXaXRoZHJhd1NoYXJlVG9rZW5zBAUBaQkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwUEcG9vbAUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAFpAQVjbGFpbQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQBcgkBCWNhbGNDbGFpbQMFAWkFBHBvb2wIBQFpBmNhbGxlcgMJAAACCAUBcgJfMgAACQACAQIZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAUBcgFpAQ1jbGFpbUludGVybmFsAgRwb29sBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpCQEJY2FsY0NsYWltAwUBaQUEcG9vbAkBB0FkZHJlc3MBBQZjYWxsZXIBaQENY2xhaW1BbmRTdGFrZQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQLY2xhaW1BbW91bnQKAAFACQD8BwQFBHRoaXMCDWNsYWltSW50ZXJuYWwJAMwIAgUEcG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULY2xhaW1BbW91bnQFC2NsYWltQW1vdW50AwkAAAIFC2NsYWltQW1vdW50AAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QBApzdGFrZVRvR292CQD8BwQFCmdvdkFkZHJlc3MCE2xvY2tTV09QRnJvbUZhcm1pbmcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEU1dPUAULY2xhaW1BbW91bnQFA25pbAMJAAACBQpzdGFrZVRvR292BQpzdGFrZVRvR292BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMg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cGRhdGVVc2VyQm9vc3RJbnRlcmVzdAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AggFAWkGY2FsbGVyBQ12b3RpbmdBZGRyZXNzCQACAQIjT25seSB2b2l0aW5nIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24EDSR0MDM3MTI5MzcyMTEJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAzNzEyOTM3MjExAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMzcxMjkzNzIxMQJfMgQLY2xhaW1BbW91bnQIBQ0kdDAzNzEyOTM3MjExAl8zBAp0b1RyZWFzdXJlCAUNJHQwMzcxMjkzNzIxMQJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwBaQEIc2h1dGRvd24ACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBBQZhY3RpdmUJAAIBCQCsAgICIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa0NhdXNlAhp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAkBB3N1c3BlbmQBAg9QYXVzZWQgYnkgYWRtaW4BaQEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwUGYWN0aXZlCQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwBAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAAC6IGxng==", "height": 2447680, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4PqjzEqYvJe6bPSiVohCM8kNiZwhr4UaagzXd8n2sHBw Next: D5oToKQmyU1hsQR7F4c6ykY7GdHFuNjP9KS93M3pkZw7 Diff:
Old | New | Differences | |
---|---|---|---|
99 | 99 | ||
100 | 100 | let W = 500 | |
101 | 101 | ||
102 | - | let X = | |
102 | + | let X = 2443679 | |
103 | 103 | ||
104 | 104 | let Y = 100000000000000 | |
105 | 105 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "active" | |
5 | 5 | ||
6 | 6 | let b = "active_all_contracts" | |
7 | 7 | ||
8 | 8 | let c = "deprecated_" | |
9 | 9 | ||
10 | 10 | let d = "shutdown_cause" | |
11 | 11 | ||
12 | 12 | let e = "_current_pool_fraction_reward" | |
13 | 13 | ||
14 | 14 | let f = "_previous_pool_fraction_reward" | |
15 | 15 | ||
16 | 16 | let g = "_pool_reward_update_height" | |
17 | 17 | ||
18 | 18 | let h = "reward_update_height" | |
19 | 19 | ||
20 | 20 | let i = "_share_tokens_locked" | |
21 | 21 | ||
22 | 22 | let j = "_share_tokens_blocked" | |
23 | 23 | ||
24 | 24 | let k = "_share_tokens_blocked_type" | |
25 | 25 | ||
26 | 26 | let l = "_share_tokens_blocked_height" | |
27 | 27 | ||
28 | 28 | let m = "_share_tokens_virtual" | |
29 | 29 | ||
30 | 30 | let n = "_total_share_tokens_locked" | |
31 | 31 | ||
32 | 32 | let o = "_total_share_tokens_virtual" | |
33 | 33 | ||
34 | 34 | let p = "_lock_params" | |
35 | 35 | ||
36 | 36 | let q = "lock_waves_fee" | |
37 | 37 | ||
38 | 38 | let r = "_boost_coef" | |
39 | 39 | ||
40 | 40 | let s = "_last_interest" | |
41 | 41 | ||
42 | 42 | let t = "_last_interest" | |
43 | 43 | ||
44 | 44 | let u = "_last_interest_b" | |
45 | 45 | ||
46 | 46 | let v = "_last_interest_u_b" | |
47 | 47 | ||
48 | 48 | let w = "_last_interest_height" | |
49 | 49 | ||
50 | 50 | let x = "SWOP_id" | |
51 | 51 | ||
52 | 52 | let y = "_available_SWOP" | |
53 | 53 | ||
54 | 54 | let z = "_harvest_pool_vote_gSWOP" | |
55 | 55 | ||
56 | 56 | let A = "_pool_vote_gSWOP" | |
57 | 57 | ||
58 | 58 | let B = "_user_vote_gSWOP" | |
59 | 59 | ||
60 | 60 | let C = "_pool_struc" | |
61 | 61 | ||
62 | 62 | let D = "_user_pool_struc" | |
63 | 63 | ||
64 | 64 | let E = "_harvest_user_pool_vote_gSWOP" | |
65 | 65 | ||
66 | 66 | let F = "first_harvest_height" | |
67 | 67 | ||
68 | 68 | let G = "share_limit_on_first_harvest" | |
69 | 69 | ||
70 | 70 | let H = "_strat_b_farm_interest" | |
71 | 71 | ||
72 | 72 | let I = "cpmm_contract" | |
73 | 73 | ||
74 | 74 | let J = "admin_pub_1" | |
75 | 75 | ||
76 | 76 | let K = "admin_pub_2" | |
77 | 77 | ||
78 | 78 | let L = "admin_pub_3" | |
79 | 79 | ||
80 | 80 | let M = "admin_invoke_pub" | |
81 | 81 | ||
82 | 82 | let N = "money_box_address" | |
83 | 83 | ||
84 | 84 | let O = "voting_address" | |
85 | 85 | ||
86 | 86 | let P = "governance_address" | |
87 | 87 | ||
88 | 88 | let Q = "lp_farming" | |
89 | 89 | ||
90 | 90 | let R = "farming_treasure" | |
91 | 91 | ||
92 | 92 | let S = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz') | |
93 | 93 | ||
94 | 94 | let T = 10000000000 | |
95 | 95 | ||
96 | 96 | let U = 100000000 | |
97 | 97 | ||
98 | 98 | let V = 1000 | |
99 | 99 | ||
100 | 100 | let W = 500 | |
101 | 101 | ||
102 | - | let X = | |
102 | + | let X = 2443679 | |
103 | 103 | ||
104 | 104 | let Y = 100000000000000 | |
105 | 105 | ||
106 | 106 | let Z = 526330 | |
107 | 107 | ||
108 | 108 | func aa (ab) = { | |
109 | 109 | let ac = getString(S, ab) | |
110 | 110 | if ($isInstanceOf(ac, "String")) | |
111 | 111 | then { | |
112 | 112 | let ad = ac | |
113 | 113 | fromBase58String(ad) | |
114 | 114 | } | |
115 | 115 | else { | |
116 | 116 | let ae = ac | |
117 | 117 | throw((ab + "is empty")) | |
118 | 118 | } | |
119 | 119 | } | |
120 | 120 | ||
121 | 121 | ||
122 | 122 | let af = aa(J) | |
123 | 123 | ||
124 | 124 | let ag = aa(K) | |
125 | 125 | ||
126 | 126 | let ah = aa(L) | |
127 | 127 | ||
128 | 128 | let ai = Address(aa(N)) | |
129 | 129 | ||
130 | 130 | let aj = Address(aa(O)) | |
131 | 131 | ||
132 | 132 | let ak = Address(aa(P)) | |
133 | 133 | ||
134 | 134 | let al = aa(M) | |
135 | 135 | ||
136 | 136 | let am = Address(aa(Q)) | |
137 | 137 | ||
138 | 138 | let an = Address(aa(R)) | |
139 | 139 | ||
140 | 140 | let ao = Address(aa(I)) | |
141 | 141 | ||
142 | 142 | let ap = getBooleanValue(this, a) | |
143 | 143 | ||
144 | 144 | let aq = valueOrElse(getBoolean(S, b), true) | |
145 | 145 | ||
146 | 146 | let ar = fromBase58String(getStringValue(this, x)) | |
147 | 147 | ||
148 | 148 | func as () = { | |
149 | 149 | let at = ((height - X) / Z) | |
150 | 150 | func au (av,aw) = { | |
151 | 151 | let ax = av | |
152 | 152 | let ay = ax._1 | |
153 | 153 | let az = ax._2 | |
154 | 154 | if ((at > aw)) | |
155 | 155 | then $Tuple2(fraction(ay, 75, 100), ay) | |
156 | 156 | else $Tuple2(ay, az) | |
157 | 157 | } | |
158 | 158 | ||
159 | 159 | let aA = { | |
160 | 160 | let aB = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] | |
161 | 161 | let aC = size(aB) | |
162 | 162 | let aD = $Tuple2(Y, Y) | |
163 | 163 | func aE (aF,aG) = if ((aG >= aC)) | |
164 | 164 | then aF | |
165 | 165 | else au(aF, aB[aG]) | |
166 | 166 | ||
167 | 167 | func aH (aF,aG) = if ((aG >= aC)) | |
168 | 168 | then aF | |
169 | 169 | else throw("List size exceeds 20") | |
170 | 170 | ||
171 | 171 | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
172 | 172 | } | |
173 | 173 | let ay = aA._1 | |
174 | 174 | let az = aA._2 | |
175 | 175 | $Tuple3((ay / Z), (az / Z), (X + (Z * at))) | |
176 | 176 | } | |
177 | 177 | ||
178 | 178 | ||
179 | 179 | func aI (aJ) = valueOrElse(getInteger(Address(fromBase58String(aJ)), F), 0) | |
180 | 180 | ||
181 | 181 | ||
182 | 182 | func aK (aJ) = valueOrErrorMessage(getInteger(aJ, G), ("No data on the key: " + G)) | |
183 | 183 | ||
184 | 184 | ||
185 | 185 | func aL (aJ) = valueOrErrorMessage(getInteger(this, (aJ + n)), (("No data on the key: " + aJ) + n)) | |
186 | 186 | ||
187 | 187 | ||
188 | 188 | func aM (aJ) = valueOrElse(getInteger(aj, (aJ + A)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (aJ + C)), ""), "_")[0]), 0)) | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | func aN (aJ,aO) = valueOrElse(getInteger(aj, (((aO + "_") + aJ) + B)), valueOrElse(parseInt(split(valueOrElse(getString(aj, (((aO + "_") + aJ) + D)), ""), "_")[0]), 0)) | |
192 | 192 | ||
193 | 193 | ||
194 | 194 | func aP (aJ) = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
195 | 195 | ||
196 | 196 | ||
197 | 197 | func aQ (aR) = { | |
198 | 198 | let ac = aR | |
199 | 199 | if ($isInstanceOf(ac, "ByteVector")) | |
200 | 200 | then { | |
201 | 201 | let aS = ac | |
202 | 202 | assetBalance(this, aS) | |
203 | 203 | } | |
204 | 204 | else if ($isInstanceOf(ac, "Unit")) | |
205 | 205 | then { | |
206 | 206 | let aT = ac | |
207 | 207 | wavesBalance(this).available | |
208 | 208 | } | |
209 | 209 | else throw("Match error") | |
210 | 210 | } | |
211 | 211 | ||
212 | 212 | ||
213 | 213 | func aU (aV,aW) = { | |
214 | 214 | let aX = value(assetInfo(aV)).decimals | |
215 | 215 | let aY = value(assetInfo(aW)).decimals | |
216 | 216 | let aZ = ((aY - aX) + 8) | |
217 | 217 | pow(10, 0, aZ, 0, 0, DOWN) | |
218 | 218 | } | |
219 | 219 | ||
220 | 220 | ||
221 | 221 | func ba (aJ,aO) = valueOrElse(getInteger(this, (((aJ + "_") + aO) + y)), 0) | |
222 | 222 | ||
223 | 223 | ||
224 | 224 | func bb (aJ) = { | |
225 | 225 | let bc = as() | |
226 | 226 | let bd = bc._1 | |
227 | 227 | let be = bc._2 | |
228 | 228 | let bf = bc._3 | |
229 | 229 | let bg = valueOrErrorMessage(getInteger(ak, (aJ + e)), (((("No data on the key: " + aJ) + e) + " at address ") + toString(ak))) | |
230 | 230 | let bh = valueOrErrorMessage(getInteger(ak, h), ((("No data on the key: " + h) + " at address ") + toString(ak))) | |
231 | 231 | let bi = valueOrElse(getInteger(ak, (aJ + g)), bh) | |
232 | 232 | let bj = valueOrErrorMessage(getInteger(ak, (aJ + f)), (((("No data on the key: " + aJ) + f) + " at address ") + toString(ak))) | |
233 | 233 | let bk = fraction(bd, bg, T) | |
234 | 234 | let bl = fraction(bd, bj, T) | |
235 | 235 | let bm = fraction(be, bg, T) | |
236 | 236 | let bn = fraction(be, bj, T) | |
237 | 237 | if (if ((bk > bd)) | |
238 | 238 | then true | |
239 | 239 | else (bl > be)) | |
240 | 240 | then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious") | |
241 | 241 | else $Tuple7(bk, bh, bl, bi, bf, bm, bn) | |
242 | 242 | } | |
243 | 243 | ||
244 | 244 | ||
245 | 245 | func bo (aJ) = { | |
246 | 246 | let bp = valueOrErrorMessage(getInteger(this, (aJ + s)), (("No data on the key: " + aJ) + s)) | |
247 | 247 | let bq = valueOrElse(getInteger(this, (aJ + u)), 0) | |
248 | 248 | let br = valueOrElse(getInteger(this, (aJ + w)), height) | |
249 | 249 | $Tuple3(br, bp, bq) | |
250 | 250 | } | |
251 | 251 | ||
252 | 252 | ||
253 | 253 | func bs (aJ,bt) = { | |
254 | 254 | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
255 | 255 | fraction(bt, V, (bu + V)) | |
256 | 256 | } | |
257 | 257 | ||
258 | 258 | ||
259 | 259 | func bv (aJ,bt) = { | |
260 | 260 | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
261 | 261 | fraction(bt, bu, (bu + V)) | |
262 | 262 | } | |
263 | 263 | ||
264 | 264 | ||
265 | 265 | func bw (aJ,br,bh,bi,bp,bq,bx,by,bz,bA,bB,bC) = { | |
266 | 266 | let bD = if (if (if ((bh > bC)) | |
267 | 267 | then (bh == bi) | |
268 | 268 | else false) | |
269 | 269 | then true | |
270 | 270 | else if ((bC > bh)) | |
271 | 271 | then (bh != bi) | |
272 | 272 | else false) | |
273 | 273 | then { | |
274 | 274 | let bE = (bA * (bC - br)) | |
275 | 275 | $Tuple3(bE, bp, bq) | |
276 | 276 | } | |
277 | 277 | else if (if (if ((bC > bh)) | |
278 | 278 | then (bh == bi) | |
279 | 279 | else false) | |
280 | 280 | then (br > bh) | |
281 | 281 | else false) | |
282 | 282 | then { | |
283 | 283 | let bE = (by * (bC - br)) | |
284 | 284 | $Tuple3(bE, bp, bq) | |
285 | 285 | } | |
286 | 286 | else { | |
287 | 287 | let bF = (bA * (bh - br)) | |
288 | 288 | let bG = (bp + fraction(bs(aJ, bF), bB, bz)) | |
289 | 289 | let bH = (bq + (if ((bx > 0)) | |
290 | 290 | then fraction(bv(aJ, bF), U, bx) | |
291 | 291 | else 0)) | |
292 | 292 | let bI = (by * (bC - bh)) | |
293 | 293 | $Tuple3(bI, bG, bH) | |
294 | 294 | } | |
295 | 295 | let bJ = bD._1 | |
296 | 296 | let bK = bD._2 | |
297 | 297 | let bL = bD._3 | |
298 | 298 | let bM = (bK + fraction(bs(aJ, bJ), bB, bz)) | |
299 | 299 | let bN = (bL + (if ((bx > 0)) | |
300 | 300 | then fraction(bv(aJ, bJ), U, bx) | |
301 | 301 | else 0)) | |
302 | 302 | $Tuple2(bM, bN) | |
303 | 303 | } | |
304 | 304 | ||
305 | 305 | ||
306 | 306 | func bO (aJ,aO) = { | |
307 | 307 | let bB = aU(ar, aP(aJ)) | |
308 | 308 | let bx = aM(aJ) | |
309 | 309 | let bP = aN(aJ, aO) | |
310 | 310 | let bQ = aL(aJ) | |
311 | 311 | let bR = valueOrElse(getInteger(this, (aJ + o)), bQ) | |
312 | 312 | let bS = valueOrElse(getInteger(this, (aJ + H)), 0) | |
313 | 313 | let bT = bo(aJ) | |
314 | 314 | let br = bT._1 | |
315 | 315 | let bp = bT._2 | |
316 | 316 | let bq = bT._3 | |
317 | 317 | let bU = bb(aJ) | |
318 | 318 | let by = bU._1 | |
319 | 319 | let bh = bU._2 | |
320 | 320 | let bA = bU._3 | |
321 | 321 | let bi = bU._4 | |
322 | 322 | let bV = bU._5 | |
323 | 323 | let bW = bU._6 | |
324 | 324 | let bX = bU._7 | |
325 | 325 | let bY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + t)), bp) | |
326 | 326 | let bZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + v)), if (if ((bS > bY)) | |
327 | 327 | then (bP > 0) | |
328 | 328 | else false) | |
329 | 329 | then 0 | |
330 | 330 | else bq) | |
331 | 331 | let ca = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
332 | 332 | let cb = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), ca) | |
333 | 333 | if ((bR == 0)) | |
334 | 334 | then { | |
335 | 335 | let cc = if ((bV > br)) | |
336 | 336 | then ((bW * (bV - br)) + (by * (height - bV))) | |
337 | 337 | else (by * (height - br)) | |
338 | 338 | $Tuple4(bp, bq, 0, cc) | |
339 | 339 | } | |
340 | 340 | else { | |
341 | 341 | let cd = if ((bV > br)) | |
342 | 342 | then { | |
343 | 343 | let ce = bw(aJ, br, bh, bi, bp, bq, bx, bW, bR, bX, bB, bV) | |
344 | 344 | let cf = ce._1 | |
345 | 345 | let cg = ce._2 | |
346 | 346 | $Tuple3(cf, cg, bV) | |
347 | 347 | } | |
348 | 348 | else $Tuple3(bp, bq, br) | |
349 | 349 | let ch = cd._1 | |
350 | 350 | let ci = cd._2 | |
351 | 351 | let cj = cd._3 | |
352 | 352 | let ck = bw(aJ, cj, bh, bi, ch, ci, bx, by, bR, bA, bB, height) | |
353 | 353 | let bM = ck._1 | |
354 | 354 | let bN = ck._2 | |
355 | 355 | let cl = fraction(cb, (bM - bY), bB) | |
356 | 356 | let bu = valueOrElse(getInteger(this, (aJ + r)), W) | |
357 | 357 | let cm = fraction(fraction(cb, (bM - max([bY, bS])), bB), bu, V) | |
358 | 358 | let cn = fraction((bN - bZ), bP, U) | |
359 | 359 | let co = min([cm, cn]) | |
360 | 360 | let cc = (cm - co) | |
361 | 361 | if ((0 > cc)) | |
362 | 362 | then throw("toTreasury < 0") | |
363 | 363 | else $Tuple4(bM, bN, (cl + co), cc) | |
364 | 364 | } | |
365 | 365 | } | |
366 | 366 | ||
367 | 367 | ||
368 | 368 | func cp (cq,aO) = { | |
369 | 369 | func cr (av,aJ) = { | |
370 | 370 | let cs = av | |
371 | 371 | let ct = cs._1 | |
372 | 372 | let cu = cs._2 | |
373 | 373 | let cv = bO(aJ, aO) | |
374 | 374 | let cw = cv._1 | |
375 | 375 | let cx = cv._2 | |
376 | 376 | let cy = cv._3 | |
377 | 377 | let cz = cv._4 | |
378 | 378 | let cA = (ba(aJ, aO) + cy) | |
379 | 379 | $Tuple2((ct :+ aJ), (cu :+ cA)) | |
380 | 380 | } | |
381 | 381 | ||
382 | 382 | let aB = cq | |
383 | 383 | let aC = size(aB) | |
384 | 384 | let aD = $Tuple2(nil, nil) | |
385 | 385 | func aE (aF,aG) = if ((aG >= aC)) | |
386 | 386 | then aF | |
387 | 387 | else cr(aF, aB[aG]) | |
388 | 388 | ||
389 | 389 | func aH (aF,aG) = if ((aG >= aC)) | |
390 | 390 | then aF | |
391 | 391 | else throw("List size exceeds 60") | |
392 | 392 | ||
393 | 393 | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
394 | 394 | } | |
395 | 395 | ||
396 | 396 | ||
397 | 397 | func cB (aJ,aO,cC,cD,cE) = if ((aI(aJ) > height)) | |
398 | 398 | then { | |
399 | 399 | let cF = valueOrElse(getInteger(aj, (aJ + z)), 0) | |
400 | 400 | let cG = valueOrElse(getInteger(aj, (((aO + "_") + aJ) + E)), 0) | |
401 | 401 | let cH = aK(addressFromStringValue(aJ)) | |
402 | 402 | let cI = (fraction(cH, cG, cF) - cC) | |
403 | 403 | if ((cE > 0)) | |
404 | 404 | then throw("You can't lock shareTokens till first harvest end.") | |
405 | 405 | else if ((cG == 0)) | |
406 | 406 | then 0 | |
407 | 407 | else if ((cD >= cI)) | |
408 | 408 | then (cD - cI) | |
409 | 409 | else 0 | |
410 | 410 | } | |
411 | 411 | else 0 | |
412 | 412 | ||
413 | 413 | ||
414 | 414 | func cJ (cK) = { | |
415 | 415 | let cL = split(valueOrErrorMessage(getString(this, (toString(cK) + p)), ("There are no key for lock type" + toString(cK))), "_") | |
416 | 416 | $Tuple2(parseIntValue(cL[0]), parseIntValue(cL[1])) | |
417 | 417 | } | |
418 | 418 | ||
419 | 419 | ||
420 | 420 | func cM (cN) = [BooleanEntry(a, false), StringEntry(d, cN)] | |
421 | 421 | ||
422 | 422 | ||
423 | 423 | func cO () = if (if (ap) | |
424 | 424 | then aq | |
425 | 425 | else false) | |
426 | 426 | then unit | |
427 | 427 | else throw("DApp is inactive at this moment") | |
428 | 428 | ||
429 | 429 | ||
430 | 430 | func cP (aw) = if (containsElement([af, ag, ah], aw.callerPublicKey)) | |
431 | 431 | then unit | |
432 | 432 | else throw("Only admin can call this function") | |
433 | 433 | ||
434 | 434 | ||
435 | 435 | func cQ (aw,aJ) = if (if ((toString(aw.caller) == aJ)) | |
436 | 436 | then true | |
437 | 437 | else (aw.caller == ao)) | |
438 | 438 | then unit | |
439 | 439 | else throw("Only pool can call this function") | |
440 | 440 | ||
441 | 441 | ||
442 | 442 | func cR (aJ) = valueOrElse(getBoolean(S, (c + aJ)), false) | |
443 | 443 | ||
444 | 444 | ||
445 | 445 | func cS (aJ) = if (!(cR(aJ))) | |
446 | 446 | then unit | |
447 | 447 | else throw("Pool is deprecated. Only unlock action allowed.") | |
448 | 448 | ||
449 | 449 | ||
450 | 450 | func cT (aw) = if ((aw.caller == this)) | |
451 | 451 | then unit | |
452 | 452 | else throw("Only contract itself can call this function") | |
453 | 453 | ||
454 | 454 | ||
455 | 455 | func cU (aw,cV,aJ,cE) = { | |
456 | 456 | let cW = aP(aJ) | |
457 | 457 | let aO = toString(cV) | |
458 | 458 | let cX = aL(aJ) | |
459 | 459 | let bR = valueOrElse(getInteger(this, (aJ + o)), cX) | |
460 | 460 | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
461 | 461 | let cZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + l)), 0) | |
462 | 462 | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
463 | 463 | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
464 | 464 | let dc = ((cY + da) + aw.payments[0].amount) | |
465 | 465 | let dd = cJ(cE) | |
466 | 466 | let de = dd._1 | |
467 | 467 | let df = dd._2 | |
468 | 468 | let dg = getIntegerValue(this, q) | |
469 | 469 | if ((aw.payments[0].assetId != cW)) | |
470 | 470 | then throw("Wrong sharetoken in payment") | |
471 | 471 | else if ((0 >= aw.payments[0].amount)) | |
472 | 472 | then throw("Payment amount must be greater than 0") | |
473 | 473 | else if ((0 > cE)) | |
474 | 474 | then throw("lockType must be >= 0") | |
475 | 475 | else { | |
476 | 476 | let dh = cB(aJ, aO, cY, aw.payments[0].amount, cE) | |
477 | 477 | if ((dh == dh)) | |
478 | 478 | then { | |
479 | 479 | let di = if ((cE == 0)) | |
480 | 480 | then { | |
481 | 481 | let dj = ((db + aw.payments[0].amount) - dh) | |
482 | 482 | $Tuple2([IntegerEntry((((aJ + "_") + aO) + i), ((cY + aw.payments[0].amount) - dh)), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR + aw.payments[0].amount) - dh)), ScriptTransfer(cV, dh, aw.payments[0].assetId)], ((cX + aw.payments[0].amount) - dh)) | |
483 | 483 | } | |
484 | 484 | else if (if ((cZ == 0)) | |
485 | 485 | then if (if ((2 > size(aw.payments))) | |
486 | 486 | then true | |
487 | 487 | else (aw.payments[1].assetId != unit)) | |
488 | 488 | then true | |
489 | 489 | else (dg > aw.payments[1].amount) | |
490 | 490 | else false) | |
491 | 491 | then throw((("You need to pay additional waves comission " + toString(dg)) + "WAVES")) | |
492 | 492 | else if ((cZ > (height + de))) | |
493 | 493 | then throw("You cannot lock sharetokens for a period less than what you have already locked") | |
494 | 494 | else { | |
495 | 495 | let dk = (da + aw.payments[0].amount) | |
496 | 496 | let dl = (height + de) | |
497 | 497 | let dj = (fraction(dk, df, V) + cY) | |
498 | 498 | $Tuple2([IntegerEntry((((aJ + "_") + aO) + j), dk), IntegerEntry((((aJ + "_") + aO) + l), dl), IntegerEntry((((aJ + "_") + aO) + k), cE), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR - db) + dj))], (cX + aw.payments[0].amount)) | |
499 | 499 | } | |
500 | 500 | let dm = di._1 | |
501 | 501 | let dn = di._2 | |
502 | 502 | if ((aQ(cW) > dn)) | |
503 | 503 | then throw("Balance of share-token is lower than totalAmount") | |
504 | 504 | else { | |
505 | 505 | let do = bO(aJ, aO) | |
506 | 506 | let bp = do._1 | |
507 | 507 | let bq = do._2 | |
508 | 508 | let cy = do._3 | |
509 | 509 | let dp = do._4 | |
510 | 510 | let dq = (ba(aJ, aO) + cy) | |
511 | 511 | let dr = if ((getString(Address(fromBase58String(aJ)), "version") == "3.0.0")) | |
512 | 512 | then invoke(am, "updateUserInterest", [aO, aJ, dc], nil) | |
513 | 513 | else 0 | |
514 | 514 | if ((dr == dr)) | |
515 | 515 | then ([IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((aJ + n), dn), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] ++ dm) | |
516 | 516 | else throw("Strict value is not equal to itself.") | |
517 | 517 | } | |
518 | 518 | } | |
519 | 519 | else throw("Strict value is not equal to itself.") | |
520 | 520 | } | |
521 | 521 | } | |
522 | 522 | ||
523 | 523 | ||
524 | 524 | func ds (aw,cV,aJ,dt) = { | |
525 | 525 | let du = if (cR(aJ)) | |
526 | 526 | then invoke(this, "unlockUserLockDeprecated", [aJ, toString(cV)], nil) | |
527 | 527 | else 0 | |
528 | 528 | if ((du == du)) | |
529 | 529 | then { | |
530 | 530 | let dv = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
531 | 531 | let aO = toString(cV) | |
532 | 532 | let dw = bO(aJ, aO) | |
533 | 533 | let bp = dw._1 | |
534 | 534 | let bq = dw._2 | |
535 | 535 | let cy = dw._3 | |
536 | 536 | let dp = dw._4 | |
537 | 537 | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
538 | 538 | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
539 | 539 | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
540 | 540 | let dx = (cY - dt) | |
541 | 541 | let dq = (ba(aJ, aO) + cy) | |
542 | 542 | let dy = aL(aJ) | |
543 | 543 | let bR = valueOrElse(getInteger(this, (aJ + o)), dy) | |
544 | 544 | let dz = (dy - dt) | |
545 | 545 | let dA = (bR - dt) | |
546 | 546 | let dj = (db - dt) | |
547 | 547 | if ((dt > cY)) | |
548 | 548 | then throw("Withdraw amount more then user locked amount") | |
549 | 549 | else if ((aQ(dv) > dy)) | |
550 | 550 | then throw("Balance of share-token is lower than totalAmount") | |
551 | 551 | else { | |
552 | 552 | let dr = if ((getString(Address(fromBase58String(aJ)), "version") == "3.0.0")) | |
553 | 553 | then invoke(am, "updateUserInterest", [aO, aJ, (cY + da)], nil) | |
554 | 554 | else 0 | |
555 | 555 | if ((dr == dr)) | |
556 | 556 | then [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + n), dz), IntegerEntry((aJ + o), dA), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar), ScriptTransfer(aw.caller, dt, dv)] | |
557 | 557 | else throw("Strict value is not equal to itself.") | |
558 | 558 | } | |
559 | 559 | } | |
560 | 560 | else throw("Strict value is not equal to itself.") | |
561 | 561 | } | |
562 | 562 | ||
563 | 563 | ||
564 | 564 | func dB (aw,aJ,cV) = { | |
565 | 565 | let dv = fromBase58String(getStringValue(value(addressFromString(aJ)), "share_asset_id")) | |
566 | 566 | let aO = toString(cV) | |
567 | 567 | let bz = aL(aJ) | |
568 | 568 | let dC = bO(aJ, aO) | |
569 | 569 | let bp = dC._1 | |
570 | 570 | let bq = dC._2 | |
571 | 571 | let cy = dC._3 | |
572 | 572 | let dp = dC._4 | |
573 | 573 | let cA = (ba(aJ, aO) + cy) | |
574 | 574 | if ((aQ(dv) > bz)) | |
575 | 575 | then throw("Balance of share-token is lower than totalAmount") | |
576 | 576 | else { | |
577 | 577 | let dD = if ((aw.caller != this)) | |
578 | 578 | then [ScriptTransfer(aw.caller, cA, ar)] | |
579 | 579 | else nil | |
580 | 580 | $Tuple2(([IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), 0), Reissue(ar, (dp + cA), true), ScriptTransfer(an, dp, ar)] ++ dD), cA) | |
581 | 581 | } | |
582 | 582 | } | |
583 | 583 | ||
584 | 584 | ||
585 | 585 | func dE (aw,aJ,aO) = { | |
586 | 586 | let bR = getIntegerValue(this, (aJ + o)) | |
587 | 587 | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
588 | 588 | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
589 | 589 | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
590 | 590 | let dx = (cY + da) | |
591 | 591 | let dF = bO(aJ, aO) | |
592 | 592 | let bp = dF._1 | |
593 | 593 | let bq = dF._2 | |
594 | 594 | let cy = dF._3 | |
595 | 595 | let dp = dF._4 | |
596 | 596 | let dq = (ba(aJ, aO) + cy) | |
597 | 597 | [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + m), dx), IntegerEntry((aJ + o), ((bR - db) + dx)), IntegerEntry((((aJ + "_") + aO) + y), dq), DeleteEntry((((aJ + "_") + aO) + j)), DeleteEntry((((aJ + "_") + aO) + l)), DeleteEntry((((aJ + "_") + aO) + k)), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
598 | 598 | } | |
599 | 599 | ||
600 | 600 | ||
601 | 601 | @Callable(aw) | |
602 | 602 | func init (dG) = if (isDefined(getString(this, x))) | |
603 | 603 | then throw("SWOP already initialized") | |
604 | 604 | else { | |
605 | 605 | let dH = 100000000000000 | |
606 | 606 | let dI = Issue("SWOP", "SWOP protocol token", dH, 8, true) | |
607 | 607 | let dJ = calculateAssetId(dI) | |
608 | 608 | [BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dH, 8, true), StringEntry(x, toBase58String(dJ))] | |
609 | 609 | } | |
610 | 610 | ||
611 | 611 | ||
612 | 612 | ||
613 | 613 | @Callable(aw) | |
614 | 614 | func initPoolShareFarming (aJ) = valueOrElse(cP(aw), [IntegerEntry((aJ + n), 0), IntegerEntry((aJ + s), 0), IntegerEntry((aJ + u), 0), IntegerEntry((aJ + w), height)]) | |
615 | 615 | ||
616 | 616 | ||
617 | 617 | ||
618 | 618 | @Callable(aw) | |
619 | 619 | func updatePoolInterest (aJ) = valueOrElse(cO(), if ((aw.caller != ak)) | |
620 | 620 | then throw("Only Governance can call this function") | |
621 | 621 | else { | |
622 | 622 | let aO = toString(addressFromPublicKey(al)) | |
623 | 623 | let dK = bO(aJ, aO) | |
624 | 624 | let bp = dK._1 | |
625 | 625 | let bq = dK._2 | |
626 | 626 | let dL = dK._3 | |
627 | 627 | [IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height)] | |
628 | 628 | }) | |
629 | 629 | ||
630 | 630 | ||
631 | 631 | ||
632 | 632 | @Callable(aw) | |
633 | 633 | func lockShareTokens (aJ,cE) = valueOrElse(cS(aJ), valueOrElse(cO(), cU(aw, aw.caller, aJ, cE))) | |
634 | 634 | ||
635 | 635 | ||
636 | 636 | ||
637 | 637 | @Callable(aw) | |
638 | 638 | func lockShareTokensFromPool (dM,aJ,cE) = valueOrElse(cS(aJ), valueOrElse(cO(), valueOrElse(cQ(aw, aJ), cU(aw, Address(dM), aJ, cE)))) | |
639 | 639 | ||
640 | 640 | ||
641 | 641 | ||
642 | 642 | @Callable(aw) | |
643 | 643 | func lockStakedShareTokens (aJ,cE,dN) = valueOrElse(cS(aJ), valueOrElse(cO(), { | |
644 | 644 | let cW = aP(aJ) | |
645 | 645 | let aO = toString(aw.caller) | |
646 | 646 | let cX = aL(aJ) | |
647 | 647 | let bR = valueOrElse(getInteger(this, (aJ + o)), cX) | |
648 | 648 | let cY = valueOrElse(getInteger(this, (((aJ + "_") + aO) + i)), 0) | |
649 | 649 | let cZ = valueOrElse(getInteger(this, (((aJ + "_") + aO) + l)), 0) | |
650 | 650 | let da = valueOrElse(getInteger(this, (((aJ + "_") + aO) + j)), 0) | |
651 | 651 | let db = valueOrElse(getInteger(this, (((aJ + "_") + aO) + m)), cY) | |
652 | 652 | let dc = (cY + da) | |
653 | 653 | let dO = cJ(cE) | |
654 | 654 | let de = dO._1 | |
655 | 655 | let df = dO._2 | |
656 | 656 | let dg = getIntegerValue(this, q) | |
657 | 657 | if ((aI(aJ) > height)) | |
658 | 658 | then throw("You can't lock shareTokens till first harvest end.") | |
659 | 659 | else if ((0 >= cE)) | |
660 | 660 | then throw("lockType must be > 0") | |
661 | 661 | else if ((dN > cY)) | |
662 | 662 | then throw(("You can't lock more than " + toString(cY))) | |
663 | 663 | else if ((aQ(cW) > cX)) | |
664 | 664 | then throw("Balance of share-token is lower than totalAmount") | |
665 | 665 | else if (if ((cZ == 0)) | |
666 | 666 | then if (if ((1 > size(aw.payments))) | |
667 | 667 | then true | |
668 | 668 | else (aw.payments[0].assetId != unit)) | |
669 | 669 | then true | |
670 | 670 | else (dg > aw.payments[0].amount) | |
671 | 671 | else false) | |
672 | 672 | then throw((("You need to pay additional waves comission " + toString(dg)) + "WAVES")) | |
673 | 673 | else if (if ((cZ == 0)) | |
674 | 674 | then (0 >= dN) | |
675 | 675 | else false) | |
676 | 676 | then throw("lockAmount must be greater than 0") | |
677 | 677 | else if ((0 > dN)) | |
678 | 678 | then throw("lockAmount must be positive") | |
679 | 679 | else if ((cZ > (height + de))) | |
680 | 680 | then throw("You cannot lock sharetokens for a period less than what you have already locked") | |
681 | 681 | else { | |
682 | 682 | let dk = (da + dN) | |
683 | 683 | let dx = (cY - dN) | |
684 | 684 | let dl = (height + de) | |
685 | 685 | let dj = (fraction(dk, df, V) + dx) | |
686 | 686 | let dP = bO(aJ, aO) | |
687 | 687 | let bp = dP._1 | |
688 | 688 | let bq = dP._2 | |
689 | 689 | let cy = dP._3 | |
690 | 690 | let dp = dP._4 | |
691 | 691 | let dq = (ba(aJ, aO) + cy) | |
692 | 692 | [IntegerEntry((((aJ + "_") + aO) + i), dx), IntegerEntry((((aJ + "_") + aO) + j), dk), IntegerEntry((((aJ + "_") + aO) + l), dl), IntegerEntry((((aJ + "_") + aO) + k), cE), IntegerEntry((((aJ + "_") + aO) + m), dj), IntegerEntry((aJ + o), ((bR - db) + dj)), IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
693 | 693 | } | |
694 | 694 | })) | |
695 | 695 | ||
696 | 696 | ||
697 | 697 | ||
698 | 698 | @Callable(aw) | |
699 | 699 | func unlockUserLock (aJ,aO) = valueOrElse(cO(), { | |
700 | 700 | let cZ = valueOrErrorMessage(getInteger(this, (((aJ + "_") + aO) + l)), (((("There is no pool " + aJ) + " or user ") + aO) + "with lock")) | |
701 | 701 | if ((cZ > height)) | |
702 | 702 | then throw(("You can't unlock sharetokens till " + toString(cZ))) | |
703 | 703 | else (dE(aw, aJ, aO) ++ [ScriptTransfer(aw.caller, getIntegerValue(this, q), unit)]) | |
704 | 704 | }) | |
705 | 705 | ||
706 | 706 | ||
707 | 707 | ||
708 | 708 | @Callable(aw) | |
709 | 709 | func unlockUserLockDeprecated (aJ,aO) = valueOrElse(cO(), valueOrElse(cT(aw), if (!(cR(aJ))) | |
710 | 710 | then throw("Pool must be deprecated") | |
711 | 711 | else if (isDefined(getInteger(this, (((aJ + "_") + aO) + l)))) | |
712 | 712 | then (dE(aw, aJ, aO) ++ [ScriptTransfer(ai, getIntegerValue(this, q), unit)]) | |
713 | 713 | else nil)) | |
714 | 714 | ||
715 | 715 | ||
716 | 716 | ||
717 | 717 | @Callable(aw) | |
718 | 718 | func withdrawShareTokens (aJ,dt) = valueOrElse(cO(), ds(aw, aw.caller, aJ, dt)) | |
719 | 719 | ||
720 | 720 | ||
721 | 721 | ||
722 | 722 | @Callable(aw) | |
723 | 723 | func withdrawShareTokensFromPool (dM,aJ,dt) = valueOrElse(cO(), valueOrElse(cQ(aw, aJ), ds(aw, Address(dM), aJ, dt))) | |
724 | 724 | ||
725 | 725 | ||
726 | 726 | ||
727 | 727 | @Callable(aw) | |
728 | 728 | func claim (aJ) = valueOrElse(cO(), { | |
729 | 729 | let bE = dB(aw, aJ, aw.caller) | |
730 | 730 | if ((bE._2 == 0)) | |
731 | 731 | then throw("You have 0 available SWOP") | |
732 | 732 | else bE | |
733 | 733 | }) | |
734 | 734 | ||
735 | 735 | ||
736 | 736 | ||
737 | 737 | @Callable(aw) | |
738 | 738 | func claimInternal (aJ,cV) = valueOrElse(cO(), valueOrElse(cT(aw), dB(aw, aJ, Address(cV)))) | |
739 | 739 | ||
740 | 740 | ||
741 | 741 | ||
742 | 742 | @Callable(aw) | |
743 | 743 | func claimAndStake (aJ) = valueOrElse(cO(), { | |
744 | 744 | let cy = { | |
745 | 745 | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
746 | 746 | if ($isInstanceOf(dQ, "Int")) | |
747 | 747 | then dQ | |
748 | 748 | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
749 | 749 | } | |
750 | 750 | if ((cy == cy)) | |
751 | 751 | then if ((cy == 0)) | |
752 | 752 | then throw("You have 0 available SWOP") | |
753 | 753 | else { | |
754 | 754 | let dR = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, cy)]) | |
755 | 755 | if ((dR == dR)) | |
756 | 756 | then nil | |
757 | 757 | else throw("Strict value is not equal to itself.") | |
758 | 758 | } | |
759 | 759 | else throw("Strict value is not equal to itself.") | |
760 | 760 | }) | |
761 | 761 | ||
762 | 762 | ||
763 | 763 | ||
764 | 764 | @Callable(aw) | |
765 | 765 | func claimAll (cq) = valueOrElse(cO(), { | |
766 | 766 | func dS (dT,aJ) = { | |
767 | 767 | let cy = { | |
768 | 768 | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
769 | 769 | if ($isInstanceOf(dQ, "Int")) | |
770 | 770 | then dQ | |
771 | 771 | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
772 | 772 | } | |
773 | 773 | if ((cy == cy)) | |
774 | 774 | then (dT + cy) | |
775 | 775 | else throw("Strict value is not equal to itself.") | |
776 | 776 | } | |
777 | 777 | ||
778 | 778 | let dT = { | |
779 | 779 | let aB = cq | |
780 | 780 | let aC = size(aB) | |
781 | 781 | let aD = 0 | |
782 | 782 | func aE (aF,aG) = if ((aG >= aC)) | |
783 | 783 | then aF | |
784 | 784 | else dS(aF, aB[aG]) | |
785 | 785 | ||
786 | 786 | func aH (aF,aG) = if ((aG >= aC)) | |
787 | 787 | then aF | |
788 | 788 | else throw("List size exceeds 60") | |
789 | 789 | ||
790 | 790 | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
791 | 791 | } | |
792 | 792 | if ((dT == 0)) | |
793 | 793 | then throw("You have 0 available SWOP") | |
794 | 794 | else [ScriptTransfer(aw.caller, dT, ar)] | |
795 | 795 | }) | |
796 | 796 | ||
797 | 797 | ||
798 | 798 | ||
799 | 799 | @Callable(aw) | |
800 | 800 | func claimAllAndStake (cq) = valueOrElse(cO(), { | |
801 | 801 | func dS (dT,aJ) = { | |
802 | 802 | let cy = { | |
803 | 803 | let dQ = invoke(this, "claimInternal", [aJ, aw.caller.bytes], nil) | |
804 | 804 | if ($isInstanceOf(dQ, "Int")) | |
805 | 805 | then dQ | |
806 | 806 | else throw(($getType(dQ) + " couldn't be cast to Int")) | |
807 | 807 | } | |
808 | 808 | if ((cy == cy)) | |
809 | 809 | then (dT + cy) | |
810 | 810 | else throw("Strict value is not equal to itself.") | |
811 | 811 | } | |
812 | 812 | ||
813 | 813 | let dT = { | |
814 | 814 | let aB = cq | |
815 | 815 | let aC = size(aB) | |
816 | 816 | let aD = 0 | |
817 | 817 | func aE (aF,aG) = if ((aG >= aC)) | |
818 | 818 | then aF | |
819 | 819 | else dS(aF, aB[aG]) | |
820 | 820 | ||
821 | 821 | func aH (aF,aG) = if ((aG >= aC)) | |
822 | 822 | then aF | |
823 | 823 | else throw("List size exceeds 60") | |
824 | 824 | ||
825 | 825 | aH(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60) | |
826 | 826 | } | |
827 | 827 | if ((dT == 0)) | |
828 | 828 | then throw("You have 0 available SWOP") | |
829 | 829 | else { | |
830 | 830 | let dR = invoke(ak, "lockSWOPFromFarming", nil, [AttachedPayment(ar, dT)]) | |
831 | 831 | if ((dR == dR)) | |
832 | 832 | then nil | |
833 | 833 | else throw("Strict value is not equal to itself.") | |
834 | 834 | } | |
835 | 835 | }) | |
836 | 836 | ||
837 | 837 | ||
838 | 838 | ||
839 | 839 | @Callable(aw) | |
840 | 840 | func updateUserBoostInterest (aJ,aO) = valueOrElse(cO(), if ((aw.caller != aj)) | |
841 | 841 | then throw("Only voiting can call this function") | |
842 | 842 | else { | |
843 | 843 | let dU = bO(aJ, aO) | |
844 | 844 | let bp = dU._1 | |
845 | 845 | let bq = dU._2 | |
846 | 846 | let cy = dU._3 | |
847 | 847 | let dp = dU._4 | |
848 | 848 | let dq = (ba(aJ, aO) + cy) | |
849 | 849 | [IntegerEntry((((aJ + "_") + aO) + t), bp), IntegerEntry((((aJ + "_") + aO) + v), bq), IntegerEntry((aJ + s), bp), IntegerEntry((aJ + u), bq), IntegerEntry((aJ + w), height), IntegerEntry((((aJ + "_") + aO) + y), dq), Reissue(ar, dp, true), ScriptTransfer(an, dp, ar)] | |
850 | 850 | }) | |
851 | 851 | ||
852 | 852 | ||
853 | 853 | ||
854 | 854 | @Callable(aw) | |
855 | 855 | func shutdown () = valueOrElse(cP(aw), if (!(ap)) | |
856 | 856 | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified"))) | |
857 | 857 | else cM("Paused by admin")) | |
858 | 858 | ||
859 | 859 | ||
860 | 860 | ||
861 | 861 | @Callable(aw) | |
862 | 862 | func activate () = valueOrElse(cP(aw), if (ap) | |
863 | 863 | then throw("DApp is already active") | |
864 | 864 | else [BooleanEntry(a, true), DeleteEntry(d)]) | |
865 | 865 | ||
866 | 866 | ||
867 | 867 | @Verifier(dV) | |
868 | 868 | func dW () = { | |
869 | 869 | let ac = dV | |
870 | 870 | let dX = if (sigVerify(dV.bodyBytes, dV.proofs[0], af)) | |
871 | 871 | then 1 | |
872 | 872 | else 0 | |
873 | 873 | let dY = if (sigVerify(dV.bodyBytes, dV.proofs[1], ag)) | |
874 | 874 | then 1 | |
875 | 875 | else 0 | |
876 | 876 | let dZ = if (sigVerify(dV.bodyBytes, dV.proofs[2], ah)) | |
877 | 877 | then 1 | |
878 | 878 | else 0 | |
879 | 879 | (((dX + dY) + dZ) >= 2) | |
880 | 880 | } | |
881 | 881 |
github/deemru/w8io/169f3d6 136.89 ms ◑