tx · 7yi5kjcnMygdpLjk43ua7TnSBwiqNdAfrXZqrffrb2ZY

3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc:  -0.01800000 Waves

2022.11.25 15:50 [2332651] smart account 3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc > SELF 0.00000000 Waves

{ "type": 13, "id": "7yi5kjcnMygdpLjk43ua7TnSBwiqNdAfrXZqrffrb2ZY", "fee": 1800000, "feeAssetId": null, "timestamp": 1669380644625, "version": 2, "chainId": 84, "sender": "3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc", "senderPublicKey": "242mibE5dTci8wD6vghuCGxjDZdnNJr88H7gcWWehpEX", "proofs": [ "SCNjSqQuVFgCD25d4a8aK9EE7HrESBszgypzMMPxDh56PZVTydLsFor8eM2W6XaD4ERmB7355ei1z4rAPV4pJYV" ], "script": "base64:BgIvCAISBwoFCAEBAQESBAoCAQESBwoFCAgBARgSBwoFCAgBARgSAwoBARIDCgEBEgBXAAtyZXZpc2lvbk51bQIAAANTRVACAl9fAAdMSVNUU0VQAgE6AA1ERUZBVUxUUVVPUlVNAKDCHgAKVVJMUEFUVEVSTgIaaHR0cHM6Ly9mb3J1bS5uZXV0cmluby5hdC8ACE1BWFRJVExFAKABAAZNQVhVUkwA+gEADU1BWFZPVElOR1RJTUUAgJDkwAQABU1VTFQ2AMCEPQAOREVGQVVMVFBBWU1FTlQAgJTr3AMAFERFRkFVTFRDUkVBVElPTkdOU0JUAICU69wDAApQQVNUTUFSR0lOAIC6twMADEZVVFVSRU1BUkdJTgDAy8kCABJnb3ZJZHhQcm9wb3NhbFR4SWQAAQAKZ292SWR4VHlwZQACAAxnb3ZJZHhBdXRob3IAAwAJZ292SWR4VXJsAAQAC2dvdklkeFRpdGxlAAUAEmdvdklkeENyZWF0aW9uVGltZQAGAAtnb3ZJZHhTdGFydAAHAAlnb3ZJZHhFbmQACAALZ292SWR4VHhJZHMACQAMZ292SWR4UXVvcnVtAAoADWdvdklkeE9wdGlvbnMACwATZ292U3RhdHVzSWR4SXNWYWxpZAABABJnb3ZTdGF0dXNJZHhXaW5PcHQAAgAUZ292U3RhdHVzSWR4V2luVm90ZXMAAwAWZ292U3RhdHVzSWR4VG90YWxWb3RlcwAEABVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQABQASZ292U3RhdHVzSWR4U2NUaW1lAAYAFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQABwEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABDGdldEludE9yRWxzZQIDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5BQpkZWZhdWx0VmFsABlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAAEAGElkeENvbnRyb2xDZmdBdWN0aW9uRGFwcAACABRJZHhDb250cm9sQ2ZnUnBkRGFwcAADABVJZHhDb250cm9sQ2ZnTWF0aERhcHAABAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAFABVJZHhDb250cm9sQ2ZnUmVzdERhcHAABgAdSWR4Q29udHJvbENmZ05vZGVSZWdpc3RyeURhcHAABwAcSWR4Q29udHJvbENmZ05zYnRTdGFraW5nRGFwcAAIABlJZHhDb250cm9sQ2ZnTWVkaWF0b3JEYXBwAAkAHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHAACgAgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHAACwAXSWR4Q29udHJvbENmZ1Jlc3RWMkRhcHAADAAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAA0BEWtleUNvbnRyb2xBZGRyZXNzAAIcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwENa2V5Q29udHJvbENmZwACESVzX19jb250cm9sQ29uZmlnARRyZWFkQ29udHJvbENmZ09yRmFpbAEHY29udHJvbAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUHY29udHJvbAkBDWtleUNvbnRyb2xDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIKY29udHJvbENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmNvbnRyb2xDZmcFA2lkeAkArAICAi1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA9jb250cm9sQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEWtleUNvbnRyb2xBZGRyZXNzAAIjM1A1QmZkNThQUGZOdkJNMkh5OFFmYmNEcU1lTnR6ZzdLZlAACmNvbnRyb2xDZmcJARRyZWFkQ29udHJvbENmZ09yRmFpbAEFD2NvbnRyb2xDb250cmFjdAAQbmV1dHJpbm9Db250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAF2duc2J0Q29udHJvbGxlckNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHABGGtleVF1b3J1bVJlcXVpcmVkUGVyY2VudAEEdHlwZQkArAICAhYlcyVzX19xdW9ydW1SZXF1aXJlZF9fBQR0eXBlARJrZXlQYXltZW50UmVxdWlyZWQAAhMlc19fcGF5bWVudFJlcXVpcmVkARBrZXlHbnNidFJlcXVpcmVkAAIRJXNfX2dOc2J0UmVxdWlyZWQBEWtleUxhc3RQcm9wb3NhbElkAAIOJXNfX3Byb3Bvc2FsSWQBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAIRJXNfX3VwZGF0ZVZlcnNpb24BGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBCnByb3Bvc2FsSWQJAKwCAgIaJXMlZF9fcHJvcG9zYWxTdGF0dXNEYXRhX18JAKQDAQUKcHJvcG9zYWxJZAETa2V5UHJvcG9zYWxEYXRhQnlJZAEKcHJvcG9zYWxJZAkArAICAhQlcyVkX19wcm9wb3NhbERhdGFfXwkApAMBBQpwcm9wb3NhbElkAR1rZXlQcm9wb3NhbFZvdGVzQnlJZEFuZE9wdGlvbgIKcHJvcG9zYWxJZANvcHQJALkJAgkAzAgCAgYlcyVkJWQJAMwIAgIKdm90ZXNCeU9wdAkAzAgCCQCkAwEFCnByb3Bvc2FsSWQJAMwIAgkApAMBBQNvcHQFA25pbAUDU0VQARtrZXlQcm9wb3NhbFZvdGVzQnlJZEFuZFVzZXICCnByb3Bvc2FsSWQIdXNlckFkZHIJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgILdm90ZXNCeVVzZXIJAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAEca2V5UHJvcG9zYWxDaG9pY2VCeUlkQW5kVXNlcgIKcHJvcG9zYWxJZAh1c2VyQWRkcgkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgxvcHRpb25CeVVzZXIJAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAESa2V5QXBwbHlJblByb2dyZXNzAAITJXNfX2FwcGx5SW5Qcm9ncmVzcwEWa2V5UHJvcG9zYWxJZEJ5VG9waWNJZAEHdG9waWNJZAkArAICAhslcyVkX19wcm9wb3NhbElkQnlUb3BpY0lkX18JAKQDAQUHdG9waWNJZAEXa2V5VXNlckduc2J0UmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGyVzJXNfdXNlckduc2J0UmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBHmtleU51bVVuaXF1ZVZvdGVyc0J5UHJvcG9zYWxJZAEKcHJvcG9zYWxJZAkArAICAhElcyVkX19udW1Wb3RlcnNfXwkApAMBBQpwcm9wb3NhbElkARhrZXlTdGF0c0F2ZXJVbmlxdWVWb3RlcnMAAiAlcyVzJXNfX3N0YXRzX19hdmdfX3VuaXF1ZVZvdGVycwEWa2V5U3RhdHNBdmVyR25zYnRWb3RlZAACHiVzJXMlc19fc3RhdHNfX2F2Z19fZ25zYnRWb3RlZAEVa2V5U3RhdHNVbmlxdWVBdXRob3JzAAIaJXMlc19fc3RhdHNfX3VuaXF1ZUF1dGhvcnMBF2tleU51bVByb3Bvc2Fsc0J5QXV0aG9yAQphZGRyZXNzU3RyCQCsAgICHCVzJXNfX251bVByb3Bvc2Fsc0J5QXV0aG9yX18FCmFkZHJlc3NTdHIBD2tleUFwcGx5SGlzdG9yeQEJdGltZXN0YW1wCQCsAgICFCVzJWRfX2FwcGx5SGlzdG9yeV9fCQCkAwEFCXRpbWVzdGFtcAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQpzdGF0dXNEYXRhBw1pc1ZvdGluZ1ZhbGlkCXdpbk9wdGlvbg53aW5PcHRpb25Wb3Rlcwp0b3RhbFZvdGVzEWFyZVNjcmlwdHNBcHBsaWVkEHNjcmlwdHNUaW1lc3RhbXAOY2FuY2VsZWRCeVRlYW0JALkJAgkAzAgCAg4lYiVkJWQlZCViJWQlYgkAzAgCCQClAwEFDWlzVm90aW5nVmFsaWQJAMwIAgkApAMBBQl3aW5PcHRpb24JAMwIAgkApAMBBQ53aW5PcHRpb25Wb3RlcwkAzAgCCQCkAwEFCnRvdGFsVm90ZXMJAMwIAgkApQMBBRFhcmVTY3JpcHRzQXBwbGllZAkAzAgCCQCkAwEFEHNjcmlwdHNUaW1lc3RhbXAJAMwIAgkApQMBBQ5jYW5jZWxlZEJ5VGVhbQUDbmlsBQNTRVABDHByb3Bvc2FsRGF0YQsMcHJvcG9zYWxUeElkBHR5cGUGYXV0aG9yCWZvcnVtTGluawV0aXRsZQxwcm9wb3NhbFRpbWUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWUFdHhJZHMNcXVvcnVtSW5HbnNidAdvcHRpb25zCQC5CQIJAMwIAgIWJXMlcyVzJXMlcyVkJWQlZCVzJWQlcwkAzAgCBQxwcm9wb3NhbFR4SWQJAMwIAgUEdHlwZQkAzAgCBQZhdXRob3IJAMwIAgUJZm9ydW1MaW5rCQDMCAIFBXRpdGxlCQDMCAIJAKQDAQUMcHJvcG9zYWxUaW1lCQDMCAIJAKQDAQUPdm90aW5nU3RhcnRUaW1lCQDMCAIJAKQDAQUNdm90aW5nRW5kVGltZQkAzAgCBQV0eElkcwkAzAgCCQCkAwEFDXF1b3J1bUluR25zYnQJAMwIAgUHb3B0aW9ucwUDbmlsBQNTRVABC2NoZWNrVHhMaXN0AQZ0eExpc3QDCQBmAgkAkAMBBQZ0eExpc3QAFAkAAgEJAKwCAgIXVG9vIG1hbnkgdHJhbnNhY3Rpb25zOiAJAKQDAQkAkAMBBQZ0eExpc3QKAQhjb21iaW5lcgIDYWNjAnR4AwkBAiE9AgkAyAEBCQDZBAEFAnR4ACAJAAIBCQCsAgICDFdyb25nIHR4SWQ6IAUCdHgDCQAAAgUDYWNjAgAFAnR4CQCsAgIJAKwCAgUDYWNjBQdMSVNUU0VQBQJ0eAoAAiRsBQZ0eExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGNvbWJpbmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAC0lkeEVmZlRvdGFsAAAACklkeEVmZlVzZXIAAQERZ2V0RWZmZWN0aXZlR25zYnQBEnVzZXJBZGRyU3RyT3JFbXB0eQQJZ25zYnREYXRhCQEJYXNBbnlMaXN0AQkA/AcEBRdnbnNidENvbnRyb2xsZXJDb250cmFjdAIUZ25zYnRJbmZvU1lTUkVBRE9OTFkJAMwIAgUSdXNlckFkZHJTdHJPckVtcHR5CQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsBAhuc2J0RGF0YQkBCWFzQW55TGlzdAEJAJEDAgUJZ25zYnREYXRhAAIEDHVzZXJGcm9tTnNidAkBBWFzSW50AQkAkQMCBQhuc2J0RGF0YQACBA10b3RhbEZyb21Oc2J0CQEFYXNJbnQBCQCRAwIFCG5zYnREYXRhAAMEEnVzZXJNYXR1cmVGcm9tU3VyZgkBBWFzSW50AQkAkQMCBQlnbnNidERhdGEACQQTdG90YWxNYXR1cmVGcm9tU3VyZgkBBWFzSW50AQkAkQMCBQlnbnNidERhdGEABgkAzAgCCQBkAgUNdG90YWxGcm9tTnNidAUTdG90YWxNYXR1cmVGcm9tU3VyZgkAzAgCCQBkAgUMdXNlckZyb21Oc2J0BRJ1c2VyTWF0dXJlRnJvbVN1cmYFA25pbAEMdmFsaWRhdGVMaW5rAQN1cmwDCQECIT0CCQEFdmFsdWUBCQCzCQIFA3VybAUKVVJMUEFUVEVSTgAACQACAQILSW52YWxpZCB1cmwDCQBmAgkAsQIBBQN1cmwFBk1BWFVSTAkAAgECDVVybCB0b28gbG9uZyEEB3RvcGljSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCwAgIFA3VybAkAZAIJAQV2YWx1ZQEJALcJAgUDdXJsAgEvAAECDVdyb25nIHRvcGljSWQEDHJlZ2lzdGVyZWRJZAkAnwgBCQEWa2V5UHJvcG9zYWxJZEJ5VG9waWNJZAEFB3RvcGljSWQDCQEJaXNEZWZpbmVkAQUMcmVnaXN0ZXJlZElkCQACAQkArAICAjhWb3Rpbmcgd2l0aCBzdWNoIGZvcnVtIGxpbmsgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IGlkPQkApAMBCQEFdmFsdWUBBQxyZWdpc3RlcmVkSWQFB3RvcGljSWQBDmluaXRpYXRlVm90aW5nCwdwYXltZW50DHByb3Bvc2FsVHhJZAR0eXBlBmF1dGhvcglmb3J1bUxpbmsFdGl0bGUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWUGc3RhdHVzBnR4TGlzdAtvcHRpb25zTGlzdAMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQJAAIBAhtBbGxvd2VkIFdBVkVTIHBheW1lbnQgb25seSEEBnBtdFJlcQkBDGdldEludE9yRWxzZQIJARJrZXlQYXltZW50UmVxdWlyZWQABQ5ERUZBVUxUUEFZTUVOVAMJAGYCBQZwbXRSZXEIBQdwYXltZW50BmFtb3VudAkAAgEJAKwCAgIkUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgYXQgbGVhc3QgCQCkAwEFBnBtdFJlcQQHdG9waWNJZAkBDHZhbGlkYXRlTGluawEFCWZvcnVtTGluawMJAAACBQV0aXRsZQIACQACAQIOVGl0bGUgaXMgZW1wdHkDCQBmAgkAsQIBBQV0aXRsZQUITUFYVElUTEUJAAIBAg5Ub28gbG9uZyB0aXRsZQQMcHJvcG9zYWxUaW1lCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAGYCBQxwcm9wb3NhbFRpbWUFD3ZvdGluZ1N0YXJ0VGltZQkAAgEJAKwCAgkArAICCQCsAgICEHZvdGluZ1N0YXJ0VGltZT0JAKQDAQUPdm90aW5nU3RhcnRUaW1lAhAgPCBwcm9wb3NhbFRpbWU9CQCkAwEFDHByb3Bvc2FsVGltZQMJAGYCBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUJAAIBCQCsAgIJAKwCAgkArAICAg52b3RpbmdFbmRUaW1lPQkApAMBBQ12b3RpbmdFbmRUaW1lAhMgPCB2b3RpbmdTdGFydFRpbWU9CQCkAwEFD3ZvdGluZ1N0YXJ0VGltZQMJAGYCCQBlAgUNdm90aW5nRW5kVGltZQUPdm90aW5nU3RhcnRUaW1lBQ1NQVhWT1RJTkdUSU1FCQACAQkArAICCQCsAgIJAKwCAgIbVm90aW5nIHBlcmlvZCBleGNlZWRzIG1heDogCQCkAwEJAGUCBQ12b3RpbmdFbmRUaW1lBQ92b3RpbmdTdGFydFRpbWUCAyA+IAkApAMBBQ1NQVhWT1RJTkdUSU1FBAV0eElkcwMJAAACBQR0eXBlAgRJREVBAgAJAQtjaGVja1R4TGlzdAEFBnR4TGlzdAMJAGcCAAEJAJADAQULb3B0aW9uc0xpc3QJAAIBAhdUb28gZmV3IGNob2ljZXMgdG8gdm90ZQQDZWZmCQERZ2V0RWZmZWN0aXZlR25zYnQBBQZhdXRob3IECmduc2J0VG90YWwJAJEDAgUDZWZmBQtJZHhFZmZUb3RhbAQJZ05zYnRVc2VyCQCRAwIFA2VmZgUKSWR4RWZmVXNlcgQIZ25zYnRSZXEJAQxnZXRJbnRPckVsc2UCCQEQa2V5R25zYnRSZXF1aXJlZAAFFERFRkFVTFRDUkVBVElPTkdOU0JUAwkAZgIFCGduc2J0UmVxBQlnTnNidFVzZXIJAAIBCQCsAgIJAKwCAgISWW91IG5lZWQgYXQgbGVhc3QgCQCkAwEFCGduc2J0UmVxAhcgZ05zYnQgdG8gY3JlYXRlIHZvdGluZwQMYW1vdW50TGVhc2VkCQD8BwQFEG5ldXRyaW5vQ29udHJhY3QCC2FjY2VwdFdhdmVzBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFDGFtb3VudExlYXNlZAUMYW1vdW50TGVhc2VkBAZxdW9ydW0JAQxnZXRJbnRPckVsc2UCCQEYa2V5UXVvcnVtUmVxdWlyZWRQZXJjZW50AQUEdHlwZQUNREVGQVVMVFFVT1JVTQQNcXVvcnVtSW5HbnNidAkAawMFBnF1b3J1bQUKZ25zYnRUb3RhbAUFTVVMVDYECnByb3Bvc2FsSWQJAGQCCQEMZ2V0SW50T3JFbHNlAgkBEWtleUxhc3RQcm9wb3NhbElkAAAAAAEEFG51bVByb3Bvc2Fsc0J5QXV0aG9yCQBkAgkBDGdldEludE9yRWxzZQIJARdrZXlOdW1Qcm9wb3NhbHNCeUF1dGhvcgEFBmF1dGhvcgAAAAEEC3VuaXFBdXRob3JzCQBkAgkBDGdldEludE9yRWxzZQIJARVrZXlTdGF0c1VuaXF1ZUF1dGhvcnMAAAADCQAAAgUUbnVtUHJvcG9zYWxzQnlBdXRob3IAAQABAAAECm9wdGlvbnNTdHIJALkJAgULb3B0aW9uc0xpc3QFB0xJU1RTRVAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleUxhc3RQcm9wb3NhbElkAAUKcHJvcG9zYWxJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVByb3Bvc2FsSWRCeVRvcGljSWQBBQd0b3BpY0lkBQpwcm9wb3NhbElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAkBCnN0YXR1c0RhdGEHBwAAAAAAAAcAAAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkCQEMcHJvcG9zYWxEYXRhCwUMcHJvcG9zYWxUeElkBQR0eXBlBQZhdXRob3IJANgEAQkAmwMBBQlmb3J1bUxpbmsJANgEAQkAmwMBBQV0aXRsZQUMcHJvcG9zYWxUaW1lBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUFBXR4SWRzBQ1xdW9ydW1Jbkduc2J0BQpvcHRpb25zU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5TnVtUHJvcG9zYWxzQnlBdXRob3IBBQZhdXRob3IFFG51bVByb3Bvc2Fsc0J5QXV0aG9yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5U3RhdHNVbmlxdWVBdXRob3JzAAULdW5pcUF1dGhvcnMFA25pbAUMcHJvcG9zYWxUeElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1jYWxjV2luT3B0aW9uBwpwcm9wb3NhbElkC29wdGlvbnNMaXN0DmlzUHJldk9wdGlvbmFsCW9sZENob2ljZRBvcHRpb25hbFRvdGFsT2xkCW5ld0Nob2ljZRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCgEIZmluZEJlc3QCA2FjYwRlbGVtBANpZHgJAQV2YWx1ZQEJAM8IAgULb3B0aW9uc0xpc3QFBGVsZW0EA3ZhbAMFDmlzUHJldk9wdGlvbmFsAwkAAAIFA2lkeAUJbmV3Q2hvaWNlBRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCQEMZ2V0SW50T3JFbHNlAgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAUDaWR4AAADCQAAAgUDaWR4CQEFdmFsdWUBBQlvbGRDaG9pY2UFEG9wdGlvbmFsVG90YWxPbGQDCQAAAgUDaWR4BQluZXdDaG9pY2UFE25ld1RvdGFsQnlOZXdDaG9pY2UJAQxnZXRJbnRPckVsc2UCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkBQNpZHgAAAMJAGYCCAUDYWNjAl8yBQN2YWwFA2FjYwkAlAoCBQNpZHgFA3ZhbAoAAiRsBQtvcHRpb25zTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbmRCZXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARB1cGRhdGVTdGF0dXNEYXRhBAdvbGREYXRhB2lzVmFsaWQJbmV3V2luT3B0DW5ld1RvdGFsVm90ZXMJALkJAgkAzAgCAg4lYiVkJWQlZCViJWQlYgkAzAgCCQClAwEFB2lzVmFsaWQJAMwIAgkApAMBCAUJbmV3V2luT3B0Al8xCQDMCAIJAKQDAQgFCW5ld1dpbk9wdAJfMgkAzAgCCQCkAwEFDW5ld1RvdGFsVm90ZXMJAMwIAgkAkQMCBQdvbGREYXRhBRVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQJAMwIAgkAkQMCBQdvbGREYXRhBRJnb3ZTdGF0dXNJZHhTY1RpbWUJAMwIAgkAkQMCBQdvbGREYXRhBRZnb3ZTdGF0dXNJZHhJc0NhbmNlbGVkBQNuaWwFA1NFUAERc3RhdHVzQXBwbHlTY3JpcHQBB29sZERhdGEJALkJAgkAzAgCAg4lYiVkJWQlZCViJWQlYgkAzAgCCQCRAwIFB29sZERhdGEFE2dvdlN0YXR1c0lkeElzVmFsaWQJAMwIAgkAkQMCBQdvbGREYXRhBRJnb3ZTdGF0dXNJZHhXaW5PcHQJAMwIAgkAkQMCBQdvbGREYXRhBRRnb3ZTdGF0dXNJZHhXaW5Wb3RlcwkAzAgCCQCRAwIFB29sZERhdGEFFmdvdlN0YXR1c0lkeFRvdGFsVm90ZXMJAMwIAgIEdHJ1ZQkAzAgCCQCRAwIFB29sZERhdGEFEmdvdlN0YXR1c0lkeFNjVGltZQkAzAgCCQCRAwIFB29sZERhdGEFFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQFA25pbAUDU0VQARBFeGVjdXRpb25IaXN0b3J5Awpwcm9wb3NhbElkBXRpdGxlA3VybAQKZ25zYnRUb3RhbAkAkQMCCQERZ2V0RWZmZWN0aXZlR25zYnQBAgAFC0lkeEVmZlRvdGFsBAd0dXJub3V0AKDCHgkBC1N0cmluZ0VudHJ5AgkBD2tleUFwcGx5SGlzdG9yeQEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQC5CQIJAMwIAgIKJWQlZCVkJXMlcwkAzAgCCQCkAwEFCnByb3Bvc2FsSWQJAMwIAgkApAMBBQpnbnNidFRvdGFsCQDMCAIJAKQDAQUHdHVybm91dAkAzAgCBQV0aXRsZQkAzAgCBQN1cmwFA25pbAUDU0VQBwFpAQtjb25zdHJ1Y3RvcgULY29udHJvbEFkZHIOZ05zYnRSZXFUb0luaXQOd2F2ZXNSZXFUb0luaXQRcXVvcnVtUmVxUGVyY0lkZWETcXVvcnVtUmVxUGVyY1VwZGF0ZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlDb250cm9sQWRkcmVzcwAFC2NvbnRyb2xBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5R25zYnRSZXF1aXJlZAAFDmdOc2J0UmVxVG9Jbml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5UGF5bWVudFJlcXVpcmVkAAUOd2F2ZXNSZXFUb0luaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlRdW9ydW1SZXF1aXJlZFBlcmNlbnQBAgRJREVBBRFxdW9ydW1SZXFQZXJjSWRlYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleVF1b3J1bVJlcXVpcmVkUGVyY2VudAECBlVQREFURQUTcXVvcnVtUmVxUGVyY1VwZGF0ZQUDbmlsAWkBCGNhc3RWb3RlAgpwcm9wb3NhbElkBmNob2ljZQQOdXNlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAtkeW5hbWljRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVADCQAAAgkAkQMCBQtkeW5hbWljRGF0YQUWZ292U3RhdHVzSWR4SXNDYW5jZWxlZAIEdHJ1ZQkAAgECGlZvdGluZyBpcyBjYW5jZWxlZCBieSB0ZWFtBAhwcm9wRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVAEBXN0YXJ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcERhdGEFC2dvdklkeFN0YXJ0BANlbmQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wRGF0YQUJZ292SWR4RW5kBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFBXN0YXJ0BQNub3cJAAIBAhZWb3Rpbmcgbm90IHN0YXJ0ZWQgeWV0AwkAZwIFA25vdwUDZW5kCQACAQIXVm90aW5nIGFscmVhZHkgZmluaXNoZWQEEGF2YWlsYWJsZU9wdGlvbnMJALUJAgkAkQMCBQhwcm9wRGF0YQUNZ292SWR4T3B0aW9ucwUHTElTVFNFUAQKbnVtT3B0aW9ucwkAkAMBBRBhdmFpbGFibGVPcHRpb25zAwkAZwIAAQUKbnVtT3B0aW9ucwkAAgECF1RvbyBmZXcgY2hvaWNlcyB0byB2b3RlAwkAZwIFBmNob2ljZQUKbnVtT3B0aW9ucwkAAgEJAKwCAgIbVW5rbm93biBjaG9pY2UhIE11c3QgYmUgMC4uCQCkAwEJAGUCBQpudW1PcHRpb25zAAEEA2VmZgkBEWdldEVmZmVjdGl2ZUduc2J0AQUOdXNlckFkZHJlc3NTdHIECGduc2J0QW10CQCRAwIFA2VmZgUKSWR4RWZmVXNlcgMJAGcCAAAFCGduc2J0QW10CQACAQIQbm8gZ25zYnQgdG8gdm90ZQQKZ25zYnRUb3RhbAkAkQMCBQNlZmYFC0lkeEVmZlRvdGFsBAlvbGRDaG9pY2UJAJ8IAQkBHGtleVByb3Bvc2FsQ2hvaWNlQnlJZEFuZFVzZXICBQpwcm9wb3NhbElkBQ51c2VyQWRkcmVzc1N0cgQMb2xkVXNlclZvdGVzAwkBASEBCQEJaXNEZWZpbmVkAQUJb2xkQ2hvaWNlAAAJAQxnZXRJbnRPckVsc2UCCQEba2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRVc2VyAgUKcHJvcG9zYWxJZAUOdXNlckFkZHJlc3NTdHIAAAQTb2xkVG90YWxCeU9sZENob2ljZQMJAQlpc0RlZmluZWQBBQlvbGRDaG9pY2UJAQxnZXRJbnRPckVsc2UCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkCQEFdmFsdWUBBQlvbGRDaG9pY2UAAAAABBNvbGRUb3RhbEJ5TmV3Q2hvaWNlCQEMZ2V0SW50T3JFbHNlAgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAUGY2hvaWNlAAAECG9sZFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULZHluYW1pY0RhdGEFFmdvdlN0YXR1c0lkeFRvdGFsVm90ZXMEE25ld1RvdGFsQnlPbGRDaG9pY2UDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRDaG9pY2UAAAkAZAIJAGUCBRNvbGRUb3RhbEJ5T2xkQ2hvaWNlBQxvbGRVc2VyVm90ZXMDCQAAAgkBBXZhbHVlAQUJb2xkQ2hvaWNlBQZjaG9pY2UFCGduc2J0QW10AAAEE25ld1RvdGFsQnlOZXdDaG9pY2UDAwkBCWlzRGVmaW5lZAEFCW9sZENob2ljZQkAAAIJAQV2YWx1ZQEFCW9sZENob2ljZQUGY2hvaWNlBwUTbmV3VG90YWxCeU9sZENob2ljZQkAZAIFE29sZFRvdGFsQnlOZXdDaG9pY2UFCGduc2J0QW10BAhuZXdUb3RhbAkAZAIJAGUCBQhvbGRUb3RhbAUMb2xkVXNlclZvdGVzBQhnbnNidEFtdAQPaXNRdW9ydW1SZWFjaGVkCQBnAgUIbmV3VG90YWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wRGF0YQUMZ292SWR4UXVvcnVtBBVudW1Wb3RlcnNCeVByb3Bvc2FsSWQJAQxnZXRJbnRPckVsc2UCCQEea2V5TnVtVW5pcXVlVm90ZXJzQnlQcm9wb3NhbElkAQUKcHJvcG9zYWxJZAAABBRvbGRBdmVyVW5pcXVlVm90ZXJzNgkBDGdldEludE9yRWxzZQIJARhrZXlTdGF0c0F2ZXJVbmlxdWVWb3RlcnMAAAAEDG51bVByb3Bvc2FscwkBEUBleHRyTmF0aXZlKDEwNTUpAQkBEWtleUxhc3RQcm9wb3NhbElkAAQKdW5pcXVlRGlmZgMJAAACBQxvbGRVc2VyVm90ZXMAAAABAAAEFG5ld0F2ZXJVbmlxdWVWb3RlcnM2CQBkAgUUb2xkQXZlclVuaXF1ZVZvdGVyczYJAGsDBQp1bmlxdWVEaWZmBQVNVUxUNgUMbnVtUHJvcG9zYWxzBAxvbGRBdmVyR25zYnQJAQxnZXRJbnRPckVsc2UCCQEWa2V5U3RhdHNBdmVyR25zYnRWb3RlZAAAAAQMbmV3QXZlckduc2J0CQBkAgUMb2xkQXZlckduc2J0CQBpAgkAZQIFCGduc2J0QW10BQxvbGRVc2VyVm90ZXMFDG51bVByb3Bvc2FscwQOaXNQcmV2T3B0aW9uYWwDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRDaG9pY2UGCQAAAgkBBXZhbHVlAQUJb2xkQ2hvaWNlBQZjaG9pY2UEEG9wdGlvbmFsVG90YWxPbGQDBQ5pc1ByZXZPcHRpb25hbAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkCQEFdmFsdWUBBQlvbGRDaG9pY2UFE25ld1RvdGFsQnlPbGRDaG9pY2UFA25pbAQGd2luT3B0CQENY2FsY1dpbk9wdGlvbgcFCnByb3Bvc2FsSWQFEGF2YWlsYWJsZU9wdGlvbnMFDmlzUHJldk9wdGlvbmFsBQlvbGRDaG9pY2UFE25ld1RvdGFsQnlPbGRDaG9pY2UFBmNob2ljZQUTbmV3VG90YWxCeU5ld0Nob2ljZQQLcmVsZWFzZVRpbWUJAJYDAQkAzAgCBQNlbmQJAMwIAgkBDGdldEludE9yRWxzZQIJARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEFDnVzZXJBZGRyZXNzU3RyAAAFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARxrZXlQcm9wb3NhbENob2ljZUJ5SWRBbmRVc2VyAgUKcHJvcG9zYWxJZAUOdXNlckFkZHJlc3NTdHIFBmNob2ljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG2tleVByb3Bvc2FsVm90ZXNCeUlkQW5kVXNlcgIFCnByb3Bvc2FsSWQFDnVzZXJBZGRyZXNzU3RyBQhnbnNidEFtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAUGY2hvaWNlBRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5TnVtVW5pcXVlVm90ZXJzQnlQcm9wb3NhbElkAQUKcHJvcG9zYWxJZAkAZAIFFW51bVZvdGVyc0J5UHJvcG9zYWxJZAUKdW5pcXVlRGlmZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleVVzZXJHbnNidFJlbGVhc2VUaW1lAQUOdXNlckFkZHJlc3NTdHIFC3JlbGVhc2VUaW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5U3RhdHNBdmVyVW5pcXVlVm90ZXJzAAUUbmV3QXZlclVuaXF1ZVZvdGVyczYJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGF0c0F2ZXJHbnNidFZvdGVkAAUMbmV3QXZlckduc2J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAkBEHVwZGF0ZVN0YXR1c0RhdGEEBQtkeW5hbWljRGF0YQUPaXNRdW9ydW1SZWFjaGVkBQZ3aW5PcHQFCG5ld1RvdGFsBQNuaWwFEG9wdGlvbmFsVG90YWxPbGQFBHVuaXQBaQESaW5pdGlhdGVJZGVhVm90aW5nBQlmb3J1bUxpbmsFdGl0bGUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWULb3B0aW9uc0xpc3QDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkAwkBAiE9AgkAkAMBBQtvcHRpb25zTGlzdAACCQACAQIrRXhhY3RseSAyIG9wdGlvbiBbJ05PJywgJ1lFUyddIGFyZSBleHBlY3RlZAMJAQIhPQIJAJEDAgULb3B0aW9uc0xpc3QAAAICTk8JAAIBAh1PcHRpb24gTk8gc2hvdWxkIGJlIHRoZSBmaXJzdAMJAQIhPQIJAJEDAgULb3B0aW9uc0xpc3QAAQIDWUVTCQACAQIfT3B0aW9uIFlFUyBzaG91bGQgYmUgdGhlIHNlY29uZAkBDmluaXRpYXRlVm90aW5nCwkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAACQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQCBElERUEJAKUIAQgFAWkGY2FsbGVyBQlmb3J1bUxpbmsFBXRpdGxlBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUCB1BFTkRJTkcFA25pbAULb3B0aW9uc0xpc3QBaQEUaW5pdGlhdGVVcGRhdGVWb3RpbmcFCWZvcnVtTGluawV0aXRsZQ92b3RpbmdTdGFydFRpbWUNdm90aW5nRW5kVGltZQZ0eExpc3QDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkAwkAZgIAAQkAkAMBBQZ0eExpc3QJAAIBAhpUcmFuc2FjdGlvbnMgbGlzdCBpcyBlbXB0eQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDm5vdCBhdXRob3JpemVkCQEOaW5pdGlhdGVWb3RpbmcLCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAIGVVBEQVRFCQClCAEIBQFpBmNhbGxlcgUJZm9ydW1MaW5rBQV0aXRsZQUPdm90aW5nU3RhcnRUaW1lBQ12b3RpbmdFbmRUaW1lAgdQRU5ESU5HBQZ0eExpc3QJAMwIAgICTk8JAMwIAgIDWUVTBQNuaWwBaQEMY2FuY2VsVm90aW5nAQpwcm9wb3NhbElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIObm90IGF1dGhvcml6ZWQEC2N1cnJlbnREYXRhCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkBAt1cGRhdGVkRGF0YQkArAICCQCsAgIJAK8CAgULY3VycmVudERhdGEJAQV2YWx1ZQEJALcJAgULY3VycmVudERhdGEFA1NFUAUDU0VQAgR0cnVlCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQt1cGRhdGVkRGF0YQUDbmlsBQR1bml0AWkBC2FwcGx5VXBkYXRlAQpwcm9wb3NhbElkBAhwcm9wRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVAEA2VuZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BEYXRhBQlnb3ZJZHhFbmQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUDZW5kBQNub3cJAAIBAhpWb3RpbmcgaXMgbm90IGZpbmlzaGVkIHlldAMJAQIhPQICBlVQREFURQkAkQMCBQhwcm9wRGF0YQUKZ292SWR4VHlwZQkAAgECH09ubHkgVVBEQVRFIHR5cGUgY2FuIGJlIGFwcGxpZWQEC2R5bmFtaWNEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAMJAAACCQCRAwIFC2R5bmFtaWNEYXRhBRZnb3ZTdGF0dXNJZHhJc0NhbmNlbGVkAgR0cnVlCQACAQISVm90aW5nIGlzIGNhbmNlbGVkAwkBAiE9AgkAkQMCBQtkeW5hbWljRGF0YQUTZ292U3RhdHVzSWR4SXNWYWxpZAIEdHJ1ZQkAAgECFVZvdGluZyBzdGF0dXMgaW52YWxpZAMJAQIhPQIJAJEDAgULZHluYW1pY0RhdGEFEmdvdlN0YXR1c0lkeFdpbk9wdAIBMQkAAgECIVdpbm5lciBpcyAnTk8nIC0gbm90aGluZyB0byBhcHBseQMJAAACCQCRAwIFC2R5bmFtaWNEYXRhBRVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQCBHRydWUJAAIBAhtTY3JpcHRzIGFyZSBhbHJlYWR5IGFwcGxpZWQECnNjcmlwdFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtkeW5hbWljRGF0YQUSZ292U3RhdHVzSWR4U2NUaW1lAwkAZgIJAGUCBQNub3cFClBBU1RNQVJHSU4FCnNjcmlwdFRpbWUJAAIBCQCsAgIJAKwCAgISU2NyaXB0cyB0aW1lc3RhbXA9CQCkAwEFCnNjcmlwdFRpbWUCKiBpcyB0b28gZmFyIGluIHRoZSBwYXN0LCBtYXggMiBocnMgYWxsb3dlZAMJAGYCBQpzY3JpcHRUaW1lCQBkAgUDbm93BQxGVVRVUkVNQVJHSU4JAAIBCQCsAgIJAKwCAgISU2NyaXB0cyB0aW1lc3RhbXA9CQCkAwEFCnNjcmlwdFRpbWUCLiBpcyB0b28gZmFyIGluIHRoZSBmdXR1cmUsIG1heCAxLjUgaHJzIGFsbG93ZWQEDGluUHJvZ3Jlc3NJZAkBDGdldEludE9yRWxzZQIJARJrZXlBcHBseUluUHJvZ3Jlc3MAAP///////////wEDCQECIT0CBQxpblByb2dyZXNzSWQA////////////AQkAAgEJAKwCAgkArAICAgtwcm9wb3NhbElkPQkApAMBBQxpblByb2dyZXNzSWQCKyBpcyBhbHJlYWR5IGJlaW5nIGFwcGxpZWQuIEZpbmlzaCBpdCBmaXJzdCEECHNodXRkb3duCQD8BwQFD2NvbnRyb2xDb250cmFjdAIVY2FsbEVtZXJnZW5jeVNodXRkb3duCQDMCAICGkFwcGx5aW5nIEdvdmVybmFuY2UgVVBEQVRFBQNuaWwFA25pbAMJAAACBQhzaHV0ZG93bgUIc2h1dGRvd24JAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleUFwcGx5SW5Qcm9ncmVzcwAFCnByb3Bvc2FsSWQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtmaW5pc2hBcHBseQAECnByb3Bvc2FsSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQESa2V5QXBwbHlJblByb2dyZXNzAAInTm8gYXBwbHkgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZmluaXNoBAhwcm9wRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVAEBnR4TGlzdAkAtQkCCQCRAwIFCHByb3BEYXRhBQtnb3ZJZHhUeElkcwUHTElTVFNFUAQLZHluYW1pY0RhdGEJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAUDU0VQAwkAAAIJAJEDAgULZHluYW1pY0RhdGEFFWdvdlN0YXR1c0lkeFNjQXBwbGllZAIEdHJ1ZQkAAgECG1NjcmlwdHMgYXJlIGFscmVhZHkgYXBwbGllZAoBB2NoZWNrZXICA2FjYwJ0eAMJAQEhAQkBCWlzRGVmaW5lZAEJAOkHAQkA2QQBBQJ0eAkAAgEJAKwCAgISTk9UIGFwcGxpZWQgdHhJZDogBQJ0eAUEdW5pdAQHaWdub3JlZAoAAiRsBQZ0eExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQR1bml0CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEB3ZlcnNpb24JAGQCCQEMZ2V0SW50T3JFbHNlAgkBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAAAAAEJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QXBwbHlJblByb2dyZXNzAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAUHdmVyc2lvbgkAzAgCCQELU3RyaW5nRW50cnkCCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQJARFzdGF0dXNBcHBseVNjcmlwdAEFC2R5bmFtaWNEYXRhCQDMCAIJARBFeGVjdXRpb25IaXN0b3J5AwUHdmVyc2lvbgkAkQMCBQhwcm9wRGF0YQULZ292SWR4VGl0bGUJAJEDAgUIcHJvcERhdGEFCWdvdklkeFVybAUDbmlsBQdpZ25vcmVkADYwly0=", "height": 2332651, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6YUCwDAcbzzLP1BvFCSzCfS2a2NDZg5dtMZF1fQf8gGN Next: 32rWApqw4nfbKJoFxdMFrUFXtGB8yYeLgj8qWy66mrff Diff:
OldNewDifferences
151151 func aw (ax) = ("%s%d__proposalIdByTopicId__" + toString(ax))
152152
153153
154-func ay (ao) = ("%s%d__numVoters__" + toString(ao))
154+func ay (at) = ("%s%s_userGnsbtReleaseTime__" + at)
155155
156156
157-func az () = "%s%s%s__stats__avg__uniqueVoters"
157+func az (ao) = ("%s%d__numVoters__" + toString(ao))
158158
159159
160-func aA () = "%s%s%s__stats__avg__gnsbtVoted"
160+func aA () = "%s%s%s__stats__avg__uniqueVoters"
161161
162162
163-func aB () = "%s%s__stats__uniqueAuthors"
163+func aB () = "%s%s%s__stats__avg__gnsbtVoted"
164164
165165
166-func aC (aD) = ("%s%s__numProposalsByAuthor__" + aD)
166+func aC () = "%s%s__stats__uniqueAuthors"
167167
168168
169-func aE (aF) = ("%s%d__applyHistory__" + toString(aF))
169+func aD (aE) = ("%s%s__numProposalsByAuthor__" + aE)
170170
171171
172-func aG (aH) = {
173- let aI = aH
174- if ($isInstanceOf(aI, "List[Any]"))
172+func aF (aG) = ("%s%d__applyHistory__" + toString(aG))
173+
174+
175+func aH (aI) = {
176+ let aJ = aI
177+ if ($isInstanceOf(aJ, "List[Any]"))
175178 then {
176- let aJ = aI
177- aJ
179+ let aK = aJ
180+ aK
178181 }
179182 else throw("fail to cast into List[Any]")
180183 }
181184
182185
183-func aK (aH) = {
184- let aI = aH
185- if ($isInstanceOf(aI, "Int"))
186+func aL (aI) = {
187+ let aJ = aI
188+ if ($isInstanceOf(aJ, "Int"))
186189 then {
187- let aL = aI
188- aL
190+ let aM = aJ
191+ aM
189192 }
190193 else throw("fail to cast into Int")
191194 }
192195
193196
194-func aM (aN,aO,aP,aQ,aR,aS,aT) = makeString(["%b%d%d%d%b%d%b", toString(aN), toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT)], b)
197+func aN (aO,aP,aQ,aR,aS,aT,aU) = makeString(["%b%d%d%d%b%d%b", toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT), toString(aU)], b)
195198
196199
197-func aU (aV,ai,aW,aX,aY,aZ,ba,bb,bc,bd,be) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", aV, ai, aW, aX, aY, toString(aZ), toString(ba), toString(bb), bc, toString(bd), be], b)
200+func aV (aW,ai,aX,aY,aZ,ba,bb,bc,bd,be,bf) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", aW, ai, aX, aY, aZ, toString(ba), toString(bb), toString(bc), bd, toString(be), bf], b)
198201
199202
200-func bf (bg) = if ((size(bg) > 20))
201- then throw(("Too many transactions: " + toString(size(bg))))
203+func bg (bh) = if ((size(bh) > 20))
204+ then throw(("Too many transactions: " + toString(size(bh))))
202205 else {
203- func bh (bi,bj) = if ((size(fromBase58String(bj)) != 32))
204- then throw(("Wrong txId: " + bj))
205- else if ((bi == ""))
206- then bj
207- else ((bi + c) + bj)
206+ func bi (bj,bk) = if ((size(fromBase58String(bk)) != 32))
207+ then throw(("Wrong txId: " + bk))
208+ else if ((bj == ""))
209+ then bk
210+ else ((bj + c) + bk)
208211
209- let bk = bg
210- let bl = size(bk)
211- let bm = ""
212- func bn (bo,bp) = if ((bp >= bl))
213- then bo
214- else bh(bo, bk[bp])
212+ let bl = bh
213+ let bm = size(bl)
214+ let bn = ""
215+ func bo (bp,bq) = if ((bq >= bm))
216+ then bp
217+ else bi(bp, bl[bq])
215218
216- func bq (bo,bp) = if ((bp >= bl))
217- then bo
219+ func br (bp,bq) = if ((bq >= bm))
220+ then bp
218221 else throw("List size exceeds 20")
219222
220- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
223+ br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
221224 }
222225
223226
224-let br = 0
227+let bs = 0
225228
226-let bs = 1
229+let bt = 1
227230
228-func bt (bu) = {
229- let bv = aG(invoke(ag, "gnsbtInfoSYSREADONLY", [bu, 0, 0], nil))
230- let bw = aG(bv[2])
231- let bx = aK(bw[2])
232- let by = aK(bw[3])
233- let bz = aK(bv[9])
234- let bA = aK(bv[6])
235-[(by + bA), (bx + bz)]
231+func bu (bv) = {
232+ let bw = aH(invoke(ag, "gnsbtInfoSYSREADONLY", [bv, 0, 0], nil))
233+ let bx = aH(bw[2])
234+ let by = aL(bx[2])
235+ let bz = aL(bx[3])
236+ let bA = aL(bw[9])
237+ let bB = aL(bw[6])
238+[(bz + bB), (by + bA)]
236239 }
237240
238241
239-func bB (bC) = if ((value(indexOf(bC, e)) != 0))
242+func bC (bD) = if ((value(indexOf(bD, e)) != 0))
240243 then throw("Invalid url")
241- else if ((size(bC) > g))
244+ else if ((size(bD) > g))
242245 then throw("Url too long!")
243246 else {
244- let ax = valueOrErrorMessage(parseInt(drop(bC, (value(lastIndexOf(bC, "/")) + 1))), "Wrong topicId")
245- let bD = getInteger(aw(ax))
246- if (isDefined(bD))
247- then throw(("Voting with such forum link is already registered by id=" + toString(value(bD))))
247+ let ax = valueOrErrorMessage(parseInt(drop(bD, (value(lastIndexOf(bD, "/")) + 1))), "Wrong topicId")
248+ let bE = getInteger(aw(ax))
249+ if (isDefined(bE))
250+ then throw(("Voting with such forum link is already registered by id=" + toString(value(bE))))
248251 else ax
249252 }
250253
251254
252-func bE (bF,aV,ai,aW,aX,aY,ba,bb,bG,bg,bH) = if ((bF.assetId != unit))
255+func bF (bG,aW,ai,aX,aY,aZ,bb,bc,bH,bh,bI) = if ((bG.assetId != unit))
253256 then throw("Allowed WAVES payment only!")
254257 else {
255- let bI = I(aj(), j)
256- if ((bI > bF.amount))
257- then throw(("Payment attached should be at least " + toString(bI)))
258+ let bJ = I(aj(), j)
259+ if ((bJ > bG.amount))
260+ then throw(("Payment attached should be at least " + toString(bJ)))
258261 else {
259- let ax = bB(aX)
260- if ((aY == ""))
262+ let ax = bC(aY)
263+ if ((aZ == ""))
261264 then throw("Title is empty")
262- else if ((size(aY) > f))
265+ else if ((size(aZ) > f))
263266 then throw("Too long title")
264267 else {
265- let aZ = lastBlock.timestamp
266- if ((aZ > ba))
267- then throw(((("votingStartTime=" + toString(ba)) + " < proposalTime=") + toString(aZ)))
268- else if ((ba > bb))
269- then throw(((("votingEndTime=" + toString(bb)) + " < votingStartTime=") + toString(ba)))
270- else if (((bb - ba) > h))
271- then throw(((("Voting period exceeds max: " + toString((bb - ba))) + " > ") + toString(h)))
268+ let ba = lastBlock.timestamp
269+ if ((ba > bb))
270+ then throw(((("votingStartTime=" + toString(bb)) + " < proposalTime=") + toString(ba)))
271+ else if ((bb > bc))
272+ then throw(((("votingEndTime=" + toString(bc)) + " < votingStartTime=") + toString(bb)))
273+ else if (((bc - bb) > h))
274+ then throw(((("Voting period exceeds max: " + toString((bc - bb))) + " > ") + toString(h)))
272275 else {
273- let bc = if ((ai == "IDEA"))
276+ let bd = if ((ai == "IDEA"))
274277 then ""
275- else bf(bg)
276- if ((1 >= size(bH)))
278+ else bg(bh)
279+ if ((1 >= size(bI)))
277280 then throw("Too few choices to vote")
278281 else {
279- let bJ = bt(aW)
280- let bK = bJ[br]
281- let bL = bJ[bs]
282- let bM = I(ak(), k)
283- if ((bM > bL))
284- then throw((("You need at least " + toString(bM)) + " gNsbt to create voting"))
282+ let bK = bu(aX)
283+ let bL = bK[bs]
284+ let bM = bK[bt]
285+ let bN = I(ak(), k)
286+ if ((bN > bM))
287+ then throw((("You need at least " + toString(bN)) + " gNsbt to create voting"))
285288 else {
286- let bN = invoke(af, "acceptWaves", nil, [bF])
287- if ((bN == bN))
289+ let bO = invoke(af, "acceptWaves", nil, [bG])
290+ if ((bO == bO))
288291 then {
289- let bO = I(ah(ai), d)
290- let bd = fraction(bO, bK, i)
292+ let bP = I(ah(ai), d)
293+ let be = fraction(bP, bL, i)
291294 let ao = (I(al(), 0) + 1)
292- let bP = (I(aC(aW), 0) + 1)
293- let bQ = (I(aB(), 0) + (if ((bP == 1))
295+ let bQ = (I(aD(aX), 0) + 1)
296+ let bR = (I(aC(), 0) + (if ((bQ == 1))
294297 then 1
295298 else 0))
296- let bR = makeString(bH, c)
297- $Tuple2([IntegerEntry(al(), ao), IntegerEntry(aw(ax), ao), StringEntry(an(ao), aM(false, 0, 0, 0, false, 0, false)), StringEntry(ap(ao), aU(aV, ai, aW, toBase58String(toBytes(aX)), toBase58String(toBytes(aY)), aZ, ba, bb, bc, bd, bR)), IntegerEntry(aC(aW), bP), IntegerEntry(aB(), bQ)], aV)
299+ let bS = makeString(bI, c)
300+ $Tuple2([IntegerEntry(al(), ao), IntegerEntry(aw(ax), ao), StringEntry(an(ao), aN(false, 0, 0, 0, false, 0, false)), StringEntry(ap(ao), aV(aW, ai, aX, toBase58String(toBytes(aY)), toBase58String(toBytes(aZ)), ba, bb, bc, bd, be, bS)), IntegerEntry(aD(aX), bQ), IntegerEntry(aC(), bR)], aW)
298301 }
299302 else throw("Strict value is not equal to itself.")
300303 }
305308 }
306309
307310
308-func bS (ao,bH,bT,bU,bV,bW,bX) = {
309- func bY (bi,bZ) = {
310- let ad = value(indexOf(bH, bZ))
311- let ca = if (bT)
312- then if ((ad == bW))
313- then bX
311+func bT (ao,bI,bU,bV,bW,bX,bY) = {
312+ func bZ (bj,ca) = {
313+ let ad = value(indexOf(bI, ca))
314+ let cb = if (bU)
315+ then if ((ad == bX))
316+ then bY
314317 else I(aq(ao, ad), 0)
315- else if ((ad == value(bU)))
316- then bV
317- else if ((ad == bW))
318- then bX
318+ else if ((ad == value(bV)))
319+ then bW
320+ else if ((ad == bX))
321+ then bY
319322 else I(aq(ao, ad), 0)
320- if ((bi._2 > ca))
321- then bi
322- else $Tuple2(ad, ca)
323+ if ((bj._2 > cb))
324+ then bj
325+ else $Tuple2(ad, cb)
323326 }
324327
325- let bk = bH
326- let bl = size(bk)
327- let bm = $Tuple2(0, 0)
328- func bn (bo,bp) = if ((bp >= bl))
329- then bo
330- else bY(bo, bk[bp])
328+ let bl = bI
329+ let bm = size(bl)
330+ let bn = $Tuple2(0, 0)
331+ func bo (bp,bq) = if ((bq >= bm))
332+ then bp
333+ else bZ(bp, bl[bq])
331334
332- func bq (bo,bp) = if ((bp >= bl))
333- then bo
335+ func br (bp,bq) = if ((bq >= bm))
336+ then bp
334337 else throw("List size exceeds 10")
335338
336- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
339+ br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
337340 }
338341
339342
340-func cb (cc,cd,ce,cf) = makeString(["%b%d%d%d%b%d%b", toString(cd), toString(ce._1), toString(ce._2), toString(cf), cc[C], cc[D], cc[E]], b)
343+func cc (cd,ce,cf,cg) = makeString(["%b%d%d%d%b%d%b", toString(ce), toString(cf._1), toString(cf._2), toString(cg), cd[C], cd[D], cd[E]], b)
341344
342345
343-func cg (cc) = makeString(["%b%d%d%d%b%d%b", cc[y], cc[z], cc[A], cc[B], "true", cc[D], cc[E]], b)
346+func ch (cd) = makeString(["%b%d%d%d%b%d%b", cd[y], cd[z], cd[A], cd[B], "true", cd[D], cd[E]], b)
344347
345348
346-func ch (ao,aY,bC) = {
347- let bK = bt("")[br]
348- let ci = 500000
349- StringEntry(aE(lastBlock.timestamp), makeString(["%d%d%d%s%s", toString(ao), toString(bK), toString(ci), aY, bC], b))
349+func ci (ao,aZ,bD) = {
350+ let bL = bu("")[bs]
351+ let cj = 500000
352+ StringEntry(aF(lastBlock.timestamp), makeString(["%d%d%d%s%s", toString(ao), toString(bL), toString(cj), aZ, bD], b))
350353 }
351354
352355
353-@Callable(aL)
354-func constructor (cj,ck,cl,cm,cn) = if ((aL.caller != this))
356+@Callable(aM)
357+func constructor (ck,cl,cm,cn,co) = if ((aM.caller != this))
355358 then throw("Permission denied")
356- else [StringEntry(X(), cj), IntegerEntry(ak(), ck), IntegerEntry(aj(), cl), IntegerEntry(ah("IDEA"), cm), IntegerEntry(ah("UPDATE"), cn)]
359+ else [StringEntry(X(), ck), IntegerEntry(ak(), cl), IntegerEntry(aj(), cm), IntegerEntry(ah("IDEA"), cn), IntegerEntry(ah("UPDATE"), co)]
357360
358361
359362
360-@Callable(aL)
361-func castVote (ao,co) = {
362- let cp = toString(aL.caller)
363- let cq = split(F(this, an(ao)), b)
364- if ((cq[E] == "true"))
363+@Callable(aM)
364+func castVote (ao,cp) = {
365+ let cq = toString(aM.caller)
366+ let cr = split(F(this, an(ao)), b)
367+ if ((cr[E] == "true"))
365368 then throw("Voting is canceled by team")
366369 else {
367- let cr = split(F(this, ap(ao)), b)
368- let cs = parseIntValue(cr[t])
369- let ct = parseIntValue(cr[u])
370- let cu = lastBlock.timestamp
371- if ((cs > cu))
370+ let cs = split(F(this, ap(ao)), b)
371+ let ct = parseIntValue(cs[t])
372+ let cu = parseIntValue(cs[u])
373+ let cv = lastBlock.timestamp
374+ if ((ct > cv))
372375 then throw("Voting not started yet")
373- else if ((cu >= ct))
376+ else if ((cv >= cu))
374377 then throw("Voting already finished")
375378 else {
376- let cv = split(cr[x], c)
377- let cw = size(cv)
378- if ((1 >= cw))
379+ let cw = split(cs[x], c)
380+ let cx = size(cw)
381+ if ((1 >= cx))
379382 then throw("Too few choices to vote")
380- else if ((co >= cw))
381- then throw(("Unknown choice! Must be 0.." + toString((cw - 1))))
383+ else if ((cp >= cx))
384+ then throw(("Unknown choice! Must be 0.." + toString((cx - 1))))
382385 else {
383- let bJ = bt(cp)
384- let cx = bJ[bs]
385- if ((0 >= cx))
386+ let bK = bu(cq)
387+ let cy = bK[bt]
388+ if ((0 >= cy))
386389 then throw("no gnsbt to vote")
387390 else {
388- let bK = bJ[br]
389- let bU = getInteger(au(ao, cp))
390- let cy = if (!(isDefined(bU)))
391+ let bL = bK[bs]
392+ let bV = getInteger(au(ao, cq))
393+ let cz = if (!(isDefined(bV)))
391394 then 0
392- else I(as(ao, cp), 0)
393- let cz = if (isDefined(bU))
394- then I(aq(ao, value(bU)), 0)
395+ else I(as(ao, cq), 0)
396+ let cA = if (isDefined(bV))
397+ then I(aq(ao, value(bV)), 0)
395398 else 0
396- let cA = I(aq(ao, co), 0)
397- let cB = parseIntValue(cq[B])
398- let cC = if (!(isDefined(bU)))
399+ let cB = I(aq(ao, cp), 0)
400+ let cC = parseIntValue(cr[B])
401+ let cD = if (!(isDefined(bV)))
399402 then 0
400- else ((cz - cy) + (if ((value(bU) == co))
401- then cx
403+ else ((cA - cz) + (if ((value(bV) == cp))
404+ then cy
402405 else 0))
403- let bX = if (if (isDefined(bU))
404- then (value(bU) == co)
406+ let bY = if (if (isDefined(bV))
407+ then (value(bV) == cp)
405408 else false)
406- then cC
407- else (cA + cx)
408- let cD = ((cB - cy) + cx)
409- let cE = (cD >= parseIntValue(cr[w]))
410- let cF = I(ay(ao), 0)
411- let cG = I(az(), 0)
412- let cH = getIntegerValue(al())
413- let cI = if ((cy == 0))
409+ then cD
410+ else (cB + cy)
411+ let cE = ((cC - cz) + cy)
412+ let cF = (cE >= parseIntValue(cs[w]))
413+ let cG = I(az(ao), 0)
414+ let cH = I(aA(), 0)
415+ let cI = getIntegerValue(al())
416+ let cJ = if ((cz == 0))
414417 then 1
415418 else 0
416- let cJ = (cG + fraction(cI, i, cH))
417- let cK = I(aA(), 0)
418- let cL = (cK + ((cx - cy) / cH))
419- let bT = if (!(isDefined(bU)))
419+ let cK = (cH + fraction(cJ, i, cI))
420+ let cL = I(aB(), 0)
421+ let cM = (cL + ((cy - cz) / cI))
422+ let bU = if (!(isDefined(bV)))
420423 then true
421- else (value(bU) == co)
422- let bV = if (bT)
424+ else (value(bV) == cp)
425+ let bW = if (bU)
423426 then nil
424- else [IntegerEntry(aq(ao, value(bU)), cC)]
425- let cM = bS(ao, cv, bT, bU, cC, co, bX)
426- $Tuple2(([IntegerEntry(au(ao, cp), co), IntegerEntry(as(ao, cp), cx), IntegerEntry(aq(ao, co), bX), IntegerEntry(ay(ao), (cF + cI)), IntegerEntry(az(), cJ), IntegerEntry(aA(), cL), StringEntry(an(ao), cb(cq, cE, cM, cD))] ++ bV), unit)
427+ else [IntegerEntry(aq(ao, value(bV)), cD)]
428+ let cN = bT(ao, cw, bU, bV, cD, cp, bY)
429+ let cO = max([cu, I(ay(cq), 0)])
430+ $Tuple2(([IntegerEntry(au(ao, cq), cp), IntegerEntry(as(ao, cq), cy), IntegerEntry(aq(ao, cp), bY), IntegerEntry(az(ao), (cG + cJ)), IntegerEntry(ay(cq), cO), IntegerEntry(aA(), cK), IntegerEntry(aB(), cM), StringEntry(an(ao), cc(cr, cF, cN, cE))] ++ bW), unit)
427431 }
428432 }
429433 }
432436
433437
434438
435-@Callable(aL)
436-func initiateIdeaVoting (aX,aY,ba,bb,bH) = if ((size(aL.payments) != 1))
439+@Callable(aM)
440+func initiateIdeaVoting (aY,aZ,bb,bc,bI) = if ((size(aM.payments) != 1))
437441 then throw("Exactly one payment required")
438- else if ((size(bH) != 2))
442+ else if ((size(bI) != 2))
439443 then throw("Exactly 2 option ['NO', 'YES'] are expected")
440- else if ((bH[0] != "NO"))
444+ else if ((bI[0] != "NO"))
441445 then throw("Option NO should be the first")
442- else if ((bH[1] != "YES"))
446+ else if ((bI[1] != "YES"))
443447 then throw("Option YES should be the second")
444- else bE(value(aL.payments[0]), toBase58String(aL.transactionId), "IDEA", toString(aL.caller), aX, aY, ba, bb, "PENDING", nil, bH)
448+ else bF(value(aM.payments[0]), toBase58String(aM.transactionId), "IDEA", toString(aM.caller), aY, aZ, bb, bc, "PENDING", nil, bI)
445449
446450
447451
448-@Callable(aL)
449-func initiateUpdateVoting (aX,aY,ba,bb,bg) = if ((size(aL.payments) != 1))
452+@Callable(aM)
453+func initiateUpdateVoting (aY,aZ,bb,bc,bh) = if ((size(aM.payments) != 1))
450454 then throw("Exactly one payment required")
451- else if ((1 > size(bg)))
455+ else if ((1 > size(bh)))
452456 then throw("Transactions list is empty")
453- else if ((aL.caller != this))
457+ else if ((aM.caller != this))
454458 then throw("not authorized")
455- else bE(value(aL.payments[0]), toBase58String(aL.transactionId), "UPDATE", toString(aL.caller), aX, aY, ba, bb, "PENDING", bg, ["NO", "YES"])
459+ else bF(value(aM.payments[0]), toBase58String(aM.transactionId), "UPDATE", toString(aM.caller), aY, aZ, bb, bc, "PENDING", bh, ["NO", "YES"])
456460
457461
458462
459-@Callable(aL)
460-func cancelVoting (ao) = if ((aL.caller != this))
463+@Callable(aM)
464+func cancelVoting (ao) = if ((aM.caller != this))
461465 then throw("not authorized")
462466 else {
463- let cN = F(this, an(ao))
464- let cO = ((take(cN, value(lastIndexOf(cN, b))) + b) + "true")
465- $Tuple2([StringEntry(an(ao), cO)], unit)
467+ let cP = F(this, an(ao))
468+ let cQ = ((take(cP, value(lastIndexOf(cP, b))) + b) + "true")
469+ $Tuple2([StringEntry(an(ao), cQ)], unit)
466470 }
467471
468472
469473
470-@Callable(aL)
474+@Callable(aM)
471475 func applyUpdate (ao) = {
472- let cr = split(F(this, ap(ao)), b)
473- let ct = parseIntValue(cr[u])
474- let cu = lastBlock.timestamp
475- if ((ct > cu))
476+ let cs = split(F(this, ap(ao)), b)
477+ let cu = parseIntValue(cs[u])
478+ let cv = lastBlock.timestamp
479+ if ((cu > cv))
476480 then throw("Voting is not finished yet")
477- else if (("UPDATE" != cr[o]))
481+ else if (("UPDATE" != cs[o]))
478482 then throw("Only UPDATE type can be applied")
479483 else {
480- let cq = split(F(this, an(ao)), b)
481- if ((cq[E] == "true"))
484+ let cr = split(F(this, an(ao)), b)
485+ if ((cr[E] == "true"))
482486 then throw("Voting is canceled")
483- else if ((cq[y] != "true"))
487+ else if ((cr[y] != "true"))
484488 then throw("Voting status invalid")
485- else if ((cq[z] != "1"))
489+ else if ((cr[z] != "1"))
486490 then throw("Winner is 'NO' - nothing to apply")
487- else if ((cq[C] == "true"))
491+ else if ((cr[C] == "true"))
488492 then throw("Scripts are already applied")
489493 else {
490- let cP = parseIntValue(cq[D])
491- if (((cu - l) > cP))
492- then throw((("Scripts timestamp=" + toString(cP)) + " is too far in the past, max 2 hrs allowed"))
493- else if ((cP > (cu + m)))
494- then throw((("Scripts timestamp=" + toString(cP)) + " is too far in the future, max 1.5 hrs allowed"))
494+ let cR = parseIntValue(cr[D])
495+ if (((cv - l) > cR))
496+ then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the past, max 2 hrs allowed"))
497+ else if ((cR > (cv + m)))
498+ then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the future, max 1.5 hrs allowed"))
495499 else {
496- let cQ = I(av(), -1)
497- if ((cQ != -1))
498- then throw((("proposalId=" + toString(cQ)) + " is already being applied. Finish it first!"))
500+ let cS = I(av(), -1)
501+ if ((cS != -1))
502+ then throw((("proposalId=" + toString(cS)) + " is already being applied. Finish it first!"))
499503 else {
500- let cR = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
501- if ((cR == cR))
504+ let cT = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
505+ if ((cT == cT))
502506 then $Tuple2([IntegerEntry(av(), ao)], unit)
503507 else throw("Strict value is not equal to itself.")
504508 }
509513
510514
511515
512-@Callable(aL)
516+@Callable(aM)
513517 func finishApply () = {
514518 let ao = valueOrErrorMessage(getInteger(av()), "No apply in progress, nothing to finish")
515- let cr = split(F(this, ap(ao)), b)
516- let bg = split(cr[v], c)
517- let cq = split(F(this, an(ao)), b)
518- if ((cq[C] == "true"))
519+ let cs = split(F(this, ap(ao)), b)
520+ let bh = split(cs[v], c)
521+ let cr = split(F(this, an(ao)), b)
522+ if ((cr[C] == "true"))
519523 then throw("Scripts are already applied")
520524 else {
521- func cS (bi,bj) = if (!(isDefined(transactionHeightById(fromBase58String(bj)))))
522- then throw(("NOT applied txId: " + bj))
525+ func cU (bj,bk) = if (!(isDefined(transactionHeightById(fromBase58String(bk)))))
526+ then throw(("NOT applied txId: " + bk))
523527 else unit
524528
525- let cT = {
526- let bk = bg
527- let bl = size(bk)
528- let bm = unit
529- func bn (bo,bp) = if ((bp >= bl))
530- then bo
531- else cS(bo, bk[bp])
529+ let cV = {
530+ let bl = bh
531+ let bm = size(bl)
532+ let bn = unit
533+ func bo (bp,bq) = if ((bq >= bm))
534+ then bp
535+ else cU(bp, bl[bq])
532536
533- func bq (bo,bp) = if ((bp >= bl))
534- then bo
537+ func br (bp,bq) = if ((bq >= bm))
538+ then bp
535539 else throw("List size exceeds 20")
536540
537- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
541+ br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
538542 }
539- let cU = (I(am(), 0) + 1)
540- $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cU), StringEntry(an(ao), cg(cq)), ch(cU, cr[r], cr[q])], cT)
543+ let cW = (I(am(), 0) + 1)
544+ $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cW), StringEntry(an(ao), ch(cr)), ci(cW, cs[r], cs[q])], cV)
541545 }
542546 }
543547
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = ""
55
66 let b = "__"
77
88 let c = ":"
99
1010 let d = 500000
1111
1212 let e = "https://forum.neutrino.at/"
1313
1414 let f = 160
1515
1616 let g = 250
1717
1818 let h = 1209600000
1919
2020 let i = 1000000
2121
2222 let j = 1000000000
2323
2424 let k = 1000000000
2525
2626 let l = 7200000
2727
2828 let m = 5400000
2929
3030 let n = 1
3131
3232 let o = 2
3333
3434 let p = 3
3535
3636 let q = 4
3737
3838 let r = 5
3939
4040 let s = 6
4141
4242 let t = 7
4343
4444 let u = 8
4545
4646 let v = 9
4747
4848 let w = 10
4949
5050 let x = 11
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 4
5959
6060 let C = 5
6161
6262 let D = 6
6363
6464 let E = 7
6565
6666 func F (G,H) = valueOrErrorMessage(getString(G, H), makeString(["mandatory ", toString(G), ".", H, " is not defined"], ""))
6767
6868
6969 func I (H,J) = valueOrElse(getInteger(this, H), J)
7070
7171
7272 let K = 1
7373
7474 let L = 2
7575
7676 let M = 3
7777
7878 let N = 4
7979
8080 let O = 5
8181
8282 let P = 6
8383
8484 let Q = 7
8585
8686 let R = 8
8787
8888 let S = 9
8989
9090 let T = 10
9191
9292 let U = 11
9393
9494 let V = 12
9595
9696 let W = 13
9797
9898 func X () = "%s%s__config__controlAddress"
9999
100100
101101 func Y () = "%s__controlConfig"
102102
103103
104104 func Z (aa) = split_4C(F(aa, Y()), b)
105105
106106
107107 func ab (ac,ad) = valueOrErrorMessage(addressFromString(ac[ad]), ("Control cfg doesn't contain address at index " + toString(ad)))
108108
109109
110110 let ae = addressFromStringValue(valueOrElse(getString(this, X()), "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP"))
111111
112112 let ac = Z(ae)
113113
114114 let af = ab(ac, K)
115115
116116 let ag = ab(ac, U)
117117
118118 func ah (ai) = ("%s%s__quorumRequired__" + ai)
119119
120120
121121 func aj () = "%s__paymentRequired"
122122
123123
124124 func ak () = "%s__gNsbtRequired"
125125
126126
127127 func al () = "%s__proposalId"
128128
129129
130130 func am () = "%s__updateVersion"
131131
132132
133133 func an (ao) = ("%s%d__proposalStatusData__" + toString(ao))
134134
135135
136136 func ap (ao) = ("%s%d__proposalData__" + toString(ao))
137137
138138
139139 func aq (ao,ar) = makeString(["%s%d%d", "votesByOpt", toString(ao), toString(ar)], b)
140140
141141
142142 func as (ao,at) = makeString(["%s%d%s", "votesByUser", toString(ao), at], b)
143143
144144
145145 func au (ao,at) = makeString(["%s%d%s", "optionByUser", toString(ao), at], b)
146146
147147
148148 func av () = "%s__applyInProgress"
149149
150150
151151 func aw (ax) = ("%s%d__proposalIdByTopicId__" + toString(ax))
152152
153153
154-func ay (ao) = ("%s%d__numVoters__" + toString(ao))
154+func ay (at) = ("%s%s_userGnsbtReleaseTime__" + at)
155155
156156
157-func az () = "%s%s%s__stats__avg__uniqueVoters"
157+func az (ao) = ("%s%d__numVoters__" + toString(ao))
158158
159159
160-func aA () = "%s%s%s__stats__avg__gnsbtVoted"
160+func aA () = "%s%s%s__stats__avg__uniqueVoters"
161161
162162
163-func aB () = "%s%s__stats__uniqueAuthors"
163+func aB () = "%s%s%s__stats__avg__gnsbtVoted"
164164
165165
166-func aC (aD) = ("%s%s__numProposalsByAuthor__" + aD)
166+func aC () = "%s%s__stats__uniqueAuthors"
167167
168168
169-func aE (aF) = ("%s%d__applyHistory__" + toString(aF))
169+func aD (aE) = ("%s%s__numProposalsByAuthor__" + aE)
170170
171171
172-func aG (aH) = {
173- let aI = aH
174- if ($isInstanceOf(aI, "List[Any]"))
172+func aF (aG) = ("%s%d__applyHistory__" + toString(aG))
173+
174+
175+func aH (aI) = {
176+ let aJ = aI
177+ if ($isInstanceOf(aJ, "List[Any]"))
175178 then {
176- let aJ = aI
177- aJ
179+ let aK = aJ
180+ aK
178181 }
179182 else throw("fail to cast into List[Any]")
180183 }
181184
182185
183-func aK (aH) = {
184- let aI = aH
185- if ($isInstanceOf(aI, "Int"))
186+func aL (aI) = {
187+ let aJ = aI
188+ if ($isInstanceOf(aJ, "Int"))
186189 then {
187- let aL = aI
188- aL
190+ let aM = aJ
191+ aM
189192 }
190193 else throw("fail to cast into Int")
191194 }
192195
193196
194-func aM (aN,aO,aP,aQ,aR,aS,aT) = makeString(["%b%d%d%d%b%d%b", toString(aN), toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT)], b)
197+func aN (aO,aP,aQ,aR,aS,aT,aU) = makeString(["%b%d%d%d%b%d%b", toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT), toString(aU)], b)
195198
196199
197-func aU (aV,ai,aW,aX,aY,aZ,ba,bb,bc,bd,be) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", aV, ai, aW, aX, aY, toString(aZ), toString(ba), toString(bb), bc, toString(bd), be], b)
200+func aV (aW,ai,aX,aY,aZ,ba,bb,bc,bd,be,bf) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", aW, ai, aX, aY, aZ, toString(ba), toString(bb), toString(bc), bd, toString(be), bf], b)
198201
199202
200-func bf (bg) = if ((size(bg) > 20))
201- then throw(("Too many transactions: " + toString(size(bg))))
203+func bg (bh) = if ((size(bh) > 20))
204+ then throw(("Too many transactions: " + toString(size(bh))))
202205 else {
203- func bh (bi,bj) = if ((size(fromBase58String(bj)) != 32))
204- then throw(("Wrong txId: " + bj))
205- else if ((bi == ""))
206- then bj
207- else ((bi + c) + bj)
206+ func bi (bj,bk) = if ((size(fromBase58String(bk)) != 32))
207+ then throw(("Wrong txId: " + bk))
208+ else if ((bj == ""))
209+ then bk
210+ else ((bj + c) + bk)
208211
209- let bk = bg
210- let bl = size(bk)
211- let bm = ""
212- func bn (bo,bp) = if ((bp >= bl))
213- then bo
214- else bh(bo, bk[bp])
212+ let bl = bh
213+ let bm = size(bl)
214+ let bn = ""
215+ func bo (bp,bq) = if ((bq >= bm))
216+ then bp
217+ else bi(bp, bl[bq])
215218
216- func bq (bo,bp) = if ((bp >= bl))
217- then bo
219+ func br (bp,bq) = if ((bq >= bm))
220+ then bp
218221 else throw("List size exceeds 20")
219222
220- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
223+ br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
221224 }
222225
223226
224-let br = 0
227+let bs = 0
225228
226-let bs = 1
229+let bt = 1
227230
228-func bt (bu) = {
229- let bv = aG(invoke(ag, "gnsbtInfoSYSREADONLY", [bu, 0, 0], nil))
230- let bw = aG(bv[2])
231- let bx = aK(bw[2])
232- let by = aK(bw[3])
233- let bz = aK(bv[9])
234- let bA = aK(bv[6])
235-[(by + bA), (bx + bz)]
231+func bu (bv) = {
232+ let bw = aH(invoke(ag, "gnsbtInfoSYSREADONLY", [bv, 0, 0], nil))
233+ let bx = aH(bw[2])
234+ let by = aL(bx[2])
235+ let bz = aL(bx[3])
236+ let bA = aL(bw[9])
237+ let bB = aL(bw[6])
238+[(bz + bB), (by + bA)]
236239 }
237240
238241
239-func bB (bC) = if ((value(indexOf(bC, e)) != 0))
242+func bC (bD) = if ((value(indexOf(bD, e)) != 0))
240243 then throw("Invalid url")
241- else if ((size(bC) > g))
244+ else if ((size(bD) > g))
242245 then throw("Url too long!")
243246 else {
244- let ax = valueOrErrorMessage(parseInt(drop(bC, (value(lastIndexOf(bC, "/")) + 1))), "Wrong topicId")
245- let bD = getInteger(aw(ax))
246- if (isDefined(bD))
247- then throw(("Voting with such forum link is already registered by id=" + toString(value(bD))))
247+ let ax = valueOrErrorMessage(parseInt(drop(bD, (value(lastIndexOf(bD, "/")) + 1))), "Wrong topicId")
248+ let bE = getInteger(aw(ax))
249+ if (isDefined(bE))
250+ then throw(("Voting with such forum link is already registered by id=" + toString(value(bE))))
248251 else ax
249252 }
250253
251254
252-func bE (bF,aV,ai,aW,aX,aY,ba,bb,bG,bg,bH) = if ((bF.assetId != unit))
255+func bF (bG,aW,ai,aX,aY,aZ,bb,bc,bH,bh,bI) = if ((bG.assetId != unit))
253256 then throw("Allowed WAVES payment only!")
254257 else {
255- let bI = I(aj(), j)
256- if ((bI > bF.amount))
257- then throw(("Payment attached should be at least " + toString(bI)))
258+ let bJ = I(aj(), j)
259+ if ((bJ > bG.amount))
260+ then throw(("Payment attached should be at least " + toString(bJ)))
258261 else {
259- let ax = bB(aX)
260- if ((aY == ""))
262+ let ax = bC(aY)
263+ if ((aZ == ""))
261264 then throw("Title is empty")
262- else if ((size(aY) > f))
265+ else if ((size(aZ) > f))
263266 then throw("Too long title")
264267 else {
265- let aZ = lastBlock.timestamp
266- if ((aZ > ba))
267- then throw(((("votingStartTime=" + toString(ba)) + " < proposalTime=") + toString(aZ)))
268- else if ((ba > bb))
269- then throw(((("votingEndTime=" + toString(bb)) + " < votingStartTime=") + toString(ba)))
270- else if (((bb - ba) > h))
271- then throw(((("Voting period exceeds max: " + toString((bb - ba))) + " > ") + toString(h)))
268+ let ba = lastBlock.timestamp
269+ if ((ba > bb))
270+ then throw(((("votingStartTime=" + toString(bb)) + " < proposalTime=") + toString(ba)))
271+ else if ((bb > bc))
272+ then throw(((("votingEndTime=" + toString(bc)) + " < votingStartTime=") + toString(bb)))
273+ else if (((bc - bb) > h))
274+ then throw(((("Voting period exceeds max: " + toString((bc - bb))) + " > ") + toString(h)))
272275 else {
273- let bc = if ((ai == "IDEA"))
276+ let bd = if ((ai == "IDEA"))
274277 then ""
275- else bf(bg)
276- if ((1 >= size(bH)))
278+ else bg(bh)
279+ if ((1 >= size(bI)))
277280 then throw("Too few choices to vote")
278281 else {
279- let bJ = bt(aW)
280- let bK = bJ[br]
281- let bL = bJ[bs]
282- let bM = I(ak(), k)
283- if ((bM > bL))
284- then throw((("You need at least " + toString(bM)) + " gNsbt to create voting"))
282+ let bK = bu(aX)
283+ let bL = bK[bs]
284+ let bM = bK[bt]
285+ let bN = I(ak(), k)
286+ if ((bN > bM))
287+ then throw((("You need at least " + toString(bN)) + " gNsbt to create voting"))
285288 else {
286- let bN = invoke(af, "acceptWaves", nil, [bF])
287- if ((bN == bN))
289+ let bO = invoke(af, "acceptWaves", nil, [bG])
290+ if ((bO == bO))
288291 then {
289- let bO = I(ah(ai), d)
290- let bd = fraction(bO, bK, i)
292+ let bP = I(ah(ai), d)
293+ let be = fraction(bP, bL, i)
291294 let ao = (I(al(), 0) + 1)
292- let bP = (I(aC(aW), 0) + 1)
293- let bQ = (I(aB(), 0) + (if ((bP == 1))
295+ let bQ = (I(aD(aX), 0) + 1)
296+ let bR = (I(aC(), 0) + (if ((bQ == 1))
294297 then 1
295298 else 0))
296- let bR = makeString(bH, c)
297- $Tuple2([IntegerEntry(al(), ao), IntegerEntry(aw(ax), ao), StringEntry(an(ao), aM(false, 0, 0, 0, false, 0, false)), StringEntry(ap(ao), aU(aV, ai, aW, toBase58String(toBytes(aX)), toBase58String(toBytes(aY)), aZ, ba, bb, bc, bd, bR)), IntegerEntry(aC(aW), bP), IntegerEntry(aB(), bQ)], aV)
299+ let bS = makeString(bI, c)
300+ $Tuple2([IntegerEntry(al(), ao), IntegerEntry(aw(ax), ao), StringEntry(an(ao), aN(false, 0, 0, 0, false, 0, false)), StringEntry(ap(ao), aV(aW, ai, aX, toBase58String(toBytes(aY)), toBase58String(toBytes(aZ)), ba, bb, bc, bd, be, bS)), IntegerEntry(aD(aX), bQ), IntegerEntry(aC(), bR)], aW)
298301 }
299302 else throw("Strict value is not equal to itself.")
300303 }
301304 }
302305 }
303306 }
304307 }
305308 }
306309
307310
308-func bS (ao,bH,bT,bU,bV,bW,bX) = {
309- func bY (bi,bZ) = {
310- let ad = value(indexOf(bH, bZ))
311- let ca = if (bT)
312- then if ((ad == bW))
313- then bX
311+func bT (ao,bI,bU,bV,bW,bX,bY) = {
312+ func bZ (bj,ca) = {
313+ let ad = value(indexOf(bI, ca))
314+ let cb = if (bU)
315+ then if ((ad == bX))
316+ then bY
314317 else I(aq(ao, ad), 0)
315- else if ((ad == value(bU)))
316- then bV
317- else if ((ad == bW))
318- then bX
318+ else if ((ad == value(bV)))
319+ then bW
320+ else if ((ad == bX))
321+ then bY
319322 else I(aq(ao, ad), 0)
320- if ((bi._2 > ca))
321- then bi
322- else $Tuple2(ad, ca)
323+ if ((bj._2 > cb))
324+ then bj
325+ else $Tuple2(ad, cb)
323326 }
324327
325- let bk = bH
326- let bl = size(bk)
327- let bm = $Tuple2(0, 0)
328- func bn (bo,bp) = if ((bp >= bl))
329- then bo
330- else bY(bo, bk[bp])
328+ let bl = bI
329+ let bm = size(bl)
330+ let bn = $Tuple2(0, 0)
331+ func bo (bp,bq) = if ((bq >= bm))
332+ then bp
333+ else bZ(bp, bl[bq])
331334
332- func bq (bo,bp) = if ((bp >= bl))
333- then bo
335+ func br (bp,bq) = if ((bq >= bm))
336+ then bp
334337 else throw("List size exceeds 10")
335338
336- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
339+ br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
337340 }
338341
339342
340-func cb (cc,cd,ce,cf) = makeString(["%b%d%d%d%b%d%b", toString(cd), toString(ce._1), toString(ce._2), toString(cf), cc[C], cc[D], cc[E]], b)
343+func cc (cd,ce,cf,cg) = makeString(["%b%d%d%d%b%d%b", toString(ce), toString(cf._1), toString(cf._2), toString(cg), cd[C], cd[D], cd[E]], b)
341344
342345
343-func cg (cc) = makeString(["%b%d%d%d%b%d%b", cc[y], cc[z], cc[A], cc[B], "true", cc[D], cc[E]], b)
346+func ch (cd) = makeString(["%b%d%d%d%b%d%b", cd[y], cd[z], cd[A], cd[B], "true", cd[D], cd[E]], b)
344347
345348
346-func ch (ao,aY,bC) = {
347- let bK = bt("")[br]
348- let ci = 500000
349- StringEntry(aE(lastBlock.timestamp), makeString(["%d%d%d%s%s", toString(ao), toString(bK), toString(ci), aY, bC], b))
349+func ci (ao,aZ,bD) = {
350+ let bL = bu("")[bs]
351+ let cj = 500000
352+ StringEntry(aF(lastBlock.timestamp), makeString(["%d%d%d%s%s", toString(ao), toString(bL), toString(cj), aZ, bD], b))
350353 }
351354
352355
353-@Callable(aL)
354-func constructor (cj,ck,cl,cm,cn) = if ((aL.caller != this))
356+@Callable(aM)
357+func constructor (ck,cl,cm,cn,co) = if ((aM.caller != this))
355358 then throw("Permission denied")
356- else [StringEntry(X(), cj), IntegerEntry(ak(), ck), IntegerEntry(aj(), cl), IntegerEntry(ah("IDEA"), cm), IntegerEntry(ah("UPDATE"), cn)]
359+ else [StringEntry(X(), ck), IntegerEntry(ak(), cl), IntegerEntry(aj(), cm), IntegerEntry(ah("IDEA"), cn), IntegerEntry(ah("UPDATE"), co)]
357360
358361
359362
360-@Callable(aL)
361-func castVote (ao,co) = {
362- let cp = toString(aL.caller)
363- let cq = split(F(this, an(ao)), b)
364- if ((cq[E] == "true"))
363+@Callable(aM)
364+func castVote (ao,cp) = {
365+ let cq = toString(aM.caller)
366+ let cr = split(F(this, an(ao)), b)
367+ if ((cr[E] == "true"))
365368 then throw("Voting is canceled by team")
366369 else {
367- let cr = split(F(this, ap(ao)), b)
368- let cs = parseIntValue(cr[t])
369- let ct = parseIntValue(cr[u])
370- let cu = lastBlock.timestamp
371- if ((cs > cu))
370+ let cs = split(F(this, ap(ao)), b)
371+ let ct = parseIntValue(cs[t])
372+ let cu = parseIntValue(cs[u])
373+ let cv = lastBlock.timestamp
374+ if ((ct > cv))
372375 then throw("Voting not started yet")
373- else if ((cu >= ct))
376+ else if ((cv >= cu))
374377 then throw("Voting already finished")
375378 else {
376- let cv = split(cr[x], c)
377- let cw = size(cv)
378- if ((1 >= cw))
379+ let cw = split(cs[x], c)
380+ let cx = size(cw)
381+ if ((1 >= cx))
379382 then throw("Too few choices to vote")
380- else if ((co >= cw))
381- then throw(("Unknown choice! Must be 0.." + toString((cw - 1))))
383+ else if ((cp >= cx))
384+ then throw(("Unknown choice! Must be 0.." + toString((cx - 1))))
382385 else {
383- let bJ = bt(cp)
384- let cx = bJ[bs]
385- if ((0 >= cx))
386+ let bK = bu(cq)
387+ let cy = bK[bt]
388+ if ((0 >= cy))
386389 then throw("no gnsbt to vote")
387390 else {
388- let bK = bJ[br]
389- let bU = getInteger(au(ao, cp))
390- let cy = if (!(isDefined(bU)))
391+ let bL = bK[bs]
392+ let bV = getInteger(au(ao, cq))
393+ let cz = if (!(isDefined(bV)))
391394 then 0
392- else I(as(ao, cp), 0)
393- let cz = if (isDefined(bU))
394- then I(aq(ao, value(bU)), 0)
395+ else I(as(ao, cq), 0)
396+ let cA = if (isDefined(bV))
397+ then I(aq(ao, value(bV)), 0)
395398 else 0
396- let cA = I(aq(ao, co), 0)
397- let cB = parseIntValue(cq[B])
398- let cC = if (!(isDefined(bU)))
399+ let cB = I(aq(ao, cp), 0)
400+ let cC = parseIntValue(cr[B])
401+ let cD = if (!(isDefined(bV)))
399402 then 0
400- else ((cz - cy) + (if ((value(bU) == co))
401- then cx
403+ else ((cA - cz) + (if ((value(bV) == cp))
404+ then cy
402405 else 0))
403- let bX = if (if (isDefined(bU))
404- then (value(bU) == co)
406+ let bY = if (if (isDefined(bV))
407+ then (value(bV) == cp)
405408 else false)
406- then cC
407- else (cA + cx)
408- let cD = ((cB - cy) + cx)
409- let cE = (cD >= parseIntValue(cr[w]))
410- let cF = I(ay(ao), 0)
411- let cG = I(az(), 0)
412- let cH = getIntegerValue(al())
413- let cI = if ((cy == 0))
409+ then cD
410+ else (cB + cy)
411+ let cE = ((cC - cz) + cy)
412+ let cF = (cE >= parseIntValue(cs[w]))
413+ let cG = I(az(ao), 0)
414+ let cH = I(aA(), 0)
415+ let cI = getIntegerValue(al())
416+ let cJ = if ((cz == 0))
414417 then 1
415418 else 0
416- let cJ = (cG + fraction(cI, i, cH))
417- let cK = I(aA(), 0)
418- let cL = (cK + ((cx - cy) / cH))
419- let bT = if (!(isDefined(bU)))
419+ let cK = (cH + fraction(cJ, i, cI))
420+ let cL = I(aB(), 0)
421+ let cM = (cL + ((cy - cz) / cI))
422+ let bU = if (!(isDefined(bV)))
420423 then true
421- else (value(bU) == co)
422- let bV = if (bT)
424+ else (value(bV) == cp)
425+ let bW = if (bU)
423426 then nil
424- else [IntegerEntry(aq(ao, value(bU)), cC)]
425- let cM = bS(ao, cv, bT, bU, cC, co, bX)
426- $Tuple2(([IntegerEntry(au(ao, cp), co), IntegerEntry(as(ao, cp), cx), IntegerEntry(aq(ao, co), bX), IntegerEntry(ay(ao), (cF + cI)), IntegerEntry(az(), cJ), IntegerEntry(aA(), cL), StringEntry(an(ao), cb(cq, cE, cM, cD))] ++ bV), unit)
427+ else [IntegerEntry(aq(ao, value(bV)), cD)]
428+ let cN = bT(ao, cw, bU, bV, cD, cp, bY)
429+ let cO = max([cu, I(ay(cq), 0)])
430+ $Tuple2(([IntegerEntry(au(ao, cq), cp), IntegerEntry(as(ao, cq), cy), IntegerEntry(aq(ao, cp), bY), IntegerEntry(az(ao), (cG + cJ)), IntegerEntry(ay(cq), cO), IntegerEntry(aA(), cK), IntegerEntry(aB(), cM), StringEntry(an(ao), cc(cr, cF, cN, cE))] ++ bW), unit)
427431 }
428432 }
429433 }
430434 }
431435 }
432436
433437
434438
435-@Callable(aL)
436-func initiateIdeaVoting (aX,aY,ba,bb,bH) = if ((size(aL.payments) != 1))
439+@Callable(aM)
440+func initiateIdeaVoting (aY,aZ,bb,bc,bI) = if ((size(aM.payments) != 1))
437441 then throw("Exactly one payment required")
438- else if ((size(bH) != 2))
442+ else if ((size(bI) != 2))
439443 then throw("Exactly 2 option ['NO', 'YES'] are expected")
440- else if ((bH[0] != "NO"))
444+ else if ((bI[0] != "NO"))
441445 then throw("Option NO should be the first")
442- else if ((bH[1] != "YES"))
446+ else if ((bI[1] != "YES"))
443447 then throw("Option YES should be the second")
444- else bE(value(aL.payments[0]), toBase58String(aL.transactionId), "IDEA", toString(aL.caller), aX, aY, ba, bb, "PENDING", nil, bH)
448+ else bF(value(aM.payments[0]), toBase58String(aM.transactionId), "IDEA", toString(aM.caller), aY, aZ, bb, bc, "PENDING", nil, bI)
445449
446450
447451
448-@Callable(aL)
449-func initiateUpdateVoting (aX,aY,ba,bb,bg) = if ((size(aL.payments) != 1))
452+@Callable(aM)
453+func initiateUpdateVoting (aY,aZ,bb,bc,bh) = if ((size(aM.payments) != 1))
450454 then throw("Exactly one payment required")
451- else if ((1 > size(bg)))
455+ else if ((1 > size(bh)))
452456 then throw("Transactions list is empty")
453- else if ((aL.caller != this))
457+ else if ((aM.caller != this))
454458 then throw("not authorized")
455- else bE(value(aL.payments[0]), toBase58String(aL.transactionId), "UPDATE", toString(aL.caller), aX, aY, ba, bb, "PENDING", bg, ["NO", "YES"])
459+ else bF(value(aM.payments[0]), toBase58String(aM.transactionId), "UPDATE", toString(aM.caller), aY, aZ, bb, bc, "PENDING", bh, ["NO", "YES"])
456460
457461
458462
459-@Callable(aL)
460-func cancelVoting (ao) = if ((aL.caller != this))
463+@Callable(aM)
464+func cancelVoting (ao) = if ((aM.caller != this))
461465 then throw("not authorized")
462466 else {
463- let cN = F(this, an(ao))
464- let cO = ((take(cN, value(lastIndexOf(cN, b))) + b) + "true")
465- $Tuple2([StringEntry(an(ao), cO)], unit)
467+ let cP = F(this, an(ao))
468+ let cQ = ((take(cP, value(lastIndexOf(cP, b))) + b) + "true")
469+ $Tuple2([StringEntry(an(ao), cQ)], unit)
466470 }
467471
468472
469473
470-@Callable(aL)
474+@Callable(aM)
471475 func applyUpdate (ao) = {
472- let cr = split(F(this, ap(ao)), b)
473- let ct = parseIntValue(cr[u])
474- let cu = lastBlock.timestamp
475- if ((ct > cu))
476+ let cs = split(F(this, ap(ao)), b)
477+ let cu = parseIntValue(cs[u])
478+ let cv = lastBlock.timestamp
479+ if ((cu > cv))
476480 then throw("Voting is not finished yet")
477- else if (("UPDATE" != cr[o]))
481+ else if (("UPDATE" != cs[o]))
478482 then throw("Only UPDATE type can be applied")
479483 else {
480- let cq = split(F(this, an(ao)), b)
481- if ((cq[E] == "true"))
484+ let cr = split(F(this, an(ao)), b)
485+ if ((cr[E] == "true"))
482486 then throw("Voting is canceled")
483- else if ((cq[y] != "true"))
487+ else if ((cr[y] != "true"))
484488 then throw("Voting status invalid")
485- else if ((cq[z] != "1"))
489+ else if ((cr[z] != "1"))
486490 then throw("Winner is 'NO' - nothing to apply")
487- else if ((cq[C] == "true"))
491+ else if ((cr[C] == "true"))
488492 then throw("Scripts are already applied")
489493 else {
490- let cP = parseIntValue(cq[D])
491- if (((cu - l) > cP))
492- then throw((("Scripts timestamp=" + toString(cP)) + " is too far in the past, max 2 hrs allowed"))
493- else if ((cP > (cu + m)))
494- then throw((("Scripts timestamp=" + toString(cP)) + " is too far in the future, max 1.5 hrs allowed"))
494+ let cR = parseIntValue(cr[D])
495+ if (((cv - l) > cR))
496+ then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the past, max 2 hrs allowed"))
497+ else if ((cR > (cv + m)))
498+ then throw((("Scripts timestamp=" + toString(cR)) + " is too far in the future, max 1.5 hrs allowed"))
495499 else {
496- let cQ = I(av(), -1)
497- if ((cQ != -1))
498- then throw((("proposalId=" + toString(cQ)) + " is already being applied. Finish it first!"))
500+ let cS = I(av(), -1)
501+ if ((cS != -1))
502+ then throw((("proposalId=" + toString(cS)) + " is already being applied. Finish it first!"))
499503 else {
500- let cR = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
501- if ((cR == cR))
504+ let cT = invoke(ae, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
505+ if ((cT == cT))
502506 then $Tuple2([IntegerEntry(av(), ao)], unit)
503507 else throw("Strict value is not equal to itself.")
504508 }
505509 }
506510 }
507511 }
508512 }
509513
510514
511515
512-@Callable(aL)
516+@Callable(aM)
513517 func finishApply () = {
514518 let ao = valueOrErrorMessage(getInteger(av()), "No apply in progress, nothing to finish")
515- let cr = split(F(this, ap(ao)), b)
516- let bg = split(cr[v], c)
517- let cq = split(F(this, an(ao)), b)
518- if ((cq[C] == "true"))
519+ let cs = split(F(this, ap(ao)), b)
520+ let bh = split(cs[v], c)
521+ let cr = split(F(this, an(ao)), b)
522+ if ((cr[C] == "true"))
519523 then throw("Scripts are already applied")
520524 else {
521- func cS (bi,bj) = if (!(isDefined(transactionHeightById(fromBase58String(bj)))))
522- then throw(("NOT applied txId: " + bj))
525+ func cU (bj,bk) = if (!(isDefined(transactionHeightById(fromBase58String(bk)))))
526+ then throw(("NOT applied txId: " + bk))
523527 else unit
524528
525- let cT = {
526- let bk = bg
527- let bl = size(bk)
528- let bm = unit
529- func bn (bo,bp) = if ((bp >= bl))
530- then bo
531- else cS(bo, bk[bp])
529+ let cV = {
530+ let bl = bh
531+ let bm = size(bl)
532+ let bn = unit
533+ func bo (bp,bq) = if ((bq >= bm))
534+ then bp
535+ else cU(bp, bl[bq])
532536
533- func bq (bo,bp) = if ((bp >= bl))
534- then bo
537+ func br (bp,bq) = if ((bq >= bm))
538+ then bp
535539 else throw("List size exceeds 20")
536540
537- bq(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(bm, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
541+ br(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bo(bn, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
538542 }
539- let cU = (I(am(), 0) + 1)
540- $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cU), StringEntry(an(ao), cg(cq)), ch(cU, cr[r], cr[q])], cT)
543+ let cW = (I(am(), 0) + 1)
544+ $Tuple2([DeleteEntry(av()), IntegerEntry(am(), cW), StringEntry(an(ao), ch(cr)), ci(cW, cs[r], cs[q])], cV)
541545 }
542546 }
543547
544548

github/deemru/w8io/873ac7e 
258.35 ms