tx · 3YvdZnniiZ3EEdehUxfhoAaJENZmaJmNUzXc86AkmK9M 3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX: -0.03700000 Waves 2023.03.17 17:11 [2494096] smart account 3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX > SELF 0.00000000 Waves
{ "type": 13, "id": "3YvdZnniiZ3EEdehUxfhoAaJENZmaJmNUzXc86AkmK9M", "fee": 3700000, "feeAssetId": null, "timestamp": 1679062377246, "version": 2, "chainId": 84, "sender": "3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX", "senderPublicKey": "BjnLnkAMaJLYAK36vQqSepUNjGeMDHfZGfmdYwGcLbmg", "proofs": [ "4ua5kMxw3wxRkcq1DqmEWQyGCWjraiQYrnrMP3V9irnu1aNmyDn2hi2boAQShemynK3ySdEoarCBWzo6FLnwJvAd", "KFWKeWGj7opqWZ5P9Vfm2bVhdfAWVgsiSdK7NN9LwQbnSfu9wHRuGFZ3GoaUUAK34suAf5oQgX9vdkJ1dDcHCKv" ], "script": "base64:BgJJCAISAwoBBBIECgIEARIGCgQBAQQBEgMKAQESBgoEAQgBARIECgIBARIDCgEBEgASABIAEgMKAQESBQoDBAEIEgASBAoCAQESAHAAB3ZlcnNpb24CBTIuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMAC2tEZXByZWNhdGVkAgtkZXByZWNhdGVkXwAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQACWtCYWxhbmNlQQIPQV9hc3NldF9iYWxhbmNlAAlrQmFsYW5jZUICD0JfYXNzZXRfYmFsYW5jZQANa1NoYXJlQXNzZXRJZAIOc2hhcmVfYXNzZXRfaWQAEWtTaGFyZUFzc2V0U3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkABGtGZWUCCmNvbW1pc3Npb24ACmtJbnZhcmlhbnQCCWludmFyaWFudAAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MADGtFVVJOQWRkcmVzcwIUc3Rha2luZ19ldXJuX2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAD2tVc2VyR1N3b3BJbkdvdgINX0dTd29wX2Ftb3VudAANa0ZpcnN0SGFydmVzdAINZmlyc3RfaGFydmVzdAATa0ZpcnN0SGFydmVzdEhlaWdodAIUZmlyc3RfaGFydmVzdF9oZWlnaHQAC2tTaGFyZUxpbWl0AhxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AAtrQmFzZVBlcmlvZAILYmFzZV9wZXJpb2QADWtQZXJpb2RMZW5ndGgCDXBlcmlvZF9sZW5ndGgADGtTdGFydEhlaWdodAIMc3RhcnRfaGVpZ2h0AA5rREFwcFRocmVzaG9sZAIOZEFwcF90aHJlc2hvbGQADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MAD2tUZWFtQm94QWRkcmVzcwIQdGVhbV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAPa0Zhcm1pbmdBZGRyZXNzAg9mYXJtaW5nX2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwAMa1VTRE5Bc3NldElkAg11c2RuX2Fzc2V0X2lkAA5rU3Rha2luZ0Fzc2V0cwIOc3Rha2luZ19hc3NldHMABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAA50ZWFtQm94QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tUZWFtQm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MABFVTRE4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5Bc3NldElkAA1zdGFraW5nQXNzZXRzCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFDmtTdGFraW5nQXNzZXRzAApiYXNlUGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwULa0Jhc2VQZXJpb2QCEUVtcHR5IGtCYXNlUGVyaW9kAAtzdGFydEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDGtTdGFydEhlaWdodAISRW1wdHkga1N0YXJ0SGVpZ2h0AAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQ1rUGVyaW9kTGVuZ3RoAhNFbXB0eSBrUGVyaW9kTGVuZ3RoABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QJAGQCCQBkAgUKYmFzZVBlcmlvZAkAaQIJAGUCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgAAwAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAphY3RpdmVHbG9iCQELdmFsdWVPckVsc2UCCQCbCAIFBm9yYWNsZQULa0FjdGl2ZUdsb2IGAA5kZXByZWNhdGVkUG9vbAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUJAKwCAgULa0RlcHJlY2F0ZWQJAKUIAQUEdGhpcwcAC3N0ckFzc2V0SWRBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEEAC3N0ckFzc2V0SWRCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEIACGFzc2V0SWRBAwkAAAIFC3N0ckFzc2V0SWRBAgVXQVZFUwUEdW5pdAkA2QQBBQtzdHJBc3NldElkQQAIYXNzZXRJZEIDCQAAAgULc3RyQXNzZXRJZEICBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRCAAphc3NldE5hbWVBBAckbWF0Y2gwBQhhc3NldElkQQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAgJAQV2YWx1ZQEJAOwHAQUCaWQEbmFtZQMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgAKYXNzZXROYW1lQgQHJG1hdGNoMAUIYXNzZXRJZEIDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAICQEFdmFsdWUBCQDsBwEFAmlkBG5hbWUDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IACGJhbGFuY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUEACGJhbGFuY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUIADHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkABBzaGFyZUFzc2V0U3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJaW52YXJpYW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQprSW52YXJpYW50AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDBQNmZWUAIwBkAAdmZWVUZWFtCQBrAwUDZmVlAAoAZAAJZmVlU2NhbGU2AMCEPQAGc2NhbGUzAOgHAAZzY2FsZTgAgMLXLwAHc2NhbGUxNgCAgIT+pt7hEQAHZGlnaXRzOAAIABVleGNoYW5nZVJhdGlvTGltaXRNaW4AgI7OHAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4AID24EIABWFscGhhADIAC2FscGhhRGlnaXRzAAIABGJldGEAgIDer8/1lQgBDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQxzdGFrZWRBbW91bnQBB2Fzc2V0SWQEFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gwAwkAAAIFA2FJZAUEVVNETgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQNhSWQCAV8JAKUIAQUEdGhpcwAAAwkAAQIFByRtYXRjaDACBFVuaXQAAAkAAgECC01hdGNoIGVycm9yBAckbWF0Y2gwBRZzdGFrZWRBbW91bnRDYWxjdWxhdGVkAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQAAAA1zdGFrZWRBbW91bnRBCQEMc3Rha2VkQW1vdW50AQUIYXNzZXRJZEEADXN0YWtlZEFtb3VudEIJAQxzdGFrZWRBbW91bnQBBQhhc3NldElkQgARYXZhaWxhYmxlQmFsYW5jZUEJAGUCBQhiYWxhbmNlQQUNc3Rha2VkQW1vdW50QQARYXZhaWxhYmxlQmFsYW5jZUIJAGUCBQhiYWxhbmNlQgUNc3Rha2VkQW1vdW50QgAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQkAZAIJAQ5hY2NvdW50QmFsYW5jZQEFCGFzc2V0SWRBBQ1zdGFrZWRBbW91bnRBABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQBkAgkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEIFDXN0YWtlZEFtb3VudEIAEGhhc0Vub3VnaEJhbGFuY2UDCQBnAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUIYmFsYW5jZUEJAGcCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQhiYWxhbmNlQgcBCHNrZXduZXNzAgF4AXkJAGkCCQBkAgkAawMFB3NjYWxlMTYFAXgFAXkJAGsDBQdzY2FsZTE2BQF5BQF4AAIBDWludmFyaWFudENhbGMCAXgBeQQCc2sJAQhza2V3bmVzcwIFAXgFAXkJAGQCCQBrAwkAZAIFAXgFAXkFB3NjYWxlMTYJAGwGBQJzawUHZGlnaXRzOAUFYWxwaGEFC2FscGhhRGlnaXRzBQdkaWdpdHM4BQdDRUlMSU5HCQBoAgACCQBrAwkAoAMBCQB2BgkAvAIDCQC2AgEFAXgJALYCAQUBeQkAtgIBBQZzY2FsZTgAAAkAtgIBAAUAAQkAaQIFB2RpZ2l0czgAAgUERE9XTgkAbAYJAGUCBQJzawUEYmV0YQUHZGlnaXRzOAUFYWxwaGEFC2FscGhhRGlnaXRzBQdkaWdpdHM4BQRET1dOBQZzY2FsZTgBE2NhbGN1bGF0ZVNlbmRBbW91bnQHFWFtb3VudFRvU2VuZEVzdGltYXRlZBVtaW5Ub2tlblJlY2VpdmVBbW91bnQSdG9rZW5SZWNlaXZlQW1vdW50B3Rva2VuSWQFYmFsY0EFYmFsY0IGaW52Q3VyBB13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAZQIFB3NjYWxlMTYJAGkCCQBoAgUHc2NhbGUxNgABAICt4gQEHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQkAZQIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUVbWluVG9rZW5SZWNlaXZlQW1vdW50BAF4CQBkAgUFYmFsY0EFEnRva2VuUmVjZWl2ZUFtb3VudAQBeQkAZAIFBWJhbGNCBRJ0b2tlblJlY2VpdmVBbW91bnQKAQ1nZXRTdGVwQW1vdW50AgNhY2MEc3RlcAMJAAACCAUDYWNjAl8xAP///////////wEEDGFtb3VudFRvU2VuZAkAZQIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAaQIJAGkCCQBoAgUEc3RlcAUeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAMFBnNjYWxlMwQNc3RlcEludmFyaWFudAMJAAACBQd0b2tlbklkBQhhc3NldElkQQkBDWludmFyaWFudENhbGMCBQF4CQBlAgUFYmFsY0IFDGFtb3VudFRvU2VuZAkBDWludmFyaWFudENhbGMCCQBlAgUFYmFsY0EFDGFtb3VudFRvU2VuZAUBeQMJAGYCBQ1zdGVwSW52YXJpYW50BQZpbnZDdXIJAJQKAgUMYW1vdW50VG9TZW5kBQ1zdGVwSW52YXJpYW50CQCUCgIA////////////AQAABQNhY2MED2Ftb3VudFRvU2VuZE1pbgkBDWdldFN0ZXBBbW91bnQCCQCUCgIA////////////AQAAALgXAwkAZgIAAAgFD2Ftb3VudFRvU2VuZE1pbgJfMQkAAgECH1ByaWNlIGlzIHdvcnNlIHRoYW4gbWluUmVjZWl2ZWQEDGludkVzdGltYXRlZAMJAAACBQd0b2tlbklkBQhhc3NldElkQQkBDWludmFyaWFudENhbGMCBQF4CQBlAgUFYmFsY0IFFWFtb3VudFRvU2VuZEVzdGltYXRlZAMJAAACBQd0b2tlbklkBQhhc3NldElkQgkBDWludmFyaWFudENhbGMCCQBlAgUFYmFsY0EFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUBeQkAAgECFldyb25nIGFzc2V0IGluIHBheW1lbnQDCQBmAgUGaW52Q3VyBQxpbnZFc3RpbWF0ZWQDCQBnAgUdd29yc3RBbGxvd2VkTmV3SW52YXJpYW50UmF0aW8JAGsDBQdzY2FsZTE2BQZpbnZDdXIFDGludkVzdGltYXRlZAkAAgECMlRoZSByZXF1ZXN0ZWQgcHJpY2UgaXMgdG9vIG5vdCBwcm9maXRhYmxlIGZvciB1c2VyBAFhCgACJGwJAMwIAgAZCQDMCAIAyAEJAMwIAgD0AwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAP///////////wEAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENZ2V0U3RlcEFtb3VudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwMJAGYCAAAIBQFhAl8xCAUPYW1vdW50VG9TZW5kTWluAl8xCAUBYQJfMQQBYQoAAiRsCQDMCAIAjPz/////////AQkAzAgCALj+/////////wEJAMwIAgDn//////////8BBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIA////////////AQAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1nZXRTdGVwQW1vdW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADBA90dXBsZVNlbmRCZXR0ZXIDCQBmAgAACAUBYQJfMQkAlAoCBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFDGludkVzdGltYXRlZAUBYQMJAGcCBR13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAawMFB3NjYWxlMTYFBmludkN1cggFD3R1cGxlU2VuZEJldHRlcgJfMgkAAgECMlRoZSByZXF1ZXN0ZWQgcHJpY2UgaXMgdG9vIG5vdCBwcm9maXRhYmxlIGZvciB1c2VyCAUPdHVwbGVTZW5kQmV0dGVyAl8xAQxnZXRBc3NldEluZm8BB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAECHN0cmluZ0lkCQDYBAEFAmlkBARpbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCaWQJAKwCAgkArAICAgZBc3NldCAFCHN0cmluZ0lkAg4gZG9lc24ndCBleGlzdAkAlQoDBQhzdHJpbmdJZAgFBGluZm8EbmFtZQgFBGluZm8IZGVjaW1hbHMDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAJAJUKAwIFV0FWRVMCBVdBVkVTAAgJAAIBAgtNYXRjaCBlcnJvcgEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENdGhyb3dJc0FjdGl2ZQAJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAQhpc0FjdGl2ZQADAwUGYWN0aXZlBQphY3RpdmVHbG9iBwUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBDGlzRGVwcmljYXRlZAADCQEBIQEFDmRlcHJlY2F0ZWRQb29sBQR1bml0CQACAQIxUG9vbCBpcyBkZXByZWNhdGVkLiBPbmx5IHdpdGhkcmF3IGFjdGlvbiBhbGxvd2VkLgELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAgUEdGhpcwgFAWkGY2FsbGVyBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgELdGhyb3dBc3NldHMACQACAQkArAICCQCsAgIJAKwCAgIlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAULc3RyQXNzZXRJZEECBSBhbmQgBQtzdHJBc3NldElkQgEPdGhyb3dPbmVQYXltZW50AAkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkARFzdXNwZW5kU3VzcGljaW91cwAJAQdzdXNwZW5kAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIjU3VzcGljaW91cyBzdGF0ZS4gQWN0dWFsIGJhbGFuY2VzOiAJAKQDAQUIYmFsYW5jZUECASAFCmFzc2V0TmFtZUECAiwgCQCkAwEFCGJhbGFuY2VCAgEgBQphc3NldE5hbWVCAgkuIFN0YXRlOiAJAKQDAQkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEECASAFCmFzc2V0TmFtZUECAiwgCQCkAwEJAQ5hY2NvdW50QmFsYW5jZQEFCGFzc2V0SWRCAgEgBQphc3NldE5hbWVCARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBXN0YWtlB2Fzc2V0SWQDBQVzdGFrZQkAlAoCAgxsb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzARFjYWxjU3Rha2luZ1BhcmFtcwMFc3Rha2UGYW1vdW50B2Fzc2V0SWQDBQVzdGFrZQQNJHQwMTA2MDYxMDY3MgkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTA2MDYxMDY3MgJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMDYwNjEwNjcyAl8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsBA0kdDAxMDc3MDEwODM2CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDc3MDEwODM2Al8xBAtzdGFraW5nQWRkcggFDSR0MDEwNzcwMTA4MzYCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIJAMwIAgUGYW1vdW50CQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIJAKUIAQUIdXNlckFkZHIFDmtVc2VyU3dvcEluR292AAAEC2dTd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUPa1VzZXJHU3dvcEluR292BQpzd29wQW1vdW50BA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBEmNoZWNrREFwcFRocmVzaG9sZAMLbmV3QmFsYW5jZUELbmV3QmFsYW5jZUIKcG10QXNzZXRJZAQNZEFwcFRocmVzaG9sZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUOa0RBcHBUaHJlc2hvbGQEBXJhdGlvAwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAZgIFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgcJAG4EBQtuZXdCYWxhbmNlQQABBQtuZXdCYWxhbmNlQgUHQ0VJTElORwMDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEIJAGYCBQtuZXdCYWxhbmNlQgULbmV3QmFsYW5jZUEHCQBuBAULbmV3QmFsYW5jZUIAAQULbmV3QmFsYW5jZUEFB0NFSUxJTkcAAAMJAGYCBQVyYXRpbwUNZEFwcFRocmVzaG9sZAQNJHQwMTI2ODkxMjc5NwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAlAoCBQphc3NldE5hbWVCBQphc3NldE5hbWVBCQCUCgIFCmFzc2V0TmFtZUEFCmFzc2V0TmFtZUIEBnRva2VuMQgFDSR0MDEyNjg5MTI3OTcCXzEEBnRva2VuMggFDSR0MDEyNjg5MTI3OTcCXzIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICB0J1eWluZyAFBnRva2VuMQInIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIGR1ZSB0byB0aGUgBQZ0b2tlbjICBiBkZXBlZwYBGnJlcGxlbmlzaFdpdGhUd29Ub2tlbnNDYWxjAwFpDHN0YWtlRmFybWluZwhsb2NrVHlwZQQLcG10QXNzZXRJZEEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLcG10QXNzZXRJZEIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAawMFBnNjYWxlOAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGJhbGFuY2VBBBNyYXRpb1NoYXJlVG9rZW5zSW5CCQBrAwUGc2NhbGU4CAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAUIYmFsYW5jZUIEDSR0MDEzMzA5MTMzODYJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQQQOcG10U3RyQXNzZXRJZEEIBQ0kdDAxMzMwOTEzMzg2Al8xBA1wbXRBc3NldE5hbWVBCAUNJHQwMTMzMDkxMzM4NgJfMgQMcG10RGVjaW1hbHNBCAUNJHQwMTMzMDkxMzM4NgJfMwQNJHQwMTMzOTUxMzUxNgkBDGdldEFzc2V0SW5mbwEFC3BtdEFzc2V0SWRCBA5wbXRTdHJBc3NldElkQggFDSR0MDEzMzk1MTM1MTYCXzEEDXBtdEFzc2V0TmFtZUIIBQ0kdDAxMzM5NTEzNTE2Al8yBAxwbXREZWNpbWFsc0IIBQ0kdDAxMzM5NTEzNTE2Al8zBA0kdDAxMzUyNTE0MDI5AwkAZgIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAbgQFCGJhbGFuY2VCBRNyYXRpb1NoYXJlVG9rZW5zSW5BBQZzY2FsZTgFB0NFSUxJTkcJAJcKBQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA3BtdAkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNwbXQFC3BtdEFzc2V0SWRCBRNyYXRpb1NoYXJlVG9rZW5zSW5BBANwbXQJAG4EBQhiYWxhbmNlQQUTcmF0aW9TaGFyZVRva2Vuc0luQgUGc2NhbGU4BQdDRUlMSU5HCQCXCgUFA3BtdAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDcG10BQtwbXRBc3NldElkQQUTcmF0aW9TaGFyZVRva2Vuc0luQgQKcG10QW1vdW50QQgFDSR0MDEzNTI1MTQwMjkCXzEECnBtdEFtb3VudEIIBQ0kdDAxMzUyNTE0MDI5Al8yBAZjaGFuZ2UIBQ0kdDAxMzUyNTE0MDI5Al8zBA1jaGFuZ2VBc3NldElkCAUNJHQwMTM1MjUxNDAyOQJfNAQPc2hhcmVUb2tlblJhdGlvCAUNJHQwMTM1MjUxNDAyOQJfNQQVc2hhcmVUb2tlblRvUGF5QW1vdW50CQBrAwUPc2hhcmVUb2tlblJhdGlvBRBzaGFyZUFzc2V0U3VwcGx5BQZzY2FsZTgDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAMHCQACAQIeVHdvIG9yIHRocmVlIHBheW1lbnRzIGV4cGVjdGVkAwMJAQIhPQIFC3BtdEFzc2V0SWRBBQhhc3NldElkQQYJAQIhPQIFC3BtdEFzc2V0SWRCBQhhc3NldElkQgkBC3Rocm93QXNzZXRzAAMJAAACBRVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAkAAgECHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkAZgIAAAUGY2hhbmdlCQACAQIKQ2hhbmdlIDwgMAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKcG10QW1vdW50QQULcG10QXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpwbXRBbW91bnRCBQtwbXRBc3NldElkQgUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEIJAMwIAgUOcG10U3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIEDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZAIFCGJhbGFuY2VBBQpwbXRBbW91bnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGQCBQhiYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBRBzaGFyZUFzc2V0U3VwcGx5BRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQJAQ1pbnZhcmlhbnRDYWxjAgkAZAIFCGJhbGFuY2VBBQpwbXRBbW91bnRBCQBkAgUIYmFsYW5jZUIFCnBtdEFtb3VudEIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZjaGFuZ2UFDWNoYW5nZUFzc2V0SWQFA25pbAMFDHN0YWtlRmFybWluZwQKc3RQYXltZW50cwkAzggCCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUDbmlsAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwACB2Fzc2V0SWQBAAUEdW5pdAgJAJEDAggFAWkIcGF5bWVudHMAAgdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwACBmFtb3VudAUDbmlsBQNuaWwEAnJlCQD8BwQFBHRoaXMCDHJlaXNzdWVTaGFyZQkAzAgCBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIXbG9ja1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQClCAEFBHRoaXMJAMwIAgUIbG9ja1R5cGUFA25pbAUKc3RQYXltZW50cwMJAAACBQFzBQFzBQ1zY3JpcHRBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFDHNoYXJlQXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARlyZXBsZW5pc2hXaXRoT25lVG9rZW5DYWxjBQFpE3ZpcnR1YWxTd2FwVG9rZW5QYXkTdmlydHVhbFN3YXBUb2tlbkdldAxzdGFrZUZhcm1pbmcIbG9ja1R5cGUEDSR0MDE2OTMxMTcwMDYJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTY5MzExNzAwNgJfMQQKcG10QXNzZXRJZAgFDSR0MDE2OTMxMTcwMDYCXzIEDSR0MDE3MDE1MTcwODgJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMTcwMTUxNzA4OAJfMQQMcG10QXNzZXROYW1lCAUNJHQwMTcwMTUxNzA4OAJfMgQLcG10RGVjaW1hbHMIBQ0kdDAxNzAxNTE3MDg4Al8zBA9wbXRNaW5UaHJlc2hvbGQAwJaxAgQddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UAgOHrFwQJdG9sZXJhbmNlAwkAZgIFHXRocmVzaG9sZFZhbHVlRm9yTWluVG9sZXJhbmNlBQlwbXRBbW91bnQAoI0GAAEEHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gJAGUCBQZzY2FsZTgJAGkCCQBoAgUGc2NhbGU4BQl0b2xlcmFuY2UAgK3iBAQcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAZAIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgFCXRvbGVyYW5jZQCAreIEBBdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAZQIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgAAQCAreIEAwkAZgIFD3BtdE1pblRocmVzaG9sZAUJcG10QW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICAg9QYXltZW50IGFtb3VudCAJAKQDAQUJcG10QW1vdW50AicgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiAJAKQDAQUPcG10TWluVGhyZXNob2xkAgcgdG9rZW5zAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACBwkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQDCQEBIQEFEGhhc0Vub3VnaEJhbGFuY2UJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMAAwMJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQECIT0CBQpwbXRBc3NldElkBQhhc3NldElkQgcJAQt0aHJvd0Fzc2V0cwAEDSR0MDE4MTk4MTg4NDgDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAJgKBgkAZQIFCXBtdEFtb3VudAUTdmlydHVhbFN3YXBUb2tlblBheQUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VBBRN2aXJ0dWFsU3dhcFRva2VuUGF5CQBlAgUIYmFsYW5jZUIFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGQCBQhiYWxhbmNlQQUJcG10QW1vdW50BQhiYWxhbmNlQgkAmAoGBRN2aXJ0dWFsU3dhcFRva2VuR2V0CQBlAgUJcG10QW1vdW50BRN2aXJ0dWFsU3dhcFRva2VuUGF5CQBlAgUIYmFsYW5jZUEFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGQCBQhiYWxhbmNlQgUTdmlydHVhbFN3YXBUb2tlblBheQUIYmFsYW5jZUEJAGQCBQhiYWxhbmNlQgUJcG10QW1vdW50BBF2aXJ0dWFsUmVwbGVuaXNoQQgFDSR0MDE4MTk4MTg4NDgCXzEEEXZpcnR1YWxSZXBsZW5pc2hCCAUNJHQwMTgxOTgxODg0OAJfMgQRYmFsYW5jZUFmdGVyU3dhcEEIBQ0kdDAxODE5ODE4ODQ4Al8zBBFiYWxhbmNlQWZ0ZXJTd2FwQggFDSR0MDE4MTk4MTg4NDgCXzQEC25ld0JhbGFuY2VBCAUNJHQwMTgxOTgxODg0OAJfNQQLbmV3QmFsYW5jZUIIBQ0kdDAxODE5ODE4ODQ4Al82BAxpbnZhcmlhbnROZXcJAQ1pbnZhcmlhbnRDYWxjAgURYmFsYW5jZUFmdGVyU3dhcEEFEWJhbGFuY2VBZnRlclN3YXBCBCVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoCQBpAgkAawMFB3NjYWxlMTYFEWJhbGFuY2VBZnRlclN3YXBBBRFiYWxhbmNlQWZ0ZXJTd2FwQgkAawMFBnNjYWxlOAURdmlydHVhbFJlcGxlbmlzaEEFEXZpcnR1YWxSZXBsZW5pc2hCAwMJAGcCBRdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAawMFBnNjYWxlOAUJaW52YXJpYW50BQxpbnZhcmlhbnROZXcGCQBmAgUJaW52YXJpYW50BQxpbnZhcmlhbnROZXcJAAIBAjpJbmNvcnJlY3QgdmlydHVhbFN3YXBUb2tlblBheSBvciB2aXJ0dWFsU3dhcFRva2VuR2V0IHZhbHVlAwMJAGYCBRxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoBSVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBgkAZgIFJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gFHHNsaXBwYWdlVmFsdWVNYXhGb3JSZXBsZW5pc2gJAAIBAmxTd2FwIHdpdGggdmlydHVhbFN3YXBUb2tlblBheSBhbmQgdmlydHVhbFN3YXBUb2tlbkdldCBpcyBwb3NzaWJsZSwgYnV0IHJhdGlvIGFmdGVyIHZpcnR1YWwgc3dhcCBpcyBpbmNvcnJlY3QDCQEBIQEJARJjaGVja0RBcHBUaHJlc2hvbGQDBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIFCnBtdEFzc2V0SWQJAQV0aHJvdwAEE3JhdGlvU2hhcmVUb2tlbnNJbkEJAGsDBRF2aXJ0dWFsUmVwbGVuaXNoQQUGc2NhbGU4BRFiYWxhbmNlQWZ0ZXJTd2FwQQQTcmF0aW9TaGFyZVRva2Vuc0luQgkAawMFEXZpcnR1YWxSZXBsZW5pc2hCBQZzY2FsZTgFEWJhbGFuY2VBZnRlclN3YXBCBBVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGsDCQCXAwEJAMwIAgUTcmF0aW9TaGFyZVRva2Vuc0luQQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5CBQNuaWwFEHNoYXJlQXNzZXRTdXBwbHkFBnNjYWxlOAQdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAGsDBRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGUCBQlmZWVTY2FsZTYJAGkCBQNmZWUAAgUJZmVlU2NhbGU2BBpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAaQIFDWZlZUdvdmVybmFuY2UAAgUJZmVlU2NhbGU2BBRzaGFyZVRva2VuVGVhbVJld2FyZAkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAaQIFB2ZlZVRlYW0AAgUJZmVlU2NhbGU2BBZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQBrAwUac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFCGJhbGFuY2VBBRBzaGFyZUFzc2V0U3VwcGx5BBZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CCQBrAwUac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBB0ZWFtUmV3YXJkVG9rZW5BCQBrAwUUc2hhcmVUb2tlblRlYW1SZXdhcmQFCGJhbGFuY2VBBRBzaGFyZUFzc2V0U3VwcGx5BBB0ZWFtUmV3YXJkVG9rZW5CCQBrAwUUc2hhcmVUb2tlblRlYW1SZXdhcmQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BA0kdDAyMTAzMzIxNDE2AwkAAAIFDXBtdFN0ckFzc2V0SWQFC3N0ckFzc2V0SWRBCQCVCgMJAGUCCQBlAgUJcG10QW1vdW50BRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBRB0ZWFtUmV3YXJkVG9rZW5BCQBkAgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUQdGVhbVJld2FyZFRva2VuQgULc3RyQXNzZXRJZEIJAJUKAwkAZQIJAGUCBQlwbXRBbW91bnQFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFEHRlYW1SZXdhcmRUb2tlbkIJAGQCBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBRB0ZWFtUmV3YXJkVG9rZW5BBQtzdHJBc3NldElkQQQLc3Rha2VBbW91bnQIBQ0kdDAyMTAzMzIxNDE2Al8xBA11bnN0YWtlQW1vdW50CAUNJHQwMjEwMzMyMTQxNgJfMgQMdW5zdGFrZUFzc2V0CAUNJHQwMjEwMzMyMTQxNgJfMwQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUNcG10U3RyQXNzZXRJZAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgULc3Rha2VBbW91bnQJAMwIAgUNcG10U3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUMdW5zdGFrZUFzc2V0CQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBwkAzAgCBQ11bnN0YWtlQW1vdW50CQDMCAIFDHVuc3Rha2VBc3NldAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQNc2NyaXB0QWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBRB0ZWFtUmV3YXJkVG9rZW5BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGUCCQBlAgULbmV3QmFsYW5jZUIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFEHRlYW1SZXdhcmRUb2tlbkIJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgUQc2hhcmVBc3NldFN1cHBseQUdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQJAQ1pbnZhcmlhbnRDYWxjAgkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQBlAgULbmV3QmFsYW5jZUIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFCGFzc2V0SWRCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnRlYW1Cb3hBZGRyZXNzBRB0ZWFtUmV3YXJkVG9rZW5BBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ50ZWFtQm94QWRkcmVzcwUQdGVhbVJld2FyZFRva2VuQgUIYXNzZXRJZEIFA25pbAMFDHN0YWtlRmFybWluZwQKc3RQYXltZW50cwkAzggCCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAEABQR1bml0CAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNuaWwFA25pbAQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwFA25pbAMJAAACBQJyZQUCcmUEAXMJAPwHBAUOZmFybWluZ0FkZHJlc3MCF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFCGxvY2tUeXBlBQNuaWwFCnN0UGF5bWVudHMDCQAAAgUBcwUBcwUNc2NyaXB0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQUMc2hhcmVBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHdpdGhkcmF3Q2FsYwIBaQx1bmxvY2tBbW91bnQEDSR0MDI0MTcxMjQ1MDYDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkA2AQBBQxzaGFyZUFzc2V0SWQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAlAoCAAAFDHNoYXJlQXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMjQxNzEyNDUwNgJfMQQKcG10QXNzZXRJZAgFDSR0MDI0MTcxMjQ1MDYCXzIDCQEBIQEFEGhhc0Vub3VnaEJhbGFuY2UJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZ1bmxvY2sDCQBmAgUMdW5sb2NrQW1vdW50AAAJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQQUQc2hhcmVBc3NldFN1cHBseQQMYW1vdW50VG9QYXlCCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBNpbnZhcmlhbnRDYWxjdWxhdGVkCQENaW52YXJpYW50Q2FsYwIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBRBzaGFyZUFzc2V0U3VwcGx5BQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxhbW91bnRUb1BheUEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDwFpAQRpbml0AQxmaXJzdEhhcnZlc3QEDSR0MDI2MzYyMjY0MzkJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKcG10QW1vdW50QQgFDSR0MDI2MzYyMjY0MzkCXzEEC3BtdEFzc2V0SWRBCAUNJHQwMjYzNjIyNjQzOQJfMgQNJHQwMjY0NDgyNjUyNQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBApwbXRBbW91bnRCCAUNJHQwMjY0NDgyNjUyNQJfMQQLcG10QXNzZXRJZEIIBQ0kdDAyNjQ0ODI2NTI1Al8yBA0kdDAyNjUzNDI2NjExCQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEEEDnBtdFN0ckFzc2V0SWRBCAUNJHQwMjY1MzQyNjYxMQJfMQQNcG10QXNzZXROYW1lQQgFDSR0MDI2NTM0MjY2MTECXzIEDHBtdERlY2ltYWxzQQgFDSR0MDI2NTM0MjY2MTECXzMEDSR0MDI2NjIwMjY2OTcJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQ0kdDAyNjYyMDI2Njk3Al8xBA1wbXRBc3NldE5hbWVCCAUNJHQwMjY2MjAyNjY5NwJfMgQMcG10RGVjaW1hbHNCCAUNJHQwMjY2MjAyNjY5NwJfMwMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMFB2tBY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAMJAAACBQtwbXRBc3NldElkQQULcG10QXNzZXRJZEIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEEnNoYXJlSW5pdGlhbFN1cHBseQkAawMJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04JAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04JAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04ECnNoYXJlSXNzdWUJAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uBRJzaGFyZUluaXRpYWxTdXBwbHkFDXNoYXJlRGVjaW1hbHMGBAxzaGFyZUlzc3VlSWQJALgIAQUKc2hhcmVJc3N1ZQQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQpwbXRBbW91bnRBBQpwbXRBbW91bnRCBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEIJAMwIAgUOcG10U3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIECWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVyc2lvbgUHdmVyc2lvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRBBQ5wbXRTdHJBc3NldElkQQkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEIFDnBtdFN0ckFzc2V0SWRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rREFwcFRocmVzaG9sZAADCQDMCAIFCnNoYXJlSXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBBQxzaGFyZUlzc3VlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5BRJzaGFyZUluaXRpYWxTdXBwbHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRJzaGFyZUluaXRpYWxTdXBwbHkFDHNoYXJlSXNzdWVJZAUDbmlsAwUMZmlyc3RIYXJ2ZXN0CQDOCAIFCWJhc2VFbnRyeQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa0ZpcnN0SGFydmVzdAUMZmlyc3RIYXJ2ZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQJAGgCBRVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFDHBlcmlvZExlbmd0aAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYcmVwbGVuaXNoV2l0aFR3b1Rva2Vuc1YyAgxzdGFrZUZhcm1pbmcIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQEacmVwbGVuaXNoV2l0aFR3b1Rva2Vuc0NhbGMDBQFpBQxzdGFrZUZhcm1pbmcFCGxvY2tUeXBlAWkBF3JlcGxlbmlzaFdpdGhPbmVUb2tlblYyBBN2aXJ0dWFsU3dhcFRva2VuUGF5E3ZpcnR1YWxTd2FwVG9rZW5HZXQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFBQFpBRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0BQxzdGFrZUZhcm1pbmcFCGxvY2tUeXBlAWkBCndpdGhkcmF3VjIBDHVubG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBDHdpdGhkcmF3Q2FsYwIFAWkFDHVubG9ja0Ftb3VudAFpARB3aXRoZHJhd09uZVRva2VuBAx1bmxvY2tBbW91bnQNd2l0aGRyYXdBc3NldBhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUSbWluQW1vdW50VG9SZWNlaXZlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAQNJHQwMzA3MTEzMTA3MAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCUCgIAAAUMc2hhcmVBc3NldElkBAlwbXRBbW91bnQIBQ0kdDAzMDcxMTMxMDcwAl8xBApwbXRBc3NldElkCAUNJHQwMzA3MTEzMTA3MAJfMgQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAMDCQECIT0CBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBAiE9AgUNd2l0aGRyYXdBc3NldAULc3RyQXNzZXRJZEIHCQACAQIYSW5jb3JyZWN0IHdpdGhkcmF3IGFzc2V0AwkAZwIAAAUOd2l0aGRyYXdBbW91bnQJAAIBAiV3aXRoZHJhdyBhbW91bnQgbXVzdCBiZSBncmF0ZXIgdGhhbiAwAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzAAQGdW5sb2NrAwkAZgIFDHVubG9ja0Ftb3VudAAACQD8BwQFDmZhcm1pbmdBZGRyZXNzAht3aXRoZHJhd1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBAxhbW91bnRUb1BheUEJAGsDBQ53aXRoZHJhd0Ftb3VudAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEDGFtb3VudFRvUGF5QgkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQgUQc2hhcmVBc3NldFN1cHBseQQMbmV3VmlydEJhbGNBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQQMbmV3VmlydEJhbGNCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQFpDG9yaWdpbkNhbGxlcgQWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQMJAAACBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBE2NhbGN1bGF0ZVNlbmRBbW91bnQHBRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFEm1pbkFtb3VudFRvUmVjZWl2ZQUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJAQ1pbnZhcmlhbnRDYWxjAgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJARNjYWxjdWxhdGVTZW5kQW1vdW50BwUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBRJtaW5BbW91bnRUb1JlY2VpdmUFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCCQENaW52YXJpYW50Q2FsYwIFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCBAlnb3ZSZXdhcmQJAGsDBRZhbW91bnRFeGNoYW5nZWRXaXRoRmVlCQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAp0ZWFtUmV3YXJkCQBrAwUWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQkAbgQFB2ZlZVRlYW0FC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFCWZlZVNjYWxlNgQPYW1vdW50RXhjaGFuZ2VkCQBrAwUWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQkAZQIFCWZlZVNjYWxlNgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA0kdDAzMzA2ODMzNDkyAwkAAAIFDXdpdGhkcmF3QXNzZXQFC3N0ckFzc2V0SWRBCQCWCgQJAGQCBQxhbW91bnRUb1BheUEFD2Ftb3VudEV4Y2hhbmdlZAkAZQIJAGUCCQBlAgkAZQIFCGJhbGFuY2VBBQxhbW91bnRUb1BheUEFD2Ftb3VudEV4Y2hhbmdlZAUJZ292UmV3YXJkBQp0ZWFtUmV3YXJkBQhiYWxhbmNlQgUIYXNzZXRJZEIJAJYKBAkAZAIFDGFtb3VudFRvUGF5QgUPYW1vdW50RXhjaGFuZ2VkBQhiYWxhbmNlQQkAZQIJAGUCCQBlAgkAZQIFCGJhbGFuY2VCBQxhbW91bnRUb1BheUIFD2Ftb3VudEV4Y2hhbmdlZAUJZ292UmV3YXJkBQp0ZWFtUmV3YXJkBQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAzMzA2ODMzNDkyAl8xBAtiYWxhbmNlQU5ldwgFDSR0MDMzMDY4MzM0OTICXzIEC2JhbGFuY2VCTmV3CAUNJHQwMzMwNjgzMzQ5MgJfMwQLdmlydEFzc2V0SWQIBQ0kdDAzMzA2ODMzNDkyAl80AwkBASEBCQESY2hlY2tEQXBwVGhyZXNob2xkAwULYmFsYW5jZUFOZXcFC2JhbGFuY2VCTmV3BQt2aXJ0QXNzZXRJZAkBBXRocm93AAQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQtiYWxhbmNlQU5ldwULYmFsYW5jZUJOZXcEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXdpdGhkcmF3QXNzZXQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIJAGQCCQBkAgULYW1vdW50VG9QYXkFCWdvdlJld2FyZAUKdGVhbVJld2FyZAkAzAgCBQ13aXRoZHJhd0Fzc2V0BQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFC2JhbGFuY2VBTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFC2JhbGFuY2VCTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFEHNoYXJlQXNzZXRTdXBwbHkFDndpdGhkcmF3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50BRNpbnZhcmlhbnRDYWxjdWxhdGVkCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2Ftb3VudFRvUGF5CQDZBAEFDXdpdGhkcmF3QXNzZXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQlnb3ZSZXdhcmQJANkEAQUNd2l0aGRyYXdBc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ50ZWFtQm94QWRkcmVzcwUKdGVhbVJld2FyZAkA2QQBBQ13aXRoZHJhd0Fzc2V0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZXhjaGFuZ2UCGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZRJtaW5BbW91bnRUb1JlY2VpdmUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQABA0kdDAzNDk5MzM1MDY4CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFDSR0MDM0OTkzMzUwNjgCXzEECnBtdEFzc2V0SWQIBQ0kdDAzNDk5MzM1MDY4Al8yAwkAZwIAAAUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQACAQkArAICAitFc3RpbWF0ZWQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQCkAwEFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQMJAGYCBRJtaW5BbW91bnRUb1JlY2VpdmUFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQkAAgECL01pbmltYWwgYW1vdW50IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiBlc3RpbWF0ZWQuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQEPdGhyb3dPbmVQYXltZW50AAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwADAwkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCBwkBC3Rocm93QXNzZXRzAAMJAGYCAICt4gQFCXBtdEFtb3VudAkAAgECME9ubHkgc3dhcCBvZiAxMC4wMDAwMDAgb3IgbW9yZSB0b2tlbnMgaXMgYWxsb3dlZAMDCQBmAgUVZXhjaGFuZ2VSYXRpb0xpbWl0TWluCQBrAwUGc2NhbGU4BRJtaW5BbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAYJAGYCCQBrAwUGc2NhbGU4BRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAUVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4CQACAQIcSW5jb3JyZWN0IGFyZ3MgYW5kIHBtdCByYXRpbwQLc2VuZEFzc2V0SWQDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEFCGFzc2V0SWRCBQhhc3NldElkQQQGYW1vdW50CQETY2FsY3VsYXRlU2VuZEFtb3VudAcFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUSbWluQW1vdW50VG9SZWNlaXZlBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFCGJhbGFuY2VBBQhiYWxhbmNlQgUJaW52YXJpYW50BAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFAWkMb3JpZ2luQ2FsbGVyBBBnb3Zlcm5hbmNlUmV3YXJkCQBrAwUGYW1vdW50CQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAp0ZWFtUmV3YXJkCQBrAwUGYW1vdW50CQBuBAUHZmVlVGVhbQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA5hbW91bnRNaW51c0ZlZQkAawMFBmFtb3VudAkAZQIFCWZlZVNjYWxlNgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA0kdDAzNjg4NzM3MjA3AwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQCUCgIJAGQCBQhiYWxhbmNlQQUJcG10QW1vdW50CQBlAgkAZQIJAGUCBQhiYWxhbmNlQgUOYW1vdW50TWludXNGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQJAJQKAgkAZQIJAGUCCQBlAgUIYmFsYW5jZUEFDmFtb3VudE1pbnVzRmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQp0ZWFtUmV3YXJkCQBkAgUIYmFsYW5jZUIFCXBtdEFtb3VudAQLbmV3QmFsYW5jZUEIBQ0kdDAzNjg4NzM3MjA3Al8xBAtuZXdCYWxhbmNlQggFDSR0MDM2ODg3MzcyMDcCXzIDCQEBIQEJARJjaGVja0RBcHBUaHJlc2hvbGQDBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIFCnBtdEFzc2V0SWQJAQV0aHJvdwAEDSR0MDM3MzQxMzc0MTQJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMzczNDEzNzQxNAJfMQQMcG10QXNzZXROYW1lCAUNJHQwMzczNDEzNzQxNAJfMgQLcG10RGVjaW1hbHMIBQ0kdDAzNzM0MTM3NDE0Al8zBA0kdDAzNzQ0MzM3NTIwCQEMZ2V0QXNzZXRJbmZvAQULc2VuZEFzc2V0SWQEDnNlbmRTdHJBc3NldElkCAUNJHQwMzc0NDMzNzUyMAJfMQQNc2VuZEFzc2V0TmFtZQgFDSR0MDM3NDQzMzc1MjACXzIEDHNlbmREZWNpbWFscwgFDSR0MDM3NDQzMzc1MjACXzMEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXBtdFN0ckFzc2V0SWQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCXBtdEFtb3VudAkAzAgCBQ1wbXRTdHJBc3NldElkBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5zZW5kU3RyQXNzZXRJZAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIJAGQCBQ5hbW91bnRNaW51c0ZlZQUQZ292ZXJuYW5jZVJld2FyZAUKdGVhbVJld2FyZAkAzAgCBQ5zZW5kU3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFC25ld0JhbGFuY2VBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFC25ld0JhbGFuY2VCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50CQENaW52YXJpYW50Q2FsYwIFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDmFtb3VudE1pbnVzRmVlBQtzZW5kQXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFEGdvdmVybmFuY2VSZXdhcmQFC3NlbmRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnRlYW1Cb3hBZGRyZXNzBQp0ZWFtUmV3YXJkBQtzZW5kQXNzZXRJZAUDbmlsCQDMCAIFDmFtb3VudE1pbnVzRmVlCQDMCAIFC3NlbmRBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQxyZWlzc3VlU2hhcmUBBmFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQNtc2cJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFBmFtb3VudAYFA25pbAFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFBmFjdGl2ZQkAAgEJAKwCAgIiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrQ2F1c2UCGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkCQEHc3VzcGVuZAECD1BhdXNlZCBieSBhZG1pbgFpAQhhY3RpdmF0ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwBaQEZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBWNsYWltAwMJAAACBQhhc3NldElkQQUEVVNETgYJAAACBQhhc3NldElkQgUEVVNETgkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDGNsYWltUmV3YXJkcwUDbmlsBQNuaWwAAAMJAAACBQVjbGFpbQUFY2xhaW0EDWFtb3VudEVucm9sbEEJAGUCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQhiYWxhbmNlQQQNYW1vdW50RW5yb2xsQgkAZQIFGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFCGJhbGFuY2VCBAxpbnZhcmlhbnROZXcJAQ1pbnZhcmlhbnRDYWxjAgkAZAIFCGJhbGFuY2VBBQ1hbW91bnRFbnJvbGxBCQBkAgUIYmFsYW5jZUIFDWFtb3VudEVucm9sbEIDCQECIT0CCAUBaQZjYWxsZXIFD21vbmV5Qm94QWRkcmVzcwkAAgECKU9ubHkgdGhlIG1vbmV5IGJveCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwMJAGYCAAAFDWFtb3VudEVucm9sbEEGCQBmAgAABQ1hbW91bnRFbnJvbGxCCQEHc3VzcGVuZAECFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAAIFDWFtb3VudEVucm9sbEEAAAkAAAIFDWFtb3VudEVucm9sbEIAAAcJAAIBAhBObyBtb25leSB0byB0YWtlBAZzdGFrZTEDAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAGYCBQ1hbW91bnRFbnJvbGxBAAAHCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQ1hbW91bnRFbnJvbGxBCQDMCAIFC3N0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAGYCBQ1hbW91bnRFbnJvbGxCAAAHCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQ1hbW91bnRFbnJvbGxCCQDMCAIFC3N0ckFzc2V0SWRCBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50BQxpbnZhcmlhbnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZAIFCGJhbGFuY2VBBQ1hbW91bnRFbnJvbGxBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGQCBQhiYWxhbmNlQgUNYW1vdW50RW5yb2xsQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAEKc2hhcmVMaW1pdAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAFpAQxzdGFrZVVuc3Rha2UDBXN0YWtlBmFtb3VudA1hc3NldElkU3RyaW5nAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQItT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uBA0kdDA0MTgwNjQxOTA5CQERY2FsY1N0YWtpbmdQYXJhbXMDBQVzdGFrZQUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDA0MTgwNjQxOTA5Al8xBARhZGRyCAUNJHQwNDE4MDY0MTkwOQJfMgQGcGFyYW1zCAUNJHQwNDE4MDY0MTkwOQJfMwQIcGF5bWVudHMIBQ0kdDA0MTgwNjQxOTA5Al80BANpbnYJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBGnJlcGxlbmlzaFdpdGhUd29Ub2tlbnNDYWxjAwUBaQcAAAFpARVyZXBsZW5pc2hXaXRoT25lVG9rZW4CE3ZpcnR1YWxTd2FwVG9rZW5QYXkTdmlydHVhbFN3YXBUb2tlbkdldAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBDGlzRGVwcmljYXRlZAAJARlyZXBsZW5pc2hXaXRoT25lVG9rZW5DYWxjBQUBaQUTdmlydHVhbFN3YXBUb2tlblBheQUTdmlydHVhbFN3YXBUb2tlbkdldAcAAAFpAQh3aXRoZHJhdwAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQx3aXRoZHJhd0NhbGMCBQFpAAABAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAggFA2ludgRkQXBwBQR0aGlzCQAAAggFA2ludghmdW5jdGlvbgIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEDXNpZ25lZEJ5QWRtaW4DAwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFEWFkbWluUHViS2V5SW52b2tlAwMFE2NhbGxUYWtlSW50b0FjY291bnQFDXNpZ25lZEJ5QWRtaW4HBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluc4+qVBU=", "height": 2494096, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5PPzq43jcyeDiVERV2Ndz1HhSeCfGHiQwSpdXNeroJxW Next: none Diff:
Old | New | Differences | |
---|---|---|---|
65 | 65 | ||
66 | 66 | let F = "money_box_address" | |
67 | 67 | ||
68 | - | let G = " | |
68 | + | let G = "team_box_address" | |
69 | 69 | ||
70 | - | let H = " | |
70 | + | let H = "governance_address" | |
71 | 71 | ||
72 | - | let I = " | |
72 | + | let I = "farming_address" | |
73 | 73 | ||
74 | - | let J = " | |
74 | + | let J = "voting_address" | |
75 | 75 | ||
76 | - | let K = " | |
76 | + | let K = "usdn_asset_id" | |
77 | 77 | ||
78 | - | let L = | |
78 | + | let L = "staking_assets" | |
79 | 79 | ||
80 | - | func M (N) = { | |
81 | - | let O = getString(L, N) | |
82 | - | if ($isInstanceOf(O, "String")) | |
80 | + | let M = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz') | |
81 | + | ||
82 | + | func N (O) = { | |
83 | + | let P = getString(M, O) | |
84 | + | if ($isInstanceOf(P, "String")) | |
83 | 85 | then { | |
84 | - | let | |
85 | - | fromBase58String( | |
86 | + | let Q = P | |
87 | + | fromBase58String(Q) | |
86 | 88 | } | |
87 | 89 | else { | |
88 | - | let | |
89 | - | throw(( | |
90 | + | let R = P | |
91 | + | throw((O + "is empty")) | |
90 | 92 | } | |
91 | 93 | } | |
92 | 94 | ||
93 | 95 | ||
94 | - | let | |
96 | + | let S = N(B) | |
95 | 97 | ||
96 | - | let | |
98 | + | let T = N(C) | |
97 | 99 | ||
98 | - | let | |
100 | + | let U = N(D) | |
99 | 101 | ||
100 | - | let | |
102 | + | let V = N(E) | |
101 | 103 | ||
102 | - | let | |
104 | + | let W = Address(N(F)) | |
103 | 105 | ||
104 | - | let | |
106 | + | let X = Address(N(G)) | |
105 | 107 | ||
106 | - | let | |
108 | + | let Y = Address(N(H)) | |
107 | 109 | ||
108 | - | let | |
110 | + | let Z = Address(N(o)) | |
109 | 111 | ||
110 | - | let | |
112 | + | let aa = Address(N(J)) | |
111 | 113 | ||
112 | - | let | |
114 | + | let ab = Address(N(I)) | |
113 | 115 | ||
114 | - | let | |
116 | + | let ac = N(K) | |
115 | 117 | ||
116 | - | let | |
118 | + | let ad = getStringValue(M, L) | |
117 | 119 | ||
118 | - | let | |
120 | + | let ae = valueOrErrorMessage(getInteger(aa, x), "Empty kBasePeriod") | |
119 | 121 | ||
120 | - | let | |
122 | + | let af = valueOrErrorMessage(getInteger(aa, z), "Empty kStartHeight") | |
121 | 123 | ||
122 | - | let | |
124 | + | let ag = valueOrErrorMessage(getInteger(aa, y), "Empty kPeriodLength") | |
123 | 125 | ||
124 | - | let | |
126 | + | let ah = ((ae + ((height - af) / ag)) + 3) | |
125 | 127 | ||
126 | - | let | |
128 | + | let ai = getBooleanValue(this, c) | |
127 | 129 | ||
128 | - | let | |
130 | + | let aj = valueOrElse(getBoolean(M, d), true) | |
129 | 131 | ||
130 | - | let | |
132 | + | let ak = valueOrElse(getBoolean(M, (e + toString(this))), false) | |
131 | 133 | ||
132 | - | let | |
134 | + | let al = getStringValue(this, f) | |
133 | 135 | ||
134 | - | let al = if ((aj == "WAVES")) | |
136 | + | let am = getStringValue(this, g) | |
137 | + | ||
138 | + | let an = if ((al == "WAVES")) | |
135 | 139 | then unit | |
136 | - | else fromBase58String( | |
140 | + | else fromBase58String(al) | |
137 | 141 | ||
138 | - | let | |
142 | + | let ao = if ((am == "WAVES")) | |
139 | 143 | then unit | |
140 | - | else fromBase58String( | |
144 | + | else fromBase58String(am) | |
141 | 145 | ||
142 | - | let | |
143 | - | let | |
144 | - | if ($isInstanceOf( | |
146 | + | let ap = { | |
147 | + | let P = an | |
148 | + | if ($isInstanceOf(P, "ByteVector")) | |
145 | 149 | then { | |
146 | - | let | |
147 | - | value(assetInfo( | |
150 | + | let aq = P | |
151 | + | value(assetInfo(aq)).name | |
148 | 152 | } | |
149 | - | else if ($isInstanceOf( | |
153 | + | else if ($isInstanceOf(P, "Unit")) | |
150 | 154 | then { | |
151 | - | let | |
155 | + | let ar = P | |
152 | 156 | "WAVES" | |
153 | 157 | } | |
154 | 158 | else throw("Match error") | |
155 | 159 | } | |
156 | 160 | ||
157 | - | let | |
158 | - | let | |
159 | - | if ($isInstanceOf( | |
161 | + | let as = { | |
162 | + | let P = ao | |
163 | + | if ($isInstanceOf(P, "ByteVector")) | |
160 | 164 | then { | |
161 | - | let | |
162 | - | value(assetInfo( | |
165 | + | let aq = P | |
166 | + | value(assetInfo(aq)).name | |
163 | 167 | } | |
164 | - | else if ($isInstanceOf( | |
168 | + | else if ($isInstanceOf(P, "Unit")) | |
165 | 169 | then { | |
166 | - | let | |
170 | + | let ar = P | |
167 | 171 | "WAVES" | |
168 | 172 | } | |
169 | 173 | else throw("Match error") | |
170 | 174 | } | |
171 | 175 | ||
172 | - | let | |
176 | + | let at = getIntegerValue(this, h) | |
173 | 177 | ||
174 | - | let | |
178 | + | let au = getIntegerValue(this, i) | |
175 | 179 | ||
176 | - | let | |
180 | + | let av = fromBase58String(getStringValue(this, j)) | |
177 | 181 | ||
178 | - | let | |
182 | + | let aw = getIntegerValue(this, k) | |
179 | 183 | ||
180 | - | let | |
184 | + | let ax = getIntegerValue(this, m) | |
181 | 185 | ||
182 | - | let | |
186 | + | let ay = getIntegerValue(this, l) | |
183 | 187 | ||
184 | - | let | |
188 | + | let az = fraction(ay, 35, 100) | |
185 | 189 | ||
186 | - | let | |
190 | + | let aA = fraction(ay, 10, 100) | |
187 | 191 | ||
188 | - | let | |
192 | + | let aB = 1000000 | |
189 | 193 | ||
190 | - | let | |
194 | + | let aC = 1000 | |
191 | 195 | ||
192 | - | let | |
196 | + | let aD = 100000000 | |
193 | 197 | ||
194 | - | let | |
198 | + | let aE = 10000000000000000 | |
195 | 199 | ||
196 | - | let | |
200 | + | let aF = 8 | |
197 | 201 | ||
198 | - | let | |
202 | + | let aG = 60000000 | |
199 | 203 | ||
200 | - | let | |
204 | + | let aH = 140000000 | |
201 | 205 | ||
202 | - | let | |
206 | + | let aI = 50 | |
203 | 207 | ||
204 | - | let | |
208 | + | let aJ = 2 | |
205 | 209 | ||
206 | - | func aI (aJ) = { | |
207 | - | let O = aJ | |
208 | - | if ($isInstanceOf(O, "ByteVector")) | |
210 | + | let aK = 4600000000000000 | |
211 | + | ||
212 | + | func aL (aM) = { | |
213 | + | let P = aM | |
214 | + | if ($isInstanceOf(P, "ByteVector")) | |
209 | 215 | then { | |
210 | - | let | |
211 | - | assetBalance(this, | |
216 | + | let aq = P | |
217 | + | assetBalance(this, aq) | |
212 | 218 | } | |
213 | - | else if ($isInstanceOf( | |
219 | + | else if ($isInstanceOf(P, "Unit")) | |
214 | 220 | then { | |
215 | - | let | |
221 | + | let ar = P | |
216 | 222 | wavesBalance(this).available | |
217 | 223 | } | |
218 | 224 | else throw("Match error") | |
219 | 225 | } | |
220 | 226 | ||
221 | 227 | ||
222 | - | func | |
223 | - | let | |
224 | - | let | |
225 | - | if ($isInstanceOf( | |
228 | + | func aN (aM) = { | |
229 | + | let aO = { | |
230 | + | let P = aM | |
231 | + | if ($isInstanceOf(P, "ByteVector")) | |
226 | 232 | then { | |
227 | - | let | |
228 | - | if (( | |
229 | - | then getInteger( | |
233 | + | let aP = P | |
234 | + | if ((aP == ac)) | |
235 | + | then getInteger(Z, ((("rpd_balance_" + toBase58String(aP)) + "_") + toString(this))) | |
230 | 236 | else 0 | |
231 | 237 | } | |
232 | - | else if ($isInstanceOf( | |
238 | + | else if ($isInstanceOf(P, "Unit")) | |
233 | 239 | then 0 | |
234 | 240 | else throw("Match error") | |
235 | 241 | } | |
236 | - | let | |
237 | - | if ($isInstanceOf( | |
242 | + | let P = aO | |
243 | + | if ($isInstanceOf(P, "Int")) | |
238 | 244 | then { | |
239 | - | let | |
240 | - | | |
245 | + | let aQ = P | |
246 | + | aQ | |
241 | 247 | } | |
242 | 248 | else 0 | |
243 | 249 | } | |
244 | 250 | ||
245 | 251 | ||
246 | - | let | |
252 | + | let aR = aN(an) | |
247 | 253 | ||
248 | - | let | |
254 | + | let aS = aN(ao) | |
249 | 255 | ||
250 | - | let | |
256 | + | let aT = (at - aR) | |
251 | 257 | ||
252 | - | let | |
258 | + | let aU = (au - aS) | |
253 | 259 | ||
254 | - | let | |
260 | + | let aV = (aL(an) + aR) | |
255 | 261 | ||
256 | - | let | |
262 | + | let aW = (aL(ao) + aS) | |
257 | 263 | ||
258 | - | let | |
259 | - | then ( | |
264 | + | let aX = if ((aV >= at)) | |
265 | + | then (aW >= au) | |
260 | 266 | else false | |
261 | 267 | ||
262 | - | func | |
268 | + | func aY (aZ,ba) = ((fraction(aE, aZ, ba) + fraction(aE, ba, aZ)) / 2) | |
263 | 269 | ||
264 | 270 | ||
265 | - | func | |
266 | - | let | |
267 | - | (fraction(( | |
271 | + | func bb (aZ,ba) = { | |
272 | + | let bc = aY(aZ, ba) | |
273 | + | (fraction((aZ + ba), aE, pow(bc, aF, aI, aJ, aF, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aZ), toBigInt(ba), toBigInt(aD)), 0, toBigInt(5), 1, (aF / 2), DOWN)), pow((bc - aK), aF, aI, aJ, aF, DOWN), aD))) | |
268 | 274 | } | |
269 | 275 | ||
270 | 276 | ||
271 | - | func | |
272 | - | let | |
273 | - | let | |
274 | - | let | |
275 | - | let | |
276 | - | func | |
277 | + | func bd (be,bf,bg,bh,bi,bj,bk) = { | |
278 | + | let bl = (aE - ((aE * 1) / 10000000)) | |
279 | + | let bm = (be - bf) | |
280 | + | let aZ = (bi + bg) | |
281 | + | let ba = (bj + bg) | |
282 | + | func bn (bo,bp) = if ((bo._1 == -1)) | |
277 | 283 | then { | |
278 | - | let | |
279 | - | let | |
280 | - | then | |
281 | - | else | |
282 | - | if (( | |
283 | - | then $Tuple2( | |
284 | + | let bq = (be - (((bp * bm) / 3) / aC)) | |
285 | + | let br = if ((bh == an)) | |
286 | + | then bb(aZ, (bj - bq)) | |
287 | + | else bb((bi - bq), ba) | |
288 | + | if ((br > bk)) | |
289 | + | then $Tuple2(bq, br) | |
284 | 290 | else $Tuple2(-1, 0) | |
285 | 291 | } | |
286 | - | else | |
292 | + | else bo | |
287 | 293 | ||
288 | - | let | |
289 | - | if ((0 > | |
294 | + | let bs = bn($Tuple2(-1, 0), 3000) | |
295 | + | if ((0 > bs._1)) | |
290 | 296 | then throw("Price is worse than minReceived") | |
291 | 297 | else { | |
292 | - | let | |
293 | - | then | |
294 | - | else if (( | |
295 | - | then | |
298 | + | let bt = if ((bh == an)) | |
299 | + | then bb(aZ, (bj - be)) | |
300 | + | else if ((bh == ao)) | |
301 | + | then bb((bi - be), ba) | |
296 | 302 | else throw("Wrong asset in payment") | |
297 | - | if (( | |
298 | - | then if (( | |
303 | + | if ((bk > bt)) | |
304 | + | then if ((bl >= fraction(aE, bk, bt))) | |
299 | 305 | then throw("The requested price is too not profitable for user") | |
300 | 306 | else { | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | func | |
306 | - | then | |
307 | - | else | |
307 | + | let bu = { | |
308 | + | let bv = [25, 200, 500] | |
309 | + | let bw = size(bv) | |
310 | + | let bx = $Tuple2(-1, 0) | |
311 | + | func by (bz,bA) = if ((bA >= bw)) | |
312 | + | then bz | |
313 | + | else bn(bz, bv[bA]) | |
308 | 314 | ||
309 | - | func | |
310 | - | then | |
315 | + | func bB (bz,bA) = if ((bA >= bw)) | |
316 | + | then bz | |
311 | 317 | else throw("List size exceeds 3") | |
312 | 318 | ||
313 | - | by( | |
319 | + | bB(by(by(by(bx, 0), 1), 2), 3) | |
314 | 320 | } | |
315 | - | if ((0 > | |
316 | - | then | |
317 | - | else | |
321 | + | if ((0 > bu._1)) | |
322 | + | then bs._1 | |
323 | + | else bu._1 | |
318 | 324 | } | |
319 | 325 | else { | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | func | |
325 | - | then | |
326 | - | else | |
326 | + | let bu = { | |
327 | + | let bv = [-500, -200, -25] | |
328 | + | let bw = size(bv) | |
329 | + | let bx = $Tuple2(-1, 0) | |
330 | + | func by (bz,bA) = if ((bA >= bw)) | |
331 | + | then bz | |
332 | + | else bn(bz, bv[bA]) | |
327 | 333 | ||
328 | - | func | |
329 | - | then | |
334 | + | func bB (bz,bA) = if ((bA >= bw)) | |
335 | + | then bz | |
330 | 336 | else throw("List size exceeds 3") | |
331 | 337 | ||
332 | - | by( | |
338 | + | bB(by(by(by(bx, 0), 1), 2), 3) | |
333 | 339 | } | |
334 | - | let | |
335 | - | then $Tuple2( | |
336 | - | else | |
337 | - | if (( | |
340 | + | let bC = if ((0 > bu._1)) | |
341 | + | then $Tuple2(be, bt) | |
342 | + | else bu | |
343 | + | if ((bl >= fraction(aE, bk, bC._2))) | |
338 | 344 | then throw("The requested price is too not profitable for user") | |
339 | - | else | |
345 | + | else bC._1 | |
340 | 346 | } | |
341 | 347 | } | |
342 | 348 | } | |
343 | 349 | ||
344 | 350 | ||
345 | - | func | |
346 | - | let | |
347 | - | if ($isInstanceOf( | |
351 | + | func bD (aM) = { | |
352 | + | let P = aM | |
353 | + | if ($isInstanceOf(P, "ByteVector")) | |
348 | 354 | then { | |
349 | - | let | |
350 | - | let | |
351 | - | let | |
352 | - | $Tuple3( | |
355 | + | let aq = P | |
356 | + | let bE = toBase58String(aq) | |
357 | + | let bF = valueOrErrorMessage(assetInfo(aq), (("Asset " + bE) + " doesn't exist")) | |
358 | + | $Tuple3(bE, bF.name, bF.decimals) | |
353 | 359 | } | |
354 | - | else if ($isInstanceOf( | |
360 | + | else if ($isInstanceOf(P, "Unit")) | |
355 | 361 | then { | |
356 | - | let | |
362 | + | let ar = P | |
357 | 363 | $Tuple3("WAVES", "WAVES", 8) | |
358 | 364 | } | |
359 | 365 | else throw("Match error") | |
360 | 366 | } | |
361 | 367 | ||
362 | 368 | ||
363 | - | func | |
369 | + | func bG (bH) = [BooleanEntry(c, false), StringEntry(n, bH)] | |
364 | 370 | ||
365 | 371 | ||
366 | - | func | |
372 | + | func bI () = throw("DApp is already active") | |
367 | 373 | ||
368 | 374 | ||
369 | - | func | |
370 | - | then | |
375 | + | func bJ () = if (if (ai) | |
376 | + | then aj | |
371 | 377 | else false) | |
372 | 378 | then unit | |
373 | 379 | else throw("DApp is inactive at this moment") | |
374 | 380 | ||
375 | 381 | ||
376 | - | func | |
382 | + | func bK () = if (!(ak)) | |
377 | 383 | then unit | |
378 | 384 | else throw("Pool is deprecated. Only withdraw action allowed.") | |
379 | 385 | ||
380 | 386 | ||
381 | - | func | |
387 | + | func bL (aQ) = if (containsElement([S, T, U], aQ.callerPublicKey)) | |
382 | 388 | then unit | |
383 | 389 | else throw("Only admin can call this function") | |
384 | 390 | ||
385 | 391 | ||
386 | - | func | |
392 | + | func bM (aQ) = if ((this == aQ.caller)) | |
387 | 393 | then unit | |
388 | 394 | else throw("Only contract itself can call this function") | |
389 | 395 | ||
390 | 396 | ||
391 | - | func | |
397 | + | func bN () = throw(((("Incorrect assets attached. Expected: " + al) + " and ") + am)) | |
392 | 398 | ||
393 | 399 | ||
394 | - | func | |
400 | + | func bO () = throw("One attached payment expected") | |
395 | 401 | ||
396 | 402 | ||
397 | - | func | |
403 | + | func bP () = bG(((((((((((((((("Suspicious state. Actual balances: " + toString(at)) + " ") + ap) + ", ") + toString(au)) + " ") + as) + ". State: ") + toString(aL(an))) + " ") + ap) + ", ") + toString(aL(ao))) + " ") + as)) | |
398 | 404 | ||
399 | 405 | ||
400 | - | func | |
401 | - | then $Tuple2("lockNeutrino", | |
402 | - | else $Tuple2("unlockNeutrino", | |
406 | + | func bQ (bR,aM) = if (bR) | |
407 | + | then $Tuple2("lockNeutrino", Z) | |
408 | + | else $Tuple2("unlockNeutrino", Z) | |
403 | 409 | ||
404 | 410 | ||
405 | - | func | |
411 | + | func bS (bR,bT,aM) = if (bR) | |
406 | 412 | then { | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | $Tuple4( | |
413 | + | let bU = bQ(bR, aM) | |
414 | + | let bV = bU._1 | |
415 | + | let bW = bU._2 | |
416 | + | $Tuple4(bV, bW, nil, [AttachedPayment(aM, bT)]) | |
411 | 417 | } | |
412 | 418 | else { | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
416 | - | $Tuple4( | |
419 | + | let bX = bQ(bR, aM) | |
420 | + | let bV = bX._1 | |
421 | + | let bW = bX._2 | |
422 | + | $Tuple4(bV, bW, [bT, toBase58String(aM)], nil) | |
417 | 423 | } | |
418 | 424 | ||
419 | 425 | ||
420 | - | func | |
421 | - | let | |
422 | - | let | |
423 | - | let | |
424 | - | let | |
425 | - | if (if (( | |
426 | - | then (parseIntValue( | |
426 | + | func bY (bZ) = { | |
427 | + | let ca = valueOrElse(getInteger(Y, (toString(bZ) + s)), 0) | |
428 | + | let cb = valueOrElse(getInteger(Y, (toString(bZ) + t)), ca) | |
429 | + | let cc = split(getStringValue(M, r), ",") | |
430 | + | let cd = split(getStringValue(M, q), ",") | |
431 | + | if (if ((cb >= parseIntValue(cc[0]))) | |
432 | + | then (parseIntValue(cc[1]) > cb) | |
427 | 433 | else false) | |
428 | - | then ( | |
429 | - | else if (if (( | |
430 | - | then (parseIntValue( | |
434 | + | then (aB - parseIntValue(cd[0])) | |
435 | + | else if (if ((cb >= parseIntValue(cc[1]))) | |
436 | + | then (parseIntValue(cc[2]) > cb) | |
431 | 437 | else false) | |
432 | - | then ( | |
433 | - | else if (if (( | |
434 | - | then (parseIntValue( | |
438 | + | then (aB - parseIntValue(cd[1])) | |
439 | + | else if (if ((cb >= parseIntValue(cc[2]))) | |
440 | + | then (parseIntValue(cc[3]) > cb) | |
435 | 441 | else false) | |
436 | - | then ( | |
437 | - | else if (if (( | |
438 | - | then (parseIntValue( | |
442 | + | then (aB - parseIntValue(cd[2])) | |
443 | + | else if (if ((cb >= parseIntValue(cc[3]))) | |
444 | + | then (parseIntValue(cc[4]) > cb) | |
439 | 445 | else false) | |
440 | - | then ( | |
441 | - | else if (( | |
442 | - | then ( | |
443 | - | else | |
446 | + | then (aB - parseIntValue(cd[3])) | |
447 | + | else if ((cb >= parseIntValue(cc[4]))) | |
448 | + | then (aB - parseIntValue(cd[4])) | |
449 | + | else aB | |
444 | 450 | } | |
445 | 451 | ||
446 | 452 | ||
447 | - | func | |
448 | - | let | |
449 | - | let | |
450 | - | then ( | |
453 | + | func ce (cf,cg,ch) = { | |
454 | + | let ci = getIntegerValue(this, A) | |
455 | + | let cj = if (if ((ch == an)) | |
456 | + | then (cf > cg) | |
451 | 457 | else false) | |
452 | - | then fraction( | |
453 | - | else if (if (( | |
454 | - | then ( | |
458 | + | then fraction(cf, 1, cg, CEILING) | |
459 | + | else if (if ((ch == ao)) | |
460 | + | then (cg > cf) | |
455 | 461 | else false) | |
456 | - | then fraction( | |
462 | + | then fraction(cg, 1, cf, CEILING) | |
457 | 463 | else 0 | |
458 | - | if (( | |
464 | + | if ((cj > ci)) | |
459 | 465 | then { | |
460 | - | let | |
461 | - | then $Tuple2( | |
462 | - | else $Tuple2( | |
463 | - | let | |
464 | - | let | |
465 | - | throw((((("Buying " + | |
466 | + | let ck = if ((ch == an)) | |
467 | + | then $Tuple2(as, ap) | |
468 | + | else $Tuple2(ap, as) | |
469 | + | let cl = ck._1 | |
470 | + | let cm = ck._2 | |
471 | + | throw((((("Buying " + cl) + " is temporarily unavailable due to the ") + cm) + " depeg")) | |
466 | 472 | } | |
467 | 473 | else true | |
468 | 474 | } | |
469 | 475 | ||
470 | 476 | ||
471 | - | func | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
477 | + | func cn (aQ,co,cp) = { | |
478 | + | let cq = aQ.payments[0].assetId | |
479 | + | let cr = aQ.payments[1].assetId | |
480 | + | let cs = fraction(aD, aQ.payments[0].amount, at) | |
481 | + | let ct = fraction(aD, aQ.payments[1].amount, au) | |
482 | + | let cu = bD(cq) | |
483 | + | let cv = cu._1 | |
484 | + | let cw = cu._2 | |
485 | + | let cx = cu._3 | |
486 | + | let cy = bD(cr) | |
487 | + | let cz = cy._1 | |
488 | + | let cA = cy._2 | |
489 | + | let cB = cy._3 | |
490 | + | let cC = if ((ct > cs)) | |
485 | 491 | then { | |
486 | - | let | |
487 | - | $Tuple5( | |
492 | + | let cD = fraction(au, cs, aD, CEILING) | |
493 | + | $Tuple5(aQ.payments[0].amount, cD, (aQ.payments[1].amount - cD), cr, cs) | |
488 | 494 | } | |
489 | 495 | else { | |
490 | - | let | |
491 | - | $Tuple5( | |
496 | + | let cD = fraction(at, ct, aD, CEILING) | |
497 | + | $Tuple5(cD, aQ.payments[1].amount, (aQ.payments[0].amount - cD), cq, ct) | |
492 | 498 | } | |
493 | - | let | |
494 | - | let | |
495 | - | let | |
496 | - | let | |
497 | - | let | |
498 | - | let | |
499 | - | if (if ((size( | |
500 | - | then (size( | |
499 | + | let cE = cC._1 | |
500 | + | let cF = cC._2 | |
501 | + | let cG = cC._3 | |
502 | + | let cH = cC._4 | |
503 | + | let cI = cC._5 | |
504 | + | let cJ = fraction(cI, aw, aD) | |
505 | + | if (if ((size(aQ.payments) != 2)) | |
506 | + | then (size(aQ.payments) != 3) | |
501 | 507 | else false) | |
502 | 508 | then throw("Two or three payments expected") | |
503 | - | else if (if (( | |
509 | + | else if (if ((cq != an)) | |
504 | 510 | then true | |
505 | - | else ( | |
506 | - | then | |
507 | - | else if (( | |
511 | + | else (cr != ao)) | |
512 | + | then bN() | |
513 | + | else if ((cJ == 0)) | |
508 | 514 | then throw("Too small amount to replenish") | |
509 | - | else if ((0 > | |
515 | + | else if ((0 > cG)) | |
510 | 516 | then throw("Change < 0") | |
511 | - | else if (!( | |
512 | - | then ([ScriptTransfer( | |
517 | + | else if (!(aX)) | |
518 | + | then ([ScriptTransfer(aQ.caller, cE, cq), ScriptTransfer(aQ.caller, cF, cr)] ++ bP()) | |
513 | 519 | else { | |
514 | - | let | |
515 | - | then invoke(this, "stakeUnstake", [true, | |
520 | + | let cK = if (contains(ad, cv)) | |
521 | + | then invoke(this, "stakeUnstake", [true, cE, cv], nil) | |
516 | 522 | else 0 | |
517 | - | if (( | |
523 | + | if ((cK == cK)) | |
518 | 524 | then { | |
519 | - | let | |
520 | - | then invoke(this, "stakeUnstake", [true, | |
525 | + | let cL = if (contains(ad, cz)) | |
526 | + | then invoke(this, "stakeUnstake", [true, cF, cz], nil) | |
521 | 527 | else 0 | |
522 | - | if (( | |
528 | + | if ((cL == cL)) | |
523 | 529 | then { | |
524 | - | let | |
525 | - | if ( | |
530 | + | let cM = [IntegerEntry(h, (at + cE)), IntegerEntry(i, (au + cF)), IntegerEntry(k, (aw + cJ)), IntegerEntry(m, bb((at + cE), (au + cF))), ScriptTransfer(aQ.caller, cG, cH)] | |
531 | + | if (co) | |
526 | 532 | then { | |
527 | - | let | |
528 | - | then [AttachedPayment(if (( | |
533 | + | let cN = ([AttachedPayment(av, cJ)] ++ (if ((size(aQ.payments) == 3)) | |
534 | + | then [AttachedPayment(if ((aQ.payments[2].assetId == base58'')) | |
529 | 535 | then unit | |
530 | - | else | |
536 | + | else aQ.payments[2].assetId, aQ.payments[2].amount)] | |
531 | 537 | else nil)) | |
532 | - | let | |
533 | - | if (( | |
538 | + | let cO = invoke(this, "reissueShare", [cJ], nil) | |
539 | + | if ((cO == cO)) | |
534 | 540 | then { | |
535 | - | let | |
536 | - | if (( | |
537 | - | then | |
541 | + | let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN) | |
542 | + | if ((cP == cP)) | |
543 | + | then cM | |
538 | 544 | else throw("Strict value is not equal to itself.") | |
539 | 545 | } | |
540 | 546 | else throw("Strict value is not equal to itself.") | |
541 | 547 | } | |
542 | - | else ( | |
548 | + | else (cM ++ [Reissue(av, cJ, true), ScriptTransfer(aQ.caller, cJ, av)]) | |
543 | 549 | } | |
544 | 550 | else throw("Strict value is not equal to itself.") | |
545 | 551 | } | |
548 | 554 | } | |
549 | 555 | ||
550 | 556 | ||
551 | - | func | |
552 | - | let | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | let | |
557 | + | func cQ (aQ,cR,cS,co,cp) = { | |
558 | + | let cT = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
559 | + | let cU = cT._1 | |
560 | + | let ch = cT._2 | |
561 | + | let cV = bD(ch) | |
562 | + | let cW = cV._1 | |
563 | + | let cX = cV._2 | |
564 | + | let cY = cV._3 | |
565 | + | let cZ = 5000000 | |
566 | + | let da = 50000000 | |
567 | + | let db = if ((da > cU)) | |
562 | 568 | then 100000 | |
563 | 569 | else 1 | |
564 | - | let | |
565 | - | let | |
566 | - | let | |
567 | - | if (( | |
568 | - | then throw((((("Payment amount " + toString( | |
569 | - | else if (if ((size( | |
570 | - | then (size( | |
570 | + | let dc = (aD - ((aD * db) / 10000000)) | |
571 | + | let dd = (aD + ((aD * db) / 10000000)) | |
572 | + | let de = (aD - ((aD * 1) / 10000000)) | |
573 | + | if ((cZ > cU)) | |
574 | + | then throw((((("Payment amount " + toString(cU)) + " does not exceed the minimum amount of ") + toString(cZ)) + " tokens")) | |
575 | + | else if (if ((size(aQ.payments) != 1)) | |
576 | + | then (size(aQ.payments) != 2) | |
571 | 577 | else false) | |
572 | 578 | then throw("One or two payments expected") | |
573 | - | else if (!( | |
574 | - | then ([ScriptTransfer( | |
575 | - | else if (if (( | |
576 | - | then ( | |
579 | + | else if (!(aX)) | |
580 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
581 | + | else if (if ((ch != an)) | |
582 | + | then (ch != ao) | |
577 | 583 | else false) | |
578 | - | then | |
584 | + | then bN() | |
579 | 585 | else { | |
580 | - | let | |
581 | - | then $Tuple6(( | |
582 | - | else $Tuple6( | |
583 | - | let | |
584 | - | let | |
585 | - | let | |
586 | - | let | |
587 | - | let | |
588 | - | let | |
589 | - | let | |
590 | - | let | |
591 | - | if (if (( | |
586 | + | let df = if ((ch == an)) | |
587 | + | then $Tuple6((cU - cR), cS, (at + cR), (au - cS), (at + cU), au) | |
588 | + | else $Tuple6(cS, (cU - cR), (at - cS), (au + cR), at, (au + cU)) | |
589 | + | let dg = df._1 | |
590 | + | let dh = df._2 | |
591 | + | let di = df._3 | |
592 | + | let dj = df._4 | |
593 | + | let cf = df._5 | |
594 | + | let cg = df._6 | |
595 | + | let dk = bb(di, dj) | |
596 | + | let dl = (fraction(aE, di, dj) / fraction(aD, dg, dh)) | |
597 | + | if (if ((de >= fraction(aD, ax, dk))) | |
592 | 598 | then true | |
593 | - | else ( | |
599 | + | else (ax > dk)) | |
594 | 600 | then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
595 | - | else if (if (( | |
601 | + | else if (if ((dc > dl)) | |
596 | 602 | then true | |
597 | - | else ( | |
603 | + | else (dl > dd)) | |
598 | 604 | then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect") | |
599 | - | else if (!( | |
605 | + | else if (!(ce(cf, cg, ch))) | |
600 | 606 | then throw() | |
601 | 607 | else { | |
602 | - | let cp = fraction(dd, aA, df) | |
603 | - | let cq = fraction(de, aA, dg) | |
604 | - | let cG = fraction(min([cp, cq]), au, aA) | |
605 | - | let dj = fraction(cG, (ay - (aw / 2)), ay) | |
606 | - | let dk = fraction(cG, (ax / 2), ay) | |
607 | - | let dl = fraction(dk, ar, au) | |
608 | - | let dm = fraction(dk, as, au) | |
609 | - | let dn = if ((cT == aj)) | |
610 | - | then $Tuple3((cR - dl), dm, ak) | |
611 | - | else $Tuple3((cR - dm), dl, aj) | |
612 | - | let do = dn._1 | |
613 | - | let dp = dn._2 | |
614 | - | let dq = dn._3 | |
615 | - | let cH = if (contains(ab, cT)) | |
616 | - | then invoke(this, "stakeUnstake", [true, do, cT], nil) | |
608 | + | let cs = fraction(dg, aD, di) | |
609 | + | let ct = fraction(dh, aD, dj) | |
610 | + | let cJ = fraction(min([cs, ct]), aw, aD) | |
611 | + | let dm = fraction(cJ, (aB - (ay / 2)), aB) | |
612 | + | let dn = fraction(cJ, (az / 2), aB) | |
613 | + | let do = fraction(cJ, (aA / 2), aB) | |
614 | + | let dp = fraction(dn, at, aw) | |
615 | + | let dq = fraction(dn, au, aw) | |
616 | + | let dr = fraction(do, at, aw) | |
617 | + | let ds = fraction(do, au, aw) | |
618 | + | let dt = if ((cW == al)) | |
619 | + | then $Tuple3(((cU - dp) - dr), (dq + ds), am) | |
620 | + | else $Tuple3(((cU - dq) - ds), (dp + dr), al) | |
621 | + | let du = dt._1 | |
622 | + | let dv = dt._2 | |
623 | + | let dw = dt._3 | |
624 | + | let cK = if (contains(ad, cW)) | |
625 | + | then invoke(this, "stakeUnstake", [true, du, cW], nil) | |
617 | 626 | else 0 | |
618 | - | if (( | |
627 | + | if ((cK == cK)) | |
619 | 628 | then { | |
620 | - | let | |
621 | - | then invoke(this, "stakeUnstake", [false, | |
629 | + | let cL = if (contains(ad, dw)) | |
630 | + | then invoke(this, "stakeUnstake", [false, dv, dw], nil) | |
622 | 631 | else 0 | |
623 | - | if (( | |
632 | + | if ((cL == cL)) | |
624 | 633 | then { | |
625 | - | let | |
626 | - | if ( | |
634 | + | let cM = [IntegerEntry(h, ((cf - dp) - dr)), IntegerEntry(i, ((cg - dq) - ds)), IntegerEntry(k, (aw + dm)), IntegerEntry(m, bb((cf - dp), (cg - dq))), ScriptTransfer(W, dp, an), ScriptTransfer(W, dq, ao), ScriptTransfer(X, dr, an), ScriptTransfer(X, ds, ao)] | |
635 | + | if (co) | |
627 | 636 | then { | |
628 | - | let | |
629 | - | then [AttachedPayment(if (( | |
637 | + | let cN = ([AttachedPayment(av, dm)] ++ (if ((size(aQ.payments) == 2)) | |
638 | + | then [AttachedPayment(if ((aQ.payments[1].assetId == base58'')) | |
630 | 639 | then unit | |
631 | - | else | |
640 | + | else aQ.payments[1].assetId, aQ.payments[1].amount)] | |
632 | 641 | else nil)) | |
633 | - | let | |
634 | - | if (( | |
642 | + | let cO = invoke(this, "reissueShare", [dm], nil) | |
643 | + | if ((cO == cO)) | |
635 | 644 | then { | |
636 | - | let | |
637 | - | if (( | |
638 | - | then | |
645 | + | let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN) | |
646 | + | if ((cP == cP)) | |
647 | + | then cM | |
639 | 648 | else throw("Strict value is not equal to itself.") | |
640 | 649 | } | |
641 | 650 | else throw("Strict value is not equal to itself.") | |
642 | 651 | } | |
643 | - | else ( | |
652 | + | else (cM ++ [Reissue(av, dm, true), ScriptTransfer(aQ.caller, dm, av)]) | |
644 | 653 | } | |
645 | 654 | else throw("Strict value is not equal to itself.") | |
646 | 655 | } | |
650 | 659 | } | |
651 | 660 | ||
652 | 661 | ||
653 | - | func | |
654 | - | let | |
655 | - | then if (( | |
656 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String( | |
657 | - | else $Tuple2( | |
658 | - | else $Tuple2(0, | |
659 | - | let | |
660 | - | let | |
661 | - | if (!( | |
662 | - | then ([ScriptTransfer( | |
662 | + | func dx (aQ,dy) = { | |
663 | + | let dz = if ((size(aQ.payments) == 1)) | |
664 | + | then if ((aQ.payments[0].assetId != av)) | |
665 | + | then throw(("Incorrect asset attached. Expected: " + toBase58String(av))) | |
666 | + | else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
667 | + | else $Tuple2(0, av) | |
668 | + | let cU = dz._1 | |
669 | + | let ch = dz._2 | |
670 | + | if (!(aX)) | |
671 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
663 | 672 | else { | |
664 | - | let | |
665 | - | then invoke( | |
673 | + | let dA = if ((dy > 0)) | |
674 | + | then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil) | |
666 | 675 | else 0 | |
667 | - | if (( | |
676 | + | if ((dA == dA)) | |
668 | 677 | then { | |
669 | - | let | |
670 | - | let | |
671 | - | let | |
672 | - | let | |
673 | - | let | |
674 | - | then invoke(this, "stakeUnstake", [false, | |
678 | + | let dB = (cU + dy) | |
679 | + | let dC = fraction(dB, at, aw) | |
680 | + | let dD = fraction(dB, au, aw) | |
681 | + | let dE = bb((at - dC), (au - dD)) | |
682 | + | let cK = if (contains(ad, al)) | |
683 | + | then invoke(this, "stakeUnstake", [false, dC, al], nil) | |
675 | 684 | else 0 | |
676 | - | if (( | |
685 | + | if ((cK == cK)) | |
677 | 686 | then { | |
678 | - | let | |
679 | - | then invoke(this, "stakeUnstake", [false, | |
687 | + | let cL = if (contains(ad, am)) | |
688 | + | then invoke(this, "stakeUnstake", [false, dD, am], nil) | |
680 | 689 | else 0 | |
681 | - | if (( | |
682 | - | then [IntegerEntry(h, ( | |
690 | + | if ((cL == cL)) | |
691 | + | then [IntegerEntry(h, (at - dC)), IntegerEntry(i, (au - dD)), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, dC, an), ScriptTransfer(aQ.caller, dD, ao)] | |
683 | 692 | else throw("Strict value is not equal to itself.") | |
684 | 693 | } | |
685 | 694 | else throw("Strict value is not equal to itself.") | |
689 | 698 | } | |
690 | 699 | ||
691 | 700 | ||
692 | - | @Callable( | |
693 | - | func init ( | |
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | let | |
705 | - | let | |
706 | - | let | |
707 | - | let | |
701 | + | @Callable(aQ) | |
702 | + | func init (dF) = { | |
703 | + | let dG = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
704 | + | let cE = dG._1 | |
705 | + | let cq = dG._2 | |
706 | + | let dH = $Tuple2(aQ.payments[1].amount, aQ.payments[1].assetId) | |
707 | + | let cF = dH._1 | |
708 | + | let cr = dH._2 | |
709 | + | let dI = bD(cq) | |
710 | + | let cv = dI._1 | |
711 | + | let cw = dI._2 | |
712 | + | let cx = dI._3 | |
713 | + | let dJ = bD(cr) | |
714 | + | let cz = dJ._1 | |
715 | + | let cA = dJ._2 | |
716 | + | let cB = dJ._3 | |
708 | 717 | if (isDefined(getBoolean(this, c))) | |
709 | - | then | |
710 | - | else if (( | |
718 | + | then bI() | |
719 | + | else if ((cq == cr)) | |
711 | 720 | then throw("Assets must be different") | |
712 | 721 | else { | |
713 | - | let | |
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | let | |
721 | - | then invoke(this, "stakeUnstake", [true, | |
722 | + | let dK = ((("s" + take(cw, 7)) + "_") + take(cA, 7)) | |
723 | + | let dL = ((((("ShareToken of SwopFi protocol for " + cw) + " and ") + cA) + " at address ") + toString(this)) | |
724 | + | let dM = ((cx + cB) / 2) | |
725 | + | let dN = fraction(pow(cE, cx, 5, 1, cx, DOWN), pow(cF, cB, 5, 1, cB, DOWN), pow(10, 0, dM, 0, 0, DOWN)) | |
726 | + | let dO = Issue(dK, dL, dN, dM, true) | |
727 | + | let dP = calculateAssetId(dO) | |
728 | + | let dE = bb(cE, cF) | |
729 | + | let cK = if (contains(ad, cv)) | |
730 | + | then invoke(this, "stakeUnstake", [true, cE, cv], nil) | |
722 | 731 | else 0 | |
723 | - | if (( | |
732 | + | if ((cK == cK)) | |
724 | 733 | then { | |
725 | - | let | |
726 | - | then invoke(this, "stakeUnstake", [true, | |
734 | + | let cL = if (contains(ad, cz)) | |
735 | + | then invoke(this, "stakeUnstake", [true, cF, cz], nil) | |
727 | 736 | else 0 | |
728 | - | if (( | |
737 | + | if ((cL == cL)) | |
729 | 738 | then { | |
730 | - | let | |
731 | - | if ( | |
732 | - | then ( | |
733 | - | else | |
739 | + | let dQ = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cv), StringEntry(g, cz), IntegerEntry(h, cE), IntegerEntry(i, cF), IntegerEntry(m, dE), IntegerEntry(l, getIntegerValue(M, "base_fee_flat")), IntegerEntry(A, 3), dO, StringEntry(j, toBase58String(dP)), IntegerEntry(k, dN), ScriptTransfer(aQ.caller, dN, dP)] | |
740 | + | if (dF) | |
741 | + | then (dQ ++ [BooleanEntry(u, dF), IntegerEntry(v, (af + (ah * ag)))]) | |
742 | + | else dQ | |
734 | 743 | } | |
735 | 744 | else throw("Strict value is not equal to itself.") | |
736 | 745 | } | |
740 | 749 | ||
741 | 750 | ||
742 | 751 | ||
743 | - | @Callable( | |
744 | - | func replenishWithTwoTokensV2 ( | |
752 | + | @Callable(aQ) | |
753 | + | func replenishWithTwoTokensV2 (co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, co, cp))) | |
745 | 754 | ||
746 | 755 | ||
747 | 756 | ||
748 | - | @Callable( | |
749 | - | func replenishWithOneTokenV2 ( | |
757 | + | @Callable(aQ) | |
758 | + | func replenishWithOneTokenV2 (cR,cS,co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, co, cp))) | |
750 | 759 | ||
751 | 760 | ||
752 | 761 | ||
753 | - | @Callable( | |
754 | - | func withdrawV2 ( | |
762 | + | @Callable(aQ) | |
763 | + | func withdrawV2 (dy) = valueOrElse(bJ(), dx(aQ, dy)) | |
755 | 764 | ||
756 | 765 | ||
757 | 766 | ||
758 | - | @Callable( | |
759 | - | func withdrawOneToken ( | |
760 | - | let | |
761 | - | then if (( | |
762 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String( | |
763 | - | else $Tuple2( | |
764 | - | else $Tuple2(0, | |
765 | - | let | |
766 | - | let | |
767 | - | let | |
768 | - | if (if (( | |
769 | - | then ( | |
767 | + | @Callable(aQ) | |
768 | + | func withdrawOneToken (dy,dR,dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), { | |
769 | + | let dU = if ((size(aQ.payments) == 1)) | |
770 | + | then if ((aQ.payments[0].assetId != av)) | |
771 | + | then throw(("Incorrect asset attached. Expected: " + toBase58String(av))) | |
772 | + | else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
773 | + | else $Tuple2(0, av) | |
774 | + | let cU = dU._1 | |
775 | + | let ch = dU._2 | |
776 | + | let dB = (cU + dy) | |
777 | + | if (if ((dR != al)) | |
778 | + | then (dR != am) | |
770 | 779 | else false) | |
771 | 780 | then throw("Incorrect withdraw asset") | |
772 | - | else if ((0 >= | |
781 | + | else if ((0 >= dB)) | |
773 | 782 | then throw("withdraw amount must be grater than 0") | |
774 | - | else if (!( | |
775 | - | then ([ScriptTransfer( | |
783 | + | else if (!(aX)) | |
784 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
776 | 785 | else { | |
777 | - | let | |
778 | - | then invoke( | |
786 | + | let dA = if ((dy > 0)) | |
787 | + | then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil) | |
779 | 788 | else 0 | |
780 | - | if (( | |
789 | + | if ((dA == dA)) | |
781 | 790 | then { | |
782 | - | let dw = fraction(dv, ar, au) | |
783 | - | let dx = fraction(dv, as, au) | |
784 | - | let dP = (ar - dw) | |
785 | - | let dQ = (as - dx) | |
786 | - | let dR = bV(aN.originCaller) | |
787 | - | let dS = if ((dL == aj)) | |
788 | - | then ba(dM, dN, dx, am, dP, dQ, aY(dP, dQ)) | |
789 | - | else ba(dM, dN, dw, al, dP, dQ, aY(dP, dQ)) | |
790 | - | let dT = fraction(dS, fraction(ax, dR, ay, CEILING), ay) | |
791 | - | let dU = fraction(dS, (ay - fraction(aw, dR, ay, CEILING)), ay) | |
792 | - | let dV = if ((dL == aj)) | |
793 | - | then $Tuple4((dw + dU), (((ar - dw) - dU) - dT), as, am) | |
794 | - | else $Tuple4((dx + dU), ar, (((as - dx) - dU) - dT), al) | |
795 | - | let dW = dV._1 | |
796 | - | let dX = dV._2 | |
797 | - | let dY = dV._3 | |
798 | - | let dZ = dV._4 | |
799 | - | if (!(cb(dX, dY, dZ))) | |
791 | + | let dC = fraction(dB, at, aw) | |
792 | + | let dD = fraction(dB, au, aw) | |
793 | + | let dV = (at - dC) | |
794 | + | let dW = (au - dD) | |
795 | + | let dX = bY(aQ.originCaller) | |
796 | + | let dY = if ((dR == al)) | |
797 | + | then bd(dS, dT, dD, ao, dV, dW, bb(dV, dW)) | |
798 | + | else bd(dS, dT, dC, an, dV, dW, bb(dV, dW)) | |
799 | + | let dZ = fraction(dY, fraction(az, dX, aB, CEILING), aB) | |
800 | + | let ea = fraction(dY, fraction(aA, dX, aB, CEILING), aB) | |
801 | + | let eb = fraction(dY, (aB - fraction(ay, dX, aB, CEILING)), aB) | |
802 | + | let ec = if ((dR == al)) | |
803 | + | then $Tuple4((dC + eb), ((((at - dC) - eb) - dZ) - ea), au, ao) | |
804 | + | else $Tuple4((dD + eb), at, ((((au - dD) - eb) - dZ) - ea), an) | |
805 | + | let ed = ec._1 | |
806 | + | let ee = ec._2 | |
807 | + | let ef = ec._3 | |
808 | + | let eg = ec._4 | |
809 | + | if (!(ce(ee, ef, eg))) | |
800 | 810 | then throw() | |
801 | 811 | else { | |
802 | - | let | |
803 | - | let | |
804 | - | then invoke(this, "stakeUnstake", [false, ( | |
812 | + | let dE = bb(ee, ef) | |
813 | + | let cK = if (contains(ad, dR)) | |
814 | + | then invoke(this, "stakeUnstake", [false, ((ed + dZ) + ea), dR], nil) | |
805 | 815 | else 0 | |
806 | - | if (( | |
807 | - | then [IntegerEntry(h, | |
816 | + | if ((cK == cK)) | |
817 | + | then [IntegerEntry(h, ee), IntegerEntry(i, ef), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, ed, fromBase58String(dR)), ScriptTransfer(W, dZ, fromBase58String(dR)), ScriptTransfer(X, ea, fromBase58String(dR))] | |
808 | 818 | else throw("Strict value is not equal to itself.") | |
809 | 819 | } | |
810 | 820 | } | |
814 | 824 | ||
815 | 825 | ||
816 | 826 | ||
817 | - | @Callable( | |
818 | - | func exchange ( | |
819 | - | let | |
820 | - | let | |
821 | - | let | |
822 | - | if ((0 >= | |
823 | - | then throw(("Estimated amount must be positive. Actual: " + toString( | |
824 | - | else if (( | |
827 | + | @Callable(aQ) | |
828 | + | func exchange (dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), { | |
829 | + | let eh = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
830 | + | let cU = eh._1 | |
831 | + | let ch = eh._2 | |
832 | + | if ((0 >= dS)) | |
833 | + | then throw(("Estimated amount must be positive. Actual: " + toString(dS))) | |
834 | + | else if ((dT > dS)) | |
825 | 835 | then throw("Minimal amount can't be greater than estimated.") | |
826 | - | else if ((size( | |
827 | - | then | |
828 | - | else if (!( | |
829 | - | then ([ScriptTransfer( | |
830 | - | else if (if (( | |
831 | - | then ( | |
836 | + | else if ((size(aQ.payments) != 1)) | |
837 | + | then bO() | |
838 | + | else if (!(aX)) | |
839 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
840 | + | else if (if ((ch != an)) | |
841 | + | then (ch != ao) | |
832 | 842 | else false) | |
833 | - | then | |
834 | - | else if ((10000000 > | |
843 | + | then bN() | |
844 | + | else if ((10000000 > cU)) | |
835 | 845 | then throw("Only swap of 10.000000 or more tokens is allowed") | |
836 | - | else if (if (( | |
846 | + | else if (if ((aG > fraction(aD, dT, cU))) | |
837 | 847 | then true | |
838 | - | else (fraction( | |
848 | + | else (fraction(aD, dS, cU) > aH)) | |
839 | 849 | then throw("Incorrect args and pmt ratio") | |
840 | 850 | else { | |
841 | - | let eb = if ((ce == al)) | |
842 | - | then am | |
843 | - | else al | |
844 | - | let bQ = ba(dM, dN, cR, ce, ar, as, av) | |
845 | - | let dR = bV(aN.originCaller) | |
846 | - | let ec = fraction(bQ, fraction(ax, dR, ay, CEILING), ay) | |
847 | - | let ed = fraction(bQ, (ay - fraction(aw, dR, ay, CEILING)), ay) | |
848 | - | let ee = if ((ce == al)) | |
849 | - | then $Tuple2((ar + cR), ((as - ed) - ec)) | |
850 | - | else $Tuple2(((ar - ed) - ec), (as + cR)) | |
851 | - | let cc = ee._1 | |
852 | - | let cd = ee._2 | |
853 | - | if (!(cb(cc, cd, ce))) | |
851 | + | let ei = if ((ch == an)) | |
852 | + | then ao | |
853 | + | else an | |
854 | + | let bT = bd(dS, dT, cU, ch, at, au, ax) | |
855 | + | let dX = bY(aQ.originCaller) | |
856 | + | let ej = fraction(bT, fraction(az, dX, aB, CEILING), aB) | |
857 | + | let ea = fraction(bT, fraction(aA, dX, aB, CEILING), aB) | |
858 | + | let ek = fraction(bT, (aB - fraction(ay, dX, aB, CEILING)), aB) | |
859 | + | let el = if ((ch == an)) | |
860 | + | then $Tuple2((at + cU), (((au - ek) - ej) - ea)) | |
861 | + | else $Tuple2((((at - ek) - ej) - ea), (au + cU)) | |
862 | + | let cf = el._1 | |
863 | + | let cg = el._2 | |
864 | + | if (!(ce(cf, cg, ch))) | |
854 | 865 | then throw() | |
855 | 866 | else { | |
856 | - | let | |
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
863 | - | let | |
864 | - | let | |
865 | - | then invoke(this, "stakeUnstake", [true, | |
867 | + | let em = bD(ch) | |
868 | + | let cW = em._1 | |
869 | + | let cX = em._2 | |
870 | + | let cY = em._3 | |
871 | + | let en = bD(ei) | |
872 | + | let eo = en._1 | |
873 | + | let ep = en._2 | |
874 | + | let eq = en._3 | |
875 | + | let cK = if (contains(ad, cW)) | |
876 | + | then invoke(this, "stakeUnstake", [true, cU, cW], nil) | |
866 | 877 | else 0 | |
867 | - | if (( | |
878 | + | if ((cK == cK)) | |
868 | 879 | then { | |
869 | - | let | |
870 | - | then invoke(this, "stakeUnstake", [false, ( | |
880 | + | let cL = if (contains(ad, eo)) | |
881 | + | then invoke(this, "stakeUnstake", [false, ((ek + ej) + ea), eo], nil) | |
871 | 882 | else 0 | |
872 | - | if (( | |
873 | - | then $Tuple2([IntegerEntry(h, | |
883 | + | if ((cL == cL)) | |
884 | + | then $Tuple2([IntegerEntry(h, cf), IntegerEntry(i, cg), IntegerEntry(m, bb(cf, cg)), ScriptTransfer(aQ.caller, ek, ei), ScriptTransfer(W, ej, ei), ScriptTransfer(X, ea, ei)], [ek, ei]) | |
874 | 885 | else throw("Strict value is not equal to itself.") | |
875 | 886 | } | |
876 | 887 | else throw("Strict value is not equal to itself.") | |
880 | 891 | ||
881 | 892 | ||
882 | 893 | ||
883 | - | @Callable( | |
884 | - | func reissueShare ( | |
894 | + | @Callable(er) | |
895 | + | func reissueShare (bT) = valueOrElse(bM(er), [Reissue(av, bT, true)]) | |
885 | 896 | ||
886 | 897 | ||
887 | 898 | ||
888 | - | @Callable( | |
889 | - | func shutdown () = valueOrElse( | |
899 | + | @Callable(aQ) | |
900 | + | func shutdown () = valueOrElse(bL(aQ), if (!(ai)) | |
890 | 901 | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified"))) | |
891 | - | else | |
902 | + | else bG("Paused by admin")) | |
892 | 903 | ||
893 | 904 | ||
894 | 905 | ||
895 | - | @Callable( | |
896 | - | func activate () = valueOrElse( | |
897 | - | then | |
906 | + | @Callable(aQ) | |
907 | + | func activate () = valueOrElse(bL(aQ), if (ai) | |
908 | + | then bI() | |
898 | 909 | else [BooleanEntry(c, true), DeleteEntry(n)]) | |
899 | 910 | ||
900 | 911 | ||
901 | 912 | ||
902 | - | @Callable( | |
903 | - | func takeIntoAccountExtraFunds () = valueOrElse( | |
904 | - | let | |
913 | + | @Callable(aQ) | |
914 | + | func takeIntoAccountExtraFunds () = valueOrElse(bJ(), { | |
915 | + | let es = if (if ((an == ac)) | |
905 | 916 | then true | |
906 | - | else ( | |
907 | - | then invoke( | |
917 | + | else (ao == ac)) | |
918 | + | then invoke(Z, "claimRewards", nil, nil) | |
908 | 919 | else 0 | |
909 | - | if (( | |
920 | + | if ((es == es)) | |
910 | 921 | then { | |
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | if (( | |
922 | + | let et = (aV - at) | |
923 | + | let eu = (aW - au) | |
924 | + | let dk = bb((at + et), (au + eu)) | |
925 | + | if ((aQ.caller != W)) | |
915 | 926 | then throw("Only the money box can call this function") | |
916 | - | else if (if ((0 > | |
927 | + | else if (if ((0 > et)) | |
917 | 928 | then true | |
918 | - | else (0 > | |
919 | - | then | |
920 | - | else if (if (( | |
921 | - | then ( | |
929 | + | else (0 > eu)) | |
930 | + | then bG("Enroll amount negative") | |
931 | + | else if (if ((et == 0)) | |
932 | + | then (eu == 0) | |
922 | 933 | else false) | |
923 | 934 | then throw("No money to take") | |
924 | 935 | else { | |
925 | - | let | |
926 | - | then ( | |
936 | + | let cK = if (if (contains(ad, al)) | |
937 | + | then (et > 0) | |
927 | 938 | else false) | |
928 | - | then invoke(this, "stakeUnstake", [true, | |
939 | + | then invoke(this, "stakeUnstake", [true, et, al], nil) | |
929 | 940 | else 0 | |
930 | - | if (( | |
941 | + | if ((cK == cK)) | |
931 | 942 | then { | |
932 | - | let | |
933 | - | then ( | |
943 | + | let cL = if (if (contains(ad, am)) | |
944 | + | then (eu > 0) | |
934 | 945 | else false) | |
935 | - | then invoke(this, "stakeUnstake", [true, | |
946 | + | then invoke(this, "stakeUnstake", [true, eu, am], nil) | |
936 | 947 | else 0 | |
937 | - | if (( | |
938 | - | then [IntegerEntry(m, | |
948 | + | if ((cL == cL)) | |
949 | + | then [IntegerEntry(m, dk), IntegerEntry(h, (at + et)), IntegerEntry(i, (au + eu))] | |
939 | 950 | else throw("Strict value is not equal to itself.") | |
940 | 951 | } | |
941 | 952 | else throw("Strict value is not equal to itself.") | |
946 | 957 | ||
947 | 958 | ||
948 | 959 | ||
949 | - | @Callable( | |
950 | - | func keepLimitForFirstHarvest ( | |
960 | + | @Callable(aQ) | |
961 | + | func keepLimitForFirstHarvest (ev) = valueOrElse(bJ(), valueOrElse(bL(aQ), [IntegerEntry(w, ev)])) | |
951 | 962 | ||
952 | 963 | ||
953 | 964 | ||
954 | - | @Callable( | |
955 | - | func stakeUnstake ( | |
965 | + | @Callable(aQ) | |
966 | + | func stakeUnstake (bR,bT,ew) = if ((aQ.caller != this)) | |
956 | 967 | then throw("Only contract itself can invoke this function") | |
957 | 968 | else { | |
958 | - | let | |
959 | - | let | |
960 | - | let | |
961 | - | let | |
962 | - | let | |
963 | - | let | |
964 | - | if (( | |
969 | + | let ex = bS(bR, bT, fromBase58String(ew)) | |
970 | + | let bV = ex._1 | |
971 | + | let ey = ex._2 | |
972 | + | let ez = ex._3 | |
973 | + | let eA = ex._4 | |
974 | + | let eB = invoke(ey, bV, ez, eA) | |
975 | + | if ((eB == eB)) | |
965 | 976 | then nil | |
966 | 977 | else throw("Strict value is not equal to itself.") | |
967 | 978 | } | |
968 | 979 | ||
969 | 980 | ||
970 | 981 | ||
971 | - | @Callable( | |
972 | - | func replenishWithTwoTokens () = valueOrElse( | |
982 | + | @Callable(aQ) | |
983 | + | func replenishWithTwoTokens () = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, false, 0))) | |
973 | 984 | ||
974 | 985 | ||
975 | 986 | ||
976 | - | @Callable( | |
977 | - | func replenishWithOneToken ( | |
987 | + | @Callable(aQ) | |
988 | + | func replenishWithOneToken (cR,cS) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, false, 0))) | |
978 | 989 | ||
979 | 990 | ||
980 | 991 | ||
981 | - | @Callable( | |
982 | - | func withdraw () = valueOrElse( | |
992 | + | @Callable(aQ) | |
993 | + | func withdraw () = valueOrElse(bJ(), dx(aQ, 0)) | |
983 | 994 | ||
984 | 995 | ||
985 | - | @Verifier( | |
986 | - | func | |
987 | - | let | |
988 | - | let | |
996 | + | @Verifier(eC) | |
997 | + | func eD () = { | |
998 | + | let eE = { | |
999 | + | let eF = if (sigVerify(eC.bodyBytes, eC.proofs[0], S)) | |
989 | 1000 | then 1 | |
990 | 1001 | else 0 | |
991 | - | let | |
1002 | + | let eG = if (sigVerify(eC.bodyBytes, eC.proofs[1], T)) | |
992 | 1003 | then 1 | |
993 | 1004 | else 0 | |
994 | - | let | |
1005 | + | let eH = if (sigVerify(eC.bodyBytes, eC.proofs[2], U)) | |
995 | 1006 | then 1 | |
996 | 1007 | else 0 | |
997 | - | ((( | |
1008 | + | (((eF + eG) + eH) >= 2) | |
998 | 1009 | } | |
999 | - | let | |
1000 | - | if ($isInstanceOf( | |
1010 | + | let P = eC | |
1011 | + | if ($isInstanceOf(P, "InvokeScriptTransaction")) | |
1001 | 1012 | then { | |
1002 | - | let | |
1003 | - | let | |
1004 | - | then ( | |
1013 | + | let eB = P | |
1014 | + | let eI = if ((eB.dApp == this)) | |
1015 | + | then (eB.function == "takeIntoAccountExtraFunds") | |
1005 | 1016 | else false | |
1006 | - | let | |
1017 | + | let eJ = if (if (if (sigVerify(eC.bodyBytes, eC.proofs[0], S)) | |
1007 | 1018 | then true | |
1008 | - | else sigVerify( | |
1019 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], T)) | |
1009 | 1020 | then true | |
1010 | - | else sigVerify( | |
1021 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], U)) | |
1011 | 1022 | then true | |
1012 | - | else sigVerify( | |
1013 | - | if (if ( | |
1014 | - | then | |
1023 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], V) | |
1024 | + | if (if (eI) | |
1025 | + | then eJ | |
1015 | 1026 | else false) | |
1016 | 1027 | then true | |
1017 | - | else | |
1028 | + | else eE | |
1018 | 1029 | } | |
1019 | - | else | |
1030 | + | else eE | |
1020 | 1031 | } | |
1021 | 1032 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "2.0.0" | |
5 | 5 | ||
6 | 6 | let b = "version" | |
7 | 7 | ||
8 | 8 | let c = "active" | |
9 | 9 | ||
10 | 10 | let d = "active_all_contracts" | |
11 | 11 | ||
12 | 12 | let e = "deprecated_" | |
13 | 13 | ||
14 | 14 | let f = "A_asset_id" | |
15 | 15 | ||
16 | 16 | let g = "B_asset_id" | |
17 | 17 | ||
18 | 18 | let h = "A_asset_balance" | |
19 | 19 | ||
20 | 20 | let i = "B_asset_balance" | |
21 | 21 | ||
22 | 22 | let j = "share_asset_id" | |
23 | 23 | ||
24 | 24 | let k = "share_asset_supply" | |
25 | 25 | ||
26 | 26 | let l = "commission" | |
27 | 27 | ||
28 | 28 | let m = "invariant" | |
29 | 29 | ||
30 | 30 | let n = "shutdown_cause" | |
31 | 31 | ||
32 | 32 | let o = "staking_usdnnsbt_address" | |
33 | 33 | ||
34 | 34 | let p = "staking_eurn_address" | |
35 | 35 | ||
36 | 36 | let q = "discounts" | |
37 | 37 | ||
38 | 38 | let r = "discount_values" | |
39 | 39 | ||
40 | 40 | let s = "_SWOP_amount" | |
41 | 41 | ||
42 | 42 | let t = "_GSwop_amount" | |
43 | 43 | ||
44 | 44 | let u = "first_harvest" | |
45 | 45 | ||
46 | 46 | let v = "first_harvest_height" | |
47 | 47 | ||
48 | 48 | let w = "share_limit_on_first_harvest" | |
49 | 49 | ||
50 | 50 | let x = "base_period" | |
51 | 51 | ||
52 | 52 | let y = "period_length" | |
53 | 53 | ||
54 | 54 | let z = "start_height" | |
55 | 55 | ||
56 | 56 | let A = "dApp_threshold" | |
57 | 57 | ||
58 | 58 | let B = "admin_pub_1" | |
59 | 59 | ||
60 | 60 | let C = "admin_pub_2" | |
61 | 61 | ||
62 | 62 | let D = "admin_pub_3" | |
63 | 63 | ||
64 | 64 | let E = "admin_invoke_pub" | |
65 | 65 | ||
66 | 66 | let F = "money_box_address" | |
67 | 67 | ||
68 | - | let G = " | |
68 | + | let G = "team_box_address" | |
69 | 69 | ||
70 | - | let H = " | |
70 | + | let H = "governance_address" | |
71 | 71 | ||
72 | - | let I = " | |
72 | + | let I = "farming_address" | |
73 | 73 | ||
74 | - | let J = " | |
74 | + | let J = "voting_address" | |
75 | 75 | ||
76 | - | let K = " | |
76 | + | let K = "usdn_asset_id" | |
77 | 77 | ||
78 | - | let L = | |
78 | + | let L = "staking_assets" | |
79 | 79 | ||
80 | - | func M (N) = { | |
81 | - | let O = getString(L, N) | |
82 | - | if ($isInstanceOf(O, "String")) | |
80 | + | let M = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz') | |
81 | + | ||
82 | + | func N (O) = { | |
83 | + | let P = getString(M, O) | |
84 | + | if ($isInstanceOf(P, "String")) | |
83 | 85 | then { | |
84 | - | let | |
85 | - | fromBase58String( | |
86 | + | let Q = P | |
87 | + | fromBase58String(Q) | |
86 | 88 | } | |
87 | 89 | else { | |
88 | - | let | |
89 | - | throw(( | |
90 | + | let R = P | |
91 | + | throw((O + "is empty")) | |
90 | 92 | } | |
91 | 93 | } | |
92 | 94 | ||
93 | 95 | ||
94 | - | let | |
96 | + | let S = N(B) | |
95 | 97 | ||
96 | - | let | |
98 | + | let T = N(C) | |
97 | 99 | ||
98 | - | let | |
100 | + | let U = N(D) | |
99 | 101 | ||
100 | - | let | |
102 | + | let V = N(E) | |
101 | 103 | ||
102 | - | let | |
104 | + | let W = Address(N(F)) | |
103 | 105 | ||
104 | - | let | |
106 | + | let X = Address(N(G)) | |
105 | 107 | ||
106 | - | let | |
108 | + | let Y = Address(N(H)) | |
107 | 109 | ||
108 | - | let | |
110 | + | let Z = Address(N(o)) | |
109 | 111 | ||
110 | - | let | |
112 | + | let aa = Address(N(J)) | |
111 | 113 | ||
112 | - | let | |
114 | + | let ab = Address(N(I)) | |
113 | 115 | ||
114 | - | let | |
116 | + | let ac = N(K) | |
115 | 117 | ||
116 | - | let | |
118 | + | let ad = getStringValue(M, L) | |
117 | 119 | ||
118 | - | let | |
120 | + | let ae = valueOrErrorMessage(getInteger(aa, x), "Empty kBasePeriod") | |
119 | 121 | ||
120 | - | let | |
122 | + | let af = valueOrErrorMessage(getInteger(aa, z), "Empty kStartHeight") | |
121 | 123 | ||
122 | - | let | |
124 | + | let ag = valueOrErrorMessage(getInteger(aa, y), "Empty kPeriodLength") | |
123 | 125 | ||
124 | - | let | |
126 | + | let ah = ((ae + ((height - af) / ag)) + 3) | |
125 | 127 | ||
126 | - | let | |
128 | + | let ai = getBooleanValue(this, c) | |
127 | 129 | ||
128 | - | let | |
130 | + | let aj = valueOrElse(getBoolean(M, d), true) | |
129 | 131 | ||
130 | - | let | |
132 | + | let ak = valueOrElse(getBoolean(M, (e + toString(this))), false) | |
131 | 133 | ||
132 | - | let | |
134 | + | let al = getStringValue(this, f) | |
133 | 135 | ||
134 | - | let al = if ((aj == "WAVES")) | |
136 | + | let am = getStringValue(this, g) | |
137 | + | ||
138 | + | let an = if ((al == "WAVES")) | |
135 | 139 | then unit | |
136 | - | else fromBase58String( | |
140 | + | else fromBase58String(al) | |
137 | 141 | ||
138 | - | let | |
142 | + | let ao = if ((am == "WAVES")) | |
139 | 143 | then unit | |
140 | - | else fromBase58String( | |
144 | + | else fromBase58String(am) | |
141 | 145 | ||
142 | - | let | |
143 | - | let | |
144 | - | if ($isInstanceOf( | |
146 | + | let ap = { | |
147 | + | let P = an | |
148 | + | if ($isInstanceOf(P, "ByteVector")) | |
145 | 149 | then { | |
146 | - | let | |
147 | - | value(assetInfo( | |
150 | + | let aq = P | |
151 | + | value(assetInfo(aq)).name | |
148 | 152 | } | |
149 | - | else if ($isInstanceOf( | |
153 | + | else if ($isInstanceOf(P, "Unit")) | |
150 | 154 | then { | |
151 | - | let | |
155 | + | let ar = P | |
152 | 156 | "WAVES" | |
153 | 157 | } | |
154 | 158 | else throw("Match error") | |
155 | 159 | } | |
156 | 160 | ||
157 | - | let | |
158 | - | let | |
159 | - | if ($isInstanceOf( | |
161 | + | let as = { | |
162 | + | let P = ao | |
163 | + | if ($isInstanceOf(P, "ByteVector")) | |
160 | 164 | then { | |
161 | - | let | |
162 | - | value(assetInfo( | |
165 | + | let aq = P | |
166 | + | value(assetInfo(aq)).name | |
163 | 167 | } | |
164 | - | else if ($isInstanceOf( | |
168 | + | else if ($isInstanceOf(P, "Unit")) | |
165 | 169 | then { | |
166 | - | let | |
170 | + | let ar = P | |
167 | 171 | "WAVES" | |
168 | 172 | } | |
169 | 173 | else throw("Match error") | |
170 | 174 | } | |
171 | 175 | ||
172 | - | let | |
176 | + | let at = getIntegerValue(this, h) | |
173 | 177 | ||
174 | - | let | |
178 | + | let au = getIntegerValue(this, i) | |
175 | 179 | ||
176 | - | let | |
180 | + | let av = fromBase58String(getStringValue(this, j)) | |
177 | 181 | ||
178 | - | let | |
182 | + | let aw = getIntegerValue(this, k) | |
179 | 183 | ||
180 | - | let | |
184 | + | let ax = getIntegerValue(this, m) | |
181 | 185 | ||
182 | - | let | |
186 | + | let ay = getIntegerValue(this, l) | |
183 | 187 | ||
184 | - | let | |
188 | + | let az = fraction(ay, 35, 100) | |
185 | 189 | ||
186 | - | let | |
190 | + | let aA = fraction(ay, 10, 100) | |
187 | 191 | ||
188 | - | let | |
192 | + | let aB = 1000000 | |
189 | 193 | ||
190 | - | let | |
194 | + | let aC = 1000 | |
191 | 195 | ||
192 | - | let | |
196 | + | let aD = 100000000 | |
193 | 197 | ||
194 | - | let | |
198 | + | let aE = 10000000000000000 | |
195 | 199 | ||
196 | - | let | |
200 | + | let aF = 8 | |
197 | 201 | ||
198 | - | let | |
202 | + | let aG = 60000000 | |
199 | 203 | ||
200 | - | let | |
204 | + | let aH = 140000000 | |
201 | 205 | ||
202 | - | let | |
206 | + | let aI = 50 | |
203 | 207 | ||
204 | - | let | |
208 | + | let aJ = 2 | |
205 | 209 | ||
206 | - | func aI (aJ) = { | |
207 | - | let O = aJ | |
208 | - | if ($isInstanceOf(O, "ByteVector")) | |
210 | + | let aK = 4600000000000000 | |
211 | + | ||
212 | + | func aL (aM) = { | |
213 | + | let P = aM | |
214 | + | if ($isInstanceOf(P, "ByteVector")) | |
209 | 215 | then { | |
210 | - | let | |
211 | - | assetBalance(this, | |
216 | + | let aq = P | |
217 | + | assetBalance(this, aq) | |
212 | 218 | } | |
213 | - | else if ($isInstanceOf( | |
219 | + | else if ($isInstanceOf(P, "Unit")) | |
214 | 220 | then { | |
215 | - | let | |
221 | + | let ar = P | |
216 | 222 | wavesBalance(this).available | |
217 | 223 | } | |
218 | 224 | else throw("Match error") | |
219 | 225 | } | |
220 | 226 | ||
221 | 227 | ||
222 | - | func | |
223 | - | let | |
224 | - | let | |
225 | - | if ($isInstanceOf( | |
228 | + | func aN (aM) = { | |
229 | + | let aO = { | |
230 | + | let P = aM | |
231 | + | if ($isInstanceOf(P, "ByteVector")) | |
226 | 232 | then { | |
227 | - | let | |
228 | - | if (( | |
229 | - | then getInteger( | |
233 | + | let aP = P | |
234 | + | if ((aP == ac)) | |
235 | + | then getInteger(Z, ((("rpd_balance_" + toBase58String(aP)) + "_") + toString(this))) | |
230 | 236 | else 0 | |
231 | 237 | } | |
232 | - | else if ($isInstanceOf( | |
238 | + | else if ($isInstanceOf(P, "Unit")) | |
233 | 239 | then 0 | |
234 | 240 | else throw("Match error") | |
235 | 241 | } | |
236 | - | let | |
237 | - | if ($isInstanceOf( | |
242 | + | let P = aO | |
243 | + | if ($isInstanceOf(P, "Int")) | |
238 | 244 | then { | |
239 | - | let | |
240 | - | | |
245 | + | let aQ = P | |
246 | + | aQ | |
241 | 247 | } | |
242 | 248 | else 0 | |
243 | 249 | } | |
244 | 250 | ||
245 | 251 | ||
246 | - | let | |
252 | + | let aR = aN(an) | |
247 | 253 | ||
248 | - | let | |
254 | + | let aS = aN(ao) | |
249 | 255 | ||
250 | - | let | |
256 | + | let aT = (at - aR) | |
251 | 257 | ||
252 | - | let | |
258 | + | let aU = (au - aS) | |
253 | 259 | ||
254 | - | let | |
260 | + | let aV = (aL(an) + aR) | |
255 | 261 | ||
256 | - | let | |
262 | + | let aW = (aL(ao) + aS) | |
257 | 263 | ||
258 | - | let | |
259 | - | then ( | |
264 | + | let aX = if ((aV >= at)) | |
265 | + | then (aW >= au) | |
260 | 266 | else false | |
261 | 267 | ||
262 | - | func | |
268 | + | func aY (aZ,ba) = ((fraction(aE, aZ, ba) + fraction(aE, ba, aZ)) / 2) | |
263 | 269 | ||
264 | 270 | ||
265 | - | func | |
266 | - | let | |
267 | - | (fraction(( | |
271 | + | func bb (aZ,ba) = { | |
272 | + | let bc = aY(aZ, ba) | |
273 | + | (fraction((aZ + ba), aE, pow(bc, aF, aI, aJ, aF, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aZ), toBigInt(ba), toBigInt(aD)), 0, toBigInt(5), 1, (aF / 2), DOWN)), pow((bc - aK), aF, aI, aJ, aF, DOWN), aD))) | |
268 | 274 | } | |
269 | 275 | ||
270 | 276 | ||
271 | - | func | |
272 | - | let | |
273 | - | let | |
274 | - | let | |
275 | - | let | |
276 | - | func | |
277 | + | func bd (be,bf,bg,bh,bi,bj,bk) = { | |
278 | + | let bl = (aE - ((aE * 1) / 10000000)) | |
279 | + | let bm = (be - bf) | |
280 | + | let aZ = (bi + bg) | |
281 | + | let ba = (bj + bg) | |
282 | + | func bn (bo,bp) = if ((bo._1 == -1)) | |
277 | 283 | then { | |
278 | - | let | |
279 | - | let | |
280 | - | then | |
281 | - | else | |
282 | - | if (( | |
283 | - | then $Tuple2( | |
284 | + | let bq = (be - (((bp * bm) / 3) / aC)) | |
285 | + | let br = if ((bh == an)) | |
286 | + | then bb(aZ, (bj - bq)) | |
287 | + | else bb((bi - bq), ba) | |
288 | + | if ((br > bk)) | |
289 | + | then $Tuple2(bq, br) | |
284 | 290 | else $Tuple2(-1, 0) | |
285 | 291 | } | |
286 | - | else | |
292 | + | else bo | |
287 | 293 | ||
288 | - | let | |
289 | - | if ((0 > | |
294 | + | let bs = bn($Tuple2(-1, 0), 3000) | |
295 | + | if ((0 > bs._1)) | |
290 | 296 | then throw("Price is worse than minReceived") | |
291 | 297 | else { | |
292 | - | let | |
293 | - | then | |
294 | - | else if (( | |
295 | - | then | |
298 | + | let bt = if ((bh == an)) | |
299 | + | then bb(aZ, (bj - be)) | |
300 | + | else if ((bh == ao)) | |
301 | + | then bb((bi - be), ba) | |
296 | 302 | else throw("Wrong asset in payment") | |
297 | - | if (( | |
298 | - | then if (( | |
303 | + | if ((bk > bt)) | |
304 | + | then if ((bl >= fraction(aE, bk, bt))) | |
299 | 305 | then throw("The requested price is too not profitable for user") | |
300 | 306 | else { | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | func | |
306 | - | then | |
307 | - | else | |
307 | + | let bu = { | |
308 | + | let bv = [25, 200, 500] | |
309 | + | let bw = size(bv) | |
310 | + | let bx = $Tuple2(-1, 0) | |
311 | + | func by (bz,bA) = if ((bA >= bw)) | |
312 | + | then bz | |
313 | + | else bn(bz, bv[bA]) | |
308 | 314 | ||
309 | - | func | |
310 | - | then | |
315 | + | func bB (bz,bA) = if ((bA >= bw)) | |
316 | + | then bz | |
311 | 317 | else throw("List size exceeds 3") | |
312 | 318 | ||
313 | - | by( | |
319 | + | bB(by(by(by(bx, 0), 1), 2), 3) | |
314 | 320 | } | |
315 | - | if ((0 > | |
316 | - | then | |
317 | - | else | |
321 | + | if ((0 > bu._1)) | |
322 | + | then bs._1 | |
323 | + | else bu._1 | |
318 | 324 | } | |
319 | 325 | else { | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | func | |
325 | - | then | |
326 | - | else | |
326 | + | let bu = { | |
327 | + | let bv = [-500, -200, -25] | |
328 | + | let bw = size(bv) | |
329 | + | let bx = $Tuple2(-1, 0) | |
330 | + | func by (bz,bA) = if ((bA >= bw)) | |
331 | + | then bz | |
332 | + | else bn(bz, bv[bA]) | |
327 | 333 | ||
328 | - | func | |
329 | - | then | |
334 | + | func bB (bz,bA) = if ((bA >= bw)) | |
335 | + | then bz | |
330 | 336 | else throw("List size exceeds 3") | |
331 | 337 | ||
332 | - | by( | |
338 | + | bB(by(by(by(bx, 0), 1), 2), 3) | |
333 | 339 | } | |
334 | - | let | |
335 | - | then $Tuple2( | |
336 | - | else | |
337 | - | if (( | |
340 | + | let bC = if ((0 > bu._1)) | |
341 | + | then $Tuple2(be, bt) | |
342 | + | else bu | |
343 | + | if ((bl >= fraction(aE, bk, bC._2))) | |
338 | 344 | then throw("The requested price is too not profitable for user") | |
339 | - | else | |
345 | + | else bC._1 | |
340 | 346 | } | |
341 | 347 | } | |
342 | 348 | } | |
343 | 349 | ||
344 | 350 | ||
345 | - | func | |
346 | - | let | |
347 | - | if ($isInstanceOf( | |
351 | + | func bD (aM) = { | |
352 | + | let P = aM | |
353 | + | if ($isInstanceOf(P, "ByteVector")) | |
348 | 354 | then { | |
349 | - | let | |
350 | - | let | |
351 | - | let | |
352 | - | $Tuple3( | |
355 | + | let aq = P | |
356 | + | let bE = toBase58String(aq) | |
357 | + | let bF = valueOrErrorMessage(assetInfo(aq), (("Asset " + bE) + " doesn't exist")) | |
358 | + | $Tuple3(bE, bF.name, bF.decimals) | |
353 | 359 | } | |
354 | - | else if ($isInstanceOf( | |
360 | + | else if ($isInstanceOf(P, "Unit")) | |
355 | 361 | then { | |
356 | - | let | |
362 | + | let ar = P | |
357 | 363 | $Tuple3("WAVES", "WAVES", 8) | |
358 | 364 | } | |
359 | 365 | else throw("Match error") | |
360 | 366 | } | |
361 | 367 | ||
362 | 368 | ||
363 | - | func | |
369 | + | func bG (bH) = [BooleanEntry(c, false), StringEntry(n, bH)] | |
364 | 370 | ||
365 | 371 | ||
366 | - | func | |
372 | + | func bI () = throw("DApp is already active") | |
367 | 373 | ||
368 | 374 | ||
369 | - | func | |
370 | - | then | |
375 | + | func bJ () = if (if (ai) | |
376 | + | then aj | |
371 | 377 | else false) | |
372 | 378 | then unit | |
373 | 379 | else throw("DApp is inactive at this moment") | |
374 | 380 | ||
375 | 381 | ||
376 | - | func | |
382 | + | func bK () = if (!(ak)) | |
377 | 383 | then unit | |
378 | 384 | else throw("Pool is deprecated. Only withdraw action allowed.") | |
379 | 385 | ||
380 | 386 | ||
381 | - | func | |
387 | + | func bL (aQ) = if (containsElement([S, T, U], aQ.callerPublicKey)) | |
382 | 388 | then unit | |
383 | 389 | else throw("Only admin can call this function") | |
384 | 390 | ||
385 | 391 | ||
386 | - | func | |
392 | + | func bM (aQ) = if ((this == aQ.caller)) | |
387 | 393 | then unit | |
388 | 394 | else throw("Only contract itself can call this function") | |
389 | 395 | ||
390 | 396 | ||
391 | - | func | |
397 | + | func bN () = throw(((("Incorrect assets attached. Expected: " + al) + " and ") + am)) | |
392 | 398 | ||
393 | 399 | ||
394 | - | func | |
400 | + | func bO () = throw("One attached payment expected") | |
395 | 401 | ||
396 | 402 | ||
397 | - | func | |
403 | + | func bP () = bG(((((((((((((((("Suspicious state. Actual balances: " + toString(at)) + " ") + ap) + ", ") + toString(au)) + " ") + as) + ". State: ") + toString(aL(an))) + " ") + ap) + ", ") + toString(aL(ao))) + " ") + as)) | |
398 | 404 | ||
399 | 405 | ||
400 | - | func | |
401 | - | then $Tuple2("lockNeutrino", | |
402 | - | else $Tuple2("unlockNeutrino", | |
406 | + | func bQ (bR,aM) = if (bR) | |
407 | + | then $Tuple2("lockNeutrino", Z) | |
408 | + | else $Tuple2("unlockNeutrino", Z) | |
403 | 409 | ||
404 | 410 | ||
405 | - | func | |
411 | + | func bS (bR,bT,aM) = if (bR) | |
406 | 412 | then { | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | $Tuple4( | |
413 | + | let bU = bQ(bR, aM) | |
414 | + | let bV = bU._1 | |
415 | + | let bW = bU._2 | |
416 | + | $Tuple4(bV, bW, nil, [AttachedPayment(aM, bT)]) | |
411 | 417 | } | |
412 | 418 | else { | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
416 | - | $Tuple4( | |
419 | + | let bX = bQ(bR, aM) | |
420 | + | let bV = bX._1 | |
421 | + | let bW = bX._2 | |
422 | + | $Tuple4(bV, bW, [bT, toBase58String(aM)], nil) | |
417 | 423 | } | |
418 | 424 | ||
419 | 425 | ||
420 | - | func | |
421 | - | let | |
422 | - | let | |
423 | - | let | |
424 | - | let | |
425 | - | if (if (( | |
426 | - | then (parseIntValue( | |
426 | + | func bY (bZ) = { | |
427 | + | let ca = valueOrElse(getInteger(Y, (toString(bZ) + s)), 0) | |
428 | + | let cb = valueOrElse(getInteger(Y, (toString(bZ) + t)), ca) | |
429 | + | let cc = split(getStringValue(M, r), ",") | |
430 | + | let cd = split(getStringValue(M, q), ",") | |
431 | + | if (if ((cb >= parseIntValue(cc[0]))) | |
432 | + | then (parseIntValue(cc[1]) > cb) | |
427 | 433 | else false) | |
428 | - | then ( | |
429 | - | else if (if (( | |
430 | - | then (parseIntValue( | |
434 | + | then (aB - parseIntValue(cd[0])) | |
435 | + | else if (if ((cb >= parseIntValue(cc[1]))) | |
436 | + | then (parseIntValue(cc[2]) > cb) | |
431 | 437 | else false) | |
432 | - | then ( | |
433 | - | else if (if (( | |
434 | - | then (parseIntValue( | |
438 | + | then (aB - parseIntValue(cd[1])) | |
439 | + | else if (if ((cb >= parseIntValue(cc[2]))) | |
440 | + | then (parseIntValue(cc[3]) > cb) | |
435 | 441 | else false) | |
436 | - | then ( | |
437 | - | else if (if (( | |
438 | - | then (parseIntValue( | |
442 | + | then (aB - parseIntValue(cd[2])) | |
443 | + | else if (if ((cb >= parseIntValue(cc[3]))) | |
444 | + | then (parseIntValue(cc[4]) > cb) | |
439 | 445 | else false) | |
440 | - | then ( | |
441 | - | else if (( | |
442 | - | then ( | |
443 | - | else | |
446 | + | then (aB - parseIntValue(cd[3])) | |
447 | + | else if ((cb >= parseIntValue(cc[4]))) | |
448 | + | then (aB - parseIntValue(cd[4])) | |
449 | + | else aB | |
444 | 450 | } | |
445 | 451 | ||
446 | 452 | ||
447 | - | func | |
448 | - | let | |
449 | - | let | |
450 | - | then ( | |
453 | + | func ce (cf,cg,ch) = { | |
454 | + | let ci = getIntegerValue(this, A) | |
455 | + | let cj = if (if ((ch == an)) | |
456 | + | then (cf > cg) | |
451 | 457 | else false) | |
452 | - | then fraction( | |
453 | - | else if (if (( | |
454 | - | then ( | |
458 | + | then fraction(cf, 1, cg, CEILING) | |
459 | + | else if (if ((ch == ao)) | |
460 | + | then (cg > cf) | |
455 | 461 | else false) | |
456 | - | then fraction( | |
462 | + | then fraction(cg, 1, cf, CEILING) | |
457 | 463 | else 0 | |
458 | - | if (( | |
464 | + | if ((cj > ci)) | |
459 | 465 | then { | |
460 | - | let | |
461 | - | then $Tuple2( | |
462 | - | else $Tuple2( | |
463 | - | let | |
464 | - | let | |
465 | - | throw((((("Buying " + | |
466 | + | let ck = if ((ch == an)) | |
467 | + | then $Tuple2(as, ap) | |
468 | + | else $Tuple2(ap, as) | |
469 | + | let cl = ck._1 | |
470 | + | let cm = ck._2 | |
471 | + | throw((((("Buying " + cl) + " is temporarily unavailable due to the ") + cm) + " depeg")) | |
466 | 472 | } | |
467 | 473 | else true | |
468 | 474 | } | |
469 | 475 | ||
470 | 476 | ||
471 | - | func | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
477 | + | func cn (aQ,co,cp) = { | |
478 | + | let cq = aQ.payments[0].assetId | |
479 | + | let cr = aQ.payments[1].assetId | |
480 | + | let cs = fraction(aD, aQ.payments[0].amount, at) | |
481 | + | let ct = fraction(aD, aQ.payments[1].amount, au) | |
482 | + | let cu = bD(cq) | |
483 | + | let cv = cu._1 | |
484 | + | let cw = cu._2 | |
485 | + | let cx = cu._3 | |
486 | + | let cy = bD(cr) | |
487 | + | let cz = cy._1 | |
488 | + | let cA = cy._2 | |
489 | + | let cB = cy._3 | |
490 | + | let cC = if ((ct > cs)) | |
485 | 491 | then { | |
486 | - | let | |
487 | - | $Tuple5( | |
492 | + | let cD = fraction(au, cs, aD, CEILING) | |
493 | + | $Tuple5(aQ.payments[0].amount, cD, (aQ.payments[1].amount - cD), cr, cs) | |
488 | 494 | } | |
489 | 495 | else { | |
490 | - | let | |
491 | - | $Tuple5( | |
496 | + | let cD = fraction(at, ct, aD, CEILING) | |
497 | + | $Tuple5(cD, aQ.payments[1].amount, (aQ.payments[0].amount - cD), cq, ct) | |
492 | 498 | } | |
493 | - | let | |
494 | - | let | |
495 | - | let | |
496 | - | let | |
497 | - | let | |
498 | - | let | |
499 | - | if (if ((size( | |
500 | - | then (size( | |
499 | + | let cE = cC._1 | |
500 | + | let cF = cC._2 | |
501 | + | let cG = cC._3 | |
502 | + | let cH = cC._4 | |
503 | + | let cI = cC._5 | |
504 | + | let cJ = fraction(cI, aw, aD) | |
505 | + | if (if ((size(aQ.payments) != 2)) | |
506 | + | then (size(aQ.payments) != 3) | |
501 | 507 | else false) | |
502 | 508 | then throw("Two or three payments expected") | |
503 | - | else if (if (( | |
509 | + | else if (if ((cq != an)) | |
504 | 510 | then true | |
505 | - | else ( | |
506 | - | then | |
507 | - | else if (( | |
511 | + | else (cr != ao)) | |
512 | + | then bN() | |
513 | + | else if ((cJ == 0)) | |
508 | 514 | then throw("Too small amount to replenish") | |
509 | - | else if ((0 > | |
515 | + | else if ((0 > cG)) | |
510 | 516 | then throw("Change < 0") | |
511 | - | else if (!( | |
512 | - | then ([ScriptTransfer( | |
517 | + | else if (!(aX)) | |
518 | + | then ([ScriptTransfer(aQ.caller, cE, cq), ScriptTransfer(aQ.caller, cF, cr)] ++ bP()) | |
513 | 519 | else { | |
514 | - | let | |
515 | - | then invoke(this, "stakeUnstake", [true, | |
520 | + | let cK = if (contains(ad, cv)) | |
521 | + | then invoke(this, "stakeUnstake", [true, cE, cv], nil) | |
516 | 522 | else 0 | |
517 | - | if (( | |
523 | + | if ((cK == cK)) | |
518 | 524 | then { | |
519 | - | let | |
520 | - | then invoke(this, "stakeUnstake", [true, | |
525 | + | let cL = if (contains(ad, cz)) | |
526 | + | then invoke(this, "stakeUnstake", [true, cF, cz], nil) | |
521 | 527 | else 0 | |
522 | - | if (( | |
528 | + | if ((cL == cL)) | |
523 | 529 | then { | |
524 | - | let | |
525 | - | if ( | |
530 | + | let cM = [IntegerEntry(h, (at + cE)), IntegerEntry(i, (au + cF)), IntegerEntry(k, (aw + cJ)), IntegerEntry(m, bb((at + cE), (au + cF))), ScriptTransfer(aQ.caller, cG, cH)] | |
531 | + | if (co) | |
526 | 532 | then { | |
527 | - | let | |
528 | - | then [AttachedPayment(if (( | |
533 | + | let cN = ([AttachedPayment(av, cJ)] ++ (if ((size(aQ.payments) == 3)) | |
534 | + | then [AttachedPayment(if ((aQ.payments[2].assetId == base58'')) | |
529 | 535 | then unit | |
530 | - | else | |
536 | + | else aQ.payments[2].assetId, aQ.payments[2].amount)] | |
531 | 537 | else nil)) | |
532 | - | let | |
533 | - | if (( | |
538 | + | let cO = invoke(this, "reissueShare", [cJ], nil) | |
539 | + | if ((cO == cO)) | |
534 | 540 | then { | |
535 | - | let | |
536 | - | if (( | |
537 | - | then | |
541 | + | let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN) | |
542 | + | if ((cP == cP)) | |
543 | + | then cM | |
538 | 544 | else throw("Strict value is not equal to itself.") | |
539 | 545 | } | |
540 | 546 | else throw("Strict value is not equal to itself.") | |
541 | 547 | } | |
542 | - | else ( | |
548 | + | else (cM ++ [Reissue(av, cJ, true), ScriptTransfer(aQ.caller, cJ, av)]) | |
543 | 549 | } | |
544 | 550 | else throw("Strict value is not equal to itself.") | |
545 | 551 | } | |
546 | 552 | else throw("Strict value is not equal to itself.") | |
547 | 553 | } | |
548 | 554 | } | |
549 | 555 | ||
550 | 556 | ||
551 | - | func | |
552 | - | let | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | let | |
557 | + | func cQ (aQ,cR,cS,co,cp) = { | |
558 | + | let cT = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
559 | + | let cU = cT._1 | |
560 | + | let ch = cT._2 | |
561 | + | let cV = bD(ch) | |
562 | + | let cW = cV._1 | |
563 | + | let cX = cV._2 | |
564 | + | let cY = cV._3 | |
565 | + | let cZ = 5000000 | |
566 | + | let da = 50000000 | |
567 | + | let db = if ((da > cU)) | |
562 | 568 | then 100000 | |
563 | 569 | else 1 | |
564 | - | let | |
565 | - | let | |
566 | - | let | |
567 | - | if (( | |
568 | - | then throw((((("Payment amount " + toString( | |
569 | - | else if (if ((size( | |
570 | - | then (size( | |
570 | + | let dc = (aD - ((aD * db) / 10000000)) | |
571 | + | let dd = (aD + ((aD * db) / 10000000)) | |
572 | + | let de = (aD - ((aD * 1) / 10000000)) | |
573 | + | if ((cZ > cU)) | |
574 | + | then throw((((("Payment amount " + toString(cU)) + " does not exceed the minimum amount of ") + toString(cZ)) + " tokens")) | |
575 | + | else if (if ((size(aQ.payments) != 1)) | |
576 | + | then (size(aQ.payments) != 2) | |
571 | 577 | else false) | |
572 | 578 | then throw("One or two payments expected") | |
573 | - | else if (!( | |
574 | - | then ([ScriptTransfer( | |
575 | - | else if (if (( | |
576 | - | then ( | |
579 | + | else if (!(aX)) | |
580 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
581 | + | else if (if ((ch != an)) | |
582 | + | then (ch != ao) | |
577 | 583 | else false) | |
578 | - | then | |
584 | + | then bN() | |
579 | 585 | else { | |
580 | - | let | |
581 | - | then $Tuple6(( | |
582 | - | else $Tuple6( | |
583 | - | let | |
584 | - | let | |
585 | - | let | |
586 | - | let | |
587 | - | let | |
588 | - | let | |
589 | - | let | |
590 | - | let | |
591 | - | if (if (( | |
586 | + | let df = if ((ch == an)) | |
587 | + | then $Tuple6((cU - cR), cS, (at + cR), (au - cS), (at + cU), au) | |
588 | + | else $Tuple6(cS, (cU - cR), (at - cS), (au + cR), at, (au + cU)) | |
589 | + | let dg = df._1 | |
590 | + | let dh = df._2 | |
591 | + | let di = df._3 | |
592 | + | let dj = df._4 | |
593 | + | let cf = df._5 | |
594 | + | let cg = df._6 | |
595 | + | let dk = bb(di, dj) | |
596 | + | let dl = (fraction(aE, di, dj) / fraction(aD, dg, dh)) | |
597 | + | if (if ((de >= fraction(aD, ax, dk))) | |
592 | 598 | then true | |
593 | - | else ( | |
599 | + | else (ax > dk)) | |
594 | 600 | then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
595 | - | else if (if (( | |
601 | + | else if (if ((dc > dl)) | |
596 | 602 | then true | |
597 | - | else ( | |
603 | + | else (dl > dd)) | |
598 | 604 | then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect") | |
599 | - | else if (!( | |
605 | + | else if (!(ce(cf, cg, ch))) | |
600 | 606 | then throw() | |
601 | 607 | else { | |
602 | - | let cp = fraction(dd, aA, df) | |
603 | - | let cq = fraction(de, aA, dg) | |
604 | - | let cG = fraction(min([cp, cq]), au, aA) | |
605 | - | let dj = fraction(cG, (ay - (aw / 2)), ay) | |
606 | - | let dk = fraction(cG, (ax / 2), ay) | |
607 | - | let dl = fraction(dk, ar, au) | |
608 | - | let dm = fraction(dk, as, au) | |
609 | - | let dn = if ((cT == aj)) | |
610 | - | then $Tuple3((cR - dl), dm, ak) | |
611 | - | else $Tuple3((cR - dm), dl, aj) | |
612 | - | let do = dn._1 | |
613 | - | let dp = dn._2 | |
614 | - | let dq = dn._3 | |
615 | - | let cH = if (contains(ab, cT)) | |
616 | - | then invoke(this, "stakeUnstake", [true, do, cT], nil) | |
608 | + | let cs = fraction(dg, aD, di) | |
609 | + | let ct = fraction(dh, aD, dj) | |
610 | + | let cJ = fraction(min([cs, ct]), aw, aD) | |
611 | + | let dm = fraction(cJ, (aB - (ay / 2)), aB) | |
612 | + | let dn = fraction(cJ, (az / 2), aB) | |
613 | + | let do = fraction(cJ, (aA / 2), aB) | |
614 | + | let dp = fraction(dn, at, aw) | |
615 | + | let dq = fraction(dn, au, aw) | |
616 | + | let dr = fraction(do, at, aw) | |
617 | + | let ds = fraction(do, au, aw) | |
618 | + | let dt = if ((cW == al)) | |
619 | + | then $Tuple3(((cU - dp) - dr), (dq + ds), am) | |
620 | + | else $Tuple3(((cU - dq) - ds), (dp + dr), al) | |
621 | + | let du = dt._1 | |
622 | + | let dv = dt._2 | |
623 | + | let dw = dt._3 | |
624 | + | let cK = if (contains(ad, cW)) | |
625 | + | then invoke(this, "stakeUnstake", [true, du, cW], nil) | |
617 | 626 | else 0 | |
618 | - | if (( | |
627 | + | if ((cK == cK)) | |
619 | 628 | then { | |
620 | - | let | |
621 | - | then invoke(this, "stakeUnstake", [false, | |
629 | + | let cL = if (contains(ad, dw)) | |
630 | + | then invoke(this, "stakeUnstake", [false, dv, dw], nil) | |
622 | 631 | else 0 | |
623 | - | if (( | |
632 | + | if ((cL == cL)) | |
624 | 633 | then { | |
625 | - | let | |
626 | - | if ( | |
634 | + | let cM = [IntegerEntry(h, ((cf - dp) - dr)), IntegerEntry(i, ((cg - dq) - ds)), IntegerEntry(k, (aw + dm)), IntegerEntry(m, bb((cf - dp), (cg - dq))), ScriptTransfer(W, dp, an), ScriptTransfer(W, dq, ao), ScriptTransfer(X, dr, an), ScriptTransfer(X, ds, ao)] | |
635 | + | if (co) | |
627 | 636 | then { | |
628 | - | let | |
629 | - | then [AttachedPayment(if (( | |
637 | + | let cN = ([AttachedPayment(av, dm)] ++ (if ((size(aQ.payments) == 2)) | |
638 | + | then [AttachedPayment(if ((aQ.payments[1].assetId == base58'')) | |
630 | 639 | then unit | |
631 | - | else | |
640 | + | else aQ.payments[1].assetId, aQ.payments[1].amount)] | |
632 | 641 | else nil)) | |
633 | - | let | |
634 | - | if (( | |
642 | + | let cO = invoke(this, "reissueShare", [dm], nil) | |
643 | + | if ((cO == cO)) | |
635 | 644 | then { | |
636 | - | let | |
637 | - | if (( | |
638 | - | then | |
645 | + | let cP = invoke(ab, "lockShareTokensFromPool", [aQ.caller.bytes, toString(this), cp], cN) | |
646 | + | if ((cP == cP)) | |
647 | + | then cM | |
639 | 648 | else throw("Strict value is not equal to itself.") | |
640 | 649 | } | |
641 | 650 | else throw("Strict value is not equal to itself.") | |
642 | 651 | } | |
643 | - | else ( | |
652 | + | else (cM ++ [Reissue(av, dm, true), ScriptTransfer(aQ.caller, dm, av)]) | |
644 | 653 | } | |
645 | 654 | else throw("Strict value is not equal to itself.") | |
646 | 655 | } | |
647 | 656 | else throw("Strict value is not equal to itself.") | |
648 | 657 | } | |
649 | 658 | } | |
650 | 659 | } | |
651 | 660 | ||
652 | 661 | ||
653 | - | func | |
654 | - | let | |
655 | - | then if (( | |
656 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String( | |
657 | - | else $Tuple2( | |
658 | - | else $Tuple2(0, | |
659 | - | let | |
660 | - | let | |
661 | - | if (!( | |
662 | - | then ([ScriptTransfer( | |
662 | + | func dx (aQ,dy) = { | |
663 | + | let dz = if ((size(aQ.payments) == 1)) | |
664 | + | then if ((aQ.payments[0].assetId != av)) | |
665 | + | then throw(("Incorrect asset attached. Expected: " + toBase58String(av))) | |
666 | + | else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
667 | + | else $Tuple2(0, av) | |
668 | + | let cU = dz._1 | |
669 | + | let ch = dz._2 | |
670 | + | if (!(aX)) | |
671 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
663 | 672 | else { | |
664 | - | let | |
665 | - | then invoke( | |
673 | + | let dA = if ((dy > 0)) | |
674 | + | then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil) | |
666 | 675 | else 0 | |
667 | - | if (( | |
676 | + | if ((dA == dA)) | |
668 | 677 | then { | |
669 | - | let | |
670 | - | let | |
671 | - | let | |
672 | - | let | |
673 | - | let | |
674 | - | then invoke(this, "stakeUnstake", [false, | |
678 | + | let dB = (cU + dy) | |
679 | + | let dC = fraction(dB, at, aw) | |
680 | + | let dD = fraction(dB, au, aw) | |
681 | + | let dE = bb((at - dC), (au - dD)) | |
682 | + | let cK = if (contains(ad, al)) | |
683 | + | then invoke(this, "stakeUnstake", [false, dC, al], nil) | |
675 | 684 | else 0 | |
676 | - | if (( | |
685 | + | if ((cK == cK)) | |
677 | 686 | then { | |
678 | - | let | |
679 | - | then invoke(this, "stakeUnstake", [false, | |
687 | + | let cL = if (contains(ad, am)) | |
688 | + | then invoke(this, "stakeUnstake", [false, dD, am], nil) | |
680 | 689 | else 0 | |
681 | - | if (( | |
682 | - | then [IntegerEntry(h, ( | |
690 | + | if ((cL == cL)) | |
691 | + | then [IntegerEntry(h, (at - dC)), IntegerEntry(i, (au - dD)), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, dC, an), ScriptTransfer(aQ.caller, dD, ao)] | |
683 | 692 | else throw("Strict value is not equal to itself.") | |
684 | 693 | } | |
685 | 694 | else throw("Strict value is not equal to itself.") | |
686 | 695 | } | |
687 | 696 | else throw("Strict value is not equal to itself.") | |
688 | 697 | } | |
689 | 698 | } | |
690 | 699 | ||
691 | 700 | ||
692 | - | @Callable( | |
693 | - | func init ( | |
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | let | |
705 | - | let | |
706 | - | let | |
707 | - | let | |
701 | + | @Callable(aQ) | |
702 | + | func init (dF) = { | |
703 | + | let dG = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
704 | + | let cE = dG._1 | |
705 | + | let cq = dG._2 | |
706 | + | let dH = $Tuple2(aQ.payments[1].amount, aQ.payments[1].assetId) | |
707 | + | let cF = dH._1 | |
708 | + | let cr = dH._2 | |
709 | + | let dI = bD(cq) | |
710 | + | let cv = dI._1 | |
711 | + | let cw = dI._2 | |
712 | + | let cx = dI._3 | |
713 | + | let dJ = bD(cr) | |
714 | + | let cz = dJ._1 | |
715 | + | let cA = dJ._2 | |
716 | + | let cB = dJ._3 | |
708 | 717 | if (isDefined(getBoolean(this, c))) | |
709 | - | then | |
710 | - | else if (( | |
718 | + | then bI() | |
719 | + | else if ((cq == cr)) | |
711 | 720 | then throw("Assets must be different") | |
712 | 721 | else { | |
713 | - | let | |
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | let | |
721 | - | then invoke(this, "stakeUnstake", [true, | |
722 | + | let dK = ((("s" + take(cw, 7)) + "_") + take(cA, 7)) | |
723 | + | let dL = ((((("ShareToken of SwopFi protocol for " + cw) + " and ") + cA) + " at address ") + toString(this)) | |
724 | + | let dM = ((cx + cB) / 2) | |
725 | + | let dN = fraction(pow(cE, cx, 5, 1, cx, DOWN), pow(cF, cB, 5, 1, cB, DOWN), pow(10, 0, dM, 0, 0, DOWN)) | |
726 | + | let dO = Issue(dK, dL, dN, dM, true) | |
727 | + | let dP = calculateAssetId(dO) | |
728 | + | let dE = bb(cE, cF) | |
729 | + | let cK = if (contains(ad, cv)) | |
730 | + | then invoke(this, "stakeUnstake", [true, cE, cv], nil) | |
722 | 731 | else 0 | |
723 | - | if (( | |
732 | + | if ((cK == cK)) | |
724 | 733 | then { | |
725 | - | let | |
726 | - | then invoke(this, "stakeUnstake", [true, | |
734 | + | let cL = if (contains(ad, cz)) | |
735 | + | then invoke(this, "stakeUnstake", [true, cF, cz], nil) | |
727 | 736 | else 0 | |
728 | - | if (( | |
737 | + | if ((cL == cL)) | |
729 | 738 | then { | |
730 | - | let | |
731 | - | if ( | |
732 | - | then ( | |
733 | - | else | |
739 | + | let dQ = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cv), StringEntry(g, cz), IntegerEntry(h, cE), IntegerEntry(i, cF), IntegerEntry(m, dE), IntegerEntry(l, getIntegerValue(M, "base_fee_flat")), IntegerEntry(A, 3), dO, StringEntry(j, toBase58String(dP)), IntegerEntry(k, dN), ScriptTransfer(aQ.caller, dN, dP)] | |
740 | + | if (dF) | |
741 | + | then (dQ ++ [BooleanEntry(u, dF), IntegerEntry(v, (af + (ah * ag)))]) | |
742 | + | else dQ | |
734 | 743 | } | |
735 | 744 | else throw("Strict value is not equal to itself.") | |
736 | 745 | } | |
737 | 746 | else throw("Strict value is not equal to itself.") | |
738 | 747 | } | |
739 | 748 | } | |
740 | 749 | ||
741 | 750 | ||
742 | 751 | ||
743 | - | @Callable( | |
744 | - | func replenishWithTwoTokensV2 ( | |
752 | + | @Callable(aQ) | |
753 | + | func replenishWithTwoTokensV2 (co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, co, cp))) | |
745 | 754 | ||
746 | 755 | ||
747 | 756 | ||
748 | - | @Callable( | |
749 | - | func replenishWithOneTokenV2 ( | |
757 | + | @Callable(aQ) | |
758 | + | func replenishWithOneTokenV2 (cR,cS,co,cp) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, co, cp))) | |
750 | 759 | ||
751 | 760 | ||
752 | 761 | ||
753 | - | @Callable( | |
754 | - | func withdrawV2 ( | |
762 | + | @Callable(aQ) | |
763 | + | func withdrawV2 (dy) = valueOrElse(bJ(), dx(aQ, dy)) | |
755 | 764 | ||
756 | 765 | ||
757 | 766 | ||
758 | - | @Callable( | |
759 | - | func withdrawOneToken ( | |
760 | - | let | |
761 | - | then if (( | |
762 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String( | |
763 | - | else $Tuple2( | |
764 | - | else $Tuple2(0, | |
765 | - | let | |
766 | - | let | |
767 | - | let | |
768 | - | if (if (( | |
769 | - | then ( | |
767 | + | @Callable(aQ) | |
768 | + | func withdrawOneToken (dy,dR,dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), { | |
769 | + | let dU = if ((size(aQ.payments) == 1)) | |
770 | + | then if ((aQ.payments[0].assetId != av)) | |
771 | + | then throw(("Incorrect asset attached. Expected: " + toBase58String(av))) | |
772 | + | else $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
773 | + | else $Tuple2(0, av) | |
774 | + | let cU = dU._1 | |
775 | + | let ch = dU._2 | |
776 | + | let dB = (cU + dy) | |
777 | + | if (if ((dR != al)) | |
778 | + | then (dR != am) | |
770 | 779 | else false) | |
771 | 780 | then throw("Incorrect withdraw asset") | |
772 | - | else if ((0 >= | |
781 | + | else if ((0 >= dB)) | |
773 | 782 | then throw("withdraw amount must be grater than 0") | |
774 | - | else if (!( | |
775 | - | then ([ScriptTransfer( | |
783 | + | else if (!(aX)) | |
784 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
776 | 785 | else { | |
777 | - | let | |
778 | - | then invoke( | |
786 | + | let dA = if ((dy > 0)) | |
787 | + | then invoke(ab, "withdrawShareTokensFromPool", [aQ.caller.bytes, toString(this), dy], nil) | |
779 | 788 | else 0 | |
780 | - | if (( | |
789 | + | if ((dA == dA)) | |
781 | 790 | then { | |
782 | - | let dw = fraction(dv, ar, au) | |
783 | - | let dx = fraction(dv, as, au) | |
784 | - | let dP = (ar - dw) | |
785 | - | let dQ = (as - dx) | |
786 | - | let dR = bV(aN.originCaller) | |
787 | - | let dS = if ((dL == aj)) | |
788 | - | then ba(dM, dN, dx, am, dP, dQ, aY(dP, dQ)) | |
789 | - | else ba(dM, dN, dw, al, dP, dQ, aY(dP, dQ)) | |
790 | - | let dT = fraction(dS, fraction(ax, dR, ay, CEILING), ay) | |
791 | - | let dU = fraction(dS, (ay - fraction(aw, dR, ay, CEILING)), ay) | |
792 | - | let dV = if ((dL == aj)) | |
793 | - | then $Tuple4((dw + dU), (((ar - dw) - dU) - dT), as, am) | |
794 | - | else $Tuple4((dx + dU), ar, (((as - dx) - dU) - dT), al) | |
795 | - | let dW = dV._1 | |
796 | - | let dX = dV._2 | |
797 | - | let dY = dV._3 | |
798 | - | let dZ = dV._4 | |
799 | - | if (!(cb(dX, dY, dZ))) | |
791 | + | let dC = fraction(dB, at, aw) | |
792 | + | let dD = fraction(dB, au, aw) | |
793 | + | let dV = (at - dC) | |
794 | + | let dW = (au - dD) | |
795 | + | let dX = bY(aQ.originCaller) | |
796 | + | let dY = if ((dR == al)) | |
797 | + | then bd(dS, dT, dD, ao, dV, dW, bb(dV, dW)) | |
798 | + | else bd(dS, dT, dC, an, dV, dW, bb(dV, dW)) | |
799 | + | let dZ = fraction(dY, fraction(az, dX, aB, CEILING), aB) | |
800 | + | let ea = fraction(dY, fraction(aA, dX, aB, CEILING), aB) | |
801 | + | let eb = fraction(dY, (aB - fraction(ay, dX, aB, CEILING)), aB) | |
802 | + | let ec = if ((dR == al)) | |
803 | + | then $Tuple4((dC + eb), ((((at - dC) - eb) - dZ) - ea), au, ao) | |
804 | + | else $Tuple4((dD + eb), at, ((((au - dD) - eb) - dZ) - ea), an) | |
805 | + | let ed = ec._1 | |
806 | + | let ee = ec._2 | |
807 | + | let ef = ec._3 | |
808 | + | let eg = ec._4 | |
809 | + | if (!(ce(ee, ef, eg))) | |
800 | 810 | then throw() | |
801 | 811 | else { | |
802 | - | let | |
803 | - | let | |
804 | - | then invoke(this, "stakeUnstake", [false, ( | |
812 | + | let dE = bb(ee, ef) | |
813 | + | let cK = if (contains(ad, dR)) | |
814 | + | then invoke(this, "stakeUnstake", [false, ((ed + dZ) + ea), dR], nil) | |
805 | 815 | else 0 | |
806 | - | if (( | |
807 | - | then [IntegerEntry(h, | |
816 | + | if ((cK == cK)) | |
817 | + | then [IntegerEntry(h, ee), IntegerEntry(i, ef), IntegerEntry(k, (aw - dB)), IntegerEntry(m, dE), Burn(av, dB), ScriptTransfer(aQ.caller, ed, fromBase58String(dR)), ScriptTransfer(W, dZ, fromBase58String(dR)), ScriptTransfer(X, ea, fromBase58String(dR))] | |
808 | 818 | else throw("Strict value is not equal to itself.") | |
809 | 819 | } | |
810 | 820 | } | |
811 | 821 | else throw("Strict value is not equal to itself.") | |
812 | 822 | } | |
813 | 823 | })) | |
814 | 824 | ||
815 | 825 | ||
816 | 826 | ||
817 | - | @Callable( | |
818 | - | func exchange ( | |
819 | - | let | |
820 | - | let | |
821 | - | let | |
822 | - | if ((0 >= | |
823 | - | then throw(("Estimated amount must be positive. Actual: " + toString( | |
824 | - | else if (( | |
827 | + | @Callable(aQ) | |
828 | + | func exchange (dS,dT) = valueOrElse(bJ(), valueOrElse(bK(), { | |
829 | + | let eh = $Tuple2(aQ.payments[0].amount, aQ.payments[0].assetId) | |
830 | + | let cU = eh._1 | |
831 | + | let ch = eh._2 | |
832 | + | if ((0 >= dS)) | |
833 | + | then throw(("Estimated amount must be positive. Actual: " + toString(dS))) | |
834 | + | else if ((dT > dS)) | |
825 | 835 | then throw("Minimal amount can't be greater than estimated.") | |
826 | - | else if ((size( | |
827 | - | then | |
828 | - | else if (!( | |
829 | - | then ([ScriptTransfer( | |
830 | - | else if (if (( | |
831 | - | then ( | |
836 | + | else if ((size(aQ.payments) != 1)) | |
837 | + | then bO() | |
838 | + | else if (!(aX)) | |
839 | + | then ([ScriptTransfer(aQ.caller, cU, ch)] ++ bP()) | |
840 | + | else if (if ((ch != an)) | |
841 | + | then (ch != ao) | |
832 | 842 | else false) | |
833 | - | then | |
834 | - | else if ((10000000 > | |
843 | + | then bN() | |
844 | + | else if ((10000000 > cU)) | |
835 | 845 | then throw("Only swap of 10.000000 or more tokens is allowed") | |
836 | - | else if (if (( | |
846 | + | else if (if ((aG > fraction(aD, dT, cU))) | |
837 | 847 | then true | |
838 | - | else (fraction( | |
848 | + | else (fraction(aD, dS, cU) > aH)) | |
839 | 849 | then throw("Incorrect args and pmt ratio") | |
840 | 850 | else { | |
841 | - | let eb = if ((ce == al)) | |
842 | - | then am | |
843 | - | else al | |
844 | - | let bQ = ba(dM, dN, cR, ce, ar, as, av) | |
845 | - | let dR = bV(aN.originCaller) | |
846 | - | let ec = fraction(bQ, fraction(ax, dR, ay, CEILING), ay) | |
847 | - | let ed = fraction(bQ, (ay - fraction(aw, dR, ay, CEILING)), ay) | |
848 | - | let ee = if ((ce == al)) | |
849 | - | then $Tuple2((ar + cR), ((as - ed) - ec)) | |
850 | - | else $Tuple2(((ar - ed) - ec), (as + cR)) | |
851 | - | let cc = ee._1 | |
852 | - | let cd = ee._2 | |
853 | - | if (!(cb(cc, cd, ce))) | |
851 | + | let ei = if ((ch == an)) | |
852 | + | then ao | |
853 | + | else an | |
854 | + | let bT = bd(dS, dT, cU, ch, at, au, ax) | |
855 | + | let dX = bY(aQ.originCaller) | |
856 | + | let ej = fraction(bT, fraction(az, dX, aB, CEILING), aB) | |
857 | + | let ea = fraction(bT, fraction(aA, dX, aB, CEILING), aB) | |
858 | + | let ek = fraction(bT, (aB - fraction(ay, dX, aB, CEILING)), aB) | |
859 | + | let el = if ((ch == an)) | |
860 | + | then $Tuple2((at + cU), (((au - ek) - ej) - ea)) | |
861 | + | else $Tuple2((((at - ek) - ej) - ea), (au + cU)) | |
862 | + | let cf = el._1 | |
863 | + | let cg = el._2 | |
864 | + | if (!(ce(cf, cg, ch))) | |
854 | 865 | then throw() | |
855 | 866 | else { | |
856 | - | let | |
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
863 | - | let | |
864 | - | let | |
865 | - | then invoke(this, "stakeUnstake", [true, | |
867 | + | let em = bD(ch) | |
868 | + | let cW = em._1 | |
869 | + | let cX = em._2 | |
870 | + | let cY = em._3 | |
871 | + | let en = bD(ei) | |
872 | + | let eo = en._1 | |
873 | + | let ep = en._2 | |
874 | + | let eq = en._3 | |
875 | + | let cK = if (contains(ad, cW)) | |
876 | + | then invoke(this, "stakeUnstake", [true, cU, cW], nil) | |
866 | 877 | else 0 | |
867 | - | if (( | |
878 | + | if ((cK == cK)) | |
868 | 879 | then { | |
869 | - | let | |
870 | - | then invoke(this, "stakeUnstake", [false, ( | |
880 | + | let cL = if (contains(ad, eo)) | |
881 | + | then invoke(this, "stakeUnstake", [false, ((ek + ej) + ea), eo], nil) | |
871 | 882 | else 0 | |
872 | - | if (( | |
873 | - | then $Tuple2([IntegerEntry(h, | |
883 | + | if ((cL == cL)) | |
884 | + | then $Tuple2([IntegerEntry(h, cf), IntegerEntry(i, cg), IntegerEntry(m, bb(cf, cg)), ScriptTransfer(aQ.caller, ek, ei), ScriptTransfer(W, ej, ei), ScriptTransfer(X, ea, ei)], [ek, ei]) | |
874 | 885 | else throw("Strict value is not equal to itself.") | |
875 | 886 | } | |
876 | 887 | else throw("Strict value is not equal to itself.") | |
877 | 888 | } | |
878 | 889 | } | |
879 | 890 | })) | |
880 | 891 | ||
881 | 892 | ||
882 | 893 | ||
883 | - | @Callable( | |
884 | - | func reissueShare ( | |
894 | + | @Callable(er) | |
895 | + | func reissueShare (bT) = valueOrElse(bM(er), [Reissue(av, bT, true)]) | |
885 | 896 | ||
886 | 897 | ||
887 | 898 | ||
888 | - | @Callable( | |
889 | - | func shutdown () = valueOrElse( | |
899 | + | @Callable(aQ) | |
900 | + | func shutdown () = valueOrElse(bL(aQ), if (!(ai)) | |
890 | 901 | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified"))) | |
891 | - | else | |
902 | + | else bG("Paused by admin")) | |
892 | 903 | ||
893 | 904 | ||
894 | 905 | ||
895 | - | @Callable( | |
896 | - | func activate () = valueOrElse( | |
897 | - | then | |
906 | + | @Callable(aQ) | |
907 | + | func activate () = valueOrElse(bL(aQ), if (ai) | |
908 | + | then bI() | |
898 | 909 | else [BooleanEntry(c, true), DeleteEntry(n)]) | |
899 | 910 | ||
900 | 911 | ||
901 | 912 | ||
902 | - | @Callable( | |
903 | - | func takeIntoAccountExtraFunds () = valueOrElse( | |
904 | - | let | |
913 | + | @Callable(aQ) | |
914 | + | func takeIntoAccountExtraFunds () = valueOrElse(bJ(), { | |
915 | + | let es = if (if ((an == ac)) | |
905 | 916 | then true | |
906 | - | else ( | |
907 | - | then invoke( | |
917 | + | else (ao == ac)) | |
918 | + | then invoke(Z, "claimRewards", nil, nil) | |
908 | 919 | else 0 | |
909 | - | if (( | |
920 | + | if ((es == es)) | |
910 | 921 | then { | |
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | if (( | |
922 | + | let et = (aV - at) | |
923 | + | let eu = (aW - au) | |
924 | + | let dk = bb((at + et), (au + eu)) | |
925 | + | if ((aQ.caller != W)) | |
915 | 926 | then throw("Only the money box can call this function") | |
916 | - | else if (if ((0 > | |
927 | + | else if (if ((0 > et)) | |
917 | 928 | then true | |
918 | - | else (0 > | |
919 | - | then | |
920 | - | else if (if (( | |
921 | - | then ( | |
929 | + | else (0 > eu)) | |
930 | + | then bG("Enroll amount negative") | |
931 | + | else if (if ((et == 0)) | |
932 | + | then (eu == 0) | |
922 | 933 | else false) | |
923 | 934 | then throw("No money to take") | |
924 | 935 | else { | |
925 | - | let | |
926 | - | then ( | |
936 | + | let cK = if (if (contains(ad, al)) | |
937 | + | then (et > 0) | |
927 | 938 | else false) | |
928 | - | then invoke(this, "stakeUnstake", [true, | |
939 | + | then invoke(this, "stakeUnstake", [true, et, al], nil) | |
929 | 940 | else 0 | |
930 | - | if (( | |
941 | + | if ((cK == cK)) | |
931 | 942 | then { | |
932 | - | let | |
933 | - | then ( | |
943 | + | let cL = if (if (contains(ad, am)) | |
944 | + | then (eu > 0) | |
934 | 945 | else false) | |
935 | - | then invoke(this, "stakeUnstake", [true, | |
946 | + | then invoke(this, "stakeUnstake", [true, eu, am], nil) | |
936 | 947 | else 0 | |
937 | - | if (( | |
938 | - | then [IntegerEntry(m, | |
948 | + | if ((cL == cL)) | |
949 | + | then [IntegerEntry(m, dk), IntegerEntry(h, (at + et)), IntegerEntry(i, (au + eu))] | |
939 | 950 | else throw("Strict value is not equal to itself.") | |
940 | 951 | } | |
941 | 952 | else throw("Strict value is not equal to itself.") | |
942 | 953 | } | |
943 | 954 | } | |
944 | 955 | else throw("Strict value is not equal to itself.") | |
945 | 956 | }) | |
946 | 957 | ||
947 | 958 | ||
948 | 959 | ||
949 | - | @Callable( | |
950 | - | func keepLimitForFirstHarvest ( | |
960 | + | @Callable(aQ) | |
961 | + | func keepLimitForFirstHarvest (ev) = valueOrElse(bJ(), valueOrElse(bL(aQ), [IntegerEntry(w, ev)])) | |
951 | 962 | ||
952 | 963 | ||
953 | 964 | ||
954 | - | @Callable( | |
955 | - | func stakeUnstake ( | |
965 | + | @Callable(aQ) | |
966 | + | func stakeUnstake (bR,bT,ew) = if ((aQ.caller != this)) | |
956 | 967 | then throw("Only contract itself can invoke this function") | |
957 | 968 | else { | |
958 | - | let | |
959 | - | let | |
960 | - | let | |
961 | - | let | |
962 | - | let | |
963 | - | let | |
964 | - | if (( | |
969 | + | let ex = bS(bR, bT, fromBase58String(ew)) | |
970 | + | let bV = ex._1 | |
971 | + | let ey = ex._2 | |
972 | + | let ez = ex._3 | |
973 | + | let eA = ex._4 | |
974 | + | let eB = invoke(ey, bV, ez, eA) | |
975 | + | if ((eB == eB)) | |
965 | 976 | then nil | |
966 | 977 | else throw("Strict value is not equal to itself.") | |
967 | 978 | } | |
968 | 979 | ||
969 | 980 | ||
970 | 981 | ||
971 | - | @Callable( | |
972 | - | func replenishWithTwoTokens () = valueOrElse( | |
982 | + | @Callable(aQ) | |
983 | + | func replenishWithTwoTokens () = valueOrElse(bJ(), valueOrElse(bK(), cn(aQ, false, 0))) | |
973 | 984 | ||
974 | 985 | ||
975 | 986 | ||
976 | - | @Callable( | |
977 | - | func replenishWithOneToken ( | |
987 | + | @Callable(aQ) | |
988 | + | func replenishWithOneToken (cR,cS) = valueOrElse(bJ(), valueOrElse(bK(), cQ(aQ, cR, cS, false, 0))) | |
978 | 989 | ||
979 | 990 | ||
980 | 991 | ||
981 | - | @Callable( | |
982 | - | func withdraw () = valueOrElse( | |
992 | + | @Callable(aQ) | |
993 | + | func withdraw () = valueOrElse(bJ(), dx(aQ, 0)) | |
983 | 994 | ||
984 | 995 | ||
985 | - | @Verifier( | |
986 | - | func | |
987 | - | let | |
988 | - | let | |
996 | + | @Verifier(eC) | |
997 | + | func eD () = { | |
998 | + | let eE = { | |
999 | + | let eF = if (sigVerify(eC.bodyBytes, eC.proofs[0], S)) | |
989 | 1000 | then 1 | |
990 | 1001 | else 0 | |
991 | - | let | |
1002 | + | let eG = if (sigVerify(eC.bodyBytes, eC.proofs[1], T)) | |
992 | 1003 | then 1 | |
993 | 1004 | else 0 | |
994 | - | let | |
1005 | + | let eH = if (sigVerify(eC.bodyBytes, eC.proofs[2], U)) | |
995 | 1006 | then 1 | |
996 | 1007 | else 0 | |
997 | - | ((( | |
1008 | + | (((eF + eG) + eH) >= 2) | |
998 | 1009 | } | |
999 | - | let | |
1000 | - | if ($isInstanceOf( | |
1010 | + | let P = eC | |
1011 | + | if ($isInstanceOf(P, "InvokeScriptTransaction")) | |
1001 | 1012 | then { | |
1002 | - | let | |
1003 | - | let | |
1004 | - | then ( | |
1013 | + | let eB = P | |
1014 | + | let eI = if ((eB.dApp == this)) | |
1015 | + | then (eB.function == "takeIntoAccountExtraFunds") | |
1005 | 1016 | else false | |
1006 | - | let | |
1017 | + | let eJ = if (if (if (sigVerify(eC.bodyBytes, eC.proofs[0], S)) | |
1007 | 1018 | then true | |
1008 | - | else sigVerify( | |
1019 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], T)) | |
1009 | 1020 | then true | |
1010 | - | else sigVerify( | |
1021 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], U)) | |
1011 | 1022 | then true | |
1012 | - | else sigVerify( | |
1013 | - | if (if ( | |
1014 | - | then | |
1023 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], V) | |
1024 | + | if (if (eI) | |
1025 | + | then eJ | |
1015 | 1026 | else false) | |
1016 | 1027 | then true | |
1017 | - | else | |
1028 | + | else eE | |
1018 | 1029 | } | |
1019 | - | else | |
1030 | + | else eE | |
1020 | 1031 | } | |
1021 | 1032 |
github/deemru/w8io/169f3d6 399.34 ms ◑