tx · 2SNEaESZkeXRWWjM6WaniXuYjv9aJBVdqudEdiP1crg9

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03700000 Waves

2022.12.23 14:25 [2372859] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "2SNEaESZkeXRWWjM6WaniXuYjv9aJBVdqudEdiP1crg9", "fee": 3700000, "feeAssetId": null, "timestamp": 1671794720777, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "haZHLtWNVmSNicdzhmCETzWfDfa3cArYqgCmeP9WeXXT2meLt3uKpYdD1sPAXQcVS6RjXy4dCKyHnzWMe7cxUsc" ], "script": "base64:BgKpKQgCEgMKAQgSAwoBCBIAEgQKAgEEEgQKAgEEEgMKAQESABIECgIIARIAEgQKAggBEgQKAggBEgQKAgEBEgMKAQESBQoDAQEBEgUKAwEIARIECgIBCBIECgIBCBIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgAiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgRiaWczIgRiaWc0IgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciISaWR4RmFjdG9yeVJlc3RDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIKZmVlRGVmYXVsdCICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiAmYxIgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBmtleUZlZSIDZmVlIgZrZXlETHAiFWtleURMcFJlZnJlc2hlZEhlaWdodCISa2V5RExwUmVmcmVzaERlbGF5IhZkTHBSZWZyZXNoRGVsYXlEZWZhdWx0Ig9kTHBSZWZyZXNoRGVsYXkiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiA3RvZSIDb3JWIgZzZW5kclYiBm1hdGNoViIEc3RyZiIEYWRkciIDa2V5IgRpbnRmIgh0aHJvd0VyciIDbXNnIgZmbXRFcnIiA2ZjYSIBQSIDaWdzIgJtcCITZmVlQ29sbGVjdG9yQWRkcmVzcyIDZ3BjIgVhbXRBcyIHcHJpY2VBcyIIaVByaWNlQXMiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA3MzgzNzYxMiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEmNmZ0luQW1vdW50QXNzZWRJZCIRY2ZnSW5QcmljZUFzc2V0SWQiA2dmYyINZmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0Ig9zbGlwYWdlQ29udHJhY3QiC2d3eENvbnRyYWN0IgxyZXN0Q29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIKc2xpcEJ5VXNlciIMc2xpcHBhZ2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiDHNsaXBhZ2VBbUFtdCIMc2xpcGFnZVByQW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiBGNwYmkiCHByQW10WDE4IghhbUFtdFgxOCIDdmFkIgJBMSICQTIiCHNsaXBwYWdlIgRkaWZmIgRwYXNzIgJ2ZCICRDEiAkQwIgRzbHBnIgRmYWlsIgNwY3AiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCILYW10QXNBbXRYMTgiCnByQXNBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IghhbXRBc0RjbSIHcHJBc0RjbSIIcHJpY2VYMTgiCGxwQW10WDE4Ig1scFBySW5BbUFzWDE4Ig1scFBySW5QckFzWDE4Ig9jYWxjdWxhdGVQcmljZXMiAXAiB3Rha2VGZWUiBmFtb3VudCIJZmVlQW1vdW50IgNlZ28iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiC3VzZXJBZGRyZXNzIgRscElkIgRhbUlkIgRwcklkIgVhbURjbSIFcHJEY20iA3N0cyIHbHBFbWlzcyIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4IgpscEVtaXNzWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiA2VwbyIHaW5BbUFtdCIGaW5BbUlkIgdpblByQW10IgZpblBySWQiBmlzRXZhbCIGZW1pdExwIgppc09uZUFzc2V0IhB2YWxpZGF0ZVNsaXBwYWdlIgZwbXRBbXQiBXBtdElkIgdhbUlkU3RyIgdwcklkU3RyIglpbkFtSWRTdHIiCWluUHJJZFN0ciIGYW10RGNtIghwcmljZURjbSIEbHBFbSIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIBciILc2xpcHBhZ2VYMTgiD3NsaXBwYWdlUmVhbFgxOCINbHBFbWlzc2lvblgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiINJHQwMTgwMTcxODM2MiIKd3JpdGVBbUFtdCIKd3JpdGVQckFtdCILY29tbW9uU3RhdGUiBGdldEQiAnhwIgN4cDAiA3hwMSIBcyIBYSIDYW5uIgt4cDBfeHAxX25fbiIFYW5uX3MiBWFubl8xIgljYWxjRE5leHQiAWQiAmRkIgNkZGQiAmRwIgRjYWxjIgNhY2MiAWkiBWROZXh0IghkRGlmZlJhdyIFZERpZmYiA2FyciINJHQwMjAyOTAyMDMzOCICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiBWZvdW5kIgdnZXRET2xkIgFuIgphUHJlY2lzaW9uIhBhbm5fc19hUHJlY2lzaW9uIg5hbm5fYVByZWNpc2lvbiICbjEiA2N1ciINJHQwMjA5NjcyMDk4NyINJHQwMjE0MDgyMTQ1NSIFZ2V0WUQiAUQiAXgiAWMiAWIiDSR0MDIxOTU1MjE5NzUiAXkiBXlOZXh0IgV5RGlmZiINJHQwMjIyODIyMjMyOSIHY2FsY0RMcCINYW1vdW50QmFsYW5jZSIMcHJpY2VCYWxhbmNlIgpscEVtaXNzaW9uIgp1cGRhdGVkRExwIg5jYWxjQ3VycmVudERMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50RExwIhJyZWZyZXNoRExwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhJ2YWxpZGF0ZVVwZGF0ZWRETHAiBm9sZERMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI0MjY4MjQ0ODAiA2RMcCINJHQwMjQ4MTAyNDkxMCINdW51c2VkQWN0aW9ucyIGZExwTmV3Igxpc09yZGVyVmFsaWQiAmNnIgNwbXQiAmNwIgZjYWxsZXIiB2FtQXNQbXQiB3ByQXNQbXQiDWNhbGNQdXRPbmVUa24iCXBtdEFtdFJhdyILd2l0aFRha2VGZWUiDWNoZWNoRW1pc3Npb24iDSR0MDI3MTc2Mjc2MzgiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIg0kdDAyNzY0NDI3ODIwIgthbUFtb3VudFJhdyILcHJBbW91bnRSYXciDSR0MDI3ODI0MjgwNjMiCGFtQW1vdW50IghwckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciBmNoZWNrRCIIbHBBbW91bnQiDnBvb2xQcm9wb3J0aW9uIg9hbW91bnRBc3NldFBhcnQiDnByaWNlQXNzZXRQYXJ0IglscEFtdEJvdGgiBWJvbnVzIhNnZXRPbmVUa25WMkludGVybmFsIgpvdXRBc3NldElkIgxtaW5PdXRBbW91bnQiCHBheW1lbnRzIgxvcmlnaW5DYWxsZXIiDXRyYW5zYWN0aW9uSWQiCmFtRGVjaW1hbHMiCnByRGVjaW1hbHMiCnBvb2xTdGF0dXMiDSR0MDMwMTEzMzAyMjQiAUAiCHRvdGFsR2V0Igt0b3RhbEFtb3VudCINJHQwMzA0MTQzMDcyMSIFb3V0QW0iBW91dFByIghjdXJQclgxOCIFY3VyUHIiEW91dEFzc2V0SWRPcldhdmVzIhBzZW5kRmVlVG9NYXRjaGVyIgRidXJuIg0kdDAzMTUwNjMxODU2IhBmZWVBbW91bnRGb3JDYWxjIhBvdXRJbkFtb3VudEFzc2V0Ig0kdDAzMTg1OTMxOTY3IhFyZWZyZXNoRExwQWN0aW9ucyIRaXNVcGRhdGVkRExwVmFsaWQiAW0iByRtYXRjaDAiAnBtIgJwZCIJaXNNYW5hZ2VyIgJwayICbW0iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgJjbSIDaHBtIgNjcG0iBHNsaXAiCWF1dG9TdGFrZSIHZmFjdENmZyILc3Rha2luZ0NudHIiCHNsaXBDbnRyIgphbUFzc2V0UG10IgpwckFzc2V0UG10IgFlIglscEFzc2V0SWQiAmVsIgZsZWdhY3kiAnNhIgJzcCIIbHBUcm5zZnIiAnNzIg0kdDAzNjExNjM2MjU4IgVjaGVjayIUbHBBc3NldEVtaXNzaW9uQWZ0ZXIiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIg1pc1B1dERpc2FibGVkIgZjaGVja3MiDSR0MDM3ODQ5MzgwMDciB2VzdGltTFAiDSR0MDM4ODIyMzkxNzEiFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAzOTE3NDM5MjgyIgdtYXhTbHBnIgZlc3RQdXQiDSR0MDQwMzEyNDAzNzciCW91dEFtdEFtdCINJHQwNDE1NTA0MTYzMiINaXNHZXREaXNhYmxlZCINJHQwNDIyNTA0MjQwNSIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNDI5Mjk0Mjk5MyIQZExwVXBkYXRlQWN0aW9ucyINbHBBc3NldEFtb3VudCIFaW5kZXgiBG5ld1kiAmR5Igt0b3RhbEdldFJhdyINJHQwNDM5MjM0Mzk3MiINJHQwNDQzNDc0NDQ2MiIOc3VtT2ZHZXRBc3NldHMiEm5vTGVzc1RoZW5BbXRBc3NldCIUbm9MZXNzVGhlblByaWNlQXNzZXQiA2FhYiIDcGFiIgNsYWUiBGxhZWEiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA0NjAwMTQ2MDgyIg1jaGVja1BheW1lbnRzIgpmYWN0b3J5Q2ZnIgdzdGFraW5nIgp1bnN0YWtlSW52IgF2IgVidXJuQSINJHQwNDcxMDY0NzE4NyINdW5zdGFrZUFtb3VudCIVbm9MZXNzVGhlbkFtb3VudEFzc2V0IgNyZXMiDGNoZWNrQW1vdW50cyINJHQwNDg0MzU0ODUxNiINJHQwNDk0MTE0OTU5OSIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiDSR0MDQ5NzI3NDk4MzAiDSR0MDQ5OTc4NTAwODIiCGFtdEFzU3RyIgdwckFzU3RyIgFrIgJwciIMcmVzU2NhbGVNdWx0Igd1c3JBZGRyIgdwbXRBc0lkIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaHwAAWEAgMLXLwABYgkAtgIBAIDC1y8AAWMJALYCAQCAgJC7utat8A0AAWQJALYCAQAAAAFlCQC2AgEAAAABZgkAtgIBAAEAAWcJALYCAQACAAFoCQC2AgEAAwABaQkAtgIBAAQAAWoJALYC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b3JNZXNzYWdlAgkApggBCQCRAwIFAmJtBQFEAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAQJicgoCYnMCYnQCYnUCYnYCYncCYngCYnkCYnoCYkECYkIJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJzCQDMCAIJAKQDAQUCYnQJAMwIAgkApAMBBQJidQkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYncJAMwIAgkApAMBBQJieAkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYnoJAMwIAgkApAMBBQJiQQkAzAgCCQCkAwEFAmJCBQNuaWwFAW4BAmJDBgJiRAJiRQJiRgJidgJieQJiegkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJECQDMCAIJAKQDAQUCYkUJAMwIAgkApAMBBQJiRgkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYnkJAMwIAgkApAMBBQJiegUDbmlsBQFuAQJiRwECYkgDCQAAAgUCYkgCBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmJIAQJiSQICYkoCYksJALwCAwUCYkoFAWMFAmJLAQJiTAMCYk0CYk4CYk8EAmJQCQC8AgMJALgCAgUCYk0FAmJOBQFiBQJiTgQCYlEJAL8CAgkAuAICBQJiTwkBAVQBBQJiUAUBZAMJAQEhAQUCYlEJAAIBCQCsAgICCkJpZyBzbHBnOiAJAKYDAQUCYlAJAJQKAgUCYlEJAJkDAQkAzAgCBQJiTQkAzAgCBQJiTgUDbmlsAQJiUgMCYlMCYlQCYlUEAmJQCQC8AgMFAmJUBQFiBQJiUwQCYlYJAL8CAgUCYlUFAmJQAwMFAmJWBgkAvwICBQJiVAUCYlMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCmAwEFAmJUAgEgCQCmAwEFAmJTAgEgCQCmAwEFAmJQAgEgCQCmAwEFAmJVBQJiVgECYlcEAmJYAmJZAmJaAmNhBAJjYgkBAUgCBQJiWgUCYlgEAmNjCQEBSAIFAmNhBQJiWQkBAmJJAgUCY2MFAmNiAQJjZAMCYloCY2ECY2UEAmNmBQJiaAQCY2cFAmJpBAJjaAkBAmJXBAUCY2YFAmNnBQJiWgUCY2EEAmJLCQEBSAIFAmJaBQJjZgQCYkoJAQFIAgUCY2EFAmNnBAJjaQkBAUgCBQJjZQUBYQQCY2oJAQJiSQIFAmJLBQJjaQQCY2sJAQJiSQIFAmJKBQJjaQkAzAgCBQJjaAkAzAgCBQJjagkAzAgCBQJjawUDbmlsAQJjbAMCYloCY2ECY2UEAmNtCQECY2QDBQJiWgUCY2EFAmNlCQDMCAIJAQFLAgkAkQMCBQJjbQAABQFhCQDMCAIJAQFLAgkAkQMCBQJjbQABBQFhCQDMCAIJAQFLAgkAkQMCBQJjbQACBQFhBQNuaWwBAmNuAQJjbwQCY3AJAGsDBQJjbwUCYWwFAWEJAJQKAgkAZQIFAmNvBQJjcAUCY3ABAmNxBAJjcgJjcwJjdAJjdQQCY3YFAmJlBAJjdwkA2AQBCQEFdmFsdWUBBQJiZgQCY3gJANgEAQkBBXZhbHVlAQUCYmcEAmN5BQJiaAQCY3oFAmJpBAJjQQkApAMBBQJiZAQCY0IICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3YCC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgkA2AQBBQJjdgUCY3MJAAIBAg9Xcm9uZyBwbXQgYXNzZXQEAmNDCQECYkcBBQJjdwQCY0QJAQFIAgUCY0MFAmN5BAJjRQkBAmJHAQUCY3gEAmNGCQEBSAIFAmNFBQJjegQCY0cJAQJiSQIFAmNGBQJjRAQCY0gJAQFLAgUCY0cFAWEEAmNJCQEBSAIFAmN0BQFhBAJjSgkBAUgCBQJjQgUBYQQCY0sJALwCAwUCY0QFAmNJBQJjSgQCY0wJALwCAwUCY0YFAmNJBQJjSgQCY00JAQFOAwUCY0sFAmN5BQVGTE9PUgQCY04JAQFOAwUCY0wFAmN6BQVGTE9PUgQCY08DCQAAAgUCY3ICAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN1BQJjTQMJAAACBQJjdwIFV0FWRVMFBHVuaXQJANkEAQUCY3cJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3UFAmNOAwkAAAIFAmN4AgVXQVZFUwUEdW5pdAkA2QQBBQJjeAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWYCCQClCAEFAmN1BQJjcgkBAmJDBgUCY00FAmNOBQJjdAUCY0gFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0gFA25pbAkAnAoKBQJjTQUCY04FAmN3BQJjeAUCY0MFAmNFBQJjQgUCY0cFAmNBBQJjTwECY1ANAmNyAmJPAmNRAmNSAmNTAmNUAmN1AmNVAmNWAmNXAmNYAmNZAmNaBAJjdgUCYmUEAmRhCQDYBAEJAQV2YWx1ZQEFAmJmBAJkYgkA2AQBCQEFdmFsdWUBBQJiZwQCZGMFAmJqBAJkZAUCYmsEAmRlBQJiaAQCZGYFAmJpBAJjQQkApAMBBQJiZAQCZGcICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3YCCFdyIGxwIGFzCHF1YW50aXR5BAJjQwMFAmNVCQECYkcBBQJkYQMDBQJjVwkAAAIFAmNaBQJkYQcJAGUCCQECYkcBBQJkYQUCY1kDBQJjVwkBAmJHAQUCZGEJAGUCCQECYkcBBQJkYQUCY1EEAmNFAwUCY1UJAQJiRwEFAmRiAwMFAmNXCQAAAgUCY1oFAmRiBwkAZQIJAQJiRwEFAmRiBQJjWQMFAmNXCQECYkcBBQJkYgkAZQIJAQJiRwEFAmRiBQJjUwQCZGgJAQFIAgUCY1EFAmRlBAJkaQkBAUgCBQJjUwUCZGYEAmRqCQECYkkCBQJkaQUCZGgEAmNECQEBSAIFAmNDBQJkZQQCY0YJAQFIAgUCY0UFAmRmBAJkawMJAAACBQJkZwAABAJjRwUBZAQCZGwFAWQEAmNpCQB2BgkAuQICBQJkaAUCZGkAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFLAgUCY2kFAWEJAQFLAgUCZGgFAmRlCQEBSwIFAmRpBQJkZgkBAmJJAgkAtwICBQJjRgUCZGkJALcCAgUCY0QFAmRoBQJkbAQCY0cJAQJiSQIFAmNGBQJjRAQCZG0JALwCAwkBAVQBCQC4AgIFAmNHBQJkagUBYwUCY0cEAmRsCQEBSAIFAmJPBQFhAwMDBQJjWAkBAiE9AgUCY0cFAWQHCQC/AgIFAmRtBQJkbAcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCZG0CAyA+IAkApgMBBQJkbAQCZG4JAQFIAgUCZGcFAWEEAmRvCQC8AgMFAmRoBQJjRwUBYwQCZHAJALwCAwUCZGkFAWMFAmNHBAJkcQMJAL8CAgUCZG8FAmRpCQCUCgIFAmRwBQJkaQkAlAoCBQJkaAUCZG8EAmRyCAUCZHECXzEEAmRzCAUCZHECXzIEAmNpCQC8AgMFAmRuBQJkcwUCY0YJAJcKBQkBAU4DBQJjaQUBYQUFRkxPT1IJAQFOAwUCZHIFAmRlBQdDRUlMSU5HCQEBTgMFAmRzBQJkZgUHQ0VJTElORwUCY0cFAmRsBAJkdAgFAmRrAl8xBAJkdQgFAmRrAl8yBAJkdggFAmRrAl8zBAJjSAkBAUsCCAUCZGsCXzQFAWEEAmR3CQEBSwIIBQJkawJfNQUBYQMJAGcCAAAFAmR0CQACAQIHTFAgPD0gMAQCZHgDCQEBIQEFAmNWAAAFAmR0BAJkeQkAZQIFAmNRBQJkdQQCZHoJAGUCBQJjUwUCZHYEAmRBAwMFAmNXCQAAAgUCY1oFAmRhBwkAlAoCBQJjWQAAAwMFAmNXCQAAAgUCY1oFAmRiBwkAlAoCAAAFAmNZCQCUCgIFAmR1BQJkdgQCZEIIBQJkQQJfMQQCZEMIBQJkQQJfMgQCZEQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0gJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUCY3UFAmNyCQECYnIKBQJkQgUCZEMFAmR4BQJjSAUCYk8FAmR3BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkeQUCZHoFA25pbAkAnwoNBQJkdAUCZHgFAmNIBQJjQwUCY0UFAmRnBQJjdgUCY0EFAmREBQJkeQUCZHoFAmNSBQJjVAECZEUBAmRGBAJkRwkAkQMCBQJkRgAABAJkSAkAkQMCBQJkRgABBAJkSQkAtwICBQJkRwUCZEgDCQAAAgUCZEkFAWUFAWUEAmRKCQENcGFyc2VJbnRWYWx1ZQEFAmFOBAJkSwkAaAIFAmRKAAIEAmNtCQC8AgMFAmRHBQJkSAUBZgQCZEwJALwCAwUCY20FAWkFAWYEAmRNCQC8AgMJALYCAQUCZEsFAmRJBQFmBAJkTgkAtgIBCQBlAgUCZEsAAQoBAmRPAQJkUAQCZFEJALwCAwUCZFAFAmRQBQFmBAJkUgkAvAIDBQJkUQUCZFAFAWYEAmRTCQC8AgMFAmRSBQFmBQJkTAkAvQIECQC3AgIFAmRNCQC8AgMFAmRTBQFnBQFmBQJkUAkAtwICCQC8AgMFAmROBQJkUAUBZgkAvAIDBQFoBQJkUwUBZgUHQ0VJTElORwoBAmRUAgJkVQJkVgMIBQJkVQJfMgUCZFUEAmRQCAUCZFUCXzEEAmRXCQECZE8BBQJkUAQCZFgJAKADAQkAuAICBQJkVwkBBXZhbHVlAQUCZFAEAmRZAwkAZgIAAAUCZFgJAQEtAQUCZFgFAmRYAwkAZwIAAQUCZFkJAJQKAgUCZFcGCQCUCgIFAmRXBwQCZFoJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZWEKAAJlYgUCZFoKAAJlYwkAkAMBBQJlYgoAAmVkCQCUCgIFAmRJBwoBAmVlAgJlZgJlZwMJAGcCBQJlZwUCZWMFAmVmCQECZFQCBQJlZgkAkQMCBQJlYgUCZWcKAQJlaAICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZWgCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCBQJlZAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJkUAgFAmVhAl8xBAJlaQgFAmVhAl8yAwUCZWkFAmRQCQACAQkArAICAhlEIGNhbGN1bGF0aW9uIGVycm9yLCBEID0gCQCmAwEFAmRQAQJlagECZEYEAmVrBQFnBAJkRwkAkQMCBQJkRgAABAJkSAkAkQMCBQJkRgABBAJlbAkApwMBBQFsBAJkSgkAuQICCQCnAwEFAmFOBQJlbAQCZEkJALcCAgUCZEcFAmRIAwkAAAIFAmRJBQFlBQFlBAJkSwkAuQICBQJkSgUCZWsEAmRMCQC5AgIJALkCAgkAuQICBQJkRwUCZEgFAmVrBQJlawQCZW0JALoCAgkAuQICBQJkSwUCZEkFAmVsBAJlbgkAuAICBQJkSwUCZWwEAmVvCQC3AgIFAmVrBQFmCgECZFQCAmRVAmVwBAJlcQUCZFUEAmRQCAUCZXECXzEEAmVpCAUCZXECXzIDCQECIT0CBQJlaQUEdW5pdAUCZFUEAmRTCQC6AgIJALkCAgkAuQICBQJkUAUCZFAFAmRQBQJkTAQCZFcJALoCAgkAuQICCQC3AgIFAmVtCQC5AgIFAmRTBQJlawUCZFAJALcCAgkAugICCQC5AgIFAmVuBQJkUAUCZWwJALkCAgUCZW8FAmRTBAJkWQkBAVUBCQC4AgIFAmRXCQEFdmFsdWUBBQJkUAMJAMACAgUBZgUCZFkJAJQKAgUCZFcFAmVwCQCUCgIFAmRXBQR1bml0BAJkWgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJlcgoAAmViBQJkWgoAAmVjCQCQAwEFAmViCgACZWQJAJQKAgUCZEkFBHVuaXQKAQJlZQICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkBAmRUAgUCZWYJAJEDAgUCZWIFAmVnCgECZWgCAmVmAmVnAwkAZwIFAmVnBQJlYwUCZWYJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVoAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgkBAmVlAgUCZWQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZFAIBQJlcgJfMQQCZWkIBQJlcgJfMgMJAQIhPQIFAmVpBQR1bml0BQJkUAkAAgEJAKwCAgIZRCBjYWxjdWxhdGlvbiBlcnJvciwgRCA9IAkApgMBBQJkUAECZXMDAmRGAmRWAmV0BAJlawUBZwQCZXUJAJEDAgUCZEYDCQAAAgUCZFYAAAABAAAEAmVsCQCnAwEFAWwEAmRKCQC5AgIJAKcDAQUCYU4FAmVsBAJkSQUCZXUEAmRLCQC5AgIFAmRKBQJlawQCZXYJALoCAgkAuQICCQC5AgIJALoCAgkAuQICBQJldAUCZXQJALkCAgUCZXUFAmVrBQJldAUCZWwJALkCAgUCZEsFAmVrBAJldwkAuAICCQC3AgIFAmRJCQC6AgIJALkCAgUCZXQFAmVsBQJkSwUCZXQKAQJkVAICZFUCZXAEAmV4BQJkVQQCZXkIBQJleAJfMQQCZWkIBQJleAJfMgMJAQIhPQIFAmVpBQR1bml0BQJkVQQCZXoJALoCAgkAtwICCQC5AgIFAmV5BQJleQUCZXYJALcCAgkAuQICBQFnBQJleQUCZXcEAmVBCQEBVQEJALgCAgUCZXoJAQV2YWx1ZQEFAmV5AwkAwAICBQFmBQJlQQkAlAoCBQJlegUCZXAJAJQKAgUCZXoFBHVuaXQEAmRaCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmVCCgACZWIFAmRaCgACZWMJAJADAQUCZWIKAAJlZAkAlAoCBQJldAUEdW5pdAoBAmVlAgJlZgJlZwMJAGcCBQJlZwUCZWMFAmVmCQECZFQCBQJlZgkAkQMCBQJlYgUCZWcKAQJlaAICZWYCZWcDCQBnAgUCZWcFAmVjBQJlZgkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZWgCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCCQECZWUCBQJlZAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJleQgFAmVCAl8xBAJlaQgFAmVCAl8yAwkBAiE9AgUCZWkFBHVuaXQFAmV5CQACAQkArAICAhlZIGNhbGN1bGF0aW9uIGVycm9yLCBZID0gCQCmAwEFAmV5AQJlQwMCZUQCZUUCZUYEAmVHCQC8AgMJAQJkRQEJAMwIAgUCZUQJAMwIAgUCZUUFA25pbAUBYwUCZUYDCQAAAgUCZUYFAWUFAWUFAmVHAQJlSAMCZUkCZUoCZUsEAmVMCQC4AgIJALYCAQkBAmJHAQkBAmFYAQUCYmYFAmVJBAJlTQkAuAICCQC2AgEJAQJiRwEJAQJhWAEFAmJnBQJlSgQCZU4JALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJiZQhxdWFudGl0eQUCZUsEAmVPCQECZUMDBQJlTAUCZU0FAmVOBQJlTwECZVADAmVRAmVSAmVLBAJlTAkAZAIJAQJiRwEJAQJhWAEFAmJmBQJlUQQCZU0JAGQCCQECYkcBCQECYVgBBQJiZwUCZVIEAmVOCQBkAggJAQV2YWx1ZQEJAOwHAQUCYmUIcXVhbnRpdHkFAmVLBAJlRwkBAmVDAwkAtgIBBQJlTAkAtgIBBQJlTQkAtgIBBQJlTgQCZVMJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFuBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYW0JAKYDAQUCZUcFA25pbAkAlAoCBQJlUwUCZUcBAmVUAgJlVQJlRwMJAMACAgUCZUcFAmVVBgkBAmFKAQIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAECZVYBAmVXBAJlWAgFAmVXBmFtb3VudAQCZVkJAG4ECAUCZVcGYW1vdW50CAUCZVcFcHJpY2UFAWEFBUZMT09SBAJlWgMJAAACCAUCZVcJb3JkZXJUeXBlBQNCdXkJAJQKAgUCZVgJAQEtAQUCZVkJAJQKAgkBAS0BBQJlWAUCZVkEAmVRCAUCZVoCXzEEAmVSCAUCZVoCXzIDAwMJAQJhTwAGCQAAAgUCYmQFAXIGCQAAAgUCYmQFAXMJAAIBAg1BZG1pbiBibG9ja2VkAwMJAQIhPQIICAUCZVcJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BQJiZgYJAQIhPQIICAUCZVcJYXNzZXRQYWlyCnByaWNlQXNzZXQFAmJnCQACAQIJV3IgYXNzZXRzBAJmYQkApwMBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQJhbQQCZmIJAQJlUAMFAmVRBQJlUgAABAJmYwgFAmZiAl8xBAJmZAgFAmZiAl8yBAJmZQkAwAICBQJmZAUCZmEFAmZlAQJmZgECZFYDCQECIT0CCQCQAwEIBQJkVghwYXltZW50cwABCQACAQIKMSBwbW50IGV4cAQCZmcJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAEAmNzCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmRrCQECY3EECQDYBAEIBQJkVg10cmFuc2FjdGlvbklkCQDYBAEFAmNzBQJjWQgFAmRWBmNhbGxlcgQCY00IBQJkawJfMQQCY04IBQJkawJfMgQCY0EJAQ1wYXJzZUludFZhbHVlAQgFAmRrAl85BAJjTwgFAmRrA18xMAMDCQECYU8ABgkAAAIFAmNBBQFzCQACAQkArAICAg9BZG1pbiBibG9ja2VkOiAJAKQDAQUCY0EJAJcKBQUCY00FAmNOBQJjWQUCY3MFAmNPAQJmaAoCZmkCYWUCZmoCZmsCYk8CY1YCY1cCY1gCY1kCY1oEAmRrCQECY1ANBQJhZQUCYk8ICQEFdmFsdWUBBQJmagZhbW91bnQICQEFdmFsdWUBBQJmagdhc3NldElkCAkBBXZhbHVlAQUCZmsGYW1vdW50CAkBBXZhbHVlAQUCZmsHYXNzZXRJZAUCZmkJAAACBQJhZQIABQJjVgUCY1cFAmNYBQJjWQUCY1oEAmNBCQENcGFyc2VJbnRWYWx1ZQEIBQJkawJfOAMDAwkBAmFPAAYJAAACBQJjQQUBcQYJAAACBQJjQQUBcwkAAgEJAKwCAgIIQmxvY2tlZDoJAKQDAQUCY0EFAmRrAQJmbAUCZm0CY3MCY3UCYWUCZm4EAmN3CQDYBAEJAQV2YWx1ZQEFAmJmBAJjeAkA2AQBCQEFdmFsdWUBBQJiZwQCY3YFAmJlBAJkZQUCYmgEAmRmBQJiaQQCZU4JALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJjdgIQaW52YWxpZCBscCBhc3NldAhxdWFudGl0eQQCZm8DCQC/AgIFAmVOBQFlBgkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZm8FAmZvBAJjQwkBAmJHAQUCY3cEAmNFCQECYkcBBQJjeAQCZnADCQAAAgUCYWUCAAkAlAoCBQJjQwUCY0UDCQAAAgUCY3MFAmN3AwkAZgIFAmZtBQJjQwkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgkAZQIFAmNDBQJmbQUCY0UDCQAAAgUCY3MFAmN4AwkAZgIFAmZtBQJjRQkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgUCY0MJAGUCBQJjRQUCZm0JAAIBAhB3cm9uZyBwbXRBc3NldElkBAJmcQgFAmZwAl8xBAJmcggFAmZwAl8yBAJmcwMJAAACBQJjcwUCY3cJAJQKAgUCZm0AAAMJAAACBQJjcwUCY3gJAJQKAgAABQJmbQkAAgECD2ludmFsaWQgcGF5bWVudAQCZnQIBQJmcwJfMQQCZnUIBQJmcwJfMgQCZnYDBQJmbgkAlQoDCAkBAmNuAQUCZnQCXzEICQECY24BBQJmdQJfMQgJAQJjbgEFAmZtAl8yCQCVCgMFAmZ0BQJmdQAABAJmdwgFAmZ2Al8xBAJmeAgFAmZ2Al8yBAJjcAgFAmZ2Al8zBAJmeQkAZAIFAmZxBQJmdwQCZnoJAGQCBQJmcgUCZngEAmJUCQECZEUBCQDMCAIJALYCAQUCZnEJAMwIAgkAtgIBBQJmcgUDbmlsBAJiUwkBAmRFAQkAzAgCCQC2AgEFAmZ5CQDMCAIJALYCAQUCZnoFA25pbAQCZkEDCQC/AgIFAmJTBQJiVAYJAQV0aHJvdwADCQAAAgUCZkEFAmZBBAJmQgkAvQIEBQJlTgkAuAICBQJiUwUCYlQFAmJUBQVGTE9PUgQCY0gJAQFLAgkBAmJJAgkBAUgCBQJmegUCZGYJAQFIAgUCZnkFAmRlBQFhBAJkRAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVkABQJjSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVoCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjSAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMCBQJjdQUCYWUJAQJicgoFAmZ0BQJmdQkAoAMBBQJmQgUCY0gAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJmQwkAawMFAmZyBQFhBQJmcQQCZkQJAGsDBQJmbQUBYQkAZAIFAmZDBQFhBAJmRQkAZQIFAmZtBQJmRAQCZkYJALwCAwUCZU4JALYCAQUCZkUJALYCAQUCZnIEAmZHCQCgAwEJALwCAwkAuAICBQJmQgUCZkYFAWIFAmZGCQCWCgQJAKADAQUCZkIFAmREBQJjcAUCZkcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZIBgJmSQJmSgJmSwJmaQJmTAJmTQQCY3YJANgEAQkBBXZhbHVlAQUCYmUEAmN3CQDYBAEJAQV2YWx1ZQEFAmJmBAJjeAkA2AQBCQEFdmFsdWUBBQJiZwQCZk4FAmJoBAJmTwUCYmkEAmZQBQJiZAQCY3UDCQAAAgUCZmkFAmJxBQJmTAUCZmkEAmZnCQEFdmFsdWUBCQCRAwIFAmZLAAAEAmNzCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmVPCQECZUgDBQFlBQFlBQFlAwkAAAIFAmVPBQJlTwQCY3IJANgEAQUCZk0DCQECIT0CBQJjdgkA2AQBBQJjcwkAAgECCFdyb25nIExQBAJjQwkBAmJHAQUCY3cEAmNFCQECYkcBBQJjeAQCZlEKAAJmUgkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZJCQDMCAIFAmNZBQNuaWwFA25pbAMJAAECBQJmUgIKKEludCwgSW50KQUCZlIJAAIBCQCsAgIJAAMBBQJmUgIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQJmUQUCZlEEAmNwCAUCZlECXzIEAmZTCAUCZlECXzEEAmZUAwMJAGYCBQJmSgAACQBmAgUCZkoFAmZTBwkBAmFKAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSgUDbmlsAgAFAmZTBAJmVQMJAAACBQJmSQUCY3cJAJYKBAUCZlQAAAkAZQIJAGUCBQJjQwUCZlQFAmNwBQJjRQMJAAACBQJmSQUCY3gJAJYKBAAABQJmVAUCY0MJAGUCCQBlAgUCY0UFAmZUBQJjcAkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJmVggFAmZVAl8xBAJmVwgFAmZVAl8yBAJmeQgFAmZVAl8zBAJmeggFAmZVAl80BAJmWAkBAmJJAgkBAUgCBQJmegUCZk8JAQFIAgUCZnkFAmZOBAJmWQkBAUsCBQJmWAUBYQQCZloDCQAAAgUCZkkCBVdBVkVTBQR1bml0CQDZBAEFAmZJBAJnYQMJAGYCBQJjcAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFRBQJjcAUCZloFA25pbAUDbmlsBAJjTwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN1BQJmVAUCZloJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAgkApQgBBQJjdQUCY3IJAQJiQwYFAmZWBQJmVwUCY1kFAmZZBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWQAFAmZZCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWgIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZZBQNuaWwFAmdhAwkAAAIFAmNPBQJjTwQCZ2IJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY1kFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3MFAmNZBQNuaWwDCQAAAgUCZ2IFAmdiBAJnYwQCZ2QDCQAAAgUEdGhpcwUCYVEAAAUCY3AEAmdlAwkAAAIJAQJhVgEFAmZJBQJiZgYHAwUCZ2UJAJQKAgkBAS0BCQBkAgUCZlMFAmdkAAAJAJQKAgAACQEBLQEJAGQCBQJmUwUCZ2QEAmVRCAUCZ2MCXzEEAmVSCAUCZ2MCXzIEAmdmCQECZVADBQJlUQUCZVIAAAQCZ2cIBQJnZgJfMQQCZUcIBQJnZgJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAJQKAgkAzggCBQJjTwUCZ2cFAmZUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJnaQAEAmdqCQCiCAEJAQFXAAMJAAECBQJnagIGU3RyaW5nBAJkSQUCZ2oJANkEAQUCZEkDCQABAgUCZ2oCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ2sABAJnagkAoggBCQEBWAADCQABAgUCZ2oCBlN0cmluZwQCZEkFAmdqCQDZBAEFAmRJAwkAAQIFAmdqAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAAmdsCQACAQIRUGVybWlzc2lvbiBkZW5pZWQBAmdtAQJkVgQCZ2oJAQJnaQADCQABAgUCZ2oCCkJ5dGVWZWN0b3IEAmduBQJnagkAAAIIBQJkVg9jYWxsZXJQdWJsaWNLZXkFAmduAwkAAQIFAmdqAgRVbml0CQAAAggFAmRWBmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJnbwECZFYEAmdqCQECZ2kAAwkAAQIFAmdqAgpCeXRlVmVjdG9yBAJnbgUCZ2oDCQAAAggFAmRWD2NhbGxlclB1YmxpY0tleQUCZ24GBQJnbAMJAAECBQJnagIEVW5pdAMJAAACCAUCZFYGY2FsbGVyBQR0aGlzBgUCZ2wJAAIBAgtNYXRjaCBlcnJvch0CZFYBC2NvbnN0cnVjdG9yAQFWBAJldgkBAmdvAQUCZFYDCQAAAgUCZXYFAmV2CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAAUBVgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpzZXRNYW5hZ2VyAQJncAQCZXYJAQJnbwEFAmRWAwkAAAIFAmV2BQJldgQCZ3EJANkEAQUCZ3ADCQAAAgUCZ3EFAmdxCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFYAAUCZ3AFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEOY29uZmlybU1hbmFnZXIABAJjbQkBAmdrAAQCZ3IDCQEJaXNEZWZpbmVkAQUCY20GCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdyBQJncgQCZ3MDCQAAAggFAmRWD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCY20GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdzBQJncwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwAJANgEAQkBBXZhbHVlAQUCY20JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVgABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBA3B1dAICZ3QCZ3UEAmd2CQECYmwABAJndwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ3YFAUMCCldyIHN0IGFkZHIEAmd4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJndgUBRQIKV3Igc2wgYWRkcgMJAGYCAAAFAmd0CQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQJkVghwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJneQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAZhbW91bnQEAmd6CQC2AgEICQEFdmFsdWUBCQCRAwIIBQJkVghwYXltZW50cwABBmFtb3VudAQCZUwJALgCAgkAtgIBCQECYkcBCQECYVgBBQJiZgUCZ3kDCQAAAgUCZUwFAmVMBAJlTQkAuAICCQC2AgEJAQJiRwEJAQJhWAEFAmJnBQJnegMJAAACBQJlTQUCZU0EAmVOCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJlCHF1YW50aXR5AwkAAAIFAmVOBQJlTgQCZU8JAQJlSAMFAmd5BQJnegkAtgIBAAADCQAAAgUCZU8FAmVPBAJnQQkBAmZoCgkApQgBCAUCZFYGY2FsbGVyCQDYBAEIBQJkVg10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJkVghwYXltZW50cwABBQJndAYHBgAAAgAEAmR4CAUCZ0ECXzIEAmdCCAUCZ0ECXzcEAmNPCAUCZ0ECXzkEAmR5CAUCZ0EDXzEwBAJkeggFAmdBA18xMQQCY3cIBQJnQQNfMTIEAmN4CAUCZ0EDXzEzBAJkawkA/AcEBQJhTQIEZW1pdAkAzAgCBQJkeAUDbmlsBQNuaWwDCQAAAgUCZGsFAmRrBAJnQwQCZ2oFAmRrAwkAAQIFAmdqAgdBZGRyZXNzBAJnRAUCZ2oJAPwHBAUCZ0QCBGVtaXQJAMwIAgUCZHgFA25pbAUDbmlsBQR1bml0AwkAAAIFAmdDBQJnQwQCZ0UDCQBmAgUCZHkAAAkA/AcEBQJneAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN3BQJkeQUDbmlsBQNuaWwDCQAAAgUCZ0UFAmdFBAJnRgMJAGYCBQJkegAACQD8BwQFAmd4AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3gFAmR6BQNuaWwFA25pbAMJAAACBQJnRgUCZ0YEAmdHAwUCZ3UEAmdICQD8BwQFAmd3AgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnQgUCZHgFA25pbAMJAAACBQJnSAUCZ0gFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZFYGY2FsbGVyBQJkeAUCZ0IFA25pbAQCZ0kJAQJlUAMAAAAAAAAEAmdnCAUCZ0kCXzEEAmVHCAUCZ0kCXzIEAmdKAwkAwAICBQJlRwUCZU8GCQECYUoBCQC5CQIJAMwIAgIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAkAzAgCCQCmAwEFAmVMCQDMCAIJAKYDAQUCZU0JAMwIAgkApgMBBQJlTgkAzAgCCQCmAwEFAmVPCQDMCAIJAKYDAQUCZUcFA25pbAIBIAMJAAACBQJnSgUCZ0oEAmdLCAkBBXZhbHVlAQkA7AcBBQJiZQhxdWFudGl0eQMJAAACBQJnSwUCZ0sJAM4IAgkAzggCBQJjTwUCZ0cFAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQtwdXRPbmVUa25WMgICZkoCZ3UEAmdMCgACZlIJAPwHBAUCYU0CKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmUgIHQm9vbGVhbgUCZlIJAAIBCQCsAgIJAAMBBQJmUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ00DAwMJAQJhTwAGCQAAAgUCYmQFAXEGCQAAAgUCYmQFAXMGBQJnTAQCZ04JAMwIAgMDCQEBIQEFAmdNBgkBAmdtAQUCZFYGCQECYUoBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkVghwYXltZW50cwABBgkBAmFKAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ04FAmdOBAJjdwkA2AQBCQEFdmFsdWUBBQJiZgQCY3gJANgEAQkBBXZhbHVlAQUCYmcEAmN2BQJiZQQCZk4FAmJoBAJmTwUCYmkEAmN1AwkAAAIIBQJkVgZjYWxsZXIFBHRoaXMIBQJkVgxvcmlnaW5DYWxsZXIIBQJkVgZjYWxsZXIEAmZnCQEFdmFsdWUBCQCRAwIIBQJkVghwYXltZW50cwAABAJjcwkA2AQBCQEFdmFsdWUBCAUCZmcHYXNzZXRJZAQCY1kIBQJmZwZhbW91bnQEAmVPAwkAAAIIBQJmZwdhc3NldElkBQJiZgkBAmVIAwkAtgIBBQJjWQkAtgIBAAAJALYCAQAACQECZUgDCQC2AgEAAAkAtgIBBQJjWQkAtgIBAAADCQAAAgUCZU8FAmVPBAJnTwkBAmZsBQUCY1kFAmNzCQClCAEFAmN1CQDYBAEIBQJkVg10cmFuc2FjdGlvbklkBgMJAAACBQJnTwUCZ08EAmNwCAUCZ08CXzMEAmNPCAUCZ08CXzIEAmdQCAUCZ08CXzEEAmR4AwMJAGYCBQJmSgAACQBmAgUCZkoFAmdQBwkBAmFKAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSgUDbmlsAgAFAmdQBAJnQQkA/AcEBQJhTQIEZW1pdAkAzAgCBQJkeAUDbmlsBQNuaWwDCQAAAgUCZ0EFAmdBBAJnQwQCZ2oFAmdBAwkAAQIFAmdqAgdBZGRyZXNzBAJnRAUCZ2oJAPwHBAUCZ0QCBGVtaXQJAMwIAgUCZHgFA25pbAUDbmlsBQR1bml0AwkAAAIFAmdDBQJnQwQCZ0cDBQJndQQCZ0gJAPwHBAUCYm4CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN2BQJkeAUDbmlsAwkAAAIFAmdIBQJnSAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkVgZjYWxsZXIFAmR4BQJjdgUDbmlsBAJnYQMJAGYCBQJjcAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFRBQJjcAkA2QQBBQJjcwUDbmlsBQNuaWwEAmdRAwkAAAIFBHRoaXMFAmFRCQCUCgIAAAAABAJnUgMJAAACCAUCZmcHYXNzZXRJZAUCYmYGBwMFAmdSCQCUCgIJAQEtAQUCY3AAAAkAlAoCAAAJAQEtAQUCY3AEAmVRCAUCZ1ECXzEEAmVSCAUCZ1ECXzIEAmdTCQECZVADBQJlUQUCZVIAAAQCZ2cIBQJnUwJfMQQCZUcIBQJnUwJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAJQKAgkAzggCCQDOCAIJAM4IAgUCY08FAmdHBQJnYQUCZ2cFAmR4CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpwdXRGb3JGcmVlAQJnVAMJAGYCAAAFAmdUCQACAQIKV3Jvbmcgc2xwZwMJAQIhPQIJAJADAQgFAmRWCHBheW1lbnRzAAIJAAIBAgwyIHBtbnRzIGV4cGQEAmdVCQECZmgKCQClCAEIBQJkVgZjYWxsZXIJANgEAQgFAmRWDXRyYW5zYWN0aW9uSWQJAQ9BdHRhY2hlZFBheW1lbnQCCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAdhc3NldElkCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAAZhbW91bnQJAJEDAggFAmRWCHBheW1lbnRzAAEFAmdUBwcGAAACAAQCY08IBQJnVQJfOQQCZ3kJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50BAJnegkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFYIcGF5bWVudHMAAQZhbW91bnQEAmVPCQECZUgDBQJneQUCZ3oJALYCAQAAAwkAAAIFAmVPBQJlTwQCZ1YJAQJlUAMAAAAAAAAEAmdnCAUCZ1YCXzEEAmVHCAUCZ1YCXzIEAmdoCQECZVQCBQJlTwUCZUcDCQAAAgUCZ2gFAmdoCQDOCAIFAmNPBQJnZwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVgEDZ2V0AAQCZU8JAQJlSAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZU8FAmVPBAJkawkBAmZmAQUCZFYEAmdXCAUCZGsCXzEEAmNOCAUCZGsCXzIEAmNZCAUCZGsCXzMEAmNzCAUCZGsCXzQEAmNPCAUCZGsCXzUEAmV3CQD8BwQFAmFNAgRidXJuCQDMCAIFAmNZBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNzBQJjWQUDbmlsAwkAAAIFAmV3BQJldwQCZ1gJAQJlUAMJAQEtAQUCZ1cJAQEtAQUCY04AAAQCZ2cIBQJnWAJfMQQCZUcIBQJnWAJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAM4IAgUCY08FAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQtnZXRPbmVUa25WMgICZkkCZkoEAmdMCgACZlIJAPwHBAUCYU0CKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmUgIHQm9vbGVhbgUCZlIJAAIBCQCsAgIJAAMBBQJmUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ1kDAwkBAmFPAAYJAAACBQJiZAUBcwYFAmdMBAJnTgkAzAgCAwMJAQEhAQUCZ1kGCQECZ20BBQJkVgYJAQJhSgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRWCHBheW1lbnRzAAEGCQECYUoBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnTgUCZ04EAmdaCQECZkgGBQJmSQUCZkoIBQJkVghwYXltZW50cwgFAmRWBmNhbGxlcggFAmRWDG9yaWdpbkNhbGxlcggFAmRWDXRyYW5zYWN0aW9uSWQEAmNPCAUCZ1oCXzEEAmZUCAUCZ1oCXzIJAJQKAgUCY08FAmZUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWAQpyZWZyZXNoRExwAAQCaGEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUCYW4AAAQCaGIDCQBnAgkAZQIFBmhlaWdodAUCaGEFAmFxBQR1bml0CQECYUoBCQC5CQIJAMwIAgkApAMBBQJhcQkAzAgCAi8gYmxvY2tzIGhhdmUgbm90IHBhc3NlZCBzaW5jZSB0aGUgcHJldmlvdXMgY2FsbAUDbmlsAgADCQAAAgUCaGIFAmhiBAJmYQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUCYW0CATAJAQJhTAECC2ludmFsaWQgZExwBAJoYwkBAmVQAwAAAAAAAAQCaGQIBQJoYwJfMQQCZUcIBQJoYwJfMgQCZVMDCQECIT0CBQJmYQUCZUcFAmhkCQECYUoBAhJub3RoaW5nIHRvIHJlZnJlc2gJAJQKAgUCZVMJAKYDAQUCZUcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBE2dldE9uZVRrblYyUkVBRE9OTFkCAmZJAmhlBAJjdwkA2AQBCQEFdmFsdWUBBQJiZgQCY3gJANgEAQkBBXZhbHVlAQUCYmcEAmN2CQDYBAEJAQV2YWx1ZQEFAmJlBAJkRgkAzAgCCQC2AgEJAQJiRwEFAmN3CQDMCAIJALYCAQkBAmJHAQUCY3gFA25pbAQCZUYJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmN2AhBpbnZhbGlkIGxwIGFzc2V0CHF1YW50aXR5BAJiVAkBAmRFAQUCZEYEAmJTCQC4AgIFAmJUCQC8AgMJALYCAQUCaGUFAmJUBQJlRgQCaGYDCQAAAgUCZkkFAmN3AAADCQAAAgUCZkkFAmN4AAEJAAIBAhRpbnZhbGlkIG91dCBhc3NldCBpZAQCaGcJAQJlcwMFAmRGBQJoZgUCYlMEAmhoCQC4AgIJAJEDAgUCZEYFAmhmBQJoZwQCaGkJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC4AgIFAmhoBQFmBQNuaWwEAmhqCQECY24BBQJoaQQCZlMIBQJoagJfMQQCY3AIBQJoagJfMgkAlAoCBQNuaWwJAJQKAgUCZlMFAmNwAmRWARxnZXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJmSQJoZQQCY3cJANgEAQkBBXZhbHVlAQUCYmYEAmN4CQDYBAEJAQV2YWx1ZQEFAmJnBAJjdgkA2AQBCQEFdmFsdWUBBQJiZQQCY0MJAQJiRwEFAmN3BAJjRQkBAmJHAQUCY3gEAmhrCgACZlIJAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmSQkAzAgCBQJoZQUDbmlsBQNuaWwDCQABAgUCZlICCihJbnQsIEludCkFAmZSCQACAQkArAICCQADAQUCZlICHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkEAmZTCAUCaGsCXzEEAmNwCAUCaGsCXzIEAmRrCQECY3EEAgAFAmN2BQJoZQUEdGhpcwQCY00IBQJkawJfMQQCY04IBQJkawJfMgQCaGwJAGQCBQJjTQUCY04EAmZHAwkAAAIFAmhsAAADCQAAAgUCZlMAAAAACQACAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZlMFAmhsBQFhBQJobAkAlAoCBQNuaWwJAJUKAwUCZlMFAmNwBQJmRwJkVgEJZ2V0Tm9MZXNzAgJobQJobgQCaG8JALYCAQkBAmJHAQkBAmFYAQUCYmYDCQAAAgUCaG8FAmhvBAJocAkAtgIBCQECYkcBCQECYVgBBQJiZwMJAAACBQJocAUCaHAEAmhxCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJlCHF1YW50aXR5AwkAAAIFAmhxBQJocQQCaHIJALgCAgUCaHEJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRWCHBheW1lbnRzAAAGYW1vdW50AwkAAAIFAmhyBQJocgQCZGsJAQJmZgEFAmRWBAJjTQgFAmRrAl8xBAJjTggFAmRrAl8yBAJjWQgFAmRrAl8zBAJjcwgFAmRrAl80BAJjTwgFAmRrAl81AwkAZgIFAmhtBQJjTQkAAgEJAKwCAgkArAICCQCsAgICCUZhaWxlZDogIAkApAMBBQJjTQIDIDwgCQCkAwEFAmhtAwkAZgIFAmhuBQJjTgkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFAmNOAgMgPCAJAKQDAQUCaG4EAmVPCQECZUgDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVPBQJlTwQCaHMJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY1kFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3MFAmNZBQNuaWwDCQAAAgUCaHMFAmhzBAJodAkBAmVQAwkBAS0BBQJjTQkBAS0BBQJjTgAABAJnZwgFAmh0Al8xBAJlRwgFAmh0Al8yBAJnaAkBAmVUAgUCZU8FAmVHAwkAAAIFAmdoBQJnaAkAzggCBQJjTwUCZ2cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBDXVuc3Rha2VBbmRHZXQBAmNvBAJodQMJAQIhPQIJAJADAQgFAmRWCHBheW1lbnRzAAAJAAIBAg1ObyBwbW50cyBleHBkBgMJAAACBQJodQUCaHUEAmh2CQECYmwABAJnQgUCYmUEAmh3CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJodgUBQwIKV3Igc3QgYWRkcgQCZU8JAQJlSAMJALYCAQAACQC2AgEAAAkAtgIBAAAEAmh4CQD8BwQFAmh3Agd1bnN0YWtlCQDMCAIJANgEAQUCZ0IJAMwIAgUCY28FA25pbAUDbmlsAwkAAAIFAmh4BQJoeAQCZGsJAQJjcQQJANgEAQgFAmRWDXRyYW5zYWN0aW9uSWQJANgEAQUCZ0IFAmNvCAUCZFYGY2FsbGVyBAJjTQgFAmRrAl8xBAJjTggFAmRrAl8yBAJjQQkBDXBhcnNlSW50VmFsdWUBCAUCZGsCXzkEAmNPCAUCZGsDXzEwBAJoeQMDCQECYU8ABgkAAAIFAmNBBQFzCQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUCY0EGAwkAAAIFAmh5BQJoeQQCaHoJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY28FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0IFAmNvBQNuaWwDCQAAAgUCaHoFAmh6BAJoQQkBAmVQAwkBAS0BBQJjTQkBAS0BBQJjTgAABAJnZwgFAmhBAl8xBAJlRwgFAmhBAl8yBAJnaAkBAmVUAgUCZU8FAmVHAwkAAAIFAmdoBQJnaAkAzggCBQJjTwUCZ2cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFYBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhCAmhDAmhuBAJnWQMJAQJhTwAGCQAAAgUCYmQFAXMEAmdOCQDMCAIDCQEBIQEFAmdZBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRWCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ04FAmdOBAJlTwkBAmVIAwkAtgIBAAAJALYCAQAACQC2AgEAAAQCaHgJAPwHBAUCYm4CB3Vuc3Rha2UJAMwIAgkA2AQBBQJiZQkAzAgCBQJoQgUDbmlsBQNuaWwDCQAAAgUCaHgFAmh4BAJoRAkBAmNxBAkA2AQBCAUCZFYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiZQUCaEIIBQJkVgZjYWxsZXIEAmNNCAUCaEQCXzEEAmNOCAUCaEQCXzIEAmNPCAUCaEQDXzEwBAJoRQkAzAgCAwkAZwIFAmNNBQJoQwYJAAIBCQC5CQIJAMwIAgIsYW1vdW50IGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoQwUDbmlsAgAJAMwIAgMJAGcCBQJjTgUCaG4GCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJobgUDbmlsAgAFA25pbAMJAAACBQJoRQUCaEUEAmhzCQD8BwQFAmFNAgRidXJuCQDMCAIFAmhCBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJlBQJoQgUDbmlsAwkAAAIFAmhzBQJocwQCaEYJAQJlUAMJAQEtAQUCY00JAQEtAQUCY04AAAQCZ2cIBQJoRgJfMQQCZUcIBQJoRgJfMgQCZ2gJAQJlVAIFAmVPBQJlRwMJAAACBQJnaAUCZ2gJAM4IAgUCY08FAmdnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRWARV1bnN0YWtlQW5kR2V0T25lVGtuVjIDAmhCAmZJAmZKBAJnTAoAAmZSCQD8BwQFAmFNAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCZlICB0Jvb2xlYW4FAmZSCQACAQkArAICCQADAQUCZlICHCBj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TkxZBAJjcgJoUgJjdAJoUQQCZGsJAQJjcQQFAmNyBQJoUgUCY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmhRCQCUCgIFA25pbAkAnAoKCAUCZGsCXzEIBQJkawJfMggFAmRrAl8zCAUCZGsCXzQIBQJkawJfNQgFAmRrAl82CAUCZGsCXzcJAKYDAQgFAmRrAl84CAUCZGsCXzkIBQJkawNfMTACZFYBDmdldEZlZVJFQURPTkxZAAkAlAoCBQNuaWwFAmFsAQJoUwECaFQABAJoVQQCZ2oJAQJnaQADCQABAgUCZ2oCCkJ5dGVWZWN0b3IEAmduBQJnagUCZ24DCQABAgUCZ2oCBFVuaXQIBQJoUw9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZ2oFAmhTAwkAAQIFAmdqAgVPcmRlcgQCZVcFAmdqBAJoVgkBAmFQAAQCaFcJAQJlVgEFAmVXBAJoWAkA9AMDCAUCZVcJYm9keUJ5dGVzCQCRAwIIBQJlVwZwcm9vZnMAAAgFAmVXD3NlbmRlclB1YmxpY0tleQQCaFkJAPQDAwgFAmVXCWJvZHlCeXRlcwkAkQMCCAUCZVcGcHJvb2ZzAAEFAmhWAwMDBQJoVwUCaFgHBQJoWQcGCQECYUIDBQJoVwUCaFgFAmhZAwkAAQIFAmdqAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZEkFAmdqBAJoWgkA9gMBCQEFdmFsdWUBCAUCZEkGc2NyaXB0BAJpYQkA2wQBCQEFdmFsdWUBCQCdCAIFAmFNCQECYXoABAJpYgkA8QcBBQR0aGlzAwMJAAACBQJpYQUCaFoJAQIhPQIFAmliBQJoWgcGCQD0AwMIBQJoUwlib2R5Qnl0ZXMJAJEDAggFAmhTBnByb29mcwAABQJoVQkA9AMDCAUCaFMJYm9keUJ5dGVzCQCRAwIIBQJoUwZwcm9vZnMAAAUCaFWF+0sd", "chainId": 84, "height": 2372859, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AgudeWU92rxYQ6iC6qzgX8xkZLYam5g9dM1cab3P8aa5 Next: uuAsZaGnFLpm3yhk5J8wGdViPKEJT4VnsdGvrd9FCoJ Diff:
OldNewDifferences
10171017 let gI = eP(0, 0, 0)
10181018 let gg = gI._1
10191019 let eG = gI._2
1020- let gh = eT(eO, eG)
1021- if ((gh == gh))
1020+ let gJ = if ((eG >= eO))
1021+ then true
1022+ else aJ(makeString(["updated DLp lower than current DLp", toString(eL), toString(eM), toString(eN), toString(eO), toString(eG)], " "))
1023+ if ((gJ == gJ))
10221024 then {
1023- let gJ = if ((eG >= eO))
1024- then true
1025- else aJ(makeString(["updated DLp lower than current DLp", toString(eL), toString(eM), toString(eN), toString(eO), toString(eG)], " "))
1026- if ((gJ == gJ))
1027- then {
1028- let gK = value(assetInfo(be)).quantity
1029- if ((gK == gK))
1030- then ((cO ++ gG) ++ gg)
1031- else throw("Strict value is not equal to itself.")
1032- }
1025+ let gK = value(assetInfo(be)).quantity
1026+ if ((gK == gK))
1027+ then ((cO ++ gG) ++ gg)
10331028 else throw("Strict value is not equal to itself.")
10341029 }
10351030 else throw("Strict value is not equal to itself.")
11641159
11651160
11661161 @Callable(dV)
1162+func putForFree (gT) = if ((0 > gT))
1163+ then throw("Wrong slpg")
1164+ else if ((size(dV.payments) != 2))
1165+ then throw("2 pmnts expd")
1166+ else {
1167+ let gU = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gT, false, false, true, 0, "")
1168+ let cO = gU._9
1169+ let gy = toBigInt(value(dV.payments[0]).amount)
1170+ let gz = toBigInt(value(dV.payments[1]).amount)
1171+ let eO = eH(gy, gz, toBigInt(0))
1172+ if ((eO == eO))
1173+ then {
1174+ let gV = eP(0, 0, 0)
1175+ let gg = gV._1
1176+ let eG = gV._2
1177+ let gh = eT(eO, eG)
1178+ if ((gh == gh))
1179+ then (cO ++ gg)
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else throw("Strict value is not equal to itself.")
1183+ }
1184+
1185+
1186+
1187+@Callable(dV)
11671188 func get () = {
11681189 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
11691190 if ((eO == eO))
11701191 then {
11711192 let dk = ff(dV)
1172- let gT = dk._1
1193+ let gW = dk._1
11731194 let cN = dk._2
11741195 let cY = dk._3
11751196 let cs = dk._4
11771198 let ew = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
11781199 if ((ew == ew))
11791200 then {
1180- let gU = eP(-(gT), -(cN), 0)
1181- let gg = gU._1
1182- let eG = gU._2
1201+ let gX = eP(-(gW), -(cN), 0)
1202+ let gg = gX._1
1203+ let eG = gX._2
11831204 let gh = eT(eO, eG)
11841205 if ((gh == gh))
11851206 then (cO ++ gg)
12001221 then fR
12011222 else throw(($getType(fR) + " couldn't be cast to Boolean"))
12021223 }
1203- let gV = if (if (aO())
1224+ let gY = if (if (aO())
12041225 then true
12051226 else (bd == s))
12061227 then true
12071228 else gL
1208- let gN = [if (if (!(gV))
1229+ let gN = [if (if (!(gY))
12091230 then true
12101231 else gm(dV))
12111232 then true
12141235 else aJ("exactly 1 payment are expected")]
12151236 if ((gN == gN))
12161237 then {
1217- let gW = fH(fI, fJ, dV.payments, dV.caller, dV.originCaller, dV.transactionId)
1218- let cO = gW._1
1219- let fT = gW._2
1238+ let gZ = fH(fI, fJ, dV.payments, dV.caller, dV.originCaller, dV.transactionId)
1239+ let cO = gZ._1
1240+ let fT = gZ._2
12201241 $Tuple2(cO, fT)
12211242 }
12221243 else throw("Strict value is not equal to itself.")
12261247
12271248 @Callable(dV)
12281249 func refreshDLp () = {
1229- let gX = valueOrElse(getInteger(an), 0)
1230- let gY = if (((height - gX) >= aq))
1250+ let ha = valueOrElse(getInteger(an), 0)
1251+ let hb = if (((height - ha) >= aq))
12311252 then unit
12321253 else aJ(makeString([toString(aq), " blocks have not passed since the previous call"], ""))
1233- if ((gY == gY))
1254+ if ((hb == hb))
12341255 then {
12351256 let fa = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, am), "0")), aL("invalid dLp"))
1236- let gZ = eP(0, 0, 0)
1237- let ha = gZ._1
1238- let eG = gZ._2
1257+ let hc = eP(0, 0, 0)
1258+ let hd = hc._1
1259+ let eG = hc._2
12391260 let eS = if ((fa != eG))
1240- then ha
1261+ then hd
12411262 else aJ("nothing to refresh")
12421263 $Tuple2(eS, toString(eG))
12431264 }
12471268
12481269
12491270 @Callable(dV)
1250-func getOneTknV2READONLY (fI,hb) = {
1271+func getOneTknV2READONLY (fI,he) = {
12511272 let cw = toBase58String(value(bf))
12521273 let cx = toBase58String(value(bg))
12531274 let cv = toBase58String(value(be))
12541275 let dF = [toBigInt(bG(cw)), toBigInt(bG(cx))]
12551276 let eF = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cv)), "invalid lp asset").quantity)
12561277 let bT = dE(dF)
1257- let bS = (bT - fraction(toBigInt(hb), bT, eF))
1258- let hc = if ((fI == cw))
1278+ let bS = (bT - fraction(toBigInt(he), bT, eF))
1279+ let hf = if ((fI == cw))
12591280 then 0
12601281 else if ((fI == cx))
12611282 then 1
12621283 else throw("invalid out asset id")
1263- let hd = es(dF, hc, bS)
1264- let he = (dF[hc] - hd)
1265- let hf = max([0, toInt((he - f))])
1266- let hg = cn(hf)
1267- let fS = hg._1
1268- let cp = hg._2
1284+ let hg = es(dF, hf, bS)
1285+ let hh = (dF[hf] - hg)
1286+ let hi = max([0, toInt((hh - f))])
1287+ let hj = cn(hi)
1288+ let fS = hj._1
1289+ let cp = hj._2
12691290 $Tuple2(nil, $Tuple2(fS, cp))
12701291 }
12711292
12721293
12731294
12741295 @Callable(dV)
1275-func getOneTknV2WithBonusREADONLY (fI,hb) = {
1296+func getOneTknV2WithBonusREADONLY (fI,he) = {
12761297 let cw = toBase58String(value(bf))
12771298 let cx = toBase58String(value(bg))
12781299 let cv = toBase58String(value(be))
12791300 let cC = bG(cw)
12801301 let cE = bG(cx)
1281- let hh = {
1282- let fR = invoke(this, "getOneTknV2READONLY", [fI, hb], nil)
1302+ let hk = {
1303+ let fR = invoke(this, "getOneTknV2READONLY", [fI, he], nil)
12831304 if ($isInstanceOf(fR, "(Int, Int)"))
12841305 then fR
12851306 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
12861307 }
1287- let fS = hh._1
1288- let cp = hh._2
1289- let dk = cq("", cv, hb, this)
1308+ let fS = hk._1
1309+ let cp = hk._2
1310+ let dk = cq("", cv, he, this)
12901311 let cM = dk._1
12911312 let cN = dk._2
1292- let hi = (cM + cN)
1293- let fG = if ((hi == 0))
1313+ let hl = (cM + cN)
1314+ let fG = if ((hl == 0))
12941315 then if ((fS == 0))
12951316 then 0
12961317 else throw("bonus calculation error")
1297- else fraction((fS - hi), a, hi)
1318+ else fraction((fS - hl), a, hl)
12981319 $Tuple2(nil, $Tuple3(fS, cp, fG))
12991320 }
13001321
13011322
13021323
13031324 @Callable(dV)
1304-func getNoLess (hj,hk) = {
1305- let hl = toBigInt(bG(aX(bf)))
1306- if ((hl == hl))
1325+func getNoLess (hm,hn) = {
1326+ let ho = toBigInt(bG(aX(bf)))
1327+ if ((ho == ho))
13071328 then {
1308- let hm = toBigInt(bG(aX(bg)))
1309- if ((hm == hm))
1329+ let hp = toBigInt(bG(aX(bg)))
1330+ if ((hp == hp))
13101331 then {
1311- let hn = toBigInt(value(assetInfo(be)).quantity)
1312- if ((hn == hn))
1332+ let hq = toBigInt(value(assetInfo(be)).quantity)
1333+ if ((hq == hq))
13131334 then {
1314- let ho = (hn - toBigInt(value(dV.payments[0]).amount))
1315- if ((ho == ho))
1335+ let hr = (hq - toBigInt(value(dV.payments[0]).amount))
1336+ if ((hr == hr))
13161337 then {
13171338 let dk = ff(dV)
13181339 let cM = dk._1
13201341 let cY = dk._3
13211342 let cs = dk._4
13221343 let cO = dk._5
1323- if ((hj > cM))
1324- then throw(((("Failed: " + toString(cM)) + " < ") + toString(hj)))
1325- else if ((hk > cN))
1326- then throw(((("Failed: " + toString(cN)) + " < ") + toString(hk)))
1344+ if ((hm > cM))
1345+ then throw(((("Failed: " + toString(cM)) + " < ") + toString(hm)))
1346+ else if ((hn > cN))
1347+ then throw(((("Failed: " + toString(cN)) + " < ") + toString(hn)))
13271348 else {
13281349 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
13291350 if ((eO == eO))
13301351 then {
1331- let hp = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
1332- if ((hp == hp))
1352+ let hs = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
1353+ if ((hs == hs))
13331354 then {
1334- let hq = eP(-(cM), -(cN), 0)
1335- let gg = hq._1
1336- let eG = hq._2
1355+ let ht = eP(-(cM), -(cN), 0)
1356+ let gg = ht._1
1357+ let eG = ht._2
13371358 let gh = eT(eO, eG)
13381359 if ((gh == gh))
13391360 then (cO ++ gg)
13571378
13581379 @Callable(dV)
13591380 func unstakeAndGet (co) = {
1360- let hr = if ((size(dV.payments) != 0))
1381+ let hu = if ((size(dV.payments) != 0))
13611382 then throw("No pmnts expd")
13621383 else true
1363- if ((hr == hr))
1384+ if ((hu == hu))
13641385 then {
1365- let hs = bl()
1386+ let hv = bl()
13661387 let gB = be
1367- let ht = valueOrErrorMessage(addressFromString(hs[C]), "Wr st addr")
1388+ let hw = valueOrErrorMessage(addressFromString(hv[C]), "Wr st addr")
13681389 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
1369- let hu = invoke(ht, "unstake", [toBase58String(gB), co], nil)
1370- if ((hu == hu))
1390+ let hx = invoke(hw, "unstake", [toBase58String(gB), co], nil)
1391+ if ((hx == hx))
13711392 then {
13721393 let dk = cq(toBase58String(dV.transactionId), toBase58String(gB), co, dV.caller)
13731394 let cM = dk._1
13741395 let cN = dk._2
13751396 let cA = parseIntValue(dk._9)
13761397 let cO = dk._10
1377- let hv = if (if (aO())
1398+ let hy = if (if (aO())
13781399 then true
13791400 else (cA == s))
13801401 then throw(("Blocked: " + toString(cA)))
13811402 else true
1382- if ((hv == hv))
1403+ if ((hy == hy))
13831404 then {
1384- let hw = invoke(aM, "burn", [co], [AttachedPayment(gB, co)])
1385- if ((hw == hw))
1405+ let hz = invoke(aM, "burn", [co], [AttachedPayment(gB, co)])
1406+ if ((hz == hz))
13861407 then {
1387- let hx = eP(-(cM), -(cN), 0)
1388- let gg = hx._1
1389- let eG = hx._2
1408+ let hA = eP(-(cM), -(cN), 0)
1409+ let gg = hA._1
1410+ let eG = hA._2
13901411 let gh = eT(eO, eG)
13911412 if ((gh == gh))
13921413 then (cO ++ gg)
14041425
14051426
14061427 @Callable(dV)
1407-func unstakeAndGetNoLess (hy,hz,hk) = {
1408- let gV = if (aO())
1428+func unstakeAndGetNoLess (hB,hC,hn) = {
1429+ let gY = if (aO())
14091430 then true
14101431 else (bd == s)
1411- let gN = [if (!(gV))
1432+ let gN = [if (!(gY))
14121433 then true
14131434 else throw("get operation is blocked by admin"), if ((size(dV.payments) == 0))
14141435 then true
14161437 if ((gN == gN))
14171438 then {
14181439 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
1419- let hu = invoke(bn, "unstake", [toBase58String(be), hy], nil)
1420- if ((hu == hu))
1440+ let hx = invoke(bn, "unstake", [toBase58String(be), hB], nil)
1441+ if ((hx == hx))
14211442 then {
1422- let hA = cq(toBase58String(dV.transactionId), toBase58String(be), hy, dV.caller)
1423- let cM = hA._1
1424- let cN = hA._2
1425- let cO = hA._10
1426- let hB = [if ((cM >= hz))
1443+ let hD = cq(toBase58String(dV.transactionId), toBase58String(be), hB, dV.caller)
1444+ let cM = hD._1
1445+ let cN = hD._2
1446+ let cO = hD._10
1447+ let hE = [if ((cM >= hC))
14271448 then true
1428- else throw(makeString(["amount asset amount to receive is less than ", toString(hz)], "")), if ((cN >= hk))
1449+ else throw(makeString(["amount asset amount to receive is less than ", toString(hC)], "")), if ((cN >= hn))
14291450 then true
1430- else throw(makeString(["price asset amount to receive is less than ", toString(hk)], ""))]
1431- if ((hB == hB))
1451+ else throw(makeString(["price asset amount to receive is less than ", toString(hn)], ""))]
1452+ if ((hE == hE))
14321453 then {
1433- let hp = invoke(aM, "burn", [hy], [AttachedPayment(be, hy)])
1434- if ((hp == hp))
1454+ let hs = invoke(aM, "burn", [hB], [AttachedPayment(be, hB)])
1455+ if ((hs == hs))
14351456 then {
1436- let hC = eP(-(cM), -(cN), 0)
1437- let gg = hC._1
1438- let eG = hC._2
1457+ let hF = eP(-(cM), -(cN), 0)
1458+ let gg = hF._1
1459+ let eG = hF._2
14391460 let gh = eT(eO, eG)
14401461 if ((gh == gh))
14411462 then (cO ++ gg)
14531474
14541475
14551476 @Callable(dV)
1456-func unstakeAndGetOneTknV2 (hy,fI,fJ) = {
1477+func unstakeAndGetOneTknV2 (hB,fI,fJ) = {
14571478 let gL = {
14581479 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
14591480 if ($isInstanceOf(fR, "Boolean"))
14601481 then fR
14611482 else throw(($getType(fR) + " couldn't be cast to Boolean"))
14621483 }
1463- let gV = if (if (aO())
1484+ let gY = if (if (aO())
14641485 then true
14651486 else (bd == s))
14661487 then true
14671488 else gL
1468- let gN = [if (if (!(gV))
1489+ let gN = [if (if (!(gY))
14691490 then true
14701491 else gm(dV))
14711492 then true
14741495 else aJ("no payments are expected")]
14751496 if ((gN == gN))
14761497 then {
1477- let hs = bl()
1498+ let hv = bl()
14781499 let gB = be
1479- let ht = valueOrErrorMessage(addressFromString(hs[C]), "Wr st addr")
1480- let hu = invoke(ht, "unstake", [toBase58String(gB), hy], nil)
1481- if ((hu == hu))
1500+ let hw = valueOrErrorMessage(addressFromString(hv[C]), "Wr st addr")
1501+ let hx = invoke(hw, "unstake", [toBase58String(gB), hB], nil)
1502+ if ((hx == hx))
14821503 then {
1483- let hD = fH(fI, fJ, [AttachedPayment(gB, hy)], dV.caller, dV.originCaller, dV.transactionId)
1484- let cO = hD._1
1485- let fT = hD._2
1504+ let hG = fH(fI, fJ, [AttachedPayment(gB, hB)], dV.caller, dV.originCaller, dV.transactionId)
1505+ let cO = hG._1
1506+ let fT = hG._2
14861507 $Tuple2(cO, fT)
14871508 }
14881509 else throw("Strict value is not equal to itself.")
14931514
14941515
14951516 @Callable(dV)
1496-func putOneTknV2WithBonusREADONLY (hE,hF) = {
1497- let hG = fl(hE, hF, "", "", true)
1498- let fB = hG._1
1499- let cO = hG._2
1500- let cp = hG._3
1501- let fG = hG._4
1517+func putOneTknV2WithBonusREADONLY (hH,hI) = {
1518+ let hJ = fl(hH, hI, "", "", true)
1519+ let fB = hJ._1
1520+ let cO = hJ._2
1521+ let cp = hJ._3
1522+ let fG = hJ._4
15021523 $Tuple2(nil, $Tuple3(fB, cp, fG))
15031524 }
15041525
15051526
15061527
15071528 @Callable(dV)
1508-func putOneTknV2WithoutTakeFeeREADONLY (hE,hF) = {
1509- let hH = fl(hE, hF, "", "", false)
1510- let fB = hH._1
1511- let cO = hH._2
1512- let cp = hH._3
1513- let fG = hH._4
1529+func putOneTknV2WithoutTakeFeeREADONLY (hH,hI) = {
1530+ let hK = fl(hH, hI, "", "", false)
1531+ let fB = hK._1
1532+ let cO = hK._2
1533+ let cp = hK._3
1534+ let fG = hK._4
15141535 $Tuple2(nil, $Tuple3(fB, cp, fG))
15151536 }
15161537
15171538
15181539
15191540 @Callable(dV)
1520-func activate (hI,hJ) = if ((toString(dV.caller) != toString(aM)))
1541+func activate (hL,hM) = if ((toString(dV.caller) != toString(aM)))
15211542 then throw("denied")
1522- else $Tuple2([StringEntry(ag(), hI), StringEntry(ah(), hJ)], "success")
1543+ else $Tuple2([StringEntry(ag(), hL), StringEntry(ah(), hM)], "success")
15231544
15241545
15251546
15261547 @Callable(dV)
1527-func setS (hK,hv) = if ((toString(dV.caller) != aF(this, aj())))
1548+func setS (hN,hy) = if ((toString(dV.caller) != aF(this, aj())))
15281549 then gl
1529- else [StringEntry(hK, hv)]
1550+ else [StringEntry(hN, hy)]
15301551
15311552
15321553
15331554 @Callable(dV)
1534-func setI (hK,hv) = if ((toString(dV.caller) != aF(this, aj())))
1555+func setI (hN,hy) = if ((toString(dV.caller) != aF(this, aj())))
15351556 then gl
1536- else [IntegerEntry(hK, hv)]
1557+ else [IntegerEntry(hN, hy)]
15371558
15381559
15391560
15491570
15501571 @Callable(dV)
15511572 func calcPricesWrapperREADONLY (bZ,ca,ce) = {
1552- let hL = cd(bZ, ca, ce)
1553- $Tuple2(nil, [toString(hL[0]), toString(hL[1]), toString(hL[2])])
1573+ let hO = cd(bZ, ca, ce)
1574+ $Tuple2(nil, [toString(hO[0]), toString(hO[1]), toString(hO[2])])
15541575 }
15551576
15561577
15571578
15581579 @Callable(dV)
1559-func fromX18WrapperREADONLY (L,hM) = $Tuple2(nil, K(parseBigIntValue(L), hM))
1580+func fromX18WrapperREADONLY (L,hP) = $Tuple2(nil, K(parseBigIntValue(L), hP))
15601581
15611582
15621583
15711592
15721593
15731594 @Callable(dV)
1574-func estimatePutOperationWrapperREADONLY (cr,bO,cQ,cR,cS,cT,hN,cU,cV) = $Tuple2(nil, cP(cr, bO, cQ, cR, cS, cT, hN, cU, cV, true, false, 0, ""))
1595+func estimatePutOperationWrapperREADONLY (cr,bO,cQ,cR,cS,cT,hQ,cU,cV) = $Tuple2(nil, cP(cr, bO, cQ, cR, cS, cT, hQ, cU, cV, true, false, 0, ""))
15751596
15761597
15771598
15781599 @Callable(dV)
1579-func estimateGetOperationWrapperREADONLY (cr,hO,ct,hN) = {
1580- let dk = cq(cr, hO, ct, addressFromStringValue(hN))
1600+func estimateGetOperationWrapperREADONLY (cr,hR,ct,hQ) = {
1601+ let dk = cq(cr, hR, ct, addressFromStringValue(hQ))
15811602 $Tuple2(nil, $Tuple10(dk._1, dk._2, dk._3, dk._4, dk._5, dk._6, dk._7, toString(dk._8), dk._9, dk._10))
15821603 }
15831604
15871608 func getFeeREADONLY () = $Tuple2(nil, al)
15881609
15891610
1590-@Verifier(hP)
1591-func hQ () = {
1592- let hR = {
1611+@Verifier(hS)
1612+func hT () = {
1613+ let hU = {
15931614 let gj = gi()
15941615 if ($isInstanceOf(gj, "ByteVector"))
15951616 then {
15971618 gn
15981619 }
15991620 else if ($isInstanceOf(gj, "Unit"))
1600- then hP.senderPublicKey
1621+ then hS.senderPublicKey
16011622 else throw("Match error")
16021623 }
1603- let gj = hP
1624+ let gj = hS
16041625 if ($isInstanceOf(gj, "Order"))
16051626 then {
16061627 let eW = gj
1607- let hS = aP()
1608- let hT = eV(eW)
1609- let hU = sigVerify(eW.bodyBytes, eW.proofs[0], eW.senderPublicKey)
1610- let hV = sigVerify(eW.bodyBytes, eW.proofs[1], hS)
1611- if (if (if (hT)
1612- then hU
1628+ let hV = aP()
1629+ let hW = eV(eW)
1630+ let hX = sigVerify(eW.bodyBytes, eW.proofs[0], eW.senderPublicKey)
1631+ let hY = sigVerify(eW.bodyBytes, eW.proofs[1], hV)
1632+ if (if (if (hW)
1633+ then hX
16131634 else false)
1614- then hV
1635+ then hY
16151636 else false)
16161637 then true
1617- else aB(hT, hU, hV)
1638+ else aB(hW, hX, hY)
16181639 }
16191640 else if ($isInstanceOf(gj, "SetScriptTransaction"))
16201641 then {
16211642 let dI = gj
1622- let hW = blake2b256(value(dI.script))
1623- let hX = fromBase64String(value(getString(aM, az())))
1624- let hY = scriptHash(this)
1625- if (if ((hX == hW))
1626- then (hY != hW)
1643+ let hZ = blake2b256(value(dI.script))
1644+ let ia = fromBase64String(value(getString(aM, az())))
1645+ let ib = scriptHash(this)
1646+ if (if ((ia == hZ))
1647+ then (ib != hZ)
16271648 else false)
16281649 then true
1629- else sigVerify(hP.bodyBytes, hP.proofs[0], hR)
1650+ else sigVerify(hS.bodyBytes, hS.proofs[0], hU)
16301651 }
1631- else sigVerify(hP.bodyBytes, hP.proofs[0], hR)
1652+ else sigVerify(hS.bodyBytes, hS.proofs[0], hU)
16321653 }
16331654
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = toBigInt(100000000)
77
88 let c = toBigInt(1000000000000000000)
99
1010 let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(1)
1515
1616 let g = toBigInt(2)
1717
1818 let h = toBigInt(3)
1919
2020 let i = toBigInt(4)
2121
2222 let j = toBigInt((a - ((a * 1) / a)))
2323
2424 let k = "WAVES"
2525
2626 let l = "100"
2727
2828 let m = "1"
2929
3030 let n = "__"
3131
3232 let o = ""
3333
3434 let p = 1
3535
3636 let q = 2
3737
3838 let r = 3
3939
4040 let s = 4
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 3
4747
4848 let w = 4
4949
5050 let x = 5
5151
5252 let y = 6
5353
5454 let z = 7
5555
5656 let A = 8
5757
5858 let B = 9
5959
6060 let C = 1
6161
6262 let D = 6
6363
6464 let E = 7
6565
6666 let F = 10
6767
6868 let G = fraction(10, a, 10000)
6969
7070 func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
7171
7272
7373 func K (L,M) = toInt(fraction(L, toBigInt(M), c))
7474
7575
7676 func N (L,M,O) = toInt(fraction(L, toBigInt(M), c, O))
7777
7878
7979 func P (Q,R,S) = fraction(Q, R, S)
8080
8181
8282 func T (L) = if ((d > L))
8383 then -(L)
8484 else L
8585
8686
8787 func U (L) = if ((d > L))
8888 then -(L)
8989 else L
9090
9191
9292 func V () = "%s__factoryContract"
9393
9494
9595 func W () = "%s__managerPublicKey"
9696
9797
9898 func X () = "%s__pendingManagerPublicKey"
9999
100100
101101 func Y () = "%s%s__price__last"
102102
103103
104104 func Z (aa,ab) = makeString(["%s%s%d%d__price__history", toString(aa), toString(ab)], n)
105105
106106
107107 func ac (ad,ae) = ((("%s%s%s__P__" + ad) + "__") + ae)
108108
109109
110110 func af (ad,ae) = ((("%s%s%s__G__" + ad) + "__") + ae)
111111
112112
113113 func ag () = "%s__amountAsset"
114114
115115
116116 func ah () = "%s__priceAsset"
117117
118118
119119 func ai () = "%s__amp"
120120
121121
122122 func aj () = "%s__addonAddr"
123123
124124
125125 let ak = "%s__fee"
126126
127127 let al = valueOrElse(getInteger(this, ak), G)
128128
129129 let am = makeString(["%s", "dLp"], n)
130130
131131 let an = makeString(["%s", "dLpRefreshedHeight"], n)
132132
133133 let ao = makeString(["%s", "refreshDLpDelay"], n)
134134
135135 let ap = 1
136136
137137 let aq = valueOrElse(getInteger(this, ao), ap)
138138
139139 func ar () = "%s__factoryConfig"
140140
141141
142142 func as () = "%s%s__matcher__publicKey"
143143
144144
145145 func at (au,av) = (((("%d%d%s__" + au) + "__") + av) + "__config")
146146
147147
148148 func aw (ax) = ("%s%s%s__mappings__baseAsset2internalId__" + ax)
149149
150150
151151 func ay () = "%s__shutdown"
152152
153153
154154 func az () = "%s__allowedLpStableScriptHash"
155155
156156
157157 func aA () = "%s__feeCollectorAddress"
158158
159159
160160 func aB (aC,aD,aE) = throw(((((("Failed: ordValid=" + toString(aC)) + " sndrValid=") + toString(aD)) + " mtchrValid=") + toString(aE)))
161161
162162
163163 func aF (aG,aH) = valueOrErrorMessage(getString(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
164164
165165
166166 func aI (aG,aH) = valueOrErrorMessage(getInteger(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
167167
168168
169169 func aJ (aK) = throw(makeString(["lp_stable.ride:", aK], " "))
170170
171171
172172 func aL (aK) = makeString(["lp_stable.ride:", aK], " ")
173173
174174
175175 let aM = addressFromStringValue(aF(this, V()))
176176
177177 let aN = aF(this, ai())
178178
179179 func aO () = valueOrElse(getBoolean(aM, ay()), false)
180180
181181
182182 func aP () = fromBase58String(aF(aM, as()))
183183
184184
185185 let aQ = addressFromStringValue(aF(aM, aA()))
186186
187187 func aR () = {
188188 let aS = aF(this, ag())
189189 let aT = aF(this, ah())
190190 let aU = aI(aM, aw(aT))
191191 let au = aI(aM, aw(aS))
192192 split(aF(aM, at(toString(au), toString(aU))), n)
193193 }
194194
195195
196196 func aV (aW) = if ((aW == k))
197197 then unit
198198 else fromBase58String(aW)
199199
200200
201201 func aX (aW) = if ((aW == unit))
202202 then k
203203 else toBase58String(value(aW))
204204
205205
206206 func aY (aZ) = $Tuple9(addressFromStringValue(aZ[t]), parseIntValue(aZ[u]), fromBase58String(aZ[v]), aV(aZ[w]), aV(aZ[x]), parseIntValue(aZ[y]), parseIntValue(aZ[z]), fromBase58String(aZ[A]), fromBase58String(aZ[B]))
207207
208208
209209 let ba = aY(aR())
210210
211211 let bb = ba
212212
213213 let bc = bb._1
214214
215215 let bd = bb._2
216216
217217 let be = bb._3
218218
219219 let bf = bb._4
220220
221221 let bg = bb._5
222222
223223 let bh = bb._6
224224
225225 let bi = bb._7
226226
227227 let bj = bb._8
228228
229229 let bk = bb._9
230230
231231 func bl () = split(aF(aM, ar()), n)
232232
233233
234234 let bm = bl()
235235
236236 let bn = valueOrErrorMessage(addressFromString(bm[C]), "Invalid staking contract address")
237237
238238 let bo = valueOrErrorMessage(addressFromString(bm[E]), "Invalid slipage contract address")
239239
240240 let bp = valueOrErrorMessage(addressFromString(bm[F]), "Invalid gwx contract address")
241241
242242 let bq = valueOrErrorMessage(addressFromString(bm[D]), "Invalid gwx contract address")
243243
244244 func br (bs,bt,bu,bv,bw,bx,by,bz,bA,bB) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB)], n)
245245
246246
247247 func bC (bD,bE,bF,bv,by,bz) = makeString(["%d%d%d%d%d%d", toString(bD), toString(bE), toString(bF), toString(bv), toString(by), toString(bz)], n)
248248
249249
250250 func bG (bH) = if ((bH == "WAVES"))
251251 then wavesBalance(this).available
252252 else assetBalance(this, fromBase58String(bH))
253253
254254
255255 func bI (bJ,bK) = fraction(bJ, c, bK)
256256
257257
258258 func bL (bM,bN,bO) = {
259259 let bP = fraction((bM - bN), b, bN)
260260 let bQ = ((bO - T(bP)) > d)
261261 if (!(bQ))
262262 then throw(("Big slpg: " + toString(bP)))
263263 else $Tuple2(bQ, min([bM, bN]))
264264 }
265265
266266
267267 func bR (bS,bT,bU) = {
268268 let bP = fraction(bT, b, bS)
269269 let bV = (bU > bP)
270270 if (if (bV)
271271 then true
272272 else (bT > bS))
273273 then throw(((((((toString(bT) + " ") + toString(bS)) + " ") + toString(bP)) + " ") + toString(bU)))
274274 else bV
275275 }
276276
277277
278278 func bW (bX,bY,bZ,ca) = {
279279 let cb = H(bZ, bX)
280280 let cc = H(ca, bY)
281281 bI(cc, cb)
282282 }
283283
284284
285285 func cd (bZ,ca,ce) = {
286286 let cf = bh
287287 let cg = bi
288288 let ch = bW(cf, cg, bZ, ca)
289289 let bK = H(bZ, cf)
290290 let bJ = H(ca, cg)
291291 let ci = H(ce, a)
292292 let cj = bI(bK, ci)
293293 let ck = bI(bJ, ci)
294294 [ch, cj, ck]
295295 }
296296
297297
298298 func cl (bZ,ca,ce) = {
299299 let cm = cd(bZ, ca, ce)
300300 [K(cm[0], a), K(cm[1], a), K(cm[2], a)]
301301 }
302302
303303
304304 func cn (co) = {
305305 let cp = fraction(co, al, a)
306306 $Tuple2((co - cp), cp)
307307 }
308308
309309
310310 func cq (cr,cs,ct,cu) = {
311311 let cv = be
312312 let cw = toBase58String(value(bf))
313313 let cx = toBase58String(value(bg))
314314 let cy = bh
315315 let cz = bi
316316 let cA = toString(bd)
317317 let cB = valueOrErrorMessage(assetInfo(cv), "Wrong LP id").quantity
318318 if ((toBase58String(cv) != cs))
319319 then throw("Wrong pmt asset")
320320 else {
321321 let cC = bG(cw)
322322 let cD = H(cC, cy)
323323 let cE = bG(cx)
324324 let cF = H(cE, cz)
325325 let cG = bI(cF, cD)
326326 let cH = K(cG, a)
327327 let cI = H(ct, a)
328328 let cJ = H(cB, a)
329329 let cK = fraction(cD, cI, cJ)
330330 let cL = fraction(cF, cI, cJ)
331331 let cM = N(cK, cy, FLOOR)
332332 let cN = N(cL, cz, FLOOR)
333333 let cO = if ((cr == ""))
334334 then nil
335335 else [ScriptTransfer(cu, cM, if ((cw == "WAVES"))
336336 then unit
337337 else fromBase58String(cw)), ScriptTransfer(cu, cN, if ((cx == "WAVES"))
338338 then unit
339339 else fromBase58String(cx)), StringEntry(af(toString(cu), cr), bC(cM, cN, ct, cH, height, lastBlock.timestamp)), IntegerEntry(Y(), cH), IntegerEntry(Z(height, lastBlock.timestamp), cH)]
340340 $Tuple10(cM, cN, cw, cx, cC, cE, cB, cG, cA, cO)
341341 }
342342 }
343343
344344
345345 func cP (cr,bO,cQ,cR,cS,cT,cu,cU,cV,cW,cX,cY,cZ) = {
346346 let cv = be
347347 let da = toBase58String(value(bf))
348348 let db = toBase58String(value(bg))
349349 let dc = bj
350350 let dd = bk
351351 let de = bh
352352 let df = bi
353353 let cA = toString(bd)
354354 let dg = valueOrErrorMessage(assetInfo(cv), "Wr lp as").quantity
355355 let cC = if (cU)
356356 then bG(da)
357357 else if (if (cW)
358358 then (cZ == da)
359359 else false)
360360 then (bG(da) - cY)
361361 else if (cW)
362362 then bG(da)
363363 else (bG(da) - cQ)
364364 let cE = if (cU)
365365 then bG(db)
366366 else if (if (cW)
367367 then (cZ == db)
368368 else false)
369369 then (bG(db) - cY)
370370 else if (cW)
371371 then bG(db)
372372 else (bG(db) - cS)
373373 let dh = H(cQ, de)
374374 let di = H(cS, df)
375375 let dj = bI(di, dh)
376376 let cD = H(cC, de)
377377 let cF = H(cE, df)
378378 let dk = if ((dg == 0))
379379 then {
380380 let cG = d
381381 let dl = d
382382 let ci = pow((dh * di), 0, toBigInt(5), 1, 0, DOWN)
383383 $Tuple5(K(ci, a), K(dh, de), K(di, df), bI((cF + di), (cD + dh)), dl)
384384 }
385385 else {
386386 let cG = bI(cF, cD)
387387 let dm = fraction(T((cG - dj)), c, cG)
388388 let dl = H(bO, a)
389389 if (if (if (cX)
390390 then (cG != d)
391391 else false)
392392 then (dm > dl)
393393 else false)
394394 then throw(((("Price slippage " + toString(dm)) + " > ") + toString(dl)))
395395 else {
396396 let dn = H(dg, a)
397397 let do = fraction(dh, cG, c)
398398 let dp = fraction(di, c, cG)
399399 let dq = if ((do > di))
400400 then $Tuple2(dp, di)
401401 else $Tuple2(dh, do)
402402 let dr = dq._1
403403 let ds = dq._2
404404 let ci = fraction(dn, ds, cF)
405405 $Tuple5(N(ci, a, FLOOR), N(dr, de, CEILING), N(ds, df, CEILING), cG, dl)
406406 }
407407 }
408408 let dt = dk._1
409409 let du = dk._2
410410 let dv = dk._3
411411 let cH = K(dk._4, a)
412412 let dw = K(dk._5, a)
413413 if ((0 >= dt))
414414 then throw("LP <= 0")
415415 else {
416416 let dx = if (!(cV))
417417 then 0
418418 else dt
419419 let dy = (cQ - du)
420420 let dz = (cS - dv)
421421 let dA = if (if (cW)
422422 then (cZ == da)
423423 else false)
424424 then $Tuple2(cY, 0)
425425 else if (if (cW)
426426 then (cZ == db)
427427 else false)
428428 then $Tuple2(0, cY)
429429 else $Tuple2(du, dv)
430430 let dB = dA._1
431431 let dC = dA._2
432432 let dD = [IntegerEntry(Y(), cH), IntegerEntry(Z(height, lastBlock.timestamp), cH), StringEntry(ac(cu, cr), br(dB, dC, dx, cH, bO, dw, height, lastBlock.timestamp, dy, dz))]
433433 $Tuple13(dt, dx, cH, cC, cE, dg, cv, cA, dD, dy, dz, cR, cT)
434434 }
435435 }
436436
437437
438438 func dE (dF) = {
439439 let dG = dF[0]
440440 let dH = dF[1]
441441 let dI = (dG + dH)
442442 if ((dI == e))
443443 then e
444444 else {
445445 let dJ = parseIntValue(aN)
446446 let dK = (dJ * 2)
447447 let cm = fraction(dG, dH, f)
448448 let dL = fraction(cm, i, f)
449449 let dM = fraction(toBigInt(dK), dI, f)
450450 let dN = toBigInt((dK - 1))
451451 func dO (dP) = {
452452 let dQ = fraction(dP, dP, f)
453453 let dR = fraction(dQ, dP, f)
454454 let dS = fraction(dR, f, dL)
455455 fraction((dM + fraction(dS, g, f)), dP, (fraction(dN, dP, f) + fraction(h, dS, f)), CEILING)
456456 }
457457
458458 func dT (dU,dV) = if (dU._2)
459459 then dU
460460 else {
461461 let dP = dU._1
462462 let dW = dO(dP)
463463 let dX = toInt((dW - value(dP)))
464464 let dY = if ((0 > dX))
465465 then -(dX)
466466 else dX
467467 if ((1 >= dY))
468468 then $Tuple2(dW, true)
469469 else $Tuple2(dW, false)
470470 }
471471
472472 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
473473 let ea = {
474474 let eb = dZ
475475 let ec = size(eb)
476476 let ed = $Tuple2(dI, false)
477477 func ee (ef,eg) = if ((eg >= ec))
478478 then ef
479479 else dT(ef, eb[eg])
480480
481481 func eh (ef,eg) = if ((eg >= ec))
482482 then ef
483483 else throw("List size exceeds 15")
484484
485485 eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
486486 }
487487 let dP = ea._1
488488 let ei = ea._2
489489 if (ei)
490490 then dP
491491 else throw(("D calculation error, D = " + toString(dP)))
492492 }
493493 }
494494
495495
496496 func ej (dF) = {
497497 let ek = g
498498 let dG = dF[0]
499499 let dH = dF[1]
500500 let el = parseBigIntValue(l)
501501 let dJ = (parseBigIntValue(aN) * el)
502502 let dI = (dG + dH)
503503 if ((dI == e))
504504 then e
505505 else {
506506 let dK = (dJ * ek)
507507 let dL = (((dG * dH) * ek) * ek)
508508 let em = ((dK * dI) / el)
509509 let en = (dK - el)
510510 let eo = (ek + f)
511511 func dT (dU,ep) = {
512512 let eq = dU
513513 let dP = eq._1
514514 let ei = eq._2
515515 if ((ei != unit))
516516 then dU
517517 else {
518518 let dS = (((dP * dP) * dP) / dL)
519519 let dW = (((em + (dS * ek)) * dP) / (((en * dP) / el) + (eo * dS)))
520520 let dY = U((dW - value(dP)))
521521 if ((f >= dY))
522522 then $Tuple2(dW, ep)
523523 else $Tuple2(dW, unit)
524524 }
525525 }
526526
527527 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
528528 let er = {
529529 let eb = dZ
530530 let ec = size(eb)
531531 let ed = $Tuple2(dI, unit)
532532 func ee (ef,eg) = if ((eg >= ec))
533533 then ef
534534 else dT(ef, eb[eg])
535535
536536 func eh (ef,eg) = if ((eg >= ec))
537537 then ef
538538 else throw("List size exceeds 15")
539539
540540 eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
541541 }
542542 let dP = er._1
543543 let ei = er._2
544544 if ((ei != unit))
545545 then dP
546546 else throw(("D calculation error, D = " + toString(dP)))
547547 }
548548 }
549549
550550
551551 func es (dF,dV,et) = {
552552 let ek = g
553553 let eu = dF[if ((dV == 0))
554554 then 1
555555 else 0]
556556 let el = parseBigIntValue(l)
557557 let dJ = (parseBigIntValue(aN) * el)
558558 let dI = eu
559559 let dK = (dJ * ek)
560560 let ev = (((((et * et) / (eu * ek)) * et) * el) / (dK * ek))
561561 let ew = ((dI + ((et * el) / dK)) - et)
562562 func dT (dU,ep) = {
563563 let ex = dU
564564 let ey = ex._1
565565 let ei = ex._2
566566 if ((ei != unit))
567567 then dU
568568 else {
569569 let ez = (((ey * ey) + ev) / ((g * ey) + ew))
570570 let eA = U((ez - value(ey)))
571571 if ((f >= eA))
572572 then $Tuple2(ez, ep)
573573 else $Tuple2(ez, unit)
574574 }
575575 }
576576
577577 let dZ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
578578 let eB = {
579579 let eb = dZ
580580 let ec = size(eb)
581581 let ed = $Tuple2(et, unit)
582582 func ee (ef,eg) = if ((eg >= ec))
583583 then ef
584584 else dT(ef, eb[eg])
585585
586586 func eh (ef,eg) = if ((eg >= ec))
587587 then ef
588588 else throw("List size exceeds 15")
589589
590590 eh(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ee(ed, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
591591 }
592592 let ey = eB._1
593593 let ei = eB._2
594594 if ((ei != unit))
595595 then ey
596596 else throw(("Y calculation error, Y = " + toString(ey)))
597597 }
598598
599599
600600 func eC (eD,eE,eF) = {
601601 let eG = fraction(dE([eD, eE]), c, eF)
602602 if ((eF == e))
603603 then e
604604 else eG
605605 }
606606
607607
608608 func eH (eI,eJ,eK) = {
609609 let eL = (toBigInt(bG(aX(bf))) - eI)
610610 let eM = (toBigInt(bG(aX(bg))) - eJ)
611611 let eN = (toBigInt(value(assetInfo(be)).quantity) - eK)
612612 let eO = eC(eL, eM, eN)
613613 eO
614614 }
615615
616616
617617 func eP (eQ,eR,eK) = {
618618 let eL = (bG(aX(bf)) + eQ)
619619 let eM = (bG(aX(bg)) + eR)
620620 let eN = (value(assetInfo(be)).quantity + eK)
621621 let eG = eC(toBigInt(eL), toBigInt(eM), toBigInt(eN))
622622 let eS = [IntegerEntry(an, height), StringEntry(am, toString(eG))]
623623 $Tuple2(eS, eG)
624624 }
625625
626626
627627 func eT (eU,eG) = if ((eG >= eU))
628628 then true
629629 else aJ("updated DLp lower than current DLp")
630630
631631
632632 func eV (eW) = {
633633 let eX = eW.amount
634634 let eY = fraction(eW.amount, eW.price, a, FLOOR)
635635 let eZ = if ((eW.orderType == Buy))
636636 then $Tuple2(eX, -(eY))
637637 else $Tuple2(-(eX), eY)
638638 let eQ = eZ._1
639639 let eR = eZ._2
640640 if (if (if (aO())
641641 then true
642642 else (bd == r))
643643 then true
644644 else (bd == s))
645645 then throw("Admin blocked")
646646 else if (if ((eW.assetPair.amountAsset != bf))
647647 then true
648648 else (eW.assetPair.priceAsset != bg))
649649 then throw("Wr assets")
650650 else {
651651 let fa = parseBigIntValue(getStringValue(this, am))
652652 let fb = eP(eQ, eR, 0)
653653 let fc = fb._1
654654 let fd = fb._2
655655 let fe = (fd >= fa)
656656 fe
657657 }
658658 }
659659
660660
661661 func ff (dV) = if ((size(dV.payments) != 1))
662662 then throw("1 pmnt exp")
663663 else {
664664 let fg = value(dV.payments[0])
665665 let cs = value(fg.assetId)
666666 let cY = fg.amount
667667 let dk = cq(toBase58String(dV.transactionId), toBase58String(cs), cY, dV.caller)
668668 let cM = dk._1
669669 let cN = dk._2
670670 let cA = parseIntValue(dk._9)
671671 let cO = dk._10
672672 if (if (aO())
673673 then true
674674 else (cA == s))
675675 then throw(("Admin blocked: " + toString(cA)))
676676 else $Tuple5(cM, cN, cY, cs, cO)
677677 }
678678
679679
680680 func fh (fi,ae,fj,fk,bO,cV,cW,cX,cY,cZ) = {
681681 let dk = cP(ae, bO, value(fj).amount, value(fj).assetId, value(fk).amount, value(fk).assetId, fi, (ae == ""), cV, cW, cX, cY, cZ)
682682 let cA = parseIntValue(dk._8)
683683 if (if (if (aO())
684684 then true
685685 else (cA == q))
686686 then true
687687 else (cA == s))
688688 then throw(("Blocked:" + toString(cA)))
689689 else dk
690690 }
691691
692692
693693 func fl (fm,cs,cu,ae,fn) = {
694694 let cw = toBase58String(value(bf))
695695 let cx = toBase58String(value(bg))
696696 let cv = be
697697 let de = bh
698698 let df = bi
699699 let eN = toBigInt(valueOrErrorMessage(assetInfo(cv), "invalid lp asset").quantity)
700700 let fo = if ((eN > e))
701701 then true
702702 else throw("initial deposit requires all coins")
703703 if ((fo == fo))
704704 then {
705705 let cC = bG(cw)
706706 let cE = bG(cx)
707707 let fp = if ((ae == ""))
708708 then $Tuple2(cC, cE)
709709 else if ((cs == cw))
710710 then if ((fm > cC))
711711 then throw("invalid payment amount")
712712 else $Tuple2((cC - fm), cE)
713713 else if ((cs == cx))
714714 then if ((fm > cE))
715715 then throw("invalid payment amount")
716716 else $Tuple2(cC, (cE - fm))
717717 else throw("wrong pmtAssetId")
718718 let fq = fp._1
719719 let fr = fp._2
720720 let fs = if ((cs == cw))
721721 then $Tuple2(fm, 0)
722722 else if ((cs == cx))
723723 then $Tuple2(0, fm)
724724 else throw("invalid payment")
725725 let ft = fs._1
726726 let fu = fs._2
727727 let fv = if (fn)
728728 then $Tuple3(cn(ft)._1, cn(fu)._1, cn(fm)._2)
729729 else $Tuple3(ft, fu, 0)
730730 let fw = fv._1
731731 let fx = fv._2
732732 let cp = fv._3
733733 let fy = (fq + fw)
734734 let fz = (fr + fx)
735735 let bT = dE([toBigInt(fq), toBigInt(fr)])
736736 let bS = dE([toBigInt(fy), toBigInt(fz)])
737737 let fA = if ((bS > bT))
738738 then true
739739 else throw()
740740 if ((fA == fA))
741741 then {
742742 let fB = fraction(eN, (bS - bT), bT, FLOOR)
743743 let cH = K(bI(H(fz, df), H(fy, de)), a)
744744 let dD = [IntegerEntry(Y(), cH), IntegerEntry(Z(height, lastBlock.timestamp), cH), StringEntry(ac(cu, ae), br(ft, fu, toInt(fB), cH, 0, 0, height, lastBlock.timestamp, 0, 0))]
745745 let fC = fraction(fr, a, fq)
746746 let fD = fraction(fm, a, (fC + a))
747747 let fE = (fm - fD)
748748 let fF = fraction(eN, toBigInt(fE), toBigInt(fr))
749749 let fG = toInt(fraction((fB - fF), b, fF))
750750 $Tuple4(toInt(fB), dD, cp, fG)
751751 }
752752 else throw("Strict value is not equal to itself.")
753753 }
754754 else throw("Strict value is not equal to itself.")
755755 }
756756
757757
758758 func fH (fI,fJ,fK,fi,fL,fM) = {
759759 let cv = toBase58String(value(be))
760760 let cw = toBase58String(value(bf))
761761 let cx = toBase58String(value(bg))
762762 let fN = bh
763763 let fO = bi
764764 let fP = bd
765765 let cu = if ((fi == bq))
766766 then fL
767767 else fi
768768 let fg = value(fK[0])
769769 let cs = value(fg.assetId)
770770 let cY = fg.amount
771771 let eO = eH(e, e, e)
772772 if ((eO == eO))
773773 then {
774774 let cr = toBase58String(fM)
775775 if ((cv != toBase58String(cs)))
776776 then throw("Wrong LP")
777777 else {
778778 let cC = bG(cw)
779779 let cE = bG(cx)
780780 let fQ = {
781781 let fR = invoke(this, "getOneTknV2READONLY", [fI, cY], nil)
782782 if ($isInstanceOf(fR, "(Int, Int)"))
783783 then fR
784784 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
785785 }
786786 if ((fQ == fQ))
787787 then {
788788 let cp = fQ._2
789789 let fS = fQ._1
790790 let fT = if (if ((fJ > 0))
791791 then (fJ > fS)
792792 else false)
793793 then aJ(makeString(["amount to receive is less than ", toString(fJ)], ""))
794794 else fS
795795 let fU = if ((fI == cw))
796796 then $Tuple4(fT, 0, ((cC - fT) - cp), cE)
797797 else if ((fI == cx))
798798 then $Tuple4(0, fT, cC, ((cE - fT) - cp))
799799 else throw("invalid out asset id")
800800 let fV = fU._1
801801 let fW = fU._2
802802 let fy = fU._3
803803 let fz = fU._4
804804 let fX = bI(H(fz, fO), H(fy, fN))
805805 let fY = K(fX, a)
806806 let fZ = if ((fI == "WAVES"))
807807 then unit
808808 else fromBase58String(fI)
809809 let ga = if ((cp > 0))
810810 then [ScriptTransfer(aQ, cp, fZ)]
811811 else nil
812812 let cO = ([ScriptTransfer(cu, fT, fZ), StringEntry(af(toString(cu), cr), bC(fV, fW, cY, fY, height, lastBlock.timestamp)), IntegerEntry(Y(), fY), IntegerEntry(Z(height, lastBlock.timestamp), fY)] ++ ga)
813813 if ((cO == cO))
814814 then {
815815 let gb = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
816816 if ((gb == gb))
817817 then {
818818 let gc = {
819819 let gd = if ((this == aQ))
820820 then 0
821821 else cp
822822 let ge = if ((aV(fI) == bf))
823823 then true
824824 else false
825825 if (ge)
826826 then $Tuple2(-((fS + gd)), 0)
827827 else $Tuple2(0, -((fS + gd)))
828828 }
829829 let eQ = gc._1
830830 let eR = gc._2
831831 let gf = eP(eQ, eR, 0)
832832 let gg = gf._1
833833 let eG = gf._2
834834 let gh = eT(eO, eG)
835835 if ((gh == gh))
836836 then $Tuple2((cO ++ gg), fT)
837837 else throw("Strict value is not equal to itself.")
838838 }
839839 else throw("Strict value is not equal to itself.")
840840 }
841841 else throw("Strict value is not equal to itself.")
842842 }
843843 else throw("Strict value is not equal to itself.")
844844 }
845845 }
846846 else throw("Strict value is not equal to itself.")
847847 }
848848
849849
850850 func gi () = {
851851 let gj = getString(W())
852852 if ($isInstanceOf(gj, "String"))
853853 then {
854854 let dI = gj
855855 fromBase58String(dI)
856856 }
857857 else if ($isInstanceOf(gj, "Unit"))
858858 then unit
859859 else throw("Match error")
860860 }
861861
862862
863863 func gk () = {
864864 let gj = getString(X())
865865 if ($isInstanceOf(gj, "String"))
866866 then {
867867 let dI = gj
868868 fromBase58String(dI)
869869 }
870870 else if ($isInstanceOf(gj, "Unit"))
871871 then unit
872872 else throw("Match error")
873873 }
874874
875875
876876 let gl = throw("Permission denied")
877877
878878 func gm (dV) = {
879879 let gj = gi()
880880 if ($isInstanceOf(gj, "ByteVector"))
881881 then {
882882 let gn = gj
883883 (dV.callerPublicKey == gn)
884884 }
885885 else if ($isInstanceOf(gj, "Unit"))
886886 then (dV.caller == this)
887887 else throw("Match error")
888888 }
889889
890890
891891 func go (dV) = {
892892 let gj = gi()
893893 if ($isInstanceOf(gj, "ByteVector"))
894894 then {
895895 let gn = gj
896896 if ((dV.callerPublicKey == gn))
897897 then true
898898 else gl
899899 }
900900 else if ($isInstanceOf(gj, "Unit"))
901901 then if ((dV.caller == this))
902902 then true
903903 else gl
904904 else throw("Match error")
905905 }
906906
907907
908908 @Callable(dV)
909909 func constructor (V) = {
910910 let ev = go(dV)
911911 if ((ev == ev))
912912 then [StringEntry(V(), V)]
913913 else throw("Strict value is not equal to itself.")
914914 }
915915
916916
917917
918918 @Callable(dV)
919919 func setManager (gp) = {
920920 let ev = go(dV)
921921 if ((ev == ev))
922922 then {
923923 let gq = fromBase58String(gp)
924924 if ((gq == gq))
925925 then [StringEntry(X(), gp)]
926926 else throw("Strict value is not equal to itself.")
927927 }
928928 else throw("Strict value is not equal to itself.")
929929 }
930930
931931
932932
933933 @Callable(dV)
934934 func confirmManager () = {
935935 let cm = gk()
936936 let gr = if (isDefined(cm))
937937 then true
938938 else throw("No pending manager")
939939 if ((gr == gr))
940940 then {
941941 let gs = if ((dV.callerPublicKey == value(cm)))
942942 then true
943943 else throw("You are not pending manager")
944944 if ((gs == gs))
945945 then [StringEntry(W(), toBase58String(value(cm))), DeleteEntry(X())]
946946 else throw("Strict value is not equal to itself.")
947947 }
948948 else throw("Strict value is not equal to itself.")
949949 }
950950
951951
952952
953953 @Callable(dV)
954954 func put (gt,gu) = {
955955 let gv = bl()
956956 let gw = valueOrErrorMessage(addressFromString(gv[C]), "Wr st addr")
957957 let gx = valueOrErrorMessage(addressFromString(gv[E]), "Wr sl addr")
958958 if ((0 > gt))
959959 then throw("Wrong slippage")
960960 else if ((size(dV.payments) != 2))
961961 then throw("2 pmnts expd")
962962 else {
963963 let gy = toBigInt(value(dV.payments[0]).amount)
964964 let gz = toBigInt(value(dV.payments[1]).amount)
965965 let eL = (toBigInt(bG(aX(bf))) - gy)
966966 if ((eL == eL))
967967 then {
968968 let eM = (toBigInt(bG(aX(bg))) - gz)
969969 if ((eM == eM))
970970 then {
971971 let eN = toBigInt(value(assetInfo(be)).quantity)
972972 if ((eN == eN))
973973 then {
974974 let eO = eH(gy, gz, toBigInt(0))
975975 if ((eO == eO))
976976 then {
977977 let gA = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gt, true, false, true, 0, "")
978978 let dx = gA._2
979979 let gB = gA._7
980980 let cO = gA._9
981981 let dy = gA._10
982982 let dz = gA._11
983983 let cw = gA._12
984984 let cx = gA._13
985985 let dk = invoke(aM, "emit", [dx], nil)
986986 if ((dk == dk))
987987 then {
988988 let gC = {
989989 let gj = dk
990990 if ($isInstanceOf(gj, "Address"))
991991 then {
992992 let gD = gj
993993 invoke(gD, "emit", [dx], nil)
994994 }
995995 else unit
996996 }
997997 if ((gC == gC))
998998 then {
999999 let gE = if ((dy > 0))
10001000 then invoke(gx, "put", nil, [AttachedPayment(cw, dy)])
10011001 else nil
10021002 if ((gE == gE))
10031003 then {
10041004 let gF = if ((dz > 0))
10051005 then invoke(gx, "put", nil, [AttachedPayment(cx, dz)])
10061006 else nil
10071007 if ((gF == gF))
10081008 then {
10091009 let gG = if (gu)
10101010 then {
10111011 let gH = invoke(gw, "stake", nil, [AttachedPayment(gB, dx)])
10121012 if ((gH == gH))
10131013 then nil
10141014 else throw("Strict value is not equal to itself.")
10151015 }
10161016 else [ScriptTransfer(dV.caller, dx, gB)]
10171017 let gI = eP(0, 0, 0)
10181018 let gg = gI._1
10191019 let eG = gI._2
1020- let gh = eT(eO, eG)
1021- if ((gh == gh))
1020+ let gJ = if ((eG >= eO))
1021+ then true
1022+ else aJ(makeString(["updated DLp lower than current DLp", toString(eL), toString(eM), toString(eN), toString(eO), toString(eG)], " "))
1023+ if ((gJ == gJ))
10221024 then {
1023- let gJ = if ((eG >= eO))
1024- then true
1025- else aJ(makeString(["updated DLp lower than current DLp", toString(eL), toString(eM), toString(eN), toString(eO), toString(eG)], " "))
1026- if ((gJ == gJ))
1027- then {
1028- let gK = value(assetInfo(be)).quantity
1029- if ((gK == gK))
1030- then ((cO ++ gG) ++ gg)
1031- else throw("Strict value is not equal to itself.")
1032- }
1025+ let gK = value(assetInfo(be)).quantity
1026+ if ((gK == gK))
1027+ then ((cO ++ gG) ++ gg)
10331028 else throw("Strict value is not equal to itself.")
10341029 }
10351030 else throw("Strict value is not equal to itself.")
10361031 }
10371032 else throw("Strict value is not equal to itself.")
10381033 }
10391034 else throw("Strict value is not equal to itself.")
10401035 }
10411036 else throw("Strict value is not equal to itself.")
10421037 }
10431038 else throw("Strict value is not equal to itself.")
10441039 }
10451040 else throw("Strict value is not equal to itself.")
10461041 }
10471042 else throw("Strict value is not equal to itself.")
10481043 }
10491044 else throw("Strict value is not equal to itself.")
10501045 }
10511046 else throw("Strict value is not equal to itself.")
10521047 }
10531048 }
10541049
10551050
10561051
10571052 @Callable(dV)
10581053 func putOneTknV2 (fJ,gu) = {
10591054 let gL = {
10601055 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
10611056 if ($isInstanceOf(fR, "Boolean"))
10621057 then fR
10631058 else throw(($getType(fR) + " couldn't be cast to Boolean"))
10641059 }
10651060 let gM = if (if (if (aO())
10661061 then true
10671062 else (bd == q))
10681063 then true
10691064 else (bd == s))
10701065 then true
10711066 else gL
10721067 let gN = [if (if (!(gM))
10731068 then true
10741069 else gm(dV))
10751070 then true
10761071 else aJ("put operation is blocked by admin"), if ((size(dV.payments) == 1))
10771072 then true
10781073 else aJ("exactly 1 payment are expected")]
10791074 if ((gN == gN))
10801075 then {
10811076 let cw = toBase58String(value(bf))
10821077 let cx = toBase58String(value(bg))
10831078 let cv = be
10841079 let fN = bh
10851080 let fO = bi
10861081 let cu = if ((dV.caller == this))
10871082 then dV.originCaller
10881083 else dV.caller
10891084 let fg = value(dV.payments[0])
10901085 let cs = toBase58String(value(fg.assetId))
10911086 let cY = fg.amount
10921087 let eO = if ((fg.assetId == bf))
10931088 then eH(toBigInt(cY), toBigInt(0), toBigInt(0))
10941089 else eH(toBigInt(0), toBigInt(cY), toBigInt(0))
10951090 if ((eO == eO))
10961091 then {
10971092 let gO = fl(cY, cs, toString(cu), toBase58String(dV.transactionId), true)
10981093 if ((gO == gO))
10991094 then {
11001095 let cp = gO._3
11011096 let cO = gO._2
11021097 let gP = gO._1
11031098 let dx = if (if ((fJ > 0))
11041099 then (fJ > gP)
11051100 else false)
11061101 then aJ(makeString(["amount to receive is less than ", toString(fJ)], ""))
11071102 else gP
11081103 let gA = invoke(aM, "emit", [dx], nil)
11091104 if ((gA == gA))
11101105 then {
11111106 let gC = {
11121107 let gj = gA
11131108 if ($isInstanceOf(gj, "Address"))
11141109 then {
11151110 let gD = gj
11161111 invoke(gD, "emit", [dx], nil)
11171112 }
11181113 else unit
11191114 }
11201115 if ((gC == gC))
11211116 then {
11221117 let gG = if (gu)
11231118 then {
11241119 let gH = invoke(bn, "stake", nil, [AttachedPayment(cv, dx)])
11251120 if ((gH == gH))
11261121 then nil
11271122 else throw("Strict value is not equal to itself.")
11281123 }
11291124 else [ScriptTransfer(dV.caller, dx, cv)]
11301125 let ga = if ((cp > 0))
11311126 then [ScriptTransfer(aQ, cp, fromBase58String(cs))]
11321127 else nil
11331128 let gQ = if ((this == aQ))
11341129 then $Tuple2(0, 0)
11351130 else {
11361131 let gR = if ((fg.assetId == bf))
11371132 then true
11381133 else false
11391134 if (gR)
11401135 then $Tuple2(-(cp), 0)
11411136 else $Tuple2(0, -(cp))
11421137 }
11431138 let eQ = gQ._1
11441139 let eR = gQ._2
11451140 let gS = eP(eQ, eR, 0)
11461141 let gg = gS._1
11471142 let eG = gS._2
11481143 let gh = eT(eO, eG)
11491144 if ((gh == gh))
11501145 then $Tuple2((((cO ++ gG) ++ ga) ++ gg), dx)
11511146 else throw("Strict value is not equal to itself.")
11521147 }
11531148 else throw("Strict value is not equal to itself.")
11541149 }
11551150 else throw("Strict value is not equal to itself.")
11561151 }
11571152 else throw("Strict value is not equal to itself.")
11581153 }
11591154 else throw("Strict value is not equal to itself.")
11601155 }
11611156 else throw("Strict value is not equal to itself.")
11621157 }
11631158
11641159
11651160
11661161 @Callable(dV)
1162+func putForFree (gT) = if ((0 > gT))
1163+ then throw("Wrong slpg")
1164+ else if ((size(dV.payments) != 2))
1165+ then throw("2 pmnts expd")
1166+ else {
1167+ let gU = fh(toString(dV.caller), toBase58String(dV.transactionId), AttachedPayment(value(dV.payments[0]).assetId, value(dV.payments[0]).amount), dV.payments[1], gT, false, false, true, 0, "")
1168+ let cO = gU._9
1169+ let gy = toBigInt(value(dV.payments[0]).amount)
1170+ let gz = toBigInt(value(dV.payments[1]).amount)
1171+ let eO = eH(gy, gz, toBigInt(0))
1172+ if ((eO == eO))
1173+ then {
1174+ let gV = eP(0, 0, 0)
1175+ let gg = gV._1
1176+ let eG = gV._2
1177+ let gh = eT(eO, eG)
1178+ if ((gh == gh))
1179+ then (cO ++ gg)
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else throw("Strict value is not equal to itself.")
1183+ }
1184+
1185+
1186+
1187+@Callable(dV)
11671188 func get () = {
11681189 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
11691190 if ((eO == eO))
11701191 then {
11711192 let dk = ff(dV)
1172- let gT = dk._1
1193+ let gW = dk._1
11731194 let cN = dk._2
11741195 let cY = dk._3
11751196 let cs = dk._4
11761197 let cO = dk._5
11771198 let ew = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
11781199 if ((ew == ew))
11791200 then {
1180- let gU = eP(-(gT), -(cN), 0)
1181- let gg = gU._1
1182- let eG = gU._2
1201+ let gX = eP(-(gW), -(cN), 0)
1202+ let gg = gX._1
1203+ let eG = gX._2
11831204 let gh = eT(eO, eG)
11841205 if ((gh == gh))
11851206 then (cO ++ gg)
11861207 else throw("Strict value is not equal to itself.")
11871208 }
11881209 else throw("Strict value is not equal to itself.")
11891210 }
11901211 else throw("Strict value is not equal to itself.")
11911212 }
11921213
11931214
11941215
11951216 @Callable(dV)
11961217 func getOneTknV2 (fI,fJ) = {
11971218 let gL = {
11981219 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11991220 if ($isInstanceOf(fR, "Boolean"))
12001221 then fR
12011222 else throw(($getType(fR) + " couldn't be cast to Boolean"))
12021223 }
1203- let gV = if (if (aO())
1224+ let gY = if (if (aO())
12041225 then true
12051226 else (bd == s))
12061227 then true
12071228 else gL
1208- let gN = [if (if (!(gV))
1229+ let gN = [if (if (!(gY))
12091230 then true
12101231 else gm(dV))
12111232 then true
12121233 else aJ("get operation is blocked by admin"), if ((size(dV.payments) == 1))
12131234 then true
12141235 else aJ("exactly 1 payment are expected")]
12151236 if ((gN == gN))
12161237 then {
1217- let gW = fH(fI, fJ, dV.payments, dV.caller, dV.originCaller, dV.transactionId)
1218- let cO = gW._1
1219- let fT = gW._2
1238+ let gZ = fH(fI, fJ, dV.payments, dV.caller, dV.originCaller, dV.transactionId)
1239+ let cO = gZ._1
1240+ let fT = gZ._2
12201241 $Tuple2(cO, fT)
12211242 }
12221243 else throw("Strict value is not equal to itself.")
12231244 }
12241245
12251246
12261247
12271248 @Callable(dV)
12281249 func refreshDLp () = {
1229- let gX = valueOrElse(getInteger(an), 0)
1230- let gY = if (((height - gX) >= aq))
1250+ let ha = valueOrElse(getInteger(an), 0)
1251+ let hb = if (((height - ha) >= aq))
12311252 then unit
12321253 else aJ(makeString([toString(aq), " blocks have not passed since the previous call"], ""))
1233- if ((gY == gY))
1254+ if ((hb == hb))
12341255 then {
12351256 let fa = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, am), "0")), aL("invalid dLp"))
1236- let gZ = eP(0, 0, 0)
1237- let ha = gZ._1
1238- let eG = gZ._2
1257+ let hc = eP(0, 0, 0)
1258+ let hd = hc._1
1259+ let eG = hc._2
12391260 let eS = if ((fa != eG))
1240- then ha
1261+ then hd
12411262 else aJ("nothing to refresh")
12421263 $Tuple2(eS, toString(eG))
12431264 }
12441265 else throw("Strict value is not equal to itself.")
12451266 }
12461267
12471268
12481269
12491270 @Callable(dV)
1250-func getOneTknV2READONLY (fI,hb) = {
1271+func getOneTknV2READONLY (fI,he) = {
12511272 let cw = toBase58String(value(bf))
12521273 let cx = toBase58String(value(bg))
12531274 let cv = toBase58String(value(be))
12541275 let dF = [toBigInt(bG(cw)), toBigInt(bG(cx))]
12551276 let eF = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cv)), "invalid lp asset").quantity)
12561277 let bT = dE(dF)
1257- let bS = (bT - fraction(toBigInt(hb), bT, eF))
1258- let hc = if ((fI == cw))
1278+ let bS = (bT - fraction(toBigInt(he), bT, eF))
1279+ let hf = if ((fI == cw))
12591280 then 0
12601281 else if ((fI == cx))
12611282 then 1
12621283 else throw("invalid out asset id")
1263- let hd = es(dF, hc, bS)
1264- let he = (dF[hc] - hd)
1265- let hf = max([0, toInt((he - f))])
1266- let hg = cn(hf)
1267- let fS = hg._1
1268- let cp = hg._2
1284+ let hg = es(dF, hf, bS)
1285+ let hh = (dF[hf] - hg)
1286+ let hi = max([0, toInt((hh - f))])
1287+ let hj = cn(hi)
1288+ let fS = hj._1
1289+ let cp = hj._2
12691290 $Tuple2(nil, $Tuple2(fS, cp))
12701291 }
12711292
12721293
12731294
12741295 @Callable(dV)
1275-func getOneTknV2WithBonusREADONLY (fI,hb) = {
1296+func getOneTknV2WithBonusREADONLY (fI,he) = {
12761297 let cw = toBase58String(value(bf))
12771298 let cx = toBase58String(value(bg))
12781299 let cv = toBase58String(value(be))
12791300 let cC = bG(cw)
12801301 let cE = bG(cx)
1281- let hh = {
1282- let fR = invoke(this, "getOneTknV2READONLY", [fI, hb], nil)
1302+ let hk = {
1303+ let fR = invoke(this, "getOneTknV2READONLY", [fI, he], nil)
12831304 if ($isInstanceOf(fR, "(Int, Int)"))
12841305 then fR
12851306 else throw(($getType(fR) + " couldn't be cast to (Int, Int)"))
12861307 }
1287- let fS = hh._1
1288- let cp = hh._2
1289- let dk = cq("", cv, hb, this)
1308+ let fS = hk._1
1309+ let cp = hk._2
1310+ let dk = cq("", cv, he, this)
12901311 let cM = dk._1
12911312 let cN = dk._2
1292- let hi = (cM + cN)
1293- let fG = if ((hi == 0))
1313+ let hl = (cM + cN)
1314+ let fG = if ((hl == 0))
12941315 then if ((fS == 0))
12951316 then 0
12961317 else throw("bonus calculation error")
1297- else fraction((fS - hi), a, hi)
1318+ else fraction((fS - hl), a, hl)
12981319 $Tuple2(nil, $Tuple3(fS, cp, fG))
12991320 }
13001321
13011322
13021323
13031324 @Callable(dV)
1304-func getNoLess (hj,hk) = {
1305- let hl = toBigInt(bG(aX(bf)))
1306- if ((hl == hl))
1325+func getNoLess (hm,hn) = {
1326+ let ho = toBigInt(bG(aX(bf)))
1327+ if ((ho == ho))
13071328 then {
1308- let hm = toBigInt(bG(aX(bg)))
1309- if ((hm == hm))
1329+ let hp = toBigInt(bG(aX(bg)))
1330+ if ((hp == hp))
13101331 then {
1311- let hn = toBigInt(value(assetInfo(be)).quantity)
1312- if ((hn == hn))
1332+ let hq = toBigInt(value(assetInfo(be)).quantity)
1333+ if ((hq == hq))
13131334 then {
1314- let ho = (hn - toBigInt(value(dV.payments[0]).amount))
1315- if ((ho == ho))
1335+ let hr = (hq - toBigInt(value(dV.payments[0]).amount))
1336+ if ((hr == hr))
13161337 then {
13171338 let dk = ff(dV)
13181339 let cM = dk._1
13191340 let cN = dk._2
13201341 let cY = dk._3
13211342 let cs = dk._4
13221343 let cO = dk._5
1323- if ((hj > cM))
1324- then throw(((("Failed: " + toString(cM)) + " < ") + toString(hj)))
1325- else if ((hk > cN))
1326- then throw(((("Failed: " + toString(cN)) + " < ") + toString(hk)))
1344+ if ((hm > cM))
1345+ then throw(((("Failed: " + toString(cM)) + " < ") + toString(hm)))
1346+ else if ((hn > cN))
1347+ then throw(((("Failed: " + toString(cN)) + " < ") + toString(hn)))
13271348 else {
13281349 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
13291350 if ((eO == eO))
13301351 then {
1331- let hp = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
1332- if ((hp == hp))
1352+ let hs = invoke(aM, "burn", [cY], [AttachedPayment(cs, cY)])
1353+ if ((hs == hs))
13331354 then {
1334- let hq = eP(-(cM), -(cN), 0)
1335- let gg = hq._1
1336- let eG = hq._2
1355+ let ht = eP(-(cM), -(cN), 0)
1356+ let gg = ht._1
1357+ let eG = ht._2
13371358 let gh = eT(eO, eG)
13381359 if ((gh == gh))
13391360 then (cO ++ gg)
13401361 else throw("Strict value is not equal to itself.")
13411362 }
13421363 else throw("Strict value is not equal to itself.")
13431364 }
13441365 else throw("Strict value is not equal to itself.")
13451366 }
13461367 }
13471368 else throw("Strict value is not equal to itself.")
13481369 }
13491370 else throw("Strict value is not equal to itself.")
13501371 }
13511372 else throw("Strict value is not equal to itself.")
13521373 }
13531374 else throw("Strict value is not equal to itself.")
13541375 }
13551376
13561377
13571378
13581379 @Callable(dV)
13591380 func unstakeAndGet (co) = {
1360- let hr = if ((size(dV.payments) != 0))
1381+ let hu = if ((size(dV.payments) != 0))
13611382 then throw("No pmnts expd")
13621383 else true
1363- if ((hr == hr))
1384+ if ((hu == hu))
13641385 then {
1365- let hs = bl()
1386+ let hv = bl()
13661387 let gB = be
1367- let ht = valueOrErrorMessage(addressFromString(hs[C]), "Wr st addr")
1388+ let hw = valueOrErrorMessage(addressFromString(hv[C]), "Wr st addr")
13681389 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
1369- let hu = invoke(ht, "unstake", [toBase58String(gB), co], nil)
1370- if ((hu == hu))
1390+ let hx = invoke(hw, "unstake", [toBase58String(gB), co], nil)
1391+ if ((hx == hx))
13711392 then {
13721393 let dk = cq(toBase58String(dV.transactionId), toBase58String(gB), co, dV.caller)
13731394 let cM = dk._1
13741395 let cN = dk._2
13751396 let cA = parseIntValue(dk._9)
13761397 let cO = dk._10
1377- let hv = if (if (aO())
1398+ let hy = if (if (aO())
13781399 then true
13791400 else (cA == s))
13801401 then throw(("Blocked: " + toString(cA)))
13811402 else true
1382- if ((hv == hv))
1403+ if ((hy == hy))
13831404 then {
1384- let hw = invoke(aM, "burn", [co], [AttachedPayment(gB, co)])
1385- if ((hw == hw))
1405+ let hz = invoke(aM, "burn", [co], [AttachedPayment(gB, co)])
1406+ if ((hz == hz))
13861407 then {
1387- let hx = eP(-(cM), -(cN), 0)
1388- let gg = hx._1
1389- let eG = hx._2
1408+ let hA = eP(-(cM), -(cN), 0)
1409+ let gg = hA._1
1410+ let eG = hA._2
13901411 let gh = eT(eO, eG)
13911412 if ((gh == gh))
13921413 then (cO ++ gg)
13931414 else throw("Strict value is not equal to itself.")
13941415 }
13951416 else throw("Strict value is not equal to itself.")
13961417 }
13971418 else throw("Strict value is not equal to itself.")
13981419 }
13991420 else throw("Strict value is not equal to itself.")
14001421 }
14011422 else throw("Strict value is not equal to itself.")
14021423 }
14031424
14041425
14051426
14061427 @Callable(dV)
1407-func unstakeAndGetNoLess (hy,hz,hk) = {
1408- let gV = if (aO())
1428+func unstakeAndGetNoLess (hB,hC,hn) = {
1429+ let gY = if (aO())
14091430 then true
14101431 else (bd == s)
1411- let gN = [if (!(gV))
1432+ let gN = [if (!(gY))
14121433 then true
14131434 else throw("get operation is blocked by admin"), if ((size(dV.payments) == 0))
14141435 then true
14151436 else throw("no payments are expected")]
14161437 if ((gN == gN))
14171438 then {
14181439 let eO = eH(toBigInt(0), toBigInt(0), toBigInt(0))
1419- let hu = invoke(bn, "unstake", [toBase58String(be), hy], nil)
1420- if ((hu == hu))
1440+ let hx = invoke(bn, "unstake", [toBase58String(be), hB], nil)
1441+ if ((hx == hx))
14211442 then {
1422- let hA = cq(toBase58String(dV.transactionId), toBase58String(be), hy, dV.caller)
1423- let cM = hA._1
1424- let cN = hA._2
1425- let cO = hA._10
1426- let hB = [if ((cM >= hz))
1443+ let hD = cq(toBase58String(dV.transactionId), toBase58String(be), hB, dV.caller)
1444+ let cM = hD._1
1445+ let cN = hD._2
1446+ let cO = hD._10
1447+ let hE = [if ((cM >= hC))
14271448 then true
1428- else throw(makeString(["amount asset amount to receive is less than ", toString(hz)], "")), if ((cN >= hk))
1449+ else throw(makeString(["amount asset amount to receive is less than ", toString(hC)], "")), if ((cN >= hn))
14291450 then true
1430- else throw(makeString(["price asset amount to receive is less than ", toString(hk)], ""))]
1431- if ((hB == hB))
1451+ else throw(makeString(["price asset amount to receive is less than ", toString(hn)], ""))]
1452+ if ((hE == hE))
14321453 then {
1433- let hp = invoke(aM, "burn", [hy], [AttachedPayment(be, hy)])
1434- if ((hp == hp))
1454+ let hs = invoke(aM, "burn", [hB], [AttachedPayment(be, hB)])
1455+ if ((hs == hs))
14351456 then {
1436- let hC = eP(-(cM), -(cN), 0)
1437- let gg = hC._1
1438- let eG = hC._2
1457+ let hF = eP(-(cM), -(cN), 0)
1458+ let gg = hF._1
1459+ let eG = hF._2
14391460 let gh = eT(eO, eG)
14401461 if ((gh == gh))
14411462 then (cO ++ gg)
14421463 else throw("Strict value is not equal to itself.")
14431464 }
14441465 else throw("Strict value is not equal to itself.")
14451466 }
14461467 else throw("Strict value is not equal to itself.")
14471468 }
14481469 else throw("Strict value is not equal to itself.")
14491470 }
14501471 else throw("Strict value is not equal to itself.")
14511472 }
14521473
14531474
14541475
14551476 @Callable(dV)
1456-func unstakeAndGetOneTknV2 (hy,fI,fJ) = {
1477+func unstakeAndGetOneTknV2 (hB,fI,fJ) = {
14571478 let gL = {
14581479 let fR = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
14591480 if ($isInstanceOf(fR, "Boolean"))
14601481 then fR
14611482 else throw(($getType(fR) + " couldn't be cast to Boolean"))
14621483 }
1463- let gV = if (if (aO())
1484+ let gY = if (if (aO())
14641485 then true
14651486 else (bd == s))
14661487 then true
14671488 else gL
1468- let gN = [if (if (!(gV))
1489+ let gN = [if (if (!(gY))
14691490 then true
14701491 else gm(dV))
14711492 then true
14721493 else aJ("get operation is blocked by admin"), if ((size(dV.payments) == 0))
14731494 then true
14741495 else aJ("no payments are expected")]
14751496 if ((gN == gN))
14761497 then {
1477- let hs = bl()
1498+ let hv = bl()
14781499 let gB = be
1479- let ht = valueOrErrorMessage(addressFromString(hs[C]), "Wr st addr")
1480- let hu = invoke(ht, "unstake", [toBase58String(gB), hy], nil)
1481- if ((hu == hu))
1500+ let hw = valueOrErrorMessage(addressFromString(hv[C]), "Wr st addr")
1501+ let hx = invoke(hw, "unstake", [toBase58String(gB), hB], nil)
1502+ if ((hx == hx))
14821503 then {
1483- let hD = fH(fI, fJ, [AttachedPayment(gB, hy)], dV.caller, dV.originCaller, dV.transactionId)
1484- let cO = hD._1
1485- let fT = hD._2
1504+ let hG = fH(fI, fJ, [AttachedPayment(gB, hB)], dV.caller, dV.originCaller, dV.transactionId)
1505+ let cO = hG._1
1506+ let fT = hG._2
14861507 $Tuple2(cO, fT)
14871508 }
14881509 else throw("Strict value is not equal to itself.")
14891510 }
14901511 else throw("Strict value is not equal to itself.")
14911512 }
14921513
14931514
14941515
14951516 @Callable(dV)
1496-func putOneTknV2WithBonusREADONLY (hE,hF) = {
1497- let hG = fl(hE, hF, "", "", true)
1498- let fB = hG._1
1499- let cO = hG._2
1500- let cp = hG._3
1501- let fG = hG._4
1517+func putOneTknV2WithBonusREADONLY (hH,hI) = {
1518+ let hJ = fl(hH, hI, "", "", true)
1519+ let fB = hJ._1
1520+ let cO = hJ._2
1521+ let cp = hJ._3
1522+ let fG = hJ._4
15021523 $Tuple2(nil, $Tuple3(fB, cp, fG))
15031524 }
15041525
15051526
15061527
15071528 @Callable(dV)
1508-func putOneTknV2WithoutTakeFeeREADONLY (hE,hF) = {
1509- let hH = fl(hE, hF, "", "", false)
1510- let fB = hH._1
1511- let cO = hH._2
1512- let cp = hH._3
1513- let fG = hH._4
1529+func putOneTknV2WithoutTakeFeeREADONLY (hH,hI) = {
1530+ let hK = fl(hH, hI, "", "", false)
1531+ let fB = hK._1
1532+ let cO = hK._2
1533+ let cp = hK._3
1534+ let fG = hK._4
15141535 $Tuple2(nil, $Tuple3(fB, cp, fG))
15151536 }
15161537
15171538
15181539
15191540 @Callable(dV)
1520-func activate (hI,hJ) = if ((toString(dV.caller) != toString(aM)))
1541+func activate (hL,hM) = if ((toString(dV.caller) != toString(aM)))
15211542 then throw("denied")
1522- else $Tuple2([StringEntry(ag(), hI), StringEntry(ah(), hJ)], "success")
1543+ else $Tuple2([StringEntry(ag(), hL), StringEntry(ah(), hM)], "success")
15231544
15241545
15251546
15261547 @Callable(dV)
1527-func setS (hK,hv) = if ((toString(dV.caller) != aF(this, aj())))
1548+func setS (hN,hy) = if ((toString(dV.caller) != aF(this, aj())))
15281549 then gl
1529- else [StringEntry(hK, hv)]
1550+ else [StringEntry(hN, hy)]
15301551
15311552
15321553
15331554 @Callable(dV)
1534-func setI (hK,hv) = if ((toString(dV.caller) != aF(this, aj())))
1555+func setI (hN,hy) = if ((toString(dV.caller) != aF(this, aj())))
15351556 then gl
1536- else [IntegerEntry(hK, hv)]
1557+ else [IntegerEntry(hN, hy)]
15371558
15381559
15391560
15401561 @Callable(dV)
15411562 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aR())
15421563
15431564
15441565
15451566 @Callable(dV)
15461567 func getAccBalanceWrapperREADONLY (bH) = $Tuple2(nil, bG(bH))
15471568
15481569
15491570
15501571 @Callable(dV)
15511572 func calcPricesWrapperREADONLY (bZ,ca,ce) = {
1552- let hL = cd(bZ, ca, ce)
1553- $Tuple2(nil, [toString(hL[0]), toString(hL[1]), toString(hL[2])])
1573+ let hO = cd(bZ, ca, ce)
1574+ $Tuple2(nil, [toString(hO[0]), toString(hO[1]), toString(hO[2])])
15541575 }
15551576
15561577
15571578
15581579 @Callable(dV)
1559-func fromX18WrapperREADONLY (L,hM) = $Tuple2(nil, K(parseBigIntValue(L), hM))
1580+func fromX18WrapperREADONLY (L,hP) = $Tuple2(nil, K(parseBigIntValue(L), hP))
15601581
15611582
15621583
15631584 @Callable(dV)
15641585 func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
15651586
15661587
15671588
15681589 @Callable(dV)
15691590 func calcPriceBigIntWrapperREADONLY (bJ,bK) = $Tuple2(nil, toString(bI(parseBigIntValue(bJ), parseBigIntValue(bK))))
15701591
15711592
15721593
15731594 @Callable(dV)
1574-func estimatePutOperationWrapperREADONLY (cr,bO,cQ,cR,cS,cT,hN,cU,cV) = $Tuple2(nil, cP(cr, bO, cQ, cR, cS, cT, hN, cU, cV, true, false, 0, ""))
1595+func estimatePutOperationWrapperREADONLY (cr,bO,cQ,cR,cS,cT,hQ,cU,cV) = $Tuple2(nil, cP(cr, bO, cQ, cR, cS, cT, hQ, cU, cV, true, false, 0, ""))
15751596
15761597
15771598
15781599 @Callable(dV)
1579-func estimateGetOperationWrapperREADONLY (cr,hO,ct,hN) = {
1580- let dk = cq(cr, hO, ct, addressFromStringValue(hN))
1600+func estimateGetOperationWrapperREADONLY (cr,hR,ct,hQ) = {
1601+ let dk = cq(cr, hR, ct, addressFromStringValue(hQ))
15811602 $Tuple2(nil, $Tuple10(dk._1, dk._2, dk._3, dk._4, dk._5, dk._6, dk._7, toString(dk._8), dk._9, dk._10))
15821603 }
15831604
15841605
15851606
15861607 @Callable(dV)
15871608 func getFeeREADONLY () = $Tuple2(nil, al)
15881609
15891610
1590-@Verifier(hP)
1591-func hQ () = {
1592- let hR = {
1611+@Verifier(hS)
1612+func hT () = {
1613+ let hU = {
15931614 let gj = gi()
15941615 if ($isInstanceOf(gj, "ByteVector"))
15951616 then {
15961617 let gn = gj
15971618 gn
15981619 }
15991620 else if ($isInstanceOf(gj, "Unit"))
1600- then hP.senderPublicKey
1621+ then hS.senderPublicKey
16011622 else throw("Match error")
16021623 }
1603- let gj = hP
1624+ let gj = hS
16041625 if ($isInstanceOf(gj, "Order"))
16051626 then {
16061627 let eW = gj
1607- let hS = aP()
1608- let hT = eV(eW)
1609- let hU = sigVerify(eW.bodyBytes, eW.proofs[0], eW.senderPublicKey)
1610- let hV = sigVerify(eW.bodyBytes, eW.proofs[1], hS)
1611- if (if (if (hT)
1612- then hU
1628+ let hV = aP()
1629+ let hW = eV(eW)
1630+ let hX = sigVerify(eW.bodyBytes, eW.proofs[0], eW.senderPublicKey)
1631+ let hY = sigVerify(eW.bodyBytes, eW.proofs[1], hV)
1632+ if (if (if (hW)
1633+ then hX
16131634 else false)
1614- then hV
1635+ then hY
16151636 else false)
16161637 then true
1617- else aB(hT, hU, hV)
1638+ else aB(hW, hX, hY)
16181639 }
16191640 else if ($isInstanceOf(gj, "SetScriptTransaction"))
16201641 then {
16211642 let dI = gj
1622- let hW = blake2b256(value(dI.script))
1623- let hX = fromBase64String(value(getString(aM, az())))
1624- let hY = scriptHash(this)
1625- if (if ((hX == hW))
1626- then (hY != hW)
1643+ let hZ = blake2b256(value(dI.script))
1644+ let ia = fromBase64String(value(getString(aM, az())))
1645+ let ib = scriptHash(this)
1646+ if (if ((ia == hZ))
1647+ then (ib != hZ)
16271648 else false)
16281649 then true
1629- else sigVerify(hP.bodyBytes, hP.proofs[0], hR)
1650+ else sigVerify(hS.bodyBytes, hS.proofs[0], hU)
16301651 }
1631- else sigVerify(hP.bodyBytes, hP.proofs[0], hR)
1652+ else sigVerify(hS.bodyBytes, hS.proofs[0], hU)
16321653 }
16331654

github/deemru/w8io/169f3d6 
222.49 ms