tx · 9earhUfVjmBWQKD4nQGRWWQv2eztDqGvmHDK2JGh3KeM

3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS:  -0.01400000 Waves

2020.10.19 14:23 [1227371] smart account 3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS > SELF 0.00000000 Waves

{ "type": 13, "id": "9earhUfVjmBWQKD4nQGRWWQv2eztDqGvmHDK2JGh3KeM", "fee": 1400000, "feeAssetId": null, "timestamp": 1603106662108, "version": 1, "sender": "3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS", "senderPublicKey": "Hxyif8HnnHh34SZ7PZewDcNUgrZfHNJsQvLNCcPbCW27", "proofs": [ "2miZNtjpebtsNoNdnhVw8S8wxZSFFQGhhmuKg4ed2zdx5v8YWaNwNsJoAvVi8y7gPm1ydAScrpPhKQgEbbhJS6sE" ], "script": "base64:AAIEAAAAAAAAADYIAhIKCggICAEIAQEICBIRCg8ICAEIAQgBAQEBAQEBAQESAwoBCBIDCgEIEgQKAggBEgMKAQgAAABZAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAgAAAAlqc29uQXJyYXkAAAALc3BsaXRTeW1ib2wJAAS1AAAAAgUAAAAJanNvbkFycmF5BQAAAAtzcGxpdFN5bWJvbAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkCAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5BwAAAAAMa2V5QXNzZXRDb2RlAAAAAAAAAAABAAAAAAprZXlBc3NldElkAAAAAAAAAAACAAAAAA5rZXlBc3NldFN0YXR1cwAAAAAAAAAAAwAAAAAVa2V5QXNzZXRQcmljZURlY2ltYWxzAAAAAAAAAAAEAAAAABNrZXlBc3NldEJha2luZ0Fzc2V0AAAAAAAAAAAFAAAAABtrZXlPdmVyY29sbGF0ZXJhbFBlcmNlbnRhZ2UAAAAAAAAAAAYAAAAACmtleU1pblBvb2wAAAAAAAAAAAcAAAAAFWtleVByaWNlT3JhY2xlQWRkcmVzcwAAAAAAAAAACAAAAAAQa2V5TWluQnV5UGF5bWVudAAAAAAAAAAACQAAAAARa2V5TWluU2VsbFBheW1lbnQAAAAAAAAAAAoAAAAAEmtleUJ1eUxvY2tJbnRlcnZhbAAAAAAAAAAACwAAAAATa2V5U2VsbExvY2tJbnRlcnZhbAAAAAAAAAAADAAAAAAJa2V5QnV5RmVlAAAAAAAAAAANAAAAAAprZXlTZWxsRmVlAAAAAAAAAAAOAAAAABhrZXlQb29sUmVkZW1wdGlvblRpbWVvdXQAAAAAAAAAAA8AAAAAIWtleVdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAAAAAAAEAAAAAAOYWRtaW5QdWJsaWNLZXkCAAAACCRBRE1JTlBLAAAAABpuZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub0NvbnRyYWN0QWRkcmVzcwAAAAAZbmV1dHJpbm9TdGFraW5nQWRkcmVzc0tleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub1N0YWtpbmdBZGRyZXNzAAAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALCVzJXNfX2NvbW1vbkNvbmZpZ19fbWluaW11bVBvb2xGdW5kaW5nQW1vdW50AAAAABBpc0luaXRpYWxpemVkS2V5AgAAAB8lcyVzX19jb21tb25Db25maWdfX2luaXRpYWxpemVkAAAAABRjdXJyZW50QXNzZXRJbmRleEtleQIAAAAvJXMlc19fY29tbW9uQ29uZmlnX19wcmVkZWZpbmVkQXNzZXRzQWN0aXZlSW5kZXgAAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5AgAAACglcyVzX19jb21tb25Db25maWdfX3ByZWRlZmluZWRBc3NldHNMaXN0AAAAAA5kZWJ0VG9rZW5JZEtleQIAAAAfJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRJZAAAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRFdGFsb25CYWxhbmNlAAAAABVkZWZvU3Rha2luZ0FkZHJlc3NLZXkCAAAAJiVzJXNfX2NvbW1vbkNvbmZpZ19fZGVmb1N0YWtpbmdBZGRyZXNzAAAAABpkZWZvU3Rha2luZ1BhY2VtYWtlclB1YktleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19kZWZvU3Rha2luZ1BhY2VtYWtlclB1YgAAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAObnNidEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAADmRlZm9Bc3NldElkS2V5AgAAAA8lc19fZGVmb0Fzc2V0SWQAAAAAFXNldEFzc2V0U2NyaXB0VHhJZEtleQIAAAATJXNfX2Fzc2V0U2NyaXB0VHhJZAEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAIX19jb25maWcBAAAAEGdldEFzc2V0UHJpY2VLZXkAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAABIlcyVzX19hc3NldFByaWNlX18FAAAACWFzc2V0Q29kZQEAAAAVZ2V0QXNzZXRJbml0SGVpZ2h0S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAxhc3NldEFkZHJlc3MCAAAADF9faW5pdEhlaWdodAEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAABBfX2FjdGl2YXRlSGVpZ2h0AQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAA1fX2N1cnJlbnRQb29sAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAJX19tYXhQb29sAQAAAA9nZXRBc3NldE1ldGFLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAGX19tZXRhAQAAABVnZXRBc3NldFBvb2xNYWtlcnNLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAMX19wb29sTWFrZXJzAQAAABhnZXRBc3NldEFkZHJlc3NCeUNvZGVLZXkAAAABAAAACWFzc2V0Q29kZQkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAACWFzc2V0Q29kZQIAAAAUX19hZGRyZXNzQnlBc3NldENvZGUBAAAAG2dldEFzc2V0QWRkcmVzc0J5QXNzZXRJZEtleQAAAAEAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAAB2Fzc2V0SWQCAAAAEl9fYWRkcmVzc0J5QXNzZXRJZAEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQJXMlcyVzJXNfX3Bvb2xfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAJfXwUAAAAQcG9vbE1ha2VyQWRkcmVzcwIAAAAIX19hbW91bnQBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAECVzJXMlcyVzX19wb29sX18FAAAADGFzc2V0QWRkcmVzcwIAAAACX18FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAAC19fbWF4QW1vdW50AQAAABtnZXRQb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAECVzJXMlcyVzX19wb29sX18FAAAADGFzc2V0QWRkcmVzcwIAAAACX18FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAADl9fbG9ja2VkQW1vdW50AQAAABtnZXRQb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAECVzJXMlcyVzX19wb29sX18FAAAADGFzc2V0QWRkcmVzcwIAAAACX18FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAADl9fdW5sb2NrSGVpZ2h0AQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAEdGhpcwkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAOTm8gREVGTyBBc3NldCAFAAAADGFzc2V0QWRkcmVzcwIAAAAOY29uZmlnIHByZXNlbnQCAAAAAl9fAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAabmV1dHJpbm9Db250cmFjdEFkZHJlc3NLZXkCAAAAH05vIG5ldXRyaW5vIGNvbnRyYWN0IHNwZWNpZmllZC4AAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABdObyBVU0ROIGFzc2V0IGlkIGZvdW5kLgAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADm5zYnRBc3NldElkS2V5AgAAABZObyBOU0JUIGFzc2V0IGlkIGZvdW5kAAAAABJtaW5pbXVtUG9vbEZ1bmRpbmcJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALU1pbmltdW0gcG9vbCBmdW5kaW5nIGFtb3VudCBpcyBub3Qgc3BlY2lmaWVkLgAAAAALYXNzZXRTdGF0dXMJAAUVAAAAAwIAAAAIUFJPUE9TRUQCAAAABVJFQURZAgAAAAZJU1NVRUQAAAAAGHByZWRlZmluZWRBc3NldENvbnRyYWN0cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5AgAAAC1ObyBwb29sIG9mIHByZWRlcGxveWVkIGFzc2V0IGNvbnRyYWN0cyBmb3VuZC4AAAAAFHByZWRlZmluZWRBc3NldHNMaXN0CQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAIFAAAAGHByZWRlZmluZWRBc3NldENvbnRyYWN0cwIAAAABLAAAAAARY3VycmVudEFzc2V0SW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAUY3VycmVudEFzc2V0SW5kZXhLZXkAAAAAAAAAAAAAAAAACWRlYnRUb2tlbgkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAOZGVidFRva2VuSWRLZXkCAAAAE05vIGRlYnQgdG9rZW4gZm91bmQAAAAADW11bHRpcGxpY2F0b3IAAAAAAAAPQkAAAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQAAAAAAAAAAAAEAAAAVZ2V0QXNzZXRBZGRyZXNzQnlDb2RlAAAAAQAAAAthc3NldFN5bWJvbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAYZ2V0QXNzZXRBZGRyZXNzQnlDb2RlS2V5AAAAAQUAAAALYXNzZXRTeW1ib2wCAAAAAAEAAAAMZ2V0QXNzZXRDb2RlAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAMa2V5QXNzZXRDb2RlAQAAAApnZXRBc3NldElEAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAKa2V5QXNzZXRJZAEAAAAOZ2V0QXNzZXRTdGF0dXMAAAABAAAAC2Fzc2V0Q29uZmlnCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAA5rZXlBc3NldFN0YXR1cwEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABVrZXlBc3NldFByaWNlRGVjaW1hbHMBAAAAFWdldEFzc2V0QmFraW5nQXNzZXRJZAAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAE2tleUFzc2V0QmFraW5nQXNzZXQBAAAAHWdldEFzc2V0T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABtrZXlPdmVyY29sbGF0ZXJhbFBlcmNlbnRhZ2UBAAAAHWdldEFzc2V0TWluUmVxdWlyZWRQb29sQW1vdW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAAprZXlNaW5Qb29sAQAAABpnZXRBc3NldFByaWNlT3JhY2xlQWRkcmVzcwAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAFWtleVByaWNlT3JhY2xlQWRkcmVzcwEAAAAYZ2V0TWluQnV5UGF5bWVudFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABBrZXlNaW5CdXlQYXltZW50AQAAABlnZXRNaW5TZWxsUGF5bWVudFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABFrZXlNaW5TZWxsUGF5bWVudAEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAEmtleUJ1eUxvY2tJbnRlcnZhbAEAAAAbZ2V0U2VsbExvY2tJbnRlcnZhbFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABNrZXlTZWxsTG9ja0ludGVydmFsAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAJa2V5QnV5RmVlAQAAABJnZXRTZWxsRmVlUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAACmtleVNlbGxGZWUBAAAAGmdldFJlZGVtcHRpb25UaW1lb3V0QmxvY2tzAAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABhrZXlQb29sUmVkZW1wdGlvblRpbWVvdXQBAAAAIWdldFdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAha2V5V2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AQAAABJnZXRBc3NldFBvb2xNYWtlcnMAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAVZ2V0QXNzZXRQb29sTWFrZXJzS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzAgAAAAABAAAAEmdldEFzc2V0SW5pdEhlaWdodAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABVnZXRBc3NldEluaXRIZWlnaHRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAAFmdldEFzc2V0QWN0aXZhdGVIZWlnaHQAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAVZ2V0QXNzZXRNYXhQb29sQW1vdW50AAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGGdldEFzc2V0TWF4UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAMZ2V0QXNzZXRNZXRhAAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwIAAAAAAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbk1heEFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MAAAAAAAAAAAABAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAG2dldFBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAYZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABBwb29sTWFrZXJBZGRyZXNzAAAAAAAAAAAAAQAAAA1nZXRBc3NldFByaWNlAAAAAgAAABJwcmljZU9yYWNsZUFkZHJlc3MAAAAJYXNzZXRDb2RlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAScHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAQZ2V0QXNzZXRQcmljZUtleQAAAAEFAAAACWFzc2V0Q29kZQIAAAAUTm8gQXNzZXQgcHJpY2UgZm91bmQBAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAQAAAACWFzc2V0Q29kZQAAAAdhc3NldElkAAAAC2Fzc2V0U3RhdHVzAAAADXByaWNlRGVjaW1hbHMAAAAOYmFja2luZ0Fzc2V0SWQAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAB21pblBvb2wAAAAScHJpY2VPcmFjbGVBZGRyZXNzAAAADW1pbkJ1eVBheW1lbnQAAAAObWluU2VsbFBheW1lbnQAAAAPYnV5TG9ja0ludGVydmFsAAAAEHNlbGxMb2NrSW50ZXJ2YWwAAAAGYnV5RmVlAAAAB3NlbGxGZWUAAAAVcG9vbFJlZGVtcHRpb25UaW1lb3V0AAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkABLkAAAACCQAETAAAAAICAAAAHiVzJXMlcyVkJXMlZCVkJXMlZCVkJWQlZCVkJWQlZAkABEwAAAACBQAAAAlhc3NldENvZGUJAARMAAAAAgUAAAAHYXNzZXRJZAkABEwAAAACBQAAAAthc3NldFN0YXR1cwkABEwAAAACCQABpAAAAAEFAAAADXByaWNlRGVjaW1hbHMJAARMAAAAAgUAAAAOYmFja2luZ0Fzc2V0SWQJAARMAAAAAgkAAaQAAAABBQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQJAARMAAAAAgkAAaQAAAABBQAAAAdtaW5Qb29sCQAETAAAAAIFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkABEwAAAACCQABpAAAAAEFAAAADW1pbkJ1eVBheW1lbnQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5TZWxsUGF5bWVudAkABEwAAAACCQABpAAAAAEFAAAAD2J1eUxvY2tJbnRlcnZhbAkABEwAAAACCQABpAAAAAEFAAAAEHNlbGxMb2NrSW50ZXJ2YWwJAARMAAAAAgkAAaQAAAABBQAAAAZidXlGZWUJAARMAAAAAgkAAaQAAAABBQAAAAdzZWxsRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbFJlZGVtcHRpb25UaW1lb3V0BQAAAANuaWwCAAAAAl9fAAAABgAAAAFpAQAAAARpbml0AAAACAAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwAAABZuZXV0cmlub1N0YWtpbmdBZGRyZXNzAAAAGG1pbmltdW5Qb29sRnVuZGluZ0Ftb3VudAAAABNwcmVkZWZpbmVkQXNzZXRMaXN0AAAAEWN1cnJlbnRBc3NldEluZGV4AAAAEmRlYnRFdGhhbG9uQmFsYW5jZQAAABJkZWZvU3Rha2luZ0FkZHJlc3MAAAAXZGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQYJAAACAAAAAQIAAAAhQ29udHJhY3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuBAAAAAlpc3N1ZURlYnQJAARCAAAABQIAAAAJREVGT19ERUJUAgAAABBERUZPIERlYnQgVG9rZW4uAAAAAAAAAAABAAAAAAAAAAAGBgQAAAALZGVidFRva2VuSWQJAAQ4AAAAAQUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGm5ldXRyaW5vQ29udHJhY3RBZGRyZXNzS2V5BQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABluZXV0cmlub1N0YWtpbmdBZGRyZXNzS2V5BQAAABZuZXV0cmlub1N0YWtpbmdBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkFAAAAGG1pbmltdW5Qb29sRnVuZGluZ0Ftb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRhc3NldHNBZGRyZXNzTGlzdEtleQUAAAATcHJlZGVmaW5lZEFzc2V0TGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUY3VycmVudEFzc2V0SW5kZXhLZXkFAAAAEWN1cnJlbnRBc3NldEluZGV4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABlkZWJ0VG9rZW5FdGFsb25CYWxhbmNlS2V5BQAAABJkZWJ0RXRoYWxvbkJhbGFuY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAOZGVidFRva2VuSWRLZXkJAAJYAAAAAQUAAAALZGVidFRva2VuSWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAVZGVmb1N0YWtpbmdBZGRyZXNzS2V5BQAAABJkZWZvU3Rha2luZ0FkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAaZGVmb1N0YWtpbmdQYWNlbWFrZXJQdWJLZXkFAAAAF2RlZm9TdGFraW5nUGFjZW1ha2VyUHViCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAABBpc0luaXRpYWxpemVkS2V5BgkABEwAAAACBQAAAAlpc3N1ZURlYnQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAtkZWJ0VG9rZW5JZAAAAAAAAAAAAQUAAAADbmlsAAAAAWkBAAAADHByb3Bvc2VBc3NldAAAAA8AAAAJYXNzZXRDb2RlAAAABG1ldGEAAAAHbWluUG9vbAAAABJwcmljZU9yYWNsZUFkZHJlc3MAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50AAAADmJhY2tpbmdBc3NldElkAAAADXByaWNlRGVjaW1hbHMAAAANbWluQnV5UGF5bWVudAAAAA5taW5TZWxsUGF5bWVudAAAAA9idXlMb2NrSW50ZXJ2YWwAAAAQc2VsbExvY2tJbnRlcnZhbAAAAAZidXlGZWUAAAAHc2VsbEZlZQAAABVwb29sUmVkZW1wdGlvblRpbWVvdXQAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AwkBAAAAAiE9AAAAAgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADmFkbWluUHVibGljS2V5CQAAAgAAAAECAAAAKk9ubHkgQWRtaW4gY2FuIHBlcmZvcm0gY29udHJhY3Qgb3BlcmF0aW9uLgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkBAAAAAiE9AAAAAgkAAlkAAAABBQAAAA5iYWNraW5nQXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAAI0Jha2luZyBhc3NldCBpZCBjb3VsZCBiZSBVU0ROIG9ubHkuAwkBAAAAAiE9AAAAAgkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQIAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABdBc3NldCB3aXRoIHBhc3NlZCBjb2RlIAUAAAAJYXNzZXRDb2RlAgAAABsgaGFzIGFscmVhZHkgYmVlbiBwcm9wb3NlZC4DCQAAZgAAAAIFAAAAEm1pbmltdW1Qb29sRnVuZGluZwUAAAAHbWluUG9vbAkAAAIAAAABCQABLAAAAAICAAAAM01pbmltdW0gcG9vbCBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWxzIHRvIAkAAaQAAAABBQAAABJtaW5pbXVtUG9vbEZ1bmRpbmcDAwMDAwMDAwkAAGYAAAACAAAAAAAAAAAABQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQGCQAAZgAAAAIAAAAAAAAAAAAFAAAADXByaWNlRGVjaW1hbHMGCQAAZgAAAAIAAAAAAAAAAAAFAAAADW1pbkJ1eVBheW1lbnQGCQAAZgAAAAIAAAAAAAAAAAAFAAAADm1pblNlbGxQYXltZW50BgkAAGYAAAACAAAAAAAAAAAABQAAAA9idXlMb2NrSW50ZXJ2YWwGCQAAZgAAAAIAAAAAAAAAAAAFAAAAEHNlbGxMb2NrSW50ZXJ2YWwGCQAAZgAAAAIAAAAAAAAAAAAFAAAABmJ1eUZlZQYJAABmAAAAAgAAAAAAAAAAAAUAAAAHc2VsbEZlZQkAAAIAAAABAgAAAChPbmUgb2YgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzIGlzIGludmFsaWQuBAAAABdwcmljZU9yYWNsZUFkZHJlc3NWYWxpZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABJwcmljZU9yYWNsZUFkZHJlc3MCAAAAKVBhc3NlZCBQcmljZSBPcmFjbGUgQWRkcmVzcyBpcyBub3QgdmFsaWQuBAAAAAxhc3NldEFkZHJlc3MJAAGRAAAAAgUAAAAUcHJlZGVmaW5lZEFzc2V0c0xpc3QFAAAAEWN1cnJlbnRBc3NldEluZGV4BAAAAAtkZWZvQXNzZXRJZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAAxhc3NldEFkZHJlc3MCAAAAAAUAAAAOZGVmb0Fzc2V0SWRLZXkCAAAAF05vIGRlZm8gYXNzZXQgSUQgZm91bmQuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkBAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAQBQAAAAlhc3NldENvZGUFAAAAC2RlZm9Bc3NldElkCAUAAAALYXNzZXRTdGF0dXMAAAACXzEFAAAADXByaWNlRGVjaW1hbHMFAAAADmJhY2tpbmdBc3NldElkBQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQFAAAAB21pblBvb2wFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwUAAAANbWluQnV5UGF5bWVudAUAAAAObWluU2VsbFBheW1lbnQFAAAAD2J1eUxvY2tJbnRlcnZhbAUAAAAQc2VsbExvY2tJbnRlcnZhbAUAAAAGYnV5RmVlBQAAAAdzZWxsRmVlBQAAABVwb29sUmVkZW1wdGlvblRpbWVvdXQFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAYZ2V0QXNzZXRBZGRyZXNzQnlDb2RlS2V5AAAAAQUAAAAJYXNzZXRDb2RlBQAAAAxhc3NldEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAEbWV0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEFzc2V0SW5pdEhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRjdXJyZW50QXNzZXRJbmRleEtleQkAAGQAAAACBQAAABFjdXJyZW50QXNzZXRJbmRleAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlBc3NldElkS2V5AAAAAQUAAAALZGVmb0Fzc2V0SWQFAAAADGFzc2V0QWRkcmVzcwUAAAADbmlsAAAAAWkBAAAAEWZ1bmRMaXF1aWRpdHlQb29sAAAAAQAAAAlhc3NldENvZGUEAAAADGFzc2V0QWRkcmVzcwkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQQAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkBAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAAD2F0dGFjaGVkUGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAIhPQAAAAIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5hZG1pblB1YmxpY0tleQkAAAIAAAABAgAAACpPbmx5IEFkbWluIGNhbiBwZXJmb3JtIGNvbnRyYWN0IG9wZXJhdGlvbi4DCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BwkAAAIAAAABAgAAABpDb250cmFjdCBpcyBub3QgeWV0IHJlYWR5LgMJAQAAAAIhPQAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAALkxpcXVpZGl0eSBwb29sIGNvdWxkIGJlIGZ1bmRlZCB3aXRoIFVTRE4gb25seS4DCQAAAAAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAGYW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAIkluY29ycmVjdCBhdHRhY2hlZCBwYXltZW50IGFtb3VudC4DCQAAAAAAAAIFAAAADGFzc2V0QWRkcmVzcwIAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACVDYW5ub3QgZmluZCBsaXF1aWRpdHkgcG9vbCBmb3IgYXNzZXQgBQAAAAlhc3NldENvZGUCAAAAAS4EAAAAD2ZpbmFsUG9vbEFtb3VudAkAAGQAAAACCAUAAAAPYXR0YWNoZWRQYXltZW50AAAABmFtb3VudAkBAAAAGWdldEFzc2V0Q3VycmVudFBvb2xBbW91bnQAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAADW1heFBvb2xBbW91bnQJAQAAABVnZXRBc3NldE1heFBvb2xBbW91bnQAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAAEHBvb2xNYWtlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABdjdXJyZW50UG9vbE1ha2VyQmFsYW5jZQkBAAAAH2dldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAAE21heFBvb2xNYWtlckJhbGFuY2UJAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAABFjdXJyZW50UG9vbFN0YXR1cwkBAAAADmdldEFzc2V0U3RhdHVzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAPZmluYWxQb29sU3RhdHVzAwMJAABnAAAAAgUAAAAPZmluYWxQb29sQW1vdW50CQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQAAAAAAAAIFAAAAEWN1cnJlbnRQb29sU3RhdHVzCAUAAAALYXNzZXRTdGF0dXMAAAACXzEHCAUAAAALYXNzZXRTdGF0dXMAAAACXzIFAAAAEWN1cnJlbnRQb29sU3RhdHVzBAAAABFjdXJyZW50UG9vbE1ha2VycwkBAAAAEmdldEFzc2V0UG9vbE1ha2VycwAAAAEFAAAADGFzc2V0QWRkcmVzcwQAAAANbmV3UG9vbE1ha2VycwMJAAAAAAAAAgUAAAARY3VycmVudFBvb2xNYWtlcnMCAAAAAAUAAAAQcG9vbE1ha2VyQWRkcmVzcwMJAQAAAAhjb250YWlucwAAAAIFAAAAEWN1cnJlbnRQb29sTWFrZXJzBQAAABBwb29sTWFrZXJBZGRyZXNzBQAAABFjdXJyZW50UG9vbE1ha2VycwkAASwAAAACCQABLAAAAAIFAAAAEWN1cnJlbnRQb29sTWFrZXJzAgAAAAEsCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAFYUNvZGUJAQAAAAxnZXRBc3NldENvZGUAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAANhSUQJAQAAAApnZXRBc3NldElEAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAOYVByaWNlRGVjaW1hbHMJAQAAABVnZXRBc3NldFByaWNlRGVjaW1hbHMAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5hQmFraW5nQXNzZXRJZAkBAAAAFWdldEFzc2V0QmFraW5nQXNzZXRJZAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAFmFPdmVyQ29sbGF0ZXJhbFBlcmNlbnQJAQAAAB1nZXRBc3NldE92ZXJDb2xsYXRlcmFsUGVyY2VudAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAEGFNaW5SZXF1aXJlZFBvb2wJAQAAAB1nZXRBc3NldE1pblJlcXVpcmVkUG9vbEFtb3VudAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAE2FQcmljZU9yYWNsZUFkZHJlc3MJAQAAABpnZXRBc3NldFByaWNlT3JhY2xlQWRkcmVzcwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADmFNaW5CdXlQYXltZW50CQEAAAAYZ2V0TWluQnV5UGF5bWVudFBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAPYU1pblNlbGxQYXltZW50CQEAAAAZZ2V0TWluU2VsbFBheW1lbnRQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAEGFCdXlMb2NrSW50ZXJ2YWwJAQAAABpnZXRCdXlMb2NrSW50ZXJ2YWxQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAEWFTZWxsTG9ja0ludGVydmFsCQEAAAAbZ2V0U2VsbExvY2tJbnRlcnZhbFBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAHYUJ1eUZlZQkBAAAAEWdldEJ1eUZlZVBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAIYVNlbGxGZWUJAQAAABJnZXRTZWxsRmVlUGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABhhUmVkZW1wdGlvblRpbWVvdXRCbG9ja3MJAQAAABpnZXRSZWRlbXB0aW9uVGltZW91dEJsb2NrcwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkBAAAAIWdldFdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAE25ld1Bvb2xNYWtlckJhbGFuY2UJAABkAAAAAgUAAAAXY3VycmVudFBvb2xNYWtlckJhbGFuY2UICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAGcmVzdWx0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAE25ld1Bvb2xNYWtlckJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAACVnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAABmAAAAAgUAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQUAAAATbWF4UG9vbE1ha2VyQmFsYW5jZQUAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQUAAAATbWF4UG9vbE1ha2VyQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAHWdldEFzc2V0Q3VycnJlbnRQb29sQW1vdW50S2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBQAAAA9maW5hbFBvb2xBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MDCQAAZgAAAAIFAAAAD2ZpbmFsUG9vbEFtb3VudAUAAAANbWF4UG9vbEFtb3VudAUAAAAPZmluYWxQb29sQW1vdW50BQAAAA1tYXhQb29sQW1vdW50CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAVZ2V0QXNzZXRQb29sTWFrZXJzS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBQAAAA1uZXdQb29sTWFrZXJzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkBAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAQBQAAAAVhQ29kZQUAAAADYUlEBQAAAA9maW5hbFBvb2xTdGF0dXMFAAAADmFQcmljZURlY2ltYWxzBQAAAA5hQmFraW5nQXNzZXRJZAUAAAAWYU92ZXJDb2xsYXRlcmFsUGVyY2VudAUAAAAQYU1pblJlcXVpcmVkUG9vbAUAAAATYVByaWNlT3JhY2xlQWRkcmVzcwUAAAAOYU1pbkJ1eVBheW1lbnQFAAAAD2FNaW5TZWxsUGF5bWVudAUAAAAQYUJ1eUxvY2tJbnRlcnZhbAUAAAARYVNlbGxMb2NrSW50ZXJ2YWwFAAAAB2FCdXlGZWUFAAAACGFTZWxsRmVlBQAAABhhUmVkZW1wdGlvblRpbWVvdXRCbG9ja3MFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAUAAAADbmlsAwkAAAAAAAACBQAAABFjdXJyZW50UG9vbFN0YXR1cwgFAAAAC2Fzc2V0U3RhdHVzAAAAAl8zCQAETQAAAAIFAAAABnJlc3VsdAkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAMYXNzZXRBZGRyZXNzCAUAAAAPYXR0YWNoZWRQYXltZW50AAAABmFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAAZyZXN1bHQAAAABaQEAAAANYWN0aXZhdGVBc3NldAAAAAEAAAAJYXNzZXRDb2RlBAAAAAxhc3NldEFkZHJlc3MJAQAAABVnZXRBc3NldEFkZHJlc3NCeUNvZGUAAAABBQAAAAlhc3NldENvZGUEAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBAAAABZjdXJyZW50QXNzZXRQb29sQW1vdW50CQEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEFAAAADGFzc2V0QWRkcmVzcwQAAAAFYUNvZGUJAQAAAAxnZXRBc3NldENvZGUAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5hQ3VycmVudFN0YXR1cwkBAAAADmdldEFzc2V0U3RhdHVzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAADYUlECQEAAAAKZ2V0QXNzZXRJRAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADmFQcmljZURlY2ltYWxzCQEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAOYUJha2luZ0Fzc2V0SWQJAQAAABVnZXRBc3NldEJha2luZ0Fzc2V0SWQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50CQEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhTWluUmVxdWlyZWRQb29sCQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABNhUHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAaZ2V0QXNzZXRQcmljZU9yYWNsZUFkZHJlc3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5hTWluQnV5UGF5bWVudAkBAAAAGGdldE1pbkJ1eVBheW1lbnRQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAD2FNaW5TZWxsUGF5bWVudAkBAAAAGWdldE1pblNlbGxQYXltZW50UGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhQnV5TG9ja0ludGVydmFsCQEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABFhU2VsbExvY2tJbnRlcnZhbAkBAAAAG2dldFNlbGxMb2NrSW50ZXJ2YWxQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAB2FCdXlGZWUJAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAACGFTZWxsRmVlCQEAAAASZ2V0U2VsbEZlZVBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAYYVJlZGVtcHRpb25UaW1lb3V0QmxvY2tzCQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQJAQAAACFnZXRXZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0AwkBAAAAAiE9AAAAAgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADmFkbWluUHVibGljS2V5CQAAAgAAAAECAAAAKk9ubHkgQWRtaW4gY2FuIHBlcmZvcm0gY29udHJhY3Qgb3BlcmF0aW9uLgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkBAAAAAiE9AAAAAgUAAAAOYUN1cnJlbnRTdGF0dXMIBQAAAAthc3NldFN0YXR1cwAAAAJfMgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAwQXNzZXQgaXMgbm90IGluIFJFQURZIHN0YXR1cy4gQ3VycmVudCBzdGF0dXMgaXMgBQAAAA5hQ3VycmVudFN0YXR1cwIAAAABLgMJAAAAAAAAAgUAAAAMYXNzZXRBZGRyZXNzAgAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEkNhbm5vdCBmaW5kIGFzc2V0IAUAAAAJYXNzZXRDb2RlAgAAAAEuAwkAAGYAAAACBQAAABJtaW5pbXVtUG9vbEZ1bmRpbmcFAAAAFmN1cnJlbnRBc3NldFBvb2xBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAC1DYW5ub3QgaXNzdWUgYXNzZXQgYXMgbGlxdWlkaXR5IHBvb2wgYW1vdW50ICgJAAGkAAAAAQUAAAAWY3VycmVudEFzc2V0UG9vbEFtb3VudAIAAAAZKSBpcyBsZXNzIHRoYW4gcmVxdWlyZWQgKAkAAaQAAAABBQAAABJtaW5pbXVtUG9vbEZ1bmRpbmcCAAAAASkEAAAACWlzc3VlRGVidAkBAAAAB1JlaXNzdWUAAAADBQAAAAlkZWJ0VG9rZW4FAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MJAQAAAB9jb21wb3NlQXNzZXRDb25maWd1cmF0aW9uU3RyaW5nAAAAEAUAAAAFYUNvZGUFAAAAA2FJRAgFAAAAC2Fzc2V0U3RhdHVzAAAAAl8zBQAAAA5hUHJpY2VEZWNpbWFscwUAAAAOYUJha2luZ0Fzc2V0SWQFAAAAFmFPdmVyQ29sbGF0ZXJhbFBlcmNlbnQFAAAAEGFNaW5SZXF1aXJlZFBvb2wFAAAAE2FQcmljZU9yYWNsZUFkZHJlc3MFAAAADmFNaW5CdXlQYXltZW50BQAAAA9hTWluU2VsbFBheW1lbnQFAAAAEGFCdXlMb2NrSW50ZXJ2YWwFAAAAEWFTZWxsTG9ja0ludGVydmFsBQAAAAdhQnV5RmVlBQAAAAhhU2VsbEZlZQUAAAAYYVJlZGVtcHRpb25UaW1lb3V0QmxvY2tzBQAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQJAARMAAAAAgUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAWY3VycmVudEFzc2V0UG9vbEFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAWZGVidFRva2VuUmVpc3N1ZUFtb3VudAUAAAAJZGVidFRva2VuBQAAAANuaWwAAAABaQEAAAAOcmVkZWVtRnJvbVBvb2wAAAACAAAACWFzc2V0Q29kZQAAAAZhbW91bnQEAAAADGFzc2V0QWRkcmVzcwkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQQAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkBAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABBQAAAAxhc3NldEFkZHJlc3MEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABl0b3RhbEFtb3VudEluUG9vbEJ5Q2FsbGVyCQEAAAAfZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwQAAAAXbG9ja2VkQW1vdW50QnlQb29sTWFrZXIJAQAAABhnZXRQb29sTWFrZXJMb2NrZWRBbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQAAAAAAAAIFAAAADGFzc2V0QWRkcmVzcwIAAAAACQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABJDYW5ub3QgZmluZCBhc3NldCAFAAAACWFzc2V0Q29kZQIAAAABLgMDAwkAAGYAAAACAAAAAAAAAAAABQAAAAZhbW91bnQGCQAAAAAAAAIFAAAAGXRvdGFsQW1vdW50SW5Qb29sQnlDYWxsZXIAAAAAAAAAAAAGCQAAZgAAAAIFAAAABmFtb3VudAUAAAAZdG90YWxBbW91bnRJblBvb2xCeUNhbGxlcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAiQ2Fubm90IGZpbmQgcG9vbCBtYWtlciBieSBhZGRyZXNzIAUAAAANY2FsbGVyQWRkcmVzcwIAAAAhIG9yIGFtb3VudCBwYXNzZWQgaXMgbm90IGNvcnJlY3QuAwkAAGYAAAACBQAAABdsb2NrZWRBbW91bnRCeVBvb2xNYWtlcgAAAAAAAAAAAAkAAAIAAAABAgAAAEZQb29sIG1ha2VyIGFscmVhZHkgaGFzIGluaXRpYXRlZCByZWRlbXB0aW9uIHRoYXQgaXMgbm90IHdpdGhkcmF3biB5ZXQuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtnZXRQb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MJAABkAAAAAgUAAAAGaGVpZ2h0CQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAABAAAACWFzc2V0Q29kZQQAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkBAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABBQAAAAlhc3NldENvZGUEAAAADGFzc2V0QWRkcmVzcwkBAAAAFWdldEFzc2V0QWRkcmVzc0J5Q29kZQAAAAEFAAAACWFzc2V0Q29kZQQAAAAScHJpY2VPcmFjbGVBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAaZ2V0QXNzZXRQcmljZU9yYWNsZUFkZHJlc3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA1jYWxsZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAASc3ludGhldGljQXNzZXRJbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgIAAAAYQ2Fubm90IGZpbmQgYXNzZXQgYnkgaWQgBQAAAAxhc3NldEFkZHJlc3MEAAAAGnRvdGFsVVNETkJhbGFuY2VPbkNvbnRyYWN0CQAD8AAAAAIFAAAABHRoaXMFAAAAD25ldXRyaW5vQXNzZXRJZAQAAAAcdG90YWxBbW91bnRJblBvb2xCeVBvb2xNYWtlcgkBAAAAH2dldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MEAAAAF2xvY2tlZEFtb3VudEJ5UG9vbE1ha2VyCQEAAAAYZ2V0UG9vbE1ha2VyTG9ja2VkQW1vdW50AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBAAAABFtaW5XaXRoZHJhd0hlaWdodAkBAAAAGGdldFBvb2xNYWtlclVubG9ja0hlaWdodAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwQAAAATcG9vbE1ha2V0UHJvcG9ydGlvbgkAAGkAAAACCQEAAAAVZ2V0QXNzZXRNYXhQb29sQW1vdW50AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbk1heEFtb3VudAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwMJAQAAAAIhPQAAAAIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5hZG1pblB1YmxpY0tleQkAAAIAAAABAgAAACpPbmx5IEFkbWluIGNhbiBwZXJmb3JtIGNvbnRyYWN0IG9wZXJhdGlvbi4DCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BwkAAAIAAAABAgAAABpDb250cmFjdCBpcyBub3QgeWV0IHJlYWR5LgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkAAAAAAAACBQAAAAxhc3NldEFkZHJlc3MCAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAASQ2Fubm90IGZpbmQgYXNzZXQgBQAAAAlhc3NldENvZGUCAAAAAS4DCQAAAAAAAAIFAAAAHHRvdGFsQW1vdW50SW5Qb29sQnlQb29sTWFrZXIAAAAAAAAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIkNhbm5vdCBmaW5kIHBvb2wgbWFrZXIgYnkgYWRkcmVzcyAFAAAADWNhbGxlckFkZHJlc3MCAAAAFSBvciBubyBsb2NrZWQgYW1vdW50LgMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABFtaW5XaXRoZHJhd0hlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAMUGxlYXNlIHdhaXQgCQABpAAAAAEFAAAAEW1pbldpdGhkcmF3SGVpZ2h0AgAAABEgYmVmb3JlIHdpdGhkcmF3LgQAAAANYXNzZXRFbWlzc2lvbggFAAAAEnN5bnRoZXRpY0Fzc2V0SW5mbwAAAAhxdWFudGl0eQQAAAAMY3VycmVudFByaWNlCQEAAAANZ2V0QXNzZXRQcmljZQAAAAIFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwUAAAAJYXNzZXRDb2RlBAAAABVwb29sTWFrZXJMb2NrZWRBbW91bnQJAQAAABhnZXRQb29sTWFrZXJMb2NrZWRBbW91bnQAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MEAAAAG3ByaWNlV2l0aE92ZXJjb2xsYXRlcmFsUmF0ZQkAAGgAAAACCQEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAAAxjdXJyZW50UHJpY2UEAAAAGXVzZG5OZWVkZWRUb0NvdmVyRW1pc3Npb24JAABoAAAAAgUAAAAbcHJpY2VXaXRoT3ZlcmNvbGxhdGVyYWxSYXRlBQAAAA1hc3NldEVtaXNzaW9uAwkAAGYAAAACBQAAABp0b3RhbFVTRE5CYWxhbmNlT25Db250cmFjdAUAAAAZdXNkbk5lZWRlZFRvQ292ZXJFbWlzc2lvbgQAAAAcYW1vdXRBdmFpbGFibGVUb0V4aXRGcm9tUG9vbAkAAGUAAAACBQAAABp0b3RhbFVTRE5CYWxhbmNlT25Db250cmFjdAUAAAAZdXNkbk5lZWRlZFRvQ292ZXJFbWlzc2lvbgQAAAARYW1vdW50Rm9yV2l0aGRyYXcJAABoAAAAAgUAAAATcG9vbE1ha2V0UHJvcG9ydGlvbgUAAAAcYW1vdXRBdmFpbGFibGVUb0V4aXRGcm9tUG9vbAQAAAARZmluYWxMb2NrZWRBbW91bnQJAABlAAAAAgkBAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwUAAAARYW1vdW50Rm9yV2l0aGRyYXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwkAAGUAAAACCQEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAARYW1vdW50Rm9yV2l0aGRyYXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzCQAAZQAAAAIJAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBQAAABFhbW91bnRGb3JXaXRoZHJhdwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAG2dldFBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwUAAAARZmluYWxMb2NrZWRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAANY2FsbGVyQWRkcmVzcwUAAAARYW1vdW50Rm9yV2l0aGRyYXcFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAAAq/VC0g==", "chainId": 84, "height": 1227371, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GNhYbVZ9ACMchHwkqDAmgLKWwyachspSErHvicN71k6n Next: DAHqw9o6NW55eeGxh97P16sBGtVj9DMFHgE7fKdJWLVD Diff:
OldNewDifferences
4040
4141 let v = 15
4242
43-let w = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
43+let w = 16
4444
45-let x = "%s%s__commonConfig__neutrinoContractAddress"
45+let x = "$ADMINPK"
4646
47-let y = "%s%s__commonConfig__neutrinoStakingAddress"
47+let y = "%s%s__commonConfig__neutrinoContractAddress"
4848
49-let z = "%s%s__commonConfig__minimumPoolFundingAmount"
49+let z = "%s%s__commonConfig__neutrinoStakingAddress"
5050
51-let A = "%s%s__commonConfig__initialized"
51+let A = "%s%s__commonConfig__minimumPoolFundingAmount"
5252
53-let B = "%s%s__commonConfig__predefinedAssetsActiveIndex"
53+let B = "%s%s__commonConfig__initialized"
5454
55-let C = "%s%s__commonConfig__predefinedAssetsList"
55+let C = "%s%s__commonConfig__predefinedAssetsActiveIndex"
5656
57-let D = "%s%s__commonConfig__debtAssetId"
57+let D = "%s%s__commonConfig__predefinedAssetsList"
5858
59-let E = "%s%s__commonConfig__debtAssetEtalonBalance"
59+let E = "%s%s__commonConfig__debtAssetId"
6060
61-let F = "%s%s__commonConfig__defoStakingAddress"
61+let F = "%s%s__commonConfig__debtAssetEtalonBalance"
6262
63-let G = "%s%s__commonConfig__defoStakingPacemakerPub"
63+let G = "%s%s__commonConfig__defoStakingAddress"
6464
65-let H = "neutrino_asset_id"
65+let H = "%s%s__commonConfig__defoStakingPacemakerPub"
6666
67-let I = "bond_asset_id"
67+let I = "neutrino_asset_id"
6868
69-let J = "%s__defoAssetId"
69+let J = "bond_asset_id"
7070
71-let K = "%s__assetScriptTxId"
71+let K = "%s__defoAssetId"
7272
73-func L (M) = (("%s%s%s__defoAsset__" + M) + "__config")
73+let L = "%s__assetScriptTxId"
74+
75+func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
7476
7577
76-func N (O) = ("%s%s__assetPrice__" + O)
78+func O (P) = ("%s%s__assetPrice__" + P)
7779
7880
79-func P (M) = (("%s%s%s__defoAsset__" + M) + "__initHeight")
81+func Q (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
8082
8183
82-func Q (M) = (("%s%s%s__defoAsset__" + M) + "__activateHeight")
84+func R (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
8385
8486
85-func R (M) = (("%s%s%s__defoAsset__" + M) + "__currentPool")
87+func S (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
8688
8789
88-func S (M) = (("%s%s%s__defoAsset__" + M) + "__maxPool")
90+func T (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
8991
9092
91-func T (M) = (("%s%s%s__defoAsset__" + M) + "__meta")
93+func U (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
9294
9395
94-func U (M) = (("%s%s%s__defoAsset__" + M) + "__poolMakers")
96+func V (N) = (("%s%s%s__defoAsset__" + N) + "__poolMakers")
9597
9698
97-func V (O) = (("%s%s%s__defoAsset__" + O) + "__addressByAssetCode")
99+func W (P) = (("%s%s%s__defoAsset__" + P) + "__addressByAssetCode")
98100
99101
100-func W (X) = (("%s%s%s__defoAsset__" + X) + "__addressByAssetId")
102+func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__addressByAssetId")
101103
102104
103-func Y (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__amount")
105+func Z (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__amount")
104106
105107
106-func aa (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__maxAmount")
108+func ab (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__maxAmount")
107109
108110
109-func ab (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__lockedAmount")
111+func ac (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__lockedAmount")
110112
111113
112-func ac (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__unlockHeight")
114+func ad (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__unlockHeight")
113115
114116
115-func ad (M) = a(valueOrErrorMessage(d(this, L(M)), (("No DEFO Asset " + M) + "config present")), "__")
117+func ae (N) = a(valueOrErrorMessage(d(this, M(N)), (("No DEFO Asset " + N) + "config present")), "__")
116118
117119
118-let ae = addressFromStringValue(valueOrErrorMessage(getString(this, x), "No neutrino contract specified."))
120+let af = addressFromStringValue(valueOrErrorMessage(getString(this, y), "No neutrino contract specified."))
119121
120-let af = fromBase58String(valueOrErrorMessage(getString(ae, H), "No USDN asset id found."))
122+let ag = fromBase58String(valueOrErrorMessage(getString(af, I), "No USDN asset id found."))
121123
122-let ag = fromBase58String(valueOrErrorMessage(getString(ae, I), "No NSBT asset id found"))
124+let ah = fromBase58String(valueOrErrorMessage(getString(af, J), "No NSBT asset id found"))
123125
124-let ah = valueOrErrorMessage(getInteger(this, z), "Minimum pool funding amount is not specified.")
126+let ai = valueOrErrorMessage(getInteger(this, A), "Minimum pool funding amount is not specified.")
125127
126-let ai = $Tuple3("PROPOSED", "READY", "ISSUED")
128+let aj = $Tuple3("PROPOSED", "READY", "ISSUED")
127129
128-let aj = valueOrErrorMessage(getString(this, C), "No pool of predeployed asset contracts found.")
130+let ak = valueOrErrorMessage(getString(this, D), "No pool of predeployed asset contracts found.")
129131
130-let ak = a(aj, ",")
132+let al = a(ak, ",")
131133
132-let al = valueOrElse(getInteger(this, B), 0)
134+let am = valueOrElse(getInteger(this, C), 0)
133135
134-let am = fromBase58String(valueOrErrorMessage(getString(this, D), "No debt token found"))
136+let an = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
135137
136-let an = 1000000
138+let ao = 1000000
137139
138-let ao = valueOrElse(getInteger(this, E), 0)
140+let ap = valueOrElse(getInteger(this, F), 0)
139141
140-func ap (aq) = valueOrElse(getString(this, V(aq)), "")
142+func aq (ar) = valueOrElse(getString(this, W(ar)), "")
141143
142144
143-func ar (as) = as[h]
145+func as (at) = at[h]
144146
145147
146-func at (as) = as[i]
148+func au (at) = at[i]
147149
148150
149-func au (as) = as[j]
151+func av (at) = at[j]
150152
151153
152-func av (as) = parseIntValue(as[k])
154+func aw (at) = parseIntValue(at[k])
153155
154156
155-func aw (as) = as[l]
157+func ax (at) = at[l]
156158
157159
158-func ax (as) = parseIntValue(as[m])
160+func ay (at) = parseIntValue(at[m])
159161
160162
161-func ay (as) = parseIntValue(as[n])
163+func az (at) = parseIntValue(at[n])
162164
163165
164-func az (as) = as[o]
166+func aA (at) = at[o]
165167
166168
167-func aA (as) = parseIntValue(as[p])
169+func aB (at) = parseIntValue(at[p])
168170
169171
170-func aB (as) = parseIntValue(as[q])
172+func aC (at) = parseIntValue(at[q])
171173
172174
173-func aC (as) = parseIntValue(as[r])
175+func aD (at) = parseIntValue(at[r])
174176
175177
176-func aD (as) = parseIntValue(as[s])
178+func aE (at) = parseIntValue(at[s])
177179
178180
179-func aE (as) = parseIntValue(as[t])
181+func aF (at) = parseIntValue(at[t])
180182
181183
182-func aF (as) = parseIntValue(as[u])
184+func aG (at) = parseIntValue(at[u])
183185
184186
185-func aG (as) = parseIntValue(as[v])
187+func aH (at) = parseIntValue(at[v])
186188
187189
188-func aH (M) = valueOrElse(getString(this, U(M)), "")
190+func aI (at) = parseIntValue(at[w])
189191
190192
191-func aI (M) = valueOrElse(getInteger(this, P(M)), 0)
193+func aJ (N) = valueOrElse(getString(this, V(N)), "")
192194
193195
194-func aJ (M) = valueOrElse(getInteger(this, Q(M)), 0)
196+func aK (N) = valueOrElse(getInteger(this, Q(N)), 0)
195197
196198
197-func aK (M) = valueOrElse(getInteger(this, R(M)), 0)
199+func aL (N) = valueOrElse(getInteger(this, R(N)), 0)
198200
199201
200-func aL (M) = valueOrElse(getInteger(this, S(M)), 0)
202+func aM (N) = valueOrElse(getInteger(this, S(N)), 0)
201203
202204
203-func aM (M) = valueOrElse(getString(this, T(M)), "")
205+func aN (N) = valueOrElse(getInteger(this, T(N)), 0)
204206
205207
206-func aN (M,Z) = valueOrElse(getInteger(this, Y(M, Z)), 0)
208+func aO (N) = valueOrElse(getString(this, U(N)), "")
207209
208210
209-func aO (M,Z) = valueOrElse(getInteger(this, aa(M, Z)), 0)
211+func aP (N,aa) = valueOrElse(getInteger(this, Z(N, aa)), 0)
210212
211213
212-func aP (M,Z) = valueOrElse(getInteger(this, ab(M, Z)), 0)
214+func aQ (N,aa) = valueOrElse(getInteger(this, ab(N, aa)), 0)
213215
214216
215-func aQ (M,Z) = valueOrElse(getInteger(this, ac(M, Z)), 0)
217+func aR (N,aa) = valueOrElse(getInteger(this, ac(N, aa)), 0)
216218
217219
218-func aR (aS,O) = valueOrErrorMessage(getInteger(aS, N(O)), "No Asset price found")
220+func aS (N,aa) = valueOrElse(getInteger(this, ad(N, aa)), 0)
219221
220222
221-func aT (O,X,ai,aU,aV,aW,aX,aS,aY,aZ,ba,bb,bc,bd,be) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", O, X, ai, toString(aU), aV, toString(aW), toString(aX), aS, toString(aY), toString(aZ), toString(ba), toString(bb), toString(bc), toString(bd), toString(be)], "__")
223+func aT (aU,P) = valueOrErrorMessage(getInteger(aU, O(P)), "No Asset price found")
222224
223225
224-@Callable(bf)
225-func init (bg,bh,bi,bj,al,bk,bl,bm) = if ((toBase58String(bf.callerPublicKey) != w))
226+func aV (P,Y,aj,aW,aX,aY,aZ,aU,ba,bb,bc,bd,be,bf,bg,bh) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", P, Y, aj, toString(aW), aX, toString(aY), toString(aZ), aU, toString(ba), toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg)], "__")
227+
228+
229+@Callable(bi)
230+func init (bj,bk,bl,bm,am,bn,bo,bp) = if ((toBase58String(bi.callerPublicKey) != x))
226231 then throw("Only Admin can perform contract operation.")
227- else if ((g(A) == true))
232+ else if ((g(B) == true))
228233 then throw("Contract was already initialized.")
229234 else {
230- let bn = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
231- let bo = calculateAssetId(bn)
232-[StringEntry(x, bg), StringEntry(y, bh), IntegerEntry(z, bi), StringEntry(C, bj), IntegerEntry(B, al), IntegerEntry(E, bk), StringEntry(D, toBase58String(bo)), StringEntry(F, bl), StringEntry(G, bm), BooleanEntry(A, true), bn, Burn(bo, 1)]
235+ let bq = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
236+ let br = calculateAssetId(bq)
237+[StringEntry(y, bj), StringEntry(z, bk), IntegerEntry(A, bl), StringEntry(D, bm), IntegerEntry(C, am), IntegerEntry(F, bn), StringEntry(E, toBase58String(br)), StringEntry(G, bo), StringEntry(H, bp), BooleanEntry(B, true), bq, Burn(br, 1)]
233238 }
234239
235240
236241
237-@Callable(bf)
238-func proposeAsset (O,bp,aX,aS,aW,aV,aU,aY,aZ,ba,bb,bc,bd,be) = if ((toBase58String(bf.callerPublicKey) != w))
242+@Callable(bi)
243+func proposeAsset (P,bs,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bi.callerPublicKey) != x))
239244 then throw("Only Admin can perform contract operation.")
240- else if ((g(A) == false))
245+ else if ((g(B) == false))
241246 then throw("Contract is not yet ready.")
242- else if ((fromBase58String(aV) != af))
247+ else if ((fromBase58String(aX) != ag))
243248 then throw("Baking asset id could be USDN only.")
244- else if ((ap(O) != ""))
245- then throw((("Asset with passed code " + O) + " has already been proposed."))
246- else if ((ah > aX))
247- then throw(("Minimum pool amount should be greater or equals to " + toString(ah)))
248- else if (if (if (if (if (if (if (if ((0 > aW))
249+ else if ((aq(P) != ""))
250+ then throw((("Asset with passed code " + P) + " has already been proposed."))
251+ else if ((ai > aZ))
252+ then throw(("Minimum pool amount should be greater or equals to " + toString(ai)))
253+ else if (if (if (if (if (if (if (if ((0 > aY))
249254 then true
250- else (0 > aU))
251- then true
252- else (0 > aY))
253- then true
254- else (0 > aZ))
255+ else (0 > aW))
255256 then true
256257 else (0 > ba))
257258 then true
260261 else (0 > bc))
261262 then true
262263 else (0 > bd))
264+ then true
265+ else (0 > be))
266+ then true
267+ else (0 > bf))
263268 then throw("One of the passed parameters is invalid.")
264269 else {
265- let bq = valueOrErrorMessage(addressFromStringValue(aS), "Passed Price Oracle Address is not valid.")
266- let M = ak[al]
267- let br = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(M), ""), J), "No defo asset ID found.")
268-[StringEntry(L(M), aT(O, br, ai._1, aU, aV, aW, aX, aS, aY, aZ, ba, bb, bc, bd, be)), StringEntry(V(O), M), StringEntry(T(M), bp), IntegerEntry(P(M), height), IntegerEntry(B, (al + 1)), StringEntry(W(br), M)]
270+ let bt = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
271+ let N = al[am]
272+ let bu = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
273+[StringEntry(M(N), aV(P, bu, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bs), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bu), N)]
269274 }
270275
271276
272277
273-@Callable(bf)
274-func fundLiquidityPool (O) = {
275- let M = ap(O)
276- let bs = ad(M)
277- let bt = value(bf.payments[0])
278- if ((toBase58String(bf.callerPublicKey) != w))
278+@Callable(bi)
279+func fundLiquidityPool (P) = {
280+ let N = aq(P)
281+ let bv = ae(N)
282+ let bw = value(bi.payments[0])
283+ if ((toBase58String(bi.callerPublicKey) != x))
279284 then throw("Only Admin can perform contract operation.")
280- else if ((g(A) == false))
285+ else if ((g(B) == false))
281286 then throw("Contract is not yet ready.")
282- else if ((bt.assetId != af))
287+ else if ((bw.assetId != ag))
283288 then throw("Liquidity pool could be funded with USDN only.")
284- else if ((bt.amount == 0))
289+ else if ((bw.amount == 0))
285290 then throw("Incorrect attached payment amount.")
286- else if ((M == ""))
287- then throw((("Cannot find liquidity pool for asset " + O) + "."))
291+ else if ((N == ""))
292+ then throw((("Cannot find liquidity pool for asset " + P) + "."))
288293 else {
289- let bu = (bt.amount + aK(M))
290- let bv = aL(M)
291- let Z = toString(bf.caller)
292- let bw = aN(M, Z)
293- let bx = aO(M, Z)
294- let by = au(bs)
295- let bz = if (if ((bu >= ay(bs)))
296- then (by == ai._1)
294+ let bx = (bw.amount + aM(N))
295+ let by = aN(N)
296+ let aa = toString(bi.caller)
297+ let bz = aP(N, aa)
298+ let bA = aQ(N, aa)
299+ let bB = av(bv)
300+ let bC = if (if ((bx >= az(bv)))
301+ then (bB == aj._1)
297302 else false)
298- then ai._2
299- else by
300- let bA = aH(M)
301- let bB = if ((bA == ""))
302- then Z
303- else if (contains(bA, Z))
304- then bA
305- else ((bA + ",") + toString(bf.caller))
306- let bC = ar(bs)
307- let bD = at(bs)
308- let bE = av(bs)
309- let bF = aw(bs)
310- let bG = ax(bs)
311- let bH = ay(bs)
312- let bI = az(bs)
313- let bJ = aA(bs)
314- let bK = aB(bs)
315- let bL = aC(bs)
316- let bM = aD(bs)
317- let bN = aE(bs)
318- let bO = aF(bs)
319- let bP = aG(bs)
320- let bQ = (bw + bf.payments[0].amount)
321- let bR = [IntegerEntry(Y(M, toString(bf.caller)), bQ), IntegerEntry(aa(M, toString(bf.caller)), if ((bQ > bx))
322- then bQ
323- else bx), IntegerEntry(R(M), bu), IntegerEntry(S(M), if ((bu > bv))
324- then bu
325- else bv), DeleteEntry(L(M)), StringEntry(U(M), bB), StringEntry(L(M), aT(bC, bD, bz, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP))]
326- if ((by == ai._3))
327- then (bR :+ ScriptTransfer(addressFromStringValue(M), bt.amount, af))
328- else bR
303+ then aj._2
304+ else bB
305+ let bD = aJ(N)
306+ let bE = if ((bD == ""))
307+ then aa
308+ else if (contains(bD, aa))
309+ then bD
310+ else ((bD + ",") + toString(bi.caller))
311+ let bF = as(bv)
312+ let bG = au(bv)
313+ let bH = aw(bv)
314+ let bI = ax(bv)
315+ let bJ = ay(bv)
316+ let bK = az(bv)
317+ let bL = aA(bv)
318+ let bM = aB(bv)
319+ let bN = aC(bv)
320+ let bO = aD(bv)
321+ let bP = aE(bv)
322+ let bQ = aF(bv)
323+ let bR = aG(bv)
324+ let bS = aH(bv)
325+ let bh = aI(bv)
326+ let bT = (bz + bi.payments[0].amount)
327+ let bU = [IntegerEntry(Z(N, toString(bi.caller)), bT), IntegerEntry(ab(N, toString(bi.caller)), if ((bT > bA))
328+ then bT
329+ else bA), IntegerEntry(S(N), bx), IntegerEntry(T(N), if ((bx > by))
330+ then bx
331+ else by), DeleteEntry(M(N)), StringEntry(V(N), bE), StringEntry(M(N), aV(bF, bG, bC, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh))]
332+ if ((bB == aj._3))
333+ then (bU :+ ScriptTransfer(addressFromStringValue(N), bw.amount, ag))
334+ else bU
329335 }
330336 }
331337
332338
333339
334-@Callable(bf)
335-func activateAsset (O) = {
336- let M = ap(O)
337- let bs = ad(M)
338- let bS = aK(M)
339- let bC = ar(bs)
340- let bT = au(bs)
341- let bD = at(bs)
342- let bE = av(bs)
343- let bF = aw(bs)
344- let bG = ax(bs)
345- let bH = ay(bs)
346- let bI = az(bs)
347- let bJ = aA(bs)
348- let bK = aB(bs)
349- let bL = aC(bs)
350- let bM = aD(bs)
351- let bN = aE(bs)
352- let bO = aF(bs)
353- let bP = aG(bs)
354- if ((toBase58String(bf.callerPublicKey) != w))
340+@Callable(bi)
341+func activateAsset (P) = {
342+ let N = aq(P)
343+ let bv = ae(N)
344+ let bV = aM(N)
345+ let bF = as(bv)
346+ let bW = av(bv)
347+ let bG = au(bv)
348+ let bH = aw(bv)
349+ let bI = ax(bv)
350+ let bJ = ay(bv)
351+ let bK = az(bv)
352+ let bL = aA(bv)
353+ let bM = aB(bv)
354+ let bN = aC(bv)
355+ let bO = aD(bv)
356+ let bP = aE(bv)
357+ let bQ = aF(bv)
358+ let bR = aG(bv)
359+ let bS = aH(bv)
360+ let bh = aI(bv)
361+ if ((toBase58String(bi.callerPublicKey) != x))
355362 then throw("Only Admin can perform contract operation.")
356- else if ((g(A) == false))
363+ else if ((g(B) == false))
357364 then throw("Contract is not yet ready.")
358- else if ((bT != ai._2))
359- then throw((("Asset is not in READY status. Current status is " + bT) + "."))
360- else if ((M == ""))
361- then throw((("Cannot find asset " + O) + "."))
362- else if ((ah > bS))
363- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bS)) + ") is less than required (") + toString(ah)) + ")"))
365+ else if ((bW != aj._2))
366+ then throw((("Asset is not in READY status. Current status is " + bW) + "."))
367+ else if ((N == ""))
368+ then throw((("Cannot find asset " + P) + "."))
369+ else if ((ai > bV))
370+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bV)) + ") is less than required (") + toString(ai)) + ")"))
364371 else {
365- let bn = Reissue(am, ao, true)
366-[IntegerEntry(Q(M), height), DeleteEntry(L(M)), StringEntry(L(M), aT(bC, bD, ai._3, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP)), bn, ScriptTransfer(addressFromStringValue(M), bS, af), ScriptTransfer(addressFromStringValue(M), ao, am)]
372+ let bq = Reissue(an, ap, true)
373+[IntegerEntry(R(N), height), DeleteEntry(M(N)), StringEntry(M(N), aV(bF, bG, aj._3, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh)), bq, ScriptTransfer(addressFromStringValue(N), bV, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
367374 }
368375 }
369376
370377
371378
372-@Callable(bf)
373-func redeemFromPool (O,bU) = {
374- let M = ap(O)
375- let bs = ad(M)
376- let bV = toString(bf.caller)
377- let bW = aN(M, bV)
378- let bX = aP(M, bV)
379- if ((toBase58String(bf.callerPublicKey) != w))
379+@Callable(bi)
380+func redeemFromPool (P,bX) = {
381+ let N = aq(P)
382+ let bv = ae(N)
383+ let bY = toString(bi.caller)
384+ let bZ = aP(N, bY)
385+ let ca = aR(N, bY)
386+ if ((toBase58String(bi.callerPublicKey) != x))
380387 then throw("Only Admin can perform contract operation.")
381- else if ((g(A) == false))
388+ else if ((g(B) == false))
382389 then throw("Contract is not yet ready.")
383- else if ((M == ""))
384- then throw((("Cannot find asset " + O) + "."))
385- else if (if (if ((0 > bU))
390+ else if ((N == ""))
391+ then throw((("Cannot find asset " + P) + "."))
392+ else if (if (if ((0 > bX))
386393 then true
387- else (bW == 0))
394+ else (bZ == 0))
388395 then true
389- else (bU > bW))
390- then throw((("Cannot find pool maker by address " + bV) + " or amount passed is not correct."))
391- else if ((bX > 0))
396+ else (bX > bZ))
397+ then throw((("Cannot find pool maker by address " + bY) + " or amount passed is not correct."))
398+ else if ((ca > 0))
392399 then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
393- else [IntegerEntry(ab(M, bV), bU), IntegerEntry(ac(M, bV), (height + aG(bs)))]
400+ else [IntegerEntry(ac(N, bY), bX), IntegerEntry(ad(N, bY), (height + aH(bv)))]
394401 }
395402
396403
397404
398-@Callable(bf)
399-func withdraw (O) = {
400- let bs = ad(O)
401- let M = ap(O)
402- let aS = addressFromStringValue(az(bs))
403- let bV = toString(bf.caller)
404- let bY = valueOrErrorMessage(assetInfo(fromBase58String(M)), ("Cannot find asset by id " + M))
405- let bZ = assetBalance(this, af)
406- let ca = aN(M, bV)
407- let bX = aP(M, bV)
408- let cb = aQ(M, bV)
409- let cc = (aL(M) / aO(M, bV))
410- if ((toBase58String(bf.callerPublicKey) != w))
405+@Callable(bi)
406+func withdraw (P) = {
407+ let bv = ae(P)
408+ let N = aq(P)
409+ let aU = addressFromStringValue(aA(bv))
410+ let bY = toString(bi.caller)
411+ let cb = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
412+ let cc = assetBalance(this, ag)
413+ let cd = aP(N, bY)
414+ let ca = aR(N, bY)
415+ let ce = aS(N, bY)
416+ let cf = (aN(N) / aQ(N, bY))
417+ if ((toBase58String(bi.callerPublicKey) != x))
411418 then throw("Only Admin can perform contract operation.")
412- else if ((g(A) == false))
419+ else if ((g(B) == false))
413420 then throw("Contract is not yet ready.")
414- else if ((g(A) == false))
421+ else if ((g(B) == false))
415422 then throw("Contract is not yet ready.")
416- else if ((M == ""))
417- then throw((("Cannot find asset " + O) + "."))
418- else if ((ca == 0))
419- then throw((("Cannot find pool maker by address " + bV) + " or no locked amount."))
420- else if ((height > cb))
421- then throw((("Please wait " + toString(cb)) + " before withdraw."))
423+ else if ((N == ""))
424+ then throw((("Cannot find asset " + P) + "."))
425+ else if ((cd == 0))
426+ then throw((("Cannot find pool maker by address " + bY) + " or no locked amount."))
427+ else if ((height > ce))
428+ then throw((("Please wait " + toString(ce)) + " before withdraw."))
422429 else {
423- let cd = bY.quantity
424- let ce = aR(aS, O)
425- let cf = aP(M, bV)
426- let cg = (ax(bs) * ce)
427- let ch = (cg * cd)
428- if ((bZ > ch))
430+ let cg = cb.quantity
431+ let ch = aT(aU, P)
432+ let ci = aR(N, bY)
433+ let cj = (ay(bv) * ch)
434+ let ck = (cj * cg)
435+ if ((cc > ck))
429436 then {
430- let ci = (bZ - ch)
431- let cj = (cc * ci)
432- let ck = (aP(M, bV) - cj)
433-[IntegerEntry(R(M), (aK(M) - cj)), IntegerEntry(Y(M, bV), (aN(M, bV) - cj)), IntegerEntry(ab(M, bV), ck), ScriptTransfer(addressFromStringValue(bV), cj, af)]
437+ let cl = (cc - ck)
438+ let cm = (cf * cl)
439+ let cn = (aR(N, bY) - cm)
440+[IntegerEntry(S(N), (aM(N) - cm)), IntegerEntry(Z(N, bY), (aP(N, bY) - cm)), IntegerEntry(ac(N, bY), cn), ScriptTransfer(addressFromStringValue(bY), cm, ag)]
434441 }
435442 else nil
436443 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = split(b, c)
55
66
77 func d (e,f) = valueOrElse(getString(e, f), "")
88
99
1010 func g (f) = valueOrElse(getBoolean(this, f), false)
1111
1212
1313 let h = 1
1414
1515 let i = 2
1616
1717 let j = 3
1818
1919 let k = 4
2020
2121 let l = 5
2222
2323 let m = 6
2424
2525 let n = 7
2626
2727 let o = 8
2828
2929 let p = 9
3030
3131 let q = 10
3232
3333 let r = 11
3434
3535 let s = 12
3636
3737 let t = 13
3838
3939 let u = 14
4040
4141 let v = 15
4242
43-let w = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
43+let w = 16
4444
45-let x = "%s%s__commonConfig__neutrinoContractAddress"
45+let x = "$ADMINPK"
4646
47-let y = "%s%s__commonConfig__neutrinoStakingAddress"
47+let y = "%s%s__commonConfig__neutrinoContractAddress"
4848
49-let z = "%s%s__commonConfig__minimumPoolFundingAmount"
49+let z = "%s%s__commonConfig__neutrinoStakingAddress"
5050
51-let A = "%s%s__commonConfig__initialized"
51+let A = "%s%s__commonConfig__minimumPoolFundingAmount"
5252
53-let B = "%s%s__commonConfig__predefinedAssetsActiveIndex"
53+let B = "%s%s__commonConfig__initialized"
5454
55-let C = "%s%s__commonConfig__predefinedAssetsList"
55+let C = "%s%s__commonConfig__predefinedAssetsActiveIndex"
5656
57-let D = "%s%s__commonConfig__debtAssetId"
57+let D = "%s%s__commonConfig__predefinedAssetsList"
5858
59-let E = "%s%s__commonConfig__debtAssetEtalonBalance"
59+let E = "%s%s__commonConfig__debtAssetId"
6060
61-let F = "%s%s__commonConfig__defoStakingAddress"
61+let F = "%s%s__commonConfig__debtAssetEtalonBalance"
6262
63-let G = "%s%s__commonConfig__defoStakingPacemakerPub"
63+let G = "%s%s__commonConfig__defoStakingAddress"
6464
65-let H = "neutrino_asset_id"
65+let H = "%s%s__commonConfig__defoStakingPacemakerPub"
6666
67-let I = "bond_asset_id"
67+let I = "neutrino_asset_id"
6868
69-let J = "%s__defoAssetId"
69+let J = "bond_asset_id"
7070
71-let K = "%s__assetScriptTxId"
71+let K = "%s__defoAssetId"
7272
73-func L (M) = (("%s%s%s__defoAsset__" + M) + "__config")
73+let L = "%s__assetScriptTxId"
74+
75+func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
7476
7577
76-func N (O) = ("%s%s__assetPrice__" + O)
78+func O (P) = ("%s%s__assetPrice__" + P)
7779
7880
79-func P (M) = (("%s%s%s__defoAsset__" + M) + "__initHeight")
81+func Q (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
8082
8183
82-func Q (M) = (("%s%s%s__defoAsset__" + M) + "__activateHeight")
84+func R (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
8385
8486
85-func R (M) = (("%s%s%s__defoAsset__" + M) + "__currentPool")
87+func S (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
8688
8789
88-func S (M) = (("%s%s%s__defoAsset__" + M) + "__maxPool")
90+func T (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
8991
9092
91-func T (M) = (("%s%s%s__defoAsset__" + M) + "__meta")
93+func U (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
9294
9395
94-func U (M) = (("%s%s%s__defoAsset__" + M) + "__poolMakers")
96+func V (N) = (("%s%s%s__defoAsset__" + N) + "__poolMakers")
9597
9698
97-func V (O) = (("%s%s%s__defoAsset__" + O) + "__addressByAssetCode")
99+func W (P) = (("%s%s%s__defoAsset__" + P) + "__addressByAssetCode")
98100
99101
100-func W (X) = (("%s%s%s__defoAsset__" + X) + "__addressByAssetId")
102+func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__addressByAssetId")
101103
102104
103-func Y (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__amount")
105+func Z (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__amount")
104106
105107
106-func aa (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__maxAmount")
108+func ab (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__maxAmount")
107109
108110
109-func ab (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__lockedAmount")
111+func ac (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__lockedAmount")
110112
111113
112-func ac (M,Z) = (((("%s%s%s%s__pool__" + M) + "__") + Z) + "__unlockHeight")
114+func ad (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__unlockHeight")
113115
114116
115-func ad (M) = a(valueOrErrorMessage(d(this, L(M)), (("No DEFO Asset " + M) + "config present")), "__")
117+func ae (N) = a(valueOrErrorMessage(d(this, M(N)), (("No DEFO Asset " + N) + "config present")), "__")
116118
117119
118-let ae = addressFromStringValue(valueOrErrorMessage(getString(this, x), "No neutrino contract specified."))
120+let af = addressFromStringValue(valueOrErrorMessage(getString(this, y), "No neutrino contract specified."))
119121
120-let af = fromBase58String(valueOrErrorMessage(getString(ae, H), "No USDN asset id found."))
122+let ag = fromBase58String(valueOrErrorMessage(getString(af, I), "No USDN asset id found."))
121123
122-let ag = fromBase58String(valueOrErrorMessage(getString(ae, I), "No NSBT asset id found"))
124+let ah = fromBase58String(valueOrErrorMessage(getString(af, J), "No NSBT asset id found"))
123125
124-let ah = valueOrErrorMessage(getInteger(this, z), "Minimum pool funding amount is not specified.")
126+let ai = valueOrErrorMessage(getInteger(this, A), "Minimum pool funding amount is not specified.")
125127
126-let ai = $Tuple3("PROPOSED", "READY", "ISSUED")
128+let aj = $Tuple3("PROPOSED", "READY", "ISSUED")
127129
128-let aj = valueOrErrorMessage(getString(this, C), "No pool of predeployed asset contracts found.")
130+let ak = valueOrErrorMessage(getString(this, D), "No pool of predeployed asset contracts found.")
129131
130-let ak = a(aj, ",")
132+let al = a(ak, ",")
131133
132-let al = valueOrElse(getInteger(this, B), 0)
134+let am = valueOrElse(getInteger(this, C), 0)
133135
134-let am = fromBase58String(valueOrErrorMessage(getString(this, D), "No debt token found"))
136+let an = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
135137
136-let an = 1000000
138+let ao = 1000000
137139
138-let ao = valueOrElse(getInteger(this, E), 0)
140+let ap = valueOrElse(getInteger(this, F), 0)
139141
140-func ap (aq) = valueOrElse(getString(this, V(aq)), "")
142+func aq (ar) = valueOrElse(getString(this, W(ar)), "")
141143
142144
143-func ar (as) = as[h]
145+func as (at) = at[h]
144146
145147
146-func at (as) = as[i]
148+func au (at) = at[i]
147149
148150
149-func au (as) = as[j]
151+func av (at) = at[j]
150152
151153
152-func av (as) = parseIntValue(as[k])
154+func aw (at) = parseIntValue(at[k])
153155
154156
155-func aw (as) = as[l]
157+func ax (at) = at[l]
156158
157159
158-func ax (as) = parseIntValue(as[m])
160+func ay (at) = parseIntValue(at[m])
159161
160162
161-func ay (as) = parseIntValue(as[n])
163+func az (at) = parseIntValue(at[n])
162164
163165
164-func az (as) = as[o]
166+func aA (at) = at[o]
165167
166168
167-func aA (as) = parseIntValue(as[p])
169+func aB (at) = parseIntValue(at[p])
168170
169171
170-func aB (as) = parseIntValue(as[q])
172+func aC (at) = parseIntValue(at[q])
171173
172174
173-func aC (as) = parseIntValue(as[r])
175+func aD (at) = parseIntValue(at[r])
174176
175177
176-func aD (as) = parseIntValue(as[s])
178+func aE (at) = parseIntValue(at[s])
177179
178180
179-func aE (as) = parseIntValue(as[t])
181+func aF (at) = parseIntValue(at[t])
180182
181183
182-func aF (as) = parseIntValue(as[u])
184+func aG (at) = parseIntValue(at[u])
183185
184186
185-func aG (as) = parseIntValue(as[v])
187+func aH (at) = parseIntValue(at[v])
186188
187189
188-func aH (M) = valueOrElse(getString(this, U(M)), "")
190+func aI (at) = parseIntValue(at[w])
189191
190192
191-func aI (M) = valueOrElse(getInteger(this, P(M)), 0)
193+func aJ (N) = valueOrElse(getString(this, V(N)), "")
192194
193195
194-func aJ (M) = valueOrElse(getInteger(this, Q(M)), 0)
196+func aK (N) = valueOrElse(getInteger(this, Q(N)), 0)
195197
196198
197-func aK (M) = valueOrElse(getInteger(this, R(M)), 0)
199+func aL (N) = valueOrElse(getInteger(this, R(N)), 0)
198200
199201
200-func aL (M) = valueOrElse(getInteger(this, S(M)), 0)
202+func aM (N) = valueOrElse(getInteger(this, S(N)), 0)
201203
202204
203-func aM (M) = valueOrElse(getString(this, T(M)), "")
205+func aN (N) = valueOrElse(getInteger(this, T(N)), 0)
204206
205207
206-func aN (M,Z) = valueOrElse(getInteger(this, Y(M, Z)), 0)
208+func aO (N) = valueOrElse(getString(this, U(N)), "")
207209
208210
209-func aO (M,Z) = valueOrElse(getInteger(this, aa(M, Z)), 0)
211+func aP (N,aa) = valueOrElse(getInteger(this, Z(N, aa)), 0)
210212
211213
212-func aP (M,Z) = valueOrElse(getInteger(this, ab(M, Z)), 0)
214+func aQ (N,aa) = valueOrElse(getInteger(this, ab(N, aa)), 0)
213215
214216
215-func aQ (M,Z) = valueOrElse(getInteger(this, ac(M, Z)), 0)
217+func aR (N,aa) = valueOrElse(getInteger(this, ac(N, aa)), 0)
216218
217219
218-func aR (aS,O) = valueOrErrorMessage(getInteger(aS, N(O)), "No Asset price found")
220+func aS (N,aa) = valueOrElse(getInteger(this, ad(N, aa)), 0)
219221
220222
221-func aT (O,X,ai,aU,aV,aW,aX,aS,aY,aZ,ba,bb,bc,bd,be) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", O, X, ai, toString(aU), aV, toString(aW), toString(aX), aS, toString(aY), toString(aZ), toString(ba), toString(bb), toString(bc), toString(bd), toString(be)], "__")
223+func aT (aU,P) = valueOrErrorMessage(getInteger(aU, O(P)), "No Asset price found")
222224
223225
224-@Callable(bf)
225-func init (bg,bh,bi,bj,al,bk,bl,bm) = if ((toBase58String(bf.callerPublicKey) != w))
226+func aV (P,Y,aj,aW,aX,aY,aZ,aU,ba,bb,bc,bd,be,bf,bg,bh) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", P, Y, aj, toString(aW), aX, toString(aY), toString(aZ), aU, toString(ba), toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg)], "__")
227+
228+
229+@Callable(bi)
230+func init (bj,bk,bl,bm,am,bn,bo,bp) = if ((toBase58String(bi.callerPublicKey) != x))
226231 then throw("Only Admin can perform contract operation.")
227- else if ((g(A) == true))
232+ else if ((g(B) == true))
228233 then throw("Contract was already initialized.")
229234 else {
230- let bn = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
231- let bo = calculateAssetId(bn)
232-[StringEntry(x, bg), StringEntry(y, bh), IntegerEntry(z, bi), StringEntry(C, bj), IntegerEntry(B, al), IntegerEntry(E, bk), StringEntry(D, toBase58String(bo)), StringEntry(F, bl), StringEntry(G, bm), BooleanEntry(A, true), bn, Burn(bo, 1)]
235+ let bq = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
236+ let br = calculateAssetId(bq)
237+[StringEntry(y, bj), StringEntry(z, bk), IntegerEntry(A, bl), StringEntry(D, bm), IntegerEntry(C, am), IntegerEntry(F, bn), StringEntry(E, toBase58String(br)), StringEntry(G, bo), StringEntry(H, bp), BooleanEntry(B, true), bq, Burn(br, 1)]
233238 }
234239
235240
236241
237-@Callable(bf)
238-func proposeAsset (O,bp,aX,aS,aW,aV,aU,aY,aZ,ba,bb,bc,bd,be) = if ((toBase58String(bf.callerPublicKey) != w))
242+@Callable(bi)
243+func proposeAsset (P,bs,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bi.callerPublicKey) != x))
239244 then throw("Only Admin can perform contract operation.")
240- else if ((g(A) == false))
245+ else if ((g(B) == false))
241246 then throw("Contract is not yet ready.")
242- else if ((fromBase58String(aV) != af))
247+ else if ((fromBase58String(aX) != ag))
243248 then throw("Baking asset id could be USDN only.")
244- else if ((ap(O) != ""))
245- then throw((("Asset with passed code " + O) + " has already been proposed."))
246- else if ((ah > aX))
247- then throw(("Minimum pool amount should be greater or equals to " + toString(ah)))
248- else if (if (if (if (if (if (if (if ((0 > aW))
249+ else if ((aq(P) != ""))
250+ then throw((("Asset with passed code " + P) + " has already been proposed."))
251+ else if ((ai > aZ))
252+ then throw(("Minimum pool amount should be greater or equals to " + toString(ai)))
253+ else if (if (if (if (if (if (if (if ((0 > aY))
249254 then true
250- else (0 > aU))
251- then true
252- else (0 > aY))
253- then true
254- else (0 > aZ))
255+ else (0 > aW))
255256 then true
256257 else (0 > ba))
257258 then true
258259 else (0 > bb))
259260 then true
260261 else (0 > bc))
261262 then true
262263 else (0 > bd))
264+ then true
265+ else (0 > be))
266+ then true
267+ else (0 > bf))
263268 then throw("One of the passed parameters is invalid.")
264269 else {
265- let bq = valueOrErrorMessage(addressFromStringValue(aS), "Passed Price Oracle Address is not valid.")
266- let M = ak[al]
267- let br = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(M), ""), J), "No defo asset ID found.")
268-[StringEntry(L(M), aT(O, br, ai._1, aU, aV, aW, aX, aS, aY, aZ, ba, bb, bc, bd, be)), StringEntry(V(O), M), StringEntry(T(M), bp), IntegerEntry(P(M), height), IntegerEntry(B, (al + 1)), StringEntry(W(br), M)]
270+ let bt = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
271+ let N = al[am]
272+ let bu = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
273+[StringEntry(M(N), aV(P, bu, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bs), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bu), N)]
269274 }
270275
271276
272277
273-@Callable(bf)
274-func fundLiquidityPool (O) = {
275- let M = ap(O)
276- let bs = ad(M)
277- let bt = value(bf.payments[0])
278- if ((toBase58String(bf.callerPublicKey) != w))
278+@Callable(bi)
279+func fundLiquidityPool (P) = {
280+ let N = aq(P)
281+ let bv = ae(N)
282+ let bw = value(bi.payments[0])
283+ if ((toBase58String(bi.callerPublicKey) != x))
279284 then throw("Only Admin can perform contract operation.")
280- else if ((g(A) == false))
285+ else if ((g(B) == false))
281286 then throw("Contract is not yet ready.")
282- else if ((bt.assetId != af))
287+ else if ((bw.assetId != ag))
283288 then throw("Liquidity pool could be funded with USDN only.")
284- else if ((bt.amount == 0))
289+ else if ((bw.amount == 0))
285290 then throw("Incorrect attached payment amount.")
286- else if ((M == ""))
287- then throw((("Cannot find liquidity pool for asset " + O) + "."))
291+ else if ((N == ""))
292+ then throw((("Cannot find liquidity pool for asset " + P) + "."))
288293 else {
289- let bu = (bt.amount + aK(M))
290- let bv = aL(M)
291- let Z = toString(bf.caller)
292- let bw = aN(M, Z)
293- let bx = aO(M, Z)
294- let by = au(bs)
295- let bz = if (if ((bu >= ay(bs)))
296- then (by == ai._1)
294+ let bx = (bw.amount + aM(N))
295+ let by = aN(N)
296+ let aa = toString(bi.caller)
297+ let bz = aP(N, aa)
298+ let bA = aQ(N, aa)
299+ let bB = av(bv)
300+ let bC = if (if ((bx >= az(bv)))
301+ then (bB == aj._1)
297302 else false)
298- then ai._2
299- else by
300- let bA = aH(M)
301- let bB = if ((bA == ""))
302- then Z
303- else if (contains(bA, Z))
304- then bA
305- else ((bA + ",") + toString(bf.caller))
306- let bC = ar(bs)
307- let bD = at(bs)
308- let bE = av(bs)
309- let bF = aw(bs)
310- let bG = ax(bs)
311- let bH = ay(bs)
312- let bI = az(bs)
313- let bJ = aA(bs)
314- let bK = aB(bs)
315- let bL = aC(bs)
316- let bM = aD(bs)
317- let bN = aE(bs)
318- let bO = aF(bs)
319- let bP = aG(bs)
320- let bQ = (bw + bf.payments[0].amount)
321- let bR = [IntegerEntry(Y(M, toString(bf.caller)), bQ), IntegerEntry(aa(M, toString(bf.caller)), if ((bQ > bx))
322- then bQ
323- else bx), IntegerEntry(R(M), bu), IntegerEntry(S(M), if ((bu > bv))
324- then bu
325- else bv), DeleteEntry(L(M)), StringEntry(U(M), bB), StringEntry(L(M), aT(bC, bD, bz, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP))]
326- if ((by == ai._3))
327- then (bR :+ ScriptTransfer(addressFromStringValue(M), bt.amount, af))
328- else bR
303+ then aj._2
304+ else bB
305+ let bD = aJ(N)
306+ let bE = if ((bD == ""))
307+ then aa
308+ else if (contains(bD, aa))
309+ then bD
310+ else ((bD + ",") + toString(bi.caller))
311+ let bF = as(bv)
312+ let bG = au(bv)
313+ let bH = aw(bv)
314+ let bI = ax(bv)
315+ let bJ = ay(bv)
316+ let bK = az(bv)
317+ let bL = aA(bv)
318+ let bM = aB(bv)
319+ let bN = aC(bv)
320+ let bO = aD(bv)
321+ let bP = aE(bv)
322+ let bQ = aF(bv)
323+ let bR = aG(bv)
324+ let bS = aH(bv)
325+ let bh = aI(bv)
326+ let bT = (bz + bi.payments[0].amount)
327+ let bU = [IntegerEntry(Z(N, toString(bi.caller)), bT), IntegerEntry(ab(N, toString(bi.caller)), if ((bT > bA))
328+ then bT
329+ else bA), IntegerEntry(S(N), bx), IntegerEntry(T(N), if ((bx > by))
330+ then bx
331+ else by), DeleteEntry(M(N)), StringEntry(V(N), bE), StringEntry(M(N), aV(bF, bG, bC, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh))]
332+ if ((bB == aj._3))
333+ then (bU :+ ScriptTransfer(addressFromStringValue(N), bw.amount, ag))
334+ else bU
329335 }
330336 }
331337
332338
333339
334-@Callable(bf)
335-func activateAsset (O) = {
336- let M = ap(O)
337- let bs = ad(M)
338- let bS = aK(M)
339- let bC = ar(bs)
340- let bT = au(bs)
341- let bD = at(bs)
342- let bE = av(bs)
343- let bF = aw(bs)
344- let bG = ax(bs)
345- let bH = ay(bs)
346- let bI = az(bs)
347- let bJ = aA(bs)
348- let bK = aB(bs)
349- let bL = aC(bs)
350- let bM = aD(bs)
351- let bN = aE(bs)
352- let bO = aF(bs)
353- let bP = aG(bs)
354- if ((toBase58String(bf.callerPublicKey) != w))
340+@Callable(bi)
341+func activateAsset (P) = {
342+ let N = aq(P)
343+ let bv = ae(N)
344+ let bV = aM(N)
345+ let bF = as(bv)
346+ let bW = av(bv)
347+ let bG = au(bv)
348+ let bH = aw(bv)
349+ let bI = ax(bv)
350+ let bJ = ay(bv)
351+ let bK = az(bv)
352+ let bL = aA(bv)
353+ let bM = aB(bv)
354+ let bN = aC(bv)
355+ let bO = aD(bv)
356+ let bP = aE(bv)
357+ let bQ = aF(bv)
358+ let bR = aG(bv)
359+ let bS = aH(bv)
360+ let bh = aI(bv)
361+ if ((toBase58String(bi.callerPublicKey) != x))
355362 then throw("Only Admin can perform contract operation.")
356- else if ((g(A) == false))
363+ else if ((g(B) == false))
357364 then throw("Contract is not yet ready.")
358- else if ((bT != ai._2))
359- then throw((("Asset is not in READY status. Current status is " + bT) + "."))
360- else if ((M == ""))
361- then throw((("Cannot find asset " + O) + "."))
362- else if ((ah > bS))
363- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bS)) + ") is less than required (") + toString(ah)) + ")"))
365+ else if ((bW != aj._2))
366+ then throw((("Asset is not in READY status. Current status is " + bW) + "."))
367+ else if ((N == ""))
368+ then throw((("Cannot find asset " + P) + "."))
369+ else if ((ai > bV))
370+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bV)) + ") is less than required (") + toString(ai)) + ")"))
364371 else {
365- let bn = Reissue(am, ao, true)
366-[IntegerEntry(Q(M), height), DeleteEntry(L(M)), StringEntry(L(M), aT(bC, bD, ai._3, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP)), bn, ScriptTransfer(addressFromStringValue(M), bS, af), ScriptTransfer(addressFromStringValue(M), ao, am)]
372+ let bq = Reissue(an, ap, true)
373+[IntegerEntry(R(N), height), DeleteEntry(M(N)), StringEntry(M(N), aV(bF, bG, aj._3, bH, bI, bJ, bK, bL, bM, bN, bO, bP, bQ, bR, bS, bh)), bq, ScriptTransfer(addressFromStringValue(N), bV, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
367374 }
368375 }
369376
370377
371378
372-@Callable(bf)
373-func redeemFromPool (O,bU) = {
374- let M = ap(O)
375- let bs = ad(M)
376- let bV = toString(bf.caller)
377- let bW = aN(M, bV)
378- let bX = aP(M, bV)
379- if ((toBase58String(bf.callerPublicKey) != w))
379+@Callable(bi)
380+func redeemFromPool (P,bX) = {
381+ let N = aq(P)
382+ let bv = ae(N)
383+ let bY = toString(bi.caller)
384+ let bZ = aP(N, bY)
385+ let ca = aR(N, bY)
386+ if ((toBase58String(bi.callerPublicKey) != x))
380387 then throw("Only Admin can perform contract operation.")
381- else if ((g(A) == false))
388+ else if ((g(B) == false))
382389 then throw("Contract is not yet ready.")
383- else if ((M == ""))
384- then throw((("Cannot find asset " + O) + "."))
385- else if (if (if ((0 > bU))
390+ else if ((N == ""))
391+ then throw((("Cannot find asset " + P) + "."))
392+ else if (if (if ((0 > bX))
386393 then true
387- else (bW == 0))
394+ else (bZ == 0))
388395 then true
389- else (bU > bW))
390- then throw((("Cannot find pool maker by address " + bV) + " or amount passed is not correct."))
391- else if ((bX > 0))
396+ else (bX > bZ))
397+ then throw((("Cannot find pool maker by address " + bY) + " or amount passed is not correct."))
398+ else if ((ca > 0))
392399 then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
393- else [IntegerEntry(ab(M, bV), bU), IntegerEntry(ac(M, bV), (height + aG(bs)))]
400+ else [IntegerEntry(ac(N, bY), bX), IntegerEntry(ad(N, bY), (height + aH(bv)))]
394401 }
395402
396403
397404
398-@Callable(bf)
399-func withdraw (O) = {
400- let bs = ad(O)
401- let M = ap(O)
402- let aS = addressFromStringValue(az(bs))
403- let bV = toString(bf.caller)
404- let bY = valueOrErrorMessage(assetInfo(fromBase58String(M)), ("Cannot find asset by id " + M))
405- let bZ = assetBalance(this, af)
406- let ca = aN(M, bV)
407- let bX = aP(M, bV)
408- let cb = aQ(M, bV)
409- let cc = (aL(M) / aO(M, bV))
410- if ((toBase58String(bf.callerPublicKey) != w))
405+@Callable(bi)
406+func withdraw (P) = {
407+ let bv = ae(P)
408+ let N = aq(P)
409+ let aU = addressFromStringValue(aA(bv))
410+ let bY = toString(bi.caller)
411+ let cb = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
412+ let cc = assetBalance(this, ag)
413+ let cd = aP(N, bY)
414+ let ca = aR(N, bY)
415+ let ce = aS(N, bY)
416+ let cf = (aN(N) / aQ(N, bY))
417+ if ((toBase58String(bi.callerPublicKey) != x))
411418 then throw("Only Admin can perform contract operation.")
412- else if ((g(A) == false))
419+ else if ((g(B) == false))
413420 then throw("Contract is not yet ready.")
414- else if ((g(A) == false))
421+ else if ((g(B) == false))
415422 then throw("Contract is not yet ready.")
416- else if ((M == ""))
417- then throw((("Cannot find asset " + O) + "."))
418- else if ((ca == 0))
419- then throw((("Cannot find pool maker by address " + bV) + " or no locked amount."))
420- else if ((height > cb))
421- then throw((("Please wait " + toString(cb)) + " before withdraw."))
423+ else if ((N == ""))
424+ then throw((("Cannot find asset " + P) + "."))
425+ else if ((cd == 0))
426+ then throw((("Cannot find pool maker by address " + bY) + " or no locked amount."))
427+ else if ((height > ce))
428+ then throw((("Please wait " + toString(ce)) + " before withdraw."))
422429 else {
423- let cd = bY.quantity
424- let ce = aR(aS, O)
425- let cf = aP(M, bV)
426- let cg = (ax(bs) * ce)
427- let ch = (cg * cd)
428- if ((bZ > ch))
430+ let cg = cb.quantity
431+ let ch = aT(aU, P)
432+ let ci = aR(N, bY)
433+ let cj = (ay(bv) * ch)
434+ let ck = (cj * cg)
435+ if ((cc > ck))
429436 then {
430- let ci = (bZ - ch)
431- let cj = (cc * ci)
432- let ck = (aP(M, bV) - cj)
433-[IntegerEntry(R(M), (aK(M) - cj)), IntegerEntry(Y(M, bV), (aN(M, bV) - cj)), IntegerEntry(ab(M, bV), ck), ScriptTransfer(addressFromStringValue(bV), cj, af)]
437+ let cl = (cc - ck)
438+ let cm = (cf * cl)
439+ let cn = (aR(N, bY) - cm)
440+[IntegerEntry(S(N), (aM(N) - cm)), IntegerEntry(Z(N, bY), (aP(N, bY) - cm)), IntegerEntry(ac(N, bY), cn), ScriptTransfer(addressFromStringValue(bY), cm, ag)]
434441 }
435442 else nil
436443 }
437444 }
438445
439446

github/deemru/w8io/c3f4982 
210.62 ms