tx · 2yuX3Z58BpXXAC2T3G16VFthr1SG7mWYA1LUV4Atirij

3Mu98SJ398fbHeFdj8Pymfz8rZuvt9oAcxm:  -0.01400000 Waves

2021.07.07 14:07 [1603109] smart account 3Mu98SJ398fbHeFdj8Pymfz8rZuvt9oAcxm > SELF 0.00000000 Waves

{ "type": 13, "id": "2yuX3Z58BpXXAC2T3G16VFthr1SG7mWYA1LUV4Atirij", "fee": 1400000, "feeAssetId": null, "timestamp": 1625656068795, "version": 2, "chainId": 84, "sender": "3Mu98SJ398fbHeFdj8Pymfz8rZuvt9oAcxm", "senderPublicKey": "3erntBJepAviRPMnGKrQcn9QnwvASK32zHaw4p8Qe5MW", "proofs": [ "4cRHQJ8epJDkPde9ZKJgmGNqCP2jn8923w3JfEkfQZitsL8J8zgsm5FTgPTA12gdpfEnXzXhUqxRLPkmFhnCRC7D" ], "script": "base64:AAIEAAAAAAAAACoIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQEAAABHAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAKa2V5VmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAAC2tleUFzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAtrZXlBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAALa2V5QmFsYW5jZUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAALa2V5QmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZUluaXRBAgAAAAxBX2Fzc2V0X2luaXQAAAAAD2tleUJhbGFuY2VJbml0QgIAAAAMQl9hc3NldF9pbml0AAAAAA9rZXlTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABNrZXlTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAPa2V5Rmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAtrU2hhcmVMaW1pdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAALa0Jhc2VQZXJpb2QCAAAAC2Jhc2VfcGVyaW9kAAAAAA1rUGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAAAxrU3RhcnRIZWlnaHQCAAAADHN0YXJ0X2hlaWdodAAAAAATa0ZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAADGFkbWluUHViS2V5MQEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAA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QgAAAAUFAAAACXNoYXJlTmFtZQUAAAAQc2hhcmVEZXNjcmlwdGlvbgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAA1zaGFyZURlY2ltYWxzBgQAAAAMc2hhcmVJc3N1ZUlkCQAEOAAAAAEFAAAACnNoYXJlSXNzdWUEAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Q29tbWlzc2lvbgUAAAAKY29tbWlzc2lvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFAAAADHBlcmlvZExlbmd0aAUAAAADbmlsBQAAAAliYXNlRW50cnkAAAABaQEAAAARaW5pdFdpdGhJbml0UmF0aW8AAAAFAAAACWFtdEFzc2V0QQAAAAlhbXRBc3NldEIAAAALc3RyQXNzZXRJZEEAAAALc3RyQXNzZXRJZEIAAAAMZmlyc3RIYXJ2ZXN0BAAAAAskdDA5MDEwOTA5NwkBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABBQAAAAtzdHJBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAAskdDA5MDEwOTA5NwAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAACyR0MDkwMTA5MDk3AAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAAskdDA5MDEwOTA5NwAAAAJfMwQAAAALJHQwOTEwMjkxODkJAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQUAAAALc3RyQXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAALJHQwOTEwMjkxODkAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAAskdDA5MTAyOTE4OQAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAALJHQwOTEwMjkxODkAAAACXzMDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEmFkbWluUHViS2V5U3Rha2luZwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQbAAAAAgUAAAAEdGhpcwUAAAAJa2V5QWN0aXZlCQAAAgAAAAECAAAAFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRBBQAAAAtzdHJBc3NldElkQgkAAAIAAAABAgAAABhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEAAAACXNoYXJlTmFtZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAABcwkAAS8AAAACBQAAAA1wbXRBc3NldE5hbWVBAAAAAAAAAAAHAgAAAAFfCQABLwAAAAIFAAAADXBtdEFzc2V0TmFtZUIAAAAAAAAAAAcEAAAAEHNoYXJlRGVzY3JpcHRpb24JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACJTaGFyZVRva2VuIG9mIFN3b3BGaSBwcm90b2NvbCBmb3IgBQAAAA1wbXRBc3NldE5hbWVBAgAAAAUgYW5kIAUAAAANcG10QXNzZXROYW1lQgIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAABHRoaXMEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5AAAAAAAAAAAABAAAAApzaGFyZUlzc3VlCQAEQgAAAAUFAAAACXNoYXJlTmFtZQUAAAAQc2hhcmVEZXNjcmlwdGlvbgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAA1zaGFyZURlY2ltYWxzBgQAAAAMc2hhcmVJc3N1ZUlkCQAEOAAAAAEFAAAACnNoYXJlSXNzdWUEAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tleUJhbGFuY2VJbml0QQUAAAAJYW10QXNzZXRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rZXlCYWxhbmNlSW5pdEIFAAAACWFtdEFzc2V0QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rZXlDb21taXNzaW9uBQAAAApjb21taXNzaW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABtrZXlDb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVNoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFAAAADHBlcmlvZExlbmd0aAUAAAADbmlsBQAAAAliYXNlRW50cnkAAAABaQEAAAAYa2VlcExpbWl0Rm9yRmlyc3RIYXJ2ZXN0AAAAAQAAAApzaGFyZUxpbWl0AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABJhZG1pblB1YktleVN0YWtpbmcFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa1NoYXJlTGltaXQFAAAACnNoYXJlTGltaXQFAAAAA25pbAAAAAFpAQAAABZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAAAAQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG10QXNzZXRJZEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0SWRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAApwbXRBbW91bnRBCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAALcG10QXNzZXRJZEEEAAAACnBtdEFtb3VudEIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQgMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAACQAAAAAAAAIFAAAACGJhbGFuY2VCAAAAAAAAAAAABwQAAAANJHQwMTE4NzQxMTk1MQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDExODc0MTE5NTEAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMTg3NDExOTUxAAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMTg3NDExOTUxAAAAAl8zBAAAAA0kdDAxMTk2MDEyMDM3CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTE5NjAxMjAzNwAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDExOTYwMTIwMzcAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDExOTYwMTIwMzcAAAACXzMEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAphc3NldEluaXRBBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTMJAABrAAAAAwUAAAAKYXNzZXRJbml0QgUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEIDCQAAAAAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAtwbXRBc3NldElkQgkAAAIAAAABAgAAABhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAAawAAAAMJAABsAAAABgUAAAAKcG10QW1vdW50QQUAAAAMcG10RGVjaW1hbHNBAAAAAAAAAAAFAAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0EFAAAACEhBTEZET1dOCQAAbAAAAAYFAAAACnBtdEFtb3VudEIFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNCBQAAAAhIQUxGRE9XTgkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAA1zaGFyZURlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAAhIQUxGRE9XTgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABSBhbmQgBQAAAAtzdHJBc3NldElkQgMJAAAAAAAAAgUAAAASc2hhcmVJbml0aWFsU3VwcGx5AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRBBQAAAAtwbXRBc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEIFAAAAC3BtdEFzc2V0SWRCBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUFzc2V0SWQFAAAAA25pbAQAAAAKdG9rZW5SYXRpbwkAAGsAAAADCQAAawAAAAMFAAAACGJhbGFuY2VBBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTMJAABrAAAAAwUAAAAIYmFsYW5jZUIFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRCBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAAawAAAAMFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWU4BQAAAAhiYWxhbmNlQQQAAAATcmF0aW9TaGFyZVRva2Vuc0luQgkAAGsAAAADBQAAAApwbXRBbW91bnRCBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGsAAAADCQABlwAAAAEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5CBQAAAANuaWwFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAC3NjYWxlVmFsdWU4AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwMJAABmAAAAAgAAAAAAAAAAAAUAAAARc2xpcHBhZ2VUb2xlcmFuY2UGCQAAZgAAAAIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClTbGlwcGFnZSB0b2xlcmFuY2UgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIAkAAaQAAAABBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgIAAAAWIGluY2x1c2l2ZWx5LiBBY3R1YWw6IAkAAaQAAAABBQAAABFzbGlwcGFnZVRvbGVyYW5jZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAIJAAACAAAAAQIAAAAcVHdvIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZAMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABSBhbmQgBQAAAAtzdHJBc3NldElkQgMDCQAAZgAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGUAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAAAp0b2tlblJhdGlvBgkAAGYAAAACBQAAAAp0b2tlblJhdGlvCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABkAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABAgAAAD1JbmNvcnJlY3QgYXNzZXRzIGFtb3VudDogYW1vdW50cyBtdXN0IGhhdmUgdGhlIGNvbnRyYWN0IHJhdGlvAwkAAAAAAAACBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEEFAAAAC3BtdEFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcG10QW1vdW50QgUAAAALcG10QXNzZXRJZEIFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAAABAAAAA0kdDAxNjQ0OTE2NTk5CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTY0NDkxNjU5OQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDE2NDQ5MTY1OTkAAAACXzIEAAAADGFtb3VudFRvUGF5QQkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUEFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACGFzc2V0SWRBBAAAAAxhbW91bnRUb1BheUIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VCBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAhhc3NldElkQgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAJAAJYAAAAAQUAAAAMc2hhcmVBc3NldElkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QQUAAAARYXZhaWxhYmxlQmFsYW5jZUEGCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QgUAAAARYXZhaWxhYmxlQmFsYW5jZUIJAQAAACJ0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2VzAAAAAgUAAAAMYW1vdW50VG9QYXlBBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAAxhbW91bnRUb1BheUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkJAABlAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlCBQAAAAhhc3NldElkQgUAAAADbmlsAAAAAWkBAAAACGV4Y2hhbmdlAAAAAQAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAADSR0MDE3ODA1MTc4ODAJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNzgwNTE3ODgwAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTc4MDUxNzg4MAAAAAJfMgoBAAAADWNhbGN1bGF0ZUZlZXMAAAACAAAACXRva2VuRnJvbQAAAAd0b2tlblRvBAAAABBhbW91bnRXaXRob3V0RmVlCQAAawAAAAMFAAAAB3Rva2VuVG8FAAAACXBtdEFtb3VudAkAAGQAAAACBQAAAAlwbXRBbW91bnQFAAAACXRva2VuRnJvbQQAAAANYW1vdW50V2l0aEZlZQkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAAFGNvbW1pc3Npb25Hb3Zlcm5hbmNlBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkAAaQAAAABBQAAAA1hbW91bnRXaXRoRmVlAgAAACAgaXMgbGVzcyB0aGFuIHNwZWNpZmllZCBtaW5pbXVtIAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAUVAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAABgkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAkAAAIAAAABAgAAACBDYW4ndCBleGNoYW5nZSB3aXRoIHplcm8gYmFsYW5jZQMJAABnAAAAAgAAAAAAAAAAAAUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgIAAAA0TWluaW1hbCBhbW91bnQgdG8gcmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQgQAAAANJHQwMTkxNTQxOTI0NQkBAAAADWNhbGN1bGF0ZUZlZXMAAAACBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAxOTE1NDE5MjQ1AAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMTkxNTQxOTI0NQAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDE5MTU0MTkyNDUAAAACXzMEAAAAC25ld0JhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VCCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDAwMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUEHBgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUIFAAAACmFzc2V0TmFtZUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANd2FsbGV0QWRkcmVzcwUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAALYXNzZXRJZFNlbmQFAAAAA25pbAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQQQAAAANJHQwMjAxMTQyMDIwNQkBAAAADWNhbGN1bGF0ZUZlZXMAAAACBQAAAAhiYWxhbmNlQgUAAAAIYmFsYW5jZUEEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAyMDExNDIwMjA1AAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMjAxMTQyMDIwNQAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDIwMTE0MjAyMDUAAAACXzMEAAAAC25ld0JhbGFuY2VBCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQEAAAAC25ld0JhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQDAwMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUEHBgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUEFAAAACmFzc2V0TmFtZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANd2FsbGV0QWRkcmVzcwUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAALYXNzZXRJZFNlbmQFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAQgb3IgBQAAAAtzdHJBc3NldElkQgAAAAFpAQAAAAhzaHV0ZG93bgAAAAADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAEJAAEsAAAAAgIAAAAiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAhrZXlDYXVzZQIAAAAadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAQAAAAdzdXNwZW5kAAAAAQIAAAAPUGF1c2VkIGJ5IGFkbWluAAAAAWkBAAAACGFjdGl2YXRlAAAAAAMFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACWtleUFjdGl2ZQYJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAIa2V5Q2F1c2UFAAAAA25pbAAAAAFpAQAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAAAAQAAAAthbW91bnRMZWF2ZQQAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEEAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCCQAAZQAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFAAAACGJhbGFuY2VCBAAAAA1hbW91bnRFbnJvbGxBCQAAZQAAAAIFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBAwkAAAAAAAACBQAAAAhhc3NldElkQQUAAAAEdW5pdAUAAAALYW1vdW50TGVhdmUAAAAAAAAAAAAEAAAADWFtb3VudEVucm9sbEIJAABlAAAAAgUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAAR1bml0BQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAACtPbmx5IHRoZSBEQXBwIGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAwkAAGYAAAACAAAAAAAAAAAABQAAAAthbW91bnRMZWF2ZQkAAAIAAAABCQABLAAAAAICAAAAM0FyZ3VtZW50ICdhbW91bnRMZWF2ZScgY2Fubm90IGJlIG5lZ2F0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAAAthbW91bnRMZWF2ZQMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBBgkAAGYAAAACAAAAAAAAAAAABQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgkBAAAAB3N1c3BlbmQAAAABAgAAABZFbnJvbGwgYW1vdW50IG5lZ2F0aXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAANYW1vdW50RW5y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", "height": 1603109, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BVhskaR7kFJ6WqyV9DKc46aTfi1CkJ66aYs4j1JkuSud Next: 9SMCjZDxa4PvvYR2uAZFUu9FrGb6e4rL3pNa7oe3TGRq Diff:
OldNewDifferences
5353
5454 let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
56+let A = base58'5CqqMkmtXXt35KRH9LdWA3ap6TffPvTT5SHQzYrVFbBw'
5757
58-let B = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
58+let B = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
5959
60-let C = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
60+let C = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
6161
62-let D = valueOrErrorMessage(getInteger(B, r), "Empty kBasePeriod")
62+let D = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
6363
64-let E = valueOrErrorMessage(getInteger(B, t), "Empty kStartHeight")
64+let E = Address(base58'3MuDZSULkhcvXKP7YG2HbuKrBUNe324Zss5')
6565
66-let F = valueOrErrorMessage(getInteger(B, s), "Empty kPeriodLength")
66+let F = valueOrErrorMessage(getInteger(C, r), "Empty kBasePeriod")
6767
68-let G = ((D + ((height - E) / F)) + 5)
68+let G = valueOrErrorMessage(getInteger(C, t), "Empty kStartHeight")
6969
70-let H = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
70+let H = valueOrErrorMessage(getInteger(C, s), "Empty kPeriodLength")
7171
72-let I = (9 * value(value(assetInfo(H)).minSponsoredFee))
72+let I = ((F + ((height - G) / H)) + 3)
7373
74-let J = getBooleanValue(this, c)
74+let J = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7575
76-let K = getStringValue(this, d)
76+let K = 270000
7777
78-let L = getStringValue(this, e)
78+let L = getBooleanValue(this, c)
7979
80-let M = if ((K == "WAVES"))
80+let M = getStringValue(this, d)
81+
82+let N = getStringValue(this, e)
83+
84+let O = if ((M == "WAVES"))
8185 then unit
82- else fromBase58String(K)
86+ else fromBase58String(M)
8387
84-let N = if ((L == "WAVES"))
88+let P = if ((N == "WAVES"))
8589 then unit
86- else fromBase58String(L)
90+ else fromBase58String(N)
8791
88-let O = {
89- let P = M
90- if ($isInstanceOf(P, "ByteVector"))
92+let Q = {
93+ let R = O
94+ if ($isInstanceOf(R, "ByteVector"))
9195 then {
92- let Q = P
93- value(assetInfo(Q)).name
96+ let S = R
97+ value(assetInfo(S)).name
9498 }
95- else if ($isInstanceOf(P, "Unit"))
99+ else if ($isInstanceOf(R, "Unit"))
96100 then {
97- let R = P
101+ let T = R
98102 "WAVES"
99103 }
100104 else throw("Match error")
101105 }
102106
103-let S = {
104- let P = N
105- if ($isInstanceOf(P, "ByteVector"))
107+let U = {
108+ let R = P
109+ if ($isInstanceOf(R, "ByteVector"))
106110 then {
107- let Q = P
108- value(assetInfo(Q)).name
111+ let S = R
112+ value(assetInfo(S)).name
109113 }
110- else if ($isInstanceOf(P, "Unit"))
114+ else if ($isInstanceOf(R, "Unit"))
111115 then {
112- let R = P
116+ let T = R
113117 "WAVES"
114118 }
115119 else throw("Match error")
116120 }
117121
118-let T = getIntegerValue(this, f)
122+let V = getIntegerValue(this, f)
119123
120-let U = getIntegerValue(this, g)
124+let W = getIntegerValue(this, g)
121125
122-let V = fromBase58String(getStringValue(this, j))
126+let X = fromBase58String(getStringValue(this, j))
123127
124-let W = getIntegerValue(this, k)
128+let Y = getIntegerValue(this, k)
125129
126-let X = 3000
130+let Z = 3000
127131
128-let Y = 1200
132+let aa = 1200
129133
130-let Z = 1000000
131-
132-let aa = 1000
133-
134-let ab = 100000000
134+let ab = 1000000
135135
136136 let ac = 1000
137137
138-let ad = 8
138+let ad = 100000000
139139
140-func ae (af) = {
141- let P = af
142- if ($isInstanceOf(P, "ByteVector"))
140+let ae = 1000
141+
142+let af = 8
143+
144+func ag (ah) = {
145+ let R = ah
146+ if ($isInstanceOf(R, "ByteVector"))
143147 then {
144- let Q = P
145- assetBalance(this, Q)
148+ let S = R
149+ assetBalance(this, S)
146150 }
147- else if ($isInstanceOf(P, "Unit"))
151+ else if ($isInstanceOf(R, "Unit"))
148152 then {
149- let R = P
153+ let T = R
150154 wavesBalance(this).available
151155 }
152156 else throw("Match error")
153157 }
154158
155159
156-let ag = {
157- let P = getInteger(C, ((("rpd_balance_" + toBase58String(H)) + "_") + toString(this)))
158- if ($isInstanceOf(P, "Int"))
160+let ai = {
161+ let R = getInteger(D, ((("rpd_balance_" + toBase58String(J)) + "_") + toString(this)))
162+ if ($isInstanceOf(R, "Int"))
159163 then {
160- let ah = P
161- ah
164+ let aj = R
165+ aj
162166 }
163- else if ($isInstanceOf(P, "Unit"))
167+ else if ($isInstanceOf(R, "Unit"))
164168 then {
165- let ai = P
169+ let ak = R
166170 0
167171 }
168172 else throw("Match error")
169173 }
170174
171-let aj = getIntegerValue(this, h)
175+let al = getIntegerValue(this, h)
172176
173-let ak = getIntegerValue(this, i)
177+let am = getIntegerValue(this, i)
174178
175-let al = (T - (if ((M == H))
176- then ag
179+let an = (V - (if ((O == J))
180+ then ai
177181 else 0))
178182
179-let am = (U - (if ((N == H))
180- then ag
183+let ao = (W - (if ((P == J))
184+ then ai
181185 else 0))
182186
183-let an = (ae(M) + (if ((M == H))
184- then ag
187+let ap = (ag(O) + (if ((O == J))
188+ then ai
185189 else 0))
186190
187-let ao = (ae(N) + (if ((N == H))
188- then ag
191+let aq = (ag(P) + (if ((P == J))
192+ then ai
189193 else 0))
190194
191-let ap = if ((an >= T))
192- then (ao >= U)
195+let ar = if ((ap >= V))
196+ then (aq >= W)
193197 else false
194198
195-func aq (af) = {
196- let P = af
197- if ($isInstanceOf(P, "ByteVector"))
199+func as (ah) = {
200+ let R = ah
201+ if ($isInstanceOf(R, "ByteVector"))
198202 then {
199- let Q = P
200- let ar = toBase58String(Q)
201- let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
202- $Tuple3(ar, as.name, as.decimals)
203+ let S = R
204+ let at = toBase58String(S)
205+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
206+ $Tuple3(at, au.name, au.decimals)
203207 }
204- else if ($isInstanceOf(P, "Unit"))
208+ else if ($isInstanceOf(R, "Unit"))
205209 then {
206- let R = P
210+ let T = R
207211 $Tuple3("WAVES", "WAVES", 8)
208212 }
209213 else throw("Match error")
210214 }
211215
212216
213-func at (au) = if ((au == "WAVES"))
217+func av (aw) = if ((aw == "WAVES"))
214218 then $Tuple3("WAVES", "WAVES", 8)
215219 else {
216- let ar = au
217- let Q = fromBase58String(au)
218- let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
219- $Tuple3(ar, as.name, as.decimals)
220+ let at = aw
221+ let S = fromBase58String(aw)
222+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
223+ $Tuple3(at, au.name, au.decimals)
220224 }
221225
222226
223-func av (aw) = [BooleanEntry(c, false), StringEntry(n, aw)]
227+func ax (ay) = [BooleanEntry(c, false), StringEntry(n, ay)]
224228
225229
226-func ax (ay,af) = if ((af == H))
230+func az (aA,ah) = if ((ah == J))
227231 then {
228- let az = (ay - I)
229- if ((0 >= az))
230- then throw((((("Insufficient amount " + toString(ay)) + " to deduct staking fee ") + toString(I)) + " USD-N"))
231- else az
232+ let aB = (aA - K)
233+ if ((0 >= aB))
234+ then throw((((("Insufficient amount " + toString(aA)) + " to deduct staking fee ") + toString(K)) + " USD-N"))
235+ else aB
232236 }
233- else ay
237+ else aA
234238
235239
236-func aA (ay,aB,aC) = throw((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + aC) + " due to staking. Available: ") + toString(aB)) + " ") + aC) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
240+func aC (aA,aD,aE) = throw((((((((("Insufficient DApp balance to pay " + toString(aA)) + " ") + aE) + " due to staking. Available: ") + toString(aD)) + " ") + aE) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
237241
238242
239-func aD (aE,aF) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aE)) + " ") + O) + " and ") + toString(aF)) + " ") + S) + " due to staking. Available: ") + toString(al)) + " ") + O) + " and ") + toString(am)) + " ") + S) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
243+func aF (aG,aH) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aG)) + " ") + Q) + " and ") + toString(aH)) + " ") + U) + " due to staking. Available: ") + toString(an)) + " ") + Q) + " and ") + toString(ao)) + " ") + U) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
240244
241245
242-@Callable(aG)
243-func init (aH) = {
244- let aI = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
245- let aJ = aI._1
246- let aK = aI._2
247- let aL = $Tuple2(aG.payments[1].amount, aG.payments[1].assetId)
246+func aI () = ax(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + Q) + ", ") + toString(aq)) + " ") + U) + ". State: ") + toString(V)) + " ") + Q) + ", ") + toString(W)) + " ") + U))
247+
248+
249+@Callable(aJ)
250+func init (aK) = {
251+ let aL = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
248252 let aM = aL._1
249253 let aN = aL._2
250- let aO = aq(aK)
254+ let aO = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId)
251255 let aP = aO._1
252256 let aQ = aO._2
253- let aR = aO._3
254- let aS = aq(aN)
255- let aT = aS._1
256- let aU = aS._2
257- let aV = aS._3
258- if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
257+ let aR = as(aN)
258+ let aS = aR._1
259+ let aT = aR._2
260+ let aU = aR._3
261+ let aV = as(aQ)
262+ let aW = aV._1
263+ let aX = aV._2
264+ let aY = aV._3
265+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
259266 then throw("Only admin can call this function")
260267 else if (isDefined(getBoolean(this, c)))
261268 then throw("DApp is already active")
262- else if ((aK == aN))
269+ else if ((aN == aQ))
263270 then throw("Assets must be different")
264271 else {
265- let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
266- let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
267- let aY = ((aR + aV) / 2)
268- let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
269- let ba = Issue(aW, aX, aZ, aY, true)
270- let bb = calculateAssetId(ba)
271- let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, bb)]
272- if (aH)
273- then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
274- else bc
272+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
273+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
274+ let bb = ((aU + aY) / 2)
275+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
276+ let bd = Issue(aZ, ba, bc, bb, true)
277+ let be = calculateAssetId(bd)
278+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, be)]
279+ if (aK)
280+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
281+ else bf
275282 }
276283 }
277284
278285
279286
280-@Callable(aG)
281-func initWithInitRatio (bd,be,K,L,aH) = {
282- let bf = at(K)
283- let aP = bf._1
284- let aQ = bf._2
285- let aR = bf._3
286- let bg = at(L)
287- let aT = bg._1
288- let aU = bg._2
289- let aV = bg._3
290- if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
287+@Callable(aJ)
288+func initWithInitRatio (bg,bh,M,N,aK) = {
289+ let bi = av(M)
290+ let aS = bi._1
291+ let aT = bi._2
292+ let aU = bi._3
293+ let bj = av(N)
294+ let aW = bj._1
295+ let aX = bj._2
296+ let aY = bj._3
297+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
291298 then throw("Only admin can call this function")
292299 else if (isDefined(getBoolean(this, c)))
293300 then throw("DApp is already active")
294- else if ((K == L))
301+ else if ((M == N))
295302 then throw("Assets must be different")
296303 else {
297- let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
298- let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
299- let aY = ((aR + aV) / 2)
300- let aZ = 0
301- let ba = Issue(aW, aX, aZ, aY, true)
302- let bb = calculateAssetId(ba)
303- let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(h, bd), IntegerEntry(i, be), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(p, (E + (G * F))), IntegerEntry(k, aZ)]
304- if (aH)
305- then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
306- else bc
304+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
305+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
306+ let bb = ((aU + aY) / 2)
307+ let bc = 0
308+ let bd = Issue(aZ, ba, bc, bb, true)
309+ let be = calculateAssetId(bd)
310+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(h, bg), IntegerEntry(i, bh), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc)]
311+ if (aK)
312+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
313+ else bf
307314 }
308315 }
309316
310317
311318
312-@Callable(aG)
313-func keepLimitForFirstHarvest (bh) = if (!(J))
319+@Callable(aJ)
320+func keepLimitForFirstHarvest (bk) = if (!(L))
314321 then throw("DApp is inactive at this moment")
315- else if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
322+ else if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
316323 then throw("Only admin can call this function")
317- else [IntegerEntry(q, bh)]
324+ else [IntegerEntry(q, bk)]
318325
319326
320327
321-@Callable(aG)
322-func replenishWithTwoTokens (bi) = {
323- let aK = aG.payments[0].assetId
324- let aN = aG.payments[1].assetId
325- let aJ = ax(aG.payments[0].amount, aK)
326- let aM = ax(aG.payments[1].amount, aN)
327- if (if ((T == 0))
328- then (U == 0)
328+@Callable(aJ)
329+func replenishWithTwoTokens (bl) = {
330+ let aN = aJ.payments[0].assetId
331+ let aQ = aJ.payments[1].assetId
332+ let aM = az(aJ.payments[0].amount, aN)
333+ let aP = az(aJ.payments[1].amount, aQ)
334+ if (if ((V == 0))
335+ then (W == 0)
329336 else false)
330337 then {
331- let bj = aq(aK)
332- let aP = bj._1
333- let aQ = bj._2
334- let aR = bj._3
335- let bk = aq(aN)
336- let aT = bk._1
337- let aU = bk._2
338- let aV = bk._3
339- let bl = fraction(fraction(aj, ab, aJ), aa, fraction(ak, ab, aM))
340- if ((aK == aN))
338+ let bm = as(aN)
339+ let aS = bm._1
340+ let aT = bm._2
341+ let aU = bm._3
342+ let bn = as(aQ)
343+ let aW = bn._1
344+ let aX = bn._2
345+ let aY = bn._3
346+ let bo = fraction(fraction(al, ad, aM), ac, fraction(am, ad, aP))
347+ if ((aN == aQ))
341348 then throw("Assets must be different")
342349 else {
343- let aY = ((aR + aV) / 2)
344- let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
345- if (!(J))
350+ let bb = ((aU + aY) / 2)
351+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
352+ if (!(L))
346353 then throw("DApp is inactive at this moment")
347- else if (if ((0 > bi))
354+ else if (if ((0 > bl))
348355 then true
349- else (bi > ac))
350- then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
351- else if ((size(aG.payments) != 2))
356+ else (bl > ae))
357+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
358+ else if ((size(aJ.payments) != 2))
352359 then throw("Two attached assets expected")
353- else if (if ((((aa * (ac - bi)) / ac) > bl))
360+ else if (if ((((ac * (ae - bl)) / ae) > bo))
354361 then true
355- else (bl > ((aa * (ac + bi)) / ac)))
362+ else (bo > ((ac * (ae + bl)) / ae)))
356363 then throw("Incorrect assets amount: amounts must have the contract ratio")
357- else if (if ((aK != M))
364+ else if (if ((aN != O))
358365 then true
359- else (aN != N))
360- then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
361- else if ((aZ == 0))
366+ else (aQ != P))
367+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
368+ else if ((bc == 0))
362369 then throw("Too small amount to replenish")
363- else if (!(ap))
364- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
365- else [Reissue(V, aZ, true), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, V)]
370+ else if (!(ar))
371+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
372+ else [Reissue(X, bc, true), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, X)]
366373 }
367374 }
368375 else {
369- let bl = fraction(fraction(T, ab, aJ), aa, fraction(U, ab, aM))
370- let bm = fraction(aJ, ab, T)
371- let bn = fraction(aM, ab, U)
372- let bo = fraction(min([bm, bn]), W, ab)
373- if (!(J))
376+ let bo = fraction(fraction(V, ad, aM), ac, fraction(W, ad, aP))
377+ let bp = fraction(aM, ad, V)
378+ let bq = fraction(aP, ad, W)
379+ let br = fraction(min([bp, bq]), Y, ad)
380+ if (!(L))
374381 then throw("DApp is inactive at this moment")
375- else if (if ((0 > bi))
382+ else if (if ((0 > bl))
376383 then true
377- else (bi > ac))
378- then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
379- else if ((size(aG.payments) != 2))
384+ else (bl > ae))
385+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
386+ else if ((size(aJ.payments) != 2))
380387 then throw("Two attached assets expected")
381- else if (if ((aK != M))
388+ else if (if ((aN != O))
382389 then true
383- else (aN != N))
384- then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
385- else if (if ((((aa * (ac - bi)) / ac) > bl))
390+ else (aQ != P))
391+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
392+ else if (if ((((ac * (ae - bl)) / ae) > bo))
386393 then true
387- else (bl > ((aa * (ac + bi)) / ac)))
394+ else (bo > ((ac * (ae + bl)) / ae)))
388395 then throw("Incorrect assets amount: amounts must have the contract ratio")
389- else if ((bo == 0))
396+ else if ((br == 0))
390397 then throw("Too small amount to replenish")
391- else if (!(ap))
392- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
393- else [IntegerEntry(f, (T + aJ)), IntegerEntry(g, (U + aM)), IntegerEntry(k, (W + bo)), Reissue(V, bo, true), ScriptTransfer(aG.caller, bo, V)]
398+ else if (!(ar))
399+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
400+ else [IntegerEntry(f, (V + aM)), IntegerEntry(g, (W + aP)), IntegerEntry(k, (Y + br)), Reissue(X, br, true), ScriptTransfer(aJ.caller, br, X)]
394401 }
395402 }
396403
397404
398405
399-@Callable(aG)
406+@Callable(aJ)
400407 func withdraw () = {
401- let bp = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
402- let bq = bp._1
403- let br = bp._2
404- let bs = ax(fraction(bq, T, W), M)
405- let bt = ax(fraction(bq, U, W), N)
406- if (!(J))
408+ let bs = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
409+ let bt = bs._1
410+ let bu = bs._2
411+ let bv = az(fraction(bt, V, Y), O)
412+ let bw = az(fraction(bt, W, Y), P)
413+ if (!(L))
407414 then throw("DApp is inactive at this moment")
408- else if ((size(aG.payments) != 1))
415+ else if ((size(aJ.payments) != 1))
409416 then throw("One attached payment expected")
410- else if ((br != V))
411- then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
412- else if (!(ap))
413- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
414- else if (if ((bs > al))
417+ else if ((bu != X))
418+ then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
419+ else if (!(ar))
420+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
421+ else if (if ((bv > an))
415422 then true
416- else (bt > am))
417- then aD(bs, bt)
418- else [IntegerEntry(f, (T - bs)), IntegerEntry(g, (U - bt)), IntegerEntry(k, (W - bq)), Burn(V, bq), ScriptTransfer(aG.caller, bs, M), ScriptTransfer(aG.caller, bt, N)]
423+ else (bw > ao))
424+ then aF(bv, bw)
425+ else [IntegerEntry(f, (V - bv)), IntegerEntry(g, (W - bw)), IntegerEntry(k, (Y - bt)), Burn(X, bt), ScriptTransfer(aJ.caller, bv, O), ScriptTransfer(aJ.caller, bw, P)]
419426 }
420427
421428
422429
423-@Callable(aG)
424-func exchange (bu) = {
425- let bv = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
426- let bq = bv._1
427- let br = bv._2
428- func bw (bx,by) = {
429- let bz = fraction(by, bq, (bq + bx))
430- let bA = fraction(bz, (Z - X), Z)
431- let bB = fraction(bz, Y, Z)
432- if ((bu > bA))
433- then throw(((("Calculated amount to receive " + toString(bA)) + " is less than specified minimum ") + toString(bu)))
434- else $Tuple3(bz, bA, bB)
430+@Callable(aJ)
431+func exchange (bx) = {
432+ let by = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
433+ let bt = by._1
434+ let bu = by._2
435+ func bz (bA,bB) = {
436+ let bC = fraction(bB, bt, (bt + bA))
437+ let bD = fraction(bC, (ab - Z), ab)
438+ let bE = fraction(bC, aa, ab)
439+ if ((bx > bD))
440+ then throw(((("Calculated amount to receive " + toString(bD)) + " is less than specified minimum ") + toString(bx)))
441+ else $Tuple3(bC, bD, bE)
435442 }
436443
437- if (!(J))
444+ if (!(L))
438445 then throw("DApp is inactive at this moment")
439- else if (if ((T == 0))
446+ else if (if ((V == 0))
440447 then true
441- else (U == 0))
448+ else (W == 0))
442449 then throw("Can't exchange with zero balance")
443- else if ((0 >= bu))
444- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bu)))
445- else if ((size(aG.payments) != 1))
450+ else if ((0 >= bx))
451+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bx)))
452+ else if ((size(aJ.payments) != 1))
446453 then throw("One attached payment expected")
447- else if (!(ap))
448- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
449- else if ((br == M))
454+ else if (!(ar))
455+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
456+ else if ((bu == O))
450457 then {
451- let bC = N
452- let bD = bw(T, U)
453- let bz = bD._1
454- let bA = bD._2
455- let bB = bD._3
456- let bE = (T + bq)
457- let bF = ((U - bA) - bB)
458- if (if (if ((M == H))
459- then (ag >= bE)
458+ let bF = P
459+ let bG = bz(V, W)
460+ let bC = bG._1
461+ let bD = bG._2
462+ let bE = bG._3
463+ let bH = (V + bt)
464+ let bI = ((W - bD) - bE)
465+ if (if (if ((O == J))
466+ then (ai >= bH)
460467 else false)
461468 then true
462- else if ((N == H))
463- then (ag >= bF)
469+ else if ((P == J))
470+ then (ai >= bI)
464471 else false)
465- then aA(bA, am, S)
466- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
472+ then aC(bD, ao, U)
473+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
467474 }
468- else if ((br == N))
475+ else if ((bu == P))
469476 then {
470- let bC = M
471- let bG = bw(U, T)
472- let bz = bG._1
473- let bA = bG._2
474- let bB = bG._3
475- let bE = ((T - bA) - bB)
476- let bF = (U + bq)
477- if (if (if ((M == H))
478- then (ag >= bE)
477+ let bF = O
478+ let bJ = bz(W, V)
479+ let bC = bJ._1
480+ let bD = bJ._2
481+ let bE = bJ._3
482+ let bH = ((V - bD) - bE)
483+ let bI = (W + bt)
484+ if (if (if ((O == J))
485+ then (ai >= bH)
479486 else false)
480487 then true
481- else if ((N == H))
482- then (ag >= bF)
488+ else if ((P == J))
489+ then (ai >= bI)
483490 else false)
484- then aA(bA, al, O)
485- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
491+ then aC(bD, an, Q)
492+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
486493 }
487- else throw(((("Incorrect asset attached. Expected: " + K) + " or ") + L))
494+ else throw(((("Incorrect asset attached. Expected: " + M) + " or ") + N))
488495 }
489496
490497
491498
492-@Callable(aG)
493-func shutdown () = if (!(J))
499+@Callable(aJ)
500+func shutdown () = if (!(L))
494501 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
495- else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
502+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
496503 then throw("Only admin can call this function")
497- else av("Paused by admin")
504+ else ax("Paused by admin")
498505
499506
500507
501-@Callable(aG)
502-func activate () = if (J)
508+@Callable(aJ)
509+func activate () = if (L)
503510 then throw("DApp is already active")
504- else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
511+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
505512 then throw("Only admin can call this function")
506513 else [BooleanEntry(c, true), DeleteEntry(n)]
507514
508515
509516
510-@Callable(aG)
511-func takeIntoAccountExtraFunds (bH) = {
512- let bI = (an - T)
513- let bJ = (ao - U)
514- let bK = (bI - (if ((M == H))
515- then bH
517+@Callable(aJ)
518+func takeIntoAccountExtraFunds (bK) = {
519+ let bL = (ap - V)
520+ let bM = (aq - W)
521+ let bN = (bL - (if ((O == unit))
522+ then bK
516523 else 0))
517- let bL = (bJ - (if ((N == H))
518- then bH
524+ let bO = (bM - (if ((P == unit))
525+ then bK
519526 else 0))
520- if (!(J))
527+ if (!(L))
521528 then throw("DApp is inactive at this moment")
522- else if ((aG.caller != this))
529+ else if ((aJ.caller != this))
523530 then throw("Only the DApp itself can call this function")
524- else if ((0 > bH))
525- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bH)))
526- else if (if ((0 > bI))
531+ else if ((0 > bK))
532+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bK)))
533+ else if (if ((0 > bL))
527534 then true
528- else (0 > bJ))
529- then av("Enroll amount negative")
530- else if (if ((0 > bK))
535+ else (0 > bM))
536+ then ax("Enroll amount negative")
537+ else if (if ((0 > bN))
531538 then true
532- else (0 > bL))
539+ else (0 > bO))
533540 then throw("Too large amountLeave")
534- else [IntegerEntry(f, (T + bK)), IntegerEntry(g, (U + bL)), IntegerEntry(("last_income_" + K), bK), IntegerEntry(("last_income_" + L), bL)]
541+ else [IntegerEntry(f, (V + bN)), IntegerEntry(g, (W + bO)), IntegerEntry(("last_income_" + M), bN), IntegerEntry(("last_income_" + N), bO)]
535542 }
536543
537544
538-@Verifier(bM)
539-func bN () = {
540- let P = bM
541- if ($isInstanceOf(P, "InvokeScriptTransaction"))
545+@Verifier(bP)
546+func bQ () = {
547+ let R = bP
548+ if ($isInstanceOf(R, "InvokeScriptTransaction"))
542549 then {
543- let bO = P
544- let bP = if ((bO.dApp == this))
545- then (bO.function == "takeIntoAccountExtraFunds")
550+ let bR = R
551+ let bS = if ((bR.dApp == this))
552+ then (bR.function == "takeIntoAccountExtraFunds")
546553 else false
547- let bQ = if ((bO.dApp == C))
548- then if (if (if ((bO.function == "lockNeutrino"))
549- then (size(bO.payments) == 1)
554+ let bT = if ((bR.dApp == D))
555+ then if (if (if ((bR.function == "lockNeutrino"))
556+ then (size(bR.payments) == 1)
550557 else false)
551- then (bO.payments[0].assetId == H)
558+ then (bR.payments[0].assetId == J)
552559 else false)
553560 then true
554- else if ((bO.function == "unlockNeutrino"))
555- then (size(bO.payments) == 0)
561+ else if ((bR.function == "unlockNeutrino"))
562+ then (size(bR.payments) == 0)
556563 else false
557564 else false
558- let bR = if (if (if (sigVerify(bM.bodyBytes, bM.proofs[0], v))
565+ let bU = if (if (if ((bR.dApp == E))
566+ then (bR.function == "exchange")
567+ else false)
568+ then (O == J)
569+ else false)
559570 then true
560- else sigVerify(bM.bodyBytes, bM.proofs[0], w))
571+ else if ((P == J))
572+ then (bR.payments[0].assetId == J)
573+ else false
574+ let bV = if (if (if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
561575 then true
562- else sigVerify(bM.bodyBytes, bM.proofs[0], x))
576+ else sigVerify(bP.bodyBytes, bP.proofs[0], w))
563577 then true
564- else sigVerify(bM.bodyBytes, bM.proofs[0], z)
565- if (bP)
578+ else sigVerify(bP.bodyBytes, bP.proofs[0], x))
566579 then true
567- else bQ
580+ else sigVerify(bP.bodyBytes, bP.proofs[0], z)
581+ if (if (if (bS)
582+ then true
583+ else bT)
584+ then true
585+ else bU)
586+ then bV
587+ else false
568588 }
569- else sigVerify(bM.bodyBytes, bM.proofs[0], bM.senderPublicKey)
589+ else {
590+ let bW = if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
591+ then 1
592+ else 0
593+ let bX = if (sigVerify(bP.bodyBytes, bP.proofs[1], w))
594+ then 1
595+ else 0
596+ let bY = if (sigVerify(bP.bodyBytes, bP.proofs[2], x))
597+ then 1
598+ else 0
599+ (((bW + bX) + bY) >= 2)
600+ }
570601 }
571602
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "commission_scale_delimiter"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
3434 let p = "first_harvest_height"
3535
3636 let q = "share_limit_on_first_harvest"
3737
3838 let r = "base_period"
3939
4040 let s = "period_length"
4141
4242 let t = "start_height"
4343
4444 let u = "first_harvest_height"
4545
4646 let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4747
4848 let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
5050 let x = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5151
5252 let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5353
5454 let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
56+let A = base58'5CqqMkmtXXt35KRH9LdWA3ap6TffPvTT5SHQzYrVFbBw'
5757
58-let B = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
58+let B = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
5959
60-let C = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
60+let C = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
6161
62-let D = valueOrErrorMessage(getInteger(B, r), "Empty kBasePeriod")
62+let D = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
6363
64-let E = valueOrErrorMessage(getInteger(B, t), "Empty kStartHeight")
64+let E = Address(base58'3MuDZSULkhcvXKP7YG2HbuKrBUNe324Zss5')
6565
66-let F = valueOrErrorMessage(getInteger(B, s), "Empty kPeriodLength")
66+let F = valueOrErrorMessage(getInteger(C, r), "Empty kBasePeriod")
6767
68-let G = ((D + ((height - E) / F)) + 5)
68+let G = valueOrErrorMessage(getInteger(C, t), "Empty kStartHeight")
6969
70-let H = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
70+let H = valueOrErrorMessage(getInteger(C, s), "Empty kPeriodLength")
7171
72-let I = (9 * value(value(assetInfo(H)).minSponsoredFee))
72+let I = ((F + ((height - G) / H)) + 3)
7373
74-let J = getBooleanValue(this, c)
74+let J = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7575
76-let K = getStringValue(this, d)
76+let K = 270000
7777
78-let L = getStringValue(this, e)
78+let L = getBooleanValue(this, c)
7979
80-let M = if ((K == "WAVES"))
80+let M = getStringValue(this, d)
81+
82+let N = getStringValue(this, e)
83+
84+let O = if ((M == "WAVES"))
8185 then unit
82- else fromBase58String(K)
86+ else fromBase58String(M)
8387
84-let N = if ((L == "WAVES"))
88+let P = if ((N == "WAVES"))
8589 then unit
86- else fromBase58String(L)
90+ else fromBase58String(N)
8791
88-let O = {
89- let P = M
90- if ($isInstanceOf(P, "ByteVector"))
92+let Q = {
93+ let R = O
94+ if ($isInstanceOf(R, "ByteVector"))
9195 then {
92- let Q = P
93- value(assetInfo(Q)).name
96+ let S = R
97+ value(assetInfo(S)).name
9498 }
95- else if ($isInstanceOf(P, "Unit"))
99+ else if ($isInstanceOf(R, "Unit"))
96100 then {
97- let R = P
101+ let T = R
98102 "WAVES"
99103 }
100104 else throw("Match error")
101105 }
102106
103-let S = {
104- let P = N
105- if ($isInstanceOf(P, "ByteVector"))
107+let U = {
108+ let R = P
109+ if ($isInstanceOf(R, "ByteVector"))
106110 then {
107- let Q = P
108- value(assetInfo(Q)).name
111+ let S = R
112+ value(assetInfo(S)).name
109113 }
110- else if ($isInstanceOf(P, "Unit"))
114+ else if ($isInstanceOf(R, "Unit"))
111115 then {
112- let R = P
116+ let T = R
113117 "WAVES"
114118 }
115119 else throw("Match error")
116120 }
117121
118-let T = getIntegerValue(this, f)
122+let V = getIntegerValue(this, f)
119123
120-let U = getIntegerValue(this, g)
124+let W = getIntegerValue(this, g)
121125
122-let V = fromBase58String(getStringValue(this, j))
126+let X = fromBase58String(getStringValue(this, j))
123127
124-let W = getIntegerValue(this, k)
128+let Y = getIntegerValue(this, k)
125129
126-let X = 3000
130+let Z = 3000
127131
128-let Y = 1200
132+let aa = 1200
129133
130-let Z = 1000000
131-
132-let aa = 1000
133-
134-let ab = 100000000
134+let ab = 1000000
135135
136136 let ac = 1000
137137
138-let ad = 8
138+let ad = 100000000
139139
140-func ae (af) = {
141- let P = af
142- if ($isInstanceOf(P, "ByteVector"))
140+let ae = 1000
141+
142+let af = 8
143+
144+func ag (ah) = {
145+ let R = ah
146+ if ($isInstanceOf(R, "ByteVector"))
143147 then {
144- let Q = P
145- assetBalance(this, Q)
148+ let S = R
149+ assetBalance(this, S)
146150 }
147- else if ($isInstanceOf(P, "Unit"))
151+ else if ($isInstanceOf(R, "Unit"))
148152 then {
149- let R = P
153+ let T = R
150154 wavesBalance(this).available
151155 }
152156 else throw("Match error")
153157 }
154158
155159
156-let ag = {
157- let P = getInteger(C, ((("rpd_balance_" + toBase58String(H)) + "_") + toString(this)))
158- if ($isInstanceOf(P, "Int"))
160+let ai = {
161+ let R = getInteger(D, ((("rpd_balance_" + toBase58String(J)) + "_") + toString(this)))
162+ if ($isInstanceOf(R, "Int"))
159163 then {
160- let ah = P
161- ah
164+ let aj = R
165+ aj
162166 }
163- else if ($isInstanceOf(P, "Unit"))
167+ else if ($isInstanceOf(R, "Unit"))
164168 then {
165- let ai = P
169+ let ak = R
166170 0
167171 }
168172 else throw("Match error")
169173 }
170174
171-let aj = getIntegerValue(this, h)
175+let al = getIntegerValue(this, h)
172176
173-let ak = getIntegerValue(this, i)
177+let am = getIntegerValue(this, i)
174178
175-let al = (T - (if ((M == H))
176- then ag
179+let an = (V - (if ((O == J))
180+ then ai
177181 else 0))
178182
179-let am = (U - (if ((N == H))
180- then ag
183+let ao = (W - (if ((P == J))
184+ then ai
181185 else 0))
182186
183-let an = (ae(M) + (if ((M == H))
184- then ag
187+let ap = (ag(O) + (if ((O == J))
188+ then ai
185189 else 0))
186190
187-let ao = (ae(N) + (if ((N == H))
188- then ag
191+let aq = (ag(P) + (if ((P == J))
192+ then ai
189193 else 0))
190194
191-let ap = if ((an >= T))
192- then (ao >= U)
195+let ar = if ((ap >= V))
196+ then (aq >= W)
193197 else false
194198
195-func aq (af) = {
196- let P = af
197- if ($isInstanceOf(P, "ByteVector"))
199+func as (ah) = {
200+ let R = ah
201+ if ($isInstanceOf(R, "ByteVector"))
198202 then {
199- let Q = P
200- let ar = toBase58String(Q)
201- let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
202- $Tuple3(ar, as.name, as.decimals)
203+ let S = R
204+ let at = toBase58String(S)
205+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
206+ $Tuple3(at, au.name, au.decimals)
203207 }
204- else if ($isInstanceOf(P, "Unit"))
208+ else if ($isInstanceOf(R, "Unit"))
205209 then {
206- let R = P
210+ let T = R
207211 $Tuple3("WAVES", "WAVES", 8)
208212 }
209213 else throw("Match error")
210214 }
211215
212216
213-func at (au) = if ((au == "WAVES"))
217+func av (aw) = if ((aw == "WAVES"))
214218 then $Tuple3("WAVES", "WAVES", 8)
215219 else {
216- let ar = au
217- let Q = fromBase58String(au)
218- let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
219- $Tuple3(ar, as.name, as.decimals)
220+ let at = aw
221+ let S = fromBase58String(aw)
222+ let au = valueOrErrorMessage(assetInfo(S), (("Asset " + at) + " doesn't exist"))
223+ $Tuple3(at, au.name, au.decimals)
220224 }
221225
222226
223-func av (aw) = [BooleanEntry(c, false), StringEntry(n, aw)]
227+func ax (ay) = [BooleanEntry(c, false), StringEntry(n, ay)]
224228
225229
226-func ax (ay,af) = if ((af == H))
230+func az (aA,ah) = if ((ah == J))
227231 then {
228- let az = (ay - I)
229- if ((0 >= az))
230- then throw((((("Insufficient amount " + toString(ay)) + " to deduct staking fee ") + toString(I)) + " USD-N"))
231- else az
232+ let aB = (aA - K)
233+ if ((0 >= aB))
234+ then throw((((("Insufficient amount " + toString(aA)) + " to deduct staking fee ") + toString(K)) + " USD-N"))
235+ else aB
232236 }
233- else ay
237+ else aA
234238
235239
236-func aA (ay,aB,aC) = throw((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + aC) + " due to staking. Available: ") + toString(aB)) + " ") + aC) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
240+func aC (aA,aD,aE) = throw((((((((("Insufficient DApp balance to pay " + toString(aA)) + " ") + aE) + " due to staking. Available: ") + toString(aD)) + " ") + aE) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
237241
238242
239-func aD (aE,aF) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aE)) + " ") + O) + " and ") + toString(aF)) + " ") + S) + " due to staking. Available: ") + toString(al)) + " ") + O) + " and ") + toString(am)) + " ") + S) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
243+func aF (aG,aH) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aG)) + " ") + Q) + " and ") + toString(aH)) + " ") + U) + " due to staking. Available: ") + toString(an)) + " ") + Q) + " and ") + toString(ao)) + " ") + U) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
240244
241245
242-@Callable(aG)
243-func init (aH) = {
244- let aI = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
245- let aJ = aI._1
246- let aK = aI._2
247- let aL = $Tuple2(aG.payments[1].amount, aG.payments[1].assetId)
246+func aI () = ax(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + Q) + ", ") + toString(aq)) + " ") + U) + ". State: ") + toString(V)) + " ") + Q) + ", ") + toString(W)) + " ") + U))
247+
248+
249+@Callable(aJ)
250+func init (aK) = {
251+ let aL = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
248252 let aM = aL._1
249253 let aN = aL._2
250- let aO = aq(aK)
254+ let aO = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId)
251255 let aP = aO._1
252256 let aQ = aO._2
253- let aR = aO._3
254- let aS = aq(aN)
255- let aT = aS._1
256- let aU = aS._2
257- let aV = aS._3
258- if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
257+ let aR = as(aN)
258+ let aS = aR._1
259+ let aT = aR._2
260+ let aU = aR._3
261+ let aV = as(aQ)
262+ let aW = aV._1
263+ let aX = aV._2
264+ let aY = aV._3
265+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
259266 then throw("Only admin can call this function")
260267 else if (isDefined(getBoolean(this, c)))
261268 then throw("DApp is already active")
262- else if ((aK == aN))
269+ else if ((aN == aQ))
263270 then throw("Assets must be different")
264271 else {
265- let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
266- let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
267- let aY = ((aR + aV) / 2)
268- let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
269- let ba = Issue(aW, aX, aZ, aY, true)
270- let bb = calculateAssetId(ba)
271- let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, bb)]
272- if (aH)
273- then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
274- else bc
272+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
273+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
274+ let bb = ((aU + aY) / 2)
275+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
276+ let bd = Issue(aZ, ba, bc, bb, true)
277+ let be = calculateAssetId(bd)
278+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, be)]
279+ if (aK)
280+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
281+ else bf
275282 }
276283 }
277284
278285
279286
280-@Callable(aG)
281-func initWithInitRatio (bd,be,K,L,aH) = {
282- let bf = at(K)
283- let aP = bf._1
284- let aQ = bf._2
285- let aR = bf._3
286- let bg = at(L)
287- let aT = bg._1
288- let aU = bg._2
289- let aV = bg._3
290- if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
287+@Callable(aJ)
288+func initWithInitRatio (bg,bh,M,N,aK) = {
289+ let bi = av(M)
290+ let aS = bi._1
291+ let aT = bi._2
292+ let aU = bi._3
293+ let bj = av(N)
294+ let aW = bj._1
295+ let aX = bj._2
296+ let aY = bj._3
297+ if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
291298 then throw("Only admin can call this function")
292299 else if (isDefined(getBoolean(this, c)))
293300 then throw("DApp is already active")
294- else if ((K == L))
301+ else if ((M == N))
295302 then throw("Assets must be different")
296303 else {
297- let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
298- let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
299- let aY = ((aR + aV) / 2)
300- let aZ = 0
301- let ba = Issue(aW, aX, aZ, aY, true)
302- let bb = calculateAssetId(ba)
303- let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(h, bd), IntegerEntry(i, be), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(p, (E + (G * F))), IntegerEntry(k, aZ)]
304- if (aH)
305- then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
306- else bc
304+ let aZ = ((("s" + take(aT, 7)) + "_") + take(aX, 7))
305+ let ba = ((((("ShareToken of SwopFi protocol for " + aT) + " and ") + aX) + " at address ") + toString(this))
306+ let bb = ((aU + aY) / 2)
307+ let bc = 0
308+ let bd = Issue(aZ, ba, bc, bb, true)
309+ let be = calculateAssetId(bd)
310+ let bf = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aS), StringEntry(e, aW), IntegerEntry(h, bg), IntegerEntry(i, bh), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, Z), IntegerEntry(m, ab), bd, StringEntry(j, toBase58String(be)), IntegerEntry(k, bc)]
311+ if (aK)
312+ then (bf ++ [BooleanEntry(o, aK), IntegerEntry(p, (G + (I * H)))])
313+ else bf
307314 }
308315 }
309316
310317
311318
312-@Callable(aG)
313-func keepLimitForFirstHarvest (bh) = if (!(J))
319+@Callable(aJ)
320+func keepLimitForFirstHarvest (bk) = if (!(L))
314321 then throw("DApp is inactive at this moment")
315- else if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
322+ else if (!(containsElement([v, w, x, z], aJ.callerPublicKey)))
316323 then throw("Only admin can call this function")
317- else [IntegerEntry(q, bh)]
324+ else [IntegerEntry(q, bk)]
318325
319326
320327
321-@Callable(aG)
322-func replenishWithTwoTokens (bi) = {
323- let aK = aG.payments[0].assetId
324- let aN = aG.payments[1].assetId
325- let aJ = ax(aG.payments[0].amount, aK)
326- let aM = ax(aG.payments[1].amount, aN)
327- if (if ((T == 0))
328- then (U == 0)
328+@Callable(aJ)
329+func replenishWithTwoTokens (bl) = {
330+ let aN = aJ.payments[0].assetId
331+ let aQ = aJ.payments[1].assetId
332+ let aM = az(aJ.payments[0].amount, aN)
333+ let aP = az(aJ.payments[1].amount, aQ)
334+ if (if ((V == 0))
335+ then (W == 0)
329336 else false)
330337 then {
331- let bj = aq(aK)
332- let aP = bj._1
333- let aQ = bj._2
334- let aR = bj._3
335- let bk = aq(aN)
336- let aT = bk._1
337- let aU = bk._2
338- let aV = bk._3
339- let bl = fraction(fraction(aj, ab, aJ), aa, fraction(ak, ab, aM))
340- if ((aK == aN))
338+ let bm = as(aN)
339+ let aS = bm._1
340+ let aT = bm._2
341+ let aU = bm._3
342+ let bn = as(aQ)
343+ let aW = bn._1
344+ let aX = bn._2
345+ let aY = bn._3
346+ let bo = fraction(fraction(al, ad, aM), ac, fraction(am, ad, aP))
347+ if ((aN == aQ))
341348 then throw("Assets must be different")
342349 else {
343- let aY = ((aR + aV) / 2)
344- let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
345- if (!(J))
350+ let bb = ((aU + aY) / 2)
351+ let bc = fraction(pow(aM, aU, 5, 1, aU, HALFDOWN), pow(aP, aY, 5, 1, aY, HALFDOWN), pow(10, 0, bb, 0, 0, HALFDOWN))
352+ if (!(L))
346353 then throw("DApp is inactive at this moment")
347- else if (if ((0 > bi))
354+ else if (if ((0 > bl))
348355 then true
349- else (bi > ac))
350- then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
351- else if ((size(aG.payments) != 2))
356+ else (bl > ae))
357+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
358+ else if ((size(aJ.payments) != 2))
352359 then throw("Two attached assets expected")
353- else if (if ((((aa * (ac - bi)) / ac) > bl))
360+ else if (if ((((ac * (ae - bl)) / ae) > bo))
354361 then true
355- else (bl > ((aa * (ac + bi)) / ac)))
362+ else (bo > ((ac * (ae + bl)) / ae)))
356363 then throw("Incorrect assets amount: amounts must have the contract ratio")
357- else if (if ((aK != M))
364+ else if (if ((aN != O))
358365 then true
359- else (aN != N))
360- then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
361- else if ((aZ == 0))
366+ else (aQ != P))
367+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
368+ else if ((bc == 0))
362369 then throw("Too small amount to replenish")
363- else if (!(ap))
364- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
365- else [Reissue(V, aZ, true), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, V)]
370+ else if (!(ar))
371+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
372+ else [Reissue(X, bc, true), IntegerEntry(f, aM), IntegerEntry(g, aP), IntegerEntry(k, bc), ScriptTransfer(aJ.caller, bc, X)]
366373 }
367374 }
368375 else {
369- let bl = fraction(fraction(T, ab, aJ), aa, fraction(U, ab, aM))
370- let bm = fraction(aJ, ab, T)
371- let bn = fraction(aM, ab, U)
372- let bo = fraction(min([bm, bn]), W, ab)
373- if (!(J))
376+ let bo = fraction(fraction(V, ad, aM), ac, fraction(W, ad, aP))
377+ let bp = fraction(aM, ad, V)
378+ let bq = fraction(aP, ad, W)
379+ let br = fraction(min([bp, bq]), Y, ad)
380+ if (!(L))
374381 then throw("DApp is inactive at this moment")
375- else if (if ((0 > bi))
382+ else if (if ((0 > bl))
376383 then true
377- else (bi > ac))
378- then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
379- else if ((size(aG.payments) != 2))
384+ else (bl > ae))
385+ then throw(((("Slippage tolerance must be between 0 and " + toString(ae)) + " inclusively. Actual: ") + toString(bl)))
386+ else if ((size(aJ.payments) != 2))
380387 then throw("Two attached assets expected")
381- else if (if ((aK != M))
388+ else if (if ((aN != O))
382389 then true
383- else (aN != N))
384- then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
385- else if (if ((((aa * (ac - bi)) / ac) > bl))
390+ else (aQ != P))
391+ then throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
392+ else if (if ((((ac * (ae - bl)) / ae) > bo))
386393 then true
387- else (bl > ((aa * (ac + bi)) / ac)))
394+ else (bo > ((ac * (ae + bl)) / ae)))
388395 then throw("Incorrect assets amount: amounts must have the contract ratio")
389- else if ((bo == 0))
396+ else if ((br == 0))
390397 then throw("Too small amount to replenish")
391- else if (!(ap))
392- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
393- else [IntegerEntry(f, (T + aJ)), IntegerEntry(g, (U + aM)), IntegerEntry(k, (W + bo)), Reissue(V, bo, true), ScriptTransfer(aG.caller, bo, V)]
398+ else if (!(ar))
399+ then ([ScriptTransfer(aJ.caller, aM, aN), ScriptTransfer(aJ.caller, aP, aQ)] ++ aI())
400+ else [IntegerEntry(f, (V + aM)), IntegerEntry(g, (W + aP)), IntegerEntry(k, (Y + br)), Reissue(X, br, true), ScriptTransfer(aJ.caller, br, X)]
394401 }
395402 }
396403
397404
398405
399-@Callable(aG)
406+@Callable(aJ)
400407 func withdraw () = {
401- let bp = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
402- let bq = bp._1
403- let br = bp._2
404- let bs = ax(fraction(bq, T, W), M)
405- let bt = ax(fraction(bq, U, W), N)
406- if (!(J))
408+ let bs = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
409+ let bt = bs._1
410+ let bu = bs._2
411+ let bv = az(fraction(bt, V, Y), O)
412+ let bw = az(fraction(bt, W, Y), P)
413+ if (!(L))
407414 then throw("DApp is inactive at this moment")
408- else if ((size(aG.payments) != 1))
415+ else if ((size(aJ.payments) != 1))
409416 then throw("One attached payment expected")
410- else if ((br != V))
411- then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
412- else if (!(ap))
413- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
414- else if (if ((bs > al))
417+ else if ((bu != X))
418+ then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
419+ else if (!(ar))
420+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
421+ else if (if ((bv > an))
415422 then true
416- else (bt > am))
417- then aD(bs, bt)
418- else [IntegerEntry(f, (T - bs)), IntegerEntry(g, (U - bt)), IntegerEntry(k, (W - bq)), Burn(V, bq), ScriptTransfer(aG.caller, bs, M), ScriptTransfer(aG.caller, bt, N)]
423+ else (bw > ao))
424+ then aF(bv, bw)
425+ else [IntegerEntry(f, (V - bv)), IntegerEntry(g, (W - bw)), IntegerEntry(k, (Y - bt)), Burn(X, bt), ScriptTransfer(aJ.caller, bv, O), ScriptTransfer(aJ.caller, bw, P)]
419426 }
420427
421428
422429
423-@Callable(aG)
424-func exchange (bu) = {
425- let bv = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
426- let bq = bv._1
427- let br = bv._2
428- func bw (bx,by) = {
429- let bz = fraction(by, bq, (bq + bx))
430- let bA = fraction(bz, (Z - X), Z)
431- let bB = fraction(bz, Y, Z)
432- if ((bu > bA))
433- then throw(((("Calculated amount to receive " + toString(bA)) + " is less than specified minimum ") + toString(bu)))
434- else $Tuple3(bz, bA, bB)
430+@Callable(aJ)
431+func exchange (bx) = {
432+ let by = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
433+ let bt = by._1
434+ let bu = by._2
435+ func bz (bA,bB) = {
436+ let bC = fraction(bB, bt, (bt + bA))
437+ let bD = fraction(bC, (ab - Z), ab)
438+ let bE = fraction(bC, aa, ab)
439+ if ((bx > bD))
440+ then throw(((("Calculated amount to receive " + toString(bD)) + " is less than specified minimum ") + toString(bx)))
441+ else $Tuple3(bC, bD, bE)
435442 }
436443
437- if (!(J))
444+ if (!(L))
438445 then throw("DApp is inactive at this moment")
439- else if (if ((T == 0))
446+ else if (if ((V == 0))
440447 then true
441- else (U == 0))
448+ else (W == 0))
442449 then throw("Can't exchange with zero balance")
443- else if ((0 >= bu))
444- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bu)))
445- else if ((size(aG.payments) != 1))
450+ else if ((0 >= bx))
451+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bx)))
452+ else if ((size(aJ.payments) != 1))
446453 then throw("One attached payment expected")
447- else if (!(ap))
448- then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
449- else if ((br == M))
454+ else if (!(ar))
455+ then ([ScriptTransfer(aJ.caller, bt, bu)] ++ aI())
456+ else if ((bu == O))
450457 then {
451- let bC = N
452- let bD = bw(T, U)
453- let bz = bD._1
454- let bA = bD._2
455- let bB = bD._3
456- let bE = (T + bq)
457- let bF = ((U - bA) - bB)
458- if (if (if ((M == H))
459- then (ag >= bE)
458+ let bF = P
459+ let bG = bz(V, W)
460+ let bC = bG._1
461+ let bD = bG._2
462+ let bE = bG._3
463+ let bH = (V + bt)
464+ let bI = ((W - bD) - bE)
465+ if (if (if ((O == J))
466+ then (ai >= bH)
460467 else false)
461468 then true
462- else if ((N == H))
463- then (ag >= bF)
469+ else if ((P == J))
470+ then (ai >= bI)
464471 else false)
465- then aA(bA, am, S)
466- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
472+ then aC(bD, ao, U)
473+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
467474 }
468- else if ((br == N))
475+ else if ((bu == P))
469476 then {
470- let bC = M
471- let bG = bw(U, T)
472- let bz = bG._1
473- let bA = bG._2
474- let bB = bG._3
475- let bE = ((T - bA) - bB)
476- let bF = (U + bq)
477- if (if (if ((M == H))
478- then (ag >= bE)
477+ let bF = O
478+ let bJ = bz(W, V)
479+ let bC = bJ._1
480+ let bD = bJ._2
481+ let bE = bJ._3
482+ let bH = ((V - bD) - bE)
483+ let bI = (W + bt)
484+ if (if (if ((O == J))
485+ then (ai >= bH)
479486 else false)
480487 then true
481- else if ((N == H))
482- then (ag >= bF)
488+ else if ((P == J))
489+ then (ai >= bI)
483490 else false)
484- then aA(bA, al, O)
485- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
491+ then aC(bD, an, Q)
492+ else [IntegerEntry(f, bH), IntegerEntry(g, bI), ScriptTransfer(aJ.caller, bD, bF), ScriptTransfer(B, bE, bF)]
486493 }
487- else throw(((("Incorrect asset attached. Expected: " + K) + " or ") + L))
494+ else throw(((("Incorrect asset attached. Expected: " + M) + " or ") + N))
488495 }
489496
490497
491498
492-@Callable(aG)
493-func shutdown () = if (!(J))
499+@Callable(aJ)
500+func shutdown () = if (!(L))
494501 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
495- else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
502+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
496503 then throw("Only admin can call this function")
497- else av("Paused by admin")
504+ else ax("Paused by admin")
498505
499506
500507
501-@Callable(aG)
502-func activate () = if (J)
508+@Callable(aJ)
509+func activate () = if (L)
503510 then throw("DApp is already active")
504- else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
511+ else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
505512 then throw("Only admin can call this function")
506513 else [BooleanEntry(c, true), DeleteEntry(n)]
507514
508515
509516
510-@Callable(aG)
511-func takeIntoAccountExtraFunds (bH) = {
512- let bI = (an - T)
513- let bJ = (ao - U)
514- let bK = (bI - (if ((M == H))
515- then bH
517+@Callable(aJ)
518+func takeIntoAccountExtraFunds (bK) = {
519+ let bL = (ap - V)
520+ let bM = (aq - W)
521+ let bN = (bL - (if ((O == unit))
522+ then bK
516523 else 0))
517- let bL = (bJ - (if ((N == H))
518- then bH
524+ let bO = (bM - (if ((P == unit))
525+ then bK
519526 else 0))
520- if (!(J))
527+ if (!(L))
521528 then throw("DApp is inactive at this moment")
522- else if ((aG.caller != this))
529+ else if ((aJ.caller != this))
523530 then throw("Only the DApp itself can call this function")
524- else if ((0 > bH))
525- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bH)))
526- else if (if ((0 > bI))
531+ else if ((0 > bK))
532+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bK)))
533+ else if (if ((0 > bL))
527534 then true
528- else (0 > bJ))
529- then av("Enroll amount negative")
530- else if (if ((0 > bK))
535+ else (0 > bM))
536+ then ax("Enroll amount negative")
537+ else if (if ((0 > bN))
531538 then true
532- else (0 > bL))
539+ else (0 > bO))
533540 then throw("Too large amountLeave")
534- else [IntegerEntry(f, (T + bK)), IntegerEntry(g, (U + bL)), IntegerEntry(("last_income_" + K), bK), IntegerEntry(("last_income_" + L), bL)]
541+ else [IntegerEntry(f, (V + bN)), IntegerEntry(g, (W + bO)), IntegerEntry(("last_income_" + M), bN), IntegerEntry(("last_income_" + N), bO)]
535542 }
536543
537544
538-@Verifier(bM)
539-func bN () = {
540- let P = bM
541- if ($isInstanceOf(P, "InvokeScriptTransaction"))
545+@Verifier(bP)
546+func bQ () = {
547+ let R = bP
548+ if ($isInstanceOf(R, "InvokeScriptTransaction"))
542549 then {
543- let bO = P
544- let bP = if ((bO.dApp == this))
545- then (bO.function == "takeIntoAccountExtraFunds")
550+ let bR = R
551+ let bS = if ((bR.dApp == this))
552+ then (bR.function == "takeIntoAccountExtraFunds")
546553 else false
547- let bQ = if ((bO.dApp == C))
548- then if (if (if ((bO.function == "lockNeutrino"))
549- then (size(bO.payments) == 1)
554+ let bT = if ((bR.dApp == D))
555+ then if (if (if ((bR.function == "lockNeutrino"))
556+ then (size(bR.payments) == 1)
550557 else false)
551- then (bO.payments[0].assetId == H)
558+ then (bR.payments[0].assetId == J)
552559 else false)
553560 then true
554- else if ((bO.function == "unlockNeutrino"))
555- then (size(bO.payments) == 0)
561+ else if ((bR.function == "unlockNeutrino"))
562+ then (size(bR.payments) == 0)
556563 else false
557564 else false
558- let bR = if (if (if (sigVerify(bM.bodyBytes, bM.proofs[0], v))
565+ let bU = if (if (if ((bR.dApp == E))
566+ then (bR.function == "exchange")
567+ else false)
568+ then (O == J)
569+ else false)
559570 then true
560- else sigVerify(bM.bodyBytes, bM.proofs[0], w))
571+ else if ((P == J))
572+ then (bR.payments[0].assetId == J)
573+ else false
574+ let bV = if (if (if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
561575 then true
562- else sigVerify(bM.bodyBytes, bM.proofs[0], x))
576+ else sigVerify(bP.bodyBytes, bP.proofs[0], w))
563577 then true
564- else sigVerify(bM.bodyBytes, bM.proofs[0], z)
565- if (bP)
578+ else sigVerify(bP.bodyBytes, bP.proofs[0], x))
566579 then true
567- else bQ
580+ else sigVerify(bP.bodyBytes, bP.proofs[0], z)
581+ if (if (if (bS)
582+ then true
583+ else bT)
584+ then true
585+ else bU)
586+ then bV
587+ else false
568588 }
569- else sigVerify(bM.bodyBytes, bM.proofs[0], bM.senderPublicKey)
589+ else {
590+ let bW = if (sigVerify(bP.bodyBytes, bP.proofs[0], v))
591+ then 1
592+ else 0
593+ let bX = if (sigVerify(bP.bodyBytes, bP.proofs[1], w))
594+ then 1
595+ else 0
596+ let bY = if (sigVerify(bP.bodyBytes, bP.proofs[2], x))
597+ then 1
598+ else 0
599+ (((bW + bX) + bY) >= 2)
600+ }
570601 }
571602

github/deemru/w8io/873ac7e 
236.14 ms