tx · 5h79haBY3wNJ973QYPMQwMwxpW97sPrBLXD1oYZcUaUv

3MtP3m8hWMxYcyDxXB6n299KrsLLyT8ehni:  -0.03700000 Waves

2023.01.10 11:57 [2398631] smart account 3MtP3m8hWMxYcyDxXB6n299KrsLLyT8ehni > SELF 0.00000000 Waves

{ "type": 13, "id": "5h79haBY3wNJ973QYPMQwMwxpW97sPrBLXD1oYZcUaUv", "fee": 3700000, "feeAssetId": null, "timestamp": 1673341087846, "version": 1, "sender": "3MtP3m8hWMxYcyDxXB6n299KrsLLyT8ehni", "senderPublicKey": "BRyVaCURUMe7ssUbXucteig1g44bGwWirJQzugKahUQ1", "proofs": [ "3fW6VPx75cVdZP4RAFHPJ1D96NiHQYD8Do85ug3keZ1QGuvEuZojvN2EakV8QYPCrWZo928KMmGWDbRzogKgmd8M" ], "script": "base64:BgKoKQgCEgMKAQgSAwoBCBIAEgQKAgEEEgQKAgEEEgMKAQESABIECgIIARIAEgQKAggBEgQKAggBEgQKAgEBEgMKAQESBQoDAQEBEgUKAwEIARIECgIBCBIECgIBCBIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIIgZzY2FsZTgiDHNjYWxlOEJpZ0ludCIHc2NhbGUxOCIKemVyb0JpZ0ludCIEYmlnMCIEYmlnMSIEYmlnMiIEYmlnMyIEYmlnNCIKc2xpcHBhZ2U0RCILd2F2ZXNTdHJpbmciBUFtdWx0IgVEY29udiIDU0VQIgVFTVBUWSIKUG9vbEFjdGl2ZSIKUG9vbFB1dERpcyIOUG9vbE1hdGNoZXJEaXMiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiCWlkeFBvb2xTdCIJaWR4TFBBc0lkIglpZHhBbUFzSWQiCWlkeFByQXNJZCILaWR4QW10QXNEY20iDWlkeFByaWNlQXNEY20iC2lkeElBbXRBc0lkIg1pZHhJUHJpY2VBc0lkIg9pZHhGYWN0U3Rha0NudHIiEmlkeEZhY3RvcnlSZXN0Q250ciIQaWR4RmFjdFNsaXBwQ250ciIRaWR4RmFjdEd3eFJld0NudHIiCmZlZURlZmF1bHQiAnQxIgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0IgJmMSIDdmFsIg9yZXN1bHRTY2FsZU11bHQiDGZyb21YMThSb3VuZCIFcm91bmQiAnRzIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIBdCIDcGF1IgJ1YSIEdHhJZCIDZ2F1IgJhYSICcGEiA2FtcCIDYWRhIgZrZXlGZWUiA2ZlZSIGa2V5RExwIhVrZXlETHBSZWZyZXNoZWRIZWlnaHQiEmtleURMcFJlZnJlc2hEZWxheSIWZExwUmVmcmVzaERlbGF5RGVmYXVsdCIPZExwUmVmcmVzaERlbGF5IgRmY2ZnIgRtdHBrIgJwYyIGaUFtdEFzIgVpUHJBcyIDbWJhIgViQVN0ciIDYXBzIhxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIgN0b2UiA29yViIGc2VuZHJWIgZtYXRjaFYiBHN0cmYiBGFkZHIiA2tleSIEaW50ZiIIdGhyb3dFcnIiA21zZyIGZm10RXJyIgNmY2EiBWluRmVlIgFAIgZvdXRGZWUiAUEiA2lncyICbXAiE2ZlZUNvbGxlY3RvckFkZHJlc3MiA2dwYyIFYW10QXMiB3ByaWNlQXMiCGlQcmljZUFzIgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwNzU0NDc3NzMiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhJjZmdJbkFtb3VudEFzc2VkSWQiEWNmZ0luUHJpY2VBc3NldElkIgNnZmMiDWZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIPc2xpcGFnZUNvbnRyYWN0Igtnd3hDb250cmFjdCIMcmVzdENvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiCnNsaXBCeVVzZXIiDHNsaXBwYWdlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIgxzbGlwYWdlQW1BbXQiDHNsaXBhZ2VQckFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIgRjcGJpIghwckFtdFgxOCIIYW1BbXRYMTgiBWNwYmlyIgN2YWQiAkExIgJBMiIIc2xpcHBhZ2UiBGRpZmYiBHBhc3MiAnZkIgJEMSICRDAiBHNscGciBGZhaWwiA3BjcCIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10IgthbXRBc0FtdFgxOCIKcHJBc0FtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiCGFtdEFzRGNtIgdwckFzRGNtIghwcmljZVgxOCIIbHBBbXRYMTgiDWxwUHJJbkFtQXNYMTgiDWxwUHJJblByQXNYMTgiD2NhbGN1bGF0ZVByaWNlcyIBcCIHdGFrZUZlZSIGYW1vdW50IglmZWVBbW91bnQiA2VnbyIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCILdXNlckFkZHJlc3MiBGxwSWQiBGFtSWQiBHBySWQiBWFtRGNtIgVwckRjbSIDc3RzIgdscEVtaXNzIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiCmxwRW1pc3NYMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIDZXBvIgdpbkFtQW10IgZpbkFtSWQiB2luUHJBbXQiBmluUHJJZCIGaXNFdmFsIgZlbWl0THAiCmlzT25lQXNzZXQiEHZhbGlkYXRlU2xpcHBhZ2UiBnBtdEFtdCIFcG10SWQiB2FtSWRTdHIiB3BySWRTdHIiCWluQW1JZFN0ciIJaW5QcklkU3RyIgZhbXREY20iCHByaWNlRGNtIgRscEVtIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgFyIgtzbGlwcGFnZVgxOCIPc2xpcHBhZ2VSZWFsWDE4Ig1scEVtaXNzaW9uWDE4IgpwclZpYUFtWDE4IgphbVZpYVByWDE4IgxleHBlY3RlZEFtdHMiEWV4cEFtdEFzc2V0QW10WDE4IhNleHBQcmljZUFzc2V0QW10WDE4IgljYWxjTHBBbXQiDmNhbGNBbUFzc2V0UG10Ig5jYWxjUHJBc3NldFBtdCIMc2xpcHBhZ2VDYWxjIgllbWl0THBBbXQiBmFtRGlmZiIGcHJEaWZmIg0kdDAxODQxNzE4NzYyIgp3cml0ZUFtQW10Igp3cml0ZVByQW10Igtjb21tb25TdGF0ZSIEZ2V0RCICeHAiA3hwMCIDeHAxIgFzIgFhIgNhbm4iC3hwMF94cDFfbl9uIgVhbm5fcyIFYW5uXzEiCWNhbGNETmV4dCIBZCICZGQiA2RkZCICZHAiBGNhbGMiA2FjYyIBaSIFZE5leHQiCGREaWZmUmF3IgVkRGlmZiIDYXJyIg0kdDAyMDY5MDIwNzM4IgIkbCICJHMiBSRhY2MwIgUkZjBfMSICJGEiAiRpIgUkZjBfMiIFZm91bmQiB2dldERPbGQiAW4iCmFQcmVjaXNpb24iEGFubl9zX2FQcmVjaXNpb24iDmFubl9hUHJlY2lzaW9uIgJuMSIDY3VyIg0kdDAyMTM2NzIxMzg3Ig0kdDAyMTgwODIxODU1IgVnZXRZRCIBRCIBeCIBYyIBYiINJHQwMjIzNTUyMjM3NSIBeSIFeU5leHQiBXlEaWZmIg0kdDAyMjY4MjIyNzI5IgdjYWxjRExwIg1hbW91bnRCYWxhbmNlIgxwcmljZUJhbGFuY2UiCmxwRW1pc3Npb24iCnVwZGF0ZWRETHAiDmNhbGNDdXJyZW50RExwIhBhbW91bnRBc3NldERlbHRhIg9wcmljZUFzc2V0RGVsdGEiFGxwQXNzZXRFbWlzc2lvbkRlbHRhIhJhbW91bnRBc3NldEJhbGFuY2UiEXByaWNlQXNzZXRCYWxhbmNlIg9scEFzc2V0RW1pc3Npb24iCmN1cnJlbnRETHAiEnJlZnJlc2hETHBJbnRlcm5hbCIXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEiFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEiB2FjdGlvbnMiEnZhbGlkYXRlVXBkYXRlZERMcCIGb2xkRExwIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIhFhbW91bnRBc3NldEFtb3VudCIQcHJpY2VBc3NldEFtb3VudCINJHQwMjQ2NjgyNDg4MCIDZExwIg0kdDAyNTIxMDI1MzEwIg11bnVzZWRBY3Rpb25zIgZkTHBOZXciDGlzT3JkZXJWYWxpZCICY2ciA3BtdCICY3AiBmNhbGxlciIHYW1Bc1BtdCIHcHJBc1BtdCINY2FsY1B1dE9uZVRrbiIJcG10QW10UmF3Igt3aXRoVGFrZUZlZSINY2hlY2hFbWlzc2lvbiINJHQwMjc1NzYyODAzOCIMYW1CYWxhbmNlT2xkIgxwckJhbGFuY2VPbGQiDSR0MDI4MDQ0MjgyMjAiC2FtQW1vdW50UmF3IgtwckFtb3VudFJhdyINJHQwMjgyMjQyODQ3OCIIYW1BbW91bnQiCHByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIGY2hlY2tEIghscEFtb3VudCIOcG9vbFByb3BvcnRpb24iD2Ftb3VudEFzc2V0UGFydCIOcHJpY2VBc3NldFBhcnQiCWxwQW10Qm90aCIFYm9udXMiE2dldE9uZVRrblYySW50ZXJuYWwiCm91dEFzc2V0SWQiDG1pbk91dEFtb3VudCIIcGF5bWVudHMiDG9yaWdpbkNhbGxlciINdHJhbnNhY3Rpb25JZCIKYW1EZWNpbWFscyIKcHJEZWNpbWFscyIKcG9vbFN0YXR1cyINJHQwMzA1MjgzMDYzOSIIdG90YWxHZXQiC3RvdGFsQW1vdW50Ig0kdDAzMDgyOTMxMTM2IgVvdXRBbSIFb3V0UHIiCGN1clByWDE4IgVjdXJQciIRb3V0QXNzZXRJZE9yV2F2ZXMiEHNlbmRGZWVUb01hdGNoZXIiBGJ1cm4iDSR0MDMxOTIxMzIyNzEiEGZlZUFtb3VudEZvckNhbGMiEG91dEluQW1vdW50QXNzZXQiDSR0MDMyMjc0MzIzODIiEXJlZnJlc2hETHBBY3Rpb25zIhFpc1VwZGF0ZWRETHBWYWxpZCIBbSIHJG1hdGNoMCICcG0iAnBkIglpc01hbmFnZXIiAnBrIgJtbSIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiAmNtIgNocG0iA2NwbSIEc2xpcCIJYXV0b1N0YWtlIgdmYWN0Q2ZnIgtzdGFraW5nQ250ciIIc2xpcENudHIiCmFtQXNzZXRQbXQiCnByQXNzZXRQbXQiAWUiCWxwQXNzZXRJZCICZWwiBmxlZ2FjeSICc2EiAnNwIghscFRybnNmciICc3MiDSR0MDM2NTMxMzY2NzMiBWNoZWNrIhRscEFzc2V0RW1pc3Npb25BZnRlciIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiDWlzUHV0RGlzYWJsZWQiBmNoZWNrcyINJHQwMzgzMTQzODQ3MiIHZXN0aW1MUCINJHQwMzkyODczOTYzNiIUcGF5bWVudEluQW1vdW50QXNzZXQiDSR0MDM5NjM5Mzk3NDciB21heFNscGciBmVzdFB1dCINJHQwNDA3Nzc0MDg0MiIJb3V0QW10QW10Ig0kdDA0MjAxNTQyMDk3Ig1pc0dldERpc2FibGVkIg0kdDA0MjcxNTQyODcwIhhsYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiHWNoZWNrTGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ig0kdDA0MzM5NDQzNDU4IhBkTHBVcGRhdGVBY3Rpb25zIg1scEFzc2V0QW1vdW50IgVpbmRleCIEbmV3WSICZHkiC3RvdGFsR2V0UmF3Ig0kdDA0NDM4ODQ0NDQzIg0kdDA0NDgxODQ0OTMzIg5zdW1PZkdldEFzc2V0cyISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCIUYnVybkxQQXNzZXRPbkZhY3RvcnkiDSR0MDQ2MDk5NDYxODAiDWNoZWNrUGF5bWVudHMiCmZhY3RvcnlDZmciB3N0YWtpbmciCnVuc3Rha2VJbnYiAXYiBWJ1cm5BIg0kdDA0NzIwNDQ3Mjg1Ig11bnN0YWtlQW1vdW50IhVub0xlc3NUaGVuQW1vdW50QXNzZXQiA3JlcyIMY2hlY2tBbW91bnRzIg0kdDA0ODUzMzQ4NjE0Ig0kdDA0OTUwOTQ5Njk3IhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCINJHQwNDk4MjU0OTkyOCINJHQwNTAwNzY1MDE4MCIIYW10QXNTdHIiB3ByQXNTdHIiAWsiAnByIgxyZXNTY2FsZU11bHQiB3VzckFkZHIiB3BtdEFzSWQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNofwABYQCAwtcvAAFiCQC2AgEAgMLXLwABYwkAtgIBAICAkLu61q3wDQABZAkAtgIBAAAAAWUJALYCAQAAAAFmCQC2AgEAAQABZwkAtgIBAAIAAWgJALYCAQADAAFpCQC2AgEABAABagkAtgIBCQBlAgUBYQkAaQIJAGgCBQFhAAEFAWEAAWsCBVdBVkVTAAFsAgMxMDAAAW0CATEAAW4CAl9fAAFvAgAAAXAAAQABcQACAAFyAAMAAXMABAABdAABAAF1AAIAAXYAAwABdwAEAAF4AAUAAXkABgABegAHAAFBAAgAAUIACQABQwABAAFEAAYAAUUABwABRgAKAAFHCQBrAwAKBQFhAJBOAQFIAgFJAUoJALwCAwkAtgIBBQFJBQFjCQC2AgEFAUoBAUsCAUwBTQkAoAMBCQC8AgMFAUwJALYCAQUBTQUBYwEBTgMBTAFNAU8JAKADAQkAvQIEBQFMCQC2AgEFAU0FAWMFAU8BAVADAVEBUgFTCQBrAwUBUQUBUgUBUwEBVAEBTAMJAL8CAgUBZAUBTAkAvgIBBQFMBQFMAQFVAQFMAwkAvwICBQFkBQFMCQC+AgEFAUwFAUwBAVYAAhMlc19fZmFjdG9yeUNvbnRyYWN0AQFXAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAVgAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAVkAAhElcyVzX19wcmljZV9fbGFzdAEBWgICYWECYWIJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQJhYQkAzAgCCQCkAwEFAmFiBQNuaWwFAW4BAmFjAgJhZAJhZQkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAmFkAgJfXwUCYWUBAmFmAgJhZAJhZQkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAmFkAgJfXwUCYWUBAmFnAAIPJXNfX2Ftb3VudEFzc2V0AQJhaAACDiVzX19wcmljZUFzc2V0AQJhaQACByVzX19hbXABAmFqAAINJXNfX2FkZG9uQWRkcgACYWsCByVzX19mZWUAAmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFrBQFHAAJhbQkAuQkCCQDMCAICAiVzCQDMCAICA2RMcAUDbmlsBQFuAAJhbgkAuQkCCQDMCAICAiVzCQDMCAICEmRMcFJlZnJlc2hlZEhlaWdodAUDbmlsBQFuAAJhbwkAuQkCCQDMCAICAiVzCQDMCAICD3JlZnJlc2hETHBEZWxheQUDbmlsBQFuAAJhcAABAAJhcQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhbwUCYXABAmFyAAIRJXNfX2ZhY3RvcnlDb25maWcBAmFzAAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQJhdAICYXUCYXYJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FAmF1AgJfXwUCYXYCCF9fY29uZmlnAQJhdwECYXgJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYXgBAmF5AAIMJXNfX3NodXRkb3duAQJhegACHSVzX19hbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoAQJhQQACFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQJhQgMCYUMCYUQCYUUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIRRmFpbGVkOiBvcmRWYWxpZD0JAKUDAQUCYUMCCyBzbmRyVmFsaWQ9CQClAwEFAmFEAgwgbXRjaHJWYWxpZD0JAKUDAQUCYUUBAmFGAgJhRwJhSAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFHBQJhSAkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhRwkAzAgCAgEuCQDMCAIFAmFICQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABAmFJAgJhRwJhSAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFHBQJhSAkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhRwkAzAgCAgEuCQDMCAIFAmFICQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABAmFKAQJhSwkAAgEJALkJAgkAzAgCAg9scF9zdGFibGUucmlkZToJAMwIAgUCYUsFA25pbAIBIAECYUwBAmFLCQC5CQIJAMwIAgIPbHBfc3RhYmxlLnJpZGU6CQDMCAIFAmFLBQNuaWwCASAAAmFNCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYUYCBQR0aGlzCQEBVgAAAmFOCgACYU8JAPwHBAUCYU0CEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhTwIDSW50BQJhTwkAAgEJAKwCAgkAAwEFAmFPAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmFQCgACYU8JAPwHBAUCYU0CEWdldE91dEZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYU8CA0ludAUCYU8JAAIBCQCsAgIJAAMBBQJhTwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhUQkBAmFGAgUEdGhpcwkBAmFpAAECYVIACQELdmFsdWVPckVsc2UCCQCbCAIFAmFNCQECYXkABwECYVMACQDZBAEJAQJhRgIFAmFNCQECYXMAAAJhVAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFGAgUCYU0JAQJhQQABAmFVAAQCYVYJAQJhRgIFBHRoaXMJAQJhZwAEAmFXCQECYUYCBQR0aGlzCQECYWgABAJhWAkBAmFJAgUCYU0JAQJhdwEFAmFXBAJhdQkBAmFJAgUCYU0JAQJhdwEFAmFWCQC1CQIJAQJhRgIFAmFNCQECYXQCCQCkAwEFAmF1CQCkAwEFAmFYBQFuAQJhWQECYVoDCQAAAgUCYVoFAWsFBHVuaXQJANkEAQUCYVoBAmJhAQJhWgMJAAACBQJhWgUEdW5pdAUBawkA2AQBCQEFdmFsdWUBBQJhWgECYmIBAmJjCQCbCgkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYmMFAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYwUBdQkA2QQBCQCRAwIFAmJjBQF2CQECYVkBCQCRAwIFAmJjBQF3CQECYVkBCQCRAwIFAmJjBQF4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmMFAXkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYwUBegkA2QQBCQCRAwIFAmJjBQFBCQDZBAEJAJEDAgUCYmMFAUIAAmJkCQECYmIBCQECYVUAAAJiZQUCYmQAAmJmCAUCYmUCXzEAAmJnCAUCYmUCXzIAAmJoCAUCYmUCXzMAAmJpCAUCYmUCXzQAAmJqCAUCYmUCXzUAAmJrCAUCYmUCXzYAAmJsCAUCYmUCXzcAAmJtCAUCYmUCXzgAAmJuCAUCYmUCXzkBAmJvAAkAtQkCCQECYUYCBQJhTQkBAmFyAAUBbgACYnAJAQJibwAAAmJxCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJicAUBQwIgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MAAmJyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJicAUBRQIgSW52YWxpZCBzbGlwYWdlIGNvbnRyYWN0IGFkZHJlc3MAAmJzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJicAUBRgIcSW52YWxpZCBnd3ggY29udHJhY3QgYWRkcmVzcwACYnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJwBQFEAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAQJidQoCYnYCYncCYngCYnkCYnoCYkECYkICYkMCYkQCYkUJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYncJAMwIAgkApAMBBQJieAkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYnoJAMwIAgkApAMBBQJiQQkAzAgCCQCkAwEFAmJCCQDMCAIJAKQDAQUCYkMJAMwIAgkApAMBBQJiRAkAzAgCCQCkAwEFAmJFBQNuaWwFAW4BAmJGBgJiRwJiSAJiSQJieQJiQgJiQwkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJHCQDMCAIJAKQDAQUCYkgJAMwIAgkApAMBBQJiSQkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYkIJAMwIAgkApAMBBQJiQwUDbmlsBQFuAQJiSgECYksDCQAAAgUCYksCBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmJLAQJiTAICYk0CYk4JALwCAwUCYk0FAWMFAmJOAQJiTwMCYk0CYk4BTwkAvQIEBQJiTQUBYwUCYk4FAU8BAmJQAwJiUQJiUgJiUwQCYlQJALwCAwkAuAICBQJiUQUCYlIFAWIFAmJSBAJiVQkAvwICCQC4AgIFAmJTCQEBVAEFAmJUBQFkAwkBASEBBQJiVQkAAgEJAKwCAgIKQmlnIHNscGc6IAkApgMBBQJiVAkAlAoCBQJiVQkAmQMBCQDMCAIFAmJRCQDMCAIFAmJSBQNuaWwBAmJWAwJiVwJiWAJiWQQCYlQJALwCAwUCYlgFAWIFAmJXBAJiWgkAvwICBQJiWQUCYlQDAwUCYloGCQC/AgIFAmJYBQJiVwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKYDAQUCYlgCASAJAKYDAQUCYlcCASAJAKYDAQUCYlQCASAJAKYDAQUCYlkFAmJaAQJjYQQCY2ICY2MCY2QCY2UEAmNmCQEBSAIFAmNkBQJjYgQCY2cJAQFIAgUCY2UFAmNjCQECYkwCBQJjZwUCY2YBAmNoAwJjZAJjZQJjaQQCY2oFAmJrBAJjawUCYmwEAmNsCQECY2EEBQJjagUCY2sFAmNkBQJjZQQCYk4JAQFIAgUCY2QFAmNqBAJiTQkBAUgCBQJjZQUCY2sEAmNtCQEBSAIFAmNpBQFhBAJjbgkBAmJMAgUCYk4FAmNtBAJjbwkBAmJMAgUCYk0FAmNtCQDMCAIFAmNsCQDMCAIFAmNuCQDMCAIFAmNvBQNuaWwBAmNwAwJjZAJjZQJjaQQCY3EJAQJjaAMFAmNkBQJjZQUCY2kJAMwIAgkBAUsCCQCRAwIFAmNxAAAFAWEJAMwIAgkBAUsCCQCRAwIFAmNxAAEFAWEJAMwIAgkBAUsCCQCRAwIFAmNxAAIFAWEFA25pbAECY3ICAmNzAmFsBAJjdAMJAAACBQJhbAAAAAAJAGsDBQJjcwUCYWwFAWEJAJQKAgkAZQIFAmNzBQJjdAUCY3QBAmN1BAJjdgJjdwJjeAJjeQQCY3oFAmJoBAJjQQkA2AQBCQEFdmFsdWUBBQJiaQQCY0IJANgEAQkBBXZhbHVlAQUCYmoEAmNDBQJiawQCY0QFAmJsBAJjRQkApAMBBQJiZwQCY0YICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3oCC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgkA2AQBBQJjegUCY3cJAAIBAg9Xcm9uZyBwbXQgYXNzZXQEAmNHCQECYkoBBQJjQQQCY0gJAQFIAgUCY0cFAmNDBAJjSQkBAmJKAQUCY0IEAmNKCQEBSAIFAmNJBQJjRAQCY0sJAQJiTAIFAmNKBQJjSAQCY0wJAQFLAgUCY0sFAWEEAmNNCQEBSAIFAmN4BQFhBAJjTgkBAUgCBQJjRgUBYQQCY08JALwCAwUCY0gFAmNNBQJjTgQCY1AJALwCAwUCY0oFAmNNBQJjTgQCY1EJAQFOAwUCY08FAmNDBQVGTE9PUgQCY1IJAQFOAwUCY1AFAmNEBQVGTE9PUgQCY1MDCQAAAgUCY3YCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN5BQJjUQMJAAACBQJjQQIFV0FWRVMFBHVuaXQJANkEAQUCY0EJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3kFAmNSAwkAAAIFAmNCAgVXQVZFUwUEdW5pdAkA2QQBBQJjQgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWYCCQClCAEFAmN5BQJjdgkBAmJGBgUCY1EFAmNSBQJjeAUCY0wFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0wJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0wFA25pbAkAnAoKBQJjUQUCY1IFAmNBBQJjQgUCY0cFAmNJBQJjRgUCY0sFAmNFBQJjUwECY1QNAmN2AmJTAmNVAmNWAmNXAmNYAmN5AmNZAmNaAmRhAmRiAmRjAmRkBAJjegUCYmgEAmRlCQDYBAEJAQV2YWx1ZQEFAmJpBAJkZgkA2AQBCQEFdmFsdWUBBQJiagQCZGcFAmJtBAJkaAUCYm4EAmRpBQJiawQCZGoFAmJsBAJjRQkApAMBBQJiZwQCZGsICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3oCCFdyIGxwIGFzCHF1YW50aXR5BAJjRwMFAmNZCQECYkoBBQJkZQMDBQJkYQkAAAIFAmRkBQJkZQcJAGUCCQECYkoBBQJkZQUCZGMDBQJkYQkBAmJKAQUCZGUJAGUCCQECYkoBBQJkZQUCY1UEAmNJAwUCY1kJAQJiSgEFAmRmAwMFAmRhCQAAAgUCZGQFAmRmBwkAZQIJAQJiSgEFAmRmBQJkYwMFAmRhCQECYkoBBQJkZgkAZQIJAQJiSgEFAmRmBQJjVwQCZGwJAQFIAgUCY1UFAmRpBAJkbQkBAUgCBQJjVwUCZGoEAmRuCQECYkwCBQJkbQUCZGwEAmNICQEBSAIFAmNHBQJkaQQCY0oJAQFIAgUCY0kFAmRqBAJkbwMJAAACBQJkawAABAJjSwUBZAQCZHAFAWQEAmNtCQB2BgkAuQICBQJkbAUCZG0AAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFLAgUCY20FAWEJAQFLAgUCZGwFAmRpCQEBSwIFAmRtBQJkagkBAmJMAgkAtwICBQJjSgUCZG0JALcCAgUCY0gFAmRsBQJkcAQCY0sJAQJiTAIFAmNKBQJjSAQCZHEJALwCAwkBAVQBCQC4AgIFAmNLBQJkbgUBYwUCY0sEAmRwCQEBSAIFAmJTBQFhAwMDBQJkYgkBAiE9AgUCY0sFAWQHCQC/AgIFAmRxBQJkcAcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCZHECAyA+IAkApgMBBQJkcAQCZHIJAQFIAgUCZGsFAWEEAmRzCQC9AgQFAmRsCQECYk8DBQJjSgUCY0gFBUZMT09SBQFjBQVGTE9PUgQCZHQJAL0CBAUCZG0FAWMJAQJiTwMFAmNKBQJjSAUFRkxPT1IFBUZMT09SBAJkdQMJAL8CAgUCZHMFAmRtCQCUCgIFAmR0BQJkbQkAlAoCBQJkbAUCZHMEAmR2CAUCZHUCXzEEAmR3CAUCZHUCXzIEAmNtCQC9AgQFAmRyBQJkdwUCY0oFBUZMT09SCQCXCgUJAQFOAwUCY20FAWEFBUZMT09SCQEBTgMFAmR2BQJkaQUHQ0VJTElORwkBAU4DBQJkdwUCZGoFB0NFSUxJTkcFAmNLBQJkcAQCZHgIBQJkbwJfMQQCZHkIBQJkbwJfMgQCZHoIBQJkbwJfMwQCY0wJAQFLAggFAmRvAl80BQFhBAJkQQkBAUsCCAUCZG8CXzUFAWEDCQBnAgAABQJkeAkAAgECB0xQIDw9IDAEAmRCAwkBASEBBQJjWgAABQJkeAQCZEMJAGUCBQJjVQUCZHkEAmRECQBlAgUCY1cFAmR6BAJkRQMDBQJkYQkAAAIFAmRkBQJkZQcJAJQKAgUCZGMAAAMDBQJkYQkAAAIFAmRkBQJkZgcJAJQKAgAABQJkYwkAlAoCBQJkeQUCZHoEAmRGCAUCZEUCXzEEAmRHCAUCZEUCXzIEAmRICQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWQAFAmNMCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWgIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYwIFAmN5BQJjdgkBAmJ1CgUCZEYFAmRHBQJkQgUCY0wFAmJTBQJkQQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZEMFAmREBQNuaWwJAJ8KDQUCZHgFAmRCBQJjTAUCY0cFAmNJBQJkawUCY3oFAmNFBQJkSAUCZEMFAmREBQJjVgUCY1gBAmRJAQJkSgQCZEsJAJEDAgUCZEoAAAQCZEwJAJEDAgUCZEoAAQQCZE0JALcCAgUCZEsFAmRMAwkAAAIFAmRNBQFlBQFlBAJkTgkBDXBhcnNlSW50VmFsdWUBBQJhUQQCZE8JAGgCBQJkTgACBAJjcQkAvAIDBQJkSwUCZEwFAWYEAmRQCQC8AgMFAmNxBQFpBQFmBAJkUQkAvAIDCQC2AgEFAmRPBQJkTQUBZgQCZFIJALYCAQkAZQIFAmRPAAEKAQJkUwECZFQEAmRVCQC8AgMFAmRUBQJkVAUBZgQCZFYJALwCAwUCZFUFAmRUBQFmBAJkVwkAvAIDBQJkVgUBZgUCZFAJAL0CBAkAtwICBQJkUQkAvAIDBQJkVwUBZwUBZgUCZFQJALcCAgkAvAIDBQJkUgUCZFQFAWYJALwCAwUBaAUCZFcFAWYFB0NFSUxJTkcKAQJkWAICZFkCZFoDCAUCZFkCXzIFAmRZBAJkVAgFAmRZAl8xBAJlYQkBAmRTAQUCZFQEAmViCQCgAwEJALgCAgUCZWEJAQV2YWx1ZQEFAmRUBAJlYwMJAGYCAAAFAmViCQEBLQEFAmViBQJlYgMJAGcCAAEFAmVjCQCUCgIFAmVhBgkAlAoCBQJlYQcEAmVkCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmVlCgACZWYFAmVkCgACZWcJAJADAQUCZWYKAAJlaAkAlAoCBQJkTQcKAQJlaQICZWoCZWsDCQBnAgUCZWsFAmVnBQJlagkBAmRYAgUCZWoJAJEDAgUCZWYFAmVrCgECZWwCAmVqAmVrAwkAZwIFAmVrBQJlZwUCZWoJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVsAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgUCZWgAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZFQIBQJlZQJfMQQCZW0IBQJlZQJfMgMFAmVtBQJkVAkAAgEJAKwCAgIZRCBjYWxjdWxhdGlvbiBlcnJvciwgRCA9IAkApgMBBQJkVAECZW4BAmRKBAJlbwUBZwQCZEsJAJEDAgUCZEoAAAQCZEwJAJEDAgUCZEoAAQQCZXAJAKcDAQUBbAQCZE4JALkCAgkApwMBBQJhUQUCZXAEAmRNCQC3AgIFAmRLBQJkTAMJAAACBQJkTQUBZQUBZQQCZE8JALkCAgUCZE4FAmVvBAJkUAkAuQICCQC5AgIJALkCAgUCZEsFAmRMBQJlbwUCZW8EAmVxCQC6AgIJALkCAgUCZE8FAmRNBQJlcAQCZXIJALgCAgUCZE8FAmVwBAJlcwkAtwICBQJlbwUBZgoBAmRYAgJkWQJldAQCZXUFAmRZBAJkVAgFAmV1Al8xBAJlbQgFAmV1Al8yAwkBAiE9AgUCZW0FBHVuaXQFAmRZBAJkVwkAugICCQC5AgIJALkCAgUCZFQFAmRUBQJkVAUCZFAEAmVhCQC6AgIJALkCAgkAtwICBQJlcQkAuQICBQJkVwUCZW8FAmRUCQC3AgIJALoCAgkAuQICBQJlcgUCZFQFAmVwCQC5AgIFAmVzBQJkVwQCZWMJAQFVAQkAuAICBQJlYQkBBXZhbHVlAQUCZFQDCQDAAgIFAWYFAmVjCQCUCgIFAmVhBQJldAkAlAoCBQJlYQUEdW5pdAQCZWQJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZXYKAAJlZgUCZWQKAAJlZwkAkAMBBQJlZgoAAmVoCQCUCgIFAmRNBQR1bml0CgECZWkCAmVqAmVrAwkAZwIFAmVrBQJlZwUCZWoJAQJkWAIFAmVqCQCRAwIFAmVmBQJlawoBAmVsAgJlagJlawMJAGcCBQJlawUCZWcFAmVqCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJlbAIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIJAQJlaQIFAmVoAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmRUCAUCZXYCXzEEAmVtCAUCZXYCXzIDCQECIT0CBQJlbQUEdW5pdAUCZFQJAAIBCQCsAgICGUQgY2FsY3VsYXRpb24gZXJyb3IsIEQgPSAJAKYDAQUCZFQBAmV3AwJkSgJkWgJleAQCZW8FAWcEAmV5CQCRAwIFAmRKAwkAAAIFAmRaAAAAAQAABAJlcAkApwMBBQFsBAJkTgkAuQICCQCnAwEFAmFRBQJlcAQCZE0FAmV5BAJkTwkAuQICBQJkTgUCZW8EAmV6CQC6AgIJALkCAgkAuQICCQC6AgIJALkCAgUCZXgFAmV4CQC5AgIFAmV5BQJlbwUCZXgFAmVwCQC5AgIFAmRPBQJlbwQCZUEJALgCAgkAtwICBQJkTQkAugICCQC5AgIFAmV4BQJlcAUCZE8FAmV4CgECZFgCAmRZAmV0BAJlQgUCZFkEAmVDCAUCZUICXzEEAmVtCAUCZUICXzIDCQECIT0CBQJlbQUEdW5pdAUCZFkEAmVECQC6AgIJALcCAgkAuQICBQJlQwUCZUMFAmV6CQC3AgIJALkCAgUBZwUCZUMFAmVBBAJlRQkBAVUBCQC4AgIFAmVECQEFdmFsdWUBBQJlQwMJAMACAgUBZgUCZUUJAJQKAgUCZUQFAmV0CQCUCgIFAmVEBQR1bml0BAJlZAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJlRgoAAmVmBQJlZAoAAmVnCQCQAwEFAmVmCgACZWgJAJQKAgUCZXgFBHVuaXQKAQJlaQICZWoCZWsDCQBnAgUCZWsFAmVnBQJlagkBAmRYAgUCZWoJAJEDAgUCZWYFAmVrCgECZWwCAmVqAmVrAwkAZwIFAmVrBQJlZwUCZWoJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVsAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgkBAmVpAgUCZWgAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZUMIBQJlRgJfMQQCZW0IBQJlRgJfMgMJAQIhPQIFAmVtBQR1bml0BQJlQwkAAgEJAKwCAgIZWSBjYWxjdWxhdGlvbiBlcnJvciwgWSA9IAkApgMBBQJlQwECZUcDAmVIAmVJAmVKBAJlSwkAvAIDCQECZEkBCQDMCAIFAmVICQDMCAIFAmVJBQNuaWwFAWMFAmVKAwkAAAIFAmVKBQFlBQFlBQJlSwECZUwDAmVNAmVOAmVPBAJlUAkAuAICCQC2AgEJAQJiSgEJAQJiYQEFAmJpBQJlTQQCZVEJALgCAgkAtgIBCQECYkoBCQECYmEBBQJiagUCZU4EAmVSCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYmgIcXVhbnRpdHkFAmVPBAJlUwkBAmVHAwUCZVAFAmVRBQJlUgUCZVMBAmVUAwJlVQJlVgJlTwQCZVAJAGQCCQECYkoBCQECYmEBBQJiaQUCZVUEAmVRCQBkAgkBAmJKAQkBAmJhAQUCYmoFAmVWBAJlUgkAZAIICQEFdmFsdWUBCQDsBwEFAmJoCHF1YW50aXR5BQJlTwQCZUsJAQJlRwMJALYCAQUCZVAJALYCAQUCZVEJALYCAQUCZVIEAmVXCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhbgUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFtCQCmAwEFAmVLBQNuaWwJAJQKAgUCZVcFAmVLAQJlWAICZVkCZUsDCQDAAgIFAmVLBQJlWQYJAQJhSgECInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHABAmVaAQJmYQQCZmIIBQJmYQZhbW91bnQEAmZjCQBuBAgFAmZhBmFtb3VudAgFAmZhBXByaWNlBQFhBQVGTE9PUgQCZmQDCQAAAggFAmZhCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmZiCQEBLQEFAmZjCQCUCgIJAQEtAQUCZmIFAmZjBAJlVQgFAmZkAl8xBAJlVggFAmZkAl8yAwMDCQECYVIABgkAAAIFAmJnBQFyBgkAAAIFAmJnBQFzCQACAQINQWRtaW4gYmxvY2tlZAMDCQECIT0CCAgFAmZhCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYmkGCQECIT0CCAgFAmZhCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJiagkAAgECCVdyIGFzc2V0cwQCZmUJAKcDAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUCYW0EAmZmCQECZVQDBQJlVQUCZVYAAAQCZmcIBQJmZgJfMQQCZmgIBQJmZgJfMgQCZmkJAMACAgUCZmgFAmZlBQJmaQECZmoBAmRaAwkBAiE9AgkAkAMBCAUCZFoIcGF5bWVudHMAAQkAAgECCjEgcG1udCBleHAEAmZrCQEFdmFsdWUBCQCRAwIIBQJkWghwYXltZW50cwAABAJjdwkBBXZhbHVlAQgFAmZrB2Fzc2V0SWQEAmRjCAUCZmsGYW1vdW50BAJkbwkBAmN1BAkA2AQBCAUCZFoNdHJhbnNhY3Rpb25JZAkA2AQBBQJjdwUCZGMIBQJkWgZjYWxsZXIEAmNRCAUCZG8CXzEEAmNSCAUCZG8CXzIEAmNFCQENcGFyc2VJbnRWYWx1ZQEIBQJkbwJfOQQCY1MIBQJkbwNfMTADAwkBAmFSAAYJAAACBQJjRQUBcwkAAgEJAKwCAgIPQWRtaW4gYmxvY2tlZDogCQCkAwEFAmNFCQCXCgUFAmNRBQJjUgUCZGMFAmN3BQJjUwECZmwKAmZtAmFlAmZuAmZvAmJTAmNaAmRhAmRiAmRjAmRkBAJkbwkBAmNUDQUCYWUFAmJTCAkBBXZhbHVlAQUCZm4GYW1vdW50CAkBBXZhbHVlAQUCZm4HYXNzZXRJZAgJAQV2YWx1ZQEFAmZvBmFtb3VudAgJAQV2YWx1ZQEFAmZvB2Fzc2V0SWQFAmZtCQAAAgUCYWUCAAUCY1oFAmRhBQJkYgUCZGMFAmRkBAJjRQkBDXBhcnNlSW50VmFsdWUBCAUCZG8CXzgDAwMJAQJhUgAGCQAAAgUCY0UFAXEGCQAAAgUCY0UFAXMJAAIBCQCsAgICCEJsb2NrZWQ6CQCkAwEFAmNFBQJkbwECZnAFAmZxAmN3AmN5AmFlAmZyBAJjQQkA2AQBCQEFdmFsdWUBBQJiaQQCY0IJANgEAQkBBXZhbHVlAQUCYmoEAmN6BQJiaAQCZGkFAmJrBAJkagUCYmwEAmVSCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3oCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmZzAwkAvwICBQJlUgUBZQYJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmZzBQJmcwQCY0cJAQJiSgEFAmNBBAJjSQkBAmJKAQUCY0IEAmZ0AwkAAAIFAmFlAgAJAJQKAgUCY0cFAmNJAwkAAAIFAmN3BQJjQQMJAGYCBQJmcQUCY0cJAAIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQCUCgIJAGUCBQJjRwUCZnEFAmNJAwkAAAIFAmN3BQJjQgMJAGYCBQJmcQUCY0kJAAIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQCUCgIFAmNHCQBlAgUCY0kFAmZxCQACAQIQd3JvbmcgcG10QXNzZXRJZAQCZnUIBQJmdAJfMQQCZnYIBQJmdAJfMgQCZncDCQAAAgUCY3cFAmNBCQCUCgIFAmZxAAADCQAAAgUCY3cFAmNCCQCUCgIAAAUCZnEJAAIBAg9pbnZhbGlkIHBheW1lbnQEAmZ4CAUCZncCXzEEAmZ5CAUCZncCXzIEAmZ6AwUCZnIJAJUKAwgJAQJjcgIFAmZ4BQJhTgJfMQgJAQJjcgIFAmZ5BQJhTgJfMQgJAQJjcgIFAmZxBQJhTgJfMgkAlQoDBQJmeAUCZnkAAAQCZkEIBQJmegJfMQQCZkIIBQJmegJfMgQCY3QIBQJmegJfMwQCZkMJAGQCBQJmdQUCZkEEAmZECQBkAgUCZnYFAmZCBAJiWAkBAmRJAQkAzAgCCQC2AgEFAmZ1CQDMCAIJALYCAQUCZnYFA25pbAQCYlcJAQJkSQEJAMwIAgkAtgIBBQJmQwkAzAgCCQC2AgEFAmZEBQNuaWwEAmZFAwkAvwICBQJiVwUCYlgGCQEFdGhyb3cAAwkAAAIFAmZFBQJmRQQCZkYJAL0CBAUCZVIJALgCAgUCYlcFAmJYBQJiWAUFRkxPT1IEAmNMCQEBSwIJAQJiTAIJAQFIAgUCZkQFAmRqCQEBSAIFAmZDBQJkaQUBYQQCZEgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0wJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0wJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUCY3kFAmFlCQECYnUKBQJmeAUCZnkJAKADAQUCZkYFAmNMAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZkcJAGsDBQJmdgUBYQUCZnUEAmZICQBrAwUCZnEFAWEJAGQCBQJmRwUBYQQCZkkJAGUCBQJmcQUCZkgEAmZKCQC8AgMFAmVSCQC2AgEFAmZJCQC2AgEFAmZ2BAJmSwkAoAMBCQC8AgMJALgCAgUCZkYFAmZKBQFiBQJmSgkAlgoECQCgAwEFAmZGBQJkSAUCY3QFAmZLCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmTAYCZk0CZk4CZk8CZm0CZlACZlEEAmN6CQDYBAEJAQV2YWx1ZQEFAmJoBAJjQQkA2AQBCQEFdmFsdWUBBQJiaQQCY0IJANgEAQkBBXZhbHVlAQUCYmoEAmZSBQJiawQCZlMFAmJsBAJmVAUCYmcEAmN5AwkAAAIFAmZtBQJidAUCZlAFAmZtBAJmawkBBXZhbHVlAQkAkQMCBQJmTwAABAJjdwkBBXZhbHVlAQgFAmZrB2Fzc2V0SWQEAmRjCAUCZmsGYW1vdW50BAJlUwkBAmVMAwUBZQUBZQUBZQMJAAACBQJlUwUCZVMEAmN2CQDYBAEFAmZRAwkBAiE9AgUCY3oJANgEAQUCY3cJAAIBAghXcm9uZyBMUAQCY0cJAQJiSgEFAmNBBAJjSQkBAmJKAQUCY0IEAmZVCgACYU8JAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmTQkAzAgCBQJkYwUDbmlsBQNuaWwDCQABAgUCYU8CCihJbnQsIEludCkFAmFPCQACAQkArAICCQADAQUCYU8CHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkDCQAAAgUCZlUFAmZVBAJjdAgFAmZVAl8yBAJmVggFAmZVAl8xBAJmVwMDCQBmAgUCZk4AAAkAZgIFAmZOBQJmVgcJAQJhSgEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZk4FA25pbAIABQJmVgQCZlgDCQAAAgUCZk0FAmNBCQCWCgQFAmZXAAAJAGUCCQBlAgUCY0cFAmZXBQJjdAUCY0kDCQAAAgUCZk0FAmNCCQCWCgQAAAUCZlcFAmNHCQBlAgkAZQIFAmNJBQJmVwUCY3QJAAIBAhRpbnZhbGlkIG91dCBhc3NldCBpZAQCZlkIBQJmWAJfMQQCZloIBQJmWAJfMgQCZkMIBQJmWAJfMwQCZkQIBQJmWAJfNAQCZ2EJAQJiTAIJAQFIAgUCZkQFAmZTCQEBSAIFAmZDBQJmUgQCZ2IJAQFLAgUCZ2EFAWEEAmdjAwkAAAIFAmZNAgVXQVZFUwUEdW5pdAkA2QQBBQJmTQQCZ2QDCQBmAgUCY3QAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhVAUCY3QFAmdjBQNuaWwFA25pbAQCY1MJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjeQUCZlcFAmdjCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgIJAKUIAQUCY3kFAmN2CQECYkYGBQJmWQUCZloFAmRjBQJnYgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVkABQJnYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVoCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJnYgUDbmlsBQJnZAMJAAACBQJjUwUCY1MEAmdlCQD8BwQFAmFNAgRidXJuCQDMCAIFAmRjBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN3BQJkYwUDbmlsAwkAAAIFAmdlBQJnZQQCZ2YEAmdnAwkAAAIFBHRoaXMFAmFUAAAFAmN0BAJnaAMJAAACCQECYVkBBQJmTQUCYmkGBwMFAmdoCQCUCgIJAQEtAQkAZAIFAmZWBQJnZwAACQCUCgIAAAkBAS0BCQBkAgUCZlYFAmdnBAJlVQgFAmdmAl8xBAJlVggFAmdmAl8yBAJnaQkBAmVUAwUCZVUFAmVWAAAEAmdqCAUCZ2kCXzEEAmVLCAUCZ2kCXzIEAmdrCQECZVgCBQJlUwUCZUsDCQAAAgUCZ2sFAmdrCQCUCgIJAM4IAgUCY1MFAmdqBQJmVwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ2wABAJnbQkAoggBCQEBVwADCQABAgUCZ20CBlN0cmluZwQCZE0FAmdtCQDZBAEFAmRNAwkAAQIFAmdtAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmduAAQCZ20JAKIIAQkBAVgAAwkAAQIFAmdtAgZTdHJpbmcEAmRNBQJnbQkA2QQBBQJkTQMJAAECBQJnbQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAAJnbwkAAgECEVBlcm1pc3Npb24gZGVuaWVkAQJncAECZFoEAmdtCQECZ2wAAwkAAQIFAmdtAgpCeXRlVmVjdG9yBAJncQUCZ20JAAACCAUCZFoPY2FsbGVyUHVibGljS2V5BQJncQMJAAECBQJnbQIEVW5pdAkAAAIIBQJkWgZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZ3IBAmRaBAJnbQkBAmdsAAMJAAECBQJnbQIKQnl0ZVZlY3RvcgQCZ3EFAmdtAwkAAAIIBQJkWg9jYWxsZXJQdWJsaWNLZXkFAmdxBgUCZ28DCQABAgUCZ20CBFVuaXQDCQAAAggFAmRaBmNhbGxlcgUEdGhpcwYFAmdvCQACAQILTWF0Y2ggZXJyb3IcAmRaAQtjb25zdHJ1Y3RvcgEBVgQCZXoJAQJncgEFAmRaAwkAAAIFAmV6BQJlegkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgAFAVYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkWgEKc2V0TWFuYWdlcgECZ3MEAmV6CQECZ3IBBQJkWgMJAAACBQJlegUCZXoEAmd0CQDZBAEFAmdzAwkAAAIFAmd0BQJndAkAzAgCCQELU3RyaW5nRW50cnkCCQEBWAAFAmdzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBDmNvbmZpcm1NYW5hZ2VyAAQCY3EJAQJnbgAEAmd1AwkBCWlzRGVmaW5lZAEFAmNxBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJndQUCZ3UEAmd2AwkAAAIIBQJkWg9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmNxBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJndgUCZ3YJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVcACQDYBAEJAQV2YWx1ZQEFAmNxCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFYAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRaAQNwdXQCAmd3Amd4BAJneQkBAmJvAAQCZ3oJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmd5BQFDAgpXciBzdCBhZGRyBAJnQQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ3kFAUUCCldyIHNsIGFkZHIDCQBmAgAABQJndwkAAgECDldyb25nIHNsaXBwYWdlAwkBAiE9AgkAkAMBCAUCZFoIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCZ0IJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRaCHBheW1lbnRzAAAGYW1vdW50BAJnQwkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFoIcGF5bWVudHMAAQZhbW91bnQEAmVQCQC4AgIJALYCAQkBAmJKAQkBAmJhAQUCYmkFAmdCAwkAAAIFAmVQBQJlUAQCZVEJALgCAgkAtgIBCQECYkoBCQECYmEBBQJiagUCZ0MDCQAAAgUCZVEFAmVRBAJlUgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJiaAhxdWFudGl0eQMJAAACBQJlUgUCZVIEAmVTCQECZUwDBQJnQgUCZ0MJALYCAQAAAwkAAAIFAmVTBQJlUwQCZ0QJAQJmbAoJAKUIAQgFAmRaBmNhbGxlcgkA2AQBCAUCZFoNdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJkWghwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJkWghwYXltZW50cwAABmFtb3VudAkAkQMCCAUCZFoIcGF5bWVudHMAAQUCZ3cGBwYAAAIABAJkQggFAmdEAl8yBAJnRQgFAmdEAl83BAJjUwgFAmdEAl85BAJkQwgFAmdEA18xMAQCZEQIBQJnRANfMTEEAmNBCAUCZ0QDXzEyBAJjQggFAmdEA18xMwQCZG8JAPwHBAUCYU0CBGVtaXQJAMwIAgUCZEIFA25pbAUDbmlsAwkAAAIFAmRvBQJkbwQCZ0YEAmdtBQJkbwMJAAECBQJnbQIHQWRkcmVzcwQCZ0cFAmdtCQD8BwQFAmdHAgRlbWl0CQDMCAIFAmRCBQNuaWwFA25pbAUEdW5pdAMJAAACBQJnRgUCZ0YEAmdIAwkAZgIFAmRDAAAJAPwHBAUCZ0ECA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjQQUCZEMFA25pbAUDbmlsAwkAAAIFAmdIBQJnSAQCZ0kDCQBmAgUCZEQAAAkA/AcEBQJnQQIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNCBQJkRAUDbmlsBQNuaWwDCQAAAgUCZ0kFAmdJBAJnSgMFAmd4BAJnSwkA/AcEBQJnegIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0UFAmRCBQNuaWwDCQAAAgUCZ0sFAmdLBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRaBmNhbGxlcgUCZEIFAmdFBQNuaWwEAmdMCQECZVQDAAAAAAAABAJnaggFAmdMAl8xBAJlSwgFAmdMAl8yBAJnTQMJAMACAgUCZUsFAmVTBgkBAmFKAQkAuQkCCQDMCAICInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHAJAMwIAgkApgMBBQJlUAkAzAgCCQCmAwEFAmVRCQDMCAIJAKYDAQUCZVIJAMwIAgkApgMBBQJlUwkAzAgCCQCmAwEFAmVLCQDMCAIJAKQDAQUCZEMJAMwIAgkApAMBBQJkRAUDbmlsAgEgAwkAAAIFAmdNBQJnTQQCZ04ICQEFdmFsdWUBCQDsBwEFAmJoCHF1YW50aXR5AwkAAAIFAmdOBQJnTgkAzggCCQDOCAIFAmNTBQJnSgUCZ2oJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBC3B1dE9uZVRrblYyAgJmTgJneAQCZ08KAAJhTwkA/AcEBQJhTQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFPAgdCb29sZWFuBQJhTwkAAgEJAKwCAgkAAwEFAmFPAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJnUAMDAwkBAmFSAAYJAAACBQJiZwUBcQYJAAACBQJiZwUBcwYFAmdPBAJnUQkAzAgCAwMJAQEhAQUCZ1AGCQECZ3ABBQJkWgYJAQJhSgECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRaCHBheW1lbnRzAAEGCQECYUoBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnUQUCZ1EEAmNBCQDYBAEJAQV2YWx1ZQEFAmJpBAJjQgkA2AQBCQEFdmFsdWUBBQJiagQCY3oFAmJoBAJmUgUCYmsEAmZTBQJibAQCY3kDCQAAAggFAmRaBmNhbGxlcgUEdGhpcwgFAmRaDG9yaWdpbkNhbGxlcggFAmRaBmNhbGxlcgQCZmsJAQV2YWx1ZQEJAJEDAggFAmRaCHBheW1lbnRzAAAEAmN3CQDYBAEJAQV2YWx1ZQEIBQJmawdhc3NldElkBAJkYwgFAmZrBmFtb3VudAQCZVMDCQAAAggFAmZrB2Fzc2V0SWQFAmJpCQECZUwDCQC2AgEFAmRjCQC2AgEAAAkAtgIBAAAJAQJlTAMJALYCAQAACQC2AgEFAmRjCQC2AgEAAAMJAAACBQJlUwUCZVMEAmdSCQECZnAFBQJkYwUCY3cJAKUIAQUCY3kJANgEAQgFAmRaDXRyYW5zYWN0aW9uSWQGAwkAAAIFAmdSBQJnUgQCY3QIBQJnUgJfMwQCY1MIBQJnUgJfMgQCZ1MIBQJnUgJfMQQCZEIDAwkAZgIFAmZOAAAJAGYCBQJmTgUCZ1MHCQECYUoBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZOBQNuaWwCAAUCZ1MEAmdECQD8BwQFAmFNAgRlbWl0CQDMCAIFAmRCBQNuaWwFA25pbAMJAAACBQJnRAUCZ0QEAmdGBAJnbQUCZ0QDCQABAgUCZ20CB0FkZHJlc3MEAmdHBQJnbQkA/AcEBQJnRwIEZW1pdAkAzAgCBQJkQgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZ0YFAmdGBAJnSgMFAmd4BAJnSwkA/AcEBQJicQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3oFAmRCBQNuaWwDCQAAAgUCZ0sFAmdLBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRaBmNhbGxlcgUCZEIFAmN6BQNuaWwEAmdkAwkAZgIFAmN0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVQFAmN0CQDZBAEFAmN3BQNuaWwFA25pbAQCZ1QDCQAAAgUEdGhpcwUCYVQJAJQKAgAAAAAEAmdVAwkAAAIIBQJmawdhc3NldElkBQJiaQYHAwUCZ1UJAJQKAgkBAS0BBQJjdAAACQCUCgIAAAkBAS0BBQJjdAQCZVUIBQJnVAJfMQQCZVYIBQJnVAJfMgQCZ1YJAQJlVAMFAmVVBQJlVgAABAJnaggFAmdWAl8xBAJlSwgFAmdWAl8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAlAoCCQDOCAIJAM4IAgkAzggCBQJjUwUCZ0oFAmdkBQJnagUCZEIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBCnB1dEZvckZyZWUBAmdXAwkAZgIAAAUCZ1cJAAIBAgpXcm9uZyBzbHBnAwkBAiE9AgkAkAMBCAUCZFoIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCZ1gJAQJmbAoJAKUIAQgFAmRaBmNhbGxlcgkA2AQBCAUCZFoNdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJkWghwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJkWghwYXltZW50cwAABmFtb3VudAkAkQMCCAUCZFoIcGF5bWVudHMAAQUCZ1cHBwYAAAIABAJjUwgFAmdYAl85BAJnQgkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFoIcGF5bWVudHMAAAZhbW91bnQEAmdDCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJkWghwYXltZW50cwABBmFtb3VudAQCZVMJAQJlTAMFAmdCBQJnQwkAtgIBAAADCQAAAgUCZVMFAmVTBAJnWQkBAmVUAwAAAAAAAAQCZ2oIBQJnWQJfMQQCZUsIBQJnWQJfMgQCZ2sJAQJlWAIFAmVTBQJlSwMJAAACBQJnawUCZ2sJAM4IAgUCY1MFAmdqCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRaAQNnZXQABAJlUwkBAmVMAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlUwUCZVMEAmRvCQECZmoBBQJkWgQCZ1oIBQJkbwJfMQQCY1IIBQJkbwJfMgQCZGMIBQJkbwJfMwQCY3cIBQJkbwJfNAQCY1MIBQJkbwJfNQQCZUEJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCZGMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3cFAmRjBQNuaWwDCQAAAgUCZUEFAmVBBAJoYQkBAmVUAwkBAS0BBQJnWgkBAS0BBQJjUgAABAJnaggFAmhhAl8xBAJlSwgFAmhhAl8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAzggCBQJjUwUCZ2oJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBC2dldE9uZVRrblYyAgJmTQJmTgQCZ08KAAJhTwkA/AcEBQJhTQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFPAgdCb29sZWFuBQJhTwkAAgEJAKwCAgkAAwEFAmFPAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJoYgMDCQECYVIABgkAAAIFAmJnBQFzBgUCZ08EAmdRCQDMCAIDAwkBASEBBQJoYgYJAQJncAEFAmRaBgkBAmFKAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZFoIcGF5bWVudHMAAQYJAQJhSgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdRBQJnUQQCaGMJAQJmTAYFAmZNBQJmTggFAmRaCHBheW1lbnRzCAUCZFoGY2FsbGVyCAUCZFoMb3JpZ2luQ2FsbGVyCAUCZFoNdHJhbnNhY3Rpb25JZAQCY1MIBQJoYwJfMQQCZlcIBQJoYwJfMgkAlAoCBQJjUwUCZlcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBCnJlZnJlc2hETHAABAJoZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhbgAABAJoZQMJAGcCCQBlAgUGaGVpZ2h0BQJoZAUCYXEFBHVuaXQJAQJhSgEJALkJAgkAzAgCCQCkAwEFAmFxCQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJoZQUCaGUEAmZlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhbQIBMAkBAmFMAQILaW52YWxpZCBkTHAEAmhmCQECZVQDAAAAAAAABAJoZwgFAmhmAl8xBAJlSwgFAmhmAl8yBAJlVwMJAQIhPQIFAmZlBQJlSwUCaGcJAQJhSgECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJlVwkApgMBBQJlSwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkWgETZ2V0T25lVGtuVjJSRUFET05MWQICZk0CaGgEAmNBCQDYBAEJAQV2YWx1ZQEFAmJpBAJjQgkA2AQBCQEFdmFsdWUBBQJiagQCY3oJANgEAQkBBXZhbHVlAQUCYmgEAmRKCQDMCAIJALYCAQkBAmJKAQUCY0EJAMwIAgkAtgIBCQECYkoBBQJjQgUDbmlsBAJlSgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCY3oCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmJYCQECZEkBBQJkSgQCYlcJALgCAgUCYlgJALwCAwkAtgIBBQJoaAUCYlgFAmVKBAJoaQMJAAACBQJmTQUCY0EAAAMJAAACBQJmTQUCY0IAAQkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJoagkBAmV3AwUCZEoFAmhpBQJiVwQCaGsJALgCAgkAkQMCBQJkSgUCaGkFAmhqBAJobAkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALgCAgUCaGsFAWYFA25pbAQCaG0JAQJjcgIFAmhsBQJhUAQCZlYIBQJobQJfMQQCY3QIBQJobQJfMgkAlAoCBQNuaWwJAJQKAgUCZlYFAmN0AmRaARxnZXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJmTQJoaAQCY0EJANgEAQkBBXZhbHVlAQUCYmkEAmNCCQDYBAEJAQV2YWx1ZQEFAmJqBAJjegkA2AQBCQEFdmFsdWUBBQJiaAQCY0cJAQJiSgEFAmNBBAJjSQkBAmJKAQUCY0IEAmhuCgACYU8JAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmTQkAzAgCBQJoaAUDbmlsBQNuaWwDCQABAgUCYU8CCihJbnQsIEludCkFAmFPCQACAQkArAICCQADAQUCYU8CHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkEAmZWCAUCaG4CXzEEAmN0CAUCaG4CXzIEAmRvCQECY3UEAgAFAmN6BQJoaAUEdGhpcwQCY1EIBQJkbwJfMQQCY1IIBQJkbwJfMgQCaG8JAGQCBQJjUQUCY1IEAmZLAwkAAAIFAmhvAAADCQAAAgUCZlYAAAAACQACAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZlYFAmhvBQFhBQJobwkAlAoCBQNuaWwJAJUKAwUCZlYFAmN0BQJmSwJkWgEJZ2V0Tm9MZXNzAgJocAJocQQCZG8JAQJmagEFAmRaBAJjUQgFAmRvAl8xBAJjUggFAmRvAl8yBAJkYwgFAmRvAl8zBAJjdwgFAmRvAl80BAJjUwgFAmRvAl81AwkAZgIFAmhwBQJjUQkAAgEJAKwCAgkArAICCQCsAgICCUZhaWxlZDogIAkApAMBBQJjUQIDIDwgCQCkAwEFAmhwAwkAZgIFAmhxBQJjUgkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFAmNSAgMgPCAJAKQDAQUCaHEEAmVTCQECZUwDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVTBQJlUwQCaHIJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCZGMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3cFAmRjBQNuaWwDCQAAAgUCaHIFAmhyBAJocwkBAmVUAwkBAS0BBQJjUQkBAS0BBQJjUgAABAJnaggFAmhzAl8xBAJlSwgFAmhzAl8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAzggCBQJjUwUCZ2oJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBDXVuc3Rha2VBbmRHZXQBAmNzBAJodAMJAQIhPQIJAJADAQgFAmRaCHBheW1lbnRzAAAJAAIBAg1ObyBwbW50cyBleHBkBgMJAAACBQJodAUCaHQEAmh1CQECYm8ABAJnRQUCYmgEAmh2CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJodQUBQwIKV3Igc3QgYWRkcgQCZVMJAQJlTAMJALYCAQAACQC2AgEAAAkAtgIBAAAEAmh3CQD8BwQFAmh2Agd1bnN0YWtlCQDMCAIJANgEAQUCZ0UJAMwIAgUCY3MFA25pbAUDbmlsAwkAAAIFAmh3BQJodwQCZG8JAQJjdQQJANgEAQgFAmRaDXRyYW5zYWN0aW9uSWQJANgEAQUCZ0UFAmNzCAUCZFoGY2FsbGVyBAJjUQgFAmRvAl8xBAJjUggFAmRvAl8yBAJjRQkBDXBhcnNlSW50VmFsdWUBCAUCZG8CXzkEAmNTCAUCZG8DXzEwBAJoeAMDCQECYVIABgkAAAIFAmNFBQFzCQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUCY0UGAwkAAAIFAmh4BQJoeAQCaHkJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY3MFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0UFAmNzBQNuaWwDCQAAAgUCaHkFAmh5BAJoegkBAmVUAwkBAS0BBQJjUQkBAS0BBQJjUgAABAJnaggFAmh6Al8xBAJlSwgFAmh6Al8yBAJnawkBAmVYAgUCZVMFAmVLAwkAAAIFAmdrBQJnawkAzggCBQJjUwUCZ2oJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFoBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhBAmhCAmhxBAJoYgMJAQJhUgAGCQAAAgUCYmcFAXMEAmdRCQDMCAIDCQEBIQEFAmhiBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRaCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ1EFAmdRBAJlUwkBAmVMAwkAtgIBAAAJALYCAQAACQC2AgEAAAQCaHcJAPwHBAUCYnECB3Vuc3Rha2UJAMwIAgkA2AQBBQJiaAkAzAgCBQJoQQUDbmlsBQNuaWwDCQAAAgUCaHcFAmh3BAJoQwkBAmN1BAkA2AQBCAUCZFoNdHJhbnNhY3Rpb25JZAkA2AQBBQJiaAUCaEEIBQJkWgZjYWxsZXIEAmNRCAUCaEMCXzEEAmNSCAUCaEMCXzIEAmNTCAUCaEMDXzEwBAJoRAkAzAgCAwkAZwIFAmNRBQJoQgYJAAIBCQC5CQIJAMwIAgIsYW1vdW50IGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoQgUDbmlsAgAJAMwIAgMJAGcCBQJjUgUCaHEGCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJocQUDbmlsAgAFA25pbAMJAAACBQJoRAUCaEQEAmhyCQD8BwQFAmFNAgRidXJuCQDMCAIFAmhBBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJoBQJoQQUDbmlsAwkAAAIFAmhyBQJocgQCaEUJAQJlVAMJAQEtAQUCY1EJAQEtAQUCY1IAAAQCZ2oIBQJoRQJfMQQCZUsIBQJoRQJfMgQCZ2sJAQJlWAIFAmVTBQJlSwMJAAACBQJnawUCZ2sJAM4IAgUCY1MFAmdqCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRaARV1bnN0YWtlQW5kR2V0T25lVGtuVjIDAmhBAmZNAmZOBAJnTwoAAmFPCQD8BwQFAmFNAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYU8CB0Jvb2xlYW4FAmFPCQACAQkArAICCQADAQUCYU8CHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhiAwMJAQJhUgAGCQAAAgUCYmcFAXMGBQJnTwQCZ1EJAMwIAgMDCQEBIQEFAmhiBgkBAmdwAQUCZFoGCQECYUoBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkWghwYXltZW50cwAABgkBAmFKAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ1EFAmdRBAJodQkBAmJvAAQCZ0UFAmJoBAJodgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCaHUFAUMCCldyIHN0IGFkZHIEAmh3CQD8BwQFAmh2Agd1bnN0YWtlCQDMCAIJANgEAQUCZ0UJAMwIAgUCaEEFA25pbAUDbmlsAwkAAAIFAmh3BQJodwQCaEYJAQJmTAYFAmZNBQJmTgkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0UFAmhBBQNuaWwIBQJkWgZjYWxsZXIIBQJkWgxvcmlnaW5DYWxsZXIIBQJkWg10cmFuc2FjdGlvbklkBAJjUwgFAmhGAl8xBAJmVwgFAmhGAl8yCQCUCgIFAmNTBQJmVwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkWgEccHV0T25lVGtuVjJXaXRoQm9udXNSRUFET05MWQICaEcCaEgEAmhJCQECZnAFBQJoRwUCaEgCAAIABgQCZkYIBQJoSQJfMQQCY1MIBQJoSQJfMgQCY3QIBQJoSQJfMwQCZksIBQJoSQJfNAkAlAoCBQNuaWwJAJUKAwUCZkYFAmN0BQJmSwJkWgEhcHV0T25lVGtuVjJXaXRob3V0VGFrZUZlZVJFQURPTkxZAgJoRwJoSAQCaEoJAQJmcAUFAmhHBQJoSAIAAgAHBAJmRggFAmhKAl8xBAJjUwgFAmhKAl8yBAJjdAgFAmhKAl8zBAJmSwgFAmhKAl80CQCUCgIFA25pbAkAlQoDBQJmRgUCY3QFAmZLAmRaAQhhY3RpdmF0ZQICaEsCaEwDCQECIT0CCQClCAEIBQJkWgZjYWxsZXIJAKUIAQUCYU0JAAIBAgZkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWcABQJoSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWgABQJoTAUDbmlsAgdzdWNjZXNzAmRaAQRzZXRTAgJoTQJoeAMJAQIhPQIJAKUIAQgFAmRaBmNhbGxlcgkBAmFGAgUEdGhpcwkBAmFqAAUCZ28JAMwIAgkBC1N0cmluZ0VudHJ5AgUCaE0FAmh4BQNuaWwCZFoBBHNldEkCAmhNAmh4AwkBAiE9AgkApQgBCAUCZFoGY2FsbGVyCQECYUYCBQR0aGlzCQECYWoABQJnbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUCaE0FAmh4BQNuaWwCZFoBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmFVAAJkWgEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYksJAJQKAgUDbmlsCQECYkoBBQJiSwJkWgEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCY2QCY2UCY2kEAmhOCQECY2gDBQJjZAUCY2UFAmNpCQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCaE4AAAkAzAgCCQCmAwEJAJEDAgUCaE4AAQkAzAgCCQCmAwEJAJEDAgUCaE4AAgUDbmlsAmRaARZmcm9tWDE4V3JhcHBlclJFQURPTkxZAgFMAmhPCQCUCgIFA25pbAkBAUsCCQCnAwEFAUwFAmhPAmRaARR0b1gxOFdyYXBwZXJSRUFET05MWQIBSQFKCQCUCgIFA25pbAkApgMBCQEBSAIFAUkFAUoCZFoBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYk0CYk4JAJQKAgUDbmlsCQCmAwEJAQJiTAIJAKcDAQUCYk0JAKcDAQUCYk4CZFoBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJjdgJiUwJjVQJjVgJjVwJjWAJoUAJjWQJjWgkAlAoCBQNuaWwJAQJjVA0FAmN2BQJiUwUCY1UFAmNWBQJjVwUCY1gFAmhQBQJjWQUCY1oGBwAAAgACZFoBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJjdgJoUQJjeAJoUAQCZG8JAQJjdQQFAmN2BQJoUQUCY3gJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmhQCQCUCgIFA25pbAkAnAoKCAUCZG8CXzEIBQJkbwJfMggFAmRvAl8zCAUCZG8CXzQIBQJkbwJfNQgFAmRvAl82CAUCZG8CXzcJAKYDAQgFAmRvAl84CAUCZG8CXzkIBQJkbwNfMTABAmhSAQJoUwAEAmhUBAJnbQkBAmdsAAMJAAECBQJnbQIKQnl0ZVZlY3RvcgQCZ3EFAmdtBQJncQMJAAECBQJnbQIEVW5pdAgFAmhSD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAJnbQUCaFIDCQABAgUCZ20CBU9yZGVyBAJmYQUCZ20EAmhVCQECYVMABAJoVgkBAmVaAQUCZmEEAmhXCQD0AwMIBQJmYQlib2R5Qnl0ZXMJAJEDAggFAmZhBnByb29mcwAACAUCZmEPc2VuZGVyUHVibGljS2V5BAJoWAkA9AMDCAUCZmEJYm9keUJ5dGVzCQCRAwIIBQJmYQZwcm9vZnMAAQUCaFUDAwMFAmhWBQJoVwcFAmhYBwYJAQJhQgMFAmhWBQJoVwUCaFgDCQABAgUCZ20CFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJkTQUCZ20EAmhZCQD2AwEJAQV2YWx1ZQEIBQJkTQZzY3JpcHQEAmhaCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYU0JAQJhegAEAmlhCQDxBwEFBHRoaXMDAwkAAAIFAmhaBQJoWQkBAiE9AgUCaWEFAmhZBwYJAPQDAwgFAmhSCWJvZHlCeXRlcwkAkQMCCAUCaFIGcHJvb2ZzAAAFAmhUCQD0AwMIBQJoUglib2R5Qnl0ZXMJAJEDAggFAmhSBnByb29mcwAABQJoVFgbN7s=", "chainId": 84, "height": 2398631, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CoCTt5kDzrUWysarKp24YqEkt2YJXCRbiGasyrEeMeS1 Next: 8pUe4G6CMft4BcS29qBkRwiyCnpsmixyf6P1cZGAWEJD Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = 100000000
55
6-let b = 100000000
6+let b = toBigInt(100000000)
77
8-let c = toBigInt(100000000)
8+let c = toBigInt(1000000000000000000)
99
10-let d = toBigInt(1000000000000000000)
10+let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
14-let f = "__"
14+let f = toBigInt(1)
1515
16-let g = ""
16+let g = toBigInt(2)
1717
18-let h = 1
18+let h = toBigInt(3)
1919
20-let i = 2
20+let i = toBigInt(4)
2121
22-let j = 3
22+let j = toBigInt((a - ((a * 1) / a)))
2323
24-let k = 4
24+let k = "WAVES"
2525
26-let l = 1
26+let l = "100"
2727
28-let m = 2
28+let m = "1"
2929
30-let n = 3
30+let n = "__"
3131
32-let o = 4
32+let o = ""
3333
34-let p = 5
34+let p = 1
3535
36-let q = 6
36+let q = 2
3737
38-let r = 7
38+let r = 3
3939
40-let s = 8
40+let s = 4
4141
42-let t = 9
42+let t = 1
4343
44-let u = 10
44+let u = 2
4545
46-let v = 1
46+let v = 3
4747
48-let w = 2
48+let w = 4
4949
50-let x = 3
50+let x = 5
5151
52-let y = 1
52+let y = 6
5353
5454 let z = 7
5555
56-func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
56+let A = 8
57+
58+let B = 9
59+
60+let C = 1
61+
62+let D = 6
63+
64+let E = 7
65+
66+let F = 10
67+
68+let G = fraction(10, a, 10000)
69+
70+func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
5771
5872
59-func D (E,F) = toInt(fraction(E, toBigInt(F), d))
73+func K (L,M) = toInt(fraction(L, toBigInt(M), c))
6074
6175
62-func G (H,I,J) = fraction(H, I, J)
76+func N (L,M,O) = toInt(fraction(L, toBigInt(M), c, O))
6377
6478
65-func K (E) = if ((e > E))
66- then -(E)
67- else E
79+func P (Q,R,S) = fraction(Q, R, S)
6880
6981
70-func L () = "%s__factoryContract"
82+func T (L) = if ((d > L))
83+ then -(L)
84+ else L
7185
7286
73-func M () = "%s__managerPublicKey"
87+func U (L) = if ((d > L))
88+ then -(L)
89+ else L
7490
7591
76-func N () = "%s%s__price__last"
92+func V () = "%s__factoryContract"
7793
7894
79-func O (P,Q) = makeString(["%s%s%d%d__price__history", toString(P), toString(Q)], f)
95+func W () = "%s__managerPublicKey"
8096
8197
82-func R (S,T) = ((("%s%s%s__P__" + S) + "__") + T)
98+func X () = "%s__pendingManagerPublicKey"
8399
84100
85-func U (S,T) = ((("%s%s%s__G__" + S) + "__") + T)
101+func Y () = "%s%s__price__last"
86102
87103
88-func V () = "%s__amountAsset"
104+func Z (aa,ab) = makeString(["%s%s%d%d__price__history", toString(aa), toString(ab)], n)
89105
90106
91-func W () = "%s__priceAsset"
107+func ac (ad,ae) = ((("%s%s%s__P__" + ad) + "__") + ae)
92108
93109
94-func X (P,Q) = makeString(["%s%s%d%d__K_history", toString(P), toString(Q)], f)
110+func af (ad,ae) = ((("%s%s%s__G__" + ad) + "__") + ae)
95111
96112
97-func Y () = "%s__factoryConfig"
113+func ag () = "%s__amountAsset"
98114
99115
100-func Z () = "%s%s__matcher__publicKey"
116+func ah () = "%s__priceAsset"
101117
102118
103-func aa (ab) = (("%s%s%s__" + ab) + "__mappings__poolContract2LpAsset")
119+func ai () = "%s__amp"
104120
105121
106-func ac (ad,ae) = (((("%d%d%s__" + ad) + "__") + ae) + "__config")
122+func aj () = "%s__addonAddr"
107123
108124
109-func af (ag) = ("%s%s%s__mappings__baseAsset2internalId__" + ag)
125+let ak = "%s__fee"
126+
127+let al = valueOrElse(getInteger(this, ak), G)
128+
129+let am = makeString(["%s", "dLp"], n)
130+
131+let an = makeString(["%s", "dLpRefreshedHeight"], n)
132+
133+let ao = makeString(["%s", "refreshDLpDelay"], n)
134+
135+let ap = 1
136+
137+let aq = valueOrElse(getInteger(this, ao), ap)
138+
139+func ar () = "%s__factoryConfig"
110140
111141
112-func ah () = "%s__shutdown"
142+func as () = "%s%s__matcher__publicKey"
113143
114144
115-func ai (aj) = ("%s%s__poolWeight__" + aj)
145+func at (au,av) = (((("%d%d%s__" + au) + "__") + av) + "__config")
116146
117147
118-func ak (al,am,an) = throw(((((("order validation failed: orderValid=" + toString(al)) + " senderValid=") + toString(am)) + " matcherValid=") + toString(an)))
148+func aw (ax) = ("%s%s%s__mappings__baseAsset2internalId__" + ax)
119149
120150
121-func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
151+func ay () = "%s__shutdown"
122152
123153
124-func ar (ap,aq) = valueOrErrorMessage(getInteger(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
154+func az () = "%s__allowedLpStableScriptHash"
125155
126156
127-let as = addressFromStringValue(ao(this, L()))
128-
129-func at () = valueOrElse(getBoolean(as, ah()), false)
157+func aA () = "%s__feeCollectorAddress"
130158
131159
132-func au () = fromBase58String(ao(as, Z()))
160+func aB (aC,aD,aE) = throw(((((("Failed: ordValid=" + toString(aC)) + " sndrValid=") + toString(aD)) + " mtchrValid=") + toString(aE)))
133161
134162
135-func av () = {
136- let aw = ao(this, V())
137- let ax = ao(this, W())
138- let ae = ar(as, af(ax))
139- let ad = ar(as, af(aw))
140- split(ao(as, ac(toString(ad), toString(ae))), f)
163+func aF (aG,aH) = valueOrErrorMessage(getString(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
164+
165+
166+func aI (aG,aH) = valueOrErrorMessage(getInteger(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
167+
168+
169+func aJ (aK) = throw(makeString(["lp_stable.ride:", aK], " "))
170+
171+
172+func aL (aK) = makeString(["lp_stable.ride:", aK], " ")
173+
174+
175+let aM = addressFromStringValue(aF(this, V()))
176+
177+let aN = {
178+ let aO = invoke(aM, "getInFeeREADONLY", [toString(this)], nil)
179+ if ($isInstanceOf(aO, "Int"))
180+ then aO
181+ else throw(($getType(aO) + " couldn't be cast to Int"))
182+ }
183+
184+let aP = {
185+ let aO = invoke(aM, "getOutFeeREADONLY", [toString(this)], nil)
186+ if ($isInstanceOf(aO, "Int"))
187+ then aO
188+ else throw(($getType(aO) + " couldn't be cast to Int"))
189+ }
190+
191+let aQ = aF(this, ai())
192+
193+func aR () = valueOrElse(getBoolean(aM, ay()), false)
194+
195+
196+func aS () = fromBase58String(aF(aM, as()))
197+
198+
199+let aT = addressFromStringValue(aF(aM, aA()))
200+
201+func aU () = {
202+ let aV = aF(this, ag())
203+ let aW = aF(this, ah())
204+ let aX = aI(aM, aw(aW))
205+ let au = aI(aM, aw(aV))
206+ split(aF(aM, at(toString(au), toString(aX))), n)
141207 }
142208
143209
144-func ay () = split(ao(as, Y()), f)
210+func aY (aZ) = if ((aZ == k))
211+ then unit
212+ else fromBase58String(aZ)
145213
146214
147-func az (aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], f)
215+func ba (aZ) = if ((aZ == unit))
216+ then k
217+ else toBase58String(value(aZ))
148218
149219
150-func aK (aL,aM,aN,aD,aG,aH) = makeString(["%d%d%d%d%d%d", toString(aL), toString(aM), toString(aN), toString(aD), toString(aG), toString(aH)], f)
220+func bb (bc) = $Tuple9(addressFromStringValue(bc[t]), parseIntValue(bc[u]), fromBase58String(bc[v]), aY(bc[w]), aY(bc[x]), parseIntValue(bc[y]), parseIntValue(bc[z]), fromBase58String(bc[A]), fromBase58String(bc[B]))
151221
152222
153-func aO (aP) = if ((aP == "WAVES"))
154- then wavesBalance(this).available
155- else assetBalance(this, fromBase58String(aP))
223+let bd = bb(aU())
224+
225+let be = bd
226+
227+let bf = be._1
228+
229+let bg = be._2
230+
231+let bh = be._3
232+
233+let bi = be._4
234+
235+let bj = be._5
236+
237+let bk = be._6
238+
239+let bl = be._7
240+
241+let bm = be._8
242+
243+let bn = be._9
244+
245+func bo () = split(aF(aM, ar()), n)
156246
157247
158-func aQ (aR,aS) = fraction(aR, d, aS)
248+let bp = bo()
249+
250+let bq = valueOrErrorMessage(addressFromString(bp[C]), "Invalid staking contract address")
251+
252+let br = valueOrErrorMessage(addressFromString(bp[E]), "Invalid slipage contract address")
253+
254+let bs = valueOrErrorMessage(addressFromString(bp[F]), "Invalid gwx contract address")
255+
256+let bt = valueOrErrorMessage(addressFromString(bp[D]), "Invalid gwx contract address")
257+
258+func bu (bv,bw,bx,by,bz,bA,bB,bC,bD,bE) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE)], n)
159259
160260
161-func aT (aU,aV,aW,aX) = {
162- let aY = A(aW, aU)
163- let aZ = A(aX, aV)
164- aQ(aZ, aY)
261+func bF (bG,bH,bI,by,bB,bC) = makeString(["%d%d%d%d%d%d", toString(bG), toString(bH), toString(bI), toString(by), toString(bB), toString(bC)], n)
262+
263+
264+func bJ (bK) = if ((bK == "WAVES"))
265+ then wavesBalance(this).available
266+ else assetBalance(this, fromBase58String(bK))
267+
268+
269+func bL (bM,bN) = fraction(bM, c, bN)
270+
271+
272+func bO (bM,bN,O) = fraction(bM, c, bN, O)
273+
274+
275+func bP (bQ,bR,bS) = {
276+ let bT = fraction((bQ - bR), b, bR)
277+ let bU = ((bS - T(bT)) > d)
278+ if (!(bU))
279+ then throw(("Big slpg: " + toString(bT)))
280+ else $Tuple2(bU, min([bQ, bR]))
165281 }
166282
167283
168-func ba (aW,aX,bb) = {
169- let bc = av()
170- let bd = parseIntValue(bc[q])
171- let be = parseIntValue(bc[r])
172- let bf = aT(bd, be, aW, aX)
173- let aS = A(aW, bd)
174- let aR = A(aX, be)
175- let bg = A(bb, b)
176- let bh = aQ(aS, bg)
177- let bi = aQ(aR, bg)
178-[bf, bh, bi]
284+func bV (bW,bX,bY) = {
285+ let bT = fraction(bX, b, bW)
286+ let bZ = (bY > bT)
287+ if (if (bZ)
288+ then true
289+ else (bX > bW))
290+ then throw(((((((toString(bX) + " ") + toString(bW)) + " ") + toString(bT)) + " ") + toString(bY)))
291+ else bZ
179292 }
180293
181294
182-func bj (aW,aX,bb) = {
183- let bk = ba(aW, aX, bb)
184-[D(bk[0], b), D(bk[1], b), D(bk[2], b)]
295+func ca (cb,cc,cd,ce) = {
296+ let cf = H(cd, cb)
297+ let cg = H(ce, cc)
298+ bL(cg, cf)
185299 }
186300
187301
188-func bl (bm,bn,bo,S) = {
189- let bc = av()
190- let bp = bc[n]
191- let bq = bc[o]
192- let br = bc[p]
193- let aU = parseIntValue(bc[q])
194- let aV = parseIntValue(bc[r])
195- let bs = bc[m]
196- let bt = valueOrErrorMessage(assetInfo(fromBase58String(bp)), (("Asset " + bp) + " doesn't exist")).quantity
197- if ((bp != bn))
198- then throw("Invalid asset passed.")
302+func ch (cd,ce,ci) = {
303+ let cj = bk
304+ let ck = bl
305+ let cl = ca(cj, ck, cd, ce)
306+ let bN = H(cd, cj)
307+ let bM = H(ce, ck)
308+ let cm = H(ci, a)
309+ let cn = bL(bN, cm)
310+ let co = bL(bM, cm)
311+[cl, cn, co]
312+ }
313+
314+
315+func cp (cd,ce,ci) = {
316+ let cq = ch(cd, ce, ci)
317+[K(cq[0], a), K(cq[1], a), K(cq[2], a)]
318+ }
319+
320+
321+func cr (cs,al) = {
322+ let ct = if ((al == 0))
323+ then 0
324+ else fraction(cs, al, a)
325+ $Tuple2((cs - ct), ct)
326+ }
327+
328+
329+func cu (cv,cw,cx,cy) = {
330+ let cz = bh
331+ let cA = toBase58String(value(bi))
332+ let cB = toBase58String(value(bj))
333+ let cC = bk
334+ let cD = bl
335+ let cE = toString(bg)
336+ let cF = valueOrErrorMessage(assetInfo(cz), "Wrong LP id").quantity
337+ if ((toBase58String(cz) != cw))
338+ then throw("Wrong pmt asset")
199339 else {
200- let bu = aO(bq)
201- let bv = A(bu, aU)
202- let bw = aO(br)
203- let bx = A(bw, aV)
204- let by = aQ(bx, bv)
205- let bz = D(by, b)
206- let bA = A(bo, b)
207- let bB = A(bt, b)
208- let bC = fraction(bv, bA, bB)
209- let bD = fraction(bx, bA, bB)
210- let bE = D(bC, aU)
211- let bF = D(bD, aV)
212- let bG = if ((bm == ""))
340+ let cG = bJ(cA)
341+ let cH = H(cG, cC)
342+ let cI = bJ(cB)
343+ let cJ = H(cI, cD)
344+ let cK = bL(cJ, cH)
345+ let cL = K(cK, a)
346+ let cM = H(cx, a)
347+ let cN = H(cF, a)
348+ let cO = fraction(cH, cM, cN)
349+ let cP = fraction(cJ, cM, cN)
350+ let cQ = N(cO, cC, FLOOR)
351+ let cR = N(cP, cD, FLOOR)
352+ let cS = if ((cv == ""))
213353 then nil
214- else [ScriptTransfer(S, bE, if ((bq == "WAVES"))
354+ else [ScriptTransfer(cy, cQ, if ((cA == "WAVES"))
215355 then unit
216- else fromBase58String(bq)), ScriptTransfer(S, bF, if ((br == "WAVES"))
356+ else fromBase58String(cA)), ScriptTransfer(cy, cR, if ((cB == "WAVES"))
217357 then unit
218- else fromBase58String(br)), StringEntry(U(toString(S), bm), aK(bE, bF, bo, bz, height, lastBlock.timestamp)), IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz)]
219- $Tuple10(bE, bF, bq, br, bu, bw, bt, by, bs, bG)
358+ else fromBase58String(cB)), StringEntry(af(toString(cy), cv), bF(cQ, cR, cx, cL, height, lastBlock.timestamp)), IntegerEntry(Y(), cL), IntegerEntry(Z(height, lastBlock.timestamp), cL)]
359+ $Tuple10(cQ, cR, cA, cB, cG, cI, cF, cK, cE, cS)
220360 }
221361 }
222362
223363
224-func bH (bm,bI,bJ,bK,bL,bM,S,bN,bO) = {
225- let bc = av()
226- let bp = fromBase58String(bc[n])
227- let bP = bc[o]
228- let bQ = bc[p]
229- let bR = bc[s]
230- let bS = bc[t]
231- let bd = parseIntValue(bc[q])
232- let be = parseIntValue(bc[r])
233- let bs = bc[m]
234- let bt = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
235- let bT = toBase58String(valueOrElse(bK, fromBase58String("WAVES")))
236- let bU = toBase58String(valueOrElse(bM, fromBase58String("WAVES")))
237- if (if ((bP != bT))
238- then true
239- else (bQ != bU))
240- then throw("Invalid amt or price asset passed.")
364+func cT (cv,bS,cU,cV,cW,cX,cy,cY,cZ,da,db,dc,dd) = {
365+ let cz = bh
366+ let de = toBase58String(value(bi))
367+ let df = toBase58String(value(bj))
368+ let dg = bm
369+ let dh = bn
370+ let di = bk
371+ let dj = bl
372+ let cE = toString(bg)
373+ let dk = valueOrErrorMessage(assetInfo(cz), "Wr lp as").quantity
374+ let cG = if (cY)
375+ then bJ(de)
376+ else if (if (da)
377+ then (dd == de)
378+ else false)
379+ then (bJ(de) - dc)
380+ else if (da)
381+ then bJ(de)
382+ else (bJ(de) - cU)
383+ let cI = if (cY)
384+ then bJ(df)
385+ else if (if (da)
386+ then (dd == df)
387+ else false)
388+ then (bJ(df) - dc)
389+ else if (da)
390+ then bJ(df)
391+ else (bJ(df) - cW)
392+ let dl = H(cU, di)
393+ let dm = H(cW, dj)
394+ let dn = bL(dm, dl)
395+ let cH = H(cG, di)
396+ let cJ = H(cI, dj)
397+ let do = if ((dk == 0))
398+ then {
399+ let cK = d
400+ let dp = d
401+ let cm = pow((dl * dm), 0, toBigInt(5), 1, 0, DOWN)
402+ $Tuple5(K(cm, a), K(dl, di), K(dm, dj), bL((cJ + dm), (cH + dl)), dp)
403+ }
241404 else {
242- let bu = if (bN)
243- then aO(bP)
244- else (aO(bP) - bJ)
245- let bw = if (bN)
246- then aO(bQ)
247- else (aO(bQ) - bL)
248- let bV = A(bJ, bd)
249- let bW = A(bL, be)
250- let bX = aQ(bW, bV)
251- let bv = A(bu, bd)
252- let bx = A(bw, be)
253- let bY = if ((bt == 0))
254- then {
255- let by = e
256- let bZ = e
257- let bg = pow((bV * bW), 0, toBigInt(5), 1, 0, DOWN)
258- $Tuple5(D(bg, b), D(bV, bd), D(bW, be), aQ((bx + bW), (bv + bV)), bZ)
405+ let cK = bL(cJ, cH)
406+ let dq = fraction(T((cK - dn)), c, cK)
407+ let dp = H(bS, a)
408+ if (if (if (db)
409+ then (cK != d)
410+ else false)
411+ then (dq > dp)
412+ else false)
413+ then throw(((("Price slippage " + toString(dq)) + " > ") + toString(dp)))
414+ else {
415+ let dr = H(dk, a)
416+ let ds = fraction(dl, bO(cJ, cH, FLOOR), c, FLOOR)
417+ let dt = fraction(dm, c, bO(cJ, cH, FLOOR), FLOOR)
418+ let du = if ((ds > dm))
419+ then $Tuple2(dt, dm)
420+ else $Tuple2(dl, ds)
421+ let dv = du._1
422+ let dw = du._2
423+ let cm = fraction(dr, dw, cJ, FLOOR)
424+ $Tuple5(N(cm, a, FLOOR), N(dv, di, CEILING), N(dw, dj, CEILING), cK, dp)
259425 }
260- else {
261- let by = aQ(bx, bv)
262- let bZ = fraction(K((by - bX)), d, by)
263- let ca = A(bI, b)
264- if (if ((by != e))
265- then (bZ > ca)
266- else false)
267- then throw(((("Price slippage " + toString(bZ)) + " exceeded the passed limit of ") + toString(ca)))
268- else {
269- let bB = A(bt, b)
270- let cb = fraction(bV, by, d)
271- let cc = fraction(bW, d, by)
272- let cd = if ((cb > bW))
273- then $Tuple2(cc, bW)
274- else $Tuple2(bV, cb)
275- let ce = cd._1
276- let cf = cd._2
277- let bg = fraction(bB, cf, bx)
278- $Tuple5(D(bg, b), D(ce, bd), D(cf, be), by, bZ)
279- }
280- }
281- let cg = bY._1
282- let ch = bY._2
283- let ci = bY._3
284- let bz = D(bY._4, b)
285- let cj = D(bY._5, b)
286- if ((0 >= cg))
287- then throw("Invalid calculations. LP calculated is less than zero.")
288- else {
289- let ck = if (!(bO))
290- then 0
291- else cg
292- let cl = (bJ - ch)
293- let cm = (bL - ci)
294- let cn = [IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz), StringEntry(R(S, bm), az(ch, ci, ck, bz, bI, cj, height, lastBlock.timestamp, cl, cm))]
295- $Tuple13(cg, ck, bz, bu, bw, bt, bp, bs, cn, cl, cm, bK, bM)
296- }
426+ }
427+ let dx = do._1
428+ let dy = do._2
429+ let dz = do._3
430+ let cL = K(do._4, a)
431+ let dA = K(do._5, a)
432+ if ((0 >= dx))
433+ then throw("LP <= 0")
434+ else {
435+ let dB = if (!(cZ))
436+ then 0
437+ else dx
438+ let dC = (cU - dy)
439+ let dD = (cW - dz)
440+ let dE = if (if (da)
441+ then (dd == de)
442+ else false)
443+ then $Tuple2(dc, 0)
444+ else if (if (da)
445+ then (dd == df)
446+ else false)
447+ then $Tuple2(0, dc)
448+ else $Tuple2(dy, dz)
449+ let dF = dE._1
450+ let dG = dE._2
451+ let dH = [IntegerEntry(Y(), cL), IntegerEntry(Z(height, lastBlock.timestamp), cL), StringEntry(ac(cy, cv), bu(dF, dG, dB, cL, bS, dA, height, lastBlock.timestamp, dC, dD))]
452+ $Tuple13(dx, dB, cL, cG, cI, dk, cz, cE, dH, dC, dD, cV, cX)
297453 }
298454 }
299455
300456
301-func co (cp) = {
302- let bc = av()
303- let cq = bc[o]
304- let cr = bc[p]
305- let bs = parseIntValue(bc[m])
306- let bd = parseIntValue(bc[q])
307- let be = parseIntValue(bc[r])
308- let cs = aO(cq)
309- let ct = aO(cr)
310- let by = if ((cp.orderType == Buy))
311- then aT(bd, be, (cs + cp.amount), ct)
312- else aT(bd, be, (cs - cp.amount), ct)
313- let bz = D(by, b)
314- if (if (if (at())
315- then true
316- else (bs == j))
317- then true
318- else (bs == k))
319- then throw("Exchange operations disabled")
457+func dI (dJ) = {
458+ let dK = dJ[0]
459+ let dL = dJ[1]
460+ let dM = (dK + dL)
461+ if ((dM == e))
462+ then e
320463 else {
321- let cu = cp.assetPair.amountAsset
322- let cv = if ((cu == unit))
323- then "WAVES"
324- else toBase58String(value(cu))
325- let cw = cp.assetPair.priceAsset
326- let cx = if ((cw == unit))
327- then "WAVES"
328- else toBase58String(value(cw))
329- if (if ((cv != cq))
330- then true
331- else (cx != cr))
332- then throw("Wrong order assets.")
464+ let dN = parseIntValue(aQ)
465+ let dO = (dN * 2)
466+ let cq = fraction(dK, dL, f)
467+ let dP = fraction(cq, i, f)
468+ let dQ = fraction(toBigInt(dO), dM, f)
469+ let dR = toBigInt((dO - 1))
470+ func dS (dT) = {
471+ let dU = fraction(dT, dT, f)
472+ let dV = fraction(dU, dT, f)
473+ let dW = fraction(dV, f, dP)
474+ fraction((dQ + fraction(dW, g, f)), dT, (fraction(dR, dT, f) + fraction(h, dW, f)), CEILING)
475+ }
476+
477+ func dX (dY,dZ) = if (dY._2)
478+ then dY
333479 else {
334- let cy = cp.price
335- let cz = fraction(b, be, bd)
336- let cA = G(cy, b, cz)
337- let cB = if ((cp.orderType == Buy))
338- then (bz >= cA)
339- else (cA >= bz)
340- true
480+ let dT = dY._1
481+ let ea = dS(dT)
482+ let eb = toInt((ea - value(dT)))
483+ let ec = if ((0 > eb))
484+ then -(eb)
485+ else eb
486+ if ((1 >= ec))
487+ then $Tuple2(ea, true)
488+ else $Tuple2(ea, false)
341489 }
490+
491+ let ed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
492+ let ee = {
493+ let ef = ed
494+ let eg = size(ef)
495+ let eh = $Tuple2(dM, false)
496+ func ei (ej,ek) = if ((ek >= eg))
497+ then ej
498+ else dX(ej, ef[ek])
499+
500+ func el (ej,ek) = if ((ek >= eg))
501+ then ej
502+ else throw("List size exceeds 15")
503+
504+ el(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(eh, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
505+ }
506+ let dT = ee._1
507+ let em = ee._2
508+ if (em)
509+ then dT
510+ else throw(("D calculation error, D = " + toString(dT)))
342511 }
343512 }
344513
345514
346-func cC (cD) = if ((size(cD.payments) != 1))
347- then throw("exactly 1 payment is expected")
515+func en (dJ) = {
516+ let eo = g
517+ let dK = dJ[0]
518+ let dL = dJ[1]
519+ let ep = parseBigIntValue(l)
520+ let dN = (parseBigIntValue(aQ) * ep)
521+ let dM = (dK + dL)
522+ if ((dM == e))
523+ then e
524+ else {
525+ let dO = (dN * eo)
526+ let dP = (((dK * dL) * eo) * eo)
527+ let eq = ((dO * dM) / ep)
528+ let er = (dO - ep)
529+ let es = (eo + f)
530+ func dX (dY,et) = {
531+ let eu = dY
532+ let dT = eu._1
533+ let em = eu._2
534+ if ((em != unit))
535+ then dY
536+ else {
537+ let dW = (((dT * dT) * dT) / dP)
538+ let ea = (((eq + (dW * eo)) * dT) / (((er * dT) / ep) + (es * dW)))
539+ let ec = U((ea - value(dT)))
540+ if ((f >= ec))
541+ then $Tuple2(ea, et)
542+ else $Tuple2(ea, unit)
543+ }
544+ }
545+
546+ let ed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
547+ let ev = {
548+ let ef = ed
549+ let eg = size(ef)
550+ let eh = $Tuple2(dM, unit)
551+ func ei (ej,ek) = if ((ek >= eg))
552+ then ej
553+ else dX(ej, ef[ek])
554+
555+ func el (ej,ek) = if ((ek >= eg))
556+ then ej
557+ else throw("List size exceeds 15")
558+
559+ el(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(eh, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
560+ }
561+ let dT = ev._1
562+ let em = ev._2
563+ if ((em != unit))
564+ then dT
565+ else throw(("D calculation error, D = " + toString(dT)))
566+ }
567+ }
568+
569+
570+func ew (dJ,dZ,ex) = {
571+ let eo = g
572+ let ey = dJ[if ((dZ == 0))
573+ then 1
574+ else 0]
575+ let ep = parseBigIntValue(l)
576+ let dN = (parseBigIntValue(aQ) * ep)
577+ let dM = ey
578+ let dO = (dN * eo)
579+ let ez = (((((ex * ex) / (ey * eo)) * ex) * ep) / (dO * eo))
580+ let eA = ((dM + ((ex * ep) / dO)) - ex)
581+ func dX (dY,et) = {
582+ let eB = dY
583+ let eC = eB._1
584+ let em = eB._2
585+ if ((em != unit))
586+ then dY
587+ else {
588+ let eD = (((eC * eC) + ez) / ((g * eC) + eA))
589+ let eE = U((eD - value(eC)))
590+ if ((f >= eE))
591+ then $Tuple2(eD, et)
592+ else $Tuple2(eD, unit)
593+ }
594+ }
595+
596+ let ed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
597+ let eF = {
598+ let ef = ed
599+ let eg = size(ef)
600+ let eh = $Tuple2(ex, unit)
601+ func ei (ej,ek) = if ((ek >= eg))
602+ then ej
603+ else dX(ej, ef[ek])
604+
605+ func el (ej,ek) = if ((ek >= eg))
606+ then ej
607+ else throw("List size exceeds 15")
608+
609+ el(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(eh, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
610+ }
611+ let eC = eF._1
612+ let em = eF._2
613+ if ((em != unit))
614+ then eC
615+ else throw(("Y calculation error, Y = " + toString(eC)))
616+ }
617+
618+
619+func eG (eH,eI,eJ) = {
620+ let eK = fraction(dI([eH, eI]), c, eJ)
621+ if ((eJ == e))
622+ then e
623+ else eK
624+ }
625+
626+
627+func eL (eM,eN,eO) = {
628+ let eP = (toBigInt(bJ(ba(bi))) - eM)
629+ let eQ = (toBigInt(bJ(ba(bj))) - eN)
630+ let eR = (toBigInt(value(assetInfo(bh)).quantity) - eO)
631+ let eS = eG(eP, eQ, eR)
632+ eS
633+ }
634+
635+
636+func eT (eU,eV,eO) = {
637+ let eP = (bJ(ba(bi)) + eU)
638+ let eQ = (bJ(ba(bj)) + eV)
639+ let eR = (value(assetInfo(bh)).quantity + eO)
640+ let eK = eG(toBigInt(eP), toBigInt(eQ), toBigInt(eR))
641+ let eW = [IntegerEntry(an, height), StringEntry(am, toString(eK))]
642+ $Tuple2(eW, eK)
643+ }
644+
645+
646+func eX (eY,eK) = if ((eK >= eY))
647+ then true
648+ else aJ("updated DLp lower than current DLp")
649+
650+
651+func eZ (fa) = {
652+ let fb = fa.amount
653+ let fc = fraction(fa.amount, fa.price, a, FLOOR)
654+ let fd = if ((fa.orderType == Buy))
655+ then $Tuple2(fb, -(fc))
656+ else $Tuple2(-(fb), fc)
657+ let eU = fd._1
658+ let eV = fd._2
659+ if (if (if (aR())
660+ then true
661+ else (bg == r))
662+ then true
663+ else (bg == s))
664+ then throw("Admin blocked")
665+ else if (if ((fa.assetPair.amountAsset != bi))
666+ then true
667+ else (fa.assetPair.priceAsset != bj))
668+ then throw("Wr assets")
669+ else {
670+ let fe = parseBigIntValue(getStringValue(this, am))
671+ let ff = eT(eU, eV, 0)
672+ let fg = ff._1
673+ let fh = ff._2
674+ let fi = (fh >= fe)
675+ fi
676+ }
677+ }
678+
679+
680+func fj (dZ) = if ((size(dZ.payments) != 1))
681+ then throw("1 pmnt exp")
348682 else {
349- let cE = value(cD.payments[0])
350- let bn = value(cE.assetId)
351- let cF = cE.amount
352- let bY = bl(toBase58String(cD.transactionId), toBase58String(bn), cF, cD.caller)
353- let bE = bY._1
354- let bF = bY._2
355- let bs = parseIntValue(bY._9)
356- let bG = bY._10
357- if (if (at())
683+ let fk = value(dZ.payments[0])
684+ let cw = value(fk.assetId)
685+ let dc = fk.amount
686+ let do = cu(toBase58String(dZ.transactionId), toBase58String(cw), dc, dZ.caller)
687+ let cQ = do._1
688+ let cR = do._2
689+ let cE = parseIntValue(do._9)
690+ let cS = do._10
691+ if (if (aR())
358692 then true
359- else (bs == k))
360- then throw(("Get operation is blocked by admin. Status = " + toString(bs)))
361- else $Tuple5(bE, bF, cF, bn, bG)
693+ else (cE == s))
694+ then throw(("Admin blocked: " + toString(cE)))
695+ else $Tuple5(cQ, cR, dc, cw, cS)
362696 }
363697
364698
365-func cG (cD,bI,bO) = if ((size(cD.payments) != 2))
366- then throw("exactly 2 payments are expected")
367- else {
368- let cH = value(cD.payments[0])
369- let cI = value(cD.payments[1])
370- let cJ = bH(toBase58String(cD.transactionId), bI, cH.amount, cH.assetId, cI.amount, cI.assetId, toString(cD.caller), false, bO)
371- let bs = parseIntValue(cJ._8)
372- if (if (if (at())
373- then true
374- else (bs == i))
375- then true
376- else (bs == k))
377- then throw(("Put operation is blocked by admin. Status = " + toString(bs)))
378- else cJ
379- }
699+func fl (fm,ae,fn,fo,bS,cZ,da,db,dc,dd) = {
700+ let do = cT(ae, bS, value(fn).amount, value(fn).assetId, value(fo).amount, value(fo).assetId, fm, (ae == ""), cZ, da, db, dc, dd)
701+ let cE = parseIntValue(do._8)
702+ if (if (if (aR())
703+ then true
704+ else (cE == q))
705+ then true
706+ else (cE == s))
707+ then throw(("Blocked:" + toString(cE)))
708+ else do
709+ }
380710
381711
382-@Callable(cD)
383-func constructor (as,cK) = if ((cD.caller != this))
384- then throw("permissions denied")
385- else [StringEntry(L(), as), StringEntry(M(), cK)]
712+func fp (fq,cw,cy,ae,fr) = {
713+ let cA = toBase58String(value(bi))
714+ let cB = toBase58String(value(bj))
715+ let cz = bh
716+ let di = bk
717+ let dj = bl
718+ let eR = toBigInt(valueOrErrorMessage(assetInfo(cz), "invalid lp asset").quantity)
719+ let fs = if ((eR > e))
720+ then true
721+ else throw("initial deposit requires all coins")
722+ if ((fs == fs))
723+ then {
724+ let cG = bJ(cA)
725+ let cI = bJ(cB)
726+ let ft = if ((ae == ""))
727+ then $Tuple2(cG, cI)
728+ else if ((cw == cA))
729+ then if ((fq > cG))
730+ then throw("invalid payment amount")
731+ else $Tuple2((cG - fq), cI)
732+ else if ((cw == cB))
733+ then if ((fq > cI))
734+ then throw("invalid payment amount")
735+ else $Tuple2(cG, (cI - fq))
736+ else throw("wrong pmtAssetId")
737+ let fu = ft._1
738+ let fv = ft._2
739+ let fw = if ((cw == cA))
740+ then $Tuple2(fq, 0)
741+ else if ((cw == cB))
742+ then $Tuple2(0, fq)
743+ else throw("invalid payment")
744+ let fx = fw._1
745+ let fy = fw._2
746+ let fz = if (fr)
747+ then $Tuple3(cr(fx, aN)._1, cr(fy, aN)._1, cr(fq, aN)._2)
748+ else $Tuple3(fx, fy, 0)
749+ let fA = fz._1
750+ let fB = fz._2
751+ let ct = fz._3
752+ let fC = (fu + fA)
753+ let fD = (fv + fB)
754+ let bX = dI([toBigInt(fu), toBigInt(fv)])
755+ let bW = dI([toBigInt(fC), toBigInt(fD)])
756+ let fE = if ((bW > bX))
757+ then true
758+ else throw()
759+ if ((fE == fE))
760+ then {
761+ let fF = fraction(eR, (bW - bX), bX, FLOOR)
762+ let cL = K(bL(H(fD, dj), H(fC, di)), a)
763+ let dH = [IntegerEntry(Y(), cL), IntegerEntry(Z(height, lastBlock.timestamp), cL), StringEntry(ac(cy, ae), bu(fx, fy, toInt(fF), cL, 0, 0, height, lastBlock.timestamp, 0, 0))]
764+ let fG = fraction(fv, a, fu)
765+ let fH = fraction(fq, a, (fG + a))
766+ let fI = (fq - fH)
767+ let fJ = fraction(eR, toBigInt(fI), toBigInt(fv))
768+ let fK = toInt(fraction((fF - fJ), b, fJ))
769+ $Tuple4(toInt(fF), dH, ct, fK)
770+ }
771+ else throw("Strict value is not equal to itself.")
772+ }
773+ else throw("Strict value is not equal to itself.")
774+ }
775+
776+
777+func fL (fM,fN,fO,fm,fP,fQ) = {
778+ let cz = toBase58String(value(bh))
779+ let cA = toBase58String(value(bi))
780+ let cB = toBase58String(value(bj))
781+ let fR = bk
782+ let fS = bl
783+ let fT = bg
784+ let cy = if ((fm == bt))
785+ then fP
786+ else fm
787+ let fk = value(fO[0])
788+ let cw = value(fk.assetId)
789+ let dc = fk.amount
790+ let eS = eL(e, e, e)
791+ if ((eS == eS))
792+ then {
793+ let cv = toBase58String(fQ)
794+ if ((cz != toBase58String(cw)))
795+ then throw("Wrong LP")
796+ else {
797+ let cG = bJ(cA)
798+ let cI = bJ(cB)
799+ let fU = {
800+ let aO = invoke(this, "getOneTknV2READONLY", [fM, dc], nil)
801+ if ($isInstanceOf(aO, "(Int, Int)"))
802+ then aO
803+ else throw(($getType(aO) + " couldn't be cast to (Int, Int)"))
804+ }
805+ if ((fU == fU))
806+ then {
807+ let ct = fU._2
808+ let fV = fU._1
809+ let fW = if (if ((fN > 0))
810+ then (fN > fV)
811+ else false)
812+ then aJ(makeString(["amount to receive is less than ", toString(fN)], ""))
813+ else fV
814+ let fX = if ((fM == cA))
815+ then $Tuple4(fW, 0, ((cG - fW) - ct), cI)
816+ else if ((fM == cB))
817+ then $Tuple4(0, fW, cG, ((cI - fW) - ct))
818+ else throw("invalid out asset id")
819+ let fY = fX._1
820+ let fZ = fX._2
821+ let fC = fX._3
822+ let fD = fX._4
823+ let ga = bL(H(fD, fS), H(fC, fR))
824+ let gb = K(ga, a)
825+ let gc = if ((fM == "WAVES"))
826+ then unit
827+ else fromBase58String(fM)
828+ let gd = if ((ct > 0))
829+ then [ScriptTransfer(aT, ct, gc)]
830+ else nil
831+ let cS = ([ScriptTransfer(cy, fW, gc), StringEntry(af(toString(cy), cv), bF(fY, fZ, dc, gb, height, lastBlock.timestamp)), IntegerEntry(Y(), gb), IntegerEntry(Z(height, lastBlock.timestamp), gb)] ++ gd)
832+ if ((cS == cS))
833+ then {
834+ let ge = invoke(aM, "burn", [dc], [AttachedPayment(cw, dc)])
835+ if ((ge == ge))
836+ then {
837+ let gf = {
838+ let gg = if ((this == aT))
839+ then 0
840+ else ct
841+ let gh = if ((aY(fM) == bi))
842+ then true
843+ else false
844+ if (gh)
845+ then $Tuple2(-((fV + gg)), 0)
846+ else $Tuple2(0, -((fV + gg)))
847+ }
848+ let eU = gf._1
849+ let eV = gf._2
850+ let gi = eT(eU, eV, 0)
851+ let gj = gi._1
852+ let eK = gi._2
853+ let gk = eX(eS, eK)
854+ if ((gk == gk))
855+ then $Tuple2((cS ++ gj), fW)
856+ else throw("Strict value is not equal to itself.")
857+ }
858+ else throw("Strict value is not equal to itself.")
859+ }
860+ else throw("Strict value is not equal to itself.")
861+ }
862+ else throw("Strict value is not equal to itself.")
863+ }
864+ }
865+ else throw("Strict value is not equal to itself.")
866+ }
867+
868+
869+func gl () = {
870+ let gm = getString(W())
871+ if ($isInstanceOf(gm, "String"))
872+ then {
873+ let dM = gm
874+ fromBase58String(dM)
875+ }
876+ else if ($isInstanceOf(gm, "Unit"))
877+ then unit
878+ else throw("Match error")
879+ }
880+
881+
882+func gn () = {
883+ let gm = getString(X())
884+ if ($isInstanceOf(gm, "String"))
885+ then {
886+ let dM = gm
887+ fromBase58String(dM)
888+ }
889+ else if ($isInstanceOf(gm, "Unit"))
890+ then unit
891+ else throw("Match error")
892+ }
893+
894+
895+let go = throw("Permission denied")
896+
897+func gp (dZ) = {
898+ let gm = gl()
899+ if ($isInstanceOf(gm, "ByteVector"))
900+ then {
901+ let gq = gm
902+ (dZ.callerPublicKey == gq)
903+ }
904+ else if ($isInstanceOf(gm, "Unit"))
905+ then (dZ.caller == this)
906+ else throw("Match error")
907+ }
908+
909+
910+func gr (dZ) = {
911+ let gm = gl()
912+ if ($isInstanceOf(gm, "ByteVector"))
913+ then {
914+ let gq = gm
915+ if ((dZ.callerPublicKey == gq))
916+ then true
917+ else go
918+ }
919+ else if ($isInstanceOf(gm, "Unit"))
920+ then if ((dZ.caller == this))
921+ then true
922+ else go
923+ else throw("Match error")
924+ }
925+
926+
927+@Callable(dZ)
928+func constructor (V) = {
929+ let ez = gr(dZ)
930+ if ((ez == ez))
931+ then [StringEntry(V(), V)]
932+ else throw("Strict value is not equal to itself.")
933+ }
386934
387935
388936
389-@Callable(cD)
390-func put (bI,cL) = {
391- let cM = ay()
392- let cN = valueOrErrorMessage(addressFromString(cM[y]), "Error. Incorrect staking address.")
393- let cO = valueOrErrorMessage(addressFromString(cM[z]), "Error. Incorrect slippage contract address.")
394- if ((0 > bI))
395- then throw("Invalid slippageTolerance passed")
396- else {
397- let cJ = cG(cD, bI, true)
398- let ck = cJ._2
399- let bp = cJ._7
400- let bG = cJ._9
401- let cl = cJ._10
402- let cm = cJ._11
403- let cP = cJ._12
404- let cQ = cJ._13
405- let cR = invoke(as, "emit", [ck], nil)
406- if ((cR == cR))
937+@Callable(dZ)
938+func setManager (gs) = {
939+ let ez = gr(dZ)
940+ if ((ez == ez))
941+ then {
942+ let gt = fromBase58String(gs)
943+ if ((gt == gt))
944+ then [StringEntry(X(), gs)]
945+ else throw("Strict value is not equal to itself.")
946+ }
947+ else throw("Strict value is not equal to itself.")
948+ }
949+
950+
951+
952+@Callable(dZ)
953+func confirmManager () = {
954+ let cq = gn()
955+ let gu = if (isDefined(cq))
956+ then true
957+ else throw("No pending manager")
958+ if ((gu == gu))
959+ then {
960+ let gv = if ((dZ.callerPublicKey == value(cq)))
961+ then true
962+ else throw("You are not pending manager")
963+ if ((gv == gv))
964+ then [StringEntry(W(), toBase58String(value(cq))), DeleteEntry(X())]
965+ else throw("Strict value is not equal to itself.")
966+ }
967+ else throw("Strict value is not equal to itself.")
968+ }
969+
970+
971+
972+@Callable(dZ)
973+func put (gw,gx) = {
974+ let gy = bo()
975+ let gz = valueOrErrorMessage(addressFromString(gy[C]), "Wr st addr")
976+ let gA = valueOrErrorMessage(addressFromString(gy[E]), "Wr sl addr")
977+ if ((0 > gw))
978+ then throw("Wrong slippage")
979+ else if ((size(dZ.payments) != 2))
980+ then throw("2 pmnts expd")
981+ else {
982+ let gB = toBigInt(value(dZ.payments[0]).amount)
983+ let gC = toBigInt(value(dZ.payments[1]).amount)
984+ let eP = (toBigInt(bJ(ba(bi))) - gB)
985+ if ((eP == eP))
986+ then {
987+ let eQ = (toBigInt(bJ(ba(bj))) - gC)
988+ if ((eQ == eQ))
989+ then {
990+ let eR = toBigInt(value(assetInfo(bh)).quantity)
991+ if ((eR == eR))
992+ then {
993+ let eS = eL(gB, gC, toBigInt(0))
994+ if ((eS == eS))
995+ then {
996+ let gD = fl(toString(dZ.caller), toBase58String(dZ.transactionId), AttachedPayment(value(dZ.payments[0]).assetId, value(dZ.payments[0]).amount), dZ.payments[1], gw, true, false, true, 0, "")
997+ let dB = gD._2
998+ let gE = gD._7
999+ let cS = gD._9
1000+ let dC = gD._10
1001+ let dD = gD._11
1002+ let cA = gD._12
1003+ let cB = gD._13
1004+ let do = invoke(aM, "emit", [dB], nil)
1005+ if ((do == do))
1006+ then {
1007+ let gF = {
1008+ let gm = do
1009+ if ($isInstanceOf(gm, "Address"))
1010+ then {
1011+ let gG = gm
1012+ invoke(gG, "emit", [dB], nil)
1013+ }
1014+ else unit
1015+ }
1016+ if ((gF == gF))
1017+ then {
1018+ let gH = if ((dC > 0))
1019+ then invoke(gA, "put", nil, [AttachedPayment(cA, dC)])
1020+ else nil
1021+ if ((gH == gH))
1022+ then {
1023+ let gI = if ((dD > 0))
1024+ then invoke(gA, "put", nil, [AttachedPayment(cB, dD)])
1025+ else nil
1026+ if ((gI == gI))
1027+ then {
1028+ let gJ = if (gx)
1029+ then {
1030+ let gK = invoke(gz, "stake", nil, [AttachedPayment(gE, dB)])
1031+ if ((gK == gK))
1032+ then nil
1033+ else throw("Strict value is not equal to itself.")
1034+ }
1035+ else [ScriptTransfer(dZ.caller, dB, gE)]
1036+ let gL = eT(0, 0, 0)
1037+ let gj = gL._1
1038+ let eK = gL._2
1039+ let gM = if ((eK >= eS))
1040+ then true
1041+ else aJ(makeString(["updated DLp lower than current DLp", toString(eP), toString(eQ), toString(eR), toString(eS), toString(eK), toString(dC), toString(dD)], " "))
1042+ if ((gM == gM))
1043+ then {
1044+ let gN = value(assetInfo(bh)).quantity
1045+ if ((gN == gN))
1046+ then ((cS ++ gJ) ++ gj)
1047+ else throw("Strict value is not equal to itself.")
1048+ }
1049+ else throw("Strict value is not equal to itself.")
1050+ }
1051+ else throw("Strict value is not equal to itself.")
1052+ }
1053+ else throw("Strict value is not equal to itself.")
1054+ }
1055+ else throw("Strict value is not equal to itself.")
1056+ }
1057+ else throw("Strict value is not equal to itself.")
1058+ }
1059+ else throw("Strict value is not equal to itself.")
1060+ }
1061+ else throw("Strict value is not equal to itself.")
1062+ }
1063+ else throw("Strict value is not equal to itself.")
1064+ }
1065+ else throw("Strict value is not equal to itself.")
1066+ }
1067+ }
1068+
1069+
1070+
1071+@Callable(dZ)
1072+func putOneTknV2 (fN,gx) = {
1073+ let gO = {
1074+ let aO = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1075+ if ($isInstanceOf(aO, "Boolean"))
1076+ then aO
1077+ else throw(($getType(aO) + " couldn't be cast to Boolean"))
1078+ }
1079+ let gP = if (if (if (aR())
1080+ then true
1081+ else (bg == q))
1082+ then true
1083+ else (bg == s))
1084+ then true
1085+ else gO
1086+ let gQ = [if (if (!(gP))
1087+ then true
1088+ else gp(dZ))
1089+ then true
1090+ else aJ("put operation is blocked by admin"), if ((size(dZ.payments) == 1))
1091+ then true
1092+ else aJ("exactly 1 payment are expected")]
1093+ if ((gQ == gQ))
1094+ then {
1095+ let cA = toBase58String(value(bi))
1096+ let cB = toBase58String(value(bj))
1097+ let cz = bh
1098+ let fR = bk
1099+ let fS = bl
1100+ let cy = if ((dZ.caller == this))
1101+ then dZ.originCaller
1102+ else dZ.caller
1103+ let fk = value(dZ.payments[0])
1104+ let cw = toBase58String(value(fk.assetId))
1105+ let dc = fk.amount
1106+ let eS = if ((fk.assetId == bi))
1107+ then eL(toBigInt(dc), toBigInt(0), toBigInt(0))
1108+ else eL(toBigInt(0), toBigInt(dc), toBigInt(0))
1109+ if ((eS == eS))
4071110 then {
408- let cS = if ((cl > 0))
409- then invoke(cO, "put", nil, [AttachedPayment(cP, cl)])
410- else nil
411- if ((cS == cS))
1111+ let gR = fp(dc, cw, toString(cy), toBase58String(dZ.transactionId), true)
1112+ if ((gR == gR))
4121113 then {
413- let cT = if ((cm > 0))
414- then invoke(cO, "put", nil, [AttachedPayment(cQ, cm)])
415- else nil
416- if ((cT == cT))
1114+ let ct = gR._3
1115+ let cS = gR._2
1116+ let gS = gR._1
1117+ let dB = if (if ((fN > 0))
1118+ then (fN > gS)
1119+ else false)
1120+ then aJ(makeString(["amount to receive is less than ", toString(fN)], ""))
1121+ else gS
1122+ let gD = invoke(aM, "emit", [dB], nil)
1123+ if ((gD == gD))
4171124 then {
418- let cU = if (cL)
1125+ let gF = {
1126+ let gm = gD
1127+ if ($isInstanceOf(gm, "Address"))
1128+ then {
1129+ let gG = gm
1130+ invoke(gG, "emit", [dB], nil)
1131+ }
1132+ else unit
1133+ }
1134+ if ((gF == gF))
4191135 then {
420- let cV = invoke(cN, "stake", nil, [AttachedPayment(bp, ck)])
421- if ((cV == cV))
422- then nil
1136+ let gJ = if (gx)
1137+ then {
1138+ let gK = invoke(bq, "stake", nil, [AttachedPayment(cz, dB)])
1139+ if ((gK == gK))
1140+ then nil
1141+ else throw("Strict value is not equal to itself.")
1142+ }
1143+ else [ScriptTransfer(dZ.caller, dB, cz)]
1144+ let gd = if ((ct > 0))
1145+ then [ScriptTransfer(aT, ct, fromBase58String(cw))]
1146+ else nil
1147+ let gT = if ((this == aT))
1148+ then $Tuple2(0, 0)
1149+ else {
1150+ let gU = if ((fk.assetId == bi))
1151+ then true
1152+ else false
1153+ if (gU)
1154+ then $Tuple2(-(ct), 0)
1155+ else $Tuple2(0, -(ct))
1156+ }
1157+ let eU = gT._1
1158+ let eV = gT._2
1159+ let gV = eT(eU, eV, 0)
1160+ let gj = gV._1
1161+ let eK = gV._2
1162+ let gk = eX(eS, eK)
1163+ if ((gk == gk))
1164+ then $Tuple2((((cS ++ gJ) ++ gd) ++ gj), dB)
4231165 else throw("Strict value is not equal to itself.")
4241166 }
425- else [ScriptTransfer(cD.caller, ck, bp)]
426- (bG ++ cU)
1167+ else throw("Strict value is not equal to itself.")
4271168 }
4281169 else throw("Strict value is not equal to itself.")
4291170 }
4311172 }
4321173 else throw("Strict value is not equal to itself.")
4331174 }
434- }
435-
436-
437-
438-@Callable(cD)
439-func putForFree (cW) = if ((0 > cW))
440- then throw("Invalid value passed")
441- else {
442- let cJ = cG(cD, cW, false)
443- cJ._9
444- }
445-
446-
447-
448-@Callable(cD)
449-func get () = {
450- let bY = cC(cD)
451- let cX = bY._1
452- let bF = bY._2
453- let cF = bY._3
454- let bn = bY._4
455- let bG = bY._5
456- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
457- if ((cY == cY))
458- then bG
4591175 else throw("Strict value is not equal to itself.")
4601176 }
4611177
4621178
4631179
464-@Callable(cD)
465-func getNoLess (cZ,da) = {
466- let bY = cC(cD)
467- let bE = bY._1
468- let bF = bY._2
469- let cF = bY._3
470- let bn = bY._4
471- let bG = bY._5
472- if ((cZ > bE))
473- then throw(((("noLessThenAmtAsset failed: " + toString(bE)) + " < ") + toString(cZ)))
474- else if ((da > bF))
475- then throw(((("noLessThenPriceAsset failed: " + toString(bF)) + " < ") + toString(da)))
1180+@Callable(dZ)
1181+func putForFree (gW) = if ((0 > gW))
1182+ then throw("Wrong slpg")
1183+ else if ((size(dZ.payments) != 2))
1184+ then throw("2 pmnts expd")
1185+ else {
1186+ let gX = fl(toString(dZ.caller), toBase58String(dZ.transactionId), AttachedPayment(value(dZ.payments[0]).assetId, value(dZ.payments[0]).amount), dZ.payments[1], gW, false, false, true, 0, "")
1187+ let cS = gX._9
1188+ let gB = toBigInt(value(dZ.payments[0]).amount)
1189+ let gC = toBigInt(value(dZ.payments[1]).amount)
1190+ let eS = eL(gB, gC, toBigInt(0))
1191+ if ((eS == eS))
1192+ then {
1193+ let gY = eT(0, 0, 0)
1194+ let gj = gY._1
1195+ let eK = gY._2
1196+ let gk = eX(eS, eK)
1197+ if ((gk == gk))
1198+ then (cS ++ gj)
1199+ else throw("Strict value is not equal to itself.")
1200+ }
1201+ else throw("Strict value is not equal to itself.")
1202+ }
1203+
1204+
1205+
1206+@Callable(dZ)
1207+func get () = {
1208+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1209+ if ((eS == eS))
1210+ then {
1211+ let do = fj(dZ)
1212+ let gZ = do._1
1213+ let cR = do._2
1214+ let dc = do._3
1215+ let cw = do._4
1216+ let cS = do._5
1217+ let eA = invoke(aM, "burn", [dc], [AttachedPayment(cw, dc)])
1218+ if ((eA == eA))
1219+ then {
1220+ let ha = eT(-(gZ), -(cR), 0)
1221+ let gj = ha._1
1222+ let eK = ha._2
1223+ let gk = eX(eS, eK)
1224+ if ((gk == gk))
1225+ then (cS ++ gj)
1226+ else throw("Strict value is not equal to itself.")
1227+ }
1228+ else throw("Strict value is not equal to itself.")
1229+ }
1230+ else throw("Strict value is not equal to itself.")
1231+ }
1232+
1233+
1234+
1235+@Callable(dZ)
1236+func getOneTknV2 (fM,fN) = {
1237+ let gO = {
1238+ let aO = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1239+ if ($isInstanceOf(aO, "Boolean"))
1240+ then aO
1241+ else throw(($getType(aO) + " couldn't be cast to Boolean"))
1242+ }
1243+ let hb = if (if (aR())
1244+ then true
1245+ else (bg == s))
1246+ then true
1247+ else gO
1248+ let gQ = [if (if (!(hb))
1249+ then true
1250+ else gp(dZ))
1251+ then true
1252+ else aJ("get operation is blocked by admin"), if ((size(dZ.payments) == 1))
1253+ then true
1254+ else aJ("exactly 1 payment are expected")]
1255+ if ((gQ == gQ))
1256+ then {
1257+ let hc = fL(fM, fN, dZ.payments, dZ.caller, dZ.originCaller, dZ.transactionId)
1258+ let cS = hc._1
1259+ let fW = hc._2
1260+ $Tuple2(cS, fW)
1261+ }
1262+ else throw("Strict value is not equal to itself.")
1263+ }
1264+
1265+
1266+
1267+@Callable(dZ)
1268+func refreshDLp () = {
1269+ let hd = valueOrElse(getInteger(an), 0)
1270+ let he = if (((height - hd) >= aq))
1271+ then unit
1272+ else aJ(makeString([toString(aq), " blocks have not passed since the previous call"], ""))
1273+ if ((he == he))
1274+ then {
1275+ let fe = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, am), "0")), aL("invalid dLp"))
1276+ let hf = eT(0, 0, 0)
1277+ let hg = hf._1
1278+ let eK = hf._2
1279+ let eW = if ((fe != eK))
1280+ then hg
1281+ else aJ("nothing to refresh")
1282+ $Tuple2(eW, toString(eK))
1283+ }
1284+ else throw("Strict value is not equal to itself.")
1285+ }
1286+
1287+
1288+
1289+@Callable(dZ)
1290+func getOneTknV2READONLY (fM,hh) = {
1291+ let cA = toBase58String(value(bi))
1292+ let cB = toBase58String(value(bj))
1293+ let cz = toBase58String(value(bh))
1294+ let dJ = [toBigInt(bJ(cA)), toBigInt(bJ(cB))]
1295+ let eJ = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cz)), "invalid lp asset").quantity)
1296+ let bX = dI(dJ)
1297+ let bW = (bX - fraction(toBigInt(hh), bX, eJ))
1298+ let hi = if ((fM == cA))
1299+ then 0
1300+ else if ((fM == cB))
1301+ then 1
1302+ else throw("invalid out asset id")
1303+ let hj = ew(dJ, hi, bW)
1304+ let hk = (dJ[hi] - hj)
1305+ let hl = max([0, toInt((hk - f))])
1306+ let hm = cr(hl, aP)
1307+ let fV = hm._1
1308+ let ct = hm._2
1309+ $Tuple2(nil, $Tuple2(fV, ct))
1310+ }
1311+
1312+
1313+
1314+@Callable(dZ)
1315+func getOneTknV2WithBonusREADONLY (fM,hh) = {
1316+ let cA = toBase58String(value(bi))
1317+ let cB = toBase58String(value(bj))
1318+ let cz = toBase58String(value(bh))
1319+ let cG = bJ(cA)
1320+ let cI = bJ(cB)
1321+ let hn = {
1322+ let aO = invoke(this, "getOneTknV2READONLY", [fM, hh], nil)
1323+ if ($isInstanceOf(aO, "(Int, Int)"))
1324+ then aO
1325+ else throw(($getType(aO) + " couldn't be cast to (Int, Int)"))
1326+ }
1327+ let fV = hn._1
1328+ let ct = hn._2
1329+ let do = cu("", cz, hh, this)
1330+ let cQ = do._1
1331+ let cR = do._2
1332+ let ho = (cQ + cR)
1333+ let fK = if ((ho == 0))
1334+ then if ((fV == 0))
1335+ then 0
1336+ else throw("bonus calculation error")
1337+ else fraction((fV - ho), a, ho)
1338+ $Tuple2(nil, $Tuple3(fV, ct, fK))
1339+ }
1340+
1341+
1342+
1343+@Callable(dZ)
1344+func getNoLess (hp,hq) = {
1345+ let do = fj(dZ)
1346+ let cQ = do._1
1347+ let cR = do._2
1348+ let dc = do._3
1349+ let cw = do._4
1350+ let cS = do._5
1351+ if ((hp > cQ))
1352+ then throw(((("Failed: " + toString(cQ)) + " < ") + toString(hp)))
1353+ else if ((hq > cR))
1354+ then throw(((("Failed: " + toString(cR)) + " < ") + toString(hq)))
4761355 else {
477- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
478- if ((cY == cY))
479- then bG
1356+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1357+ if ((eS == eS))
1358+ then {
1359+ let hr = invoke(aM, "burn", [dc], [AttachedPayment(cw, dc)])
1360+ if ((hr == hr))
1361+ then {
1362+ let hs = eT(-(cQ), -(cR), 0)
1363+ let gj = hs._1
1364+ let eK = hs._2
1365+ let gk = eX(eS, eK)
1366+ if ((gk == gk))
1367+ then (cS ++ gj)
1368+ else throw("Strict value is not equal to itself.")
1369+ }
1370+ else throw("Strict value is not equal to itself.")
1371+ }
4801372 else throw("Strict value is not equal to itself.")
4811373 }
4821374 }
4831375
4841376
4851377
486-@Callable(cD)
487-func activate (db,dc) = if ((toString(cD.caller) != toString(as)))
488- then throw("permissions denied")
489- else $Tuple2([StringEntry(V(), db), StringEntry(W(), dc)], "success")
490-
491-
492-
493-@Callable(cD)
494-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, av())
495-
496-
497-
498-@Callable(cD)
499-func getAccBalanceWrapperREADONLY (aP) = $Tuple2(nil, aO(aP))
500-
501-
502-
503-@Callable(cD)
504-func calcPricesWrapperREADONLY (aW,aX,bb) = {
505- let bk = ba(aW, aX, bb)
506- $Tuple2(nil, [toString(bk[0]), toString(bk[1]), toString(bk[2])])
1378+@Callable(dZ)
1379+func unstakeAndGet (cs) = {
1380+ let ht = if ((size(dZ.payments) != 0))
1381+ then throw("No pmnts expd")
1382+ else true
1383+ if ((ht == ht))
1384+ then {
1385+ let hu = bo()
1386+ let gE = bh
1387+ let hv = valueOrErrorMessage(addressFromString(hu[C]), "Wr st addr")
1388+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1389+ let hw = invoke(hv, "unstake", [toBase58String(gE), cs], nil)
1390+ if ((hw == hw))
1391+ then {
1392+ let do = cu(toBase58String(dZ.transactionId), toBase58String(gE), cs, dZ.caller)
1393+ let cQ = do._1
1394+ let cR = do._2
1395+ let cE = parseIntValue(do._9)
1396+ let cS = do._10
1397+ let hx = if (if (aR())
1398+ then true
1399+ else (cE == s))
1400+ then throw(("Blocked: " + toString(cE)))
1401+ else true
1402+ if ((hx == hx))
1403+ then {
1404+ let hy = invoke(aM, "burn", [cs], [AttachedPayment(gE, cs)])
1405+ if ((hy == hy))
1406+ then {
1407+ let hz = eT(-(cQ), -(cR), 0)
1408+ let gj = hz._1
1409+ let eK = hz._2
1410+ let gk = eX(eS, eK)
1411+ if ((gk == gk))
1412+ then (cS ++ gj)
1413+ else throw("Strict value is not equal to itself.")
1414+ }
1415+ else throw("Strict value is not equal to itself.")
1416+ }
1417+ else throw("Strict value is not equal to itself.")
1418+ }
1419+ else throw("Strict value is not equal to itself.")
1420+ }
1421+ else throw("Strict value is not equal to itself.")
5071422 }
5081423
5091424
5101425
511-@Callable(cD)
512-func fromX18WrapperREADONLY (E,F) = $Tuple2(nil, D(parseBigIntValue(E), F))
513-
514-
515-
516-@Callable(cD)
517-func statsREADONLY () = {
518- let bc = av()
519- let bp = fromBase58String(bc[n])
520- let cq = bc[o]
521- let cr = bc[p]
522- let bR = bc[s]
523- let bS = bc[t]
524- let bd = parseIntValue(bc[q])
525- let be = parseIntValue(bc[r])
526- let dd = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
527- let cs = aO(cq)
528- let ct = aO(cr)
529- let de = if ((dd == 0))
530- then [e, e, e]
531- else ba(cs, ct, dd)
532- let bz = 0
533- let df = D(de[1], b)
534- let dg = D(de[2], b)
535- let dh = value(getInteger(as, ai(toString(this))))
536- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cs), toString(ct), toString(dd), toString(bz), toString(df), toString(dg), toString(dh)], f))
1426+@Callable(dZ)
1427+func unstakeAndGetNoLess (hA,hB,hq) = {
1428+ let hb = if (aR())
1429+ then true
1430+ else (bg == s)
1431+ let gQ = [if (!(hb))
1432+ then true
1433+ else throw("get operation is blocked by admin"), if ((size(dZ.payments) == 0))
1434+ then true
1435+ else throw("no payments are expected")]
1436+ if ((gQ == gQ))
1437+ then {
1438+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1439+ let hw = invoke(bq, "unstake", [toBase58String(bh), hA], nil)
1440+ if ((hw == hw))
1441+ then {
1442+ let hC = cu(toBase58String(dZ.transactionId), toBase58String(bh), hA, dZ.caller)
1443+ let cQ = hC._1
1444+ let cR = hC._2
1445+ let cS = hC._10
1446+ let hD = [if ((cQ >= hB))
1447+ then true
1448+ else throw(makeString(["amount asset amount to receive is less than ", toString(hB)], "")), if ((cR >= hq))
1449+ then true
1450+ else throw(makeString(["price asset amount to receive is less than ", toString(hq)], ""))]
1451+ if ((hD == hD))
1452+ then {
1453+ let hr = invoke(aM, "burn", [hA], [AttachedPayment(bh, hA)])
1454+ if ((hr == hr))
1455+ then {
1456+ let hE = eT(-(cQ), -(cR), 0)
1457+ let gj = hE._1
1458+ let eK = hE._2
1459+ let gk = eX(eS, eK)
1460+ if ((gk == gk))
1461+ then (cS ++ gj)
1462+ else throw("Strict value is not equal to itself.")
1463+ }
1464+ else throw("Strict value is not equal to itself.")
1465+ }
1466+ else throw("Strict value is not equal to itself.")
1467+ }
1468+ else throw("Strict value is not equal to itself.")
1469+ }
1470+ else throw("Strict value is not equal to itself.")
5371471 }
5381472
5391473
5401474
541-@Callable(cD)
542-func evaluatePutByAmountAssetREADONLY (bJ) = {
543- let bc = av()
544- let bp = fromBase58String(bc[n])
545- let bP = bc[o]
546- let bq = fromBase58String(bP)
547- let bQ = bc[p]
548- let br = fromBase58String(bQ)
549- let bd = parseIntValue(bc[q])
550- let be = parseIntValue(bc[r])
551- let bs = bc[m]
552- let dd = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
553- let cs = aO(bP)
554- let ct = aO(bQ)
555- let aY = A(cs, bd)
556- let aZ = A(ct, be)
557- let by = if ((dd == 0))
558- then e
559- else aQ(aZ, aY)
560- let bV = A(bJ, bd)
561- let bW = fraction(bV, by, d)
562- let bL = D(bW, be)
563- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
564- let cg = cJ._1
565- let di = cJ._3
566- let bu = cJ._4
567- let bw = cJ._5
568- let bt = cJ._6
569- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
1475+@Callable(dZ)
1476+func unstakeAndGetOneTknV2 (hA,fM,fN) = {
1477+ let gO = {
1478+ let aO = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1479+ if ($isInstanceOf(aO, "Boolean"))
1480+ then aO
1481+ else throw(($getType(aO) + " couldn't be cast to Boolean"))
1482+ }
1483+ let hb = if (if (aR())
1484+ then true
1485+ else (bg == s))
1486+ then true
1487+ else gO
1488+ let gQ = [if (if (!(hb))
1489+ then true
1490+ else gp(dZ))
1491+ then true
1492+ else aJ("get operation is blocked by admin"), if ((size(dZ.payments) == 0))
1493+ then true
1494+ else aJ("no payments are expected")]
1495+ if ((gQ == gQ))
1496+ then {
1497+ let hu = bo()
1498+ let gE = bh
1499+ let hv = valueOrErrorMessage(addressFromString(hu[C]), "Wr st addr")
1500+ let hw = invoke(hv, "unstake", [toBase58String(gE), hA], nil)
1501+ if ((hw == hw))
1502+ then {
1503+ let hF = fL(fM, fN, [AttachedPayment(gE, hA)], dZ.caller, dZ.originCaller, dZ.transactionId)
1504+ let cS = hF._1
1505+ let fW = hF._2
1506+ $Tuple2(cS, fW)
1507+ }
1508+ else throw("Strict value is not equal to itself.")
1509+ }
1510+ else throw("Strict value is not equal to itself.")
5701511 }
5711512
5721513
5731514
574-@Callable(cD)
575-func evaluatePutByPriceAssetREADONLY (bL) = {
576- let bc = av()
577- let bp = fromBase58String(bc[n])
578- let bP = bc[o]
579- let bq = fromBase58String(bP)
580- let bQ = bc[p]
581- let br = fromBase58String(bQ)
582- let bd = parseIntValue(bc[q])
583- let be = parseIntValue(bc[r])
584- let bs = bc[m]
585- let dd = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
586- let dj = aO(bP)
587- let dk = aO(bQ)
588- let dl = A(dj, bd)
589- let dm = A(dk, be)
590- let by = if ((dd == 0))
591- then e
592- else aQ(dm, dl)
593- let bW = A(bL, be)
594- let bV = fraction(bW, d, by)
595- let bJ = D(bV, bd)
596- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
597- let cg = cJ._1
598- let di = cJ._3
599- let bu = cJ._4
600- let bw = cJ._5
601- let bt = cJ._6
602- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
1515+@Callable(dZ)
1516+func putOneTknV2WithBonusREADONLY (hG,hH) = {
1517+ let hI = fp(hG, hH, "", "", true)
1518+ let fF = hI._1
1519+ let cS = hI._2
1520+ let ct = hI._3
1521+ let fK = hI._4
1522+ $Tuple2(nil, $Tuple3(fF, ct, fK))
6031523 }
6041524
6051525
6061526
607-@Callable(cD)
608-func evaluateGetREADONLY (dn,do) = {
609- let bY = bl("", dn, do, this)
610- let bE = bY._1
611- let bF = bY._2
612- let bu = bY._5
613- let bw = bY._6
614- let bt = bY._7
615- let bz = bY._8
616- let bs = parseIntValue(bY._9)
617- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bE), toString(bF), toString(bu), toString(bw), toString(bt), toString(bz), toString(bs)], f))
1527+@Callable(dZ)
1528+func putOneTknV2WithoutTakeFeeREADONLY (hG,hH) = {
1529+ let hJ = fp(hG, hH, "", "", false)
1530+ let fF = hJ._1
1531+ let cS = hJ._2
1532+ let ct = hJ._3
1533+ let fK = hJ._4
1534+ $Tuple2(nil, $Tuple3(fF, ct, fK))
6181535 }
6191536
6201537
621-@Verifier(dp)
622-func dq () = {
623- let dr = dp
624- if ($isInstanceOf(dr, "Order"))
1538+
1539+@Callable(dZ)
1540+func activate (hK,hL) = if ((toString(dZ.caller) != toString(aM)))
1541+ then throw("denied")
1542+ else $Tuple2([StringEntry(ag(), hK), StringEntry(ah(), hL)], "success")
1543+
1544+
1545+
1546+@Callable(dZ)
1547+func setS (hM,hx) = if ((toString(dZ.caller) != aF(this, aj())))
1548+ then go
1549+ else [StringEntry(hM, hx)]
1550+
1551+
1552+
1553+@Callable(dZ)
1554+func setI (hM,hx) = if ((toString(dZ.caller) != aF(this, aj())))
1555+ then go
1556+ else [IntegerEntry(hM, hx)]
1557+
1558+
1559+
1560+@Callable(dZ)
1561+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aU())
1562+
1563+
1564+
1565+@Callable(dZ)
1566+func getAccBalanceWrapperREADONLY (bK) = $Tuple2(nil, bJ(bK))
1567+
1568+
1569+
1570+@Callable(dZ)
1571+func calcPricesWrapperREADONLY (cd,ce,ci) = {
1572+ let hN = ch(cd, ce, ci)
1573+ $Tuple2(nil, [toString(hN[0]), toString(hN[1]), toString(hN[2])])
1574+ }
1575+
1576+
1577+
1578+@Callable(dZ)
1579+func fromX18WrapperREADONLY (L,hO) = $Tuple2(nil, K(parseBigIntValue(L), hO))
1580+
1581+
1582+
1583+@Callable(dZ)
1584+func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
1585+
1586+
1587+
1588+@Callable(dZ)
1589+func calcPriceBigIntWrapperREADONLY (bM,bN) = $Tuple2(nil, toString(bL(parseBigIntValue(bM), parseBigIntValue(bN))))
1590+
1591+
1592+
1593+@Callable(dZ)
1594+func estimatePutOperationWrapperREADONLY (cv,bS,cU,cV,cW,cX,hP,cY,cZ) = $Tuple2(nil, cT(cv, bS, cU, cV, cW, cX, hP, cY, cZ, true, false, 0, ""))
1595+
1596+
1597+
1598+@Callable(dZ)
1599+func estimateGetOperationWrapperREADONLY (cv,hQ,cx,hP) = {
1600+ let do = cu(cv, hQ, cx, addressFromStringValue(hP))
1601+ $Tuple2(nil, $Tuple10(do._1, do._2, do._3, do._4, do._5, do._6, do._7, toString(do._8), do._9, do._10))
1602+ }
1603+
1604+
1605+@Verifier(hR)
1606+func hS () = {
1607+ let hT = {
1608+ let gm = gl()
1609+ if ($isInstanceOf(gm, "ByteVector"))
1610+ then {
1611+ let gq = gm
1612+ gq
1613+ }
1614+ else if ($isInstanceOf(gm, "Unit"))
1615+ then hR.senderPublicKey
1616+ else throw("Match error")
1617+ }
1618+ let gm = hR
1619+ if ($isInstanceOf(gm, "Order"))
6251620 then {
626- let cp = dr
627- let ds = au()
628- let al = co(cp)
629- let am = sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
630- let an = sigVerify(cp.bodyBytes, cp.proofs[1], ds)
631- if (if (if (al)
632- then am
1621+ let fa = gm
1622+ let hU = aS()
1623+ let hV = eZ(fa)
1624+ let hW = sigVerify(fa.bodyBytes, fa.proofs[0], fa.senderPublicKey)
1625+ let hX = sigVerify(fa.bodyBytes, fa.proofs[1], hU)
1626+ if (if (if (hV)
1627+ then hW
6331628 else false)
634- then an
1629+ then hX
6351630 else false)
6361631 then true
637- else ak(al, am, an)
1632+ else aB(hV, hW, hX)
6381633 }
639- else {
640- let dt = valueOrElse(getString(this, M()), g)
641- if ((dt == g))
642- then sigVerify(dp.bodyBytes, dp.proofs[0], dp.senderPublicKey)
643- else sigVerify(dp.bodyBytes, dp.proofs[0], fromBase58String(dt))
644- }
1634+ else if ($isInstanceOf(gm, "SetScriptTransaction"))
1635+ then {
1636+ let dM = gm
1637+ let hY = blake2b256(value(dM.script))
1638+ let hZ = fromBase64String(value(getString(aM, az())))
1639+ let ia = scriptHash(this)
1640+ if (if ((hZ == hY))
1641+ then (ia != hY)
1642+ else false)
1643+ then true
1644+ else sigVerify(hR.bodyBytes, hR.proofs[0], hT)
1645+ }
1646+ else sigVerify(hR.bodyBytes, hR.proofs[0], hT)
6451647 }
6461648
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = 100000000
55
6-let b = 100000000
6+let b = toBigInt(100000000)
77
8-let c = toBigInt(100000000)
8+let c = toBigInt(1000000000000000000)
99
10-let d = toBigInt(1000000000000000000)
10+let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
14-let f = "__"
14+let f = toBigInt(1)
1515
16-let g = ""
16+let g = toBigInt(2)
1717
18-let h = 1
18+let h = toBigInt(3)
1919
20-let i = 2
20+let i = toBigInt(4)
2121
22-let j = 3
22+let j = toBigInt((a - ((a * 1) / a)))
2323
24-let k = 4
24+let k = "WAVES"
2525
26-let l = 1
26+let l = "100"
2727
28-let m = 2
28+let m = "1"
2929
30-let n = 3
30+let n = "__"
3131
32-let o = 4
32+let o = ""
3333
34-let p = 5
34+let p = 1
3535
36-let q = 6
36+let q = 2
3737
38-let r = 7
38+let r = 3
3939
40-let s = 8
40+let s = 4
4141
42-let t = 9
42+let t = 1
4343
44-let u = 10
44+let u = 2
4545
46-let v = 1
46+let v = 3
4747
48-let w = 2
48+let w = 4
4949
50-let x = 3
50+let x = 5
5151
52-let y = 1
52+let y = 6
5353
5454 let z = 7
5555
56-func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
56+let A = 8
57+
58+let B = 9
59+
60+let C = 1
61+
62+let D = 6
63+
64+let E = 7
65+
66+let F = 10
67+
68+let G = fraction(10, a, 10000)
69+
70+func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
5771
5872
59-func D (E,F) = toInt(fraction(E, toBigInt(F), d))
73+func K (L,M) = toInt(fraction(L, toBigInt(M), c))
6074
6175
62-func G (H,I,J) = fraction(H, I, J)
76+func N (L,M,O) = toInt(fraction(L, toBigInt(M), c, O))
6377
6478
65-func K (E) = if ((e > E))
66- then -(E)
67- else E
79+func P (Q,R,S) = fraction(Q, R, S)
6880
6981
70-func L () = "%s__factoryContract"
82+func T (L) = if ((d > L))
83+ then -(L)
84+ else L
7185
7286
73-func M () = "%s__managerPublicKey"
87+func U (L) = if ((d > L))
88+ then -(L)
89+ else L
7490
7591
76-func N () = "%s%s__price__last"
92+func V () = "%s__factoryContract"
7793
7894
79-func O (P,Q) = makeString(["%s%s%d%d__price__history", toString(P), toString(Q)], f)
95+func W () = "%s__managerPublicKey"
8096
8197
82-func R (S,T) = ((("%s%s%s__P__" + S) + "__") + T)
98+func X () = "%s__pendingManagerPublicKey"
8399
84100
85-func U (S,T) = ((("%s%s%s__G__" + S) + "__") + T)
101+func Y () = "%s%s__price__last"
86102
87103
88-func V () = "%s__amountAsset"
104+func Z (aa,ab) = makeString(["%s%s%d%d__price__history", toString(aa), toString(ab)], n)
89105
90106
91-func W () = "%s__priceAsset"
107+func ac (ad,ae) = ((("%s%s%s__P__" + ad) + "__") + ae)
92108
93109
94-func X (P,Q) = makeString(["%s%s%d%d__K_history", toString(P), toString(Q)], f)
110+func af (ad,ae) = ((("%s%s%s__G__" + ad) + "__") + ae)
95111
96112
97-func Y () = "%s__factoryConfig"
113+func ag () = "%s__amountAsset"
98114
99115
100-func Z () = "%s%s__matcher__publicKey"
116+func ah () = "%s__priceAsset"
101117
102118
103-func aa (ab) = (("%s%s%s__" + ab) + "__mappings__poolContract2LpAsset")
119+func ai () = "%s__amp"
104120
105121
106-func ac (ad,ae) = (((("%d%d%s__" + ad) + "__") + ae) + "__config")
122+func aj () = "%s__addonAddr"
107123
108124
109-func af (ag) = ("%s%s%s__mappings__baseAsset2internalId__" + ag)
125+let ak = "%s__fee"
126+
127+let al = valueOrElse(getInteger(this, ak), G)
128+
129+let am = makeString(["%s", "dLp"], n)
130+
131+let an = makeString(["%s", "dLpRefreshedHeight"], n)
132+
133+let ao = makeString(["%s", "refreshDLpDelay"], n)
134+
135+let ap = 1
136+
137+let aq = valueOrElse(getInteger(this, ao), ap)
138+
139+func ar () = "%s__factoryConfig"
110140
111141
112-func ah () = "%s__shutdown"
142+func as () = "%s%s__matcher__publicKey"
113143
114144
115-func ai (aj) = ("%s%s__poolWeight__" + aj)
145+func at (au,av) = (((("%d%d%s__" + au) + "__") + av) + "__config")
116146
117147
118-func ak (al,am,an) = throw(((((("order validation failed: orderValid=" + toString(al)) + " senderValid=") + toString(am)) + " matcherValid=") + toString(an)))
148+func aw (ax) = ("%s%s%s__mappings__baseAsset2internalId__" + ax)
119149
120150
121-func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
151+func ay () = "%s__shutdown"
122152
123153
124-func ar (ap,aq) = valueOrErrorMessage(getInteger(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
154+func az () = "%s__allowedLpStableScriptHash"
125155
126156
127-let as = addressFromStringValue(ao(this, L()))
128-
129-func at () = valueOrElse(getBoolean(as, ah()), false)
157+func aA () = "%s__feeCollectorAddress"
130158
131159
132-func au () = fromBase58String(ao(as, Z()))
160+func aB (aC,aD,aE) = throw(((((("Failed: ordValid=" + toString(aC)) + " sndrValid=") + toString(aD)) + " mtchrValid=") + toString(aE)))
133161
134162
135-func av () = {
136- let aw = ao(this, V())
137- let ax = ao(this, W())
138- let ae = ar(as, af(ax))
139- let ad = ar(as, af(aw))
140- split(ao(as, ac(toString(ad), toString(ae))), f)
163+func aF (aG,aH) = valueOrErrorMessage(getString(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
164+
165+
166+func aI (aG,aH) = valueOrErrorMessage(getInteger(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
167+
168+
169+func aJ (aK) = throw(makeString(["lp_stable.ride:", aK], " "))
170+
171+
172+func aL (aK) = makeString(["lp_stable.ride:", aK], " ")
173+
174+
175+let aM = addressFromStringValue(aF(this, V()))
176+
177+let aN = {
178+ let aO = invoke(aM, "getInFeeREADONLY", [toString(this)], nil)
179+ if ($isInstanceOf(aO, "Int"))
180+ then aO
181+ else throw(($getType(aO) + " couldn't be cast to Int"))
182+ }
183+
184+let aP = {
185+ let aO = invoke(aM, "getOutFeeREADONLY", [toString(this)], nil)
186+ if ($isInstanceOf(aO, "Int"))
187+ then aO
188+ else throw(($getType(aO) + " couldn't be cast to Int"))
189+ }
190+
191+let aQ = aF(this, ai())
192+
193+func aR () = valueOrElse(getBoolean(aM, ay()), false)
194+
195+
196+func aS () = fromBase58String(aF(aM, as()))
197+
198+
199+let aT = addressFromStringValue(aF(aM, aA()))
200+
201+func aU () = {
202+ let aV = aF(this, ag())
203+ let aW = aF(this, ah())
204+ let aX = aI(aM, aw(aW))
205+ let au = aI(aM, aw(aV))
206+ split(aF(aM, at(toString(au), toString(aX))), n)
141207 }
142208
143209
144-func ay () = split(ao(as, Y()), f)
210+func aY (aZ) = if ((aZ == k))
211+ then unit
212+ else fromBase58String(aZ)
145213
146214
147-func az (aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], f)
215+func ba (aZ) = if ((aZ == unit))
216+ then k
217+ else toBase58String(value(aZ))
148218
149219
150-func aK (aL,aM,aN,aD,aG,aH) = makeString(["%d%d%d%d%d%d", toString(aL), toString(aM), toString(aN), toString(aD), toString(aG), toString(aH)], f)
220+func bb (bc) = $Tuple9(addressFromStringValue(bc[t]), parseIntValue(bc[u]), fromBase58String(bc[v]), aY(bc[w]), aY(bc[x]), parseIntValue(bc[y]), parseIntValue(bc[z]), fromBase58String(bc[A]), fromBase58String(bc[B]))
151221
152222
153-func aO (aP) = if ((aP == "WAVES"))
154- then wavesBalance(this).available
155- else assetBalance(this, fromBase58String(aP))
223+let bd = bb(aU())
224+
225+let be = bd
226+
227+let bf = be._1
228+
229+let bg = be._2
230+
231+let bh = be._3
232+
233+let bi = be._4
234+
235+let bj = be._5
236+
237+let bk = be._6
238+
239+let bl = be._7
240+
241+let bm = be._8
242+
243+let bn = be._9
244+
245+func bo () = split(aF(aM, ar()), n)
156246
157247
158-func aQ (aR,aS) = fraction(aR, d, aS)
248+let bp = bo()
249+
250+let bq = valueOrErrorMessage(addressFromString(bp[C]), "Invalid staking contract address")
251+
252+let br = valueOrErrorMessage(addressFromString(bp[E]), "Invalid slipage contract address")
253+
254+let bs = valueOrErrorMessage(addressFromString(bp[F]), "Invalid gwx contract address")
255+
256+let bt = valueOrErrorMessage(addressFromString(bp[D]), "Invalid gwx contract address")
257+
258+func bu (bv,bw,bx,by,bz,bA,bB,bC,bD,bE) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE)], n)
159259
160260
161-func aT (aU,aV,aW,aX) = {
162- let aY = A(aW, aU)
163- let aZ = A(aX, aV)
164- aQ(aZ, aY)
261+func bF (bG,bH,bI,by,bB,bC) = makeString(["%d%d%d%d%d%d", toString(bG), toString(bH), toString(bI), toString(by), toString(bB), toString(bC)], n)
262+
263+
264+func bJ (bK) = if ((bK == "WAVES"))
265+ then wavesBalance(this).available
266+ else assetBalance(this, fromBase58String(bK))
267+
268+
269+func bL (bM,bN) = fraction(bM, c, bN)
270+
271+
272+func bO (bM,bN,O) = fraction(bM, c, bN, O)
273+
274+
275+func bP (bQ,bR,bS) = {
276+ let bT = fraction((bQ - bR), b, bR)
277+ let bU = ((bS - T(bT)) > d)
278+ if (!(bU))
279+ then throw(("Big slpg: " + toString(bT)))
280+ else $Tuple2(bU, min([bQ, bR]))
165281 }
166282
167283
168-func ba (aW,aX,bb) = {
169- let bc = av()
170- let bd = parseIntValue(bc[q])
171- let be = parseIntValue(bc[r])
172- let bf = aT(bd, be, aW, aX)
173- let aS = A(aW, bd)
174- let aR = A(aX, be)
175- let bg = A(bb, b)
176- let bh = aQ(aS, bg)
177- let bi = aQ(aR, bg)
178-[bf, bh, bi]
284+func bV (bW,bX,bY) = {
285+ let bT = fraction(bX, b, bW)
286+ let bZ = (bY > bT)
287+ if (if (bZ)
288+ then true
289+ else (bX > bW))
290+ then throw(((((((toString(bX) + " ") + toString(bW)) + " ") + toString(bT)) + " ") + toString(bY)))
291+ else bZ
179292 }
180293
181294
182-func bj (aW,aX,bb) = {
183- let bk = ba(aW, aX, bb)
184-[D(bk[0], b), D(bk[1], b), D(bk[2], b)]
295+func ca (cb,cc,cd,ce) = {
296+ let cf = H(cd, cb)
297+ let cg = H(ce, cc)
298+ bL(cg, cf)
185299 }
186300
187301
188-func bl (bm,bn,bo,S) = {
189- let bc = av()
190- let bp = bc[n]
191- let bq = bc[o]
192- let br = bc[p]
193- let aU = parseIntValue(bc[q])
194- let aV = parseIntValue(bc[r])
195- let bs = bc[m]
196- let bt = valueOrErrorMessage(assetInfo(fromBase58String(bp)), (("Asset " + bp) + " doesn't exist")).quantity
197- if ((bp != bn))
198- then throw("Invalid asset passed.")
302+func ch (cd,ce,ci) = {
303+ let cj = bk
304+ let ck = bl
305+ let cl = ca(cj, ck, cd, ce)
306+ let bN = H(cd, cj)
307+ let bM = H(ce, ck)
308+ let cm = H(ci, a)
309+ let cn = bL(bN, cm)
310+ let co = bL(bM, cm)
311+[cl, cn, co]
312+ }
313+
314+
315+func cp (cd,ce,ci) = {
316+ let cq = ch(cd, ce, ci)
317+[K(cq[0], a), K(cq[1], a), K(cq[2], a)]
318+ }
319+
320+
321+func cr (cs,al) = {
322+ let ct = if ((al == 0))
323+ then 0
324+ else fraction(cs, al, a)
325+ $Tuple2((cs - ct), ct)
326+ }
327+
328+
329+func cu (cv,cw,cx,cy) = {
330+ let cz = bh
331+ let cA = toBase58String(value(bi))
332+ let cB = toBase58String(value(bj))
333+ let cC = bk
334+ let cD = bl
335+ let cE = toString(bg)
336+ let cF = valueOrErrorMessage(assetInfo(cz), "Wrong LP id").quantity
337+ if ((toBase58String(cz) != cw))
338+ then throw("Wrong pmt asset")
199339 else {
200- let bu = aO(bq)
201- let bv = A(bu, aU)
202- let bw = aO(br)
203- let bx = A(bw, aV)
204- let by = aQ(bx, bv)
205- let bz = D(by, b)
206- let bA = A(bo, b)
207- let bB = A(bt, b)
208- let bC = fraction(bv, bA, bB)
209- let bD = fraction(bx, bA, bB)
210- let bE = D(bC, aU)
211- let bF = D(bD, aV)
212- let bG = if ((bm == ""))
340+ let cG = bJ(cA)
341+ let cH = H(cG, cC)
342+ let cI = bJ(cB)
343+ let cJ = H(cI, cD)
344+ let cK = bL(cJ, cH)
345+ let cL = K(cK, a)
346+ let cM = H(cx, a)
347+ let cN = H(cF, a)
348+ let cO = fraction(cH, cM, cN)
349+ let cP = fraction(cJ, cM, cN)
350+ let cQ = N(cO, cC, FLOOR)
351+ let cR = N(cP, cD, FLOOR)
352+ let cS = if ((cv == ""))
213353 then nil
214- else [ScriptTransfer(S, bE, if ((bq == "WAVES"))
354+ else [ScriptTransfer(cy, cQ, if ((cA == "WAVES"))
215355 then unit
216- else fromBase58String(bq)), ScriptTransfer(S, bF, if ((br == "WAVES"))
356+ else fromBase58String(cA)), ScriptTransfer(cy, cR, if ((cB == "WAVES"))
217357 then unit
218- else fromBase58String(br)), StringEntry(U(toString(S), bm), aK(bE, bF, bo, bz, height, lastBlock.timestamp)), IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz)]
219- $Tuple10(bE, bF, bq, br, bu, bw, bt, by, bs, bG)
358+ else fromBase58String(cB)), StringEntry(af(toString(cy), cv), bF(cQ, cR, cx, cL, height, lastBlock.timestamp)), IntegerEntry(Y(), cL), IntegerEntry(Z(height, lastBlock.timestamp), cL)]
359+ $Tuple10(cQ, cR, cA, cB, cG, cI, cF, cK, cE, cS)
220360 }
221361 }
222362
223363
224-func bH (bm,bI,bJ,bK,bL,bM,S,bN,bO) = {
225- let bc = av()
226- let bp = fromBase58String(bc[n])
227- let bP = bc[o]
228- let bQ = bc[p]
229- let bR = bc[s]
230- let bS = bc[t]
231- let bd = parseIntValue(bc[q])
232- let be = parseIntValue(bc[r])
233- let bs = bc[m]
234- let bt = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
235- let bT = toBase58String(valueOrElse(bK, fromBase58String("WAVES")))
236- let bU = toBase58String(valueOrElse(bM, fromBase58String("WAVES")))
237- if (if ((bP != bT))
238- then true
239- else (bQ != bU))
240- then throw("Invalid amt or price asset passed.")
364+func cT (cv,bS,cU,cV,cW,cX,cy,cY,cZ,da,db,dc,dd) = {
365+ let cz = bh
366+ let de = toBase58String(value(bi))
367+ let df = toBase58String(value(bj))
368+ let dg = bm
369+ let dh = bn
370+ let di = bk
371+ let dj = bl
372+ let cE = toString(bg)
373+ let dk = valueOrErrorMessage(assetInfo(cz), "Wr lp as").quantity
374+ let cG = if (cY)
375+ then bJ(de)
376+ else if (if (da)
377+ then (dd == de)
378+ else false)
379+ then (bJ(de) - dc)
380+ else if (da)
381+ then bJ(de)
382+ else (bJ(de) - cU)
383+ let cI = if (cY)
384+ then bJ(df)
385+ else if (if (da)
386+ then (dd == df)
387+ else false)
388+ then (bJ(df) - dc)
389+ else if (da)
390+ then bJ(df)
391+ else (bJ(df) - cW)
392+ let dl = H(cU, di)
393+ let dm = H(cW, dj)
394+ let dn = bL(dm, dl)
395+ let cH = H(cG, di)
396+ let cJ = H(cI, dj)
397+ let do = if ((dk == 0))
398+ then {
399+ let cK = d
400+ let dp = d
401+ let cm = pow((dl * dm), 0, toBigInt(5), 1, 0, DOWN)
402+ $Tuple5(K(cm, a), K(dl, di), K(dm, dj), bL((cJ + dm), (cH + dl)), dp)
403+ }
241404 else {
242- let bu = if (bN)
243- then aO(bP)
244- else (aO(bP) - bJ)
245- let bw = if (bN)
246- then aO(bQ)
247- else (aO(bQ) - bL)
248- let bV = A(bJ, bd)
249- let bW = A(bL, be)
250- let bX = aQ(bW, bV)
251- let bv = A(bu, bd)
252- let bx = A(bw, be)
253- let bY = if ((bt == 0))
254- then {
255- let by = e
256- let bZ = e
257- let bg = pow((bV * bW), 0, toBigInt(5), 1, 0, DOWN)
258- $Tuple5(D(bg, b), D(bV, bd), D(bW, be), aQ((bx + bW), (bv + bV)), bZ)
405+ let cK = bL(cJ, cH)
406+ let dq = fraction(T((cK - dn)), c, cK)
407+ let dp = H(bS, a)
408+ if (if (if (db)
409+ then (cK != d)
410+ else false)
411+ then (dq > dp)
412+ else false)
413+ then throw(((("Price slippage " + toString(dq)) + " > ") + toString(dp)))
414+ else {
415+ let dr = H(dk, a)
416+ let ds = fraction(dl, bO(cJ, cH, FLOOR), c, FLOOR)
417+ let dt = fraction(dm, c, bO(cJ, cH, FLOOR), FLOOR)
418+ let du = if ((ds > dm))
419+ then $Tuple2(dt, dm)
420+ else $Tuple2(dl, ds)
421+ let dv = du._1
422+ let dw = du._2
423+ let cm = fraction(dr, dw, cJ, FLOOR)
424+ $Tuple5(N(cm, a, FLOOR), N(dv, di, CEILING), N(dw, dj, CEILING), cK, dp)
259425 }
260- else {
261- let by = aQ(bx, bv)
262- let bZ = fraction(K((by - bX)), d, by)
263- let ca = A(bI, b)
264- if (if ((by != e))
265- then (bZ > ca)
266- else false)
267- then throw(((("Price slippage " + toString(bZ)) + " exceeded the passed limit of ") + toString(ca)))
268- else {
269- let bB = A(bt, b)
270- let cb = fraction(bV, by, d)
271- let cc = fraction(bW, d, by)
272- let cd = if ((cb > bW))
273- then $Tuple2(cc, bW)
274- else $Tuple2(bV, cb)
275- let ce = cd._1
276- let cf = cd._2
277- let bg = fraction(bB, cf, bx)
278- $Tuple5(D(bg, b), D(ce, bd), D(cf, be), by, bZ)
279- }
280- }
281- let cg = bY._1
282- let ch = bY._2
283- let ci = bY._3
284- let bz = D(bY._4, b)
285- let cj = D(bY._5, b)
286- if ((0 >= cg))
287- then throw("Invalid calculations. LP calculated is less than zero.")
288- else {
289- let ck = if (!(bO))
290- then 0
291- else cg
292- let cl = (bJ - ch)
293- let cm = (bL - ci)
294- let cn = [IntegerEntry(N(), bz), IntegerEntry(O(height, lastBlock.timestamp), bz), StringEntry(R(S, bm), az(ch, ci, ck, bz, bI, cj, height, lastBlock.timestamp, cl, cm))]
295- $Tuple13(cg, ck, bz, bu, bw, bt, bp, bs, cn, cl, cm, bK, bM)
296- }
426+ }
427+ let dx = do._1
428+ let dy = do._2
429+ let dz = do._3
430+ let cL = K(do._4, a)
431+ let dA = K(do._5, a)
432+ if ((0 >= dx))
433+ then throw("LP <= 0")
434+ else {
435+ let dB = if (!(cZ))
436+ then 0
437+ else dx
438+ let dC = (cU - dy)
439+ let dD = (cW - dz)
440+ let dE = if (if (da)
441+ then (dd == de)
442+ else false)
443+ then $Tuple2(dc, 0)
444+ else if (if (da)
445+ then (dd == df)
446+ else false)
447+ then $Tuple2(0, dc)
448+ else $Tuple2(dy, dz)
449+ let dF = dE._1
450+ let dG = dE._2
451+ let dH = [IntegerEntry(Y(), cL), IntegerEntry(Z(height, lastBlock.timestamp), cL), StringEntry(ac(cy, cv), bu(dF, dG, dB, cL, bS, dA, height, lastBlock.timestamp, dC, dD))]
452+ $Tuple13(dx, dB, cL, cG, cI, dk, cz, cE, dH, dC, dD, cV, cX)
297453 }
298454 }
299455
300456
301-func co (cp) = {
302- let bc = av()
303- let cq = bc[o]
304- let cr = bc[p]
305- let bs = parseIntValue(bc[m])
306- let bd = parseIntValue(bc[q])
307- let be = parseIntValue(bc[r])
308- let cs = aO(cq)
309- let ct = aO(cr)
310- let by = if ((cp.orderType == Buy))
311- then aT(bd, be, (cs + cp.amount), ct)
312- else aT(bd, be, (cs - cp.amount), ct)
313- let bz = D(by, b)
314- if (if (if (at())
315- then true
316- else (bs == j))
317- then true
318- else (bs == k))
319- then throw("Exchange operations disabled")
457+func dI (dJ) = {
458+ let dK = dJ[0]
459+ let dL = dJ[1]
460+ let dM = (dK + dL)
461+ if ((dM == e))
462+ then e
320463 else {
321- let cu = cp.assetPair.amountAsset
322- let cv = if ((cu == unit))
323- then "WAVES"
324- else toBase58String(value(cu))
325- let cw = cp.assetPair.priceAsset
326- let cx = if ((cw == unit))
327- then "WAVES"
328- else toBase58String(value(cw))
329- if (if ((cv != cq))
330- then true
331- else (cx != cr))
332- then throw("Wrong order assets.")
464+ let dN = parseIntValue(aQ)
465+ let dO = (dN * 2)
466+ let cq = fraction(dK, dL, f)
467+ let dP = fraction(cq, i, f)
468+ let dQ = fraction(toBigInt(dO), dM, f)
469+ let dR = toBigInt((dO - 1))
470+ func dS (dT) = {
471+ let dU = fraction(dT, dT, f)
472+ let dV = fraction(dU, dT, f)
473+ let dW = fraction(dV, f, dP)
474+ fraction((dQ + fraction(dW, g, f)), dT, (fraction(dR, dT, f) + fraction(h, dW, f)), CEILING)
475+ }
476+
477+ func dX (dY,dZ) = if (dY._2)
478+ then dY
333479 else {
334- let cy = cp.price
335- let cz = fraction(b, be, bd)
336- let cA = G(cy, b, cz)
337- let cB = if ((cp.orderType == Buy))
338- then (bz >= cA)
339- else (cA >= bz)
340- true
480+ let dT = dY._1
481+ let ea = dS(dT)
482+ let eb = toInt((ea - value(dT)))
483+ let ec = if ((0 > eb))
484+ then -(eb)
485+ else eb
486+ if ((1 >= ec))
487+ then $Tuple2(ea, true)
488+ else $Tuple2(ea, false)
341489 }
490+
491+ let ed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
492+ let ee = {
493+ let ef = ed
494+ let eg = size(ef)
495+ let eh = $Tuple2(dM, false)
496+ func ei (ej,ek) = if ((ek >= eg))
497+ then ej
498+ else dX(ej, ef[ek])
499+
500+ func el (ej,ek) = if ((ek >= eg))
501+ then ej
502+ else throw("List size exceeds 15")
503+
504+ el(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(eh, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
505+ }
506+ let dT = ee._1
507+ let em = ee._2
508+ if (em)
509+ then dT
510+ else throw(("D calculation error, D = " + toString(dT)))
342511 }
343512 }
344513
345514
346-func cC (cD) = if ((size(cD.payments) != 1))
347- then throw("exactly 1 payment is expected")
515+func en (dJ) = {
516+ let eo = g
517+ let dK = dJ[0]
518+ let dL = dJ[1]
519+ let ep = parseBigIntValue(l)
520+ let dN = (parseBigIntValue(aQ) * ep)
521+ let dM = (dK + dL)
522+ if ((dM == e))
523+ then e
524+ else {
525+ let dO = (dN * eo)
526+ let dP = (((dK * dL) * eo) * eo)
527+ let eq = ((dO * dM) / ep)
528+ let er = (dO - ep)
529+ let es = (eo + f)
530+ func dX (dY,et) = {
531+ let eu = dY
532+ let dT = eu._1
533+ let em = eu._2
534+ if ((em != unit))
535+ then dY
536+ else {
537+ let dW = (((dT * dT) * dT) / dP)
538+ let ea = (((eq + (dW * eo)) * dT) / (((er * dT) / ep) + (es * dW)))
539+ let ec = U((ea - value(dT)))
540+ if ((f >= ec))
541+ then $Tuple2(ea, et)
542+ else $Tuple2(ea, unit)
543+ }
544+ }
545+
546+ let ed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
547+ let ev = {
548+ let ef = ed
549+ let eg = size(ef)
550+ let eh = $Tuple2(dM, unit)
551+ func ei (ej,ek) = if ((ek >= eg))
552+ then ej
553+ else dX(ej, ef[ek])
554+
555+ func el (ej,ek) = if ((ek >= eg))
556+ then ej
557+ else throw("List size exceeds 15")
558+
559+ el(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(eh, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
560+ }
561+ let dT = ev._1
562+ let em = ev._2
563+ if ((em != unit))
564+ then dT
565+ else throw(("D calculation error, D = " + toString(dT)))
566+ }
567+ }
568+
569+
570+func ew (dJ,dZ,ex) = {
571+ let eo = g
572+ let ey = dJ[if ((dZ == 0))
573+ then 1
574+ else 0]
575+ let ep = parseBigIntValue(l)
576+ let dN = (parseBigIntValue(aQ) * ep)
577+ let dM = ey
578+ let dO = (dN * eo)
579+ let ez = (((((ex * ex) / (ey * eo)) * ex) * ep) / (dO * eo))
580+ let eA = ((dM + ((ex * ep) / dO)) - ex)
581+ func dX (dY,et) = {
582+ let eB = dY
583+ let eC = eB._1
584+ let em = eB._2
585+ if ((em != unit))
586+ then dY
587+ else {
588+ let eD = (((eC * eC) + ez) / ((g * eC) + eA))
589+ let eE = U((eD - value(eC)))
590+ if ((f >= eE))
591+ then $Tuple2(eD, et)
592+ else $Tuple2(eD, unit)
593+ }
594+ }
595+
596+ let ed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
597+ let eF = {
598+ let ef = ed
599+ let eg = size(ef)
600+ let eh = $Tuple2(ex, unit)
601+ func ei (ej,ek) = if ((ek >= eg))
602+ then ej
603+ else dX(ej, ef[ek])
604+
605+ func el (ej,ek) = if ((ek >= eg))
606+ then ej
607+ else throw("List size exceeds 15")
608+
609+ el(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(ei(eh, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
610+ }
611+ let eC = eF._1
612+ let em = eF._2
613+ if ((em != unit))
614+ then eC
615+ else throw(("Y calculation error, Y = " + toString(eC)))
616+ }
617+
618+
619+func eG (eH,eI,eJ) = {
620+ let eK = fraction(dI([eH, eI]), c, eJ)
621+ if ((eJ == e))
622+ then e
623+ else eK
624+ }
625+
626+
627+func eL (eM,eN,eO) = {
628+ let eP = (toBigInt(bJ(ba(bi))) - eM)
629+ let eQ = (toBigInt(bJ(ba(bj))) - eN)
630+ let eR = (toBigInt(value(assetInfo(bh)).quantity) - eO)
631+ let eS = eG(eP, eQ, eR)
632+ eS
633+ }
634+
635+
636+func eT (eU,eV,eO) = {
637+ let eP = (bJ(ba(bi)) + eU)
638+ let eQ = (bJ(ba(bj)) + eV)
639+ let eR = (value(assetInfo(bh)).quantity + eO)
640+ let eK = eG(toBigInt(eP), toBigInt(eQ), toBigInt(eR))
641+ let eW = [IntegerEntry(an, height), StringEntry(am, toString(eK))]
642+ $Tuple2(eW, eK)
643+ }
644+
645+
646+func eX (eY,eK) = if ((eK >= eY))
647+ then true
648+ else aJ("updated DLp lower than current DLp")
649+
650+
651+func eZ (fa) = {
652+ let fb = fa.amount
653+ let fc = fraction(fa.amount, fa.price, a, FLOOR)
654+ let fd = if ((fa.orderType == Buy))
655+ then $Tuple2(fb, -(fc))
656+ else $Tuple2(-(fb), fc)
657+ let eU = fd._1
658+ let eV = fd._2
659+ if (if (if (aR())
660+ then true
661+ else (bg == r))
662+ then true
663+ else (bg == s))
664+ then throw("Admin blocked")
665+ else if (if ((fa.assetPair.amountAsset != bi))
666+ then true
667+ else (fa.assetPair.priceAsset != bj))
668+ then throw("Wr assets")
669+ else {
670+ let fe = parseBigIntValue(getStringValue(this, am))
671+ let ff = eT(eU, eV, 0)
672+ let fg = ff._1
673+ let fh = ff._2
674+ let fi = (fh >= fe)
675+ fi
676+ }
677+ }
678+
679+
680+func fj (dZ) = if ((size(dZ.payments) != 1))
681+ then throw("1 pmnt exp")
348682 else {
349- let cE = value(cD.payments[0])
350- let bn = value(cE.assetId)
351- let cF = cE.amount
352- let bY = bl(toBase58String(cD.transactionId), toBase58String(bn), cF, cD.caller)
353- let bE = bY._1
354- let bF = bY._2
355- let bs = parseIntValue(bY._9)
356- let bG = bY._10
357- if (if (at())
683+ let fk = value(dZ.payments[0])
684+ let cw = value(fk.assetId)
685+ let dc = fk.amount
686+ let do = cu(toBase58String(dZ.transactionId), toBase58String(cw), dc, dZ.caller)
687+ let cQ = do._1
688+ let cR = do._2
689+ let cE = parseIntValue(do._9)
690+ let cS = do._10
691+ if (if (aR())
358692 then true
359- else (bs == k))
360- then throw(("Get operation is blocked by admin. Status = " + toString(bs)))
361- else $Tuple5(bE, bF, cF, bn, bG)
693+ else (cE == s))
694+ then throw(("Admin blocked: " + toString(cE)))
695+ else $Tuple5(cQ, cR, dc, cw, cS)
362696 }
363697
364698
365-func cG (cD,bI,bO) = if ((size(cD.payments) != 2))
366- then throw("exactly 2 payments are expected")
367- else {
368- let cH = value(cD.payments[0])
369- let cI = value(cD.payments[1])
370- let cJ = bH(toBase58String(cD.transactionId), bI, cH.amount, cH.assetId, cI.amount, cI.assetId, toString(cD.caller), false, bO)
371- let bs = parseIntValue(cJ._8)
372- if (if (if (at())
373- then true
374- else (bs == i))
375- then true
376- else (bs == k))
377- then throw(("Put operation is blocked by admin. Status = " + toString(bs)))
378- else cJ
379- }
699+func fl (fm,ae,fn,fo,bS,cZ,da,db,dc,dd) = {
700+ let do = cT(ae, bS, value(fn).amount, value(fn).assetId, value(fo).amount, value(fo).assetId, fm, (ae == ""), cZ, da, db, dc, dd)
701+ let cE = parseIntValue(do._8)
702+ if (if (if (aR())
703+ then true
704+ else (cE == q))
705+ then true
706+ else (cE == s))
707+ then throw(("Blocked:" + toString(cE)))
708+ else do
709+ }
380710
381711
382-@Callable(cD)
383-func constructor (as,cK) = if ((cD.caller != this))
384- then throw("permissions denied")
385- else [StringEntry(L(), as), StringEntry(M(), cK)]
712+func fp (fq,cw,cy,ae,fr) = {
713+ let cA = toBase58String(value(bi))
714+ let cB = toBase58String(value(bj))
715+ let cz = bh
716+ let di = bk
717+ let dj = bl
718+ let eR = toBigInt(valueOrErrorMessage(assetInfo(cz), "invalid lp asset").quantity)
719+ let fs = if ((eR > e))
720+ then true
721+ else throw("initial deposit requires all coins")
722+ if ((fs == fs))
723+ then {
724+ let cG = bJ(cA)
725+ let cI = bJ(cB)
726+ let ft = if ((ae == ""))
727+ then $Tuple2(cG, cI)
728+ else if ((cw == cA))
729+ then if ((fq > cG))
730+ then throw("invalid payment amount")
731+ else $Tuple2((cG - fq), cI)
732+ else if ((cw == cB))
733+ then if ((fq > cI))
734+ then throw("invalid payment amount")
735+ else $Tuple2(cG, (cI - fq))
736+ else throw("wrong pmtAssetId")
737+ let fu = ft._1
738+ let fv = ft._2
739+ let fw = if ((cw == cA))
740+ then $Tuple2(fq, 0)
741+ else if ((cw == cB))
742+ then $Tuple2(0, fq)
743+ else throw("invalid payment")
744+ let fx = fw._1
745+ let fy = fw._2
746+ let fz = if (fr)
747+ then $Tuple3(cr(fx, aN)._1, cr(fy, aN)._1, cr(fq, aN)._2)
748+ else $Tuple3(fx, fy, 0)
749+ let fA = fz._1
750+ let fB = fz._2
751+ let ct = fz._3
752+ let fC = (fu + fA)
753+ let fD = (fv + fB)
754+ let bX = dI([toBigInt(fu), toBigInt(fv)])
755+ let bW = dI([toBigInt(fC), toBigInt(fD)])
756+ let fE = if ((bW > bX))
757+ then true
758+ else throw()
759+ if ((fE == fE))
760+ then {
761+ let fF = fraction(eR, (bW - bX), bX, FLOOR)
762+ let cL = K(bL(H(fD, dj), H(fC, di)), a)
763+ let dH = [IntegerEntry(Y(), cL), IntegerEntry(Z(height, lastBlock.timestamp), cL), StringEntry(ac(cy, ae), bu(fx, fy, toInt(fF), cL, 0, 0, height, lastBlock.timestamp, 0, 0))]
764+ let fG = fraction(fv, a, fu)
765+ let fH = fraction(fq, a, (fG + a))
766+ let fI = (fq - fH)
767+ let fJ = fraction(eR, toBigInt(fI), toBigInt(fv))
768+ let fK = toInt(fraction((fF - fJ), b, fJ))
769+ $Tuple4(toInt(fF), dH, ct, fK)
770+ }
771+ else throw("Strict value is not equal to itself.")
772+ }
773+ else throw("Strict value is not equal to itself.")
774+ }
775+
776+
777+func fL (fM,fN,fO,fm,fP,fQ) = {
778+ let cz = toBase58String(value(bh))
779+ let cA = toBase58String(value(bi))
780+ let cB = toBase58String(value(bj))
781+ let fR = bk
782+ let fS = bl
783+ let fT = bg
784+ let cy = if ((fm == bt))
785+ then fP
786+ else fm
787+ let fk = value(fO[0])
788+ let cw = value(fk.assetId)
789+ let dc = fk.amount
790+ let eS = eL(e, e, e)
791+ if ((eS == eS))
792+ then {
793+ let cv = toBase58String(fQ)
794+ if ((cz != toBase58String(cw)))
795+ then throw("Wrong LP")
796+ else {
797+ let cG = bJ(cA)
798+ let cI = bJ(cB)
799+ let fU = {
800+ let aO = invoke(this, "getOneTknV2READONLY", [fM, dc], nil)
801+ if ($isInstanceOf(aO, "(Int, Int)"))
802+ then aO
803+ else throw(($getType(aO) + " couldn't be cast to (Int, Int)"))
804+ }
805+ if ((fU == fU))
806+ then {
807+ let ct = fU._2
808+ let fV = fU._1
809+ let fW = if (if ((fN > 0))
810+ then (fN > fV)
811+ else false)
812+ then aJ(makeString(["amount to receive is less than ", toString(fN)], ""))
813+ else fV
814+ let fX = if ((fM == cA))
815+ then $Tuple4(fW, 0, ((cG - fW) - ct), cI)
816+ else if ((fM == cB))
817+ then $Tuple4(0, fW, cG, ((cI - fW) - ct))
818+ else throw("invalid out asset id")
819+ let fY = fX._1
820+ let fZ = fX._2
821+ let fC = fX._3
822+ let fD = fX._4
823+ let ga = bL(H(fD, fS), H(fC, fR))
824+ let gb = K(ga, a)
825+ let gc = if ((fM == "WAVES"))
826+ then unit
827+ else fromBase58String(fM)
828+ let gd = if ((ct > 0))
829+ then [ScriptTransfer(aT, ct, gc)]
830+ else nil
831+ let cS = ([ScriptTransfer(cy, fW, gc), StringEntry(af(toString(cy), cv), bF(fY, fZ, dc, gb, height, lastBlock.timestamp)), IntegerEntry(Y(), gb), IntegerEntry(Z(height, lastBlock.timestamp), gb)] ++ gd)
832+ if ((cS == cS))
833+ then {
834+ let ge = invoke(aM, "burn", [dc], [AttachedPayment(cw, dc)])
835+ if ((ge == ge))
836+ then {
837+ let gf = {
838+ let gg = if ((this == aT))
839+ then 0
840+ else ct
841+ let gh = if ((aY(fM) == bi))
842+ then true
843+ else false
844+ if (gh)
845+ then $Tuple2(-((fV + gg)), 0)
846+ else $Tuple2(0, -((fV + gg)))
847+ }
848+ let eU = gf._1
849+ let eV = gf._2
850+ let gi = eT(eU, eV, 0)
851+ let gj = gi._1
852+ let eK = gi._2
853+ let gk = eX(eS, eK)
854+ if ((gk == gk))
855+ then $Tuple2((cS ++ gj), fW)
856+ else throw("Strict value is not equal to itself.")
857+ }
858+ else throw("Strict value is not equal to itself.")
859+ }
860+ else throw("Strict value is not equal to itself.")
861+ }
862+ else throw("Strict value is not equal to itself.")
863+ }
864+ }
865+ else throw("Strict value is not equal to itself.")
866+ }
867+
868+
869+func gl () = {
870+ let gm = getString(W())
871+ if ($isInstanceOf(gm, "String"))
872+ then {
873+ let dM = gm
874+ fromBase58String(dM)
875+ }
876+ else if ($isInstanceOf(gm, "Unit"))
877+ then unit
878+ else throw("Match error")
879+ }
880+
881+
882+func gn () = {
883+ let gm = getString(X())
884+ if ($isInstanceOf(gm, "String"))
885+ then {
886+ let dM = gm
887+ fromBase58String(dM)
888+ }
889+ else if ($isInstanceOf(gm, "Unit"))
890+ then unit
891+ else throw("Match error")
892+ }
893+
894+
895+let go = throw("Permission denied")
896+
897+func gp (dZ) = {
898+ let gm = gl()
899+ if ($isInstanceOf(gm, "ByteVector"))
900+ then {
901+ let gq = gm
902+ (dZ.callerPublicKey == gq)
903+ }
904+ else if ($isInstanceOf(gm, "Unit"))
905+ then (dZ.caller == this)
906+ else throw("Match error")
907+ }
908+
909+
910+func gr (dZ) = {
911+ let gm = gl()
912+ if ($isInstanceOf(gm, "ByteVector"))
913+ then {
914+ let gq = gm
915+ if ((dZ.callerPublicKey == gq))
916+ then true
917+ else go
918+ }
919+ else if ($isInstanceOf(gm, "Unit"))
920+ then if ((dZ.caller == this))
921+ then true
922+ else go
923+ else throw("Match error")
924+ }
925+
926+
927+@Callable(dZ)
928+func constructor (V) = {
929+ let ez = gr(dZ)
930+ if ((ez == ez))
931+ then [StringEntry(V(), V)]
932+ else throw("Strict value is not equal to itself.")
933+ }
386934
387935
388936
389-@Callable(cD)
390-func put (bI,cL) = {
391- let cM = ay()
392- let cN = valueOrErrorMessage(addressFromString(cM[y]), "Error. Incorrect staking address.")
393- let cO = valueOrErrorMessage(addressFromString(cM[z]), "Error. Incorrect slippage contract address.")
394- if ((0 > bI))
395- then throw("Invalid slippageTolerance passed")
396- else {
397- let cJ = cG(cD, bI, true)
398- let ck = cJ._2
399- let bp = cJ._7
400- let bG = cJ._9
401- let cl = cJ._10
402- let cm = cJ._11
403- let cP = cJ._12
404- let cQ = cJ._13
405- let cR = invoke(as, "emit", [ck], nil)
406- if ((cR == cR))
937+@Callable(dZ)
938+func setManager (gs) = {
939+ let ez = gr(dZ)
940+ if ((ez == ez))
941+ then {
942+ let gt = fromBase58String(gs)
943+ if ((gt == gt))
944+ then [StringEntry(X(), gs)]
945+ else throw("Strict value is not equal to itself.")
946+ }
947+ else throw("Strict value is not equal to itself.")
948+ }
949+
950+
951+
952+@Callable(dZ)
953+func confirmManager () = {
954+ let cq = gn()
955+ let gu = if (isDefined(cq))
956+ then true
957+ else throw("No pending manager")
958+ if ((gu == gu))
959+ then {
960+ let gv = if ((dZ.callerPublicKey == value(cq)))
961+ then true
962+ else throw("You are not pending manager")
963+ if ((gv == gv))
964+ then [StringEntry(W(), toBase58String(value(cq))), DeleteEntry(X())]
965+ else throw("Strict value is not equal to itself.")
966+ }
967+ else throw("Strict value is not equal to itself.")
968+ }
969+
970+
971+
972+@Callable(dZ)
973+func put (gw,gx) = {
974+ let gy = bo()
975+ let gz = valueOrErrorMessage(addressFromString(gy[C]), "Wr st addr")
976+ let gA = valueOrErrorMessage(addressFromString(gy[E]), "Wr sl addr")
977+ if ((0 > gw))
978+ then throw("Wrong slippage")
979+ else if ((size(dZ.payments) != 2))
980+ then throw("2 pmnts expd")
981+ else {
982+ let gB = toBigInt(value(dZ.payments[0]).amount)
983+ let gC = toBigInt(value(dZ.payments[1]).amount)
984+ let eP = (toBigInt(bJ(ba(bi))) - gB)
985+ if ((eP == eP))
986+ then {
987+ let eQ = (toBigInt(bJ(ba(bj))) - gC)
988+ if ((eQ == eQ))
989+ then {
990+ let eR = toBigInt(value(assetInfo(bh)).quantity)
991+ if ((eR == eR))
992+ then {
993+ let eS = eL(gB, gC, toBigInt(0))
994+ if ((eS == eS))
995+ then {
996+ let gD = fl(toString(dZ.caller), toBase58String(dZ.transactionId), AttachedPayment(value(dZ.payments[0]).assetId, value(dZ.payments[0]).amount), dZ.payments[1], gw, true, false, true, 0, "")
997+ let dB = gD._2
998+ let gE = gD._7
999+ let cS = gD._9
1000+ let dC = gD._10
1001+ let dD = gD._11
1002+ let cA = gD._12
1003+ let cB = gD._13
1004+ let do = invoke(aM, "emit", [dB], nil)
1005+ if ((do == do))
1006+ then {
1007+ let gF = {
1008+ let gm = do
1009+ if ($isInstanceOf(gm, "Address"))
1010+ then {
1011+ let gG = gm
1012+ invoke(gG, "emit", [dB], nil)
1013+ }
1014+ else unit
1015+ }
1016+ if ((gF == gF))
1017+ then {
1018+ let gH = if ((dC > 0))
1019+ then invoke(gA, "put", nil, [AttachedPayment(cA, dC)])
1020+ else nil
1021+ if ((gH == gH))
1022+ then {
1023+ let gI = if ((dD > 0))
1024+ then invoke(gA, "put", nil, [AttachedPayment(cB, dD)])
1025+ else nil
1026+ if ((gI == gI))
1027+ then {
1028+ let gJ = if (gx)
1029+ then {
1030+ let gK = invoke(gz, "stake", nil, [AttachedPayment(gE, dB)])
1031+ if ((gK == gK))
1032+ then nil
1033+ else throw("Strict value is not equal to itself.")
1034+ }
1035+ else [ScriptTransfer(dZ.caller, dB, gE)]
1036+ let gL = eT(0, 0, 0)
1037+ let gj = gL._1
1038+ let eK = gL._2
1039+ let gM = if ((eK >= eS))
1040+ then true
1041+ else aJ(makeString(["updated DLp lower than current DLp", toString(eP), toString(eQ), toString(eR), toString(eS), toString(eK), toString(dC), toString(dD)], " "))
1042+ if ((gM == gM))
1043+ then {
1044+ let gN = value(assetInfo(bh)).quantity
1045+ if ((gN == gN))
1046+ then ((cS ++ gJ) ++ gj)
1047+ else throw("Strict value is not equal to itself.")
1048+ }
1049+ else throw("Strict value is not equal to itself.")
1050+ }
1051+ else throw("Strict value is not equal to itself.")
1052+ }
1053+ else throw("Strict value is not equal to itself.")
1054+ }
1055+ else throw("Strict value is not equal to itself.")
1056+ }
1057+ else throw("Strict value is not equal to itself.")
1058+ }
1059+ else throw("Strict value is not equal to itself.")
1060+ }
1061+ else throw("Strict value is not equal to itself.")
1062+ }
1063+ else throw("Strict value is not equal to itself.")
1064+ }
1065+ else throw("Strict value is not equal to itself.")
1066+ }
1067+ }
1068+
1069+
1070+
1071+@Callable(dZ)
1072+func putOneTknV2 (fN,gx) = {
1073+ let gO = {
1074+ let aO = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1075+ if ($isInstanceOf(aO, "Boolean"))
1076+ then aO
1077+ else throw(($getType(aO) + " couldn't be cast to Boolean"))
1078+ }
1079+ let gP = if (if (if (aR())
1080+ then true
1081+ else (bg == q))
1082+ then true
1083+ else (bg == s))
1084+ then true
1085+ else gO
1086+ let gQ = [if (if (!(gP))
1087+ then true
1088+ else gp(dZ))
1089+ then true
1090+ else aJ("put operation is blocked by admin"), if ((size(dZ.payments) == 1))
1091+ then true
1092+ else aJ("exactly 1 payment are expected")]
1093+ if ((gQ == gQ))
1094+ then {
1095+ let cA = toBase58String(value(bi))
1096+ let cB = toBase58String(value(bj))
1097+ let cz = bh
1098+ let fR = bk
1099+ let fS = bl
1100+ let cy = if ((dZ.caller == this))
1101+ then dZ.originCaller
1102+ else dZ.caller
1103+ let fk = value(dZ.payments[0])
1104+ let cw = toBase58String(value(fk.assetId))
1105+ let dc = fk.amount
1106+ let eS = if ((fk.assetId == bi))
1107+ then eL(toBigInt(dc), toBigInt(0), toBigInt(0))
1108+ else eL(toBigInt(0), toBigInt(dc), toBigInt(0))
1109+ if ((eS == eS))
4071110 then {
408- let cS = if ((cl > 0))
409- then invoke(cO, "put", nil, [AttachedPayment(cP, cl)])
410- else nil
411- if ((cS == cS))
1111+ let gR = fp(dc, cw, toString(cy), toBase58String(dZ.transactionId), true)
1112+ if ((gR == gR))
4121113 then {
413- let cT = if ((cm > 0))
414- then invoke(cO, "put", nil, [AttachedPayment(cQ, cm)])
415- else nil
416- if ((cT == cT))
1114+ let ct = gR._3
1115+ let cS = gR._2
1116+ let gS = gR._1
1117+ let dB = if (if ((fN > 0))
1118+ then (fN > gS)
1119+ else false)
1120+ then aJ(makeString(["amount to receive is less than ", toString(fN)], ""))
1121+ else gS
1122+ let gD = invoke(aM, "emit", [dB], nil)
1123+ if ((gD == gD))
4171124 then {
418- let cU = if (cL)
1125+ let gF = {
1126+ let gm = gD
1127+ if ($isInstanceOf(gm, "Address"))
1128+ then {
1129+ let gG = gm
1130+ invoke(gG, "emit", [dB], nil)
1131+ }
1132+ else unit
1133+ }
1134+ if ((gF == gF))
4191135 then {
420- let cV = invoke(cN, "stake", nil, [AttachedPayment(bp, ck)])
421- if ((cV == cV))
422- then nil
1136+ let gJ = if (gx)
1137+ then {
1138+ let gK = invoke(bq, "stake", nil, [AttachedPayment(cz, dB)])
1139+ if ((gK == gK))
1140+ then nil
1141+ else throw("Strict value is not equal to itself.")
1142+ }
1143+ else [ScriptTransfer(dZ.caller, dB, cz)]
1144+ let gd = if ((ct > 0))
1145+ then [ScriptTransfer(aT, ct, fromBase58String(cw))]
1146+ else nil
1147+ let gT = if ((this == aT))
1148+ then $Tuple2(0, 0)
1149+ else {
1150+ let gU = if ((fk.assetId == bi))
1151+ then true
1152+ else false
1153+ if (gU)
1154+ then $Tuple2(-(ct), 0)
1155+ else $Tuple2(0, -(ct))
1156+ }
1157+ let eU = gT._1
1158+ let eV = gT._2
1159+ let gV = eT(eU, eV, 0)
1160+ let gj = gV._1
1161+ let eK = gV._2
1162+ let gk = eX(eS, eK)
1163+ if ((gk == gk))
1164+ then $Tuple2((((cS ++ gJ) ++ gd) ++ gj), dB)
4231165 else throw("Strict value is not equal to itself.")
4241166 }
425- else [ScriptTransfer(cD.caller, ck, bp)]
426- (bG ++ cU)
1167+ else throw("Strict value is not equal to itself.")
4271168 }
4281169 else throw("Strict value is not equal to itself.")
4291170 }
4301171 else throw("Strict value is not equal to itself.")
4311172 }
4321173 else throw("Strict value is not equal to itself.")
4331174 }
434- }
435-
436-
437-
438-@Callable(cD)
439-func putForFree (cW) = if ((0 > cW))
440- then throw("Invalid value passed")
441- else {
442- let cJ = cG(cD, cW, false)
443- cJ._9
444- }
445-
446-
447-
448-@Callable(cD)
449-func get () = {
450- let bY = cC(cD)
451- let cX = bY._1
452- let bF = bY._2
453- let cF = bY._3
454- let bn = bY._4
455- let bG = bY._5
456- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
457- if ((cY == cY))
458- then bG
4591175 else throw("Strict value is not equal to itself.")
4601176 }
4611177
4621178
4631179
464-@Callable(cD)
465-func getNoLess (cZ,da) = {
466- let bY = cC(cD)
467- let bE = bY._1
468- let bF = bY._2
469- let cF = bY._3
470- let bn = bY._4
471- let bG = bY._5
472- if ((cZ > bE))
473- then throw(((("noLessThenAmtAsset failed: " + toString(bE)) + " < ") + toString(cZ)))
474- else if ((da > bF))
475- then throw(((("noLessThenPriceAsset failed: " + toString(bF)) + " < ") + toString(da)))
1180+@Callable(dZ)
1181+func putForFree (gW) = if ((0 > gW))
1182+ then throw("Wrong slpg")
1183+ else if ((size(dZ.payments) != 2))
1184+ then throw("2 pmnts expd")
1185+ else {
1186+ let gX = fl(toString(dZ.caller), toBase58String(dZ.transactionId), AttachedPayment(value(dZ.payments[0]).assetId, value(dZ.payments[0]).amount), dZ.payments[1], gW, false, false, true, 0, "")
1187+ let cS = gX._9
1188+ let gB = toBigInt(value(dZ.payments[0]).amount)
1189+ let gC = toBigInt(value(dZ.payments[1]).amount)
1190+ let eS = eL(gB, gC, toBigInt(0))
1191+ if ((eS == eS))
1192+ then {
1193+ let gY = eT(0, 0, 0)
1194+ let gj = gY._1
1195+ let eK = gY._2
1196+ let gk = eX(eS, eK)
1197+ if ((gk == gk))
1198+ then (cS ++ gj)
1199+ else throw("Strict value is not equal to itself.")
1200+ }
1201+ else throw("Strict value is not equal to itself.")
1202+ }
1203+
1204+
1205+
1206+@Callable(dZ)
1207+func get () = {
1208+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1209+ if ((eS == eS))
1210+ then {
1211+ let do = fj(dZ)
1212+ let gZ = do._1
1213+ let cR = do._2
1214+ let dc = do._3
1215+ let cw = do._4
1216+ let cS = do._5
1217+ let eA = invoke(aM, "burn", [dc], [AttachedPayment(cw, dc)])
1218+ if ((eA == eA))
1219+ then {
1220+ let ha = eT(-(gZ), -(cR), 0)
1221+ let gj = ha._1
1222+ let eK = ha._2
1223+ let gk = eX(eS, eK)
1224+ if ((gk == gk))
1225+ then (cS ++ gj)
1226+ else throw("Strict value is not equal to itself.")
1227+ }
1228+ else throw("Strict value is not equal to itself.")
1229+ }
1230+ else throw("Strict value is not equal to itself.")
1231+ }
1232+
1233+
1234+
1235+@Callable(dZ)
1236+func getOneTknV2 (fM,fN) = {
1237+ let gO = {
1238+ let aO = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1239+ if ($isInstanceOf(aO, "Boolean"))
1240+ then aO
1241+ else throw(($getType(aO) + " couldn't be cast to Boolean"))
1242+ }
1243+ let hb = if (if (aR())
1244+ then true
1245+ else (bg == s))
1246+ then true
1247+ else gO
1248+ let gQ = [if (if (!(hb))
1249+ then true
1250+ else gp(dZ))
1251+ then true
1252+ else aJ("get operation is blocked by admin"), if ((size(dZ.payments) == 1))
1253+ then true
1254+ else aJ("exactly 1 payment are expected")]
1255+ if ((gQ == gQ))
1256+ then {
1257+ let hc = fL(fM, fN, dZ.payments, dZ.caller, dZ.originCaller, dZ.transactionId)
1258+ let cS = hc._1
1259+ let fW = hc._2
1260+ $Tuple2(cS, fW)
1261+ }
1262+ else throw("Strict value is not equal to itself.")
1263+ }
1264+
1265+
1266+
1267+@Callable(dZ)
1268+func refreshDLp () = {
1269+ let hd = valueOrElse(getInteger(an), 0)
1270+ let he = if (((height - hd) >= aq))
1271+ then unit
1272+ else aJ(makeString([toString(aq), " blocks have not passed since the previous call"], ""))
1273+ if ((he == he))
1274+ then {
1275+ let fe = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, am), "0")), aL("invalid dLp"))
1276+ let hf = eT(0, 0, 0)
1277+ let hg = hf._1
1278+ let eK = hf._2
1279+ let eW = if ((fe != eK))
1280+ then hg
1281+ else aJ("nothing to refresh")
1282+ $Tuple2(eW, toString(eK))
1283+ }
1284+ else throw("Strict value is not equal to itself.")
1285+ }
1286+
1287+
1288+
1289+@Callable(dZ)
1290+func getOneTknV2READONLY (fM,hh) = {
1291+ let cA = toBase58String(value(bi))
1292+ let cB = toBase58String(value(bj))
1293+ let cz = toBase58String(value(bh))
1294+ let dJ = [toBigInt(bJ(cA)), toBigInt(bJ(cB))]
1295+ let eJ = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cz)), "invalid lp asset").quantity)
1296+ let bX = dI(dJ)
1297+ let bW = (bX - fraction(toBigInt(hh), bX, eJ))
1298+ let hi = if ((fM == cA))
1299+ then 0
1300+ else if ((fM == cB))
1301+ then 1
1302+ else throw("invalid out asset id")
1303+ let hj = ew(dJ, hi, bW)
1304+ let hk = (dJ[hi] - hj)
1305+ let hl = max([0, toInt((hk - f))])
1306+ let hm = cr(hl, aP)
1307+ let fV = hm._1
1308+ let ct = hm._2
1309+ $Tuple2(nil, $Tuple2(fV, ct))
1310+ }
1311+
1312+
1313+
1314+@Callable(dZ)
1315+func getOneTknV2WithBonusREADONLY (fM,hh) = {
1316+ let cA = toBase58String(value(bi))
1317+ let cB = toBase58String(value(bj))
1318+ let cz = toBase58String(value(bh))
1319+ let cG = bJ(cA)
1320+ let cI = bJ(cB)
1321+ let hn = {
1322+ let aO = invoke(this, "getOneTknV2READONLY", [fM, hh], nil)
1323+ if ($isInstanceOf(aO, "(Int, Int)"))
1324+ then aO
1325+ else throw(($getType(aO) + " couldn't be cast to (Int, Int)"))
1326+ }
1327+ let fV = hn._1
1328+ let ct = hn._2
1329+ let do = cu("", cz, hh, this)
1330+ let cQ = do._1
1331+ let cR = do._2
1332+ let ho = (cQ + cR)
1333+ let fK = if ((ho == 0))
1334+ then if ((fV == 0))
1335+ then 0
1336+ else throw("bonus calculation error")
1337+ else fraction((fV - ho), a, ho)
1338+ $Tuple2(nil, $Tuple3(fV, ct, fK))
1339+ }
1340+
1341+
1342+
1343+@Callable(dZ)
1344+func getNoLess (hp,hq) = {
1345+ let do = fj(dZ)
1346+ let cQ = do._1
1347+ let cR = do._2
1348+ let dc = do._3
1349+ let cw = do._4
1350+ let cS = do._5
1351+ if ((hp > cQ))
1352+ then throw(((("Failed: " + toString(cQ)) + " < ") + toString(hp)))
1353+ else if ((hq > cR))
1354+ then throw(((("Failed: " + toString(cR)) + " < ") + toString(hq)))
4761355 else {
477- let cY = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)])
478- if ((cY == cY))
479- then bG
1356+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1357+ if ((eS == eS))
1358+ then {
1359+ let hr = invoke(aM, "burn", [dc], [AttachedPayment(cw, dc)])
1360+ if ((hr == hr))
1361+ then {
1362+ let hs = eT(-(cQ), -(cR), 0)
1363+ let gj = hs._1
1364+ let eK = hs._2
1365+ let gk = eX(eS, eK)
1366+ if ((gk == gk))
1367+ then (cS ++ gj)
1368+ else throw("Strict value is not equal to itself.")
1369+ }
1370+ else throw("Strict value is not equal to itself.")
1371+ }
4801372 else throw("Strict value is not equal to itself.")
4811373 }
4821374 }
4831375
4841376
4851377
486-@Callable(cD)
487-func activate (db,dc) = if ((toString(cD.caller) != toString(as)))
488- then throw("permissions denied")
489- else $Tuple2([StringEntry(V(), db), StringEntry(W(), dc)], "success")
490-
491-
492-
493-@Callable(cD)
494-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, av())
495-
496-
497-
498-@Callable(cD)
499-func getAccBalanceWrapperREADONLY (aP) = $Tuple2(nil, aO(aP))
500-
501-
502-
503-@Callable(cD)
504-func calcPricesWrapperREADONLY (aW,aX,bb) = {
505- let bk = ba(aW, aX, bb)
506- $Tuple2(nil, [toString(bk[0]), toString(bk[1]), toString(bk[2])])
1378+@Callable(dZ)
1379+func unstakeAndGet (cs) = {
1380+ let ht = if ((size(dZ.payments) != 0))
1381+ then throw("No pmnts expd")
1382+ else true
1383+ if ((ht == ht))
1384+ then {
1385+ let hu = bo()
1386+ let gE = bh
1387+ let hv = valueOrErrorMessage(addressFromString(hu[C]), "Wr st addr")
1388+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1389+ let hw = invoke(hv, "unstake", [toBase58String(gE), cs], nil)
1390+ if ((hw == hw))
1391+ then {
1392+ let do = cu(toBase58String(dZ.transactionId), toBase58String(gE), cs, dZ.caller)
1393+ let cQ = do._1
1394+ let cR = do._2
1395+ let cE = parseIntValue(do._9)
1396+ let cS = do._10
1397+ let hx = if (if (aR())
1398+ then true
1399+ else (cE == s))
1400+ then throw(("Blocked: " + toString(cE)))
1401+ else true
1402+ if ((hx == hx))
1403+ then {
1404+ let hy = invoke(aM, "burn", [cs], [AttachedPayment(gE, cs)])
1405+ if ((hy == hy))
1406+ then {
1407+ let hz = eT(-(cQ), -(cR), 0)
1408+ let gj = hz._1
1409+ let eK = hz._2
1410+ let gk = eX(eS, eK)
1411+ if ((gk == gk))
1412+ then (cS ++ gj)
1413+ else throw("Strict value is not equal to itself.")
1414+ }
1415+ else throw("Strict value is not equal to itself.")
1416+ }
1417+ else throw("Strict value is not equal to itself.")
1418+ }
1419+ else throw("Strict value is not equal to itself.")
1420+ }
1421+ else throw("Strict value is not equal to itself.")
5071422 }
5081423
5091424
5101425
511-@Callable(cD)
512-func fromX18WrapperREADONLY (E,F) = $Tuple2(nil, D(parseBigIntValue(E), F))
513-
514-
515-
516-@Callable(cD)
517-func statsREADONLY () = {
518- let bc = av()
519- let bp = fromBase58String(bc[n])
520- let cq = bc[o]
521- let cr = bc[p]
522- let bR = bc[s]
523- let bS = bc[t]
524- let bd = parseIntValue(bc[q])
525- let be = parseIntValue(bc[r])
526- let dd = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
527- let cs = aO(cq)
528- let ct = aO(cr)
529- let de = if ((dd == 0))
530- then [e, e, e]
531- else ba(cs, ct, dd)
532- let bz = 0
533- let df = D(de[1], b)
534- let dg = D(de[2], b)
535- let dh = value(getInteger(as, ai(toString(this))))
536- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cs), toString(ct), toString(dd), toString(bz), toString(df), toString(dg), toString(dh)], f))
1426+@Callable(dZ)
1427+func unstakeAndGetNoLess (hA,hB,hq) = {
1428+ let hb = if (aR())
1429+ then true
1430+ else (bg == s)
1431+ let gQ = [if (!(hb))
1432+ then true
1433+ else throw("get operation is blocked by admin"), if ((size(dZ.payments) == 0))
1434+ then true
1435+ else throw("no payments are expected")]
1436+ if ((gQ == gQ))
1437+ then {
1438+ let eS = eL(toBigInt(0), toBigInt(0), toBigInt(0))
1439+ let hw = invoke(bq, "unstake", [toBase58String(bh), hA], nil)
1440+ if ((hw == hw))
1441+ then {
1442+ let hC = cu(toBase58String(dZ.transactionId), toBase58String(bh), hA, dZ.caller)
1443+ let cQ = hC._1
1444+ let cR = hC._2
1445+ let cS = hC._10
1446+ let hD = [if ((cQ >= hB))
1447+ then true
1448+ else throw(makeString(["amount asset amount to receive is less than ", toString(hB)], "")), if ((cR >= hq))
1449+ then true
1450+ else throw(makeString(["price asset amount to receive is less than ", toString(hq)], ""))]
1451+ if ((hD == hD))
1452+ then {
1453+ let hr = invoke(aM, "burn", [hA], [AttachedPayment(bh, hA)])
1454+ if ((hr == hr))
1455+ then {
1456+ let hE = eT(-(cQ), -(cR), 0)
1457+ let gj = hE._1
1458+ let eK = hE._2
1459+ let gk = eX(eS, eK)
1460+ if ((gk == gk))
1461+ then (cS ++ gj)
1462+ else throw("Strict value is not equal to itself.")
1463+ }
1464+ else throw("Strict value is not equal to itself.")
1465+ }
1466+ else throw("Strict value is not equal to itself.")
1467+ }
1468+ else throw("Strict value is not equal to itself.")
1469+ }
1470+ else throw("Strict value is not equal to itself.")
5371471 }
5381472
5391473
5401474
541-@Callable(cD)
542-func evaluatePutByAmountAssetREADONLY (bJ) = {
543- let bc = av()
544- let bp = fromBase58String(bc[n])
545- let bP = bc[o]
546- let bq = fromBase58String(bP)
547- let bQ = bc[p]
548- let br = fromBase58String(bQ)
549- let bd = parseIntValue(bc[q])
550- let be = parseIntValue(bc[r])
551- let bs = bc[m]
552- let dd = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
553- let cs = aO(bP)
554- let ct = aO(bQ)
555- let aY = A(cs, bd)
556- let aZ = A(ct, be)
557- let by = if ((dd == 0))
558- then e
559- else aQ(aZ, aY)
560- let bV = A(bJ, bd)
561- let bW = fraction(bV, by, d)
562- let bL = D(bW, be)
563- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
564- let cg = cJ._1
565- let di = cJ._3
566- let bu = cJ._4
567- let bw = cJ._5
568- let bt = cJ._6
569- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
1475+@Callable(dZ)
1476+func unstakeAndGetOneTknV2 (hA,fM,fN) = {
1477+ let gO = {
1478+ let aO = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1479+ if ($isInstanceOf(aO, "Boolean"))
1480+ then aO
1481+ else throw(($getType(aO) + " couldn't be cast to Boolean"))
1482+ }
1483+ let hb = if (if (aR())
1484+ then true
1485+ else (bg == s))
1486+ then true
1487+ else gO
1488+ let gQ = [if (if (!(hb))
1489+ then true
1490+ else gp(dZ))
1491+ then true
1492+ else aJ("get operation is blocked by admin"), if ((size(dZ.payments) == 0))
1493+ then true
1494+ else aJ("no payments are expected")]
1495+ if ((gQ == gQ))
1496+ then {
1497+ let hu = bo()
1498+ let gE = bh
1499+ let hv = valueOrErrorMessage(addressFromString(hu[C]), "Wr st addr")
1500+ let hw = invoke(hv, "unstake", [toBase58String(gE), hA], nil)
1501+ if ((hw == hw))
1502+ then {
1503+ let hF = fL(fM, fN, [AttachedPayment(gE, hA)], dZ.caller, dZ.originCaller, dZ.transactionId)
1504+ let cS = hF._1
1505+ let fW = hF._2
1506+ $Tuple2(cS, fW)
1507+ }
1508+ else throw("Strict value is not equal to itself.")
1509+ }
1510+ else throw("Strict value is not equal to itself.")
5701511 }
5711512
5721513
5731514
574-@Callable(cD)
575-func evaluatePutByPriceAssetREADONLY (bL) = {
576- let bc = av()
577- let bp = fromBase58String(bc[n])
578- let bP = bc[o]
579- let bq = fromBase58String(bP)
580- let bQ = bc[p]
581- let br = fromBase58String(bQ)
582- let bd = parseIntValue(bc[q])
583- let be = parseIntValue(bc[r])
584- let bs = bc[m]
585- let dd = valueOrErrorMessage(assetInfo(bp), (("Asset " + toBase58String(bp)) + " doesn't exist")).quantity
586- let dj = aO(bP)
587- let dk = aO(bQ)
588- let dl = A(dj, bd)
589- let dm = A(dk, be)
590- let by = if ((dd == 0))
591- then e
592- else aQ(dm, dl)
593- let bW = A(bL, be)
594- let bV = fraction(bW, d, by)
595- let bJ = D(bV, bd)
596- let cJ = bH("", 500000, bJ, bq, bL, br, "", true, false)
597- let cg = cJ._1
598- let di = cJ._3
599- let bu = cJ._4
600- let bw = cJ._5
601- let bt = cJ._6
602- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cg), toString(D(by, b)), toString(bu), toString(bw), toString(bt), bs, toString(bJ), toString(bL)], f))
1515+@Callable(dZ)
1516+func putOneTknV2WithBonusREADONLY (hG,hH) = {
1517+ let hI = fp(hG, hH, "", "", true)
1518+ let fF = hI._1
1519+ let cS = hI._2
1520+ let ct = hI._3
1521+ let fK = hI._4
1522+ $Tuple2(nil, $Tuple3(fF, ct, fK))
6031523 }
6041524
6051525
6061526
607-@Callable(cD)
608-func evaluateGetREADONLY (dn,do) = {
609- let bY = bl("", dn, do, this)
610- let bE = bY._1
611- let bF = bY._2
612- let bu = bY._5
613- let bw = bY._6
614- let bt = bY._7
615- let bz = bY._8
616- let bs = parseIntValue(bY._9)
617- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bE), toString(bF), toString(bu), toString(bw), toString(bt), toString(bz), toString(bs)], f))
1527+@Callable(dZ)
1528+func putOneTknV2WithoutTakeFeeREADONLY (hG,hH) = {
1529+ let hJ = fp(hG, hH, "", "", false)
1530+ let fF = hJ._1
1531+ let cS = hJ._2
1532+ let ct = hJ._3
1533+ let fK = hJ._4
1534+ $Tuple2(nil, $Tuple3(fF, ct, fK))
6181535 }
6191536
6201537
621-@Verifier(dp)
622-func dq () = {
623- let dr = dp
624- if ($isInstanceOf(dr, "Order"))
1538+
1539+@Callable(dZ)
1540+func activate (hK,hL) = if ((toString(dZ.caller) != toString(aM)))
1541+ then throw("denied")
1542+ else $Tuple2([StringEntry(ag(), hK), StringEntry(ah(), hL)], "success")
1543+
1544+
1545+
1546+@Callable(dZ)
1547+func setS (hM,hx) = if ((toString(dZ.caller) != aF(this, aj())))
1548+ then go
1549+ else [StringEntry(hM, hx)]
1550+
1551+
1552+
1553+@Callable(dZ)
1554+func setI (hM,hx) = if ((toString(dZ.caller) != aF(this, aj())))
1555+ then go
1556+ else [IntegerEntry(hM, hx)]
1557+
1558+
1559+
1560+@Callable(dZ)
1561+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aU())
1562+
1563+
1564+
1565+@Callable(dZ)
1566+func getAccBalanceWrapperREADONLY (bK) = $Tuple2(nil, bJ(bK))
1567+
1568+
1569+
1570+@Callable(dZ)
1571+func calcPricesWrapperREADONLY (cd,ce,ci) = {
1572+ let hN = ch(cd, ce, ci)
1573+ $Tuple2(nil, [toString(hN[0]), toString(hN[1]), toString(hN[2])])
1574+ }
1575+
1576+
1577+
1578+@Callable(dZ)
1579+func fromX18WrapperREADONLY (L,hO) = $Tuple2(nil, K(parseBigIntValue(L), hO))
1580+
1581+
1582+
1583+@Callable(dZ)
1584+func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
1585+
1586+
1587+
1588+@Callable(dZ)
1589+func calcPriceBigIntWrapperREADONLY (bM,bN) = $Tuple2(nil, toString(bL(parseBigIntValue(bM), parseBigIntValue(bN))))
1590+
1591+
1592+
1593+@Callable(dZ)
1594+func estimatePutOperationWrapperREADONLY (cv,bS,cU,cV,cW,cX,hP,cY,cZ) = $Tuple2(nil, cT(cv, bS, cU, cV, cW, cX, hP, cY, cZ, true, false, 0, ""))
1595+
1596+
1597+
1598+@Callable(dZ)
1599+func estimateGetOperationWrapperREADONLY (cv,hQ,cx,hP) = {
1600+ let do = cu(cv, hQ, cx, addressFromStringValue(hP))
1601+ $Tuple2(nil, $Tuple10(do._1, do._2, do._3, do._4, do._5, do._6, do._7, toString(do._8), do._9, do._10))
1602+ }
1603+
1604+
1605+@Verifier(hR)
1606+func hS () = {
1607+ let hT = {
1608+ let gm = gl()
1609+ if ($isInstanceOf(gm, "ByteVector"))
1610+ then {
1611+ let gq = gm
1612+ gq
1613+ }
1614+ else if ($isInstanceOf(gm, "Unit"))
1615+ then hR.senderPublicKey
1616+ else throw("Match error")
1617+ }
1618+ let gm = hR
1619+ if ($isInstanceOf(gm, "Order"))
6251620 then {
626- let cp = dr
627- let ds = au()
628- let al = co(cp)
629- let am = sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
630- let an = sigVerify(cp.bodyBytes, cp.proofs[1], ds)
631- if (if (if (al)
632- then am
1621+ let fa = gm
1622+ let hU = aS()
1623+ let hV = eZ(fa)
1624+ let hW = sigVerify(fa.bodyBytes, fa.proofs[0], fa.senderPublicKey)
1625+ let hX = sigVerify(fa.bodyBytes, fa.proofs[1], hU)
1626+ if (if (if (hV)
1627+ then hW
6331628 else false)
634- then an
1629+ then hX
6351630 else false)
6361631 then true
637- else ak(al, am, an)
1632+ else aB(hV, hW, hX)
6381633 }
639- else {
640- let dt = valueOrElse(getString(this, M()), g)
641- if ((dt == g))
642- then sigVerify(dp.bodyBytes, dp.proofs[0], dp.senderPublicKey)
643- else sigVerify(dp.bodyBytes, dp.proofs[0], fromBase58String(dt))
644- }
1634+ else if ($isInstanceOf(gm, "SetScriptTransaction"))
1635+ then {
1636+ let dM = gm
1637+ let hY = blake2b256(value(dM.script))
1638+ let hZ = fromBase64String(value(getString(aM, az())))
1639+ let ia = scriptHash(this)
1640+ if (if ((hZ == hY))
1641+ then (ia != hY)
1642+ else false)
1643+ then true
1644+ else sigVerify(hR.bodyBytes, hR.proofs[0], hT)
1645+ }
1646+ else sigVerify(hR.bodyBytes, hR.proofs[0], hT)
6451647 }
6461648

github/deemru/w8io/873ac7e 
304.10 ms