tx · 7syry9uVqSQqdyFsPovoeiwrPTEZtyhcdtvMuP4FDbRg

3PLFZ6T6AhuzZ9SMoFpHBx91oFyy68a3GCt:  -0.01400000 Waves

2019.10.11 14:16 [1745362] smart account 3PLFZ6T6AhuzZ9SMoFpHBx91oFyy68a3GCt > SELF 0.00000000 Waves

{ "type": 13, "id": "7syry9uVqSQqdyFsPovoeiwrPTEZtyhcdtvMuP4FDbRg", "fee": 1400000, "feeAssetId": null, "timestamp": 1570792629188, "version": 1, "sender": "3PLFZ6T6AhuzZ9SMoFpHBx91oFyy68a3GCt", "senderPublicKey": "Asi3vKEqgmq2AuW1fky6nxPgx65gB8esHy3DGsubEbkw", "proofs": [ "3GrhbNJAdaPynXgGgQ38ohNasHKd4aCdXNbufSNR2CeUCQKMQP1pskzieFogQ9FzXEzoEBPK2vT7UFTjrrmDKv2J" ], "script": "base64:AAIDAAAAAAAAAF4IARIECgIICBIFCgMICAgSBAoCCAgSBAoCCAgSBAoCCAgSBAoCCAgSAwoBCBIHCgUIAQEBCBIECgIICBIECgIICBIDCgEIEgYKBAgBCAgSAwoBCBIECgIICBIDCgEIAAAAYAAAAAAETk9ORQIAAAAEbm9uZQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAADbnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABQAAAANudW0BAAAAC2dldFN0ckJ5S2V5AAAAAQAAAANrZXkEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAETk9ORQUAAAADc3RyAQAAABJnZXRLZXlXaGl0ZWxpc3RSZWYAAAABAAAAB2FjY291bnQJAAEsAAAAAgIAAAAHd2xfcmVmXwUAAAAHYWNjb3VudAEAAAAVZ2V0S2V5V2hpdGVsaXN0U3RhdHVzAAAAAQAAAAdhY2NvdW50CQABLAAAAAICAAAAB3dsX3N0c18FAAAAB2FjY291bnQBAAAADWdldEtleUJhbGFuY2UAAAABAAAAB2FjY291bnQJAAEsAAAAAgIAAAAIYmFsYW5jZV8FAAAAB2FjY291bnQBAAAAEmdldEtleVdoaXRlbGlzdEJpbwAAAAEAAAAHYWNjb3VudAkAASwAAAACAgAAAAd3bF9iaW9fBQAAAAdhY2NvdW50AQAAABRnZXRLZXlXaGl0ZWxpc3RCbG9jawAAAAEAAAAHYWNjb3VudAkAASwAAAACAgAAAAd3bF9ibGtfBQAAAAdhY2NvdW50AQAAABBnZXRLZXlJdGVtQXV0aG9yAAAAAQAAAARpdGVtCQABLAAAAAICAAAAB2F1dGhvcl8FAAAABGl0ZW0BAAAAD2dldEtleUl0ZW1CbG9jawAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAZibG9ja18FAAAABGl0ZW0BAAAAGmdldEtleUl0ZW1Wb3RpbmdFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQABLAAAAAICAAAAEWV4cGlyYXRpb25fYmxvY2tfBQAAAARpdGVtAQAAAA5nZXRLZXlJdGVtQmFuawAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAViYW5rXwUAAAAEaXRlbQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAdzdGF0dXNfBQAAAARpdGVtAQAAAA5nZXRLZXlJdGVtRGF0YQAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAlkYXRhanNvbl8FAAAABGl0ZW0BAAAAEWdldEtleUNvbnRlc3REYXRhAAAAAQAAAARpdGVtCQABLAAAAAICAAAAEWNvbnRlc3RfZGF0YWpzb25fBQAAAARpdGVtAQAAABlnZXRLZXlJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQABLAAAAAICAAAAD2V4cGlyYXRpb25fb25lXwUAAAAEaXRlbQEAAAAZZ2V0S2V5SXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEAAAAEaXRlbQkAASwAAAACAgAAAA9leHBpcmF0aW9uX3R3b18FAAAABGl0ZW0BAAAAEmdldEtleUl0ZW1OQ29tbWl0cwAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAluY29tbWl0c18FAAAABGl0ZW0BAAAAF2dldEtleUl0ZW1BY2NSZXBvcnREYXRhAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAB3JlcG9ydF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAE2dldEtleUl0ZW1BY2NDb21taXQAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHY29tbWl0XwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAATZ2V0S2V5SXRlbUFjY1JldmVhbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdyZXZlYWxfBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABJnZXRLZXlJdGVtVm90ZXNZZXMAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAIY250X3llc18FAAAABGl0ZW0BAAAAEWdldEtleUl0ZW1Wb3Rlc05vAAAAAQAAAARpdGVtCQABLAAAAAICAAAAB2NudF9ub18FAAAABGl0ZW0BAAAAEmdldEtleUl0ZW1BY2NGaW5hbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZmaW5hbF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAFmdldEtleUl0ZW1GdW5kUG9zaXRpdmUAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAOcG9zaXRpdmVfZnVuZF8FAAAABGl0ZW0BAAAAFmdldEtleUl0ZW1GdW5kTmVnYXRpdmUAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAObmVnYXRpdmVfZnVuZF8FAAAABGl0ZW0BAAAAGWdldEtleUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAQAAABZnZXRLZXlJdGVtRnVuZFBvc2l0aXZlAAAAAQUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAAZZ2V0S2V5SXRlbUFjY0Z1bmROZWdhdGl2ZQAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkBAAAAFmdldEtleUl0ZW1GdW5kTmVnYXRpdmUAAAABBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3c0NudAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxyZXZpZXdzX2NudF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHcmV2aWV3XwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAASZ2V0S2V5VHJhbnNmZXJMaW5rAAAAAQAAAARoYXNoCQABLAAAAAICAAAADnRyYW5zZmVyX2xpbmtfBQAAAARoYXNoAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGV4dAAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkAASwAAAACCQABLAAAAAIJAQAAABNnZXRLZXlJdGVtQWNjUmV2aWV3AAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAIAAAAJX3RleHRfaWQ6BQAAAANjbnQBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdNb2RlAAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQABLAAAAAIJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAlfbW9kZV9pZDoFAAAAA2NudAEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RpZXIAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAAEsAAAAAgkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAACV90aWVyX2lkOgUAAAADY250AQAAABtnZXRLZXlJdGVtQWNjVm90ZVJldmlld1RleHQAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAAC192b3RlcmV2aWV3AQAAABxnZXRLZXlJdGVtQWNjV2hhbGVSZXZpZXdUZXh0AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAxfd2hhbGVyZXZpZXcBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAOYnV5b3V0X2Ftb3VudF8FAAAABGl0ZW0BAAAAFWdldEtleUl0ZW1BY2NXaW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl3aW5uaW5nc18FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAFWdldEtleUZyZWVJbnZpdGVDb3VudAAAAAACAAAAEWZyZWVfaW52aXRlX2NvdW50AQAAABVnZXRLZXlGcmVlSW52aXRlQmxvY2sAAAAAAgAAABFmcmVlX2ludml0ZV9ibG9jawEAAAAUZ2V0VmFsdWVXaGl0ZWxpc3RSZWYAAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABJnZXRLZXlXaGl0ZWxpc3RSZWYAAAABBQAAAAdhY2NvdW50AQAAABdnZXRWYWx1ZVdoaXRlbGlzdFN0YXR1cwAAAAEAAAAHYWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAAB2FjY291bnQBAAAAD2dldFZhbHVlQmFsYW5jZQAAAAEAAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAADWdldEtleUJhbGFuY2UAAAABBQAAAAdhY2NvdW50AQAAABRnZXRWYWx1ZVdoaXRlbGlzdEJpbwAAAAEAAAAHYWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEmdldEtleVdoaXRlbGlzdEJpbwAAAAEFAAAAB2FjY291bnQBAAAAFmdldFZhbHVlV2hpdGVsaXN0QmxvY2sAAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABRnZXRLZXlXaGl0ZWxpc3RCbG9jawAAAAEFAAAAB2FjY291bnQBAAAAEmdldFZhbHVlSXRlbUF1dGhvcgAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEGdldEtleUl0ZW1BdXRob3IAAAABBQAAAARpdGVtAQAAABFnZXRWYWx1ZUl0ZW1CbG9jawAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldEtleUl0ZW1CbG9jawAAAAEFAAAABGl0ZW0BAAAAHGdldFZhbHVlSXRlbVZvdGluZ0V4cGlyYXRpb24AAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABpnZXRLZXlJdGVtVm90aW5nRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0BAAAAEGdldFZhbHVlSXRlbUJhbmsAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA5nZXRLZXlJdGVtQmFuawAAAAEFAAAABGl0ZW0BAAAAEmdldFZhbHVlSXRlbVN0YXR1cwAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEGdldEtleUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtAQAAABBnZXRWYWx1ZUl0ZW1EYXRhAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAOZ2V0S2V5SXRlbURhdGEAAAABBQAAAARpdGVtAQAAABtnZXRWYWx1ZUl0ZW1Dcm93ZEV4cGlyYXRpb24AAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABlnZXRLZXlJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQUAAAAEaXRlbQEAAAAbZ2V0VmFsdWVJdGVtV2hhbGVFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAZZ2V0S2V5SXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0BAAAAFGdldFZhbHVlSXRlbU5Db21taXRzAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbU5Db21taXRzAAAAAQUAAAAEaXRlbQEAAAAVZ2V0VmFsdWVJdGVtQWNjQ29tbWl0AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABNnZXRLZXlJdGVtQWNjQ29tbWl0AAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAVZ2V0VmFsdWVJdGVtQWNjUmV2ZWFsAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABNnZXRLZXlJdGVtQWNjUmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAUZ2V0VmFsdWVJdGVtVm90ZXNZZXMAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJnZXRLZXlJdGVtVm90ZXNZZXMAAAABBQAAAARpdGVtAQAAABNnZXRWYWx1ZUl0ZW1Wb3Rlc05vAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAARZ2V0S2V5SXRlbVZvdGVzTm8AAAABBQAAAARpdGVtAQAAABRnZXRWYWx1ZUl0ZW1BY2NGaW5hbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbUFjY0ZpbmFsAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAYZ2V0VmFsdWVJdGVtRnVuZFBvc2l0aXZlAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAWZ2V0S2V5SXRlbUZ1bmRQb3NpdGl2ZQAAAAEFAAAABGl0ZW0BAAAAGGdldFZhbHVlSXRlbUZ1bmROZWdhdGl2ZQAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldEtleUl0ZW1GdW5kTmVnYXRpdmUAAAABBQAAAARpdGVtAQAAABtnZXRWYWx1ZUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldEtleUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AQAAABtnZXRWYWx1ZUl0ZW1BY2NGdW5kTmVnYXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldEtleUl0ZW1BY2NGdW5kTmVnYXRpdmUAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AQAAABlnZXRWYWx1ZUl0ZW1BY2NSZXZpZXdzQ250AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3c0NudAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAGWdldFZhbHVlSXRlbUFjY1Jldmlld1RleHQAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGV4dAAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQFAAAAA2NudAEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3TW9kZQAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdNb2RlAAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAUAAAADY250AQAAABlnZXRWYWx1ZUl0ZW1BY2NSZXZpZXdUaWVyAAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RpZXIAAAADBQAAAARpdGVtBQAAAAdhY2NvdW50BQAAAANjbnQBAAAAGGdldFZhbHVlSXRlbUJ1eW91dEFtb3VudAAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABBQAAAARpdGVtAQAAABdnZXRWYWx1ZUl0ZW1BY2NXaW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5SXRlbUFjY1dpbm5pbmdzAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAAAAAALV0hJVEVMSVNURUQCAAAACnJlZ2lzdGVyZWQAAAAAB0lOVklURUQCAAAAB2ludml0ZWQAAAAABVdIQUxFAgAAAAV3aGFsZQAAAAALU1BFTkRJTlZJVEUCAAAADHNwZW5kX2ludml0ZQAAAAAGQ09NTUlUAgAAAA12b3RpbmdfY29tbWl0AAAAAAZSRVZFQUwCAAAADXZvdGluZ19yZXZlYWwAAAAACEZFQVRVUkVEAgAAAAhmZWF0dXJlZAAAAAAIREVMSVNURUQCAAAACGRlbGlzdGVkAAAAAAdDQVNIT1VUAgAAAAdjYXNob3V0AAAAAAZCVVlPVVQCAAAABmJ1eW91dAAAAAAIRklOSVNIRUQCAAAACGZpbmlzaGVkAAAAAAdDTEFJTUVEAgAAAAdjbGFpbWVkAAAAAAhQT1NJVElWRQIAAAAIcG9zaXRpdmUAAAAACE5FR0FUSVZFAgAAAAhuZWdhdGl2ZQAAAAAHR0VORVNJUwIAAAAjM1A4RnZ5MXlEd05IdlZyYWJlNGVrNWI5ZEF3eEZqREtWN1IAAAAABUFETUlOAgAAACMzUDlORHh0OVk2ZVBmTTloa1F5c2dTdmJISnZpaHI1NloxOAAAAAAETEFCUwIAAAAjM1AzTVVDdkpqdmlKYXhNVWU3NDNMVmV6M3FUaGJMN1U4dVAAAAAABlZPVEVSUwAAAAAAAAAAAwAAAAAGUVVPUlVNAAAAAAAAAAACAAAAAAVUSUVSUwkABEwAAAACCQAAaAAAAAIAAAAAAAAAAAMAAAAAAAX14QAJAARMAAAAAgkAAGgAAAACAAAAAAAAAAAKAAAAAAAF9eEACQAETAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAABfXhAAkABEwAAAACCQAAaAAAAAIAAAAAAAAAASwAAAAAAAX14QAJAARMAAAAAgkAAGgAAAACAAAAAAAAAAPoAAAAAAAF9eEABQAAAANuaWwAAAAAB1ZPVEVCRVQJAABoAAAAAgAAAAAAAAAAAQAAAAAABfXhAAAAAAALQkxPQ0tTSU5EQVkAAAAAAAAABaAAAAAACk1VTFRJUExJRVIAAAAAAAAAAJYAAAAADU1BWEZSRUVJTlZJVEUAAAAAAAAAA+gAAAAACUlOVklURUZFRQAAAAAAAA27oAAAAAAPZnJlZUludml0ZUNvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5RnJlZUludml0ZUNvdW50AAAAAAAAAAAPZnJlZUludml0ZUJsb2NrCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5RnJlZUludml0ZUJsb2NrAAAAAAAAAA8AAAABaQEAAAAKaW52aXRldXNlcgAAAAIAAAAKbmV3YWNjb3VudAAAAARkYXRhBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACW5ld3N0YXR1cwkBAAAAF2dldFZhbHVlV2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAKbmV3YWNjb3VudAQAAAAKY3VycnN0YXR1cwkBAAAAF2dldFZhbHVlV2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAHYWNjb3VudAMDCQAAAAAAAAIFAAAACW5ld3N0YXR1cwUAAAALV0hJVEVMSVNURUQGCQAAAAAAAAIFAAAACW5ld3N0YXR1cwUAAAAFV0hBTEUJAAACAAAAAQIAAAAgVXNlciBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQDCQAAZgAAAAIIBQAAAAFpAAAAA2ZlZQUAAAAJSU5WSVRFRkVFCQAAAgAAAAECAAAADGZlZSBtb3JlIG1heAMDAwkBAAAAAiE9AAAAAgUAAAAKY3VycnN0YXR1cwUAAAALV0hJVEVMSVNURUQJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAAB0dFTkVTSVMHCQEAAAACIT0AAAACBQAAAApjdXJyc3RhdHVzBQAAAAVXSEFMRQcJAAACAAAAAQkAASwAAAACAgAAACxZb3VyIGFjY291bnQgc2hvdWxkIGJlIHdoaXRlbGlzdGVkLiBzdGF0dXM6IAUAAAAKY3VycnN0YXR1cwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RSZWYAAAABBQAAAApuZXdhY2NvdW50BQAAAAdhY2NvdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0S2V5V2hpdGVsaXN0QmlvAAAAAQUAAAAKbmV3YWNjb3VudAUAAAAEZGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAACm5ld2FjY291bnQFAAAAB0lOVklURUQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlGcmVlSW52aXRlQmxvY2sAAAAAAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2ZyZWVJbnZpdGVCbG9jawkAAGQAAAACBQAAAAZoZWlnaHQFAAAAC0JMT0NLU0lOREFZBQAAAA9mcmVlSW52aXRlQmxvY2sJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlGcmVlSW52aXRlQ291bnQAAAAAAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2ZyZWVJbnZpdGVCbG9jawUAAAANTUFYRlJFRUlOVklURQkAAGUAAAACBQAAAA9mcmVlSW52aXRlQ291bnQAAAAAAAAAAAEFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQDAwkAAAAAAAACCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAAAwkAAGYAAAACBQAAAA9mcmVlSW52aXRlQ291bnQAAAAAAAAAAAAGCQAAZgAAAAIFAAAABmhlaWdodAUAAAAPZnJlZUludml0ZUJsb2NrBwgFAAAAAWkAAAADZmVlAAAAAAAAAAAABQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAMc2lnbnVwYnlsaW5rAAAAAwAAAARoYXNoAAAABGRhdGEAAAAEdHlwZQQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMJAQAAABdnZXRWYWx1ZVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAABGhhc2gDCQEAAAACIT0AAAACBQAAAAZzdGF0dXMFAAAAB0lOVklURUQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKFJlZmVycmFsIGludml0ZSBuZWVkZWQuIEN1cnJlbnQgc3RhdHVzOiAFAAAABnN0YXR1cwIAAAAGLCBrZXk6CQEAAAAVZ2V0S2V5V2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAEaGFzaAIAAAAKLCBhY2NvdW50OgUAAAAEaGFzaAMJAABmAAAAAggFAAAAAWkAAAADZmVlBQAAAAlJTlZJVEVGRUUJAAACAAAAAQIAAAAMZmVlIG1vcmUgbWF4CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEtleVdoaXRlbGlzdEJpbwAAAAEFAAAAB2FjY291bnQFAAAABGRhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRLZXlXaGl0ZWxpc3RCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAAB2FjY291bnQDCQAAAAAAAAIFAAAABHR5cGUFAAAABVdIQUxFBQAAAAVXSEFMRQUAAAALV0hJVEVMSVNURUQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RSZWYAAAABBQAAAAdhY2NvdW50CQEAAAAUZ2V0VmFsdWVXaGl0ZWxpc3RSZWYAAAABBQAAAARoYXNoCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5RnJlZUludml0ZUJsb2NrAAAAAAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA9mcmVlSW52aXRlQmxvY2sJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAtCTE9DS1NJTkRBWQUAAAAPZnJlZUludml0ZUJsb2NrCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5RnJlZUludml0ZUNvdW50AAAAAAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA9mcmVlSW52aXRlQmxvY2sFAAAADU1BWEZSRUVJTlZJVEUJAABlAAAAAgUAAAAPZnJlZUludml0ZUNvdW50AAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50AwMJAAAAAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAMJAABmAAAAAgUAAAAPZnJlZUludml0ZUNvdW50AAAAAAAAAAAABgkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2ZyZWVJbnZpdGVCbG9jawcIBQAAAAFpAAAAA2ZlZQAAAAAAAAAAAAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAABnNpZ251cAAAAAIAAAAEZGF0YQAAAAR0eXBlBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABnN0YXR1cwkBAAAAF2dldFZhbHVlV2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAHYWNjb3VudAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAROT05FCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAChSZWZlcnJhbCBpbnZpdGUgbmVlZGVkLiBDdXJyZW50IHN0YXR1czogBQAAAAZzdGF0dXMCAAAABiwga2V5OgkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAAB2FjY291bnQCAAAACiwgYWNjb3VudDoFAAAAB2FjY291bnQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAAdhY2NvdW50BQAAAARkYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAUZ2V0S2V5V2hpdGVsaXN0QmxvY2sAAAABBQAAAAdhY2NvdW50BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50AwkAAAAAAAACBQAAAAR0eXBlBQAAAAVXSEFMRQUAAAAFV0hBTEUFAAAAC1dISVRFTElTVEVEBQAAAANuaWwAAAABaQEAAAAKdXNlcnVwZGF0ZQAAAAIAAAAEZGF0YQAAAAR0eXBlBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQAAAAAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAAdhY2NvdW50BQAAAAROT05FCQAAAgAAAAECAAAAD3VzZXIgbm90IHNpZ251cAMJAABmAAAAAggFAAAAAWkAAAADZmVlBQAAAAlJTlZJVEVGRUUJAAACAAAAAQIAAAAMZmVlIG1vcmUgbWF4CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEtleVdoaXRlbGlzdEJpbwAAAAEFAAAAB2FjY291bnQFAAAABGRhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50AwkAAAAAAAACBQAAAAR0eXBlBQAAAAVXSEFMRQUAAAAFV0hBTEUFAAAAC1dISVRFTElTVEVECQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5RnJlZUludml0ZUJsb2NrAAAAAAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA9mcmVlSW52aXRlQmxvY2sJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAtCTE9DS1NJTkRBWQUAAAAPZnJlZUludml0ZUJsb2NrCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5RnJlZUludml0ZUNvdW50AAAAAAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA9mcmVlSW52aXRlQmxvY2sFAAAADU1BWEZSRUVJTlZJVEUJAABlAAAAAgUAAAAPZnJlZUludml0ZUNvdW50AAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50AwMJAAAAAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAMJAABmAAAAAgUAAAAPZnJlZUludml0ZUNvdW50AAAAAAAAAAAABgkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2ZyZWVJbnZpdGVCbG9jawcIBQAAAAFpAAAAA2ZlZQAAAAAAAAAAAAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACnByb2p1cGRhdGUAAAACAAAABGl0ZW0AAAAEZGF0YQQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgkBAAAAEmdldFZhbHVlSXRlbUF1dGhvcgAAAAEFAAAABGl0ZW0FAAAAB2FjY291bnQJAAACAAAAAQIAAAARWW91J3JlIG5vdCBhdXRob3IDCQAAZgAAAAIIBQAAAAFpAAAAA2ZlZQUAAAAJSU5WSVRFRkVFCQAAAgAAAAECAAAADGZlZSBtb3JlIG1heAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA5nZXRLZXlJdGVtRGF0YQAAAAEFAAAABGl0ZW0FAAAABGRhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlGcmVlSW52aXRlQmxvY2sAAAAAAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2ZyZWVJbnZpdGVCbG9jawkAAGQAAAACBQAAAAZoZWlnaHQFAAAAC0JMT0NLU0lOREFZBQAAAA9mcmVlSW52aXRlQmxvY2sJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlGcmVlSW52aXRlQ291bnQAAAAAAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAD2ZyZWVJbnZpdGVCbG9jawUAAAANTUFYRlJFRUlOVklURQkAAGUAAAACBQAAAA9mcmVlSW52aXRlQ291bnQAAAAAAAAAAAEFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQDAwkAAAAAAAACCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAAAwkAAGYAAAACBQAAAA9mcmVlSW52aXRlQ291bnQAAAAAAAAAAAAGCQAAZgAAAAIFAAAABmhlaWdodAUAAAAPZnJlZUludml0ZUJsb2NrBwgFAAAAAWkAAAADZmVlAAAAAAAAAAAABQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAASY29udGVzdEFkZE9yVXBkYXRlAAAAAgAAAARpdGVtAAAABGRhdGEEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAABUFETUlOCQAAAgAAAAECAAAAEFlvdSdyZSBub3QgYWRtaW4JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABFnZXRLZXlDb250ZXN0RGF0YQAAAAEFAAAABGl0ZW0FAAAABGRhdGEFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAEAAAAHYWRkcmVzcwQAAAAGYW1vdW50CQEAAAAPZ2V0VmFsdWVCYWxhbmNlAAAAAQUAAAAHYWRkcmVzcwMJAABnAAAAAgAAAAAAAAAAAAUAAAAGYW1vdW50CQAAAgAAAAECAAAAEk5vdCBlbm91Z2ggYmFsYW5jZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA1nZXRLZXlCYWxhbmNlAAAAAQUAAAAHYWRkcmVzcwAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAHYWRkaXRlbQAAAAUAAAAEaXRlbQAAAAlleHBWb3RpbmcAAAAIZXhwQ3Jvd2QAAAAIZXhwV2hhbGUAAAAEZGF0YQQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAgY2FuIHVzZSB3YXZlcyBvbmx5IGF0IHRoZSBtb21lbnQDCQAAZgAAAAIIBQAAAAFpAAAAA2ZlZQUAAAAJSU5WSVRFRkVFCQAAAgAAAAECAAAADGZlZSBtb3JlIG1heAMJAQAAAAEhAAAAAQMDCQAAZgAAAAIFAAAACWV4cFZvdGluZwAAAAAAAAAAAgkAAGYAAAACBQAAAAhleHBDcm93ZAUAAAAJZXhwVm90aW5nBwkAAGYAAAACBQAAAAhleHBXaGFsZQUAAAAIZXhwQ3Jvd2QHCQAAAgAAAAECAAAAGUluY29ycmVjdCB0aW1lIHBhcmFtZXRlcnMDCQEAAAACIT0AAAACCQEAAAASZ2V0VmFsdWVJdGVtQXV0aG9yAAAAAQUAAAAEaXRlbQUAAAAETk9ORQkAAAIAAAABAgAAABJJdGVtIGFscmVhZHkgZXhpc3QJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAQZ2V0S2V5SXRlbUF1dGhvcgAAAAEFAAAABGl0ZW0FAAAAB2FjY291bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRLZXlJdGVtQmxvY2sAAAABBQAAAARpdGVtBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABpnZXRLZXlJdGVtVm90aW5nRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0JAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAlleHBWb3RpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQUAAAAIRkVBVFVSRUQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA5nZXRLZXlJdGVtRGF0YQAAAAEFAAAABGl0ZW0FAAAABGRhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABlnZXRLZXlJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQUAAAAEaXRlbQkAAGQAAAACBQAAAAZoZWlnaHQFAAAACGV4cENyb3dkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAZZ2V0S2V5SXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0JAABkAAAAAgUAAAAGaGVpZ2h0BQAAAAhleHBXaGFsZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleUZyZWVJbnZpdGVCbG9jawAAAAADCQAAZgAAAAIFAAAABmhlaWdodAUAAAAPZnJlZUludml0ZUJsb2NrCQAAZAAAAAIFAAAABmhlaWdodAUAAAALQkxPQ0tTSU5EQVkFAAAAD2ZyZWVJbnZpdGVCbG9jawkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleUZyZWVJbnZpdGVDb3VudAAAAAADCQAAZgAAAAIFAAAABmhlaWdodAUAAAAPZnJlZUludml0ZUJsb2NrBQAAAA1NQVhGUkVFSU5WSVRFCQAAZQAAAAIFAAAAD2ZyZWVJbnZpdGVDb3VudAAAAAAAAAAAAQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAMDCQAAAAAAAAIJAQAAAAx3YXZlc0JhbGFuY2UAAAABCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQAAAAAAAAAAAADCQAAZgAAAAIFAAAAD2ZyZWVJbnZpdGVDb3VudAAAAAAAAAAAAAYJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA9mcmVlSW52aXRlQmxvY2sHCAUAAAABaQAAAANmZWUAAAAAAAAAAAAFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAA1yZXBvcnRQcm9qZWN0AAAAAgAAAARpdGVtAAAABGRhdGEEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAF2dldEtleUl0ZW1BY2NSZXBvcnREYXRhAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAUAAAAEZGF0YQUAAAADbmlsAAAAAWkBAAAACmxhYnNkb25hdGUAAAACAAAABGl0ZW0AAAAGcmV2aWV3BAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACBjYW4gdXNlIHdhdmVzIG9ubHkgYXQgdGhlIG1vbWVudAMJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAABExBQlMJAAACAAAAAQIAAAAsbGFicyBkb25hdGlvbiBpcyBhbGxvd2VkIG9ubHkgZm9yIHdhdmVzIGxhYnMDCQEAAAACIT0AAAACCQEAAAASZ2V0VmFsdWVJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQUAAAAGQlVZT1VUCQAAAgAAAAECAAAAHEludmVzdGVtZW50IGhhcyBhbHJlYWR5IGRvbmUEAAAAA2NudAkAAGQAAAACCQEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3c0NudAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQAAAAAAAAAAAEEAAAAD25ld3Bvc2l0aXZlZnVuZAkAAGQAAAACCQEAAAAYZ2V0VmFsdWVJdGVtRnVuZFBvc2l0aXZlAAAAAQUAAAAEaXRlbQgFAAAAA3BtdAAAAAZhbW91bnQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3c0NudAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQFAAAAA2NudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGWdldEtleUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50CQAAZAAAAAIJAQAAABtnZXRWYWx1ZUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFmdldEtleUl0ZW1GdW5kUG9zaXRpdmUAAAABBQAAAARpdGVtBQAAAA9uZXdwb3NpdGl2ZWZ1bmQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGV4dAAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQJAAGkAAAAAQUAAAADY250BQAAAAZyZXZpZXcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3TW9kZQAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQJAAGkAAAAAQUAAAADY250BQAAAAhQT1NJVElWRQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdUaWVyAAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAaQAAAABBQAAAANjbnQAAAAAAAAAAAUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA1nZXRLZXlCYWxhbmNlAAAAAQkBAAAAEmdldFZhbHVlSXRlbUF1dGhvcgAAAAEFAAAABGl0ZW0JAABkAAAAAgkBAAAAD2dldFZhbHVlQmFsYW5jZQAAAAEJAQAAABJnZXRWYWx1ZUl0ZW1BdXRob3IAAAABBQAAAARpdGVtCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldEtleUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBQAAAAdDQVNIT1VUBQAAAANuaWwAAAABaQEAAAAMY2hhbmdlU3RhdHVzAAAAAQAAAARpdGVtBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAARMQUJTCQAAAgAAAAECAAAAKmxhYnMgY2hhbmdlIGlzIGFsbG93ZWQgb25seSBmb3Igd2F2ZXMgbGFicwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldEtleUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBQAAAAdDQVNIT1VUBQAAAANuaWwAAAABaQEAAAAGZG9uYXRlAAAABAAAAARpdGVtAAAABHRpZXIAAAAEbW9kZQAAAAZyZXZpZXcEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAIGNhbiB1c2Ugd2F2ZXMgb25seSBhdCB0aGUgbW9tZW50BAAAAANjbnQJAABkAAAAAgkBAAAAGWdldFZhbHVlSXRlbUFjY1Jldmlld3NDbnQAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AAAAAAAAAAABBAAAAA9uZXduZWdhdGl2ZWZ1bmQJAABkAAAAAgkBAAAAGGdldFZhbHVlSXRlbUZ1bmROZWdhdGl2ZQAAAAEFAAAABGl0ZW0JAABoAAAAAgMJAAAAAAAAAgUAAAAEbW9kZQUAAAAITkVHQVRJVkUAAAAAAAAAAAEAAAAAAAAAAAAIBQAAAANwbXQAAAAGYW1vdW50BAAAAA9uZXdwb3NpdGl2ZWZ1bmQJAABkAAAAAgkBAAAAGGdldFZhbHVlSXRlbUZ1bmRQb3NpdGl2ZQAAAAEFAAAABGl0ZW0JAABoAAAAAgMJAAAAAAAAAgUAAAAEbW9kZQUAAAAIUE9TSVRJVkUAAAAAAAAAAAEAAAAAAAAAAAAIBQAAAANwbXQAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgkBAAAAEmdldFZhbHVlSXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0FAAAACEZFQVRVUkVECQAAAgAAAAECAAAAKFRoZSBwcm9qZWN0IGhhc24ndCBhY2NlcHRlZCBieSBjb21tdW5pdHkDCQAAZwAAAAIFAAAABmhlaWdodAkBAAAAG2dldFZhbHVlSXRlbUNyb3dkRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0JAAACAAAAAQIAAAAlVGhlIHRpbWUgZm9yIGNyb3dkZnVuZGluZyBoYXMgZXhwaXJlZAMJAABnAAAAAgUAAAAPbmV3bmVnYXRpdmVmdW5kBQAAAA9uZXdwb3NpdGl2ZWZ1bmQJAAACAAAAAQIAAAAwTmVnYXRpdmUgZnVuZCBjYW4ndCBiZSBoaWdoZXIgdGhhbiBwb3NpdGl2ZSBmdW5kAwMJAQAAAAIhPQAAAAIFAAAABG1vZGUFAAAACFBPU0lUSVZFCQEAAAACIT0AAAACBQAAAARtb2RlBQAAAAhORUdBVElWRQcJAAACAAAAAQIAAAAUV3JvbmcgbW9kZSBwYXJhbWV0ZXIDCQAAAAAAAAIJAQAAABJnZXRWYWx1ZUl0ZW1BdXRob3IAAAABBQAAAARpdGVtBQAAAAdhY2NvdW50CQAAAgAAAAECAAAAGENhbid0IGRvbmF0ZSBvd24gcHJvamVjdAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50CQABkQAAAAIFAAAABVRJRVJTCQAAZQAAAAIFAAAABHRpZXIAAAAAAAAAAAEJAAACAAAAAQkAASwAAAACAgAAACpUaGUgcGF5bWVudCBtdXN0IGJlIGVxdWFsIHRvIHRpZXIgYW1vdW50OiAJAAGkAAAAAQkAAZEAAAACBQAAAAVUSUVSUwkAAGUAAAACBQAAAAR0aWVyAAAAAAAAAAABCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld3NDbnQAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50BQAAAANjbnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABlnZXRLZXlJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAGQAAAACCQEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAGgAAAACAwkAAAAAAAACBQAAAARtb2RlBQAAAAhQT1NJVElWRQAAAAAAAAAAAQAAAAAAAAAAAAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABlnZXRLZXlJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAGQAAAACCQEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAGgAAAACAwkAAAAAAAACBQAAAARtb2RlBQAAAAhORUdBVElWRQAAAAAAAAAAAQAAAAAAAAAAAAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABZnZXRLZXlJdGVtRnVuZFBvc2l0aXZlAAAAAQUAAAAEaXRlbQUAAAAPbmV3cG9zaXRpdmVmdW5kCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAWZ2V0S2V5SXRlbUZ1bmROZWdhdGl2ZQAAAAEFAAAABGl0ZW0FAAAAD25ld25lZ2F0aXZlZnVuZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdUZXh0AAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAaQAAAABBQAAAANjbnQFAAAABnJldmlldwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdNb2RlAAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAkAAaQAAAABBQAAAANjbnQFAAAABG1vZGUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGllcgAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQJAAGkAAAAAQUAAAADY250BQAAAAR0aWVyBQAAAANuaWwAAAABaQEAAAAFd2hhbGUAAAABAAAABGl0ZW0EAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAIGNhbiB1c2Ugd2F2ZXMgb25seSBhdCB0aGUgbW9tZW50AwkBAAAAAiE9AAAAAgUAAAAHYWNjb3VudAUAAAAETEFCUwkAAAIAAAABAgAAACxsYWJzIGRvbmF0aW9uIGlzIGFsbG93ZWQgb25seSBmb3Igd2F2ZXMgbGFicwMJAQAAAAIhPQAAAAIJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBQAAAAhGRUFUVVJFRAkAAAIAAAABAgAAAChUaGUgcHJvamVjdCBoYXNuJ3QgYWNjZXB0ZWQgYnkgY29tbXVuaXR5AwkAAGYAAAACCQEAAAAbZ2V0VmFsdWVJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQUAAAAEaXRlbQUAAAAGaGVpZ2h0CQAAAgAAAAECAAAALVRoZSB0aW1lIGZvciBjcm93ZGZ1bmRpbmcgaGFzIG5vdCBleHBpcmVkIHlldAMJAABmAAAAAgUAAAAGaGVpZ2h0CQEAAAAbZ2V0VmFsdWVJdGVtV2hhbGVFeHBpcmF0aW9uAAAAAQUAAAAEaXRlbQkAAAIAAAABAgAAAB5UaGUgdGltZSBmb3IgZ3JhbnQgaGFzIGV4cGlyZWQDCQAAAAAAAAIJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBQAAAAZCVVlPVVQJAAACAAAAAQIAAAAcSW52ZXN0ZW1lbnQgaGFzIGFscmVhZHkgZG9uZQMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50CQAAaQAAAAIJAABoAAAAAgkBAAAAGGdldFZhbHVlSXRlbUZ1bmRQb3NpdGl2ZQAAAAEFAAAABGl0ZW0FAAAACk1VTFRJUExJRVIAAAAAAAAAAGQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAHkludmVzdGVtZW50IG11c3QgYmUgbW9yZSB0aGFuIAkAAaQAAAABBQAAAApNVUxUSVBMSUVSAgAAABQlIG9mIHN1cHBvcnRlcyBmdW5kcwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldEtleUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBQAAAAZCVVlPVVQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA1nZXRLZXlCYWxhbmNlAAAAAQkBAAAAEmdldFZhbHVlSXRlbUF1dGhvcgAAAAEFAAAABGl0ZW0JAABkAAAAAgkBAAAAD2dldFZhbHVlQmFsYW5jZQAAAAEJAQAAABJnZXRWYWx1ZUl0ZW1BdXRob3IAAAABBQAAAARpdGVtCQEAAAAYZ2V0VmFsdWVJdGVtRnVuZFBvc2l0aXZlAAAAAQUAAAAEaXRlbQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABBQAAAARpdGVtCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEtleUl0ZW1BY2NGaW5hbAAAAAIFAAAABGl0ZW0JAQAAABJnZXRWYWx1ZUl0ZW1BdXRob3IAAAABBQAAAARpdGVtBQAAAAdDTEFJTUVEBQAAAANuaWwAAAABaQEAAAANY2xhaW13aW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50BAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBAAAAAhpc2JheW91dAMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAZCVVlPVVQAAAAAAAAAAAEAAAAAAAAAAAAEAAAACGlzY3Jvd2RmAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZCVVlPVVQAAAAAAAAAAAEAAAAAAAAAAAAEAAAADHBvc2l0aXZlZnVuZAkAAGUAAAACCQEAAAAYZ2V0VmFsdWVJdGVtRnVuZFBvc2l0aXZlAAAAAQUAAAAEaXRlbQkBAAAAG2dldFZhbHVlSXRlbUFjY0Z1bmRQb3NpdGl2ZQAAAAIFAAAABGl0ZW0FAAAABExBQlMEAAAADG5lZ2F0aXZlZnVuZAkBAAAAGGdldFZhbHVlSXRlbUZ1bmROZWdhdGl2ZQAAAAEFAAAABGl0ZW0EAAAABXNoYXJlCQAAZAAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAhpc2JheW91dAkAAGgAAAACCQEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAAAAAAAAAAAZAMJAABnAAAAAgAAAAAAAAAAAAUAAAAMcG9zaXRpdmVmdW5kAAAAAAAAAAABBQAAAAxwb3NpdGl2ZWZ1bmQJAABpAAAAAgkAAGgAAAACBQAAAAhpc2Nyb3dkZgkAAGgAAAACCQEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAAAAAAAAAAAZAMJAABnAAAAAgAAAAAAAAAAAAUAAAAMbmVnYXRpdmVmdW5kAAAAAAAAAAABBQAAAAxuZWdhdGl2ZWZ1bmQEAAAACXRtcG5lZ3dpbgkAAGkAAAACCQAAaAAAAAIFAAAADG5lZ2F0aXZlZnVuZAUAAAAKTVVMVElQTElFUgAAAAAAAAAAZAQAAAAJYmV0cHJvZml0CQAAZAAAAAIJAABoAAAAAgUAAAAIaXNiYXlvdXQJAABpAAAAAgkAAGgAAAACBQAAAAVzaGFyZQUAAAAMbmVnYXRpdmVmdW5kAAAAAAAAAABkCQAAaAAAAAIFAAAACGlzY3Jvd2RmCQAAaQAAAAIJAABoAAAAAgUAAAAFc2hhcmUDCQAAZgAAAAIFAAAADHBvc2l0aXZlZnVuZAUAAAAJdG1wbmVnd2luBQAAAAl0bXBuZWd3aW4FAAAADHBvc2l0aXZlZnVuZAAAAAAAAAAAZAQAAAAJcm9pcHJvZml0CQAAaAAAAAIFAAAACGlzYmF5b3V0CQAAaQAAAAIJAABoAAAAAgkBAAAAG2dldFZhbHVlSXRlbUFjY0Z1bmRQb3NpdGl2ZQAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQFAAAACk1VTFRJUExJRVIAAAAAAAAAAGQEAAAADGF1dGhvcnByb2ZpdAkAAGgAAAACCQAAaAAAAAIFAAAACGlzY3Jvd2RmAwkAAAAAAAACCQEAAAASZ2V0VmFsdWVJdGVtQXV0aG9yAAAAAQUAAAAEaXRlbQUAAAAHYWNjb3VudAAAAAAAAAAAAQAAAAAAAAAAAAMJAABmAAAAAgUAAAAMcG9zaXRpdmVmdW5kBQAAAAl0bXBuZWd3aW4JAABlAAAAAgUAAAAMcG9zaXRpdmVmdW5kBQAAAAl0bXBuZWd3aW4AAAAAAAAAAAADCQEAAAACIT0AAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAETEFCUwkAAAIAAAABAgAAAAxjYWxsZXIgZXJyb3IDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAIREVMSVNURUQJAAACAAAAAQIAAAAoVGhlIHByb2plY3QgaGFzbid0IGFjY2VwdGVkIGJ5IGNvbW11bml0eQMJAAAAAAAAAgUAAAAHYWNjb3VudAUAAAAETEFCUwkAAAIAAAABAgAAAA1hY2NvdW50IGVycm9yAwkAAAAAAAACCQEAAAAUZ2V0VmFsdWVJdGVtQWNjRmluYWwAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50BQAAAAdDTEFJTUVECQAAAgAAAAECAAAAEVN0YXR1cyBpcyBjbGFpbWVkAwMDCQAAAAAAAAIFAAAACXJvaXByb2ZpdAAAAAAAAAAAAAkAAAAAAAACBQAAAAliZXRwcm9maXQAAAAAAAAAAAAHCQAAAAAAAAIFAAAADGF1dGhvcnByb2ZpdAAAAAAAAAAAAAcJAAACAAAAAQIAAAAVVGhlIHNoYXJlIGVxdWFscyB6ZXJvAwMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAGQlVZT1VUCQAAZwAAAAIJAQAAABtnZXRWYWx1ZUl0ZW1XaGFsZUV4cGlyYXRpb24AAAABBQAAAARpdGVtBQAAAAZoZWlnaHQHCQAAAgAAAAECAAAAJlRoZSB0aW1lIGZvciBncmFudCBoYXMgbm90IGV4cGlyZWQgeWV0AwkAAGcAAAACAAAAAAAAAAAACQAAZAAAAAIFAAAADHBvc2l0aXZlZnVuZAUAAAAMbmVnYXRpdmVmdW5kCQAAAgAAAAECAAAAGlRoZSBjYW1wYWlnbiB3YXNuJ3QgYWN0aXZlCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAANZ2V0S2V5QmFsYW5jZQAAAAEFAAAAB2FjY291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAQAAAA9nZXRWYWx1ZUJhbGFuY2UAAAABBQAAAAdhY2NvdW50BQAAAAliZXRwcm9maXQFAAAACXJvaXByb2ZpdAUAAAAMYXV0aG9ycHJvZml0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0S2V5SXRlbUFjY0ZpbmFsAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAUAAAAHQ0xBSU1FRAUAAAADbmlsAAAAAWkBAAAACHRyYW5zZmVyAAAAAQAAAAdhY2NvdW50BAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAgY2FuIHVzZSB3YXZlcyBvbmx5IGF0IHRoZSBtb21lbnQJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50CAUAAAADcG10AAAABmFtb3VudAUAAAAEdW5pdAUAAAADbmlsAAAAAHcGouM=", "chainId": 87, "height": 1745362, "spentComplexity": 0 } View: original | compacted Prev: 9TKPFqjPjdRBowphLqNj9jMMhT9wGyoNSyrL4JNzpMXZ Next: CsMHTdZsGmKmCyWD7MqCAb6rD8VcXbz1rTijXMZZHWz6 Diff:
OldNewDifferences
263263
264264 let TIERS = [(3 * 100000000), (10 * 100000000), (100 * 100000000), (300 * 100000000), (1000 * 100000000)]
265265
266-let LISTINGFEE = (1 * 100000000)
267-
268266 let VOTEBET = (1 * 100000000)
269267
270268 let BLOCKSINDAY = 1440
271269
272270 let MULTIPLIER = 150
273271
274-let MAXFREEINVITE = 1500
272+let MAXFREEINVITE = 1000
275273
276274 let INVITEFEE = 900000
277275
288286 then true
289287 else (newstatus == WHALE))
290288 then throw("User has already been registered")
291- else if (if (if ((currstatus != WHITELISTED))
292- then (account != GENESIS)
293- else false)
294- then (currstatus != WHALE)
295- else false)
296- then throw(("Your account should be whitelisted. status: " + currstatus))
297- else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED)])
289+ else if ((i.fee > INVITEFEE))
290+ then throw("fee more max")
291+ else if (if (if ((currstatus != WHITELISTED))
292+ then (account != GENESIS)
293+ else false)
294+ then (currstatus != WHALE)
295+ else false)
296+ then throw(("Your account should be whitelisted. status: " + currstatus))
297+ else ScriptResult(WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
298+ then (height + BLOCKSINDAY)
299+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
300+ then MAXFREEINVITE
301+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
302+ then if ((freeInviteCount > 0))
303+ then true
304+ else (height > freeInviteBlock)
305+ else false)
306+ then i.fee
307+ else 0, unit)]))
298308 }
299309
300310
309319 then throw("fee more max")
310320 else ScriptResult(WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
311321 then WHALE
312- else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
322+ else WHITELISTED), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
313323 then (height + BLOCKSINDAY)
314324 else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
315325 then MAXFREEINVITE
342352 let account = toBase58String(i.caller.bytes)
343353 if ((getKeyWhitelistBio(account) == NONE))
344354 then throw("user not signup")
345- else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
346- then WHALE
347- else WHITELISTED)])
355+ else if ((i.fee > INVITEFEE))
356+ then throw("fee more max")
357+ else ScriptResult(WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
358+ then WHALE
359+ else WHITELISTED), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
360+ then (height + BLOCKSINDAY)
361+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
362+ then MAXFREEINVITE
363+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
364+ then if ((freeInviteCount > 0))
365+ then true
366+ else (height > freeInviteBlock)
367+ else false)
368+ then i.fee
369+ else 0, unit)]))
348370 }
349371
350372
354376 let account = toBase58String(i.caller.bytes)
355377 if ((getValueItemAuthor(item) != account))
356378 then throw("You're not author")
357- else WriteSet([DataEntry(getKeyItemData(item), data)])
379+ else if ((i.fee > INVITEFEE))
380+ then throw("fee more max")
381+ else ScriptResult(WriteSet([DataEntry(getKeyItemData(item), data), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
382+ then (height + BLOCKSINDAY)
383+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
384+ then MAXFREEINVITE
385+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
386+ then if ((freeInviteCount > 0))
387+ then true
388+ else (height > freeInviteBlock)
389+ else false)
390+ then i.fee
391+ else 0, unit)]))
358392 }
359393
360394
385419 let pmt = extract(i.payment)
386420 if (isDefined(pmt.assetId))
387421 then throw("can use waves only at the moment")
388- else if ((pmt.amount != LISTINGFEE))
389- then throw(((("Please pay exact amount for the listing: " + toString(LISTINGFEE)) + ", actual payment is: ") + toString(pmt.amount)))
422+ else if ((i.fee > INVITEFEE))
423+ then throw("fee more max")
390424 else if (!(if (if ((expVoting > 2))
391425 then (expCrowd > expVoting)
392426 else false)
395429 then throw("Incorrect time parameters")
396430 else if ((getValueItemAuthor(item) != NONE))
397431 then throw("Item already exist")
398- else WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemBank(item), LISTINGFEE), DataEntry(getKeyItemStatus(item), FEATURED), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale))])
432+ else ScriptResult(WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemStatus(item), FEATURED), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
433+ then (height + BLOCKSINDAY)
434+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
435+ then MAXFREEINVITE
436+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
437+ then if ((freeInviteCount > 0))
438+ then true
439+ else (height > freeInviteBlock)
440+ else false)
441+ then i.fee
442+ else 0, unit)]))
399443 }
400444
401445
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "none"
55
66 func getNumberByKey (key) = {
77 let num = match getInteger(this, key) {
88 case a: Int =>
99 a
1010 case _ =>
1111 0
1212 }
1313 num
1414 }
1515
1616
1717 func getStrByKey (key) = {
1818 let str = match getString(this, key) {
1919 case a: String =>
2020 a
2121 case _ =>
2222 NONE
2323 }
2424 str
2525 }
2626
2727
2828 func getKeyWhitelistRef (account) = ("wl_ref_" + account)
2929
3030
3131 func getKeyWhitelistStatus (account) = ("wl_sts_" + account)
3232
3333
3434 func getKeyBalance (account) = ("balance_" + account)
3535
3636
3737 func getKeyWhitelistBio (account) = ("wl_bio_" + account)
3838
3939
4040 func getKeyWhitelistBlock (account) = ("wl_blk_" + account)
4141
4242
4343 func getKeyItemAuthor (item) = ("author_" + item)
4444
4545
4646 func getKeyItemBlock (item) = ("block_" + item)
4747
4848
4949 func getKeyItemVotingExpiration (item) = ("expiration_block_" + item)
5050
5151
5252 func getKeyItemBank (item) = ("bank_" + item)
5353
5454
5555 func getKeyItemStatus (item) = ("status_" + item)
5656
5757
5858 func getKeyItemData (item) = ("datajson_" + item)
5959
6060
6161 func getKeyContestData (item) = ("contest_datajson_" + item)
6262
6363
6464 func getKeyItemCrowdExpiration (item) = ("expiration_one_" + item)
6565
6666
6767 func getKeyItemWhaleExpiration (item) = ("expiration_two_" + item)
6868
6969
7070 func getKeyItemNCommits (item) = ("ncommits_" + item)
7171
7272
7373 func getKeyItemAccReportData (item,account) = ((("report_" + item) + "_") + account)
7474
7575
7676 func getKeyItemAccCommit (item,account) = ((("commit_" + item) + "_") + account)
7777
7878
7979 func getKeyItemAccReveal (item,account) = ((("reveal_" + item) + "_") + account)
8080
8181
8282 func getKeyItemVotesYes (item) = ("cnt_yes_" + item)
8383
8484
8585 func getKeyItemVotesNo (item) = ("cnt_no_" + item)
8686
8787
8888 func getKeyItemAccFinal (item,account) = ((("final_" + item) + "_") + account)
8989
9090
9191 func getKeyItemFundPositive (item) = ("positive_fund_" + item)
9292
9393
9494 func getKeyItemFundNegative (item) = ("negative_fund_" + item)
9595
9696
9797 func getKeyItemAccFundPositive (item,account) = ((getKeyItemFundPositive(item) + "_") + account)
9898
9999
100100 func getKeyItemAccFundNegative (item,account) = ((getKeyItemFundNegative(item) + "_") + account)
101101
102102
103103 func getKeyItemAccReviewsCnt (item,account) = ((("reviews_cnt_" + item) + "_") + account)
104104
105105
106106 func getKeyItemAccReview (item,account) = ((("review_" + item) + "_") + account)
107107
108108
109109 func getKeyTransferLink (hash) = ("transfer_link_" + hash)
110110
111111
112112 func getKeyItemAccReviewText (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_text_id:") + cnt)
113113
114114
115115 func getKeyItemAccReviewMode (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_mode_id:") + cnt)
116116
117117
118118 func getKeyItemAccReviewTier (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_tier_id:") + cnt)
119119
120120
121121 func getKeyItemAccVoteReviewText (item,account) = (getKeyItemAccReview(item, account) + "_votereview")
122122
123123
124124 func getKeyItemAccWhaleReviewText (item,account) = (getKeyItemAccReview(item, account) + "_whalereview")
125125
126126
127127 func getKeyItemBuyoutAmount (item) = ("buyout_amount_" + item)
128128
129129
130130 func getKeyItemAccWinnings (item,account) = ((("winnings_" + item) + "_") + account)
131131
132132
133133 func getKeyFreeInviteCount () = "free_invite_count"
134134
135135
136136 func getKeyFreeInviteBlock () = "free_invite_block"
137137
138138
139139 func getValueWhitelistRef (account) = getStrByKey(getKeyWhitelistRef(account))
140140
141141
142142 func getValueWhitelistStatus (account) = getStrByKey(getKeyWhitelistStatus(account))
143143
144144
145145 func getValueBalance (account) = getNumberByKey(getKeyBalance(account))
146146
147147
148148 func getValueWhitelistBio (account) = getStrByKey(getKeyWhitelistBio(account))
149149
150150
151151 func getValueWhitelistBlock (account) = getStrByKey(getKeyWhitelistBlock(account))
152152
153153
154154 func getValueItemAuthor (item) = getStrByKey(getKeyItemAuthor(item))
155155
156156
157157 func getValueItemBlock (item) = getNumberByKey(getKeyItemBlock(item))
158158
159159
160160 func getValueItemVotingExpiration (item) = getNumberByKey(getKeyItemVotingExpiration(item))
161161
162162
163163 func getValueItemBank (item) = getNumberByKey(getKeyItemBank(item))
164164
165165
166166 func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
167167
168168
169169 func getValueItemData (item) = getStrByKey(getKeyItemData(item))
170170
171171
172172 func getValueItemCrowdExpiration (item) = getNumberByKey(getKeyItemCrowdExpiration(item))
173173
174174
175175 func getValueItemWhaleExpiration (item) = getNumberByKey(getKeyItemWhaleExpiration(item))
176176
177177
178178 func getValueItemNCommits (item) = getNumberByKey(getKeyItemNCommits(item))
179179
180180
181181 func getValueItemAccCommit (item,account) = getStrByKey(getKeyItemAccCommit(item, account))
182182
183183
184184 func getValueItemAccReveal (item,account) = getStrByKey(getKeyItemAccReveal(item, account))
185185
186186
187187 func getValueItemVotesYes (item) = getNumberByKey(getKeyItemVotesYes(item))
188188
189189
190190 func getValueItemVotesNo (item) = getNumberByKey(getKeyItemVotesNo(item))
191191
192192
193193 func getValueItemAccFinal (item,account) = getStrByKey(getKeyItemAccFinal(item, account))
194194
195195
196196 func getValueItemFundPositive (item) = getNumberByKey(getKeyItemFundPositive(item))
197197
198198
199199 func getValueItemFundNegative (item) = getNumberByKey(getKeyItemFundNegative(item))
200200
201201
202202 func getValueItemAccFundPositive (item,account) = getNumberByKey(getKeyItemAccFundPositive(item, account))
203203
204204
205205 func getValueItemAccFundNegative (item,account) = getNumberByKey(getKeyItemAccFundNegative(item, account))
206206
207207
208208 func getValueItemAccReviewsCnt (item,account) = getNumberByKey(getKeyItemAccReviewsCnt(item, account))
209209
210210
211211 func getValueItemAccReviewText (item,account,cnt) = getStrByKey(getKeyItemAccReviewText(item, account, cnt))
212212
213213
214214 func getValueItemAccReviewMode (item,account,cnt) = getStrByKey(getKeyItemAccReviewMode(item, account, cnt))
215215
216216
217217 func getValueItemAccReviewTier (item,account,cnt) = getNumberByKey(getKeyItemAccReviewTier(item, account, cnt))
218218
219219
220220 func getValueItemBuyoutAmount (item) = getNumberByKey(getKeyItemBuyoutAmount(item))
221221
222222
223223 func getValueItemAccWinnings (item,account) = getNumberByKey(getKeyItemAccWinnings(item, account))
224224
225225
226226 let WHITELISTED = "registered"
227227
228228 let INVITED = "invited"
229229
230230 let WHALE = "whale"
231231
232232 let SPENDINVITE = "spend_invite"
233233
234234 let COMMIT = "voting_commit"
235235
236236 let REVEAL = "voting_reveal"
237237
238238 let FEATURED = "featured"
239239
240240 let DELISTED = "delisted"
241241
242242 let CASHOUT = "cashout"
243243
244244 let BUYOUT = "buyout"
245245
246246 let FINISHED = "finished"
247247
248248 let CLAIMED = "claimed"
249249
250250 let POSITIVE = "positive"
251251
252252 let NEGATIVE = "negative"
253253
254254 let GENESIS = "3P8Fvy1yDwNHvVrabe4ek5b9dAwxFjDKV7R"
255255
256256 let ADMIN = "3P9NDxt9Y6ePfM9hkQysgSvbHJvihr56Z18"
257257
258258 let LABS = "3P3MUCvJjviJaxMUe743LVez3qThbL7U8uP"
259259
260260 let VOTERS = 3
261261
262262 let QUORUM = 2
263263
264264 let TIERS = [(3 * 100000000), (10 * 100000000), (100 * 100000000), (300 * 100000000), (1000 * 100000000)]
265265
266-let LISTINGFEE = (1 * 100000000)
267-
268266 let VOTEBET = (1 * 100000000)
269267
270268 let BLOCKSINDAY = 1440
271269
272270 let MULTIPLIER = 150
273271
274-let MAXFREEINVITE = 1500
272+let MAXFREEINVITE = 1000
275273
276274 let INVITEFEE = 900000
277275
278276 let freeInviteCount = getNumberByKey(getKeyFreeInviteCount())
279277
280278 let freeInviteBlock = getNumberByKey(getKeyFreeInviteBlock())
281279
282280 @Callable(i)
283281 func inviteuser (newaccount,data) = {
284282 let account = toBase58String(i.caller.bytes)
285283 let newstatus = getValueWhitelistStatus(newaccount)
286284 let currstatus = getValueWhitelistStatus(account)
287285 if (if ((newstatus == WHITELISTED))
288286 then true
289287 else (newstatus == WHALE))
290288 then throw("User has already been registered")
291- else if (if (if ((currstatus != WHITELISTED))
292- then (account != GENESIS)
293- else false)
294- then (currstatus != WHALE)
295- else false)
296- then throw(("Your account should be whitelisted. status: " + currstatus))
297- else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED)])
289+ else if ((i.fee > INVITEFEE))
290+ then throw("fee more max")
291+ else if (if (if ((currstatus != WHITELISTED))
292+ then (account != GENESIS)
293+ else false)
294+ then (currstatus != WHALE)
295+ else false)
296+ then throw(("Your account should be whitelisted. status: " + currstatus))
297+ else ScriptResult(WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
298+ then (height + BLOCKSINDAY)
299+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
300+ then MAXFREEINVITE
301+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
302+ then if ((freeInviteCount > 0))
303+ then true
304+ else (height > freeInviteBlock)
305+ else false)
306+ then i.fee
307+ else 0, unit)]))
298308 }
299309
300310
301311
302312 @Callable(i)
303313 func signupbylink (hash,data,type) = {
304314 let account = toBase58String(i.caller.bytes)
305315 let status = getValueWhitelistStatus(hash)
306316 if ((status != INVITED))
307317 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(hash)) + ", account:") + hash))
308318 else if ((i.fee > INVITEFEE))
309319 then throw("fee more max")
310320 else ScriptResult(WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
311321 then WHALE
312- else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
322+ else WHITELISTED), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
313323 then (height + BLOCKSINDAY)
314324 else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
315325 then MAXFREEINVITE
316326 else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
317327 then if ((freeInviteCount > 0))
318328 then true
319329 else (height > freeInviteBlock)
320330 else false)
321331 then i.fee
322332 else 0, unit)]))
323333 }
324334
325335
326336
327337 @Callable(i)
328338 func signup (data,type) = {
329339 let account = toBase58String(i.caller.bytes)
330340 let status = getValueWhitelistStatus(account)
331341 if ((status == NONE))
332342 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(account)) + ", account:") + account))
333343 else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
334344 then WHALE
335345 else WHITELISTED)])
336346 }
337347
338348
339349
340350 @Callable(i)
341351 func userupdate (data,type) = {
342352 let account = toBase58String(i.caller.bytes)
343353 if ((getKeyWhitelistBio(account) == NONE))
344354 then throw("user not signup")
345- else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
346- then WHALE
347- else WHITELISTED)])
355+ else if ((i.fee > INVITEFEE))
356+ then throw("fee more max")
357+ else ScriptResult(WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
358+ then WHALE
359+ else WHITELISTED), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
360+ then (height + BLOCKSINDAY)
361+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
362+ then MAXFREEINVITE
363+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
364+ then if ((freeInviteCount > 0))
365+ then true
366+ else (height > freeInviteBlock)
367+ else false)
368+ then i.fee
369+ else 0, unit)]))
348370 }
349371
350372
351373
352374 @Callable(i)
353375 func projupdate (item,data) = {
354376 let account = toBase58String(i.caller.bytes)
355377 if ((getValueItemAuthor(item) != account))
356378 then throw("You're not author")
357- else WriteSet([DataEntry(getKeyItemData(item), data)])
379+ else if ((i.fee > INVITEFEE))
380+ then throw("fee more max")
381+ else ScriptResult(WriteSet([DataEntry(getKeyItemData(item), data), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
382+ then (height + BLOCKSINDAY)
383+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
384+ then MAXFREEINVITE
385+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
386+ then if ((freeInviteCount > 0))
387+ then true
388+ else (height > freeInviteBlock)
389+ else false)
390+ then i.fee
391+ else 0, unit)]))
358392 }
359393
360394
361395
362396 @Callable(i)
363397 func contestAddOrUpdate (item,data) = {
364398 let account = toBase58String(i.caller.bytes)
365399 if ((account != ADMIN))
366400 then throw("You're not admin")
367401 else WriteSet([DataEntry(getKeyContestData(item), data)])
368402 }
369403
370404
371405
372406 @Callable(i)
373407 func withdraw (address) = {
374408 let amount = getValueBalance(address)
375409 if ((0 >= amount))
376410 then throw("Not enough balance")
377411 else ScriptResult(WriteSet([DataEntry(getKeyBalance(address), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(address), amount, unit)]))
378412 }
379413
380414
381415
382416 @Callable(i)
383417 func additem (item,expVoting,expCrowd,expWhale,data) = {
384418 let account = toBase58String(i.caller.bytes)
385419 let pmt = extract(i.payment)
386420 if (isDefined(pmt.assetId))
387421 then throw("can use waves only at the moment")
388- else if ((pmt.amount != LISTINGFEE))
389- then throw(((("Please pay exact amount for the listing: " + toString(LISTINGFEE)) + ", actual payment is: ") + toString(pmt.amount)))
422+ else if ((i.fee > INVITEFEE))
423+ then throw("fee more max")
390424 else if (!(if (if ((expVoting > 2))
391425 then (expCrowd > expVoting)
392426 else false)
393427 then (expWhale > expCrowd)
394428 else false))
395429 then throw("Incorrect time parameters")
396430 else if ((getValueItemAuthor(item) != NONE))
397431 then throw("Item already exist")
398- else WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemBank(item), LISTINGFEE), DataEntry(getKeyItemStatus(item), FEATURED), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale))])
432+ else ScriptResult(WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemStatus(item), FEATURED), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
433+ then (height + BLOCKSINDAY)
434+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
435+ then MAXFREEINVITE
436+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
437+ then if ((freeInviteCount > 0))
438+ then true
439+ else (height > freeInviteBlock)
440+ else false)
441+ then i.fee
442+ else 0, unit)]))
399443 }
400444
401445
402446
403447 @Callable(i)
404448 func reportProject (item,data) = {
405449 let account = toBase58String(i.caller.bytes)
406450 WriteSet([DataEntry(getKeyItemAccReportData(item, account), data)])
407451 }
408452
409453
410454
411455 @Callable(i)
412456 func labsdonate (item,review) = {
413457 let account = toBase58String(i.caller.bytes)
414458 let pmt = extract(i.payment)
415459 if (isDefined(pmt.assetId))
416460 then throw("can use waves only at the moment")
417461 else if ((account != LABS))
418462 then throw("labs donation is allowed only for waves labs")
419463 else if ((getValueItemStatus(item) != BUYOUT))
420464 then throw("Investement has already done")
421465 else {
422466 let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
423467 let newpositivefund = (getValueItemFundPositive(item) + pmt.amount)
424468 WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + pmt.amount)), DataEntry(getKeyItemFundPositive(item), newpositivefund), DataEntry(getKeyItemAccReviewText(item, account, toString(cnt)), review), DataEntry(getKeyItemAccReviewMode(item, account, toString(cnt)), POSITIVE), DataEntry(getKeyItemAccReviewTier(item, account, toString(cnt)), 5), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + pmt.amount)), DataEntry(getKeyItemStatus(item), CASHOUT)])
425469 }
426470 }
427471
428472
429473
430474 @Callable(i)
431475 func changeStatus (item) = {
432476 let account = toBase58String(i.caller.bytes)
433477 if ((account != LABS))
434478 then throw("labs change is allowed only for waves labs")
435479 else WriteSet([DataEntry(getKeyItemStatus(item), CASHOUT)])
436480 }
437481
438482
439483
440484 @Callable(i)
441485 func donate (item,tier,mode,review) = {
442486 let account = toBase58String(i.caller.bytes)
443487 let pmt = extract(i.payment)
444488 if (isDefined(pmt.assetId))
445489 then throw("can use waves only at the moment")
446490 else {
447491 let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
448492 let newnegativefund = (getValueItemFundNegative(item) + ((if ((mode == NEGATIVE))
449493 then 1
450494 else 0) * pmt.amount))
451495 let newpositivefund = (getValueItemFundPositive(item) + ((if ((mode == POSITIVE))
452496 then 1
453497 else 0) * pmt.amount))
454498 if ((getValueItemStatus(item) != FEATURED))
455499 then throw("The project hasn't accepted by community")
456500 else if ((height >= getValueItemCrowdExpiration(item)))
457501 then throw("The time for crowdfunding has expired")
458502 else if ((newnegativefund >= newpositivefund))
459503 then throw("Negative fund can't be higher than positive fund")
460504 else if (if ((mode != POSITIVE))
461505 then (mode != NEGATIVE)
462506 else false)
463507 then throw("Wrong mode parameter")
464508 else if ((getValueItemAuthor(item) == account))
465509 then throw("Can't donate own project")
466510 else if ((pmt.amount != TIERS[(tier - 1)]))
467511 then throw(("The payment must be equal to tier amount: " + toString(TIERS[(tier - 1)])))
468512 else WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + ((if ((mode == POSITIVE))
469513 then 1
470514 else 0) * pmt.amount))), DataEntry(getKeyItemAccFundNegative(item, account), (getValueItemAccFundNegative(item, account) + ((if ((mode == NEGATIVE))
471515 then 1
472516 else 0) * pmt.amount))), DataEntry(getKeyItemFundPositive(item), newpositivefund), DataEntry(getKeyItemFundNegative(item), newnegativefund), DataEntry(getKeyItemAccReviewText(item, account, toString(cnt)), review), DataEntry(getKeyItemAccReviewMode(item, account, toString(cnt)), mode), DataEntry(getKeyItemAccReviewTier(item, account, toString(cnt)), tier)])
473517 }
474518 }
475519
476520
477521
478522 @Callable(i)
479523 func whale (item) = {
480524 let account = toBase58String(i.caller.bytes)
481525 let pmt = extract(i.payment)
482526 if (isDefined(pmt.assetId))
483527 then throw("can use waves only at the moment")
484528 else if ((account != LABS))
485529 then throw("labs donation is allowed only for waves labs")
486530 else if ((getValueItemStatus(item) != FEATURED))
487531 then throw("The project hasn't accepted by community")
488532 else if ((getValueItemCrowdExpiration(item) > height))
489533 then throw("The time for crowdfunding has not expired yet")
490534 else if ((height > getValueItemWhaleExpiration(item)))
491535 then throw("The time for grant has expired")
492536 else if ((getValueItemStatus(item) == BUYOUT))
493537 then throw("Investement has already done")
494538 else if ((pmt.amount != ((getValueItemFundPositive(item) * MULTIPLIER) / 100)))
495539 then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
496540 else WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item))), DataEntry(getKeyItemBuyoutAmount(item), pmt.amount), DataEntry(getKeyItemAccFinal(item, getValueItemAuthor(item)), CLAIMED)])
497541 }
498542
499543
500544
501545 @Callable(i)
502546 func claimwinnings (item,account) = {
503547 let status = getValueItemStatus(item)
504548 let isbayout = if ((status == BUYOUT))
505549 then 1
506550 else 0
507551 let iscrowdf = if ((status != BUYOUT))
508552 then 1
509553 else 0
510554 let positivefund = (getValueItemFundPositive(item) - getValueItemAccFundPositive(item, LABS))
511555 let negativefund = getValueItemFundNegative(item)
512556 let share = (((isbayout * (getValueItemAccFundPositive(item, account) * 100)) / (if ((0 >= positivefund))
513557 then 1
514558 else positivefund)) + ((iscrowdf * (getValueItemAccFundNegative(item, account) * 100)) / (if ((0 >= negativefund))
515559 then 1
516560 else negativefund)))
517561 let tmpnegwin = ((negativefund * MULTIPLIER) / 100)
518562 let betprofit = ((isbayout * ((share * negativefund) / 100)) + (iscrowdf * ((share * (if ((positivefund > tmpnegwin))
519563 then tmpnegwin
520564 else positivefund)) / 100)))
521565 let roiprofit = (isbayout * ((getValueItemAccFundPositive(item, account) * MULTIPLIER) / 100))
522566 let authorprofit = ((iscrowdf * (if ((getValueItemAuthor(item) == account))
523567 then 1
524568 else 0)) * (if ((positivefund > tmpnegwin))
525569 then (positivefund - tmpnegwin)
526570 else 0))
527571 if ((toString(i.caller) != LABS))
528572 then throw("caller error")
529573 else if ((status == DELISTED))
530574 then throw("The project hasn't accepted by community")
531575 else if ((account == LABS))
532576 then throw("account error")
533577 else if ((getValueItemAccFinal(item, account) == CLAIMED))
534578 then throw("Status is claimed")
535579 else if (if (if ((roiprofit == 0))
536580 then (betprofit == 0)
537581 else false)
538582 then (authorprofit == 0)
539583 else false)
540584 then throw("The share equals zero")
541585 else if (if ((status != BUYOUT))
542586 then (getValueItemWhaleExpiration(item) >= height)
543587 else false)
544588 then throw("The time for grant has not expired yet")
545589 else if ((0 >= (positivefund + negativefund)))
546590 then throw("The campaign wasn't active")
547591 else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
548592 }
549593
550594
551595
552596 @Callable(i)
553597 func transfer (account) = {
554598 let pmt = extract(i.payment)
555599 if (isDefined(pmt.assetId))
556600 then throw("can use waves only at the moment")
557601 else TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, unit)])
558602 }
559603
560604

github/deemru/w8io/6500d08 
98.64 ms