tx · 5sBtdFLYPfixMZ2Y4UB5CSPpDvH5hypwro9AtRBeCbbp

3N1BEXuoepNEwqkbeZYKviaLQfvBQV3ibYE:  -0.02100000 Waves

2023.05.29 13:16 [2599134] smart account 3N1BEXuoepNEwqkbeZYKviaLQfvBQV3ibYE > SELF 0.00000000 Waves

{ "type": 13, "id": "5sBtdFLYPfixMZ2Y4UB5CSPpDvH5hypwro9AtRBeCbbp", "fee": 2100000, "feeAssetId": null, "timestamp": 1685355447434, "version": 2, "chainId": 84, "sender": "3N1BEXuoepNEwqkbeZYKviaLQfvBQV3ibYE", "senderPublicKey": "6t3vrhP1jCmG7CeKBmL8hUibtdP3cMXGC2XtPYEPPC5w", "proofs": [ "4G5wodX5a7EYe29xxHuneq2j1gGiABAjNpai3646guZHiBeyrgeL8YGkUZXmn29ZNGXkR7ZF37ZHtTiraPBnFw1i" ], "script": "base64:BgIqCAISBQoDCAEIEgMKAQgSBAoCCAQSAwoBCBIDCgEIEgQKAggBEgQKAggBNQAJc2VwYXJhdG9yAgJfXwAFTVVMVDgAgMLXLwEHd3JhcEVycgEDbXNnCQC5CQIJAMwIAgIYdm90aW5nX3ZlcmlmaWVkX3YyLnJpZGU6CQDMCAIFA21zZwUDbmlsAgEgAQh0aHJvd0VycgEDbXNnCQACAQkBB3dyYXBFcnIBBQNtc2cBBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIbRmFpbGVkIHRvIGNhc3QgaW50byBJbnRlZ2VyARBnZXRJbnRlZ2VyT3JaZXJvAgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkAAAEQZ2V0SW50ZWdlck9yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEQZ2V0U3RyaW5nT3JFbXB0eQIHYWRkcmVzcwNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUHYWRkcmVzcwUDa2V5AgABD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJAQd3cmFwRXJyAQkArAICBQNrZXkCDyBpcyBub3QgZGVmaW5lZAATa2V5Qm9vc3RpbmdDb250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICEGJvb3N0aW5nQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yABNrZXlFbWlzc2lvbkNvbnRyYWN0CQC5CQIJAMwIAgICJXMJAMwIAgIQZW1pc3Npb25Db250cmFjdAUDbmlsBQlzZXBhcmF0b3IAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhNhc3NldHNTdG9yZUNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgAQYm9vc3RpbmdDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTa2V5Qm9vc3RpbmdDb250cmFjdAAQZW1pc3Npb25Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTa2V5RW1pc3Npb25Db250cmFjdAATYXNzZXRzU3RvcmVDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUWa2V5QXNzZXRzU3RvcmVDb250cmFjdAARa2V5RW1pc3Npb25Db25maWcJALkJAgkAzAgCAgIlcwkAzAgCAgZjb25maWcFA25pbAUJc2VwYXJhdG9yAAx3eEFzc2V0SWRTdHIJAJEDAgkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUQZW1pc3Npb25Db250cmFjdAURa2V5RW1pc3Npb25Db25maWcFCXNlcGFyYXRvcgABAAl3eEFzc2V0SWQJANkEAQUMd3hBc3NldElkU3RyABVrZXlWb3RpbmdUaHJlc2hvbGRBZGQJALkJAgkAzAgCAgQlcyVzCQDMCAICD3ZvdGluZ1RocmVzaG9sZAkAzAgCAgNhZGQFA25pbAUJc2VwYXJhdG9yABhrZXlWb3RpbmdUaHJlc2hvbGRSZW1vdmUJALkJAgkAzAgCAgQlcyVzCQDMCAICD3ZvdGluZ1RocmVzaG9sZAkAzAgCAgZyZW1vdmUFA25pbAUJc2VwYXJhdG9yARJrZXlQZXJpb2RMZW5ndGhBZGQCB2Fzc2V0SWQFaW5kZXgJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIPcGVyaW9kTGVuZ3RoQWRkCQDMCAIFB2Fzc2V0SWQJAMwIAgkApAMBBQVpbmRleAUDbmlsBQlzZXBhcmF0b3IAFWtleVBlcmlvZExlbmd0aFJlbW92ZQkAuQkCCQDMCAICAiVzCQDMCAICEnBlcmlvZExlbmd0aFJlbW92ZQUDbmlsBQlzZXBhcmF0b3IBG2tleUN1cnJlbnRWb3RpbmdIZWlnaHRTdGFydAIHYXNzZXRJZAVpbmRleAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAhhjdXJyZW50Vm90aW5nSGVpZ2h0U3RhcnQJAMwIAgUHYXNzZXRJZAkAzAgCCQCkAwEFBWluZGV4BQNuaWwFCXNlcGFyYXRvcgELa2V5VmVyaWZpZWQBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICCHZlcmlmaWVkCQDMCAIFB2Fzc2V0SWQFA25pbAUJc2VwYXJhdG9yARlrZXlWZXJpZmljYXRpb25JblByb2dyZXNzAQdhc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDHZlcmlmaWNhdGlvbgkAzAgCAgppblByb2dyZXNzCQDMCAIFB2Fzc2V0SWQFA25pbAUJc2VwYXJhdG9yARtrZXlEZXZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MBB2Fzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIOZGV2ZXJpZmljYXRpb24JAMwIAgIKaW5Qcm9ncmVzcwkAzAgCBQdhc3NldElkBQNuaWwFCXNlcGFyYXRvcgASa2V5TWF4UGVyaW9kTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgIPbWF4UGVyaW9kTGVuZ3RoBQNuaWwFCXNlcGFyYXRvcgASa2V5TWluUGVyaW9kTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgIPbWluUGVyaW9kTGVuZ3RoBQNuaWwFCXNlcGFyYXRvcgEWa2V5Vm90aW5nUmV3YXJkQXNzZXRJZAIHYXNzZXRJZAVpbmRleAkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAhN2b3RpbmdSZXdhcmRBc3NldElkCQDMCAIFB2Fzc2V0SWQJAMwIAgkApAMBBQVpbmRleAUDbmlsBQlzZXBhcmF0b3IBFGtleVRvdGFsVm90aW5nUmV3YXJkAgdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICDHZvdGluZ1Jld2FyZAkAzAgCBQdhc3NldElkCQDMCAIJAKQDAQUFaW5kZXgFA25pbAUJc2VwYXJhdG9yABtrZXlGaW5hbGl6ZUNhbGxSZXdhcmRBbW91bnQJALkJAgkAzAgCAgIlcwkAzAgCAhhmaW5hbGl6ZUNhbGxSZXdhcmRBbW91bnQFA25pbAUJc2VwYXJhdG9yABprZXlNaW5TdWdnZXN0UmVtb3ZlQmFsYW5jZQkAuQkCCQDMCAICAiVzCQDMCAICF21pblN1Z2dlc3RSZW1vdmVCYWxhbmNlBQNuaWwFCXNlcGFyYXRvcgEPa2V5Q3VycmVudEluZGV4AQdhc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgxjdXJyZW50SW5kZXgJAMwIAgUHYXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBB2tleVZvdGUDB2Fzc2V0SWQFaW5kZXgGY2FsbGVyCQC5CQIJAMwIAgIIJXMlcyVkJXMJAMwIAgIEdm90ZQkAzAgCBQdhc3NldElkCQDMCAIJAKQDAQUFaW5kZXgJAMwIAgkApQgBBQZjYWxsZXIFA25pbAUJc2VwYXJhdG9yAQl2b3RlVmFsdWUCB2luRmF2b3IJZ3d4QW1vdW50CQC5CQIJAMwIAgIEJXMlZAkAzAgCCQClAwEFB2luRmF2b3IJAMwIAgkApAMBBQlnd3hBbW91bnQFA25pbAUJc2VwYXJhdG9yAQ9rZXlWb3RpbmdSZXN1bHQCB2Fzc2V0SWQFaW5kZXgJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIMdm90aW5nUmVzdWx0CQDMCAIFB2Fzc2V0SWQJAMwIAgkApAMBBQVpbmRleAUDbmlsBQlzZXBhcmF0b3IBC3ZvdGluZ1ZhbHVlAglmb3JBbW91bnQNYWdhaW5zdEFtb3VudAkAuQkCCQDMCAICBCVkJWQJAMwIAgkApAMBBQlmb3JBbW91bnQJAMwIAgkApAMBBQ1hZ2FpbnN0QW1vdW50BQNuaWwFCXNlcGFyYXRvcgASZGVmYXVsdFZvdGluZ1ZhbHVlCQC5CQIJAMwIAgIEJWQlZAkAzAgCAgEwCQDMCAICATAFA25pbAUJc2VwYXJhdG9yARBrZXlTdWdnZXN0SXNzdWVyAgdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICDXN1Z2dlc3RJc3N1ZXIJAMwIAgUHYXNzZXRJZAkAzAgCCQCkAwEFBWluZGV4BQNuaWwFCXNlcGFyYXRvcgEPa2V5Q2xhaW1IaXN0b3J5Awt1c2VyQWRkcmVzcwdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgIHaGlzdG9yeQkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAIFB2Fzc2V0SWQJAMwIAgkApAMBBQVpbmRleAUDbmlsBQlzZXBhcmF0b3IBEWNsYWltSGlzdG9yeVZhbHVlAQlnd3hBbW91bnQJALkJAgkAzAgCAgQlZCVzCQDMCAIJAKQDAQUJZ3d4QW1vdW50BQNuaWwFCXNlcGFyYXRvcgESa2V5Vm90aW5nRW5kSGVpZ2h0Agdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICD3ZvdGluZ0VuZEhlaWdodAkAzAgCBQdhc3NldElkCQDMCAIJAKQDAQUFaW5kZXgFA25pbAUJc2VwYXJhdG9yAA5rZXlGZWVQZXJCbG9jawkAuQkCCQDMCAICAiVzCQDMCAICC2ZlZVBlckJsb2NrBQNuaWwFCXNlcGFyYXRvcgALZmVlUGVyQmxvY2sJARBnZXRJbnRlZ2VyT3JGYWlsAgUEdGhpcwUOa2V5RmVlUGVyQmxvY2sAJmtleU1pbld4TWluRm9yU3VnZ2VzdEFkZEFtb3VudFJlcXVpcmVkCQC5CQIJAMwIAgICJXMJAMwIAgIgd3hNaW5Gb3JTdWdnZXN0QWRkQW1vdW50UmVxdWlyZWQFA25pbAUJc2VwYXJhdG9yACNrZXlXeEZvclN1Z2dlc3RSZW1vdmVBbW91bnRSZXF1aXJlZAkAuQkCCQDMCAICAiVzCQDMCAICIHd4Rm9yU3VnZ2VzdFJlbW92ZUFtb3VudFJlcXVpcmVkBQNuaWwFCXNlcGFyYXRvcgEYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0Agt1c2VyQWRkcmVzcwx0YXJnZXRIZWlnaHQECWd3eEFtb3VudAkA/AcEBRBib29zdGluZ0NvbnRyYWN0AiBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQx0YXJnZXRIZWlnaHQFA25pbAUDbmlsCQEFYXNJbnQBBQlnd3hBbW91bnQBFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MAAhclc19fbWFuYWdlclZhdWx0QWRkcmVzcwETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBEXZvdGluZ0V4aXN0Q2hlY2tzAgdhc3NldElkDGN1cnJlbnRJbmRleAQWdmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEZa2V5VmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwEFB2Fzc2V0SWQHBBhkZXZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBG2tleURldmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwEFB2Fzc2V0SWQHBA1zdWdnZXN0SXNzdWVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleVN1Z2dlc3RJc3N1ZXICBQdhc3NldElkBQxjdXJyZW50SW5kZXgJAQd3cmFwRXJyAQIXdm90aW5nIGlzc3VlciBub3QgZm91bmQEGGN1cnJlbnRWb3RpbmdIZWlnaHRTdGFydAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARtrZXlDdXJyZW50Vm90aW5nSGVpZ2h0U3RhcnQCBQdhc3NldElkBQxjdXJyZW50SW5kZXgJAQd3cmFwRXJyAQIddm90aW5nIHN0YXJ0IGhlaWdodCBub3QgZm91bmQEEnZvdGluZ1BlcmlvZExlbmdodAMFFnZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQESa2V5UGVyaW9kTGVuZ3RoQWRkAgUHYXNzZXRJZAUMY3VycmVudEluZGV4CQEHd3JhcEVycgECHnZvdGluZyBwZXJpb2QgbGVuZ3RoIG5vdCBmb3VuZAkBBXZhbHVlAQkAnwgBBRVrZXlQZXJpb2RMZW5ndGhSZW1vdmUEBmNoZWNrcwkAzAgCAwMFFnZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MGBRhkZXZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MGCQEIdGhyb3dFcnIBAhVubyB2b3RpbmcgaW4gcHJvZ3Jlc3MJAMwIAgMJAGYCCQBkAgUYY3VycmVudFZvdGluZ0hlaWdodFN0YXJ0BRJ2b3RpbmdQZXJpb2RMZW5naHQFBmhlaWdodAYJAQh0aHJvd0VycgECDnZvdGluZyBleHBpcmVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJAJcKBQUWdmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwUYZGV2ZXJpZmljYXRpb25JblByb2dyZXNzBRhjdXJyZW50Vm90aW5nSGVpZ2h0U3RhcnQFEnZvdGluZ1BlcmlvZExlbmdodAUNc3VnZ2VzdElzc3VlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEPY2FsY3VsYXRlUmV3YXJkAwV2b3Rlcgdhc3NldElkBWluZGV4BAd2b3RlS2V5CQEHa2V5Vm90ZQMFB2Fzc2V0SWQFBWluZGV4BQV2b3RlcgQIbGFzdFZvdGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBBQd2b3RlS2V5CQEHd3JhcEVycgECEnlvdSBoYXZlIG5vdCB2b3RlZAQNbGFzdFZvdGVQYXJ0cwkAtQkCBQhsYXN0Vm90ZQUJc2VwYXJhdG9yBAdpbkZhdm9yCQCRAwIFDWxhc3RWb3RlUGFydHMAAQQMcmV3YXJkQW1vdW50AwkAAAIFB2luRmF2b3ICBHRydWUECWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWxhc3RWb3RlUGFydHMAAgQPbGFzdFZvdGluZ1ZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAIFB2Fzc2V0SWQFBWluZGV4CQEHd3JhcEVycgECFXZvdGluZyBkb2VzIG5vdCBleGlzdAQUbGFzdFZvdGluZ1ZhbHVlUGFydHMJALUJAgUPbGFzdFZvdGluZ1ZhbHVlBQlzZXBhcmF0b3IEDXRvdGFsVm90ZXNGb3IJAQ1wYXJzZUludFZhbHVlAQkAkQMCBRRsYXN0Vm90aW5nVmFsdWVQYXJ0cwABBBVwYXJ0T2ZUaGVUb3RhbFZvdGVzWDgJAGsDBQlnd3hBbW91bnQFBU1VTFQ4BQ10b3RhbFZvdGVzRm9yBBF0b3RhbFZvdGluZ1Jld2FyZAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEUa2V5VG90YWxWb3RpbmdSZXdhcmQCBQdhc3NldElkBQVpbmRleAAABAxyZXdhcmRBbW91bnQJAG4EBRVwYXJ0T2ZUaGVUb3RhbFZvdGVzWDgFEXRvdGFsVm90aW5nUmV3YXJkBQVNVUxUOAUFRkxPT1IFDHJld2FyZEFtb3VudAAABQxyZXdhcmRBbW91bnQHAWkBCnN1Z2dlc3RBZGQDB2Fzc2V0SWQMcGVyaW9kTGVuZ3RoCmFzc2V0SW1hZ2UEBGluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFB2Fzc2V0SWQCEEludmFsaWQgYXNzZXQgSUQDCQAAAgUEaW5mbwUEaW5mbwQPY3VycmVudEluZGV4S2V5CQEPa2V5Q3VycmVudEluZGV4AQUHYXNzZXRJZAQMY3VycmVudEluZGV4CQCfCAEFD2N1cnJlbnRJbmRleEtleQQIbmV3SW5kZXgDCQEJaXNEZWZpbmVkAQUMY3VycmVudEluZGV4CQBkAgkBBXZhbHVlAQUMY3VycmVudEluZGV4AAEAAAQJd3hQYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEEHd4UGF5bWVudEFzc2V0SWQJAQV2YWx1ZQEIBQl3eFBheW1lbnQHYXNzZXRJZAQPd3hQYXltZW50QW1vdW50CQEFdmFsdWUBCAUJd3hQYXltZW50BmFtb3VudAQTdm90aW5nUmV3YXJkQWN0aW9ucwMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEEE3ZvdGluZ1Jld2FyZFBheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAQQadm90aW5nUmV3YXJkUGF5bWVudEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFE3ZvdGluZ1Jld2FyZFBheW1lbnQHYXNzZXRJZAQZdm90aW5nUmV3YXJkUGF5bWVudEFtb3VudAkBBXZhbHVlAQgFE3ZvdGluZ1Jld2FyZFBheW1lbnQGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlWb3RpbmdSZXdhcmRBc3NldElkAgUHYXNzZXRJZAUIbmV3SW5kZXgFGnZvdGluZ1Jld2FyZFBheW1lbnRBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5VG90YWxWb3RpbmdSZXdhcmQCBQdhc3NldElkBQhuZXdJbmRleAUZdm90aW5nUmV3YXJkUGF5bWVudEFtb3VudAUDbmlsBQNuaWwED21pblBlcmlvZExlbmd0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQUSa2V5TWluUGVyaW9kTGVuZ3RoBA9tYXhQZXJpb2RMZW5ndGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEFEmtleU1heFBlcmlvZExlbmd0aAQGY2hlY2tzCQDMCAIDAwkAZwIFDHBlcmlvZExlbmd0aAUPbWluUGVyaW9kTGVuZ3RoCQBnAgUPbWF4UGVyaW9kTGVuZ3RoBQxwZXJpb2RMZW5ndGgHBgkBCHRocm93RXJyAQIUaW52YWxpZCBwZXJpb2RMZW5ndGgJAMwIAgMJAAACCQCgCAEJAQtrZXlWZXJpZmllZAEFB2Fzc2V0SWQFBHVuaXQGCQEIdGhyb3dFcnIBAhBhbHJlYWR5IHZlcmlmaWVkCQDMCAIDCQAAAgkAoAgBCQEZa2V5VmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwEFB2Fzc2V0SWQFBHVuaXQGCQEIdGhyb3dFcnIBAhNhbHJlYWR5IGluIHByb2dyZXNzCQDMCAIDCQBmAgUPd3hQYXltZW50QW1vdW50CQBoAgUMcGVyaW9kTGVuZ3RoBQtmZWVQZXJCbG9jawYJAQh0aHJvd0VycgECHm5vdCBlbm91Z2ggd3ggZm9yIGdpdmVuIHBlcmlvZAkAzAgCAwkAZwIFD3d4UGF5bWVudEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQUma2V5TWluV3hNaW5Gb3JTdWdnZXN0QWRkQW1vdW50UmVxdWlyZWQGCQEIdGhyb3dFcnIBAiFwYXltZW50IGxlc3MgdGhlbiBtaW4gZm9yIHN1Z2dlc3QFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQcYXNzZXRzU3RvcmVDcmVhdGVPclVwZGF0ZUludgkA/AcEBRNhc3NldHNTdG9yZUNvbnRyYWN0Ag5jcmVhdGVPclVwZGF0ZQkAzAgCBQdhc3NldElkCQDMCAIFCmFzc2V0SW1hZ2UJAMwIAgcFA25pbAUDbmlsAwkAAAIFHGFzc2V0c1N0b3JlQ3JlYXRlT3JVcGRhdGVJbnYFHGFzc2V0c1N0b3JlQ3JlYXRlT3JVcGRhdGVJbnYED3ZvdGluZ0VuZEhlaWdodAkAZAIFBmhlaWdodAUMcGVyaW9kTGVuZ3RoBBhmaW5hbGl6ZUNhbGxSZXdhcmRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUba2V5RmluYWxpemVDYWxsUmV3YXJkQW1vdW50AAAEDGJ1cm5XeEFtb3VudAkAZQIFD3d4UGF5bWVudEFtb3VudAUYZmluYWxpemVDYWxsUmV3YXJkQW1vdW50CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFD2N1cnJlbnRJbmRleEtleQUIbmV3SW5kZXgJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARlrZXlWZXJpZmljYXRpb25JblByb2dyZXNzAQUHYXNzZXRJZAYJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlDdXJyZW50Vm90aW5nSGVpZ2h0U3RhcnQCBQdhc3NldElkBQhuZXdJbmRleAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5UGVyaW9kTGVuZ3RoQWRkAgUHYXNzZXRJZAUIbmV3SW5kZXgFDHBlcmlvZExlbmd0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U3VnZ2VzdElzc3VlcgIFB2Fzc2V0SWQFCG5ld0luZGV4CQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleVZvdGluZ0VuZEhlaWdodAIFB2Fzc2V0SWQFCG5ld0luZGV4BQ92b3RpbmdFbmRIZWlnaHQJAMwIAgkBBEJ1cm4CBRB3eFBheW1lbnRBc3NldElkBQxidXJuV3hBbW91bnQFA25pbAUTdm90aW5nUmV3YXJkQWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1zdWdnZXN0UmVtb3ZlAQdhc3NldElkBA5nd3hBbW91bnRBdE5vdwkBGGdldFVzZXJHd3hBbW91bnRBdEhlaWdodAIJAKUIAQgFAWkGY2FsbGVyBQZoZWlnaHQEF21pblN1Z2dlc3RSZW1vdmVCYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1NSkBBRprZXlNaW5TdWdnZXN0UmVtb3ZlQmFsYW5jZQQJd3hQYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEEHd4UGF5bWVudEFzc2V0SWQJAQV2YWx1ZQEIBQl3eFBheW1lbnQHYXNzZXRJZAQPd3hQYXltZW50QW1vdW50CQEFdmFsdWUBCAUJd3hQYXltZW50BmFtb3VudAQKaXNWZXJpZmllZAkBC3ZhbHVlT3JFbHNlAgkAoAgBCQELa2V5VmVyaWZpZWQBBQdhc3NldElkBwQGY2hlY2tzCQDMCAIDBQppc1ZlcmlmaWVkBgkBCHRocm93RXJyAQkAuQkCCQDMCAIFB2Fzc2V0SWQJAMwIAgIMbm90IHZlcmlmaWVkBQNuaWwCASAJAMwIAgMJAGcCBQ5nd3hBbW91bnRBdE5vdwUXbWluU3VnZ2VzdFJlbW92ZUJhbGFuY2UGCQEIdGhyb3dFcnIBAhBub3QgZW5vdWdoIGdXWGVzCQDMCAIDCQBnAgUPd3hQYXltZW50QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBBSNrZXlXeEZvclN1Z2dlc3RSZW1vdmVBbW91bnRSZXF1aXJlZAYJAQh0aHJvd0VycgECIXBheW1lbnQgbGVzcyB0aGVuIG1pbiBmb3Igc3VnZ2VzdAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA9jdXJyZW50SW5kZXhLZXkJAQ9rZXlDdXJyZW50SW5kZXgBBQdhc3NldElkBAxjdXJyZW50SW5kZXgJAJ8IAQUPY3VycmVudEluZGV4S2V5BAhuZXdJbmRleAMJAQlpc0RlZmluZWQBBQxjdXJyZW50SW5kZXgJAGQCCQEFdmFsdWUBBQxjdXJyZW50SW5kZXgAAQAABAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRVrZXlQZXJpb2RMZW5ndGhSZW1vdmUJAQd3cmFwRXJyAQIacGVyaW9kTGVuZ3RoUmVtb3ZlIG5vdCBzZXQED3ZvdGluZ0VuZEhlaWdodAkAZAIFBmhlaWdodAUMcGVyaW9kTGVuZ3RoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9jdXJyZW50SW5kZXhLZXkFCG5ld0luZGV4CQDMCAIJAQxCb29sZWFuRW50cnkCCQEba2V5RGV2ZXJpZmljYXRpb25JblByb2dyZXNzAQUHYXNzZXRJZAYJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlDdXJyZW50Vm90aW5nSGVpZ2h0U3RhcnQCBQdhc3NldElkBQhuZXdJbmRleAUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTdWdnZXN0SXNzdWVyAgUHYXNzZXRJZAUIbmV3SW5kZXgJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5Vm90aW5nRW5kSGVpZ2h0AgUHYXNzZXRJZAUIbmV3SW5kZXgFD3ZvdGluZ0VuZEhlaWdodAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBHZvdGUCB2Fzc2V0SWQHaW5GYXZvcgQPY3VycmVudEluZGV4S2V5CQEPa2V5Q3VycmVudEluZGV4AQUHYXNzZXRJZAQMY3VycmVudEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUPY3VycmVudEluZGV4S2V5CQEHd3JhcEVycgECFXZvdGluZyBkb2VzIG5vdCBleGlzdAQKdm90aW5nSW5mbwkBEXZvdGluZ0V4aXN0Q2hlY2tzAgUHYXNzZXRJZAUMY3VycmVudEluZGV4AwkAAAIFCnZvdGluZ0luZm8FCnZvdGluZ0luZm8EGGN1cnJlbnRWb3RpbmdIZWlnaHRTdGFydAgFCnZvdGluZ0luZm8CXzMEEnZvdGluZ1BlcmlvZExlbmdodAgFCnZvdGluZ0luZm8CXzQEDmd3eEFtb3VudEF0RW5kCQEYZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0AgkApQgBCAUBaQZjYWxsZXIJAGQCBRhjdXJyZW50Vm90aW5nSGVpZ2h0U3RhcnQFEnZvdGluZ1BlcmlvZExlbmdodAQHdm90ZUtleQkBB2tleVZvdGUDBQdhc3NldElkBQxjdXJyZW50SW5kZXgIBQFpBmNhbGxlcgQPdm90aW5nUmVzdWx0S2V5CQEPa2V5Vm90aW5nUmVzdWx0AgUHYXNzZXRJZAUMY3VycmVudEluZGV4BAZjaGVja3MJAMwIAgMJAAACCQCiCAEFB3ZvdGVLZXkFBHVuaXQGCQEIdGhyb3dFcnIBAhZZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkCQDMCAIDCQBmAgUOZ3d4QW1vdW50QXRFbmQAAAYJAAIBAihZb3UnbGwgbm90IGhhdmUgZ1dYIGF0IHRoZSBlbmQgb2Ygdm90aW5nBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MED2xhc3RWb3RpbmdWYWx1ZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQ92b3RpbmdSZXN1bHRLZXkFEmRlZmF1bHRWb3RpbmdWYWx1ZQQUbGFzdFZvdGluZ1ZhbHVlUGFydHMJALUJAgUPbGFzdFZvdGluZ1ZhbHVlBQlzZXBhcmF0b3IEDm5ld1ZvdGluZ1ZhbHVlAwUHaW5GYXZvcgkBC3ZvdGluZ1ZhbHVlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBRRsYXN0Vm90aW5nVmFsdWVQYXJ0cwABBQ5nd3hBbW91bnRBdEVuZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFFGxhc3RWb3RpbmdWYWx1ZVBhcnRzAAIJAQt2b3RpbmdWYWx1ZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBRRsYXN0Vm90aW5nVmFsdWVQYXJ0cwABCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFFGxhc3RWb3RpbmdWYWx1ZVBhcnRzAAIFDmd3eEFtb3VudEF0RW5kCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3ZvdGVLZXkJAQl2b3RlVmFsdWUCBQdpbkZhdm9yBQ5nd3hBbW91bnRBdEVuZAkAzAgCCQELU3RyaW5nRW50cnkCBQ92b3RpbmdSZXN1bHRLZXkFDm5ld1ZvdGluZ1ZhbHVlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY2FuY2VsVm90ZQEHYXNzZXRJZAQPY3VycmVudEluZGV4S2V5CQEPa2V5Q3VycmVudEluZGV4AQUHYXNzZXRJZAQMY3VycmVudEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUPY3VycmVudEluZGV4S2V5CQEHd3JhcEVycgECFXZvdGluZyBkb2VzIG5vdCBleGlzdAQHdm90ZUtleQkBB2tleVZvdGUDBQdhc3NldElkBQxjdXJyZW50SW5kZXgIBQFpBmNhbGxlcgQPdm90aW5nUmVzdWx0S2V5CQEPa2V5Vm90aW5nUmVzdWx0AgUHYXNzZXRJZAUMY3VycmVudEluZGV4BAhsYXN0Vm90ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEFB3ZvdGVLZXkJAQd3cmFwRXJyAQISeW91IGhhdmUgbm90IHZvdGVkBA1sYXN0Vm90ZVBhcnRzCQC1CQIFCGxhc3RWb3RlBQlzZXBhcmF0b3IEB2luRmF2b3IJAJEDAgUNbGFzdFZvdGVQYXJ0cwABBAlnd3hBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1sYXN0Vm90ZVBhcnRzAAIECnZvdGluZ0luZm8JARF2b3RpbmdFeGlzdENoZWNrcwIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAMJAAACBQp2b3RpbmdJbmZvBQp2b3RpbmdJbmZvBAZjaGVja3MJAMwIAgMDCQAAAgUHaW5GYXZvcgIEdHJ1ZQYJAAACBQdpbkZhdm9yAgVmYWxzZQYJAQh0aHJvd0VycgECDGludmFsaWQgdm90ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA9sYXN0Vm90aW5nVmFsdWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUPdm90aW5nUmVzdWx0S2V5BRJkZWZhdWx0Vm90aW5nVmFsdWUEFGxhc3RWb3RpbmdWYWx1ZVBhcnRzCQC1CQIFD2xhc3RWb3RpbmdWYWx1ZQUJc2VwYXJhdG9yBBRuZXdWb3RpbmdSZXN1bHRWYWx1ZQMJAAACBQdpbkZhdm9yAgR0cnVlCQELdm90aW5nVmFsdWUCCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFFGxhc3RWb3RpbmdWYWx1ZVBhcnRzAAEFCWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFFGxhc3RWb3RpbmdWYWx1ZVBhcnRzAAIJAQt2b3RpbmdWYWx1ZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBRRsYXN0Vm90aW5nVmFsdWVQYXJ0cwABCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFFGxhc3RWb3RpbmdWYWx1ZVBhcnRzAAIFCWd3eEFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBBQd2b3RlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFD3ZvdGluZ1Jlc3VsdEtleQUUbmV3Vm90aW5nUmVzdWx0VmFsdWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhmaW5hbGl6ZQEHYXNzZXRJZAQWdmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEZa2V5VmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwEFB2Fzc2V0SWQHBBhkZXZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBG2tleURldmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwEFB2Fzc2V0SWQHBA9jdXJyZW50SW5kZXhLZXkJAQ9rZXlDdXJyZW50SW5kZXgBBQdhc3NldElkBAxjdXJyZW50SW5kZXgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPY3VycmVudEluZGV4S2V5AAAEEnZvdGluZ1RocmVzaG9sZEFkZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFFWtleVZvdGluZ1RocmVzaG9sZEFkZAkBB3dyYXBFcnIBAhp2b3RpbmdUaHJlc2hvbGRBZGQgbm90IHNldAQVdm90aW5nVGhyZXNob2xkUmVtb3ZlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUYa2V5Vm90aW5nVGhyZXNob2xkUmVtb3ZlCQEHd3JhcEVycgECHXZvdGluZ1RocmVzaG9sZFJlbW92ZSBub3Qgc2V0BA0kdDAxNDc4MzE1MjIyAwUWdmVyaWZpY2F0aW9uSW5Qcm9ncmVzcwkAlQoDCQDMCAIJAQtEZWxldGVFbnRyeQEJARlrZXlWZXJpZmljYXRpb25JblByb2dyZXNzAQUHYXNzZXRJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBC2tleVZlcmlmaWVkAQUHYXNzZXRJZAYFA25pbAYFEnZvdGluZ1RocmVzaG9sZEFkZAkAlQoDCQDMCAIJAQtEZWxldGVFbnRyeQEJARtrZXlEZXZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MBBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlWZXJpZmllZAEFB2Fzc2V0SWQFA25pbAYFFXZvdGluZ1RocmVzaG9sZFJlbW92ZQQVZmluYWxpemVWb3RpbmdBY3Rpb25zCAUNJHQwMTQ3ODMxNTIyMgJfMQQIdmVyaWZpZWQIBQ0kdDAxNDc4MzE1MjIyAl8yBAl0aHJlc2hvbGQIBQ0kdDAxNDc4MzE1MjIyAl8zBA9sYXN0Vm90aW5nVmFsdWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAUSZGVmYXVsdFZvdGluZ1ZhbHVlBBRsYXN0Vm90aW5nVmFsdWVQYXJ0cwkAtQkCBQ9sYXN0Vm90aW5nVmFsdWUFCXNlcGFyYXRvcgQIdm90ZXNGb3IJAQ1wYXJzZUludFZhbHVlAQkAkQMCBRRsYXN0Vm90aW5nVmFsdWVQYXJ0cwABBAx2b3Rlc0FnYWluc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBRRsYXN0Vm90aW5nVmFsdWVQYXJ0cwACBAp2b3Rlc1RvdGFsCQBkAgUIdm90ZXNGb3IFDHZvdGVzQWdhaW5zdAQPdm90aW5nRW5kSGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBEmtleVZvdGluZ0VuZEhlaWdodAIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAkBB3dyYXBFcnIBAht2b3RpbmcgZW5kIGhlaWdodCBub3QgZm91bmQEBmNoZWNrcwkAzAgCAwMFFnZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MGBRhkZXZlcmlmaWNhdGlvbkluUHJvZ3Jlc3MGCQEIdGhyb3dFcnIBAhNub3RoaW5nIHRvIGZpbmFsaXplCQDMCAIDCQBnAgUGaGVpZ2h0BQ92b3RpbmdFbmRIZWlnaHQGCQEIdGhyb3dFcnIBAhN2b3Rpbmcgbm90IGZpbmlzaGVkCQDMCAIDCQBnAgUKdm90ZXNUb3RhbAUJdGhyZXNob2xkBgkBCHRocm93RXJyAQIQbm90IGVub3VnaCB2b3RlcwUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBhmaW5hbGl6ZUNhbGxSZXdhcmRBY3Rpb24DCQBmAgUMdm90ZXNBZ2FpbnN0BQh2b3Rlc0ZvcgQRc2V0VmVyaWZpZWRJbnZva2UJAPwHBAUTYXNzZXRzU3RvcmVDb250cmFjdAILc2V0VmVyaWZpZWQJAMwIAgUHYXNzZXRJZAkAzAgCBQh2ZXJpZmllZAUDbmlsBQNuaWwDCQAAAgURc2V0VmVyaWZpZWRJbnZva2UFEXNldFZlcmlmaWVkSW52b2tlBBhmaW5hbGl6ZUNhbGxSZXdhcmRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUba2V5RmluYWxpemVDYWxsUmV3YXJkQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRhmaW5hbGl6ZUNhbGxSZXdhcmRBbW91bnQFCXd4QXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAM4IAgUVZmluYWxpemVWb3RpbmdBY3Rpb25zBRhmaW5hbGl6ZUNhbGxSZXdhcmRBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xhaW1SRUFET05MWQIHYXNzZXRJZAVpbmRleAQNY2FsbGVyQWRkcmVzcwgFAWkGY2FsbGVyBBZ2b3RpbmdSZXdhcmRBc3NldElkU3RyCQCiCAEJARZrZXlWb3RpbmdSZXdhcmRBc3NldElkAgUHYXNzZXRJZAUFaW5kZXgEDHJld2FyZEFtb3VudAMJAQlpc0RlZmluZWQBBRZ2b3RpbmdSZXdhcmRBc3NldElkU3RyCQEPY2FsY3VsYXRlUmV3YXJkAwUNY2FsbGVyQWRkcmVzcwUHYXNzZXRJZAUFaW5kZXgAAAkAlAoCBQNuaWwFDHJld2FyZEFtb3VudAFpAQVjbGFpbQIHYXNzZXRJZAVpbmRleAQNY2FsbGVyQWRkcmVzcwgFAWkGY2FsbGVyBA9jbGFpbUhpc3RvcnlLZXkJAQ9rZXlDbGFpbUhpc3RvcnkDBQ1jYWxsZXJBZGRyZXNzBQdhc3NldElkBQVpbmRleAQMY2xhaW1IaXN0b3J5CQCiCAEFD2NsYWltSGlzdG9yeUtleQQGY2hlY2tzCQDMCAIDCQAAAgUMY2xhaW1IaXN0b3J5BQR1bml0BgkBCHRocm93RXJyAQIPYWxyZWFkeSBjbGFpbWVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDHJld2FyZEFtb3VudAMJAGYCCQEPY2FsY3VsYXRlUmV3YXJkAwUNY2FsbGVyQWRkcmVzcwUHYXNzZXRJZAUFaW5kZXgAAAkBD2NhbGN1bGF0ZVJld2FyZAMFDWNhbGxlckFkZHJlc3MFB2Fzc2V0SWQFBWluZGV4CQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltBBZ2b3RpbmdSZXdhcmRBc3NldElkU3RyCQCiCAEJARZrZXlWb3RpbmdSZXdhcmRBc3NldElkAgUHYXNzZXRJZAUFaW5kZXgEDHJld2FyZEFjdGlvbgMJAQlpc0RlZmluZWQBBRZ2b3RpbmdSZXdhcmRBc3NldElkU3RyBBN2b3RpbmdSZXdhcmRBc3NldElkCQDZBAEJAQV2YWx1ZQEFFnZvdGluZ1Jld2FyZEFzc2V0SWRTdHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUNY2FsbGVyQWRkcmVzcwUMcmV3YXJkQW1vdW50BRN2b3RpbmdSZXdhcmRBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2NsYWltSGlzdG9yeUtleQkBEWNsYWltSGlzdG9yeVZhbHVlAQUMcmV3YXJkQW1vdW50BQNuaWwJAQh0aHJvd0VycgECEG5vdGhpbmcgdG8gY2xhaW0FDHJld2FyZEFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleRDlpNs=", "height": 2599134, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Bc95Do6JTLtq5bwhfkTyPGVPfHCKgJefqJ1gTkckU3wr Next: Hcb2NQsvWn5HWzuRASG7VaqGpEKtAvtJvqyAgA3w8yjy Diff:
OldNewDifferences
130130 }
131131
132132
133-func ak (B,al) = {
134- let am = valueOrElse(getBoolean(G(B)), false)
135- let an = valueOrElse(getBoolean(H(B)), false)
136- let ao = valueOrErrorMessage(getString(Z(B, al)), c("voting issuer not found"))
137- let ap = valueOrErrorMessage(getInteger(E(B, al)), c("voting start height not found"))
138- let aq = if (am)
139- then valueOrErrorMessage(getInteger(A(B, al)), c("voting period length not found"))
133+func ak () = "%s__managerVaultAddress"
134+
135+
136+func al () = "%s__managerPublicKey"
137+
138+
139+func am () = {
140+ let h = getString(ak())
141+ if ($isInstanceOf(h, "String"))
142+ then {
143+ let an = h
144+ addressFromStringValue(an)
145+ }
146+ else this
147+ }
148+
149+
150+func ao () = {
151+ let ap = am()
152+ let h = getString(ap, al())
153+ if ($isInstanceOf(h, "String"))
154+ then {
155+ let an = h
156+ fromBase58String(an)
157+ }
158+ else if ($isInstanceOf(h, "Unit"))
159+ then unit
160+ else throw("Match error")
161+ }
162+
163+
164+func aq (B,ar) = {
165+ let as = valueOrElse(getBoolean(G(B)), false)
166+ let at = valueOrElse(getBoolean(H(B)), false)
167+ let au = valueOrErrorMessage(getString(Z(B, ar)), c("voting issuer not found"))
168+ let av = valueOrErrorMessage(getInteger(E(B, ar)), c("voting start height not found"))
169+ let aw = if (as)
170+ then valueOrErrorMessage(getInteger(A(B, ar)), c("voting period length not found"))
140171 else value(getInteger(D))
141- let ar = [if (if (am)
172+ let ax = [if (if (as)
142173 then true
143- else an)
174+ else at)
144175 then true
145- else e("no voting in progress"), if (((ap + aq) > height))
176+ else e("no voting in progress"), if (((av + aw) > height))
146177 then true
147178 else e("voting expired")]
148- if ((ar == ar))
149- then $Tuple5(am, an, ap, aq, ao)
179+ if ((ax == ax))
180+ then $Tuple5(as, at, av, aw, au)
150181 else throw("Strict value is not equal to itself.")
151182 }
152183
153184
154-func as (at,B,C) = {
155- let au = P(B, C, at)
156- let av = valueOrErrorMessage(getString(au), c("you have not voted"))
157- let aw = split(av, a)
158- let S = aw[1]
159- let ax = if ((S == "true"))
185+func ay (az,B,C) = {
186+ let aA = P(B, C, az)
187+ let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
188+ let aC = split(aB, a)
189+ let S = aC[1]
190+ let aD = if ((S == "true"))
160191 then {
161- let T = parseIntValue(aw[2])
162- let ay = valueOrErrorMessage(getString(U(B, C)), c("voting does not exist"))
163- let az = split(ay, a)
164- let aA = parseIntValue(az[1])
165- let aB = fraction(T, b, aA)
166- let aC = valueOrElse(getInteger(L(B, C)), 0)
167- let ax = fraction(aB, aC, b, FLOOR)
168- ax
192+ let T = parseIntValue(aC[2])
193+ let aE = valueOrErrorMessage(getString(U(B, C)), c("voting does not exist"))
194+ let aF = split(aE, a)
195+ let aG = parseIntValue(aF[1])
196+ let aH = fraction(T, b, aG)
197+ let aI = valueOrElse(getInteger(L(B, C)), 0)
198+ let aD = fraction(aH, aI, b, FLOOR)
199+ aD
169200 }
170201 else 0
171- ax
202+ aD
172203 }
173204
174205
175-@Callable(aD)
176-func suggestAdd (B,aE,aF) = {
177- let aG = valueOrErrorMessage(assetInfo(fromBase58String(B)), "Invalid asset ID")
178- if ((aG == aG))
206+@Callable(aJ)
207+func suggestAdd (B,aK,aL) = {
208+ let aM = valueOrErrorMessage(assetInfo(fromBase58String(B)), "Invalid asset ID")
209+ if ((aM == aM))
179210 then {
180- let aH = O(B)
181- let al = getInteger(aH)
182- let aI = if (isDefined(al))
183- then (value(al) + 1)
211+ let aN = O(B)
212+ let ar = getInteger(aN)
213+ let aO = if (isDefined(ar))
214+ then (value(ar) + 1)
184215 else 0
185- let aJ = aD.payments[0]
186- let aK = value(aJ.assetId)
187- let aL = value(aJ.amount)
188- let aM = if ((size(aD.payments) > 1))
216+ let aP = aJ.payments[0]
217+ let aQ = value(aP.assetId)
218+ let aR = value(aP.amount)
219+ let aS = if ((size(aJ.payments) > 1))
189220 then {
190- let aN = aD.payments[1]
191- let aO = toBase58String(value(aN.assetId))
192- let aP = value(aN.amount)
193-[StringEntry(K(B, aI), aO), IntegerEntry(L(B, aI), aP)]
221+ let aT = aJ.payments[1]
222+ let aU = toBase58String(value(aT.assetId))
223+ let aV = value(aT.amount)
224+[StringEntry(K(B, aO), aU), IntegerEntry(L(B, aO), aV)]
194225 }
195226 else nil
196- let aQ = getIntegerValue(J)
197- let aR = getIntegerValue(I)
198- let ar = [if (if ((aE >= aQ))
199- then (aR >= aE)
227+ let aW = getIntegerValue(J)
228+ let aX = getIntegerValue(I)
229+ let ax = [if (if ((aK >= aW))
230+ then (aX >= aK)
200231 else false)
201232 then true
202233 else e("invalid periodLength"), if ((getBoolean(F(B)) == unit))
203234 then true
204235 else e("already verified"), if ((getBoolean(G(B)) == unit))
205236 then true
206- else e("already in progress"), if ((aL > (aE * af)))
237+ else e("already in progress"), if ((aR > (aK * af)))
207238 then true
208- else e("not enough wx for given period"), if ((aL >= getIntegerValue(ag)))
239+ else e("not enough wx for given period"), if ((aR >= getIntegerValue(ag)))
209240 then true
210241 else e("payment less then min for suggest")]
211- if ((ar == ar))
242+ if ((ax == ax))
212243 then {
213- let aS = invoke(u, "createOrUpdate", [B, aF, false], nil)
214- if ((aS == aS))
244+ let aY = invoke(u, "createOrUpdate", [B, aL, false], nil)
245+ if ((aY == aY))
215246 then {
216- let aT = (height + aE)
217- let aU = valueOrElse(getInteger(M), 0)
218- let aV = (aL - aU)
219- ([IntegerEntry(aH, aI), BooleanEntry(G(B), true), IntegerEntry(E(B, aI), height), IntegerEntry(A(B, aI), aE), StringEntry(Z(B, aI), toString(aD.caller)), IntegerEntry(ad(B, aI), aT), Burn(aK, aV)] ++ aM)
247+ let aZ = (height + aK)
248+ let ba = valueOrElse(getInteger(M), 0)
249+ let bb = (aR - ba)
250+ ([IntegerEntry(aN, aO), BooleanEntry(G(B), true), IntegerEntry(E(B, aO), height), IntegerEntry(A(B, aO), aK), StringEntry(Z(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ), Burn(aQ, bb)] ++ aS)
220251 }
221252 else throw("Strict value is not equal to itself.")
222253 }
227258
228259
229260
230-@Callable(aD)
261+@Callable(aJ)
231262 func suggestRemove (B) = {
232- let aW = ai(toString(aD.caller), height)
233- let aX = getIntegerValue(N)
234- let aJ = aD.payments[0]
235- let aK = value(aJ.assetId)
236- let aL = value(aJ.amount)
237- let aY = valueOrElse(getBoolean(F(B)), false)
238- let ar = [if (aY)
263+ let bc = ai(toString(aJ.caller), height)
264+ let bd = getIntegerValue(N)
265+ let aP = aJ.payments[0]
266+ let aQ = value(aP.assetId)
267+ let aR = value(aP.amount)
268+ let be = valueOrElse(getBoolean(F(B)), false)
269+ let ax = [if (be)
239270 then true
240- else e(makeString([B, "not verified"], " ")), if ((aW >= aX))
271+ else e(makeString([B, "not verified"], " ")), if ((bc >= bd))
241272 then true
242- else e("not enough gWXes"), if ((aL >= getIntegerValue(ah)))
273+ else e("not enough gWXes"), if ((aR >= getIntegerValue(ah)))
243274 then true
244275 else e("payment less then min for suggest")]
245- if ((ar == ar))
276+ if ((ax == ax))
246277 then {
247- let aH = O(B)
248- let al = getInteger(aH)
249- let aI = if (isDefined(al))
250- then (value(al) + 1)
278+ let aN = O(B)
279+ let ar = getInteger(aN)
280+ let aO = if (isDefined(ar))
281+ then (value(ar) + 1)
251282 else 0
252- let aE = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
253- let aT = (height + aE)
254-[IntegerEntry(aH, aI), BooleanEntry(H(B), true), IntegerEntry(E(B, aI), height), StringEntry(Z(B, aI), toString(aD.caller)), IntegerEntry(ad(B, aI), aT)]
283+ let aK = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
284+ let aZ = (height + aK)
285+[IntegerEntry(aN, aO), BooleanEntry(H(B), true), IntegerEntry(E(B, aO), height), StringEntry(Z(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ)]
255286 }
256287 else throw("Strict value is not equal to itself.")
257288 }
258289
259290
260291
261-@Callable(aD)
292+@Callable(aJ)
262293 func vote (B,S) = {
263- let aH = O(B)
264- let al = valueOrErrorMessage(getInteger(aH), c("voting does not exist"))
265- let aZ = ak(B, al)
266- if ((aZ == aZ))
294+ let aN = O(B)
295+ let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
296+ let bf = aq(B, ar)
297+ if ((bf == bf))
267298 then {
268- let ap = aZ._3
269- let aq = aZ._4
270- let ba = ai(toString(aD.caller), (ap + aq))
271- let au = P(B, al, aD.caller)
272- let bb = U(B, al)
273- let ar = [if ((getString(au) == unit))
299+ let av = bf._3
300+ let aw = bf._4
301+ let bg = ai(toString(aJ.caller), (av + aw))
302+ let aA = P(B, ar, aJ.caller)
303+ let bh = U(B, ar)
304+ let ax = [if ((getString(aA) == unit))
274305 then true
275- else e("You have already voted"), if ((ba > 0))
306+ else e("You have already voted"), if ((bg > 0))
276307 then true
277308 else throw("You'll not have gWX at the end of voting")]
278- if ((ar == ar))
309+ if ((ax == ax))
279310 then {
280- let ay = valueOrElse(getString(bb), Y)
281- let az = split(ay, a)
282- let bc = if (S)
283- then V((parseIntValue(az[1]) + ba), parseIntValue(az[2]))
284- else V(parseIntValue(az[1]), (parseIntValue(az[2]) + ba))
285-[StringEntry(au, R(S, ba)), StringEntry(bb, bc)]
311+ let aE = valueOrElse(getString(bh), Y)
312+ let aF = split(aE, a)
313+ let bi = if (S)
314+ then V((parseIntValue(aF[1]) + bg), parseIntValue(aF[2]))
315+ else V(parseIntValue(aF[1]), (parseIntValue(aF[2]) + bg))
316+[StringEntry(aA, R(S, bg)), StringEntry(bh, bi)]
286317 }
287318 else throw("Strict value is not equal to itself.")
288319 }
291322
292323
293324
294-@Callable(aD)
325+@Callable(aJ)
295326 func cancelVote (B) = {
296- let aH = O(B)
297- let al = valueOrErrorMessage(getInteger(aH), c("voting does not exist"))
298- let au = P(B, al, aD.caller)
299- let bb = U(B, al)
300- let av = valueOrErrorMessage(getString(au), c("you have not voted"))
301- let aw = split(av, a)
302- let S = aw[1]
303- let T = parseIntValue(aw[2])
304- let aZ = ak(B, al)
305- if ((aZ == aZ))
327+ let aN = O(B)
328+ let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
329+ let aA = P(B, ar, aJ.caller)
330+ let bh = U(B, ar)
331+ let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
332+ let aC = split(aB, a)
333+ let S = aC[1]
334+ let T = parseIntValue(aC[2])
335+ let bf = aq(B, ar)
336+ if ((bf == bf))
306337 then {
307- let ar = [if (if ((S == "true"))
338+ let ax = [if (if ((S == "true"))
308339 then true
309340 else (S == "false"))
310341 then true
311342 else e("invalid vote")]
312- if ((ar == ar))
343+ if ((ax == ax))
313344 then {
314- let ay = valueOrElse(getString(bb), Y)
315- let az = split(ay, a)
316- let bd = if ((S == "true"))
317- then V((parseIntValue(az[1]) - T), parseIntValue(az[2]))
318- else V(parseIntValue(az[1]), (parseIntValue(az[2]) - T))
319-[DeleteEntry(au), StringEntry(bb, bd)]
345+ let aE = valueOrElse(getString(bh), Y)
346+ let aF = split(aE, a)
347+ let bj = if ((S == "true"))
348+ then V((parseIntValue(aF[1]) - T), parseIntValue(aF[2]))
349+ else V(parseIntValue(aF[1]), (parseIntValue(aF[2]) - T))
350+[DeleteEntry(aA), StringEntry(bh, bj)]
320351 }
321352 else throw("Strict value is not equal to itself.")
322353 }
325356
326357
327358
328-@Callable(aD)
359+@Callable(aJ)
329360 func finalize (B) = {
330- let am = valueOrElse(getBoolean(G(B)), false)
331- let an = valueOrElse(getBoolean(H(B)), false)
332- let aH = O(B)
333- let al = valueOrElse(getInteger(aH), 0)
334- let be = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
335- let bf = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
336- let bg = if (am)
337- then $Tuple3([DeleteEntry(G(B)), BooleanEntry(F(B), true)], true, be)
338- else $Tuple3([DeleteEntry(H(B)), DeleteEntry(F(B))], true, bf)
339- let bh = bg._1
340- let bi = bg._2
341- let bj = bg._3
342- let ay = valueOrElse(getString(U(B, al)), Y)
343- let az = split(ay, a)
344- let bk = parseIntValue(az[1])
345- let bl = parseIntValue(az[2])
346- let bm = (bk + bl)
347- let aT = valueOrErrorMessage(getInteger(ad(B, al)), c("voting end height not found"))
348- let ar = [if (if (am)
361+ let as = valueOrElse(getBoolean(G(B)), false)
362+ let at = valueOrElse(getBoolean(H(B)), false)
363+ let aN = O(B)
364+ let ar = valueOrElse(getInteger(aN), 0)
365+ let bk = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
366+ let bl = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
367+ let bm = if (as)
368+ then $Tuple3([DeleteEntry(G(B)), BooleanEntry(F(B), true)], true, bk)
369+ else $Tuple3([DeleteEntry(H(B)), DeleteEntry(F(B))], true, bl)
370+ let bn = bm._1
371+ let bo = bm._2
372+ let bp = bm._3
373+ let aE = valueOrElse(getString(U(B, ar)), Y)
374+ let aF = split(aE, a)
375+ let bq = parseIntValue(aF[1])
376+ let br = parseIntValue(aF[2])
377+ let bs = (bq + br)
378+ let aZ = valueOrErrorMessage(getInteger(ad(B, ar)), c("voting end height not found"))
379+ let ax = [if (if (as)
349380 then true
350- else an)
381+ else at)
351382 then true
352- else e("nothing to finalize"), if ((height >= aT))
383+ else e("nothing to finalize"), if ((height >= aZ))
353384 then true
354- else e("voting not finished"), if ((bm >= bj))
385+ else e("voting not finished"), if ((bs >= bp))
355386 then true
356387 else e("not enough votes")]
357- if ((ar == ar))
388+ if ((ax == ax))
358389 then {
359- let bn = if ((bl > bk))
390+ let bt = if ((br > bq))
360391 then {
361- let bo = invoke(u, "setVerified", [B, bi], nil)
362- if ((bo == bo))
392+ let bu = invoke(u, "setVerified", [B, bo], nil)
393+ if ((bu == bu))
363394 then {
364- let aU = valueOrElse(getInteger(M), 0)
365-[ScriptTransfer(aD.caller, aU, x)]
395+ let ba = valueOrElse(getInteger(M), 0)
396+[ScriptTransfer(aJ.caller, ba, x)]
366397 }
367398 else throw("Strict value is not equal to itself.")
368399 }
369400 else nil
370- (bh ++ bn)
401+ (bn ++ bt)
371402 }
372403 else throw("Strict value is not equal to itself.")
373404 }
374405
375406
376407
377-@Callable(aD)
408+@Callable(aJ)
378409 func claimREADONLY (B,C) = {
379- let bp = aD.caller
380- let bq = getString(K(B, C))
381- let ax = if (isDefined(bq))
382- then as(bp, B, C)
410+ let bv = aJ.caller
411+ let bw = getString(K(B, C))
412+ let aD = if (isDefined(bw))
413+ then ay(bv, B, C)
383414 else 0
384- $Tuple2(nil, ax)
415+ $Tuple2(nil, aD)
385416 }
386417
387418
388419
389-@Callable(aD)
420+@Callable(aJ)
390421 func claim (B,C) = {
391- let bp = aD.caller
392- let br = aa(bp, B, C)
393- let bs = getString(br)
394- let ar = [if ((bs == unit))
422+ let bv = aJ.caller
423+ let bx = aa(bv, B, C)
424+ let by = getString(bx)
425+ let ax = [if ((by == unit))
395426 then true
396427 else e("already claimed")]
397- if ((ar == ar))
428+ if ((ax == ax))
398429 then {
399- let ax = if ((as(bp, B, C) > 0))
400- then as(bp, B, C)
430+ let aD = if ((ay(bv, B, C) > 0))
431+ then ay(bv, B, C)
401432 else e("nothing to claim")
402- let bq = getString(K(B, C))
403- let bt = if (isDefined(bq))
433+ let bw = getString(K(B, C))
434+ let bz = if (isDefined(bw))
404435 then {
405- let bu = fromBase58String(value(bq))
406-[ScriptTransfer(bp, ax, bu), StringEntry(br, ac(ax))]
436+ let bA = fromBase58String(value(bw))
437+[ScriptTransfer(bv, aD, bA), StringEntry(bx, ac(aD))]
407438 }
408439 else e("nothing to claim")
409- bt
440+ bz
410441 }
411442 else throw("Strict value is not equal to itself.")
412443 }
413444
414445
446+@Verifier(bB)
447+func bC () = {
448+ let bD = {
449+ let h = ao()
450+ if ($isInstanceOf(h, "ByteVector"))
451+ then {
452+ let bE = h
453+ bE
454+ }
455+ else if ($isInstanceOf(h, "Unit"))
456+ then bB.senderPublicKey
457+ else throw("Match error")
458+ }
459+ sigVerify(bB.bodyBytes, bB.proofs[0], bD)
460+ }
461+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 100000000
77
88 func c (d) = makeString(["voting_verified_v2.ride:", d], " ")
99
1010
1111 func e (d) = throw(c(d))
1212
1313
1414 func f (g) = {
1515 let h = g
1616 if ($isInstanceOf(h, "Int"))
1717 then {
1818 let i = h
1919 i
2020 }
2121 else throw("Failed to cast into Integer")
2222 }
2323
2424
2525 func j (k,l) = valueOrElse(getInteger(k, l), 0)
2626
2727
2828 func m (k,l) = valueOrErrorMessage(getInteger(k, l), c((l + " is not defined")))
2929
3030
3131 func n (k,l) = valueOrElse(getString(k, l), "")
3232
3333
3434 func o (k,l) = valueOrErrorMessage(getString(k, l), c((l + " is not defined")))
3535
3636
3737 let p = makeString(["%s", "boostingContract"], a)
3838
3939 let q = makeString(["%s", "emissionContract"], a)
4040
4141 let r = makeString(["%s", "assetsStoreContract"], a)
4242
4343 let s = addressFromStringValue(getStringValue(p))
4444
4545 let t = addressFromStringValue(getStringValue(q))
4646
4747 let u = addressFromStringValue(getStringValue(r))
4848
4949 let v = makeString(["%s", "config"], a)
5050
5151 let w = split(o(t, v), a)[1]
5252
5353 let x = fromBase58String(w)
5454
5555 let y = makeString(["%s%s", "votingThreshold", "add"], a)
5656
5757 let z = makeString(["%s%s", "votingThreshold", "remove"], a)
5858
5959 func A (B,C) = makeString(["%s%s%d", "periodLengthAdd", B, toString(C)], a)
6060
6161
6262 let D = makeString(["%s", "periodLengthRemove"], a)
6363
6464 func E (B,C) = makeString(["%s%s%d", "currentVotingHeightStart", B, toString(C)], a)
6565
6666
6767 func F (B) = makeString(["%s%s", "verified", B], a)
6868
6969
7070 func G (B) = makeString(["%s%s%s", "verification", "inProgress", B], a)
7171
7272
7373 func H (B) = makeString(["%s%s%s", "deverification", "inProgress", B], a)
7474
7575
7676 let I = makeString(["%s", "maxPeriodLength"], a)
7777
7878 let J = makeString(["%s", "minPeriodLength"], a)
7979
8080 func K (B,C) = makeString(["%s%s%d", "votingRewardAssetId", B, toString(C)], a)
8181
8282
8383 func L (B,C) = makeString(["%s%s%d", "votingReward", B, toString(C)], a)
8484
8585
8686 let M = makeString(["%s", "finalizeCallRewardAmount"], a)
8787
8888 let N = makeString(["%s", "minSuggestRemoveBalance"], a)
8989
9090 func O (B) = makeString(["%s%s", "currentIndex", B], a)
9191
9292
9393 func P (B,C,Q) = makeString(["%s%s%d%s", "vote", B, toString(C), toString(Q)], a)
9494
9595
9696 func R (S,T) = makeString(["%s%d", toString(S), toString(T)], a)
9797
9898
9999 func U (B,C) = makeString(["%s%s%d", "votingResult", B, toString(C)], a)
100100
101101
102102 func V (W,X) = makeString(["%d%d", toString(W), toString(X)], a)
103103
104104
105105 let Y = makeString(["%d%d", "0", "0"], a)
106106
107107 func Z (B,C) = makeString(["%s%s%d", "suggestIssuer", B, toString(C)], a)
108108
109109
110110 func aa (ab,B,C) = makeString(["%s%s%s%d", "history", toString(ab), B, toString(C)], a)
111111
112112
113113 func ac (T) = makeString(["%d%s", toString(T)], a)
114114
115115
116116 func ad (B,C) = makeString(["%s%s%d", "votingEndHeight", B, toString(C)], a)
117117
118118
119119 let ae = makeString(["%s", "feePerBlock"], a)
120120
121121 let af = m(this, ae)
122122
123123 let ag = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
124124
125125 let ah = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
126126
127127 func ai (ab,aj) = {
128128 let T = invoke(s, "getUserGwxAmountAtHeightREADONLY", [ab, aj], nil)
129129 f(T)
130130 }
131131
132132
133-func ak (B,al) = {
134- let am = valueOrElse(getBoolean(G(B)), false)
135- let an = valueOrElse(getBoolean(H(B)), false)
136- let ao = valueOrErrorMessage(getString(Z(B, al)), c("voting issuer not found"))
137- let ap = valueOrErrorMessage(getInteger(E(B, al)), c("voting start height not found"))
138- let aq = if (am)
139- then valueOrErrorMessage(getInteger(A(B, al)), c("voting period length not found"))
133+func ak () = "%s__managerVaultAddress"
134+
135+
136+func al () = "%s__managerPublicKey"
137+
138+
139+func am () = {
140+ let h = getString(ak())
141+ if ($isInstanceOf(h, "String"))
142+ then {
143+ let an = h
144+ addressFromStringValue(an)
145+ }
146+ else this
147+ }
148+
149+
150+func ao () = {
151+ let ap = am()
152+ let h = getString(ap, al())
153+ if ($isInstanceOf(h, "String"))
154+ then {
155+ let an = h
156+ fromBase58String(an)
157+ }
158+ else if ($isInstanceOf(h, "Unit"))
159+ then unit
160+ else throw("Match error")
161+ }
162+
163+
164+func aq (B,ar) = {
165+ let as = valueOrElse(getBoolean(G(B)), false)
166+ let at = valueOrElse(getBoolean(H(B)), false)
167+ let au = valueOrErrorMessage(getString(Z(B, ar)), c("voting issuer not found"))
168+ let av = valueOrErrorMessage(getInteger(E(B, ar)), c("voting start height not found"))
169+ let aw = if (as)
170+ then valueOrErrorMessage(getInteger(A(B, ar)), c("voting period length not found"))
140171 else value(getInteger(D))
141- let ar = [if (if (am)
172+ let ax = [if (if (as)
142173 then true
143- else an)
174+ else at)
144175 then true
145- else e("no voting in progress"), if (((ap + aq) > height))
176+ else e("no voting in progress"), if (((av + aw) > height))
146177 then true
147178 else e("voting expired")]
148- if ((ar == ar))
149- then $Tuple5(am, an, ap, aq, ao)
179+ if ((ax == ax))
180+ then $Tuple5(as, at, av, aw, au)
150181 else throw("Strict value is not equal to itself.")
151182 }
152183
153184
154-func as (at,B,C) = {
155- let au = P(B, C, at)
156- let av = valueOrErrorMessage(getString(au), c("you have not voted"))
157- let aw = split(av, a)
158- let S = aw[1]
159- let ax = if ((S == "true"))
185+func ay (az,B,C) = {
186+ let aA = P(B, C, az)
187+ let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
188+ let aC = split(aB, a)
189+ let S = aC[1]
190+ let aD = if ((S == "true"))
160191 then {
161- let T = parseIntValue(aw[2])
162- let ay = valueOrErrorMessage(getString(U(B, C)), c("voting does not exist"))
163- let az = split(ay, a)
164- let aA = parseIntValue(az[1])
165- let aB = fraction(T, b, aA)
166- let aC = valueOrElse(getInteger(L(B, C)), 0)
167- let ax = fraction(aB, aC, b, FLOOR)
168- ax
192+ let T = parseIntValue(aC[2])
193+ let aE = valueOrErrorMessage(getString(U(B, C)), c("voting does not exist"))
194+ let aF = split(aE, a)
195+ let aG = parseIntValue(aF[1])
196+ let aH = fraction(T, b, aG)
197+ let aI = valueOrElse(getInteger(L(B, C)), 0)
198+ let aD = fraction(aH, aI, b, FLOOR)
199+ aD
169200 }
170201 else 0
171- ax
202+ aD
172203 }
173204
174205
175-@Callable(aD)
176-func suggestAdd (B,aE,aF) = {
177- let aG = valueOrErrorMessage(assetInfo(fromBase58String(B)), "Invalid asset ID")
178- if ((aG == aG))
206+@Callable(aJ)
207+func suggestAdd (B,aK,aL) = {
208+ let aM = valueOrErrorMessage(assetInfo(fromBase58String(B)), "Invalid asset ID")
209+ if ((aM == aM))
179210 then {
180- let aH = O(B)
181- let al = getInteger(aH)
182- let aI = if (isDefined(al))
183- then (value(al) + 1)
211+ let aN = O(B)
212+ let ar = getInteger(aN)
213+ let aO = if (isDefined(ar))
214+ then (value(ar) + 1)
184215 else 0
185- let aJ = aD.payments[0]
186- let aK = value(aJ.assetId)
187- let aL = value(aJ.amount)
188- let aM = if ((size(aD.payments) > 1))
216+ let aP = aJ.payments[0]
217+ let aQ = value(aP.assetId)
218+ let aR = value(aP.amount)
219+ let aS = if ((size(aJ.payments) > 1))
189220 then {
190- let aN = aD.payments[1]
191- let aO = toBase58String(value(aN.assetId))
192- let aP = value(aN.amount)
193-[StringEntry(K(B, aI), aO), IntegerEntry(L(B, aI), aP)]
221+ let aT = aJ.payments[1]
222+ let aU = toBase58String(value(aT.assetId))
223+ let aV = value(aT.amount)
224+[StringEntry(K(B, aO), aU), IntegerEntry(L(B, aO), aV)]
194225 }
195226 else nil
196- let aQ = getIntegerValue(J)
197- let aR = getIntegerValue(I)
198- let ar = [if (if ((aE >= aQ))
199- then (aR >= aE)
227+ let aW = getIntegerValue(J)
228+ let aX = getIntegerValue(I)
229+ let ax = [if (if ((aK >= aW))
230+ then (aX >= aK)
200231 else false)
201232 then true
202233 else e("invalid periodLength"), if ((getBoolean(F(B)) == unit))
203234 then true
204235 else e("already verified"), if ((getBoolean(G(B)) == unit))
205236 then true
206- else e("already in progress"), if ((aL > (aE * af)))
237+ else e("already in progress"), if ((aR > (aK * af)))
207238 then true
208- else e("not enough wx for given period"), if ((aL >= getIntegerValue(ag)))
239+ else e("not enough wx for given period"), if ((aR >= getIntegerValue(ag)))
209240 then true
210241 else e("payment less then min for suggest")]
211- if ((ar == ar))
242+ if ((ax == ax))
212243 then {
213- let aS = invoke(u, "createOrUpdate", [B, aF, false], nil)
214- if ((aS == aS))
244+ let aY = invoke(u, "createOrUpdate", [B, aL, false], nil)
245+ if ((aY == aY))
215246 then {
216- let aT = (height + aE)
217- let aU = valueOrElse(getInteger(M), 0)
218- let aV = (aL - aU)
219- ([IntegerEntry(aH, aI), BooleanEntry(G(B), true), IntegerEntry(E(B, aI), height), IntegerEntry(A(B, aI), aE), StringEntry(Z(B, aI), toString(aD.caller)), IntegerEntry(ad(B, aI), aT), Burn(aK, aV)] ++ aM)
247+ let aZ = (height + aK)
248+ let ba = valueOrElse(getInteger(M), 0)
249+ let bb = (aR - ba)
250+ ([IntegerEntry(aN, aO), BooleanEntry(G(B), true), IntegerEntry(E(B, aO), height), IntegerEntry(A(B, aO), aK), StringEntry(Z(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ), Burn(aQ, bb)] ++ aS)
220251 }
221252 else throw("Strict value is not equal to itself.")
222253 }
223254 else throw("Strict value is not equal to itself.")
224255 }
225256 else throw("Strict value is not equal to itself.")
226257 }
227258
228259
229260
230-@Callable(aD)
261+@Callable(aJ)
231262 func suggestRemove (B) = {
232- let aW = ai(toString(aD.caller), height)
233- let aX = getIntegerValue(N)
234- let aJ = aD.payments[0]
235- let aK = value(aJ.assetId)
236- let aL = value(aJ.amount)
237- let aY = valueOrElse(getBoolean(F(B)), false)
238- let ar = [if (aY)
263+ let bc = ai(toString(aJ.caller), height)
264+ let bd = getIntegerValue(N)
265+ let aP = aJ.payments[0]
266+ let aQ = value(aP.assetId)
267+ let aR = value(aP.amount)
268+ let be = valueOrElse(getBoolean(F(B)), false)
269+ let ax = [if (be)
239270 then true
240- else e(makeString([B, "not verified"], " ")), if ((aW >= aX))
271+ else e(makeString([B, "not verified"], " ")), if ((bc >= bd))
241272 then true
242- else e("not enough gWXes"), if ((aL >= getIntegerValue(ah)))
273+ else e("not enough gWXes"), if ((aR >= getIntegerValue(ah)))
243274 then true
244275 else e("payment less then min for suggest")]
245- if ((ar == ar))
276+ if ((ax == ax))
246277 then {
247- let aH = O(B)
248- let al = getInteger(aH)
249- let aI = if (isDefined(al))
250- then (value(al) + 1)
278+ let aN = O(B)
279+ let ar = getInteger(aN)
280+ let aO = if (isDefined(ar))
281+ then (value(ar) + 1)
251282 else 0
252- let aE = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
253- let aT = (height + aE)
254-[IntegerEntry(aH, aI), BooleanEntry(H(B), true), IntegerEntry(E(B, aI), height), StringEntry(Z(B, aI), toString(aD.caller)), IntegerEntry(ad(B, aI), aT)]
283+ let aK = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
284+ let aZ = (height + aK)
285+[IntegerEntry(aN, aO), BooleanEntry(H(B), true), IntegerEntry(E(B, aO), height), StringEntry(Z(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ)]
255286 }
256287 else throw("Strict value is not equal to itself.")
257288 }
258289
259290
260291
261-@Callable(aD)
292+@Callable(aJ)
262293 func vote (B,S) = {
263- let aH = O(B)
264- let al = valueOrErrorMessage(getInteger(aH), c("voting does not exist"))
265- let aZ = ak(B, al)
266- if ((aZ == aZ))
294+ let aN = O(B)
295+ let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
296+ let bf = aq(B, ar)
297+ if ((bf == bf))
267298 then {
268- let ap = aZ._3
269- let aq = aZ._4
270- let ba = ai(toString(aD.caller), (ap + aq))
271- let au = P(B, al, aD.caller)
272- let bb = U(B, al)
273- let ar = [if ((getString(au) == unit))
299+ let av = bf._3
300+ let aw = bf._4
301+ let bg = ai(toString(aJ.caller), (av + aw))
302+ let aA = P(B, ar, aJ.caller)
303+ let bh = U(B, ar)
304+ let ax = [if ((getString(aA) == unit))
274305 then true
275- else e("You have already voted"), if ((ba > 0))
306+ else e("You have already voted"), if ((bg > 0))
276307 then true
277308 else throw("You'll not have gWX at the end of voting")]
278- if ((ar == ar))
309+ if ((ax == ax))
279310 then {
280- let ay = valueOrElse(getString(bb), Y)
281- let az = split(ay, a)
282- let bc = if (S)
283- then V((parseIntValue(az[1]) + ba), parseIntValue(az[2]))
284- else V(parseIntValue(az[1]), (parseIntValue(az[2]) + ba))
285-[StringEntry(au, R(S, ba)), StringEntry(bb, bc)]
311+ let aE = valueOrElse(getString(bh), Y)
312+ let aF = split(aE, a)
313+ let bi = if (S)
314+ then V((parseIntValue(aF[1]) + bg), parseIntValue(aF[2]))
315+ else V(parseIntValue(aF[1]), (parseIntValue(aF[2]) + bg))
316+[StringEntry(aA, R(S, bg)), StringEntry(bh, bi)]
286317 }
287318 else throw("Strict value is not equal to itself.")
288319 }
289320 else throw("Strict value is not equal to itself.")
290321 }
291322
292323
293324
294-@Callable(aD)
325+@Callable(aJ)
295326 func cancelVote (B) = {
296- let aH = O(B)
297- let al = valueOrErrorMessage(getInteger(aH), c("voting does not exist"))
298- let au = P(B, al, aD.caller)
299- let bb = U(B, al)
300- let av = valueOrErrorMessage(getString(au), c("you have not voted"))
301- let aw = split(av, a)
302- let S = aw[1]
303- let T = parseIntValue(aw[2])
304- let aZ = ak(B, al)
305- if ((aZ == aZ))
327+ let aN = O(B)
328+ let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
329+ let aA = P(B, ar, aJ.caller)
330+ let bh = U(B, ar)
331+ let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
332+ let aC = split(aB, a)
333+ let S = aC[1]
334+ let T = parseIntValue(aC[2])
335+ let bf = aq(B, ar)
336+ if ((bf == bf))
306337 then {
307- let ar = [if (if ((S == "true"))
338+ let ax = [if (if ((S == "true"))
308339 then true
309340 else (S == "false"))
310341 then true
311342 else e("invalid vote")]
312- if ((ar == ar))
343+ if ((ax == ax))
313344 then {
314- let ay = valueOrElse(getString(bb), Y)
315- let az = split(ay, a)
316- let bd = if ((S == "true"))
317- then V((parseIntValue(az[1]) - T), parseIntValue(az[2]))
318- else V(parseIntValue(az[1]), (parseIntValue(az[2]) - T))
319-[DeleteEntry(au), StringEntry(bb, bd)]
345+ let aE = valueOrElse(getString(bh), Y)
346+ let aF = split(aE, a)
347+ let bj = if ((S == "true"))
348+ then V((parseIntValue(aF[1]) - T), parseIntValue(aF[2]))
349+ else V(parseIntValue(aF[1]), (parseIntValue(aF[2]) - T))
350+[DeleteEntry(aA), StringEntry(bh, bj)]
320351 }
321352 else throw("Strict value is not equal to itself.")
322353 }
323354 else throw("Strict value is not equal to itself.")
324355 }
325356
326357
327358
328-@Callable(aD)
359+@Callable(aJ)
329360 func finalize (B) = {
330- let am = valueOrElse(getBoolean(G(B)), false)
331- let an = valueOrElse(getBoolean(H(B)), false)
332- let aH = O(B)
333- let al = valueOrElse(getInteger(aH), 0)
334- let be = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
335- let bf = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
336- let bg = if (am)
337- then $Tuple3([DeleteEntry(G(B)), BooleanEntry(F(B), true)], true, be)
338- else $Tuple3([DeleteEntry(H(B)), DeleteEntry(F(B))], true, bf)
339- let bh = bg._1
340- let bi = bg._2
341- let bj = bg._3
342- let ay = valueOrElse(getString(U(B, al)), Y)
343- let az = split(ay, a)
344- let bk = parseIntValue(az[1])
345- let bl = parseIntValue(az[2])
346- let bm = (bk + bl)
347- let aT = valueOrErrorMessage(getInteger(ad(B, al)), c("voting end height not found"))
348- let ar = [if (if (am)
361+ let as = valueOrElse(getBoolean(G(B)), false)
362+ let at = valueOrElse(getBoolean(H(B)), false)
363+ let aN = O(B)
364+ let ar = valueOrElse(getInteger(aN), 0)
365+ let bk = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
366+ let bl = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
367+ let bm = if (as)
368+ then $Tuple3([DeleteEntry(G(B)), BooleanEntry(F(B), true)], true, bk)
369+ else $Tuple3([DeleteEntry(H(B)), DeleteEntry(F(B))], true, bl)
370+ let bn = bm._1
371+ let bo = bm._2
372+ let bp = bm._3
373+ let aE = valueOrElse(getString(U(B, ar)), Y)
374+ let aF = split(aE, a)
375+ let bq = parseIntValue(aF[1])
376+ let br = parseIntValue(aF[2])
377+ let bs = (bq + br)
378+ let aZ = valueOrErrorMessage(getInteger(ad(B, ar)), c("voting end height not found"))
379+ let ax = [if (if (as)
349380 then true
350- else an)
381+ else at)
351382 then true
352- else e("nothing to finalize"), if ((height >= aT))
383+ else e("nothing to finalize"), if ((height >= aZ))
353384 then true
354- else e("voting not finished"), if ((bm >= bj))
385+ else e("voting not finished"), if ((bs >= bp))
355386 then true
356387 else e("not enough votes")]
357- if ((ar == ar))
388+ if ((ax == ax))
358389 then {
359- let bn = if ((bl > bk))
390+ let bt = if ((br > bq))
360391 then {
361- let bo = invoke(u, "setVerified", [B, bi], nil)
362- if ((bo == bo))
392+ let bu = invoke(u, "setVerified", [B, bo], nil)
393+ if ((bu == bu))
363394 then {
364- let aU = valueOrElse(getInteger(M), 0)
365-[ScriptTransfer(aD.caller, aU, x)]
395+ let ba = valueOrElse(getInteger(M), 0)
396+[ScriptTransfer(aJ.caller, ba, x)]
366397 }
367398 else throw("Strict value is not equal to itself.")
368399 }
369400 else nil
370- (bh ++ bn)
401+ (bn ++ bt)
371402 }
372403 else throw("Strict value is not equal to itself.")
373404 }
374405
375406
376407
377-@Callable(aD)
408+@Callable(aJ)
378409 func claimREADONLY (B,C) = {
379- let bp = aD.caller
380- let bq = getString(K(B, C))
381- let ax = if (isDefined(bq))
382- then as(bp, B, C)
410+ let bv = aJ.caller
411+ let bw = getString(K(B, C))
412+ let aD = if (isDefined(bw))
413+ then ay(bv, B, C)
383414 else 0
384- $Tuple2(nil, ax)
415+ $Tuple2(nil, aD)
385416 }
386417
387418
388419
389-@Callable(aD)
420+@Callable(aJ)
390421 func claim (B,C) = {
391- let bp = aD.caller
392- let br = aa(bp, B, C)
393- let bs = getString(br)
394- let ar = [if ((bs == unit))
422+ let bv = aJ.caller
423+ let bx = aa(bv, B, C)
424+ let by = getString(bx)
425+ let ax = [if ((by == unit))
395426 then true
396427 else e("already claimed")]
397- if ((ar == ar))
428+ if ((ax == ax))
398429 then {
399- let ax = if ((as(bp, B, C) > 0))
400- then as(bp, B, C)
430+ let aD = if ((ay(bv, B, C) > 0))
431+ then ay(bv, B, C)
401432 else e("nothing to claim")
402- let bq = getString(K(B, C))
403- let bt = if (isDefined(bq))
433+ let bw = getString(K(B, C))
434+ let bz = if (isDefined(bw))
404435 then {
405- let bu = fromBase58String(value(bq))
406-[ScriptTransfer(bp, ax, bu), StringEntry(br, ac(ax))]
436+ let bA = fromBase58String(value(bw))
437+[ScriptTransfer(bv, aD, bA), StringEntry(bx, ac(aD))]
407438 }
408439 else e("nothing to claim")
409- bt
440+ bz
410441 }
411442 else throw("Strict value is not equal to itself.")
412443 }
413444
414445
446+@Verifier(bB)
447+func bC () = {
448+ let bD = {
449+ let h = ao()
450+ if ($isInstanceOf(h, "ByteVector"))
451+ then {
452+ let bE = h
453+ bE
454+ }
455+ else if ($isInstanceOf(h, "Unit"))
456+ then bB.senderPublicKey
457+ else throw("Match error")
458+ }
459+ sigVerify(bB.bodyBytes, bB.proofs[0], bD)
460+ }
461+

github/deemru/w8io/c3f4982 
116.07 ms