tx · 6sheZFMRfTAE9enRiTfug2UpBoQpdUaLgzJuhRvvmHpY

3MyLfEjWaZMZ3afgDYCf8g7pHexXEkPXffc:  -0.01400000 Waves

2021.04.15 16:33 [1483626] smart account 3MyLfEjWaZMZ3afgDYCf8g7pHexXEkPXffc > SELF 0.00000000 Waves

{ "type": 13, "id": "6sheZFMRfTAE9enRiTfug2UpBoQpdUaLgzJuhRvvmHpY", "fee": 1400000, "feeAssetId": null, "timestamp": 1618493639534, "version": 1, "sender": "3MyLfEjWaZMZ3afgDYCf8g7pHexXEkPXffc", "senderPublicKey": "DoeRC9WSwJNdJzQYBEDUB3g6ZcE95e6PjGqwV3q7JNMF", "proofs": [ "WJM14kmo2mJt1MkNed3DvWNX73rem5srTJFjgZfhBuy7bpsqYQJNZGWBVMpKmiLm4bedmQYiGAwPvvBNxiHHqQn" ], "script": "base64:AAIEAAAAAAAAABMIAhIAEgASBAoCCAgSABIDCgEIAAAAdwEAAAARa2V5QWNjdW11bGF0ZWRGZWUAAAAAAgAAABIlc19fYWNjdW11bGF0ZWRGZWUBAAAAGWtleUFjY3VtdWxhdGVkUHJvdG9jb2xGZWUAAAAAAgAAABolc19fYWNjdW11bGF0ZWRQcm90b2NvbEZlZQEAAAAOa2V5VWNvbGxhdGVyYWwAAAAAAgAAAA8lc19fdWNvbGxhdGVyYWwBAAAAGWtleVRvdGFsTGVuZGVkQXRPdGhlckFjY3MAAAAAAgAAABolc19fdG90YWxMZW5kZWRBdE90aGVyQWNjcwEAAAATa2V5QXNzZXRMb2NrZWRUb3RhbAAAAAEAAAAHYXNzZXRJZAkAASwAAAACAgAAABglcyVzX19hc3NldExvY2tlZFRvdGFsX18FAAAAB2Fzc2V0SWQBAAAAE2tleUFjY291bnRPcGVyYXRpb24AAAADAAAADHVubG9ja0hlaWdodAAAAAdhZGRyZXNzAAAABnN0YXR1cwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAHiVzJXMlZCVzX19kZWZvQXNzZXRPcGVyYXRpb25fXwUAAAAHYWRkcmVzcwIAAAACX18JAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAAAJfXwUAAAAGc3RhdHVzAQAAAAprZXlGYWN0b3J5AAAAAAIAAAALJXNfX2ZhY3RvcnkBAAAAGmtleUxlbmRlZEFtb3VudEJ5QXNzZXRDb2RlAAAAAQAAAAlhc3NldENvZGUJAAEsAAAAAgIAAAAdJXMlc19fbGVuZGVkQmFzZUFzc2V0QW1vdW50X18FAAAACWFzc2V0Q29kZQEAAAAIa2V5UHJpY2UAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAAA0lcyVzX19wcmljZV9fBQAAAAlhc3NldENvZGUBAAAAFGtleUNvbnRyb2xMYXN0SGVpZ2h0AAAAAQAAAAlhc3NldENvZGUJAAEsAAAAAgIAAAASJXMlc19fbGFzdEhlaWdodF9fBQAAAAlhc3NldENvZGUAAAAAFElkeE9wZXJhdGlvbkFtb3VudEluAAAAAAAAAAABAAAAABNJZHhPcGVyYXRpb25Bc3NldEluAAAAAAAAAAACAAAAABFJZHhPcGVyYXRpb25QcmljZQAAAAAAAAAAAwAAAAAVSWR4T3BlcmF0aW9uQW1vdW50T3V0AAAAAAAAAAAEAAAAABRJZHhPcGVyYXRpb25Bc3NldE91dAAAAAAAAAAABQEAAAAWYXNzZXREYXRhU3dhcE9wZXJhdGlvbgAAAAgAAAAIYW1vdW50SW4AAAAHYXNzZXRJbgAAAAVwcmljZQAAAAlhbW91bnRPdXQAAAAIYXNzZXRPdXQAAAAMYnJ1dHRvQW1vdW50AAAACWZlZUFtb3VudAAAABFwcm90b2NvbEZlZUFtb3VudAkABLkAAAACCQAETAAAAAICAAAAECVkJXMlZCVzJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAhhbW91bnRJbgkABEwAAAACBQAAAAdhc3NldEluCQAETAAAAAIJAAGkAAAAAQUAAAAJYW1vdW50T3V0CQAETAAAAAIFAAAACGFzc2V0T3V0CQAETAAAAAIJAAGkAAAAAQUAAAAFcHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAAxicnV0dG9BbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAAlmZWVBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAABFwcm90b2NvbEZlZUFtb3VudAUAAAADbmlsAgAAAAJfXwEAAAAXYXNzZXREYXRhUmViYWxhbmNlVHJhY2UAAAAFAAAAD2RlYnRvckFzc2V0Q29kZQAAAAdkZWJ0UG10AAAAB2Jhc2VQbXQAAAAPbGVuZGVkQW10QmVmb3JlAAAADmxlbmRlZEFtdEFmdGVyCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVkJXMlZCVkJWQJAARMAAAAAgUAAAAPZGVidG9yQXNzZXRDb2RlCQAETAAAAAIJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAB2RlYnRQbXQAAAAHYXNzZXRJZAkABEwAAAACCQABpAAAAAEIBQAAAAdkZWJ0UG10AAAABmFtb3VudAkABEwAAAACCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdiYXNlUG10AAAAB2Fzc2V0SWQJAARMAAAAAgkAAaQAAAABCAUAAAAHYmFzZVBtdAAAAAZhbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA9sZW5kZWRBbXRCZWZvcmUJAARMAAAAAgkAAaQAAAABBQAAAA5sZW5kZWRBbXRBZnRlcgUAAAADbmlsAgAAAAJfXwEAAAAcYXNzZXRSZWFkU3dhcERhdGFBcnJheU9yRmFpbAAAAAEAAAAPYWNjT3BlcmF0aW9uS2V5BAAAABNhY2NPcGVyYXRpb25EYXRhU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAPYWNjT3BlcmF0aW9uS2V5CQABLAAAAAICAAAAKlRoZXJlIGlzIG5vIHJlcXVlc3QgZm9yIHBhc3NlZCBhcmd1bWVudHM6IAUAAAAPYWNjT3BlcmF0aW9uS2V5CQAEtQAAAAIFAAAAE2FjY09wZXJhdGlvbkRhdGFTdHICAAAAAl9fAAAAAAdudWxsSW50AP//////////AAAAAAdudWxsU3RyAgAAAAROVUxMAAAAAApmYWN0b3J5QWNjCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAACmtleUZhY3RvcnkAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJObyBjb25maWcgYXQgdGhpcz0JAAQlAAAAAQUAAAAEdGhpcwIAAAAJIGZvciBrZXk9CQEAAAAKa2V5RmFjdG9yeQAAAAABAAAAJGtleUZhY3RvcnlOZXV0cmlub0NvbnRyYWN0QWRkcmVzc0tleQAAAAACAAAAKyVzJXNfX2NvbW1vbkNvbmZpZ19fbmV1dHJpbm9Db250cmFjdEFkZHJlc3MBAAAAFWtleUZhY3RvcnlEZWJ0QXNzZXRJZAAAAAACAAAAHyVzJXNfX2NvbW1vbkNvbmZpZ19fZGVidEFzc2V0SWQBAAAAIGtleUZhY3RvcnlEZWJ0QXNzZXRFdGFsb25CYWxhbmNlAAAAAAIAAAAqJXMlc19fY29tbW9uQ29uZmlnX19kZWJ0QXNzZXRFdGFsb25CYWxhbmNlAQAAABJrZXlGYWN0b3J5QXNzZXRDZmcAAAABAAAAD2Fzc2V0QWRkcmVzc1N0cgkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAAD2Fzc2V0QWRkcmVzc1N0cgIAAAAIX19jb25maWcBAAAAGmtleUZhY3RvcnlBc3NldEN1cnJlbnRQb29sAAAAAQAAAA9hc3NldEFjY0FkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fCQAEJQAAAAEFAAAAD2Fzc2V0QWNjQWRkcmVzcwIAAAANX19jdXJyZW50UG9vbAEAAAAga2V5RmFjdG9yeURlZm9BZGRyZXNzQnlBc3NldENvZGUAAAABAAAACWFzc2V0Q29kZQkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAACWFzc2V0Q29kZQIAAAAUX19hZGRyZXNzQnlBc3NldENvZGUBAAAAGWtleUZhY3RvcnlBc3NldFBvb2xNYWtlcnMAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAADGFzc2V0QWRkcmVzcwIAAAAMX19wb29sTWFrZXJzAQAAACFrZXlGYWN0b3J5RGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIAAAAAAgAAACslcyVzX19jb21tb25Db25maWdfX2RlZm9TdGFraW5nUGFjZW1ha2VyUHViAQAAACNrZXlGYWN0b3J5UG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdAAAAAMAAAAMYXNzZXRBZGRyZXNzAAAAEHBvb2xNYWtlckFkZHJlc3MAAAABaAkABLkAAAACCQAETAAAAAICAAAAECVzJXMlcyVkJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgkAAaQAAAABBQAAAAFoCQAETAAAAAICAAAAEGxpcXVpZGl0eVJlcXVlc3QFAAAAA25pbAIAAAACX18BAAAAH2tleUZhY3RvcnlQb29sTWFrZXJVbmxvY2tIZWlnaHQAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAOJXMlcyVzJXNfX3Bvb2wJAARMAAAAAgUAAAAMYXNzZXRBZGRyZXNzCQAETAAAAAIFAAAAEHBvb2xNYWtlckFkZHJlc3MJAARMAAAAAgIAAAAMdW5sb2NrSGVpZ2h0BQAAAANuaWwCAAAAAl9fAQAAABZmYWN0b3J5UmVhZERlYnRBc3NldElkAAAAAAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACmZhY3RvcnlBY2MJAQAAABVrZXlGYWN0b3J5RGVidEFzc2V0SWQAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABVObyBjb25maWcgYXQgZmFjdG9yeT0JAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9CQEAAAAVa2V5RmFjdG9yeURlYnRBc3NldElkAAAAAAEAAAAcZmFjdG9yeVJlYWRBc3NldENmZ0J5QWRkcmVzcwAAAAEAAAAPYXNzZXRBZGRyZXNzU3RyCQAEtQAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAASa2V5RmFjdG9yeUFzc2V0Q2ZnAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABVObyBjb25maWcgYXQgZmFjdG9yeT0JAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9CQEAAAASa2V5RmFjdG9yeUFzc2V0Q2ZnAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAgAAAAJfXwEAAAAZZmFjdG9yeVJlYWRBc3NldENmZ0J5Q29kZQAAAAEAAAAJYXNzZXRDb2RlBAAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAAga2V5RmFjdG9yeURlZm9BZGRyZXNzQnlBc3NldENvZGUAAAABBQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFU5vIGNvbmZpZyBhdCBmYWN0b3J5PQkABCUAAAABBQAAAApmYWN0b3J5QWNjAgAAAAkgZm9yIGtleT0JAQAAACBrZXlGYWN0b3J5RGVmb0FkZHJlc3NCeUFzc2V0Q29kZQAAAAEFAAAACWFzc2V0Q29kZQkABRQAAAACBQAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABxmYWN0b3J5UmVhZEFzc2V0Q2ZnQnlBZGRyZXNzAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAQAAACdmYWN0b3J5UmVhZE5leHRQb29sTWFrZXJUb0Rpc3RyaWJ1dGVGZWUAAAABAAAAD2Fzc2V0QWRkcmVzc1N0cgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM01zYkZNc3R3bTNGSFBKWG1NZlRneWF3N3pRcnBaZmt3bngBAAAAImZhY3RvcnlSZWFkRGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIAAAAACQACWQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAAha2V5RmFjdG9yeURlZm9TdGFraW5nUGFjZW1ha2VyUHViAAAAAAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAVTm8gY29uZmlnIGF0IGZhY3Rvcnk9CQAEJQAAAAEFAAAACmZhY3RvcnlBY2MCAAAACSBmb3Iga2V5PQkBAAAAIWtleUZhY3RvcnlEZWZvU3Rha2luZ1BhY2VtYWtlclB1YgAAAAAAAAAAEElkeERlZm9Bc3NldENvZGUAAAAAAAAAAAEAAAAADklkeERlZm9Bc3NldElkAAAAAAAAAAACAAAAABJJZHhEZWZvQXNzZXRTdGF0dXMAAAAAAAAAAAMAAAAAEElkeFByaWNlRGVjaW1hbHMAAAAAAAAAAAQAAAAADklkeEJhc2VBc3NldElkAAAAAAAAAAAFAAAAABhJZHhPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAAAAAAAAAYAAAAADklkeE1pbkluaXRQb29sAAAAAAAAAAAHAAAAABVJZHhQcmljZU9yYWNsZUFkZHJlc3MAAAAAAAAAAAgAAAAAEElkeE1pbkJ1eVBheW1lbnQAAAAAAAAAAAkAAAAAEUlkeE1pblNlbGxQYXltZW50AAAAAAAAAAAKAAAAABJJZHhCdXlMb2NrSW50ZXJ2YWwAAAAAAAAAAAsAAAAAE0lkeFNlbGxMb2NrSW50ZXJ2YWwAAAAAAAAAAAwAAAAAEElkeEJ1eUZlZVBlcmNlbnQAAAAAAAAAAA0AAAAAEUlkeFNlbGxGZWVQZXJjZW50AAAAAAAAAAAOAAAAABhJZHhQb29sUmVkZW1wdGlvblRpbWVvdXQAAAAAAAAAAA8AAAAAIUlkeFdlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAAAAAAAAAAAEAAAAAAYSWR4QXNzZXRBY2NvdW50UHVibGljU3RyAAAAAAAAAAARAAAAACBJZHhBc3NldFN0YWtpbmdSZWZlcnJhbFB1YmxpY1N0cgAAAAAAAAAAEgAAAAAbSWR4Q3Jvc3NFeGNoYW5nZUNvZWZmaWNpZW50AAAAAAAAAAATAAAAACNJZHhTdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudAAAAAAAAAAAFAAAAAAXSWR4UG9vbFN0YWJpbGl0eUZlZVBhcnQAAAAAAAAAABUAAAAAFUlkeFByb3RvY29sRmVlUGVyY2VudAAAAAAAAAAAFgAAAAAMdGhpc0NmZ0FycmF5CQEAAAAcZmFjdG9yeVJlYWRBc3NldENmZ0J5QWRkcmVzcwAAAAEJAAQlAAAAAQUAAAAEdGhpcwAAAAANZGVmb0Fzc2V0Q29kZQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAEElkeERlZm9Bc3NldENvZGUAAAAADmRlZm9Bc3NldElkU3RyCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAOSWR4RGVmb0Fzc2V0SWQAAAAAC2RlZm9Bc3NldElkCQACWQAAAAEFAAAADmRlZm9Bc3NldElkU3RyAAAAAA5wcmljZU9yYWNsZUFjYwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAFUlkeFByaWNlT3JhY2xlQWRkcmVzcwAAAAAVb3ZlckNvbGxhdGVyYWxQZXJjZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABhJZHhPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAAADmJhc2VBc3NldElkU3RyCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAOSWR4QmFzZUFzc2V0SWQAAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADmJhc2VBc3NldElkU3RyAAAAAA1wcmljZURlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABBJZHhQcmljZURlY2ltYWxzAAAAABFtaW5CYXNpY0J1eUFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAQSWR4TWluQnV5UGF5bWVudAAAAAASbWluU3ludGhTZWxsQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABFJZHhNaW5TZWxsUGF5bWVudAAAAAAPYnV5TG9ja0ludGVydmFsCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABJJZHhCdXlMb2NrSW50ZXJ2YWwAAAAAEHNlbGxMb2NrSW50ZXJ2YWwJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAE0lkeFNlbGxMb2NrSW50ZXJ2YWwAAAAADWJ1eUZlZVBlcmNlbnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAEElkeEJ1eUZlZVBlcmNlbnQAAAAADnNlbGxGZWVQZXJjZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABFJZHhTZWxsRmVlUGVyY2VudAAAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAACFJZHhXZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAAAFWFzc2V0QWNjb3VudFB1YmxpY1N0cgkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAGElkeEFzc2V0QWNjb3VudFB1YmxpY1N0cgAAAAAdYXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWNTdHIJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAACBJZHhBc3NldFN0YWtpbmdSZWZlcnJhbFB1YmxpY1N0cgAAAAAYY3Jvc3NFeGNoYW5nZUNvZWZmaWNpZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABtJZHhDcm9zc0V4Y2hhbmdlQ29lZmZpY2llbnQAAAAAIHN0YWtpbmdNaW5BbXRGcm9tU2VsbENvZWZmaWNpZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAACNJZHhTdGFraW5nTWluQW10RnJvbVNlbGxDb2VmZmljaWVudAAAAAAUcG9vbFN0YWJpbGl0eUZlZVBhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAF0lkeFBvb2xTdGFiaWxpdHlGZWVQYXJ0AAAAABJwcm90b2NvbEZlZVBlcmNlbnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAFUlkeFByb3RvY29sRmVlUGVyY2VudAEAAAAMa2V5SXNCbG9ja2VkAAAAAAIAAAANJXNfX2lzQmxvY2tlZAEAAAARa2V5SXNNYXJrZXRPcGVuZWQAAAABAAAACWFzc2V0Q29kZQkAASwAAAACAgAAABYlcyVzX19pc01hcmtldE9wZW5lZF9fBQAAAAlhc3NldENvZGUAAAAACWlzQmxvY2tlZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA5wcmljZU9yYWNsZUFjYwkBAAAADGtleUlzQmxvY2tlZAAAAAAHAAAAAA5pc01hcmtldE9wZW5lZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAA5wcmljZU9yYWNsZUFjYwkBAAAAEWtleUlzTWFya2V0T3BlbmVkAAAAAQUAAAANZGVmb0Fzc2V0Q29kZQcBAAAAE2NvbnRyb2xBY2NSZWFkUHJpY2UAAAABAAAACWFzc2V0Q29kZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADnByaWNlT3JhY2xlQWNjCQEAAAAIa2V5UHJpY2UAAAABBQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGE5vIHByaWNlIGF0IHByaWNlT3JhY2xlPQkABCUAAAABBQAAAA5wcmljZU9yYWNsZUFjYwIAAAAJIGZvciBrZXk9CQEAAAAIa2V5UHJpY2UAAAABBQAAAAlhc3NldENvZGUBAAAAGGNvbnRyb2xBY2NSZWFkTGFzdEhlaWdodAAAAAEAAAAJYXNzZXRDb2RlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOcHJpY2VPcmFjbGVBY2MJAQAAABRrZXlDb250cm9sTGFzdEhlaWdodAAAAAEFAAAACWFzc2V0Q29kZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdTm8gbGFzdEhlaWdodCBhdCBwcmljZU9yYWNsZT0JAAQlAAAAAQUAAAAOcHJpY2VPcmFjbGVBY2MCAAAACSBmb3Iga2V5PQkBAAAAFGtleUNvbnRyb2xMYXN0SGVpZ2h0AAAAAQUAAAAJYXNzZXRDb2RlAQAAABtjb250cm9sQWNjUmVhZEN1cnJJZHhPckZhaWwAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOcHJpY2VPcmFjbGVBY2MCAAAAB2N1cnJJZHgJAAEsAAAAAgIAAAAZTm8gY3VycklkeCBhdCBjb250cm9sQWNjPQkABCUAAAABBQAAAA5wcmljZU9yYWNsZUFjYwEAAAAXY29udHJvbEFjY1JlYWRJZHhIZWlnaHQAAAABAAAAA2lkeAQAAAAMaWR4SGVpZ2h0S2V5CQABLAAAAAICAAAACmlkeEhlaWdodF8JAAGkAAAAAQUAAAADaWR4CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADnByaWNlT3JhY2xlQWNjBQAAAAxpZHhIZWlnaHRLZXkAAAAAAAAAAAABAAAAG2NvbnRyb2xBY2NSZWFkUHJpY2VCeUhlaWdodAAAAAEAAAALcHJpY2VIZWlnaHQEAAAAEHByaWNlQnlIZWlnaHRLZXkJAAEsAAAAAgIAAAAGcHJpY2VfCQABpAAAAAEFAAAAC3ByaWNlSGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAOcHJpY2VPcmFjbGVBY2MFAAAAEHByaWNlQnlIZWlnaHRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAA05vIAUAAAAQcHJpY2VCeUhlaWdodEtleQIAAAAPIGF0IGNvbnRyb2xBY2M9CQAEJQAAAAEFAAAADnByaWNlT3JhY2xlQWNjAAAAAA9wcmljZUxhc3RIZWlnaHQJAQAAABhjb250cm9sQWNjUmVhZExhc3RIZWlnaHQAAAABBQAAAA1kZWZvQXNzZXRDb2RlAAAAABVpc0Jsb2NrZWRCeUxhc3RIZWlnaHQJAABmAAAAAgkAAGUAAAACBQAAAA9wcmljZUxhc3RIZWlnaHQFAAAAD3ByaWNlTGFzdEhlaWdodAAAAAAAAAAABQEAAAAYa2V5RmVlc01hbmFnZXJBZGRyZXNzS2V5AAAAAAIAAAAUZmVlc19tYW5hZ2VyX2FkZHJlc3MAAAAAD25ldXRyaW5vTWFpbkFjYwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACmZhY3RvcnlBY2MJAQAAACRrZXlGYWN0b3J5TmV1dHJpbm9Db250cmFjdEFkZHJlc3NLZXkAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABVObyBjb25maWcgYXQgZmFjdG9yeT0JAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9CQEAAAAka2V5RmFjdG9yeU5ldXRyaW5vQ29udHJhY3RBZGRyZXNzS2V5AAAAAAAAAAARZmVlTWFuYWdlckFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPbmV1dHJpbm9NYWluQWNjCQEAAAAYa2V5RmVlc01hbmFnZXJBZGRyZXNzS2V5AAAAAAkAASwAAAACCQEAAAAYa2V5RmVlc01hbmFnZXJBZGRyZXNzS2V5AAAAAAIAAAARIGlzIG5vdCBzcGVjaWZpZWQJAAEsAAAAAgkBAAAAGGtleUZlZXNNYW5hZ2VyQWRkcmVzc0tleQAAAAACAAAAFyBpbnZhbGlkIGFkZHJlc3MgZm9ybWF0AAAAABVrZXlEZWZvU3Rha2luZ0FkZHJlc3MCAAAAJiVzJXNfX2NvbW1vbkNvbmZpZ19fZGVmb1N0YWtpbmdBZGRyZXNzAAAAABlrZXlOZXV0cmlub1N0YWtpbmdBZGRyZXNzAgAAAColcyVzX19jb21tb25Db25maWdfX25ldXRyaW5vU3Rha2luZ0FkZHJlc3MBAAAAGmtleURlZm9TdGFraW5nQXNzZXRCYWxhbmNlAAAAAQAAAAdhc3NldElkCQABLAAAAAICAAAAFiVzJXNfX3N0YWtpbmdCYWxhbmNlX18FAAAAB2Fzc2V0SWQBAAAAGWtleU5ldXRyaW5vU3Rha2luZ0JhbGFuY2UAAAAACQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxycGRfYmFsYW5jZV8FAAAADmJhc2VBc3NldElkU3RyAgAAAAFfCQAEJQAAAAEFAAAABHRoaXMAAAAADmRlZm9TdGFraW5nQWNjCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAACmZhY3RvcnlBY2MFAAAAFWtleURlZm9TdGFraW5nQWRkcmVzcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXTm8gY29uZmlnIGF0IGZhY3RvcnlBY2MJAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9BQAAABVrZXlEZWZvU3Rha2luZ0FkZHJlc3MJAAEsAAAAAgIAAAAhYWRkcmVzcyBleHRyYWN0aW9uIGVycm9yIGZvciBrZXk9BQAAABVrZXlEZWZvU3Rha2luZ0FkZHJlc3MAAAAAEm5ldXRyaW5vU3Rha2luZ0FjYwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjBQAAABlrZXlOZXV0cmlub1N0YWtpbmdBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABdObyBjb25maWcgYXQgZmFjdG9yeUFjYwkABCUAAAABBQAAAApmYWN0b3J5QWNjAgAAAAkgZm9yIGtleT0FAAAAGWtleU5ldXRyaW5vU3Rha2luZ0FkZHJlc3MJAAEsAAAAAgIAAAAhYWRkcmVzcyBleHRyYWN0aW9uIGVycm9yIGZvciBrZXk9BQAAABlrZXlOZXV0cmlub1N0YWtpbmdBZGRyZXNzAQAAABlnZXRUaGlzRGVmb1N0YWtpbmdCYWxhbmNlAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAA5kZWZvU3Rha2luZ0FjYwkBAAAAGmtleURlZm9TdGFraW5nQXNzZXRCYWxhbmNlAAAAAQUAAAAOZGVmb0Fzc2V0SWRTdHIAAAAAAAAAAAABAAAAHWdldFRoaXNOZXV0cmlub1N0YWtpbmdCYWxhbmNlAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAABJuZXV0cmlub1N0YWtpbmdBY2MJAQAAABlrZXlOZXV0cmlub1N0YWtpbmdCYWxhbmNlAAAAAAAAAAAAAAAAAAAAAAALdWNvbGxhdGVyYWwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAADmtleVVjb2xsYXRlcmFsAAAAAAAAAAAAAAAAAAAAAAAOYWNjdW11bGF0ZWRGZWUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEWtleUFjY3VtdWxhdGVkRmVlAAAAAAAAAAAAAAAAAAAAAAAWYWNjdW11bGF0ZWRQcm90b2NvbEZlZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAZa2V5QWNjdW11bGF0ZWRQcm90b2NvbEZlZQAAAAAAAAAAAAAAAAAAAAAADmN1cnJQb29sQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAApmYWN0b3J5QWNjCQEAAAAaa2V5RmFjdG9yeUFzc2V0Q3VycmVudFBvb2wAAAABBQAAAAR0aGlzAAAAAAtkZWJ0QXNzZXRJZAkAAlkAAAABCQEAAAAWZmFjdG9yeVJlYWREZWJ0QXNzZXRJZAAAAAAAAAAAFmRlYnRBc3NldEV0YWxvbkJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAACmZhY3RvcnlBY2MJAQAAACBrZXlGYWN0b3J5RGVidEFzc2V0RXRhbG9uQmFsYW5jZQAAAAAAAAAAEmxlbmRlZE9yRGVidEFtb3VudAkAAGUAAAACBQAAABZkZWJ0QXNzZXRFdGFsb25CYWxhbmNlCQAD8AAAAAIFAAAABHRoaXMFAAAAC2RlYnRBc3NldElkAAAAABdjdXJyZW50QmFzZUFzc2V0QmFsYW5jZQkAAGQAAAACCQAAZAAAAAIJAAPwAAAAAgUAAAAEdGhpcwUAAAALYmFzZUFzc2V0SWQJAQAAAB1nZXRUaGlzTmV1dHJpbm9TdGFraW5nQmFsYW5jZQAAAAAFAAAAEmxlbmRlZE9yRGVidEFtb3VudAAAAAAMY29udHJvbFByaWNlCQEAAAATY29udHJvbEFjY1JlYWRQcmljZQAAAAEJAAGRAAAAAgUAAAAMdGhpc0NmZ0FycmF5BQAAABBJZHhEZWZvQXNzZXRDb2RlAAAAAAhlbWlzc2lvbgkAAGUAAAACCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAtkZWZvQXNzZXRJZAAAAAhxdWFudGl0eQkAA/AAAAACBQAAAAR0aGlzBQAAAAtkZWZvQXNzZXRJZAEAAAALZ2V0QnV5UHJpY2UAAAABAAAAC2NoYW5nZUNvZWZmAwUAAAAOaXNNYXJrZXRPcGVuZWQFAAAADGNvbnRyb2xQcmljZQkAAGsAAAADCQAAZQAAAAIFAAAADXByaWNlRGVjaW1hbHMFAAAAC2NoYW5nZUNvZWZmBQAAAAxjb250cm9sUHJpY2UFAAAADXByaWNlRGVjaW1hbHMBAAAAI2dldEJ1eUZlZUNvbnNpZGVyaW5nU3Rha2luZ1JlZmVycmFsAAAAAQAAAA5jYWxsZXJQdWI1OFN0cgMJAAAAAAAAAgUAAAAdYXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWNTdHIFAAAADmNhbGxlclB1YjU4U3RyAAAAAAAAAAAABQAAAA1idXlGZWVQZXJjZW50AQAAAChnZXRQcm90b2NvbEZlZUNvbnNpZGVyaW5nU3Rha2luZ1JlZmVycmFsAAAAAQAAAA5jYWxsZXJQdWI1OFN0cgMJAAAAAAAAAgUAAAAdYXNzZXRTdGFraW5nUmVmZXJyYWxQdWJsaWNTdHIFAAAADmNhbGxlclB1YjU4U3RyAAAAAAAAAAAABQAAABJwcm90b2NvbEZlZVBlcmNlbnQBAAAAJWdldEJ1eVByaWNlQ29uc2lkZXJpbmdTdGFraW5nUmVmZXJyYWwAAAACAAAAC2NoYW5nZUNvZWZmAAAADmNhbGxlclB1YjU4U3RyAwkAAAAAAAACBQAAAB1hc3NldFN0YWtpbmdSZWZlcnJhbFB1YmxpY1N0cgUAAAAOY2FsbGVyUHViNThTdHIFAAAADGNvbnRyb2xQcmljZQkBAAAAC2dldEJ1eVByaWNlAAAAAQUAAAALY2hhbmdlQ29lZmYBAAAADGdldFNlbGxQcmljZQAAAAEAAAALY2hhbmdlQ29lZmYDBQAAAA5pc01hcmtldE9wZW5lZAUAAAAMY29udHJvbFByaWNlCQAAawAAAAMJAABkAAAAAgUAAAANcHJpY2VEZWNpbWFscwUAAAALY2hhbmdlQ29lZmYFAAAADGNvbnRyb2xQcmljZQUAAAANcHJpY2VEZWNpbWFscwEAAAAQZ2V0U2VsbFByaWNlRnJvbQAAAAIAAAAJZnJvbVByaWNlAAAAC2NoYW5nZUNvZWZmAwUAAAAOaXNNYXJrZXRPcGVuZWQFAAAACWZyb21QcmljZQkAAGsAAAADCQAAZAAAAAIFAAAADXByaWNlRGVjaW1hbHMFAAAAC2NoYW5nZUNvZWZmBQAAAAlmcm9tUHJpY2UFAAAADXByaWNlRGVjaW1hbHMBAAAAEGludGVybmFsQnV5QXNzZXQAAAAHAAAACnNlbGxlckFkZHIAAAAHc2VsbEFtdAAAAAtzZWxsQXNzZXRJZAAAAAptaW5TZWxsQW10AAAADWJ1eTJzZWxsUHJpY2UAAAARcG9vbE1ha2Vyc0ZlZVBhcnQAAAAPcHJvdG9jb2xGZWVQYXJ0BAAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwkAAGsAAAADBQAAAAdzZWxsQW10BQAAAA1idXkyc2VsbFByaWNlBQAAAA1wcmljZURlY2ltYWxzBAAAABZzdGFiaWxpdHlGZWVEZWZvQW1vdW50CQAAawAAAAMFAAAAFHBvb2xTdGFiaWxpdHlGZWVQYXJ0BQAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwUAAAANcHJpY2VEZWNpbWFscwQAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQJAABrAAAAAwUAAAARcG9vbE1ha2Vyc0ZlZVBhcnQFAAAAFGRlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBAAAABVwcm90b2NvbEZlZURlZm9BbW91bnQJAABrAAAAAwUAAAAPcHJvdG9jb2xGZWVQYXJ0BQAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwUAAAANcHJpY2VEZWNpbWFscwQAAAAPZGVmb0Fzc2V0QW1vdW50CQAAZQAAAAIJAABlAAAAAgkAAGUAAAACBQAAABRkZWZvQXNzZXRBbW91bnRHcm9zcwUAAAAWc3RhYmlsaXR5RmVlRGVmb0Ftb3VudAUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQFAAAAFXByb3RvY29sRmVlRGVmb0Ftb3VudAQAAAAYcmVxdWlyZWRCYXNpY0Fzc2V0QW1vdW50CQAAawAAAAMFAAAAFGRlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBQAAAA1idXkyc2VsbFByaWNlBAAAAAZjaGFuZ2UJAABlAAAAAgUAAAAHc2VsbEFtdAUAAAAYcmVxdWlyZWRCYXNpY0Fzc2V0QW1vdW50AwMJAABmAAAAAgUAAAAKbWluU2VsbEFtdAUAAAAHc2VsbEFtdAkBAAAAAiE9AAAAAgkABCUAAAABBQAAAApzZWxsZXJBZGRyCQAEJQAAAAEFAAAADmRlZm9TdGFraW5nQWNjBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAYaW1wb3NzaWJsZSB0byBpc3N1ZSBuZXcgBQAAAA1kZWZvQXNzZXRDb2RlAgAAAAo6IHBheW1lbnQ9CQABpAAAAAEFAAAAB3NlbGxBbXQCAAAAGGlzIGxlc3MgdGhlbiBtaW4gYW1vdW50PQkAAaQAAAABBQAAAAptaW5TZWxsQW10CQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA5rZXlVY29sbGF0ZXJhbAAAAAAJAABkAAAAAgUAAAALdWNvbGxhdGVyYWwFAAAAGHJlcXVpcmVkQmFzaWNBc3NldEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5QWNjb3VudE9wZXJhdGlvbgAAAAMFAAAABmhlaWdodAkABCUAAAABBQAAAApzZWxsZXJBZGRyAgAAAAhGSU5JU0hFRAkBAAAAFmFzc2V0RGF0YVN3YXBPcGVyYXRpb24AAAAIBQAAAAdzZWxsQW10CQACWAAAAAEFAAAAC3NlbGxBc3NldElkBQAAAAxjb250cm9sUHJpY2UFAAAAD2RlZm9Bc3NldEFtb3VudAkAAlgAAAABBQAAAAtkZWZvQXNzZXRJZAUAAAAUZGVmb0Fzc2V0QW1vdW50R3Jvc3MFAAAAF3Bvb2xNYWtlcnNGZWVEZWZvQW1vdW50BQAAABVwcm90b2NvbEZlZURlZm9BbW91bnQJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAtkZWZvQXNzZXRJZAkAAGQAAAACCQAAZAAAAAIFAAAAD2RlZm9Bc3NldEFtb3VudAUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQFAAAAFXByb3RvY29sRmVlRGVmb0Ftb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAKc2VsbGVyQWRkcgUAAAAPZGVmb0Fzc2V0QW1vdW50BQAAAAtkZWZvQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAApzZWxsZXJBZGRyBQAAAAZjaGFuZ2UFAAAAC3NlbGxBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAACdmYWN0b3J5UmVhZE5leHRQb29sTWFrZXJUb0Rpc3RyaWJ1dGVGZWUAAAABCQAEJQAAAAEFAAAABHRoaXMFAAAAF3Bvb2xNYWtlcnNGZWVEZWZvQW1vdW50BQAAAAtkZWZvQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFmZWVNYW5hZ2VyQWRkcmVzcwUAAAAVcHJvdG9jb2xGZWVEZWZvQW1vdW50BQAAAAtkZWZvQXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWtleUFjY3VtdWxhdGVkRmVlAAAAAAkAAGQAAAACBQAAAA5hY2N1bXVsYXRlZEZlZQUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlrZXlBY2N1bXVsYXRlZFByb3RvY29sRmVlAAAAAAkAAGQAAAACBQAAABZhY2N1bXVsYXRlZFByb3RvY29sRmVlBQAAABVwcm90b2NvbEZlZURlZm9BbW91bnQFAAAAA25pbAUAAAAGY2hhbmdlAAAABQAAAAFpAQAAAAhidXlBc3NldAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAKcG10QXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA5jYWxsZXJQdWI1OFN0cgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwUAAAAVaXNCbG9ja2VkQnlMYXN0SGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAASWxhc3QgcHJpY2UgZmluYWxpemF0aW9uIGhhcyBiZWVuIG1vcmUgdGhlbiA1IGJsb2NrcyBhZ286IHByaWNlTGFzdEhlaWdodD0JAAGkAAAAAQUAAAAPcHJpY2VMYXN0SGVpZ2h0AgAAAAwgY3VyckhlaWdodD0JAAGkAAAAAQUAAAAGaGVpZ2h0AwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAALYmFzZUFzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA1UGF5bWVudCBhc3NldCBpZCBkb2Vzbid0IG1hdGNoIGJhc2ljIGFzc2V0OiBleHBlY3RlZD0JAAJYAAAAAQUAAAALYmFzZUFzc2V0SWQCAAAACCBhY3R1YWw9CQACWAAAAAEFAAAACnBtdEFzc2V0SWQICQEAAAAQaW50ZXJuYWxCdXlBc3NldAAAAAcIBQAAAAFpAAAABmNhbGxlcggFAAAAA3BtdAAAAAZhbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAEW1pbkJhc2ljQnV5QW1vdW50CQEAAAAlZ2V0QnV5UHJpY2VDb25zaWRlcmluZ1N0YWtpbmdSZWZlcnJhbAAAAAIFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAUAAAAOY2FsbGVyUHViNThTdHIJAQAAACNnZXRCdXlGZWVDb25zaWRlcmluZ1N0YWtpbmdSZWZlcnJhbAAAAAEFAAAADmNhbGxlclB1YjU4U3RyCQEAAAAoZ2V0UHJvdG9jb2xGZWVDb25zaWRlcmluZ1N0YWtpbmdSZWZlcnJhbAAAAAEFAAAADmNhbGxlclB1YjU4U3RyAAAAAl8xAAAAAWkBAAAACXNlbGxBc3NldAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAIcG10QXNzZXQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACXNlbGxQcmljZQkBAAAADGdldFNlbGxQcmljZQAAAAEFAAAAHndlZWtlbmRzUHJpY2VDaGFuZ2VDb2VmZmljaWVudAMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDBQAAABVpc0Jsb2NrZWRCeUxhc3RIZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABJbGFzdCBwcmljZSBmaW5hbGl6YXRpb24gaGFzIGJlZW4gbW9yZSB0aGVuIDUgYmxvY2tzIGFnbzogcHJpY2VMYXN0SGVpZ2h0PQkAAaQAAAABBQAAAA9wcmljZUxhc3RIZWlnaHQCAAAADCBjdXJySGVpZ2h0PQkAAaQAAAABBQAAAAZoZWlnaHQDCQEAAAACIT0AAAACBQAAAAhwbXRBc3NldAUAAAALZGVmb0Fzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAjSW52YWxpZCBwYXltZW50IGFzc2V0IGlkOiBleHBlY3RlZD0JAAJYAAAAAQUAAAALZGVmb0Fzc2V0SWQCAAAACCBhY3R1YWw9CQACWAAAAAEFAAAACHBtdEFzc2V0AwkAAGYAAAACBQAAABJtaW5TeW50aFNlbGxBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAOlBheW1lbnQgYW1vdW50IGxlc3MgdGhlbiBtaW5pbmltYWwgYWxsb3dlZDogcGF5bWVudEFtb3VudD0JAAGkAAAAAQgFAAAAA3BtdAAAAAZhbW91bnQCAAAACyBtaW5BbW91bnQ9CQABpAAAAAEFAAAAEm1pblN5bnRoU2VsbEFtb3VudAQAAAAdYmFzZUFzc2V0QW1vdW50Tm9CYWxhbmNlTGltaXQJAABrAAAAAwgFAAAAA3BtdAAAAAZhbW91bnQFAAAADXByaWNlRGVjaW1hbHMFAAAACXNlbGxQcmljZQQAAAAYYmFzZUFzc2V0QW1vdW50QXZhaWxhYmxlAwkAAGYAAAACBQAAAB1iYXNlQXNzZXRBbW91bnROb0JhbGFuY2VMaW1pdAUAAAAXY3VycmVudEJhc2VBc3NldEJhbGFuY2UFAAAAF2N1cnJlbnRCYXNlQXNzZXRCYWxhbmNlBQAAAB1iYXNlQXNzZXRBbW91bnROb0JhbGFuY2VMaW1pdAQAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzCQAAawAAAAMFAAAAGGJhc2VBc3NldEFtb3VudEF2YWlsYWJsZQUAAAAJc2VsbFByaWNlBQAAAA1wcmljZURlY2ltYWxzBAAAAAZjaGFuZ2UJAABlAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAAGHNvbGREZWZvQXNzZXRBbW91bnRHcm9zcwQAAAAWc3RhYmlsaXR5RmVlRGVmb0Ftb3VudAkAAGsAAAADBQAAABRwb29sU3RhYmlsaXR5RmVlUGFydAUAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBAAAABdwb29sTWFrZXJzRmVlRGVmb0Ftb3VudAkAAGsAAAADBQAAAA5zZWxsRmVlUGVyY2VudAUAAAAYc29sZERlZm9Bc3NldEFtb3VudEdyb3NzBQAAAA1wcmljZURlY2ltYWxzBAAAABVwcm90b2NvbEZlZURlZm9BbW91bnQJAABrAAAAAwUAAAAScHJvdG9jb2xGZWVQZXJjZW50BQAAABhzb2xkRGVmb0Fzc2V0QW1vdW50R3Jvc3MFAAAADXByaWNlRGVjaW1hbHMEAAAAE3NvbGREZWZvQXNzZXRBbW91bnQJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAAGHNvbGREZWZvQXNzZXRBbW91bnRHcm9zcwUAAAAWc3RhYmlsaXR5RmVlRGVmb0Ftb3VudAUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQFAAAAFXByb3RvY29sRmVlRGVmb0Ftb3VudAQAAAAVYmFzZUFzc2V0QW1vdW50VG9TZW5kCQAAawAAAAMFAAAAE3NvbGREZWZvQXNzZXRBbW91bnQFAAAADXByaWNlRGVjaW1hbHMFAAAACXNlbGxQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmtleVVjb2xsYXRlcmFsAAAAAAkAAGUAAAACBQAAAAt1Y29sbGF0ZXJhbAUAAAAVYmFzZUFzc2V0QW1vdW50VG9TZW5kCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlBY2NvdW50T3BlcmF0aW9uAAAAAwUAAAAGaGVpZ2h0BQAAAA1jYWxsZXJBZGRyZXNzAgAAAAhGSU5JU0hFRAkBAAAAFmFzc2V0RGF0YVN3YXBPcGVyYXRpb24AAAAICAUAAAADcG10AAAABmFtb3VudAkAAlgAAAABBQAAAAhwbXRBc3NldAUAAAAJc2VsbFByaWNlBQAAABViYXNlQXNzZXRBbW91bnRUb1NlbmQFAAAADmJhc2VBc3NldElkU3RyBQAAABhzb2xkRGVmb0Fzc2V0QW1vdW50R3Jvc3MFAAAAF3Bvb2xNYWtlcnNGZWVEZWZvQW1vdW50BQAAABVwcm90b2NvbEZlZURlZm9BbW91bnQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAtkZWZvQXNzZXRJZAkAAGQAAAACBQAAABNzb2xkRGVmb0Fzc2V0QW1vdW50BQAAABZzdGFiaWxpdHlGZWVEZWZvQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAVYmFzZUFzc2V0QW1vdW50VG9TZW5kBQAAAAtiYXNlQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmNoYW5nZQUAAAALZGVmb0Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARZmVlTWFuYWdlckFkZHJlc3MFAAAAFXByb3RvY29sRmVlRGVmb0Ftb3VudAUAAAALZGVmb0Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAJ2ZhY3RvcnlSZWFkTmV4dFBvb2xNYWtlclRvRGlzdHJpYnV0ZUZlZQAAAAEJAAQlAAAAAQUAAAAEdGhpcwUAAAAXcG9vbE1ha2Vyc0ZlZURlZm9BbW91bnQFAAAAC2RlZm9Bc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARa2V5QWNjdW11bGF0ZWRGZWUAAAAACQAAZAAAAAIFAAAADmFjY3VtdWxhdGVkRmVlBQAAABdwb29sTWFrZXJzRmVlRGVmb0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWtleUFjY3VtdWxhdGVkUHJvdG9jb2xGZWUAAAAACQAAZAAAAAIFAAAAFmFjY3VtdWxhdGVkUHJvdG9jb2xGZWUFAAAAFXByb3RvY29sRmVlRGVmb0Ftb3VudAUAAAADbmlsAAAAAWkBAAAADWNyb3NzRXhjaGFuZ2UAAAACAAAAE2J1eUFzc2V0Q29kZUNvbmZpcm0AAAAUc2VsbEFzc2V0Q29kZUNvbmZpcm0EAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAIcG10QXNzZXQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRTdHIJAAJYAAAAAQUAAAAIcG10QXNzZXQEAAAACXBtdEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAtidXlBc3NldENmZwUAAAAMdGhpc0NmZ0FycmF5BAAAAA5zZWxsQXNzZXRUdXBsZQkBAAAAGWZhY3RvcnlSZWFkQXNzZXRDZmdCeUNvZGUAAAABBQAAABRzZWxsQXNzZXRDb2RlQ29uZmlybQQAAAAMc2VsbEFzc2V0Q2ZnCAUAAAAOc2VsbEFzc2V0VHVwbGUAAAACXzIEAAAAE3NlbGxBc3NldEFjY0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCAUAAAAOc2VsbEFzc2V0VHVwbGUAAAACXzEJAAEsAAAAAgIAAAAxY291bGRuJ3QgcGFyc2UgYWRkcmVzcyBmcm9tIHN0cmluZyBmb3IgYXNzZXRDb2RlPQUAAAAUc2VsbEFzc2V0Q29kZUNvbmZpcm0EAAAACm1pblNlbGxQbXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABLYAAAABCQABkQAAAAIFAAAADHNlbGxBc3NldENmZwUAAAARSWR4TWluU2VsbFBheW1lbnQJAAEsAAAAAgIAAAAhbWluU2VsbFBtdCBwYXJzaW5nIGVycm9yOiByYXdWYWw9CQABkQAAAAIFAAAADHNlbGxBc3NldENmZwUAAAARSWR4TWluU2VsbFBheW1lbnQEAAAAE3NlbGxQcmljZUxhc3RIZWlnaHQJAQAAABhjb250cm9sQWNjUmVhZExhc3RIZWlnaHQAAAABBQAAABRzZWxsQXNzZXRDb2RlQ29uZmlybQQAAAAZaXNTZWxsQmxvY2tlZEJ5TGFzdEhlaWdodAkAAGYAAAACCQAAZQAAAAIFAAAAE3NlbGxQcmljZUxhc3RIZWlnaHQFAAAAE3NlbGxQcmljZUxhc3RIZWlnaHQAAAAAAAAAAAUDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkBAAAAAiE9AAAAAgkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAEElkeERlZm9Bc3NldENvZGUFAAAAE2J1eUFzc2V0Q29kZUNvbmZpcm0JAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAwYnV5QXNzZXQgY29uZmlybWF0aW9uIGZhaWxlZDogYnV5QXNzZXRJZENvbmZpcm09CQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAAQSWR4RGVmb0Fzc2V0Q29kZQIAAAAQIEJVVCBidXlBc3NldElkPQUAAAATYnV5QXNzZXRDb2RlQ29uZmlybQMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAAMc2VsbEFzc2V0Q2ZnBQAAAA5JZHhEZWZvQXNzZXRJZAUAAAALcG10QXNzZXRTdHIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAyc2VsbEFzc2V0IGNvbmZpcm1hdGlvbiBmYWlsZWQ6IHNlbGxBc3NldElkQ29uZmlybT0JAAGRAAAAAgUAAAAMc2VsbEFzc2V0Q2ZnBQAAAA5JZHhEZWZvQXNzZXRJZAIAAAANQlVUIHBtdEFzc2V0PQUAAAALcG10QXNzZXRTdHIDCQEAAAACIT0AAAACCQABkQAAAAIFAAAADHRoaXNDZmdBcnJheQUAAAASSWR4RGVmb0Fzc2V0U3RhdHVzAgAAAAZJU1NVRUQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAsdG9Bc3NldCBoYXMgbm90IGJlZW4gaXNzdWVkIHlldDogYnV5QXNzZXRJZD0FAAAAE2J1eUFzc2V0Q29kZUNvbmZpcm0CAAAADCBCVVQgc3RhdHVzPQkAAZEAAAACBQAAAAx0aGlzQ2ZnQXJyYXkFAAAAEklkeERlZm9Bc3NldFN0YXR1cwMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAAMc2VsbEFzc2V0Q2ZnBQAAABJJZHhEZWZvQXNzZXRTdGF0dXMCAAAABklTU1VFRAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADJmcm9tQXNzZXRDZmcgaGFzIG5vdCBiZWVuIGlzc3VlZCB5ZXQ6IHNlbGxBc3NldElkPQUAAAALcG10QXNzZXRTdHICAAAADCBCVVQgc3RhdHVzPQkAAZEAAAACBQAAAAxzZWxsQXNzZXRDZmcFAAAAEklkeERlZm9Bc3NldFN0YXR1cwMFAAAAFWlzQmxvY2tlZEJ5TGFzdEhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABNYnV5IGxhc3QgcHJpY2UgZmluYWxpemF0aW9uIGhhcyBiZWVuIG1vcmUgdGhlbiA1IGJsb2NrcyBhZ286IHByaWNlTGFzdEhlaWdodD0JAAGkAAAAAQUAAAAPcHJpY2VMYXN0SGVpZ2h0AgAAAAwgY3VyckhlaWdodD0JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAkgYnV5Q29kZT0FAAAAE2J1eUFzc2V0Q29kZUNvbmZpcm0DBQAAABlpc1NlbGxCbG9ja2VkQnlMYXN0SGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAE5zZWxsIGxhc3QgcHJpY2UgZmluYWxpemF0aW9uIGhhcyBiZWVuIG1vcmUgdGhlbiA1IGJsb2NrcyBhZ286IHByaWNlTGFzdEhlaWdodD0JAAGkAAAAAQUAAAAPcHJpY2VMYXN0SGVpZ2h0AgAAAAwgY3VyckhlaWdodD0JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAogc2VsbENvZGU9BQAAABRzZWxsQXNzZXRDb2RlQ29uZmlybQQAAAAQYnV5QXNzZXRVc2RQcmljZQkBAAAAC2dldEJ1eVByaWNlAAAAAQkAAGkAAAACBQAAAB53ZWVrZW5kc1ByaWNlQ2hhbmdlQ29lZmZpY2llbnQAAAAAAAAAAAIEAAAAEXNlbGxBc3NldFVzZFByaWNlCQEAAAAQZ2V0U2VsbFByaWNlRnJvbQAAAAIJAQAAABNjb250cm9sQWNjUmVhZFByaWNlAAAAAQUAAAAUc2VsbEFzc2V0Q29kZUNvbmZpcm0JAABpAAAAAgUAAAAed2Vla2VuZHNQcmljZUNoYW5nZUNvZWZmaWNpZW50AAAAAAAAAAACBAAAAA1idXkyc2VsbFByaWNlCQAAawAAAAMFAAAAEGJ1eUFzc2V0VXNkUHJpY2UFAAAADXByaWNlRGVjaW1hbHMFAAAAEXNlbGxBc3NldFVzZFByaWNlBAAAAAh1c2RuRGVidAkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAADXByaWNlRGVjaW1hbHMFAAAAEXNlbGxBc3NldFVzZFByaWNlBAAAABZ0b3RhbExlbmRlZEF0T3RoZXJBY2NzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABlrZXlUb3RhbExlbmRlZEF0T3RoZXJBY2NzAAAAAAAAAAAAAAAAAAQAAAAabGVuZGVkQW1vdW50QnlBc3NldENvZGVLZXkJAQAAABprZXlMZW5kZWRBbW91bnRCeUFzc2V0Q29kZQAAAAEFAAAAFHNlbGxBc3NldENvZGVDb25maXJtBAAAABRsZW5kZWRBbXRCeUFzc2V0Q29kZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABpsZW5kZWRBbW91bnRCeUFzc2V0Q29kZUtleQAAAAAAAAAAAAQAAAAXc2VsbEFzc2V0U2VsbEZlZVBlcmNlbnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxzZWxsQXNzZXRDZmcFAAAAEUlkeFNlbGxGZWVQZXJjZW50BAAAAA9jcm9zc0ZlZVBlcmNlbnQJAABrAAAAAwkAAGQAAAACBQAAAA1idXlGZWVQZXJjZW50BQAAABdzZWxsQXNzZXRTZWxsRmVlUGVyY2VudAUAAAAYY3Jvc3NFeGNoYW5nZUNvZWZmaWNpZW50BQAAAA1wcmljZURlY2ltYWxzBAAAAA5idXlBc3NldFJlc3VsdAkBAAAAEGludGVybmFsQnV5QXNzZXQAAAAHCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAIcG10QXNzZXQFAAAACm1pblNlbGxQbXQFAAAADWJ1eTJzZWxsUHJpY2UFAAAAD2Nyb3NzRmVlUGVyY2VudAUAAAAScHJvdG9jb2xGZWVQZXJjZW50CQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIIBQAAAA5idXlBc3NldFJlc3VsdAAAAAJfMQkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAATc2VsbEFzc2V0QWNjQWRkcmVzcwUAAAAIdXNkbkRlYnQFAAAAC2RlYnRBc3NldElkCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABNzZWxsQXNzZXRBY2NBZGRyZXNzCQAAZQAAAAIFAAAACXBtdEFtb3VudAgFAAAADmJ1eUFzc2V0UmVzdWx0AAAAAl8yBQAAAAhwbXRBc3NldAkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGmxlbmRlZEFtb3VudEJ5QXNzZXRDb2RlS2V5CQAAZAAAAAIFAAAAFGxlbmRlZEFtdEJ5QXNzZXRDb2RlBQAAAAh1c2RuRGVidAkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlrZXlUb3RhbExlbmRlZEF0T3RoZXJBY2NzAAAAAAkAAGQAAAACBQAAABZ0b3RhbExlbmRlZEF0T3RoZXJBY2NzBQAAAAh1c2RuRGVidAAAAAFpAQAAAA5yZWJhbGFuY2VEZWJ0cwAAAAAEAAAACGRlYnRQbXQwCQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA1kZWJ0UG10QXNzZXQwCQEAAAAFdmFsdWUAAAABCAUAAAAIZGVidFBtdDAAAAAHYXNzZXRJZAQAAAAIYmFzZVBtdDEJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEEAAAADWJhc2VQbXRBc3NldDEJAQAAAAV2YWx1ZQAAAAEIBQAAAAhiYXNlUG10MQAAAAdhc3NldElkBAAAAA1kZWJ0b3JBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAOZGVidG9yQXNzZXRDZmcJAQAAABxmYWN0b3J5UmVhZEFzc2V0Q2ZnQnlBZGRyZXNzAAAAAQUAAAANZGVidG9yQWRkcmVzcwQAAAAPZGVidG9yQXNzZXRDb2RlCQABkQAAAAIFAAAADmRlYnRvckFzc2V0Q2ZnBQAAABBJZHhEZWZvQXNzZXRDb2RlBAAAABpsZW5kZWRBbW91bnRCeUFzc2V0Q29kZUtleQkBAAAAGmtleUxlbmRlZEFtb3VudEJ5QXNzZXRDb2RlAAAAAQUAAAAPZGVidG9yQXNzZXRDb2RlBAAAAAlsZW5kZWRBbXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABpsZW5kZWRBbW91bnRCeUFzc2V0Q29kZUtleQkAASwAAAACAgAAAA1ObyBkZWJ0cyBmb3IgBQAAAA9kZWJ0b3JBc3NldENvZGUDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkBAAAAAiE9AAAAAgUAAAALZGVidEFzc2V0SWQFAAAADWRlYnRQbXRBc3NldDAJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA0aW52YWxpZCBkZWJ0IGFzc2V0IGlkIGluIHRoZSBmaXJzdCBwYXltZXQ6IGV4cGVjdGVkPQkAAlgAAAABBQAAAAtkZWJ0QXNzZXRJZAIAAAAIIGFjdHVhbD0JAAJYAAAAAQUAAAANZGVidFBtdEFzc2V0MAMJAQAAAAIhPQAAAAIFAAAAC2Jhc2VBc3NldElkBQAAAA1iYXNlUG10QXNzZXQxCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAANmludmFsaWQgYmFzZSBhc3NldCBpZCBpbiB0aGUgc2Vjb25kIHBheW1lbnQ6IGV4cGVjdGVkPQkAAlgAAAABBQAAAAtiYXNlQXNzZXRJZAIAAAAIIGFjdHVhbD0JAAJYAAAAAQUAAAANYmFzZVBtdEFzc2V0MQMJAQAAAAIhPQAAAAIIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQIBQAAAAhiYXNlUG10MQAAAAZhbW91bnQJAAACAAAAAQIAAAA/Zmlyc3QgcGF5bWVudCBhbW91bnQgZG9lc24ndCBtYXRjaCB0byB0aGUgc2Vjb25kIHBheW1lbnQgYW1vdW50AwkAAGcAAAACAAAAAAAAAAAABQAAAAlsZW5kZWRBbXQJAAACAAAAAQkAASwAAAACAgAAACdsZW5kZWRBbXQgaXMgbGVzcyB0aGVuIHplcm86IGxlbmRlZEFtdD0JAAGkAAAAAQUAAAAJbGVuZGVkQW10AwkAAGcAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAADXByaWNlRGVjaW1hbHMIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAADdhdHRhY2hlZCBwYXltZW50IG11c3QgYmUgZ3JlYXRlciB0aGVuIDEwMDogcG10MC5hbW91bnQ9CQABpAAAAAEIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQDCQAAZgAAAAIIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQFAAAACWxlbmRlZEFtdAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADRhdHRhY2hlZCBwYXltZW50IGlzIGdyYXRlciB0aGFuIHJlcXVpcmVkOiBwbXRBbW91bnQ9CQABpAAAAAEIBQAAAAhkZWJ0UG10MAAAAAZhbW91bnQCAAAACyBsZW5kZWRBbXQ9CQABpAAAAAEFAAAACWxlbmRlZEFtdAQAAAAWdG90YWxMZW5kZWRBdE90aGVyQWNjcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAZa2V5VG90YWxMZW5kZWRBdE90aGVyQWNjcwAAAAAAAAAAAAAAAAAEAAAADmxlbmRlZEFtdEFmdGVyCQAAZQAAAAIFAAAACWxlbmRlZEFtdAgFAAAACGRlYnRQbXQwAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAabGVuZGVkQW1vdW50QnlBc3NldENvZGVLZXkFAAAADmxlbmRlZEFtdEFmdGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAZa2V5VG90YWxMZW5kZWRBdE90aGVyQWNjcwAAAAAJAABlAAAAAgUAAAAWdG90YWxMZW5kZWRBdE90aGVyQWNjcwgFAAAACGRlYnRQbXQwAAAABmFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAAFiVzJXNfX3JlYmFsYW5jZVRyYWNlX18JAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAkBAAAAF2Fzc2V0RGF0YVJlYmFsYW5jZVRyYWNlAAAABQUAAAAPZGVidG9yQXNzZXRDb2RlBQAAAAhkZWJ0UG10MAUAAAAIYmFzZVBtdDEFAAAACWxlbmRlZEFtdAUAAAAObGVuZGVkQW10QWZ0ZXIFAAAAA25pbAAAAAFpAQAAABRmdWxmaWxsUmVkZWVtUmVxdWVzdAAAAAEAAAAQcG9vbE1ha2VyQWRkcmVzcwQAAAAOdGhpc0FkZHJlc3NTdHIJAAQlAAAAAQUAAAAEdGhpcwQAAAAYcG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5CQEAAAAfa2V5RmFjdG9yeVBvb2xNYWtlclVubG9ja0hlaWdodAAAAAIFAAAADnRoaXNBZGRyZXNzU3RyBQAAABBwb29sTWFrZXJBZGRyZXNzBAAAABVwb29sTWFrZXJVbmxvY2tIZWlnaHQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAKZmFjdG9yeUFjYwUAAAAYcG9vbE1ha2VyVW5sb2NrSGVpZ2h0S2V5AAAAAAAAAAAAAwkAAGcAAAACAAAAAAAAAAAABQAAABVwb29sTWFrZXJVbmxvY2tIZWlnaHQJAAACAAAAAQIAAAAfQWxsIGxpcXVpZGl0eSByZXF1ZXN0IGZ1bGZpbGxlZAQAAAAccG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEtleQkBAAAAI2tleUZhY3RvcnlQb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0AAAAAwUAAAAOdGhpc0FkZHJlc3NTdHIFAAAAEHBvb2xNYWtlckFkZHJlc3MFAAAAFXBvb2xNYWtlclVubG9ja0hlaWdodAQAAAAfcG9vbE1ha2VyTGlxdWlkaXR5UmVxdWVzdEFtb3VudAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAACmZhY3RvcnlBY2MFAAAAHHBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkCAAAAMUVtcHR5IHBvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RLZXkgYXQgZmFjdG9yeSBhY2MDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzBQAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5CQAAAgAAAAECAAAALExpcXVpZGl0eSByZXF1ZXN0IGhhcyBiZWVuIGFscmVhZHkgZnVsZmlsbGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABxwb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0S2V5BQAAAB9wb29sTWFrZXJMaXF1aWRpdHlSZXF1ZXN0QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACmZhY3RvcnlBY2MFAAAAH3Bvb2xNYWtlckxpcXVpZGl0eVJlcXVlc3RBbW91bnQFAAAAC2Jhc2VBc3NldElkBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAAAAA2ludgUAAAAHJG1hdGNoMAMJAABmAAAAAggFAAAAA2ludgAAAANmZWUJAABoAAAAAgAAAAAAAAADhAAAAAAAAAAD6AkAAAIAAAABCQABLAAAAAICAAAAKGZlZSBhbW91bnQgaXMgZ3JlYXRlciB0aGFuIG1heCBhbGxvd2VkOiAJAAGkAAAAAQgFAAAAA2ludgAAAANmZWUDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA2ludgAAAApmZWVBc3NldElkCQAAAgAAAAECAAAAI29ubHkgV2F2ZXMgaXMgYWxsb3dlZCBhcyBmZWVBc3NldElkAwkAAAAAAAACCAUAAAADaW52AAAACGZ1bmN0aW9uAgAAAA5yZWJhbGFuY2VEZWJ0cwQAAAAOaW52RGFwcEFkZHJlc3MJAAQlAAAAAQkABCQAAAABCAUAAAADaW52AAAABGRBcHADCQEAAAACIT0AAAACCQABkQAAAAIJAQAAABxmYWN0b3J5UmVhZEFzc2V0Q2ZnQnlBZGRyZXNzAAAAAQUAAAAOaW52RGFwcEFkZHJlc3MFAAAAEklkeERlZm9Bc3NldFN0YXR1cwIAAAAGSVNTVUVECQAAAgAAAAECAAAAGW9ubHkgZGVmbyBkYXBwIGlzIGFsbG93ZWQDCQAAAAAAAAIFAAAADmludkRhcHBBZGRyZXNzCQAEJQAAAAEFAAAABHRoaXMJAAACAAAAAQIAAAAlaW1wb3NzaWJsZSB0byBjYWxsIHNlbGYgcmViZWFsbmNlRGVidAYDAwMJAAAAAAAAAggFAAAAA2ludgAAAAhmdW5jdGlvbgIAAAAMbG9ja05ldXRyaW5vBgkAAAAAAAACCAUAAAADaW52AAAACGZ1bmN0aW9uAgAAAA5sb2NrTmV1dHJpbm9TUAYJAAAAAAAAAggFAAAAA2ludgAAAAhmdW5jdGlvbgIAAAAOdW5sb2NrTmV1dHJpbm8DCQEAAAACIT0AAAACCQAEJQAAAAEFAAAAEm5ldXRyaW5vU3Rha2luZ0FjYwkABCUAAAABCQAEJAAAAAEIBQAAAANpbnYAAAAEZEFwcAkAAAIAAAABAgAAACVpbnZhbGlkIG5ldXRyaW5vIHN0YWtpbmcgZGFwcCBhZGRyZXNzCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkBAAAAImZhY3RvcnlSZWFkRGVmb1N0YWtpbmdQYWNlbWFrZXJQdWIAAAAACQAAAgAAAAECAAAAI05vdCBhbGxvd2VkIGludm9jYXRpb24gbWV0aG9kIGNhbGxzCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tlefk/Ejo=", "chainId": 84, "height": 1483626, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EXL8Bh5c3wK339PzNFoBhpDMaq9Ywu3W2h42svmqCpXT Next: none Diff:
OldNewDifferences
44 func a () = "%s__accumulatedFee"
55
66
7-func b () = "%s__ucollateral"
7+func b () = "%s__accumulatedProtocolFee"
88
99
10-func c () = "%s__totalLendedAtOtherAccs"
10+func c () = "%s__ucollateral"
1111
1212
13-func d (e) = ("%s%s__assetLockedTotal__" + e)
13+func d () = "%s__totalLendedAtOtherAccs"
1414
1515
16-func f (g,h,i) = ((((("%s%s%d%s__defoAssetOperation__" + h) + "__") + toString(g)) + "__") + i)
16+func e (f) = ("%s%s__assetLockedTotal__" + f)
1717
1818
19-func j () = "%s__factory"
19+func g (h,i,j) = ((((("%s%s%d%s__defoAssetOperation__" + i) + "__") + toString(h)) + "__") + j)
2020
2121
22-func k (l) = ("%s%s__lendedBaseAssetAmount__" + l)
22+func k () = "%s__factory"
2323
2424
25-func m (l) = ("%s%s__price__" + l)
25+func l (m) = ("%s%s__lendedBaseAssetAmount__" + m)
2626
2727
28-func n (l) = ("%s%s__lastHeight__" + l)
28+func n (m) = ("%s%s__price__" + m)
2929
3030
31-let o = 1
32-
33-let p = 2
34-
35-let q = 3
36-
37-let r = 4
38-
39-let s = 5
40-
41-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)], "__")
31+func o (m) = ("%s%s__lastHeight__" + m)
4232
4333
44-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)], "__")
34+let p = 1
35+
36+let q = 2
37+
38+let r = 3
39+
40+let s = 4
41+
42+let t = 5
43+
44+func u (v,w,x,y,z,A,B,C) = makeString(["%d%s%d%s%d%d%d%d", toString(v), w, toString(y), z, toString(x), toString(A), toString(B), toString(C)], "__")
4545
4646
47-func H (I) = {
48- let J = valueOrErrorMessage(getString(this, I), ("There is no request for passed arguments: " + I))
49- split(J, "__")
47+func D (E,F,G,H,I) = makeString(["%s%s%d%s%d%d%d", E, toBase58String(value(F.assetId)), toString(F.amount), toBase58String(value(G.assetId)), toString(G.amount), toString(H), toString(I)], "__")
48+
49+
50+func J (K) = {
51+ let L = valueOrErrorMessage(getString(this, K), ("There is no request for passed arguments: " + K))
52+ split(L, "__")
5053 }
5154
5255
53-let K = -1
56+let M = -1
5457
55-let L = "NULL"
58+let N = "NULL"
5659
57-let M = addressFromStringValue(valueOrErrorMessage(getString(this, j()), ((("No config at this=" + toString(this)) + " for key=") + j())))
60+let O = addressFromStringValue(valueOrErrorMessage(getString(this, k()), ((("No config at this=" + toString(this)) + " for key=") + k())))
5861
59-func N () = "%s%s__commonConfig__debtAssetId"
62+func P () = "%s%s__commonConfig__neutrinoContractAddress"
6063
6164
62-func O () = "%s%s__commonConfig__debtAssetEtalonBalance"
65+func Q () = "%s%s__commonConfig__debtAssetId"
6366
6467
65-func P (Q) = (("%s%s%s__defoAsset__" + Q) + "__config")
68+func R () = "%s%s__commonConfig__debtAssetEtalonBalance"
6669
6770
68-func R (S) = (("%s%s%s__defoAsset__" + toString(S)) + "__currentPool")
71+func S (T) = (("%s%s%s__defoAsset__" + T) + "__config")
6972
7073
71-func T (l) = (("%s%s%s__defoAsset__" + l) + "__addressByAssetCode")
74+func U (V) = (("%s%s%s__defoAsset__" + toString(V)) + "__currentPool")
7275
7376
74-func U (V) = (("%s%s%s__defoAsset__" + V) + "__poolMakers")
77+func W (m) = (("%s%s%s__defoAsset__" + m) + "__addressByAssetCode")
7578
7679
77-func W () = "%s%s__commonConfig__defoStakingPacemakerPub"
80+func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__poolMakers")
7881
7982
80-func X (V,Y,Z) = makeString(["%s%s%s%d%s__pool", V, Y, toString(Z), "liquidityRequest"], "__")
83+func Z () = "%s%s__commonConfig__defoStakingPacemakerPub"
8184
8285
83-func aa (V,Y) = makeString(["%s%s%s%s__pool", V, Y, "unlockHeight"], "__")
86+func aa (Y,ab,ac) = makeString(["%s%s%s%d%s__pool", Y, ab, toString(ac), "liquidityRequest"], "__")
8487
8588
86-func ab () = valueOrErrorMessage(getString(M, N()), ((("No config at factory=" + toString(M)) + " for key=") + N()))
89+func ad (Y,ab) = makeString(["%s%s%s%s__pool", Y, ab, "unlockHeight"], "__")
8790
8891
89-func ac (Q) = split(valueOrErrorMessage(getString(M, P(Q)), ((("No config at factory=" + toString(M)) + " for key=") + P(Q))), "__")
92+func ae () = valueOrErrorMessage(getString(O, Q()), ((("No config at factory=" + toString(O)) + " for key=") + Q()))
9093
9194
92-func ad (l) = {
93- let Q = valueOrErrorMessage(getString(M, T(l)), ((("No config at factory=" + toString(M)) + " for key=") + T(l)))
94- $Tuple2(Q, ac(Q))
95+func af (T) = split(valueOrErrorMessage(getString(O, S(T)), ((("No config at factory=" + toString(O)) + " for key=") + S(T))), "__")
96+
97+
98+func ag (m) = {
99+ let T = valueOrErrorMessage(getString(O, W(m)), ((("No config at factory=" + toString(O)) + " for key=") + W(m)))
100+ $Tuple2(T, af(T))
95101 }
96102
97103
98-func ae (Q) = addressFromStringValue("3MsbFMstwm3FHPJXmMfTgyaw7zQrpZfkwnx")
104+func ah (T) = addressFromStringValue("3MsbFMstwm3FHPJXmMfTgyaw7zQrpZfkwnx")
99105
100106
101-func af () = fromBase58String(valueOrErrorMessage(getString(M, W()), ((("No config at factory=" + toString(M)) + " for key=") + W())))
107+func ai () = fromBase58String(valueOrErrorMessage(getString(O, Z()), ((("No config at factory=" + toString(O)) + " for key=") + Z())))
102108
103109
104-let ag = 1
110+let aj = 1
105111
106-let ah = 2
112+let ak = 2
107113
108-let ai = 3
114+let al = 3
109115
110-let aj = 4
116+let am = 4
111117
112-let ak = 5
118+let an = 5
113119
114-let al = 6
120+let ao = 6
115121
116-let am = 7
122+let ap = 7
117123
118-let an = 8
124+let aq = 8
119125
120-let ao = 9
126+let ar = 9
121127
122-let ap = 10
128+let as = 10
123129
124-let aq = 11
130+let at = 11
125131
126-let ar = 12
132+let au = 12
127133
128-let as = 13
134+let av = 13
129135
130-let at = 14
136+let aw = 14
131137
132-let au = 15
138+let ax = 15
133139
134-let av = 16
140+let ay = 16
135141
136-let aw = 17
142+let az = 17
137143
138-let ax = 18
144+let aA = 18
139145
140-let ay = 19
146+let aB = 19
141147
142-let az = 20
148+let aC = 20
143149
144-let aA = 21
150+let aD = 21
145151
146-let aB = ac(toString(this))
152+let aE = 22
147153
148-let aC = aB[ag]
154+let aF = af(toString(this))
149155
150-let aD = aB[ah]
156+let aG = aF[aj]
151157
152-let aE = fromBase58String(aD)
153-
154-let aF = addressFromStringValue(aB[an])
155-
156-let aG = parseIntValue(aB[al])
157-
158-let aH = aB[ak]
158+let aH = aF[ak]
159159
160160 let aI = fromBase58String(aH)
161161
162-let aJ = parseIntValue(aB[aj])
162+let aJ = addressFromStringValue(aF[aq])
163163
164-let aK = parseIntValue(aB[ao])
164+let aK = parseIntValue(aF[ao])
165165
166-let aL = parseIntValue(aB[ap])
166+let aL = aF[an]
167167
168-let aM = parseIntValue(aB[aq])
168+let aM = fromBase58String(aL)
169169
170-let aN = parseIntValue(aB[ar])
170+let aN = parseIntValue(aF[am])
171171
172-let aO = parseIntValue(aB[as])
172+let aO = parseIntValue(aF[ar])
173173
174-let aP = parseIntValue(aB[at])
174+let aP = parseIntValue(aF[as])
175175
176-let aQ = parseIntValue(aB[av])
176+let aQ = parseIntValue(aF[at])
177177
178-let aR = aB[aw]
178+let aR = parseIntValue(aF[au])
179179
180-let aS = aB[ax]
180+let aS = parseIntValue(aF[av])
181181
182-let aT = parseIntValue(aB[ay])
182+let aT = parseIntValue(aF[aw])
183183
184-let aU = parseIntValue(aB[az])
184+let aU = parseIntValue(aF[ay])
185185
186-let aV = parseIntValue(aB[aA])
186+let aV = aF[az]
187187
188-func aW () = "%s__isBlocked"
188+let aW = aF[aA]
189+
190+let aX = parseIntValue(aF[aB])
191+
192+let aY = parseIntValue(aF[aC])
193+
194+let aZ = parseIntValue(aF[aD])
195+
196+let ba = parseIntValue(aF[aE])
197+
198+func bb () = "%s__isBlocked"
189199
190200
191-func aX (l) = ("%s%s__isMarketOpened__" + l)
201+func bc (m) = ("%s%s__isMarketOpened__" + m)
192202
193203
194-let aY = valueOrElse(getBoolean(aF, aW()), false)
204+let bd = valueOrElse(getBoolean(aJ, bb()), false)
195205
196-let aZ = valueOrElse(getBoolean(aF, aX(aC)), false)
206+let be = valueOrElse(getBoolean(aJ, bc(aG)), false)
197207
198-func ba (l) = valueOrErrorMessage(getInteger(aF, m(l)), ((("No price at priceOracle=" + toString(aF)) + " for key=") + m(l)))
208+func bf (m) = valueOrErrorMessage(getInteger(aJ, n(m)), ((("No price at priceOracle=" + toString(aJ)) + " for key=") + n(m)))
199209
200210
201-func bb (l) = valueOrErrorMessage(getInteger(aF, n(l)), ((("No lastHeight at priceOracle=" + toString(aF)) + " for key=") + n(l)))
211+func bg (m) = valueOrErrorMessage(getInteger(aJ, o(m)), ((("No lastHeight at priceOracle=" + toString(aJ)) + " for key=") + o(m)))
202212
203213
204-func bc () = valueOrErrorMessage(getInteger(aF, "currIdx"), ("No currIdx at controlAcc=" + toString(aF)))
214+func bh () = valueOrErrorMessage(getInteger(aJ, "currIdx"), ("No currIdx at controlAcc=" + toString(aJ)))
205215
206216
207-func bd (be) = {
208- let bf = ("idxHeight_" + toString(be))
209- valueOrElse(getInteger(aF, bf), 0)
217+func bi (bj) = {
218+ let bk = ("idxHeight_" + toString(bj))
219+ valueOrElse(getInteger(aJ, bk), 0)
210220 }
211221
212222
213-func bg (bh) = {
214- let bi = ("price_" + toString(bh))
215- valueOrErrorMessage(getInteger(aF, bi), ((("No " + bi) + " at controlAcc=") + toString(aF)))
223+func bl (bm) = {
224+ let bn = ("price_" + toString(bm))
225+ valueOrErrorMessage(getInteger(aJ, bn), ((("No " + bn) + " at controlAcc=") + toString(aJ)))
216226 }
217227
218228
219-let bj = bb(aC)
229+let bo = bg(aG)
220230
221-let bk = ((bj - bj) > 5)
231+let bp = ((bo - bo) > 5)
222232
223-let bl = "%s%s__commonConfig__defoStakingAddress"
224-
225-let bm = "%s%s__commonConfig__neutrinoStakingAddress"
226-
227-func bn (e) = ("%s%s__stakingBalance__" + e)
233+func bq () = "fees_manager_address"
228234
229235
230-func bo () = ((("rpd_balance_" + aH) + "_") + toString(this))
236+let br = addressFromStringValue(valueOrErrorMessage(getString(O, P()), ((("No config at factory=" + toString(O)) + " for key=") + P())))
237+
238+let bs = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(br, bq()), (bq() + " is not specified"))), (bq() + " invalid address format"))
239+
240+let bt = "%s%s__commonConfig__defoStakingAddress"
241+
242+let bu = "%s%s__commonConfig__neutrinoStakingAddress"
243+
244+func bv (f) = ("%s%s__stakingBalance__" + f)
231245
232246
233-let bp = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bl), ((("No config at factoryAcc" + toString(M)) + " for key=") + bl))), ("address extraction error for key=" + bl))
234-
235-let bq = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bm), ((("No config at factoryAcc" + toString(M)) + " for key=") + bm))), ("address extraction error for key=" + bm))
236-
237-func br () = valueOrElse(getInteger(bp, bn(aD)), 0)
247+func bw () = ((("rpd_balance_" + aL) + "_") + toString(this))
238248
239249
240-func bs () = valueOrElse(getInteger(bq, bo()), 0)
250+let bx = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(O, bt), ((("No config at factoryAcc" + toString(O)) + " for key=") + bt))), ("address extraction error for key=" + bt))
251+
252+let by = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(O, bu), ((("No config at factoryAcc" + toString(O)) + " for key=") + bu))), ("address extraction error for key=" + bu))
253+
254+func bz () = valueOrElse(getInteger(bx, bv(aH)), 0)
241255
242256
243-let bt = valueOrElse(getInteger(this, b()), 0)
244-
245-let bu = valueOrElse(getInteger(this, a()), 0)
246-
247-let bv = getIntegerValue(M, R(this))
248-
249-let bw = fromBase58String(ab())
250-
251-let bx = getIntegerValue(M, O())
252-
253-let by = (bx - assetBalance(this, bw))
254-
255-let bz = ((assetBalance(this, aI) + bs()) + by)
256-
257-let bA = ba(aB[ag])
258-
259-let bB = (value(assetInfo(aE)).quantity - assetBalance(this, aE))
260-
261-func bC (bD) = if (aZ)
262- then bA
263- else fraction((aJ - bD), bA, aJ)
257+func bA () = valueOrElse(getInteger(by, bw()), 0)
264258
265259
266-func bE (bF) = if ((aS == bF))
267- then 0
268- else aO
260+let bB = valueOrElse(getInteger(this, c()), 0)
261+
262+let bC = valueOrElse(getInteger(this, a()), 0)
263+
264+let bD = valueOrElse(getInteger(this, b()), 0)
265+
266+let bE = getIntegerValue(O, U(this))
267+
268+let bF = fromBase58String(ae())
269+
270+let bG = getIntegerValue(O, R())
271+
272+let bH = (bG - assetBalance(this, bF))
273+
274+let bI = ((assetBalance(this, aM) + bA()) + bH)
275+
276+let bJ = bf(aF[aj])
277+
278+let bK = (value(assetInfo(aI)).quantity - assetBalance(this, aI))
279+
280+func bL (bM) = if (be)
281+ then bJ
282+ else fraction((aN - bM), bJ, aN)
269283
270284
271-func bG (bD,bF) = if ((aS == bF))
272- then bA
273- else bC(bD)
285+func bN (bO) = if ((aW == bO))
286+ then 0
287+ else aS
274288
275289
276-func bH (bD) = if (aZ)
277- then bA
278- else fraction((aJ + bD), bA, aJ)
290+func bP (bO) = if ((aW == bO))
291+ then 0
292+ else ba
279293
280294
281-func bI (bJ,bD) = if (aZ)
295+func bQ (bM,bO) = if ((aW == bO))
282296 then bJ
283- else fraction((aJ + bD), bJ, aJ)
297+ else bL(bM)
284298
285299
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))
300+func bR (bM) = if (be)
301+ then bJ
302+ else fraction((aN + bM), bJ, aN)
303+
304+
305+func bS (bT,bM) = if (be)
306+ then bT
307+ else fraction((aN + bM), bT, aN)
308+
309+
310+func bU (bV,bW,bX,bY,bZ,ca,cb) = {
311+ let cc = fraction(bW, bZ, aN)
312+ let cd = fraction(aZ, cc, aN)
313+ let ce = fraction(ca, cc, aN)
314+ let cf = fraction(cb, cc, aN)
315+ let cg = (((cc - cd) - ce) - cf)
316+ let ch = fraction(cc, aN, bZ)
317+ let ci = (bW - ch)
318+ if (if ((bY > bW))
319+ then (toString(bV) != toString(bx))
295320 else false)
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)
321+ then throw(((((("impossible to issue new " + aG) + ": payment=") + toString(bW)) + "is less then min amount=") + toString(bY)))
322+ else $Tuple2([IntegerEntry(c(), (bB + ch)), StringEntry(g(height, toString(bV), "FINISHED"), u(bW, toBase58String(bX), bJ, cg, toBase58String(aI), cc, ce, cf)), Reissue(aI, ((cg + ce) + cf), true), ScriptTransfer(bV, cg, aI), ScriptTransfer(bV, ci, bX), ScriptTransfer(ah(toString(this)), ce, aI), ScriptTransfer(bs, cf, aI), IntegerEntry(a(), (bC + ce)), IntegerEntry(b(), (bD + cf))], ci)
298323 }
299324
300325
301-@Callable(bX)
326+@Callable(cj)
302327 func buyAsset () = {
303- let bY = value(bX.payments[0])
304- let bZ = value(bY.assetId)
305- let bF = toBase58String(bX.callerPublicKey)
306- if (aY)
328+ let ck = value(cj.payments[0])
329+ let cl = value(ck.assetId)
330+ let bO = toBase58String(cj.callerPublicKey)
331+ if (bd)
307332 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
308- else if (bk)
309- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)))
310- else if ((bZ != aI))
311- then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(aI)) + " actual=") + toBase58String(bZ)))
312- else bK(bX.caller, bY.amount, bZ, aK, bG(aQ, bF), bE(bF))._1
333+ else if (bp)
334+ then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)))
335+ else if ((cl != aM))
336+ then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(aM)) + " actual=") + toBase58String(cl)))
337+ else bU(cj.caller, ck.amount, cl, aO, bQ(aU, bO), bN(bO), bP(bO))._1
313338 }
314339
315340
316341
317-@Callable(bX)
342+@Callable(cj)
318343 func sellAsset () = {
319- let bY = value(bX.payments[0])
320- let ca = value(bY.assetId)
321- let cb = toString(bX.caller)
322- let cc = bH(aQ)
323- if (aY)
344+ let ck = value(cj.payments[0])
345+ let cm = value(ck.assetId)
346+ let cn = toString(cj.caller)
347+ let co = bR(aU)
348+ if (bd)
324349 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
325- else if (bk)
326- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)))
327- else if ((ca != aE))
328- then throw(((("Invalid payment asset id: expected=" + toBase58String(aE)) + " actual=") + toBase58String(ca)))
329- else if ((aL > bY.amount))
330- then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(bY.amount)) + " minAmount=") + toString(aL)))
350+ else if (bp)
351+ then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)))
352+ else if ((cm != aI))
353+ then throw(((("Invalid payment asset id: expected=" + toBase58String(aI)) + " actual=") + toBase58String(cm)))
354+ else if ((aP > ck.amount))
355+ then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(ck.amount)) + " minAmount=") + toString(aP)))
331356 else {
332- let cd = fraction(bY.amount, aJ, cc)
333- let ce = if ((cd > bz))
334- then bz
335- else cd
336- let cf = fraction(ce, cc, aJ)
337- let bW = (bY.amount - cf)
338- let bS = fraction(aV, cf, aJ)
339- let bT = fraction(aP, cf, aJ)
340- let cg = ((cf - bS) - bT)
341- let ch = fraction(cg, aJ, cc)
342-[IntegerEntry(b(), (bt - ch)), StringEntry(f(height, cb, "FINISHED"), t(bY.amount, toBase58String(ca), cc, ch, aH, cf, bT)), Burn(aE, (cg + bS)), ScriptTransfer(bX.caller, ch, aI), ScriptTransfer(bX.caller, bW, aE), ScriptTransfer(ae(toString(this)), bT, aE), IntegerEntry(a(), (bu + bT))]
357+ let cp = fraction(ck.amount, aN, co)
358+ let cq = if ((cp > bI))
359+ then bI
360+ else cp
361+ let cr = fraction(cq, co, aN)
362+ let ci = (ck.amount - cr)
363+ let cd = fraction(aZ, cr, aN)
364+ let ce = fraction(aT, cr, aN)
365+ let cf = fraction(ba, cr, aN)
366+ let cs = (((cr - cd) - ce) - cf)
367+ let ct = fraction(cs, aN, co)
368+[IntegerEntry(c(), (bB - ct)), StringEntry(g(height, cn, "FINISHED"), u(ck.amount, toBase58String(cm), co, ct, aL, cr, ce, cf)), Burn(aI, (cs + cd)), ScriptTransfer(cj.caller, ct, aM), ScriptTransfer(cj.caller, ci, aI), ScriptTransfer(bs, cf, aI), ScriptTransfer(ah(toString(this)), ce, aI), IntegerEntry(a(), (bC + ce)), IntegerEntry(b(), (bD + cf))]
343369 }
344370 }
345371
346372
347373
348-@Callable(bX)
349-func crossExchange (ci,cj) = {
350- let bY = value(bX.payments[0])
351- let ca = value(bY.assetId)
352- let ck = toBase58String(ca)
353- let cl = bY.amount
354- let cb = toString(bX.caller)
355- let cm = aB
356- let cn = ad(cj)
357- let co = cn._2
358- let cp = valueOrErrorMessage(addressFromString(cn._1), ("couldn't parse address from string for assetCode=" + cj))
359- let cq = valueOrErrorMessage(parseInt(co[ap]), ("minSellPmt parsing error: rawVal=" + co[ap]))
360- let cr = bb(cj)
361- let cs = ((cr - cr) > 5)
362- if (aY)
374+@Callable(cj)
375+func crossExchange (cu,cv) = {
376+ let ck = value(cj.payments[0])
377+ let cm = value(ck.assetId)
378+ let cw = toBase58String(cm)
379+ let cx = ck.amount
380+ let cn = toString(cj.caller)
381+ let cy = aF
382+ let cz = ag(cv)
383+ let cA = cz._2
384+ let cB = valueOrErrorMessage(addressFromString(cz._1), ("couldn't parse address from string for assetCode=" + cv))
385+ let cC = valueOrErrorMessage(parseInt(cA[as]), ("minSellPmt parsing error: rawVal=" + cA[as]))
386+ let cD = bg(cv)
387+ let cE = ((cD - cD) > 5)
388+ if (bd)
363389 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
364- else if ((aB[ag] != ci))
365- then throw(((("buyAsset confirmation failed: buyAssetIdConfirm=" + aB[ag]) + " BUT buyAssetId=") + ci))
366- else if ((co[ah] != ck))
367- then throw(((("sellAsset confirmation failed: sellAssetIdConfirm=" + co[ah]) + "BUT pmtAsset=") + ck))
368- else if ((aB[ai] != "ISSUED"))
369- then throw(((("toAsset has not been issued yet: buyAssetId=" + ci) + " BUT status=") + aB[ai]))
370- else if ((co[ai] != "ISSUED"))
371- then throw(((("fromAssetCfg has not been issued yet: sellAssetId=" + ck) + " BUT status=") + co[ai]))
372- else if (bk)
373- then throw(((((("buy last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)) + " buyCode=") + ci))
374- else if (cs)
375- then throw(((((("sell last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)) + " sellCode=") + cj))
390+ else if ((aF[aj] != cu))
391+ then throw(((("buyAsset confirmation failed: buyAssetIdConfirm=" + aF[aj]) + " BUT buyAssetId=") + cu))
392+ else if ((cA[ak] != cw))
393+ then throw(((("sellAsset confirmation failed: sellAssetIdConfirm=" + cA[ak]) + "BUT pmtAsset=") + cw))
394+ else if ((aF[al] != "ISSUED"))
395+ then throw(((("toAsset has not been issued yet: buyAssetId=" + cu) + " BUT status=") + aF[al]))
396+ else if ((cA[al] != "ISSUED"))
397+ then throw(((("fromAssetCfg has not been issued yet: sellAssetId=" + cw) + " BUT status=") + cA[al]))
398+ else if (bp)
399+ then throw(((((("buy last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)) + " buyCode=") + cu))
400+ else if (cE)
401+ then throw(((((("sell last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)) + " sellCode=") + cv))
376402 else {
377- let ct = bC((aQ / 2))
378- let cu = bI(ba(cj), (aQ / 2))
379- let bP = fraction(ct, aJ, cu)
380- let cv = fraction(cl, aJ, cu)
381- let cw = valueOrElse(getInteger(this, c()), 0)
382- let cx = k(cj)
383- let cy = valueOrElse(getInteger(this, cx), 0)
384- let cz = parseIntValue(co[at])
385- let cA = fraction((aO + cz), aT, aJ)
386- let cB = bK(bX.caller, cl, ca, cq, bP, cA)
387- ((((cB._1 :+ ScriptTransfer(cp, cv, bw)) :+ ScriptTransfer(cp, (cl - cB._2), ca)) :+ IntegerEntry(cx, (cy + cv))) :+ IntegerEntry(c(), (cw + cv)))
403+ let cF = bL((aU / 2))
404+ let cG = bS(bf(cv), (aU / 2))
405+ let bZ = fraction(cF, aN, cG)
406+ let cH = fraction(cx, aN, cG)
407+ let cI = valueOrElse(getInteger(this, d()), 0)
408+ let cJ = l(cv)
409+ let cK = valueOrElse(getInteger(this, cJ), 0)
410+ let cL = parseIntValue(cA[aw])
411+ let cM = fraction((aS + cL), aX, aN)
412+ let cN = bU(cj.caller, cx, cm, cC, bZ, cM, ba)
413+ ((((cN._1 :+ ScriptTransfer(cB, cH, bF)) :+ ScriptTransfer(cB, (cx - cN._2), cm)) :+ IntegerEntry(cJ, (cK + cH))) :+ IntegerEntry(d(), (cI + cH)))
388414 }
389415 }
390416
391417
392418
393-@Callable(bX)
419+@Callable(cj)
394420 func rebalanceDebts () = {
395- let cC = value(bX.payments[0])
396- let cD = value(cC.assetId)
397- let cE = value(bX.payments[1])
398- let cF = value(cE.assetId)
399- let cG = toString(bX.caller)
400- let cH = ac(cG)
401- let C = cH[ag]
402- let cx = k(C)
403- let cI = valueOrErrorMessage(getInteger(this, cx), ("No debts for " + C))
404- if (aY)
421+ let cO = value(cj.payments[0])
422+ let cP = value(cO.assetId)
423+ let cQ = value(cj.payments[1])
424+ let cR = value(cQ.assetId)
425+ let cS = toString(cj.caller)
426+ let cT = af(cS)
427+ let E = cT[aj]
428+ let cJ = l(E)
429+ let cU = valueOrErrorMessage(getInteger(this, cJ), ("No debts for " + E))
430+ if (bd)
405431 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
406- else if ((bw != cD))
407- then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bw)) + " actual=") + toBase58String(cD)))
408- else if ((aI != cF))
409- then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aI)) + " actual=") + toBase58String(cF)))
410- else if ((cC.amount != cE.amount))
432+ else if ((bF != cP))
433+ then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bF)) + " actual=") + toBase58String(cP)))
434+ else if ((aM != cR))
435+ then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aM)) + " actual=") + toBase58String(cR)))
436+ else if ((cO.amount != cQ.amount))
411437 then throw("first payment amount doesn't match to the second payment amount")
412- else if ((0 >= cI))
413- then throw(("lendedAmt is less then zero: lendedAmt=" + toString(cI)))
414- else if (((1 * aJ) >= cC.amount))
415- then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cC.amount)))
416- else if ((cC.amount > cI))
417- then throw(((("attached payment is grater than required: pmtAmount=" + toString(cC.amount)) + " lendedAmt=") + toString(cI)))
438+ else if ((0 >= cU))
439+ then throw(("lendedAmt is less then zero: lendedAmt=" + toString(cU)))
440+ else if (((1 * aN) >= cO.amount))
441+ then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cO.amount)))
442+ else if ((cO.amount > cU))
443+ then throw(((("attached payment is grater than required: pmtAmount=" + toString(cO.amount)) + " lendedAmt=") + toString(cU)))
418444 else {
419- let cw = valueOrElse(getInteger(this, c()), 0)
420- let G = (cI - cC.amount)
421-[IntegerEntry(cx, G), IntegerEntry(c(), (cw - cC.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(bX.transactionId)), B(C, cC, cE, cI, G))]
445+ let cI = valueOrElse(getInteger(this, d()), 0)
446+ let I = (cU - cO.amount)
447+[IntegerEntry(cJ, I), IntegerEntry(d(), (cI - cO.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(cj.transactionId)), D(E, cO, cQ, cU, I))]
422448 }
423449 }
424450
425451
426452
427-@Callable(bX)
428-func fulfillRedeemRequest (Y) = {
429- let cJ = toString(this)
430- let cK = aa(cJ, Y)
431- let cL = valueOrElse(getInteger(M, cK), 0)
432- if ((0 >= cL))
453+@Callable(cj)
454+func fulfillRedeemRequest (ab) = {
455+ let cV = toString(this)
456+ let cW = ad(cV, ab)
457+ let cX = valueOrElse(getInteger(O, cW), 0)
458+ if ((0 >= cX))
433459 then throw("All liquidity request fulfilled")
434460 else {
435- let cM = X(cJ, Y, cL)
436- let cN = valueOrErrorMessage(getInteger(M, cM), "Empty poolMakerLiquidityRequestKey at factory acc")
437- if (isDefined(getInteger(this, cM)))
461+ let cY = aa(cV, ab, cX)
462+ let cZ = valueOrErrorMessage(getInteger(O, cY), "Empty poolMakerLiquidityRequestKey at factory acc")
463+ if (isDefined(getInteger(this, cY)))
438464 then throw("Liquidity request has been already fulfilled")
439- else [IntegerEntry(cM, cN), ScriptTransfer(M, cN, aI)]
465+ else [IntegerEntry(cY, cZ), ScriptTransfer(O, cZ, aM)]
440466 }
441467 }
442468
443469
444-@Verifier(cO)
445-func cP () = {
446- let cQ = cO
447- if ($isInstanceOf(cQ, "InvokeScriptTransaction"))
470+@Verifier(da)
471+func db () = {
472+ let dc = da
473+ if ($isInstanceOf(dc, "InvokeScriptTransaction"))
448474 then {
449- let cR = cQ
450- if ((cR.fee > (900 * 1000)))
451- then throw(("fee amount is greater than max allowed: " + toString(cR.fee)))
452- else if (isDefined(cR.feeAssetId))
475+ let dd = dc
476+ if ((dd.fee > (900 * 1000)))
477+ then throw(("fee amount is greater than max allowed: " + toString(dd.fee)))
478+ else if (isDefined(dd.feeAssetId))
453479 then throw("only Waves is allowed as feeAssetId")
454- else if ((cR.function == "rebalanceDebts"))
480+ else if ((dd.function == "rebalanceDebts"))
455481 then {
456- let cS = toString(addressFromRecipient(cR.dApp))
457- if ((ac(cS)[ai] != "ISSUED"))
482+ let de = toString(addressFromRecipient(dd.dApp))
483+ if ((af(de)[al] != "ISSUED"))
458484 then throw("only defo dapp is allowed")
459- else if ((cS == toString(this)))
485+ else if ((de == toString(this)))
460486 then throw("impossible to call self rebealnceDebt")
461487 else true
462488 }
463- else if (if (if ((cR.function == "lockNeutrino"))
489+ else if (if (if ((dd.function == "lockNeutrino"))
464490 then true
465- else (cR.function == "lockNeutrinoSP"))
491+ else (dd.function == "lockNeutrinoSP"))
466492 then true
467- else (cR.function == "unlockNeutrino"))
468- then if ((toString(bq) != toString(addressFromRecipient(cR.dApp))))
493+ else (dd.function == "unlockNeutrino"))
494+ then if ((toString(by) != toString(addressFromRecipient(dd.dApp))))
469495 then throw("invalid neutrino staking dapp address")
470- else sigVerify(cO.bodyBytes, cO.proofs[0], af())
496+ else sigVerify(da.bodyBytes, da.proofs[0], ai())
471497 else throw("Not allowed invocation method calls")
472498 }
473- else sigVerify(cO.bodyBytes, cO.proofs[0], cO.senderPublicKey)
499+ else sigVerify(da.bodyBytes, da.proofs[0], da.senderPublicKey)
474500 }
475501
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a () = "%s__accumulatedFee"
55
66
7-func b () = "%s__ucollateral"
7+func b () = "%s__accumulatedProtocolFee"
88
99
10-func c () = "%s__totalLendedAtOtherAccs"
10+func c () = "%s__ucollateral"
1111
1212
13-func d (e) = ("%s%s__assetLockedTotal__" + e)
13+func d () = "%s__totalLendedAtOtherAccs"
1414
1515
16-func f (g,h,i) = ((((("%s%s%d%s__defoAssetOperation__" + h) + "__") + toString(g)) + "__") + i)
16+func e (f) = ("%s%s__assetLockedTotal__" + f)
1717
1818
19-func j () = "%s__factory"
19+func g (h,i,j) = ((((("%s%s%d%s__defoAssetOperation__" + i) + "__") + toString(h)) + "__") + j)
2020
2121
22-func k (l) = ("%s%s__lendedBaseAssetAmount__" + l)
22+func k () = "%s__factory"
2323
2424
25-func m (l) = ("%s%s__price__" + l)
25+func l (m) = ("%s%s__lendedBaseAssetAmount__" + m)
2626
2727
28-func n (l) = ("%s%s__lastHeight__" + l)
28+func n (m) = ("%s%s__price__" + m)
2929
3030
31-let o = 1
32-
33-let p = 2
34-
35-let q = 3
36-
37-let r = 4
38-
39-let s = 5
40-
41-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)], "__")
31+func o (m) = ("%s%s__lastHeight__" + m)
4232
4333
44-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)], "__")
34+let p = 1
35+
36+let q = 2
37+
38+let r = 3
39+
40+let s = 4
41+
42+let t = 5
43+
44+func u (v,w,x,y,z,A,B,C) = makeString(["%d%s%d%s%d%d%d%d", toString(v), w, toString(y), z, toString(x), toString(A), toString(B), toString(C)], "__")
4545
4646
47-func H (I) = {
48- let J = valueOrErrorMessage(getString(this, I), ("There is no request for passed arguments: " + I))
49- split(J, "__")
47+func D (E,F,G,H,I) = makeString(["%s%s%d%s%d%d%d", E, toBase58String(value(F.assetId)), toString(F.amount), toBase58String(value(G.assetId)), toString(G.amount), toString(H), toString(I)], "__")
48+
49+
50+func J (K) = {
51+ let L = valueOrErrorMessage(getString(this, K), ("There is no request for passed arguments: " + K))
52+ split(L, "__")
5053 }
5154
5255
53-let K = -1
56+let M = -1
5457
55-let L = "NULL"
58+let N = "NULL"
5659
57-let M = addressFromStringValue(valueOrErrorMessage(getString(this, j()), ((("No config at this=" + toString(this)) + " for key=") + j())))
60+let O = addressFromStringValue(valueOrErrorMessage(getString(this, k()), ((("No config at this=" + toString(this)) + " for key=") + k())))
5861
59-func N () = "%s%s__commonConfig__debtAssetId"
62+func P () = "%s%s__commonConfig__neutrinoContractAddress"
6063
6164
62-func O () = "%s%s__commonConfig__debtAssetEtalonBalance"
65+func Q () = "%s%s__commonConfig__debtAssetId"
6366
6467
65-func P (Q) = (("%s%s%s__defoAsset__" + Q) + "__config")
68+func R () = "%s%s__commonConfig__debtAssetEtalonBalance"
6669
6770
68-func R (S) = (("%s%s%s__defoAsset__" + toString(S)) + "__currentPool")
71+func S (T) = (("%s%s%s__defoAsset__" + T) + "__config")
6972
7073
71-func T (l) = (("%s%s%s__defoAsset__" + l) + "__addressByAssetCode")
74+func U (V) = (("%s%s%s__defoAsset__" + toString(V)) + "__currentPool")
7275
7376
74-func U (V) = (("%s%s%s__defoAsset__" + V) + "__poolMakers")
77+func W (m) = (("%s%s%s__defoAsset__" + m) + "__addressByAssetCode")
7578
7679
77-func W () = "%s%s__commonConfig__defoStakingPacemakerPub"
80+func X (Y) = (("%s%s%s__defoAsset__" + Y) + "__poolMakers")
7881
7982
80-func X (V,Y,Z) = makeString(["%s%s%s%d%s__pool", V, Y, toString(Z), "liquidityRequest"], "__")
83+func Z () = "%s%s__commonConfig__defoStakingPacemakerPub"
8184
8285
83-func aa (V,Y) = makeString(["%s%s%s%s__pool", V, Y, "unlockHeight"], "__")
86+func aa (Y,ab,ac) = makeString(["%s%s%s%d%s__pool", Y, ab, toString(ac), "liquidityRequest"], "__")
8487
8588
86-func ab () = valueOrErrorMessage(getString(M, N()), ((("No config at factory=" + toString(M)) + " for key=") + N()))
89+func ad (Y,ab) = makeString(["%s%s%s%s__pool", Y, ab, "unlockHeight"], "__")
8790
8891
89-func ac (Q) = split(valueOrErrorMessage(getString(M, P(Q)), ((("No config at factory=" + toString(M)) + " for key=") + P(Q))), "__")
92+func ae () = valueOrErrorMessage(getString(O, Q()), ((("No config at factory=" + toString(O)) + " for key=") + Q()))
9093
9194
92-func ad (l) = {
93- let Q = valueOrErrorMessage(getString(M, T(l)), ((("No config at factory=" + toString(M)) + " for key=") + T(l)))
94- $Tuple2(Q, ac(Q))
95+func af (T) = split(valueOrErrorMessage(getString(O, S(T)), ((("No config at factory=" + toString(O)) + " for key=") + S(T))), "__")
96+
97+
98+func ag (m) = {
99+ let T = valueOrErrorMessage(getString(O, W(m)), ((("No config at factory=" + toString(O)) + " for key=") + W(m)))
100+ $Tuple2(T, af(T))
95101 }
96102
97103
98-func ae (Q) = addressFromStringValue("3MsbFMstwm3FHPJXmMfTgyaw7zQrpZfkwnx")
104+func ah (T) = addressFromStringValue("3MsbFMstwm3FHPJXmMfTgyaw7zQrpZfkwnx")
99105
100106
101-func af () = fromBase58String(valueOrErrorMessage(getString(M, W()), ((("No config at factory=" + toString(M)) + " for key=") + W())))
107+func ai () = fromBase58String(valueOrErrorMessage(getString(O, Z()), ((("No config at factory=" + toString(O)) + " for key=") + Z())))
102108
103109
104-let ag = 1
110+let aj = 1
105111
106-let ah = 2
112+let ak = 2
107113
108-let ai = 3
114+let al = 3
109115
110-let aj = 4
116+let am = 4
111117
112-let ak = 5
118+let an = 5
113119
114-let al = 6
120+let ao = 6
115121
116-let am = 7
122+let ap = 7
117123
118-let an = 8
124+let aq = 8
119125
120-let ao = 9
126+let ar = 9
121127
122-let ap = 10
128+let as = 10
123129
124-let aq = 11
130+let at = 11
125131
126-let ar = 12
132+let au = 12
127133
128-let as = 13
134+let av = 13
129135
130-let at = 14
136+let aw = 14
131137
132-let au = 15
138+let ax = 15
133139
134-let av = 16
140+let ay = 16
135141
136-let aw = 17
142+let az = 17
137143
138-let ax = 18
144+let aA = 18
139145
140-let ay = 19
146+let aB = 19
141147
142-let az = 20
148+let aC = 20
143149
144-let aA = 21
150+let aD = 21
145151
146-let aB = ac(toString(this))
152+let aE = 22
147153
148-let aC = aB[ag]
154+let aF = af(toString(this))
149155
150-let aD = aB[ah]
156+let aG = aF[aj]
151157
152-let aE = fromBase58String(aD)
153-
154-let aF = addressFromStringValue(aB[an])
155-
156-let aG = parseIntValue(aB[al])
157-
158-let aH = aB[ak]
158+let aH = aF[ak]
159159
160160 let aI = fromBase58String(aH)
161161
162-let aJ = parseIntValue(aB[aj])
162+let aJ = addressFromStringValue(aF[aq])
163163
164-let aK = parseIntValue(aB[ao])
164+let aK = parseIntValue(aF[ao])
165165
166-let aL = parseIntValue(aB[ap])
166+let aL = aF[an]
167167
168-let aM = parseIntValue(aB[aq])
168+let aM = fromBase58String(aL)
169169
170-let aN = parseIntValue(aB[ar])
170+let aN = parseIntValue(aF[am])
171171
172-let aO = parseIntValue(aB[as])
172+let aO = parseIntValue(aF[ar])
173173
174-let aP = parseIntValue(aB[at])
174+let aP = parseIntValue(aF[as])
175175
176-let aQ = parseIntValue(aB[av])
176+let aQ = parseIntValue(aF[at])
177177
178-let aR = aB[aw]
178+let aR = parseIntValue(aF[au])
179179
180-let aS = aB[ax]
180+let aS = parseIntValue(aF[av])
181181
182-let aT = parseIntValue(aB[ay])
182+let aT = parseIntValue(aF[aw])
183183
184-let aU = parseIntValue(aB[az])
184+let aU = parseIntValue(aF[ay])
185185
186-let aV = parseIntValue(aB[aA])
186+let aV = aF[az]
187187
188-func aW () = "%s__isBlocked"
188+let aW = aF[aA]
189+
190+let aX = parseIntValue(aF[aB])
191+
192+let aY = parseIntValue(aF[aC])
193+
194+let aZ = parseIntValue(aF[aD])
195+
196+let ba = parseIntValue(aF[aE])
197+
198+func bb () = "%s__isBlocked"
189199
190200
191-func aX (l) = ("%s%s__isMarketOpened__" + l)
201+func bc (m) = ("%s%s__isMarketOpened__" + m)
192202
193203
194-let aY = valueOrElse(getBoolean(aF, aW()), false)
204+let bd = valueOrElse(getBoolean(aJ, bb()), false)
195205
196-let aZ = valueOrElse(getBoolean(aF, aX(aC)), false)
206+let be = valueOrElse(getBoolean(aJ, bc(aG)), false)
197207
198-func ba (l) = valueOrErrorMessage(getInteger(aF, m(l)), ((("No price at priceOracle=" + toString(aF)) + " for key=") + m(l)))
208+func bf (m) = valueOrErrorMessage(getInteger(aJ, n(m)), ((("No price at priceOracle=" + toString(aJ)) + " for key=") + n(m)))
199209
200210
201-func bb (l) = valueOrErrorMessage(getInteger(aF, n(l)), ((("No lastHeight at priceOracle=" + toString(aF)) + " for key=") + n(l)))
211+func bg (m) = valueOrErrorMessage(getInteger(aJ, o(m)), ((("No lastHeight at priceOracle=" + toString(aJ)) + " for key=") + o(m)))
202212
203213
204-func bc () = valueOrErrorMessage(getInteger(aF, "currIdx"), ("No currIdx at controlAcc=" + toString(aF)))
214+func bh () = valueOrErrorMessage(getInteger(aJ, "currIdx"), ("No currIdx at controlAcc=" + toString(aJ)))
205215
206216
207-func bd (be) = {
208- let bf = ("idxHeight_" + toString(be))
209- valueOrElse(getInteger(aF, bf), 0)
217+func bi (bj) = {
218+ let bk = ("idxHeight_" + toString(bj))
219+ valueOrElse(getInteger(aJ, bk), 0)
210220 }
211221
212222
213-func bg (bh) = {
214- let bi = ("price_" + toString(bh))
215- valueOrErrorMessage(getInteger(aF, bi), ((("No " + bi) + " at controlAcc=") + toString(aF)))
223+func bl (bm) = {
224+ let bn = ("price_" + toString(bm))
225+ valueOrErrorMessage(getInteger(aJ, bn), ((("No " + bn) + " at controlAcc=") + toString(aJ)))
216226 }
217227
218228
219-let bj = bb(aC)
229+let bo = bg(aG)
220230
221-let bk = ((bj - bj) > 5)
231+let bp = ((bo - bo) > 5)
222232
223-let bl = "%s%s__commonConfig__defoStakingAddress"
224-
225-let bm = "%s%s__commonConfig__neutrinoStakingAddress"
226-
227-func bn (e) = ("%s%s__stakingBalance__" + e)
233+func bq () = "fees_manager_address"
228234
229235
230-func bo () = ((("rpd_balance_" + aH) + "_") + toString(this))
236+let br = addressFromStringValue(valueOrErrorMessage(getString(O, P()), ((("No config at factory=" + toString(O)) + " for key=") + P())))
237+
238+let bs = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(br, bq()), (bq() + " is not specified"))), (bq() + " invalid address format"))
239+
240+let bt = "%s%s__commonConfig__defoStakingAddress"
241+
242+let bu = "%s%s__commonConfig__neutrinoStakingAddress"
243+
244+func bv (f) = ("%s%s__stakingBalance__" + f)
231245
232246
233-let bp = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bl), ((("No config at factoryAcc" + toString(M)) + " for key=") + bl))), ("address extraction error for key=" + bl))
234-
235-let bq = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(M, bm), ((("No config at factoryAcc" + toString(M)) + " for key=") + bm))), ("address extraction error for key=" + bm))
236-
237-func br () = valueOrElse(getInteger(bp, bn(aD)), 0)
247+func bw () = ((("rpd_balance_" + aL) + "_") + toString(this))
238248
239249
240-func bs () = valueOrElse(getInteger(bq, bo()), 0)
250+let bx = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(O, bt), ((("No config at factoryAcc" + toString(O)) + " for key=") + bt))), ("address extraction error for key=" + bt))
251+
252+let by = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(O, bu), ((("No config at factoryAcc" + toString(O)) + " for key=") + bu))), ("address extraction error for key=" + bu))
253+
254+func bz () = valueOrElse(getInteger(bx, bv(aH)), 0)
241255
242256
243-let bt = valueOrElse(getInteger(this, b()), 0)
244-
245-let bu = valueOrElse(getInteger(this, a()), 0)
246-
247-let bv = getIntegerValue(M, R(this))
248-
249-let bw = fromBase58String(ab())
250-
251-let bx = getIntegerValue(M, O())
252-
253-let by = (bx - assetBalance(this, bw))
254-
255-let bz = ((assetBalance(this, aI) + bs()) + by)
256-
257-let bA = ba(aB[ag])
258-
259-let bB = (value(assetInfo(aE)).quantity - assetBalance(this, aE))
260-
261-func bC (bD) = if (aZ)
262- then bA
263- else fraction((aJ - bD), bA, aJ)
257+func bA () = valueOrElse(getInteger(by, bw()), 0)
264258
265259
266-func bE (bF) = if ((aS == bF))
267- then 0
268- else aO
260+let bB = valueOrElse(getInteger(this, c()), 0)
261+
262+let bC = valueOrElse(getInteger(this, a()), 0)
263+
264+let bD = valueOrElse(getInteger(this, b()), 0)
265+
266+let bE = getIntegerValue(O, U(this))
267+
268+let bF = fromBase58String(ae())
269+
270+let bG = getIntegerValue(O, R())
271+
272+let bH = (bG - assetBalance(this, bF))
273+
274+let bI = ((assetBalance(this, aM) + bA()) + bH)
275+
276+let bJ = bf(aF[aj])
277+
278+let bK = (value(assetInfo(aI)).quantity - assetBalance(this, aI))
279+
280+func bL (bM) = if (be)
281+ then bJ
282+ else fraction((aN - bM), bJ, aN)
269283
270284
271-func bG (bD,bF) = if ((aS == bF))
272- then bA
273- else bC(bD)
285+func bN (bO) = if ((aW == bO))
286+ then 0
287+ else aS
274288
275289
276-func bH (bD) = if (aZ)
277- then bA
278- else fraction((aJ + bD), bA, aJ)
290+func bP (bO) = if ((aW == bO))
291+ then 0
292+ else ba
279293
280294
281-func bI (bJ,bD) = if (aZ)
295+func bQ (bM,bO) = if ((aW == bO))
282296 then bJ
283- else fraction((aJ + bD), bJ, aJ)
297+ else bL(bM)
284298
285299
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))
300+func bR (bM) = if (be)
301+ then bJ
302+ else fraction((aN + bM), bJ, aN)
303+
304+
305+func bS (bT,bM) = if (be)
306+ then bT
307+ else fraction((aN + bM), bT, aN)
308+
309+
310+func bU (bV,bW,bX,bY,bZ,ca,cb) = {
311+ let cc = fraction(bW, bZ, aN)
312+ let cd = fraction(aZ, cc, aN)
313+ let ce = fraction(ca, cc, aN)
314+ let cf = fraction(cb, cc, aN)
315+ let cg = (((cc - cd) - ce) - cf)
316+ let ch = fraction(cc, aN, bZ)
317+ let ci = (bW - ch)
318+ if (if ((bY > bW))
319+ then (toString(bV) != toString(bx))
295320 else false)
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)
321+ then throw(((((("impossible to issue new " + aG) + ": payment=") + toString(bW)) + "is less then min amount=") + toString(bY)))
322+ else $Tuple2([IntegerEntry(c(), (bB + ch)), StringEntry(g(height, toString(bV), "FINISHED"), u(bW, toBase58String(bX), bJ, cg, toBase58String(aI), cc, ce, cf)), Reissue(aI, ((cg + ce) + cf), true), ScriptTransfer(bV, cg, aI), ScriptTransfer(bV, ci, bX), ScriptTransfer(ah(toString(this)), ce, aI), ScriptTransfer(bs, cf, aI), IntegerEntry(a(), (bC + ce)), IntegerEntry(b(), (bD + cf))], ci)
298323 }
299324
300325
301-@Callable(bX)
326+@Callable(cj)
302327 func buyAsset () = {
303- let bY = value(bX.payments[0])
304- let bZ = value(bY.assetId)
305- let bF = toBase58String(bX.callerPublicKey)
306- if (aY)
328+ let ck = value(cj.payments[0])
329+ let cl = value(ck.assetId)
330+ let bO = toBase58String(cj.callerPublicKey)
331+ if (bd)
307332 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
308- else if (bk)
309- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)))
310- else if ((bZ != aI))
311- then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(aI)) + " actual=") + toBase58String(bZ)))
312- else bK(bX.caller, bY.amount, bZ, aK, bG(aQ, bF), bE(bF))._1
333+ else if (bp)
334+ then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)))
335+ else if ((cl != aM))
336+ then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(aM)) + " actual=") + toBase58String(cl)))
337+ else bU(cj.caller, ck.amount, cl, aO, bQ(aU, bO), bN(bO), bP(bO))._1
313338 }
314339
315340
316341
317-@Callable(bX)
342+@Callable(cj)
318343 func sellAsset () = {
319- let bY = value(bX.payments[0])
320- let ca = value(bY.assetId)
321- let cb = toString(bX.caller)
322- let cc = bH(aQ)
323- if (aY)
344+ let ck = value(cj.payments[0])
345+ let cm = value(ck.assetId)
346+ let cn = toString(cj.caller)
347+ let co = bR(aU)
348+ if (bd)
324349 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
325- else if (bk)
326- then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)))
327- else if ((ca != aE))
328- then throw(((("Invalid payment asset id: expected=" + toBase58String(aE)) + " actual=") + toBase58String(ca)))
329- else if ((aL > bY.amount))
330- then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(bY.amount)) + " minAmount=") + toString(aL)))
350+ else if (bp)
351+ then throw(((("last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)))
352+ else if ((cm != aI))
353+ then throw(((("Invalid payment asset id: expected=" + toBase58String(aI)) + " actual=") + toBase58String(cm)))
354+ else if ((aP > ck.amount))
355+ then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(ck.amount)) + " minAmount=") + toString(aP)))
331356 else {
332- let cd = fraction(bY.amount, aJ, cc)
333- let ce = if ((cd > bz))
334- then bz
335- else cd
336- let cf = fraction(ce, cc, aJ)
337- let bW = (bY.amount - cf)
338- let bS = fraction(aV, cf, aJ)
339- let bT = fraction(aP, cf, aJ)
340- let cg = ((cf - bS) - bT)
341- let ch = fraction(cg, aJ, cc)
342-[IntegerEntry(b(), (bt - ch)), StringEntry(f(height, cb, "FINISHED"), t(bY.amount, toBase58String(ca), cc, ch, aH, cf, bT)), Burn(aE, (cg + bS)), ScriptTransfer(bX.caller, ch, aI), ScriptTransfer(bX.caller, bW, aE), ScriptTransfer(ae(toString(this)), bT, aE), IntegerEntry(a(), (bu + bT))]
357+ let cp = fraction(ck.amount, aN, co)
358+ let cq = if ((cp > bI))
359+ then bI
360+ else cp
361+ let cr = fraction(cq, co, aN)
362+ let ci = (ck.amount - cr)
363+ let cd = fraction(aZ, cr, aN)
364+ let ce = fraction(aT, cr, aN)
365+ let cf = fraction(ba, cr, aN)
366+ let cs = (((cr - cd) - ce) - cf)
367+ let ct = fraction(cs, aN, co)
368+[IntegerEntry(c(), (bB - ct)), StringEntry(g(height, cn, "FINISHED"), u(ck.amount, toBase58String(cm), co, ct, aL, cr, ce, cf)), Burn(aI, (cs + cd)), ScriptTransfer(cj.caller, ct, aM), ScriptTransfer(cj.caller, ci, aI), ScriptTransfer(bs, cf, aI), ScriptTransfer(ah(toString(this)), ce, aI), IntegerEntry(a(), (bC + ce)), IntegerEntry(b(), (bD + cf))]
343369 }
344370 }
345371
346372
347373
348-@Callable(bX)
349-func crossExchange (ci,cj) = {
350- let bY = value(bX.payments[0])
351- let ca = value(bY.assetId)
352- let ck = toBase58String(ca)
353- let cl = bY.amount
354- let cb = toString(bX.caller)
355- let cm = aB
356- let cn = ad(cj)
357- let co = cn._2
358- let cp = valueOrErrorMessage(addressFromString(cn._1), ("couldn't parse address from string for assetCode=" + cj))
359- let cq = valueOrErrorMessage(parseInt(co[ap]), ("minSellPmt parsing error: rawVal=" + co[ap]))
360- let cr = bb(cj)
361- let cs = ((cr - cr) > 5)
362- if (aY)
374+@Callable(cj)
375+func crossExchange (cu,cv) = {
376+ let ck = value(cj.payments[0])
377+ let cm = value(ck.assetId)
378+ let cw = toBase58String(cm)
379+ let cx = ck.amount
380+ let cn = toString(cj.caller)
381+ let cy = aF
382+ let cz = ag(cv)
383+ let cA = cz._2
384+ let cB = valueOrErrorMessage(addressFromString(cz._1), ("couldn't parse address from string for assetCode=" + cv))
385+ let cC = valueOrErrorMessage(parseInt(cA[as]), ("minSellPmt parsing error: rawVal=" + cA[as]))
386+ let cD = bg(cv)
387+ let cE = ((cD - cD) > 5)
388+ if (bd)
363389 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
364- else if ((aB[ag] != ci))
365- then throw(((("buyAsset confirmation failed: buyAssetIdConfirm=" + aB[ag]) + " BUT buyAssetId=") + ci))
366- else if ((co[ah] != ck))
367- then throw(((("sellAsset confirmation failed: sellAssetIdConfirm=" + co[ah]) + "BUT pmtAsset=") + ck))
368- else if ((aB[ai] != "ISSUED"))
369- then throw(((("toAsset has not been issued yet: buyAssetId=" + ci) + " BUT status=") + aB[ai]))
370- else if ((co[ai] != "ISSUED"))
371- then throw(((("fromAssetCfg has not been issued yet: sellAssetId=" + ck) + " BUT status=") + co[ai]))
372- else if (bk)
373- then throw(((((("buy last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)) + " buyCode=") + ci))
374- else if (cs)
375- then throw(((((("sell last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bj)) + " currHeight=") + toString(height)) + " sellCode=") + cj))
390+ else if ((aF[aj] != cu))
391+ then throw(((("buyAsset confirmation failed: buyAssetIdConfirm=" + aF[aj]) + " BUT buyAssetId=") + cu))
392+ else if ((cA[ak] != cw))
393+ then throw(((("sellAsset confirmation failed: sellAssetIdConfirm=" + cA[ak]) + "BUT pmtAsset=") + cw))
394+ else if ((aF[al] != "ISSUED"))
395+ then throw(((("toAsset has not been issued yet: buyAssetId=" + cu) + " BUT status=") + aF[al]))
396+ else if ((cA[al] != "ISSUED"))
397+ then throw(((("fromAssetCfg has not been issued yet: sellAssetId=" + cw) + " BUT status=") + cA[al]))
398+ else if (bp)
399+ then throw(((((("buy last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)) + " buyCode=") + cu))
400+ else if (cE)
401+ then throw(((((("sell last price finalization has been more then 5 blocks ago: priceLastHeight=" + toString(bo)) + " currHeight=") + toString(height)) + " sellCode=") + cv))
376402 else {
377- let ct = bC((aQ / 2))
378- let cu = bI(ba(cj), (aQ / 2))
379- let bP = fraction(ct, aJ, cu)
380- let cv = fraction(cl, aJ, cu)
381- let cw = valueOrElse(getInteger(this, c()), 0)
382- let cx = k(cj)
383- let cy = valueOrElse(getInteger(this, cx), 0)
384- let cz = parseIntValue(co[at])
385- let cA = fraction((aO + cz), aT, aJ)
386- let cB = bK(bX.caller, cl, ca, cq, bP, cA)
387- ((((cB._1 :+ ScriptTransfer(cp, cv, bw)) :+ ScriptTransfer(cp, (cl - cB._2), ca)) :+ IntegerEntry(cx, (cy + cv))) :+ IntegerEntry(c(), (cw + cv)))
403+ let cF = bL((aU / 2))
404+ let cG = bS(bf(cv), (aU / 2))
405+ let bZ = fraction(cF, aN, cG)
406+ let cH = fraction(cx, aN, cG)
407+ let cI = valueOrElse(getInteger(this, d()), 0)
408+ let cJ = l(cv)
409+ let cK = valueOrElse(getInteger(this, cJ), 0)
410+ let cL = parseIntValue(cA[aw])
411+ let cM = fraction((aS + cL), aX, aN)
412+ let cN = bU(cj.caller, cx, cm, cC, bZ, cM, ba)
413+ ((((cN._1 :+ ScriptTransfer(cB, cH, bF)) :+ ScriptTransfer(cB, (cx - cN._2), cm)) :+ IntegerEntry(cJ, (cK + cH))) :+ IntegerEntry(d(), (cI + cH)))
388414 }
389415 }
390416
391417
392418
393-@Callable(bX)
419+@Callable(cj)
394420 func rebalanceDebts () = {
395- let cC = value(bX.payments[0])
396- let cD = value(cC.assetId)
397- let cE = value(bX.payments[1])
398- let cF = value(cE.assetId)
399- let cG = toString(bX.caller)
400- let cH = ac(cG)
401- let C = cH[ag]
402- let cx = k(C)
403- let cI = valueOrErrorMessage(getInteger(this, cx), ("No debts for " + C))
404- if (aY)
421+ let cO = value(cj.payments[0])
422+ let cP = value(cO.assetId)
423+ let cQ = value(cj.payments[1])
424+ let cR = value(cQ.assetId)
425+ let cS = toString(cj.caller)
426+ let cT = af(cS)
427+ let E = cT[aj]
428+ let cJ = l(E)
429+ let cU = valueOrErrorMessage(getInteger(this, cJ), ("No debts for " + E))
430+ if (bd)
405431 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
406- else if ((bw != cD))
407- then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bw)) + " actual=") + toBase58String(cD)))
408- else if ((aI != cF))
409- then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aI)) + " actual=") + toBase58String(cF)))
410- else if ((cC.amount != cE.amount))
432+ else if ((bF != cP))
433+ then throw(((("invalid debt asset id in the first paymet: expected=" + toBase58String(bF)) + " actual=") + toBase58String(cP)))
434+ else if ((aM != cR))
435+ then throw(((("invalid base asset id in the second payment: expected=" + toBase58String(aM)) + " actual=") + toBase58String(cR)))
436+ else if ((cO.amount != cQ.amount))
411437 then throw("first payment amount doesn't match to the second payment amount")
412- else if ((0 >= cI))
413- then throw(("lendedAmt is less then zero: lendedAmt=" + toString(cI)))
414- else if (((1 * aJ) >= cC.amount))
415- then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cC.amount)))
416- else if ((cC.amount > cI))
417- then throw(((("attached payment is grater than required: pmtAmount=" + toString(cC.amount)) + " lendedAmt=") + toString(cI)))
438+ else if ((0 >= cU))
439+ then throw(("lendedAmt is less then zero: lendedAmt=" + toString(cU)))
440+ else if (((1 * aN) >= cO.amount))
441+ then throw(("attached payment must be greater then 100: pmt0.amount=" + toString(cO.amount)))
442+ else if ((cO.amount > cU))
443+ then throw(((("attached payment is grater than required: pmtAmount=" + toString(cO.amount)) + " lendedAmt=") + toString(cU)))
418444 else {
419- let cw = valueOrElse(getInteger(this, c()), 0)
420- let G = (cI - cC.amount)
421-[IntegerEntry(cx, G), IntegerEntry(c(), (cw - cC.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(bX.transactionId)), B(C, cC, cE, cI, G))]
445+ let cI = valueOrElse(getInteger(this, d()), 0)
446+ let I = (cU - cO.amount)
447+[IntegerEntry(cJ, I), IntegerEntry(d(), (cI - cO.amount)), StringEntry(("%s%s__rebalanceTrace__" + toBase58String(cj.transactionId)), D(E, cO, cQ, cU, I))]
422448 }
423449 }
424450
425451
426452
427-@Callable(bX)
428-func fulfillRedeemRequest (Y) = {
429- let cJ = toString(this)
430- let cK = aa(cJ, Y)
431- let cL = valueOrElse(getInteger(M, cK), 0)
432- if ((0 >= cL))
453+@Callable(cj)
454+func fulfillRedeemRequest (ab) = {
455+ let cV = toString(this)
456+ let cW = ad(cV, ab)
457+ let cX = valueOrElse(getInteger(O, cW), 0)
458+ if ((0 >= cX))
433459 then throw("All liquidity request fulfilled")
434460 else {
435- let cM = X(cJ, Y, cL)
436- let cN = valueOrErrorMessage(getInteger(M, cM), "Empty poolMakerLiquidityRequestKey at factory acc")
437- if (isDefined(getInteger(this, cM)))
461+ let cY = aa(cV, ab, cX)
462+ let cZ = valueOrErrorMessage(getInteger(O, cY), "Empty poolMakerLiquidityRequestKey at factory acc")
463+ if (isDefined(getInteger(this, cY)))
438464 then throw("Liquidity request has been already fulfilled")
439- else [IntegerEntry(cM, cN), ScriptTransfer(M, cN, aI)]
465+ else [IntegerEntry(cY, cZ), ScriptTransfer(O, cZ, aM)]
440466 }
441467 }
442468
443469
444-@Verifier(cO)
445-func cP () = {
446- let cQ = cO
447- if ($isInstanceOf(cQ, "InvokeScriptTransaction"))
470+@Verifier(da)
471+func db () = {
472+ let dc = da
473+ if ($isInstanceOf(dc, "InvokeScriptTransaction"))
448474 then {
449- let cR = cQ
450- if ((cR.fee > (900 * 1000)))
451- then throw(("fee amount is greater than max allowed: " + toString(cR.fee)))
452- else if (isDefined(cR.feeAssetId))
475+ let dd = dc
476+ if ((dd.fee > (900 * 1000)))
477+ then throw(("fee amount is greater than max allowed: " + toString(dd.fee)))
478+ else if (isDefined(dd.feeAssetId))
453479 then throw("only Waves is allowed as feeAssetId")
454- else if ((cR.function == "rebalanceDebts"))
480+ else if ((dd.function == "rebalanceDebts"))
455481 then {
456- let cS = toString(addressFromRecipient(cR.dApp))
457- if ((ac(cS)[ai] != "ISSUED"))
482+ let de = toString(addressFromRecipient(dd.dApp))
483+ if ((af(de)[al] != "ISSUED"))
458484 then throw("only defo dapp is allowed")
459- else if ((cS == toString(this)))
485+ else if ((de == toString(this)))
460486 then throw("impossible to call self rebealnceDebt")
461487 else true
462488 }
463- else if (if (if ((cR.function == "lockNeutrino"))
489+ else if (if (if ((dd.function == "lockNeutrino"))
464490 then true
465- else (cR.function == "lockNeutrinoSP"))
491+ else (dd.function == "lockNeutrinoSP"))
466492 then true
467- else (cR.function == "unlockNeutrino"))
468- then if ((toString(bq) != toString(addressFromRecipient(cR.dApp))))
493+ else (dd.function == "unlockNeutrino"))
494+ then if ((toString(by) != toString(addressFromRecipient(dd.dApp))))
469495 then throw("invalid neutrino staking dapp address")
470- else sigVerify(cO.bodyBytes, cO.proofs[0], af())
496+ else sigVerify(da.bodyBytes, da.proofs[0], ai())
471497 else throw("Not allowed invocation method calls")
472498 }
473- else sigVerify(cO.bodyBytes, cO.proofs[0], cO.senderPublicKey)
499+ else sigVerify(da.bodyBytes, da.proofs[0], da.senderPublicKey)
474500 }
475501

github/deemru/w8io/169f3d6 
248.65 ms