tx · 5aEcWjdinQhuARjR4gHtBnFkar5hUHzbAdVCdNcrKtML

3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT:  -0.04300000 Waves

2023.04.03 16:15 [2518443] smart account 3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT > SELF 0.00000000 Waves

{ "type": 13, "id": "5aEcWjdinQhuARjR4gHtBnFkar5hUHzbAdVCdNcrKtML", "fee": 4300000, "feeAssetId": null, "timestamp": 1680527735880, "version": 2, "chainId": 84, "sender": "3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT", "senderPublicKey": "AYbpHveq7zviKTDV7SGTB1pZGFbkumgfq3jSwVv6BznT", "proofs": [ "2cCfrDG7qSK5RcBVN3StRUso9AxcJYexSQcPdg1Q7ZZCwnoCNxU4SkWgVjYaEBoACwKbu6iFtwDR8CBvDaLxDg5q" ], "script": "base64:BgLsNggCEgASBQoDAQQBEgcKBQEEAQgBEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIQa2V5U1dhdmVzQXNzZXRJZCIVa2V5U1dhdmVzUHJveHlBZGRyZXNzIhRrZXlBZGRpdGlvbmFsQmFsYW5jZSIHYXNzZXRJZCIWa2V5U3Rha2luZ0Fzc2V0QmFsYW5jZSIUZ2V0QWRkaXRpb25hbEJhbGFuY2UiFmdldFN0YWtpbmdBc3NldEJhbGFuY2UiEGtleUZhY3RvcnlDb25maWciDWtleU1hdGNoZXJQdWIiKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzIhNwb29sQ29udHJhY3RBZGRyZXNzIg1rZXlQb29sQ29uZmlnIglpQW10QXNzZXQiC2lQcmljZUFzc2V0Ih9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkIgxiYXNlQXNzZXRTdHIiE2tleUFsbFBvb2xzU2h1dGRvd24iDWtleVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIWa2V5QWxsb3dlZExwU2NyaXB0SGFzaCIWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcyIPdGhyb3dPcmRlckVycm9yIgpvcmRlclZhbGlkIg5vcmRlclZhbGlkSW5mbyILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIGZm10RXJyIg9mYWN0b3J5Q29udHJhY3QiE2ZlZUNvbGxlY3RvckFkZHJlc3MiBWluRmVlIgFAIgZvdXRGZWUiCHNXYXZlc0lkIgtzV2F2ZXNQcm94eSIQaXNHbG9iYWxTaHV0ZG93biITZ2V0TWF0Y2hlclB1Yk9yRmFpbCINZ2V0UG9vbENvbmZpZyIIYW10QXNzZXQiCnByaWNlQXNzZXQiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA5MjEyOTM3OCIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEGdldEZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIQc2xpcHBhZ2VDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIh1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlciIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiEnNsaXBhZ2VBbXRBc3NldEFtdCIUc2xpcGFnZVByaWNlQXNzZXRBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiFGNhbGNQcmljZUJpZ0ludFJvdW5kIgdnZXRSYXRlIgVwcm94eSIDaW52IgckbWF0Y2gwIgFyIgdkZXBvc2l0IgZhbW91bnQiDnN0YWtpbmdBc3NldElkIhhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UiGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlIgVhc3NldCINZGVwb3NpdEludm9rZSIUcmVjZWl2ZWRTdGFraW5nQXNzZXQiFG5ld0FkZGl0aW9uYWxCYWxhbmNlIhZuZXdTdGFraW5nQXNzZXRCYWxhbmNlIgh3aXRoZHJhdyIMcHJveHlSYXRlTXVsIhBjdXJyZW50UHJveHlSYXRlIgxzdGFraW5nQXNzZXQiFnNlbmRTdGFraW5nQXNzZXRBbW91bnQiDndpdGhkcmF3SW52b2tlIg5yZWNlaXZlZEFzc2V0cyITZ2V0TGVhc2VQcm94eUNvbmZpZyIRcmViYWxhbmNlSW50ZXJuYWwiC3RhcmdldFJhdGlvIgptaW5CYWxhbmNlIhBhdmFpbGFibGVCYWxhbmNlIgFiIgF1Igx3aG9sZUJhbGFuY2UiF3RhcmdldEFkZGl0aW9uYWxCYWxhbmNlIgRkaWZmIg9zZW5kQXNzZXRBbW91bnQiDmdldEFzc2V0QW1vdW50Ig5yZWJhbGFuY2VBc3NldCIBYSINJHQwMTU1MTUxNTYyNCIKaXNMZWFzYWJsZSILbGVhc2VkUmF0aW8iDHByb3h5QWRkcmVzcyIMcHJveHlBc3NldElkIhRzdGFraW5nUHJvZml0QWRkcmVzcyIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiB2NhbGNLTHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIQYW1vdW50QmFsYW5jZVgxOCIPcHJpY2VCYWxhbmNlWDE4Igp1cGRhdGVkS0xwIg5jYWxjQ3VycmVudEtMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50S0xwIhJyZWZyZXNoS0xwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhJ2YWxpZGF0ZVVwZGF0ZWRLTHAiBm9sZEtMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI3MTQ1MjczNTciA2tMcCINJHQwMjc3OTcyNzg5NyINdW51c2VkQWN0aW9ucyIGa0xwTmV3Igxpc09yZGVyVmFsaWQiBGluZm8iCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgdlbWl0SW52Ig1lbWl0SW52TGVnYWN5IhVsZWdhY3lGYWN0b3J5Q29udHJhY3QiB3Rha2VGZWUiCWZlZUFtb3VudCIPY2FsY1B1dE9uZVRva2VuIhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCIGaXNFdmFsIhBhbW91bnRCYWxhbmNlUmF3Ig9wcmljZUJhbGFuY2VSYXciFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAzMTAxMDMxMzAzIhBhbW91bnRCYWxhbmNlT2xkIg9wcmljZUJhbGFuY2VPbGQiDSR0MDMxMzA3MzE0NTYiFGFtb3VudEFzc2V0QW1vdW50UmF3IhNwcmljZUFzc2V0QW1vdW50UmF3Ig0kdDAzMTU4ODMxNjUyIg1wYXltZW50QW1vdW50IhBhbW91bnRCYWxhbmNlTmV3Ig9wcmljZUJhbGFuY2VOZXciC3ByaWNlTmV3WDE4IghwcmljZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCILcHJpY2VPbGRYMTgiCHByaWNlT2xkIgRsb3NzIg0kdDAzMzMzMzMzNTAwIgdiYWxhbmNlIg9pc3N1ZUFtb3VudEJvdGgiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IhhvdXRJbkFtb3VudEFzc2V0RGVjaW1hbHMiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAzNTU3ODM1NjM0Igt0b3RhbEFtb3VudCINJHQwMzU2MzgzNTg2NCILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCIJaXNNYW5hZ2VyIgJwayILbXVzdE1hbmFnZXIiAnBkIg1jbGVhbkFtb3VudEluIglpc1JldmVyc2UiDWZlZVBvb2xBbW91bnQiDSR0MDM3NzUwMzgwNTUiCGFzc2V0T3V0Igdhc3NldEluIhJwb29sQXNzZXRJbkJhbGFuY2UiE3Bvb2xBc3NldE91dEJhbGFuY2UiCWFtb3VudE91dCIEb2xkSyIEbmV3SyIGY2hlY2tLIgxhbW91bnRPdXRNaW4iCWFkZHJlc3NUbyILc3dhcENvbnRhY3QiCGNoZWNrTWluIgZsc0NvbmYiDSR0MDQwMDYxNDAxNzUiC2Fzc2V0T25Qb29sIg5hbW91bnRPZlByb2ZpdCIKYW1vdW50RGlmZiIIb2xkUmF0aW8iE29sZFdhdmVzUm91Z2hCYWxhbmUiAndkIhNuZXdXYXZlc1JvdWdoQmFsYW5lIgl3YXZlc0RpZmYiA3JlYiIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiDSR0MDQzOTg2NDQ0NDgiEXJlZnJlc2hLTHBBY3Rpb25zIhFpc1VwZGF0ZWRLTHBWYWxpZCILbWF4U2xpcHBhZ2UiDSR0MDQ1MDEwNDUwNzUiDG1pbk91dEFtb3VudCIJYXV0b1N0YWtlIiBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCINaXNQdXREaXNhYmxlZCIHcGF5bWVudCINJHQwNDYyNjM0NjQxNSIFYm9udXMiE2VtaXRBbW91bnRFc3RpbWF0ZWQiCmVtaXRBbW91bnQiCHN0YWtlSW52IgdzZW5kRmVlIg0kdDA0NzAwMTQ3MTk4Ig0kdDA0NzIwMTQ3MzA5Ig0kdDA0NzY2NDQ3ODIxIg1vdXRBc3NldElkU3RyIg1pc0dldERpc2FibGVkIg0kdDA0ODcwNjQ4ODU5Ig9hbW91bnRFc3RpbWF0ZWQiDSR0MDQ5MjQzNDkzNTciDnByb2ZpdFRyYW5zZmVyIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDA1MDM5NjUwNjQzIhBmZWVBbW91bnRGb3JDYWxjIg0kdDA1MDY0NjUwNzU0Ig0kdDA1MTA4MTUxMjM3Ig11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDA1MjE0MjUyMjkzIg0kdDA1Mjc4ODUzMDM1Ig0kdDA1MzAzODUzMTQ2IglvdXRBbXRBbXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA1NDA5MjU0MTc0IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig0kdDA1NTEyMzU1MjA0Ig1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiDSR0MDU2MzMwNTY0MTEiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIg0kdDA1NzcwNjU3Nzg3IgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNTg5NzQ1OTAzOCIQa0xwVXBkYXRlQWN0aW9ucyIKYW10QXNzZXRJZCIMcHJpY2VBc3NldElkIg1wb29sTFBCYWxhbmNlIhJhY2NBbXRBc3NldEJhbGFuY2UiFGFjY1ByaWNlQXNzZXRCYWxhbmNlIgpwcmljZXNMaXN0Ig9scEFtdEFzc2V0U2hhcmUiEWxwUHJpY2VBc3NldFNoYXJlIgpwb29sV2VpZ2h0IgxjdXJQcmljZUNhbGMiDGFtQmFsYW5jZVJhdyIMcHJCYWxhbmNlUmF3Ig9hbUJhbGFuY2VSYXdYMTgiD3ByQmFsYW5jZVJhd1gxOCIQcGF5bWVudExwQXNzZXRJZCIMcGF5bWVudExwQW10IgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiDSR0MDY3NzAwNjc3NjkiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaIEBAAFhAAgAAWIAgMLXLwABYwkAtgIBAIDC1y8AAWQJALYCAQCAgJC7utat8A0AAWUJALYCAQAAAAFmCQC2AgEAAAABZwkAtgIBAAEAAWgJALYCAQACAAFpAgVXQVZFUwABagICX18AAWsAAQABbAACAAFtAAMAAW4ABAABbwABAAFwAAIAAXEAAwABcgAEAAFzAAUAAXQABgABdQAHAAF2AAgAAXcACQABeAAKAAF5AAEAAXoAAgABQQADAAFCAAEAAUMABwEBRAIBRQFGCQC8AgMJALYCAQUBRQUBZAkAtgIBBQFGAQFHAgFFAUYJALwCAwUBRQUBZAUBRgEBSAIBSQFKCQCgAwEJALwCAwUBSQkAtgIBBQFKBQFkAQFLAwFJAUoBTAkAoAMBCQC9AgQFAUkJALYCAQUBSgUBZAUBTAEBTQMBTgFPAVAJAGsDBQFOBQFPBQFQAQFRAQFJAwkAZgIAAAUBSQkBAS0BBQFJBQFJAQFSAQFJAwkAvwICBQFlBQFJCQC+AgEFAUkFAUkBAVMAAhAlc19fc3dhcENvbnRyYWN0AQFUAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBVQACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFWAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFXAAIRJXMlc19fcHJpY2VfX2xhc3QBAVgCAVkBWgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVkJAMwIAgkApAMBBQFaBQNuaWwFAWoBAmFhAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAmFiAgJfXwUCYWMBAmFkAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAmFiAgJfXwUCYWMBAmFlAAIPJXNfX2Ftb3VudEFzc2V0AQJhZgACDiVzX19wcmljZUFzc2V0AAJhZwIHJXNfX2ZlZQACYWgJAGsDAAoFAWIAkE4AAmFpCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFnBQJhaAACYWoJALkJAgkAzAgCAgIlcwkAzAgCAgNrTHAFA25pbAUBagACYWsJALkJAgkAzAgCAgIlcwkAzAgCAhJrTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBagACYWwJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoS0xwRGVsYXkFA25pbAUBagACYW0AHgACYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWwFAmFtAQJhbwACESVzX19zV2F2ZXNBc3NldElkAQJhcAACFiVzX19zV2F2ZXNQcm94eUFkZHJlc3MBAmFxAQJhcgkAuQkCCQDMCAICBCVzJXMJAMwIAgIRYWRkaXRpb25hbEJhbGFuY2UJAMwIAgUCYXIFA25pbAUBagECYXMBAmFyCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhNzdGFraW5nQXNzZXRCYWxhbmNlCQDMCAIFAmFyBQNuaWwFAWoBAmF0AQJhcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYXEBBQJhcgAAAQJhdQECYXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFzAQUCYXIAAAECYXYAAhElc19fZmFjdG9yeUNvbmZpZwECYXcAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmF4AQJheQkArAICCQCsAgICCCVzJXMlc19fBQJheQIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAmF6AgJhQQJhQgkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYUECAl9fBQJhQgIIX19jb25maWcBAmFDAQJhRAkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhRAECYUUAAgwlc19fc2h1dGRvd24BAmFGAQJhRwkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAmFHAQJhSAACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAAJhSQIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmFKBAJhSwJhTAJhTQJhTgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYUsCAiAoBQJhTAIBKQINIHNlbmRlclZhbGlkPQkApQMBBQJhTQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYU4BAmFPAgJhUAJhUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFQBQJhUQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhUAkAzAgCAgEuCQDMCAIFAmFRCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFSAgJhUAJhUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFQBQJhUQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhUAkAzAgCAgEuCQDMCAIFAmFRCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFTAQJhVAkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhVAUDbmlsAgEgAQJhVQECYVQJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhVAUDbmlsAgEgAAJhVgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFPAgUEdGhpcwkBAVQAAAJhVwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFPAgUCYVYFAmFJAAJhWAoAAmFZCQD8BwQFAmFWAhBnZXRJbkZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVkCA0ludAUCYVkJAAIBCQCsAgIJAAMBBQJhWQIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhWgoAAmFZCQD8BwQFAmFWAhFnZXRPdXRGZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFZAgNJbnQFAmFZCQACAQkArAICCQADAQUCYVkCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAECYmEACQECYU8CBQJhVgkBAmFvAAECYmIACQECYU8CBQJhVgkBAmFwAAECYmMACQELdmFsdWVPckVsc2UCCQCbCAIFAmFWCQECYUUABwECYmQACQDZBAEJAQJhTwIFAmFWCQECYXcAAQJiZQAEAmJmCQECYU8CBQR0aGlzCQECYWUABAJiZwkBAmFPAgUEdGhpcwkBAmFmAAQCYUIJAQJhUgIFAmFWCQECYUMBBQJiZwQCYUEJAQJhUgIFAmFWCQECYUMBBQJiZgkAtQkCCQECYU8CBQJhVgkBAmF6AgkApAMBBQJhQQkApAMBBQJhQgUBagECYmgBAmJpAwkAAAIFAmJpBQFpBQR1bml0CQDZBAEFAmJpAQJiagECYmkDCQAAAgUCYmkFBHVuaXQFAWkJANgEAQkBBXZhbHVlAQUCYmkBAmJrAQJibAkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmJsBQFvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmwFAXAJANkEAQkAkQMCBQJibAUBcQkBAmJoAQkAkQMCBQJibAUBcgkBAmJoAQkAkQMCBQJibAUBcwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJsBQF0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmwFAXUAAmJtCQECYmsBCQECYmUAAAJibgUCYm0AAmJvCAUCYm4CXzEAAmJwCAUCYm4CXzIAAmJxCAUCYm4CXzMAAmJyCAUCYm4CXzQAAmJzCAUCYm4CXzUAAmJ0CAUCYm4CXzYAAmJ1CAUCYm4CXzcBAmJ2AAkAtQkCCQECYU8CBQJhVgkBAmF2AAUBagACYncJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJidgAFAUICGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MAAmJ4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYnYABQFDAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAQJieQoCYnoCYkECYkICYkMCYkQCYkUCYkYCYkcCYkgCYkkJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJ6CQDMCAIJAKQDAQUCYkEJAMwIAgkApAMBBQJiQgkAzAgCCQCkAwEFAmJDCQDMCAIJAKQDAQUCYkQJAMwIAgkApAMBBQJiRQkAzAgCCQCkAwEFAmJGCQDMCAIJAKQDAQUCYkcJAMwIAgkApAMBBQJiSAkAzAgCCQCkAwEFAmJJBQNuaWwFAWoBAmJKBgJiSwJiTAJiTQJiQwJiRgJiRwkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJLCQDMCAIJAKQDAQUCYkwJAMwIAgkApAMBBQJiTQkAzAgCCQCkAwEFAmJDCQDMCAIJAKQDAQUCYkYJAMwIAgkApAMBBQJiRwUDbmlsBQFqAQJiTgECYXIDCQAAAgUCYXICBVdBVkVTCQBkAggJAO8HAQUEdGhpcwlhdmFpbGFibGUJAQJhdAEFAmFyAwkAAAIFAmFyCQECYmEABAJiZgkBAmFPAgUEdGhpcwkBAmFlAAQCYmcJAQJhTwIFBHRoaXMJAQJhZgADAwMJAAACBQJiZgIFV0FWRVMJAAACBQJiZwkBAmJhAAcGAwkAAAIFAmJnAgVXQVZFUwkAAAIFAmJmCQECYmEABwkA8AcCBQR0aGlzCQDZBAEFAmFyCQBkAgkA8AcCBQR0aGlzCQDZBAEFAmFyCQECYXUBBQJhcgkA8AcCBQR0aGlzCQDZBAEFAmFyAQJiTwICYlACYlEJALwCAwUCYlAFAWQFAmJRAQJiUgMCYlACYlEBTAkAvQIEBQJiUAUBZAUCYlEFAUwBAmJTAQJiVAQCYlUJAPwHBAUCYlQCB2dldFJhdGUFA25pbAUDbmlsAwkAAAIFAmJVBQJiVQQCYlYFAmJVAwkAAQIFAmJWAgNJbnQEAmJXBQJiVgUCYlcJAQJhUwECIHByb3h5LmdldFJhdGUoKSB1bmV4cGVjdGVkIHZhbHVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJiWAQCYXICYlkCYloCYlQEAmNhCQECYXQBBQJhcgMJAAACBQJjYQUCY2EEAmNiCQECYXUBBQJiWgMJAAACBQJjYgUCY2IEAmNjCQECYmgBBQJhcgMJAGYCBQJiWQAABAJjZAkA/AcEBQJiVAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjYwUCYlkFA25pbAMJAAACBQJjZAUCY2QEAmJWBQJjZAMJAAECBQJiVgIDSW50BAJjZQUCYlYEAmNmCQBkAgUCY2EFAmJZBAJjZwkAZAIFAmNiBQJjZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFxAQUCYXIFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXMBBQJiWgUCY2cFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNoBQJhcgJiWQJiWgJiVAJjaQQCY2EJAQJhdAEFAmFyAwkAAAIFAmNhBQJjYQQCY2IJAQJhdQEFAmJaAwkAAAIFAmNiBQJjYgQCY2oJAQJiUwEFAmJUAwkAAAIFAmNqBQJjagQCY2sJAQJiaAEFAmJaBAJjbAkAawMFAmNpBQJiWQUCY2oDCQBmAgUCY2wAAAQCY20JAPwHBAUCYlQCCHdpdGhkcmF3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNrBQJjbAUDbmlsAwkAAAIFAmNtBQJjbQQCYlYFAmNtAwkAAQIFAmJWAgNJbnQEAmNuBQJiVgQCY2YJAGUCBQJjYQUCY24EAmNnCQBlAgUCY2IFAmNsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXEBBQJhcgUCY2YJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcwEFAmJaBQJjZwUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY28BAmFyCQD8BwQFAmFWAhpnZXRQb29sTGVhc2VDb25maWdSRUFET05MWQkAzAgCCQClCAEFBHRoaXMJAMwIAgUCYXIFA25pbAUDbmlsAQJjcAYCY3ECYXICYloCY3ICYlQCY2kEAmNhCQECYXQBBQJhcgMJAAACBQJjYQUCY2EEAmNiCQECYXUBBQJiWgMJAAACBQJjYgUCY2IEAmNzBAJiVgkBAmJoAQUCYXIDCQABAgUCYlYCCkJ5dGVWZWN0b3IEAmN0BQJiVgkA8AcCBQR0aGlzBQJjdAMJAAECBQJiVgIEVW5pdAQCY3UFAmJWCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAwkAAAIFAmNzBQJjcwQCY3YJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAGQCBQJjcwUCY2EFAmNyBQNuaWwEAmN3CQBrAwUCY3EFAmN2AGQEAmN4CQBlAgUCY2EFAmN3AwkAAAIFAmN4AAAFA25pbAMJAGYCAAAFAmN4BAJjeQkBAS0BBQJjeAkBAmJYBAUCYXIFAmN5BQJiWgUCYlQEAmN6BQJjeAkBAmNoBQUCYXIFAmN6BQJiWgUCYlQFAmNpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjQQECYXIEAmJWCQECY28BBQJhcgMJAAECBQJiVgIwKEJvb2xlYW4sIEludCwgSW50LCBTdHJpbmcsIFN0cmluZywgSW50LCBTdHJpbmcpBAJjQgUCYlYEAmNDBQJjQgQCY0QIBQJjQwJfMQQCY0UIBQJjQwJfMgQCY3IIBQJjQwJfMwQCY0YIBQJjQwJfNAQCY0cIBQJjQwJfNQQCY2kIBQJjQwJfNgQCY0gIBQJjQwJfNwMFAmNECQECY3AGBQJjRQUCYXIFAmNHBQJjcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0YFAmNpBQNuaWwJAQJhUwEJAKwCAgkArAICAgFbBQJhcgIRXSBSZWJhbGFuY2UgZXJyb3IBAmNJBAJjSgJjSwJjTAJjTQQCY04JAQFEAgUCY0wFAmNKBAJjTwkBAUQCBQJjTQUCY0sJAQJiTwIFAmNPBQJjTgECY1ADAmNMAmNNAmNRBAJjUgkBAmJlAAQCY1MJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUgUBdAQCY1QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUgUBdQQCY1UJAQJjSQQFAmNTBQJjVAUCY0wFAmNNBAJiUQkBAUQCBQJjTAUCY1MEAmJQCQEBRAIFAmNNBQJjVAQCY1YJAQFEAgUCY1EFAWIEAmNXCQECYk8CBQJiUQUCY1YEAmNYCQECYk8CBQJiUAUCY1YJAMwIAgUCY1UJAMwIAgUCY1cJAMwIAgUCY1gFA25pbAECY1kDAmNMAmNNAmNRBAJjWgkBAmNQAwUCY0wFAmNNBQJjUQkAzAgCCQEBSAIJAJEDAgUCY1oAAAUBYgkAzAgCCQEBSAIJAJEDAgUCY1oAAQUBYgkAzAgCCQEBSAIJAJEDAgUCY1oAAgUBYgUDbmlsAQJkYQQCZGICZGMCZGQCYWIEAmNSCQECYmUABAJkZQkAkQMCBQJjUgUBcQQCZGYJAJEDAgUCY1IFAXIEAmRnCQCRAwIFAmNSBQFzBAJjSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNSBQF0BAJjSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNSBQF1BAJkaAkAkQMCBQJjUgUBcAQCZGkICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJkZQkArAICCQCsAgICBkFzc2V0IAUCZGUCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5AwkBAiE9AgUCZGUFAmRjCQACAQIVSW52YWxpZCBhc3NldCBwYXNzZWQuBAJkagkBAmJOAQUCZGYEAmRrCQEBRAIFAmRqBQJjSgQCZGwJAQJiTgEFAmRnBAJkbQkBAUQCBQJkbAUCY0sEAmRuCQECYk8CBQJkbQUCZGsEAmRvCQEBSAIFAmRuBQFiBAJkcAkBAUQCBQJkZAUBYgQCZHEJAQFEAgUCZGkFAWIEAmRyCQC8AgMFAmRrBQJkcAUCZHEEAmRzCQC8AgMFAmRtBQJkcAUCZHEEAmR0CQEBSwMFAmRyBQJjSgUFRkxPT1IEAmR1CQEBSwMFAmRzBQJjSwUFRkxPT1IEAmR2AwkAAAIFAmRiAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCZHQDCQAAAgUCZGYCBVdBVkVTBQR1bml0CQDZBAEFAmRmCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkdQMJAAACBQJkZwIFV0FWRVMFBHVuaXQJANkEAQUCZGcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJhYgUCZGIJAQJiSgYFAmR0BQJkdQUCZGQFAmRvBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmRvCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmRvBQNuaWwJAJwKCgUCZHQFAmR1BQJkZgUCZGcFAmRqBQJkbAUCZGkFAmRuBQJkaAUCZHYBAmR3CQJkYgJkeAJkeQJkegJkQQJkQgJhYgJkQwJkRAQCY1IJAQJiZQAEAmRlCQDZBAEJAJEDAgUCY1IFAXEEAmRFCQCRAwIFAmNSBQFyBAJkRgkAkQMCBQJjUgUBcwQCZEcJAJEDAgUCY1IFAXYEAmRICQCRAwIFAmNSBQF3BAJjUwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNSBQF0BAJjVAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmNSBQF1BAJkaAkAkQMCBQJjUgUBcAQCZGkICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZGUJAKwCAgkArAICAgZBc3NldCAJANgEAQUCZGUCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkSQkA2AQBCQELdmFsdWVPckVsc2UCBQJkegkA2QQBAgVXQVZFUwQCZEoJANgEAQkBC3ZhbHVlT3JFbHNlAgUCZEIJANkEAQIFV0FWRVMDAwkBAiE9AgUCZEUFAmRJBgkBAiE9AgUCZEYFAmRKCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCZGoDBQJkQwkBAmJOAQUCZEUJAGUCCQECYk4BBQJkRQUCZHkEAmRsAwUCZEMJAQJiTgEFAmRGCQBlAgkBAmJOAQUCZEYFAmRBBAJkSwkBAUQCBQJkeQUCY1MEAmRMCQEBRAIFAmRBBQJjVAQCZE0JAQJiTwIFAmRMBQJkSwQCZGsJAQFEAgUCZGoFAmNTBAJkbQkBAUQCBQJkbAUCY1QEAmROAwkAAAIFAmRpAAAEAmRuBQFlBAJkTwUBZQQCY1YJAHYGCQC5AgIFAmRLBQJkTAAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUgCBQJjVgUBYgkBAUgCBQJkSwUCY1MJAQFIAgUCZEwFAmNUCQECYk8CCQC3AgIFAmRtBQJkTAkAtwICBQJkawUCZEsFAmRPBAJkbgkBAmJPAgUCZG0FAmRrBAJkTwkAvAIDCQEBUgEJALgCAgUCZG4FAmRNBQFkBQJkbgQCZFAJAQFEAgUCZHgFAWIDAwkBAiE9AgUCZG4FAWUJAL8CAgUCZE8FAmRQBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJkTwIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmRQBAJkcQkBAUQCBQJkaQUBYgQCZFEJAL0CBAUCZEsJAQJiUgMFAmRtBQJkawUHQ0VJTElORwUBZAUHQ0VJTElORwQCZFIJAL0CBAUCZEwFAWQJAQJiUgMFAmRtBQJkawUFRkxPT1IFB0NFSUxJTkcEAmRTAwkAvwICBQJkUQUCZEwJAJQKAgUCZFIFAmRMCQCUCgIFAmRLBQJkUQQCZFQIBQJkUwJfMQQCZFUIBQJkUwJfMgQCY1YJAL0CBAUCZHEFAmRVBQJkbQUFRkxPT1IJAJcKBQkBAUsDBQJjVgUBYgUFRkxPT1IJAQFLAwUCZFQFAmNTBQdDRUlMSU5HCQEBSwMFAmRVBQJjVAUHQ0VJTElORwUCZG4FAmRPBAJkVggFAmROAl8xBAJkVwgFAmROAl8yBAJkWAgFAmROAl8zBAJkbwkBAUgCCAUCZE4CXzQFAWIEAmRZCQEBSAIIBQJkTgJfNQUBYgMJAGcCAAAFAmRWCQACAQI2SW52YWxpZCBjYWxjdWxhdGlvbnMuIExQIGNhbGN1bGF0ZWQgaXMgbGVzcyB0aGFuIHplcm8uBAJkWgMJAQEhAQUCZEQAAAUCZFYEAmVhCQBlAgUCZHkFAmRXBAJlYgkAZQIFAmRBBQJkWAQCZWMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZG8JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUCYWIFAmRiCQECYnkKBQJkVwUCZFgFAmRaBQJkbwUCZHgFAmRZBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJlYQUCZWIFA25pbAkAnwoNBQJkVgUCZFoFAmRvBQJkagUCZGwFAmRpBQJkZQUCZGgFAmVjBQJlYQUCZWIFAmR6BQJkQgECZWQDAmVlAmVmAmRpBAJlZwkBAUcCBQJlZQkAtgIBBQJidAQCZWgJAQFHAgUCZWYJALYCAQUCYnUEAmVpCQC8AgMJAHYGCQC5AgIFAmVnBQJlaAAACQC2AgEABQABABIFBERPV04FAWcFAmRpAwkAAAIFAmRpBQFmBQFmBQJlaQECZWoDAmVrAmVsAmVtBAJlbgkAuAICCQC2AgEJAQJiTgEJAQJiagEFAmJyBQJlawQCZW8JALgCAgkAtgIBCQECYk4BCQECYmoBBQJicwUCZWwEAmVwCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYnEIcXVhbnRpdHkFAmVtBAJlcQkBAmVkAwUCZW4FAmVvBQJlcAUCZXEBAmVyAwJlcwJldAJlbQQCZW4JAGQCCQECYk4BCQECYmoBBQJicgUCZXMEAmVvCQBkAgkBAmJOAQkBAmJqAQUCYnMFAmV0BAJlcAkAZAIICQEFdmFsdWUBCQDsBwEFAmJxCHF1YW50aXR5BQJlbQQCZWkJAQJlZAMJALYCAQUCZW4JALYCAQUCZW8JALYCAQUCZXAEAmV1CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhawUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFqCQCmAwEFAmVpBQNuaWwJAJQKAgUCZXUFAmVpAQJldgICZXcCZWkDCQDAAgIFAmVpBQJldwYJAQJhUwEJALkJAgkAzAgCAiJ1cGRhdGVkIEtMcCBsb3dlciB0aGFuIGN1cnJlbnQgS0xwCQDMCAIJAKYDAQUCZXcJAMwIAgkApgMBBQJlaQUDbmlsAgEgAQJleAECZXkEAmVuCQECYk4BCQECYmoBBQJicgQCZW8JAQJiTgEJAQJiagEFAmJzBAJleggFAmV5BmFtb3VudAQCZUEJAG4ECAUCZXkGYW1vdW50CAUCZXkFcHJpY2UFAWIFBUZMT09SBAJlQgMJAAACCAUCZXkJb3JkZXJUeXBlBQNCdXkJAJQKAgUCZXoJAQEtAQUCZUEJAJQKAgkBAS0BBQJlegUCZUEEAmVzCAUCZUICXzEEAmV0CAUCZUICXzIDAwMJAQJiYwAGCQAAAgUCYnAFAW0GCQAAAgUCYnAFAW4JAAIBAhxFeGNoYW5nZSBvcGVyYXRpb25zIGRpc2FibGVkAwMJAQIhPQIICAUCZXkJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BQJicgYJAQIhPQIICAUCZXkJYXNzZXRQYWlyCnByaWNlQXNzZXQFAmJzCQACAQITV3Jvbmcgb3JkZXIgYXNzZXRzLgQCZUMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFqAgEwCQECYVUBAgtpbnZhbGlkIGtMcAQCZUQJAQJlcgMFAmVzBQJldAAABAJlRQgFAmVEAl8xBAJlRggFAmVEAl8yBAJlRwkAwAICBQJlRgUCZUMEAmVICQC5CQIJAMwIAgIEa0xwPQkAzAgCCQCmAwEFAmVDCQDMCAICCCBrTHBOZXc9CQDMCAIJAKYDAQUCZUYJAMwIAgIUIGFtb3VudEFzc2V0QmFsYW5jZT0JAMwIAgkApAMBBQJlbgkAzAgCAhMgcHJpY2VBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZW8JAMwIAgIZIGFtb3VudEFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFAmVzCQDMCAICGCBwcmljZUFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFAmV0CQDMCAICCCBoZWlnaHQ9CQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwCAAkAlAoCBQJlRwUCZUgBAmVJAQJlSgMJAQIhPQIJAJADAQgFAmVKCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCZUsJAQV2YWx1ZQEJAJEDAggFAmVKCHBheW1lbnRzAAAEAmRjCQEFdmFsdWUBCAUCZUsHYXNzZXRJZAQCZUwIBQJlSwZhbW91bnQEAmROCQECZGEECQDYBAEIBQJlSg10cmFuc2FjdGlvbklkCQDYBAEFAmRjBQJlTAgFAmVKBmNhbGxlcgQCZHQIBQJkTgJfMQQCZHUIBQJkTgJfMgQCZGgJAQ1wYXJzZUludFZhbHVlAQgFAmROAl85BAJkdggFAmROA18xMAMDCQECYmMABgkAAAIFAmRoBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJkaAkAlwoFBQJkdAUCZHUFAmVMBQJkYwUCZHYBAmVNAwJlSgJkeAJkRAMJAQIhPQIJAJADAQgFAmVKCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAJlTgkBBXZhbHVlAQkAkQMCCAUCZUoIcGF5bWVudHMAAAQCZU8JAQV2YWx1ZQEJAJEDAggFAmVKCHBheW1lbnRzAAEEAmVQCQECZHcJCQDYBAEIBQJlSg10cmFuc2FjdGlvbklkBQJkeAgFAmVOBmFtb3VudAgFAmVOB2Fzc2V0SWQIBQJlTwZhbW91bnQIBQJlTwdhc3NldElkCQClCAEIBQJlSgZjYWxsZXIHBQJkRAQCZGgJAQ1wYXJzZUludFZhbHVlAQgFAmVQAl84AwMDCQECYmMABgkAAAIFAmRoBQFsBgkAAAIFAmRoBQFuCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJkaAUCZVABAmVRAQJiWQQCZVIJAPwHBAUCYVYCBGVtaXQJAMwIAgUCYlkFA25pbAUDbmlsAwkAAAIFAmVSBQJlUgQCZVMEAmJWBQJlUgMJAAECBQJiVgIHQWRkcmVzcwQCZVQFAmJWCQD8BwQFAmVUAgRlbWl0CQDMCAIFAmJZBQNuaWwFA25pbAUEdW5pdAMJAAACBQJlUwUCZVMFAmJZCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlVQICYlkCYWkEAmVWAwkAAAIFAmFpAAAAAAkAawMFAmJZBQJhaQUBYgkAlAoCCQBlAgUCYlkFAmVWBQJlVgECZVcEAmVYAmVZAmFiAmFjBAJlWgkAAAIFAmFjBQR1bml0BAJmYQkBAmJOAQkBAmJqAQUCYnIEAmZiCQECYk4BCQECYmoBBQJicwQCZmMDCQAAAgUCZVkFAmJyBgMJAAACBQJlWQUCYnMHCQECYVMBAg1pbnZhbGlkIGFzc2V0BAJmZAMFAmVaCQCUCgIFAmZhBQJmYgMFAmZjCQCUCgIJAGUCBQJmYQUCZVgFAmZiCQCUCgIFAmZhCQBlAgUCZmIFAmVYBAJmZQgFAmZkAl8xBAJmZggFAmZkAl8yBAJmZwMFAmZjCQCUCgIFAmVYAAAJAJQKAgAABQJlWAQCZmgIBQJmZwJfMQQCZmkIBQJmZwJfMgQCZXoICQECZVUCBQJmaAUCYVgCXzEEAmVBCAkBAmVVAgUCZmkFAmFYAl8xBAJmagkBAmVVAgUCZVgFAmFYBAJmawgFAmZqAl8xBAJlVggFAmZqAl8yBAJmbAkAZAIFAmZlBQJlegQCZm0JAGQCBQJmZgUCZUEEAmZuCQECYk8CCQEBRAIFAmZtBQJidQkBAUQCBQJmbAUCYnQEAmZvCQEBSAIFAmZuBQFiBAJmcAMFAmZjBQJmZQUCZmYEAmZxCQC2AgEFAmZwBAJmcgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJxCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJxAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZnMDCQC/AgIFAmZyBQFmBgkBAmFTAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJmcwUCZnMEAmZ0CQC2AgEFAmZrBAJmdQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJmcgkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmZ0BQFkBQJmcQASABIFBERPV04FAWQFAWQFA25pbAQCZWMDBQJlWgUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZvCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZvCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJieQoFAmZoBQJmaQUCZnUFAmZvAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZnYJAQJiTwIJAQFEAgUCZmYFAmJ1CQEBRAIFAmZlBQJidAQCZncJAQFIAgUCZnYFAWIEAmZ4BAJmeQMFAmZjCQCUCgIFAmZoBQJmZQkAlAoCBQJmaQUCZmYEAmJZCAUCZnkCXzEEAmZ6CAUCZnkCXzIEAmZBCQCgAwEJALwCAwUCZnIJALYCAQkAaQIFAmJZAAIJALYCAQUCZnoJAGsDCQBlAgUCZnUFAmZBBQFiBQJmQQkAlwoFBQJmdQUCZWMFAmVWBQJmeAUCZmMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZCBQJmQwJmawJlWQJhYgJhYwQCZVoJAAACBQJhYwUEdW5pdAQCY1IJAQJiZQAEAmNTCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1IFAXQEAmNUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1IFAXUEAmZECQDMCAIDCQAAAgUCZVkFAmJxBgkBAmFTAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmZEBQJmRAQCZkUDCQAAAgUCZkMFAmJyBgMJAAACBQJmQwUCYnMHCQECYVMBAg1pbnZhbGlkIGFzc2V0BAJmRgMFAmZFCQC2AgEJAQJiTgEJAQJiagEFAmJyCQC2AgEJAQJiTgEJAQJiagEFAmJzBAJmRwMFAmZFBQJjUwUCY1QEAmZICQECYk4BCQECYmoBBQJicgQCZkkJAQJiTgEJAQJiagEFAmJzBAJmSgMFAmZFBQJmSAUCZkkEAmZLCQC2AgEFAmZKBAJmcgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJxCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJxAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZkwJALYCAQUCZmsEAmZNCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmZGCQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJmTAUBZAUCZnIAEgUBaAAAABIFBERPV04FAWQFA25pbAQCZk4JAQJlVQIFAmZNBQJhWgQCZk8IBQJmTgJfMQQCZVYIBQJmTgJfMgQCZlADBQJmRQkAlgoEBQJmTwAACQBlAgUCZkgFAmZNBQJmSQkAlgoEAAAFAmZPBQJmSAkAZQIFAmZJBQJmTQQCZlEIBQJmUAJfMQQCZlIIBQJmUAJfMgQCZlMIBQJmUAJfMwQCZlQIBQJmUAJfNAQCZm4JAQJiTwIJAQFEAgUCZlQFAmJ1CQEBRAIFAmZTBQJidAQCZm8JAQFIAgUCZm4FAWIEAmVjAwUCZVoFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEJAQV2YWx1ZQEFAmFiCQDYBAEJAQV2YWx1ZQEFAmFjCQECYkoGBQJmUQUCZlIFAmZrBQJmbwUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJmbwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJmbwUDbmlsBAJmdgkBAmJPAgkBAUQCBQJmSQUCYnUJAQFEAgUCZkgFAmJ0BAJmdwkBAUgCBQJmdgUBYgQCZngEAmZVCQBoAgkAoAMBCQC8AgMFAmZGBQJmTAUCZnIAAgkAawMJAGUCBQJmTwUCZlUFAWIFAmZVCQCXCgUFAmZPBQJlYwUCZVYFAmZ4BQJmRQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZlYABAJiVgkAoggBCQEBVQADCQABAgUCYlYCBlN0cmluZwQCZlcFAmJWCQDZBAEFAmZXAwkAAQIFAmJWAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmZYAAQCYlYJAKIIAQkBAVYAAwkAAQIFAmJWAgZTdHJpbmcEAmZXBQJiVgkA2QQBBQJmVwMJAAECBQJiVgIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJmWQECZUoEAmJWCQECZlYAAwkAAQIFAmJWAgpCeXRlVmVjdG9yBAJmWgUCYlYJAAACCAUCZUoPY2FsbGVyUHVibGljS2V5BQJmWgMJAAECBQJiVgIEVW5pdAkAAAIIBQJlSgZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZ2EBAmVKBAJnYgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJiVgkBAmZWAAMJAAECBQJiVgIKQnl0ZVZlY3RvcgQCZloFAmJWAwkAAAIIBQJlSg9jYWxsZXJQdWJsaWNLZXkFAmZaBgUCZ2IDCQABAgUCYlYCBFVuaXQDCQAAAggFAmVKBmNhbGxlcgUEdGhpcwYFAmdiCQACAQILTWF0Y2ggZXJyb3IeAmVKAQlyZWJhbGFuY2UACQDOCAIJAQJjQQEJAQJhTwIFBHRoaXMJAQJhZQAJAQJjQQEJAQJhTwIFBHRoaXMJAQJhZgACZUoBIWNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBSRUFET05MWQMCZ2MCZ2QCZ2UEAmdmAwkAAAIFAmdkBwQCZ2cJAQJhTwIFBHRoaXMJAQJhZgAEAmdoCQECYU8CBQR0aGlzCQECYWUACQCUCgIFAmdnBQJnaAQCZ2cJAQJhTwIFBHRoaXMJAQJhZQAEAmdoCQECYU8CBQR0aGlzCQECYWYACQCUCgIFAmdnBQJnaAQCZ2cIBQJnZgJfMQQCZ2gIBQJnZgJfMgQCZ2kJAQJiTgEFAmdoBAJnagkBAmJOAQUCZ2cEAmdrCQBrAwUCZ2oFAmdjCQBkAgUCZ2kFAmdjBAJnbAkAuQICCQC2AgEFAmdpCQC2AgEFAmdqBAJnbQkAuQICCQC3AgIJALcCAgkAtgIBCQECYk4BBQJnaAkAtgIBBQJnYwkAtgIBBQJnZQkAuAICCQC2AgEJAQJiTgEFAmdnCQC2AgEFAmdrBAJnbgMJAMACAgUCZ20FAmdsBgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmduBQJnbgkAlAoCBQNuaWwFAmdrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVKASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwUCZ2MCZ2QCZ28CZ3ACZ2UEAmdxCgACYVkJAPwHBAUCYVYCF2dldFN3YXBDb250cmFjdFJFQURPTkxZBQNuaWwFA25pbAMJAAECBQJhWQIGU3RyaW5nBQJhWQkAAgEJAKwCAgkAAwEFAmFZAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcEAmZECQDMCAIDCQBnAggJAQV2YWx1ZQEJAJEDAggFAmVKCHBheW1lbnRzAAAGYW1vdW50BQJnYwYJAQJhUwECDFdyb25nIGFtb3VudAkAzAgCAwkAAAIIBQJlSgZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdxBgkBAmFTAQIRUGVybWlzc2lvbiBkZW5pZWQFA25pbAMJAAACBQJmRAUCZkQEAmVLCQEFdmFsdWUBCQCRAwIIBQJlSghwYXltZW50cwAABAJnaAkBAmJqAQgFAmVLB2Fzc2V0SWQEAmdnAwkAAAIFAmdkBwkBAmFPAgUEdGhpcwkBAmFmAAkBAmFPAgUEdGhpcwkBAmFlAAQCZ2kJAGUCCQECYk4BBQJnaAgJAQV2YWx1ZQEJAJEDAggFAmVKCHBheW1lbnRzAAAGYW1vdW50BAJnagkBAmJOAQUCZ2cEAmdrCQBrAwUCZ2oFAmdjCQBkAgUCZ2kFAmdjBAJnbAkAuQICCQC2AgEFAmdpCQC2AgEFAmdqBAJnbQkAuQICCQC3AgIJALYCAQkBAmJOAQUCZ2gJALYCAQUCZ2UJALgCAgkAtgIBCQECYk4BBQJnZwkAtgIBBQJnawQCZ24DCQDAAgIFAmdtBQJnbAYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQJnbgUCZ24EAmdyAwkAZwIFAmdrBQJnbwYJAAIBAixFeGNoYW5nZSByZXN1bHQgaXMgZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAMJAAACBQJncgUCZ3IEAmdzBAJiVgkBAmNvAQUCZ2cDCQABAgUCYlYCMChCb29sZWFuLCBJbnQsIEludCwgU3RyaW5nLCBTdHJpbmcsIEludCwgU3RyaW5nKQQCY0IFAmJWBQJjQgkAAgECEmVycm9yIGxlYXNlIGNvbmZpZwQCZ3QFAmdzBAJjRAgFAmd0Al8xBAJjRQgFAmd0Al8yBAJjcggFAmd0Al8zBAJjRggFAmd0Al80BAJjRwgFAmd0Al81BAJjaQgFAmd0Al82BAJjSAgFAmd0Al83BAJndQkA8AcCBQR0aGlzCQDZBAEFAmdnBAJndgMDCQAAAgUCZ2cCBVdBVkVTCQBmAgUCZ2sFAmd1BwQCZ3cJAGUCBQJnawUCZ3UEAmd4CQBpAgkBAmF0AQUCZ2cJAQJhdQEJAQJiYQAEAmd5CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQCZ3oJAPwHBAUEdGhpcwIId2l0aGRyYXcJAMwIAgUCZ2cJAMwIAgUCZ3cJAMwIAgkBAmJhAAkAzAgCCQECYmIACQDMCAIFAmNpBQNuaWwFA25pbAMJAAACBQJnegUCZ3oEAmdBCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQCZ0IJAGUCBQJnQQUCZ3kJAGUCBQJnQgUCZ3cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAQCZ0MJAPwHBAUEdGhpcwIJcmViYWxhbmNlBQNuaWwFA25pbAMJAAACBQJnQwUCZ0MJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjSAUCZ3YFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ3AFAmdrCQECYmgBBQJnZwUDbmlsBQJnawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlSgEKc2V0TWFuYWdlcgECZ0QEAmdFCQECZ2EBBQJlSgMJAAACBQJnRQUCZ0UEAmdGCQDZBAEFAmdEAwkAAAIFAmdGBQJnRgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgAFAmdEBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZUoBDmNvbmZpcm1NYW5hZ2VyAAQCZ0cJAQJmWAAEAmdIAwkBCWlzRGVmaW5lZAEFAmdHBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJnSAUCZ0gEAmdJAwkAAAIIBQJlSg9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmdHBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJnSQUCZ0kJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVUACQDYBAEJAQV2YWx1ZQEFAmdHCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFWAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVKAQNwdXQCAmR4AmdKAwkAZgIAAAUCZHgJAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZVAJAQJlTQMFAmVKBQJkeAYEAmRaCAUCZVACXzIEAmRlCAUCZVACXzcEAmR2CAUCZVACXzkEAmVhCAUCZVADXzEwBAJlYggFAmVQA18xMQQCZ0sIBQJlUANfMTIEAmdMCAUCZVADXzEzBAJlTgkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZUoIcGF5bWVudHMAAAZhbW91bnQEAmVPCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlSghwYXltZW50cwABBmFtb3VudAQCZXEJAQJlagMFAmVOBQJlTwkAtgIBAAADCQAAAgUCZXEFAmVxBAJlUgkA/AcEBQJhVgIEZW1pdAkAzAgCBQJkWgUDbmlsBQNuaWwDCQAAAgUCZVIFAmVSBAJlUwQCYlYFAmVSAwkAAQIFAmJWAgdBZGRyZXNzBAJlVAUCYlYJAPwHBAUCZVQCBGVtaXQJAMwIAgUCZFoFA25pbAUDbmlsBQR1bml0AwkAAAIFAmVTBQJlUwQCZ00DCQBmAgUCZWEAAAkA/AcEBQJieAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmdLBQJlYQUDbmlsBQNuaWwDCQAAAgUCZ00FAmdNBAJnTgMJAGYCBQJlYgAACQD8BwQFAmJ4AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0wFAmViBQNuaWwFA25pbAMJAAACBQJnTgUCZ04EAmdPAwUCZ0oEAmdQCQD8BwQFAmJ3AgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkZQUCZFoFA25pbAMJAAACBQJnUAUCZ1AFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZUoGY2FsbGVyBQJkWgUCZGUFA25pbAQCZ1EJAQJlcgMAAAAAAAADCQAAAgUCZ1EFAmdRBAJlaQgFAmdRAl8yBAJnUggFAmdRAl8xBAJnUwkBAmV2AgUCZXEFAmVpAwkAAAIFAmdTBQJnUwkAzggCCQDOCAIFAmR2BQJnTwUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZUoBCnB1dEZvckZyZWUBAmdUAwkAZgIAAAUCZ1QJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZVAJAQJlTQMFAmVKBQJnVAcEAmR2CAUCZVACXzkEAmVOCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlSghwYXltZW50cwAABmFtb3VudAQCZU8JALYCAQgJAQV2YWx1ZQEJAJEDAggFAmVKCHBheW1lbnRzAAEGYW1vdW50BAJlcQkBAmVqAwUCZU4FAmVPCQC2AgEAAAMJAAACBQJlcQUCZXEEAmdVCQECZXIDAAAAAAAABAJnUggFAmdVAl8xBAJlaQgFAmdVAl8yBAJnUwkBAmV2AgUCZXEFAmVpAwkAAAIFAmdTBQJnUwkAzggCBQJkdgUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZUoBCXB1dE9uZVRrbgICZ1YCZ1cEAmdYCgACYVkJAPwHBAUCYVYCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhWQIHQm9vbGVhbgUCYVkJAAIBCQCsAgIJAAMBBQJhWQIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ1kDAwMJAQJiYwAGCQAAAgUCYnAFAWwGCQAAAgUCYnAFAW4GBQJnWAQCZkQJAMwIAgMDCQEBIQEFAmdZBgkBAmZZAQUCZUoGCQECYVMBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlSghwYXltZW50cwABBgkBAmFTAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZkQFAmZEBAJnWgkAkQMCCAUCZUoIcGF5bWVudHMAAAQCZVkIBQJnWgdhc3NldElkBAJlWAgFAmdaBmFtb3VudAQCZXEDCQAAAgUCZVkFAmJyCQECZWoDCQC2AgEFAmVYCQC2AgEAAAkAtgIBAAADCQAAAgUCZVkFAmJzCQECZWoDCQC2AgEAAAkAtgIBBQJlWAkAtgIBAAAJAQJhUwECHnBheW1lbnQgYXNzZXQgaXMgbm90IHN1cHBvcnRlZAMJAAACBQJlcQUCZXEEAmFiCAUCZUoGY2FsbGVyBAJhYwgFAmVKDXRyYW5zYWN0aW9uSWQEAmhhCQECZVcEBQJlWAUCZVkFAmFiBQJhYwMJAAACBQJoYQUCaGEEAmZjCAUCaGECXzUEAmhiCAUCaGECXzQEAmVWCAUCaGECXzMEAmVjCAUCaGECXzIEAmhjCAUCaGECXzEEAmhkAwMJAGYCBQJnVgAACQBmAgUCZ1YFAmhjBwkBAmFTAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJnVgUDbmlsAgAFAmhjBAJlUgkBAmVRAQUCaGQDCQAAAgUCZVIFAmVSBAJnTwMFAmdXBAJoZQkA/AcEBQJidwIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYnEFAmhkBQNuaWwDCQAAAgUCaGUFAmhlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmVKBmNhbGxlcgUCaGQFAmJxBQNuaWwEAmhmAwkAZgIFAmVWAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVcFAmVWBQJlWQUDbmlsBQNuaWwEAmhnAwkAAAIFBHRoaXMFAmFXCQCUCgIAAAAAAwUCZmMJAJQKAgkBAS0BBQJlVgAACQCUCgIAAAkBAS0BBQJlVgQCZXMIBQJoZwJfMQQCZXQIBQJoZwJfMgQCaGgJAQJlcgMFAmVzBQJldAAABAJnUggFAmhoAl8xBAJlaQgFAmhoAl8yBAJlQwkBBXZhbHVlAQkAoggBBQJhagQCZ1MJAQJldgIFAmVxBQJlaQMJAAACBQJnUwUCZ1MEAmdDCQD8BwQFBHRoaXMCCXJlYmFsYW5jZQUDbmlsBQNuaWwDCQAAAgUCZ0MFAmdDCQCUCgIJAM4IAgkAzggCCQDOCAIFAmVjBQJnTwUCaGYFAmdSBQJoZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlSgERcHV0T25lVGtuUkVBRE9OTFkCAmVZAmVYBAJoaQkBAmVXBAUCZVgJAQJiaAEFAmVZBQR1bml0BQR1bml0BAJoYwgFAmhpAl8xBAJlYwgFAmhpAl8yBAJlVggFAmhpAl8zBAJoYggFAmhpAl80BAJmYwgFAmhpAl81CQCUCgIFA25pbAkAlQoDBQJoYwUCZVYFAmhiAmVKAQlnZXRPbmVUa24CAmhqAmdWBAJnWAoAAmFZCQD8BwQFAmFWAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVkCB0Jvb2xlYW4FAmFZCQACAQkArAICCQADAQUCYVkCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhrAwMJAQJiYwAGCQAAAgUCYnAFAW4GBQJnWAQCZkQJAMwIAgMDCQEBIQEFAmhrBgkBAmZZAQUCZUoGCQECYVMBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlSghwYXltZW50cwABBgkBAmFTAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZkQFAmZEBAJmQwkBAmJoAQUCaGoEAmdaCQCRAwIIBQJlSghwYXltZW50cwAABAJlWQgFAmdaB2Fzc2V0SWQEAmZrCAUCZ1oGYW1vdW50BAJlcQkBAmVqAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlcQUCZXEEAmFiCAUCZUoGY2FsbGVyBAJhYwgFAmVKDXRyYW5zYWN0aW9uSWQEAmhsCQECZkIFBQJmQwUCZmsFAmVZBQJhYgUCYWMDCQAAAgUCaGwFAmhsBAJmRQgFAmhsAl81BAJoYggFAmhsAl80BAJlVggFAmhsAl8zBAJlYwgFAmhsAl8yBAJobQgFAmhsAl8xBAJiWQMDCQBmAgUCZ1YAAAkAZgIFAmdWBQJobQcJAQJhUwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ1YFA25pbAIABQJobQQCZ3MEAmJWCQECY28BBQJoagMJAAECBQJiVgIwKEJvb2xlYW4sIEludCwgSW50LCBTdHJpbmcsIFN0cmluZywgSW50LCBTdHJpbmcpBAJjQgUCYlYFAmNCCQACAQISZXJyb3IgbGVhc2UgY29uZmlnBAJobgUCZ3MEAmNECAUCaG4CXzEEAmNFCAUCaG4CXzIEAmNyCAUCaG4CXzMEAmNGCAUCaG4CXzQEAmNHCAUCaG4CXzUEAmNpCAUCaG4CXzYEAmNICAUCaG4CXzcEAmd1CQDwBwIFBHRoaXMJANkEAQUCaGoEAmd2AwMJAAACBQJoagIFV0FWRVMJAGYCBQJiWQUCZ3UHBAJndwkAZQIFAmJZBQJndQQCZ3gJAGkCCQECYXQBBQJoagkBAmF1AQkBAmJhAAQCZ3kICQDvBwEFBHRoaXMJYXZhaWxhYmxlBAJnegkA/AcEBQR0aGlzAgh3aXRoZHJhdwkAzAgCBQJoagkAzAgCBQJndwkAzAgCCQECYmEACQDMCAIJAQJiYgAJAMwIAgUCY2kFA25pbAUDbmlsAwkAAAIFAmd6BQJnegQCZ0EICQDvBwEFBHRoaXMJYXZhaWxhYmxlBAJnQgkAZQIFAmdBBQJneQkAZQIFAmdCBQJndwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAABAJobwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjSAUCZ3YFBHVuaXQFA25pbAQCaHAJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCZmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZVkFAmZrBQNuaWwDCQAAAgUCaHAFAmhwBAJocQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCYlkFAmZDBQNuaWwEAmhmAwkAZgIFAmVWAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVcFAmVWBQJmQwUDbmlsBQNuaWwEAmhyBAJocwMJAAACBQR0aGlzBQJhVwAABQJlVgMFAmZFCQCUCgIJAQEtAQkAZAIFAmJZBQJocwAACQCUCgIAAAkBAS0BCQBkAgUCYlkFAmhzBAJlcwgFAmhyAl8xBAJldAgFAmhyAl8yBAJodAkBAmVyAwUCZXMFAmV0AAAEAmdSCAUCaHQCXzEEAmVpCAUCaHQCXzIEAmdTCQECZXYCBQJlcQUCZWkDCQAAAgUCZ1MFAmdTBAJnQwkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmdDBQJnQwkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIFAmVjBQJocQUCaG8FAmhmBQJnUgUCYlkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZUoBEWdldE9uZVRrblJFQURPTkxZAgJmQwJmawQCaHUJAQJmQgUJAQJiaAEFAmZDBQJmawUCYnEFBHVuaXQFBHVuaXQEAmhtCAUCaHUCXzEEAmVjCAUCaHUCXzIEAmVWCAUCaHUCXzMEAmhiCAUCaHUCXzQEAmZFCAUCaHUCXzUJAJQKAgUDbmlsCQCVCgMFAmhtBQJlVgUCaGICZUoBE3Vuc3Rha2VBbmRHZXRPbmVUa24DAmh2AmhqAmdWBAJnWAoAAmFZCQD8BwQFAmFWAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVkCB0Jvb2xlYW4FAmFZCQACAQkArAICCQADAQUCYVkCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhrAwMJAQJiYwAGCQAAAgUCYnAFAW4GBQJnWAQCZkQJAMwIAgMDCQEBIQEFAmhrBgkBAmZZAQUCZUoGCQECYVMBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlSghwYXltZW50cwAABgkBAmFTAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZkQFAmZEBAJmQwkBAmJoAQUCaGoEAmFiCAUCZUoGY2FsbGVyBAJhYwgFAmVKDXRyYW5zYWN0aW9uSWQEAmVxCQECZWoDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVxBQJlcQQCaHcJAPwHBAUCYncCB3Vuc3Rha2UJAMwIAgkA2AQBBQJicQkAzAgCBQJodgUDbmlsBQNuaWwDCQAAAgUCaHcFAmh3BAJoeAkBAmZCBQUCZkMFAmh2BQJicQUCYWIFAmFjAwkAAAIFAmh4BQJoeAQCZkUIBQJoeAJfNQQCaGIIBQJoeAJfNAQCZVYIBQJoeAJfMwQCZWMIBQJoeAJfMgQCaG0IBQJoeAJfMQQCYlkDAwkAZgIFAmdWAAAJAGYCBQJnVgUCaG0HCQECYVMBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmdWBQNuaWwCAAUCaG0EAmhwCQD8BwQFAmFWAgRidXJuCQDMCAIFAmh2BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJxBQJodgUDbmlsAwkAAAIFAmhwBQJocAQCaHEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmVKBmNhbGxlcgUCYlkFAmZDBQNuaWwEAmhmAwkAZgIFAmVWAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVcFAmVWBQJmQwUDbmlsBQNuaWwEAmh5BAJocwMJAAACBQR0aGlzBQJhVwAABQJlVgMFAmZFCQCUCgIJAQEtAQkAZAIFAmJZBQJocwAACQCUCgIAAAkBAS0BCQBkAgUCYlkFAmhzBAJlcwgFAmh5Al8xBAJldAgFAmh5Al8yBAJoegkBAmVyAwUCZXMFAmV0AAAEAmdSCAUCaHoCXzEEAmVpCAUCaHoCXzIEAmdTCQECZXYCBQJlcQUCZWkDCQAAAgUCZ1MFAmdTCQCUCgIJAM4IAgkAzggCCQDOCAIFAmVjBQJocQUCaGYFAmdSBQJiWQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlSgEDZ2V0AAQCZE4JAQJlSQEFAmVKBAJoQQgFAmROAl8xBAJkdQgFAmROAl8yBAJlTAgFAmROAl8zBAJkYwgFAmROAl80BAJkdggFAmROAl81BAJlcQkBAmVqAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlcQUCZXEEAmhCCQD8BwQFAmFWAgRidXJuCQDMCAIFAmVMBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRjBQJlTAUDbmlsAwkAAAIFAmhCBQJoQgQCaEMJAQJlcgMJAQEtAQUCaEEJAQEtAQUCZHUAAAQCZ1IIBQJoQwJfMQQCZWkIBQJoQwJfMgQCZ1MJAQJldgIFAmVxBQJlaQMJAAACBQJnUwUCZ1MJAM4IAgUCZHYFAmdSCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVKAQlnZXROb0xlc3MCAmhEAmhFBAJkTgkBAmVJAQUCZUoEAmR0CAUCZE4CXzEEAmR1CAUCZE4CXzIEAmVMCAUCZE4CXzMEAmRjCAUCZE4CXzQEAmR2CAUCZE4CXzUDCQBmAgUCaEQFAmR0CQACAQkArAICCQCsAgIJAKwCAgIcbm9MZXNzVGhlbkFtdEFzc2V0IGZhaWxlZDogIAkApAMBBQJkdAIDIDwgCQCkAwEFAmhEAwkAZgIFAmhFBQJkdQkAAgEJAKwCAgkArAICCQCsAgICHW5vTGVzc1RoZW5QcmljZUFzc2V0IGZhaWxlZDogCQCkAwEFAmR1AgMgPCAJAKQDAQUCaEUEAmVxCQECZWoDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVxBQJlcQQCaEIJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCZUwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGMFAmVMBQNuaWwDCQAAAgUCaEIFAmhCBAJoRgkBAmVyAwkBAS0BBQJkdAkBAS0BBQJkdQAABAJnUggFAmhGAl8xBAJlaQgFAmhGAl8yBAJnUwkBAmV2AgUCZXEFAmVpAwkAAAIFAmdTBQJnUwkAzggCBQJkdgUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZUoBDXVuc3Rha2VBbmRHZXQBAmJZBAJoRwMJAQIhPQIJAJADAQgFAmVKCHBheW1lbnRzAAAJAAIBAhhObyBwYXltZW50cyBhcmUgZXhwZWN0ZWQGAwkAAAIFAmhHBQJoRwQCY1IJAQJiZQAEAmRlCQDZBAEJAJEDAgUCY1IFAXEEAmVxCQECZWoDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVxBQJlcQQCaHcJAPwHBAUCYncCB3Vuc3Rha2UJAMwIAgkA2AQBBQJkZQkAzAgCBQJiWQUDbmlsBQNuaWwDCQAAAgUCaHcFAmh3BAJkTgkBAmRhBAkA2AQBCAUCZUoNdHJhbnNhY3Rpb25JZAkA2AQBBQJkZQUCYlkIBQJlSgZjYWxsZXIEAmR0CAUCZE4CXzEEAmR1CAUCZE4CXzIEAmRoCQENcGFyc2VJbnRWYWx1ZQEIBQJkTgJfOQQCZHYIBQJkTgNfMTAEAmhIAwMJAQJiYwAGCQAAAgUCZGgFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmRoBgMJAAACBQJoSAUCaEgEAmhCCQD8BwQFAmFWAgRidXJuCQDMCAIFAmJZBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRlBQJiWQUDbmlsAwkAAAIFAmhCBQJoQgQCaEkJAQJlcgMJAQEtAQUCZHQJAQEtAQUCZHUAAAQCZ1IIBQJoSQJfMQQCZWkIBQJoSQJfMgQCZ1MJAQJldgIFAmVxBQJlaQMJAAACBQJnUwUCZ1MJAM4IAgUCZHYFAmdSCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVKARN1bnN0YWtlQW5kR2V0Tm9MZXNzAwJodgJoSgJoRQQCaGsDCQECYmMABgkAAAIFAmJwBQFuBAJmRAkAzAgCAwkBASEBBQJoawYJAAIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlSghwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZEBQJmRAQCZXEJAQJlagMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZXEFAmVxBAJodwkA/AcEBQJidwIHdW5zdGFrZQkAzAgCCQDYBAEFAmJxCQDMCAIFAmh2BQNuaWwFA25pbAMJAAACBQJodwUCaHcEAmROCQECZGEECQDYBAEIBQJlSg10cmFuc2FjdGlvbklkCQDYBAEFAmJxBQJodggFAmVKBmNhbGxlcgQCZHQIBQJkTgJfMQQCZHUIBQJkTgJfMgQCZHYIBQJkTgNfMTAEAmhLCQDMCAIDCQBnAgUCZHQFAmhKBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhKBQNuaWwCAAkAzAgCAwkAZwIFAmR1BQJoRQYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhFBQNuaWwCAAUDbmlsAwkAAAIFAmhLBQJoSwQCaEIJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCaHYFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYnEFAmh2BQNuaWwDCQAAAgUCaEIFAmhCBAJoTAkBAmVyAwkBAS0BBQJkdAkBAS0BBQJkdQAABAJnUggFAmhMAl8xBAJlaQgFAmhMAl8yBAJnUwkBAmV2AgUCZXEFAmVpAwkAAAIFAmdTBQJnUwkAzggCBQJkdgUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZUoBCGFjdGl2YXRlAgJoTQJoTgMJAQIhPQIJAKUIAQgFAmVKBmNhbGxlcgkApQgBBQJhVgkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQAFAmhNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgAFAmhOBQNuaWwCB3N1Y2Nlc3MCZUoBCnJlZnJlc2hLTHAABAJoTwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhawAABAJoUAMJAGcCCQBlAgUGaGVpZ2h0BQJoTwUCYW4FBHVuaXQJAQJhUwEJALkJAgkAzAgCCQCkAwEFAmFuCQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJoUAUCaFAEAmVDCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmFVAQILaW52YWxpZCBrTHAEAmhRCQECZXIDAAAAAAAABAJoUggFAmhRAl8xBAJlaQgFAmhRAl8yBAJldQMJAQIhPQIFAmVDBQJlaQUCaFIJAQJhUwECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJldQkApgMBBQJlaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlSgEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYmUAAmVKARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJhcgkAlAoCBQNuaWwJAQJiTgEFAmFyAmVKARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJjTAJjTQJjUQQCY1oJAQJjUAMFAmNMBQJjTQUCY1EJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJjWgAACQDMCAIJAKYDAQkAkQMCBQJjWgABCQDMCAIJAKYDAQkAkQMCBQJjWgACBQNuaWwCZUoBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJlSgEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSQFKCQCUCgIFA25pbAkBAUgCCQCnAwEFAUkFAUoCZUoBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYlACYlEJAJQKAgUDbmlsCQCmAwEJAQJiTwIJAKcDAQUCYlAJAKcDAQUCYlECZUoBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJkYgJkeAJkeQJkegJkQQJkQgJhYgJkQwJkRAkAlAoCBQNuaWwJAQJkdwkFAmRiBQJkeAUCZHkFAmR6BQJkQQUCZEIFAmFiBQJkQwUCZEQCZUoBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJkYgJkYwJkZAJhYgQCZE4JAQJkYQQFAmRiBQJkYwUCZGQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFiCQCUCgIFA25pbAkAnAoKCAUCZE4CXzEIBQJkTgJfMggFAmROAl8zCAUCZE4CXzQIBQJkTgJfNQgFAmROAl82CAUCZE4CXzcJAKYDAQgFAmROAl84CAUCZE4CXzkIBQJkTgNfMTACZUoBDXN0YXRzUkVBRE9OTFkABAJjUgkBAmJlAAQCZGUJANkEAQkAkQMCBQJjUgUBcQQCaFMJAJEDAgUCY1IFAXIEAmhUCQCRAwIFAmNSBQFzBAJkRwkAkQMCBQJjUgUBdgQCZEgJAJEDAgUCY1IFAXcEAmNTCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1IFAXQEAmNUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1IFAXUEAmhVCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRlCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmRlAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFYJAQJiTgEFAmhTBAJoVwkBAmJOAQUCaFQEAmhYAwkAAAIFAmhVAAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmNQAwUCaFYFAmhXBQJoVQQCZG8AAAQCaFkJAQFIAgkAkQMCBQJoWAABBQFiBAJoWgkBAUgCCQCRAwIFAmhYAAIFAWIEAmlhCQEFdmFsdWUBCQCaCAIFAmFWCQECYUYBCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJoVgkAzAgCCQCkAwEFAmhXCQDMCAIJAKQDAQUCaFUJAMwIAgkApAMBBQJkbwkAzAgCCQCkAwEFAmhZCQDMCAIJAKQDAQUCaFoJAMwIAgkApAMBBQJpYQUDbmlsBQFqAmVKASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECZHkEAmNSCQECYmUABAJkZQkA2QQBCQCRAwIFAmNSBQFxBAJkRQkAkQMCBQJjUgUBcgQCZGYJANkEAQUCZEUEAmRGCQCRAwIFAmNSBQFzBAJkZwkA2QQBBQJkRgQCY1MJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUgUBdAQCY1QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUgUBdQQCZGgJAJEDAgUCY1IFAXAEAmhVCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRlCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmRlAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFYJAQJiTgEFAmRFBAJoVwkBAmJOAQUCZEYEAmNOCQEBRAIFAmhWBQJjUwQCY08JAQFEAgUCaFcFAmNUBAJkbgMJAAACBQJoVQAABQFlCQECYk8CBQJjTwUCY04EAmRLCQEBRAIFAmR5BQJjUwQCZEwJALwCAwUCZEsFAmRuBQFkBAJkQQkBAUgCBQJkTAUCY1QEAmVQCQECZHcJAgAAoMIeBQJkeQUCZGYFAmRBBQJkZwIABgcEAmRWCAUCZVACXzEEAmliCAUCZVACXzMEAmRqCAUCZVACXzQEAmRsCAUCZVACXzUEAmRpCAUCZVACXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmRWCQDMCAIJAKQDAQkBAUgCBQJkbgUBYgkAzAgCCQCkAwEFAmRqCQDMCAIJAKQDAQUCZGwJAMwIAgkApAMBBQJkaQkAzAgCBQJkaAkAzAgCCQCkAwEFAmR5CQDMCAIJAKQDAQUCZEEFA25pbAUBagJlSgEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECZEEEAmNSCQECYmUABAJkZQkA2QQBCQCRAwIFAmNSBQFxBAJkRQkAkQMCBQJjUgUBcgQCZGYJANkEAQUCZEUEAmRGCQCRAwIFAmNSBQFzBAJkZwkA2QQBBQJkRgQCY1MJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUgUBdAQCY1QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUgUBdQQCZGgJAJEDAgUCY1IFAXAEAmhVCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRlCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmRlAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaWMJAQJiTgEFAmRFBAJpZAkBAmJOAQUCZEYEAmllCQEBRAIFAmljBQJjUwQCaWYJAQFEAgUCaWQFAmNUBAJkbgMJAAACBQJoVQAABQFlCQECYk8CBQJpZgUCaWUEAmRMCQEBRAIFAmRBBQJjVAQCZEsJALwCAwUCZEwFAWQFAmRuBAJkeQkBAUgCBQJkSwUCY1MEAmVQCQECZHcJAgAAoMIeBQJkeQUCZGYFAmRBBQJkZwIABgcEAmRWCAUCZVACXzEEAmliCAUCZVACXzMEAmRqCAUCZVACXzQEAmRsCAUCZVACXzUEAmRpCAUCZVACXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmRWCQDMCAIJAKQDAQkBAUgCBQJkbgUBYgkAzAgCCQCkAwEFAmRqCQDMCAIJAKQDAQUCZGwJAMwIAgkApAMBBQJkaQkAzAgCBQJkaAkAzAgCCQCkAwEFAmR5CQDMCAIJAKQDAQUCZEEFA25pbAUBagJlSgETZXZhbHVhdGVHZXRSRUFET05MWQICaWcCaWgEAmROCQECZGEEAgAFAmlnBQJpaAUEdGhpcwQCZHQIBQJkTgJfMQQCZHUIBQJkTgJfMgQCZGoIBQJkTgJfNQQCZGwIBQJkTgJfNgQCZGkIBQJkTgJfNwQCZG8IBQJkTgJfOAQCZGgJAQ1wYXJzZUludFZhbHVlAQgFAmROAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZHQJAMwIAgkApAMBBQJkdQkAzAgCCQCkAwEFAmRqCQDMCAIJAKQDAQUCZGwJAMwIAgkApAMBBQJkaQkAzAgCCQCmAwEFAmRvCQDMCAIJAKQDAQUCZGgFA25pbAUBagECaWkBAmlqAAQCaWsEAmJWCQECZlYAAwkAAQIFAmJWAgpCeXRlVmVjdG9yBAJmWgUCYlYFAmZaAwkAAQIFAmJWAgRVbml0CAUCaWkPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmJWBQJpaQMJAAECBQJiVgIFT3JkZXIEAmV5BQJiVgQCaWwJAQJiZAAEAmltCQECZXgBBQJleQQCYUsIBQJpbQJfMQQCYUwIBQJpbQJfMgQCYU0JAPQDAwgFAmV5CWJvZHlCeXRlcwkAkQMCCAUCZXkGcHJvb2ZzAAAIBQJleQ9zZW5kZXJQdWJsaWNLZXkEAmFOCQD0AwMIBQJleQlib2R5Qnl0ZXMJAJEDAggFAmV5BnByb29mcwABBQJpbAMDAwUCYUsFAmFNBwUCYU4HBgkBAmFKBAUCYUsFAmFMBQJhTQUCYU4DCQABAgUCYlYCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJmVwUCYlYDCQD0AwMIBQJpaQlib2R5Qnl0ZXMJAJEDAggFAmlpBnByb29mcwAABQJpawYEAmluCQD2AwEJAQV2YWx1ZQEIBQJmVwZzY3JpcHQEAmlvCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYVYJAQJhSAAEAmlwCQDxBwEFBHRoaXMDCQAAAgUCaW8FAmluCQECIT0CBQJpcAUCaW4HCQD0AwMIBQJpaQlib2R5Qnl0ZXMJAJEDAggFAmlpBnByb29mcwAABQJpa9O2yUQ=", "height": 2518443, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BeDExX55tTALCZrTMB7TkzfAK1jmxryruvVoYMPGhs7A Next: F4EPeFV2iqW37GMzcwFczJXrMFY9iEbS7Y9DMxi2dkVz Diff:
OldNewDifferences
903903
904904
905905 @Callable(eJ)
906-func rebalance () = (cA(ae()) ++ cA(af()))
906+func rebalance () = (cA(aO(this, ae())) ++ cA(aO(this, af())))
907907
908908
909909
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (E,F) = fraction(E, d, F)
6666
6767
6868 func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6969
7070
7171 func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
7272
7373
7474 func M (N,O,P) = fraction(N, O, P)
7575
7676
7777 func Q (I) = if ((0 > I))
7878 then -(I)
7979 else I
8080
8181
8282 func R (I) = if ((e > I))
8383 then -(I)
8484 else I
8585
8686
8787 func S () = "%s__swapContract"
8888
8989
9090 func T () = "%s__factoryContract"
9191
9292
9393 func U () = "%s__managerPublicKey"
9494
9595
9696 func V () = "%s__pendingManagerPublicKey"
9797
9898
9999 func W () = "%s%s__price__last"
100100
101101
102102 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103103
104104
105105 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106106
107107
108108 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109109
110110
111111 func ae () = "%s__amountAsset"
112112
113113
114114 func af () = "%s__priceAsset"
115115
116116
117117 let ag = "%s__fee"
118118
119119 let ah = fraction(10, b, 10000)
120120
121121 let ai = valueOrElse(getInteger(this, ag), ah)
122122
123123 let aj = makeString(["%s", "kLp"], j)
124124
125125 let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126126
127127 let al = makeString(["%s", "refreshKLpDelay"], j)
128128
129129 let am = 30
130130
131131 let an = valueOrElse(getInteger(this, al), am)
132132
133133 func ao () = "%s__sWavesAssetId"
134134
135135
136136 func ap () = "%s__sWavesProxyAddress"
137137
138138
139139 func aq (ar) = makeString(["%s%s", "additionalBalance", ar], j)
140140
141141
142142 func as (ar) = makeString(["%s%s", "stakingAssetBalance", ar], j)
143143
144144
145145 func at (ar) = valueOrElse(getInteger(this, aq(ar)), 0)
146146
147147
148148 func au (ar) = valueOrElse(getInteger(this, as(ar)), 0)
149149
150150
151151 func av () = "%s__factoryConfig"
152152
153153
154154 func aw () = "%s%s__matcher__publicKey"
155155
156156
157157 func ax (ay) = (("%s%s%s__" + ay) + "__mappings__poolContract2LpAsset")
158158
159159
160160 func az (aA,aB) = (((("%d%d%s__" + aA) + "__") + aB) + "__config")
161161
162162
163163 func aC (aD) = ("%s%s%s__mappings__baseAsset2internalId__" + aD)
164164
165165
166166 func aE () = "%s__shutdown"
167167
168168
169169 func aF (aG) = ("%s%s__poolWeight__" + aG)
170170
171171
172172 func aH () = "%s__allowedLpScriptHash"
173173
174174
175175 let aI = "%s__feeCollectorAddress"
176176
177177 func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
178178
179179
180180 func aO (aP,aQ) = valueOrErrorMessage(getString(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
181181
182182
183183 func aR (aP,aQ) = valueOrErrorMessage(getInteger(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
184184
185185
186186 func aS (aT) = throw(makeString(["lp.ride:", aT], " "))
187187
188188
189189 func aU (aT) = makeString(["lp.ride:", aT], " ")
190190
191191
192192 let aV = addressFromStringValue(aO(this, T()))
193193
194194 let aW = addressFromStringValue(aO(aV, aI))
195195
196196 let aX = {
197197 let aY = invoke(aV, "getInFeeREADONLY", [toString(this)], nil)
198198 if ($isInstanceOf(aY, "Int"))
199199 then aY
200200 else throw(($getType(aY) + " couldn't be cast to Int"))
201201 }
202202
203203 let aZ = {
204204 let aY = invoke(aV, "getOutFeeREADONLY", [toString(this)], nil)
205205 if ($isInstanceOf(aY, "Int"))
206206 then aY
207207 else throw(($getType(aY) + " couldn't be cast to Int"))
208208 }
209209
210210 func ba () = aO(aV, ao())
211211
212212
213213 func bb () = aO(aV, ap())
214214
215215
216216 func bc () = valueOrElse(getBoolean(aV, aE()), false)
217217
218218
219219 func bd () = fromBase58String(aO(aV, aw()))
220220
221221
222222 func be () = {
223223 let bf = aO(this, ae())
224224 let bg = aO(this, af())
225225 let aB = aR(aV, aC(bg))
226226 let aA = aR(aV, aC(bf))
227227 split(aO(aV, az(toString(aA), toString(aB))), j)
228228 }
229229
230230
231231 func bh (bi) = if ((bi == i))
232232 then unit
233233 else fromBase58String(bi)
234234
235235
236236 func bj (bi) = if ((bi == unit))
237237 then i
238238 else toBase58String(value(bi))
239239
240240
241241 func bk (bl) = $Tuple7(addressFromStringValue(bl[o]), parseIntValue(bl[p]), fromBase58String(bl[q]), bh(bl[r]), bh(bl[s]), parseIntValue(bl[t]), parseIntValue(bl[u]))
242242
243243
244244 let bm = bk(be())
245245
246246 let bn = bm
247247
248248 let bo = bn._1
249249
250250 let bp = bn._2
251251
252252 let bq = bn._3
253253
254254 let br = bn._4
255255
256256 let bs = bn._5
257257
258258 let bt = bn._6
259259
260260 let bu = bn._7
261261
262262 func bv () = split(aO(aV, av()), j)
263263
264264
265265 let bw = valueOrErrorMessage(addressFromString(bv()[B]), "incorrect staking address")
266266
267267 let bx = valueOrErrorMessage(addressFromString(bv()[C]), "incorrect staking address")
268268
269269 func by (bz,bA,bB,bC,bD,bE,bF,bG,bH,bI) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG), toString(bH), toString(bI)], j)
270270
271271
272272 func bJ (bK,bL,bM,bC,bF,bG) = makeString(["%d%d%d%d%d%d", toString(bK), toString(bL), toString(bM), toString(bC), toString(bF), toString(bG)], j)
273273
274274
275275 func bN (ar) = if ((ar == "WAVES"))
276276 then (wavesBalance(this).available + at(ar))
277277 else if ((ar == ba()))
278278 then {
279279 let bf = aO(this, ae())
280280 let bg = aO(this, af())
281281 if (if (if ((bf == "WAVES"))
282282 then (bg == ba())
283283 else false)
284284 then true
285285 else if ((bg == "WAVES"))
286286 then (bf == ba())
287287 else false)
288288 then assetBalance(this, fromBase58String(ar))
289289 else (assetBalance(this, fromBase58String(ar)) + au(ar))
290290 }
291291 else assetBalance(this, fromBase58String(ar))
292292
293293
294294 func bO (bP,bQ) = fraction(bP, d, bQ)
295295
296296
297297 func bR (bP,bQ,L) = fraction(bP, d, bQ, L)
298298
299299
300300 func bS (bT) = {
301301 let bU = invoke(bT, "getRate", nil, nil)
302302 if ((bU == bU))
303303 then {
304304 let bV = bU
305305 if ($isInstanceOf(bV, "Int"))
306306 then {
307307 let bW = bV
308308 bW
309309 }
310310 else aS("proxy.getRate() unexpected value")
311311 }
312312 else throw("Strict value is not equal to itself.")
313313 }
314314
315315
316316 func bX (ar,bY,bZ,bT) = {
317317 let ca = at(ar)
318318 if ((ca == ca))
319319 then {
320320 let cb = au(bZ)
321321 if ((cb == cb))
322322 then {
323323 let cc = bh(ar)
324324 if ((bY > 0))
325325 then {
326326 let cd = invoke(bT, "deposit", nil, [AttachedPayment(cc, bY)])
327327 if ((cd == cd))
328328 then {
329329 let bV = cd
330330 if ($isInstanceOf(bV, "Int"))
331331 then {
332332 let ce = bV
333333 let cf = (ca + bY)
334334 let cg = (cb + ce)
335335 [IntegerEntry(aq(ar), cf), IntegerEntry(as(bZ), cg)]
336336 }
337337 else nil
338338 }
339339 else throw("Strict value is not equal to itself.")
340340 }
341341 else nil
342342 }
343343 else throw("Strict value is not equal to itself.")
344344 }
345345 else throw("Strict value is not equal to itself.")
346346 }
347347
348348
349349 func ch (ar,bY,bZ,bT,ci) = {
350350 let ca = at(ar)
351351 if ((ca == ca))
352352 then {
353353 let cb = au(bZ)
354354 if ((cb == cb))
355355 then {
356356 let cj = bS(bT)
357357 if ((cj == cj))
358358 then {
359359 let ck = bh(bZ)
360360 let cl = fraction(ci, bY, cj)
361361 if ((cl > 0))
362362 then {
363363 let cm = invoke(bT, "withdraw", nil, [AttachedPayment(ck, cl)])
364364 if ((cm == cm))
365365 then {
366366 let bV = cm
367367 if ($isInstanceOf(bV, "Int"))
368368 then {
369369 let cn = bV
370370 let cf = (ca - cn)
371371 let cg = (cb - cl)
372372 [IntegerEntry(aq(ar), cf), IntegerEntry(as(bZ), cg)]
373373 }
374374 else nil
375375 }
376376 else throw("Strict value is not equal to itself.")
377377 }
378378 else nil
379379 }
380380 else throw("Strict value is not equal to itself.")
381381 }
382382 else throw("Strict value is not equal to itself.")
383383 }
384384 else throw("Strict value is not equal to itself.")
385385 }
386386
387387
388388 func co (ar) = invoke(aV, "getPoolLeaseConfigREADONLY", [toString(this), ar], nil)
389389
390390
391391 func cp (cq,ar,bZ,cr,bT,ci) = {
392392 let ca = at(ar)
393393 if ((ca == ca))
394394 then {
395395 let cb = au(bZ)
396396 if ((cb == cb))
397397 then {
398398 let cs = {
399399 let bV = bh(ar)
400400 if ($isInstanceOf(bV, "ByteVector"))
401401 then {
402402 let ct = bV
403403 assetBalance(this, ct)
404404 }
405405 else if ($isInstanceOf(bV, "Unit"))
406406 then {
407407 let cu = bV
408408 wavesBalance(this).available
409409 }
410410 else throw("Match error")
411411 }
412412 if ((cs == cs))
413413 then {
414414 let cv = max([0, ((cs + ca) - cr)])
415415 let cw = fraction(cq, cv, 100)
416416 let cx = (ca - cw)
417417 if ((cx == 0))
418418 then nil
419419 else if ((0 > cx))
420420 then {
421421 let cy = -(cx)
422422 bX(ar, cy, bZ, bT)
423423 }
424424 else {
425425 let cz = cx
426426 ch(ar, cz, bZ, bT, ci)
427427 }
428428 }
429429 else throw("Strict value is not equal to itself.")
430430 }
431431 else throw("Strict value is not equal to itself.")
432432 }
433433 else throw("Strict value is not equal to itself.")
434434 }
435435
436436
437437 func cA (ar) = {
438438 let bV = co(ar)
439439 if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
440440 then {
441441 let cB = bV
442442 let cC = cB
443443 let cD = cC._1
444444 let cE = cC._2
445445 let cr = cC._3
446446 let cF = cC._4
447447 let cG = cC._5
448448 let ci = cC._6
449449 let cH = cC._7
450450 if (cD)
451451 then cp(cE, ar, cG, cr, addressFromStringValue(cF), ci)
452452 else nil
453453 }
454454 else aS((("[" + ar) + "] Rebalance error"))
455455 }
456456
457457
458458 func cI (cJ,cK,cL,cM) = {
459459 let cN = D(cL, cJ)
460460 let cO = D(cM, cK)
461461 bO(cO, cN)
462462 }
463463
464464
465465 func cP (cL,cM,cQ) = {
466466 let cR = be()
467467 let cS = parseIntValue(cR[t])
468468 let cT = parseIntValue(cR[u])
469469 let cU = cI(cS, cT, cL, cM)
470470 let bQ = D(cL, cS)
471471 let bP = D(cM, cT)
472472 let cV = D(cQ, b)
473473 let cW = bO(bQ, cV)
474474 let cX = bO(bP, cV)
475475 [cU, cW, cX]
476476 }
477477
478478
479479 func cY (cL,cM,cQ) = {
480480 let cZ = cP(cL, cM, cQ)
481481 [H(cZ[0], b), H(cZ[1], b), H(cZ[2], b)]
482482 }
483483
484484
485485 func da (db,dc,dd,ab) = {
486486 let cR = be()
487487 let de = cR[q]
488488 let df = cR[r]
489489 let dg = cR[s]
490490 let cJ = parseIntValue(cR[t])
491491 let cK = parseIntValue(cR[u])
492492 let dh = cR[p]
493493 let di = valueOrErrorMessage(assetInfo(fromBase58String(de)), (("Asset " + de) + " doesn't exist")).quantity
494494 if ((de != dc))
495495 then throw("Invalid asset passed.")
496496 else {
497497 let dj = bN(df)
498498 let dk = D(dj, cJ)
499499 let dl = bN(dg)
500500 let dm = D(dl, cK)
501501 let dn = bO(dm, dk)
502502 let do = H(dn, b)
503503 let dp = D(dd, b)
504504 let dq = D(di, b)
505505 let dr = fraction(dk, dp, dq)
506506 let ds = fraction(dm, dp, dq)
507507 let dt = K(dr, cJ, FLOOR)
508508 let du = K(ds, cK, FLOOR)
509509 let dv = if ((db == ""))
510510 then nil
511511 else [ScriptTransfer(ab, dt, if ((df == "WAVES"))
512512 then unit
513513 else fromBase58String(df)), ScriptTransfer(ab, du, if ((dg == "WAVES"))
514514 then unit
515515 else fromBase58String(dg)), StringEntry(ad(toString(ab), db), bJ(dt, du, dd, do, height, lastBlock.timestamp)), IntegerEntry(W(), do), IntegerEntry(X(height, lastBlock.timestamp), do)]
516516 $Tuple10(dt, du, df, dg, dj, dl, di, dn, dh, dv)
517517 }
518518 }
519519
520520
521521 func dw (db,dx,dy,dz,dA,dB,ab,dC,dD) = {
522522 let cR = be()
523523 let de = fromBase58String(cR[q])
524524 let dE = cR[r]
525525 let dF = cR[s]
526526 let dG = cR[v]
527527 let dH = cR[w]
528528 let cS = parseIntValue(cR[t])
529529 let cT = parseIntValue(cR[u])
530530 let dh = cR[p]
531531 let di = valueOrErrorMessage(assetInfo(de), (("Asset " + toBase58String(de)) + " doesn't exist")).quantity
532532 let dI = toBase58String(valueOrElse(dz, fromBase58String("WAVES")))
533533 let dJ = toBase58String(valueOrElse(dB, fromBase58String("WAVES")))
534534 if (if ((dE != dI))
535535 then true
536536 else (dF != dJ))
537537 then throw("Invalid amt or price asset passed.")
538538 else {
539539 let dj = if (dC)
540540 then bN(dE)
541541 else (bN(dE) - dy)
542542 let dl = if (dC)
543543 then bN(dF)
544544 else (bN(dF) - dA)
545545 let dK = D(dy, cS)
546546 let dL = D(dA, cT)
547547 let dM = bO(dL, dK)
548548 let dk = D(dj, cS)
549549 let dm = D(dl, cT)
550550 let dN = if ((di == 0))
551551 then {
552552 let dn = e
553553 let dO = e
554554 let cV = pow((dK * dL), 0, toBigInt(5), 1, 0, DOWN)
555555 $Tuple5(H(cV, b), H(dK, cS), H(dL, cT), bO((dm + dL), (dk + dK)), dO)
556556 }
557557 else {
558558 let dn = bO(dm, dk)
559559 let dO = fraction(R((dn - dM)), d, dn)
560560 let dP = D(dx, b)
561561 if (if ((dn != e))
562562 then (dO > dP)
563563 else false)
564564 then throw(((("Price slippage " + toString(dO)) + " exceeded the passed limit of ") + toString(dP)))
565565 else {
566566 let dq = D(di, b)
567567 let dQ = fraction(dK, bR(dm, dk, CEILING), d, CEILING)
568568 let dR = fraction(dL, d, bR(dm, dk, FLOOR), CEILING)
569569 let dS = if ((dQ > dL))
570570 then $Tuple2(dR, dL)
571571 else $Tuple2(dK, dQ)
572572 let dT = dS._1
573573 let dU = dS._2
574574 let cV = fraction(dq, dU, dm, FLOOR)
575575 $Tuple5(K(cV, b, FLOOR), K(dT, cS, CEILING), K(dU, cT, CEILING), dn, dO)
576576 }
577577 }
578578 let dV = dN._1
579579 let dW = dN._2
580580 let dX = dN._3
581581 let do = H(dN._4, b)
582582 let dY = H(dN._5, b)
583583 if ((0 >= dV))
584584 then throw("Invalid calculations. LP calculated is less than zero.")
585585 else {
586586 let dZ = if (!(dD))
587587 then 0
588588 else dV
589589 let ea = (dy - dW)
590590 let eb = (dA - dX)
591591 let ec = [IntegerEntry(W(), do), IntegerEntry(X(height, lastBlock.timestamp), do), StringEntry(aa(ab, db), by(dW, dX, dZ, do, dx, dY, height, lastBlock.timestamp, ea, eb))]
592592 $Tuple13(dV, dZ, do, dj, dl, di, de, dh, ec, ea, eb, dz, dB)
593593 }
594594 }
595595 }
596596
597597
598598 func ed (ee,ef,di) = {
599599 let eg = G(ee, toBigInt(bt))
600600 let eh = G(ef, toBigInt(bu))
601601 let ei = fraction(pow((eg * eh), 0, toBigInt(5), 1, 18, DOWN), g, di)
602602 if ((di == f))
603603 then f
604604 else ei
605605 }
606606
607607
608608 func ej (ek,el,em) = {
609609 let en = (toBigInt(bN(bj(br))) - ek)
610610 let eo = (toBigInt(bN(bj(bs))) - el)
611611 let ep = (toBigInt(value(assetInfo(bq)).quantity) - em)
612612 let eq = ed(en, eo, ep)
613613 eq
614614 }
615615
616616
617617 func er (es,et,em) = {
618618 let en = (bN(bj(br)) + es)
619619 let eo = (bN(bj(bs)) + et)
620620 let ep = (value(assetInfo(bq)).quantity + em)
621621 let ei = ed(toBigInt(en), toBigInt(eo), toBigInt(ep))
622622 let eu = [IntegerEntry(ak, height), StringEntry(aj, toString(ei))]
623623 $Tuple2(eu, ei)
624624 }
625625
626626
627627 func ev (ew,ei) = if ((ei >= ew))
628628 then true
629629 else aS(makeString(["updated KLp lower than current KLp", toString(ew), toString(ei)], " "))
630630
631631
632632 func ex (ey) = {
633633 let en = bN(bj(br))
634634 let eo = bN(bj(bs))
635635 let ez = ey.amount
636636 let eA = fraction(ey.amount, ey.price, b, FLOOR)
637637 let eB = if ((ey.orderType == Buy))
638638 then $Tuple2(ez, -(eA))
639639 else $Tuple2(-(ez), eA)
640640 let es = eB._1
641641 let et = eB._2
642642 if (if (if (bc())
643643 then true
644644 else (bp == m))
645645 then true
646646 else (bp == n))
647647 then throw("Exchange operations disabled")
648648 else if (if ((ey.assetPair.amountAsset != br))
649649 then true
650650 else (ey.assetPair.priceAsset != bs))
651651 then throw("Wrong order assets.")
652652 else {
653653 let eC = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
654654 let eD = er(es, et, 0)
655655 let eE = eD._1
656656 let eF = eD._2
657657 let eG = (eF >= eC)
658658 let eH = makeString(["kLp=", toString(eC), " kLpNew=", toString(eF), " amountAssetBalance=", toString(en), " priceAssetBalance=", toString(eo), " amountAssetBalanceDelta=", toString(es), " priceAssetBalanceDelta=", toString(et), " height=", toString(height)], "")
659659 $Tuple2(eG, eH)
660660 }
661661 }
662662
663663
664664 func eI (eJ) = if ((size(eJ.payments) != 1))
665665 then throw("exactly 1 payment is expected")
666666 else {
667667 let eK = value(eJ.payments[0])
668668 let dc = value(eK.assetId)
669669 let eL = eK.amount
670670 let dN = da(toBase58String(eJ.transactionId), toBase58String(dc), eL, eJ.caller)
671671 let dt = dN._1
672672 let du = dN._2
673673 let dh = parseIntValue(dN._9)
674674 let dv = dN._10
675675 if (if (bc())
676676 then true
677677 else (dh == n))
678678 then throw(("Get operation is blocked by admin. Status = " + toString(dh)))
679679 else $Tuple5(dt, du, eL, dc, dv)
680680 }
681681
682682
683683 func eM (eJ,dx,dD) = if ((size(eJ.payments) != 2))
684684 then throw("exactly 2 payments are expected")
685685 else {
686686 let eN = value(eJ.payments[0])
687687 let eO = value(eJ.payments[1])
688688 let eP = dw(toBase58String(eJ.transactionId), dx, eN.amount, eN.assetId, eO.amount, eO.assetId, toString(eJ.caller), false, dD)
689689 let dh = parseIntValue(eP._8)
690690 if (if (if (bc())
691691 then true
692692 else (dh == l))
693693 then true
694694 else (dh == n))
695695 then throw(("Put operation is blocked by admin. Status = " + toString(dh)))
696696 else eP
697697 }
698698
699699
700700 func eQ (bY) = {
701701 let eR = invoke(aV, "emit", [bY], nil)
702702 if ((eR == eR))
703703 then {
704704 let eS = {
705705 let bV = eR
706706 if ($isInstanceOf(bV, "Address"))
707707 then {
708708 let eT = bV
709709 invoke(eT, "emit", [bY], nil)
710710 }
711711 else unit
712712 }
713713 if ((eS == eS))
714714 then bY
715715 else throw("Strict value is not equal to itself.")
716716 }
717717 else throw("Strict value is not equal to itself.")
718718 }
719719
720720
721721 func eU (bY,ai) = {
722722 let eV = if ((ai == 0))
723723 then 0
724724 else fraction(bY, ai, b)
725725 $Tuple2((bY - eV), eV)
726726 }
727727
728728
729729 func eW (eX,eY,ab,ac) = {
730730 let eZ = (ac == unit)
731731 let fa = bN(bj(br))
732732 let fb = bN(bj(bs))
733733 let fc = if ((eY == br))
734734 then true
735735 else if ((eY == bs))
736736 then false
737737 else aS("invalid asset")
738738 let fd = if (eZ)
739739 then $Tuple2(fa, fb)
740740 else if (fc)
741741 then $Tuple2((fa - eX), fb)
742742 else $Tuple2(fa, (fb - eX))
743743 let fe = fd._1
744744 let ff = fd._2
745745 let fg = if (fc)
746746 then $Tuple2(eX, 0)
747747 else $Tuple2(0, eX)
748748 let fh = fg._1
749749 let fi = fg._2
750750 let ez = eU(fh, aX)._1
751751 let eA = eU(fi, aX)._1
752752 let fj = eU(eX, aX)
753753 let fk = fj._1
754754 let eV = fj._2
755755 let fl = (fe + ez)
756756 let fm = (ff + eA)
757757 let fn = bO(D(fm, bu), D(fl, bt))
758758 let fo = H(fn, b)
759759 let fp = if (fc)
760760 then fe
761761 else ff
762762 let fq = toBigInt(fp)
763763 let fr = toBigInt(valueOrErrorMessage(assetInfo(bq), (("asset " + toBase58String(bq)) + " doesn't exist")).quantity)
764764 let fs = if ((fr > f))
765765 then true
766766 else aS("initial deposit requires all coins")
767767 if ((fs == fs))
768768 then {
769769 let ft = toBigInt(fk)
770770 let fu = max([0, toInt(((fr * (sqrtBigInt((d + ((ft * d) / fq)), 18, 18, DOWN) - d)) / d))])
771771 let ec = if (eZ)
772772 then nil
773773 else [IntegerEntry(W(), fo), IntegerEntry(X(height, lastBlock.timestamp), fo), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), by(fh, fi, fu, fo, 0, 0, height, lastBlock.timestamp, 0, 0))]
774774 let fv = bO(D(ff, bu), D(fe, bt))
775775 let fw = H(fv, b)
776776 let fx = {
777777 let fy = if (fc)
778778 then $Tuple2(fh, fe)
779779 else $Tuple2(fi, ff)
780780 let bY = fy._1
781781 let fz = fy._2
782782 let fA = toInt(fraction(fr, toBigInt((bY / 2)), toBigInt(fz)))
783783 fraction((fu - fA), b, fA)
784784 }
785785 $Tuple5(fu, ec, eV, fx, fc)
786786 }
787787 else throw("Strict value is not equal to itself.")
788788 }
789789
790790
791791 func fB (fC,fk,eY,ab,ac) = {
792792 let eZ = (ac == unit)
793793 let cR = be()
794794 let cS = parseIntValue(cR[t])
795795 let cT = parseIntValue(cR[u])
796796 let fD = [if ((eY == bq))
797797 then true
798798 else aS("invalid lp asset")]
799799 if ((fD == fD))
800800 then {
801801 let fE = if ((fC == br))
802802 then true
803803 else if ((fC == bs))
804804 then false
805805 else aS("invalid asset")
806806 let fF = if (fE)
807807 then toBigInt(bN(bj(br)))
808808 else toBigInt(bN(bj(bs)))
809809 let fG = if (fE)
810810 then cS
811811 else cT
812812 let fH = bN(bj(br))
813813 let fI = bN(bj(bs))
814814 let fJ = if (fE)
815815 then fH
816816 else fI
817817 let fK = toBigInt(fJ)
818818 let fr = toBigInt(valueOrErrorMessage(assetInfo(bq), (("asset " + toBase58String(bq)) + " doesn't exist")).quantity)
819819 let fL = toBigInt(fk)
820820 let fM = max([0, toInt(((fF * (d - pow((d - ((fL * d) / fr)), 18, h, 0, 18, DOWN))) / d))])
821821 let fN = eU(fM, aZ)
822822 let fO = fN._1
823823 let eV = fN._2
824824 let fP = if (fE)
825825 then $Tuple4(fO, 0, (fH - fM), fI)
826826 else $Tuple4(0, fO, fH, (fI - fM))
827827 let fQ = fP._1
828828 let fR = fP._2
829829 let fS = fP._3
830830 let fT = fP._4
831831 let fn = bO(D(fT, bu), D(fS, bt))
832832 let fo = H(fn, b)
833833 let ec = if (eZ)
834834 then nil
835835 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bJ(fQ, fR, fk, fo, height, lastBlock.timestamp)), IntegerEntry(W(), fo), IntegerEntry(X(height, lastBlock.timestamp), fo)]
836836 let fv = bO(D(fI, bu), D(fH, bt))
837837 let fw = H(fv, b)
838838 let fx = {
839839 let fU = (toInt(fraction(fF, fL, fr)) * 2)
840840 fraction((fO - fU), b, fU)
841841 }
842842 $Tuple5(fO, ec, eV, fx, fE)
843843 }
844844 else throw("Strict value is not equal to itself.")
845845 }
846846
847847
848848 func fV () = {
849849 let bV = getString(U())
850850 if ($isInstanceOf(bV, "String"))
851851 then {
852852 let fW = bV
853853 fromBase58String(fW)
854854 }
855855 else if ($isInstanceOf(bV, "Unit"))
856856 then unit
857857 else throw("Match error")
858858 }
859859
860860
861861 func fX () = {
862862 let bV = getString(V())
863863 if ($isInstanceOf(bV, "String"))
864864 then {
865865 let fW = bV
866866 fromBase58String(fW)
867867 }
868868 else if ($isInstanceOf(bV, "Unit"))
869869 then unit
870870 else throw("Match error")
871871 }
872872
873873
874874 func fY (eJ) = {
875875 let bV = fV()
876876 if ($isInstanceOf(bV, "ByteVector"))
877877 then {
878878 let fZ = bV
879879 (eJ.callerPublicKey == fZ)
880880 }
881881 else if ($isInstanceOf(bV, "Unit"))
882882 then (eJ.caller == this)
883883 else throw("Match error")
884884 }
885885
886886
887887 func ga (eJ) = {
888888 let gb = throw("Permission denied")
889889 let bV = fV()
890890 if ($isInstanceOf(bV, "ByteVector"))
891891 then {
892892 let fZ = bV
893893 if ((eJ.callerPublicKey == fZ))
894894 then true
895895 else gb
896896 }
897897 else if ($isInstanceOf(bV, "Unit"))
898898 then if ((eJ.caller == this))
899899 then true
900900 else gb
901901 else throw("Match error")
902902 }
903903
904904
905905 @Callable(eJ)
906-func rebalance () = (cA(ae()) ++ cA(af()))
906+func rebalance () = (cA(aO(this, ae())) ++ cA(aO(this, af())))
907907
908908
909909
910910 @Callable(eJ)
911911 func calculateAmountOutForSwapREADONLY (gc,gd,ge) = {
912912 let gf = if ((gd == false))
913913 then {
914914 let gg = aO(this, af())
915915 let gh = aO(this, ae())
916916 $Tuple2(gg, gh)
917917 }
918918 else {
919919 let gg = aO(this, ae())
920920 let gh = aO(this, af())
921921 $Tuple2(gg, gh)
922922 }
923923 let gg = gf._1
924924 let gh = gf._2
925925 let gi = bN(gh)
926926 let gj = bN(gg)
927927 let gk = fraction(gj, gc, (gi + gc))
928928 let gl = (toBigInt(gi) * toBigInt(gj))
929929 let gm = (((toBigInt(bN(gh)) + toBigInt(gc)) + toBigInt(ge)) * (toBigInt(bN(gg)) - toBigInt(gk)))
930930 let gn = if ((gm >= gl))
931931 then true
932932 else throw("new K is fewer error")
933933 if ((gn == gn))
934934 then $Tuple2(nil, gk)
935935 else throw("Strict value is not equal to itself.")
936936 }
937937
938938
939939
940940 @Callable(eJ)
941941 func calculateAmountOutForSwapAndSendTokens (gc,gd,go,gp,ge) = {
942942 let gq = {
943943 let aY = invoke(aV, "getSwapContractREADONLY", nil, nil)
944944 if ($isInstanceOf(aY, "String"))
945945 then aY
946946 else throw(($getType(aY) + " couldn't be cast to String"))
947947 }
948948 let fD = [if ((value(eJ.payments[0]).amount >= gc))
949949 then true
950950 else aS("Wrong amount"), if ((eJ.caller == addressFromStringValue(gq)))
951951 then true
952952 else aS("Permission denied")]
953953 if ((fD == fD))
954954 then {
955955 let eK = value(eJ.payments[0])
956956 let gh = bj(eK.assetId)
957957 let gg = if ((gd == false))
958958 then aO(this, af())
959959 else aO(this, ae())
960960 let gi = (bN(gh) - value(eJ.payments[0]).amount)
961961 let gj = bN(gg)
962962 let gk = fraction(gj, gc, (gi + gc))
963963 let gl = (toBigInt(gi) * toBigInt(gj))
964964 let gm = ((toBigInt(bN(gh)) + toBigInt(ge)) * (toBigInt(bN(gg)) - toBigInt(gk)))
965965 let gn = if ((gm >= gl))
966966 then true
967967 else throw("new K is fewer error")
968968 if ((gn == gn))
969969 then {
970970 let gr = if ((gk >= go))
971971 then true
972972 else throw("Exchange result is fewer coins than expected")
973973 if ((gr == gr))
974974 then {
975975 let gs = {
976976 let bV = co(gg)
977977 if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
978978 then {
979979 let cB = bV
980980 cB
981981 }
982982 else throw("error lease config")
983983 }
984984 let gt = gs
985985 let cD = gt._1
986986 let cE = gt._2
987987 let cr = gt._3
988988 let cF = gt._4
989989 let cG = gt._5
990990 let ci = gt._6
991991 let cH = gt._7
992992 let gu = assetBalance(this, fromBase58String(gg))
993993 let gv = if (if ((gg == "WAVES"))
994994 then (gk > gu)
995995 else false)
996996 then {
997997 let gw = (gk - gu)
998998 let gx = (at(gg) / au(ba()))
999999 let gy = wavesBalance(this).available
10001000 let gz = invoke(this, "withdraw", [gg, gw, ba(), bb(), ci], nil)
10011001 if ((gz == gz))
10021002 then {
10031003 let gA = wavesBalance(this).available
10041004 let gB = (gA - gy)
10051005 (gB - gw)
10061006 }
10071007 else throw("Strict value is not equal to itself.")
10081008 }
10091009 else 0
10101010 let gC = invoke(this, "rebalance", nil, nil)
10111011 if ((gC == gC))
10121012 then $Tuple2([ScriptTransfer(addressFromStringValue(cH), gv, unit), ScriptTransfer(addressFromStringValue(gp), gk, bh(gg))], gk)
10131013 else throw("Strict value is not equal to itself.")
10141014 }
10151015 else throw("Strict value is not equal to itself.")
10161016 }
10171017 else throw("Strict value is not equal to itself.")
10181018 }
10191019 else throw("Strict value is not equal to itself.")
10201020 }
10211021
10221022
10231023
10241024 @Callable(eJ)
10251025 func setManager (gD) = {
10261026 let gE = ga(eJ)
10271027 if ((gE == gE))
10281028 then {
10291029 let gF = fromBase58String(gD)
10301030 if ((gF == gF))
10311031 then [StringEntry(V(), gD)]
10321032 else throw("Strict value is not equal to itself.")
10331033 }
10341034 else throw("Strict value is not equal to itself.")
10351035 }
10361036
10371037
10381038
10391039 @Callable(eJ)
10401040 func confirmManager () = {
10411041 let gG = fX()
10421042 let gH = if (isDefined(gG))
10431043 then true
10441044 else throw("No pending manager")
10451045 if ((gH == gH))
10461046 then {
10471047 let gI = if ((eJ.callerPublicKey == value(gG)))
10481048 then true
10491049 else throw("You are not pending manager")
10501050 if ((gI == gI))
10511051 then [StringEntry(U(), toBase58String(value(gG))), DeleteEntry(V())]
10521052 else throw("Strict value is not equal to itself.")
10531053 }
10541054 else throw("Strict value is not equal to itself.")
10551055 }
10561056
10571057
10581058
10591059 @Callable(eJ)
10601060 func put (dx,gJ) = if ((0 > dx))
10611061 then throw("Invalid slippageTolerance passed")
10621062 else {
10631063 let eP = eM(eJ, dx, true)
10641064 let dZ = eP._2
10651065 let de = eP._7
10661066 let dv = eP._9
10671067 let ea = eP._10
10681068 let eb = eP._11
10691069 let gK = eP._12
10701070 let gL = eP._13
10711071 let eN = toBigInt(value(eJ.payments[0]).amount)
10721072 let eO = toBigInt(value(eJ.payments[1]).amount)
10731073 let eq = ej(eN, eO, toBigInt(0))
10741074 if ((eq == eq))
10751075 then {
10761076 let eR = invoke(aV, "emit", [dZ], nil)
10771077 if ((eR == eR))
10781078 then {
10791079 let eS = {
10801080 let bV = eR
10811081 if ($isInstanceOf(bV, "Address"))
10821082 then {
10831083 let eT = bV
10841084 invoke(eT, "emit", [dZ], nil)
10851085 }
10861086 else unit
10871087 }
10881088 if ((eS == eS))
10891089 then {
10901090 let gM = if ((ea > 0))
10911091 then invoke(bx, "put", nil, [AttachedPayment(gK, ea)])
10921092 else nil
10931093 if ((gM == gM))
10941094 then {
10951095 let gN = if ((eb > 0))
10961096 then invoke(bx, "put", nil, [AttachedPayment(gL, eb)])
10971097 else nil
10981098 if ((gN == gN))
10991099 then {
11001100 let gO = if (gJ)
11011101 then {
11021102 let gP = invoke(bw, "stake", nil, [AttachedPayment(de, dZ)])
11031103 if ((gP == gP))
11041104 then nil
11051105 else throw("Strict value is not equal to itself.")
11061106 }
11071107 else [ScriptTransfer(eJ.caller, dZ, de)]
11081108 let gQ = er(0, 0, 0)
11091109 if ((gQ == gQ))
11101110 then {
11111111 let ei = gQ._2
11121112 let gR = gQ._1
11131113 let gS = ev(eq, ei)
11141114 if ((gS == gS))
11151115 then ((dv ++ gO) ++ gR)
11161116 else throw("Strict value is not equal to itself.")
11171117 }
11181118 else throw("Strict value is not equal to itself.")
11191119 }
11201120 else throw("Strict value is not equal to itself.")
11211121 }
11221122 else throw("Strict value is not equal to itself.")
11231123 }
11241124 else throw("Strict value is not equal to itself.")
11251125 }
11261126 else throw("Strict value is not equal to itself.")
11271127 }
11281128 else throw("Strict value is not equal to itself.")
11291129 }
11301130
11311131
11321132
11331133 @Callable(eJ)
11341134 func putForFree (gT) = if ((0 > gT))
11351135 then throw("Invalid value passed")
11361136 else {
11371137 let eP = eM(eJ, gT, false)
11381138 let dv = eP._9
11391139 let eN = toBigInt(value(eJ.payments[0]).amount)
11401140 let eO = toBigInt(value(eJ.payments[1]).amount)
11411141 let eq = ej(eN, eO, toBigInt(0))
11421142 if ((eq == eq))
11431143 then {
11441144 let gU = er(0, 0, 0)
11451145 let gR = gU._1
11461146 let ei = gU._2
11471147 let gS = ev(eq, ei)
11481148 if ((gS == gS))
11491149 then (dv ++ gR)
11501150 else throw("Strict value is not equal to itself.")
11511151 }
11521152 else throw("Strict value is not equal to itself.")
11531153 }
11541154
11551155
11561156
11571157 @Callable(eJ)
11581158 func putOneTkn (gV,gW) = {
11591159 let gX = {
11601160 let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11611161 if ($isInstanceOf(aY, "Boolean"))
11621162 then aY
11631163 else throw(($getType(aY) + " couldn't be cast to Boolean"))
11641164 }
11651165 let gY = if (if (if (bc())
11661166 then true
11671167 else (bp == l))
11681168 then true
11691169 else (bp == n))
11701170 then true
11711171 else gX
11721172 let fD = [if (if (!(gY))
11731173 then true
11741174 else fY(eJ))
11751175 then true
11761176 else aS("put operation is blocked by admin"), if ((size(eJ.payments) == 1))
11771177 then true
11781178 else aS("exactly 1 payment are expected")]
11791179 if ((fD == fD))
11801180 then {
11811181 let gZ = eJ.payments[0]
11821182 let eY = gZ.assetId
11831183 let eX = gZ.amount
11841184 let eq = if ((eY == br))
11851185 then ej(toBigInt(eX), toBigInt(0), toBigInt(0))
11861186 else if ((eY == bs))
11871187 then ej(toBigInt(0), toBigInt(eX), toBigInt(0))
11881188 else aS("payment asset is not supported")
11891189 if ((eq == eq))
11901190 then {
11911191 let ab = eJ.caller
11921192 let ac = eJ.transactionId
11931193 let ha = eW(eX, eY, ab, ac)
11941194 if ((ha == ha))
11951195 then {
11961196 let fc = ha._5
11971197 let hb = ha._4
11981198 let eV = ha._3
11991199 let ec = ha._2
12001200 let hc = ha._1
12011201 let hd = if (if ((gV > 0))
12021202 then (gV > hc)
12031203 else false)
12041204 then aS(makeString(["amount to receive is less than ", toString(gV)], ""))
12051205 else hc
12061206 let eR = eQ(hd)
12071207 if ((eR == eR))
12081208 then {
12091209 let gO = if (gW)
12101210 then {
12111211 let he = invoke(bw, "stake", nil, [AttachedPayment(bq, hd)])
12121212 if ((he == he))
12131213 then nil
12141214 else throw("Strict value is not equal to itself.")
12151215 }
12161216 else [ScriptTransfer(eJ.caller, hd, bq)]
12171217 let hf = if ((eV > 0))
12181218 then [ScriptTransfer(aW, eV, eY)]
12191219 else nil
12201220 let hg = if ((this == aW))
12211221 then $Tuple2(0, 0)
12221222 else if (fc)
12231223 then $Tuple2(-(eV), 0)
12241224 else $Tuple2(0, -(eV))
12251225 let es = hg._1
12261226 let et = hg._2
12271227 let hh = er(es, et, 0)
12281228 let gR = hh._1
12291229 let ei = hh._2
12301230 let eC = value(getString(aj))
12311231 let gS = ev(eq, ei)
12321232 if ((gS == gS))
12331233 then {
12341234 let gC = invoke(this, "rebalance", nil, nil)
12351235 if ((gC == gC))
12361236 then $Tuple2((((ec ++ gO) ++ hf) ++ gR), hd)
12371237 else throw("Strict value is not equal to itself.")
12381238 }
12391239 else throw("Strict value is not equal to itself.")
12401240 }
12411241 else throw("Strict value is not equal to itself.")
12421242 }
12431243 else throw("Strict value is not equal to itself.")
12441244 }
12451245 else throw("Strict value is not equal to itself.")
12461246 }
12471247 else throw("Strict value is not equal to itself.")
12481248 }
12491249
12501250
12511251
12521252 @Callable(eJ)
12531253 func putOneTknREADONLY (eY,eX) = {
12541254 let hi = eW(eX, bh(eY), unit, unit)
12551255 let hc = hi._1
12561256 let ec = hi._2
12571257 let eV = hi._3
12581258 let hb = hi._4
12591259 let fc = hi._5
12601260 $Tuple2(nil, $Tuple3(hc, eV, hb))
12611261 }
12621262
12631263
12641264
12651265 @Callable(eJ)
12661266 func getOneTkn (hj,gV) = {
12671267 let gX = {
12681268 let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12691269 if ($isInstanceOf(aY, "Boolean"))
12701270 then aY
12711271 else throw(($getType(aY) + " couldn't be cast to Boolean"))
12721272 }
12731273 let hk = if (if (bc())
12741274 then true
12751275 else (bp == n))
12761276 then true
12771277 else gX
12781278 let fD = [if (if (!(hk))
12791279 then true
12801280 else fY(eJ))
12811281 then true
12821282 else aS("get operation is blocked by admin"), if ((size(eJ.payments) == 1))
12831283 then true
12841284 else aS("exactly 1 payment are expected")]
12851285 if ((fD == fD))
12861286 then {
12871287 let fC = bh(hj)
12881288 let gZ = eJ.payments[0]
12891289 let eY = gZ.assetId
12901290 let fk = gZ.amount
12911291 let eq = ej(toBigInt(0), toBigInt(0), toBigInt(0))
12921292 if ((eq == eq))
12931293 then {
12941294 let ab = eJ.caller
12951295 let ac = eJ.transactionId
12961296 let hl = fB(fC, fk, eY, ab, ac)
12971297 if ((hl == hl))
12981298 then {
12991299 let fE = hl._5
13001300 let hb = hl._4
13011301 let eV = hl._3
13021302 let ec = hl._2
13031303 let hm = hl._1
13041304 let bY = if (if ((gV > 0))
13051305 then (gV > hm)
13061306 else false)
13071307 then aS(makeString(["amount to receive is less than ", toString(gV)], ""))
13081308 else hm
13091309 let gs = {
13101310 let bV = co(hj)
13111311 if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
13121312 then {
13131313 let cB = bV
13141314 cB
13151315 }
13161316 else throw("error lease config")
13171317 }
13181318 let hn = gs
13191319 let cD = hn._1
13201320 let cE = hn._2
13211321 let cr = hn._3
13221322 let cF = hn._4
13231323 let cG = hn._5
13241324 let ci = hn._6
13251325 let cH = hn._7
13261326 let gu = assetBalance(this, fromBase58String(hj))
13271327 let gv = if (if ((hj == "WAVES"))
13281328 then (bY > gu)
13291329 else false)
13301330 then {
13311331 let gw = (bY - gu)
13321332 let gx = (at(hj) / au(ba()))
13331333 let gy = wavesBalance(this).available
13341334 let gz = invoke(this, "withdraw", [hj, gw, ba(), bb(), ci], nil)
13351335 if ((gz == gz))
13361336 then {
13371337 let gA = wavesBalance(this).available
13381338 let gB = (gA - gy)
13391339 (gB - gw)
13401340 }
13411341 else throw("Strict value is not equal to itself.")
13421342 }
13431343 else 0
13441344 let ho = [ScriptTransfer(addressFromStringValue(cH), gv, unit)]
13451345 let hp = invoke(aV, "burn", [fk], [AttachedPayment(eY, fk)])
13461346 if ((hp == hp))
13471347 then {
13481348 let hq = [ScriptTransfer(ab, bY, fC)]
13491349 let hf = if ((eV > 0))
13501350 then [ScriptTransfer(aW, eV, fC)]
13511351 else nil
13521352 let hr = {
13531353 let hs = if ((this == aW))
13541354 then 0
13551355 else eV
13561356 if (fE)
13571357 then $Tuple2(-((bY + hs)), 0)
13581358 else $Tuple2(0, -((bY + hs)))
13591359 }
13601360 let es = hr._1
13611361 let et = hr._2
13621362 let ht = er(es, et, 0)
13631363 let gR = ht._1
13641364 let ei = ht._2
13651365 let gS = ev(eq, ei)
13661366 if ((gS == gS))
13671367 then {
13681368 let gC = invoke(this, "rebalance", nil, nil)
13691369 if ((gC == gC))
13701370 then $Tuple2(((((ec ++ hq) ++ ho) ++ hf) ++ gR), bY)
13711371 else throw("Strict value is not equal to itself.")
13721372 }
13731373 else throw("Strict value is not equal to itself.")
13741374 }
13751375 else throw("Strict value is not equal to itself.")
13761376 }
13771377 else throw("Strict value is not equal to itself.")
13781378 }
13791379 else throw("Strict value is not equal to itself.")
13801380 }
13811381 else throw("Strict value is not equal to itself.")
13821382 }
13831383
13841384
13851385
13861386 @Callable(eJ)
13871387 func getOneTknREADONLY (fC,fk) = {
13881388 let hu = fB(bh(fC), fk, bq, unit, unit)
13891389 let hm = hu._1
13901390 let ec = hu._2
13911391 let eV = hu._3
13921392 let hb = hu._4
13931393 let fE = hu._5
13941394 $Tuple2(nil, $Tuple3(hm, eV, hb))
13951395 }
13961396
13971397
13981398
13991399 @Callable(eJ)
14001400 func unstakeAndGetOneTkn (hv,hj,gV) = {
14011401 let gX = {
14021402 let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
14031403 if ($isInstanceOf(aY, "Boolean"))
14041404 then aY
14051405 else throw(($getType(aY) + " couldn't be cast to Boolean"))
14061406 }
14071407 let hk = if (if (bc())
14081408 then true
14091409 else (bp == n))
14101410 then true
14111411 else gX
14121412 let fD = [if (if (!(hk))
14131413 then true
14141414 else fY(eJ))
14151415 then true
14161416 else aS("get operation is blocked by admin"), if ((size(eJ.payments) == 0))
14171417 then true
14181418 else aS("no payments are expected")]
14191419 if ((fD == fD))
14201420 then {
14211421 let fC = bh(hj)
14221422 let ab = eJ.caller
14231423 let ac = eJ.transactionId
14241424 let eq = ej(toBigInt(0), toBigInt(0), toBigInt(0))
14251425 if ((eq == eq))
14261426 then {
14271427 let hw = invoke(bw, "unstake", [toBase58String(bq), hv], nil)
14281428 if ((hw == hw))
14291429 then {
14301430 let hx = fB(fC, hv, bq, ab, ac)
14311431 if ((hx == hx))
14321432 then {
14331433 let fE = hx._5
14341434 let hb = hx._4
14351435 let eV = hx._3
14361436 let ec = hx._2
14371437 let hm = hx._1
14381438 let bY = if (if ((gV > 0))
14391439 then (gV > hm)
14401440 else false)
14411441 then aS(makeString(["amount to receive is less than ", toString(gV)], ""))
14421442 else hm
14431443 let hp = invoke(aV, "burn", [hv], [AttachedPayment(bq, hv)])
14441444 if ((hp == hp))
14451445 then {
14461446 let hq = [ScriptTransfer(eJ.caller, bY, fC)]
14471447 let hf = if ((eV > 0))
14481448 then [ScriptTransfer(aW, eV, fC)]
14491449 else nil
14501450 let hy = {
14511451 let hs = if ((this == aW))
14521452 then 0
14531453 else eV
14541454 if (fE)
14551455 then $Tuple2(-((bY + hs)), 0)
14561456 else $Tuple2(0, -((bY + hs)))
14571457 }
14581458 let es = hy._1
14591459 let et = hy._2
14601460 let hz = er(es, et, 0)
14611461 let gR = hz._1
14621462 let ei = hz._2
14631463 let gS = ev(eq, ei)
14641464 if ((gS == gS))
14651465 then $Tuple2((((ec ++ hq) ++ hf) ++ gR), bY)
14661466 else throw("Strict value is not equal to itself.")
14671467 }
14681468 else throw("Strict value is not equal to itself.")
14691469 }
14701470 else throw("Strict value is not equal to itself.")
14711471 }
14721472 else throw("Strict value is not equal to itself.")
14731473 }
14741474 else throw("Strict value is not equal to itself.")
14751475 }
14761476 else throw("Strict value is not equal to itself.")
14771477 }
14781478
14791479
14801480
14811481 @Callable(eJ)
14821482 func get () = {
14831483 let dN = eI(eJ)
14841484 let hA = dN._1
14851485 let du = dN._2
14861486 let eL = dN._3
14871487 let dc = dN._4
14881488 let dv = dN._5
14891489 let eq = ej(toBigInt(0), toBigInt(0), toBigInt(0))
14901490 if ((eq == eq))
14911491 then {
14921492 let hB = invoke(aV, "burn", [eL], [AttachedPayment(dc, eL)])
14931493 if ((hB == hB))
14941494 then {
14951495 let hC = er(-(hA), -(du), 0)
14961496 let gR = hC._1
14971497 let ei = hC._2
14981498 let gS = ev(eq, ei)
14991499 if ((gS == gS))
15001500 then (dv ++ gR)
15011501 else throw("Strict value is not equal to itself.")
15021502 }
15031503 else throw("Strict value is not equal to itself.")
15041504 }
15051505 else throw("Strict value is not equal to itself.")
15061506 }
15071507
15081508
15091509
15101510 @Callable(eJ)
15111511 func getNoLess (hD,hE) = {
15121512 let dN = eI(eJ)
15131513 let dt = dN._1
15141514 let du = dN._2
15151515 let eL = dN._3
15161516 let dc = dN._4
15171517 let dv = dN._5
15181518 if ((hD > dt))
15191519 then throw(((("noLessThenAmtAsset failed: " + toString(dt)) + " < ") + toString(hD)))
15201520 else if ((hE > du))
15211521 then throw(((("noLessThenPriceAsset failed: " + toString(du)) + " < ") + toString(hE)))
15221522 else {
15231523 let eq = ej(toBigInt(0), toBigInt(0), toBigInt(0))
15241524 if ((eq == eq))
15251525 then {
15261526 let hB = invoke(aV, "burn", [eL], [AttachedPayment(dc, eL)])
15271527 if ((hB == hB))
15281528 then {
15291529 let hF = er(-(dt), -(du), 0)
15301530 let gR = hF._1
15311531 let ei = hF._2
15321532 let gS = ev(eq, ei)
15331533 if ((gS == gS))
15341534 then (dv ++ gR)
15351535 else throw("Strict value is not equal to itself.")
15361536 }
15371537 else throw("Strict value is not equal to itself.")
15381538 }
15391539 else throw("Strict value is not equal to itself.")
15401540 }
15411541 }
15421542
15431543
15441544
15451545 @Callable(eJ)
15461546 func unstakeAndGet (bY) = {
15471547 let hG = if ((size(eJ.payments) != 0))
15481548 then throw("No payments are expected")
15491549 else true
15501550 if ((hG == hG))
15511551 then {
15521552 let cR = be()
15531553 let de = fromBase58String(cR[q])
15541554 let eq = ej(toBigInt(0), toBigInt(0), toBigInt(0))
15551555 if ((eq == eq))
15561556 then {
15571557 let hw = invoke(bw, "unstake", [toBase58String(de), bY], nil)
15581558 if ((hw == hw))
15591559 then {
15601560 let dN = da(toBase58String(eJ.transactionId), toBase58String(de), bY, eJ.caller)
15611561 let dt = dN._1
15621562 let du = dN._2
15631563 let dh = parseIntValue(dN._9)
15641564 let dv = dN._10
15651565 let hH = if (if (bc())
15661566 then true
15671567 else (dh == n))
15681568 then throw(("Get operation is blocked by admin. Status = " + toString(dh)))
15691569 else true
15701570 if ((hH == hH))
15711571 then {
15721572 let hB = invoke(aV, "burn", [bY], [AttachedPayment(de, bY)])
15731573 if ((hB == hB))
15741574 then {
15751575 let hI = er(-(dt), -(du), 0)
15761576 let gR = hI._1
15771577 let ei = hI._2
15781578 let gS = ev(eq, ei)
15791579 if ((gS == gS))
15801580 then (dv ++ gR)
15811581 else throw("Strict value is not equal to itself.")
15821582 }
15831583 else throw("Strict value is not equal to itself.")
15841584 }
15851585 else throw("Strict value is not equal to itself.")
15861586 }
15871587 else throw("Strict value is not equal to itself.")
15881588 }
15891589 else throw("Strict value is not equal to itself.")
15901590 }
15911591 else throw("Strict value is not equal to itself.")
15921592 }
15931593
15941594
15951595
15961596 @Callable(eJ)
15971597 func unstakeAndGetNoLess (hv,hJ,hE) = {
15981598 let hk = if (bc())
15991599 then true
16001600 else (bp == n)
16011601 let fD = [if (!(hk))
16021602 then true
16031603 else throw("get operation is blocked by admin"), if ((size(eJ.payments) == 0))
16041604 then true
16051605 else throw("no payments are expected")]
16061606 if ((fD == fD))
16071607 then {
16081608 let eq = ej(toBigInt(0), toBigInt(0), toBigInt(0))
16091609 if ((eq == eq))
16101610 then {
16111611 let hw = invoke(bw, "unstake", [toBase58String(bq), hv], nil)
16121612 if ((hw == hw))
16131613 then {
16141614 let dN = da(toBase58String(eJ.transactionId), toBase58String(bq), hv, eJ.caller)
16151615 let dt = dN._1
16161616 let du = dN._2
16171617 let dv = dN._10
16181618 let hK = [if ((dt >= hJ))
16191619 then true
16201620 else throw(makeString(["amount asset amount to receive is less than ", toString(hJ)], "")), if ((du >= hE))
16211621 then true
16221622 else throw(makeString(["price asset amount to receive is less than ", toString(hE)], ""))]
16231623 if ((hK == hK))
16241624 then {
16251625 let hB = invoke(aV, "burn", [hv], [AttachedPayment(bq, hv)])
16261626 if ((hB == hB))
16271627 then {
16281628 let hL = er(-(dt), -(du), 0)
16291629 let gR = hL._1
16301630 let ei = hL._2
16311631 let gS = ev(eq, ei)
16321632 if ((gS == gS))
16331633 then (dv ++ gR)
16341634 else throw("Strict value is not equal to itself.")
16351635 }
16361636 else throw("Strict value is not equal to itself.")
16371637 }
16381638 else throw("Strict value is not equal to itself.")
16391639 }
16401640 else throw("Strict value is not equal to itself.")
16411641 }
16421642 else throw("Strict value is not equal to itself.")
16431643 }
16441644 else throw("Strict value is not equal to itself.")
16451645 }
16461646
16471647
16481648
16491649 @Callable(eJ)
16501650 func activate (hM,hN) = if ((toString(eJ.caller) != toString(aV)))
16511651 then throw("permissions denied")
16521652 else $Tuple2([StringEntry(ae(), hM), StringEntry(af(), hN)], "success")
16531653
16541654
16551655
16561656 @Callable(eJ)
16571657 func refreshKLp () = {
16581658 let hO = valueOrElse(getInteger(ak), 0)
16591659 let hP = if (((height - hO) >= an))
16601660 then unit
16611661 else aS(makeString([toString(an), " blocks have not passed since the previous call"], ""))
16621662 if ((hP == hP))
16631663 then {
16641664 let eC = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
16651665 let hQ = er(0, 0, 0)
16661666 let hR = hQ._1
16671667 let ei = hQ._2
16681668 let eu = if ((eC != ei))
16691669 then hR
16701670 else aS("nothing to refresh")
16711671 $Tuple2(eu, toString(ei))
16721672 }
16731673 else throw("Strict value is not equal to itself.")
16741674 }
16751675
16761676
16771677
16781678 @Callable(eJ)
16791679 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, be())
16801680
16811681
16821682
16831683 @Callable(eJ)
16841684 func getAccBalanceWrapperREADONLY (ar) = $Tuple2(nil, bN(ar))
16851685
16861686
16871687
16881688 @Callable(eJ)
16891689 func calcPricesWrapperREADONLY (cL,cM,cQ) = {
16901690 let cZ = cP(cL, cM, cQ)
16911691 $Tuple2(nil, [toString(cZ[0]), toString(cZ[1]), toString(cZ[2])])
16921692 }
16931693
16941694
16951695
16961696 @Callable(eJ)
16971697 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16981698
16991699
17001700
17011701 @Callable(eJ)
17021702 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
17031703
17041704
17051705
17061706 @Callable(eJ)
17071707 func calcPriceBigIntWrapperREADONLY (bP,bQ) = $Tuple2(nil, toString(bO(parseBigIntValue(bP), parseBigIntValue(bQ))))
17081708
17091709
17101710
17111711 @Callable(eJ)
17121712 func estimatePutOperationWrapperREADONLY (db,dx,dy,dz,dA,dB,ab,dC,dD) = $Tuple2(nil, dw(db, dx, dy, dz, dA, dB, ab, dC, dD))
17131713
17141714
17151715
17161716 @Callable(eJ)
17171717 func estimateGetOperationWrapperREADONLY (db,dc,dd,ab) = {
17181718 let dN = da(db, dc, dd, addressFromStringValue(ab))
17191719 $Tuple2(nil, $Tuple10(dN._1, dN._2, dN._3, dN._4, dN._5, dN._6, dN._7, toString(dN._8), dN._9, dN._10))
17201720 }
17211721
17221722
17231723
17241724 @Callable(eJ)
17251725 func statsREADONLY () = {
17261726 let cR = be()
17271727 let de = fromBase58String(cR[q])
17281728 let hS = cR[r]
17291729 let hT = cR[s]
17301730 let dG = cR[v]
17311731 let dH = cR[w]
17321732 let cS = parseIntValue(cR[t])
17331733 let cT = parseIntValue(cR[u])
17341734 let hU = valueOrErrorMessage(assetInfo(de), (("Asset " + toBase58String(de)) + " doesn't exist")).quantity
17351735 let hV = bN(hS)
17361736 let hW = bN(hT)
17371737 let hX = if ((hU == 0))
17381738 then [e, e, e]
17391739 else cP(hV, hW, hU)
17401740 let do = 0
17411741 let hY = H(hX[1], b)
17421742 let hZ = H(hX[2], b)
17431743 let ia = value(getInteger(aV, aF(toString(this))))
17441744 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hV), toString(hW), toString(hU), toString(do), toString(hY), toString(hZ), toString(ia)], j))
17451745 }
17461746
17471747
17481748
17491749 @Callable(eJ)
17501750 func evaluatePutByAmountAssetREADONLY (dy) = {
17511751 let cR = be()
17521752 let de = fromBase58String(cR[q])
17531753 let dE = cR[r]
17541754 let df = fromBase58String(dE)
17551755 let dF = cR[s]
17561756 let dg = fromBase58String(dF)
17571757 let cS = parseIntValue(cR[t])
17581758 let cT = parseIntValue(cR[u])
17591759 let dh = cR[p]
17601760 let hU = valueOrErrorMessage(assetInfo(de), (("Asset " + toBase58String(de)) + " doesn't exist")).quantity
17611761 let hV = bN(dE)
17621762 let hW = bN(dF)
17631763 let cN = D(hV, cS)
17641764 let cO = D(hW, cT)
17651765 let dn = if ((hU == 0))
17661766 then e
17671767 else bO(cO, cN)
17681768 let dK = D(dy, cS)
17691769 let dL = fraction(dK, dn, d)
17701770 let dA = H(dL, cT)
17711771 let eP = dw("", 500000, dy, df, dA, dg, "", true, false)
17721772 let dV = eP._1
17731773 let ib = eP._3
17741774 let dj = eP._4
17751775 let dl = eP._5
17761776 let di = eP._6
17771777 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(dV), toString(H(dn, b)), toString(dj), toString(dl), toString(di), dh, toString(dy), toString(dA)], j))
17781778 }
17791779
17801780
17811781
17821782 @Callable(eJ)
17831783 func evaluatePutByPriceAssetREADONLY (dA) = {
17841784 let cR = be()
17851785 let de = fromBase58String(cR[q])
17861786 let dE = cR[r]
17871787 let df = fromBase58String(dE)
17881788 let dF = cR[s]
17891789 let dg = fromBase58String(dF)
17901790 let cS = parseIntValue(cR[t])
17911791 let cT = parseIntValue(cR[u])
17921792 let dh = cR[p]
17931793 let hU = valueOrErrorMessage(assetInfo(de), (("Asset " + toBase58String(de)) + " doesn't exist")).quantity
17941794 let ic = bN(dE)
17951795 let id = bN(dF)
17961796 let ie = D(ic, cS)
17971797 let if = D(id, cT)
17981798 let dn = if ((hU == 0))
17991799 then e
18001800 else bO(if, ie)
18011801 let dL = D(dA, cT)
18021802 let dK = fraction(dL, d, dn)
18031803 let dy = H(dK, cS)
18041804 let eP = dw("", 500000, dy, df, dA, dg, "", true, false)
18051805 let dV = eP._1
18061806 let ib = eP._3
18071807 let dj = eP._4
18081808 let dl = eP._5
18091809 let di = eP._6
18101810 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(dV), toString(H(dn, b)), toString(dj), toString(dl), toString(di), dh, toString(dy), toString(dA)], j))
18111811 }
18121812
18131813
18141814
18151815 @Callable(eJ)
18161816 func evaluateGetREADONLY (ig,ih) = {
18171817 let dN = da("", ig, ih, this)
18181818 let dt = dN._1
18191819 let du = dN._2
18201820 let dj = dN._5
18211821 let dl = dN._6
18221822 let di = dN._7
18231823 let do = dN._8
18241824 let dh = parseIntValue(dN._9)
18251825 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dt), toString(du), toString(dj), toString(dl), toString(di), toString(do), toString(dh)], j))
18261826 }
18271827
18281828
18291829 @Verifier(ii)
18301830 func ij () = {
18311831 let ik = {
18321832 let bV = fV()
18331833 if ($isInstanceOf(bV, "ByteVector"))
18341834 then {
18351835 let fZ = bV
18361836 fZ
18371837 }
18381838 else if ($isInstanceOf(bV, "Unit"))
18391839 then ii.senderPublicKey
18401840 else throw("Match error")
18411841 }
18421842 let bV = ii
18431843 if ($isInstanceOf(bV, "Order"))
18441844 then {
18451845 let ey = bV
18461846 let il = bd()
18471847 let im = ex(ey)
18481848 let aK = im._1
18491849 let aL = im._2
18501850 let aM = sigVerify(ey.bodyBytes, ey.proofs[0], ey.senderPublicKey)
18511851 let aN = sigVerify(ey.bodyBytes, ey.proofs[1], il)
18521852 if (if (if (aK)
18531853 then aM
18541854 else false)
18551855 then aN
18561856 else false)
18571857 then true
18581858 else aJ(aK, aL, aM, aN)
18591859 }
18601860 else if ($isInstanceOf(bV, "SetScriptTransaction"))
18611861 then {
18621862 let fW = bV
18631863 if (sigVerify(ii.bodyBytes, ii.proofs[0], ik))
18641864 then true
18651865 else {
18661866 let in = blake2b256(value(fW.script))
18671867 let io = fromBase64String(value(getString(aV, aH())))
18681868 let ip = scriptHash(this)
18691869 if ((io == in))
18701870 then (ip != in)
18711871 else false
18721872 }
18731873 }
18741874 else sigVerify(ii.bodyBytes, ii.proofs[0], ik)
18751875 }
18761876

github/deemru/w8io/873ac7e 
174.84 ms