tx · CP3B6voJ9BFaP5Jh1n1vU3yEQotepaAo51KovJSysVj

3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS:  -0.01400000 Waves

2020.11.03 11:10 [1248857] smart account 3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS > SELF 0.00000000 Waves

{ "type": 13, "id": "CP3B6voJ9BFaP5Jh1n1vU3yEQotepaAo51KovJSysVj", "fee": 1400000, "feeAssetId": null, "timestamp": 1604391035133, "version": 1, "sender": "3N3UHNYQ8xwe2WWLKgXX628JyUtF6kYK4wS", "senderPublicKey": "Hxyif8HnnHh34SZ7PZewDcNUgrZfHNJsQvLNCcPbCW27", "proofs": [ "5tZNBLcY8WDP36hN1iTTqNaz8kfXvLvHFbxfN7s6Xsdmdh6Hh1YYcUbb7uAu3CgvA3VaSkMCmhL8BerLEj3QGAw7" ], "script": "base64:AAIEAAAAAAAAADwIAhIKCggICAEIAQEICBIRCg8ICAEIAQgBAQEBAQEBAQESAwoBCBIDCgEIEgQKAggBEgQKAggIEgMKAQgAAABpAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAgAAAAlqc29uQXJyYXkAAAALc3BsaXRTeW1ib2wJAAS1AAAAAgUAAAAJanNvbkFycmF5BQAAAAtzcGxpdFN5bWJvbAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkCAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5BwAAAAADU0VQAgAAAAJfXwAAAAAMa2V5QXNzZXRDb2RlAAAAAAAAAAABAAAAAAprZXlBc3NldElkAAAAAAAAAAACAAAAAA5rZXlBc3NldFN0YXR1cwAAAAAAAAAAAwAAAAAVa2V5QXNzZXRQcmljZURlY2ltYWxzAAAAAAAAAAAEAAAAABNrZXlBc3NldEJha2luZ0Fzc2V0AAAAAAAAAAAFAAAAABtrZXlPdmVyY29sbGF0ZXJhbFBlcmNlbnRhZ2UAAAAAAAAAAAYAAAAACmtleU1pblBvb2wAAAAAAAAAAAcAAAAAFWtleVByaWNlT3JhY2xlQWRkcmVzcwAAAAAAAAAACAAAAAAQa2V5TWluQnV5UGF5bWVudAAAAAAAAAAACQAAAAARa2V5TWluU2VsbFBheW1lbnQAAAAAAAAAAAoAAAAAEmtleUJ1eUxvY2tJbnRlcnZhbAAAAAAAAAAACwAAAAATa2V5U2VsbExvY2tJbnRlcnZhbAAAAAAAAAAADAAAAAAJa2V5QnV5RmVlAAAAAAAAAAANAAAAAAprZXlTZWxsRmVlAAAAAAAAAAAOAAAAABhrZXlQb29sUmVkZW1wdGlvblRpbWVvdXQAAAAAAAAAAA8AAAAAIWtleVdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAAAAAAAEAAAAAAOYWRtaW5QdWJsaWNLZXkCAAAALEcxRWJ1NUFNSGFUSkZFYlpOa1pRY0pGVVE5S2ZpWVV3dXB5TEc4NTdEY0ZyAAAAABpuZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub0NvbnRyYWN0QWRkcmVzcwAAAAAZbmV1dHJpbm9TdGFraW5nQWRkcmVzc0tleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub1N0YWtpbmdBZGRyZXNzAAAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALCVzJXNfX2NvbW1vbkNvbmZpZ19fbWluaW11bVBvb2xGdW5kaW5nQW1vdW50AAAAABBpc0luaXRpYWxpemVkS2V5AgAAAB8lcyVzX19jb21tb25Db25maWdfX2luaXRpYWxpemVkAAAAABRjdXJyZW50QXNzZXRJbmRleEtleQIAAAAvJXMlc19fY29tbW9uQ29uZmlnX19wcmVkZWZpbmVkQXNzZXRzQWN0aXZlSW5kZXgAAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5AgAAACglcyVzX19jb21tb25Db25maWdfX3ByZWRlZmluZWRBc3NldHNMaXN0AAAAAA5kZWJ0VG9rZW5JZEtleQIAAAAfJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRJZAAAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRFdGFsb25CYWxhbmNlAAAAABVkZWZvU3Rha2luZ0FkZHJlc3NLZXkCAAAAJiVzJXNfX2NvbW1vbkNvbmZpZ19fZGVmb1N0YWtpbmdBZGRyZXNzAAAAABpkZWZvU3Rha2luZ1BhY2VtYWtlclB1YktleQIAAAArJXMlc19fY29tbW9uQ29uZmlnX19kZWZvU3Rha2luZ1BhY2VtYWtlclB1YgAAAAAWbWluUG9vbEludmVzdEFtb3VudEtleQIAAAAnJXMlc19fY29tbW9uQ29uZmlnX19taW5Qb29sSW52ZXN0QW1vdW50AAAAABJuZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAAA5uc2J0QXNzZXRJZEtleQIAAAANYm9uZF9hc3NldF9pZAAAAAAObmV1dHJpbm9ScGRLZXkCAAAADHJwZF9jb250cmFjdAAAAAAOZGVmb0Fzc2V0SWRLZXkCAAAADyVzX19kZWZvQXNzZXRJZAAAAAAVc2V0QXNzZXRTY3JpcHRUeElkS2V5AgAAABMlc19fYXNzZXRTY3JpcHRUeElkAQAAABFnZXRBc3NldENvbmZpZ0tleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAhfX2NvbmZpZwEAAAAQZ2V0QXNzZXRQcmljZUtleQAAAAEAAAAJYXNzZXRDb2RlCQABLAAAAAICAAAAEiVzJXNfX2Fzc2V0UHJpY2VfXwUAAAAJYXNzZXRDb2RlAQAAABVnZXRBc3NldEluaXRIZWlnaHRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAMX19pbml0SGVpZ2h0AQAAABlnZXRBc3NldEFjdGl2YXRlSGVpZ2h0S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAxhc3NldEFkZHJlc3MCAAAAEF9fYWN0aXZhdGVIZWlnaHQBAAAAHWdldEFzc2V0Q3VycnJlbnRQb29sQW1vdW50S2V5AAAAAQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAxhc3NldEFkZHJlc3MCAAAADV9fY3VycmVudFBvb2wBAAAAGGdldEFzc2V0TWF4UG9vbEFtb3VudEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAlfX21heFBvb2wBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAZfX21ldGEBAAAAFWdldEFzc2V0UG9vbE1ha2Vyc0tleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAMYXNzZXRBZGRyZXNzAgAAAAxfX3Bvb2xNYWtlcnMBAAAAGGdldEFzc2V0QWRkcmVzc0J5Q29kZUtleQAAAAEAAAAJYXNzZXRDb2RlCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAJYXNzZXRDb2RlAgAAABRfX2FkZHJlc3NCeUFzc2V0Q29kZQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlBc3NldElkS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgIAAAATJXMlcyVzX19kZWZvQXNzZXRfXwUAAAAHYXNzZXRJZAIAAAASX19hZGRyZXNzQnlBc3NldElkAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50S2V5AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAADiVzJXMlcyVzX19wb29sCQAETAAAAAIFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACBQAAABBwb29sTWFrZXJBZGRyZXNzCQAETAAAAAICAAAABmFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgIAAAAJbWF4QW1vdW50BQAAAANuaWwFAAAAA1NFUAEAAAAbZ2V0UG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAADiVzJXMlcyVzX19wb29sCQAETAAAAAIFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACBQAAABBwb29sTWFrZXJBZGRyZXNzCQAETAAAAAICAAAADGxvY2tlZEFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAG2dldFBvb2xNYWtlclVubG9ja0hlaWdodEtleQAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAA4lcyVzJXMlc19fcG9vbAkABEwAAAACBQAAAAxhc3NldEFkZHJlc3MJAARMAAAAAgUAAAAQcG9vbE1ha2VyQWRkcmVzcwkABEwAAAACAgAAAAx1bmxvY2tIZWlnaHQFAAAAA25pbAUAAAADU0VQAQAAAB9nZXRQb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5AAAAAwAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAFoCQAEuQAAAAIJAARMAAAAAgIAAAAQJXMlcyVzJWQlc19fcG9vbAkABEwAAAACBQAAAAxhc3NldEFkZHJlc3MJAARMAAAAAgUAAAAQcG9vbE1ha2VyQWRkcmVzcwkABEwAAAACCQABpAAAAAEFAAAAAWgJAARMAAAAAgIAAAAQbGlxdWlkaXR5UmVxdWVzdAUAAAADbmlsBQAAAANTRVABAAAAG2dldFBvb2xUb3RhbExvY2tlZEFtb3VudEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAMJXMlcyVzX19wb29sCQAETAAAAAIFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACAgAAABF0b3RhbExvY2tlZEFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAAAR0aGlzCQEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAA5ObyBERUZPIEFzc2V0IAUAAAAMYXNzZXRBZGRyZXNzAgAAAA5jb25maWcgcHJlc2VudAIAAAACX18AAAAADW11bHRpcGxpY2F0b3IAAAAAAAAPQkAAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAABpuZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQIAAAAfTm8gbmV1dHJpbm8gY29udHJhY3Qgc3BlY2lmaWVkLgAAAAASbmV1dHJpbm9Bc3NldElkU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASbmV1dHJpbm9Bc3NldElkS2V5AgAAABdObyBVU0ROIGFzc2V0IGlkIGZvdW5kLgAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEFAAAAEm5ldXRyaW5vQXNzZXRJZFN0cgAAAAALbnNidEFzc2V0SWQJAAJZAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADm5zYnRBc3NldElkS2V5AgAAABZObyBOU0JUIGFzc2V0IGlkIGZvdW5kAAAAABJtaW5pbXVtUG9vbEZ1bmRpbmcJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABttaW5pbXVuUG9vbEZ1bmRpbmdBbW91bnRLZXkCAAAALU1pbmltdW0gcG9vbCBmdW5kaW5nIGFtb3VudCBpcyBub3Qgc3BlY2lmaWVkLgAAAAATbWluUG9vbEludmVzdEFtb3VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABZtaW5Qb29sSW52ZXN0QW1vdW50S2V5CQAAaAAAAAIAAAAAAAAAAAoFAAAADW11bHRpcGxpY2F0b3IAAAAADUFTU0V0UFJPUE9TRUQCAAAACFBST1BPU0VEAAAAAApBU1NFdFJFQURZAgAAAAVSRUFEWQAAAAALQVNTRXRJU1NVRUQCAAAABklTU1VFRAAAAAALYXNzZXRTdGF0dXMJAAUVAAAAAwUAAAANQVNTRXRQUk9QT1NFRAUAAAAKQVNTRXRSRUFEWQUAAAALQVNTRXRJU1NVRUQAAAAAGHByZWRlZmluZWRBc3NldENvbnRyYWN0cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5AgAAAC1ObyBwb29sIG9mIHByZWRlcGxveWVkIGFzc2V0IGNvbnRyYWN0cyBmb3VuZC4AAAAAFHByZWRlZmluZWRBc3NldHNMaXN0CQEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAIFAAAAGHByZWRlZmluZWRBc3NldENvbnRyYWN0cwIAAAABLAAAAAARY3VycmVudEFzc2V0SW5kZXgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAUY3VycmVudEFzc2V0SW5kZXhLZXkAAAAAAAAAAAAAAAAACWRlYnRUb2tlbgkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAOZGVidFRva2VuSWRLZXkCAAAAE05vIGRlYnQgdG9rZW4gZm91bmQAAAAAFmRlYnRUb2tlblJlaXNzdWVBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAZZGVidFRva2VuRXRhbG9uQmFsYW5jZUtleQAAAAAAAAAAAAAAAAATbmV1dHJpbm9ScGRDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAObmV1dHJpbm9ScGRLZXkBAAAAFWdldE5ldXRyaW5vUnBkQmFsYW5jZQAAAAEAAAALdXNlckFkZHJlc3MEAAAAFnVzZXJOZXV0cmlub1JwZEJhbGFuY2UJAAS5AAAAAgkABEwAAAACAgAAAAtycGRfYmFsYW5jZQkABEwAAAACBQAAABJuZXV0cmlub0Fzc2V0SWRTdHIJAARMAAAAAgUAAAALdXNlckFkZHJlc3MFAAAAA25pbAIAAAABXwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAABNuZXV0cmlub1JwZENvbnRyYWN0BQAAABZ1c2VyTmV1dHJpbm9ScGRCYWxhbmNlAAAAAAAAAAAAAQAAABVnZXRBc3NldEFkZHJlc3NCeUNvZGUAAAABAAAAC2Fzc2V0U3ltYm9sCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAABhnZXRBc3NldEFkZHJlc3NCeUNvZGVLZXkAAAABBQAAAAthc3NldFN5bWJvbAIAAAAAAQAAABtnZXRBc3NldEFkZHJlc3NCeUNvZGVPckZhaWwAAAABAAAAC2Fzc2V0U3ltYm9sCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAGGdldEFzc2V0QWRkcmVzc0J5Q29kZUtleQAAAAEFAAAAC2Fzc2V0U3ltYm9sCQABLAAAAAIJAAEsAAAAAgIAAAAdQ2Fubm90IGZpbmQgYXNzZXQgYWRkcmVzcyBieSAFAAAAC2Fzc2V0U3ltYm9sAgAAAAUgY29kZQEAAAAMZ2V0QXNzZXRDb2RlAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAMa2V5QXNzZXRDb2RlAQAAAApnZXRBc3NldElEAAAAAQAAAAthc3NldENvbmZpZwkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAKa2V5QXNzZXRJZAEAAAAOZ2V0QXNzZXRTdGF0dXMAAAABAAAAC2Fzc2V0Q29uZmlnCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAA5rZXlBc3NldFN0YXR1cwEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABVrZXlBc3NldFByaWNlRGVjaW1hbHMBAAAAFWdldEFzc2V0QmFraW5nQXNzZXRJZAAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAE2tleUFzc2V0QmFraW5nQXNzZXQBAAAAHWdldEFzc2V0T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABtrZXlPdmVyY29sbGF0ZXJhbFBlcmNlbnRhZ2UBAAAAHWdldEFzc2V0TWluUmVxdWlyZWRQb29sQW1vdW50AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAAAprZXlNaW5Qb29sAQAAABpnZXRBc3NldFByaWNlT3JhY2xlQWRkcmVzcwAAAAEAAAALYXNzZXRDb25maWcJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAFWtleVByaWNlT3JhY2xlQWRkcmVzcwEAAAAYZ2V0TWluQnV5UGF5bWVudFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABBrZXlNaW5CdXlQYXltZW50AQAAABlnZXRNaW5TZWxsUGF5bWVudFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABFrZXlNaW5TZWxsUGF5bWVudAEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAAEmtleUJ1eUxvY2tJbnRlcnZhbAEAAAAbZ2V0U2VsbExvY2tJbnRlcnZhbFBlckFzc2V0AAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABNrZXlTZWxsTG9ja0ludGVydmFsAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAJa2V5QnV5RmVlAQAAABJnZXRTZWxsRmVlUGVyQXNzZXQAAAABAAAAC2Fzc2V0Q29uZmlnCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALYXNzZXRDb25maWcFAAAACmtleVNlbGxGZWUBAAAAGmdldFJlZGVtcHRpb25UaW1lb3V0QmxvY2tzAAAAAQAAAAthc3NldENvbmZpZwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2Fzc2V0Q29uZmlnBQAAABhrZXlQb29sUmVkZW1wdGlvblRpbWVvdXQBAAAAIWdldFdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAEAAAALYXNzZXRDb25maWcJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAthc3NldENvbmZpZwUAAAAha2V5V2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AQAAABJnZXRBc3NldFBvb2xNYWtlcnMAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzCQEAAAAVZ2V0QXNzZXRQb29sTWFrZXJzS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzAgAAAAABAAAAEmdldEFzc2V0SW5pdEhlaWdodAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABVnZXRBc3NldEluaXRIZWlnaHRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAAFmdldEFzc2V0QWN0aXZhdGVIZWlnaHQAAAABAAAADGFzc2V0QWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAB1nZXRBc3NldEN1cnJyZW50UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAVZ2V0QXNzZXRNYXhQb29sQW1vdW50AAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGGdldEFzc2V0TWF4UG9vbEFtb3VudEtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwAAAAAAAAAAAAEAAAAMZ2V0QXNzZXRNZXRhAAAAAQAAAAxhc3NldEFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEFAAAADGFzc2V0QWRkcmVzcwIAAAAAAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbk1heEFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACBQAAAAxhc3NldEFkZHJlc3MFAAAAEHBvb2xNYWtlckFkZHJlc3MAAAAAAAAAAAABAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAG2dldFBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAQcG9vbE1ha2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAYZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0AAAAAgAAAAxhc3NldEFkZHJlc3MAAAAQcG9vbE1ha2VyQWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABBwb29sTWFrZXJBZGRyZXNzAAAAAAAAAAAAAQAAAA1nZXRBc3NldFByaWNlAAAAAgAAABJwcmljZU9yYWNsZUFkZHJlc3MAAAAJYXNzZXRDb2RlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAScHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAQZ2V0QXNzZXRQcmljZUtleQAAAAEFAAAACWFzc2V0Q29kZQIAAAAUTm8gQXNzZXQgcHJpY2UgZm91bmQBAAAAGGdldFBvb2xUb3RhbExvY2tlZEFtb3VudAAAAAEAAAAMYXNzZXRBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABtnZXRQb29sVG90YWxMb2NrZWRBbW91bnRLZXkAAAABBQAAAAxhc3NldEFkZHJlc3MAAAAAAAAAAAABAAAAH2NvbXBvc2VBc3NldENvbmZpZ3VyYXRpb25TdHJpbmcAAAAQAAAACWFzc2V0Q29kZQAAAAdhc3NldElkAAAAC2Fzc2V0U3RhdHVzAAAADXByaWNlRGVjaW1hbHMAAAAOYmFja2luZ0Fzc2V0SWQAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAB21pblBvb2wAAAAScHJpY2VPcmFjbGVBZGRyZXNzAAAADW1pbkJ1eVBheW1lbnQAAAAObWluU2VsbFBheW1lbnQAAAAPYnV5TG9ja0ludGVydmFsAAAAEHNlbGxMb2NrSW50ZXJ2YWwAAAAGYnV5RmVlAAAAB3NlbGxGZWUAAAAVcG9vbFJlZGVtcHRpb25UaW1lb3V0AAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkABLkAAAACCQAETAAAAAICAAAAHiVzJXMlcyVkJXMlZCVkJXMlZCVkJWQlZCVkJWQlZAkABEwAAAACBQAAAAlhc3NldENvZGUJAARMAAAAAgUAAAAHYXNzZXRJZAkABEwAAAACBQAAAAthc3NldFN0YXR1cwkABEwAAAACCQABpAAAAAEFAAAADXByaWNlRGVjaW1hbHMJAARMAAAAAgUAAAAOYmFja2luZ0Fzc2V0SWQJAARMAAAAAgkAAaQAAAABBQAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQJAARMAAAAAgkAAaQAAAABBQAAAAdtaW5Qb29sCQAETAAAAAIFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkABEwAAAACCQABpAAAAAEFAAAADW1pbkJ1eVBheW1lbnQJAARMAAAAAgkAAaQAAAABBQAAAA5taW5TZWxsUGF5bWVudAkABEwAAAACCQABpAAAAAEFAAAAD2J1eUxvY2tJbnRlcnZhbAkABEwAAAACCQABpAAAAAEFAAAAEHNlbGxMb2NrSW50ZXJ2YWwJAARMAAAAAgkAAaQAAAABBQAAAAZidXlGZWUJAARMAAAAAgkAAaQAAAABBQAAAAdzZWxsRmVlCQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbFJlZGVtcHRpb25UaW1lb3V0CQAETAAAAAIJAAGkAAAAAQUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50BQAAAANuaWwCAAAAAl9fAQAAABR1cGRhdGVBc3NldENmZ1N0YXR1cwAAAAIAAAAJbmV3U3RhdHVzAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAABWFDb2RlCQEAAAAMZ2V0QXNzZXRDb2RlAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAADYUlECQEAAAAKZ2V0QXNzZXRJRAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADmFQcmljZURlY2ltYWxzCQEAAAAVZ2V0QXNzZXRQcmljZURlY2ltYWxzAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAOYUJha2luZ0Fzc2V0SWQJAQAAABVnZXRBc3NldEJha2luZ0Fzc2V0SWQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50CQEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhTWluUmVxdWlyZWRQb29sCQEAAAAdZ2V0QXNzZXRNaW5SZXF1aXJlZFBvb2xBbW91bnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABNhUHJpY2VPcmFjbGVBZGRyZXNzCQEAAAAaZ2V0QXNzZXRQcmljZU9yYWNsZUFkZHJlc3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5hTWluQnV5UGF5bWVudAkBAAAAGGdldE1pbkJ1eVBheW1lbnRQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAD2FNaW5TZWxsUGF5bWVudAkBAAAAGWdldE1pblNlbGxQYXltZW50UGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABBhQnV5TG9ja0ludGVydmFsCQEAAAAaZ2V0QnV5TG9ja0ludGVydmFsUGVyQXNzZXQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAABFhU2VsbExvY2tJbnRlcnZhbAkBAAAAG2dldFNlbGxMb2NrSW50ZXJ2YWxQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAAB2FCdXlGZWUJAQAAABFnZXRCdXlGZWVQZXJBc3NldAAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAACGFTZWxsRmVlCQEAAAASZ2V0U2VsbEZlZVBlckFzc2V0AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAYYVJlZGVtcHRpb25UaW1lb3V0QmxvY2tzCQEAAAAaZ2V0UmVkZW1wdGlvblRpbWVvdXRCbG9ja3MAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQJAQAAACFnZXRXZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQEAAAAfY29tcG9zZUFzc2V0Q29uZmlndXJhdGlvblN0cmluZwAAABAFAAAABWFDb2RlBQAAAANhSUQFAAAACW5ld1N0YXR1cwUAAAAOYVByaWNlRGVjaW1hbHMFAAAADmFCYWtpbmdBc3NldElkBQAAABZhT3ZlckNvbGxhdGVyYWxQZXJjZW50BQAAABBhTWluUmVxdWlyZWRQb29sBQAAABNhUHJpY2VPcmFjbGVBZGRyZXNzBQAAAA5hTWluQnV5UGF5bWVudAUAAAAPYU1pblNlbGxQYXltZW50BQAAABBhQnV5TG9ja0ludGVydmFsBQAAABFhU2VsbExvY2tJbnRlcnZhbAUAAAAHYUJ1eUZlZQUAAAAIYVNlbGxGZWUFAAAAGGFSZWRlbXB0aW9uVGltZW91dEJsb2NrcwUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AQAAABljYWxjQWxsb3dlZEFtb3VudFRvUmVkZWVtAAAAAgAAAAlhc3NldENvZGUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAPYXNzZXRBZGRyZXNzU3RyCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlDb2RlT3JGYWlsAAAAAQUAAAAJYXNzZXRDb2RlBAAAAAxhc3NldEFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAkBAAAAE2dldEFzc2V0Q29uZmlnQXJyYXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIEAAAACmFzc2V0SWRTdHIJAQAAAApnZXRBc3NldElEAAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphc3NldElkU3RyBAAAAA5wb29sQWN0dWFsU2l6ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIAAAAAAAAAAAAEAAAAC3Bvb2xNYXhTaXplCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIAAAAAAAAAAAAEAAAAGHBvb2xUb3RhbExvY2tlZEFtb3VudEtleQkBAAAAG2dldFBvb2xUb3RhbExvY2tlZEFtb3VudEtleQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAPcG9vbFRvdGFsTG9ja2VkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAGHBvb2xUb3RhbExvY2tlZEFtb3VudEtleQAAAAAAAAAAAAQAAAAVYXNzZXRVc2RuU3Rha2VkQW1vdW50CQEAAAAVZ2V0TmV1dHJpbm9ScGRCYWxhbmNlAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBAAAABZhc3NldFVzZG5CYWxhbmNlQW1vdW50CQAD8AAAAAIFAAAADGFzc2V0QWRkcmVzcwUAAAAPbmV1dHJpbm9Bc3NldElkBAAAABRhc3NldFRvdGFsVXNkbkFtb3VudAkAAGUAAAACCQAAZAAAAAIFAAAAFWFzc2V0VXNkblN0YWtlZEFtb3VudAUAAAAWYXNzZXRVc2RuQmFsYW5jZUFtb3VudAUAAAAPcG9vbFRvdGFsTG9ja2VkBAAAAAt1Y29sbGF0ZXJhbAkAAGUAAAACBQAAABRhc3NldFRvdGFsVXNkbkFtb3VudAUAAAAOcG9vbEFjdHVhbFNpemUEAAAAEGRlZm9Bc3NldEJhbGFuY2UJAAPwAAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAAAdhc3NldElkBAAAABJhc3NldEVtaXNzaW9uRGlydHkICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAAHYXNzZXRJZAkAASwAAAACAgAAABhDYW5ub3QgZmluZCBhc3NldCBieSBpZCAFAAAACmFzc2V0SWRTdHIAAAAIcXVhbnRpdHkEAAAADWFzc2V0RW1pc3Npb24JAABlAAAAAgUAAAASYXNzZXRFbWlzc2lvbkRpcnR5BQAAABBkZWZvQXNzZXRCYWxhbmNlBAAAABJwcmljZU9yYWNsZUFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABpnZXRBc3NldFByaWNlT3JhY2xlQWRkcmVzcwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QEAAAADGN1cnJlbnRQcmljZQkBAAAADWdldEFzc2V0UHJpY2UAAAACBQAAABJwcmljZU9yYWNsZUFkZHJlc3MFAAAACWFzc2V0Q29kZQQAAAAbcHJpY2VXaXRoT3ZlcmNvbGxhdGVyYWxSYXRlCQAAaQAAAAIJAABoAAAAAgkAAGQAAAACBQAAAA1tdWx0aXBsaWNhdG9yCQEAAAAdZ2V0QXNzZXRPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAAAxjdXJyZW50UHJpY2UFAAAADW11bHRpcGxpY2F0b3IEAAAAGXVzZG5OZWVkZWRUb0NvdmVyRW1pc3Npb24JAABoAAAAAgUAAAAbcHJpY2VXaXRoT3ZlcmNvbGxhdGVyYWxSYXRlBQAAAA1hc3NldEVtaXNzaW9uBAAAABJwb29sTWFrZXJNYXhBbW91bnQJAQAAACJnZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uTWF4QW1vdW50AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAAB9wb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50S2V5CQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAH3Bvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAAAAAAAAAAEAAAAFXBvb2xNYWtlckxvY2tlZEFtb3VudAkBAAAAGGdldFBvb2xNYWtlckxvY2tlZEFtb3VudAAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAHc3VycGx1cwkAAGUAAAACBQAAAAt1Y29sbGF0ZXJhbAUAAAAZdXNkbk5lZWRlZFRvQ292ZXJFbWlzc2lvbgQAAAAQcGVyY2VudFZpYUFjdHVhbAkAAGsAAAADBQAAABVwb29sTWFrZXJBY3R1YWxBbW91bnQFAAAADW11bHRpcGxpY2F0b3IFAAAADnBvb2xBY3R1YWxTaXplBAAAAA1wZXJjZW50VmlhTWF4CQAAawAAAAMFAAAAEnBvb2xNYWtlck1heEFtb3VudAUAAAANbXVsdGlwbGljYXRvcgUAAAALcG9vbE1heFNpemUEAAAACmZyb3plblBhcnQDCQAAZwAAAAIFAAAAB3N1cnBsdXMAAAAAAAAAAAAAAAAAAAAAAAAJAAGWAAAAAQkABEwAAAACBQAAABBwZXJjZW50VmlhQWN0dWFsCQAETAAAAAIFAAAADXBlcmNlbnRWaWFNYXgFAAAAA25pbAQAAAAVYWxsb3dlZEFtb3VudFRvUmVkZWVtCQAAawAAAAMJAABlAAAAAgUAAAANbXVsdGlwbGljYXRvcgUAAAAKZnJvemVuUGFydAUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50BQAAAA1tdWx0aXBsaWNhdG9yBAAAAA53aXRoZHJhd0hlaWdodAkAAGQAAAACBQAAAAZoZWlnaHQJAQAAABpnZXRSZWRlbXB0aW9uVGltZW91dEJsb2NrcwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAAUaAAAACAUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABVhbGxvd2VkQW1vdW50VG9SZWRlZW0FAAAAD3Bvb2xUb3RhbExvY2tlZAUAAAAOcG9vbEFjdHVhbFNpemUFAAAAFXBvb2xNYWtlckFjdHVhbEFtb3VudAUAAAAOd2l0aGRyYXdIZWlnaHQFAAAAFXBvb2xNYWtlckxvY2tlZEFtb3VudAkABLkAAAACCQAETAAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgkABEwAAAACBQAAAAphc3NldElkU3RyCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgkAAaQAAAABBQAAABVhc3NldFVzZG5TdGFrZWRBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAABZhc3NldFVzZG5CYWxhbmNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAUYXNzZXRUb3RhbFVzZG5BbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA5wb29sQWN0dWFsU2l6ZQkABEwAAAACCQABpAAAAAEFAAAAC3Bvb2xNYXhTaXplCQAETAAAAAIJAAGkAAAAAQUAAAALdWNvbGxhdGVyYWwJAARMAAAAAgkAAaQAAAABBQAAAA1hc3NldEVtaXNzaW9uCQAETAAAAAIJAAGkAAAAAQUAAAAMY3VycmVudFByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAbcHJpY2VXaXRoT3ZlcmNvbGxhdGVyYWxSYXRlCQAETAAAAAIJAAGkAAAAAQUAAAAScG9vbE1ha2VyTWF4QW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAHc3VycGx1cwkABEwAAAACCQABpAAAAAEFAAAAEHBlcmNlbnRWaWFBY3R1YWwJAARMAAAAAgkAAaQAAAABBQAAAA1wZXJjZW50VmlhTWF4CQAETAAAAAIJAAGkAAAAAQUAAAAKZnJvemVuUGFydAkABEwAAAACCQABpAAAAAEFAAAAFWFsbG93ZWRBbW91bnRUb1JlZGVlbQUAAAADbmlsBQAAAANTRVAAAAAHAAAAAWkBAAAABGluaXQAAAAIAAAAF25ldXRyaW5vQ29udHJhY3RBZGRyZXNzAAAAFm5ldXRyaW5vU3Rha2luZ0FkZHJlc3MAAAAYbWluaW11blBvb2xGdW5kaW5nQW1vdW50AAAAE3ByZWRlZmluZWRBc3NldExpc3QAAAARY3VycmVudEFzc2V0SW5kZXgAAAASZGVidEV0aGFsb25CYWxhbmNlAAAAEmRlZm9TdGFraW5nQWRkcmVzcwAAABdkZWZvU3Rha2luZ1BhY2VtYWtlclB1YgMJAQAAAAIhPQAAAAIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5hZG1pblB1YmxpY0tleQkAAAIAAAABAgAAACpPbmx5IEFkbWluIGNhbiBwZXJmb3JtIGNvbnRyYWN0IG9wZXJhdGlvbi4DCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BgkAAAIAAAABAgAAACFDb250cmFjdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4EAAAACWlzc3VlRGVidAkABEIAAAAFAgAAAAlERUZPX0RFQlQCAAAAEERFRk8gRGVidCBUb2tlbi4AAAAAAAAAAAEAAAAAAAAAAAYGBAAAAAtkZWJ0VG9rZW5JZAkABDgAAAABBQAAAAlpc3N1ZURlYnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAabmV1dHJpbm9Db250cmFjdEFkZHJlc3NLZXkFAAAAF25ldXRyaW5vQ29udHJhY3RBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGW5ldXRyaW5vU3Rha2luZ0FkZHJlc3NLZXkFAAAAFm5ldXRyaW5vU3Rha2luZ0FkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG21pbmltdW5Qb29sRnVuZGluZ0Ftb3VudEtleQUAAAAYbWluaW11blBvb2xGdW5kaW5nQW1vdW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFGFzc2V0c0FkZHJlc3NMaXN0S2V5BQAAABNwcmVkZWZpbmVkQXNzZXRMaXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRjdXJyZW50QXNzZXRJbmRleEtleQUAAAARY3VycmVudEFzc2V0SW5kZXgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGWRlYnRUb2tlbkV0YWxvbkJhbGFuY2VLZXkFAAAAEmRlYnRFdGhhbG9uQmFsYW5jZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA5kZWJ0VG9rZW5JZEtleQkAAlgAAAABBQAAAAtkZWJ0VG9rZW5JZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABVkZWZvU3Rha2luZ0FkZHJlc3NLZXkFAAAAEmRlZm9TdGFraW5nQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABpkZWZvU3Rha2luZ1BhY2VtYWtlclB1YktleQUAAAAXZGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAEGlzSW5pdGlhbGl6ZWRLZXkGCQAETAAAAAIFAAAACWlzc3VlRGVidAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAAC2RlYnRUb2tlbklkAAAAAAAAAAABBQAAAANuaWwAAAABaQEAAAAMcHJvcG9zZUFzc2V0AAAADwAAAAlhc3NldENvZGUAAAAEbWV0YQAAAAdtaW5Qb29sAAAAEnByaWNlT3JhY2xlQWRkcmVzcwAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAAOYmFja2luZ0Fzc2V0SWQAAAANcHJpY2VEZWNpbWFscwAAAA1taW5CdXlQYXltZW50AAAADm1pblNlbGxQYXltZW50AAAAD2J1eUxvY2tJbnRlcnZhbAAAABBzZWxsTG9ja0ludGVydmFsAAAABmJ1eUZlZQAAAAdzZWxsRmVlAAAAFXBvb2xSZWRlbXB0aW9uVGltZW91dAAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQEAAAACIT0AAAACCQACWQAAAAEFAAAADmJhY2tpbmdBc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAAjQmFraW5nIGFzc2V0IGlkIGNvdWxkIGJlIFVTRE4gb25seS4DCQEAAAACIT0AAAACCQEAAAAVZ2V0QXNzZXRBZGRyZXNzQnlDb2RlAAAAAQUAAAAJYXNzZXRDb2RlAgAAAAAJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAF0Fzc2V0IHdpdGggcGFzc2VkIGNvZGUgBQAAAAlhc3NldENvZGUCAAAAGyBoYXMgYWxyZWFkeSBiZWVuIHByb3Bvc2VkLgMJAABmAAAAAgUAAAASbWluaW11bVBvb2xGdW5kaW5nBQAAAAdtaW5Qb29sCQAAAgAAAAEJAAEsAAAAAgIAAAAzTWluaW11bSBwb29sIGFtb3VudCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbHMgdG8gCQABpAAAAAEFAAAAEm1pbmltdW1Qb29sRnVuZGluZwMDAwMDAwMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAYJAABmAAAAAgAAAAAAAAAAAAUAAAANcHJpY2VEZWNpbWFscwYJAABmAAAAAgAAAAAAAAAAAAUAAAANbWluQnV5UGF5bWVudAYJAABmAAAAAgAAAAAAAAAAAAUAAAAObWluU2VsbFBheW1lbnQGCQAAZgAAAAIAAAAAAAAAAAAFAAAAD2J1eUxvY2tJbnRlcnZhbAYJAABmAAAAAgAAAAAAAAAAAAUAAAAQc2VsbExvY2tJbnRlcnZhbAYJAABmAAAAAgAAAAAAAAAAAAUAAAAGYnV5RmVlBgkAAGYAAAACAAAAAAAAAAAABQAAAAdzZWxsRmVlCQAAAgAAAAECAAAAKE9uZSBvZiB0aGUgcGFzc2VkIHBhcmFtZXRlcnMgaXMgaW52YWxpZC4EAAAAF3ByaWNlT3JhY2xlQWRkcmVzc1ZhbGlkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwIAAAApUGFzc2VkIFByaWNlIE9yYWNsZSBBZGRyZXNzIGlzIG5vdCB2YWxpZC4EAAAADGFzc2V0QWRkcmVzcwkAAZEAAAACBQAAABRwcmVkZWZpbmVkQXNzZXRzTGlzdAUAAAARY3VycmVudEFzc2V0SW5kZXgEAAAAC2RlZm9Bc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADGFzc2V0QWRkcmVzcwIAAAAABQAAAA5kZWZvQXNzZXRJZEtleQIAAAAXTm8gZGVmbyBhc3NldCBJRCBmb3VuZC4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQEAAAAfY29tcG9zZUFzc2V0Q29uZmlndXJhdGlvblN0cmluZwAAABAFAAAACWFzc2V0Q29kZQUAAAALZGVmb0Fzc2V0SWQIBQAAAAthc3NldFN0YXR1cwAAAAJfMQUAAAANcHJpY2VEZWNpbWFscwUAAAAOYmFja2luZ0Fzc2V0SWQFAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAUAAAAHbWluUG9vbAUAAAAScHJpY2VPcmFjbGVBZGRyZXNzBQAAAA1taW5CdXlQYXltZW50BQAAAA5taW5TZWxsUGF5bWVudAUAAAAPYnV5TG9ja0ludGVydmFsBQAAABBzZWxsTG9ja0ludGVydmFsBQAAAAZidXlGZWUFAAAAB3NlbGxGZWUFAAAAFXBvb2xSZWRlbXB0aW9uVGltZW91dAUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABhnZXRBc3NldEFkZHJlc3NCeUNvZGVLZXkAAAABBQAAAAlhc3NldENvZGUFAAAADGFzc2V0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0QXNzZXRNZXRhS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBQAAAARtZXRhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0QXNzZXRJbml0SGVpZ2h0S2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFGN1cnJlbnRBc3NldEluZGV4S2V5CQAAZAAAAAIFAAAAEWN1cnJlbnRBc3NldEluZGV4AAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABtnZXRBc3NldEFkZHJlc3NCeUFzc2V0SWRLZXkAAAABBQAAAAtkZWZvQXNzZXRJZAUAAAAMYXNzZXRBZGRyZXNzBQAAAANuaWwAAAABaQEAAAARZnVuZExpcXVpZGl0eVBvb2wAAAABAAAACWFzc2V0Q29kZQQAAAAPYXNzZXRBZGRyZXNzU3RyCQEAAAAbZ2V0QXNzZXRBZGRyZXNzQnlDb2RlT3JGYWlsAAAAAQUAAAAJYXNzZXRDb2RlBAAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0CQEAAAATZ2V0QXNzZXRDb25maWdBcnJheQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAPYXR0YWNoZWRQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAABBwb29sTWFrZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwkBAAAAAiE9AAAAAggFAAAAD2F0dGFjaGVkUGF5bWVudAAAAAdhc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAAuTGlxdWlkaXR5IHBvb2wgY291bGQgYmUgZnVuZGVkIHdpdGggVVNETiBvbmx5LgMJAABmAAAAAgUAAAATbWluUG9vbEludmVzdEFtb3VudAgFAAAAD2F0dGFjaGVkUGF5bWVudAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAADFBdHRhY2hlZCBwYXltZW50IGFtb3VudCBpcyBsZXNzIHRoYSBtaW4gYWxsb3dlZDogCQABpAAAAAEFAAAAE21pblBvb2xJbnZlc3RBbW91bnQEAAAAFG5ld0N1cnJlbnRQb29sQW1vdW50CQAAZAAAAAIIBQAAAA9hdHRhY2hlZFBheW1lbnQAAAAGYW1vdW50CQEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAANbWF4UG9vbEFtb3VudAkBAAAAFWdldEFzc2V0TWF4UG9vbEFtb3VudAAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgQAAAAXY3VycmVudFBvb2xNYWtlckJhbGFuY2UJAQAAAB9nZXRQb29sTWFrZXJQYXJ0aWNpcGF0aW9uQW1vdW50AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAABNtYXhQb29sTWFrZXJCYWxhbmNlCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbk1heEFtb3VudAAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAASY3VycmVudEFzc2V0U3RhdHVzCQEAAAAOZ2V0QXNzZXRTdGF0dXMAAAABBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BAAAAA5uZXdBc3NldFN0YXR1cwMDCQAAAAAAAAIFAAAAEmN1cnJlbnRBc3NldFN0YXR1cwUAAAANQVNTRXRQUk9QT1NFRAkAAGcAAAACBQAAABRuZXdDdXJyZW50UG9vbEFtb3VudAkBAAAAHWdldEFzc2V0TWluUmVxdWlyZWRQb29sQW1vdW50AAAAAQUAAAAWYXNzZXRDb25maWd1cmF0aW9uTGlzdAcFAAAACkFTU0V0UkVBRFkFAAAAEmN1cnJlbnRBc3NldFN0YXR1cwQAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQkAAGQAAAACBQAAABdjdXJyZW50UG9vbE1ha2VyQmFsYW5jZQgFAAAAD2F0dGFjaGVkUGF5bWVudAAAAAZhbW91bnQEAAAAGWltbWVkaWF0ZVRyYW5zZmVySWZJc3N1ZWQDCQAAAAAAAAIFAAAAEmN1cnJlbnRBc3NldFN0YXR1cwUAAAALQVNTRXRJU1NVRUQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCAUAAAAPYXR0YWNoZWRQYXltZW50AAAABmFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwFAAAAA25pbAkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAiZ2V0UG9vbE1ha2VyUGFydGljaXBhdGlvbkFtb3VudEtleQAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwUAAAATbmV3UG9vbE1ha2VyQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAAGWAAAAAQkABEwAAAACBQAAABNuZXdQb29sTWFrZXJCYWxhbmNlCQAETAAAAAIFAAAAE21heFBvb2xNYWtlckJhbGFuY2UFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAHWdldEFzc2V0Q3VycnJlbnRQb29sQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAABRuZXdDdXJyZW50UG9vbEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGGdldEFzc2V0TWF4UG9vbEFtb3VudEtleQAAAAEFAAAAD2Fzc2V0QWRkcmVzc1N0cgkAAZYAAAABCQAETAAAAAIFAAAADW1heFBvb2xBbW91bnQJAARMAAAAAgUAAAAUbmV3Q3VycmVudFBvb2xBbW91bnQFAAAAA25pbAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0QXNzZXRDb25maWdLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABR1cGRhdGVBc3NldENmZ1N0YXR1cwAAAAIFAAAADm5ld0Fzc2V0U3RhdHVzBQAAABZhc3NldENvbmZpZ3VyYXRpb25MaXN0BQAAAANuaWwFAAAAGWltbWVkaWF0ZVRyYW5zZmVySWZJc3N1ZWQAAAABaQEAAAANYWN0aXZhdGVBc3NldAAAAAEAAAAJYXNzZXRDb2RlBAAAAAxhc3NldEFkZHJlc3MJAQAAABVnZXRBc3NldEFkZHJlc3NCeUNvZGUAAAABBQAAAAlhc3NldENvZGUEAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAQAAABNnZXRBc3NldENvbmZpZ0FycmF5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBAAAABZhc3NldEN1cnJlbnRQb29sQW1vdW50CQEAAAAZZ2V0QXNzZXRDdXJyZW50UG9vbEFtb3VudAAAAAEFAAAADGFzc2V0QWRkcmVzcwQAAAAOYUN1cnJlbnRTdGF0dXMJAQAAAA5nZXRBc3NldFN0YXR1cwAAAAEFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QDCQEAAAACIT0AAAACCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAOYWRtaW5QdWJsaWNLZXkJAAACAAAAAQIAAAAqT25seSBBZG1pbiBjYW4gcGVyZm9ybSBjb250cmFjdCBvcGVyYXRpb24uAwkAAAAAAAACCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAQaXNJbml0aWFsaXplZEtleQcJAAACAAAAAQIAAAAaQ29udHJhY3QgaXMgbm90IHlldCByZWFkeS4DCQEAAAACIT0AAAACBQAAAA5hQ3VycmVudFN0YXR1cwgFAAAAC2Fzc2V0U3RhdHVzAAAAAl8yCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADBBc3NldCBpcyBub3QgaW4gUkVBRFkgc3RhdHVzLiBDdXJyZW50IHN0YXR1cyBpcyAFAAAADmFDdXJyZW50U3RhdHVzAgAAAAEuAwkAAAAAAAACBQAAAAxhc3NldEFkZHJlc3MCAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAASQ2Fubm90IGZpbmQgYXNzZXQgBQAAAAlhc3NldENvZGUCAAAAAS4DCQAAZgAAAAIFAAAAEm1pbmltdW1Qb29sRnVuZGluZwUAAAAWYXNzZXRDdXJyZW50UG9vbEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAALUNhbm5vdCBpc3N1ZSBhc3NldCBhcyBsaXF1aWRpdHkgcG9vbCBhbW91bnQgKAkAAaQAAAABBQAAABZhc3NldEN1cnJlbnRQb29sQW1vdW50AgAAABkpIGlzIGxlc3MgdGhhbiByZXF1aXJlZCAoCQABpAAAAAEFAAAAEm1pbmltdW1Qb29sRnVuZGluZwIAAAABKQQAAAAJaXNzdWVEZWJ0CQEAAAAHUmVpc3N1ZQAAAAMFAAAACWRlYnRUb2tlbgUAAAAWZGVidFRva2VuUmVpc3N1ZUFtb3VudAYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlnZXRBc3NldEFjdGl2YXRlSGVpZ2h0S2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldEFzc2V0Q29uZmlnS2V5AAAAAQUAAAAMYXNzZXRBZGRyZXNzCQEAAAAUdXBkYXRlQXNzZXRDZmdTdGF0dXMAAAACCAUAAAALYXNzZXRTdGF0dXMAAAACXzMFAAAAFmFzc2V0Q29uZmlndXJhdGlvbkxpc3QJAARMAAAAAgUAAAAJaXNzdWVEZWJ0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAWYXNzZXRDdXJyZW50UG9vbEFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADGFzc2V0QWRkcmVzcwUAAAAWZGVidFRva2VuUmVpc3N1ZUFtb3VudAUAAAAJZGVidFRva2VuBQAAAANuaWwAAAABaQEAAAAOcmVkZWVtRnJvbVBvb2wAAAACAAAACWFzc2V0Q29kZQAAAAZhbW91bnQEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAtyZWRlZW1UdXBsZQkBAAAAGWNhbGNBbGxvd2VkQW1vdW50VG9SZWRlZW0AAAACBQAAAAlhc3NldENvZGUFAAAADWNhbGxlckFkZHJlc3MEAAAAD2Fzc2V0QWRkcmVzc1N0cggFAAAAC3JlZGVlbVR1cGxlAAAAAl8xBAAAABVhbGxvd2VkQW1vdW50VG9SZWRlZW0IBQAAAAtyZWRlZW1UdXBsZQAAAAJfMgQAAAAPcG9vbFRvdGFsTG9ja2VkCAUAAAALcmVkZWVtVHVwbGUAAAACXzMEAAAADnBvb2xBY3R1YWxTaXplCAUAAAALcmVkZWVtVHVwbGUAAAACXzQEAAAAFXBvb2xNYWtlckFjdHVhbEFtb3VudAgFAAAAC3JlZGVlbVR1cGxlAAAAAl81BAAAAA53aXRoZHJhd0hlaWdodAgFAAAAC3JlZGVlbVR1cGxlAAAAAl82BAAAABVwb29sTWFrZXJMb2NrZWRBbW91bnQIBQAAAAtyZWRlZW1UdXBsZQAAAAJfNwQAAAAJdHJhY2VEYXRhCAUAAAALcmVkZWVtVHVwbGUAAAACXzgEAAAAHHBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkJAQAAAB9nZXRQb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5AAAAAwUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAAA1jYWxsZXJBZGRyZXNzBQAAAA53aXRoZHJhd0hlaWdodAMJAAAAAAAAAgkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAAEGlzSW5pdGlhbGl6ZWRLZXkHCQAAAgAAAAECAAAAGkNvbnRyYWN0IGlzIG5vdCB5ZXQgcmVhZHkuAwMDCQAAZgAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAYJAABnAAAAAgAAAAAAAAAAAAUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50BgkAAGYAAAACBQAAAAZhbW91bnQFAAAAFWFsbG93ZWRBbW91bnRUb1JlZGVlbQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAiQ2Fubm90IGZpbmQgcG9vbCBtYWtlciBieSBhZGRyZXNzIAUAAAANY2FsbGVyQWRkcmVzcwIAAAAhIG9yIGFtb3VudCBwYXNzZWQgaXMgbm90IGNvcnJlY3QuAwkAAGYAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAADW11bHRpcGxpY2F0b3IFAAAABmFtb3VudAkAAAIAAAABAgAAACZSZWRlZW0gYW1vdW50IGlzIGxlc3MgdGhlbiBtaW4gYWxsb3dlZAMJAABmAAAAAgUAAAAVcG9vbE1ha2VyTG9ja2VkQW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAARlBvb2wgbWFrZXIgYWxyZWFkeSBoYXMgaW5pdGlhdGVkIHJlZGVtcHRpb24gdGhhdCBpcyBub3Qgd2l0aGRyYXduIHlldC4DCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzBQAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADBQb29sIG1ha2VyIGhhcyBhbHJlYWR5IGluaXRpYXRlZCByZWRlbXB0aW9uIGZvciAJAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAcgaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQAAZAAAAAIFAAAAD3Bvb2xUb3RhbExvY2tlZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABBQAAAA9hc3NldEFkZHJlc3NTdHIJAABlAAAAAgUAAAAOcG9vbEFjdHVhbFNpemUFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAADWNhbGxlckFkZHJlc3MJAABlAAAAAgUAAAAVcG9vbE1ha2VyQWN0dWFsQW1vdW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAHHBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAG2dldFBvb2xNYWtlckxvY2tlZEFtb3VudEtleQAAAAIFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAANY2FsbGVyQWRkcmVzcwUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAgUAAAAPYXNzZXRBZGRyZXNzU3RyBQAAAA1jYWxsZXJBZGRyZXNzBQAAAA53aXRoZHJhd0hlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABklcyVzX3RyYWNlX3JlZGVlbUZyb21Qb29sBQAAAAl0cmFjZURhdGEFAAAAA25pbAAAAAFpAQAAABtnZXRNYXhBbGxvd2VkQW1vdW50VG9SZWRlZW0AAAACAAAACWFzc2V0Q29kZQAAABBwb29sTWFrZXJBZGRyZXNzBAAAAAtyZWRlZW1UdXBsZQkBAAAAGWNhbGNBbGxvd2VkQW1vdW50VG9SZWRlZW0AAAACBQAAAAlhc3NldENvZGUFAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAAD2Fzc2V0QWRkcmVzc1N0cggFAAAAC3JlZGVlbVR1cGxlAAAAAl8xBAAAABVhbGxvd2VkQW1vdW50VG9SZWRlZW0IBQAAAAtyZWRlZW1UdXBsZQAAAAJfMgQAAAAPcG9vbFRvdGFsTG9ja2VkCAUAAAALcmVkZWVtVHVwbGUAAAACXzMEAAAADnBvb2xBY3R1YWxTaXplCAUAAAALcmVkZWVtVHVwbGUAAAACXzQEAAAAFXBvb2xNYWtlckFjdHVhbEFtb3VudAgFAAAAC3JlZGVlbVR1cGxlAAAAAl81BAAAAA53aXRoZHJhd0hlaWdodAgFAAAAC3JlZGVlbVR1cGxlAAAAAl82BAAAABVwb29sTWFrZXJMb2NrZWRBbW91bnQIBQAAAAtyZWRlZW1UdXBsZQAAAAJfNwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAXsCAAAAF2FsbG93ZWRBbW91bnRUb1JlZGVlbTogCQABpAAAAAEFAAAAFWFsbG93ZWRBbW91bnRUb1JlZGVlbQIAAAANLCBhc3NldENvZGU6IAUAAAAJYXNzZXRDb2RlAgAAAA0sIHBvb2xNYWtlcjogBQAAABBwb29sTWFrZXJBZGRyZXNzAgAAAAF9AAAAAWkBAAAACHdpdGhkcmF3AAAAAQAAAAlhc3NldENvZGUEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABtnZXRBc3NldEFkZHJlc3NCeUNvZGVPckZhaWwAAAABBQAAAAlhc3NldENvZGUEAAAADGFzc2V0QWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBAAAABhwb29sTWFrZXJMb2NrZWRBbW91bnRLZXkJAQAAABtnZXRQb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAADWNhbGxlckFkZHJlc3MEAAAAGXJlZ2lzdGVyZWRBbW91bnQ0V2l0aGRyYXcJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAYcG9vbE1ha2VyTG9ja2VkQW1vdW50S2V5AAAAAAAAAAAABAAAABhwb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkJAQAAABtnZXRQb29sTWFrZXJVbmxvY2tIZWlnaHRLZXkAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIFAAAADWNhbGxlckFkZHJlc3MEAAAADndpdGhkcmF3SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAGHBvb2xNYWtlclVubG9ja0hlaWdodEtleQAAAAAAAAAAAAQAAAAYcG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5CQEAAAAbZ2V0UG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5AAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyBAAAAA9wb29sVG90YWxMb2NrZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAYcG9vbFRvdGFsTG9ja2VkQW1vdW50S2V5AAAAAAAAAAAABAAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5CQEAAAAfZ2V0UG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQAAAAMFAAAAD2Fzc2V0QWRkcmVzc1N0cgUAAAANY2FsbGVyQWRkcmVzcwUAAAAOd2l0aGRyYXdIZWlnaHQDCQAAAAAAAAIJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABBpc0luaXRpYWxpemVkS2V5BwkAAAIAAAABAgAAABpDb250cmFjdCBpcyBub3QgeWV0IHJlYWR5LgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAMYXNzZXRBZGRyZXNzBQAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5CQAAAgAAAAECAAAAM05lZWQgdG8gdHJhbnNmZXIgbGlxdWlkaXR5IGZyb20gYXNzZXQgYWNjb3VudCBmaXJzdAMJAABnAAAAAgAAAAAAAAAAAAUAAAAZcmVnaXN0ZXJlZEFtb3VudDRXaXRoZHJhdwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAiQ2Fubm90IGZpbmQgcG9vbCBtYWtlciBieSBhZGRyZXNzIAUAAAANY2FsbGVyQWRkcmVzcwIAAAAVIG9yIG5vIGxvY2tlZCBhbW91bnQuAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAADndpdGhkcmF3SGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAxQbGVhc2Ugd2FpdCAJAAGkAAAAAQUAAAAOd2l0aGRyYXdIZWlnaHQCAAAAESBiZWZvcmUgd2l0aGRyYXcuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABhwb29sTWFrZXJMb2NrZWRBbW91bnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGHBvb2xUb3RhbExvY2tlZEFtb3VudEtleQkAAGUAAAACBQAAAA9wb29sVG90YWxMb2NrZWQFAAAAGXJlZ2lzdGVyZWRBbW91bnQ0V2l0aGRyYXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGHBvb2xNYWtlclVubG9ja0hlaWdodEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA1jYWxsZXJBZGRyZXNzBQAAABlyZWdpc3RlcmVkQW1vdW50NFdpdGhkcmF3BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAAAAABZPDXA", "chainId": 84, "height": 1248857, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7PcvzfQ9UnNNZNHjvmxiZshdndexZF2Vt1CERk4o8Vq8 Next: 9MqbrqgMMp8aMDgXAZuv5wYQrBUcLtSd7CJFELKmgLHw Diff:
OldNewDifferences
1010 func g (f) = valueOrElse(getBoolean(this, f), false)
1111
1212
13-let h = 1
13+let h = "__"
1414
15-let i = 2
15+let i = 1
1616
17-let j = 3
17+let j = 2
1818
19-let k = 4
19+let k = 3
2020
21-let l = 5
21+let l = 4
2222
23-let m = 6
23+let m = 5
2424
25-let n = 7
25+let n = 6
2626
27-let o = 8
27+let o = 7
2828
29-let p = 9
29+let p = 8
3030
31-let q = 10
31+let q = 9
3232
33-let r = 11
33+let r = 10
3434
35-let s = 12
35+let s = 11
3636
37-let t = 13
37+let t = 12
3838
39-let u = 14
39+let u = 13
4040
41-let v = 15
41+let v = 14
4242
43-let w = 16
43+let w = 15
4444
45-let x = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
45+let x = 16
4646
47-let y = "%s%s__commonConfig__neutrinoContractAddress"
47+let y = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
4848
49-let z = "%s%s__commonConfig__neutrinoStakingAddress"
49+let z = "%s%s__commonConfig__neutrinoContractAddress"
5050
51-let A = "%s%s__commonConfig__minimumPoolFundingAmount"
51+let A = "%s%s__commonConfig__neutrinoStakingAddress"
5252
53-let B = "%s%s__commonConfig__initialized"
53+let B = "%s%s__commonConfig__minimumPoolFundingAmount"
5454
55-let C = "%s%s__commonConfig__predefinedAssetsActiveIndex"
55+let C = "%s%s__commonConfig__initialized"
5656
57-let D = "%s%s__commonConfig__predefinedAssetsList"
57+let D = "%s%s__commonConfig__predefinedAssetsActiveIndex"
5858
59-let E = "%s%s__commonConfig__debtAssetId"
59+let E = "%s%s__commonConfig__predefinedAssetsList"
6060
61-let F = "%s%s__commonConfig__debtAssetEtalonBalance"
61+let F = "%s%s__commonConfig__debtAssetId"
6262
63-let G = "%s%s__commonConfig__defoStakingAddress"
63+let G = "%s%s__commonConfig__debtAssetEtalonBalance"
6464
65-let H = "%s%s__commonConfig__defoStakingPacemakerPub"
65+let H = "%s%s__commonConfig__defoStakingAddress"
6666
67-let I = "neutrino_asset_id"
67+let I = "%s%s__commonConfig__defoStakingPacemakerPub"
6868
69-let J = "bond_asset_id"
69+let J = "%s%s__commonConfig__minPoolInvestAmount"
7070
71-let K = "%s__defoAssetId"
71+let K = "neutrino_asset_id"
7272
73-let L = "%s__assetScriptTxId"
73+let L = "bond_asset_id"
7474
75-func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
75+let M = "rpd_contract"
76+
77+let N = "%s__defoAssetId"
78+
79+let O = "%s__assetScriptTxId"
80+
81+func P (Q) = (("%s%s%s__defoAsset__" + Q) + "__config")
7682
7783
78-func O (P) = ("%s%s__assetPrice__" + P)
84+func R (S) = ("%s%s__assetPrice__" + S)
7985
8086
81-func Q (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
87+func T (Q) = (("%s%s%s__defoAsset__" + Q) + "__initHeight")
8288
8389
84-func R (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
90+func U (Q) = (("%s%s%s__defoAsset__" + Q) + "__activateHeight")
8591
8692
87-func S (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
93+func V (Q) = (("%s%s%s__defoAsset__" + Q) + "__currentPool")
8894
8995
90-func T (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
96+func W (Q) = (("%s%s%s__defoAsset__" + Q) + "__maxPool")
9197
9298
93-func U (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
99+func X (Q) = (("%s%s%s__defoAsset__" + Q) + "__meta")
94100
95101
96-func V (N) = (("%s%s%s__defoAsset__" + N) + "__poolMakers")
102+func Y (Q) = (("%s%s%s__defoAsset__" + Q) + "__poolMakers")
97103
98104
99-func W (P) = (("%s%s%s__defoAsset__" + P) + "__addressByAssetCode")
105+func Z (S) = (("%s%s%s__defoAsset__" + S) + "__addressByAssetCode")
100106
101107
102-func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__addressByAssetId")
108+func aa (ab) = (("%s%s%s__defoAsset__" + ab) + "__addressByAssetId")
103109
104110
105-func Z (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__amount")
111+func ac (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "amount"], h)
106112
107113
108-func ab (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__maxAmount")
114+func ae (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "maxAmount"], h)
109115
110116
111-func ac (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__lockedAmount")
117+func af (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "lockedAmount"], h)
112118
113119
114-func ad (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__unlockHeight")
120+func ag (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "unlockHeight"], h)
115121
116122
117-func ae (N) = a(valueOrErrorMessage(d(this, M(N)), (("No DEFO Asset " + N) + "config present")), "__")
123+func ah (Q,ad,ai) = makeString(["%s%s%s%d%s__pool", Q, ad, toString(ai), "liquidityRequest"], h)
118124
119125
120-let af = addressFromStringValue(valueOrErrorMessage(getString(this, y), "No neutrino contract specified."))
121-
122-let ag = fromBase58String(valueOrErrorMessage(getString(af, I), "No USDN asset id found."))
123-
124-let ah = fromBase58String(valueOrErrorMessage(getString(af, J), "No NSBT asset id found"))
125-
126-let ai = valueOrErrorMessage(getInteger(this, A), "Minimum pool funding amount is not specified.")
127-
128-let aj = $Tuple3("PROPOSED", "READY", "ISSUED")
129-
130-let ak = valueOrErrorMessage(getString(this, D), "No pool of predeployed asset contracts found.")
131-
132-let al = a(ak, ",")
133-
134-let am = valueOrElse(getInteger(this, C), 0)
135-
136-let an = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
137-
138-let ao = 1000000
139-
140-let ap = valueOrElse(getInteger(this, F), 0)
141-
142-func aq (ar) = valueOrElse(getString(this, W(ar)), "")
126+func aj (Q) = makeString(["%s%s%s__pool", Q, "totalLockedAmount"], h)
143127
144128
145-func as (at) = at[h]
129+func ak (Q) = a(valueOrErrorMessage(d(this, P(Q)), (("No DEFO Asset " + Q) + "config present")), "__")
146130
147131
148-func au (at) = at[i]
132+let al = 1000000
149133
134+let am = addressFromStringValue(valueOrErrorMessage(getString(this, z), "No neutrino contract specified."))
150135
151-func av (at) = at[j]
136+let an = valueOrErrorMessage(getString(am, K), "No USDN asset id found.")
152137
138+let ao = fromBase58String(an)
153139
154-func aw (at) = parseIntValue(at[k])
140+let ap = fromBase58String(valueOrErrorMessage(getString(am, L), "No NSBT asset id found"))
155141
142+let aq = valueOrErrorMessage(getInteger(this, B), "Minimum pool funding amount is not specified.")
156143
157-func ax (at) = at[l]
144+let ar = valueOrElse(getInteger(this, J), (10 * al))
158145
146+let as = "PROPOSED"
159147
160-func ay (at) = parseIntValue(at[m])
148+let at = "READY"
161149
150+let au = "ISSUED"
162151
163-func az (at) = parseIntValue(at[n])
152+let av = $Tuple3(as, at, au)
164153
154+let aw = valueOrErrorMessage(getString(this, E), "No pool of predeployed asset contracts found.")
165155
166-func aA (at) = at[o]
156+let ax = a(aw, ",")
167157
158+let ay = valueOrElse(getInteger(this, D), 0)
168159
169-func aB (at) = parseIntValue(at[p])
160+let az = fromBase58String(valueOrErrorMessage(getString(this, F), "No debt token found"))
170161
162+let aA = valueOrElse(getInteger(this, G), 0)
171163
172-func aC (at) = parseIntValue(at[q])
164+let aB = addressFromStringValue(getStringValue(am, M))
173165
174-
175-func aD (at) = parseIntValue(at[r])
176-
177-
178-func aE (at) = parseIntValue(at[s])
179-
180-
181-func aF (at) = parseIntValue(at[t])
182-
183-
184-func aG (at) = parseIntValue(at[u])
185-
186-
187-func aH (at) = parseIntValue(at[v])
188-
189-
190-func aI (at) = parseIntValue(at[w])
191-
192-
193-func aJ (N) = valueOrElse(getString(this, V(N)), "")
194-
195-
196-func aK (N) = valueOrElse(getInteger(this, Q(N)), 0)
197-
198-
199-func aL (N) = valueOrElse(getInteger(this, R(N)), 0)
200-
201-
202-func aM (N) = valueOrElse(getInteger(this, S(N)), 0)
203-
204-
205-func aN (N) = valueOrElse(getInteger(this, T(N)), 0)
206-
207-
208-func aO (N) = valueOrElse(getString(this, U(N)), "")
209-
210-
211-func aP (N,aa) = valueOrElse(getInteger(this, Z(N, aa)), 0)
212-
213-
214-func aQ (N,aa) = valueOrElse(getInteger(this, ab(N, aa)), 0)
215-
216-
217-func aR (N,aa) = valueOrElse(getInteger(this, ac(N, aa)), 0)
218-
219-
220-func aS (N,aa) = valueOrElse(getInteger(this, ad(N, aa)), 0)
221-
222-
223-func aT (aU,P) = valueOrErrorMessage(getInteger(aU, O(P)), "No Asset price found")
224-
225-
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), toString(bh)], "__")
227-
228-
229-func bi (bj,bk) = {
230- let bl = as(bk)
231- let bm = au(bk)
232- let bn = aw(bk)
233- let bo = ax(bk)
234- let bp = ay(bk)
235- let bq = az(bk)
236- let br = aA(bk)
237- let bs = aB(bk)
238- let bt = aC(bk)
239- let bu = aD(bk)
240- let bv = aE(bk)
241- let bw = aF(bk)
242- let bx = aG(bk)
243- let by = aH(bk)
244- let bh = aI(bk)
245- aV(bl, bm, bj, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bh)
166+func aC (aD) = {
167+ let aE = makeString(["rpd_balance", an, aD], "_")
168+ valueOrElse(getInteger(aB, aE), 0)
246169 }
247170
248171
249-@Callable(bz)
250-func init (bA,bB,bC,bD,am,bE,bF,bG) = if ((toBase58String(bz.callerPublicKey) != x))
172+func aF (aG) = valueOrElse(getString(this, Z(aG)), "")
173+
174+
175+func aH (aG) = valueOrErrorMessage(getString(this, Z(aG)), (("Cannot find asset address by " + aG) + " code"))
176+
177+
178+func aI (aJ) = aJ[i]
179+
180+
181+func aK (aJ) = aJ[j]
182+
183+
184+func aL (aJ) = aJ[k]
185+
186+
187+func aM (aJ) = parseIntValue(aJ[l])
188+
189+
190+func aN (aJ) = aJ[m]
191+
192+
193+func aO (aJ) = parseIntValue(aJ[n])
194+
195+
196+func aP (aJ) = parseIntValue(aJ[o])
197+
198+
199+func aQ (aJ) = aJ[p]
200+
201+
202+func aR (aJ) = parseIntValue(aJ[q])
203+
204+
205+func aS (aJ) = parseIntValue(aJ[r])
206+
207+
208+func aT (aJ) = parseIntValue(aJ[s])
209+
210+
211+func aU (aJ) = parseIntValue(aJ[t])
212+
213+
214+func aV (aJ) = parseIntValue(aJ[u])
215+
216+
217+func aW (aJ) = parseIntValue(aJ[v])
218+
219+
220+func aX (aJ) = parseIntValue(aJ[w])
221+
222+
223+func aY (aJ) = parseIntValue(aJ[x])
224+
225+
226+func aZ (Q) = valueOrElse(getString(this, Y(Q)), "")
227+
228+
229+func ba (Q) = valueOrElse(getInteger(this, T(Q)), 0)
230+
231+
232+func bb (Q) = valueOrElse(getInteger(this, U(Q)), 0)
233+
234+
235+func bc (Q) = valueOrElse(getInteger(this, V(Q)), 0)
236+
237+
238+func bd (Q) = valueOrElse(getInteger(this, W(Q)), 0)
239+
240+
241+func be (Q) = valueOrElse(getString(this, X(Q)), "")
242+
243+
244+func bf (Q,ad) = valueOrElse(getInteger(this, ac(Q, ad)), 0)
245+
246+
247+func bg (Q,ad) = valueOrElse(getInteger(this, ae(Q, ad)), 0)
248+
249+
250+func bh (Q,ad) = valueOrElse(getInteger(this, af(Q, ad)), 0)
251+
252+
253+func bi (Q,ad) = valueOrElse(getInteger(this, ag(Q, ad)), 0)
254+
255+
256+func bj (bk,S) = valueOrErrorMessage(getInteger(bk, R(S)), "No Asset price found")
257+
258+
259+func bl (Q) = valueOrElse(getInteger(this, aj(Q)), 0)
260+
261+
262+func bm (S,ab,av,bn,bo,bp,bq,bk,br,bs,bt,bu,bv,bw,bx,by) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", S, ab, av, toString(bn), bo, toString(bp), toString(bq), bk, toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by)], "__")
263+
264+
265+func bz (bA,bB) = {
266+ let bC = aI(bB)
267+ let bD = aK(bB)
268+ let bE = aM(bB)
269+ let bF = aN(bB)
270+ let bG = aO(bB)
271+ let bH = aP(bB)
272+ let bI = aQ(bB)
273+ let bJ = aR(bB)
274+ let bK = aS(bB)
275+ let bL = aT(bB)
276+ let bM = aU(bB)
277+ let bN = aV(bB)
278+ let bO = aW(bB)
279+ let bP = aX(bB)
280+ let by = aY(bB)
281+ bm(bC, bD, bA, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, by)
282+ }
283+
284+
285+func bQ (S,ad) = {
286+ let bR = aH(S)
287+ let Q = addressFromStringValue(bR)
288+ let bB = ak(bR)
289+ let bS = aK(bB)
290+ let ab = fromBase58String(bS)
291+ let bT = valueOrElse(getInteger(this, V(bR)), 0)
292+ let bU = valueOrElse(getInteger(this, W(bR)), 0)
293+ let bV = aj(bR)
294+ let bW = valueOrElse(getInteger(this, bV), 0)
295+ let bX = aC(bR)
296+ let bY = assetBalance(Q, ao)
297+ let bZ = ((bX + bY) - bW)
298+ let ca = (bZ - bT)
299+ let cb = assetBalance(Q, ab)
300+ let cc = valueOrErrorMessage(assetInfo(ab), ("Cannot find asset by id " + bS)).quantity
301+ let cd = (cc - cb)
302+ let bk = addressFromStringValue(aQ(bB))
303+ let ce = bj(bk, S)
304+ let cf = (((al + aO(bB)) * ce) / al)
305+ let cg = (cf * cd)
306+ let ch = bg(bR, ad)
307+ let ci = ac(bR, ad)
308+ let cj = valueOrElse(getInteger(this, ci), 0)
309+ let ck = bh(bR, ad)
310+ let cl = (ca - cg)
311+ let cm = fraction(cj, al, bT)
312+ let cn = fraction(ch, al, bU)
313+ let co = if ((cl >= 0))
314+ then 0
315+ else max([cm, cn])
316+ let cp = fraction((al - co), cj, al)
317+ let cq = (height + aX(bB))
318+ $Tuple8(bR, cp, bW, bT, cj, cq, ck, makeString([bR, bS, ad, toString(bX), toString(bY), toString(bZ), toString(bT), toString(bU), toString(ca), toString(cd), toString(ce), toString(cf), toString(ch), toString(cj), toString(ck), toString(cl), toString(cm), toString(cn), toString(co), toString(cp)], h))
319+ }
320+
321+
322+@Callable(cr)
323+func init (cs,ct,cu,cv,ay,cw,cx,cy) = if ((toBase58String(cr.callerPublicKey) != y))
251324 then throw("Only Admin can perform contract operation.")
252- else if ((g(B) == true))
325+ else if ((g(C) == true))
253326 then throw("Contract was already initialized.")
254327 else {
255- let bH = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
256- let bI = calculateAssetId(bH)
257-[StringEntry(y, bA), StringEntry(z, bB), IntegerEntry(A, bC), StringEntry(D, bD), IntegerEntry(C, am), IntegerEntry(F, bE), StringEntry(E, toBase58String(bI)), StringEntry(G, bF), StringEntry(H, bG), BooleanEntry(B, true), bH, Burn(bI, 1)]
328+ let cz = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
329+ let cA = calculateAssetId(cz)
330+[StringEntry(z, cs), StringEntry(A, ct), IntegerEntry(B, cu), StringEntry(E, cv), IntegerEntry(D, ay), IntegerEntry(G, cw), StringEntry(F, toBase58String(cA)), StringEntry(H, cx), StringEntry(I, cy), BooleanEntry(C, true), cz, Burn(cA, 1)]
258331 }
259332
260333
261334
262-@Callable(bz)
263-func proposeAsset (P,bJ,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bz.callerPublicKey) != x))
335+@Callable(cr)
336+func proposeAsset (S,cB,bq,bk,bp,bo,bn,br,bs,bt,bu,bv,bw,bx,by) = if ((toBase58String(cr.callerPublicKey) != y))
264337 then throw("Only Admin can perform contract operation.")
265- else if ((g(B) == false))
338+ else if ((g(C) == false))
266339 then throw("Contract is not yet ready.")
267- else if ((fromBase58String(aX) != ag))
340+ else if ((fromBase58String(bo) != ao))
268341 then throw("Baking asset id could be USDN only.")
269- else if ((aq(P) != ""))
270- then throw((("Asset with passed code " + P) + " has already been proposed."))
271- else if ((ai > aZ))
272- then throw(("Minimum pool amount should be greater or equals to " + toString(ai)))
273- else if (if (if (if (if (if (if (if ((0 > aY))
342+ else if ((aF(S) != ""))
343+ then throw((("Asset with passed code " + S) + " has already been proposed."))
344+ else if ((aq > bq))
345+ then throw(("Minimum pool amount should be greater or equals to " + toString(aq)))
346+ else if (if (if (if (if (if (if (if ((0 > bp))
274347 then true
275- else (0 > aW))
348+ else (0 > bn))
276349 then true
277- else (0 > ba))
350+ else (0 > br))
278351 then true
279- else (0 > bb))
352+ else (0 > bs))
280353 then true
281- else (0 > bc))
354+ else (0 > bt))
282355 then true
283- else (0 > bd))
356+ else (0 > bu))
284357 then true
285- else (0 > be))
358+ else (0 > bv))
286359 then true
287- else (0 > bf))
360+ else (0 > bw))
288361 then throw("One of the passed parameters is invalid.")
289362 else {
290- let bK = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
291- let N = al[am]
292- let bL = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
293-[StringEntry(M(N), aV(P, bL, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bJ), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bL), N)]
363+ let cC = valueOrErrorMessage(addressFromStringValue(bk), "Passed Price Oracle Address is not valid.")
364+ let Q = ax[ay]
365+ let cD = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(Q), ""), N), "No defo asset ID found.")
366+[StringEntry(P(Q), bm(S, cD, av._1, bn, bo, bp, bq, bk, br, bs, bt, bu, bv, bw, bx, by)), StringEntry(Z(S), Q), StringEntry(X(Q), cB), IntegerEntry(T(Q), height), IntegerEntry(D, (ay + 1)), StringEntry(aa(cD), Q)]
294367 }
295368
296369
297370
298-@Callable(bz)
299-func fundLiquidityPool (P) = {
300- let N = aq(P)
301- let bk = ae(N)
302- let bM = value(bz.payments[0])
303- if ((toBase58String(bz.callerPublicKey) != x))
371+@Callable(cr)
372+func fundLiquidityPool (S) = {
373+ let bR = aH(S)
374+ let bB = ak(bR)
375+ let cE = value(cr.payments[0])
376+ let ad = toString(cr.caller)
377+ if ((g(C) == false))
378+ then throw("Contract is not yet ready.")
379+ else if ((cE.assetId != ao))
380+ then throw("Liquidity pool could be funded with USDN only.")
381+ else if ((ar > cE.amount))
382+ then throw(("Attached payment amount is less tha min allowed: " + toString(ar)))
383+ else {
384+ let cF = (cE.amount + bc(bR))
385+ let cG = bd(bR)
386+ let cH = bf(bR, ad)
387+ let cI = bg(bR, ad)
388+ let cJ = aL(bB)
389+ let cK = if (if ((cJ == as))
390+ then (cF >= aP(bB))
391+ else false)
392+ then at
393+ else cJ
394+ let cL = (cH + cE.amount)
395+ let cM = if ((cJ == au))
396+ then [ScriptTransfer(addressFromStringValue(bR), cE.amount, ao)]
397+ else nil
398+ ([IntegerEntry(ac(bR, ad), cL), IntegerEntry(ae(bR, ad), max([cL, cI])), IntegerEntry(V(bR), cF), IntegerEntry(W(bR), max([cG, cF])), StringEntry(P(bR), bz(cK, bB))] ++ cM)
399+ }
400+ }
401+
402+
403+
404+@Callable(cr)
405+func activateAsset (S) = {
406+ let Q = aF(S)
407+ let bB = ak(Q)
408+ let cN = bc(Q)
409+ let cO = aL(bB)
410+ if ((toBase58String(cr.callerPublicKey) != y))
304411 then throw("Only Admin can perform contract operation.")
305- else if ((g(B) == false))
412+ else if ((g(C) == false))
306413 then throw("Contract is not yet ready.")
307- else if ((bM.assetId != ag))
308- then throw("Liquidity pool could be funded with USDN only.")
309- else if ((bM.amount == 0))
310- then throw("Incorrect attached payment amount.")
311- else if ((N == ""))
312- then throw((("Cannot find liquidity pool for asset " + P) + "."))
414+ else if ((cO != av._2))
415+ then throw((("Asset is not in READY status. Current status is " + cO) + "."))
416+ else if ((Q == ""))
417+ then throw((("Cannot find asset " + S) + "."))
418+ else if ((aq > cN))
419+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(cN)) + ") is less than required (") + toString(aq)) + ")"))
313420 else {
314- let bN = (bM.amount + aM(N))
315- let bO = aN(N)
316- let aa = toString(bz.caller)
317- let bP = aP(N, aa)
318- let bQ = aQ(N, aa)
319- let bR = av(bk)
320- let bS = if (if ((bN >= az(bk)))
321- then (bR == aj._1)
322- else false)
323- then aj._2
324- else bR
325- let bT = aJ(N)
326- let bU = if ((bT == ""))
327- then aa
328- else if (contains(bT, aa))
329- then bT
330- else ((bT + ",") + toString(bz.caller))
331- let bV = (bP + bz.payments[0].amount)
332- let bW = [IntegerEntry(Z(N, toString(bz.caller)), bV), IntegerEntry(ab(N, toString(bz.caller)), if ((bV > bQ))
333- then bV
334- else bQ), IntegerEntry(S(N), bN), IntegerEntry(T(N), if ((bN > bO))
335- then bN
336- else bO), StringEntry(V(N), bU), StringEntry(M(N), bi(bS, bk))]
337- if ((bR == aj._3))
338- then (bW :+ ScriptTransfer(addressFromStringValue(N), bM.amount, ag))
339- else bW
421+ let cz = Reissue(az, aA, true)
422+[IntegerEntry(U(Q), height), StringEntry(P(Q), bz(av._3, bB)), cz, ScriptTransfer(addressFromStringValue(Q), cN, ao), ScriptTransfer(addressFromStringValue(Q), aA, az)]
340423 }
341424 }
342425
343426
344427
345-@Callable(bz)
346-func activateAsset (P) = {
347- let N = aq(P)
348- let bk = ae(N)
349- let bX = aM(N)
350- let bY = av(bk)
351- if ((toBase58String(bz.callerPublicKey) != x))
352- then throw("Only Admin can perform contract operation.")
353- else if ((g(B) == false))
354- then throw("Contract is not yet ready.")
355- else if ((bY != aj._2))
356- then throw((("Asset is not in READY status. Current status is " + bY) + "."))
357- else if ((N == ""))
358- then throw((("Cannot find asset " + P) + "."))
359- else if ((ai > bX))
360- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bX)) + ") is less than required (") + toString(ai)) + ")"))
361- else {
362- let bH = Reissue(an, ap, true)
363-[IntegerEntry(R(N), height), StringEntry(M(N), bi(aj._3, bk)), bH, ScriptTransfer(addressFromStringValue(N), bX, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
364- }
428+@Callable(cr)
429+func redeemFromPool (S,cP) = {
430+ let cQ = toString(cr.caller)
431+ let cR = bQ(S, cQ)
432+ let bR = cR._1
433+ let cp = cR._2
434+ let bW = cR._3
435+ let bT = cR._4
436+ let cj = cR._5
437+ let cq = cR._6
438+ let ck = cR._7
439+ let cS = cR._8
440+ let cT = ah(bR, cQ, cq)
441+ if ((g(C) == false))
442+ then throw("Contract is not yet ready.")
443+ else if (if (if ((0 > cP))
444+ then true
445+ else (0 >= cj))
446+ then true
447+ else (cP > cp))
448+ then throw((("Cannot find pool maker by address " + cQ) + " or amount passed is not correct."))
449+ else if (((1 * al) > cP))
450+ then throw("Redeem amount is less then min allowed")
451+ else if ((ck > 0))
452+ then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
453+ else if (isDefined(getInteger(this, cT)))
454+ then throw((("Pool maker has already initiated redemption for " + toString(height)) + " height"))
455+ else [IntegerEntry(aj(bR), (bW + cP)), IntegerEntry(V(bR), (bT - cP)), IntegerEntry(ac(bR, cQ), (cj - cP)), IntegerEntry(cT, cP), IntegerEntry(af(bR, cQ), cP), IntegerEntry(ag(bR, cQ), cq), StringEntry("%s%s_trace_redeemFromPool", cS)]
365456 }
366457
367458
368459
369-@Callable(bz)
370-func redeemFromPool (P,bZ) = {
371- let N = aq(P)
372- let bk = ae(N)
373- let ca = toString(bz.caller)
374- let cb = aP(N, ca)
375- let cc = aR(N, ca)
376- if ((toBase58String(bz.callerPublicKey) != x))
377- then throw("Only Admin can perform contract operation.")
378- else if ((g(B) == false))
379- then throw("Contract is not yet ready.")
380- else if ((N == ""))
381- then throw((("Cannot find asset " + P) + "."))
382- else if (if (if ((0 > bZ))
383- then true
384- else (cb == 0))
385- then true
386- else (bZ > cb))
387- then throw((("Cannot find pool maker by address " + ca) + " or amount passed is not correct."))
388- else if ((cc > 0))
389- then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
390- else [IntegerEntry(ac(N, ca), bZ), IntegerEntry(ad(N, ca), (height + aH(bk)))]
460+@Callable(cr)
461+func getMaxAllowedAmountToRedeem (S,ad) = {
462+ let cR = bQ(S, ad)
463+ let bR = cR._1
464+ let cp = cR._2
465+ let bW = cR._3
466+ let bT = cR._4
467+ let cj = cR._5
468+ let cq = cR._6
469+ let ck = cR._7
470+ throw(((((((("{" + "allowedAmountToRedeem: ") + toString(cp)) + ", assetCode: ") + S) + ", poolMaker: ") + ad) + "}"))
391471 }
392472
393473
394474
395-@Callable(bz)
396-func getMaxAllowedAmountToRedeem (P,cd) = throw((((("{allowedAmountToRedeem: 1000, assetCode: " + P) + ", poolMaker: ") + cd) + "}"))
397-
398-
399-
400-@Callable(bz)
401-func withdraw (P) = {
402- let bk = ae(P)
403- let N = aq(P)
404- let aU = addressFromStringValue(aA(bk))
405- let ca = toString(bz.caller)
406- let ce = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
407- let cf = assetBalance(this, ag)
408- let cg = aP(N, ca)
409- let cc = aR(N, ca)
410- let ch = aS(N, ca)
411- let ci = (aN(N) / aQ(N, ca))
412- if ((toBase58String(bz.callerPublicKey) != x))
413- then throw("Only Admin can perform contract operation.")
414- else if ((g(B) == false))
415- then throw("Contract is not yet ready.")
416- else if ((g(B) == false))
417- then throw("Contract is not yet ready.")
418- else if ((N == ""))
419- then throw((("Cannot find asset " + P) + "."))
420- else if ((cg == 0))
421- then throw((("Cannot find pool maker by address " + ca) + " or no locked amount."))
422- else if ((height > ch))
423- then throw((("Please wait " + toString(ch)) + " before withdraw."))
424- else {
425- let cj = ce.quantity
426- let ck = aT(aU, P)
427- let cl = aR(N, ca)
428- let cm = (ay(bk) * ck)
429- let cn = (cm * cj)
430- if ((cf > cn))
431- then {
432- let co = (cf - cn)
433- let cp = (ci * co)
434- let cq = (aR(N, ca) - cp)
435-[IntegerEntry(S(N), (aM(N) - cp)), IntegerEntry(Z(N, ca), (aP(N, ca) - cp)), IntegerEntry(ac(N, ca), cq), ScriptTransfer(addressFromStringValue(ca), cp, ag)]
436- }
437- else nil
438- }
475+@Callable(cr)
476+func withdraw (S) = {
477+ let cQ = toString(cr.caller)
478+ let bR = aH(S)
479+ let Q = addressFromStringValue(bR)
480+ let cU = af(bR, cQ)
481+ let cV = valueOrElse(getInteger(this, cU), 0)
482+ let cW = ag(bR, cQ)
483+ let cq = valueOrElse(getInteger(this, cW), 0)
484+ let bV = aj(bR)
485+ let bW = valueOrElse(getInteger(this, bV), 0)
486+ let cT = ah(bR, cQ, cq)
487+ if ((g(C) == false))
488+ then throw("Contract is not yet ready.")
489+ else if (!(isDefined(getInteger(Q, cT))))
490+ then throw("Need to transfer liquidity from asset account first")
491+ else if ((0 >= cV))
492+ then throw((("Cannot find pool maker by address " + cQ) + " or no locked amount."))
493+ else if ((height > cq))
494+ then throw((("Please wait " + toString(cq)) + " before withdraw."))
495+ else [IntegerEntry(cU, 0), IntegerEntry(bV, (bW - cV)), IntegerEntry(cW, 0), ScriptTransfer(addressFromStringValue(cQ), cV, ao)]
439496 }
440497
441498
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
13-let h = 1
13+let h = "__"
1414
15-let i = 2
15+let i = 1
1616
17-let j = 3
17+let j = 2
1818
19-let k = 4
19+let k = 3
2020
21-let l = 5
21+let l = 4
2222
23-let m = 6
23+let m = 5
2424
25-let n = 7
25+let n = 6
2626
27-let o = 8
27+let o = 7
2828
29-let p = 9
29+let p = 8
3030
31-let q = 10
31+let q = 9
3232
33-let r = 11
33+let r = 10
3434
35-let s = 12
35+let s = 11
3636
37-let t = 13
37+let t = 12
3838
39-let u = 14
39+let u = 13
4040
41-let v = 15
41+let v = 14
4242
43-let w = 16
43+let w = 15
4444
45-let x = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
45+let x = 16
4646
47-let y = "%s%s__commonConfig__neutrinoContractAddress"
47+let y = "G1Ebu5AMHaTJFEbZNkZQcJFUQ9KfiYUwupyLG857DcFr"
4848
49-let z = "%s%s__commonConfig__neutrinoStakingAddress"
49+let z = "%s%s__commonConfig__neutrinoContractAddress"
5050
51-let A = "%s%s__commonConfig__minimumPoolFundingAmount"
51+let A = "%s%s__commonConfig__neutrinoStakingAddress"
5252
53-let B = "%s%s__commonConfig__initialized"
53+let B = "%s%s__commonConfig__minimumPoolFundingAmount"
5454
55-let C = "%s%s__commonConfig__predefinedAssetsActiveIndex"
55+let C = "%s%s__commonConfig__initialized"
5656
57-let D = "%s%s__commonConfig__predefinedAssetsList"
57+let D = "%s%s__commonConfig__predefinedAssetsActiveIndex"
5858
59-let E = "%s%s__commonConfig__debtAssetId"
59+let E = "%s%s__commonConfig__predefinedAssetsList"
6060
61-let F = "%s%s__commonConfig__debtAssetEtalonBalance"
61+let F = "%s%s__commonConfig__debtAssetId"
6262
63-let G = "%s%s__commonConfig__defoStakingAddress"
63+let G = "%s%s__commonConfig__debtAssetEtalonBalance"
6464
65-let H = "%s%s__commonConfig__defoStakingPacemakerPub"
65+let H = "%s%s__commonConfig__defoStakingAddress"
6666
67-let I = "neutrino_asset_id"
67+let I = "%s%s__commonConfig__defoStakingPacemakerPub"
6868
69-let J = "bond_asset_id"
69+let J = "%s%s__commonConfig__minPoolInvestAmount"
7070
71-let K = "%s__defoAssetId"
71+let K = "neutrino_asset_id"
7272
73-let L = "%s__assetScriptTxId"
73+let L = "bond_asset_id"
7474
75-func M (N) = (("%s%s%s__defoAsset__" + N) + "__config")
75+let M = "rpd_contract"
76+
77+let N = "%s__defoAssetId"
78+
79+let O = "%s__assetScriptTxId"
80+
81+func P (Q) = (("%s%s%s__defoAsset__" + Q) + "__config")
7682
7783
78-func O (P) = ("%s%s__assetPrice__" + P)
84+func R (S) = ("%s%s__assetPrice__" + S)
7985
8086
81-func Q (N) = (("%s%s%s__defoAsset__" + N) + "__initHeight")
87+func T (Q) = (("%s%s%s__defoAsset__" + Q) + "__initHeight")
8288
8389
84-func R (N) = (("%s%s%s__defoAsset__" + N) + "__activateHeight")
90+func U (Q) = (("%s%s%s__defoAsset__" + Q) + "__activateHeight")
8591
8692
87-func S (N) = (("%s%s%s__defoAsset__" + N) + "__currentPool")
93+func V (Q) = (("%s%s%s__defoAsset__" + Q) + "__currentPool")
8894
8995
90-func T (N) = (("%s%s%s__defoAsset__" + N) + "__maxPool")
96+func W (Q) = (("%s%s%s__defoAsset__" + Q) + "__maxPool")
9197
9298
93-func U (N) = (("%s%s%s__defoAsset__" + N) + "__meta")
99+func X (Q) = (("%s%s%s__defoAsset__" + Q) + "__meta")
94100
95101
96-func V (N) = (("%s%s%s__defoAsset__" + N) + "__poolMakers")
102+func Y (Q) = (("%s%s%s__defoAsset__" + Q) + "__poolMakers")
97103
98104
99-func W (P) = (("%s%s%s__defoAsset__" + P) + "__addressByAssetCode")
105+func Z (S) = (("%s%s%s__defoAsset__" + S) + "__addressByAssetCode")
100106
101107
102-func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__addressByAssetId")
108+func aa (ab) = (("%s%s%s__defoAsset__" + ab) + "__addressByAssetId")
103109
104110
105-func Z (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__amount")
111+func ac (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "amount"], h)
106112
107113
108-func ab (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__maxAmount")
114+func ae (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "maxAmount"], h)
109115
110116
111-func ac (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__lockedAmount")
117+func af (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "lockedAmount"], h)
112118
113119
114-func ad (N,aa) = (((("%s%s%s%s__pool__" + N) + "__") + aa) + "__unlockHeight")
120+func ag (Q,ad) = makeString(["%s%s%s%s__pool", Q, ad, "unlockHeight"], h)
115121
116122
117-func ae (N) = a(valueOrErrorMessage(d(this, M(N)), (("No DEFO Asset " + N) + "config present")), "__")
123+func ah (Q,ad,ai) = makeString(["%s%s%s%d%s__pool", Q, ad, toString(ai), "liquidityRequest"], h)
118124
119125
120-let af = addressFromStringValue(valueOrErrorMessage(getString(this, y), "No neutrino contract specified."))
121-
122-let ag = fromBase58String(valueOrErrorMessage(getString(af, I), "No USDN asset id found."))
123-
124-let ah = fromBase58String(valueOrErrorMessage(getString(af, J), "No NSBT asset id found"))
125-
126-let ai = valueOrErrorMessage(getInteger(this, A), "Minimum pool funding amount is not specified.")
127-
128-let aj = $Tuple3("PROPOSED", "READY", "ISSUED")
129-
130-let ak = valueOrErrorMessage(getString(this, D), "No pool of predeployed asset contracts found.")
131-
132-let al = a(ak, ",")
133-
134-let am = valueOrElse(getInteger(this, C), 0)
135-
136-let an = fromBase58String(valueOrErrorMessage(getString(this, E), "No debt token found"))
137-
138-let ao = 1000000
139-
140-let ap = valueOrElse(getInteger(this, F), 0)
141-
142-func aq (ar) = valueOrElse(getString(this, W(ar)), "")
126+func aj (Q) = makeString(["%s%s%s__pool", Q, "totalLockedAmount"], h)
143127
144128
145-func as (at) = at[h]
129+func ak (Q) = a(valueOrErrorMessage(d(this, P(Q)), (("No DEFO Asset " + Q) + "config present")), "__")
146130
147131
148-func au (at) = at[i]
132+let al = 1000000
149133
134+let am = addressFromStringValue(valueOrErrorMessage(getString(this, z), "No neutrino contract specified."))
150135
151-func av (at) = at[j]
136+let an = valueOrErrorMessage(getString(am, K), "No USDN asset id found.")
152137
138+let ao = fromBase58String(an)
153139
154-func aw (at) = parseIntValue(at[k])
140+let ap = fromBase58String(valueOrErrorMessage(getString(am, L), "No NSBT asset id found"))
155141
142+let aq = valueOrErrorMessage(getInteger(this, B), "Minimum pool funding amount is not specified.")
156143
157-func ax (at) = at[l]
144+let ar = valueOrElse(getInteger(this, J), (10 * al))
158145
146+let as = "PROPOSED"
159147
160-func ay (at) = parseIntValue(at[m])
148+let at = "READY"
161149
150+let au = "ISSUED"
162151
163-func az (at) = parseIntValue(at[n])
152+let av = $Tuple3(as, at, au)
164153
154+let aw = valueOrErrorMessage(getString(this, E), "No pool of predeployed asset contracts found.")
165155
166-func aA (at) = at[o]
156+let ax = a(aw, ",")
167157
158+let ay = valueOrElse(getInteger(this, D), 0)
168159
169-func aB (at) = parseIntValue(at[p])
160+let az = fromBase58String(valueOrErrorMessage(getString(this, F), "No debt token found"))
170161
162+let aA = valueOrElse(getInteger(this, G), 0)
171163
172-func aC (at) = parseIntValue(at[q])
164+let aB = addressFromStringValue(getStringValue(am, M))
173165
174-
175-func aD (at) = parseIntValue(at[r])
176-
177-
178-func aE (at) = parseIntValue(at[s])
179-
180-
181-func aF (at) = parseIntValue(at[t])
182-
183-
184-func aG (at) = parseIntValue(at[u])
185-
186-
187-func aH (at) = parseIntValue(at[v])
188-
189-
190-func aI (at) = parseIntValue(at[w])
191-
192-
193-func aJ (N) = valueOrElse(getString(this, V(N)), "")
194-
195-
196-func aK (N) = valueOrElse(getInteger(this, Q(N)), 0)
197-
198-
199-func aL (N) = valueOrElse(getInteger(this, R(N)), 0)
200-
201-
202-func aM (N) = valueOrElse(getInteger(this, S(N)), 0)
203-
204-
205-func aN (N) = valueOrElse(getInteger(this, T(N)), 0)
206-
207-
208-func aO (N) = valueOrElse(getString(this, U(N)), "")
209-
210-
211-func aP (N,aa) = valueOrElse(getInteger(this, Z(N, aa)), 0)
212-
213-
214-func aQ (N,aa) = valueOrElse(getInteger(this, ab(N, aa)), 0)
215-
216-
217-func aR (N,aa) = valueOrElse(getInteger(this, ac(N, aa)), 0)
218-
219-
220-func aS (N,aa) = valueOrElse(getInteger(this, ad(N, aa)), 0)
221-
222-
223-func aT (aU,P) = valueOrErrorMessage(getInteger(aU, O(P)), "No Asset price found")
224-
225-
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), toString(bh)], "__")
227-
228-
229-func bi (bj,bk) = {
230- let bl = as(bk)
231- let bm = au(bk)
232- let bn = aw(bk)
233- let bo = ax(bk)
234- let bp = ay(bk)
235- let bq = az(bk)
236- let br = aA(bk)
237- let bs = aB(bk)
238- let bt = aC(bk)
239- let bu = aD(bk)
240- let bv = aE(bk)
241- let bw = aF(bk)
242- let bx = aG(bk)
243- let by = aH(bk)
244- let bh = aI(bk)
245- aV(bl, bm, bj, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bh)
166+func aC (aD) = {
167+ let aE = makeString(["rpd_balance", an, aD], "_")
168+ valueOrElse(getInteger(aB, aE), 0)
246169 }
247170
248171
249-@Callable(bz)
250-func init (bA,bB,bC,bD,am,bE,bF,bG) = if ((toBase58String(bz.callerPublicKey) != x))
172+func aF (aG) = valueOrElse(getString(this, Z(aG)), "")
173+
174+
175+func aH (aG) = valueOrErrorMessage(getString(this, Z(aG)), (("Cannot find asset address by " + aG) + " code"))
176+
177+
178+func aI (aJ) = aJ[i]
179+
180+
181+func aK (aJ) = aJ[j]
182+
183+
184+func aL (aJ) = aJ[k]
185+
186+
187+func aM (aJ) = parseIntValue(aJ[l])
188+
189+
190+func aN (aJ) = aJ[m]
191+
192+
193+func aO (aJ) = parseIntValue(aJ[n])
194+
195+
196+func aP (aJ) = parseIntValue(aJ[o])
197+
198+
199+func aQ (aJ) = aJ[p]
200+
201+
202+func aR (aJ) = parseIntValue(aJ[q])
203+
204+
205+func aS (aJ) = parseIntValue(aJ[r])
206+
207+
208+func aT (aJ) = parseIntValue(aJ[s])
209+
210+
211+func aU (aJ) = parseIntValue(aJ[t])
212+
213+
214+func aV (aJ) = parseIntValue(aJ[u])
215+
216+
217+func aW (aJ) = parseIntValue(aJ[v])
218+
219+
220+func aX (aJ) = parseIntValue(aJ[w])
221+
222+
223+func aY (aJ) = parseIntValue(aJ[x])
224+
225+
226+func aZ (Q) = valueOrElse(getString(this, Y(Q)), "")
227+
228+
229+func ba (Q) = valueOrElse(getInteger(this, T(Q)), 0)
230+
231+
232+func bb (Q) = valueOrElse(getInteger(this, U(Q)), 0)
233+
234+
235+func bc (Q) = valueOrElse(getInteger(this, V(Q)), 0)
236+
237+
238+func bd (Q) = valueOrElse(getInteger(this, W(Q)), 0)
239+
240+
241+func be (Q) = valueOrElse(getString(this, X(Q)), "")
242+
243+
244+func bf (Q,ad) = valueOrElse(getInteger(this, ac(Q, ad)), 0)
245+
246+
247+func bg (Q,ad) = valueOrElse(getInteger(this, ae(Q, ad)), 0)
248+
249+
250+func bh (Q,ad) = valueOrElse(getInteger(this, af(Q, ad)), 0)
251+
252+
253+func bi (Q,ad) = valueOrElse(getInteger(this, ag(Q, ad)), 0)
254+
255+
256+func bj (bk,S) = valueOrErrorMessage(getInteger(bk, R(S)), "No Asset price found")
257+
258+
259+func bl (Q) = valueOrElse(getInteger(this, aj(Q)), 0)
260+
261+
262+func bm (S,ab,av,bn,bo,bp,bq,bk,br,bs,bt,bu,bv,bw,bx,by) = makeString(["%s%s%s%d%s%d%d%s%d%d%d%d%d%d%d", S, ab, av, toString(bn), bo, toString(bp), toString(bq), bk, toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by)], "__")
263+
264+
265+func bz (bA,bB) = {
266+ let bC = aI(bB)
267+ let bD = aK(bB)
268+ let bE = aM(bB)
269+ let bF = aN(bB)
270+ let bG = aO(bB)
271+ let bH = aP(bB)
272+ let bI = aQ(bB)
273+ let bJ = aR(bB)
274+ let bK = aS(bB)
275+ let bL = aT(bB)
276+ let bM = aU(bB)
277+ let bN = aV(bB)
278+ let bO = aW(bB)
279+ let bP = aX(bB)
280+ let by = aY(bB)
281+ bm(bC, bD, bA, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, by)
282+ }
283+
284+
285+func bQ (S,ad) = {
286+ let bR = aH(S)
287+ let Q = addressFromStringValue(bR)
288+ let bB = ak(bR)
289+ let bS = aK(bB)
290+ let ab = fromBase58String(bS)
291+ let bT = valueOrElse(getInteger(this, V(bR)), 0)
292+ let bU = valueOrElse(getInteger(this, W(bR)), 0)
293+ let bV = aj(bR)
294+ let bW = valueOrElse(getInteger(this, bV), 0)
295+ let bX = aC(bR)
296+ let bY = assetBalance(Q, ao)
297+ let bZ = ((bX + bY) - bW)
298+ let ca = (bZ - bT)
299+ let cb = assetBalance(Q, ab)
300+ let cc = valueOrErrorMessage(assetInfo(ab), ("Cannot find asset by id " + bS)).quantity
301+ let cd = (cc - cb)
302+ let bk = addressFromStringValue(aQ(bB))
303+ let ce = bj(bk, S)
304+ let cf = (((al + aO(bB)) * ce) / al)
305+ let cg = (cf * cd)
306+ let ch = bg(bR, ad)
307+ let ci = ac(bR, ad)
308+ let cj = valueOrElse(getInteger(this, ci), 0)
309+ let ck = bh(bR, ad)
310+ let cl = (ca - cg)
311+ let cm = fraction(cj, al, bT)
312+ let cn = fraction(ch, al, bU)
313+ let co = if ((cl >= 0))
314+ then 0
315+ else max([cm, cn])
316+ let cp = fraction((al - co), cj, al)
317+ let cq = (height + aX(bB))
318+ $Tuple8(bR, cp, bW, bT, cj, cq, ck, makeString([bR, bS, ad, toString(bX), toString(bY), toString(bZ), toString(bT), toString(bU), toString(ca), toString(cd), toString(ce), toString(cf), toString(ch), toString(cj), toString(ck), toString(cl), toString(cm), toString(cn), toString(co), toString(cp)], h))
319+ }
320+
321+
322+@Callable(cr)
323+func init (cs,ct,cu,cv,ay,cw,cx,cy) = if ((toBase58String(cr.callerPublicKey) != y))
251324 then throw("Only Admin can perform contract operation.")
252- else if ((g(B) == true))
325+ else if ((g(C) == true))
253326 then throw("Contract was already initialized.")
254327 else {
255- let bH = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
256- let bI = calculateAssetId(bH)
257-[StringEntry(y, bA), StringEntry(z, bB), IntegerEntry(A, bC), StringEntry(D, bD), IntegerEntry(C, am), IntegerEntry(F, bE), StringEntry(E, toBase58String(bI)), StringEntry(G, bF), StringEntry(H, bG), BooleanEntry(B, true), bH, Burn(bI, 1)]
328+ let cz = Issue("DEFO_DEBT", "DEFO Debt Token.", 1, 6, true)
329+ let cA = calculateAssetId(cz)
330+[StringEntry(z, cs), StringEntry(A, ct), IntegerEntry(B, cu), StringEntry(E, cv), IntegerEntry(D, ay), IntegerEntry(G, cw), StringEntry(F, toBase58String(cA)), StringEntry(H, cx), StringEntry(I, cy), BooleanEntry(C, true), cz, Burn(cA, 1)]
258331 }
259332
260333
261334
262-@Callable(bz)
263-func proposeAsset (P,bJ,aZ,aU,aY,aX,aW,ba,bb,bc,bd,be,bf,bg,bh) = if ((toBase58String(bz.callerPublicKey) != x))
335+@Callable(cr)
336+func proposeAsset (S,cB,bq,bk,bp,bo,bn,br,bs,bt,bu,bv,bw,bx,by) = if ((toBase58String(cr.callerPublicKey) != y))
264337 then throw("Only Admin can perform contract operation.")
265- else if ((g(B) == false))
338+ else if ((g(C) == false))
266339 then throw("Contract is not yet ready.")
267- else if ((fromBase58String(aX) != ag))
340+ else if ((fromBase58String(bo) != ao))
268341 then throw("Baking asset id could be USDN only.")
269- else if ((aq(P) != ""))
270- then throw((("Asset with passed code " + P) + " has already been proposed."))
271- else if ((ai > aZ))
272- then throw(("Minimum pool amount should be greater or equals to " + toString(ai)))
273- else if (if (if (if (if (if (if (if ((0 > aY))
342+ else if ((aF(S) != ""))
343+ then throw((("Asset with passed code " + S) + " has already been proposed."))
344+ else if ((aq > bq))
345+ then throw(("Minimum pool amount should be greater or equals to " + toString(aq)))
346+ else if (if (if (if (if (if (if (if ((0 > bp))
274347 then true
275- else (0 > aW))
348+ else (0 > bn))
276349 then true
277- else (0 > ba))
350+ else (0 > br))
278351 then true
279- else (0 > bb))
352+ else (0 > bs))
280353 then true
281- else (0 > bc))
354+ else (0 > bt))
282355 then true
283- else (0 > bd))
356+ else (0 > bu))
284357 then true
285- else (0 > be))
358+ else (0 > bv))
286359 then true
287- else (0 > bf))
360+ else (0 > bw))
288361 then throw("One of the passed parameters is invalid.")
289362 else {
290- let bK = valueOrErrorMessage(addressFromStringValue(aU), "Passed Price Oracle Address is not valid.")
291- let N = al[am]
292- let bL = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(N), ""), K), "No defo asset ID found.")
293-[StringEntry(M(N), aV(P, bL, aj._1, aW, aX, aY, aZ, aU, ba, bb, bc, bd, be, bf, bg, bh)), StringEntry(W(P), N), StringEntry(U(N), bJ), IntegerEntry(Q(N), height), IntegerEntry(C, (am + 1)), StringEntry(X(bL), N)]
363+ let cC = valueOrErrorMessage(addressFromStringValue(bk), "Passed Price Oracle Address is not valid.")
364+ let Q = ax[ay]
365+ let cD = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(Q), ""), N), "No defo asset ID found.")
366+[StringEntry(P(Q), bm(S, cD, av._1, bn, bo, bp, bq, bk, br, bs, bt, bu, bv, bw, bx, by)), StringEntry(Z(S), Q), StringEntry(X(Q), cB), IntegerEntry(T(Q), height), IntegerEntry(D, (ay + 1)), StringEntry(aa(cD), Q)]
294367 }
295368
296369
297370
298-@Callable(bz)
299-func fundLiquidityPool (P) = {
300- let N = aq(P)
301- let bk = ae(N)
302- let bM = value(bz.payments[0])
303- if ((toBase58String(bz.callerPublicKey) != x))
371+@Callable(cr)
372+func fundLiquidityPool (S) = {
373+ let bR = aH(S)
374+ let bB = ak(bR)
375+ let cE = value(cr.payments[0])
376+ let ad = toString(cr.caller)
377+ if ((g(C) == false))
378+ then throw("Contract is not yet ready.")
379+ else if ((cE.assetId != ao))
380+ then throw("Liquidity pool could be funded with USDN only.")
381+ else if ((ar > cE.amount))
382+ then throw(("Attached payment amount is less tha min allowed: " + toString(ar)))
383+ else {
384+ let cF = (cE.amount + bc(bR))
385+ let cG = bd(bR)
386+ let cH = bf(bR, ad)
387+ let cI = bg(bR, ad)
388+ let cJ = aL(bB)
389+ let cK = if (if ((cJ == as))
390+ then (cF >= aP(bB))
391+ else false)
392+ then at
393+ else cJ
394+ let cL = (cH + cE.amount)
395+ let cM = if ((cJ == au))
396+ then [ScriptTransfer(addressFromStringValue(bR), cE.amount, ao)]
397+ else nil
398+ ([IntegerEntry(ac(bR, ad), cL), IntegerEntry(ae(bR, ad), max([cL, cI])), IntegerEntry(V(bR), cF), IntegerEntry(W(bR), max([cG, cF])), StringEntry(P(bR), bz(cK, bB))] ++ cM)
399+ }
400+ }
401+
402+
403+
404+@Callable(cr)
405+func activateAsset (S) = {
406+ let Q = aF(S)
407+ let bB = ak(Q)
408+ let cN = bc(Q)
409+ let cO = aL(bB)
410+ if ((toBase58String(cr.callerPublicKey) != y))
304411 then throw("Only Admin can perform contract operation.")
305- else if ((g(B) == false))
412+ else if ((g(C) == false))
306413 then throw("Contract is not yet ready.")
307- else if ((bM.assetId != ag))
308- then throw("Liquidity pool could be funded with USDN only.")
309- else if ((bM.amount == 0))
310- then throw("Incorrect attached payment amount.")
311- else if ((N == ""))
312- then throw((("Cannot find liquidity pool for asset " + P) + "."))
414+ else if ((cO != av._2))
415+ then throw((("Asset is not in READY status. Current status is " + cO) + "."))
416+ else if ((Q == ""))
417+ then throw((("Cannot find asset " + S) + "."))
418+ else if ((aq > cN))
419+ then throw((((("Cannot issue asset as liquidity pool amount (" + toString(cN)) + ") is less than required (") + toString(aq)) + ")"))
313420 else {
314- let bN = (bM.amount + aM(N))
315- let bO = aN(N)
316- let aa = toString(bz.caller)
317- let bP = aP(N, aa)
318- let bQ = aQ(N, aa)
319- let bR = av(bk)
320- let bS = if (if ((bN >= az(bk)))
321- then (bR == aj._1)
322- else false)
323- then aj._2
324- else bR
325- let bT = aJ(N)
326- let bU = if ((bT == ""))
327- then aa
328- else if (contains(bT, aa))
329- then bT
330- else ((bT + ",") + toString(bz.caller))
331- let bV = (bP + bz.payments[0].amount)
332- let bW = [IntegerEntry(Z(N, toString(bz.caller)), bV), IntegerEntry(ab(N, toString(bz.caller)), if ((bV > bQ))
333- then bV
334- else bQ), IntegerEntry(S(N), bN), IntegerEntry(T(N), if ((bN > bO))
335- then bN
336- else bO), StringEntry(V(N), bU), StringEntry(M(N), bi(bS, bk))]
337- if ((bR == aj._3))
338- then (bW :+ ScriptTransfer(addressFromStringValue(N), bM.amount, ag))
339- else bW
421+ let cz = Reissue(az, aA, true)
422+[IntegerEntry(U(Q), height), StringEntry(P(Q), bz(av._3, bB)), cz, ScriptTransfer(addressFromStringValue(Q), cN, ao), ScriptTransfer(addressFromStringValue(Q), aA, az)]
340423 }
341424 }
342425
343426
344427
345-@Callable(bz)
346-func activateAsset (P) = {
347- let N = aq(P)
348- let bk = ae(N)
349- let bX = aM(N)
350- let bY = av(bk)
351- if ((toBase58String(bz.callerPublicKey) != x))
352- then throw("Only Admin can perform contract operation.")
353- else if ((g(B) == false))
354- then throw("Contract is not yet ready.")
355- else if ((bY != aj._2))
356- then throw((("Asset is not in READY status. Current status is " + bY) + "."))
357- else if ((N == ""))
358- then throw((("Cannot find asset " + P) + "."))
359- else if ((ai > bX))
360- then throw((((("Cannot issue asset as liquidity pool amount (" + toString(bX)) + ") is less than required (") + toString(ai)) + ")"))
361- else {
362- let bH = Reissue(an, ap, true)
363-[IntegerEntry(R(N), height), StringEntry(M(N), bi(aj._3, bk)), bH, ScriptTransfer(addressFromStringValue(N), bX, ag), ScriptTransfer(addressFromStringValue(N), ap, an)]
364- }
428+@Callable(cr)
429+func redeemFromPool (S,cP) = {
430+ let cQ = toString(cr.caller)
431+ let cR = bQ(S, cQ)
432+ let bR = cR._1
433+ let cp = cR._2
434+ let bW = cR._3
435+ let bT = cR._4
436+ let cj = cR._5
437+ let cq = cR._6
438+ let ck = cR._7
439+ let cS = cR._8
440+ let cT = ah(bR, cQ, cq)
441+ if ((g(C) == false))
442+ then throw("Contract is not yet ready.")
443+ else if (if (if ((0 > cP))
444+ then true
445+ else (0 >= cj))
446+ then true
447+ else (cP > cp))
448+ then throw((("Cannot find pool maker by address " + cQ) + " or amount passed is not correct."))
449+ else if (((1 * al) > cP))
450+ then throw("Redeem amount is less then min allowed")
451+ else if ((ck > 0))
452+ then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
453+ else if (isDefined(getInteger(this, cT)))
454+ then throw((("Pool maker has already initiated redemption for " + toString(height)) + " height"))
455+ else [IntegerEntry(aj(bR), (bW + cP)), IntegerEntry(V(bR), (bT - cP)), IntegerEntry(ac(bR, cQ), (cj - cP)), IntegerEntry(cT, cP), IntegerEntry(af(bR, cQ), cP), IntegerEntry(ag(bR, cQ), cq), StringEntry("%s%s_trace_redeemFromPool", cS)]
365456 }
366457
367458
368459
369-@Callable(bz)
370-func redeemFromPool (P,bZ) = {
371- let N = aq(P)
372- let bk = ae(N)
373- let ca = toString(bz.caller)
374- let cb = aP(N, ca)
375- let cc = aR(N, ca)
376- if ((toBase58String(bz.callerPublicKey) != x))
377- then throw("Only Admin can perform contract operation.")
378- else if ((g(B) == false))
379- then throw("Contract is not yet ready.")
380- else if ((N == ""))
381- then throw((("Cannot find asset " + P) + "."))
382- else if (if (if ((0 > bZ))
383- then true
384- else (cb == 0))
385- then true
386- else (bZ > cb))
387- then throw((("Cannot find pool maker by address " + ca) + " or amount passed is not correct."))
388- else if ((cc > 0))
389- then throw("Pool maker already has initiated redemption that is not withdrawn yet.")
390- else [IntegerEntry(ac(N, ca), bZ), IntegerEntry(ad(N, ca), (height + aH(bk)))]
460+@Callable(cr)
461+func getMaxAllowedAmountToRedeem (S,ad) = {
462+ let cR = bQ(S, ad)
463+ let bR = cR._1
464+ let cp = cR._2
465+ let bW = cR._3
466+ let bT = cR._4
467+ let cj = cR._5
468+ let cq = cR._6
469+ let ck = cR._7
470+ throw(((((((("{" + "allowedAmountToRedeem: ") + toString(cp)) + ", assetCode: ") + S) + ", poolMaker: ") + ad) + "}"))
391471 }
392472
393473
394474
395-@Callable(bz)
396-func getMaxAllowedAmountToRedeem (P,cd) = throw((((("{allowedAmountToRedeem: 1000, assetCode: " + P) + ", poolMaker: ") + cd) + "}"))
397-
398-
399-
400-@Callable(bz)
401-func withdraw (P) = {
402- let bk = ae(P)
403- let N = aq(P)
404- let aU = addressFromStringValue(aA(bk))
405- let ca = toString(bz.caller)
406- let ce = valueOrErrorMessage(assetInfo(fromBase58String(N)), ("Cannot find asset by id " + N))
407- let cf = assetBalance(this, ag)
408- let cg = aP(N, ca)
409- let cc = aR(N, ca)
410- let ch = aS(N, ca)
411- let ci = (aN(N) / aQ(N, ca))
412- if ((toBase58String(bz.callerPublicKey) != x))
413- then throw("Only Admin can perform contract operation.")
414- else if ((g(B) == false))
415- then throw("Contract is not yet ready.")
416- else if ((g(B) == false))
417- then throw("Contract is not yet ready.")
418- else if ((N == ""))
419- then throw((("Cannot find asset " + P) + "."))
420- else if ((cg == 0))
421- then throw((("Cannot find pool maker by address " + ca) + " or no locked amount."))
422- else if ((height > ch))
423- then throw((("Please wait " + toString(ch)) + " before withdraw."))
424- else {
425- let cj = ce.quantity
426- let ck = aT(aU, P)
427- let cl = aR(N, ca)
428- let cm = (ay(bk) * ck)
429- let cn = (cm * cj)
430- if ((cf > cn))
431- then {
432- let co = (cf - cn)
433- let cp = (ci * co)
434- let cq = (aR(N, ca) - cp)
435-[IntegerEntry(S(N), (aM(N) - cp)), IntegerEntry(Z(N, ca), (aP(N, ca) - cp)), IntegerEntry(ac(N, ca), cq), ScriptTransfer(addressFromStringValue(ca), cp, ag)]
436- }
437- else nil
438- }
475+@Callable(cr)
476+func withdraw (S) = {
477+ let cQ = toString(cr.caller)
478+ let bR = aH(S)
479+ let Q = addressFromStringValue(bR)
480+ let cU = af(bR, cQ)
481+ let cV = valueOrElse(getInteger(this, cU), 0)
482+ let cW = ag(bR, cQ)
483+ let cq = valueOrElse(getInteger(this, cW), 0)
484+ let bV = aj(bR)
485+ let bW = valueOrElse(getInteger(this, bV), 0)
486+ let cT = ah(bR, cQ, cq)
487+ if ((g(C) == false))
488+ then throw("Contract is not yet ready.")
489+ else if (!(isDefined(getInteger(Q, cT))))
490+ then throw("Need to transfer liquidity from asset account first")
491+ else if ((0 >= cV))
492+ then throw((("Cannot find pool maker by address " + cQ) + " or no locked amount."))
493+ else if ((height > cq))
494+ then throw((("Please wait " + toString(cq)) + " before withdraw."))
495+ else [IntegerEntry(cU, 0), IntegerEntry(bV, (bW - cV)), IntegerEntry(cW, 0), ScriptTransfer(addressFromStringValue(cQ), cV, ao)]
439496 }
440497
441498

github/deemru/w8io/169f3d6 
143.45 ms