tx · 7sG4spNo6XVM5fQScJpRYsvV4js3Q7jWHL1m75xvL1e2

3NC1z7rSjmjRbrab3ja4DcnCw1xZkauKhSo:  -0.01400000 Waves

2021.04.09 12:03 [1474710] smart account 3NC1z7rSjmjRbrab3ja4DcnCw1xZkauKhSo > SELF 0.00000000 Waves

{ "type": 13, "id": "7sG4spNo6XVM5fQScJpRYsvV4js3Q7jWHL1m75xvL1e2", "fee": 1400000, "feeAssetId": null, "timestamp": 1617959052198, "version": 1, "sender": "3NC1z7rSjmjRbrab3ja4DcnCw1xZkauKhSo", "senderPublicKey": "FyXgaE6rRdPKPgcSheVHX7SMhDdiGGdcq2vD3HCazAwC", "proofs": [ "62poWHZ9wW9cMSp5Z3TXrYwUVRuNabXBjS37SUPtcBPf5VogmKMfe7H2zwfgBwjEPjEucaZk79nK45XJdJXeR6Hj" ], "script": "base64:AAIEAAAAAAAAABMIAhIAEgASBAoCCAgSABIDCgEIAAAAbgEAAAARa2V5QWNjdW11bGF0ZWRGZWUAAAAAAgAAABIlc19fYWNjdW11bGF0ZWRGZWUBAAAADmtleVVjb2xsYXRlcmFsAAAAAAIAAAAPJXNfX3Vjb2xsYXRlcmFsAQAAABlrZXlUb3RhbExlbmRlZEF0T3RoZXJBY2NzAAAAAAIAAAAaJXNfX3RvdGFsTGVuZGVkQXRPdGhlckFjY3MBAAAAE2tleUFzc2V0TG9ja2VkVG90YWwAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgIAAAAYJXMlc19fYXNzZXRMb2NrZWRUb3RhbF9fBQAAAAdhc3NldElkAQAAABNrZXlBY2NvdW50T3BlcmF0aW9uAAAAAwAAAAx1bmxvY2tIZWlnaHQAAAAHYWRkcmVzcwAAAAZzdGF0dXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB4lcyVzJWQlc19fZGVmb0Fzc2V0T3BlcmF0aW9uX18FAAAAB2FkZHJlc3MCAAAAAl9fCQABpAAAAAEFAAAADHVubG9ja0hlaWdodAIAAAACX18FAAAABnN0YXR1cwEAAAAKa2V5RmFjdG9yeQAAAAACAAAACyVzX19mYWN0b3J5AQAAABprZXlMZW5kZWRBbW91bnRCeUFzc2V0Q29kZQAAAAEAAAAJYXNzZXRDb2RlCQABLAAAAAICAAAAHSVzJXNfX2xlbmRlZEJhc2VBc3NldEFtb3VudF9fBQAAAAlhc3NldENvZGUBAAAACGtleVByaWNlAAAAAQAAAAlhc3NldENvZGUJAAEsAAAAAgIAAAANJXMlc19fcHJpY2VfXwUAAAAJYXNzZXRDb2RlAQAAABRrZXlDb250cm9sTGFzdEhlaWdodAAAAAEAAAAJYXNzZXRDb2RlCQABLAAAAAICAAAAEiVzJXNfX2xhc3RIZWlnaHRfXwUAAAAJYXNzZXRDb2RlAAAAABRJZHhPcGVyYXRpb25BbW91bnRJbgAAAAAAAAAAAQAAAAATSWR4T3BlcmF0aW9uQXNzZXRJbgAAAAAAAAAAAgAAAAARSWR4T3BlcmF0aW9uUHJpY2UAAAAAAAAAAAMAAAAAFUlkeE9wZXJhdGlvbkFtb3VudE91dAAAAAAAAAAABAAAAAAUSWR4T3BlcmF0aW9uQXNzZXRPdXQAAAAAAAAAAAUBAAAAFmFzc2V0RGF0YVN3YXBPcGVyYXRpb24AAAAHAAAACGFtb3VudEluAAAAB2Fzc2V0SW4AAAAFcHJpY2UAAAAJYW1vdW50T3V0AAAACGFzc2V0T3V0AAAADGJydXR0b0Ftb3VudAAAAAlmZWVBbW91bnQJAAS5AAAAAgkABEwAAAACAgAAAA4lZCVzJWQlcyVkJWQlZAkABEwAAAACCQABpAAAAAEFAAAACGFtb3VudEluCQAETAAAAAIFAAAAB2Fzc2V0SW4JAARMAAAAAgkAAaQAAAABBQAAAAlhbW91bnRPdXQJAARMAAAAAgUAAAAIYXNzZXRPdXQJAARMAAAAAgkAAaQAAAABBQAAAAVwcmljZQkABEwAAAACCQABpAAAAAEFAAAADGJydXR0b0Ftb3VudAkABEwAAAACCQABpAAAAAEFAAAACWZlZUFtb3VudAUAAAADbmlsAgAAAAJfXwEAAAAXYXNzZXREYXRhUmViYWxhbmNlVHJhY2UAAAAFAAAAD2RlYnRvckFzc2V0Q29kZQAAAAdkZWJ0UG10AAAAB2Jhc2VQbXQAAAAPbGVuZGVkQW10QmVmb3JlAAAADmxlbmRlZEFtdEFmdGVyCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVkJXMlZCVkJWQJAARMAAAAAgUAAAAPZGVidG9yQXNzZXRDb2RlCQAETAAAAAIJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAB2RlYnRQbXQAAAAHYXNzZXRJZAkABEwAAAACCQABpAAAAAEIBQAAAAdkZWJ0UG10AAAABmFtb3VudAkABEwAAAACCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdiYXNlUG10AAAAB2Fzc2V0SWQJAARMAAAAAgkAAaQAAAABCAUAAAAHYmFzZVBtdAAAAAZhbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA9sZW5kZWRBbXRCZWZvcmUJAARMAAAAAgkAAaQAAAABBQAAAA5sZW5kZWRBbXRBZnRlcgUAAAADbmlsAgAAAAJfXwEAAAAcYXNzZXRSZWFkU3dhcERhdGFBcnJheU9yRmFpbAAAAAEAAAAPYWNjT3BlcmF0aW9uS2V5BAAAABNhY2NPcGVyYXRpb25EYXRhU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAPYWNjT3BlcmF0aW9uS2V5CQABLAAAAAICAAAAKlRoZXJlIGlzIG5vIHJlcXVlc3QgZm9yIHBhc3NlZCBhcmd1bWVudHM6IAUAAAAPYWNjT3BlcmF0aW9uS2V5CQAEtQAAAAIFAAAAE2FjY09wZXJhdGlvbkRhdGFTdHICAAAAAl9fAAAAAAdudWxsSW50AP//////////AAAAAAdudWxsU3RyAgAAAAROVUxMAAAAAApmYWN0b3J5QWNjCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAACmtleUZhY3RvcnkAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJObyBjb25maWcgYXQgdGhpcz0JAAQlAAAAAQUAAAAEdGhpcwIAAAAJIGZvciBrZXk9CQEAAAAKa2V5RmFjdG9yeQAAAAABAAAAFWtleUZhY3RvcnlEZWJ0QXNzZXRJZAAAAAACAAAAHyVzJXNfX2NvbW1vbkNvbmZpZ19fZGVidEFzc2V0SWQBAAAAIGtleUZhY3RvcnlEZWJ0QXNzZXRFdGFsb25CYWxhbmNlAAAAAAIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRFdGFsb25CYWxhbmNlAQAAABJrZXlGYWN0b3J5QXNzZXRDZmcAAAABAAAAD2Fzc2V0QWRkcmVzc1N0cgkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAAD2Fzc2V0QWRkcmVzc1N0cgIAAAAIX19jb25maWcBAAAAGmtleUZhY3RvcnlBc3NldEN1cnJlbnRQb29sAAAAAQAAAA9hc3NldEFjY0FkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fCQAEJQAAAAEFAAAAD2Fzc2V0QWNjQWRkcmVzcwIAAAANX19jdXJyZW50UG9vbAEAAAAga2V5RmFjdG9yeURlZm9BZGRyZXNzQnlBc3NldENvZGUAAAABAAAACWFzc2V0Q29kZQkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAACWFzc2V0Q29kZQIAAAAUX19hZGRyZXNzQnlBc3NldENvZGUBAAAAGWtleUZhY3RvcnlBc3NldFBvb2xNYWtlcnMAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAMX19wb29sTWFrZXJzAQAAACFrZXlGYWN0b3J5RGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIAAAAAAgAAACslcyVzX19jb21tb25Db25maWdfX2RlZm9TdGFraW5nUGFjZW1ha2VyUHViAQAAACNrZXlGYWN0b3J5UG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdAAAAAMAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MAAAABaAkABLkAAAACCQAETAAAAAICAAAAECVzJXMlcyVkJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgkAAaQAAAABBQAAAAFoCQAETAAAAAICAAAAEGxpcXVpZGl0eVJlcXVlc3QFAAAAA25pbAIAAAACX18BAAAAH2tleUZhY3RvcnlQb29sTWFrZXJVbmxvY2tIZWlnaHQAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgIAAAAMdW5sb2NrSGVpZ2h0BQAAAANuaWwCAAAAAl9fAQAAABZmYWN0b3J5UmVhZERlYnRBc3NldElkAAAAAAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACmZhY3RvcnlBY2MJAQAAABVrZXlGYWN0b3J5RGVidEFzc2V0SWQAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABVObyBjb25maWcgYXQgZmFjdG9yeT0JAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9CQEAAAAVa2V5RmFjdG9yeURlYnRBc3NldElkAAAAAAEAAAAcZmFjdG9yeVJlYWRBc3NldENmZ0J5QWRkcmVzcwAAAAEAAAAPYXNzZXRBZGRyZXNzU3RyCQAEtQAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAASa2V5RmFjdG9yeUFzc2V0Q2ZnAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABVObyBjb25maWcgYXQgZmFjdG9yeT0JAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9CQEAAAASa2V5RmFjdG9yeUFzc2V0Q2ZnAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAgAAAAJfXwEAAAAZZmFjdG9yeVJlYWRBc3NldENmZ0J5Q29kZQAAAAEAAAAJYXNzZXRDb2RlBAAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAAga2V5RmFjdG9yeURlZm9BZGRyZXNzQnlBc3NldENvZGUAAAABBQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFU5vIGNvbmZpZyBhdCBmYWN0b3J5PQkABCUAAAABBQAAAApmYWN0b3J5QWNjAgAAAAkgZm9yIGtleT0JAQAAACBrZXlGYWN0b3J5RGVmb0FkZHJlc3NCeUFzc2V0Q29kZQAAAAEFAAAACWFzc2V0Q29kZQkABRQAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABxmYWN0b3J5UmVhZEFzc2V0Q2ZnQnlBZGRyZXNzAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAQAAACdmYWN0b3J5UmVhZE5leHRQb29sTWFrZXJUb0Rpc3RyaWJ1dGVGZWUAAAABAAAAD2Fzc2V0QWRkcmVzc1N0cgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM01zYkZNc3R3bTNGSFBKWG1NZlRneWF3N3pRcnBaZmt3bngBAAAAImZhY3RvcnlSZWFkRGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIAAAAACQACWQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAAha2V5RmFjdG9yeURlZm9TdGFraW5nUGFjZW1ha2VyUHViAAAAAAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAVTm8gY29uZmlnIGF0IGZhY3Rvcnk9CQAEJQAAAAEFAAAACmZhY3RvcnlBY2MCAAAACSBmb3Iga2V5PQkBAAAAIWtleUZhY3RvcnlEZWZvU3Rha2luZ1BhY2VtYWtlclB1YgAAAAAAAAAAEElkeERlZm9Bc3NldENvZGUAAAAAAAAAAAEAAAAADklkeERlZm9Bc3NldElkAAAAAAAAAAACAAAAABJJZHhEZWZvQXNzZXRTdGF0dXMAAAAAAAAAAAMAAAAAEElkeFByaWNlRGVjaW1hbHMAAAAAAAAAAAQAAAAADklkeEJhc2VBc3NldElkAAAAAAAAAAAFAAAAABhJZHhPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAAAAAAAAAYAAAAADklkeE1pbkluaXRQb29sAAAAAAAAAAAHAAAAABVJZHhQcmljZU9yYWNsZUFkZHJlc3MAAAAAAAAAAAgAAAAAEElkeE1pbkJ1eVBheW1lbnQAAAAAAAAAAAkAAAAAEUlkeE1pblNlbGxQYXltZW50AAAAAAAAAAAKAAAAABJJZHhCdXlMb2NrSW50ZXJ2YWwAAAAAAAAAAAsAAAAAE0lkeFNlbGxMb2NrSW50ZXJ2YWwAAAAAAAAAAAwAAAAAEElkeEJ1eUZlZVBlcmNlbnQAAAAAAAAAAA0AAAAAEUlkeFNlbGxGZWVQZXJjZW50AAAAAAAAAAAOAAAAABhJZHhQb29sUmVkZW1wdGlvblRpbWVvdXQAAAAAAAAAAA8AAAAAIUlkeFdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAAAAAAAEAAAAAAYSWR4QXNzZXRBY2NvdW50UHVibGljU3RyAAAAAAAAAAARAAAAACBJZHhBc3NldFN0YWtpbmdSZWZlcnJhbFB1YmxpY1N0cgAAAAAAAAAAEgAAAAAbSWR4Q3Jvc3NFeGNoYW5nZUNvZWZmaWNpZW50AAAAAAAAAAATAAAAACNJZHhTdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudAAAAAAAAAAAFAAAAAAXSWR4UG9vbFN0YWJpbGl0eUZlZVBhcnQAAAAAAAAAABUAAAAADHRoaXNDZmdBcnJheQkBAAAAHGZhY3RvcnlSZWFkQXNzZXRDZmdCeUFkZHJlc3MAAAABCQAEJQAAAAEFAAAABHRoaXMAAAAADWRlZm9Bc3NldENvZGUJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABBJZHhEZWZvQXNzZXRDb2RlAAAAAA5kZWZvQXNzZXRJZFN0cgkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAADklkeERlZm9Bc3NldElkAAAAAAtkZWZvQXNzZXRJZAkAAlkAAAABBQAAAA5kZWZvQXNzZXRJZFN0cgAAAAAOcHJpY2VPcmFjbGVBY2MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABVJZHhQcmljZU9yYWNsZUFkZHJlc3MAAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAYSWR4T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAA5iYXNlQXNzZXRJZFN0cgkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAADklkeEJhc2VBc3NldElkAAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAA5iYXNlQXNzZXRJZFN0cgAAAAANcHJpY2VEZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAQSWR4UHJpY2VEZWNpbWFscwAAAAARbWluQmFzaWNCdXlBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAEElkeE1pbkJ1eVBheW1lbnQAAAAAEm1pblN5bnRoU2VsbEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAARSWR4TWluU2VsbFBheW1lbnQAAAAAD2J1eUxvY2tJbnRlcnZhbAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAASSWR4QnV5TG9ja0ludGVydmFsAAAAABBzZWxsTG9ja0ludGVydmFsCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABNJZHhTZWxsTG9ja0ludGVydmFsAAAAAA1idXlGZWVQZXJjZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABBJZHhCdXlGZWVQZXJjZW50AAAAAA5zZWxsRmVlUGVyY2VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAARSWR4U2VsbEZlZVBlcmNlbnQAAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAhSWR4V2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AAAAABVhc3NldEFjY291bnRQdWJsaWNTdHIJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABhJZHhBc3NldEFjY291bnRQdWJsaWNTdHIAAAAAHWFzc2V0U3Rha2luZ1JlZmVycmFsUHVibGljU3RyCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAgSWR4QXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWNTdHIAAAAAGGNyb3NzRXhjaGFuZ2VDb2VmZmljaWVudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAbSWR4Q3Jvc3NFeGNoYW5nZUNvZWZmaWNpZW50AAAAACBzdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAjSWR4U3Rha2luZ01pbkFtdEZyb21TZWxsQ29lZmZpY2llbnQAAAAAFHBvb2xTdGFiaWxpdHlGZWVQYXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABdJZHhQb29sU3RhYmlsaXR5RmVlUGFydAEAAAAMa2V5SXNCbG9ja2VkAAAAAAIAAAANJXNfX2lzQmxvY2tlZAEAAAARa2V5SXNNYXJrZXRPcGVuZWQAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAABYlcyVzX19pc01hcmtldE9wZW5lZF9fBQAAAAlhc3NldENvZGUAAAAACWlzQmxvY2tlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA5wcmljZU9yYWNsZUFjYwkBAAAADGtleUlzQmxvY2tlZAAAAAAHAAAAAA5pc01hcmtldE9wZW5lZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA5wcmljZU9yYWNsZUFjYwkBAAAAEWtleUlzTWFya2V0T3BlbmVkAAAAAQUAAAANZGVmb0Fzc2V0Q29kZQcBAAAAE2NvbnRyb2xBY2NSZWFkUHJpY2UAAAABAAAACWFzc2V0Q29kZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADnByaWNlT3JhY2xlQWNjCQEAAAAIa2V5UHJpY2UAAAABBQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGE5vIHByaWNlIGF0IHByaWNlT3JhY2xlPQkABCUAAAABBQAAAA5wcmljZU9yYWNsZUFjYwIAAAAJIGZvciBrZXk9CQEAAAAIa2V5UHJpY2UAAAABBQAAAAlhc3NldENvZGUBAAAAGGNvbnRyb2xBY2NSZWFkTGFzdEhlaWdodAAAAAEAAAAJYXNzZXRDb2RlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOcHJpY2VPcmFjbGVBY2MJAQAAABRrZXlDb250cm9sTGFzdEhlaWdodAAAAAEFAAAACWFzc2V0Q29kZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdTm8gbGFzdEhlaWdodCBhdCBwcmljZU9yYWNsZT0JAAQlAAAAAQUAAAAOcHJpY2VPcmFjbGVBY2MCAAAACSBmb3Iga2V5PQkBAAAAFGtleUNvbnRyb2xMYXN0SGVpZ2h0AAAAAQUAAAAJYXNzZXRDb2RlAQAAABtjb250cm9sQWNjUmVhZEN1cnJJZHhPckZhaWwAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOcHJpY2VPcmFjbGVBY2MCAAAAB2N1cnJJZHgJAAEsAAAAAgIAAAAZTm8gY3VycklkeCBhdCBjb250cm9sQWNjPQkABCUAAAABBQAAAA5wcmljZU9yYWNsZUFjYwEAAAAXY29udHJvbEFjY1JlYWRJZHhIZWlnaHQAAAABAAAAA2lkeAQAAAAMaWR4SGVpZ2h0S2V5CQABLAAAAAICAAAACmlkeEhlaWdodF8JAAGkAAAAAQUAAAADaWR4CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADnByaWNlT3JhY2xlQWNjBQAAAAxpZHhIZWlnaHRLZXkAAAAAAAAAAAABAAAAG2NvbnRyb2xBY2NSZWFkUHJpY2VCeUhlaWdodAAAAAEAAAALcHJpY2VIZWlnaHQEAAAAEHByaWNlQnlIZWlnaHRLZXkJAAEsAAAAAgIAAAAGcHJpY2VfCQABpAAAAAEFAAAAC3ByaWNlSGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOcHJpY2VPcmFjbGVBY2MFAAAAEHByaWNlQnlIZWlnaHRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAA05vIAUAAAAQcHJpY2VCeUhlaWdodEtleQIAAAAPIGF0IGNvbnRyb2xBY2M9CQAEJQAAAAEFAAAADnByaWNlT3JhY2xlQWNjAAAAAA9wcmljZUxhc3RIZWlnaHQJAQAAABhjb250cm9sQWNjUmVhZExhc3RIZWlnaHQAAAABBQAAAA1kZWZvQXNzZXRDb2RlAAAAABVpc0Jsb2NrZWRCeUxhc3RIZWlnaHQJAABmAAAAAgkAAGUAAAACBQAAAA9wcmljZUxhc3RIZWlnaHQFAAAAD3ByaWNlTGFzdEhlaWdodAAAAAAAAAAABQAAAAAVa2V5RGVmb1N0YWtpbmdBZGRyZXNzAgAAACYlcyVzX19jb21tb25Db25maWdfX2RlZm9TdGFraW5nQWRkcmVzcwAAAAAZa2V5TmV1dHJpbm9TdGFraW5nQWRkcmVzcwIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19uZXV0cmlub1N0YWtpbmdBZGRyZXNzAQAAABprZXlEZWZvU3Rha2luZ0Fzc2V0QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAkAASwAAAACAgAAABYlcyVzX19zdGFraW5nQmFsYW5jZV9fBQAAAAdhc3NldElkAQAAABlrZXlOZXV0cmlub1N0YWtpbmdCYWxhbmNlAAAAAAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMcnBkX2JhbGFuY2VfBQAAAA5iYXNlQXNzZXRJZFN0cgIAAAABXwkABCUAAAABBQAAAAR0aGlzAAAAAA5kZWZvU3Rha2luZ0FjYwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjBQAAABVrZXlEZWZvU3Rha2luZ0FkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAF05vIGNvbmZpZyBhdCBmYWN0b3J5QWNjCQAEJQAAAAEFAAAACmZhY3RvcnlBY2MCAAAACSBmb3Iga2V5PQUAAAAVa2V5RGVmb1N0YWtpbmdBZGRyZXNzCQABLAAAAAICAAAAIWFkZHJlc3MgZXh0cmFjdGlvbiBlcnJvciBmb3Iga2V5PQUAAAAVa2V5RGVmb1N0YWtpbmdBZGRyZXNzAAAAABJuZXV0cmlub1N0YWtpbmdBY2MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAKZmFjdG9yeUFjYwUAAAAZa2V5TmV1dHJpbm9TdGFraW5nQWRkcmVzcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXTm8gY29uZmlnIGF0IGZhY3RvcnlBY2MJAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9BQAAABlrZXlOZXV0cmlub1N0YWtpbmdBZGRyZXNzCQABLAAAAAICAAAAIWFkZHJlc3MgZXh0cmFjdGlvbiBlcnJvciBmb3Iga2V5PQUAAAAZa2V5TmV1dHJpbm9TdGFraW5nQWRkcmVzcwEAAAAZZ2V0VGhpc0RlZm9TdGFraW5nQmFsYW5jZQAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAOZGVmb1N0YWtpbmdBY2MJAQAAABprZXlEZWZvU3Rha2luZ0Fzc2V0QmFsYW5jZQAAAAEFAAAADmRlZm9Bc3NldElkU3RyAAAAAAAAAAAAAQAAAB1nZXRUaGlzTmV1dHJpbm9TdGFraW5nQmFsYW5jZQAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAASbmV1dHJpbm9TdGFraW5nQWNjCQEAAAAZa2V5TmV1dHJpbm9TdGFraW5nQmFsYW5jZQAAAAAAAAAAAAAAAAAAAAAAC3Vjb2xsYXRlcmFsCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAA5rZXlVY29sbGF0ZXJhbAAAAAAAAAAAAAAAAAAAAAAADmFjY3VtdWxhdGVkRmVlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABFrZXlBY2N1bXVsYXRlZEZlZQAAAAAAAAAAAAAAAAAAAAAADmN1cnJQb29sQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAApmYWN0b3J5QWNjCQEAAAAaa2V5RmFjdG9yeUFzc2V0Q3VycmVudFBvb2wAAAABBQAAAAR0aGlzAAAAAAtkZWJ0QXNzZXRJZAkAAlkAAAABCQEAAAAWZmFjdG9yeVJlYWREZWJ0QXNzZXRJZAAAAAAAAAAAFmRlYnRBc3NldEV0YWxvbkJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAACmZhY3RvcnlBY2MJAQAAACBrZXlGYWN0b3J5RGVidEFzc2V0RXRhbG9uQmFsYW5jZQAAAAAAAAAAEmxlbmRlZE9yRGVidEFtb3VudAkAAGUAAAACBQAAABZkZWJ0QXNzZXRFdGFsb25CYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMFAAAAC2RlYnRBc3NldElkAAAAABdjdXJyZW50QmFzZUFzc2V0QmFsYW5jZQkAAGQAAAACCQAAZAAAAAIJAAPwAAAAAgUAAAAEdGhpcwUAAAALYmFzZUFzc2V0SWQJAQAAAB1nZXRUaGlzTmV1dHJpbm9TdGFraW5nQmFsYW5jZQAAAAAFAAAAEmxlbmRlZE9yRGVidEFtb3VudAAAAAAMY29udHJvbFByaWNlCQEAAAATY29udHJvbEFjY1JlYWRQcmljZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABBJZHhEZWZvQXNzZXRDb2RlAAAAAAhlbWlzc2lvbgkAAGUAAAACCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAtkZWZvQXNzZXRJZAAAAAhxdWFudGl0eQkAA/AAAAACBQAAAAR0aGlzBQAAAAtkZWZvQXNzZXRJZAEAAAALZ2V0QnV5UHJpY2UAAAABAAAAC2NoYW5nZUNvZWZmAwUAAAAOaXNNYXJrZXRPcGVuZWQFAAAADGNvbnRyb2xQcmljZQkAAGsAAAADCQAAZQAAAAIFAAAADXByaWNlRGVjaW1hbHMFAAAAC2NoYW5nZUNvZWZmBQAAAAxjb250cm9sUHJpY2UFAAAADXByaWNlRGVjaW1hbHMBAAAAI2dldEJ1eUZlZUNvbnNpZGVyaW5nU3Rha2luZ1JlZmVycmFsAAAAAQAAAA5jYWxsZXJQdWI1OFN0cgMJAAAAAAAAAgUAAAAdYXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWNTdHIFAAAADmNhbGxlclB1YjU4U3RyAAAAAAAAAAAABQAAAA1idXlGZWVQZXJjZW50AQAAACVnZXRCdXlQcmljZUNvbnNpZGVyaW5nU3Rha2luZ1JlZmVycmFsAAAAAgAAAAtjaGFuZ2VDb2VmZgAAAA5jYWxsZXJQdWI1OFN0cgMJAAAAAAAAAgUAAAAdYXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWNTdHIFAAAADmNhbGxlclB1YjU4U3RyBQAAAAxjb250cm9sUHJpY2UJAQAAAAtnZXRCdXlQcmljZQAAAAEFAAAAC2NoYW5nZUNvZWZmAQAAAAxnZXRTZWxsUHJpY2UAAAABAAAAC2NoYW5nZUNvZWZmAwUAAAAOaXNNYXJrZXRPcGVuZWQFAAAADGNvbnRyb2xQcmljZQkAAGsAAAADCQAAZAAAAAIFAAAADXByaWNlRGVjaW1hbHMFAAAAC2NoYW5nZUNvZWZmBQAAAAxjb250cm9sUHJpY2UFAAAADXByaWNlRGVjaW1hbHMBAAAAEGdldFNlbGxQcmljZUZyb20AAAACAAAACWZyb21QcmljZQAAAAtjaGFuZ2VDb2VmZgMFAAAADmlzTWFya2V0T3BlbmVkBQAAAAlmcm9tUHJpY2UJAABrAAAAAwkAAGQAAAACBQAAAA1wcmljZURlY2ltYWxzBQAAAAtjaGFuZ2VDb2VmZgUAAAAJZnJvbVByaWNlBQAAAA1wcmljZURlY2ltYWxzAQAAABBpbnRlcm5hbEJ1eUFzc2V0AAAABgAAAApzZWxsZXJBZGRyAAAAB3NlbGxBbXQAAAALc2VsbEFzc2V0SWQAAAAKbWluU2VsbEFtdAAAAA1idXkyc2VsbFByaWNlAAAAEXBvb2xNYWtlcnNGZWVQYXJ0BAAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwkAAGsAAAADBQAAAAdzZWxsQW10BQAAAA1idXkyc2VsbFByaWNlBQAAAA1wcmljZURlY2ltYWxzBAAAABZzdGFiaWxpdHlGZWVEZWZvQW1vdW50CQAAawAAAAMFAAAAFHBvb2xTdGFiaWxpdHlGZWVQYXJ0BQAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwUAAAANcHJpY2VEZWNpbWFscwQAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQJAABrAAAAAwUAAAARcG9vbE1ha2Vyc0ZlZVBhcnQFAAAAFGRlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBAAAAA9kZWZvQXNzZXRBbW91bnQJAABlAAAAAgkAAGUAAAACBQAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwUAAAAWc3RhYmlsaXR5RmVlRGVmb0Ftb3VudAUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQEAAAAGHJlcXVpcmVkQmFzaWNBc3NldEFtb3VudAkAAGsAAAADBQAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwUAAAANcHJpY2VEZWNpbWFscwUAAAANYnV5MnNlbGxQcmljZQQAAAAGY2hhbmdlCQAAZQAAAAIFAAAAB3NlbGxBbXQFAAAAGHJlcXVpcmVkQmFzaWNBc3NldEFtb3VudAMDCQAAZgAAAAIFAAAACm1pblNlbGxBbXQFAAAAB3NlbGxBbXQJAQAAAAIhPQAAAAIJAAQlAAAAAQUAAAAKc2VsbGVyQWRkcgkABCUAAAABBQAAAA5kZWZvU3Rha2luZ0FjYwcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGGltcG9zc2libGUgdG8gaXNzdWUgbmV3IAUAAAANZGVmb0Fzc2V0Q29kZQIAAAAKOiBwYXltZW50PQkAAaQAAAABBQAAAAdzZWxsQW10AgAAABhpcyBsZXNzIHRoZW4gbWluIGFtb3VudD0JAAGkAAAAAQUAAAAKbWluU2VsbEFtdAkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5VWNvbGxhdGVyYWwAAAAACQAAZAAAAAIFAAAAC3Vjb2xsYXRlcmFsBQAAABhyZXF1aXJlZEJhc2ljQXNzZXRBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUFjY291bnRPcGVyYXRpb24AAAADBQAAAAZoZWlnaHQJAAQlAAAAAQUAAAAKc2VsbGVyQWRkcgIAAAAIRklOSVNIRUQJAQAAABZhc3NldERhdGFTd2FwT3BlcmF0aW9uAAAABwUAAAAHc2VsbEFtdAkAAlgAAAABBQAAAAtzZWxsQXNzZXRJZAUAAAAMY29udHJvbFByaWNlBQAAAA9kZWZvQXNzZXRBbW91bnQJAAJYAAAAAQUAAAALZGVmb0Fzc2V0SWQFAAAAFGRlZm9Bc3NldEFtb3VudEdyb3NzBQAAABdwb29sTWFrZXJzRmVlRGVmb0Ftb3VudAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAAC2RlZm9Bc3NldElkCQAAZAAAAAIFAAAAD2RlZm9Bc3NldEFtb3VudAUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACnNlbGxlckFkZHIFAAAAD2RlZm9Bc3NldEFtb3VudAUAAAALZGVmb0Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAKc2VsbGVyQWRkcgUAAAAGY2hhbmdlBQAAAAtzZWxsQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAnZmFjdG9yeVJlYWROZXh0UG9vbE1ha2VyVG9EaXN0cmlidXRlRmVlAAAAAQkABCUAAAABBQAAAAR0aGlzBQAAABdwb29sTWFrZXJzRmVlRGVmb0Ftb3VudAUAAAALZGVmb0Fzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFrZXlBY2N1bXVsYXRlZEZlZQAAAAAJAABkAAAAAgUAAAAOYWNjdW11bGF0ZWRGZWUFAAAAF3Bvb2xNYWtlcnNGZWVEZWZvQW1vdW50BQAAAANuaWwFAAAABmNoYW5nZQAAAAUAAAABaQEAAAAIYnV5QXNzZXQAAAAACQAAAgAAAAECAAAAL05HTiBidXlBc3NldCBvcGVyYXRpb24gaXMgdGVtcG9yYXJ5IHVuYXZhaWxhYmxlAAAAAWkBAAAACXNlbGxBc3NldAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAIcG10QXNzZXQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACXNlbGxQcmljZQkBAAAADGdldFNlbGxQcmljZQAAAAEFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQEAAAACIT0AAAACBQAAAAhwbXRBc3NldAUAAAALZGVmb0Fzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAjSW52YWxpZCBwYXltZW50IGFzc2V0IGlkOiBleHBlY3RlZD0JAAJYAAAAAQUAAAALZGVmb0Fzc2V0SWQCAAAACCBhY3R1YWw9CQACWAAAAAEFAAAACHBtdEFzc2V0AwkAAGYAAAACBQAAABJtaW5TeW50aFNlbGxBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAOlBheW1lbnQgYW1vdW50IGxlc3MgdGhlbiBtaW5pbmltYWwgYWxsb3dlZDogcGF5bWVudEFtb3VudD0JAAGkAAAAAQgFAAAAA3BtdAAAAAZhbW91bnQCAAAACyBtaW5BbW91bnQ9CQABpAAAAAEFAAAAEm1pblN5bnRoU2VsbEFtb3VudAQAAAAdYmFzZUFzc2V0QW1vdW50Tm9CYWxhbmNlTGltaXQJAABrAAAAAwgFAAAAA3BtdAAAAAZhbW91bnQFAAAADXByaWNlRGVjaW1hbHMFAAAACXNlbGxQcmljZQQAAAAYYmFzZUFzc2V0QW1vdW50QXZhaWxhYmxlAwkAAGYAAAACBQAAAB1iYXNlQXNzZXRBbW91bnROb0JhbGFuY2VMaW1pdAUAAAAXY3VycmVudEJhc2VBc3NldEJhbGFuY2UFAAAAF2N1cnJlbnRCYXNlQXNzZXRCYWxhbmNlBQAAAB1iYXNlQXNzZXRBbW91bnROb0JhbGFuY2VMaW1pdAQAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzCQAAawAAAAMFAAAAGGJhc2VBc3NldEFtb3VudEF2YWlsYWJsZQUAAAAJc2VsbFByaWNlBQAAAA1wcmljZURlY2ltYWxzBAAAAAZjaGFuZ2UJAABlAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAAGHNvbGREZWZvQXNzZXRBbW91bnRHcm9zcwQAAAAWc3RhYmlsaXR5RmVlRGVmb0Ftb3VudAkAAGsAAAADBQAAABRwb29sU3RhYmlsaXR5RmVlUGFydAUAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBAAAABdwb29sTWFrZXJzRmVlRGVmb0Ftb3VudAkAAGsAAAADBQAAAA5zZWxsRmVlUGVyY2VudAUAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBAAAABNzb2xkRGVmb0Fzc2V0QW1vdW50CQAAZQAAAAIJAABlAAAAAgUAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzBQAAABZzdGFiaWxpdHlGZWVEZWZvQW1vdW50BQAAABdwb29sTWFrZXJzRmVlRGVmb0Ftb3VudAQAAAAVYmFzZUFzc2V0QW1vdW50VG9TZW5kCQAAawAAAAMFAAAAE3NvbGREZWZvQXNzZXRBbW91bnQFAAAADXByaWNlRGVjaW1hbHMFAAAACXNlbGxQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmtleVVjb2xsYXRlcmFsAAAAAAkAAGUAAAACBQAAAAt1Y29sbGF0ZXJhbAUAAAAVYmFzZUFzc2V0QW1vdW50VG9TZW5kCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlBY2NvdW50T3BlcmF0aW9uAAAAAwUAAAAGaGVpZ2h0BQAAAA1jYWxsZXJBZGRyZXNzAgAAAAhGSU5JU0hFRAkBAAAAFmFzc2V0RGF0YVN3YXBPcGVyYXRpb24AAAAHCAUAAAADcG10AAAABmFtb3VudAkAAlgAAAABBQAAAAhwbXRBc3NldAUAAAAJc2VsbFByaWNlBQAAABViYXNlQXNzZXRBbW91bnRUb1NlbmQFAAAADmJhc2VBc3NldElkU3RyBQAAABhzb2xkRGVmb0Fzc2V0QW1vdW50R3Jvc3MFAAAAF3Bvb2xNYWtlcnNGZWVEZWZvQW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAALZGVmb0Fzc2V0SWQJAABkAAAAAgUAAAATc29sZERlZm9Bc3NldEFtb3VudAUAAAAWc3RhYmlsaXR5RmVlRGVmb0Ftb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFWJhc2VBc3NldEFtb3VudFRvU2VuZAUAAAALYmFzZUFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAZjaGFuZ2UFAAAAC2RlZm9Bc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAACdmYWN0b3J5UmVhZE5leHRQb29sTWFrZXJUb0Rpc3RyaWJ1dGVGZWUAAAABCQAEJQAAAAEFAAAABHRoaXMFAAAAF3Bvb2xNYWtlcnNGZWVEZWZvQW1vdW50BQAAAAtkZWZvQXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWtleUFjY3VtdWxhdGVkRmVlAAAAAAkAAGQAAAACBQAAAA5hY2N1bXVsYXRlZEZlZQUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQFAAAAA25pbAAAAAFpAQAAAA1jcm9zc0V4Y2hhbmdlAAAAAgAAABNidXlBc3NldENvZGVDb25maXJtAAAAFHNlbGxBc3NldENvZGVDb25maXJtCQAAAgAAAAECAAAANE5HTiBjcm9zc0V4Y2hhbmdlIG9wZXJhdGlvbiBpcyB0ZW1wb3JhcnkgdW5hdmFpbGFibGUAAAABaQEAAAAOcmViYWxhbmNlRGVidHMAAAAABAAAAAhkZWJ0UG10MAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAANZGVidFBtdEFzc2V0MAkBAAAABXZhbHVlAAAAAQgFAAAACGRlYnRQbXQwAAAAB2Fzc2V0SWQEAAAACGJhc2VQbXQxCQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABBAAAAA1iYXNlUG10QXNzZXQxCQEAAAAFdmFsdWUAAAABCAUAAAAIYmFzZVBtdDEAAAAHYXNzZXRJZAQAAAANZGVidG9yQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADmRlYnRvckFzc2V0Q2ZnCQEAAAAcZmFjdG9yeVJlYWRBc3NldENmZ0J5QWRkcmVzcwAAAAEFAAAADWRlYnRvckFkZHJlc3MEAAAAD2RlYnRvckFzc2V0Q29kZQkAAZEAAAACBQAAAA5kZWJ0b3JBc3NldENmZwUAAAAQSWR4RGVmb0Fzc2V0Q29kZQQAAAAabGVuZGVkQW1vdW50QnlBc3NldENvZGVLZXkJAQAAABprZXlMZW5kZWRBbW91bnRCeUFzc2V0Q29kZQAAAAEFAAAAD2RlYnRvckFzc2V0Q29kZQQAAAAJbGVuZGVkQW10CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAabGVuZGVkQW1vdW50QnlBc3NldENvZGVLZXkJAAEsAAAAAgIAAAANTm8gZGVidHMgZm9yIAUAAAAPZGVidG9yQXNzZXRDb2RlAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWmNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWxsIHJlYWN0aXZhdGlvbiBieSBlbWVyZ2VuY3kgb3JhY2xlcwMJAQAAAAIhPQAAAAIFAAAAC2RlYnRBc3NldElkBQAAAA1kZWJ0UG10QXNzZXQwCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAANGludmFsaWQgZGVidCBhc3NldCBpZCBpbiB0aGUgZmlyc3QgcGF5bWV0OiBleHBlY3RlZD0JAAJYAAAAAQUAAAALZGVidEFzc2V0SWQCAAAACCBhY3R1YWw9CQACWAAAAAEFAAAADWRlYnRQbXRBc3NldDADCQEAAAACIT0AAAACBQAAAAtiYXNlQXNzZXRJZAUAAAANYmFzZVBtdEFzc2V0MQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADZpbnZhbGlkIGJhc2UgYXNzZXQgaWQgaW4gdGhlIHNlY29uZCBwYXltZW50OiBleHBlY3RlZD0JAAJYAAAAAQUAAAALYmFzZUFzc2V0SWQCAAAACCBhY3R1YWw9CQACWAAAAAEFAAAADWJhc2VQbXRBc3NldDEDCQEAAAACIT0AAAACCAUAAAAIZGVidFBtdDAAAAAGYW1vdW50CAUAAAAIYmFzZVBtdDEAAAAGYW1vdW50CQAAAgAAAAECAAAAP2ZpcnN0IHBheW1lbnQgYW1vdW50IGRvZXNuJ3QgbWF0Y2ggdG8gdGhlIHNlY29uZCBwYXltZW50IGFtb3VudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAJbGVuZGVkQW10CQAAAgAAAAEJAAEsAAAAAgIAAAAnbGVuZGVkQW10IGlzIGxlc3MgdGhlbiB6ZXJvOiBsZW5kZWRBbXQ9CQABpAAAAAEFAAAACWxlbmRlZEFtdAMJAABnAAAAAgkAAGgAAAACAAAAAAAAAAABBQAAAA1wcmljZURlY2ltYWxzCAUAAAAIZGVidFBtdDAAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAAA3YXR0YWNoZWQgcGF5bWVudCBtdXN0IGJlIGdyZWF0ZXIgdGhlbiAxMDA6IHBtdDAuYW1vdW50PQkAAaQAAAABCAUAAAAIZGVidFBtdDAAAAAGYW1vdW50AwkAAGYAAAACCAUAAAAIZGVidFBtdDAAAAAGYW1vdW50BQAAAAlsZW5kZWRBbXQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA0YXR0YWNoZWQgcGF5bWVudCBpcyBncmF0ZXIgdGhhbiByZXF1aXJlZDogcG10QW1vdW50PQkAAaQAAAABCAUAAAAIZGVidFBtdDAAAAAGYW1vdW50AgAAAAsgbGVuZGVkQW10PQkAAaQAAAABBQAAAAlsZW5kZWRBbXQEAAAAFnRvdGFsTGVuZGVkQXRPdGhlckFjY3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGWtleVRvdGFsTGVuZGVkQXRPdGhlckFjY3MAAAAAAAAAAAAAAAAABAAAAA5sZW5kZWRBbXRBZnRlcgkAAGUAAAACBQAAAAlsZW5kZWRBbXQIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGmxlbmRlZEFtb3VudEJ5QXNzZXRDb2RlS2V5BQAAAA5sZW5kZWRBbXRBZnRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWtleVRvdGFsTGVuZGVkQXRPdGhlckFjY3MAAAAACQAAZQAAAAIFAAAAFnRvdGFsTGVuZGVkQXRPdGhlckFjY3MIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAABYlcyVzX19yZWJhbGFuY2VUcmFjZV9fCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAQAAABdhc3NldERhdGFSZWJhbGFuY2VUcmFjZQAAAAUFAAAAD2RlYnRvckFzc2V0Q29kZQUAAAAIZGVidFBtdDAFAAAACGJhc2VQbXQxBQAAAAlsZW5kZWRBbXQFAAAADmxlbmRlZEFtdEFmdGVyBQAAAANuaWwAAAABaQEAAAAUZnVsZmlsbFJlZGVlbVJlcXVlc3QAAAABAAAAEHBvb2xNYWtlckFkZHJlc3MEAAAADnRoaXNBZGRyZXNzU3RyCQAEJQAAAAEFAAAABHRoaXMEAAAAGHBvb2xNYWtlclVubG9ja0hlaWdodEtleQkBAAAAH2tleUZhY3RvcnlQb29sTWFrZXJVbmxvY2tIZWlnaHQAAAACBQAAAA50aGlzQWRkcmVzc1N0cgUAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAVcG9vbE1ha2VyVW5sb2NrSGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAACmZhY3RvcnlBY2MFAAAAGHBvb2xNYWtlclVubG9ja0hlaWdodEtleQAAAAAAAAAAAAMJAABnAAAAAgAAAAAAAAAAAAUAAAAVcG9vbE1ha2VyVW5sb2NrSGVpZ2h0CQAAAgAAAAECAAAAH0FsbCBsaXF1aWRpdHkgcmVxdWVzdCBmdWxmaWxsZWQEAAAAHHBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkJAQAAACNrZXlGYWN0b3J5UG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdAAAAAMFAAAADnRoaXNBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBQAAABVwb29sTWFrZXJVbmxvY2tIZWlnaHQEAAAAH3Bvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RBbW91bnQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAApmYWN0b3J5QWNjBQAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5AgAAADFFbXB0eSBwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5IGF0IGZhY3RvcnkgYWNjAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAAccG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQkAAAIAAAABAgAAACxMaXF1aWRpdHkgcmVxdWVzdCBoYXMgYmVlbiBhbHJlYWR5IGZ1bGZpbGxlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAccG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQUAAAAfcG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAApmYWN0b3J5QWNjBQAAAB9wb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0QW1vdW50BQAAAAtiYXNlQXNzZXRJZAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAANpbnYFAAAAByRtYXRjaDADCQAAZgAAAAIIBQAAAANpbnYAAAADZmVlCQAAaAAAAAIAAAAAAAAAA4QAAAAAAAAAA+gJAAACAAAAAQkAASwAAAACAgAAAChmZWUgYW1vdW50IGlzIGdyZWF0ZXIgdGhhbiBtYXggYWxsb3dlZDogCQABpAAAAAEIBQAAAANpbnYAAAADZmVlAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAKZmVlQXNzZXRJZAkAAAIAAAABAgAAACNvbmx5IFdhdmVzIGlzIGFsbG93ZWQgYXMgZmVlQXNzZXRJZAMJAAAAAAAAAggFAAAAA2ludgAAAAhmdW5jdGlvbgIAAAAOcmViYWxhbmNlRGVidHMEAAAADmludkRhcHBBZGRyZXNzCQAEJQAAAAEJAAQkAAAAAQgFAAAAA2ludgAAAARkQXBwAwkBAAAAAiE9AAAAAgkAAZEAAAACCQEAAAAcZmFjdG9yeVJlYWRBc3NldENmZ0J5QWRkcmVzcwAAAAEFAAAADmludkRhcHBBZGRyZXNzBQAAABJJZHhEZWZvQXNzZXRTdGF0dXMCAAAABklTU1VFRAkAAAIAAAABAgAAABlvbmx5IGRlZm8gZGFwcCBpcyBhbGxvd2VkAwkAAAAAAAACBQAAAA5pbnZEYXBwQWRkcmVzcwkABCUAAAABBQAAAAR0aGlzCQAAAgAAAAECAAAAJWltcG9zc2libGUgdG8gY2FsbCBzZWxmIHJlYmVhbG5jZURlYnQGAwMDCQAAAAAAAAIIBQAAAANpbnYAAAAIZnVuY3Rpb24CAAAADGxvY2tOZXV0cmlubwYJAAAAAAAAAggFAAAAA2ludgAAAAhmdW5jdGlvbgIAAAAObG9ja05ldXRyaW5vU1AGCQAAAAAAAAIIBQAAAANpbnYAAAAIZnVuY3Rpb24CAAAADnVubG9ja05ldXRyaW5vAwkBAAAAAiE9AAAAAgkABCUAAAABBQAAABJuZXV0cmlub1N0YWtpbmdBY2MJAAQlAAAAAQkABCQAAAABCAUAAAADaW52AAAABGRBcHAJAAACAAAAAQIAAAAlaW52YWxpZCBuZXV0cmlubyBzdGFraW5nIGRhcHAgYWRkcmVzcwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAQAAACJmYWN0b3J5UmVhZERlZm9TdGFraW5nUGFjZW1ha2VyUHViAAAAAAkAAAIAAAABAgAAACNOb3QgYWxsb3dlZCBpbnZvY2F0aW9uIG1ldGhvZCBjYWxscwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXk00LJj", "chainId": 84, "height": 1474710, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CUZCV8h3PQ3ZPWCYssp1NrHcBeRkdZNygPKHeD79jC7t Next: 8TS9aqjJLh5snokC6uAoEWgx8wfr8BUMn183KvinqZLu Diff:
OldNewDifferences
9595 }
9696
9797
98-func ae (Q) = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, U(Q)), ((("No config at factory=" + toString(M)) + " for key=") + U(Q)))), ("address extraction error for key=" + U(Q)))
98+func ae (Q) = addressFromStringValue("3MsbFMstwm3FHPJXmMfTgyaw7zQrpZfkwnx")
9999
100100
101101 func af () = fromBase58String(valueOrErrorMessage(getString(M, W()), ((("No config at factory=" + toString(M)) + " for key=") + W())))
133133
134134 let av = 16
135135
136-let aw = ac(toString(this))
136+let aw = 17
137137
138-let ax = aw[ag]
138+let ax = 18
139139
140-let ay = aw[ah]
140+let ay = 19
141141
142-let az = fromBase58String(ay)
142+let az = 20
143143
144-let aA = addressFromStringValue(aw[an])
144+let aA = 21
145145
146-let aB = parseIntValue(aw[al])
146+let aB = ac(toString(this))
147147
148-let aC = aw[ak]
148+let aC = aB[ag]
149149
150-let aD = fromBase58String(aC)
150+let aD = aB[ah]
151151
152-let aE = parseIntValue(aw[aj])
152+let aE = fromBase58String(aD)
153153
154-let aF = parseIntValue(aw[ao])
154+let aF = addressFromStringValue(aB[an])
155155
156-let aG = parseIntValue(aw[ap])
156+let aG = parseIntValue(aB[al])
157157
158-let aH = parseIntValue(aw[aq])
158+let aH = aB[ak]
159159
160-let aI = parseIntValue(aw[ar])
160+let aI = fromBase58String(aH)
161161
162-let aJ = parseIntValue(aw[as])
162+let aJ = parseIntValue(aB[aj])
163163
164-let aK = parseIntValue(aw[at])
164+let aK = parseIntValue(aB[ao])
165165
166-let aL = parseIntValue(aw[av])
166+let aL = parseIntValue(aB[ap])
167167
168-func aM () = "%s__isBlocked"
168+let aM = parseIntValue(aB[aq])
169+
170+let aN = parseIntValue(aB[ar])
171+
172+let aO = parseIntValue(aB[as])
173+
174+let aP = parseIntValue(aB[at])
175+
176+let aQ = parseIntValue(aB[av])
177+
178+let aR = aB[aw]
179+
180+let aS = aB[ax]
181+
182+let aT = parseIntValue(aB[ay])
183+
184+let aU = parseIntValue(aB[az])
185+
186+let aV = parseIntValue(aB[aA])
187+
188+func aW () = "%s__isBlocked"
169189
170190
171-func aN (l) = ("%s%s__isMarketOpened__" + l)
191+func aX (l) = ("%s%s__isMarketOpened__" + l)
172192
173193
174-let aO = valueOrElse(getBoolean(aA, aM()), false)
194+let aY = valueOrElse(getBoolean(aF, aW()), false)
175195
176-let aP = valueOrElse(getBoolean(aA, aN(ax)), false)
196+let aZ = valueOrElse(getBoolean(aF, aX(aC)), false)
177197
178-func aQ (l) = valueOrErrorMessage(getInteger(aA, m(l)), ((("No price at priceOracle=" + toString(aA)) + " for key=") + m(l)))
198+func ba (l) = valueOrErrorMessage(getInteger(aF, m(l)), ((("No price at priceOracle=" + toString(aF)) + " for key=") + m(l)))
179199
180200
181-func aR (l) = valueOrErrorMessage(getInteger(aA, n(l)), ((("No lastHeight at priceOracle=" + toString(aA)) + " for key=") + n(l)))
201+func bb (l) = valueOrErrorMessage(getInteger(aF, n(l)), ((("No lastHeight at priceOracle=" + toString(aF)) + " for key=") + n(l)))
182202
183203
184-func aS () = valueOrErrorMessage(getInteger(aA, "currIdx"), ("No currIdx at controlAcc=" + toString(aA)))
204+func bc () = valueOrErrorMessage(getInteger(aF, "currIdx"), ("No currIdx at controlAcc=" + toString(aF)))
185205
186206
187-func aT (aU) = {
188- let aV = ("idxHeight_" + toString(aU))
189- valueOrElse(getInteger(aA, aV), 0)
207+func bd (be) = {
208+ let bf = ("idxHeight_" + toString(be))
209+ valueOrElse(getInteger(aF, bf), 0)
190210 }
191211
192212
193-func aW (aX) = {
194- let aY = ("price_" + toString(aX))
195- valueOrErrorMessage(getInteger(aA, aY), ((("No " + aY) + " at controlAcc=") + toString(aA)))
213+func bg (bh) = {
214+ let bi = ("price_" + toString(bh))
215+ valueOrErrorMessage(getInteger(aF, bi), ((("No " + bi) + " at controlAcc=") + toString(aF)))
196216 }
197217
198218
199-let aZ = aR(ax)
219+let bj = bb(aC)
200220
201-let ba = ((aZ - aZ) > 5)
221+let bk = ((bj - bj) > 5)
202222
203-let bb = "%s%s__commonConfig__defoStakingAddress"
223+let bl = "%s%s__commonConfig__defoStakingAddress"
204224
205-let bc = "%s%s__commonConfig__neutrinoStakingAddress"
225+let bm = "%s%s__commonConfig__neutrinoStakingAddress"
206226
207-func bd (e) = ("%s%s__stakingBalance__" + e)
227+func bn (e) = ("%s%s__stakingBalance__" + e)
208228
209229
210-func be () = ((("rpd_balance_" + aC) + "_") + toString(this))
230+func bo () = ((("rpd_balance_" + aH) + "_") + toString(this))
211231
212232
213-let bf = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bb), ((("No config at factoryAcc" + toString(M)) + " for key=") + bb))), ("address extraction error for key=" + bb))
233+let bp = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bl), ((("No config at factoryAcc" + toString(M)) + " for key=") + bl))), ("address extraction error for key=" + bl))
214234
215-let bg = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bc), ((("No config at factoryAcc" + toString(M)) + " for key=") + bc))), ("address extraction error for key=" + bc))
235+let bq = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bm), ((("No config at factoryAcc" + toString(M)) + " for key=") + bm))), ("address extraction error for key=" + bm))
216236
217-func bh () = valueOrElse(getInteger(bf, bd(ay)), 0)
237+func br () = valueOrElse(getInteger(bp, bn(aD)), 0)
218238
219239
220-func bi () = valueOrElse(getInteger(bg, be()), 0)
240+func bs () = valueOrElse(getInteger(bq, bo()), 0)
221241
222242
223-let bj = valueOrElse(getInteger(this, b()), 0)
243+let bt = valueOrElse(getInteger(this, b()), 0)
224244
225-let bk = valueOrElse(getInteger(this, a()), 0)
245+let bu = valueOrElse(getInteger(this, a()), 0)
226246
227-let bl = getIntegerValue(M, R(this))
247+let bv = getIntegerValue(M, R(this))
228248
229-let bm = fromBase58String(ab())
249+let bw = fromBase58String(ab())
230250
231-let bn = getIntegerValue(M, O())
251+let bx = getIntegerValue(M, O())
232252
233-let bo = (bn - assetBalance(this, bm))
253+let by = (bx - assetBalance(this, bw))
234254
235-let bp = ((assetBalance(this, aD) + bi()) + bo)
255+let bz = ((assetBalance(this, aI) + bs()) + by)
236256
237-let bq = aQ(aw[ag])
257+let bA = ba(aB[ag])
238258
239-let br = (value(assetInfo(az)).quantity - assetBalance(this, az))
259+let bB = (value(assetInfo(aE)).quantity - assetBalance(this, aE))
240260
241-func bs (bt) = if (aP)
242- then bq
243- else fraction((aE - bt), bq, aE)
261+func bC (bD) = if (aZ)
262+ then bA
263+ else fraction((aJ - bD), bA, aJ)
244264
245265
246-func bu (bt) = if (aP)
247- then bq
248- else fraction((aE + bt), bq, aE)
266+func bE (bF) = if ((aS == bF))
267+ then 0
268+ else aO
249269
250270
251-func bv (bw,bt) = if (aP)
252- then bw
253- else fraction((aE + bt), bw, aE)
271+func bG (bD,bF) = if ((aS == bF))
272+ then bA
273+ else bC(bD)
254274
255275
256-func bx (by,bz,bA,bB,bC,bD) = {
257- let bE = fraction(bz, bC, aE)
258- let bF = fraction((aE - bD), bE, aE)
259- let A = (bE - bF)
260- let bG = fraction(bE, aE, bC)
261- let bH = (bz - bG)
262- if (if ((bB > bz))
263- then (toString(by) != toString(bf))
276+func bH (bD) = if (aZ)
277+ then bA
278+ else fraction((aJ + bD), bA, aJ)
279+
280+
281+func bI (bJ,bD) = if (aZ)
282+ then bJ
283+ else fraction((aJ + bD), bJ, aJ)
284+
285+
286+func bK (bL,bM,bN,bO,bP,bQ) = {
287+ let bR = fraction(bM, bP, aJ)
288+ let bS = fraction(aV, bR, aJ)
289+ let bT = fraction(bQ, bR, aJ)
290+ let bU = ((bR - bS) - bT)
291+ let bV = fraction(bR, aJ, bP)
292+ let bW = (bM - bV)
293+ if (if ((bO > bM))
294+ then (toString(bL) != toString(bp))
264295 else false)
265- then throw(((((("impossible to issue new " + ax) + ": payment=") + toString(bz)) + "is less then min amount=") + toString(bB)))
266- else $Tuple2([IntegerEntry(b(), (bj + bG)), StringEntry(f(height, toString(by), "FINISHED"), t(bz, toBase58String(bA), bq, bF, toBase58String(az), bE, A)), Reissue(az, (bF + A), true), ScriptTransfer(by, bF, az), ScriptTransfer(by, bH, bA), ScriptTransfer(ae(toString(this)), A, az), IntegerEntry(a(), (bk + A))], bH)
296+ then throw(((((("impossible to issue new " + aC) + ": payment=") + toString(bM)) + "is less then min amount=") + toString(bO)))
297+ else $Tuple2([IntegerEntry(b(), (bt + bV)), StringEntry(f(height, toString(bL), "FINISHED"), t(bM, toBase58String(bN), bA, bU, toBase58String(aE), bR, bT)), Reissue(aE, (bU + bT), true), ScriptTransfer(bL, bU, aE), ScriptTransfer(bL, bW, bN), ScriptTransfer(ae(toString(this)), bT, aE), IntegerEntry(a(), (bu + bT))], bW)
267298 }
268299
269300
270-@Callable(bI)
271-func buyAsset () = {
272- let bJ = value(bI.payments[0])
273- let bK = value(bJ.assetId)
274- if (aO)
301+@Callable(bX)
302+func buyAsset () = throw("NGN buyAsset operation is temporary unavailable")
303+
304+
305+
306+@Callable(bX)
307+func sellAsset () = {
308+ let bY = value(bX.payments[0])
309+ let bZ = value(bY.assetId)
310+ let ca = toString(bX.caller)
311+ let cb = bH(aQ)
312+ if (aY)
275313 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
276- else if (ba)
277- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)))
278- else if ((bK != aD))
279- then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(aD)) + " actual=") + toBase58String(bK)))
280- else bx(bI.caller, bJ.amount, bK, aF, bs(aL), aJ)._1
314+ else if ((bZ != aE))
315+ then throw(((("Invalid payment asset id: expected=" + toBase58String(aE)) + " actual=") + toBase58String(bZ)))
316+ else if ((aL > bY.amount))
317+ then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(bY.amount)) + " minAmount=") + toString(aL)))
318+ else {
319+ let cc = fraction(bY.amount, aJ, cb)
320+ let cd = if ((cc > bz))
321+ then bz
322+ else cc
323+ let ce = fraction(cd, cb, aJ)
324+ let bW = (bY.amount - ce)
325+ let bS = fraction(aV, ce, aJ)
326+ let bT = fraction(aP, ce, aJ)
327+ let cf = ((ce - bS) - bT)
328+ let cg = fraction(cf, aJ, cb)
329+[IntegerEntry(b(), (bt - cg)), StringEntry(f(height, ca, "FINISHED"), t(bY.amount, toBase58String(bZ), cb, cg, aH, ce, bT)), Burn(aE, (cf + bS)), ScriptTransfer(bX.caller, cg, aI), ScriptTransfer(bX.caller, bW, aE), ScriptTransfer(ae(toString(this)), bT, aE), IntegerEntry(a(), (bu + bT))]
330+ }
281331 }
282332
283333
284334
285-@Callable(bI)
286-func sellAsset () = {
287- let bJ = value(bI.payments[0])
288- let bL = value(bJ.assetId)
289- let bM = toString(bI.caller)
290- let bN = bu(aL)
291- if (aO)
292- then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
293- else if (ba)
294- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)))
295- else if ((bL != az))
296- then throw(((("Invalid payment asset id: expected=" + toBase58String(az)) + " actual=") + toBase58String(bL)))
297- else if ((aG > bJ.amount))
298- then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(bJ.amount)) + " minAmount=") + toString(aG)))
299- else {
300- let bO = fraction(bJ.amount, aE, bN)
301- let bP = if ((bO > bp))
302- then bp
303- else bO
304- let bQ = fraction(bP, bN, aE)
305- let bH = (bJ.amount - bQ)
306- let bR = fraction(aK, bQ, aE)
307- let bS = (bQ - bR)
308- let bT = fraction(bS, aE, bN)
309-[IntegerEntry(b(), (bj - bT)), StringEntry(f(height, bM, "FINISHED"), t(bJ.amount, toBase58String(bL), bN, bT, aC, bQ, bR)), Burn(az, bS), ScriptTransfer(bI.caller, bT, aD), ScriptTransfer(bI.caller, bH, az), ScriptTransfer(ae(toString(this)), bR, az), IntegerEntry(a(), (bk + bR))]
310- }
311- }
335+@Callable(bX)
336+func crossExchange (ch,ci) = throw("NGN crossExchange operation is temporary unavailable")
312337
313338
314339
315-@Callable(bI)
316-func crossExchange (bU,bV) = {
317- let bJ = value(bI.payments[0])
318- let bL = value(bJ.assetId)
319- let bW = toBase58String(bL)
320- let bX = bJ.amount
321- let bM = toString(bI.caller)
322- let bY = aw
323- let bZ = ad(bV)
324- let ca = bZ._2
325- let cb = valueOrErrorMessage(addressFromString(bZ._1), ("couldn't parse address from string for assetCode=" + bV))
326- let cc = valueOrErrorMessage(parseInt(ca[ap]), ("minSellPmt parsing error: rawVal=" + ca[ap]))
327- let cd = aR(bV)
328- let ce = ((cd - cd) > 5)
329- if (aO)
340+@Callable(bX)
341+func rebalanceDebts () = {
342+ let cj = value(bX.payments[0])
343+ let ck = value(cj.assetId)
344+ let cl = value(bX.payments[1])
345+ let cm = value(cl.assetId)
346+ let cn = toString(bX.caller)
347+ let co = ac(cn)
348+ let C = co[ag]
349+ let cp = k(C)
350+ let cq = valueOrErrorMessage(getInteger(this, cp), ("No debts for " + C))
351+ if (aY)
330352 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
331- else if ((aw[ag] != bU))
332- then throw(((("buyAsset confirmation failed: buyAssetIdConfirm=" + aw[ag]) + " BUT buyAssetId=") + bU))
333- else if ((ca[ah] != bW))
334- then throw(((("sellAsset confirmation failed: sellAssetIdConfirm=" + ca[ah]) + "BUT pmtAsset=") + bW))
335- else if ((aw[ai] != "ISSUED"))
336- then throw(((("toAsset has not been issued yet: buyAssetId=" + bU) + " BUT status=") + aw[ai]))
337- else if ((ca[ai] != "ISSUED"))
338- then throw(((("fromAssetCfg has not been issued yet: sellAssetId=" + bW) + " BUT status=") + ca[ai]))
339- else if (ba)
340- then throw(((((("buy last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)) + " buyCode=") + bU))
341- else if (ce)
342- then throw(((((("sell last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)) + " sellCode=") + bV))
353+ else if ((bw != ck))
354+ then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bw)) + " actual=") + toBase58String(ck)))
355+ else if ((aI != cm))
356+ then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aI)) + " actual=") + toBase58String(cm)))
357+ else if ((cj.amount != cl.amount))
358+ then throw("first payment amount doesn't match to the second payment amount")
359+ else if ((0 >= cq))
360+ then throw(("lendedAmt is less then zero: lendedAmt=" + toString(cq)))
361+ else if (((1 * aJ) >= cj.amount))
362+ then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cj.amount)))
363+ else if ((cj.amount > cq))
364+ then throw(((("attached payment is grater than required: pmtAmount=" + toString(cj.amount)) + " lendedAmt=") + toString(cq)))
343365 else {
344- let cf = bs((aL / 2))
345- let cg = bv(aQ(bV), (aL / 2))
346- let bC = fraction(cf, aE, cg)
347- let ch = fraction(bX, aE, cg)
348- let ci = valueOrElse(getInteger(this, c()), 0)
349- let cj = k(bV)
350- let ck = valueOrElse(getInteger(this, cj), 0)
351- let cl = parseIntValue(ca[at])
352- let cm = bx(bI.caller, bX, bL, cc, bC, fraction((aJ + cl), 50, 100))
353- ((((cm._1 :+ ScriptTransfer(cb, ch, bm)) :+ ScriptTransfer(cb, (bX - cm._2), bL)) :+ IntegerEntry(cj, (ck + ch))) :+ IntegerEntry(c(), (ci + ch)))
366+ let cr = valueOrElse(getInteger(this, c()), 0)
367+ let G = (cq - cj.amount)
368+[IntegerEntry(cp, G), IntegerEntry(c(), (cr - cj.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(bX.transactionId)), B(C, cj, cl, cq, G))]
354369 }
355370 }
356371
357372
358373
359-@Callable(bI)
360-func rebalanceDebts () = {
361- let cn = value(bI.payments[0])
362- let co = value(cn.assetId)
363- let cp = value(bI.payments[1])
364- let cq = value(cp.assetId)
365- let cr = toString(bI.caller)
366- let cs = ac(cr)
367- let C = cs[ag]
368- let cj = k(C)
369- let ct = valueOrErrorMessage(getInteger(this, cj), ("No debts for " + C))
370- if (aO)
371- then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
372- else if ((bm != co))
373- then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bm)) + " actual=") + toBase58String(co)))
374- else if ((aD != cq))
375- then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aD)) + " actual=") + toBase58String(cq)))
376- else if ((cn.amount != cp.amount))
377- then throw("first payment amount doesn't match to the second payment amount")
378- else if ((0 >= ct))
379- then throw(("lendedAmt is less then zero: lendedAmt=" + toString(ct)))
380- else if (((100 * aE) >= cn.amount))
381- then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cn.amount)))
382- else if ((cn.amount > ct))
383- then throw(((("attached payment is grater than required: pmtAmount=" + toString(cn.amount)) + " lendedAmt=") + toString(ct)))
384- else {
385- let ci = valueOrElse(getInteger(this, c()), 0)
386- let G = (ct - cn.amount)
387-[IntegerEntry(cj, G), IntegerEntry(c(), (ci - cn.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(bI.transactionId)), B(C, cn, cp, ct, G))]
388- }
389- }
390-
391-
392-
393-@Callable(bI)
374+@Callable(bX)
394375 func fulfillRedeemRequest (Y) = {
395- let cu = toString(this)
396- let cv = aa(cu, Y)
397- let cw = valueOrElse(getInteger(M, cv), 0)
398- if ((0 >= cw))
376+ let cs = toString(this)
377+ let ct = aa(cs, Y)
378+ let cu = valueOrElse(getInteger(M, ct), 0)
379+ if ((0 >= cu))
399380 then throw("All liquidity request fulfilled")
400381 else {
401- let cx = X(cu, Y, cw)
402- let cy = valueOrErrorMessage(getInteger(M, cx), "Empty poolMakerLiquidityRequestKey at factory acc")
403- if (isDefined(getInteger(this, cx)))
382+ let cv = X(cs, Y, cu)
383+ let cw = valueOrErrorMessage(getInteger(M, cv), "Empty poolMakerLiquidityRequestKey at factory acc")
384+ if (isDefined(getInteger(this, cv)))
404385 then throw("Liquidity request has been already fulfilled")
405- else [IntegerEntry(cx, cy), ScriptTransfer(M, cy, aD)]
386+ else [IntegerEntry(cv, cw), ScriptTransfer(M, cw, aI)]
406387 }
407388 }
408389
409390
410-@Verifier(cz)
411-func cA () = {
412- let cB = cz
413- if ($isInstanceOf(cB, "InvokeScriptTransaction"))
391+@Verifier(cx)
392+func cy () = {
393+ let cz = cx
394+ if ($isInstanceOf(cz, "InvokeScriptTransaction"))
414395 then {
415- let cC = cB
416- if ((cC.fee > (900 * 1000)))
417- then throw(("fee amount is greater than max allowed: " + toString(cC.fee)))
418- else if (isDefined(cC.feeAssetId))
396+ let cA = cz
397+ if ((cA.fee > (900 * 1000)))
398+ then throw(("fee amount is greater than max allowed: " + toString(cA.fee)))
399+ else if (isDefined(cA.feeAssetId))
419400 then throw("only Waves is allowed as feeAssetId")
420- else if ((cC.function == "rebalanceDebts"))
401+ else if ((cA.function == "rebalanceDebts"))
421402 then {
422- let cD = toString(addressFromRecipient(cC.dApp))
423- if ((ac(cD)[ai] != "ISSUED"))
403+ let cB = toString(addressFromRecipient(cA.dApp))
404+ if ((ac(cB)[ai] != "ISSUED"))
424405 then throw("only defo dapp is allowed")
425- else if ((cD == toString(this)))
406+ else if ((cB == toString(this)))
426407 then throw("impossible to call self rebealnceDebt")
427408 else true
428409 }
429- else if (if (if ((cC.function == "lockNeutrino"))
410+ else if (if (if ((cA.function == "lockNeutrino"))
430411 then true
431- else (cC.function == "lockNeutrinoSP"))
412+ else (cA.function == "lockNeutrinoSP"))
432413 then true
433- else (cC.function == "unlockNeutrino"))
434- then if ((toString(bg) != toString(addressFromRecipient(cC.dApp))))
414+ else (cA.function == "unlockNeutrino"))
415+ then if ((toString(bq) != toString(addressFromRecipient(cA.dApp))))
435416 then throw("invalid neutrino staking dapp address")
436- else sigVerify(cz.bodyBytes, cz.proofs[0], af())
417+ else sigVerify(cx.bodyBytes, cx.proofs[0], af())
437418 else throw("Not allowed invocation method calls")
438419 }
439- else sigVerify(cz.bodyBytes, cz.proofs[0], cz.senderPublicKey)
420+ else sigVerify(cx.bodyBytes, cx.proofs[0], cx.senderPublicKey)
440421 }
441422
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a () = "%s__accumulatedFee"
55
66
77 func b () = "%s__ucollateral"
88
99
1010 func c () = "%s__totalLendedAtOtherAccs"
1111
1212
1313 func d (e) = ("%s%s__assetLockedTotal__" + e)
1414
1515
1616 func f (g,h,i) = ((((("%s%s%d%s__defoAssetOperation__" + h) + "__") + toString(g)) + "__") + i)
1717
1818
1919 func j () = "%s__factory"
2020
2121
2222 func k (l) = ("%s%s__lendedBaseAssetAmount__" + l)
2323
2424
2525 func m (l) = ("%s%s__price__" + l)
2626
2727
2828 func n (l) = ("%s%s__lastHeight__" + l)
2929
3030
3131 let o = 1
3232
3333 let p = 2
3434
3535 let q = 3
3636
3737 let r = 4
3838
3939 let s = 5
4040
4141 func t (u,v,w,x,y,z,A) = makeString(["%d%s%d%s%d%d%d", toString(u), v, toString(x), y, toString(w), toString(z), toString(A)], "__")
4242
4343
4444 func B (C,D,E,F,G) = makeString(["%s%s%d%s%d%d%d", C, toBase58String(value(D.assetId)), toString(D.amount), toBase58String(value(E.assetId)), toString(E.amount), toString(F), toString(G)], "__")
4545
4646
4747 func H (I) = {
4848 let J = valueOrErrorMessage(getString(this, I), ("There is no request for passed arguments: " + I))
4949 split(J, "__")
5050 }
5151
5252
5353 let K = -1
5454
5555 let L = "NULL"
5656
5757 let M = addressFromStringValue(valueOrErrorMessage(getString(this, j()), ((("No config at this=" + toString(this)) + " for key=") + j())))
5858
5959 func N () = "%s%s__commonConfig__debtAssetId"
6060
6161
6262 func O () = "%s%s__commonConfig__debtAssetEtalonBalance"
6363
6464
6565 func P (Q) = (("%s%s%s__defoAsset__" + Q) + "__config")
6666
6767
6868 func R (S) = (("%s%s%s__defoAsset__" + toString(S)) + "__currentPool")
6969
7070
7171 func T (l) = (("%s%s%s__defoAsset__" + l) + "__addressByAssetCode")
7272
7373
7474 func U (V) = (("%s%s%s__defoAsset__" + V) + "__poolMakers")
7575
7676
7777 func W () = "%s%s__commonConfig__defoStakingPacemakerPub"
7878
7979
8080 func X (V,Y,Z) = makeString(["%s%s%s%d%s__pool", V, Y, toString(Z), "liquidityRequest"], "__")
8181
8282
8383 func aa (V,Y) = makeString(["%s%s%s%s__pool", V, Y, "unlockHeight"], "__")
8484
8585
8686 func ab () = valueOrErrorMessage(getString(M, N()), ((("No config at factory=" + toString(M)) + " for key=") + N()))
8787
8888
8989 func ac (Q) = split(valueOrErrorMessage(getString(M, P(Q)), ((("No config at factory=" + toString(M)) + " for key=") + P(Q))), "__")
9090
9191
9292 func ad (l) = {
9393 let Q = valueOrErrorMessage(getString(M, T(l)), ((("No config at factory=" + toString(M)) + " for key=") + T(l)))
9494 $Tuple2(Q, ac(Q))
9595 }
9696
9797
98-func ae (Q) = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, U(Q)), ((("No config at factory=" + toString(M)) + " for key=") + U(Q)))), ("address extraction error for key=" + U(Q)))
98+func ae (Q) = addressFromStringValue("3MsbFMstwm3FHPJXmMfTgyaw7zQrpZfkwnx")
9999
100100
101101 func af () = fromBase58String(valueOrErrorMessage(getString(M, W()), ((("No config at factory=" + toString(M)) + " for key=") + W())))
102102
103103
104104 let ag = 1
105105
106106 let ah = 2
107107
108108 let ai = 3
109109
110110 let aj = 4
111111
112112 let ak = 5
113113
114114 let al = 6
115115
116116 let am = 7
117117
118118 let an = 8
119119
120120 let ao = 9
121121
122122 let ap = 10
123123
124124 let aq = 11
125125
126126 let ar = 12
127127
128128 let as = 13
129129
130130 let at = 14
131131
132132 let au = 15
133133
134134 let av = 16
135135
136-let aw = ac(toString(this))
136+let aw = 17
137137
138-let ax = aw[ag]
138+let ax = 18
139139
140-let ay = aw[ah]
140+let ay = 19
141141
142-let az = fromBase58String(ay)
142+let az = 20
143143
144-let aA = addressFromStringValue(aw[an])
144+let aA = 21
145145
146-let aB = parseIntValue(aw[al])
146+let aB = ac(toString(this))
147147
148-let aC = aw[ak]
148+let aC = aB[ag]
149149
150-let aD = fromBase58String(aC)
150+let aD = aB[ah]
151151
152-let aE = parseIntValue(aw[aj])
152+let aE = fromBase58String(aD)
153153
154-let aF = parseIntValue(aw[ao])
154+let aF = addressFromStringValue(aB[an])
155155
156-let aG = parseIntValue(aw[ap])
156+let aG = parseIntValue(aB[al])
157157
158-let aH = parseIntValue(aw[aq])
158+let aH = aB[ak]
159159
160-let aI = parseIntValue(aw[ar])
160+let aI = fromBase58String(aH)
161161
162-let aJ = parseIntValue(aw[as])
162+let aJ = parseIntValue(aB[aj])
163163
164-let aK = parseIntValue(aw[at])
164+let aK = parseIntValue(aB[ao])
165165
166-let aL = parseIntValue(aw[av])
166+let aL = parseIntValue(aB[ap])
167167
168-func aM () = "%s__isBlocked"
168+let aM = parseIntValue(aB[aq])
169+
170+let aN = parseIntValue(aB[ar])
171+
172+let aO = parseIntValue(aB[as])
173+
174+let aP = parseIntValue(aB[at])
175+
176+let aQ = parseIntValue(aB[av])
177+
178+let aR = aB[aw]
179+
180+let aS = aB[ax]
181+
182+let aT = parseIntValue(aB[ay])
183+
184+let aU = parseIntValue(aB[az])
185+
186+let aV = parseIntValue(aB[aA])
187+
188+func aW () = "%s__isBlocked"
169189
170190
171-func aN (l) = ("%s%s__isMarketOpened__" + l)
191+func aX (l) = ("%s%s__isMarketOpened__" + l)
172192
173193
174-let aO = valueOrElse(getBoolean(aA, aM()), false)
194+let aY = valueOrElse(getBoolean(aF, aW()), false)
175195
176-let aP = valueOrElse(getBoolean(aA, aN(ax)), false)
196+let aZ = valueOrElse(getBoolean(aF, aX(aC)), false)
177197
178-func aQ (l) = valueOrErrorMessage(getInteger(aA, m(l)), ((("No price at priceOracle=" + toString(aA)) + " for key=") + m(l)))
198+func ba (l) = valueOrErrorMessage(getInteger(aF, m(l)), ((("No price at priceOracle=" + toString(aF)) + " for key=") + m(l)))
179199
180200
181-func aR (l) = valueOrErrorMessage(getInteger(aA, n(l)), ((("No lastHeight at priceOracle=" + toString(aA)) + " for key=") + n(l)))
201+func bb (l) = valueOrErrorMessage(getInteger(aF, n(l)), ((("No lastHeight at priceOracle=" + toString(aF)) + " for key=") + n(l)))
182202
183203
184-func aS () = valueOrErrorMessage(getInteger(aA, "currIdx"), ("No currIdx at controlAcc=" + toString(aA)))
204+func bc () = valueOrErrorMessage(getInteger(aF, "currIdx"), ("No currIdx at controlAcc=" + toString(aF)))
185205
186206
187-func aT (aU) = {
188- let aV = ("idxHeight_" + toString(aU))
189- valueOrElse(getInteger(aA, aV), 0)
207+func bd (be) = {
208+ let bf = ("idxHeight_" + toString(be))
209+ valueOrElse(getInteger(aF, bf), 0)
190210 }
191211
192212
193-func aW (aX) = {
194- let aY = ("price_" + toString(aX))
195- valueOrErrorMessage(getInteger(aA, aY), ((("No " + aY) + " at controlAcc=") + toString(aA)))
213+func bg (bh) = {
214+ let bi = ("price_" + toString(bh))
215+ valueOrErrorMessage(getInteger(aF, bi), ((("No " + bi) + " at controlAcc=") + toString(aF)))
196216 }
197217
198218
199-let aZ = aR(ax)
219+let bj = bb(aC)
200220
201-let ba = ((aZ - aZ) > 5)
221+let bk = ((bj - bj) > 5)
202222
203-let bb = "%s%s__commonConfig__defoStakingAddress"
223+let bl = "%s%s__commonConfig__defoStakingAddress"
204224
205-let bc = "%s%s__commonConfig__neutrinoStakingAddress"
225+let bm = "%s%s__commonConfig__neutrinoStakingAddress"
206226
207-func bd (e) = ("%s%s__stakingBalance__" + e)
227+func bn (e) = ("%s%s__stakingBalance__" + e)
208228
209229
210-func be () = ((("rpd_balance_" + aC) + "_") + toString(this))
230+func bo () = ((("rpd_balance_" + aH) + "_") + toString(this))
211231
212232
213-let bf = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bb), ((("No config at factoryAcc" + toString(M)) + " for key=") + bb))), ("address extraction error for key=" + bb))
233+let bp = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bl), ((("No config at factoryAcc" + toString(M)) + " for key=") + bl))), ("address extraction error for key=" + bl))
214234
215-let bg = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bc), ((("No config at factoryAcc" + toString(M)) + " for key=") + bc))), ("address extraction error for key=" + bc))
235+let bq = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bm), ((("No config at factoryAcc" + toString(M)) + " for key=") + bm))), ("address extraction error for key=" + bm))
216236
217-func bh () = valueOrElse(getInteger(bf, bd(ay)), 0)
237+func br () = valueOrElse(getInteger(bp, bn(aD)), 0)
218238
219239
220-func bi () = valueOrElse(getInteger(bg, be()), 0)
240+func bs () = valueOrElse(getInteger(bq, bo()), 0)
221241
222242
223-let bj = valueOrElse(getInteger(this, b()), 0)
243+let bt = valueOrElse(getInteger(this, b()), 0)
224244
225-let bk = valueOrElse(getInteger(this, a()), 0)
245+let bu = valueOrElse(getInteger(this, a()), 0)
226246
227-let bl = getIntegerValue(M, R(this))
247+let bv = getIntegerValue(M, R(this))
228248
229-let bm = fromBase58String(ab())
249+let bw = fromBase58String(ab())
230250
231-let bn = getIntegerValue(M, O())
251+let bx = getIntegerValue(M, O())
232252
233-let bo = (bn - assetBalance(this, bm))
253+let by = (bx - assetBalance(this, bw))
234254
235-let bp = ((assetBalance(this, aD) + bi()) + bo)
255+let bz = ((assetBalance(this, aI) + bs()) + by)
236256
237-let bq = aQ(aw[ag])
257+let bA = ba(aB[ag])
238258
239-let br = (value(assetInfo(az)).quantity - assetBalance(this, az))
259+let bB = (value(assetInfo(aE)).quantity - assetBalance(this, aE))
240260
241-func bs (bt) = if (aP)
242- then bq
243- else fraction((aE - bt), bq, aE)
261+func bC (bD) = if (aZ)
262+ then bA
263+ else fraction((aJ - bD), bA, aJ)
244264
245265
246-func bu (bt) = if (aP)
247- then bq
248- else fraction((aE + bt), bq, aE)
266+func bE (bF) = if ((aS == bF))
267+ then 0
268+ else aO
249269
250270
251-func bv (bw,bt) = if (aP)
252- then bw
253- else fraction((aE + bt), bw, aE)
271+func bG (bD,bF) = if ((aS == bF))
272+ then bA
273+ else bC(bD)
254274
255275
256-func bx (by,bz,bA,bB,bC,bD) = {
257- let bE = fraction(bz, bC, aE)
258- let bF = fraction((aE - bD), bE, aE)
259- let A = (bE - bF)
260- let bG = fraction(bE, aE, bC)
261- let bH = (bz - bG)
262- if (if ((bB > bz))
263- then (toString(by) != toString(bf))
276+func bH (bD) = if (aZ)
277+ then bA
278+ else fraction((aJ + bD), bA, aJ)
279+
280+
281+func bI (bJ,bD) = if (aZ)
282+ then bJ
283+ else fraction((aJ + bD), bJ, aJ)
284+
285+
286+func bK (bL,bM,bN,bO,bP,bQ) = {
287+ let bR = fraction(bM, bP, aJ)
288+ let bS = fraction(aV, bR, aJ)
289+ let bT = fraction(bQ, bR, aJ)
290+ let bU = ((bR - bS) - bT)
291+ let bV = fraction(bR, aJ, bP)
292+ let bW = (bM - bV)
293+ if (if ((bO > bM))
294+ then (toString(bL) != toString(bp))
264295 else false)
265- then throw(((((("impossible to issue new " + ax) + ": payment=") + toString(bz)) + "is less then min amount=") + toString(bB)))
266- else $Tuple2([IntegerEntry(b(), (bj + bG)), StringEntry(f(height, toString(by), "FINISHED"), t(bz, toBase58String(bA), bq, bF, toBase58String(az), bE, A)), Reissue(az, (bF + A), true), ScriptTransfer(by, bF, az), ScriptTransfer(by, bH, bA), ScriptTransfer(ae(toString(this)), A, az), IntegerEntry(a(), (bk + A))], bH)
296+ then throw(((((("impossible to issue new " + aC) + ": payment=") + toString(bM)) + "is less then min amount=") + toString(bO)))
297+ else $Tuple2([IntegerEntry(b(), (bt + bV)), StringEntry(f(height, toString(bL), "FINISHED"), t(bM, toBase58String(bN), bA, bU, toBase58String(aE), bR, bT)), Reissue(aE, (bU + bT), true), ScriptTransfer(bL, bU, aE), ScriptTransfer(bL, bW, bN), ScriptTransfer(ae(toString(this)), bT, aE), IntegerEntry(a(), (bu + bT))], bW)
267298 }
268299
269300
270-@Callable(bI)
271-func buyAsset () = {
272- let bJ = value(bI.payments[0])
273- let bK = value(bJ.assetId)
274- if (aO)
301+@Callable(bX)
302+func buyAsset () = throw("NGN buyAsset operation is temporary unavailable")
303+
304+
305+
306+@Callable(bX)
307+func sellAsset () = {
308+ let bY = value(bX.payments[0])
309+ let bZ = value(bY.assetId)
310+ let ca = toString(bX.caller)
311+ let cb = bH(aQ)
312+ if (aY)
275313 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
276- else if (ba)
277- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)))
278- else if ((bK != aD))
279- then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(aD)) + " actual=") + toBase58String(bK)))
280- else bx(bI.caller, bJ.amount, bK, aF, bs(aL), aJ)._1
314+ else if ((bZ != aE))
315+ then throw(((("Invalid payment asset id: expected=" + toBase58String(aE)) + " actual=") + toBase58String(bZ)))
316+ else if ((aL > bY.amount))
317+ then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(bY.amount)) + " minAmount=") + toString(aL)))
318+ else {
319+ let cc = fraction(bY.amount, aJ, cb)
320+ let cd = if ((cc > bz))
321+ then bz
322+ else cc
323+ let ce = fraction(cd, cb, aJ)
324+ let bW = (bY.amount - ce)
325+ let bS = fraction(aV, ce, aJ)
326+ let bT = fraction(aP, ce, aJ)
327+ let cf = ((ce - bS) - bT)
328+ let cg = fraction(cf, aJ, cb)
329+[IntegerEntry(b(), (bt - cg)), StringEntry(f(height, ca, "FINISHED"), t(bY.amount, toBase58String(bZ), cb, cg, aH, ce, bT)), Burn(aE, (cf + bS)), ScriptTransfer(bX.caller, cg, aI), ScriptTransfer(bX.caller, bW, aE), ScriptTransfer(ae(toString(this)), bT, aE), IntegerEntry(a(), (bu + bT))]
330+ }
281331 }
282332
283333
284334
285-@Callable(bI)
286-func sellAsset () = {
287- let bJ = value(bI.payments[0])
288- let bL = value(bJ.assetId)
289- let bM = toString(bI.caller)
290- let bN = bu(aL)
291- if (aO)
292- then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
293- else if (ba)
294- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)))
295- else if ((bL != az))
296- then throw(((("Invalid payment asset id: expected=" + toBase58String(az)) + " actual=") + toBase58String(bL)))
297- else if ((aG > bJ.amount))
298- then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(bJ.amount)) + " minAmount=") + toString(aG)))
299- else {
300- let bO = fraction(bJ.amount, aE, bN)
301- let bP = if ((bO > bp))
302- then bp
303- else bO
304- let bQ = fraction(bP, bN, aE)
305- let bH = (bJ.amount - bQ)
306- let bR = fraction(aK, bQ, aE)
307- let bS = (bQ - bR)
308- let bT = fraction(bS, aE, bN)
309-[IntegerEntry(b(), (bj - bT)), StringEntry(f(height, bM, "FINISHED"), t(bJ.amount, toBase58String(bL), bN, bT, aC, bQ, bR)), Burn(az, bS), ScriptTransfer(bI.caller, bT, aD), ScriptTransfer(bI.caller, bH, az), ScriptTransfer(ae(toString(this)), bR, az), IntegerEntry(a(), (bk + bR))]
310- }
311- }
335+@Callable(bX)
336+func crossExchange (ch,ci) = throw("NGN crossExchange operation is temporary unavailable")
312337
313338
314339
315-@Callable(bI)
316-func crossExchange (bU,bV) = {
317- let bJ = value(bI.payments[0])
318- let bL = value(bJ.assetId)
319- let bW = toBase58String(bL)
320- let bX = bJ.amount
321- let bM = toString(bI.caller)
322- let bY = aw
323- let bZ = ad(bV)
324- let ca = bZ._2
325- let cb = valueOrErrorMessage(addressFromString(bZ._1), ("couldn't parse address from string for assetCode=" + bV))
326- let cc = valueOrErrorMessage(parseInt(ca[ap]), ("minSellPmt parsing error: rawVal=" + ca[ap]))
327- let cd = aR(bV)
328- let ce = ((cd - cd) > 5)
329- if (aO)
340+@Callable(bX)
341+func rebalanceDebts () = {
342+ let cj = value(bX.payments[0])
343+ let ck = value(cj.assetId)
344+ let cl = value(bX.payments[1])
345+ let cm = value(cl.assetId)
346+ let cn = toString(bX.caller)
347+ let co = ac(cn)
348+ let C = co[ag]
349+ let cp = k(C)
350+ let cq = valueOrErrorMessage(getInteger(this, cp), ("No debts for " + C))
351+ if (aY)
330352 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
331- else if ((aw[ag] != bU))
332- then throw(((("buyAsset confirmation failed: buyAssetIdConfirm=" + aw[ag]) + " BUT buyAssetId=") + bU))
333- else if ((ca[ah] != bW))
334- then throw(((("sellAsset confirmation failed: sellAssetIdConfirm=" + ca[ah]) + "BUT pmtAsset=") + bW))
335- else if ((aw[ai] != "ISSUED"))
336- then throw(((("toAsset has not been issued yet: buyAssetId=" + bU) + " BUT status=") + aw[ai]))
337- else if ((ca[ai] != "ISSUED"))
338- then throw(((("fromAssetCfg has not been issued yet: sellAssetId=" + bW) + " BUT status=") + ca[ai]))
339- else if (ba)
340- then throw(((((("buy last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)) + " buyCode=") + bU))
341- else if (ce)
342- then throw(((((("sell last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(aZ)) + " currHeight=") + toString(height)) + " sellCode=") + bV))
353+ else if ((bw != ck))
354+ then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bw)) + " actual=") + toBase58String(ck)))
355+ else if ((aI != cm))
356+ then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aI)) + " actual=") + toBase58String(cm)))
357+ else if ((cj.amount != cl.amount))
358+ then throw("first payment amount doesn't match to the second payment amount")
359+ else if ((0 >= cq))
360+ then throw(("lendedAmt is less then zero: lendedAmt=" + toString(cq)))
361+ else if (((1 * aJ) >= cj.amount))
362+ then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cj.amount)))
363+ else if ((cj.amount > cq))
364+ then throw(((("attached payment is grater than required: pmtAmount=" + toString(cj.amount)) + " lendedAmt=") + toString(cq)))
343365 else {
344- let cf = bs((aL / 2))
345- let cg = bv(aQ(bV), (aL / 2))
346- let bC = fraction(cf, aE, cg)
347- let ch = fraction(bX, aE, cg)
348- let ci = valueOrElse(getInteger(this, c()), 0)
349- let cj = k(bV)
350- let ck = valueOrElse(getInteger(this, cj), 0)
351- let cl = parseIntValue(ca[at])
352- let cm = bx(bI.caller, bX, bL, cc, bC, fraction((aJ + cl), 50, 100))
353- ((((cm._1 :+ ScriptTransfer(cb, ch, bm)) :+ ScriptTransfer(cb, (bX - cm._2), bL)) :+ IntegerEntry(cj, (ck + ch))) :+ IntegerEntry(c(), (ci + ch)))
366+ let cr = valueOrElse(getInteger(this, c()), 0)
367+ let G = (cq - cj.amount)
368+[IntegerEntry(cp, G), IntegerEntry(c(), (cr - cj.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(bX.transactionId)), B(C, cj, cl, cq, G))]
354369 }
355370 }
356371
357372
358373
359-@Callable(bI)
360-func rebalanceDebts () = {
361- let cn = value(bI.payments[0])
362- let co = value(cn.assetId)
363- let cp = value(bI.payments[1])
364- let cq = value(cp.assetId)
365- let cr = toString(bI.caller)
366- let cs = ac(cr)
367- let C = cs[ag]
368- let cj = k(C)
369- let ct = valueOrErrorMessage(getInteger(this, cj), ("No debts for " + C))
370- if (aO)
371- then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
372- else if ((bm != co))
373- then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bm)) + " actual=") + toBase58String(co)))
374- else if ((aD != cq))
375- then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aD)) + " actual=") + toBase58String(cq)))
376- else if ((cn.amount != cp.amount))
377- then throw("first payment amount doesn't match to the second payment amount")
378- else if ((0 >= ct))
379- then throw(("lendedAmt is less then zero: lendedAmt=" + toString(ct)))
380- else if (((100 * aE) >= cn.amount))
381- then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cn.amount)))
382- else if ((cn.amount > ct))
383- then throw(((("attached payment is grater than required: pmtAmount=" + toString(cn.amount)) + " lendedAmt=") + toString(ct)))
384- else {
385- let ci = valueOrElse(getInteger(this, c()), 0)
386- let G = (ct - cn.amount)
387-[IntegerEntry(cj, G), IntegerEntry(c(), (ci - cn.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(bI.transactionId)), B(C, cn, cp, ct, G))]
388- }
389- }
390-
391-
392-
393-@Callable(bI)
374+@Callable(bX)
394375 func fulfillRedeemRequest (Y) = {
395- let cu = toString(this)
396- let cv = aa(cu, Y)
397- let cw = valueOrElse(getInteger(M, cv), 0)
398- if ((0 >= cw))
376+ let cs = toString(this)
377+ let ct = aa(cs, Y)
378+ let cu = valueOrElse(getInteger(M, ct), 0)
379+ if ((0 >= cu))
399380 then throw("All liquidity request fulfilled")
400381 else {
401- let cx = X(cu, Y, cw)
402- let cy = valueOrErrorMessage(getInteger(M, cx), "Empty poolMakerLiquidityRequestKey at factory acc")
403- if (isDefined(getInteger(this, cx)))
382+ let cv = X(cs, Y, cu)
383+ let cw = valueOrErrorMessage(getInteger(M, cv), "Empty poolMakerLiquidityRequestKey at factory acc")
384+ if (isDefined(getInteger(this, cv)))
404385 then throw("Liquidity request has been already fulfilled")
405- else [IntegerEntry(cx, cy), ScriptTransfer(M, cy, aD)]
386+ else [IntegerEntry(cv, cw), ScriptTransfer(M, cw, aI)]
406387 }
407388 }
408389
409390
410-@Verifier(cz)
411-func cA () = {
412- let cB = cz
413- if ($isInstanceOf(cB, "InvokeScriptTransaction"))
391+@Verifier(cx)
392+func cy () = {
393+ let cz = cx
394+ if ($isInstanceOf(cz, "InvokeScriptTransaction"))
414395 then {
415- let cC = cB
416- if ((cC.fee > (900 * 1000)))
417- then throw(("fee amount is greater than max allowed: " + toString(cC.fee)))
418- else if (isDefined(cC.feeAssetId))
396+ let cA = cz
397+ if ((cA.fee > (900 * 1000)))
398+ then throw(("fee amount is greater than max allowed: " + toString(cA.fee)))
399+ else if (isDefined(cA.feeAssetId))
419400 then throw("only Waves is allowed as feeAssetId")
420- else if ((cC.function == "rebalanceDebts"))
401+ else if ((cA.function == "rebalanceDebts"))
421402 then {
422- let cD = toString(addressFromRecipient(cC.dApp))
423- if ((ac(cD)[ai] != "ISSUED"))
403+ let cB = toString(addressFromRecipient(cA.dApp))
404+ if ((ac(cB)[ai] != "ISSUED"))
424405 then throw("only defo dapp is allowed")
425- else if ((cD == toString(this)))
406+ else if ((cB == toString(this)))
426407 then throw("impossible to call self rebealnceDebt")
427408 else true
428409 }
429- else if (if (if ((cC.function == "lockNeutrino"))
410+ else if (if (if ((cA.function == "lockNeutrino"))
430411 then true
431- else (cC.function == "lockNeutrinoSP"))
412+ else (cA.function == "lockNeutrinoSP"))
432413 then true
433- else (cC.function == "unlockNeutrino"))
434- then if ((toString(bg) != toString(addressFromRecipient(cC.dApp))))
414+ else (cA.function == "unlockNeutrino"))
415+ then if ((toString(bq) != toString(addressFromRecipient(cA.dApp))))
435416 then throw("invalid neutrino staking dapp address")
436- else sigVerify(cz.bodyBytes, cz.proofs[0], af())
417+ else sigVerify(cx.bodyBytes, cx.proofs[0], af())
437418 else throw("Not allowed invocation method calls")
438419 }
439- else sigVerify(cz.bodyBytes, cz.proofs[0], cz.senderPublicKey)
420+ else sigVerify(cx.bodyBytes, cx.proofs[0], cx.senderPublicKey)
440421 }
441422

github/deemru/w8io/873ac7e 
118.76 ms