tx · 29ftgnCs3LUbMs57o3VXqSnxtkVwFQWj3EapXmdPo2Pe

3MsXwm6KeMva32skLvFrFfYYmcxT2ZDc4fD:  -0.03300000 Waves

2022.11.28 16:02 [2336991] smart account 3MsXwm6KeMva32skLvFrFfYYmcxT2ZDc4fD > SELF 0.00000000 Waves

{ "type": 13, "id": "29ftgnCs3LUbMs57o3VXqSnxtkVwFQWj3EapXmdPo2Pe", "fee": 3300000, "feeAssetId": null, "timestamp": 1669640389012, "version": 1, "sender": "3MsXwm6KeMva32skLvFrFfYYmcxT2ZDc4fD", "senderPublicKey": "33aHdznSeq5cGxgbnLJ54tzNfiqS5SCQYHgFGMFsNQzs", "proofs": [ "2zVLRLf7Q3kQyXrzwL8Zu9tV3JfZjQw2bAVvzTaffCEr8mnqfqbeC3cmzJZ9u4WPCUX8ozzNmVv7XAfcGmj2qzWg" ], "script": "base64:BgL+KwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIQa2V5RmFjdG9yeUNvbmZpZyINa2V5TWF0Y2hlclB1YiIpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMiE3Bvb2xDb250cmFjdEFkZHJlc3MiDWtleVBvb2xDb25maWciCWlBbXRBc3NldCILaVByaWNlQXNzZXQiH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQiDGJhc2VBc3NldFN0ciITa2V5QWxsUG9vbHNTaHV0ZG93biINa2V5UG9vbFdlaWdodCIPY29udHJhY3RBZGRyZXNzIhZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciBmZtdEVyciIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc5MTU4MDgxIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiB2NhbGNLTHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIKdXBkYXRlZEtMcCIScmVmcmVzaEtMcEludGVybmFsIhdhbW91bnRBc3NldEJhbGFuY2VEZWx0YSIWcHJpY2VBc3NldEJhbGFuY2VEZWx0YSIUbHBBc3NldEVtaXNzaW9uRGVsdGEiEmFtb3VudEFzc2V0QmFsYW5jZSIRcHJpY2VBc3NldEJhbGFuY2UiD2xwQXNzZXRFbWlzc2lvbiIHYWN0aW9ucyIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIKYW10QXNzZXRJZCIMcHJpY2VBc3NldElkIhFhbW91bnRBc3NldEFtb3VudCIQcHJpY2VBc3NldEFtb3VudCINJHQwMTk4MzgyMDA1MCIQb3JkZXJBbXRBc3NldFN0ciISb3JkZXJQcmljZUFzc2V0U3RyIgNrTHAiDSR0MDIwNjQ1MjA3NDUiDXVudXNlZEFjdGlvbnMiBmtMcE5ldyIMaXNPcmRlclZhbGlkIgljb21tb25HZXQiAWkiA3BtdCIGcG10QW10Igljb21tb25QdXQiCmFtQXNzZXRQbXQiCnByQXNzZXRQbXQiBmVzdFB1dCIEZW1pdCIGYW1vdW50IgdlbWl0SW52Ig1lbWl0SW52TGVnYWN5IgckbWF0Y2gwIhVsZWdhY3lGYWN0b3J5Q29udHJhY3QiB3Rha2VGZWUiCWZlZUFtb3VudCIPY2FsY1B1dE9uZVRva2VuIhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCIGaXNFdmFsIhBhbW91bnRCYWxhbmNlUmF3Ig9wcmljZUJhbGFuY2VSYXciFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAyMzQyOTIzNzIyIhBhbW91bnRCYWxhbmNlT2xkIg9wcmljZUJhbGFuY2VPbGQiDSR0MDIzNzI2MjM4NzUiFGFtb3VudEFzc2V0QW1vdW50UmF3IhNwcmljZUFzc2V0QW1vdW50UmF3Ig0kdDAyMzk5NzI0MDU2Ig1wYXltZW50QW1vdW50IhBhbW91bnRCYWxhbmNlTmV3Ig9wcmljZUJhbGFuY2VOZXciC3ByaWNlTmV3WDE4IghwcmljZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCILcHJpY2VPbGRYMTgiCHByaWNlT2xkIgRsb3NzIg0kdDAyNTUzMzI1NzAwIgdiYWxhbmNlIg9pc3N1ZUFtb3VudEJvdGgiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMjczMDIyNzM1MiILdG90YWxBbW91bnQiDSR0MDI3MzU2Mjc1ODIiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciGGFtb3VudEJvdGhJblBheW1lbnRBc3NldCIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiCWlzTWFuYWdlciICcGsiC211c3RNYW5hZ2VyIgJwZCIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiDSR0MDMxNTMzMzE1OTgiEXJlZnJlc2hLTHBBY3Rpb25zIgttYXhTbGlwcGFnZSINJHQwMzE4ODQzMTk0OSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIgFAIg1pc1B1dERpc2FibGVkIgdwYXltZW50Ig0kdDAzMjcyNTMyODc0IhNlbWl0QW1vdW50RXN0aW1hdGVkIgVib251cyIKZW1pdEFtb3VudCIIc3Rha2VJbnYiB3NlbmRGZWUiDSR0MDMzNDYwMzM2NTciDSR0MDMzNjYwMzM3NjgiDSR0MDMzOTYxMzQxMTgiDW91dEFzc2V0SWRTdHIiDWlzR2V0RGlzYWJsZWQiDSR0MDM0OTIzMzUwNzMiD2Ftb3VudEVzdGltYXRlZCIHYnVybkludiINYXNzZXRUcmFuc2ZlciINJHQwMzU1NzMzNTgyMCIQZmVlQW1vdW50Rm9yQ2FsYyINJHQwMzU4MjMzNTkzMSINJHQwMzYxMTUzNjI3MSINdW5zdGFrZUFtb3VudCIKdW5zdGFrZUludiINJHQwMzcwOTYzNzI0NCINJHQwMzc3MzkzNzk4NiINJHQwMzc5ODkzODA5NyIJb3V0QW10QW10IhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwMzg4ODkzODk3MSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINJHQwMzk3NjczOTg0OCINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIg0kdDA0MDgyMTQwOTAyIhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyINJHQwNDIwNDI0MjEyMyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDQzMTExNDMxNjYiDXBvb2xMUEJhbGFuY2UiEmFjY0FtdEFzc2V0QmFsYW5jZSIUYWNjUHJpY2VBc3NldEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoawABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBSAFJCQCgAwEJALwCAwUBSAkAtgIBBQFJBQFkAQFKAwFLAUwBTQkAawMFAUsFAUwFAU0BAU4BAUgDCQBmAgAABQFICQEBLQEFAUgFAUgBAU8BAUgDCQC/AgIFAWUFAUgJAL4CAQUBSAUBSAEBUAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVEAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBUgACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBUwACESVzJXNfX3ByaWNlX19sYXN0AQFUAgFVAVYJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFVCQDMCAIJAKQDAQUBVgUDbmlsBQFqAQFXAgFYAVkJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQFYAgJfXwUBWQEBWgIBWAFZCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUBWAICX18FAVkBAmFhAAIPJXNfX2Ftb3VudEFzc2V0AQJhYgACDiVzX19wcmljZUFzc2V0AAJhYwIHJXNfX2ZlZQACYWQJAGsDAAoFAWIAkE4AAmFlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFjBQJhZAACYWYJALkJAgkAzAgCAgIlcwkAzAgCAgNrTHAFA25pbAUBagACYWcJALkJAgkAzAgCAgIlcwkAzAgCAhJrTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBagACYWgJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoS0xwRGVsYXkFA25pbAUBagACYWkAHgACYWoJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWgFAmFpAQJhawACESVzX19mYWN0b3J5Q29uZmlnAQJhbAACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYW0BAmFuCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFuAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYW8CAmFwAmFxCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhcAICX18FAmFxAghfX2NvbmZpZwECYXIBAmFzCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFzAQJhdAACDCVzX19zaHV0ZG93bgECYXUBAmF2CQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXYBAmF3AAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmF4Ahclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXkDAmF6AmFBAmFCCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhegINIHNlbmRlclZhbGlkPQkApQMBBQJhQQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYUIBAmFDAgJhRAJhRQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFEBQJhRQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhRAkAzAgCAgEuCQDMCAIFAmFFCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFGAgJhRAJhRQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFEBQJhRQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhRAkAzAgCAgEuCQDMCAIFAmFFCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFHAQJhSAkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhSAUDbmlsAgEgAQJhSQECYUgJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhSAUDbmlsAgEgAAJhSgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFDAgUEdGhpcwkBAVAAAAJhSwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFDAgUCYUoFAmF4AQJhTAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUoJAQJhdAAHAQJhTQAJANkEAQkBAmFDAgUCYUoJAQJhbAABAmFOAAQCYU8JAQJhQwIFBHRoaXMJAQJhYQAEAmFQCQECYUMCBQR0aGlzCQECYWIABAJhcQkBAmFGAgUCYUoJAQJhcgEFAmFQBAJhcAkBAmFGAgUCYUoJAQJhcgEFAmFPCQC1CQIJAQJhQwIFAmFKCQECYW8CCQCkAwEFAmFwCQCkAwEFAmFxBQFqAQJhUQECYVIDCQAAAgUCYVIFAWkFBHVuaXQJANkEAQUCYVIBAmFTAQJhUgMJAAACBQJhUgUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJhUgECYVQBAmFVCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYVUFAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhVQUBcAkA2QQBCQCRAwIFAmFVBQFxCQECYVEBCQCRAwIFAmFVBQFyCQECYVEBCQCRAwIFAmFVBQFzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVUFAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhVQUBdQACYVYJAQJhVAEJAQJhTgAAAmFXBQJhVgACYVgIBQJhVwJfMQACYVkIBQJhVwJfMgACYVoIBQJhVwJfMwACYmEIBQJhVwJfNAACYmIIBQJhVwJfNQACYmMIBQJhVwJfNgACYmQIBQJhVwJfNwECYmUACQC1CQIJAQJhQwIFAmFKCQECYWsABQFqAAJiZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJlAAUBQgIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwACYmcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJiZQAFAUMCGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MBAmJoCgJiaQJiagJiawJibAJibQJibgJibwJicAJicQJicgkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJicAkAzAgCCQCkAwEFAmJxCQDMCAIJAKQDAQUCYnIFA25pbAUBagECYnMGAmJ0AmJ1AmJ2AmJsAmJvAmJwCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYnQJAMwIAgkApAMBBQJidQkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYmwJAMwIAgkApAMBBQJibwkAzAgCCQCkAwEFAmJwBQNuaWwFAWoBAmJ3AQJieAMJAAACBQJieAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYngBAmJ5AgJiegJiQQkAvAIDBQJiegUBZAUCYkEBAmJCBAJiQwJiRAJiRQJiRgQCYkcJAQFEAgUCYkUFAmJDBAJiSAkBAUQCBQJiRgUCYkQJAQJieQIFAmJIBQJiRwECYkkDAmJFAmJGAmJKBAJiSwkBAmFOAAQCYkwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdAQCYk0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdQQCYk4JAQJiQgQFAmJMBQJiTQUCYkUFAmJGBAJiQQkBAUQCBQJiRQUCYkwEAmJ6CQEBRAIFAmJGBQJiTQQCYk8JAQFEAgUCYkoFAWIEAmJQCQECYnkCBQJiQQUCYk8EAmJRCQECYnkCBQJiegUCYk8JAMwIAgUCYk4JAMwIAgUCYlAJAMwIAgUCYlEFA25pbAECYlIDAmJFAmJGAmJKBAJiUwkBAmJJAwUCYkUFAmJGBQJiSgkAzAgCCQEBRwIJAJEDAgUCYlMAAAUBYgkAzAgCCQEBRwIJAJEDAgUCYlMAAQUBYgkAzAgCCQEBRwIJAJEDAgUCYlMAAgUBYgUDbmlsAQJiVAQCYlUCYlYCYlcBWAQCYksJAQJhTgAEAmJYCQCRAwIFAmJLBQFxBAJiWQkAkQMCBQJiSwUBcgQCYloJAJEDAgUCYksFAXMEAmJDCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXQEAmJECQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXUEAmNhCQCRAwIFAmJLBQFwBAJjYggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJYCQCsAgIJAKwCAgIGQXNzZXQgBQJiWAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiWAUCYlYJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmNjCQECYncBBQJiWQQCY2QJAQFEAgUCY2MFAmJDBAJjZQkBAmJ3AQUCYloEAmNmCQEBRAIFAmNlBQJiRAQCY2cJAQJieQIFAmNmBQJjZAQCY2gJAQFHAgUCY2cFAWIEAmNpCQEBRAIFAmJXBQFiBAJjagkBAUQCBQJjYgUBYgQCY2sJALwCAwUCY2QFAmNpBQJjagQCY2wJALwCAwUCY2YFAmNpBQJjagQCY20JAQFHAgUCY2sFAmJDBAJjbgkBAUcCBQJjbAUCYkQEAmNvAwkAAAIFAmJVAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFYBQJjbQMJAAACBQJiWQIFV0FWRVMFBHVuaXQJANkEAQUCYlkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCY24DCQAAAgUCYloCBVdBVkVTBQR1bml0CQDZBAEFAmJaCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgkApQgBBQFYBQJiVQkBAmJzBgUCY20FAmNuBQJiVwUCY2gFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCY2gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2gFA25pbAkAnAoKBQJjbQUCY24FAmJZBQJiWgUCY2MFAmNlBQJjYgUCY2cFAmNhBQJjbwECY3AJAmJVAmNxAmNyAmNzAmN0AmN1AVgCY3YCY3cEAmJLCQECYU4ABAJiWAkA2QQBCQCRAwIFAmJLBQFxBAJjeAkAkQMCBQJiSwUBcgQCY3kJAJEDAgUCYksFAXMEAmN6CQCRAwIFAmJLBQF2BAJjQQkAkQMCBQJiSwUBdwQCYkwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdAQCYk0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdQQCY2EJAJEDAgUCYksFAXAEAmNiCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJYCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJYAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY0IJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY3MJANkEAQIFV0FWRVMEAmNDCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmN1CQDZBAECBVdBVkVTAwMJAQIhPQIFAmN4BQJjQgYJAQIhPQIFAmN5BQJjQwkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAmNjAwUCY3YJAQJidwEFAmN4CQBlAgkBAmJ3AQUCY3gFAmNyBAJjZQMFAmN2CQECYncBBQJjeQkAZQIJAQJidwEFAmN5BQJjdAQCY0QJAQFEAgUCY3IFAmJMBAJjRQkBAUQCBQJjdAUCYk0EAmNGCQECYnkCBQJjRQUCY0QEAmNkCQEBRAIFAmNjBQJiTAQCY2YJAQFEAgUCY2UFAmJNBAJjRwMJAAACBQJjYgAABAJjZwUBZQQCY0gFAWUEAmJPCQB2BgkAuQICBQJjRAUCY0UAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFHAgUCYk8FAWIJAQFHAgUCY0QFAmJMCQEBRwIFAmNFBQJiTQkBAmJ5AgkAtwICBQJjZgUCY0UJALcCAgUCY2QFAmNEBQJjSAQCY2cJAQJieQIFAmNmBQJjZAQCY0gJALwCAwkBAU8BCQC4AgIFAmNnBQJjRgUBZAUCY2cEAmNJCQEBRAIFAmNxBQFiAwMJAQIhPQIFAmNnBQFlCQC/AgIFAmNIBQJjSQcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCY0gCHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBQJjSQQCY2oJAQFEAgUCY2IFAWIEAmNKCQC8AgMFAmNEBQJjZwUBZAQCY0sJALwCAwUCY0UFAWQFAmNnBAJjTAMJAL8CAgUCY0oFAmNFCQCUCgIFAmNLBQJjRQkAlAoCBQJjRAUCY0oEAmNNCAUCY0wCXzEEAmNOCAUCY0wCXzIEAmJPCQC8AgMFAmNqBQJjTgUCY2YJAJcKBQkBAUcCBQJiTwUBYgkBAUcCBQJjTQUCYkwJAQFHAgUCY04FAmJNBQJjZwUCY0gEAmNPCAUCY0cCXzEEAmNQCAUCY0cCXzIEAmNRCAUCY0cCXzMEAmNoCQEBRwIIBQJjRwJfNAUBYgQCY1IJAQFHAggFAmNHAl81BQFiAwkAZwIAAAUCY08JAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmNTAwkBASEBBQJjdwAABQJjTwQCY1QJAGUCBQJjcgUCY1AEAmNVCQBlAgUCY3QFAmNRBAJjVgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJjaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjaAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwIFAVgFAmJVCQECYmgKBQJjUAUCY1EFAmNTBQJjaAUCY3EFAmNSBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjVAUCY1UFA25pbAkAnwoNBQJjTwUCY1MFAmNoBQJjYwUCY2UFAmNiBQJiWAUCY2EFAmNWBQJjVAUCY1UFAmNzBQJjdQECY1cDAmNYAmNZAmNiBAJjWgkAvAIDCQB2BgkAuQICBQJjWAUCY1kAAAkAtgIBAAUAAQAABQRET1dOBQFkBQJjYgUCY1oBAmRhAwJkYgJkYwJkZAQCZGUJAGQCCQECYncBCQECYVMBBQJiYQUCZGIEAmRmCQBkAgkBAmJ3AQkBAmFTAQUCYmIFAmRjBAJkZwkAZAIICQEFdmFsdWUBCQDsBwEFAmFaCHF1YW50aXR5BQJkZAQCY1oJAQJjVwMJALYCAQUCZGUJALYCAQUCZGYJALYCAQUCZGcEAmRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhZwUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFmCQCmAwEFAmNaBQNuaWwJAJQKAgUCZGgFAmNaAQJkaQECZGoEAmJLCQECYU4ABAJkawkAkQMCBQJiSwUBcgQCZGwJAJEDAgUCYksFAXMEAmNhCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXAEAmJMCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXQEAmJNCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYksFAXUEAmRtCAUCZGoGYW1vdW50BAJkbgkAawMIBQJkagZhbW91bnQIBQJkagVwcmljZQUBYgQCZG8DCQAAAggFAmRqCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmRtCQEBLQEFAmRuCQCUCgIJAQEtAQUCZG0FAmRuBAJkYggFAmRvAl8xBAJkYwgFAmRvAl8yAwMDCQECYUwABgkAAAIFAmNhBQFtBgkAAAIFAmNhBQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAQCZHAJAQJhUwEJAQV2YWx1ZQEICAUCZGoJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BAJkcQkBAmFTAQkBBXZhbHVlAQgIBQJkaglhc3NldFBhaXIKcHJpY2VBc3NldAMDCQECIT0CBQJkcAUCZGsGCQECIT0CBQJkcQUCZGwJAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJkcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQJhZgkBAmFJAQIPa0xwIGlzIHJlcXVpcmVkCQECYUkBAgtpbnZhbGlkIGtMcAQCZHMJAQJkYQMFAmRiBQJkYwAABAJkdAgFAmRzAl8xBAJkdQgFAmRzAl8yBAJkdgkAvwICBQJkdQUCZHIFAmR2AQJkdwECZHgDCQECIT0CCQCQAwEIBQJkeAhwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmR5CQEFdmFsdWUBCQCRAwIIBQJkeAhwYXltZW50cwAABAJiVgkBBXZhbHVlAQgFAmR5B2Fzc2V0SWQEAmR6CAUCZHkGYW1vdW50BAJjRwkBAmJUBAkA2AQBCAUCZHgNdHJhbnNhY3Rpb25JZAkA2AQBBQJiVgUCZHoIBQJkeAZjYWxsZXIEAmNtCAUCY0cCXzEEAmNuCAUCY0cCXzIEAmNhCQENcGFyc2VJbnRWYWx1ZQEIBQJjRwJfOQQCY28IBQJjRwNfMTADAwkBAmFMAAYJAAACBQJjYQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2EJAJcKBQUCY20FAmNuBQJkegUCYlYFAmNvAQJkQQMCZHgCY3ECY3cDCQECIT0CCQCQAwEIBQJkeAhwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCZEIJAQV2YWx1ZQEJAJEDAggFAmR4CHBheW1lbnRzAAAEAmRDCQEFdmFsdWUBCQCRAwIIBQJkeAhwYXltZW50cwABBAJkRAkBAmNwCQkA2AQBCAUCZHgNdHJhbnNhY3Rpb25JZAUCY3EIBQJkQgZhbW91bnQIBQJkQgdhc3NldElkCAUCZEMGYW1vdW50CAUCZEMHYXNzZXRJZAkApQgBCAUCZHgGY2FsbGVyBwUCY3cEAmNhCQENcGFyc2VJbnRWYWx1ZQEIBQJkRAJfOAMDAwkBAmFMAAYJAAACBQJjYQUBbAYJAAACBQJjYQUBbgkAAgEJAKwCAgIsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2EFAmREAQJkRQECZEYEAmRHCQD8BwQFAmFKAgRlbWl0CQDMCAIFAmRGBQNuaWwFA25pbAMJAAACBQJkRwUCZEcEAmRIBAJkSQUCZEcDCQABAgUCZEkCB0FkZHJlc3MEAmRKBQJkSQkA/AcEBQJkSgIEZW1pdAkAzAgCBQJkRgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZEgFAmRIBQJkRgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZEsBAmRGBAJkTAkAawMFAmRGBQJhZQUBYgkAlAoCCQBlAgUCZEYFAmRMBQJkTAECZE0EAmROAmRPAVgBWQQCZFAJAAACBQFZBQR1bml0BAJkUQkBAmJ3AQkBAmFTAQUCYmEEAmRSCQECYncBCQECYVMBBQJiYgQCZFMDCQAAAgUCZE8FAmJhBgMJAAACBQJkTwUCYmIHCQECYUcBAg1pbnZhbGlkIGFzc2V0BAJkVAMFAmRQCQCUCgIFAmRRBQJkUgMFAmRTCQCUCgIJAGUCBQJkUQUCZE4FAmRSCQCUCgIFAmRRCQBlAgUCZFIFAmROBAJkVQgFAmRUAl8xBAJkVggFAmRUAl8yBAJkVwMFAmRTCQCUCgIFAmROAAAJAJQKAgAABQJkTgQCZFgIBQJkVwJfMQQCZFkIBQJkVwJfMgQCZG0ICQECZEsBBQJkWAJfMQQCZG4ICQECZEsBBQJkWQJfMQQCZFoJAQJkSwEFAmROBAJlYQgFAmRaAl8xBAJkTAgFAmRaAl8yBAJlYgkAZAIFAmRVBQJkbQQCZWMJAGQCBQJkVgUCZG4EAmVkCQECYnkCCQEBRAIFAmVjBQJiZAkBAUQCBQJlYgUCYmMEAmVlCQEBRwIFAmVkBQFiBAJlZgMFAmRTBQJkVQUCZFYEAmVnCQC2AgEFAmVmBAJlaAkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmFaCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmFaAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZWkDCQC/AgIFAmVoBQFmBgkBAmFHAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJlaQUCZWkEAmVqCQC2AgEFAmVhBAJlawkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJlaAkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmVqBQFkBQJlZwASABIFBERPV04FAWQFAWQFA25pbAQCY1YDBQJkUAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwAFAmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmVlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFXAgkApQgBCQEFdmFsdWUBBQFYCQDYBAEJAQV2YWx1ZQEFAVkJAQJiaAoFAmRYBQJkWQUCZWsFAmVlAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZWwJAQJieQIJAQFEAgUCZFYFAmJkCQEBRAIFAmRVBQJiYwQCZW0JAQFHAgUCZWwFAWIEAmVuBAJlbwMFAmRTCQCUCgIFAmRYBQJkVQkAlAoCBQJkWQUCZFYEAmRGCAUCZW8CXzEEAmVwCAUCZW8CXzIEAmVxCQCgAwEJALwCAwUCZWgJALYCAQkAaQIFAmRGAAIJALYCAQUCZXAJAGsDCQBlAgUCZWsFAmVxBQFiBQJlcQkAlwoFBQJlawUCY1YFAmRMBQJlbgUCZFMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmVyBQJlcwJlYQJkTwFYAVkEAmRQCQAAAgUBWQUEdW5pdAQCZXQJAMwIAgMJAAACBQJkTwUCYVoGCQECYUcBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUCZXQFAmV0BAJldQMJAAACBQJlcwUCYmEGAwkAAAIFAmVzBQJiYgcJAQJhRwECDWludmFsaWQgYXNzZXQEAmV2AwUCZXUJALYCAQkBAmJ3AQkBAmFTAQUCYmEJALYCAQkBAmJ3AQkBAmFTAQUCYmIEAmV3CQECYncBCQECYVMBBQJiYQQCZXgJAQJidwEJAQJhUwEFAmJiBAJleQMFAmV1BQJldwUCZXgEAmV6CQC2AgEFAmV5BAJlaAkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmFaCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmFaAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZUEJALYCAQUCZWEEAmVCCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmV2CQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJlQQUBZAUCZWgAEgUBaAAAABIFBERPV04FAWQFA25pbAQCZUMJAQJkSwEFAmVCBAJlRAgFAmVDAl8xBAJkTAgFAmVDAl8yBAJlRQMFAmV1CQCWCgQFAmVEAAAJAGUCBQJldwUCZUIFAmV4CQCWCgQAAAUCZUQFAmV3CQBlAgUCZXgFAmVCBAJlRggFAmVFAl8xBAJlRwgFAmVFAl8yBAJlSAgFAmVFAl8zBAJlSQgFAmVFAl80BAJlZAkBAmJ5AgkBAUQCBQJlSQUCYmQJAQFEAgUCZUgFAmJjBAJlZQkBAUcCBQJlZAUBYgQCY1YDBQJkUAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgkApQgBCQEFdmFsdWUBBQFYCQDYBAEJAQV2YWx1ZQEFAVkJAQJicwYFAmVGBQJlRwUCZWEFAmVlBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwAFAmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmVlBQNuaWwEAmVsCQECYnkCCQEBRAIFAmV4BQJiZAkBAUQCBQJldwUCYmMEAmVtCQEBRwIFAmVsBQFiBAJlbgQCZUoJAGgCCQCgAwEJALwCAwUCZXYFAmVBBQJlaAACCQBrAwkAZQIFAmVEBQJlSgUBYgUCZUoJAJcKBQUCZUQFAmNWBQJkTAUCZW4FAmV1CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlSwAEAmRJCQCiCAEJAQFRAAMJAAECBQJkSQIGU3RyaW5nBAJlTAUCZEkJANkEAQUCZUwDCQABAgUCZEkCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZU0ABAJkSQkAoggBCQEBUgADCQABAgUCZEkCBlN0cmluZwQCZUwFAmRJCQDZBAEFAmVMAwkAAQIFAmRJAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmVOAQJkeAQCZEkJAQJlSwADCQABAgUCZEkCCkJ5dGVWZWN0b3IEAmVPBQJkSQkAAAIIBQJkeA9jYWxsZXJQdWJsaWNLZXkFAmVPAwkAAQIFAmRJAgRVbml0CQAAAggFAmR4BmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJlUAECZHgEAmVRCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEAmRJCQECZUsAAwkAAQIFAmRJAgpCeXRlVmVjdG9yBAJlTwUCZEkDCQAAAggFAmR4D2NhbGxlclB1YmxpY0tleQUCZU8GBQJlUQMJAAECBQJkSQIEVW5pdAMJAAACCAUCZHgGY2FsbGVyBQR0aGlzBgUCZVEJAAIBAgtNYXRjaCBlcnJvchsCZHgBCnNldE1hbmFnZXIBAmVSBAJlUwkBAmVQAQUCZHgDCQAAAgUCZVMFAmVTBAJlVAkA2QQBBQJlUgMJAAACBQJlVAUCZVQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVIABQJlUgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmR4AQ5jb25maXJtTWFuYWdlcgAEAmVVCQECZU0ABAJlVgMJAQlpc0RlZmluZWQBBQJlVQYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZVYFAmVWBAJlVwMJAAACCAUCZHgPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJlVQYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZVcFAmVXCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAAkA2AQBCQEFdmFsdWUBBQJlVQkAzAgCCQELRGVsZXRlRW50cnkBCQEBUgAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkeAEDcHV0AgJjcQJlWAMJAGYCAAAFAmNxCQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEAmRECQECZEEDBQJkeAUCY3EGBAJjUwgFAmREAl8yBAJiWAgFAmREAl83BAJjbwgFAmREAl85BAJjVAgFAmREA18xMAQCY1UIBQJkRANfMTEEAmVZCAUCZEQDXzEyBAJlWggFAmREA18xMwQCZEcJAPwHBAUCYUoCBGVtaXQJAMwIAgUCY1MFA25pbAUDbmlsAwkAAAIFAmRHBQJkRwQCZEgEAmRJBQJkRwMJAAECBQJkSQIHQWRkcmVzcwQCZEoFAmRJCQD8BwQFAmRKAgRlbWl0CQDMCAIFAmNTBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkSAUCZEgEAmZhAwkAZgIFAmNUAAAJAPwHBAUCYmcCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJlWQUCY1QFA25pbAUDbmlsAwkAAAIFAmZhBQJmYQQCZmIDCQBmAgUCY1UAAAkA/AcEBQJiZwIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmVaBQJjVQUDbmlsBQNuaWwDCQAAAgUCZmIFAmZiBAJmYwMFAmVYBAJmZAkA/AcEBQJiZgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlgFAmNTBQNuaWwDCQAAAgUCZmQFAmZkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmR4BmNhbGxlcgUCY1MFAmJYBQNuaWwEAmZlCQECZGEDAAAAAAAABAJmZggFAmZlAl8xBAJjWggFAmZlAl8yCQDOCAIJAM4IAgUCY28FAmZjBQJmZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkeAEKcHV0Rm9yRnJlZQECZmcDCQBmAgAABQJmZwkAAgECFEludmFsaWQgdmFsdWUgcGFzc2VkBAJkRAkBAmRBAwUCZHgFAmZnBwQCY28IBQJkRAJfOQQCZmgJAQJkYQMAAAAAAAAEAmZmCAUCZmgCXzEEAmNaCAUCZmgCXzIJAM4IAgUCY28FAmZmAmR4AQlwdXRPbmVUa24CAmZpAmZqBAJmawoAAmZsCQD8BwQFAmFKAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZmwCB0Jvb2xlYW4FAmZsCQACAQkArAICCQADAQUCZmwCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmZtAwMDCQECYUwABgkAAAIFAmFZBQFsBgkAAAIFAmFZBQFuBgUCZmsEAmV0CQDMCAIDAwkBASEBBQJmbQYJAQJlTgEFAmR4BgkBAmFHAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZHgIcGF5bWVudHMAAQYJAQJhRwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmV0BQJldAQCZm4JAJEDAggFAmR4CHBheW1lbnRzAAAEAmRPCAUCZm4HYXNzZXRJZAQCZE4IBQJmbgZhbW91bnQEAVgIBQJkeAZjYWxsZXIEAVkIBQJkeA10cmFuc2FjdGlvbklkBAJmbwkBAmRNBAUCZE4FAmRPBQFYBQFZBAJmcAgFAmZvAl8xBAJjVggFAmZvAl8yBAJkTAgFAmZvAl8zBAJmcQgFAmZvAl80BAJkUwgFAmZvAl81BAJmcgMDCQBmAgUCZmkAAAkAZgIFAmZpBQJmcAcJAQJhRwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmkFA25pbAIABQJmcAQCZEcJAQJkRQEFAmZyAwkAAAIFAmRHBQJkRwQCZmMDBQJmagQCZnMJAPwHBAUCYmYCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFaBQJmcgUDbmlsAwkAAAIFAmZzBQJmcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkeAZjYWxsZXIFAmZyBQJhWgUDbmlsBAJmdAMJAGYCBQJkTAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFLBQJkTAUCZE8FA25pbAUDbmlsBAJmdQMJAAACBQR0aGlzBQJhSwkAlAoCAAAAAAMFAmRTCQCUCgIJAQEtAQUCZEwAAAkAlAoCAAAJAQEtAQUCZEwEAmRiCAUCZnUCXzEEAmRjCAUCZnUCXzIEAmZ2CQECZGEDBQJkYgUCZGMAAAQCZmYIBQJmdgJfMQQCY1oIBQJmdgJfMgkAlAoCCQDOCAIJAM4IAgkAzggCBQJjVgUCZmMFAmZ0BQJmZgUCZnIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZHgBEXB1dE9uZVRrblJFQURPTkxZAgJkTwJkTgQCZncJAQJkTQQFAmROCQECYVEBBQJkTwUEdW5pdAUEdW5pdAQCZnAIBQJmdwJfMQQCY1YIBQJmdwJfMgQCZEwIBQJmdwJfMwQCZnEIBQJmdwJfNAQCZFMIBQJmdwJfNQkAlAoCBQNuaWwJAJUKAwUCZnAFAmRMBQJmcQJkeAEJZ2V0T25lVGtuAgJmeAJmaQQCZmsKAAJmbAkA/AcEBQJhSgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmZsAgdCb29sZWFuBQJmbAkAAgEJAKwCAgkAAwEFAmZsAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmeQMDCQECYUwABgkAAAIFAmFZBQFuBgUCZmsEAmV0CQDMCAIDAwkBASEBBQJmeQYJAQJlTgEFAmR4BgkBAmFHAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZHgIcGF5bWVudHMAAQYJAQJhRwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmV0BQJldAQCZXMJAQJhUQEFAmZ4BAJmbgkAkQMCCAUCZHgIcGF5bWVudHMAAAQCZE8IBQJmbgdhc3NldElkBAJlYQgFAmZuBmFtb3VudAQBWAgFAmR4BmNhbGxlcgQBWQgFAmR4DXRyYW5zYWN0aW9uSWQEAmZ6CQECZXIFBQJlcwUCZWEFAmRPBQFYBQFZBAJmQQgFAmZ6Al8xBAJjVggFAmZ6Al8yBAJkTAgFAmZ6Al8zBAJmcQgFAmZ6Al80BAJldQgFAmZ6Al81BAJkRgMDCQBmAgUCZmkAAAkAZgIFAmZpBQJmQQcJAQJhRwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmkFA25pbAIABQJmQQQCZkIJAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZWEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZE8FAmVhBQNuaWwDCQAAAgUCZkIFAmZCBAJmQwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFYBQJkRgUCZXMFA25pbAQCZnQDCQBmAgUCZEwAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhSwUCZEwFAmVzBQNuaWwFA25pbAQCZkQEAmZFAwkAAAIFBHRoaXMFAmFLAAAFAmRMAwUCZXUJAJQKAgkBAS0BCQBkAgUCZEYFAmZFAAAJAJQKAgAACQEBLQEJAGQCBQJkRgUCZkUEAmRiCAUCZkQCXzEEAmRjCAUCZkQCXzIEAmZGCQECZGEDBQJkYgUCZGMAAAQCZmYIBQJmRgJfMQQCY1oIBQJmRgJfMgkAlAoCCQDOCAIJAM4IAgkAzggCBQJjVgUCZkMFAmZ0BQJmZgUCZEYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZHgBEWdldE9uZVRrblJFQURPTkxZAgJlcwJlYQQCZkcJAQJlcgUJAQJhUQEFAmVzBQJlYQUCYVoFBHVuaXQFBHVuaXQEAmZBCAUCZkcCXzEEAmNWCAUCZkcCXzIEAmRMCAUCZkcCXzMEAmZxCAUCZkcCXzQEAmV1CAUCZkcCXzUJAJQKAgUDbmlsCQCVCgMFAmZBBQJkTAUCZnECZHgBE3Vuc3Rha2VBbmRHZXRPbmVUa24DAmZIAmZ4AmZpBAJmawoAAmZsCQD8BwQFAmFKAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZmwCB0Jvb2xlYW4FAmZsCQACAQkArAICCQADAQUCZmwCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmZ5AwMJAQJhTAAGCQAAAgUCYVkFAW4GBQJmawQCZXQJAMwIAgMDCQEBIQEFAmZ5BgkBAmVOAQUCZHgGCQECYUcBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkeAhwYXltZW50cwAABgkBAmFHAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZXQFAmV0BAJlcwkBAmFRAQUCZngEAVgIBQJkeAZjYWxsZXIEAVkIBQJkeA10cmFuc2FjdGlvbklkBAJmSQkA/AcEBQJiZgIHdW5zdGFrZQkAzAgCCQDYBAEFAmFaCQDMCAIFAmZIBQNuaWwFA25pbAMJAAACBQJmSQUCZkkEAmZKCQECZXIFBQJlcwUCZkgFAmFaBQFYBQFZBAJmQQgFAmZKAl8xBAJjVggFAmZKAl8yBAJkTAgFAmZKAl8zBAJmcQgFAmZKAl80BAJldQgFAmZKAl81BAJkRgMDCQBmAgUCZmkAAAkAZgIFAmZpBQJmQQcJAQJhRwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmkFA25pbAIABQJmQQQCZkIJAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZkgFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVoFAmZIBQNuaWwDCQAAAgUCZkIFAmZCBAJmQwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZHgGY2FsbGVyBQJkRgUCZXMFA25pbAQCZnQDCQBmAgUCZEwAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhSwUCZEwFAmVzBQNuaWwFA25pbAQCZksEAmZFAwkAAAIFBHRoaXMFAmFLAAAFAmRMAwUCZXUJAJQKAgkBAS0BCQBkAgUCZEYFAmZFAAAJAJQKAgAACQEBLQEJAGQCBQJkRgUCZkUEAmRiCAUCZksCXzEEAmRjCAUCZksCXzIEAmZMCQECZGEDBQJkYgUCZGMAAAQCZmYIBQJmTAJfMQQCY1oIBQJmTAJfMgkAlAoCCQDOCAIJAM4IAgkAzggCBQJjVgUCZkMFAmZ0BQJmZgUCZEYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZHgBA2dldAAEAmNHCQECZHcBBQJkeAQCZk0IBQJjRwJfMQQCY24IBQJjRwJfMgQCZHoIBQJjRwJfMwQCYlYIBQJjRwJfNAQCY28IBQJjRwJfNQQCZk4JAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZHoFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlYFAmR6BQNuaWwDCQAAAgUCZk4FAmZOBAJmTwkBAmRhAwkBAS0BBQJmTQkBAS0BBQJjbgAABAJmZggFAmZPAl8xBAJjWggFAmZPAl8yCQDOCAIFAmNvBQJmZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkeAEJZ2V0Tm9MZXNzAgJmUAJmUQQCY0cJAQJkdwEFAmR4BAJjbQgFAmNHAl8xBAJjbggFAmNHAl8yBAJkeggFAmNHAl8zBAJiVggFAmNHAl80BAJjbwgFAmNHAl81AwkAZgIFAmZQBQJjbQkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUCY20CAyA8IAkApAMBBQJmUAMJAGYCBQJmUQUCY24JAAIBCQCsAgIJAKwCAgkArAICAh1ub0xlc3NUaGVuUHJpY2VBc3NldCBmYWlsZWQ6IAkApAMBBQJjbgIDIDwgCQCkAwEFAmZRBAJmTgkA/AcEBQJhSgIEYnVybgkAzAgCBQJkegUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiVgUCZHoFA25pbAMJAAACBQJmTgUCZk4EAmZSCQECZGEDCQEBLQEFAmNtCQEBLQEFAmNuAAAEAmZmCAUCZlICXzEEAmNaCAUCZlICXzIJAM4IAgUCY28FAmZmCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmR4AQ11bnN0YWtlQW5kR2V0AQJkRgQCZlMDCQECIT0CCQCQAwEIBQJkeAhwYXltZW50cwAACQACAQIYTm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBgMJAAACBQJmUwUCZlMEAmJLCQECYU4ABAJiWAkA2QQBCQCRAwIFAmJLBQFxBAJmSQkA/AcEBQJiZgIHdW5zdGFrZQkAzAgCCQDYBAEFAmJYCQDMCAIFAmRGBQNuaWwFA25pbAMJAAACBQJmSQUCZkkEAmNHCQECYlQECQDYBAEIBQJkeA10cmFuc2FjdGlvbklkCQDYBAEFAmJYBQJkRggFAmR4BmNhbGxlcgQCY20IBQJjRwJfMQQCY24IBQJjRwJfMgQCY2EJAQ1wYXJzZUludFZhbHVlAQgFAmNHAl85BAJjbwgFAmNHA18xMAQCZlQDAwkBAmFMAAYJAAACBQJjYQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2EGAwkAAAIFAmZUBQJmVAQCZk4JAPwHBAUCYUoCBGJ1cm4JAMwIAgUCZEYFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlgFAmRGBQNuaWwDCQAAAgUCZk4FAmZOBAJmVQkBAmRhAwkBAS0BBQJjbQkBAS0BBQJjbgAABAJmZggFAmZVAl8xBAJjWggFAmZVAl8yCQDOCAIFAmNvBQJmZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkeAETdW5zdGFrZUFuZEdldE5vTGVzcwMCZkgCZlYCZlEEAmZ5AwkBAmFMAAYJAAACBQJhWQUBbgQCZXQJAMwIAgMJAQEhAQUCZnkGCQACAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZHgIcGF5bWVudHMAAAYJAAIBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJldAUCZXQEAmZJCQD8BwQFAmJmAgd1bnN0YWtlCQDMCAIJANgEAQUCYVoJAMwIAgUCZkgFA25pbAUDbmlsAwkAAAIFAmZJBQJmSQQCY0cJAQJiVAQJANgEAQgFAmR4DXRyYW5zYWN0aW9uSWQJANgEAQUCYVoFAmZICAUCZHgGY2FsbGVyBAJjbQgFAmNHAl8xBAJjbggFAmNHAl8yBAJjbwgFAmNHA18xMAQCZlcJAMwIAgMJAGcCBQJjbQUCZlYGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZlYFA25pbAIACQDMCAIDCQBnAgUCY24FAmZRBgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZlEFA25pbAIABQNuaWwDCQAAAgUCZlcFAmZXBAJmTgkA/AcEBQJhSgIEYnVybgkAzAgCBQJmSAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhWgUCZkgFA25pbAMJAAACBQJmTgUCZk4EAmZYCQECZGEDCQEBLQEFAmNtCQEBLQEFAmNuAAAEAmZmCAUCZlgCXzEEAmNaCAUCZlgCXzIJAM4IAgUCY28FAmZmCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmR4AQhhY3RpdmF0ZQICZlkCZloDCQECIT0CCQClCAEIBQJkeAZjYWxsZXIJAKUIAQUCYUoJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWEABQJmWQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWIABQJmWgUDbmlsAgdzdWNjZXNzAmR4AQpyZWZyZXNoS0xwAAQCZ2EJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUCYWcAAAQCZ2IDCQBnAgkAZQIFBmhlaWdodAUCZ2EFAmFqBQR1bml0CQECYUcBCQC5CQIJAMwIAgkApAMBBQJhagkAzAgCAi8gYmxvY2tzIGhhdmUgbm90IHBhc3NlZCBzaW5jZSB0aGUgcHJldmlvdXMgY2FsbAUDbmlsAgADCQAAAgUCZ2IFAmdiBAJnYwkBAmRhAwAAAAAAAAQCZGgIBQJnYwJfMQQCY1oIBQJnYwJfMgkAlAoCBQJkaAkApgMBBQJjWgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkeAEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYU4AAmR4ARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJieAkAlAoCBQNuaWwJAQJidwEFAmJ4AmR4ARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJiRQJiRgJiSgQCYlMJAQJiSQMFAmJFBQJiRgUCYkoJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJiUwAACQDMCAIJAKYDAQkAkQMCBQJiUwABCQDMCAIJAKYDAQkAkQMCBQJiUwACBQNuaWwCZHgBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJkeAEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSAFJCQCUCgIFA25pbAkBAUcCCQCnAwEFAUgFAUkCZHgBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYnoCYkEJAJQKAgUDbmlsCQCmAwEJAQJieQIJAKcDAQUCYnoJAKcDAQUCYkECZHgBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJiVQJjcQJjcgJjcwJjdAJjdQFYAmN2AmN3CQCUCgIFA25pbAkBAmNwCQUCYlUFAmNxBQJjcgUCY3MFAmN0BQJjdQUBWAUCY3YFAmN3AmR4ASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCYlUCYlYCYlcBWAQCY0cJAQJiVAQFAmJVBQJiVgUCYlcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAVgJAJQKAgUDbmlsCQCcCgoIBQJjRwJfMQgFAmNHAl8yCAUCY0cCXzMIBQJjRwJfNAgFAmNHAl81CAUCY0cCXzYIBQJjRwJfNwkApgMBCAUCY0cCXzgIBQJjRwJfOQgFAmNHA18xMAJkeAENc3RhdHNSRUFET05MWQAEAmJLCQECYU4ABAJiWAkA2QQBCQCRAwIFAmJLBQFxBAJkawkAkQMCBQJiSwUBcgQCZGwJAJEDAgUCYksFAXMEAmN6CQCRAwIFAmJLBQF2BAJjQQkAkQMCBQJiSwUBdwQCYkwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdAQCYk0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSwUBdQQCZ2QICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlgJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJnZQkBAmJ3AQUCZGsEAmdmCQECYncBBQJkbAQCZ2cDCQAAAgUCZ2QAAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECYkkDBQJnZQUCZ2YFAmdkBAJjaAAABAJnaAkBAUcCCQCRAwIFAmdnAAEFAWIEAmdpCQEBRwIJAJEDAgUCZ2cAAgUBYgQCZ2oJAQV2YWx1ZQEJAJoIAgUCYUoJAQJhdQEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmdlCQDMCAIJAKQDAQUCZ2YJAMwIAgkApAMBBQJnZAkAzAgCCQCkAwEFAmNoCQDMCAIJAKQDAQUCZ2gJAMwIAgkApAMBBQJnaQkAzAgCCQCkAwEFAmdqBQNuaWwFAWoCZHgBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJjcgQCYksJAQJhTgAEAmJYCQDZBAEJAJEDAgUCYksFAXEEAmN4CQCRAwIFAmJLBQFyBAJiWQkA2QQBBQJjeAQCY3kJAJEDAgUCYksFAXMEAmJaCQDZBAEFAmN5BAJiTAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF0BAJiTQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF1BAJjYQkAkQMCBQJiSwUBcAQCZ2QICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlgJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJnZQkBAmJ3AQUCY3gEAmdmCQECYncBBQJjeQQCYkcJAQFEAgUCZ2UFAmJMBAJiSAkBAUQCBQJnZgUCYk0EAmNnAwkAAAIFAmdkAAAFAWUJAQJieQIFAmJIBQJiRwQCY0QJAQFEAgUCY3IFAmJMBAJjRQkAvAIDBQJjRAUCY2cFAWQEAmN0CQEBRwIFAmNFBQJiTQQCZEQJAQJjcAkCAACgwh4FAmNyBQJiWQUCY3QFAmJaAgAGBwQCY08IBQJkRAJfMQQCZ2sIBQJkRAJfMwQCY2MIBQJkRAJfNAQCY2UIBQJkRAJfNQQCY2IIBQJkRAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY08JAMwIAgkApAMBCQEBRwIFAmNnBQFiCQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJjZQkAzAgCCQCkAwEFAmNiCQDMCAIFAmNhCQDMCAIJAKQDAQUCY3IJAMwIAgkApAMBBQJjdAUDbmlsBQFqAmR4AR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJjdAQCYksJAQJhTgAEAmJYCQDZBAEJAJEDAgUCYksFAXEEAmN4CQCRAwIFAmJLBQFyBAJiWQkA2QQBBQJjeAQCY3kJAJEDAgUCYksFAXMEAmJaCQDZBAEFAmN5BAJiTAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF0BAJiTQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJLBQF1BAJjYQkAkQMCBQJiSwUBcAQCZ2QICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlgJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJnbAkBAmJ3AQUCY3gEAmdtCQECYncBBQJjeQQCZ24JAQFEAgUCZ2wFAmJMBAJnbwkBAUQCBQJnbQUCYk0EAmNnAwkAAAIFAmdkAAAFAWUJAQJieQIFAmdvBQJnbgQCY0UJAQFEAgUCY3QFAmJNBAJjRAkAvAIDBQJjRQUBZAUCY2cEAmNyCQEBRwIFAmNEBQJiTAQCZEQJAQJjcAkCAACgwh4FAmNyBQJiWQUCY3QFAmJaAgAGBwQCY08IBQJkRAJfMQQCZ2sIBQJkRAJfMwQCY2MIBQJkRAJfNAQCY2UIBQJkRAJfNQQCY2IIBQJkRAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY08JAMwIAgkApAMBCQEBRwIFAmNnBQFiCQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJjZQkAzAgCCQCkAwEFAmNiCQDMCAIFAmNhCQDMCAIJAKQDAQUCY3IJAMwIAgkApAMBBQJjdAUDbmlsBQFqAmR4ARNldmFsdWF0ZUdldFJFQURPTkxZAgJncAJncQQCY0cJAQJiVAQCAAUCZ3AFAmdxBQR0aGlzBAJjbQgFAmNHAl8xBAJjbggFAmNHAl8yBAJjYwgFAmNHAl81BAJjZQgFAmNHAl82BAJjYggFAmNHAl83BAJjaAgFAmNHAl84BAJjYQkBDXBhcnNlSW50VmFsdWUBCAUCY0cCXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjbQkAzAgCCQCkAwEFAmNuCQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJjZQkAzAgCCQCkAwEFAmNiCQDMCAIJAKYDAQUCY2gJAMwIAgkApAMBBQJjYQUDbmlsBQFqAQJncgECZ3MABAJndAQCZEkJAQJlSwADCQABAgUCZEkCCkJ5dGVWZWN0b3IEAmVPBQJkSQUCZU8DCQABAgUCZEkCBFVuaXQIBQJncg9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZEkFAmdyAwkAAQIFAmRJAgVPcmRlcgQCZGoFAmRJBAJndQkBAmFNAAQCYXoJAQJkaQEFAmRqBAJhQQkA9AMDCAUCZGoJYm9keUJ5dGVzCQCRAwIIBQJkagZwcm9vZnMAAAgFAmRqD3NlbmRlclB1YmxpY0tleQQCYUIJAPQDAwgFAmRqCWJvZHlCeXRlcwkAkQMCCAUCZGoGcHJvb2ZzAAEFAmd1AwMDBQJhegUCYUEHBQJhQgcGCQECYXkDBQJhegUCYUEFAmFCAwkAAQIFAmRJAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZUwFAmRJBAJndgkA9gMBCQEFdmFsdWUBCAUCZUwGc2NyaXB0BAJndwkA2wQBCQEFdmFsdWUBCQCdCAIFAmFKCQECYXcABAJneAkA8QcBBQR0aGlzAwMJAAACBQJndwUCZ3YJAQIhPQIFAmd4BQJndgcGCQD0AwMIBQJncglib2R5Qnl0ZXMJAJEDAggFAmdyBnByb29mcwAABQJndAkA9AMDCAUCZ3IJYm9keUJ5dGVzCQCRAwIIBQJncgZwcm9vZnMAAAUCZ3RFDX3+", "chainId": 84, "height": 2336991, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8ysgBWB45NCi3cudQ8xknUk33XTeSgT6rCSxZ1AkB8jM Next: G9947JqEuCpv5yzoxoNLZZdRRj8H6CtopAYKG28jxAhf Diff:
OldNewDifferences
373373 }
374374
375375
376-func cW (cX) = {
376+func cW (cX,cY,cb) = {
377+ let cZ = fraction(pow((cX * cY), 0, toBigInt(5), 1, 0, DOWN), d, cb)
378+ cZ
379+ }
380+
381+
382+func da (db,dc,dd) = {
383+ let de = (bw(aS(ba)) + db)
384+ let df = (bw(aS(bb)) + dc)
385+ let dg = (value(assetInfo(aZ)).quantity + dd)
386+ let cZ = cW(toBigInt(de), toBigInt(df), toBigInt(dg))
387+ let dh = [IntegerEntry(ag, height), StringEntry(af, toString(cZ))]
388+ $Tuple2(dh, cZ)
389+ }
390+
391+
392+func di (dj) = {
377393 let bK = aN()
378- let cY = bK[r]
379- let cZ = bK[s]
394+ let dk = bK[r]
395+ let dl = bK[s]
380396 let ca = parseIntValue(bK[p])
381397 let bL = parseIntValue(bK[t])
382398 let bM = parseIntValue(bK[u])
383- let da = bw(cY)
384- let db = bw(cZ)
385- let cg = if ((cX.orderType == Buy))
386- then bB(bL, bM, (da + cX.amount), db)
387- else bB(bL, bM, (da - cX.amount), db)
388- let ch = G(cg, b)
399+ let dm = dj.amount
400+ let dn = fraction(dj.amount, dj.price, b)
401+ let do = if ((dj.orderType == Buy))
402+ then $Tuple2(dm, -(dn))
403+ else $Tuple2(-(dm), dn)
404+ let db = do._1
405+ let dc = do._2
389406 if (if (if (aL())
390407 then true
391408 else (ca == m))
393410 else (ca == n))
394411 then throw("Exchange operations disabled")
395412 else {
396- let dc = cX.assetPair.amountAsset
397- let dd = if ((dc == unit))
398- then "WAVES"
399- else toBase58String(value(dc))
400- let de = cX.assetPair.priceAsset
401- let df = if ((de == unit))
402- then "WAVES"
403- else toBase58String(value(de))
404- if (if ((dd != cY))
413+ let dp = aS(value(dj.assetPair.amountAsset))
414+ let dq = aS(value(dj.assetPair.priceAsset))
415+ if (if ((dp != dk))
405416 then true
406- else (df != cZ))
417+ else (dq != dl))
407418 then throw("Wrong order assets.")
408419 else {
409- let dg = cX.price
410- let dh = fraction(b, bM, bL)
411- let di = J(dg, b, dh)
412- let dj = if ((cX.orderType == Buy))
413- then (ch >= di)
414- else (di >= ch)
415- let dk = valueOrErrorMessage(getInteger(this, af), aI("kLp is required"))
416- let dl = 0
417- let dm = (dl > dk)
418- dm
420+ let dr = valueOrErrorMessage(parseBigInt(valueOrErrorMessage(getString(this, af), aI("kLp is required"))), aI("invalid kLp"))
421+ let ds = da(db, dc, 0)
422+ let dt = ds._1
423+ let du = ds._2
424+ let dv = (du > dr)
425+ dv
419426 }
420427 }
421428 }
422429
423430
424-func dn (do) = if ((size(do.payments) != 1))
431+func dw (dx) = if ((size(dx.payments) != 1))
425432 then throw("exactly 1 payment is expected")
426433 else {
427- let dp = value(do.payments[0])
428- let bV = value(dp.assetId)
429- let dq = dp.amount
430- let cG = bT(toBase58String(do.transactionId), toBase58String(bV), dq, do.caller)
434+ let dy = value(dx.payments[0])
435+ let bV = value(dy.assetId)
436+ let dz = dy.amount
437+ let cG = bT(toBase58String(dx.transactionId), toBase58String(bV), dz, dx.caller)
431438 let cm = cG._1
432439 let cn = cG._2
433440 let ca = parseIntValue(cG._9)
436443 then true
437444 else (ca == n))
438445 then throw(("Get operation is blocked by admin. Status = " + toString(ca)))
439- else $Tuple5(cm, cn, dq, bV, co)
446+ else $Tuple5(cm, cn, dz, bV, co)
440447 }
441448
442449
443-func dr (do,cq,cw) = if ((size(do.payments) != 2))
450+func dA (dx,cq,cw) = if ((size(dx.payments) != 2))
444451 then throw("exactly 2 payments are expected")
445452 else {
446- let ds = value(do.payments[0])
447- let dt = value(do.payments[1])
448- let du = cp(toBase58String(do.transactionId), cq, ds.amount, ds.assetId, dt.amount, dt.assetId, toString(do.caller), false, cw)
449- let ca = parseIntValue(du._8)
453+ let dB = value(dx.payments[0])
454+ let dC = value(dx.payments[1])
455+ let dD = cp(toBase58String(dx.transactionId), cq, dB.amount, dB.assetId, dC.amount, dC.assetId, toString(dx.caller), false, cw)
456+ let ca = parseIntValue(dD._8)
450457 if (if (if (aL())
451458 then true
452459 else (ca == l))
453460 then true
454461 else (ca == n))
455462 then throw(("Put operation is blocked by admin. Status = " + toString(ca)))
456- else du
463+ else dD
457464 }
458465
459466
460-func dv (dw) = {
461- let dx = invoke(aJ, "emit", [dw], nil)
462- if ((dx == dx))
467+func dE (dF) = {
468+ let dG = invoke(aJ, "emit", [dF], nil)
469+ if ((dG == dG))
463470 then {
464- let dy = {
465- let dz = dx
466- if ($isInstanceOf(dz, "Address"))
471+ let dH = {
472+ let dI = dG
473+ if ($isInstanceOf(dI, "Address"))
467474 then {
468- let dA = dz
469- invoke(dA, "emit", [dw], nil)
475+ let dJ = dI
476+ invoke(dJ, "emit", [dF], nil)
470477 }
471478 else unit
472479 }
473- if ((dy == dy))
474- then dw
480+ if ((dH == dH))
481+ then dF
475482 else throw("Strict value is not equal to itself.")
476483 }
477484 else throw("Strict value is not equal to itself.")
478485 }
479486
480487
481-func dB (dw) = {
482- let dC = fraction(dw, ae, b)
483- $Tuple2((dw - dC), dC)
488+func dK (dF) = {
489+ let dL = fraction(dF, ae, b)
490+ $Tuple2((dF - dL), dL)
484491 }
485492
486493
487-func dD (dE,dF,X,Y) = {
488- let dG = (Y == unit)
489- let dH = bw(aS(ba))
490- let dI = bw(aS(bb))
491- let dJ = if ((dF == ba))
494+func dM (dN,dO,X,Y) = {
495+ let dP = (Y == unit)
496+ let dQ = bw(aS(ba))
497+ let dR = bw(aS(bb))
498+ let dS = if ((dO == ba))
492499 then true
493- else if ((dF == bb))
500+ else if ((dO == bb))
494501 then false
495502 else aG("invalid asset")
496- let dK = if (dG)
497- then $Tuple2(dH, dI)
498- else if (dJ)
499- then $Tuple2((dH - dE), dI)
500- else $Tuple2(dH, (dI - dE))
501- let dL = dK._1
502- let dM = dK._2
503- let dN = if (dJ)
504- then $Tuple2(dE, 0)
505- else $Tuple2(0, dE)
506- let dO = dN._1
507- let dP = dN._2
508- let dQ = dB(dO)._1
509- let dR = dB(dP)._1
510- let dS = dB(dE)
511- let dT = dS._1
512- let dC = dS._2
513- let dU = (dL + dQ)
514- let dV = (dM + dR)
515- let dW = by(D(dV, bd), D(dU, bc))
516- let dX = G(dW, b)
517- let dY = if (dJ)
518- then dL
519- else dM
520- let dZ = toBigInt(dY)
521- let ea = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
522- let eb = if ((ea > f))
503+ let dT = if (dP)
504+ then $Tuple2(dQ, dR)
505+ else if (dS)
506+ then $Tuple2((dQ - dN), dR)
507+ else $Tuple2(dQ, (dR - dN))
508+ let dU = dT._1
509+ let dV = dT._2
510+ let dW = if (dS)
511+ then $Tuple2(dN, 0)
512+ else $Tuple2(0, dN)
513+ let dX = dW._1
514+ let dY = dW._2
515+ let dm = dK(dX)._1
516+ let dn = dK(dY)._1
517+ let dZ = dK(dN)
518+ let ea = dZ._1
519+ let dL = dZ._2
520+ let eb = (dU + dm)
521+ let ec = (dV + dn)
522+ let ed = by(D(ec, bd), D(eb, bc))
523+ let ee = G(ed, b)
524+ let ef = if (dS)
525+ then dU
526+ else dV
527+ let eg = toBigInt(ef)
528+ let eh = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
529+ let ei = if ((eh > f))
523530 then true
524531 else aG("initial deposit requires all coins")
525- if ((eb == eb))
532+ if ((ei == ei))
526533 then {
527- let ec = toBigInt(dT)
528- let ed = max([0, toInt(((ea * (sqrtBigInt((d + ((ec * d) / dZ)), 18, 18, DOWN) - d)) / d))])
529- let cV = if (dG)
534+ let ej = toBigInt(ea)
535+ let ek = max([0, toInt(((eh * (sqrtBigInt((d + ((ej * d) / eg)), 18, 18, DOWN) - d)) / d))])
536+ let cV = if (dP)
530537 then nil
531- else [IntegerEntry(S(), dX), IntegerEntry(T(height, lastBlock.timestamp), dX), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bh(dO, dP, ed, dX, 0, 0, height, lastBlock.timestamp, 0, 0))]
532- let ee = by(D(dM, bd), D(dL, bc))
533- let ef = G(ee, b)
534- let eg = {
535- let eh = if (dJ)
536- then $Tuple2(dO, dL)
537- else $Tuple2(dP, dM)
538- let dw = eh._1
539- let ei = eh._2
540- let ej = toInt(fraction(ea, toBigInt((dw / 2)), toBigInt(ei)))
541- fraction((ed - ej), b, ej)
538+ else [IntegerEntry(S(), ee), IntegerEntry(T(height, lastBlock.timestamp), ee), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bh(dX, dY, ek, ee, 0, 0, height, lastBlock.timestamp, 0, 0))]
539+ let el = by(D(dV, bd), D(dU, bc))
540+ let em = G(el, b)
541+ let en = {
542+ let eo = if (dS)
543+ then $Tuple2(dX, dU)
544+ else $Tuple2(dY, dV)
545+ let dF = eo._1
546+ let ep = eo._2
547+ let eq = toInt(fraction(eh, toBigInt((dF / 2)), toBigInt(ep)))
548+ fraction((ek - eq), b, eq)
542549 }
543- $Tuple5(ed, cV, dC, eg, dJ)
550+ $Tuple5(ek, cV, dL, en, dS)
544551 }
545552 else throw("Strict value is not equal to itself.")
546553 }
547554
548555
549-func ek (el,dT,dF,X,Y) = {
550- let dG = (Y == unit)
551- let em = [if ((dF == aZ))
556+func er (es,ea,dO,X,Y) = {
557+ let dP = (Y == unit)
558+ let et = [if ((dO == aZ))
552559 then true
553560 else aG("invalid lp asset")]
554- if ((em == em))
561+ if ((et == et))
555562 then {
556- let en = if ((el == ba))
563+ let eu = if ((es == ba))
557564 then true
558- else if ((el == bb))
565+ else if ((es == bb))
559566 then false
560567 else aG("invalid asset")
561- let eo = if (en)
568+ let ev = if (eu)
562569 then toBigInt(bw(aS(ba)))
563570 else toBigInt(bw(aS(bb)))
564- let ep = bw(aS(ba))
565- let eq = bw(aS(bb))
566- let er = if (en)
567- then ep
568- else eq
569- let es = toBigInt(er)
570- let ea = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
571- let et = toBigInt(dT)
572- let eu = max([0, toInt(((eo * (d - pow((d - ((et * d) / ea)), 18, h, 0, 18, DOWN))) / d))])
573- let ev = dB(eu)
574- let ew = ev._1
575- let dC = ev._2
576- let ex = if (en)
577- then $Tuple4(ew, 0, (ep - eu), eq)
578- else $Tuple4(0, ew, ep, (eq - eu))
579- let ey = ex._1
580- let ez = ex._2
581- let eA = ex._3
582- let eB = ex._4
583- let dW = by(D(eB, bd), D(eA, bc))
584- let dX = G(dW, b)
585- let cV = if (dG)
571+ let ew = bw(aS(ba))
572+ let ex = bw(aS(bb))
573+ let ey = if (eu)
574+ then ew
575+ else ex
576+ let ez = toBigInt(ey)
577+ let eh = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
578+ let eA = toBigInt(ea)
579+ let eB = max([0, toInt(((ev * (d - pow((d - ((eA * d) / eh)), 18, h, 0, 18, DOWN))) / d))])
580+ let eC = dK(eB)
581+ let eD = eC._1
582+ let dL = eC._2
583+ let eE = if (eu)
584+ then $Tuple4(eD, 0, (ew - eB), ex)
585+ else $Tuple4(0, eD, ew, (ex - eB))
586+ let eF = eE._1
587+ let eG = eE._2
588+ let eH = eE._3
589+ let eI = eE._4
590+ let ed = by(D(eI, bd), D(eH, bc))
591+ let ee = G(ed, b)
592+ let cV = if (dP)
586593 then nil
587- else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bs(ey, ez, dT, dX, height, lastBlock.timestamp)), IntegerEntry(S(), dX), IntegerEntry(T(height, lastBlock.timestamp), dX)]
588- let ee = by(D(eq, bd), D(ep, bc))
589- let ef = G(ee, b)
590- let eg = {
591- let eC = (toInt(fraction(eo, et, ea)) * 2)
592- fraction((ew - eC), b, eC)
594+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bs(eF, eG, ea, ee, height, lastBlock.timestamp)), IntegerEntry(S(), ee), IntegerEntry(T(height, lastBlock.timestamp), ee)]
595+ let el = by(D(ex, bd), D(ew, bc))
596+ let em = G(el, b)
597+ let en = {
598+ let eJ = (toInt(fraction(ev, eA, eh)) * 2)
599+ fraction((eD - eJ), b, eJ)
593600 }
594- $Tuple5(ew, cV, dC, eg, en)
601+ $Tuple5(eD, cV, dL, en, eu)
595602 }
596603 else throw("Strict value is not equal to itself.")
597604 }
598605
599606
600-func eD (eE,eF,cb) = {
601- let eG = fraction(pow((eE * eF), 0, toBigInt(5), 1, 0, DOWN), d, cb)
602- eG
603- }
604-
605-
606-func eH (eI,eJ,eK) = {
607- let eL = (bw(aS(ba)) + eI)
608- let eM = (bw(aS(bb)) + eJ)
609- let eN = (value(assetInfo(aZ)).quantity + eK)
610- let eG = eD(toBigInt(eL), toBigInt(eM), toBigInt(eN))
611- let eO = [IntegerEntry(ag, height), StringEntry(af, toString(eG))]
612- $Tuple2(eO, eG)
613- }
614-
615-
616-func eP () = {
617- let dz = getString(Q())
618- if ($isInstanceOf(dz, "String"))
607+func eK () = {
608+ let dI = getString(Q())
609+ if ($isInstanceOf(dI, "String"))
619610 then {
620- let eQ = dz
621- fromBase58String(eQ)
611+ let eL = dI
612+ fromBase58String(eL)
622613 }
623- else if ($isInstanceOf(dz, "Unit"))
614+ else if ($isInstanceOf(dI, "Unit"))
624615 then unit
625616 else throw("Match error")
626617 }
627618
628619
629-func eR () = {
630- let dz = getString(R())
631- if ($isInstanceOf(dz, "String"))
620+func eM () = {
621+ let dI = getString(R())
622+ if ($isInstanceOf(dI, "String"))
632623 then {
633- let eQ = dz
634- fromBase58String(eQ)
624+ let eL = dI
625+ fromBase58String(eL)
635626 }
636- else if ($isInstanceOf(dz, "Unit"))
627+ else if ($isInstanceOf(dI, "Unit"))
637628 then unit
638629 else throw("Match error")
639630 }
640631
641632
642-func eS (do) = {
643- let dz = eP()
644- if ($isInstanceOf(dz, "ByteVector"))
633+func eN (dx) = {
634+ let dI = eK()
635+ if ($isInstanceOf(dI, "ByteVector"))
645636 then {
646- let eT = dz
647- (do.callerPublicKey == eT)
637+ let eO = dI
638+ (dx.callerPublicKey == eO)
648639 }
649- else if ($isInstanceOf(dz, "Unit"))
650- then (do.caller == this)
640+ else if ($isInstanceOf(dI, "Unit"))
641+ then (dx.caller == this)
651642 else throw("Match error")
652643 }
653644
654645
655-func eU (do) = {
656- let eV = throw("Permission denied")
657- let dz = eP()
658- if ($isInstanceOf(dz, "ByteVector"))
646+func eP (dx) = {
647+ let eQ = throw("Permission denied")
648+ let dI = eK()
649+ if ($isInstanceOf(dI, "ByteVector"))
659650 then {
660- let eT = dz
661- if ((do.callerPublicKey == eT))
651+ let eO = dI
652+ if ((dx.callerPublicKey == eO))
662653 then true
663- else eV
654+ else eQ
664655 }
665- else if ($isInstanceOf(dz, "Unit"))
666- then if ((do.caller == this))
656+ else if ($isInstanceOf(dI, "Unit"))
657+ then if ((dx.caller == this))
667658 then true
668- else eV
659+ else eQ
669660 else throw("Match error")
670661 }
671662
672663
673-@Callable(do)
674-func setManager (eW) = {
675- let eX = eU(do)
676- if ((eX == eX))
664+@Callable(dx)
665+func setManager (eR) = {
666+ let eS = eP(dx)
667+ if ((eS == eS))
677668 then {
678- let eY = fromBase58String(eW)
679- if ((eY == eY))
680- then [StringEntry(R(), eW)]
669+ let eT = fromBase58String(eR)
670+ if ((eT == eT))
671+ then [StringEntry(R(), eR)]
681672 else throw("Strict value is not equal to itself.")
682673 }
683674 else throw("Strict value is not equal to itself.")
685676
686677
687678
688-@Callable(do)
679+@Callable(dx)
689680 func confirmManager () = {
690- let eZ = eR()
691- let fa = if (isDefined(eZ))
681+ let eU = eM()
682+ let eV = if (isDefined(eU))
692683 then true
693684 else throw("No pending manager")
694- if ((fa == fa))
685+ if ((eV == eV))
695686 then {
696- let fb = if ((do.callerPublicKey == value(eZ)))
687+ let eW = if ((dx.callerPublicKey == value(eU)))
697688 then true
698689 else throw("You are not pending manager")
699- if ((fb == fb))
700- then [StringEntry(Q(), toBase58String(value(eZ))), DeleteEntry(R())]
690+ if ((eW == eW))
691+ then [StringEntry(Q(), toBase58String(value(eU))), DeleteEntry(R())]
701692 else throw("Strict value is not equal to itself.")
702693 }
703694 else throw("Strict value is not equal to itself.")
705696
706697
707698
708-@Callable(do)
709-func put (cq,fc) = if ((0 > cq))
699+@Callable(dx)
700+func put (cq,eX) = if ((0 > cq))
710701 then throw("Invalid slippageTolerance passed")
711702 else {
712- let du = dr(do, cq, true)
713- let cS = du._2
714- let bX = du._7
715- let co = du._9
716- let cT = du._10
717- let cU = du._11
718- let fd = du._12
719- let fe = du._13
720- let dx = invoke(aJ, "emit", [cS], nil)
721- if ((dx == dx))
703+ let dD = dA(dx, cq, true)
704+ let cS = dD._2
705+ let bX = dD._7
706+ let co = dD._9
707+ let cT = dD._10
708+ let cU = dD._11
709+ let eY = dD._12
710+ let eZ = dD._13
711+ let dG = invoke(aJ, "emit", [cS], nil)
712+ if ((dG == dG))
722713 then {
723- let dy = {
724- let dz = dx
725- if ($isInstanceOf(dz, "Address"))
714+ let dH = {
715+ let dI = dG
716+ if ($isInstanceOf(dI, "Address"))
726717 then {
727- let dA = dz
728- invoke(dA, "emit", [cS], nil)
718+ let dJ = dI
719+ invoke(dJ, "emit", [cS], nil)
729720 }
730721 else unit
731722 }
732- if ((dy == dy))
723+ if ((dH == dH))
733724 then {
734- let ff = if ((cT > 0))
735- then invoke(bg, "put", nil, [AttachedPayment(fd, cT)])
725+ let fa = if ((cT > 0))
726+ then invoke(bg, "put", nil, [AttachedPayment(eY, cT)])
736727 else nil
737- if ((ff == ff))
728+ if ((fa == fa))
738729 then {
739- let fg = if ((cU > 0))
740- then invoke(bg, "put", nil, [AttachedPayment(fe, cU)])
730+ let fb = if ((cU > 0))
731+ then invoke(bg, "put", nil, [AttachedPayment(eZ, cU)])
741732 else nil
742- if ((fg == fg))
733+ if ((fb == fb))
743734 then {
744- let fh = if (fc)
735+ let fc = if (eX)
745736 then {
746- let fi = invoke(bf, "stake", nil, [AttachedPayment(bX, cS)])
747- if ((fi == fi))
737+ let fd = invoke(bf, "stake", nil, [AttachedPayment(bX, cS)])
738+ if ((fd == fd))
748739 then nil
749740 else throw("Strict value is not equal to itself.")
750741 }
751- else [ScriptTransfer(do.caller, cS, bX)]
752- let fj = eH(0, 0, 0)
753- let fk = fj._1
754- let eG = fj._2
755- ((co ++ fh) ++ fk)
742+ else [ScriptTransfer(dx.caller, cS, bX)]
743+ let fe = da(0, 0, 0)
744+ let ff = fe._1
745+ let cZ = fe._2
746+ ((co ++ fc) ++ ff)
756747 }
757748 else throw("Strict value is not equal to itself.")
758749 }
765756
766757
767758
768-@Callable(do)
769-func putForFree (fl) = if ((0 > fl))
759+@Callable(dx)
760+func putForFree (fg) = if ((0 > fg))
770761 then throw("Invalid value passed")
771762 else {
772- let du = dr(do, fl, false)
773- let co = du._9
774- let fm = eH(0, 0, 0)
775- let fk = fm._1
776- let eG = fm._2
777- (co ++ fk)
763+ let dD = dA(dx, fg, false)
764+ let co = dD._9
765+ let fh = da(0, 0, 0)
766+ let ff = fh._1
767+ let cZ = fh._2
768+ (co ++ ff)
778769 }
779770
780771
781772
782-@Callable(do)
783-func putOneTkn (fn,fo) = {
784- let fp = {
785- let fq = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
786- if ($isInstanceOf(fq, "Boolean"))
787- then fq
788- else throw(($getType(fq) + " couldn't be cast to Boolean"))
773+@Callable(dx)
774+func putOneTkn (fi,fj) = {
775+ let fk = {
776+ let fl = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
777+ if ($isInstanceOf(fl, "Boolean"))
778+ then fl
779+ else throw(($getType(fl) + " couldn't be cast to Boolean"))
789780 }
790- let fr = if (if (if (aL())
781+ let fm = if (if (if (aL())
791782 then true
792783 else (aY == l))
793784 then true
794785 else (aY == n))
795786 then true
796- else fp
797- let em = [if (if (!(fr))
787+ else fk
788+ let et = [if (if (!(fm))
798789 then true
799- else eS(do))
790+ else eN(dx))
800791 then true
801- else aG("put operation is blocked by admin"), if ((size(do.payments) == 1))
792+ else aG("put operation is blocked by admin"), if ((size(dx.payments) == 1))
802793 then true
803794 else aG("exactly 1 payment are expected")]
804- if ((em == em))
795+ if ((et == et))
805796 then {
806- let fs = do.payments[0]
807- let dF = fs.assetId
808- let dE = fs.amount
809- let X = do.caller
810- let Y = do.transactionId
811- let ft = dD(dE, dF, X, Y)
812- let fu = ft._1
813- let cV = ft._2
814- let dC = ft._3
815- let fv = ft._4
816- let dJ = ft._5
817- let fw = if (if ((fn > 0))
818- then (fn > fu)
797+ let fn = dx.payments[0]
798+ let dO = fn.assetId
799+ let dN = fn.amount
800+ let X = dx.caller
801+ let Y = dx.transactionId
802+ let fo = dM(dN, dO, X, Y)
803+ let fp = fo._1
804+ let cV = fo._2
805+ let dL = fo._3
806+ let fq = fo._4
807+ let dS = fo._5
808+ let fr = if (if ((fi > 0))
809+ then (fi > fp)
819810 else false)
820- then aG(makeString(["amount to receive is less than ", toString(fn)], ""))
821- else fu
822- let dx = dv(fw)
823- if ((dx == dx))
811+ then aG(makeString(["amount to receive is less than ", toString(fi)], ""))
812+ else fp
813+ let dG = dE(fr)
814+ if ((dG == dG))
824815 then {
825- let fh = if (fo)
816+ let fc = if (fj)
826817 then {
827- let fx = invoke(bf, "stake", nil, [AttachedPayment(aZ, fw)])
828- if ((fx == fx))
818+ let fs = invoke(bf, "stake", nil, [AttachedPayment(aZ, fr)])
819+ if ((fs == fs))
829820 then nil
830821 else throw("Strict value is not equal to itself.")
831822 }
832- else [ScriptTransfer(do.caller, fw, aZ)]
833- let fy = if ((dC > 0))
834- then [ScriptTransfer(aK, dC, dF)]
823+ else [ScriptTransfer(dx.caller, fr, aZ)]
824+ let ft = if ((dL > 0))
825+ then [ScriptTransfer(aK, dL, dO)]
835826 else nil
836- let fz = if ((this == aK))
827+ let fu = if ((this == aK))
837828 then $Tuple2(0, 0)
838- else if (dJ)
839- then $Tuple2(-(dC), 0)
840- else $Tuple2(0, -(dC))
841- let eI = fz._1
842- let eJ = fz._2
843- let fA = eH(eI, eJ, 0)
844- let fk = fA._1
845- let eG = fA._2
846- $Tuple2((((cV ++ fh) ++ fy) ++ fk), fw)
829+ else if (dS)
830+ then $Tuple2(-(dL), 0)
831+ else $Tuple2(0, -(dL))
832+ let db = fu._1
833+ let dc = fu._2
834+ let fv = da(db, dc, 0)
835+ let ff = fv._1
836+ let cZ = fv._2
837+ $Tuple2((((cV ++ fc) ++ ft) ++ ff), fr)
847838 }
848839 else throw("Strict value is not equal to itself.")
849840 }
852843
853844
854845
855-@Callable(do)
856-func putOneTknREADONLY (dF,dE) = {
857- let fB = dD(dE, aQ(dF), unit, unit)
858- let fu = fB._1
859- let cV = fB._2
860- let dC = fB._3
861- let fv = fB._4
862- let dJ = fB._5
863- $Tuple2(nil, $Tuple3(fu, dC, fv))
846+@Callable(dx)
847+func putOneTknREADONLY (dO,dN) = {
848+ let fw = dM(dN, aQ(dO), unit, unit)
849+ let fp = fw._1
850+ let cV = fw._2
851+ let dL = fw._3
852+ let fq = fw._4
853+ let dS = fw._5
854+ $Tuple2(nil, $Tuple3(fp, dL, fq))
864855 }
865856
866857
867858
868-@Callable(do)
869-func getOneTkn (fC,fn) = {
870- let fp = {
871- let fq = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
872- if ($isInstanceOf(fq, "Boolean"))
873- then fq
874- else throw(($getType(fq) + " couldn't be cast to Boolean"))
859+@Callable(dx)
860+func getOneTkn (fx,fi) = {
861+ let fk = {
862+ let fl = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
863+ if ($isInstanceOf(fl, "Boolean"))
864+ then fl
865+ else throw(($getType(fl) + " couldn't be cast to Boolean"))
875866 }
876- let fD = if (if (aL())
867+ let fy = if (if (aL())
877868 then true
878869 else (aY == n))
879870 then true
880- else fp
881- let em = [if (if (!(fD))
871+ else fk
872+ let et = [if (if (!(fy))
882873 then true
883- else eS(do))
874+ else eN(dx))
884875 then true
885- else aG("get operation is blocked by admin"), if ((size(do.payments) == 1))
876+ else aG("get operation is blocked by admin"), if ((size(dx.payments) == 1))
886877 then true
887878 else aG("exactly 1 payment are expected")]
888- if ((em == em))
879+ if ((et == et))
889880 then {
890- let el = aQ(fC)
891- let fs = do.payments[0]
892- let dF = fs.assetId
893- let dT = fs.amount
894- let X = do.caller
895- let Y = do.transactionId
896- let fE = ek(el, dT, dF, X, Y)
897- let fF = fE._1
898- let cV = fE._2
899- let dC = fE._3
900- let fv = fE._4
901- let en = fE._5
902- let dw = if (if ((fn > 0))
903- then (fn > fF)
881+ let es = aQ(fx)
882+ let fn = dx.payments[0]
883+ let dO = fn.assetId
884+ let ea = fn.amount
885+ let X = dx.caller
886+ let Y = dx.transactionId
887+ let fz = er(es, ea, dO, X, Y)
888+ let fA = fz._1
889+ let cV = fz._2
890+ let dL = fz._3
891+ let fq = fz._4
892+ let eu = fz._5
893+ let dF = if (if ((fi > 0))
894+ then (fi > fA)
904895 else false)
905- then aG(makeString(["amount to receive is less than ", toString(fn)], ""))
906- else fF
907- let fG = invoke(aJ, "burn", [dT], [AttachedPayment(dF, dT)])
908- if ((fG == fG))
896+ then aG(makeString(["amount to receive is less than ", toString(fi)], ""))
897+ else fA
898+ let fB = invoke(aJ, "burn", [ea], [AttachedPayment(dO, ea)])
899+ if ((fB == fB))
909900 then {
910- let fH = [ScriptTransfer(X, dw, el)]
911- let fy = if ((dC > 0))
912- then [ScriptTransfer(aK, dC, el)]
901+ let fC = [ScriptTransfer(X, dF, es)]
902+ let ft = if ((dL > 0))
903+ then [ScriptTransfer(aK, dL, es)]
913904 else nil
914- let fI = {
915- let fJ = if ((this == aK))
905+ let fD = {
906+ let fE = if ((this == aK))
916907 then 0
917- else dC
918- if (en)
919- then $Tuple2(-((dw + fJ)), 0)
920- else $Tuple2(0, -((dw + fJ)))
908+ else dL
909+ if (eu)
910+ then $Tuple2(-((dF + fE)), 0)
911+ else $Tuple2(0, -((dF + fE)))
921912 }
922- let eI = fI._1
923- let eJ = fI._2
924- let fK = eH(eI, eJ, 0)
925- let fk = fK._1
926- let eG = fK._2
927- $Tuple2((((cV ++ fH) ++ fy) ++ fk), dw)
913+ let db = fD._1
914+ let dc = fD._2
915+ let fF = da(db, dc, 0)
916+ let ff = fF._1
917+ let cZ = fF._2
918+ $Tuple2((((cV ++ fC) ++ ft) ++ ff), dF)
928919 }
929920 else throw("Strict value is not equal to itself.")
930921 }
933924
934925
935926
936-@Callable(do)
937-func getOneTknREADONLY (el,dT) = {
938- let fL = ek(aQ(el), dT, aZ, unit, unit)
939- let fF = fL._1
940- let cV = fL._2
941- let dC = fL._3
942- let fv = fL._4
943- let en = fL._5
944- $Tuple2(nil, $Tuple3(fF, dC, fv))
927+@Callable(dx)
928+func getOneTknREADONLY (es,ea) = {
929+ let fG = er(aQ(es), ea, aZ, unit, unit)
930+ let fA = fG._1
931+ let cV = fG._2
932+ let dL = fG._3
933+ let fq = fG._4
934+ let eu = fG._5
935+ $Tuple2(nil, $Tuple3(fA, dL, fq))
945936 }
946937
947938
948939
949-@Callable(do)
950-func unstakeAndGetOneTkn (fM,fC,fn) = {
951- let fp = {
952- let fq = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
953- if ($isInstanceOf(fq, "Boolean"))
954- then fq
955- else throw(($getType(fq) + " couldn't be cast to Boolean"))
940+@Callable(dx)
941+func unstakeAndGetOneTkn (fH,fx,fi) = {
942+ let fk = {
943+ let fl = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
944+ if ($isInstanceOf(fl, "Boolean"))
945+ then fl
946+ else throw(($getType(fl) + " couldn't be cast to Boolean"))
956947 }
957- let fD = if (if (aL())
948+ let fy = if (if (aL())
958949 then true
959950 else (aY == n))
960951 then true
961- else fp
962- let em = [if (if (!(fD))
952+ else fk
953+ let et = [if (if (!(fy))
963954 then true
964- else eS(do))
955+ else eN(dx))
965956 then true
966- else aG("get operation is blocked by admin"), if ((size(do.payments) == 0))
957+ else aG("get operation is blocked by admin"), if ((size(dx.payments) == 0))
967958 then true
968959 else aG("no payments are expected")]
969- if ((em == em))
960+ if ((et == et))
970961 then {
971- let el = aQ(fC)
972- let X = do.caller
973- let Y = do.transactionId
974- let fN = invoke(bf, "unstake", [toBase58String(aZ), fM], nil)
975- if ((fN == fN))
962+ let es = aQ(fx)
963+ let X = dx.caller
964+ let Y = dx.transactionId
965+ let fI = invoke(bf, "unstake", [toBase58String(aZ), fH], nil)
966+ if ((fI == fI))
976967 then {
977- let fO = ek(el, fM, aZ, X, Y)
978- let fF = fO._1
979- let cV = fO._2
980- let dC = fO._3
981- let fv = fO._4
982- let en = fO._5
983- let dw = if (if ((fn > 0))
984- then (fn > fF)
968+ let fJ = er(es, fH, aZ, X, Y)
969+ let fA = fJ._1
970+ let cV = fJ._2
971+ let dL = fJ._3
972+ let fq = fJ._4
973+ let eu = fJ._5
974+ let dF = if (if ((fi > 0))
975+ then (fi > fA)
985976 else false)
986- then aG(makeString(["amount to receive is less than ", toString(fn)], ""))
987- else fF
988- let fG = invoke(aJ, "burn", [fM], [AttachedPayment(aZ, fM)])
989- if ((fG == fG))
977+ then aG(makeString(["amount to receive is less than ", toString(fi)], ""))
978+ else fA
979+ let fB = invoke(aJ, "burn", [fH], [AttachedPayment(aZ, fH)])
980+ if ((fB == fB))
990981 then {
991- let fH = [ScriptTransfer(do.caller, dw, el)]
992- let fy = if ((dC > 0))
993- then [ScriptTransfer(aK, dC, el)]
982+ let fC = [ScriptTransfer(dx.caller, dF, es)]
983+ let ft = if ((dL > 0))
984+ then [ScriptTransfer(aK, dL, es)]
994985 else nil
995- let fP = {
996- let fJ = if ((this == aK))
986+ let fK = {
987+ let fE = if ((this == aK))
997988 then 0
998- else dC
999- if (en)
1000- then $Tuple2(-((dw + fJ)), 0)
1001- else $Tuple2(0, -((dw + fJ)))
989+ else dL
990+ if (eu)
991+ then $Tuple2(-((dF + fE)), 0)
992+ else $Tuple2(0, -((dF + fE)))
1002993 }
1003- let eI = fP._1
1004- let eJ = fP._2
1005- let fQ = eH(eI, eJ, 0)
1006- let fk = fQ._1
1007- let eG = fQ._2
1008- $Tuple2((((cV ++ fH) ++ fy) ++ fk), dw)
994+ let db = fK._1
995+ let dc = fK._2
996+ let fL = da(db, dc, 0)
997+ let ff = fL._1
998+ let cZ = fL._2
999+ $Tuple2((((cV ++ fC) ++ ft) ++ ff), dF)
10091000 }
10101001 else throw("Strict value is not equal to itself.")
10111002 }
10161007
10171008
10181009
1019-@Callable(do)
1010+@Callable(dx)
10201011 func get () = {
1021- let cG = dn(do)
1022- let fR = cG._1
1012+ let cG = dw(dx)
1013+ let fM = cG._1
10231014 let cn = cG._2
1024- let dq = cG._3
1015+ let dz = cG._3
10251016 let bV = cG._4
10261017 let co = cG._5
1027- let fS = invoke(aJ, "burn", [dq], [AttachedPayment(bV, dq)])
1028- if ((fS == fS))
1018+ let fN = invoke(aJ, "burn", [dz], [AttachedPayment(bV, dz)])
1019+ if ((fN == fN))
10291020 then {
1030- let fT = eH(-(fR), -(cn), 0)
1031- let fk = fT._1
1032- let eG = fT._2
1033- (co ++ fk)
1021+ let fO = da(-(fM), -(cn), 0)
1022+ let ff = fO._1
1023+ let cZ = fO._2
1024+ (co ++ ff)
10341025 }
10351026 else throw("Strict value is not equal to itself.")
10361027 }
10371028
10381029
10391030
1040-@Callable(do)
1041-func getNoLess (fU,fV) = {
1042- let cG = dn(do)
1031+@Callable(dx)
1032+func getNoLess (fP,fQ) = {
1033+ let cG = dw(dx)
10431034 let cm = cG._1
10441035 let cn = cG._2
1045- let dq = cG._3
1036+ let dz = cG._3
10461037 let bV = cG._4
10471038 let co = cG._5
1048- if ((fU > cm))
1049- then throw(((("noLessThenAmtAsset failed: " + toString(cm)) + " < ") + toString(fU)))
1050- else if ((fV > cn))
1051- then throw(((("noLessThenPriceAsset failed: " + toString(cn)) + " < ") + toString(fV)))
1039+ if ((fP > cm))
1040+ then throw(((("noLessThenAmtAsset failed: " + toString(cm)) + " < ") + toString(fP)))
1041+ else if ((fQ > cn))
1042+ then throw(((("noLessThenPriceAsset failed: " + toString(cn)) + " < ") + toString(fQ)))
10521043 else {
1053- let fS = invoke(aJ, "burn", [dq], [AttachedPayment(bV, dq)])
1054- if ((fS == fS))
1044+ let fN = invoke(aJ, "burn", [dz], [AttachedPayment(bV, dz)])
1045+ if ((fN == fN))
10551046 then {
1056- let fW = eH(-(cm), -(cn), 0)
1057- let fk = fW._1
1058- let eG = fW._2
1059- (co ++ fk)
1047+ let fR = da(-(cm), -(cn), 0)
1048+ let ff = fR._1
1049+ let cZ = fR._2
1050+ (co ++ ff)
10601051 }
10611052 else throw("Strict value is not equal to itself.")
10621053 }
10641055
10651056
10661057
1067-@Callable(do)
1068-func unstakeAndGet (dw) = {
1069- let fX = if ((size(do.payments) != 0))
1058+@Callable(dx)
1059+func unstakeAndGet (dF) = {
1060+ let fS = if ((size(dx.payments) != 0))
10701061 then throw("No payments are expected")
10711062 else true
1072- if ((fX == fX))
1063+ if ((fS == fS))
10731064 then {
10741065 let bK = aN()
10751066 let bX = fromBase58String(bK[q])
1076- let fN = invoke(bf, "unstake", [toBase58String(bX), dw], nil)
1077- if ((fN == fN))
1067+ let fI = invoke(bf, "unstake", [toBase58String(bX), dF], nil)
1068+ if ((fI == fI))
10781069 then {
1079- let cG = bT(toBase58String(do.transactionId), toBase58String(bX), dw, do.caller)
1070+ let cG = bT(toBase58String(dx.transactionId), toBase58String(bX), dF, dx.caller)
10801071 let cm = cG._1
10811072 let cn = cG._2
10821073 let ca = parseIntValue(cG._9)
10831074 let co = cG._10
1084- let fY = if (if (aL())
1075+ let fT = if (if (aL())
10851076 then true
10861077 else (ca == n))
10871078 then throw(("Get operation is blocked by admin. Status = " + toString(ca)))
10881079 else true
1089- if ((fY == fY))
1080+ if ((fT == fT))
10901081 then {
1091- let fS = invoke(aJ, "burn", [dw], [AttachedPayment(bX, dw)])
1092- if ((fS == fS))
1082+ let fN = invoke(aJ, "burn", [dF], [AttachedPayment(bX, dF)])
1083+ if ((fN == fN))
10931084 then {
1094- let fZ = eH(-(cm), -(cn), 0)
1095- let fk = fZ._1
1096- let eG = fZ._2
1097- (co ++ fk)
1085+ let fU = da(-(cm), -(cn), 0)
1086+ let ff = fU._1
1087+ let cZ = fU._2
1088+ (co ++ ff)
10981089 }
10991090 else throw("Strict value is not equal to itself.")
11001091 }
11071098
11081099
11091100
1110-@Callable(do)
1111-func unstakeAndGetNoLess (fM,ga,fV) = {
1112- let fD = if (aL())
1101+@Callable(dx)
1102+func unstakeAndGetNoLess (fH,fV,fQ) = {
1103+ let fy = if (aL())
11131104 then true
11141105 else (aY == n)
1115- let em = [if (!(fD))
1106+ let et = [if (!(fy))
11161107 then true
1117- else throw("get operation is blocked by admin"), if ((size(do.payments) == 0))
1108+ else throw("get operation is blocked by admin"), if ((size(dx.payments) == 0))
11181109 then true
11191110 else throw("no payments are expected")]
1120- if ((em == em))
1111+ if ((et == et))
11211112 then {
1122- let fN = invoke(bf, "unstake", [toBase58String(aZ), fM], nil)
1123- if ((fN == fN))
1113+ let fI = invoke(bf, "unstake", [toBase58String(aZ), fH], nil)
1114+ if ((fI == fI))
11241115 then {
1125- let cG = bT(toBase58String(do.transactionId), toBase58String(aZ), fM, do.caller)
1116+ let cG = bT(toBase58String(dx.transactionId), toBase58String(aZ), fH, dx.caller)
11261117 let cm = cG._1
11271118 let cn = cG._2
11281119 let co = cG._10
1129- let gb = [if ((cm >= ga))
1120+ let fW = [if ((cm >= fV))
11301121 then true
1131- else throw(makeString(["amount asset amount to receive is less than ", toString(ga)], "")), if ((cn >= fV))
1122+ else throw(makeString(["amount asset amount to receive is less than ", toString(fV)], "")), if ((cn >= fQ))
11321123 then true
1133- else throw(makeString(["price asset amount to receive is less than ", toString(fV)], ""))]
1134- if ((gb == gb))
1124+ else throw(makeString(["price asset amount to receive is less than ", toString(fQ)], ""))]
1125+ if ((fW == fW))
11351126 then {
1136- let fS = invoke(aJ, "burn", [fM], [AttachedPayment(aZ, fM)])
1137- if ((fS == fS))
1127+ let fN = invoke(aJ, "burn", [fH], [AttachedPayment(aZ, fH)])
1128+ if ((fN == fN))
11381129 then {
1139- let gc = eH(-(cm), -(cn), 0)
1140- let fk = gc._1
1141- let eG = gc._2
1142- (co ++ fk)
1130+ let fX = da(-(cm), -(cn), 0)
1131+ let ff = fX._1
1132+ let cZ = fX._2
1133+ (co ++ ff)
11431134 }
11441135 else throw("Strict value is not equal to itself.")
11451136 }
11521143
11531144
11541145
1155-@Callable(do)
1156-func activate (gd,ge) = if ((toString(do.caller) != toString(aJ)))
1146+@Callable(dx)
1147+func activate (fY,fZ) = if ((toString(dx.caller) != toString(aJ)))
11571148 then throw("permissions denied")
1158- else $Tuple2([StringEntry(aa(), gd), StringEntry(ab(), ge)], "success")
1149+ else $Tuple2([StringEntry(aa(), fY), StringEntry(ab(), fZ)], "success")
11591150
11601151
11611152
1162-@Callable(do)
1153+@Callable(dx)
11631154 func refreshKLp () = {
1164- let gf = valueOrElse(getInteger(ag), 0)
1165- let gg = if (((height - gf) >= aj))
1155+ let ga = valueOrElse(getInteger(ag), 0)
1156+ let gb = if (((height - ga) >= aj))
11661157 then unit
11671158 else aG(makeString([toString(aj), " blocks have not passed since the previous call"], ""))
1168- if ((gg == gg))
1159+ if ((gb == gb))
11691160 then {
1170- let gh = eH(0, 0, 0)
1171- let eO = gh._1
1172- let eG = gh._2
1173- $Tuple2(eO, toString(eG))
1161+ let gc = da(0, 0, 0)
1162+ let dh = gc._1
1163+ let cZ = gc._2
1164+ $Tuple2(dh, toString(cZ))
11741165 }
11751166 else throw("Strict value is not equal to itself.")
11761167 }
11771168
11781169
11791170
1180-@Callable(do)
1171+@Callable(dx)
11811172 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aN())
11821173
11831174
11841175
1185-@Callable(do)
1176+@Callable(dx)
11861177 func getAccBalanceWrapperREADONLY (bx) = $Tuple2(nil, bw(bx))
11871178
11881179
11891180
1190-@Callable(do)
1181+@Callable(dx)
11911182 func calcPricesWrapperREADONLY (bE,bF,bJ) = {
11921183 let bS = bI(bE, bF, bJ)
11931184 $Tuple2(nil, [toString(bS[0]), toString(bS[1]), toString(bS[2])])
11951186
11961187
11971188
1198-@Callable(do)
1189+@Callable(dx)
11991190 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
12001191
12011192
12021193
1203-@Callable(do)
1194+@Callable(dx)
12041195 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
12051196
12061197
12071198
1208-@Callable(do)
1199+@Callable(dx)
12091200 func calcPriceBigIntWrapperREADONLY (bz,bA) = $Tuple2(nil, toString(by(parseBigIntValue(bz), parseBigIntValue(bA))))
12101201
12111202
12121203
1213-@Callable(do)
1204+@Callable(dx)
12141205 func estimatePutOperationWrapperREADONLY (bU,cq,cr,cs,ct,cu,X,cv,cw) = $Tuple2(nil, cp(bU, cq, cr, cs, ct, cu, X, cv, cw))
12151206
12161207
12171208
1218-@Callable(do)
1209+@Callable(dx)
12191210 func estimateGetOperationWrapperREADONLY (bU,bV,bW,X) = {
12201211 let cG = bT(bU, bV, bW, addressFromStringValue(X))
12211212 $Tuple2(nil, $Tuple10(cG._1, cG._2, cG._3, cG._4, cG._5, cG._6, cG._7, toString(cG._8), cG._9, cG._10))
12231214
12241215
12251216
1226-@Callable(do)
1217+@Callable(dx)
12271218 func statsREADONLY () = {
12281219 let bK = aN()
12291220 let bX = fromBase58String(bK[q])
1230- let cY = bK[r]
1231- let cZ = bK[s]
1221+ let dk = bK[r]
1222+ let dl = bK[s]
12321223 let cz = bK[v]
12331224 let cA = bK[w]
12341225 let bL = parseIntValue(bK[t])
12351226 let bM = parseIntValue(bK[u])
1236- let gi = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1237- let da = bw(cY)
1238- let db = bw(cZ)
1239- let gj = if ((gi == 0))
1227+ let gd = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1228+ let ge = bw(dk)
1229+ let gf = bw(dl)
1230+ let gg = if ((gd == 0))
12401231 then [e, e, e]
1241- else bI(da, db, gi)
1232+ else bI(ge, gf, gd)
12421233 let ch = 0
1243- let gk = G(gj[1], b)
1244- let gl = G(gj[2], b)
1245- let gm = value(getInteger(aJ, au(toString(this))))
1246- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(da), toString(db), toString(gi), toString(ch), toString(gk), toString(gl), toString(gm)], j))
1234+ let gh = G(gg[1], b)
1235+ let gi = G(gg[2], b)
1236+ let gj = value(getInteger(aJ, au(toString(this))))
1237+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(ge), toString(gf), toString(gd), toString(ch), toString(gh), toString(gi), toString(gj)], j))
12471238 }
12481239
12491240
12501241
1251-@Callable(do)
1242+@Callable(dx)
12521243 func evaluatePutByAmountAssetREADONLY (cr) = {
12531244 let bK = aN()
12541245 let bX = fromBase58String(bK[q])
12591250 let bL = parseIntValue(bK[t])
12601251 let bM = parseIntValue(bK[u])
12611252 let ca = bK[p]
1262- let gi = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1263- let da = bw(cx)
1264- let db = bw(cy)
1265- let bG = D(da, bL)
1266- let bH = D(db, bM)
1267- let cg = if ((gi == 0))
1253+ let gd = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1254+ let ge = bw(cx)
1255+ let gf = bw(cy)
1256+ let bG = D(ge, bL)
1257+ let bH = D(gf, bM)
1258+ let cg = if ((gd == 0))
12681259 then e
12691260 else by(bH, bG)
12701261 let cD = D(cr, bL)
12711262 let cE = fraction(cD, cg, d)
12721263 let ct = G(cE, bM)
1273- let du = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1274- let cO = du._1
1275- let gn = du._3
1276- let cc = du._4
1277- let ce = du._5
1278- let cb = du._6
1264+ let dD = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1265+ let cO = dD._1
1266+ let gk = dD._3
1267+ let cc = dD._4
1268+ let ce = dD._5
1269+ let cb = dD._6
12791270 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cO), toString(G(cg, b)), toString(cc), toString(ce), toString(cb), ca, toString(cr), toString(ct)], j))
12801271 }
12811272
12821273
12831274
1284-@Callable(do)
1275+@Callable(dx)
12851276 func evaluatePutByPriceAssetREADONLY (ct) = {
12861277 let bK = aN()
12871278 let bX = fromBase58String(bK[q])
12921283 let bL = parseIntValue(bK[t])
12931284 let bM = parseIntValue(bK[u])
12941285 let ca = bK[p]
1295- let gi = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1296- let go = bw(cx)
1297- let gp = bw(cy)
1298- let gq = D(go, bL)
1299- let gr = D(gp, bM)
1300- let cg = if ((gi == 0))
1286+ let gd = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1287+ let gl = bw(cx)
1288+ let gm = bw(cy)
1289+ let gn = D(gl, bL)
1290+ let go = D(gm, bM)
1291+ let cg = if ((gd == 0))
13011292 then e
1302- else by(gr, gq)
1293+ else by(go, gn)
13031294 let cE = D(ct, bM)
13041295 let cD = fraction(cE, d, cg)
13051296 let cr = G(cD, bL)
1306- let du = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1307- let cO = du._1
1308- let gn = du._3
1309- let cc = du._4
1310- let ce = du._5
1311- let cb = du._6
1297+ let dD = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1298+ let cO = dD._1
1299+ let gk = dD._3
1300+ let cc = dD._4
1301+ let ce = dD._5
1302+ let cb = dD._6
13121303 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cO), toString(G(cg, b)), toString(cc), toString(ce), toString(cb), ca, toString(cr), toString(ct)], j))
13131304 }
13141305
13151306
13161307
1317-@Callable(do)
1318-func evaluateGetREADONLY (gs,gt) = {
1319- let cG = bT("", gs, gt, this)
1308+@Callable(dx)
1309+func evaluateGetREADONLY (gp,gq) = {
1310+ let cG = bT("", gp, gq, this)
13201311 let cm = cG._1
13211312 let cn = cG._2
13221313 let cc = cG._5
13281319 }
13291320
13301321
1331-@Verifier(gu)
1332-func gv () = {
1333- let gw = {
1334- let dz = eP()
1335- if ($isInstanceOf(dz, "ByteVector"))
1322+@Verifier(gr)
1323+func gs () = {
1324+ let gt = {
1325+ let dI = eK()
1326+ if ($isInstanceOf(dI, "ByteVector"))
13361327 then {
1337- let eT = dz
1338- eT
1328+ let eO = dI
1329+ eO
13391330 }
1340- else if ($isInstanceOf(dz, "Unit"))
1341- then gu.senderPublicKey
1331+ else if ($isInstanceOf(dI, "Unit"))
1332+ then gr.senderPublicKey
13421333 else throw("Match error")
13431334 }
1344- let dz = gu
1345- if ($isInstanceOf(dz, "Order"))
1335+ let dI = gr
1336+ if ($isInstanceOf(dI, "Order"))
13461337 then {
1347- let cX = dz
1348- let gx = aM()
1349- let az = cW(cX)
1350- let aA = sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
1351- let aB = sigVerify(cX.bodyBytes, cX.proofs[1], gx)
1338+ let dj = dI
1339+ let gu = aM()
1340+ let az = di(dj)
1341+ let aA = sigVerify(dj.bodyBytes, dj.proofs[0], dj.senderPublicKey)
1342+ let aB = sigVerify(dj.bodyBytes, dj.proofs[1], gu)
13521343 if (if (if (az)
13531344 then aA
13541345 else false)
13571348 then true
13581349 else ay(az, aA, aB)
13591350 }
1360- else if ($isInstanceOf(dz, "SetScriptTransaction"))
1351+ else if ($isInstanceOf(dI, "SetScriptTransaction"))
13611352 then {
1362- let eQ = dz
1363- let gy = blake2b256(value(eQ.script))
1364- let gz = fromBase64String(value(getString(aJ, aw())))
1365- let gA = scriptHash(this)
1366- if (if ((gz == gy))
1367- then (gA != gy)
1353+ let eL = dI
1354+ let gv = blake2b256(value(eL.script))
1355+ let gw = fromBase64String(value(getString(aJ, aw())))
1356+ let gx = scriptHash(this)
1357+ if (if ((gw == gv))
1358+ then (gx != gv)
13681359 else false)
13691360 then true
1370- else sigVerify(gu.bodyBytes, gu.proofs[0], gw)
1361+ else sigVerify(gr.bodyBytes, gr.proofs[0], gt)
13711362 }
1372- else sigVerify(gu.bodyBytes, gu.proofs[0], gw)
1363+ else sigVerify(gr.bodyBytes, gr.proofs[0], gt)
13731364 }
13741365
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 (H,I) = toInt(fraction(H, toBigInt(I), d))
6666
6767
6868 func J (K,L,M) = fraction(K, L, M)
6969
7070
7171 func N (H) = if ((0 > H))
7272 then -(H)
7373 else H
7474
7575
7676 func O (H) = if ((e > H))
7777 then -(H)
7878 else H
7979
8080
8181 func P () = "%s__factoryContract"
8282
8383
8484 func Q () = "%s__managerPublicKey"
8585
8686
8787 func R () = "%s__pendingManagerPublicKey"
8888
8989
9090 func S () = "%s%s__price__last"
9191
9292
9393 func T (U,V) = makeString(["%s%s%d%d__price__history", toString(U), toString(V)], j)
9494
9595
9696 func W (X,Y) = ((("%s%s%s__P__" + X) + "__") + Y)
9797
9898
9999 func Z (X,Y) = ((("%s%s%s__G__" + X) + "__") + Y)
100100
101101
102102 func aa () = "%s__amountAsset"
103103
104104
105105 func ab () = "%s__priceAsset"
106106
107107
108108 let ac = "%s__fee"
109109
110110 let ad = fraction(10, b, 10000)
111111
112112 let ae = valueOrElse(getInteger(this, ac), ad)
113113
114114 let af = makeString(["%s", "kLp"], j)
115115
116116 let ag = makeString(["%s", "kLpRefreshedHeight"], j)
117117
118118 let ah = makeString(["%s", "refreshKLpDelay"], j)
119119
120120 let ai = 30
121121
122122 let aj = valueOrElse(getInteger(this, ah), ai)
123123
124124 func ak () = "%s__factoryConfig"
125125
126126
127127 func al () = "%s%s__matcher__publicKey"
128128
129129
130130 func am (an) = (("%s%s%s__" + an) + "__mappings__poolContract2LpAsset")
131131
132132
133133 func ao (ap,aq) = (((("%d%d%s__" + ap) + "__") + aq) + "__config")
134134
135135
136136 func ar (as) = ("%s%s%s__mappings__baseAsset2internalId__" + as)
137137
138138
139139 func at () = "%s__shutdown"
140140
141141
142142 func au (av) = ("%s%s__poolWeight__" + av)
143143
144144
145145 func aw () = "%s__allowedLpScriptHash"
146146
147147
148148 let ax = "%s__feeCollectorAddress"
149149
150150 func ay (az,aA,aB) = throw(((((("order validation failed: orderValid=" + toString(az)) + " senderValid=") + toString(aA)) + " matcherValid=") + toString(aB)))
151151
152152
153153 func aC (aD,aE) = valueOrErrorMessage(getString(aD, aE), makeString(["mandatory ", toString(aD), ".", aE, " is not defined"], ""))
154154
155155
156156 func aF (aD,aE) = valueOrErrorMessage(getInteger(aD, aE), makeString(["mandatory ", toString(aD), ".", aE, " is not defined"], ""))
157157
158158
159159 func aG (aH) = throw(makeString(["lp.ride:", aH], " "))
160160
161161
162162 func aI (aH) = makeString(["lp.ride:", aH], " ")
163163
164164
165165 let aJ = addressFromStringValue(aC(this, P()))
166166
167167 let aK = addressFromStringValue(aC(aJ, ax))
168168
169169 func aL () = valueOrElse(getBoolean(aJ, at()), false)
170170
171171
172172 func aM () = fromBase58String(aC(aJ, al()))
173173
174174
175175 func aN () = {
176176 let aO = aC(this, aa())
177177 let aP = aC(this, ab())
178178 let aq = aF(aJ, ar(aP))
179179 let ap = aF(aJ, ar(aO))
180180 split(aC(aJ, ao(toString(ap), toString(aq))), j)
181181 }
182182
183183
184184 func aQ (aR) = if ((aR == i))
185185 then unit
186186 else fromBase58String(aR)
187187
188188
189189 func aS (aR) = if ((aR == unit))
190190 then i
191191 else toBase58String(value(aR))
192192
193193
194194 func aT (aU) = $Tuple7(addressFromStringValue(aU[o]), parseIntValue(aU[p]), fromBase58String(aU[q]), aQ(aU[r]), aQ(aU[s]), parseIntValue(aU[t]), parseIntValue(aU[u]))
195195
196196
197197 let aV = aT(aN())
198198
199199 let aW = aV
200200
201201 let aX = aW._1
202202
203203 let aY = aW._2
204204
205205 let aZ = aW._3
206206
207207 let ba = aW._4
208208
209209 let bb = aW._5
210210
211211 let bc = aW._6
212212
213213 let bd = aW._7
214214
215215 func be () = split(aC(aJ, ak()), j)
216216
217217
218218 let bf = valueOrErrorMessage(addressFromString(be()[B]), "incorrect staking address")
219219
220220 let bg = valueOrErrorMessage(addressFromString(be()[C]), "incorrect staking address")
221221
222222 func bh (bi,bj,bk,bl,bm,bn,bo,bp,bq,br) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bi), toString(bj), toString(bk), toString(bl), toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br)], j)
223223
224224
225225 func bs (bt,bu,bv,bl,bo,bp) = makeString(["%d%d%d%d%d%d", toString(bt), toString(bu), toString(bv), toString(bl), toString(bo), toString(bp)], j)
226226
227227
228228 func bw (bx) = if ((bx == "WAVES"))
229229 then wavesBalance(this).available
230230 else assetBalance(this, fromBase58String(bx))
231231
232232
233233 func by (bz,bA) = fraction(bz, d, bA)
234234
235235
236236 func bB (bC,bD,bE,bF) = {
237237 let bG = D(bE, bC)
238238 let bH = D(bF, bD)
239239 by(bH, bG)
240240 }
241241
242242
243243 func bI (bE,bF,bJ) = {
244244 let bK = aN()
245245 let bL = parseIntValue(bK[t])
246246 let bM = parseIntValue(bK[u])
247247 let bN = bB(bL, bM, bE, bF)
248248 let bA = D(bE, bL)
249249 let bz = D(bF, bM)
250250 let bO = D(bJ, b)
251251 let bP = by(bA, bO)
252252 let bQ = by(bz, bO)
253253 [bN, bP, bQ]
254254 }
255255
256256
257257 func bR (bE,bF,bJ) = {
258258 let bS = bI(bE, bF, bJ)
259259 [G(bS[0], b), G(bS[1], b), G(bS[2], b)]
260260 }
261261
262262
263263 func bT (bU,bV,bW,X) = {
264264 let bK = aN()
265265 let bX = bK[q]
266266 let bY = bK[r]
267267 let bZ = bK[s]
268268 let bC = parseIntValue(bK[t])
269269 let bD = parseIntValue(bK[u])
270270 let ca = bK[p]
271271 let cb = valueOrErrorMessage(assetInfo(fromBase58String(bX)), (("Asset " + bX) + " doesn't exist")).quantity
272272 if ((bX != bV))
273273 then throw("Invalid asset passed.")
274274 else {
275275 let cc = bw(bY)
276276 let cd = D(cc, bC)
277277 let ce = bw(bZ)
278278 let cf = D(ce, bD)
279279 let cg = by(cf, cd)
280280 let ch = G(cg, b)
281281 let ci = D(bW, b)
282282 let cj = D(cb, b)
283283 let ck = fraction(cd, ci, cj)
284284 let cl = fraction(cf, ci, cj)
285285 let cm = G(ck, bC)
286286 let cn = G(cl, bD)
287287 let co = if ((bU == ""))
288288 then nil
289289 else [ScriptTransfer(X, cm, if ((bY == "WAVES"))
290290 then unit
291291 else fromBase58String(bY)), ScriptTransfer(X, cn, if ((bZ == "WAVES"))
292292 then unit
293293 else fromBase58String(bZ)), StringEntry(Z(toString(X), bU), bs(cm, cn, bW, ch, height, lastBlock.timestamp)), IntegerEntry(S(), ch), IntegerEntry(T(height, lastBlock.timestamp), ch)]
294294 $Tuple10(cm, cn, bY, bZ, cc, ce, cb, cg, ca, co)
295295 }
296296 }
297297
298298
299299 func cp (bU,cq,cr,cs,ct,cu,X,cv,cw) = {
300300 let bK = aN()
301301 let bX = fromBase58String(bK[q])
302302 let cx = bK[r]
303303 let cy = bK[s]
304304 let cz = bK[v]
305305 let cA = bK[w]
306306 let bL = parseIntValue(bK[t])
307307 let bM = parseIntValue(bK[u])
308308 let ca = bK[p]
309309 let cb = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
310310 let cB = toBase58String(valueOrElse(cs, fromBase58String("WAVES")))
311311 let cC = toBase58String(valueOrElse(cu, fromBase58String("WAVES")))
312312 if (if ((cx != cB))
313313 then true
314314 else (cy != cC))
315315 then throw("Invalid amt or price asset passed.")
316316 else {
317317 let cc = if (cv)
318318 then bw(cx)
319319 else (bw(cx) - cr)
320320 let ce = if (cv)
321321 then bw(cy)
322322 else (bw(cy) - ct)
323323 let cD = D(cr, bL)
324324 let cE = D(ct, bM)
325325 let cF = by(cE, cD)
326326 let cd = D(cc, bL)
327327 let cf = D(ce, bM)
328328 let cG = if ((cb == 0))
329329 then {
330330 let cg = e
331331 let cH = e
332332 let bO = pow((cD * cE), 0, toBigInt(5), 1, 0, DOWN)
333333 $Tuple5(G(bO, b), G(cD, bL), G(cE, bM), by((cf + cE), (cd + cD)), cH)
334334 }
335335 else {
336336 let cg = by(cf, cd)
337337 let cH = fraction(O((cg - cF)), d, cg)
338338 let cI = D(cq, b)
339339 if (if ((cg != e))
340340 then (cH > cI)
341341 else false)
342342 then throw(((("Price slippage " + toString(cH)) + " exceeded the passed limit of ") + toString(cI)))
343343 else {
344344 let cj = D(cb, b)
345345 let cJ = fraction(cD, cg, d)
346346 let cK = fraction(cE, d, cg)
347347 let cL = if ((cJ > cE))
348348 then $Tuple2(cK, cE)
349349 else $Tuple2(cD, cJ)
350350 let cM = cL._1
351351 let cN = cL._2
352352 let bO = fraction(cj, cN, cf)
353353 $Tuple5(G(bO, b), G(cM, bL), G(cN, bM), cg, cH)
354354 }
355355 }
356356 let cO = cG._1
357357 let cP = cG._2
358358 let cQ = cG._3
359359 let ch = G(cG._4, b)
360360 let cR = G(cG._5, b)
361361 if ((0 >= cO))
362362 then throw("Invalid calculations. LP calculated is less than zero.")
363363 else {
364364 let cS = if (!(cw))
365365 then 0
366366 else cO
367367 let cT = (cr - cP)
368368 let cU = (ct - cQ)
369369 let cV = [IntegerEntry(S(), ch), IntegerEntry(T(height, lastBlock.timestamp), ch), StringEntry(W(X, bU), bh(cP, cQ, cS, ch, cq, cR, height, lastBlock.timestamp, cT, cU))]
370370 $Tuple13(cO, cS, ch, cc, ce, cb, bX, ca, cV, cT, cU, cs, cu)
371371 }
372372 }
373373 }
374374
375375
376-func cW (cX) = {
376+func cW (cX,cY,cb) = {
377+ let cZ = fraction(pow((cX * cY), 0, toBigInt(5), 1, 0, DOWN), d, cb)
378+ cZ
379+ }
380+
381+
382+func da (db,dc,dd) = {
383+ let de = (bw(aS(ba)) + db)
384+ let df = (bw(aS(bb)) + dc)
385+ let dg = (value(assetInfo(aZ)).quantity + dd)
386+ let cZ = cW(toBigInt(de), toBigInt(df), toBigInt(dg))
387+ let dh = [IntegerEntry(ag, height), StringEntry(af, toString(cZ))]
388+ $Tuple2(dh, cZ)
389+ }
390+
391+
392+func di (dj) = {
377393 let bK = aN()
378- let cY = bK[r]
379- let cZ = bK[s]
394+ let dk = bK[r]
395+ let dl = bK[s]
380396 let ca = parseIntValue(bK[p])
381397 let bL = parseIntValue(bK[t])
382398 let bM = parseIntValue(bK[u])
383- let da = bw(cY)
384- let db = bw(cZ)
385- let cg = if ((cX.orderType == Buy))
386- then bB(bL, bM, (da + cX.amount), db)
387- else bB(bL, bM, (da - cX.amount), db)
388- let ch = G(cg, b)
399+ let dm = dj.amount
400+ let dn = fraction(dj.amount, dj.price, b)
401+ let do = if ((dj.orderType == Buy))
402+ then $Tuple2(dm, -(dn))
403+ else $Tuple2(-(dm), dn)
404+ let db = do._1
405+ let dc = do._2
389406 if (if (if (aL())
390407 then true
391408 else (ca == m))
392409 then true
393410 else (ca == n))
394411 then throw("Exchange operations disabled")
395412 else {
396- let dc = cX.assetPair.amountAsset
397- let dd = if ((dc == unit))
398- then "WAVES"
399- else toBase58String(value(dc))
400- let de = cX.assetPair.priceAsset
401- let df = if ((de == unit))
402- then "WAVES"
403- else toBase58String(value(de))
404- if (if ((dd != cY))
413+ let dp = aS(value(dj.assetPair.amountAsset))
414+ let dq = aS(value(dj.assetPair.priceAsset))
415+ if (if ((dp != dk))
405416 then true
406- else (df != cZ))
417+ else (dq != dl))
407418 then throw("Wrong order assets.")
408419 else {
409- let dg = cX.price
410- let dh = fraction(b, bM, bL)
411- let di = J(dg, b, dh)
412- let dj = if ((cX.orderType == Buy))
413- then (ch >= di)
414- else (di >= ch)
415- let dk = valueOrErrorMessage(getInteger(this, af), aI("kLp is required"))
416- let dl = 0
417- let dm = (dl > dk)
418- dm
420+ let dr = valueOrErrorMessage(parseBigInt(valueOrErrorMessage(getString(this, af), aI("kLp is required"))), aI("invalid kLp"))
421+ let ds = da(db, dc, 0)
422+ let dt = ds._1
423+ let du = ds._2
424+ let dv = (du > dr)
425+ dv
419426 }
420427 }
421428 }
422429
423430
424-func dn (do) = if ((size(do.payments) != 1))
431+func dw (dx) = if ((size(dx.payments) != 1))
425432 then throw("exactly 1 payment is expected")
426433 else {
427- let dp = value(do.payments[0])
428- let bV = value(dp.assetId)
429- let dq = dp.amount
430- let cG = bT(toBase58String(do.transactionId), toBase58String(bV), dq, do.caller)
434+ let dy = value(dx.payments[0])
435+ let bV = value(dy.assetId)
436+ let dz = dy.amount
437+ let cG = bT(toBase58String(dx.transactionId), toBase58String(bV), dz, dx.caller)
431438 let cm = cG._1
432439 let cn = cG._2
433440 let ca = parseIntValue(cG._9)
434441 let co = cG._10
435442 if (if (aL())
436443 then true
437444 else (ca == n))
438445 then throw(("Get operation is blocked by admin. Status = " + toString(ca)))
439- else $Tuple5(cm, cn, dq, bV, co)
446+ else $Tuple5(cm, cn, dz, bV, co)
440447 }
441448
442449
443-func dr (do,cq,cw) = if ((size(do.payments) != 2))
450+func dA (dx,cq,cw) = if ((size(dx.payments) != 2))
444451 then throw("exactly 2 payments are expected")
445452 else {
446- let ds = value(do.payments[0])
447- let dt = value(do.payments[1])
448- let du = cp(toBase58String(do.transactionId), cq, ds.amount, ds.assetId, dt.amount, dt.assetId, toString(do.caller), false, cw)
449- let ca = parseIntValue(du._8)
453+ let dB = value(dx.payments[0])
454+ let dC = value(dx.payments[1])
455+ let dD = cp(toBase58String(dx.transactionId), cq, dB.amount, dB.assetId, dC.amount, dC.assetId, toString(dx.caller), false, cw)
456+ let ca = parseIntValue(dD._8)
450457 if (if (if (aL())
451458 then true
452459 else (ca == l))
453460 then true
454461 else (ca == n))
455462 then throw(("Put operation is blocked by admin. Status = " + toString(ca)))
456- else du
463+ else dD
457464 }
458465
459466
460-func dv (dw) = {
461- let dx = invoke(aJ, "emit", [dw], nil)
462- if ((dx == dx))
467+func dE (dF) = {
468+ let dG = invoke(aJ, "emit", [dF], nil)
469+ if ((dG == dG))
463470 then {
464- let dy = {
465- let dz = dx
466- if ($isInstanceOf(dz, "Address"))
471+ let dH = {
472+ let dI = dG
473+ if ($isInstanceOf(dI, "Address"))
467474 then {
468- let dA = dz
469- invoke(dA, "emit", [dw], nil)
475+ let dJ = dI
476+ invoke(dJ, "emit", [dF], nil)
470477 }
471478 else unit
472479 }
473- if ((dy == dy))
474- then dw
480+ if ((dH == dH))
481+ then dF
475482 else throw("Strict value is not equal to itself.")
476483 }
477484 else throw("Strict value is not equal to itself.")
478485 }
479486
480487
481-func dB (dw) = {
482- let dC = fraction(dw, ae, b)
483- $Tuple2((dw - dC), dC)
488+func dK (dF) = {
489+ let dL = fraction(dF, ae, b)
490+ $Tuple2((dF - dL), dL)
484491 }
485492
486493
487-func dD (dE,dF,X,Y) = {
488- let dG = (Y == unit)
489- let dH = bw(aS(ba))
490- let dI = bw(aS(bb))
491- let dJ = if ((dF == ba))
494+func dM (dN,dO,X,Y) = {
495+ let dP = (Y == unit)
496+ let dQ = bw(aS(ba))
497+ let dR = bw(aS(bb))
498+ let dS = if ((dO == ba))
492499 then true
493- else if ((dF == bb))
500+ else if ((dO == bb))
494501 then false
495502 else aG("invalid asset")
496- let dK = if (dG)
497- then $Tuple2(dH, dI)
498- else if (dJ)
499- then $Tuple2((dH - dE), dI)
500- else $Tuple2(dH, (dI - dE))
501- let dL = dK._1
502- let dM = dK._2
503- let dN = if (dJ)
504- then $Tuple2(dE, 0)
505- else $Tuple2(0, dE)
506- let dO = dN._1
507- let dP = dN._2
508- let dQ = dB(dO)._1
509- let dR = dB(dP)._1
510- let dS = dB(dE)
511- let dT = dS._1
512- let dC = dS._2
513- let dU = (dL + dQ)
514- let dV = (dM + dR)
515- let dW = by(D(dV, bd), D(dU, bc))
516- let dX = G(dW, b)
517- let dY = if (dJ)
518- then dL
519- else dM
520- let dZ = toBigInt(dY)
521- let ea = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
522- let eb = if ((ea > f))
503+ let dT = if (dP)
504+ then $Tuple2(dQ, dR)
505+ else if (dS)
506+ then $Tuple2((dQ - dN), dR)
507+ else $Tuple2(dQ, (dR - dN))
508+ let dU = dT._1
509+ let dV = dT._2
510+ let dW = if (dS)
511+ then $Tuple2(dN, 0)
512+ else $Tuple2(0, dN)
513+ let dX = dW._1
514+ let dY = dW._2
515+ let dm = dK(dX)._1
516+ let dn = dK(dY)._1
517+ let dZ = dK(dN)
518+ let ea = dZ._1
519+ let dL = dZ._2
520+ let eb = (dU + dm)
521+ let ec = (dV + dn)
522+ let ed = by(D(ec, bd), D(eb, bc))
523+ let ee = G(ed, b)
524+ let ef = if (dS)
525+ then dU
526+ else dV
527+ let eg = toBigInt(ef)
528+ let eh = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
529+ let ei = if ((eh > f))
523530 then true
524531 else aG("initial deposit requires all coins")
525- if ((eb == eb))
532+ if ((ei == ei))
526533 then {
527- let ec = toBigInt(dT)
528- let ed = max([0, toInt(((ea * (sqrtBigInt((d + ((ec * d) / dZ)), 18, 18, DOWN) - d)) / d))])
529- let cV = if (dG)
534+ let ej = toBigInt(ea)
535+ let ek = max([0, toInt(((eh * (sqrtBigInt((d + ((ej * d) / eg)), 18, 18, DOWN) - d)) / d))])
536+ let cV = if (dP)
530537 then nil
531- else [IntegerEntry(S(), dX), IntegerEntry(T(height, lastBlock.timestamp), dX), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bh(dO, dP, ed, dX, 0, 0, height, lastBlock.timestamp, 0, 0))]
532- let ee = by(D(dM, bd), D(dL, bc))
533- let ef = G(ee, b)
534- let eg = {
535- let eh = if (dJ)
536- then $Tuple2(dO, dL)
537- else $Tuple2(dP, dM)
538- let dw = eh._1
539- let ei = eh._2
540- let ej = toInt(fraction(ea, toBigInt((dw / 2)), toBigInt(ei)))
541- fraction((ed - ej), b, ej)
538+ else [IntegerEntry(S(), ee), IntegerEntry(T(height, lastBlock.timestamp), ee), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bh(dX, dY, ek, ee, 0, 0, height, lastBlock.timestamp, 0, 0))]
539+ let el = by(D(dV, bd), D(dU, bc))
540+ let em = G(el, b)
541+ let en = {
542+ let eo = if (dS)
543+ then $Tuple2(dX, dU)
544+ else $Tuple2(dY, dV)
545+ let dF = eo._1
546+ let ep = eo._2
547+ let eq = toInt(fraction(eh, toBigInt((dF / 2)), toBigInt(ep)))
548+ fraction((ek - eq), b, eq)
542549 }
543- $Tuple5(ed, cV, dC, eg, dJ)
550+ $Tuple5(ek, cV, dL, en, dS)
544551 }
545552 else throw("Strict value is not equal to itself.")
546553 }
547554
548555
549-func ek (el,dT,dF,X,Y) = {
550- let dG = (Y == unit)
551- let em = [if ((dF == aZ))
556+func er (es,ea,dO,X,Y) = {
557+ let dP = (Y == unit)
558+ let et = [if ((dO == aZ))
552559 then true
553560 else aG("invalid lp asset")]
554- if ((em == em))
561+ if ((et == et))
555562 then {
556- let en = if ((el == ba))
563+ let eu = if ((es == ba))
557564 then true
558- else if ((el == bb))
565+ else if ((es == bb))
559566 then false
560567 else aG("invalid asset")
561- let eo = if (en)
568+ let ev = if (eu)
562569 then toBigInt(bw(aS(ba)))
563570 else toBigInt(bw(aS(bb)))
564- let ep = bw(aS(ba))
565- let eq = bw(aS(bb))
566- let er = if (en)
567- then ep
568- else eq
569- let es = toBigInt(er)
570- let ea = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
571- let et = toBigInt(dT)
572- let eu = max([0, toInt(((eo * (d - pow((d - ((et * d) / ea)), 18, h, 0, 18, DOWN))) / d))])
573- let ev = dB(eu)
574- let ew = ev._1
575- let dC = ev._2
576- let ex = if (en)
577- then $Tuple4(ew, 0, (ep - eu), eq)
578- else $Tuple4(0, ew, ep, (eq - eu))
579- let ey = ex._1
580- let ez = ex._2
581- let eA = ex._3
582- let eB = ex._4
583- let dW = by(D(eB, bd), D(eA, bc))
584- let dX = G(dW, b)
585- let cV = if (dG)
571+ let ew = bw(aS(ba))
572+ let ex = bw(aS(bb))
573+ let ey = if (eu)
574+ then ew
575+ else ex
576+ let ez = toBigInt(ey)
577+ let eh = toBigInt(valueOrErrorMessage(assetInfo(aZ), (("asset " + toBase58String(aZ)) + " doesn't exist")).quantity)
578+ let eA = toBigInt(ea)
579+ let eB = max([0, toInt(((ev * (d - pow((d - ((eA * d) / eh)), 18, h, 0, 18, DOWN))) / d))])
580+ let eC = dK(eB)
581+ let eD = eC._1
582+ let dL = eC._2
583+ let eE = if (eu)
584+ then $Tuple4(eD, 0, (ew - eB), ex)
585+ else $Tuple4(0, eD, ew, (ex - eB))
586+ let eF = eE._1
587+ let eG = eE._2
588+ let eH = eE._3
589+ let eI = eE._4
590+ let ed = by(D(eI, bd), D(eH, bc))
591+ let ee = G(ed, b)
592+ let cV = if (dP)
586593 then nil
587- else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bs(ey, ez, dT, dX, height, lastBlock.timestamp)), IntegerEntry(S(), dX), IntegerEntry(T(height, lastBlock.timestamp), dX)]
588- let ee = by(D(eq, bd), D(ep, bc))
589- let ef = G(ee, b)
590- let eg = {
591- let eC = (toInt(fraction(eo, et, ea)) * 2)
592- fraction((ew - eC), b, eC)
594+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bs(eF, eG, ea, ee, height, lastBlock.timestamp)), IntegerEntry(S(), ee), IntegerEntry(T(height, lastBlock.timestamp), ee)]
595+ let el = by(D(ex, bd), D(ew, bc))
596+ let em = G(el, b)
597+ let en = {
598+ let eJ = (toInt(fraction(ev, eA, eh)) * 2)
599+ fraction((eD - eJ), b, eJ)
593600 }
594- $Tuple5(ew, cV, dC, eg, en)
601+ $Tuple5(eD, cV, dL, en, eu)
595602 }
596603 else throw("Strict value is not equal to itself.")
597604 }
598605
599606
600-func eD (eE,eF,cb) = {
601- let eG = fraction(pow((eE * eF), 0, toBigInt(5), 1, 0, DOWN), d, cb)
602- eG
603- }
604-
605-
606-func eH (eI,eJ,eK) = {
607- let eL = (bw(aS(ba)) + eI)
608- let eM = (bw(aS(bb)) + eJ)
609- let eN = (value(assetInfo(aZ)).quantity + eK)
610- let eG = eD(toBigInt(eL), toBigInt(eM), toBigInt(eN))
611- let eO = [IntegerEntry(ag, height), StringEntry(af, toString(eG))]
612- $Tuple2(eO, eG)
613- }
614-
615-
616-func eP () = {
617- let dz = getString(Q())
618- if ($isInstanceOf(dz, "String"))
607+func eK () = {
608+ let dI = getString(Q())
609+ if ($isInstanceOf(dI, "String"))
619610 then {
620- let eQ = dz
621- fromBase58String(eQ)
611+ let eL = dI
612+ fromBase58String(eL)
622613 }
623- else if ($isInstanceOf(dz, "Unit"))
614+ else if ($isInstanceOf(dI, "Unit"))
624615 then unit
625616 else throw("Match error")
626617 }
627618
628619
629-func eR () = {
630- let dz = getString(R())
631- if ($isInstanceOf(dz, "String"))
620+func eM () = {
621+ let dI = getString(R())
622+ if ($isInstanceOf(dI, "String"))
632623 then {
633- let eQ = dz
634- fromBase58String(eQ)
624+ let eL = dI
625+ fromBase58String(eL)
635626 }
636- else if ($isInstanceOf(dz, "Unit"))
627+ else if ($isInstanceOf(dI, "Unit"))
637628 then unit
638629 else throw("Match error")
639630 }
640631
641632
642-func eS (do) = {
643- let dz = eP()
644- if ($isInstanceOf(dz, "ByteVector"))
633+func eN (dx) = {
634+ let dI = eK()
635+ if ($isInstanceOf(dI, "ByteVector"))
645636 then {
646- let eT = dz
647- (do.callerPublicKey == eT)
637+ let eO = dI
638+ (dx.callerPublicKey == eO)
648639 }
649- else if ($isInstanceOf(dz, "Unit"))
650- then (do.caller == this)
640+ else if ($isInstanceOf(dI, "Unit"))
641+ then (dx.caller == this)
651642 else throw("Match error")
652643 }
653644
654645
655-func eU (do) = {
656- let eV = throw("Permission denied")
657- let dz = eP()
658- if ($isInstanceOf(dz, "ByteVector"))
646+func eP (dx) = {
647+ let eQ = throw("Permission denied")
648+ let dI = eK()
649+ if ($isInstanceOf(dI, "ByteVector"))
659650 then {
660- let eT = dz
661- if ((do.callerPublicKey == eT))
651+ let eO = dI
652+ if ((dx.callerPublicKey == eO))
662653 then true
663- else eV
654+ else eQ
664655 }
665- else if ($isInstanceOf(dz, "Unit"))
666- then if ((do.caller == this))
656+ else if ($isInstanceOf(dI, "Unit"))
657+ then if ((dx.caller == this))
667658 then true
668- else eV
659+ else eQ
669660 else throw("Match error")
670661 }
671662
672663
673-@Callable(do)
674-func setManager (eW) = {
675- let eX = eU(do)
676- if ((eX == eX))
664+@Callable(dx)
665+func setManager (eR) = {
666+ let eS = eP(dx)
667+ if ((eS == eS))
677668 then {
678- let eY = fromBase58String(eW)
679- if ((eY == eY))
680- then [StringEntry(R(), eW)]
669+ let eT = fromBase58String(eR)
670+ if ((eT == eT))
671+ then [StringEntry(R(), eR)]
681672 else throw("Strict value is not equal to itself.")
682673 }
683674 else throw("Strict value is not equal to itself.")
684675 }
685676
686677
687678
688-@Callable(do)
679+@Callable(dx)
689680 func confirmManager () = {
690- let eZ = eR()
691- let fa = if (isDefined(eZ))
681+ let eU = eM()
682+ let eV = if (isDefined(eU))
692683 then true
693684 else throw("No pending manager")
694- if ((fa == fa))
685+ if ((eV == eV))
695686 then {
696- let fb = if ((do.callerPublicKey == value(eZ)))
687+ let eW = if ((dx.callerPublicKey == value(eU)))
697688 then true
698689 else throw("You are not pending manager")
699- if ((fb == fb))
700- then [StringEntry(Q(), toBase58String(value(eZ))), DeleteEntry(R())]
690+ if ((eW == eW))
691+ then [StringEntry(Q(), toBase58String(value(eU))), DeleteEntry(R())]
701692 else throw("Strict value is not equal to itself.")
702693 }
703694 else throw("Strict value is not equal to itself.")
704695 }
705696
706697
707698
708-@Callable(do)
709-func put (cq,fc) = if ((0 > cq))
699+@Callable(dx)
700+func put (cq,eX) = if ((0 > cq))
710701 then throw("Invalid slippageTolerance passed")
711702 else {
712- let du = dr(do, cq, true)
713- let cS = du._2
714- let bX = du._7
715- let co = du._9
716- let cT = du._10
717- let cU = du._11
718- let fd = du._12
719- let fe = du._13
720- let dx = invoke(aJ, "emit", [cS], nil)
721- if ((dx == dx))
703+ let dD = dA(dx, cq, true)
704+ let cS = dD._2
705+ let bX = dD._7
706+ let co = dD._9
707+ let cT = dD._10
708+ let cU = dD._11
709+ let eY = dD._12
710+ let eZ = dD._13
711+ let dG = invoke(aJ, "emit", [cS], nil)
712+ if ((dG == dG))
722713 then {
723- let dy = {
724- let dz = dx
725- if ($isInstanceOf(dz, "Address"))
714+ let dH = {
715+ let dI = dG
716+ if ($isInstanceOf(dI, "Address"))
726717 then {
727- let dA = dz
728- invoke(dA, "emit", [cS], nil)
718+ let dJ = dI
719+ invoke(dJ, "emit", [cS], nil)
729720 }
730721 else unit
731722 }
732- if ((dy == dy))
723+ if ((dH == dH))
733724 then {
734- let ff = if ((cT > 0))
735- then invoke(bg, "put", nil, [AttachedPayment(fd, cT)])
725+ let fa = if ((cT > 0))
726+ then invoke(bg, "put", nil, [AttachedPayment(eY, cT)])
736727 else nil
737- if ((ff == ff))
728+ if ((fa == fa))
738729 then {
739- let fg = if ((cU > 0))
740- then invoke(bg, "put", nil, [AttachedPayment(fe, cU)])
730+ let fb = if ((cU > 0))
731+ then invoke(bg, "put", nil, [AttachedPayment(eZ, cU)])
741732 else nil
742- if ((fg == fg))
733+ if ((fb == fb))
743734 then {
744- let fh = if (fc)
735+ let fc = if (eX)
745736 then {
746- let fi = invoke(bf, "stake", nil, [AttachedPayment(bX, cS)])
747- if ((fi == fi))
737+ let fd = invoke(bf, "stake", nil, [AttachedPayment(bX, cS)])
738+ if ((fd == fd))
748739 then nil
749740 else throw("Strict value is not equal to itself.")
750741 }
751- else [ScriptTransfer(do.caller, cS, bX)]
752- let fj = eH(0, 0, 0)
753- let fk = fj._1
754- let eG = fj._2
755- ((co ++ fh) ++ fk)
742+ else [ScriptTransfer(dx.caller, cS, bX)]
743+ let fe = da(0, 0, 0)
744+ let ff = fe._1
745+ let cZ = fe._2
746+ ((co ++ fc) ++ ff)
756747 }
757748 else throw("Strict value is not equal to itself.")
758749 }
759750 else throw("Strict value is not equal to itself.")
760751 }
761752 else throw("Strict value is not equal to itself.")
762753 }
763754 else throw("Strict value is not equal to itself.")
764755 }
765756
766757
767758
768-@Callable(do)
769-func putForFree (fl) = if ((0 > fl))
759+@Callable(dx)
760+func putForFree (fg) = if ((0 > fg))
770761 then throw("Invalid value passed")
771762 else {
772- let du = dr(do, fl, false)
773- let co = du._9
774- let fm = eH(0, 0, 0)
775- let fk = fm._1
776- let eG = fm._2
777- (co ++ fk)
763+ let dD = dA(dx, fg, false)
764+ let co = dD._9
765+ let fh = da(0, 0, 0)
766+ let ff = fh._1
767+ let cZ = fh._2
768+ (co ++ ff)
778769 }
779770
780771
781772
782-@Callable(do)
783-func putOneTkn (fn,fo) = {
784- let fp = {
785- let fq = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
786- if ($isInstanceOf(fq, "Boolean"))
787- then fq
788- else throw(($getType(fq) + " couldn't be cast to Boolean"))
773+@Callable(dx)
774+func putOneTkn (fi,fj) = {
775+ let fk = {
776+ let fl = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
777+ if ($isInstanceOf(fl, "Boolean"))
778+ then fl
779+ else throw(($getType(fl) + " couldn't be cast to Boolean"))
789780 }
790- let fr = if (if (if (aL())
781+ let fm = if (if (if (aL())
791782 then true
792783 else (aY == l))
793784 then true
794785 else (aY == n))
795786 then true
796- else fp
797- let em = [if (if (!(fr))
787+ else fk
788+ let et = [if (if (!(fm))
798789 then true
799- else eS(do))
790+ else eN(dx))
800791 then true
801- else aG("put operation is blocked by admin"), if ((size(do.payments) == 1))
792+ else aG("put operation is blocked by admin"), if ((size(dx.payments) == 1))
802793 then true
803794 else aG("exactly 1 payment are expected")]
804- if ((em == em))
795+ if ((et == et))
805796 then {
806- let fs = do.payments[0]
807- let dF = fs.assetId
808- let dE = fs.amount
809- let X = do.caller
810- let Y = do.transactionId
811- let ft = dD(dE, dF, X, Y)
812- let fu = ft._1
813- let cV = ft._2
814- let dC = ft._3
815- let fv = ft._4
816- let dJ = ft._5
817- let fw = if (if ((fn > 0))
818- then (fn > fu)
797+ let fn = dx.payments[0]
798+ let dO = fn.assetId
799+ let dN = fn.amount
800+ let X = dx.caller
801+ let Y = dx.transactionId
802+ let fo = dM(dN, dO, X, Y)
803+ let fp = fo._1
804+ let cV = fo._2
805+ let dL = fo._3
806+ let fq = fo._4
807+ let dS = fo._5
808+ let fr = if (if ((fi > 0))
809+ then (fi > fp)
819810 else false)
820- then aG(makeString(["amount to receive is less than ", toString(fn)], ""))
821- else fu
822- let dx = dv(fw)
823- if ((dx == dx))
811+ then aG(makeString(["amount to receive is less than ", toString(fi)], ""))
812+ else fp
813+ let dG = dE(fr)
814+ if ((dG == dG))
824815 then {
825- let fh = if (fo)
816+ let fc = if (fj)
826817 then {
827- let fx = invoke(bf, "stake", nil, [AttachedPayment(aZ, fw)])
828- if ((fx == fx))
818+ let fs = invoke(bf, "stake", nil, [AttachedPayment(aZ, fr)])
819+ if ((fs == fs))
829820 then nil
830821 else throw("Strict value is not equal to itself.")
831822 }
832- else [ScriptTransfer(do.caller, fw, aZ)]
833- let fy = if ((dC > 0))
834- then [ScriptTransfer(aK, dC, dF)]
823+ else [ScriptTransfer(dx.caller, fr, aZ)]
824+ let ft = if ((dL > 0))
825+ then [ScriptTransfer(aK, dL, dO)]
835826 else nil
836- let fz = if ((this == aK))
827+ let fu = if ((this == aK))
837828 then $Tuple2(0, 0)
838- else if (dJ)
839- then $Tuple2(-(dC), 0)
840- else $Tuple2(0, -(dC))
841- let eI = fz._1
842- let eJ = fz._2
843- let fA = eH(eI, eJ, 0)
844- let fk = fA._1
845- let eG = fA._2
846- $Tuple2((((cV ++ fh) ++ fy) ++ fk), fw)
829+ else if (dS)
830+ then $Tuple2(-(dL), 0)
831+ else $Tuple2(0, -(dL))
832+ let db = fu._1
833+ let dc = fu._2
834+ let fv = da(db, dc, 0)
835+ let ff = fv._1
836+ let cZ = fv._2
837+ $Tuple2((((cV ++ fc) ++ ft) ++ ff), fr)
847838 }
848839 else throw("Strict value is not equal to itself.")
849840 }
850841 else throw("Strict value is not equal to itself.")
851842 }
852843
853844
854845
855-@Callable(do)
856-func putOneTknREADONLY (dF,dE) = {
857- let fB = dD(dE, aQ(dF), unit, unit)
858- let fu = fB._1
859- let cV = fB._2
860- let dC = fB._3
861- let fv = fB._4
862- let dJ = fB._5
863- $Tuple2(nil, $Tuple3(fu, dC, fv))
846+@Callable(dx)
847+func putOneTknREADONLY (dO,dN) = {
848+ let fw = dM(dN, aQ(dO), unit, unit)
849+ let fp = fw._1
850+ let cV = fw._2
851+ let dL = fw._3
852+ let fq = fw._4
853+ let dS = fw._5
854+ $Tuple2(nil, $Tuple3(fp, dL, fq))
864855 }
865856
866857
867858
868-@Callable(do)
869-func getOneTkn (fC,fn) = {
870- let fp = {
871- let fq = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
872- if ($isInstanceOf(fq, "Boolean"))
873- then fq
874- else throw(($getType(fq) + " couldn't be cast to Boolean"))
859+@Callable(dx)
860+func getOneTkn (fx,fi) = {
861+ let fk = {
862+ let fl = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
863+ if ($isInstanceOf(fl, "Boolean"))
864+ then fl
865+ else throw(($getType(fl) + " couldn't be cast to Boolean"))
875866 }
876- let fD = if (if (aL())
867+ let fy = if (if (aL())
877868 then true
878869 else (aY == n))
879870 then true
880- else fp
881- let em = [if (if (!(fD))
871+ else fk
872+ let et = [if (if (!(fy))
882873 then true
883- else eS(do))
874+ else eN(dx))
884875 then true
885- else aG("get operation is blocked by admin"), if ((size(do.payments) == 1))
876+ else aG("get operation is blocked by admin"), if ((size(dx.payments) == 1))
886877 then true
887878 else aG("exactly 1 payment are expected")]
888- if ((em == em))
879+ if ((et == et))
889880 then {
890- let el = aQ(fC)
891- let fs = do.payments[0]
892- let dF = fs.assetId
893- let dT = fs.amount
894- let X = do.caller
895- let Y = do.transactionId
896- let fE = ek(el, dT, dF, X, Y)
897- let fF = fE._1
898- let cV = fE._2
899- let dC = fE._3
900- let fv = fE._4
901- let en = fE._5
902- let dw = if (if ((fn > 0))
903- then (fn > fF)
881+ let es = aQ(fx)
882+ let fn = dx.payments[0]
883+ let dO = fn.assetId
884+ let ea = fn.amount
885+ let X = dx.caller
886+ let Y = dx.transactionId
887+ let fz = er(es, ea, dO, X, Y)
888+ let fA = fz._1
889+ let cV = fz._2
890+ let dL = fz._3
891+ let fq = fz._4
892+ let eu = fz._5
893+ let dF = if (if ((fi > 0))
894+ then (fi > fA)
904895 else false)
905- then aG(makeString(["amount to receive is less than ", toString(fn)], ""))
906- else fF
907- let fG = invoke(aJ, "burn", [dT], [AttachedPayment(dF, dT)])
908- if ((fG == fG))
896+ then aG(makeString(["amount to receive is less than ", toString(fi)], ""))
897+ else fA
898+ let fB = invoke(aJ, "burn", [ea], [AttachedPayment(dO, ea)])
899+ if ((fB == fB))
909900 then {
910- let fH = [ScriptTransfer(X, dw, el)]
911- let fy = if ((dC > 0))
912- then [ScriptTransfer(aK, dC, el)]
901+ let fC = [ScriptTransfer(X, dF, es)]
902+ let ft = if ((dL > 0))
903+ then [ScriptTransfer(aK, dL, es)]
913904 else nil
914- let fI = {
915- let fJ = if ((this == aK))
905+ let fD = {
906+ let fE = if ((this == aK))
916907 then 0
917- else dC
918- if (en)
919- then $Tuple2(-((dw + fJ)), 0)
920- else $Tuple2(0, -((dw + fJ)))
908+ else dL
909+ if (eu)
910+ then $Tuple2(-((dF + fE)), 0)
911+ else $Tuple2(0, -((dF + fE)))
921912 }
922- let eI = fI._1
923- let eJ = fI._2
924- let fK = eH(eI, eJ, 0)
925- let fk = fK._1
926- let eG = fK._2
927- $Tuple2((((cV ++ fH) ++ fy) ++ fk), dw)
913+ let db = fD._1
914+ let dc = fD._2
915+ let fF = da(db, dc, 0)
916+ let ff = fF._1
917+ let cZ = fF._2
918+ $Tuple2((((cV ++ fC) ++ ft) ++ ff), dF)
928919 }
929920 else throw("Strict value is not equal to itself.")
930921 }
931922 else throw("Strict value is not equal to itself.")
932923 }
933924
934925
935926
936-@Callable(do)
937-func getOneTknREADONLY (el,dT) = {
938- let fL = ek(aQ(el), dT, aZ, unit, unit)
939- let fF = fL._1
940- let cV = fL._2
941- let dC = fL._3
942- let fv = fL._4
943- let en = fL._5
944- $Tuple2(nil, $Tuple3(fF, dC, fv))
927+@Callable(dx)
928+func getOneTknREADONLY (es,ea) = {
929+ let fG = er(aQ(es), ea, aZ, unit, unit)
930+ let fA = fG._1
931+ let cV = fG._2
932+ let dL = fG._3
933+ let fq = fG._4
934+ let eu = fG._5
935+ $Tuple2(nil, $Tuple3(fA, dL, fq))
945936 }
946937
947938
948939
949-@Callable(do)
950-func unstakeAndGetOneTkn (fM,fC,fn) = {
951- let fp = {
952- let fq = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
953- if ($isInstanceOf(fq, "Boolean"))
954- then fq
955- else throw(($getType(fq) + " couldn't be cast to Boolean"))
940+@Callable(dx)
941+func unstakeAndGetOneTkn (fH,fx,fi) = {
942+ let fk = {
943+ let fl = invoke(aJ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
944+ if ($isInstanceOf(fl, "Boolean"))
945+ then fl
946+ else throw(($getType(fl) + " couldn't be cast to Boolean"))
956947 }
957- let fD = if (if (aL())
948+ let fy = if (if (aL())
958949 then true
959950 else (aY == n))
960951 then true
961- else fp
962- let em = [if (if (!(fD))
952+ else fk
953+ let et = [if (if (!(fy))
963954 then true
964- else eS(do))
955+ else eN(dx))
965956 then true
966- else aG("get operation is blocked by admin"), if ((size(do.payments) == 0))
957+ else aG("get operation is blocked by admin"), if ((size(dx.payments) == 0))
967958 then true
968959 else aG("no payments are expected")]
969- if ((em == em))
960+ if ((et == et))
970961 then {
971- let el = aQ(fC)
972- let X = do.caller
973- let Y = do.transactionId
974- let fN = invoke(bf, "unstake", [toBase58String(aZ), fM], nil)
975- if ((fN == fN))
962+ let es = aQ(fx)
963+ let X = dx.caller
964+ let Y = dx.transactionId
965+ let fI = invoke(bf, "unstake", [toBase58String(aZ), fH], nil)
966+ if ((fI == fI))
976967 then {
977- let fO = ek(el, fM, aZ, X, Y)
978- let fF = fO._1
979- let cV = fO._2
980- let dC = fO._3
981- let fv = fO._4
982- let en = fO._5
983- let dw = if (if ((fn > 0))
984- then (fn > fF)
968+ let fJ = er(es, fH, aZ, X, Y)
969+ let fA = fJ._1
970+ let cV = fJ._2
971+ let dL = fJ._3
972+ let fq = fJ._4
973+ let eu = fJ._5
974+ let dF = if (if ((fi > 0))
975+ then (fi > fA)
985976 else false)
986- then aG(makeString(["amount to receive is less than ", toString(fn)], ""))
987- else fF
988- let fG = invoke(aJ, "burn", [fM], [AttachedPayment(aZ, fM)])
989- if ((fG == fG))
977+ then aG(makeString(["amount to receive is less than ", toString(fi)], ""))
978+ else fA
979+ let fB = invoke(aJ, "burn", [fH], [AttachedPayment(aZ, fH)])
980+ if ((fB == fB))
990981 then {
991- let fH = [ScriptTransfer(do.caller, dw, el)]
992- let fy = if ((dC > 0))
993- then [ScriptTransfer(aK, dC, el)]
982+ let fC = [ScriptTransfer(dx.caller, dF, es)]
983+ let ft = if ((dL > 0))
984+ then [ScriptTransfer(aK, dL, es)]
994985 else nil
995- let fP = {
996- let fJ = if ((this == aK))
986+ let fK = {
987+ let fE = if ((this == aK))
997988 then 0
998- else dC
999- if (en)
1000- then $Tuple2(-((dw + fJ)), 0)
1001- else $Tuple2(0, -((dw + fJ)))
989+ else dL
990+ if (eu)
991+ then $Tuple2(-((dF + fE)), 0)
992+ else $Tuple2(0, -((dF + fE)))
1002993 }
1003- let eI = fP._1
1004- let eJ = fP._2
1005- let fQ = eH(eI, eJ, 0)
1006- let fk = fQ._1
1007- let eG = fQ._2
1008- $Tuple2((((cV ++ fH) ++ fy) ++ fk), dw)
994+ let db = fK._1
995+ let dc = fK._2
996+ let fL = da(db, dc, 0)
997+ let ff = fL._1
998+ let cZ = fL._2
999+ $Tuple2((((cV ++ fC) ++ ft) ++ ff), dF)
10091000 }
10101001 else throw("Strict value is not equal to itself.")
10111002 }
10121003 else throw("Strict value is not equal to itself.")
10131004 }
10141005 else throw("Strict value is not equal to itself.")
10151006 }
10161007
10171008
10181009
1019-@Callable(do)
1010+@Callable(dx)
10201011 func get () = {
1021- let cG = dn(do)
1022- let fR = cG._1
1012+ let cG = dw(dx)
1013+ let fM = cG._1
10231014 let cn = cG._2
1024- let dq = cG._3
1015+ let dz = cG._3
10251016 let bV = cG._4
10261017 let co = cG._5
1027- let fS = invoke(aJ, "burn", [dq], [AttachedPayment(bV, dq)])
1028- if ((fS == fS))
1018+ let fN = invoke(aJ, "burn", [dz], [AttachedPayment(bV, dz)])
1019+ if ((fN == fN))
10291020 then {
1030- let fT = eH(-(fR), -(cn), 0)
1031- let fk = fT._1
1032- let eG = fT._2
1033- (co ++ fk)
1021+ let fO = da(-(fM), -(cn), 0)
1022+ let ff = fO._1
1023+ let cZ = fO._2
1024+ (co ++ ff)
10341025 }
10351026 else throw("Strict value is not equal to itself.")
10361027 }
10371028
10381029
10391030
1040-@Callable(do)
1041-func getNoLess (fU,fV) = {
1042- let cG = dn(do)
1031+@Callable(dx)
1032+func getNoLess (fP,fQ) = {
1033+ let cG = dw(dx)
10431034 let cm = cG._1
10441035 let cn = cG._2
1045- let dq = cG._3
1036+ let dz = cG._3
10461037 let bV = cG._4
10471038 let co = cG._5
1048- if ((fU > cm))
1049- then throw(((("noLessThenAmtAsset failed: " + toString(cm)) + " < ") + toString(fU)))
1050- else if ((fV > cn))
1051- then throw(((("noLessThenPriceAsset failed: " + toString(cn)) + " < ") + toString(fV)))
1039+ if ((fP > cm))
1040+ then throw(((("noLessThenAmtAsset failed: " + toString(cm)) + " < ") + toString(fP)))
1041+ else if ((fQ > cn))
1042+ then throw(((("noLessThenPriceAsset failed: " + toString(cn)) + " < ") + toString(fQ)))
10521043 else {
1053- let fS = invoke(aJ, "burn", [dq], [AttachedPayment(bV, dq)])
1054- if ((fS == fS))
1044+ let fN = invoke(aJ, "burn", [dz], [AttachedPayment(bV, dz)])
1045+ if ((fN == fN))
10551046 then {
1056- let fW = eH(-(cm), -(cn), 0)
1057- let fk = fW._1
1058- let eG = fW._2
1059- (co ++ fk)
1047+ let fR = da(-(cm), -(cn), 0)
1048+ let ff = fR._1
1049+ let cZ = fR._2
1050+ (co ++ ff)
10601051 }
10611052 else throw("Strict value is not equal to itself.")
10621053 }
10631054 }
10641055
10651056
10661057
1067-@Callable(do)
1068-func unstakeAndGet (dw) = {
1069- let fX = if ((size(do.payments) != 0))
1058+@Callable(dx)
1059+func unstakeAndGet (dF) = {
1060+ let fS = if ((size(dx.payments) != 0))
10701061 then throw("No payments are expected")
10711062 else true
1072- if ((fX == fX))
1063+ if ((fS == fS))
10731064 then {
10741065 let bK = aN()
10751066 let bX = fromBase58String(bK[q])
1076- let fN = invoke(bf, "unstake", [toBase58String(bX), dw], nil)
1077- if ((fN == fN))
1067+ let fI = invoke(bf, "unstake", [toBase58String(bX), dF], nil)
1068+ if ((fI == fI))
10781069 then {
1079- let cG = bT(toBase58String(do.transactionId), toBase58String(bX), dw, do.caller)
1070+ let cG = bT(toBase58String(dx.transactionId), toBase58String(bX), dF, dx.caller)
10801071 let cm = cG._1
10811072 let cn = cG._2
10821073 let ca = parseIntValue(cG._9)
10831074 let co = cG._10
1084- let fY = if (if (aL())
1075+ let fT = if (if (aL())
10851076 then true
10861077 else (ca == n))
10871078 then throw(("Get operation is blocked by admin. Status = " + toString(ca)))
10881079 else true
1089- if ((fY == fY))
1080+ if ((fT == fT))
10901081 then {
1091- let fS = invoke(aJ, "burn", [dw], [AttachedPayment(bX, dw)])
1092- if ((fS == fS))
1082+ let fN = invoke(aJ, "burn", [dF], [AttachedPayment(bX, dF)])
1083+ if ((fN == fN))
10931084 then {
1094- let fZ = eH(-(cm), -(cn), 0)
1095- let fk = fZ._1
1096- let eG = fZ._2
1097- (co ++ fk)
1085+ let fU = da(-(cm), -(cn), 0)
1086+ let ff = fU._1
1087+ let cZ = fU._2
1088+ (co ++ ff)
10981089 }
10991090 else throw("Strict value is not equal to itself.")
11001091 }
11011092 else throw("Strict value is not equal to itself.")
11021093 }
11031094 else throw("Strict value is not equal to itself.")
11041095 }
11051096 else throw("Strict value is not equal to itself.")
11061097 }
11071098
11081099
11091100
1110-@Callable(do)
1111-func unstakeAndGetNoLess (fM,ga,fV) = {
1112- let fD = if (aL())
1101+@Callable(dx)
1102+func unstakeAndGetNoLess (fH,fV,fQ) = {
1103+ let fy = if (aL())
11131104 then true
11141105 else (aY == n)
1115- let em = [if (!(fD))
1106+ let et = [if (!(fy))
11161107 then true
1117- else throw("get operation is blocked by admin"), if ((size(do.payments) == 0))
1108+ else throw("get operation is blocked by admin"), if ((size(dx.payments) == 0))
11181109 then true
11191110 else throw("no payments are expected")]
1120- if ((em == em))
1111+ if ((et == et))
11211112 then {
1122- let fN = invoke(bf, "unstake", [toBase58String(aZ), fM], nil)
1123- if ((fN == fN))
1113+ let fI = invoke(bf, "unstake", [toBase58String(aZ), fH], nil)
1114+ if ((fI == fI))
11241115 then {
1125- let cG = bT(toBase58String(do.transactionId), toBase58String(aZ), fM, do.caller)
1116+ let cG = bT(toBase58String(dx.transactionId), toBase58String(aZ), fH, dx.caller)
11261117 let cm = cG._1
11271118 let cn = cG._2
11281119 let co = cG._10
1129- let gb = [if ((cm >= ga))
1120+ let fW = [if ((cm >= fV))
11301121 then true
1131- else throw(makeString(["amount asset amount to receive is less than ", toString(ga)], "")), if ((cn >= fV))
1122+ else throw(makeString(["amount asset amount to receive is less than ", toString(fV)], "")), if ((cn >= fQ))
11321123 then true
1133- else throw(makeString(["price asset amount to receive is less than ", toString(fV)], ""))]
1134- if ((gb == gb))
1124+ else throw(makeString(["price asset amount to receive is less than ", toString(fQ)], ""))]
1125+ if ((fW == fW))
11351126 then {
1136- let fS = invoke(aJ, "burn", [fM], [AttachedPayment(aZ, fM)])
1137- if ((fS == fS))
1127+ let fN = invoke(aJ, "burn", [fH], [AttachedPayment(aZ, fH)])
1128+ if ((fN == fN))
11381129 then {
1139- let gc = eH(-(cm), -(cn), 0)
1140- let fk = gc._1
1141- let eG = gc._2
1142- (co ++ fk)
1130+ let fX = da(-(cm), -(cn), 0)
1131+ let ff = fX._1
1132+ let cZ = fX._2
1133+ (co ++ ff)
11431134 }
11441135 else throw("Strict value is not equal to itself.")
11451136 }
11461137 else throw("Strict value is not equal to itself.")
11471138 }
11481139 else throw("Strict value is not equal to itself.")
11491140 }
11501141 else throw("Strict value is not equal to itself.")
11511142 }
11521143
11531144
11541145
1155-@Callable(do)
1156-func activate (gd,ge) = if ((toString(do.caller) != toString(aJ)))
1146+@Callable(dx)
1147+func activate (fY,fZ) = if ((toString(dx.caller) != toString(aJ)))
11571148 then throw("permissions denied")
1158- else $Tuple2([StringEntry(aa(), gd), StringEntry(ab(), ge)], "success")
1149+ else $Tuple2([StringEntry(aa(), fY), StringEntry(ab(), fZ)], "success")
11591150
11601151
11611152
1162-@Callable(do)
1153+@Callable(dx)
11631154 func refreshKLp () = {
1164- let gf = valueOrElse(getInteger(ag), 0)
1165- let gg = if (((height - gf) >= aj))
1155+ let ga = valueOrElse(getInteger(ag), 0)
1156+ let gb = if (((height - ga) >= aj))
11661157 then unit
11671158 else aG(makeString([toString(aj), " blocks have not passed since the previous call"], ""))
1168- if ((gg == gg))
1159+ if ((gb == gb))
11691160 then {
1170- let gh = eH(0, 0, 0)
1171- let eO = gh._1
1172- let eG = gh._2
1173- $Tuple2(eO, toString(eG))
1161+ let gc = da(0, 0, 0)
1162+ let dh = gc._1
1163+ let cZ = gc._2
1164+ $Tuple2(dh, toString(cZ))
11741165 }
11751166 else throw("Strict value is not equal to itself.")
11761167 }
11771168
11781169
11791170
1180-@Callable(do)
1171+@Callable(dx)
11811172 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aN())
11821173
11831174
11841175
1185-@Callable(do)
1176+@Callable(dx)
11861177 func getAccBalanceWrapperREADONLY (bx) = $Tuple2(nil, bw(bx))
11871178
11881179
11891180
1190-@Callable(do)
1181+@Callable(dx)
11911182 func calcPricesWrapperREADONLY (bE,bF,bJ) = {
11921183 let bS = bI(bE, bF, bJ)
11931184 $Tuple2(nil, [toString(bS[0]), toString(bS[1]), toString(bS[2])])
11941185 }
11951186
11961187
11971188
1198-@Callable(do)
1189+@Callable(dx)
11991190 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
12001191
12011192
12021193
1203-@Callable(do)
1194+@Callable(dx)
12041195 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
12051196
12061197
12071198
1208-@Callable(do)
1199+@Callable(dx)
12091200 func calcPriceBigIntWrapperREADONLY (bz,bA) = $Tuple2(nil, toString(by(parseBigIntValue(bz), parseBigIntValue(bA))))
12101201
12111202
12121203
1213-@Callable(do)
1204+@Callable(dx)
12141205 func estimatePutOperationWrapperREADONLY (bU,cq,cr,cs,ct,cu,X,cv,cw) = $Tuple2(nil, cp(bU, cq, cr, cs, ct, cu, X, cv, cw))
12151206
12161207
12171208
1218-@Callable(do)
1209+@Callable(dx)
12191210 func estimateGetOperationWrapperREADONLY (bU,bV,bW,X) = {
12201211 let cG = bT(bU, bV, bW, addressFromStringValue(X))
12211212 $Tuple2(nil, $Tuple10(cG._1, cG._2, cG._3, cG._4, cG._5, cG._6, cG._7, toString(cG._8), cG._9, cG._10))
12221213 }
12231214
12241215
12251216
1226-@Callable(do)
1217+@Callable(dx)
12271218 func statsREADONLY () = {
12281219 let bK = aN()
12291220 let bX = fromBase58String(bK[q])
1230- let cY = bK[r]
1231- let cZ = bK[s]
1221+ let dk = bK[r]
1222+ let dl = bK[s]
12321223 let cz = bK[v]
12331224 let cA = bK[w]
12341225 let bL = parseIntValue(bK[t])
12351226 let bM = parseIntValue(bK[u])
1236- let gi = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1237- let da = bw(cY)
1238- let db = bw(cZ)
1239- let gj = if ((gi == 0))
1227+ let gd = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1228+ let ge = bw(dk)
1229+ let gf = bw(dl)
1230+ let gg = if ((gd == 0))
12401231 then [e, e, e]
1241- else bI(da, db, gi)
1232+ else bI(ge, gf, gd)
12421233 let ch = 0
1243- let gk = G(gj[1], b)
1244- let gl = G(gj[2], b)
1245- let gm = value(getInteger(aJ, au(toString(this))))
1246- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(da), toString(db), toString(gi), toString(ch), toString(gk), toString(gl), toString(gm)], j))
1234+ let gh = G(gg[1], b)
1235+ let gi = G(gg[2], b)
1236+ let gj = value(getInteger(aJ, au(toString(this))))
1237+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(ge), toString(gf), toString(gd), toString(ch), toString(gh), toString(gi), toString(gj)], j))
12471238 }
12481239
12491240
12501241
1251-@Callable(do)
1242+@Callable(dx)
12521243 func evaluatePutByAmountAssetREADONLY (cr) = {
12531244 let bK = aN()
12541245 let bX = fromBase58String(bK[q])
12551246 let cx = bK[r]
12561247 let bY = fromBase58String(cx)
12571248 let cy = bK[s]
12581249 let bZ = fromBase58String(cy)
12591250 let bL = parseIntValue(bK[t])
12601251 let bM = parseIntValue(bK[u])
12611252 let ca = bK[p]
1262- let gi = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1263- let da = bw(cx)
1264- let db = bw(cy)
1265- let bG = D(da, bL)
1266- let bH = D(db, bM)
1267- let cg = if ((gi == 0))
1253+ let gd = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1254+ let ge = bw(cx)
1255+ let gf = bw(cy)
1256+ let bG = D(ge, bL)
1257+ let bH = D(gf, bM)
1258+ let cg = if ((gd == 0))
12681259 then e
12691260 else by(bH, bG)
12701261 let cD = D(cr, bL)
12711262 let cE = fraction(cD, cg, d)
12721263 let ct = G(cE, bM)
1273- let du = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1274- let cO = du._1
1275- let gn = du._3
1276- let cc = du._4
1277- let ce = du._5
1278- let cb = du._6
1264+ let dD = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1265+ let cO = dD._1
1266+ let gk = dD._3
1267+ let cc = dD._4
1268+ let ce = dD._5
1269+ let cb = dD._6
12791270 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cO), toString(G(cg, b)), toString(cc), toString(ce), toString(cb), ca, toString(cr), toString(ct)], j))
12801271 }
12811272
12821273
12831274
1284-@Callable(do)
1275+@Callable(dx)
12851276 func evaluatePutByPriceAssetREADONLY (ct) = {
12861277 let bK = aN()
12871278 let bX = fromBase58String(bK[q])
12881279 let cx = bK[r]
12891280 let bY = fromBase58String(cx)
12901281 let cy = bK[s]
12911282 let bZ = fromBase58String(cy)
12921283 let bL = parseIntValue(bK[t])
12931284 let bM = parseIntValue(bK[u])
12941285 let ca = bK[p]
1295- let gi = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1296- let go = bw(cx)
1297- let gp = bw(cy)
1298- let gq = D(go, bL)
1299- let gr = D(gp, bM)
1300- let cg = if ((gi == 0))
1286+ let gd = valueOrErrorMessage(assetInfo(bX), (("Asset " + toBase58String(bX)) + " doesn't exist")).quantity
1287+ let gl = bw(cx)
1288+ let gm = bw(cy)
1289+ let gn = D(gl, bL)
1290+ let go = D(gm, bM)
1291+ let cg = if ((gd == 0))
13011292 then e
1302- else by(gr, gq)
1293+ else by(go, gn)
13031294 let cE = D(ct, bM)
13041295 let cD = fraction(cE, d, cg)
13051296 let cr = G(cD, bL)
1306- let du = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1307- let cO = du._1
1308- let gn = du._3
1309- let cc = du._4
1310- let ce = du._5
1311- let cb = du._6
1297+ let dD = cp("", 500000, cr, bY, ct, bZ, "", true, false)
1298+ let cO = dD._1
1299+ let gk = dD._3
1300+ let cc = dD._4
1301+ let ce = dD._5
1302+ let cb = dD._6
13121303 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cO), toString(G(cg, b)), toString(cc), toString(ce), toString(cb), ca, toString(cr), toString(ct)], j))
13131304 }
13141305
13151306
13161307
1317-@Callable(do)
1318-func evaluateGetREADONLY (gs,gt) = {
1319- let cG = bT("", gs, gt, this)
1308+@Callable(dx)
1309+func evaluateGetREADONLY (gp,gq) = {
1310+ let cG = bT("", gp, gq, this)
13201311 let cm = cG._1
13211312 let cn = cG._2
13221313 let cc = cG._5
13231314 let ce = cG._6
13241315 let cb = cG._7
13251316 let ch = cG._8
13261317 let ca = parseIntValue(cG._9)
13271318 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cm), toString(cn), toString(cc), toString(ce), toString(cb), toString(ch), toString(ca)], j))
13281319 }
13291320
13301321
1331-@Verifier(gu)
1332-func gv () = {
1333- let gw = {
1334- let dz = eP()
1335- if ($isInstanceOf(dz, "ByteVector"))
1322+@Verifier(gr)
1323+func gs () = {
1324+ let gt = {
1325+ let dI = eK()
1326+ if ($isInstanceOf(dI, "ByteVector"))
13361327 then {
1337- let eT = dz
1338- eT
1328+ let eO = dI
1329+ eO
13391330 }
1340- else if ($isInstanceOf(dz, "Unit"))
1341- then gu.senderPublicKey
1331+ else if ($isInstanceOf(dI, "Unit"))
1332+ then gr.senderPublicKey
13421333 else throw("Match error")
13431334 }
1344- let dz = gu
1345- if ($isInstanceOf(dz, "Order"))
1335+ let dI = gr
1336+ if ($isInstanceOf(dI, "Order"))
13461337 then {
1347- let cX = dz
1348- let gx = aM()
1349- let az = cW(cX)
1350- let aA = sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
1351- let aB = sigVerify(cX.bodyBytes, cX.proofs[1], gx)
1338+ let dj = dI
1339+ let gu = aM()
1340+ let az = di(dj)
1341+ let aA = sigVerify(dj.bodyBytes, dj.proofs[0], dj.senderPublicKey)
1342+ let aB = sigVerify(dj.bodyBytes, dj.proofs[1], gu)
13521343 if (if (if (az)
13531344 then aA
13541345 else false)
13551346 then aB
13561347 else false)
13571348 then true
13581349 else ay(az, aA, aB)
13591350 }
1360- else if ($isInstanceOf(dz, "SetScriptTransaction"))
1351+ else if ($isInstanceOf(dI, "SetScriptTransaction"))
13611352 then {
1362- let eQ = dz
1363- let gy = blake2b256(value(eQ.script))
1364- let gz = fromBase64String(value(getString(aJ, aw())))
1365- let gA = scriptHash(this)
1366- if (if ((gz == gy))
1367- then (gA != gy)
1353+ let eL = dI
1354+ let gv = blake2b256(value(eL.script))
1355+ let gw = fromBase64String(value(getString(aJ, aw())))
1356+ let gx = scriptHash(this)
1357+ if (if ((gw == gv))
1358+ then (gx != gv)
13681359 else false)
13691360 then true
1370- else sigVerify(gu.bodyBytes, gu.proofs[0], gw)
1361+ else sigVerify(gr.bodyBytes, gr.proofs[0], gt)
13711362 }
1372- else sigVerify(gu.bodyBytes, gu.proofs[0], gw)
1363+ else sigVerify(gr.bodyBytes, gr.proofs[0], gt)
13731364 }
13741365

github/deemru/w8io/3ef1775 
483.62 ms