tx · AXzJC9BUQaA72N1C1gr4GTjq79rfc4Xrgevf5Zt8QNGy 3MyVvNfXht9piazyf1e5BVFsqv1R7z5cWJL: -0.02900000 Waves 2022.06.22 16:27 [2107661] smart account 3MyVvNfXht9piazyf1e5BVFsqv1R7z5cWJL > SELF 0.00000000 Waves
{ "type": 13, "id": "AXzJC9BUQaA72N1C1gr4GTjq79rfc4Xrgevf5Zt8QNGy", "fee": 2900000, "feeAssetId": null, "timestamp": 1655904489578, "version": 1, "sender": "3MyVvNfXht9piazyf1e5BVFsqv1R7z5cWJL", "senderPublicKey": "DnPyGWCgpQChvoQrnXQRcC9FtN32mPGrcog2wcKHdkVn", "proofs": [ "3iycpHoH6fbNyUacrTSvJTyG26kGShDpUxF3EfC3K6Cdk9NUoQpQiGHdu3sexoRka36tNbdRwt3v7r5k3y89ApWS" ], "script": "base64:BgJhCAISAwoBCBIAEgQKAggBEggKBggICAgIARIECgIICBIFCgMICAESBAoCCAgSAwoBARIDCgEBEgQKAggIEgMKAQgSABIDCgEBEgASAwoBCBIECgIICBIECgIICBIECgIICDIACXNlcGFyYXRvcgICX18ADnBvb2xXZWlnaHRNdWx0AIDC1y8AD21heERlcHRoRGVmYXVsdAAKABZmaW5hbGl6YXRpb25TdGFnZVRvdGFsAAAAF2ZpbmFsaXphdGlvblN0YWdlU2hhcmVzAAEADmtleUVwb2NoTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgILZXBvY2hMZW5ndGgFA25pbAUJc2VwYXJhdG9yAA9rZXlDdXJyZW50RXBvY2gJALkJAgkAzAgCAgIlcwkAzAgCAgxjdXJyZW50RXBvY2gFA25pbAUJc2VwYXJhdG9yAAtrZXlNYXhEZXB0aAkAuQkCCQDMCAICAiVzCQDMCAICCG1heERlcHRoBQNuaWwFCXNlcGFyYXRvcgAia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yABJrZXlGYWN0b3J5Q29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAg9mYWN0b3J5Q29udHJhY3QFA25pbAUJc2VwYXJhdG9yABNrZXlCb29zdGluZ0NvbnRyYWN0CQC5CQIJAMwIAgICJXMJAMwIAgIQYm9vc3RpbmdDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IAEmtleVN0YWtpbmdDb250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICD3N0YWtpbmdDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhNhc3NldHNTdG9yZUNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgAUa2V5RmluYWxpemF0aW9uU3RhZ2UJALkJAgkAzAgCAgIlcwkAzAgCAhFmaW5hbGl6YXRpb25TdGFnZQUDbmlsBQlzZXBhcmF0b3IAC2tleU5leHRQb29sCQC5CQIJAMwIAgICJXMJAMwIAgIIbmV4dFBvb2wFA25pbAUJc2VwYXJhdG9yAAtrZXlOZXh0VXNlcgkAuQkCCQDMCAICAiVzCQDMCAICCG5leHRVc2VyBQNuaWwFCXNlcGFyYXRvcgAOa2V5U3RhcnRIZWlnaHQJALkJAgkAzAgCAgIlcwkAzAgCAgtzdGFydEhlaWdodAUDbmlsBQlzZXBhcmF0b3IAEWtleUN1cnJlbnRFcG9jaFVpCQC5CQIJAMwIAgICJXMJAMwIAgIOY3VycmVudEVwb2NoVWkFA25pbAUJc2VwYXJhdG9yABBrZXlTdGFydEhlaWdodFVpCQC5CQIJAMwIAgICJXMJAMwIAgINc3RhcnRIZWlnaHRVaQUDbmlsBQlzZXBhcmF0b3IBFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFZXBvY2gJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUFZXBvY2gFA25pbAUJc2VwYXJhdG9yAQxrZXlGaW5hbGl6ZWQBBWVwb2NoCQC5CQIJAMwIAgIEJXMlZAkAzAgCAglmaW5hbGl6ZWQJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQlzZXBhcmF0b3IBCWtleUluTGlzdAEEcG9vbAQLJHQwMTUxNzE1NTcFBHBvb2wEDWFtb3VudEFzc2V0SWQIBQskdDAxNTE3MTU1NwJfMQQMcHJpY2VBc3NldElkCAULJHQwMTUxNzE1NTcCXzIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGaW5MaXN0CQDMCAIFDWFtb3VudEFzc2V0SWQJAMwIAgUMcHJpY2VBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEHa2V5VXNlZAIHYWRkcmVzcwVlcG9jaAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAgR1c2VkCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCCQCkAwEFBWVwb2NoBQNuaWwFCXNlcGFyYXRvcgEHa2V5Vm90ZQMEcG9vbAdhZGRyZXNzBWVwb2NoBAskdDAxODMxMTg3MQUEcG9vbAQNYW1vdW50QXNzZXRJZAgFCyR0MDE4MzExODcxAl8xBAxwcmljZUFzc2V0SWQIBQskdDAxODMxMTg3MQJfMgkAuQkCCQDMCAICCiVzJXMlcyVzJWQJAMwIAgIEdm90ZQkAzAgCBQ1hbW91bnRBc3NldElkCQDMCAIFDHByaWNlQXNzZXRJZAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQlzZXBhcmF0b3IBD2tleVZvdGluZ1Jlc3VsdAIEcG9vbAVlcG9jaAQLJHQwMjA1MzIwOTMFBHBvb2wEDWFtb3VudEFzc2V0SWQIBQskdDAyMDUzMjA5MwJfMQQMcHJpY2VBc3NldElkCAULJHQwMjA1MzIwOTMCXzIJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAgx2b3RpbmdSZXN1bHQJAMwIAgUNYW1vdW50QXNzZXRJZAkAzAgCBQxwcmljZUFzc2V0SWQJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQlzZXBhcmF0b3IBDGtleVBvb2xTaGFyZQIEcG9vbAVlcG9jaAQLJHQwMjI1ODIyOTgFBHBvb2wEDWFtb3VudEFzc2V0SWQIBQskdDAyMjU4MjI5OAJfMQQMcHJpY2VBc3NldElkCAULJHQwMjI1ODIyOTgCXzIJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAglwb29sU2hhcmUJAMwIAgUNYW1vdW50QXNzZXRJZAkAzAgCBQxwcmljZUFzc2V0SWQJAMwIAgkApAMBBQVlcG9jaAUDbmlsBQlzZXBhcmF0b3IBDWtleVRvdGFsVm90ZXMBBWVwb2NoCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgp0b3RhbFZvdGVzCQDMCAIJAKQDAQUFZXBvY2gFA25pbAUJc2VwYXJhdG9yAQ5nZXRWYWx1ZU9yRmFpbAMHYWRkcmVzcwNrZXkEdHlwZQQFZXJyb3IJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIACQETdmFsdWVPckVycm9yTWVzc2FnZQIEByRtYXRjaDAFBHR5cGUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANzdHIFByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQkAAgECEmludmFsaWQgZW50cnkgdHlwZQUFZXJyb3IBDGdldFN0ck9yRmFpbAIHYWRkcmVzcwNrZXkKAAFACQEOZ2V0VmFsdWVPckZhaWwDBQdhZGRyZXNzBQNrZXkCAAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBCQEOZ2V0VmFsdWVPckZhaWwDBQdhZGRyZXNzBQNrZXkCAAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAQxnZXRJbnRPckZhaWwCB2FkZHJlc3MDa2V5CgABQAkBDmdldFZhbHVlT3JGYWlsAwUHYWRkcmVzcwUDa2V5AAADCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQkBDmdldFZhbHVlT3JGYWlsAwUHYWRkcmVzcwUDa2V5AAACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAEMcG9vbFRvU3RyaW5nAQRwb29sCQCsAgIJAKwCAggFBHBvb2wCXzEFCXNlcGFyYXRvcggFBHBvb2wCXzIBDHN0cmluZ1RvUG9vbAEDc3RyBAVwYXJ0cwkAtQkCBQNzdHIFCXNlcGFyYXRvcgMJAAACCQCQAwEFBXBhcnRzAAIJAJQKAgkAkQMCBQVwYXJ0cwAACQCRAwIFBXBhcnRzAAEJAAIBAhNpbnZhbGlkIHBvb2wgc3RyaW5nARZnZXRMcEFzc2V0QnlQb29sQXNzZXRzAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAoBH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQBDGJhc2VBc3NldFN0cgkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQxiYXNlQXNzZXRTdHIKASlrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcwIYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyF2ludGVybmFsUHJpY2VBc3NldElkU3RyCQCsAgIJAKwCAgkArAICCQCsAgICCiVkJWQlcyVzX18JAKQDAQUYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAgJfXwkApAMBBRdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgIjX19tYXBwaW5nc19fcG9vbEFzc2V0czJQb29sQ29udHJhY3QKAR9rZXlNYXBwaW5nUG9vbENvbnRyYWN0VG9MUEFzc2V0ARNwb29sQ29udHJhY3RBZGRyZXNzCQCsAgIJAKwCAgIIJXMlcyVzX18FE3Bvb2xDb250cmFjdEFkZHJlc3MCIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0BA9mYWN0b3J5Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzBRJrZXlGYWN0b3J5Q29udHJhY3QEFWFtb3VudEFzc2V0SW50ZXJuYWxJZAkBDGdldEludE9yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQBBQ1hbW91bnRBc3NldElkBBRwcmljZUFzc2V0SW50ZXJuYWxJZAkBDGdldEludE9yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQBBQxwcmljZUFzc2V0SWQEE3Bvb2xDb250cmFjdEFkZHJlc3MJAQxnZXRTdHJPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJASlrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcwIFFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUUcHJpY2VBc3NldEludGVybmFsSWQECWxwQXNzZXRJZAkBDGdldFN0ck9yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBH2tleU1hcHBpbmdQb29sQ29udHJhY3RUb0xQQXNzZXQBBRNwb29sQ29udHJhY3RBZGRyZXNzBQlscEFzc2V0SWQBD2lzQXNzZXRWZXJpZmllZAEHYXNzZXRJZAQTYXNzZXRzU3RvcmVDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDGdldFN0ck9yRmFpbAIFBHRoaXMFFmtleUFzc2V0c1N0b3JlQ29udHJhY3QECmlzVmVyaWZpZWQKAAFACQD8BwQFE2Fzc2V0c1N0b3JlQ29udHJhY3QCEmlzVmVyaWZpZWRSRUFET05MWQkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAECBQFAAgdCb29sZWFuBQFACQACAQkArAICCQADAQkA/AcEBRNhc3NldHNTdG9yZUNvbnRyYWN0AhJpc1ZlcmlmaWVkUkVBRE9OTFkJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4FCmlzVmVyaWZpZWQADXBvb2xzTGlzdE5hbWUCBXBvb2xzARBnZXRWb3Rlc0xpc3ROYW1lAQRwb29sBAskdDA0ODM4NDg3OAUEcG9vbAQNYW1vdW50QXNzZXRJZAgFCyR0MDQ4Mzg0ODc4Al8xBAxwcmljZUFzc2V0SWQIBQskdDA0ODM4NDg3OAJfMgkAuQkCCQDMCAICBXZvdGVzCQDMCAIFDWFtb3VudEFzc2V0SWQJAMwIAgUMcHJpY2VBc3NldElkBQNuaWwFCXNlcGFyYXRvcgELa2V5TGlzdEhlYWQBCGxpc3ROYW1lBARtZXRhAwkAAAIFCGxpc3ROYW1lBQ1wb29sc0xpc3ROYW1lAgQlcyVzAgglcyVzJXMlcwkAuQkCCQDMCAIFBG1ldGEJAMwIAgUIbGlzdE5hbWUJAMwIAgIEaGVhZAUDbmlsBQlzZXBhcmF0b3IBC2tleUxpc3RTaXplAQhsaXN0TmFtZQQEbWV0YQMJAAACBQhsaXN0TmFtZQUNcG9vbHNMaXN0TmFtZQIEJXMlcwIIJXMlcyVzJXMJALkJAgkAzAgCBQRtZXRhCQDMCAIFCGxpc3ROYW1lCQDMCAICBHNpemUFA25pbAUJc2VwYXJhdG9yAQtrZXlMaXN0UHJldgIIbGlzdE5hbWUCaWQEBG1ldGEDCQAAAgUIbGlzdE5hbWUFDXBvb2xzTGlzdE5hbWUCCCVzJXMlcyVzAgolcyVzJXMlcyVzCQC5CQIJAMwIAgUEbWV0YQkAzAgCBQhsaXN0TmFtZQkAzAgCBQJpZAkAzAgCAgRwcmV2BQNuaWwFCXNlcGFyYXRvcgELa2V5TGlzdE5leHQCCGxpc3ROYW1lAmlkBARtZXRhAwkAAAIFCGxpc3ROYW1lBQ1wb29sc0xpc3ROYW1lAgglcyVzJXMlcwIKJXMlcyVzJXMlcwkAuQkCCQDMCAIFBG1ldGEJAMwIAgUIbGlzdE5hbWUJAMwIAgUCaWQJAMwIAgIEbmV4dAUDbmlsBQlzZXBhcmF0b3IBDGNvbnRhaW5zTm9kZQIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECnByZXZPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkBApuZXh0T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAMDCQAAAgUCaWQJAQt2YWx1ZU9yRWxzZQIFCmhlYWRPclVuaXQCAAYJAQIhPQIFCnByZXZPclVuaXQFBHVuaXQGCQECIT0CBQpuZXh0T3JVbml0BQR1bml0ARFpbnNlcnROb2RlQWN0aW9ucwIIbGlzdE5hbWUCaWQECmhlYWRPclVuaXQJAJ0IAgUEdGhpcwkBC2tleUxpc3RIZWFkAQUIbGlzdE5hbWUECGxpc3RTaXplCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lAAAECWNoZWNrTm9kZQMJAQEhAQkBDGNvbnRhaW5zTm9kZQIFCGxpc3ROYW1lBQJpZAYJAAIBAgtOb2RlIGV4aXN0cwMJAAACBQljaGVja05vZGUFCWNoZWNrTm9kZQkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtrZXlMaXN0U2l6ZQEFCGxpc3ROYW1lCQBkAgUIbGlzdFNpemUAAQUDbmlsAwkBAiE9AgUKaGVhZE9yVW5pdAUEdW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQUCaWQJAQV2YWx1ZQEFCmhlYWRPclVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUJAQV2YWx1ZQEFCmhlYWRPclVuaXQFAmlkBQNuaWwFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdEhlYWQBBQhsaXN0TmFtZQUCaWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERZGVsZXRlTm9kZUFjdGlvbnMCCGxpc3ROYW1lAmlkBApoZWFkT3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0SGVhZAEFCGxpc3ROYW1lBAhsaXN0U2l6ZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQELa2V5TGlzdFNpemUBBQhsaXN0TmFtZQAABApwcmV2T3JVbml0CQCdCAIFBHRoaXMJAQtrZXlMaXN0UHJldgIFCGxpc3ROYW1lBQJpZAQKbmV4dE9yVW5pdAkAnQgCBQR0aGlzCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQUCaWQJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleUxpc3RTaXplAQUIbGlzdE5hbWUJAGUCBQhsaXN0U2l6ZQABBQNuaWwDAwkBAiE9AgUKcHJldk9yVW5pdAUEdW5pdAkBAiE9AgUKbmV4dE9yVW5pdAUEdW5pdAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleUxpc3ROZXh0AgUIbGlzdE5hbWUJAQV2YWx1ZQEFCnByZXZPclVuaXQJAQV2YWx1ZQEFCm5leHRPclVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUJAQV2YWx1ZQEFCm5leHRPclVuaXQJAQV2YWx1ZQEFCnByZXZPclVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lBQJpZAUDbmlsAwkBAiE9AgUKbmV4dE9yVW5pdAUEdW5pdAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5TGlzdEhlYWQBBQhsaXN0TmFtZQkBBXZhbHVlAQUKbmV4dE9yVW5pdAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdE5leHQCBQhsaXN0TmFtZQUCaWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUJAQV2YWx1ZQEFCm5leHRPclVuaXQFA25pbAMJAQIhPQIFCnByZXZPclVuaXQFBHVuaXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleUxpc3RQcmV2AgUIbGlzdE5hbWUFAmlkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlMaXN0TmV4dAIFCGxpc3ROYW1lCQEFdmFsdWUBBQpwcmV2T3JVbml0BQNuaWwDCQAAAgUCaWQJAQt2YWx1ZU9yRWxzZQIFCmhlYWRPclVuaXQCAAkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5TGlzdEhlYWQBBQhsaXN0TmFtZQUDbmlsCQACAQkArAICCQCsAgIJAKwCAgIOaW52YWxpZCBub2RlOiAFCGxpc3ROYW1lAgEuBQJpZAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABVwZXJtaXNzaW9uRGVuaWVkRXJyb3IJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAEIbXVzdFRoaXMBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgUVcGVybWlzc2lvbkRlbmllZEVycm9yAQttdXN0TWFuYWdlcgEBaQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQUCcGsGBRVwZXJtaXNzaW9uRGVuaWVkRXJyb3IDCQABAgUHJG1hdGNoMAIEVW5pdAkBCG11c3RUaGlzAQUBaQkAAgECC01hdGNoIGVycm9yEgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAnBtCQEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAVoYXNQTQMJAQlpc0RlZmluZWQBBQJwbQYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFB2NoZWNrUE0FB2NoZWNrUE0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleU1hbmFnZXJQdWJsaWNLZXkACQDYBAEJAQV2YWx1ZQEFAnBtCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARhnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHQCC3VzZXJBZGRyZXNzDHRhcmdldEhlaWdodAQXYm9vc3RpbmdDb250cmFjdEFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQEMZ2V0U3RyT3JGYWlsAgUEdGhpcwUTa2V5Qm9vc3RpbmdDb250cmFjdAIhaW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQCUCgIFA25pbAoAAUAJAPwHBAUXYm9vc3RpbmdDb250cmFjdEFkZHJlc3MCIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFDHRhcmdldEhlaWdodAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQkA/AcEBRdib29zdGluZ0NvbnRyYWN0QWRkcmVzcwIgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUMdGFyZ2V0SGVpZ2h0BQNuaWwFA25pbAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AWkBC2NvbnN0cnVjdG9yBg9mYWN0b3J5Q29udHJhY3Qfdm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdBBib29zdGluZ0NvbnRyYWN0D3N0YWtpbmdDb250cmFjdBNhc3NldHNTdG9yZUNvbnRyYWN0C2Vwb2NoTGVuZ3RoBAVjaGVrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQECIT0CCQCmCAEFD2ZhY3RvcnlDb250cmFjdAUEdW5pdAYCIGludmFsaWQgZmFjdG9yeSBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQECIT0CCQCmCAEFH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QFBHVuaXQGAjJpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiBjYW5kaWRhdGUgY29udHJhY3QgYWRkcmVzcwkAzAgCAwkBAiE9AgkApggBBRBib29zdGluZ0NvbnRyYWN0BQR1bml0BgIhaW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQECIT0CCQCmCAEFD3N0YWtpbmdDb250cmFjdAUEdW5pdAYCIGludmFsaWQgc3Rha2luZyBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQECIT0CCQCmCAEFE2Fzc2V0c1N0b3JlQ29udHJhY3QFBHVuaXQGAiVpbnZhbGlkIGFzc2V0cyBzdG9yZSBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQBmAgULZXBvY2hMZW5ndGgAAAYJAAIBAhRpbnZhbGlkIGVwb2NoIGxlbmd0aAUDbmlsAwkAAAIFBWNoZWtzBQVjaGVrcwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFEmtleUZhY3RvcnlDb250cmFjdAUPZmFjdG9yeUNvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFImtleVZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QFH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUTa2V5Qm9vc3RpbmdDb250cmFjdAUQYm9vc3RpbmdDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBRJrZXlTdGFraW5nQ29udHJhY3QFD3N0YWtpbmdDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBRZrZXlBc3NldHNTdG9yZUNvbnRyYWN0BRNhc3NldHNTdG9yZUNvbnRyYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlFcG9jaExlbmd0aAULZXBvY2hMZW5ndGgFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZjcmVhdGUCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkBAZjaGVja3MJAMwIAgMJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAIABgkBC211c3RNYW5hZ2VyAQUBaQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBARwb29sCQCUCgIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAQNaW5MaXN0QWN0aW9ucwkAzggCCQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5SW5MaXN0AQUEcG9vbAYFA25pbAkBEWluc2VydE5vZGVBY3Rpb25zAgUNcG9vbHNMaXN0TmFtZQkBDHBvb2xUb1N0cmluZwEFBHBvb2wEGGN1cnJlbnRFcG9jaElzTm90RGVmaW5lZAkAAAIJAJoIAgUEdGhpcwUPa2V5Q3VycmVudEVwb2NoBQR1bml0BBJzdGFydEhlaWdodEFjdGlvbnMDBRhjdXJyZW50RXBvY2hJc05vdERlZmluZWQEBWVwb2NoAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tleUN1cnJlbnRFcG9jaAUFZXBvY2gJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlTdGFydEhlaWdodEJ5RXBvY2gBBQVlcG9jaAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlTdGFydEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrZXlDdXJyZW50RXBvY2hVaQUFZXBvY2gJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleVN0YXJ0SGVpZ2h0VWkFBmhlaWdodAUDbmlsBQNuaWwJAJQKAgkAzggCBQ1pbkxpc3RBY3Rpb25zBRJzdGFydEhlaWdodEFjdGlvbnMFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEdm90ZQMNYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQGYW1vdW50BARwb29sCQCUCgIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAQFZXBvY2gJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa2V5Q3VycmVudEVwb2NoAAAEC3N0YXJ0SGVpZ2h0CQEMZ2V0SW50T3JGYWlsAgUEdGhpcwkBFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFBWVwb2NoBAtlcG9jaExlbmd0aAkBDGdldEludE9yRmFpbAIFBHRoaXMFDmtleUVwb2NoTGVuZ3RoBAllbmRIZWlnaHQJAGQCBQtzdGFydEhlaWdodAULZXBvY2hMZW5ndGgEF2ZpbmFsaXphdGlvblN0YWdlT3JVbml0CQCaCAIFBHRoaXMFFGtleUZpbmFsaXphdGlvblN0YWdlBAR1c2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQdrZXlVc2VkAggFAWkGY2FsbGVyBQVlcG9jaAAABAR2b3RlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQdrZXlWb3RlAwUEcG9vbAgFAWkGY2FsbGVyBQVlcG9jaAAABApwb29sUmVzdWx0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ9rZXlWb3RpbmdSZXN1bHQCBQRwb29sBQVlcG9jaAAABAp0b3RhbFZvdGVzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ1rZXlUb3RhbFZvdGVzAQUFZXBvY2gAAAQTZ3d4QW1vdW50QXRFbmRUb3RhbAoAAUAJAPwHBAUEdGhpcwIYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0CQDMCAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCBQllbmRIZWlnaHQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEJAPwHBAUEdGhpcwIYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0CQDMCAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCBQllbmRIZWlnaHQFA25pbAUDbmlsAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQECWF2YWlsYWJsZQkAZQIFE2d3eEFtb3VudEF0RW5kVG90YWwFBHVzZWQEB25ld1ZvdGUJAGQCBQR2b3RlBQZhbW91bnQEFWlzQW1vdW50QXNzZXRWZXJpZmllZAkBD2lzQXNzZXRWZXJpZmllZAEFDWFtb3VudEFzc2V0SWQEBmNoZWNrcwkAzAgCAwkBAiE9AgkAoAgBCQEJa2V5SW5MaXN0AQUEcG9vbAUEdW5pdAYJAAIBAg5pbnZhbGlkIGFzc2V0cwkAzAgCAwkAZgIFCWVuZEhlaWdodAUGaGVpZ2h0BgkAAgECDmludmFsaWQgaGVpZ2h0CQDMCAIDCQAAAgUXZmluYWxpemF0aW9uU3RhZ2VPclVuaXQFBHVuaXQGCQACAQIYZmluYWxpemF0aW9uIGluIHByb2dyZXNzCQDMCAIDCQBmAgUTZ3d4QW1vdW50QXRFbmRUb3RhbAAABgkAAgECE3lvdSBkbyBub3QgaGF2ZSBnV1gJAMwIAgMDCQBmAgUGYW1vdW50AAAJAGcCBQlhdmFpbGFibGUFBmFtb3VudAcGCQACAQIOaW52YWxpZCBhbW91bnQJAMwIAgMFFWlzQW1vdW50QXNzZXRWZXJpZmllZAYJAAIBAhxhbW91bnQgYXNzZXQgaXMgbm90IHZlcmlmaWVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDXZvdGVzTGlzdE5hbWUJARBnZXRWb3Rlc0xpc3ROYW1lAQUEcG9vbAQOdXNlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBBB2b3Rlc0xpc3RBY3Rpb25zAwkBDGNvbnRhaW5zTm9kZQIFDXZvdGVzTGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyBQNuaWwJARFpbnNlcnROb2RlQWN0aW9ucwIFDXZvdGVzTGlzdE5hbWUFDnVzZXJBZGRyZXNzU3RyCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleVVzZWQCCAUBaQZjYWxsZXIFBWVwb2NoCQBkAgUEdXNlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEHa2V5Vm90ZQMFBHBvb2wIBQFpBmNhbGxlcgUFZXBvY2gFB25ld1ZvdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlWb3RpbmdSZXN1bHQCBQRwb29sBQVlcG9jaAkAZAIFCnBvb2xSZXN1bHQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleVRvdGFsVm90ZXMBBQVlcG9jaAkAZAIFCnRvdGFsVm90ZXMFBmFtb3VudAUDbmlsBRB2b3Rlc0xpc3RBY3Rpb25zBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmNhbmNlbFZvdGUCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkBARwb29sCQCUCgIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAQFZXBvY2gJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa2V5Q3VycmVudEVwb2NoAAAEC3N0YXJ0SGVpZ2h0CQEMZ2V0SW50T3JGYWlsAgUEdGhpcwkBFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFBWVwb2NoBAtlcG9jaExlbmd0aAkBDGdldEludE9yRmFpbAIFBHRoaXMFDmtleUVwb2NoTGVuZ3RoBAllbmRIZWlnaHQJAGQCBQtzdGFydEhlaWdodAULZXBvY2hMZW5ndGgEF2ZpbmFsaXphdGlvblN0YWdlT3JVbml0CQCaCAIFBHRoaXMFFGtleUZpbmFsaXphdGlvblN0YWdlBAR1c2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQdrZXlVc2VkAggFAWkGY2FsbGVyBQVlcG9jaAAABAR2b3RlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQdrZXlWb3RlAwUEcG9vbAgFAWkGY2FsbGVyBQVlcG9jaAAABApwb29sUmVzdWx0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ9rZXlWb3RpbmdSZXN1bHQCBQRwb29sBQVlcG9jaAAABAp0b3RhbFZvdGVzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ1rZXlUb3RhbFZvdGVzAQUFZXBvY2gAAAQGY2hlY2tzCQDMCAIDCQECIT0CCQCgCAEJAQlrZXlJbkxpc3QBBQRwb29sBQR1bml0BgkAAgECDmludmFsaWQgYXNzZXRzCQDMCAIDCQBmAgUJZW5kSGVpZ2h0BQZoZWlnaHQGCQACAQIOaW52YWxpZCBoZWlnaHQJAMwIAgMJAAACBRdmaW5hbGl6YXRpb25TdGFnZU9yVW5pdAUEdW5pdAYJAAIBAhhmaW5hbGl6YXRpb24gaW4gcHJvZ3Jlc3MJAMwIAgMJAGYCBQR2b3RlAAAGCQACAQIHbm8gdm90ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA12b3Rlc0xpc3ROYW1lCQEQZ2V0Vm90ZXNMaXN0TmFtZQEFBHBvb2wEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQdrZXlVc2VkAggFAWkGY2FsbGVyBQVlcG9jaAkAlgMBCQDMCAIJAGUCBQR1c2VkBQR2b3RlCQDMCAIAAAUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlWb3RlAwUEcG9vbAgFAWkGY2FsbGVyBQVlcG9jaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleVZvdGluZ1Jlc3VsdAIFBHBvb2wFBWVwb2NoCQBlAgUKcG9vbFJlc3VsdAUEdm90ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleVRvdGFsVm90ZXMBBQVlcG9jaAkAZQIFCnRvdGFsVm90ZXMFBHZvdGUFA25pbAkBEWRlbGV0ZU5vZGVBY3Rpb25zAgUNdm90ZXNMaXN0TmFtZQUOdXNlckFkZHJlc3NTdHIFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOc2V0RXBvY2hMZW5ndGgBDm5ld0Vwb2NoTGVuZ3RoBAVjaGVrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQBmAgUObmV3RXBvY2hMZW5ndGgAAAYJAAIBAhRpbnZhbGlkIGVwb2NoIGxlbmd0aAUDbmlsAwkAAAIFBWNoZWtzBQVjaGVrcwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlFcG9jaExlbmd0aAUObmV3RXBvY2hMZW5ndGgFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtzZXRNYXhEZXB0aAELbmV3TWF4RGVwdGgEBWNoZWtzCQDMCAIJAQttdXN0TWFuYWdlcgEFAWkJAMwIAgMJAGYCBQtuZXdNYXhEZXB0aAAABgkAAgECEWludmFsaWQgbWF4IGRlcHRoBQNuaWwDCQAAAgUFY2hla3MFBWNoZWtzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFC2tleU1heERlcHRoBQtuZXdNYXhEZXB0aAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE3Byb2Nlc3NWb3RlSU5URVJOQUwCB3Bvb2xTdHIOdXNlckFkZHJlc3NTdHIEC2NoZWNrQ2FsbGVyCQEIbXVzdFRoaXMBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQ51c2VyQWRkcmVzc1N0cgkArAICAipwcm9jZXNzVm90ZUlOVEVSTkFMOiBpbnZhbGlkIHVzZXIgYWRkcmVzcyAFDnVzZXJBZGRyZXNzU3RyBAVlcG9jaAkBDGdldEludE9yRmFpbAIFBHRoaXMFD2tleUN1cnJlbnRFcG9jaAQNZXBvY2hQcmV2aW91cwkAZQIFBWVwb2NoAAEEC2Vwb2NoTGVuZ3RoCQEMZ2V0SW50T3JGYWlsAgUEdGhpcwUOa2V5RXBvY2hMZW5ndGgEC3N0YXJ0SGVpZ2h0CQEMZ2V0SW50T3JGYWlsAgUEdGhpcwkBFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaAEFBWVwb2NoBAllbmRIZWlnaHQJAGQCBQtzdGFydEhlaWdodAULZXBvY2hMZW5ndGgEE3N0YXJ0SGVpZ2h0UHJldmlvdXMJAQxnZXRJbnRPckZhaWwCBQR0aGlzCQEVa2V5U3RhcnRIZWlnaHRCeUVwb2NoAQUNZXBvY2hQcmV2aW91cwQRZW5kSGVpZ2h0UHJldmlvdXMJAGQCBRNzdGFydEhlaWdodFByZXZpb3VzBQtlcG9jaExlbmd0aAQQY2hlY2tUYXJnZXRFcG9jaAMJAGcCBQ1lcG9jaFByZXZpb3VzAAAGCQACAQIrcHJvY2Vzc1ZvdGVJTlRFUk5BTDogaW52YWxpZCBwcmV2aW91cyBlcG9jaAMJAAACBRBjaGVja1RhcmdldEVwb2NoBRBjaGVja1RhcmdldEVwb2NoBARwb29sCQEMc3RyaW5nVG9Qb29sAQUHcG9vbFN0cgQNJHQwMTc0MTgxNzQ1OAUEcG9vbAQNYW1vdW50QXNzZXRJZAgFDSR0MDE3NDE4MTc0NTgCXzEEDHByaWNlQXNzZXRJZAgFDSR0MDE3NDE4MTc0NTgCXzIEFWlzQW1vdW50QXNzZXRWZXJpZmllZAkBD2lzQXNzZXRWZXJpZmllZAEFDWFtb3VudEFzc2V0SWQEE2d3eEFtb3VudEF0RW5kVG90YWwKAAFACQD8BwQFBHRoaXMCGGdldFVzZXJHd3hBbW91bnRBdEhlaWdodAkAzAgCBQ51c2VyQWRkcmVzc1N0cgkAzAgCBQllbmRIZWlnaHQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEJAPwHBAUEdGhpcwIYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0CQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFCWVuZEhlaWdodAUDbmlsBQNuaWwCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQbZ3d4QW1vdW50QXRFbmRUb3RhbFByZXZpb3VzCgABQAkA/AcEBQR0aGlzAhhnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHQJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgURZW5kSGVpZ2h0UHJldmlvdXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEJAPwHBAUEdGhpcwIYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0CQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIFEWVuZEhlaWdodFByZXZpb3VzBQNuaWwFA25pbAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAp0b3RhbFZvdGVzCQELdmFsdWVPckVsc2UCCQCfCAEJAQ1rZXlUb3RhbFZvdGVzAQUFZXBvY2gAAAQMdm90aW5nUmVzdWx0CQELdmFsdWVPckVsc2UCCQCfCAEJAQ9rZXlWb3RpbmdSZXN1bHQCBQRwb29sBQVlcG9jaAAABAx2b3RlUHJldmlvdXMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEHa2V5Vm90ZQMFBHBvb2wFC3VzZXJBZGRyZXNzBQ1lcG9jaFByZXZpb3VzCQCsAgIJAKwCAgkArAICCQCsAgICFHByb2Nlc3NWb3RlSU5URVJOQUwgBQdwb29sU3RyAgEgBQ51c2VyQWRkcmVzc1N0cgISOiBubyBwcmV2aW91cyB2b3RlBAR1c2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQdrZXlVc2VkAgULdXNlckFkZHJlc3MFBWVwb2NoAAAEB25ld1ZvdGUJAGsDBQx2b3RlUHJldmlvdXMFE2d3eEFtb3VudEF0RW5kVG90YWwFG2d3eEFtb3VudEF0RW5kVG90YWxQcmV2aW91cwQHYWN0aW9ucwMDCQBmAgUHbmV3Vm90ZQAABRVpc0Ftb3VudEFzc2V0VmVyaWZpZWQHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEHa2V5Vm90ZQMFBHBvb2wFC3VzZXJBZGRyZXNzBQVlcG9jaAUHbmV3Vm90ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleVRvdGFsVm90ZXMBBQVlcG9jaAkAZAIFCnRvdGFsVm90ZXMFB25ld1ZvdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlWb3RpbmdSZXN1bHQCBQRwb29sBQVlcG9jaAkAZAIFDHZvdGluZ1Jlc3VsdAUHbmV3Vm90ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleVVzZWQCBQt1c2VyQWRkcmVzcwUFZXBvY2gJAGQCBQR1c2VkBQduZXdWb3RlBQNuaWwJARFkZWxldGVOb2RlQWN0aW9ucwIJARBnZXRWb3Rlc0xpc3ROYW1lAQUEcG9vbAUOdXNlckFkZHJlc3NTdHIJAJQKAgUHYWN0aW9ucwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNwcm9jZXNzUG9vbElOVEVSTkFMAQdwb29sU3RyBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3RhcmdldEVwb2NoCQBlAgkBDGdldEludE9yRmFpbAIFBHRoaXMFD2tleUN1cnJlbnRFcG9jaAABBBBjaGVja1RhcmdldEVwb2NoAwkAZwIFC3RhcmdldEVwb2NoAAAGCQACAQIpcHJvY2Vzc1Bvb2xJTlRFUk5BTDogaW52YWxpZCB0YXJnZXQgZXBvY2gDCQAAAgUQY2hlY2tUYXJnZXRFcG9jaAUQY2hlY2tUYXJnZXRFcG9jaAQEcG9vbAkBDHN0cmluZ1RvUG9vbAEFB3Bvb2xTdHIEDSR0MDE4OTk3MTkwMzcFBHBvb2wEDWFtb3VudEFzc2V0SWQIBQ0kdDAxODk5NzE5MDM3Al8xBAxwcmljZUFzc2V0SWQIBQ0kdDAxODk5NzE5MDM3Al8yBA9zdGFraW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQxnZXRTdHJPckZhaWwCBQR0aGlzBRJrZXlTdGFraW5nQ29udHJhY3QED2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDGdldFN0ck9yRmFpbAIFBHRoaXMFEmtleUZhY3RvcnlDb250cmFjdAQJbHBBc3NldElkCQEWZ2V0THBBc3NldEJ5UG9vbEFzc2V0cwIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAQBcgoAAUAJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhJ1c2Vyc0xpc3RUcmF2ZXJzYWwJAMwIAgUJbHBBc3NldElkBQNuaWwFA25pbAMJAAECBQFAAgdCb29sZWFuBQFACQACAQkArAICCQADAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCEnVzZXJzTGlzdFRyYXZlcnNhbAkAzAgCBQlscEFzc2V0SWQFA25pbAUDbmlsAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwkAAAIFAXIFAXIDBQFyCQCUCgIFA25pbAYEFWlzQW1vdW50QXNzZXRWZXJpZmllZAkBD2lzQXNzZXRWZXJpZmllZAEFDWFtb3VudEFzc2V0SWQECnRvdGFsVm90ZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDWtleVRvdGFsVm90ZXMBBQt0YXJnZXRFcG9jaAAABAx2b3RpbmdSZXN1bHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBD2tleVZvdGluZ1Jlc3VsdAIFBHBvb2wFC3RhcmdldEVwb2NoAAAEBXNoYXJlAwMJAAACBQp0b3RhbFZvdGVzAAAGCQEBIQEFFWlzQW1vdW50QXNzZXRWZXJpZmllZAAACQBrAwUMdm90aW5nUmVzdWx0BQ5wb29sV2VpZ2h0TXVsdAUKdG90YWxWb3RlcwQPbW9kaWZ5V2VpZ2h0SW52CQD8BwQFD2ZhY3RvcnlDb250cmFjdAIMbW9kaWZ5V2VpZ2h0CQDMCAIFCWxwQXNzZXRJZAkAzAgCBQVzaGFyZQUDbmlsBQNuaWwDCQAAAgUPbW9kaWZ5V2VpZ2h0SW52BQ9tb2RpZnlXZWlnaHRJbnYEEHBvb2xzTGlzdEFjdGlvbnMDBRVpc0Ftb3VudEFzc2V0VmVyaWZpZWQFA25pbAkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlJbkxpc3QBBQRwb29sBQNuaWwJARFkZWxldGVOb2RlQWN0aW9ucwIFDXBvb2xzTGlzdE5hbWUFB3Bvb2xTdHIJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMa2V5UG9vbFNoYXJlAgUEcG9vbAULdGFyZ2V0RXBvY2gFBXNoYXJlBQNuaWwFEHBvb2xzTGlzdEFjdGlvbnMHCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmZpbmFsaXplSGVscGVyAAQFZXBvY2gJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa2V5Q3VycmVudEVwb2NoAAAEDXByZXZpb3VzRXBvY2gJAGUCBQVlcG9jaAABBAtzdGFydEhlaWdodAkBDGdldEludE9yRmFpbAIFBHRoaXMJARVrZXlTdGFydEhlaWdodEJ5RXBvY2gBBQVlcG9jaAQLZXBvY2hMZW5ndGgJAQxnZXRJbnRPckZhaWwCBQR0aGlzBQ5rZXlFcG9jaExlbmd0aAQJZW5kSGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQFC2Vwb2NoTGVuZ3RoBBdmaW5hbGl6YXRpb25TdGFnZU9yVW5pdAkAmggCBQR0aGlzBRRrZXlGaW5hbGl6YXRpb25TdGFnZQMJAGcCBQZoZWlnaHQFCWVuZEhlaWdodAQIbmV3RXBvY2gJAGQCBQVlcG9jaAABCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlTdGFydEhlaWdodEJ5RXBvY2gBBQhuZXdFcG9jaAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlTdGFydEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rZXlDdXJyZW50RXBvY2gFCG5ld0Vwb2NoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrZXlGaW5hbGl6YXRpb25TdGFnZQUWZmluYWxpemF0aW9uU3RhZ2VUb3RhbAUDbmlsBgMJAAACBRdmaW5hbGl6YXRpb25TdGFnZU9yVW5pdAUEdW5pdAkAlAoCBQNuaWwHAwkAAAIFF2ZpbmFsaXphdGlvblN0YWdlT3JVbml0BRZmaW5hbGl6YXRpb25TdGFnZVRvdGFsBApwb29sT3JVbml0CQCiCAEFC2tleU5leHRQb29sBAp1c2VyT3JVbml0CQCiCAEFC2tleU5leHRVc2VyBAckbWF0Y2gwBQpwb29sT3JVbml0AwkAAQIFByRtYXRjaDACBFVuaXQEByRtYXRjaDEJAKIIAQkBC2tleUxpc3RIZWFkAQUNcG9vbHNMaXN0TmFtZQMJAAECBQckbWF0Y2gxAgRVbml0CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtleUZpbmFsaXphdGlvblN0YWdlBRdmaW5hbGl6YXRpb25TdGFnZVNoYXJlcwkAzAgCCQELRGVsZXRlRW50cnkBBQtrZXlOZXh0UG9vbAkAzAgCCQELRGVsZXRlRW50cnkBBQtrZXlOZXh0VXNlcgUDbmlsBgMJAAECBQckbWF0Y2gxAgZTdHJpbmcEDHBvb2xzSGVhZFN0cgUHJG1hdGNoMQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFC2tleU5leHRQb29sBQxwb29sc0hlYWRTdHIFA25pbAYJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEB3Bvb2xTdHIFByRtYXRjaDAEBHBvb2wJAQxzdHJpbmdUb1Bvb2wBBQdwb29sU3RyBA5uZXh0VXNlck9yVW5pdAQHJG1hdGNoMQUKdXNlck9yVW5pdAMJAAECBQckbWF0Y2gxAgRVbml0CQCiCAEJAQtrZXlMaXN0SGVhZAEJARBnZXRWb3Rlc0xpc3ROYW1lAQUEcG9vbAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEBHVzZXIFByRtYXRjaDEEDnByb2Nlc3NWb3RlSW52CQD8BwQFBHRoaXMCE3Byb2Nlc3NWb3RlSU5URVJOQUwJAMwIAgUHcG9vbFN0cgkAzAgCBQR1c2VyBQNuaWwFA25pbAMJAAACBQ5wcm9jZXNzVm90ZUludgUOcHJvY2Vzc1ZvdGVJbnYJAKIIAQkBC2tleUxpc3ROZXh0AgkBEGdldFZvdGVzTGlzdE5hbWUBBQRwb29sBQR1c2VyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDEFDm5leHRVc2VyT3JVbml0AwkAAQIFByRtYXRjaDECBFVuaXQEDm5leHRQb29sT3JVbml0CQCiCAEJAQtrZXlMaXN0TmV4dAIFDXBvb2xzTGlzdE5hbWUFB3Bvb2xTdHIEByRtYXRjaDIFDm5leHRQb29sT3JVbml0AwkAAQIFByRtYXRjaDICBFVuaXQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5RmluYWxpemF0aW9uU3RhZ2UFF2ZpbmFsaXphdGlvblN0YWdlU2hhcmVzCQDMCAIJAQtEZWxldGVFbnRyeQEFC2tleU5leHRQb29sCQDMCAIJAQtEZWxldGVFbnRyeQEFC2tleU5leHRVc2VyBQNuaWwGAwkAAQIFByRtYXRjaDICBlN0cmluZwQBcwUHJG1hdGNoMgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFC2tleU5leHRQb29sBQFzCQDMCAIJAQtEZWxldGVFbnRyeQEFC2tleU5leHRVc2VyBQNuaWwGCQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMQIGU3RyaW5nBAhuZXh0VXNlcgUHJG1hdGNoMQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFC2tleU5leHRVc2VyBQhuZXh0VXNlcgUDbmlsBgkAAgECC01hdGNoIGVycm9yCQACAQILTWF0Y2ggZXJyb3IDCQAAAgUXZmluYWxpemF0aW9uU3RhZ2VPclVuaXQFF2ZpbmFsaXphdGlvblN0YWdlU2hhcmVzBApwb29sT3JVbml0CQCiCAEFC2tleU5leHRQb29sBAckbWF0Y2gwBQpwb29sT3JVbml0AwkAAQIFByRtYXRjaDACBFVuaXQEByRtYXRjaDEJAKIIAQkBC2tleUxpc3RIZWFkAQUNcG9vbHNMaXN0TmFtZQMJAAECBQckbWF0Y2gxAgRVbml0CQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUUa2V5RmluYWxpemF0aW9uU3RhZ2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQxrZXlGaW5hbGl6ZWQBBQ1wcmV2aW91c0Vwb2NoBgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5Q3VycmVudEVwb2NoVWkFBWVwb2NoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlTdGFydEhlaWdodFVpBQtzdGFydEhlaWdodAUDbmlsBgMJAAECBQckbWF0Y2gxAgZTdHJpbmcEC25leHRQb29sU3RyBQckbWF0Y2gxCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgULa2V5TmV4dFBvb2wFC25leHRQb29sU3RyBQNuaWwGCQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAdwb29sU3RyBQckbWF0Y2gwBAFyCgABQAkA/AcEBQR0aGlzAhNwcm9jZXNzUG9vbElOVEVSTkFMCQDMCAIFB3Bvb2xTdHIFA25pbAUDbmlsAwkAAQIFAUACB0Jvb2xlYW4FAUAJAAIBCQCsAgIJAAMBCQD8BwQFBHRoaXMCE3Byb2Nlc3NQb29sSU5URVJOQUwJAMwIAgUHcG9vbFN0cgUDbmlsBQNuaWwCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4DCQAAAgUBcgUBcgMFAXIJAJQKAgUDbmlsBgQObmV4dFBvb2xPclVuaXQJAKIIAQkBC2tleUxpc3ROZXh0AgUNcG9vbHNMaXN0TmFtZQUHcG9vbFN0cgQHJG1hdGNoMQUObmV4dFBvb2xPclVuaXQDCQABAgUHJG1hdGNoMQIEVW5pdAkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEFFGtleUZpbmFsaXphdGlvblN0YWdlCQDMCAIJAQxCb29sZWFuRW50cnkCCQEMa2V5RmluYWxpemVkAQUNcHJldmlvdXNFcG9jaAYJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtleUN1cnJlbnRFcG9jaFVpBQVlcG9jaAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5U3RhcnRIZWlnaHRVaQULc3RhcnRIZWlnaHQJAMwIAgkBC0RlbGV0ZUVudHJ5AQULa2V5TmV4dFBvb2wFA25pbAYDCQABAgUHJG1hdGNoMQIGU3RyaW5nBAtuZXh0UG9vbFN0cgUHJG1hdGNoMQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFC2tleU5leHRQb29sBQtuZXh0UG9vbFN0cgUDbmlsBgkAAgECC01hdGNoIGVycm9yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQILTWF0Y2ggZXJyb3IJAAIBAhZmaW5hbGl6YXRpb24gaXMgYnJva2VuAWkBD2ZpbmFsaXplV3JhcHBlcgEHY291bnRlcgQGcmVzdWx0CgABQAkA/AcEBQR0aGlzAg5maW5hbGl6ZUhlbHBlcgUDbmlsBQNuaWwDCQABAgUBQAIHQm9vbGVhbgUBQAkAAgEJAKwCAgkAAwEJAPwHBAUEdGhpcwIOZmluYWxpemVIZWxwZXIFA25pbAUDbmlsAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuAwkAAAIFBnJlc3VsdAUGcmVzdWx0AwkBASEBBQZyZXN1bHQDCQAAAgUHY291bnRlcgAACQACAQIeQ3VycmVudCB2b3RpbmcgaXMgbm90IG92ZXIgeWV0CQCUCgIFA25pbAUEdW5pdAQIbWF4RGVwdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULa2V5TWF4RGVwdGgFD21heERlcHRoRGVmYXVsdAMJAGYCBQhtYXhEZXB0aAUHY291bnRlcgQDaW52CQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCCQBkAgUHY291bnRlcgABBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplAAQDaW52CQD8BwQFBHRoaXMCD2ZpbmFsaXplV3JhcHBlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52CQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJvblZlcmlmaWNhdGlvbkxvc3MBB2Fzc2V0SWQJAJQKAgUDbmlsBQR1bml0AWkBFGNvbnRhaW5zTm9kZVJFQURPTkxZAghsaXN0TmFtZQJpZAkAlAoCBQNuaWwJAQxjb250YWluc05vZGUCBQhsaXN0TmFtZQUCaWQBaQEKaW5zZXJ0Tm9kZQIIbGlzdE5hbWUCaWQEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAlAoCCQERaW5zZXJ0Tm9kZUFjdGlvbnMCBQhsaXN0TmFtZQUCaWQFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKZGVsZXRlTm9kZQIIbGlzdE5hbWUCaWQEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAlAoCCQERZGVsZXRlTm9kZUFjdGlvbnMCBQhsaXN0TmFtZQUCaWQFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXmpguwS", "chainId": 84, "height": 2107661, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5onWkaJRBHfGjUcqGk4tUz1cA8dbDDN5R6GxnRP47dPB Next: GFMy6xZ5gD7imZhtnAWP6ooHWfLwXbpbNW2FXvMdniHT Diff:
Old | New | Differences | |
---|---|---|---|
25 | 25 | ||
26 | 26 | let l = makeString(["%s", "stakingContract"], a) | |
27 | 27 | ||
28 | - | let m = makeString(["%s", " | |
28 | + | let m = makeString(["%s", "assetsStoreContract"], a) | |
29 | 29 | ||
30 | - | let n = makeString(["%s", " | |
30 | + | let n = makeString(["%s", "finalizationStage"], a) | |
31 | 31 | ||
32 | - | let o = makeString(["%s", " | |
32 | + | let o = makeString(["%s", "nextPool"], a) | |
33 | 33 | ||
34 | - | let p = makeString(["%s", " | |
34 | + | let p = makeString(["%s", "nextUser"], a) | |
35 | 35 | ||
36 | - | let q = makeString(["%s", " | |
36 | + | let q = makeString(["%s", "startHeight"], a) | |
37 | 37 | ||
38 | - | let r = makeString(["%s", " | |
38 | + | let r = makeString(["%s", "currentEpochUi"], a) | |
39 | 39 | ||
40 | - | func s (t) = makeString(["%s%d", "startHeight", toString(t)], a) | |
40 | + | let s = makeString(["%s", "startHeightUi"], a) | |
41 | + | ||
42 | + | func t (u) = makeString(["%s%d", "startHeight", toString(u)], a) | |
41 | 43 | ||
42 | 44 | ||
43 | - | func | |
45 | + | func v (u) = makeString(["%s%d", "finalized", toString(u)], a) | |
44 | 46 | ||
45 | 47 | ||
46 | - | func | |
47 | - | let | |
48 | - | let | |
49 | - | let | |
50 | - | makeString(["%s%s%s", "inList", | |
48 | + | func w (x) = { | |
49 | + | let y = x | |
50 | + | let z = y._1 | |
51 | + | let A = y._2 | |
52 | + | makeString(["%s%s%s", "inList", z, A], a) | |
51 | 53 | } | |
52 | 54 | ||
53 | 55 | ||
54 | - | func | |
56 | + | func B (C,u) = makeString(["%s%s%d", "used", toString(C), toString(u)], a) | |
55 | 57 | ||
56 | 58 | ||
57 | - | func | |
58 | - | let | |
59 | - | let | |
60 | - | let | |
61 | - | makeString(["%s%s%s%s%d", "vote", | |
59 | + | func D (x,C,u) = { | |
60 | + | let E = x | |
61 | + | let z = E._1 | |
62 | + | let A = E._2 | |
63 | + | makeString(["%s%s%s%s%d", "vote", z, A, toString(C), toString(u)], a) | |
62 | 64 | } | |
63 | 65 | ||
64 | 66 | ||
65 | - | func | |
66 | - | let | |
67 | - | let | |
68 | - | let | |
69 | - | makeString(["%s%s%s%d", "votingResult", | |
67 | + | func F (x,u) = { | |
68 | + | let G = x | |
69 | + | let z = G._1 | |
70 | + | let A = G._2 | |
71 | + | makeString(["%s%s%s%d", "votingResult", z, A, toString(u)], a) | |
70 | 72 | } | |
71 | 73 | ||
72 | 74 | ||
73 | - | func | |
74 | - | let | |
75 | - | let | |
76 | - | let | |
77 | - | makeString(["%s%s%s%d", "poolShare", | |
75 | + | func H (x,u) = { | |
76 | + | let I = x | |
77 | + | let z = I._1 | |
78 | + | let A = I._2 | |
79 | + | makeString(["%s%s%s%d", "poolShare", z, A, toString(u)], a) | |
78 | 80 | } | |
79 | 81 | ||
80 | 82 | ||
81 | - | func | |
83 | + | func J (u) = makeString(["%s%d", "totalVotes", toString(u)], a) | |
82 | 84 | ||
83 | 85 | ||
84 | - | func | |
85 | - | let | |
86 | + | func K (C,L,M) = { | |
87 | + | let N = makeString(["mandatory ", toString(C), ".", L, " is not defined"], "") | |
86 | 88 | valueOrErrorMessage({ | |
87 | - | let | |
88 | - | if ($isInstanceOf( | |
89 | + | let O = M | |
90 | + | if ($isInstanceOf(O, "String")) | |
89 | 91 | then { | |
90 | - | let | |
91 | - | getString( | |
92 | + | let P = O | |
93 | + | getString(C, L) | |
92 | 94 | } | |
93 | - | else if ($isInstanceOf( | |
95 | + | else if ($isInstanceOf(O, "Int")) | |
94 | 96 | then { | |
95 | - | let | |
96 | - | getInteger( | |
97 | + | let Q = O | |
98 | + | getInteger(C, L) | |
97 | 99 | } | |
98 | 100 | else throw("invalid entry type") | |
99 | - | }, | |
101 | + | }, N) | |
100 | 102 | } | |
101 | 103 | ||
102 | 104 | ||
103 | - | func | |
104 | - | let | |
105 | - | if ($isInstanceOf( | |
106 | - | then | |
107 | - | else throw(($getType( | |
105 | + | func R (C,L) = { | |
106 | + | let S = K(C, L, "") | |
107 | + | if ($isInstanceOf(S, "String")) | |
108 | + | then S | |
109 | + | else throw(($getType(K(C, L, "")) + " couldn't be cast to String")) | |
108 | 110 | } | |
109 | 111 | ||
110 | 112 | ||
111 | - | func | |
112 | - | let | |
113 | - | if ($isInstanceOf( | |
114 | - | then | |
115 | - | else throw(($getType( | |
113 | + | func T (C,L) = { | |
114 | + | let S = K(C, L, 0) | |
115 | + | if ($isInstanceOf(S, "Int")) | |
116 | + | then S | |
117 | + | else throw(($getType(K(C, L, 0)) + " couldn't be cast to Int")) | |
116 | 118 | } | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func U (x) = ((x._1 + a) + x._2) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func | |
123 | - | let | |
124 | - | if ((size( | |
125 | - | then $Tuple2( | |
124 | + | func V (P) = { | |
125 | + | let W = split(P, a) | |
126 | + | if ((size(W) == 2)) | |
127 | + | then $Tuple2(W[0], W[1]) | |
126 | 128 | else throw("invalid pool string") | |
127 | 129 | } | |
128 | 130 | ||
129 | 131 | ||
130 | - | func | |
131 | - | func | |
132 | + | func X (z,A) = { | |
133 | + | func Y (Z) = ("%s%s%s__mappings__baseAsset2internalId__" + Z) | |
132 | 134 | ||
133 | - | func | |
135 | + | func aa (ab,ac) = (((("%d%d%s%s__" + toString(ab)) + "__") + toString(ac)) + "__mappings__poolAssets2PoolContract") | |
134 | 136 | ||
135 | - | func | |
137 | + | func ad (ae) = (("%s%s%s__" + ae) + "__mappings__poolContract2LpAsset") | |
136 | 138 | ||
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | let | |
141 | - | let | |
142 | - | | |
139 | + | let af = addressFromStringValue(R(this, j)) | |
140 | + | let ag = T(af, Y(z)) | |
141 | + | let ah = T(af, Y(A)) | |
142 | + | let ae = R(af, aa(ag, ah)) | |
143 | + | let ai = R(af, ad(ae)) | |
144 | + | ai | |
143 | 145 | } | |
144 | 146 | ||
145 | 147 | ||
146 | - | let ai = "pools" | |
147 | - | ||
148 | - | func aj (w) = { | |
149 | - | let ak = w | |
150 | - | let y = ak._1 | |
151 | - | let z = ak._2 | |
152 | - | makeString(["votes", y, z], a) | |
148 | + | func aj (ak) = { | |
149 | + | let al = addressFromStringValue(R(this, m)) | |
150 | + | let am = { | |
151 | + | let S = invoke(al, "isVerifiedREADONLY", [ak], nil) | |
152 | + | if ($isInstanceOf(S, "Boolean")) | |
153 | + | then S | |
154 | + | else throw(($getType(invoke(al, "isVerifiedREADONLY", [ak], nil)) + " couldn't be cast to Boolean")) | |
155 | + | } | |
156 | + | am | |
153 | 157 | } | |
154 | 158 | ||
155 | 159 | ||
156 | - | func al (am) = { | |
157 | - | let an = if ((am == ai)) | |
158 | - | then "%s%s" | |
159 | - | else "%s%s%s%s" | |
160 | - | makeString([an, am, "head"], a) | |
160 | + | let an = "pools" | |
161 | + | ||
162 | + | func ao (x) = { | |
163 | + | let ap = x | |
164 | + | let z = ap._1 | |
165 | + | let A = ap._2 | |
166 | + | makeString(["votes", z, A], a) | |
161 | 167 | } | |
162 | 168 | ||
163 | 169 | ||
164 | - | func | |
165 | - | let | |
170 | + | func aq (ar) = { | |
171 | + | let as = if ((ar == an)) | |
166 | 172 | then "%s%s" | |
167 | 173 | else "%s%s%s%s" | |
168 | - | makeString([ | |
174 | + | makeString([as, ar, "head"], a) | |
169 | 175 | } | |
170 | 176 | ||
171 | 177 | ||
172 | - | func | |
173 | - | let | |
174 | - | then "%s%s | |
175 | - | else "%s%s%s%s | |
176 | - | makeString([ | |
178 | + | func at (ar) = { | |
179 | + | let as = if ((ar == an)) | |
180 | + | then "%s%s" | |
181 | + | else "%s%s%s%s" | |
182 | + | makeString([as, ar, "size"], a) | |
177 | 183 | } | |
178 | 184 | ||
179 | 185 | ||
180 | - | func | |
181 | - | let | |
186 | + | func au (ar,av) = { | |
187 | + | let as = if ((ar == an)) | |
182 | 188 | then "%s%s%s%s" | |
183 | 189 | else "%s%s%s%s%s" | |
184 | - | makeString([ | |
190 | + | makeString([as, ar, av, "prev"], a) | |
185 | 191 | } | |
186 | 192 | ||
187 | 193 | ||
188 | - | func as (am,aq) = { | |
189 | - | let at = getString(this, al(am)) | |
190 | - | let au = getString(this, ap(am, aq)) | |
191 | - | let av = getString(this, ar(am, aq)) | |
192 | - | if (if ((aq == valueOrElse(at, ""))) | |
193 | - | then true | |
194 | - | else (au != unit)) | |
195 | - | then true | |
196 | - | else (av != unit) | |
194 | + | func aw (ar,av) = { | |
195 | + | let as = if ((ar == an)) | |
196 | + | then "%s%s%s%s" | |
197 | + | else "%s%s%s%s%s" | |
198 | + | makeString([as, ar, av, "next"], a) | |
197 | 199 | } | |
198 | 200 | ||
199 | 201 | ||
200 | - | func aw (am,aq) = { | |
201 | - | let at = getString(this, al(am)) | |
202 | - | let ax = valueOrElse(getInteger(this, ao(am)), 0) | |
203 | - | let ay = if (!(as(am, aq))) | |
202 | + | func ax (ar,av) = { | |
203 | + | let ay = getString(this, aq(ar)) | |
204 | + | let az = getString(this, au(ar, av)) | |
205 | + | let aA = getString(this, aw(ar, av)) | |
206 | + | if (if ((av == valueOrElse(ay, ""))) | |
207 | + | then true | |
208 | + | else (az != unit)) | |
209 | + | then true | |
210 | + | else (aA != unit) | |
211 | + | } | |
212 | + | ||
213 | + | ||
214 | + | func aB (ar,av) = { | |
215 | + | let ay = getString(this, aq(ar)) | |
216 | + | let aC = valueOrElse(getInteger(this, at(ar)), 0) | |
217 | + | let aD = if (!(ax(ar, av))) | |
204 | 218 | then true | |
205 | 219 | else throw("Node exists") | |
206 | - | if (( | |
207 | - | then (([IntegerEntry( | |
208 | - | then [StringEntry(ar | |
209 | - | else nil)) ++ [StringEntry( | |
220 | + | if ((aD == aD)) | |
221 | + | then (([IntegerEntry(at(ar), (aC + 1))] ++ (if ((ay != unit)) | |
222 | + | then [StringEntry(aw(ar, av), value(ay)), StringEntry(au(ar, value(ay)), av)] | |
223 | + | else nil)) ++ [StringEntry(aq(ar), av)]) | |
210 | 224 | else throw("Strict value is not equal to itself.") | |
211 | 225 | } | |
212 | 226 | ||
213 | 227 | ||
214 | - | func | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | ([IntegerEntry( | |
220 | - | then ( | |
228 | + | func aE (ar,av) = { | |
229 | + | let ay = getString(this, aq(ar)) | |
230 | + | let aC = valueOrElse(getInteger(this, at(ar)), 0) | |
231 | + | let az = getString(this, au(ar, av)) | |
232 | + | let aA = getString(this, aw(ar, av)) | |
233 | + | ([IntegerEntry(at(ar), (aC - 1))] ++ (if (if ((az != unit)) | |
234 | + | then (aA != unit) | |
221 | 235 | else false) | |
222 | - | then [StringEntry(ar | |
223 | - | else if (( | |
224 | - | then [StringEntry( | |
225 | - | else if (( | |
226 | - | then [DeleteEntry( | |
227 | - | else if (( | |
228 | - | then [DeleteEntry( | |
229 | - | else throw(((("invalid node: " + | |
236 | + | then [StringEntry(aw(ar, value(az)), value(aA)), StringEntry(au(ar, value(aA)), value(az)), DeleteEntry(au(ar, av)), DeleteEntry(aw(ar, av))] | |
237 | + | else if ((aA != unit)) | |
238 | + | then [StringEntry(aq(ar), value(aA)), DeleteEntry(aw(ar, av)), DeleteEntry(au(ar, value(aA)))] | |
239 | + | else if ((az != unit)) | |
240 | + | then [DeleteEntry(au(ar, av)), DeleteEntry(aw(ar, value(az)))] | |
241 | + | else if ((av == valueOrElse(ay, ""))) | |
242 | + | then [DeleteEntry(aq(ar))] | |
243 | + | else throw(((("invalid node: " + ar) + ".") + av)))) | |
230 | 244 | } | |
231 | 245 | ||
232 | 246 | ||
233 | - | func | |
247 | + | func aF () = "%s__managerPublicKey" | |
234 | 248 | ||
235 | 249 | ||
236 | - | func | |
250 | + | func aG () = "%s__pendingManagerPublicKey" | |
237 | 251 | ||
238 | 252 | ||
239 | - | func | |
240 | - | let | |
241 | - | if ($isInstanceOf( | |
253 | + | func aH () = { | |
254 | + | let O = getString(aF()) | |
255 | + | if ($isInstanceOf(O, "String")) | |
242 | 256 | then { | |
243 | - | let | |
244 | - | fromBase58String( | |
257 | + | let aI = O | |
258 | + | fromBase58String(aI) | |
245 | 259 | } | |
246 | - | else if ($isInstanceOf( | |
260 | + | else if ($isInstanceOf(O, "Unit")) | |
247 | 261 | then unit | |
248 | 262 | else throw("Match error") | |
249 | 263 | } | |
250 | 264 | ||
251 | 265 | ||
252 | - | func | |
253 | - | let | |
254 | - | if ($isInstanceOf( | |
266 | + | func aJ () = { | |
267 | + | let O = getString(aG()) | |
268 | + | if ($isInstanceOf(O, "String")) | |
255 | 269 | then { | |
256 | - | let | |
257 | - | fromBase58String( | |
270 | + | let aI = O | |
271 | + | fromBase58String(aI) | |
258 | 272 | } | |
259 | - | else if ($isInstanceOf( | |
273 | + | else if ($isInstanceOf(O, "Unit")) | |
260 | 274 | then unit | |
261 | 275 | else throw("Match error") | |
262 | 276 | } | |
263 | 277 | ||
264 | 278 | ||
265 | - | let | |
279 | + | let aK = throw("Permission denied") | |
266 | 280 | ||
267 | - | func | |
281 | + | func aL (aM) = if ((aM.caller == this)) | |
268 | 282 | then true | |
269 | - | else | |
283 | + | else aK | |
270 | 284 | ||
271 | 285 | ||
272 | - | func | |
273 | - | let | |
274 | - | if ($isInstanceOf( | |
286 | + | func aN (aM) = { | |
287 | + | let O = aH() | |
288 | + | if ($isInstanceOf(O, "ByteVector")) | |
275 | 289 | then { | |
276 | - | let | |
277 | - | if (( | |
290 | + | let aO = O | |
291 | + | if ((aM.callerPublicKey == aO)) | |
278 | 292 | then true | |
279 | - | else | |
293 | + | else aK | |
280 | 294 | } | |
281 | - | else if ($isInstanceOf( | |
282 | - | then | |
295 | + | else if ($isInstanceOf(O, "Unit")) | |
296 | + | then aL(aM) | |
283 | 297 | else throw("Match error") | |
284 | 298 | } | |
285 | 299 | ||
286 | 300 | ||
287 | - | @Callable( | |
288 | - | func setManager ( | |
289 | - | let | |
290 | - | if (( | |
301 | + | @Callable(aM) | |
302 | + | func setManager (aP) = { | |
303 | + | let aQ = aN(aM) | |
304 | + | if ((aQ == aQ)) | |
291 | 305 | then { | |
292 | - | let | |
293 | - | if (( | |
294 | - | then [StringEntry( | |
306 | + | let aR = fromBase58String(aP) | |
307 | + | if ((aR == aR)) | |
308 | + | then [StringEntry(aG(), aP)] | |
295 | 309 | else throw("Strict value is not equal to itself.") | |
296 | 310 | } | |
297 | 311 | else throw("Strict value is not equal to itself.") | |
299 | 313 | ||
300 | 314 | ||
301 | 315 | ||
302 | - | @Callable( | |
316 | + | @Callable(aM) | |
303 | 317 | func confirmManager () = { | |
304 | - | let | |
305 | - | let | |
318 | + | let aS = aJ() | |
319 | + | let aT = if (isDefined(aS)) | |
306 | 320 | then true | |
307 | 321 | else throw("No pending manager") | |
308 | - | if (( | |
322 | + | if ((aT == aT)) | |
309 | 323 | then { | |
310 | - | let | |
324 | + | let aU = if ((aM.callerPublicKey == value(aS))) | |
311 | 325 | then true | |
312 | 326 | else throw("You are not pending manager") | |
313 | - | if (( | |
314 | - | then [StringEntry( | |
327 | + | if ((aU == aU)) | |
328 | + | then [StringEntry(aF(), toBase58String(value(aS))), DeleteEntry(aG())] | |
315 | 329 | else throw("Strict value is not equal to itself.") | |
316 | 330 | } | |
317 | 331 | else throw("Strict value is not equal to itself.") | |
319 | 333 | ||
320 | 334 | ||
321 | 335 | ||
322 | - | @Callable( | |
323 | - | func getUserGwxAmountAtHeight ( | |
324 | - | let | |
336 | + | @Callable(aM) | |
337 | + | func getUserGwxAmountAtHeight (aV,aW) = { | |
338 | + | let aX = valueOrErrorMessage(addressFromString(R(this, k)), "invalid boosting contract address") | |
325 | 339 | $Tuple2(nil, { | |
326 | - | let | |
327 | - | if ($isInstanceOf( | |
328 | - | then | |
329 | - | else throw(($getType(invoke( | |
340 | + | let S = invoke(aX, "getUserGwxAmountAtHeightREADONLY", [aV, aW], nil) | |
341 | + | if ($isInstanceOf(S, "Int")) | |
342 | + | then S | |
343 | + | else throw(($getType(invoke(aX, "getUserGwxAmountAtHeightREADONLY", [aV, aW], nil)) + " couldn't be cast to Int")) | |
330 | 344 | }) | |
331 | 345 | } | |
332 | 346 | ||
333 | 347 | ||
334 | 348 | ||
335 | - | @Callable( | |
336 | - | func constructor ( | |
337 | - | let | |
349 | + | @Callable(aM) | |
350 | + | func constructor (af,aY,aZ,ba,al,bb) = { | |
351 | + | let bc = [aN(aM), if ((addressFromString(af) != unit)) | |
338 | 352 | then true | |
339 | - | else "invalid factory contract address", if ((addressFromString( | |
353 | + | else "invalid factory contract address", if ((addressFromString(aY) != unit)) | |
340 | 354 | then true | |
341 | - | else "invalid voting emission candidate contract address", if ((addressFromString( | |
355 | + | else "invalid voting emission candidate contract address", if ((addressFromString(aZ) != unit)) | |
342 | 356 | then true | |
343 | - | else "invalid boosting contract address", if ((addressFromString( | |
357 | + | else "invalid boosting contract address", if ((addressFromString(ba) != unit)) | |
344 | 358 | then true | |
345 | - | else "invalid staking contract address", if ((aW > 0)) | |
359 | + | else "invalid staking contract address", if ((addressFromString(al) != unit)) | |
360 | + | then true | |
361 | + | else "invalid assets store contract address", if ((bb > 0)) | |
346 | 362 | then true | |
347 | 363 | else throw("invalid epoch length")] | |
348 | - | if (( | |
349 | - | then $Tuple2([StringEntry(j, | |
364 | + | if ((bc == bc)) | |
365 | + | then $Tuple2([StringEntry(j, af), StringEntry(i, aY), StringEntry(k, aZ), StringEntry(l, ba), StringEntry(m, al), IntegerEntry(f, bb)], unit) | |
350 | 366 | else throw("Strict value is not equal to itself.") | |
351 | 367 | } | |
352 | 368 | ||
353 | 369 | ||
354 | 370 | ||
355 | - | @Callable( | |
356 | - | func create ( | |
357 | - | let | |
371 | + | @Callable(aM) | |
372 | + | func create (z,A) = { | |
373 | + | let bd = [if ((toBase58String(aM.caller.bytes) == valueOrElse(getString(this, i), ""))) | |
358 | 374 | then true | |
359 | - | else | |
360 | - | if (( | |
375 | + | else aN(aM)] | |
376 | + | if ((bd == bd)) | |
361 | 377 | then { | |
362 | - | let | |
363 | - | let | |
364 | - | let | |
365 | - | let | |
378 | + | let x = $Tuple2(z, A) | |
379 | + | let be = ([BooleanEntry(w(x), true)] ++ aB(an, U(x))) | |
380 | + | let bf = (getInteger(this, g) == unit) | |
381 | + | let bg = if (bf) | |
366 | 382 | then { | |
367 | - | let | |
368 | - | [IntegerEntry(g, | |
383 | + | let u = 0 | |
384 | + | [IntegerEntry(g, u), IntegerEntry(t(u), height), IntegerEntry(q, height), IntegerEntry(r, u), IntegerEntry(s, height)] | |
369 | 385 | } | |
370 | 386 | else nil | |
371 | - | $Tuple2(( | |
387 | + | $Tuple2((be ++ bg), unit) | |
372 | 388 | } | |
373 | 389 | else throw("Strict value is not equal to itself.") | |
374 | 390 | } | |
375 | 391 | ||
376 | 392 | ||
377 | 393 | ||
378 | - | @Callable( | |
379 | - | func vote ( | |
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | let | |
385 | - | let | |
386 | - | let | |
387 | - | let | |
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | let | |
392 | - | if ($isInstanceOf( | |
393 | - | then | |
394 | - | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [toBase58String( | |
394 | + | @Callable(aM) | |
395 | + | func vote (z,A,bh) = { | |
396 | + | let x = $Tuple2(z, A) | |
397 | + | let u = valueOrElse(getInteger(this, g), 0) | |
398 | + | let bi = T(this, t(u)) | |
399 | + | let bb = T(this, f) | |
400 | + | let bj = (bi + bb) | |
401 | + | let bk = getInteger(this, n) | |
402 | + | let bl = valueOrElse(getInteger(this, B(aM.caller, u)), 0) | |
403 | + | let bm = valueOrElse(getInteger(this, D(x, aM.caller, u)), 0) | |
404 | + | let bn = valueOrElse(getInteger(this, F(x, u)), 0) | |
405 | + | let bo = valueOrElse(getInteger(this, J(u)), 0) | |
406 | + | let bp = { | |
407 | + | let S = invoke(this, "getUserGwxAmountAtHeight", [toBase58String(aM.caller.bytes), bj], nil) | |
408 | + | if ($isInstanceOf(S, "Int")) | |
409 | + | then S | |
410 | + | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [toBase58String(aM.caller.bytes), bj], nil)) + " couldn't be cast to Int")) | |
395 | 411 | } | |
396 | - | let bl = (bk - bg) | |
397 | - | let bm = (bh + bc) | |
398 | - | let aY = [if ((getBoolean(v(w)) != unit)) | |
412 | + | let bq = (bp - bl) | |
413 | + | let br = (bm + bh) | |
414 | + | let bs = aj(z) | |
415 | + | let bd = [if ((getBoolean(w(x)) != unit)) | |
399 | 416 | then true | |
400 | - | else throw("invalid assets"), if (( | |
417 | + | else throw("invalid assets"), if ((bj > height)) | |
401 | 418 | then true | |
402 | - | else throw("invalid height"), if (( | |
419 | + | else throw("invalid height"), if ((bk == unit)) | |
403 | 420 | then true | |
404 | - | else throw("finalization in progress"), if (( | |
421 | + | else throw("finalization in progress"), if ((bp > 0)) | |
405 | 422 | then true | |
406 | - | else throw("you do not have gWX"), if (if (( | |
407 | - | then ( | |
423 | + | else throw("you do not have gWX"), if (if ((bh > 0)) | |
424 | + | then (bq >= bh) | |
408 | 425 | else false) | |
409 | 426 | then true | |
410 | - | else throw("invalid amount")] | |
411 | - | if ((aY == aY)) | |
427 | + | else throw("invalid amount"), if (bs) | |
428 | + | then true | |
429 | + | else throw("amount asset is not verified")] | |
430 | + | if ((bd == bd)) | |
412 | 431 | then { | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
432 | + | let bt = ao(x) | |
433 | + | let bu = toString(aM.caller) | |
434 | + | let bv = if (ax(bt, bu)) | |
416 | 435 | then nil | |
417 | - | else | |
418 | - | $Tuple2(([IntegerEntry( | |
436 | + | else aB(bt, bu) | |
437 | + | $Tuple2(([IntegerEntry(B(aM.caller, u), (bl + bh)), IntegerEntry(D(x, aM.caller, u), br), IntegerEntry(F(x, u), (bn + bh)), IntegerEntry(J(u), (bo + bh))] ++ bv), unit) | |
419 | 438 | } | |
420 | 439 | else throw("Strict value is not equal to itself.") | |
421 | 440 | } | |
422 | 441 | ||
423 | 442 | ||
424 | 443 | ||
425 | - | @Callable( | |
426 | - | func cancelVote ( | |
427 | - | let | |
428 | - | let | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | let | |
433 | - | let | |
434 | - | let | |
435 | - | let | |
436 | - | let | |
437 | - | let | |
444 | + | @Callable(aM) | |
445 | + | func cancelVote (z,A) = { | |
446 | + | let x = $Tuple2(z, A) | |
447 | + | let u = valueOrElse(getInteger(this, g), 0) | |
448 | + | let bi = T(this, t(u)) | |
449 | + | let bb = T(this, f) | |
450 | + | let bj = (bi + bb) | |
451 | + | let bk = getInteger(this, n) | |
452 | + | let bl = valueOrElse(getInteger(this, B(aM.caller, u)), 0) | |
453 | + | let bm = valueOrElse(getInteger(this, D(x, aM.caller, u)), 0) | |
454 | + | let bn = valueOrElse(getInteger(this, F(x, u)), 0) | |
455 | + | let bo = valueOrElse(getInteger(this, J(u)), 0) | |
456 | + | let bd = [if ((getBoolean(w(x)) != unit)) | |
438 | 457 | then true | |
439 | - | else throw("invalid assets"), if (( | |
458 | + | else throw("invalid assets"), if ((bj > height)) | |
440 | 459 | then true | |
441 | - | else throw("invalid height"), if (( | |
460 | + | else throw("invalid height"), if ((bk == unit)) | |
442 | 461 | then true | |
443 | - | else throw("finalization in progress"), if (( | |
462 | + | else throw("finalization in progress"), if ((bm > 0)) | |
444 | 463 | then true | |
445 | 464 | else throw("no vote")] | |
446 | - | if (( | |
465 | + | if ((bd == bd)) | |
447 | 466 | then { | |
448 | - | let | |
449 | - | let | |
450 | - | $Tuple2(([IntegerEntry( | |
467 | + | let bt = ao(x) | |
468 | + | let bu = toString(aM.caller) | |
469 | + | $Tuple2(([IntegerEntry(B(aM.caller, u), max([(bl - bm), 0])), DeleteEntry(D(x, aM.caller, u)), IntegerEntry(F(x, u), (bn - bm)), IntegerEntry(J(u), (bo - bm))] ++ aE(bt, bu)), unit) | |
451 | 470 | } | |
452 | 471 | else throw("Strict value is not equal to itself.") | |
453 | 472 | } | |
454 | 473 | ||
455 | 474 | ||
456 | 475 | ||
457 | - | @Callable( | |
458 | - | func setEpochLength ( | |
459 | - | let | |
476 | + | @Callable(aM) | |
477 | + | func setEpochLength (bw) = { | |
478 | + | let bc = [aN(aM), if ((bw > 0)) | |
460 | 479 | then true | |
461 | 480 | else throw("invalid epoch length")] | |
462 | - | if (( | |
463 | - | then $Tuple2([IntegerEntry(f, | |
481 | + | if ((bc == bc)) | |
482 | + | then $Tuple2([IntegerEntry(f, bw)], unit) | |
464 | 483 | else throw("Strict value is not equal to itself.") | |
465 | 484 | } | |
466 | 485 | ||
467 | 486 | ||
468 | 487 | ||
469 | - | @Callable( | |
470 | - | func setMaxDepth ( | |
471 | - | let | |
488 | + | @Callable(aM) | |
489 | + | func setMaxDepth (bx) = { | |
490 | + | let bc = [aN(aM), if ((bx > 0)) | |
472 | 491 | then true | |
473 | 492 | else throw("invalid max depth")] | |
474 | - | if (( | |
475 | - | then $Tuple2([IntegerEntry(h, | |
493 | + | if ((bc == bc)) | |
494 | + | then $Tuple2([IntegerEntry(h, bx)], unit) | |
476 | 495 | else throw("Strict value is not equal to itself.") | |
477 | 496 | } | |
478 | 497 | ||
479 | 498 | ||
480 | 499 | ||
481 | - | @Callable( | |
482 | - | func processVoteINTERNAL ( | |
483 | - | let | |
484 | - | if (( | |
500 | + | @Callable(aM) | |
501 | + | func processVoteINTERNAL (by,bu) = { | |
502 | + | let aQ = aL(aM) | |
503 | + | if ((aQ == aQ)) | |
485 | 504 | then { | |
486 | - | let | |
487 | - | let | |
488 | - | let | |
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let | |
494 | - | let | |
505 | + | let aV = valueOrErrorMessage(addressFromString(bu), ("processVoteINTERNAL: invalid user address " + bu)) | |
506 | + | let u = T(this, g) | |
507 | + | let bz = (u - 1) | |
508 | + | let bb = T(this, f) | |
509 | + | let bi = T(this, t(u)) | |
510 | + | let bj = (bi + bb) | |
511 | + | let bA = T(this, t(bz)) | |
512 | + | let bB = (bA + bb) | |
513 | + | let bC = if ((bz >= 0)) | |
495 | 514 | then true | |
496 | 515 | else throw("processVoteINTERNAL: invalid previous epoch") | |
497 | - | if (( | |
516 | + | if ((bC == bC)) | |
498 | 517 | then { | |
499 | - | let w = U(bs) | |
500 | - | let bk = { | |
501 | - | let R = invoke(this, "getUserGwxAmountAtHeight", [bo, be], nil) | |
502 | - | if ($isInstanceOf(R, "Int")) | |
503 | - | then R | |
504 | - | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [bo, be], nil)) + " couldn't be cast to Int")) | |
518 | + | let x = V(by) | |
519 | + | let bD = x | |
520 | + | let z = bD._1 | |
521 | + | let A = bD._2 | |
522 | + | let bs = aj(z) | |
523 | + | let bp = { | |
524 | + | let S = invoke(this, "getUserGwxAmountAtHeight", [bu, bj], nil) | |
525 | + | if ($isInstanceOf(S, "Int")) | |
526 | + | then S | |
527 | + | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [bu, bj], nil)) + " couldn't be cast to Int")) | |
505 | 528 | } | |
506 | - | let | |
507 | - | let | |
508 | - | if ($isInstanceOf( | |
509 | - | then | |
510 | - | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [ | |
529 | + | let bE = { | |
530 | + | let S = invoke(this, "getUserGwxAmountAtHeight", [bu, bB], nil) | |
531 | + | if ($isInstanceOf(S, "Int")) | |
532 | + | then S | |
533 | + | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [bu, bB], nil)) + " couldn't be cast to Int")) | |
511 | 534 | } | |
512 | - | let bj = valueOrElse(getInteger(I(t)), 0) | |
513 | - | let by = valueOrElse(getInteger(E(w, t)), 0) | |
514 | - | let bz = valueOrErrorMessage(getInteger(C(w, aQ, bt)), (((("processVoteINTERNAL " + bs) + " ") + bo) + ": no previous vote")) | |
515 | - | let bg = valueOrElse(getInteger(this, A(aQ, t)), 0) | |
516 | - | let bm = fraction(bz, bk, bx) | |
517 | - | let bA = if ((bm > 0)) | |
518 | - | then [IntegerEntry(C(w, aQ, t), bm), IntegerEntry(I(t), (bj + bm)), IntegerEntry(E(w, t), (by + bm)), IntegerEntry(A(aQ, t), (bg + bm))] | |
519 | - | else az(aj(w), bo) | |
520 | - | $Tuple2(bA, unit) | |
535 | + | let bo = valueOrElse(getInteger(J(u)), 0) | |
536 | + | let bF = valueOrElse(getInteger(F(x, u)), 0) | |
537 | + | let bG = valueOrErrorMessage(getInteger(D(x, aV, bz)), (((("processVoteINTERNAL " + by) + " ") + bu) + ": no previous vote")) | |
538 | + | let bl = valueOrElse(getInteger(this, B(aV, u)), 0) | |
539 | + | let br = fraction(bG, bp, bE) | |
540 | + | let bH = if (if ((br > 0)) | |
541 | + | then bs | |
542 | + | else false) | |
543 | + | then [IntegerEntry(D(x, aV, u), br), IntegerEntry(J(u), (bo + br)), IntegerEntry(F(x, u), (bF + br)), IntegerEntry(B(aV, u), (bl + br))] | |
544 | + | else aE(ao(x), bu) | |
545 | + | $Tuple2(bH, unit) | |
521 | 546 | } | |
522 | 547 | else throw("Strict value is not equal to itself.") | |
523 | 548 | } | |
526 | 551 | ||
527 | 552 | ||
528 | 553 | ||
529 | - | @Callable( | |
530 | - | func processPoolINTERNAL ( | |
531 | - | let | |
532 | - | if (( | |
554 | + | @Callable(aM) | |
555 | + | func processPoolINTERNAL (by) = { | |
556 | + | let aQ = aL(aM) | |
557 | + | if ((aQ == aQ)) | |
533 | 558 | then { | |
534 | - | let | |
535 | - | let | |
559 | + | let bI = (T(this, g) - 1) | |
560 | + | let bC = if ((bI >= 0)) | |
536 | 561 | then true | |
537 | 562 | else throw("processPoolINTERNAL: invalid target epoch") | |
538 | - | if (( | |
563 | + | if ((bC == bC)) | |
539 | 564 | then { | |
540 | - | let | |
541 | - | let | |
542 | - | let | |
543 | - | let | |
544 | - | let | |
545 | - | let | |
546 | - | let | |
547 | - | let | |
548 | - | let | |
549 | - | if ($isInstanceOf( | |
550 | - | then | |
551 | - | else throw(($getType(invoke( | |
565 | + | let x = V(by) | |
566 | + | let bJ = x | |
567 | + | let z = bJ._1 | |
568 | + | let A = bJ._2 | |
569 | + | let ba = addressFromStringValue(R(this, l)) | |
570 | + | let af = addressFromStringValue(R(this, j)) | |
571 | + | let ai = X(z, A) | |
572 | + | let bK = { | |
573 | + | let S = invoke(ba, "usersListTraversal", [ai], nil) | |
574 | + | if ($isInstanceOf(S, "Boolean")) | |
575 | + | then S | |
576 | + | else throw(($getType(invoke(ba, "usersListTraversal", [ai], nil)) + " couldn't be cast to Boolean")) | |
552 | 577 | } | |
553 | - | if (( | |
554 | - | then if ( | |
578 | + | if ((bK == bK)) | |
579 | + | then if (bK) | |
555 | 580 | then $Tuple2(nil, true) | |
556 | 581 | else { | |
557 | - | let bj = valueOrElse(getInteger(this, I(bB)), 0) | |
558 | - | let by = valueOrElse(getInteger(this, E(w, bB)), 0) | |
559 | - | let bE = if ((bj == 0)) | |
582 | + | let bs = aj(z) | |
583 | + | let bo = valueOrElse(getInteger(this, J(bI)), 0) | |
584 | + | let bF = valueOrElse(getInteger(this, F(x, bI)), 0) | |
585 | + | let bL = if (if ((bo == 0)) | |
586 | + | then true | |
587 | + | else !(bs)) | |
560 | 588 | then 0 | |
561 | - | else fraction(by, b, bj) | |
562 | - | let bF = invoke(ae, "modifyWeight", [ah, bE], nil) | |
563 | - | if ((bF == bF)) | |
564 | - | then $Tuple2([IntegerEntry(G(w, bB), bE)], false) | |
589 | + | else fraction(bF, b, bo) | |
590 | + | let bM = invoke(af, "modifyWeight", [ai, bL], nil) | |
591 | + | if ((bM == bM)) | |
592 | + | then { | |
593 | + | let bN = if (bs) | |
594 | + | then nil | |
595 | + | else ([DeleteEntry(w(x))] ++ aE(an, by)) | |
596 | + | $Tuple2(([IntegerEntry(H(x, bI), bL)] ++ bN), false) | |
597 | + | } | |
565 | 598 | else throw("Strict value is not equal to itself.") | |
566 | 599 | } | |
567 | 600 | else throw("Strict value is not equal to itself.") | |
573 | 606 | ||
574 | 607 | ||
575 | 608 | ||
576 | - | @Callable( | |
609 | + | @Callable(aM) | |
577 | 610 | func finalizeHelper () = { | |
578 | - | let | |
579 | - | let | |
580 | - | let | |
581 | - | let | |
582 | - | let | |
583 | - | let | |
584 | - | if ((height >= | |
611 | + | let u = valueOrElse(getInteger(this, g), 0) | |
612 | + | let bO = (u - 1) | |
613 | + | let bi = T(this, t(u)) | |
614 | + | let bb = T(this, f) | |
615 | + | let bj = (bi + bb) | |
616 | + | let bk = getInteger(this, n) | |
617 | + | if ((height >= bj)) | |
585 | 618 | then { | |
586 | - | let | |
587 | - | $Tuple2([IntegerEntry( | |
619 | + | let bP = (u + 1) | |
620 | + | $Tuple2([IntegerEntry(t(bP), height), IntegerEntry(q, height), IntegerEntry(g, bP), IntegerEntry(n, d)], true) | |
588 | 621 | } | |
589 | - | else if (( | |
622 | + | else if ((bk == unit)) | |
590 | 623 | then $Tuple2(nil, false) | |
591 | - | else if (( | |
624 | + | else if ((bk == d)) | |
592 | 625 | then { | |
593 | - | let | |
594 | - | let | |
595 | - | let | |
596 | - | if ($isInstanceOf( | |
626 | + | let bQ = getString(o) | |
627 | + | let bR = getString(p) | |
628 | + | let O = bQ | |
629 | + | if ($isInstanceOf(O, "Unit")) | |
597 | 630 | then { | |
598 | - | let | |
599 | - | if ($isInstanceOf( | |
600 | - | then $Tuple2([IntegerEntry( | |
601 | - | else if ($isInstanceOf( | |
631 | + | let bS = getString(aq(an)) | |
632 | + | if ($isInstanceOf(bS, "Unit")) | |
633 | + | then $Tuple2([IntegerEntry(n, e), DeleteEntry(o), DeleteEntry(p)], true) | |
634 | + | else if ($isInstanceOf(bS, "String")) | |
602 | 635 | then { | |
603 | - | let | |
604 | - | $Tuple2([StringEntry( | |
636 | + | let bT = bS | |
637 | + | $Tuple2([StringEntry(o, bT)], true) | |
605 | 638 | } | |
606 | 639 | else throw("Match error") | |
607 | 640 | } | |
608 | - | else if ($isInstanceOf( | |
641 | + | else if ($isInstanceOf(O, "String")) | |
609 | 642 | then { | |
610 | - | let | |
611 | - | let | |
612 | - | let | |
613 | - | let | |
614 | - | if ($isInstanceOf( | |
615 | - | then getString( | |
616 | - | else if ($isInstanceOf( | |
643 | + | let by = O | |
644 | + | let x = V(by) | |
645 | + | let bU = { | |
646 | + | let bS = bR | |
647 | + | if ($isInstanceOf(bS, "Unit")) | |
648 | + | then getString(aq(ao(x))) | |
649 | + | else if ($isInstanceOf(bS, "String")) | |
617 | 650 | then { | |
618 | - | let | |
619 | - | let | |
620 | - | if (( | |
621 | - | then getString( | |
651 | + | let bV = bS | |
652 | + | let bW = invoke(this, "processVoteINTERNAL", [by, bV], nil) | |
653 | + | if ((bW == bW)) | |
654 | + | then getString(aw(ao(x), bV)) | |
622 | 655 | else throw("Strict value is not equal to itself.") | |
623 | 656 | } | |
624 | 657 | else throw("Match error") | |
625 | 658 | } | |
626 | - | let | |
627 | - | if ($isInstanceOf( | |
659 | + | let bS = bU | |
660 | + | if ($isInstanceOf(bS, "Unit")) | |
628 | 661 | then { | |
629 | - | let | |
630 | - | let | |
631 | - | if ($isInstanceOf( | |
632 | - | then $Tuple2([IntegerEntry( | |
633 | - | else if ($isInstanceOf( | |
662 | + | let bX = getString(aw(an, by)) | |
663 | + | let bY = bX | |
664 | + | if ($isInstanceOf(bY, "Unit")) | |
665 | + | then $Tuple2([IntegerEntry(n, e), DeleteEntry(o), DeleteEntry(p)], true) | |
666 | + | else if ($isInstanceOf(bY, "String")) | |
634 | 667 | then { | |
635 | - | let | |
636 | - | $Tuple2([StringEntry( | |
668 | + | let aI = bY | |
669 | + | $Tuple2([StringEntry(o, aI), DeleteEntry(p)], true) | |
637 | 670 | } | |
638 | 671 | else throw("Match error") | |
639 | 672 | } | |
640 | - | else if ($isInstanceOf( | |
673 | + | else if ($isInstanceOf(bS, "String")) | |
641 | 674 | then { | |
642 | - | let | |
643 | - | $Tuple2([StringEntry( | |
675 | + | let bZ = bS | |
676 | + | $Tuple2([StringEntry(p, bZ)], true) | |
644 | 677 | } | |
645 | 678 | else throw("Match error") | |
646 | 679 | } | |
647 | 680 | else throw("Match error") | |
648 | 681 | } | |
649 | - | else if (( | |
682 | + | else if ((bk == e)) | |
650 | 683 | then { | |
651 | - | let | |
652 | - | let | |
653 | - | if ($isInstanceOf( | |
684 | + | let bQ = getString(o) | |
685 | + | let O = bQ | |
686 | + | if ($isInstanceOf(O, "Unit")) | |
654 | 687 | then { | |
655 | - | let | |
656 | - | if ($isInstanceOf( | |
657 | - | then $Tuple2([DeleteEntry( | |
658 | - | else if ($isInstanceOf( | |
688 | + | let bS = getString(aq(an)) | |
689 | + | if ($isInstanceOf(bS, "Unit")) | |
690 | + | then $Tuple2([DeleteEntry(n), BooleanEntry(v(bO), true), IntegerEntry(r, u), IntegerEntry(s, bi)], true) | |
691 | + | else if ($isInstanceOf(bS, "String")) | |
659 | 692 | then { | |
660 | - | let | |
661 | - | $Tuple2([StringEntry( | |
693 | + | let ca = bS | |
694 | + | $Tuple2([StringEntry(o, ca)], true) | |
662 | 695 | } | |
663 | 696 | else throw("Match error") | |
664 | 697 | } | |
665 | - | else if ($isInstanceOf( | |
698 | + | else if ($isInstanceOf(O, "String")) | |
666 | 699 | then { | |
667 | - | let | |
668 | - | let | |
669 | - | let | |
670 | - | if ($isInstanceOf( | |
671 | - | then | |
672 | - | else throw(($getType(invoke(this, "processPoolINTERNAL", [ | |
700 | + | let by = O | |
701 | + | let bK = { | |
702 | + | let S = invoke(this, "processPoolINTERNAL", [by], nil) | |
703 | + | if ($isInstanceOf(S, "Boolean")) | |
704 | + | then S | |
705 | + | else throw(($getType(invoke(this, "processPoolINTERNAL", [by], nil)) + " couldn't be cast to Boolean")) | |
673 | 706 | } | |
674 | - | if (( | |
675 | - | then if ( | |
707 | + | if ((bK == bK)) | |
708 | + | then if (bK) | |
676 | 709 | then $Tuple2(nil, true) | |
677 | 710 | else { | |
678 | - | let | |
679 | - | let | |
680 | - | if ($isInstanceOf( | |
681 | - | then $Tuple2([DeleteEntry( | |
682 | - | else if ($isInstanceOf( | |
711 | + | let bX = getString(aw(an, by)) | |
712 | + | let bS = bX | |
713 | + | if ($isInstanceOf(bS, "Unit")) | |
714 | + | then $Tuple2([DeleteEntry(n), BooleanEntry(v(bO), true), IntegerEntry(r, u), IntegerEntry(s, bi), DeleteEntry(o)], true) | |
715 | + | else if ($isInstanceOf(bS, "String")) | |
683 | 716 | then { | |
684 | - | let | |
685 | - | $Tuple2([StringEntry( | |
717 | + | let ca = bS | |
718 | + | $Tuple2([StringEntry(o, ca)], true) | |
686 | 719 | } | |
687 | 720 | else throw("Match error") | |
688 | 721 | } | |
695 | 728 | ||
696 | 729 | ||
697 | 730 | ||
698 | - | @Callable( | |
699 | - | func finalizeWrapper ( | |
700 | - | let | |
701 | - | let | |
702 | - | if ($isInstanceOf( | |
703 | - | then | |
731 | + | @Callable(aM) | |
732 | + | func finalizeWrapper (cb) = { | |
733 | + | let cc = { | |
734 | + | let S = invoke(this, "finalizeHelper", nil, nil) | |
735 | + | if ($isInstanceOf(S, "Boolean")) | |
736 | + | then S | |
704 | 737 | else throw(($getType(invoke(this, "finalizeHelper", nil, nil)) + " couldn't be cast to Boolean")) | |
705 | 738 | } | |
706 | - | if (( | |
707 | - | then if (!( | |
708 | - | then if (( | |
739 | + | if ((cc == cc)) | |
740 | + | then if (!(cc)) | |
741 | + | then if ((cb == 0)) | |
709 | 742 | then throw("Current voting is not over yet") | |
710 | 743 | else $Tuple2(nil, unit) | |
711 | 744 | else { | |
712 | - | let | |
713 | - | if (( | |
745 | + | let cd = valueOrElse(getInteger(this, h), c) | |
746 | + | if ((cd > cb)) | |
714 | 747 | then { | |
715 | - | let | |
716 | - | if (( | |
748 | + | let ce = invoke(this, "finalizeWrapper", [(cb + 1)], nil) | |
749 | + | if ((ce == ce)) | |
717 | 750 | then $Tuple2(nil, unit) | |
718 | 751 | else throw("Strict value is not equal to itself.") | |
719 | 752 | } | |
724 | 757 | ||
725 | 758 | ||
726 | 759 | ||
727 | - | @Callable( | |
760 | + | @Callable(aM) | |
728 | 761 | func finalize () = { | |
729 | - | let | |
730 | - | if (( | |
762 | + | let ce = invoke(this, "finalizeWrapper", [0], nil) | |
763 | + | if ((ce == ce)) | |
731 | 764 | then $Tuple2(nil, unit) | |
732 | 765 | else throw("Strict value is not equal to itself.") | |
733 | 766 | } | |
734 | 767 | ||
735 | 768 | ||
736 | 769 | ||
737 | - | @Callable( | |
738 | - | func onVerificationLoss ( | |
770 | + | @Callable(aM) | |
771 | + | func onVerificationLoss (ak) = $Tuple2(nil, unit) | |
739 | 772 | ||
740 | 773 | ||
741 | 774 | ||
742 | - | @Callable( | |
743 | - | func containsNodeREADONLY ( | |
775 | + | @Callable(aM) | |
776 | + | func containsNodeREADONLY (ar,av) = $Tuple2(nil, ax(ar, av)) | |
744 | 777 | ||
745 | 778 | ||
746 | 779 | ||
747 | - | @Callable( | |
748 | - | func insertNode ( | |
749 | - | let | |
750 | - | if (( | |
751 | - | then $Tuple2( | |
780 | + | @Callable(aM) | |
781 | + | func insertNode (ar,av) = { | |
782 | + | let aQ = aN(aM) | |
783 | + | if ((aQ == aQ)) | |
784 | + | then $Tuple2(aB(ar, av), unit) | |
752 | 785 | else throw("Strict value is not equal to itself.") | |
753 | 786 | } | |
754 | 787 | ||
755 | 788 | ||
756 | 789 | ||
757 | - | @Callable( | |
758 | - | func deleteNode ( | |
759 | - | let | |
760 | - | if (( | |
761 | - | then $Tuple2( | |
790 | + | @Callable(aM) | |
791 | + | func deleteNode (ar,av) = { | |
792 | + | let aQ = aN(aM) | |
793 | + | if ((aQ == aQ)) | |
794 | + | then $Tuple2(aE(ar, av), unit) | |
762 | 795 | else throw("Strict value is not equal to itself.") | |
763 | 796 | } | |
764 | 797 | ||
765 | 798 | ||
766 | - | @Verifier( | |
767 | - | func | |
768 | - | let | |
769 | - | let | |
770 | - | if ($isInstanceOf( | |
799 | + | @Verifier(cf) | |
800 | + | func cg () = { | |
801 | + | let ch = { | |
802 | + | let O = aH() | |
803 | + | if ($isInstanceOf(O, "ByteVector")) | |
771 | 804 | then { | |
772 | - | let | |
773 | - | | |
805 | + | let aO = O | |
806 | + | aO | |
774 | 807 | } | |
775 | - | else if ($isInstanceOf( | |
776 | - | then | |
808 | + | else if ($isInstanceOf(O, "Unit")) | |
809 | + | then cf.senderPublicKey | |
777 | 810 | else throw("Match error") | |
778 | 811 | } | |
779 | - | sigVerify( | |
812 | + | sigVerify(cf.bodyBytes, cf.proofs[0], ch) | |
780 | 813 | } | |
781 | 814 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = 10 | |
9 | 9 | ||
10 | 10 | let d = 0 | |
11 | 11 | ||
12 | 12 | let e = 1 | |
13 | 13 | ||
14 | 14 | let f = makeString(["%s", "epochLength"], a) | |
15 | 15 | ||
16 | 16 | let g = makeString(["%s", "currentEpoch"], a) | |
17 | 17 | ||
18 | 18 | let h = makeString(["%s", "maxDepth"], a) | |
19 | 19 | ||
20 | 20 | let i = makeString(["%s", "votingEmissionCandidateContract"], a) | |
21 | 21 | ||
22 | 22 | let j = makeString(["%s", "factoryContract"], a) | |
23 | 23 | ||
24 | 24 | let k = makeString(["%s", "boostingContract"], a) | |
25 | 25 | ||
26 | 26 | let l = makeString(["%s", "stakingContract"], a) | |
27 | 27 | ||
28 | - | let m = makeString(["%s", " | |
28 | + | let m = makeString(["%s", "assetsStoreContract"], a) | |
29 | 29 | ||
30 | - | let n = makeString(["%s", " | |
30 | + | let n = makeString(["%s", "finalizationStage"], a) | |
31 | 31 | ||
32 | - | let o = makeString(["%s", " | |
32 | + | let o = makeString(["%s", "nextPool"], a) | |
33 | 33 | ||
34 | - | let p = makeString(["%s", " | |
34 | + | let p = makeString(["%s", "nextUser"], a) | |
35 | 35 | ||
36 | - | let q = makeString(["%s", " | |
36 | + | let q = makeString(["%s", "startHeight"], a) | |
37 | 37 | ||
38 | - | let r = makeString(["%s", " | |
38 | + | let r = makeString(["%s", "currentEpochUi"], a) | |
39 | 39 | ||
40 | - | func s (t) = makeString(["%s%d", "startHeight", toString(t)], a) | |
40 | + | let s = makeString(["%s", "startHeightUi"], a) | |
41 | + | ||
42 | + | func t (u) = makeString(["%s%d", "startHeight", toString(u)], a) | |
41 | 43 | ||
42 | 44 | ||
43 | - | func | |
45 | + | func v (u) = makeString(["%s%d", "finalized", toString(u)], a) | |
44 | 46 | ||
45 | 47 | ||
46 | - | func | |
47 | - | let | |
48 | - | let | |
49 | - | let | |
50 | - | makeString(["%s%s%s", "inList", | |
48 | + | func w (x) = { | |
49 | + | let y = x | |
50 | + | let z = y._1 | |
51 | + | let A = y._2 | |
52 | + | makeString(["%s%s%s", "inList", z, A], a) | |
51 | 53 | } | |
52 | 54 | ||
53 | 55 | ||
54 | - | func | |
56 | + | func B (C,u) = makeString(["%s%s%d", "used", toString(C), toString(u)], a) | |
55 | 57 | ||
56 | 58 | ||
57 | - | func | |
58 | - | let | |
59 | - | let | |
60 | - | let | |
61 | - | makeString(["%s%s%s%s%d", "vote", | |
59 | + | func D (x,C,u) = { | |
60 | + | let E = x | |
61 | + | let z = E._1 | |
62 | + | let A = E._2 | |
63 | + | makeString(["%s%s%s%s%d", "vote", z, A, toString(C), toString(u)], a) | |
62 | 64 | } | |
63 | 65 | ||
64 | 66 | ||
65 | - | func | |
66 | - | let | |
67 | - | let | |
68 | - | let | |
69 | - | makeString(["%s%s%s%d", "votingResult", | |
67 | + | func F (x,u) = { | |
68 | + | let G = x | |
69 | + | let z = G._1 | |
70 | + | let A = G._2 | |
71 | + | makeString(["%s%s%s%d", "votingResult", z, A, toString(u)], a) | |
70 | 72 | } | |
71 | 73 | ||
72 | 74 | ||
73 | - | func | |
74 | - | let | |
75 | - | let | |
76 | - | let | |
77 | - | makeString(["%s%s%s%d", "poolShare", | |
75 | + | func H (x,u) = { | |
76 | + | let I = x | |
77 | + | let z = I._1 | |
78 | + | let A = I._2 | |
79 | + | makeString(["%s%s%s%d", "poolShare", z, A, toString(u)], a) | |
78 | 80 | } | |
79 | 81 | ||
80 | 82 | ||
81 | - | func | |
83 | + | func J (u) = makeString(["%s%d", "totalVotes", toString(u)], a) | |
82 | 84 | ||
83 | 85 | ||
84 | - | func | |
85 | - | let | |
86 | + | func K (C,L,M) = { | |
87 | + | let N = makeString(["mandatory ", toString(C), ".", L, " is not defined"], "") | |
86 | 88 | valueOrErrorMessage({ | |
87 | - | let | |
88 | - | if ($isInstanceOf( | |
89 | + | let O = M | |
90 | + | if ($isInstanceOf(O, "String")) | |
89 | 91 | then { | |
90 | - | let | |
91 | - | getString( | |
92 | + | let P = O | |
93 | + | getString(C, L) | |
92 | 94 | } | |
93 | - | else if ($isInstanceOf( | |
95 | + | else if ($isInstanceOf(O, "Int")) | |
94 | 96 | then { | |
95 | - | let | |
96 | - | getInteger( | |
97 | + | let Q = O | |
98 | + | getInteger(C, L) | |
97 | 99 | } | |
98 | 100 | else throw("invalid entry type") | |
99 | - | }, | |
101 | + | }, N) | |
100 | 102 | } | |
101 | 103 | ||
102 | 104 | ||
103 | - | func | |
104 | - | let | |
105 | - | if ($isInstanceOf( | |
106 | - | then | |
107 | - | else throw(($getType( | |
105 | + | func R (C,L) = { | |
106 | + | let S = K(C, L, "") | |
107 | + | if ($isInstanceOf(S, "String")) | |
108 | + | then S | |
109 | + | else throw(($getType(K(C, L, "")) + " couldn't be cast to String")) | |
108 | 110 | } | |
109 | 111 | ||
110 | 112 | ||
111 | - | func | |
112 | - | let | |
113 | - | if ($isInstanceOf( | |
114 | - | then | |
115 | - | else throw(($getType( | |
113 | + | func T (C,L) = { | |
114 | + | let S = K(C, L, 0) | |
115 | + | if ($isInstanceOf(S, "Int")) | |
116 | + | then S | |
117 | + | else throw(($getType(K(C, L, 0)) + " couldn't be cast to Int")) | |
116 | 118 | } | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func U (x) = ((x._1 + a) + x._2) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func | |
123 | - | let | |
124 | - | if ((size( | |
125 | - | then $Tuple2( | |
124 | + | func V (P) = { | |
125 | + | let W = split(P, a) | |
126 | + | if ((size(W) == 2)) | |
127 | + | then $Tuple2(W[0], W[1]) | |
126 | 128 | else throw("invalid pool string") | |
127 | 129 | } | |
128 | 130 | ||
129 | 131 | ||
130 | - | func | |
131 | - | func | |
132 | + | func X (z,A) = { | |
133 | + | func Y (Z) = ("%s%s%s__mappings__baseAsset2internalId__" + Z) | |
132 | 134 | ||
133 | - | func | |
135 | + | func aa (ab,ac) = (((("%d%d%s%s__" + toString(ab)) + "__") + toString(ac)) + "__mappings__poolAssets2PoolContract") | |
134 | 136 | ||
135 | - | func | |
137 | + | func ad (ae) = (("%s%s%s__" + ae) + "__mappings__poolContract2LpAsset") | |
136 | 138 | ||
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | let | |
141 | - | let | |
142 | - | | |
139 | + | let af = addressFromStringValue(R(this, j)) | |
140 | + | let ag = T(af, Y(z)) | |
141 | + | let ah = T(af, Y(A)) | |
142 | + | let ae = R(af, aa(ag, ah)) | |
143 | + | let ai = R(af, ad(ae)) | |
144 | + | ai | |
143 | 145 | } | |
144 | 146 | ||
145 | 147 | ||
146 | - | let ai = "pools" | |
147 | - | ||
148 | - | func aj (w) = { | |
149 | - | let ak = w | |
150 | - | let y = ak._1 | |
151 | - | let z = ak._2 | |
152 | - | makeString(["votes", y, z], a) | |
148 | + | func aj (ak) = { | |
149 | + | let al = addressFromStringValue(R(this, m)) | |
150 | + | let am = { | |
151 | + | let S = invoke(al, "isVerifiedREADONLY", [ak], nil) | |
152 | + | if ($isInstanceOf(S, "Boolean")) | |
153 | + | then S | |
154 | + | else throw(($getType(invoke(al, "isVerifiedREADONLY", [ak], nil)) + " couldn't be cast to Boolean")) | |
155 | + | } | |
156 | + | am | |
153 | 157 | } | |
154 | 158 | ||
155 | 159 | ||
156 | - | func al (am) = { | |
157 | - | let an = if ((am == ai)) | |
158 | - | then "%s%s" | |
159 | - | else "%s%s%s%s" | |
160 | - | makeString([an, am, "head"], a) | |
160 | + | let an = "pools" | |
161 | + | ||
162 | + | func ao (x) = { | |
163 | + | let ap = x | |
164 | + | let z = ap._1 | |
165 | + | let A = ap._2 | |
166 | + | makeString(["votes", z, A], a) | |
161 | 167 | } | |
162 | 168 | ||
163 | 169 | ||
164 | - | func | |
165 | - | let | |
170 | + | func aq (ar) = { | |
171 | + | let as = if ((ar == an)) | |
166 | 172 | then "%s%s" | |
167 | 173 | else "%s%s%s%s" | |
168 | - | makeString([ | |
174 | + | makeString([as, ar, "head"], a) | |
169 | 175 | } | |
170 | 176 | ||
171 | 177 | ||
172 | - | func | |
173 | - | let | |
174 | - | then "%s%s | |
175 | - | else "%s%s%s%s | |
176 | - | makeString([ | |
178 | + | func at (ar) = { | |
179 | + | let as = if ((ar == an)) | |
180 | + | then "%s%s" | |
181 | + | else "%s%s%s%s" | |
182 | + | makeString([as, ar, "size"], a) | |
177 | 183 | } | |
178 | 184 | ||
179 | 185 | ||
180 | - | func | |
181 | - | let | |
186 | + | func au (ar,av) = { | |
187 | + | let as = if ((ar == an)) | |
182 | 188 | then "%s%s%s%s" | |
183 | 189 | else "%s%s%s%s%s" | |
184 | - | makeString([ | |
190 | + | makeString([as, ar, av, "prev"], a) | |
185 | 191 | } | |
186 | 192 | ||
187 | 193 | ||
188 | - | func as (am,aq) = { | |
189 | - | let at = getString(this, al(am)) | |
190 | - | let au = getString(this, ap(am, aq)) | |
191 | - | let av = getString(this, ar(am, aq)) | |
192 | - | if (if ((aq == valueOrElse(at, ""))) | |
193 | - | then true | |
194 | - | else (au != unit)) | |
195 | - | then true | |
196 | - | else (av != unit) | |
194 | + | func aw (ar,av) = { | |
195 | + | let as = if ((ar == an)) | |
196 | + | then "%s%s%s%s" | |
197 | + | else "%s%s%s%s%s" | |
198 | + | makeString([as, ar, av, "next"], a) | |
197 | 199 | } | |
198 | 200 | ||
199 | 201 | ||
200 | - | func aw (am,aq) = { | |
201 | - | let at = getString(this, al(am)) | |
202 | - | let ax = valueOrElse(getInteger(this, ao(am)), 0) | |
203 | - | let ay = if (!(as(am, aq))) | |
202 | + | func ax (ar,av) = { | |
203 | + | let ay = getString(this, aq(ar)) | |
204 | + | let az = getString(this, au(ar, av)) | |
205 | + | let aA = getString(this, aw(ar, av)) | |
206 | + | if (if ((av == valueOrElse(ay, ""))) | |
207 | + | then true | |
208 | + | else (az != unit)) | |
209 | + | then true | |
210 | + | else (aA != unit) | |
211 | + | } | |
212 | + | ||
213 | + | ||
214 | + | func aB (ar,av) = { | |
215 | + | let ay = getString(this, aq(ar)) | |
216 | + | let aC = valueOrElse(getInteger(this, at(ar)), 0) | |
217 | + | let aD = if (!(ax(ar, av))) | |
204 | 218 | then true | |
205 | 219 | else throw("Node exists") | |
206 | - | if (( | |
207 | - | then (([IntegerEntry( | |
208 | - | then [StringEntry(ar | |
209 | - | else nil)) ++ [StringEntry( | |
220 | + | if ((aD == aD)) | |
221 | + | then (([IntegerEntry(at(ar), (aC + 1))] ++ (if ((ay != unit)) | |
222 | + | then [StringEntry(aw(ar, av), value(ay)), StringEntry(au(ar, value(ay)), av)] | |
223 | + | else nil)) ++ [StringEntry(aq(ar), av)]) | |
210 | 224 | else throw("Strict value is not equal to itself.") | |
211 | 225 | } | |
212 | 226 | ||
213 | 227 | ||
214 | - | func | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | ([IntegerEntry( | |
220 | - | then ( | |
228 | + | func aE (ar,av) = { | |
229 | + | let ay = getString(this, aq(ar)) | |
230 | + | let aC = valueOrElse(getInteger(this, at(ar)), 0) | |
231 | + | let az = getString(this, au(ar, av)) | |
232 | + | let aA = getString(this, aw(ar, av)) | |
233 | + | ([IntegerEntry(at(ar), (aC - 1))] ++ (if (if ((az != unit)) | |
234 | + | then (aA != unit) | |
221 | 235 | else false) | |
222 | - | then [StringEntry(ar | |
223 | - | else if (( | |
224 | - | then [StringEntry( | |
225 | - | else if (( | |
226 | - | then [DeleteEntry( | |
227 | - | else if (( | |
228 | - | then [DeleteEntry( | |
229 | - | else throw(((("invalid node: " + | |
236 | + | then [StringEntry(aw(ar, value(az)), value(aA)), StringEntry(au(ar, value(aA)), value(az)), DeleteEntry(au(ar, av)), DeleteEntry(aw(ar, av))] | |
237 | + | else if ((aA != unit)) | |
238 | + | then [StringEntry(aq(ar), value(aA)), DeleteEntry(aw(ar, av)), DeleteEntry(au(ar, value(aA)))] | |
239 | + | else if ((az != unit)) | |
240 | + | then [DeleteEntry(au(ar, av)), DeleteEntry(aw(ar, value(az)))] | |
241 | + | else if ((av == valueOrElse(ay, ""))) | |
242 | + | then [DeleteEntry(aq(ar))] | |
243 | + | else throw(((("invalid node: " + ar) + ".") + av)))) | |
230 | 244 | } | |
231 | 245 | ||
232 | 246 | ||
233 | - | func | |
247 | + | func aF () = "%s__managerPublicKey" | |
234 | 248 | ||
235 | 249 | ||
236 | - | func | |
250 | + | func aG () = "%s__pendingManagerPublicKey" | |
237 | 251 | ||
238 | 252 | ||
239 | - | func | |
240 | - | let | |
241 | - | if ($isInstanceOf( | |
253 | + | func aH () = { | |
254 | + | let O = getString(aF()) | |
255 | + | if ($isInstanceOf(O, "String")) | |
242 | 256 | then { | |
243 | - | let | |
244 | - | fromBase58String( | |
257 | + | let aI = O | |
258 | + | fromBase58String(aI) | |
245 | 259 | } | |
246 | - | else if ($isInstanceOf( | |
260 | + | else if ($isInstanceOf(O, "Unit")) | |
247 | 261 | then unit | |
248 | 262 | else throw("Match error") | |
249 | 263 | } | |
250 | 264 | ||
251 | 265 | ||
252 | - | func | |
253 | - | let | |
254 | - | if ($isInstanceOf( | |
266 | + | func aJ () = { | |
267 | + | let O = getString(aG()) | |
268 | + | if ($isInstanceOf(O, "String")) | |
255 | 269 | then { | |
256 | - | let | |
257 | - | fromBase58String( | |
270 | + | let aI = O | |
271 | + | fromBase58String(aI) | |
258 | 272 | } | |
259 | - | else if ($isInstanceOf( | |
273 | + | else if ($isInstanceOf(O, "Unit")) | |
260 | 274 | then unit | |
261 | 275 | else throw("Match error") | |
262 | 276 | } | |
263 | 277 | ||
264 | 278 | ||
265 | - | let | |
279 | + | let aK = throw("Permission denied") | |
266 | 280 | ||
267 | - | func | |
281 | + | func aL (aM) = if ((aM.caller == this)) | |
268 | 282 | then true | |
269 | - | else | |
283 | + | else aK | |
270 | 284 | ||
271 | 285 | ||
272 | - | func | |
273 | - | let | |
274 | - | if ($isInstanceOf( | |
286 | + | func aN (aM) = { | |
287 | + | let O = aH() | |
288 | + | if ($isInstanceOf(O, "ByteVector")) | |
275 | 289 | then { | |
276 | - | let | |
277 | - | if (( | |
290 | + | let aO = O | |
291 | + | if ((aM.callerPublicKey == aO)) | |
278 | 292 | then true | |
279 | - | else | |
293 | + | else aK | |
280 | 294 | } | |
281 | - | else if ($isInstanceOf( | |
282 | - | then | |
295 | + | else if ($isInstanceOf(O, "Unit")) | |
296 | + | then aL(aM) | |
283 | 297 | else throw("Match error") | |
284 | 298 | } | |
285 | 299 | ||
286 | 300 | ||
287 | - | @Callable( | |
288 | - | func setManager ( | |
289 | - | let | |
290 | - | if (( | |
301 | + | @Callable(aM) | |
302 | + | func setManager (aP) = { | |
303 | + | let aQ = aN(aM) | |
304 | + | if ((aQ == aQ)) | |
291 | 305 | then { | |
292 | - | let | |
293 | - | if (( | |
294 | - | then [StringEntry( | |
306 | + | let aR = fromBase58String(aP) | |
307 | + | if ((aR == aR)) | |
308 | + | then [StringEntry(aG(), aP)] | |
295 | 309 | else throw("Strict value is not equal to itself.") | |
296 | 310 | } | |
297 | 311 | else throw("Strict value is not equal to itself.") | |
298 | 312 | } | |
299 | 313 | ||
300 | 314 | ||
301 | 315 | ||
302 | - | @Callable( | |
316 | + | @Callable(aM) | |
303 | 317 | func confirmManager () = { | |
304 | - | let | |
305 | - | let | |
318 | + | let aS = aJ() | |
319 | + | let aT = if (isDefined(aS)) | |
306 | 320 | then true | |
307 | 321 | else throw("No pending manager") | |
308 | - | if (( | |
322 | + | if ((aT == aT)) | |
309 | 323 | then { | |
310 | - | let | |
324 | + | let aU = if ((aM.callerPublicKey == value(aS))) | |
311 | 325 | then true | |
312 | 326 | else throw("You are not pending manager") | |
313 | - | if (( | |
314 | - | then [StringEntry( | |
327 | + | if ((aU == aU)) | |
328 | + | then [StringEntry(aF(), toBase58String(value(aS))), DeleteEntry(aG())] | |
315 | 329 | else throw("Strict value is not equal to itself.") | |
316 | 330 | } | |
317 | 331 | else throw("Strict value is not equal to itself.") | |
318 | 332 | } | |
319 | 333 | ||
320 | 334 | ||
321 | 335 | ||
322 | - | @Callable( | |
323 | - | func getUserGwxAmountAtHeight ( | |
324 | - | let | |
336 | + | @Callable(aM) | |
337 | + | func getUserGwxAmountAtHeight (aV,aW) = { | |
338 | + | let aX = valueOrErrorMessage(addressFromString(R(this, k)), "invalid boosting contract address") | |
325 | 339 | $Tuple2(nil, { | |
326 | - | let | |
327 | - | if ($isInstanceOf( | |
328 | - | then | |
329 | - | else throw(($getType(invoke( | |
340 | + | let S = invoke(aX, "getUserGwxAmountAtHeightREADONLY", [aV, aW], nil) | |
341 | + | if ($isInstanceOf(S, "Int")) | |
342 | + | then S | |
343 | + | else throw(($getType(invoke(aX, "getUserGwxAmountAtHeightREADONLY", [aV, aW], nil)) + " couldn't be cast to Int")) | |
330 | 344 | }) | |
331 | 345 | } | |
332 | 346 | ||
333 | 347 | ||
334 | 348 | ||
335 | - | @Callable( | |
336 | - | func constructor ( | |
337 | - | let | |
349 | + | @Callable(aM) | |
350 | + | func constructor (af,aY,aZ,ba,al,bb) = { | |
351 | + | let bc = [aN(aM), if ((addressFromString(af) != unit)) | |
338 | 352 | then true | |
339 | - | else "invalid factory contract address", if ((addressFromString( | |
353 | + | else "invalid factory contract address", if ((addressFromString(aY) != unit)) | |
340 | 354 | then true | |
341 | - | else "invalid voting emission candidate contract address", if ((addressFromString( | |
355 | + | else "invalid voting emission candidate contract address", if ((addressFromString(aZ) != unit)) | |
342 | 356 | then true | |
343 | - | else "invalid boosting contract address", if ((addressFromString( | |
357 | + | else "invalid boosting contract address", if ((addressFromString(ba) != unit)) | |
344 | 358 | then true | |
345 | - | else "invalid staking contract address", if ((aW > 0)) | |
359 | + | else "invalid staking contract address", if ((addressFromString(al) != unit)) | |
360 | + | then true | |
361 | + | else "invalid assets store contract address", if ((bb > 0)) | |
346 | 362 | then true | |
347 | 363 | else throw("invalid epoch length")] | |
348 | - | if (( | |
349 | - | then $Tuple2([StringEntry(j, | |
364 | + | if ((bc == bc)) | |
365 | + | then $Tuple2([StringEntry(j, af), StringEntry(i, aY), StringEntry(k, aZ), StringEntry(l, ba), StringEntry(m, al), IntegerEntry(f, bb)], unit) | |
350 | 366 | else throw("Strict value is not equal to itself.") | |
351 | 367 | } | |
352 | 368 | ||
353 | 369 | ||
354 | 370 | ||
355 | - | @Callable( | |
356 | - | func create ( | |
357 | - | let | |
371 | + | @Callable(aM) | |
372 | + | func create (z,A) = { | |
373 | + | let bd = [if ((toBase58String(aM.caller.bytes) == valueOrElse(getString(this, i), ""))) | |
358 | 374 | then true | |
359 | - | else | |
360 | - | if (( | |
375 | + | else aN(aM)] | |
376 | + | if ((bd == bd)) | |
361 | 377 | then { | |
362 | - | let | |
363 | - | let | |
364 | - | let | |
365 | - | let | |
378 | + | let x = $Tuple2(z, A) | |
379 | + | let be = ([BooleanEntry(w(x), true)] ++ aB(an, U(x))) | |
380 | + | let bf = (getInteger(this, g) == unit) | |
381 | + | let bg = if (bf) | |
366 | 382 | then { | |
367 | - | let | |
368 | - | [IntegerEntry(g, | |
383 | + | let u = 0 | |
384 | + | [IntegerEntry(g, u), IntegerEntry(t(u), height), IntegerEntry(q, height), IntegerEntry(r, u), IntegerEntry(s, height)] | |
369 | 385 | } | |
370 | 386 | else nil | |
371 | - | $Tuple2(( | |
387 | + | $Tuple2((be ++ bg), unit) | |
372 | 388 | } | |
373 | 389 | else throw("Strict value is not equal to itself.") | |
374 | 390 | } | |
375 | 391 | ||
376 | 392 | ||
377 | 393 | ||
378 | - | @Callable( | |
379 | - | func vote ( | |
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | let | |
385 | - | let | |
386 | - | let | |
387 | - | let | |
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | let | |
392 | - | if ($isInstanceOf( | |
393 | - | then | |
394 | - | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [toBase58String( | |
394 | + | @Callable(aM) | |
395 | + | func vote (z,A,bh) = { | |
396 | + | let x = $Tuple2(z, A) | |
397 | + | let u = valueOrElse(getInteger(this, g), 0) | |
398 | + | let bi = T(this, t(u)) | |
399 | + | let bb = T(this, f) | |
400 | + | let bj = (bi + bb) | |
401 | + | let bk = getInteger(this, n) | |
402 | + | let bl = valueOrElse(getInteger(this, B(aM.caller, u)), 0) | |
403 | + | let bm = valueOrElse(getInteger(this, D(x, aM.caller, u)), 0) | |
404 | + | let bn = valueOrElse(getInteger(this, F(x, u)), 0) | |
405 | + | let bo = valueOrElse(getInteger(this, J(u)), 0) | |
406 | + | let bp = { | |
407 | + | let S = invoke(this, "getUserGwxAmountAtHeight", [toBase58String(aM.caller.bytes), bj], nil) | |
408 | + | if ($isInstanceOf(S, "Int")) | |
409 | + | then S | |
410 | + | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [toBase58String(aM.caller.bytes), bj], nil)) + " couldn't be cast to Int")) | |
395 | 411 | } | |
396 | - | let bl = (bk - bg) | |
397 | - | let bm = (bh + bc) | |
398 | - | let aY = [if ((getBoolean(v(w)) != unit)) | |
412 | + | let bq = (bp - bl) | |
413 | + | let br = (bm + bh) | |
414 | + | let bs = aj(z) | |
415 | + | let bd = [if ((getBoolean(w(x)) != unit)) | |
399 | 416 | then true | |
400 | - | else throw("invalid assets"), if (( | |
417 | + | else throw("invalid assets"), if ((bj > height)) | |
401 | 418 | then true | |
402 | - | else throw("invalid height"), if (( | |
419 | + | else throw("invalid height"), if ((bk == unit)) | |
403 | 420 | then true | |
404 | - | else throw("finalization in progress"), if (( | |
421 | + | else throw("finalization in progress"), if ((bp > 0)) | |
405 | 422 | then true | |
406 | - | else throw("you do not have gWX"), if (if (( | |
407 | - | then ( | |
423 | + | else throw("you do not have gWX"), if (if ((bh > 0)) | |
424 | + | then (bq >= bh) | |
408 | 425 | else false) | |
409 | 426 | then true | |
410 | - | else throw("invalid amount")] | |
411 | - | if ((aY == aY)) | |
427 | + | else throw("invalid amount"), if (bs) | |
428 | + | then true | |
429 | + | else throw("amount asset is not verified")] | |
430 | + | if ((bd == bd)) | |
412 | 431 | then { | |
413 | - | let | |
414 | - | let | |
415 | - | let | |
432 | + | let bt = ao(x) | |
433 | + | let bu = toString(aM.caller) | |
434 | + | let bv = if (ax(bt, bu)) | |
416 | 435 | then nil | |
417 | - | else | |
418 | - | $Tuple2(([IntegerEntry( | |
436 | + | else aB(bt, bu) | |
437 | + | $Tuple2(([IntegerEntry(B(aM.caller, u), (bl + bh)), IntegerEntry(D(x, aM.caller, u), br), IntegerEntry(F(x, u), (bn + bh)), IntegerEntry(J(u), (bo + bh))] ++ bv), unit) | |
419 | 438 | } | |
420 | 439 | else throw("Strict value is not equal to itself.") | |
421 | 440 | } | |
422 | 441 | ||
423 | 442 | ||
424 | 443 | ||
425 | - | @Callable( | |
426 | - | func cancelVote ( | |
427 | - | let | |
428 | - | let | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | let | |
433 | - | let | |
434 | - | let | |
435 | - | let | |
436 | - | let | |
437 | - | let | |
444 | + | @Callable(aM) | |
445 | + | func cancelVote (z,A) = { | |
446 | + | let x = $Tuple2(z, A) | |
447 | + | let u = valueOrElse(getInteger(this, g), 0) | |
448 | + | let bi = T(this, t(u)) | |
449 | + | let bb = T(this, f) | |
450 | + | let bj = (bi + bb) | |
451 | + | let bk = getInteger(this, n) | |
452 | + | let bl = valueOrElse(getInteger(this, B(aM.caller, u)), 0) | |
453 | + | let bm = valueOrElse(getInteger(this, D(x, aM.caller, u)), 0) | |
454 | + | let bn = valueOrElse(getInteger(this, F(x, u)), 0) | |
455 | + | let bo = valueOrElse(getInteger(this, J(u)), 0) | |
456 | + | let bd = [if ((getBoolean(w(x)) != unit)) | |
438 | 457 | then true | |
439 | - | else throw("invalid assets"), if (( | |
458 | + | else throw("invalid assets"), if ((bj > height)) | |
440 | 459 | then true | |
441 | - | else throw("invalid height"), if (( | |
460 | + | else throw("invalid height"), if ((bk == unit)) | |
442 | 461 | then true | |
443 | - | else throw("finalization in progress"), if (( | |
462 | + | else throw("finalization in progress"), if ((bm > 0)) | |
444 | 463 | then true | |
445 | 464 | else throw("no vote")] | |
446 | - | if (( | |
465 | + | if ((bd == bd)) | |
447 | 466 | then { | |
448 | - | let | |
449 | - | let | |
450 | - | $Tuple2(([IntegerEntry( | |
467 | + | let bt = ao(x) | |
468 | + | let bu = toString(aM.caller) | |
469 | + | $Tuple2(([IntegerEntry(B(aM.caller, u), max([(bl - bm), 0])), DeleteEntry(D(x, aM.caller, u)), IntegerEntry(F(x, u), (bn - bm)), IntegerEntry(J(u), (bo - bm))] ++ aE(bt, bu)), unit) | |
451 | 470 | } | |
452 | 471 | else throw("Strict value is not equal to itself.") | |
453 | 472 | } | |
454 | 473 | ||
455 | 474 | ||
456 | 475 | ||
457 | - | @Callable( | |
458 | - | func setEpochLength ( | |
459 | - | let | |
476 | + | @Callable(aM) | |
477 | + | func setEpochLength (bw) = { | |
478 | + | let bc = [aN(aM), if ((bw > 0)) | |
460 | 479 | then true | |
461 | 480 | else throw("invalid epoch length")] | |
462 | - | if (( | |
463 | - | then $Tuple2([IntegerEntry(f, | |
481 | + | if ((bc == bc)) | |
482 | + | then $Tuple2([IntegerEntry(f, bw)], unit) | |
464 | 483 | else throw("Strict value is not equal to itself.") | |
465 | 484 | } | |
466 | 485 | ||
467 | 486 | ||
468 | 487 | ||
469 | - | @Callable( | |
470 | - | func setMaxDepth ( | |
471 | - | let | |
488 | + | @Callable(aM) | |
489 | + | func setMaxDepth (bx) = { | |
490 | + | let bc = [aN(aM), if ((bx > 0)) | |
472 | 491 | then true | |
473 | 492 | else throw("invalid max depth")] | |
474 | - | if (( | |
475 | - | then $Tuple2([IntegerEntry(h, | |
493 | + | if ((bc == bc)) | |
494 | + | then $Tuple2([IntegerEntry(h, bx)], unit) | |
476 | 495 | else throw("Strict value is not equal to itself.") | |
477 | 496 | } | |
478 | 497 | ||
479 | 498 | ||
480 | 499 | ||
481 | - | @Callable( | |
482 | - | func processVoteINTERNAL ( | |
483 | - | let | |
484 | - | if (( | |
500 | + | @Callable(aM) | |
501 | + | func processVoteINTERNAL (by,bu) = { | |
502 | + | let aQ = aL(aM) | |
503 | + | if ((aQ == aQ)) | |
485 | 504 | then { | |
486 | - | let | |
487 | - | let | |
488 | - | let | |
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | let | |
493 | - | let | |
494 | - | let | |
505 | + | let aV = valueOrErrorMessage(addressFromString(bu), ("processVoteINTERNAL: invalid user address " + bu)) | |
506 | + | let u = T(this, g) | |
507 | + | let bz = (u - 1) | |
508 | + | let bb = T(this, f) | |
509 | + | let bi = T(this, t(u)) | |
510 | + | let bj = (bi + bb) | |
511 | + | let bA = T(this, t(bz)) | |
512 | + | let bB = (bA + bb) | |
513 | + | let bC = if ((bz >= 0)) | |
495 | 514 | then true | |
496 | 515 | else throw("processVoteINTERNAL: invalid previous epoch") | |
497 | - | if (( | |
516 | + | if ((bC == bC)) | |
498 | 517 | then { | |
499 | - | let w = U(bs) | |
500 | - | let bk = { | |
501 | - | let R = invoke(this, "getUserGwxAmountAtHeight", [bo, be], nil) | |
502 | - | if ($isInstanceOf(R, "Int")) | |
503 | - | then R | |
504 | - | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [bo, be], nil)) + " couldn't be cast to Int")) | |
518 | + | let x = V(by) | |
519 | + | let bD = x | |
520 | + | let z = bD._1 | |
521 | + | let A = bD._2 | |
522 | + | let bs = aj(z) | |
523 | + | let bp = { | |
524 | + | let S = invoke(this, "getUserGwxAmountAtHeight", [bu, bj], nil) | |
525 | + | if ($isInstanceOf(S, "Int")) | |
526 | + | then S | |
527 | + | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [bu, bj], nil)) + " couldn't be cast to Int")) | |
505 | 528 | } | |
506 | - | let | |
507 | - | let | |
508 | - | if ($isInstanceOf( | |
509 | - | then | |
510 | - | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [ | |
529 | + | let bE = { | |
530 | + | let S = invoke(this, "getUserGwxAmountAtHeight", [bu, bB], nil) | |
531 | + | if ($isInstanceOf(S, "Int")) | |
532 | + | then S | |
533 | + | else throw(($getType(invoke(this, "getUserGwxAmountAtHeight", [bu, bB], nil)) + " couldn't be cast to Int")) | |
511 | 534 | } | |
512 | - | let bj = valueOrElse(getInteger(I(t)), 0) | |
513 | - | let by = valueOrElse(getInteger(E(w, t)), 0) | |
514 | - | let bz = valueOrErrorMessage(getInteger(C(w, aQ, bt)), (((("processVoteINTERNAL " + bs) + " ") + bo) + ": no previous vote")) | |
515 | - | let bg = valueOrElse(getInteger(this, A(aQ, t)), 0) | |
516 | - | let bm = fraction(bz, bk, bx) | |
517 | - | let bA = if ((bm > 0)) | |
518 | - | then [IntegerEntry(C(w, aQ, t), bm), IntegerEntry(I(t), (bj + bm)), IntegerEntry(E(w, t), (by + bm)), IntegerEntry(A(aQ, t), (bg + bm))] | |
519 | - | else az(aj(w), bo) | |
520 | - | $Tuple2(bA, unit) | |
535 | + | let bo = valueOrElse(getInteger(J(u)), 0) | |
536 | + | let bF = valueOrElse(getInteger(F(x, u)), 0) | |
537 | + | let bG = valueOrErrorMessage(getInteger(D(x, aV, bz)), (((("processVoteINTERNAL " + by) + " ") + bu) + ": no previous vote")) | |
538 | + | let bl = valueOrElse(getInteger(this, B(aV, u)), 0) | |
539 | + | let br = fraction(bG, bp, bE) | |
540 | + | let bH = if (if ((br > 0)) | |
541 | + | then bs | |
542 | + | else false) | |
543 | + | then [IntegerEntry(D(x, aV, u), br), IntegerEntry(J(u), (bo + br)), IntegerEntry(F(x, u), (bF + br)), IntegerEntry(B(aV, u), (bl + br))] | |
544 | + | else aE(ao(x), bu) | |
545 | + | $Tuple2(bH, unit) | |
521 | 546 | } | |
522 | 547 | else throw("Strict value is not equal to itself.") | |
523 | 548 | } | |
524 | 549 | else throw("Strict value is not equal to itself.") | |
525 | 550 | } | |
526 | 551 | ||
527 | 552 | ||
528 | 553 | ||
529 | - | @Callable( | |
530 | - | func processPoolINTERNAL ( | |
531 | - | let | |
532 | - | if (( | |
554 | + | @Callable(aM) | |
555 | + | func processPoolINTERNAL (by) = { | |
556 | + | let aQ = aL(aM) | |
557 | + | if ((aQ == aQ)) | |
533 | 558 | then { | |
534 | - | let | |
535 | - | let | |
559 | + | let bI = (T(this, g) - 1) | |
560 | + | let bC = if ((bI >= 0)) | |
536 | 561 | then true | |
537 | 562 | else throw("processPoolINTERNAL: invalid target epoch") | |
538 | - | if (( | |
563 | + | if ((bC == bC)) | |
539 | 564 | then { | |
540 | - | let | |
541 | - | let | |
542 | - | let | |
543 | - | let | |
544 | - | let | |
545 | - | let | |
546 | - | let | |
547 | - | let | |
548 | - | let | |
549 | - | if ($isInstanceOf( | |
550 | - | then | |
551 | - | else throw(($getType(invoke( | |
565 | + | let x = V(by) | |
566 | + | let bJ = x | |
567 | + | let z = bJ._1 | |
568 | + | let A = bJ._2 | |
569 | + | let ba = addressFromStringValue(R(this, l)) | |
570 | + | let af = addressFromStringValue(R(this, j)) | |
571 | + | let ai = X(z, A) | |
572 | + | let bK = { | |
573 | + | let S = invoke(ba, "usersListTraversal", [ai], nil) | |
574 | + | if ($isInstanceOf(S, "Boolean")) | |
575 | + | then S | |
576 | + | else throw(($getType(invoke(ba, "usersListTraversal", [ai], nil)) + " couldn't be cast to Boolean")) | |
552 | 577 | } | |
553 | - | if (( | |
554 | - | then if ( | |
578 | + | if ((bK == bK)) | |
579 | + | then if (bK) | |
555 | 580 | then $Tuple2(nil, true) | |
556 | 581 | else { | |
557 | - | let bj = valueOrElse(getInteger(this, I(bB)), 0) | |
558 | - | let by = valueOrElse(getInteger(this, E(w, bB)), 0) | |
559 | - | let bE = if ((bj == 0)) | |
582 | + | let bs = aj(z) | |
583 | + | let bo = valueOrElse(getInteger(this, J(bI)), 0) | |
584 | + | let bF = valueOrElse(getInteger(this, F(x, bI)), 0) | |
585 | + | let bL = if (if ((bo == 0)) | |
586 | + | then true | |
587 | + | else !(bs)) | |
560 | 588 | then 0 | |
561 | - | else fraction(by, b, bj) | |
562 | - | let bF = invoke(ae, "modifyWeight", [ah, bE], nil) | |
563 | - | if ((bF == bF)) | |
564 | - | then $Tuple2([IntegerEntry(G(w, bB), bE)], false) | |
589 | + | else fraction(bF, b, bo) | |
590 | + | let bM = invoke(af, "modifyWeight", [ai, bL], nil) | |
591 | + | if ((bM == bM)) | |
592 | + | then { | |
593 | + | let bN = if (bs) | |
594 | + | then nil | |
595 | + | else ([DeleteEntry(w(x))] ++ aE(an, by)) | |
596 | + | $Tuple2(([IntegerEntry(H(x, bI), bL)] ++ bN), false) | |
597 | + | } | |
565 | 598 | else throw("Strict value is not equal to itself.") | |
566 | 599 | } | |
567 | 600 | else throw("Strict value is not equal to itself.") | |
568 | 601 | } | |
569 | 602 | else throw("Strict value is not equal to itself.") | |
570 | 603 | } | |
571 | 604 | else throw("Strict value is not equal to itself.") | |
572 | 605 | } | |
573 | 606 | ||
574 | 607 | ||
575 | 608 | ||
576 | - | @Callable( | |
609 | + | @Callable(aM) | |
577 | 610 | func finalizeHelper () = { | |
578 | - | let | |
579 | - | let | |
580 | - | let | |
581 | - | let | |
582 | - | let | |
583 | - | let | |
584 | - | if ((height >= | |
611 | + | let u = valueOrElse(getInteger(this, g), 0) | |
612 | + | let bO = (u - 1) | |
613 | + | let bi = T(this, t(u)) | |
614 | + | let bb = T(this, f) | |
615 | + | let bj = (bi + bb) | |
616 | + | let bk = getInteger(this, n) | |
617 | + | if ((height >= bj)) | |
585 | 618 | then { | |
586 | - | let | |
587 | - | $Tuple2([IntegerEntry( | |
619 | + | let bP = (u + 1) | |
620 | + | $Tuple2([IntegerEntry(t(bP), height), IntegerEntry(q, height), IntegerEntry(g, bP), IntegerEntry(n, d)], true) | |
588 | 621 | } | |
589 | - | else if (( | |
622 | + | else if ((bk == unit)) | |
590 | 623 | then $Tuple2(nil, false) | |
591 | - | else if (( | |
624 | + | else if ((bk == d)) | |
592 | 625 | then { | |
593 | - | let | |
594 | - | let | |
595 | - | let | |
596 | - | if ($isInstanceOf( | |
626 | + | let bQ = getString(o) | |
627 | + | let bR = getString(p) | |
628 | + | let O = bQ | |
629 | + | if ($isInstanceOf(O, "Unit")) | |
597 | 630 | then { | |
598 | - | let | |
599 | - | if ($isInstanceOf( | |
600 | - | then $Tuple2([IntegerEntry( | |
601 | - | else if ($isInstanceOf( | |
631 | + | let bS = getString(aq(an)) | |
632 | + | if ($isInstanceOf(bS, "Unit")) | |
633 | + | then $Tuple2([IntegerEntry(n, e), DeleteEntry(o), DeleteEntry(p)], true) | |
634 | + | else if ($isInstanceOf(bS, "String")) | |
602 | 635 | then { | |
603 | - | let | |
604 | - | $Tuple2([StringEntry( | |
636 | + | let bT = bS | |
637 | + | $Tuple2([StringEntry(o, bT)], true) | |
605 | 638 | } | |
606 | 639 | else throw("Match error") | |
607 | 640 | } | |
608 | - | else if ($isInstanceOf( | |
641 | + | else if ($isInstanceOf(O, "String")) | |
609 | 642 | then { | |
610 | - | let | |
611 | - | let | |
612 | - | let | |
613 | - | let | |
614 | - | if ($isInstanceOf( | |
615 | - | then getString( | |
616 | - | else if ($isInstanceOf( | |
643 | + | let by = O | |
644 | + | let x = V(by) | |
645 | + | let bU = { | |
646 | + | let bS = bR | |
647 | + | if ($isInstanceOf(bS, "Unit")) | |
648 | + | then getString(aq(ao(x))) | |
649 | + | else if ($isInstanceOf(bS, "String")) | |
617 | 650 | then { | |
618 | - | let | |
619 | - | let | |
620 | - | if (( | |
621 | - | then getString( | |
651 | + | let bV = bS | |
652 | + | let bW = invoke(this, "processVoteINTERNAL", [by, bV], nil) | |
653 | + | if ((bW == bW)) | |
654 | + | then getString(aw(ao(x), bV)) | |
622 | 655 | else throw("Strict value is not equal to itself.") | |
623 | 656 | } | |
624 | 657 | else throw("Match error") | |
625 | 658 | } | |
626 | - | let | |
627 | - | if ($isInstanceOf( | |
659 | + | let bS = bU | |
660 | + | if ($isInstanceOf(bS, "Unit")) | |
628 | 661 | then { | |
629 | - | let | |
630 | - | let | |
631 | - | if ($isInstanceOf( | |
632 | - | then $Tuple2([IntegerEntry( | |
633 | - | else if ($isInstanceOf( | |
662 | + | let bX = getString(aw(an, by)) | |
663 | + | let bY = bX | |
664 | + | if ($isInstanceOf(bY, "Unit")) | |
665 | + | then $Tuple2([IntegerEntry(n, e), DeleteEntry(o), DeleteEntry(p)], true) | |
666 | + | else if ($isInstanceOf(bY, "String")) | |
634 | 667 | then { | |
635 | - | let | |
636 | - | $Tuple2([StringEntry( | |
668 | + | let aI = bY | |
669 | + | $Tuple2([StringEntry(o, aI), DeleteEntry(p)], true) | |
637 | 670 | } | |
638 | 671 | else throw("Match error") | |
639 | 672 | } | |
640 | - | else if ($isInstanceOf( | |
673 | + | else if ($isInstanceOf(bS, "String")) | |
641 | 674 | then { | |
642 | - | let | |
643 | - | $Tuple2([StringEntry( | |
675 | + | let bZ = bS | |
676 | + | $Tuple2([StringEntry(p, bZ)], true) | |
644 | 677 | } | |
645 | 678 | else throw("Match error") | |
646 | 679 | } | |
647 | 680 | else throw("Match error") | |
648 | 681 | } | |
649 | - | else if (( | |
682 | + | else if ((bk == e)) | |
650 | 683 | then { | |
651 | - | let | |
652 | - | let | |
653 | - | if ($isInstanceOf( | |
684 | + | let bQ = getString(o) | |
685 | + | let O = bQ | |
686 | + | if ($isInstanceOf(O, "Unit")) | |
654 | 687 | then { | |
655 | - | let | |
656 | - | if ($isInstanceOf( | |
657 | - | then $Tuple2([DeleteEntry( | |
658 | - | else if ($isInstanceOf( | |
688 | + | let bS = getString(aq(an)) | |
689 | + | if ($isInstanceOf(bS, "Unit")) | |
690 | + | then $Tuple2([DeleteEntry(n), BooleanEntry(v(bO), true), IntegerEntry(r, u), IntegerEntry(s, bi)], true) | |
691 | + | else if ($isInstanceOf(bS, "String")) | |
659 | 692 | then { | |
660 | - | let | |
661 | - | $Tuple2([StringEntry( | |
693 | + | let ca = bS | |
694 | + | $Tuple2([StringEntry(o, ca)], true) | |
662 | 695 | } | |
663 | 696 | else throw("Match error") | |
664 | 697 | } | |
665 | - | else if ($isInstanceOf( | |
698 | + | else if ($isInstanceOf(O, "String")) | |
666 | 699 | then { | |
667 | - | let | |
668 | - | let | |
669 | - | let | |
670 | - | if ($isInstanceOf( | |
671 | - | then | |
672 | - | else throw(($getType(invoke(this, "processPoolINTERNAL", [ | |
700 | + | let by = O | |
701 | + | let bK = { | |
702 | + | let S = invoke(this, "processPoolINTERNAL", [by], nil) | |
703 | + | if ($isInstanceOf(S, "Boolean")) | |
704 | + | then S | |
705 | + | else throw(($getType(invoke(this, "processPoolINTERNAL", [by], nil)) + " couldn't be cast to Boolean")) | |
673 | 706 | } | |
674 | - | if (( | |
675 | - | then if ( | |
707 | + | if ((bK == bK)) | |
708 | + | then if (bK) | |
676 | 709 | then $Tuple2(nil, true) | |
677 | 710 | else { | |
678 | - | let | |
679 | - | let | |
680 | - | if ($isInstanceOf( | |
681 | - | then $Tuple2([DeleteEntry( | |
682 | - | else if ($isInstanceOf( | |
711 | + | let bX = getString(aw(an, by)) | |
712 | + | let bS = bX | |
713 | + | if ($isInstanceOf(bS, "Unit")) | |
714 | + | then $Tuple2([DeleteEntry(n), BooleanEntry(v(bO), true), IntegerEntry(r, u), IntegerEntry(s, bi), DeleteEntry(o)], true) | |
715 | + | else if ($isInstanceOf(bS, "String")) | |
683 | 716 | then { | |
684 | - | let | |
685 | - | $Tuple2([StringEntry( | |
717 | + | let ca = bS | |
718 | + | $Tuple2([StringEntry(o, ca)], true) | |
686 | 719 | } | |
687 | 720 | else throw("Match error") | |
688 | 721 | } | |
689 | 722 | else throw("Strict value is not equal to itself.") | |
690 | 723 | } | |
691 | 724 | else throw("Match error") | |
692 | 725 | } | |
693 | 726 | else throw("finalization is broken") | |
694 | 727 | } | |
695 | 728 | ||
696 | 729 | ||
697 | 730 | ||
698 | - | @Callable( | |
699 | - | func finalizeWrapper ( | |
700 | - | let | |
701 | - | let | |
702 | - | if ($isInstanceOf( | |
703 | - | then | |
731 | + | @Callable(aM) | |
732 | + | func finalizeWrapper (cb) = { | |
733 | + | let cc = { | |
734 | + | let S = invoke(this, "finalizeHelper", nil, nil) | |
735 | + | if ($isInstanceOf(S, "Boolean")) | |
736 | + | then S | |
704 | 737 | else throw(($getType(invoke(this, "finalizeHelper", nil, nil)) + " couldn't be cast to Boolean")) | |
705 | 738 | } | |
706 | - | if (( | |
707 | - | then if (!( | |
708 | - | then if (( | |
739 | + | if ((cc == cc)) | |
740 | + | then if (!(cc)) | |
741 | + | then if ((cb == 0)) | |
709 | 742 | then throw("Current voting is not over yet") | |
710 | 743 | else $Tuple2(nil, unit) | |
711 | 744 | else { | |
712 | - | let | |
713 | - | if (( | |
745 | + | let cd = valueOrElse(getInteger(this, h), c) | |
746 | + | if ((cd > cb)) | |
714 | 747 | then { | |
715 | - | let | |
716 | - | if (( | |
748 | + | let ce = invoke(this, "finalizeWrapper", [(cb + 1)], nil) | |
749 | + | if ((ce == ce)) | |
717 | 750 | then $Tuple2(nil, unit) | |
718 | 751 | else throw("Strict value is not equal to itself.") | |
719 | 752 | } | |
720 | 753 | else $Tuple2(nil, unit) | |
721 | 754 | } | |
722 | 755 | else throw("Strict value is not equal to itself.") | |
723 | 756 | } | |
724 | 757 | ||
725 | 758 | ||
726 | 759 | ||
727 | - | @Callable( | |
760 | + | @Callable(aM) | |
728 | 761 | func finalize () = { | |
729 | - | let | |
730 | - | if (( | |
762 | + | let ce = invoke(this, "finalizeWrapper", [0], nil) | |
763 | + | if ((ce == ce)) | |
731 | 764 | then $Tuple2(nil, unit) | |
732 | 765 | else throw("Strict value is not equal to itself.") | |
733 | 766 | } | |
734 | 767 | ||
735 | 768 | ||
736 | 769 | ||
737 | - | @Callable( | |
738 | - | func onVerificationLoss ( | |
770 | + | @Callable(aM) | |
771 | + | func onVerificationLoss (ak) = $Tuple2(nil, unit) | |
739 | 772 | ||
740 | 773 | ||
741 | 774 | ||
742 | - | @Callable( | |
743 | - | func containsNodeREADONLY ( | |
775 | + | @Callable(aM) | |
776 | + | func containsNodeREADONLY (ar,av) = $Tuple2(nil, ax(ar, av)) | |
744 | 777 | ||
745 | 778 | ||
746 | 779 | ||
747 | - | @Callable( | |
748 | - | func insertNode ( | |
749 | - | let | |
750 | - | if (( | |
751 | - | then $Tuple2( | |
780 | + | @Callable(aM) | |
781 | + | func insertNode (ar,av) = { | |
782 | + | let aQ = aN(aM) | |
783 | + | if ((aQ == aQ)) | |
784 | + | then $Tuple2(aB(ar, av), unit) | |
752 | 785 | else throw("Strict value is not equal to itself.") | |
753 | 786 | } | |
754 | 787 | ||
755 | 788 | ||
756 | 789 | ||
757 | - | @Callable( | |
758 | - | func deleteNode ( | |
759 | - | let | |
760 | - | if (( | |
761 | - | then $Tuple2( | |
790 | + | @Callable(aM) | |
791 | + | func deleteNode (ar,av) = { | |
792 | + | let aQ = aN(aM) | |
793 | + | if ((aQ == aQ)) | |
794 | + | then $Tuple2(aE(ar, av), unit) | |
762 | 795 | else throw("Strict value is not equal to itself.") | |
763 | 796 | } | |
764 | 797 | ||
765 | 798 | ||
766 | - | @Verifier( | |
767 | - | func | |
768 | - | let | |
769 | - | let | |
770 | - | if ($isInstanceOf( | |
799 | + | @Verifier(cf) | |
800 | + | func cg () = { | |
801 | + | let ch = { | |
802 | + | let O = aH() | |
803 | + | if ($isInstanceOf(O, "ByteVector")) | |
771 | 804 | then { | |
772 | - | let | |
773 | - | | |
805 | + | let aO = O | |
806 | + | aO | |
774 | 807 | } | |
775 | - | else if ($isInstanceOf( | |
776 | - | then | |
808 | + | else if ($isInstanceOf(O, "Unit")) | |
809 | + | then cf.senderPublicKey | |
777 | 810 | else throw("Match error") | |
778 | 811 | } | |
779 | - | sigVerify( | |
812 | + | sigVerify(cf.bodyBytes, cf.proofs[0], ch) | |
780 | 813 | } | |
781 | 814 |
github/deemru/w8io/169f3d6 333.87 ms ◑![]()