tx · AWDnkZCp8uKMFFqTrCi2aaBWcdHFrCrbozUJjkekZen8

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.02800000 Waves

2022.06.14 18:41 [2096239] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "AWDnkZCp8uKMFFqTrCi2aaBWcdHFrCrbozUJjkekZen8", "fee": 2800000, "feeAssetId": null, "timestamp": 1655221274664, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "5FLXhN6HJkkWbTjoRtEDi4xcpAYWqxsSK8mHUUBbdRzFPdiYvYXdia6xrYjyNu1bBbtZF5ZawpEZ86Vtn8mE3YnX" ], "script": "base64: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TVVMVDE4AQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAACAAAAHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAAAAAAAAAAAAQAAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAAAAAAAAAAAAgAAAAAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAAAAAAAAAAMAAAAAFUlkeEZhY3RvcnlDZmdUZWFtRGFwcAAAAAAAAAAABAAAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAABlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwAAAAAAAAAAAHAQAAAA1rZXlGYWN0b3J5Q2ZnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAFmtleVN0YWJsZVBvb2xBZGRvbkFkZHIAAAAAAgAAABclc19fc3RhYmxlUG9vbEFkZG9uQWRkcgEAAAAaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcAAAABAAAACmxwQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgUAAAAKbHBBc3NldFN0cgkABEwAAAACAgAAAB5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAABBrZXlGYWN0b3J5THBMaXN0AAAAAAIAAAAQJXNfX2xwVG9rZW5zTGlzdAEAAAAma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAABAAAACmxwQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgUAAAAKbHBBc3NldFN0cgkABEwAAAACAgAAAB5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAABRrZXlGYWN0b3J5UG9vbFdlaWdodAAAAAEAAAAPY29udHJhY3RBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAAApwb29sV2VpZ2h0CQAETAAAAAIFAAAAD2NvbnRyYWN0QWRkcmVzcwUAAAADbmlsBQAAAANTRVABAAAACnJlYWRMcExpc3QAAAABAAAAB2ZhY3RvcnkJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAdmYWN0b3J5CQEAAAAQa2V5RmFjdG9yeUxwTGlzdAAAAAACAAAAAAUAAAADU0VQAQAAABRyZWFkRmFjdG9yeUNmZ09yRmFpbAAAAAEAAAAHZmFjdG9yeQkABLUAAAACCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzT3JGYWlsAAAAAgUAAAAHZmFjdG9yeQkBAAAADWtleUZhY3RvcnlDZmcAAAAABQAAAANTRVABAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAQAAAB5rZXlFbWlzc2lvblJhdGVQZXJCbG9ja0N1cnJlbnQAAAAAAgAAABslcyVzX19yYXRlUGVyQmxvY2tfX2N1cnJlbnQBAAAAIWtleUVtaXNzaW9uUmF0ZVBlckJsb2NrTWF4Q3VycmVudAAAAAACAAAAHiVzJXNfX3JhdGVQZXJCbG9ja01heF9fY3VycmVudAEAAAAVa2V5RW1pc3Npb25TdGFydEJsb2NrAAAAAAIAAAAaJXMlc19fZW1pc3Npb25fX3N0YXJ0QmxvY2sBAAAAG2tleUVtaXNzaW9uRHVyYXRpb25JbkJsb2NrcwAAAAACAAAAGCVzJXNfX2VtaXNzaW9uX19kdXJhdGlvbgEAAAATa2V5RW1pc3Npb25FbmRCbG9jawAAAAACAAAAGCVzJXNfX2VtaXNzaW9uX19lbmRCbG9jawEAAAAPa2V5U3Rha2VkQnlVc2VyAAAAAgAAAA51c2VyQWRkcmVzc1N0cgAAAAxscEFzc2V0SWRTdHIJAAS5AAAAAgkABEwAAAACAgAAAA4lcyVzJXNfX3N0YWtlZAkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgkABEwAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAAA25pbAUAAAADU0VQAQAAAA5rZXlTdGFrZWRUb3RhbAAAAAEAAAAMbHBBc3NldElkU3RyCQABLAAAAAICAAAAFyVzJXMlc19fc3Rha2VkX190b3RhbF9fBQAAAAxscEFzc2V0SWRTdHIBAAAAEGtleUNsYWltZWRCeVVzZXIAAAACAAAADGxwQXNzZXRJZFN0cgAAAA51c2VyQWRkcmVzc1N0cgkABLkAAAACCQAETAAAAAICAAAADyVzJXMlc19fY2xhaW1lZAkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgkABEwAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAAA25pbAUAAAADU0VQAQAAABlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAAAAAgAAAAxscEFzc2V0SWRTdHIAAAAOdXNlckFkZHJlc3NTdHIJAAS5AAAAAgkABEwAAAACAgAAABglcyVzJXNfX2NsYWltZWRNaW5SZXdhcmQJAARMAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIJAARMAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAANuaWwFAAAAA1NFUAEAAAAba2V5Q2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkAAAAAgAAAAxscEFzc2V0SWRTdHIAAAAOdXNlckFkZHJlc3NTdHIJAAS5AAAAAgkABEwAAAACAgAA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AAZoZWlnaHQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQABpAAAAAEFAAAABmFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAUAAAAEdHlwZQAAAAt1c2VyQWRkcmVzcwAAAAlscEFzc2V0SWQAAAAGYW1vdW50AAAABHR4SWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkAAAAAwUAAAAEdHlwZQUAAAALdXNlckFkZHJlc3MJAAJYAAAAAQUAAAAEdHhJZAkBAAAAE2Zvcm1hdEhpc3RvcnlSZWNvcmQAAAAEBQAAAAt1c2VyQWRkcmVzcwUAAAAJbHBBc3NldElkBQAAAAR0eXBlBQAAAAZhbW91bnQAAAAADmZhY3RvcnlBZGRyZXNzCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEWtleUZhY3RvcnlBZGRyZXNzAAAAAAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA5mYWN0b3J5QWRkcmVzcwAAAAAKZmFjdG9yeUNmZwkBAAAAFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAAAAAQUAAAAPZmFjdG9yeUNvbnRyYWN0AAAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAAYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAAAAAQUAAAAKZmFjdG9yeUNmZwAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcBAAAAG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAAAAAQAAAAMc3Rha2VkQnlVc2VyAAAAJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwAAABp3eFBlckxwSW50ZWdyYWxVc2VyTGFzdEtFWQMDCQAAAAAAAAIFAAAAJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBQAAAAp6ZXJvQmlnSW50CQABPwAAAAIFAAAADHN0YWtlZEJ5VXNlcgUAAAAKemVyb0JpZ0ludAcFAAAACnplcm9CaWdJbnQDCQAAAAAAAAIFAAAADHN0YWtlZEJ5VXNlcgUAAAAKemVyb0JpZ0ludAUAAAASd3hQZXJMcEludGVncmFsTmV3AwMJAAE/AAAAAgUAAAAmd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHRPclplcm8FAAAACnplcm9CaWdJbnQJAAE/AAAAAgUAAAAMc3Rha2VkQnlVc2VyBQAAAAp6ZXJvQmlnSW50BwkBAAAABXZhbHVlAAAAAQkAAagAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwUAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3RLRVkJAAACAAAAAQIAAAAtY2FsY1d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0OiB1bmV4cGVjdGVkIHN0YXRlAQAAABRyZWZyZXNoUG9vbElOVEVHUkFMUwAAAAMAAAAMbHBBc3NldElkU3RyAAAADnBvb2xBZGRyZXNzU3RyAAAADWxwRGVsdGFBbW91bnQEAAAADnN0YWtlZFRvdGFsS0VZCQEAAAAOa2V5U3Rha2VkVG90YWwAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAAC3N0YWtlZFRvdGFsCQABNgAAAAEJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAOc3Rha2VkVG90YWxLRVkEAAAAEm5vblplcm9TdGFrZWRUb3RhbAMJAAAAAAAAAgUAAAALc3Rha2VkVG90YWwFAAAACnplcm9CaWdJbnQFAAAACW9uZUJpZ0ludAUAAAALc3Rha2VkVG90YWwEAAAACnBvb2xXZWlnaHQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAFGtleUZhY3RvcnlQb29sV2VpZ2h0AAAAAQUAAAAOcG9vbEFkZHJlc3NTdHIEAAAAEmVtaXNzaW9uU3RhcnRCbG9jawkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAAAABAAAAAVNVUxUMwAAAAAAAAAD6AQAAAAUd3hFbWlzc2lvblBlckJsb2NrWDMJAABoAAAAAgkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAAB5rZXlFbWlzc2lvblJhdGVQZXJCbG9ja0N1cnJlbnQAAAAABQAAAAVNVUxUMwQAAAAYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQAAawAAAAMFAAAAFHd4RW1pc3Npb25QZXJCbG9ja1gzBQAAAApwb29sV2VpZ2h0CQAAaAAAAAIFAAAADlBPT0xXRUlHSFRNVUxUAAAAAAAAAAADBAAAABJ3eFBlckxwSW50ZWdyYWxLRVkJAQAAABJrZXlXeFBlckxwSW50ZWdyYWwAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAAH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkJAQAAAB9rZXlXeFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0AAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAAp3eFBlckxwS0VZCQEAAAAKa2V5V3hQZXJMcAAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAAcd3hQZXJMcEludGVncmFsTGFzdFVwZEhlaWdodAkBAAAAD2dldEludE9yRGVmYXVsdAAAAAMFAAAABHRoaXMFAAAAH3d4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHRLRVkFAAAAEmVtaXNzaW9uU3RhcnRCbG9jawQAAAAPd3hQZXJMcEludGVncmFsCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAASd3hQZXJMcEludGVncmFsS0VZBAAAAA93eFBlckxwT3JaZXJvWDMAAAAAAAAAAAAEAAAAAmRoCQABlgAAAAEJAARMAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAAHHd4UGVyTHBJbnRlZ3JhbExhc3RVcGRIZWlnaHQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBAAAAAl3eFBlckxwWDMDCQEAAAACIT0AAAACBQAAAA93eFBlckxwT3JaZXJvWDMAAAAAAAAAAAAJAAE2AAAAAQUAAAAPd3hQZXJMcE9yWmVyb1gzCQABPAAAAAMJAAE2AAAAAQUAAAAYcG9vbFd4RW1pc3Npb25QZXJCbG9ja1gzCQABNgAAAAEFAAAABU1VTFQ4BQAAABJub25aZXJvU3Rha2VkVG90YWwEAAAADnN0YWtlZFRvdGFsTmV3CQABNwAAAAIFAAAAC3N0YWtlZFRvdGFsCQABNgAAAAEFAAAADWxwRGVsdGFBbW91bnQEAAAAFW5vblplcm9TdGFrZWRUb3RhbE5ldwMJAAAAAAAAAgUAAAAOc3Rha2VkVG90YWxOZXcFAAAACnplcm9CaWdJbnQFAAAACW9uZUJpZ0ludAUAAAAOc3Rha2VkVG90YWxOZXcEAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwkAATcAAAACCQABNgAAAAEFAAAAD3d4UGVyTHBJbnRlZ3JhbAkAATkAAAACBQAAAAl3eFBlckxwWDMJAAE2AAAAAQUAAAACZGgEAAAADHd4UGVyTHBYM05ldwkAAToAAAACCQABNgAAAAEFAAAAGHBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMwUAAAAVbm9uWmVyb1N0YWtlZFRvdGFsTmV3BAAAAB93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0TmV3BQAAAAZoZWlnaHQEAAAABWRlYnVnCQAEuQAAAAIJAARMAAAAAgIAAAATd3hQZXJMcEludGVncmFsTmV3PQkABEwAAAACCQABpgAAAAEFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwkABEwAAAACAgAAAANkaD0JAARMAAAAAgkAAaQAAAABBQAAAAJkaAkABEwAAAACAgAAAAp3eFBlckxwWDM9CQAETAAAAAIJAAGmAAAAAQUAAAAJd3hQZXJMcFgzCQAETAAAAAICAAAADHN0YWtlZFRvdGFsPQkABEwAAAACCQABpgAAAAEFAAAAC3N0YWtlZFRvdGFsCQAETAAAAAICAAAAGXBvb2xXeEVtaXNzaW9uUGVyQmxvY2tYMz0JAARMAAAAAgkAAaQAAAABBQAAABhwb29sV3hFbWlzc2lvblBlckJsb2NrWDMJAARMAAAAAgIAAAAVd3hFbWlzc2lvblBlckJsb2NrWDM9CQAETAAAAAIJAAGkAAAAAQUAAAAUd3hFbWlzc2lvblBlckJsb2NrWDMJAARMAAAAAgIAAAALcG9vbFdlaWdodD0JAARMAAAAAgkAAaQAAAABBQAAAApwb29sV2VpZ2h0BQAAAANuaWwCAAAAAjo6CQAFFQAAAAMFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABJ3eFBlckxwSW50ZWdyYWxLRVkJAAGmAAAAAQUAAAASd3hQZXJMcEludGVncmFsTmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAB93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0S0VZBQAAAB93eFBlckxwSW50ZWdyYWxMYXN0VXBkSGVpZ2h0TmV3CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACnd4UGVyTHBLRVkJAAGmAAAAAQUAAAAMd3hQZXJMcFgzTmV3BQAAAANuaWwFAAAABWRlYnVnAQAAABByZWZyZXNoSU5URUdSQUxTAAAABAAAAAxscEFzc2V0SWRTdHIAAAAOdXNlckFkZHJlc3NTdHIAAAAOcG9vbEFkZHJlc3NTdHIAAAANbHBEZWx0YUFtb3VudAQAAAANJHQwMTExOTQxMTMxNgkBAAAAFHJlZnJlc2hQb29sSU5URUdSQUxTAAAAAwUAAAAMbHBBc3NldElkU3RyBQAAAA5wb29sQWRkcmVzc1N0cgUAAAANbHBEZWx0YUFtb3VudAQAAAASd3hQZXJMcEludGVncmFsTmV3CAUAAAANJHQwMTExOTQxMTMxNgAAAAJfMQQAAAARcG9vbEludGVncmFsU1RBVEUIBQAAAA0kdDAxMTE5NDExMzE2AAAAAl8yBAAAAAlwb29sREVCVUcIBQAAAA0kdDAxMTE5NDExMzE2AAAAAl8zBAAAAAVNVUxUMwAAAAAAAAAD6AQAAAAPc3Rha2VkQnlVc2VyS0VZCQEAAAAPa2V5U3Rha2VkQnlVc2VyAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADGxwQXNzZXRJZFN0cgQAAAAMc3Rha2VkQnlVc2VyCQEAAAAKcmVhZFN0YWtlZAAAAAEFAAAAD3N0YWtlZEJ5VXNlcktFWQQAAAAQd3hUb0NsYWltVXNlcktFWQkBAAAAEGtleVd4VG9DbGFpbVVzZXIAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBAAAACN3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodEtFWQkBAAAAI2tleVd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0AAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3RLRVkJAQAAABprZXlXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAAAAAIFAAAADGxwQXNzZXRJZFN0cgUAAAAOdXNlckFkZHJlc3NTdHIEAAAADXd4VG9DbGFpbVVzZXIJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABB3eFRvQ2xhaW1Vc2VyS0VZBAAAACZ3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodE9yWmVybwkBAAAADGdldEludE9yWmVybwAAAAIFAAAABHRoaXMFAAAAI3d4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0S0VZBAAAABd3eFBlckxwSW50ZWdyYWxVc2VyTGFzdAkBAAAAG2NhbGNXeFBlckxwSW50ZWdyYWxVc2VyTGFzdAAAAAQJAAE2AAAAAQUAAAAMc3Rha2VkQnlVc2VyCQABNgAAAAEFAAAAJnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0VXBkSGVpZ2h0T3JaZXJvBQAAABJ3eFBlckxwSW50ZWdyYWxOZXcFAAAAGnd4UGVyTHBJbnRlZ3JhbFVzZXJMYXN0S0VZBAAAAAZNVUxUMTEJAABoAAAAAgUAAAAFTVVMVDgFAAAABU1VTFQzBAAAABB3eFRvQ2xhaW1Vc2VyTmV3CQABNwAAAAIJAAE2AAAAAQUAAAANd3hUb0NsYWltVXNlcgkAATwAAAADCQABOAAAAAIFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwUAAAAXd3hQZXJMcEludGVncmFsVXNlckxhc3QJAAE2AAAAAQUAAAAMc3Rha2VkQnlVc2VyCQABNgAAAAEFAAAABk1VTFQxMQQAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3ROZXcFAAAAEnd4UGVyTHBJbnRlZ3JhbE5ldwQAAAAjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHROZXcFAAAABmhlaWdodAQAAAAFZGVidWcJAAS5AAAAAgkABEwAAAACAgAAABF3eFRvQ2xhaW1Vc2VyTmV3PQkABEwAAAACCQABpgAAAAEFAAAAEHd4VG9DbGFpbVVzZXJOZXcJAARMAAAAAgIAAAAYd3hQZXJMcEludGVncmFsVXNlckxhc3Q9CQAETAAAAAIJAAGmAAAAAQUAAAAXd3hQZXJMcEludGVncmFsVXNlckxhc3QJAARMAAAAAgIAAAANc3Rha2VkQnlVc2VyPQkABEwAAAACCQABpAAAAAEFAAAADHN0YWtlZEJ5VXNlcgkABEwAAAACAgAAAApwb29sREVCVUc9CQAETAAAAAIFAAAACXBvb2xERUJVRwkABEwAAAACAgAAAAdoZWlnaHQ9CQAETAAAAAIJAAGkAAAAAQUAAAAGaGVpZ2h0BQAAAANuaWwCAAAAAjo6CQAFFQAAAAMFAAAAEHd4VG9DbGFpbVVzZXJOZXcJAAROAAAAAgUAAAARcG9vbEludGVncmFsU1RBVEUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQd3hUb0NsYWltVXNlcktFWQkAAaYAAAABBQAAABB3eFRvQ2xhaW1Vc2VyTmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAACN3eFBlckxwSW50ZWdyYWxVc2VyTGFzdFVwZEhlaWdodEtFWQUAAAAjd3hQZXJMcEludGVncmFsVXNlckxhc3RVcGRIZWlnaHROZXcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3RLRVkJAAGmAAAAAQUAAAAad3hQZXJMcEludGVncmFsVXNlckxhc3ROZXcFAAAAA25pbAUAAAAFZGVidWcBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAA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byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAVzdGFrZQAAAAADCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAANGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAJbHBBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADGxwQXNzZXRJZFN0cgkAAlgAAAABBQAAAAlscEFzc2V0SWQEAAAABmFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAADnBvb2xBZGRyZXNzU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcAAAABBQAAAAxscEFzc2V0SWRTdHIJAAEsAAAAAgIAAAAVdW5zdXBwb3J0ZWQgbHAgYXNzZXQgBQAAAAxscEFzc2V0SWRTdHIEAAAACWNhbGxlclN0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJBZGRyZXNzU3RyAwkAAAAAAAACBQAAAAljYWxsZXJTdHIFAAAADnBvb2xBZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgUAAAAJY2FsbGVyU3RyBAAAAA9zdGFrZWRCeVVzZXJLRVkJAQAAAA9rZXlTdGFrZWRCeVVzZXIAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyBAAAAA5zdGFrZWRUb3RhbEtFWQkBAAAADmtleVN0YWtlZFRvdGFsAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAAxzdGFrZWRCeVVzZXIJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAPc3Rha2VkQnlVc2VyS0VZBAAAAAtzdGFrZWRUb3RhbAkBAAAACnJlYWRTdGFrZWQAAAABBQAAAA5zdGFrZWRUb3RhbEtFWQQAAAANJHQwMTU0MTUxNTUzMgkBAAAAEHJlZnJlc2hJTlRFR1JBTFMAAAAEBQAAAAxscEFzc2V0SWRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAA5wb29sQWRkcmVzc1N0cgUAAAAGYW1vdW50BAAAABB3eFRvQ2xhaW1Vc2VyTmV3CAUAAAANJHQwMTU0MTUxNTUzMgAAAAJfMQQAAAANaW50ZWdyYWxTVEFURQgFAAAADSR0MDE1NDE1MTU1MzIAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMTU0MTUxNTUzMgAAAAJfMwkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9zdGFrZWRCeVVzZXJLRVkJAABkAAAAAgUAAAAMc3Rha2VkQnlVc2VyBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADnN0YWtlZFRvdGFsS0VZCQAAZAAAAAIFAAAAC3N0YWtlZFRvdGFsBQAAAAZhbW91bnQJAARMAAAAAgkBAAAAFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAUCAAAABXN0YWtlBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyBQAAAAZhbW91bnQIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAUAAAANaW50ZWdyYWxTVEFURQAAAAFpAQAAAAd1bnN0YWtlAAAAAgAAAAxscEFzc2V0SWRTdHIAAAAGYW1vdW50BAAAAAlscEFzc2V0SWQJAAJZAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAA5wb29sQWRkcmVzc1N0cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nAAAAAQUAAAAMbHBBc3NldElkU3RyCQABLAAAAAICAAAAFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUAAAAMbHBBc3NldElkU3RyBAAAAAlwb29sQWRkb24JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAFmtleVN0YWJsZVBvb2xBZGRvbkFkZHIAAAAABQAAAA5wb29sQWRkcmVzc1N0cgQAAAAJY2FsbGVyU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAOdXNlckFkZHJlc3NTdHIDAwkAAAAAAAACBQAAAAljYWxsZXJTdHIFAAAADnBvb2xBZGRyZXNzU3RyBgkAAAAAAAACBQAAAAljYWxsZXJTdHIFAAAACXBvb2xBZGRvbgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIFAAAACWNhbGxlclN0cgQAAAAPc3Rha2VkQnlVc2VyS0VZCQEAAAAPa2V5U3Rha2VkQnlVc2VyAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADGxwQXNzZXRJZFN0cgQAAAAOc3Rha2VkVG90YWxLRVkJAQAAAA5rZXlTdGFrZWRUb3RhbAAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAAMc3Rha2VkQnlVc2VyCQEAAAAKcmVhZFN0YWtlZAAAAAEFAAAAD3N0YWtlZEJ5VXNlcktFWQQAAAALc3Rha2VkVG90YWwJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAOc3Rha2VkVG90YWxLRVkEAAAADSR0MDE2NjY5MTY3ODcJAQAAABByZWZyZXNoSU5URUdSQUxTAAAABAUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAOcG9vbEFkZHJlc3NTdHIJAQAAAAEtAAAAAQUAAAAGYW1vdW50BAAAABB3eFRvQ2xhaW1Vc2VyTmV3CAUAAAANJHQwMTY2NjkxNjc4NwAAAAJfMQQAAAANaW50ZWdyYWxTVEFURQgFAAAADSR0MDE2NjY5MTY3ODcAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMTY2NjkxNjc4NwAAAAJfMwMJAABmAAAAAgUAAAAGYW1vdW50BQAAAAxzdGFrZWRCeVVzZXIJAAACAAAAAQIAAAAkcGFzc2VkIGFtb3VudCBpcyBsZXNzIHRoZW4gYXZhaWxhYmxlCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD3N0YWtlZEJ5VXNlcktFWQkAAGUAAAACBQAAAAxzdGFrZWRCeVVzZXIFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOc3Rha2VkVG90YWxLRVkJAABlAAAAAgUAAAALc3Rha2VkVG90YWwFAAAABmFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAAJbHBBc3NldElkCQAETAAAAAIJAQAAABVPcGVyYXRpb25IaXN0b3J5RW50cnkAAAAFAgAAAAd1bnN0YWtlBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyBQAAAAZhbW91bnQIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAUAAAANaW50ZWdyYWxTVEFURQAAAAFpAQAAAAdjbGFpbVd4AAAAAQAAAAxscEFzc2V0SWRTdHIEAAAAC3VzZXJBZGRyZXNzCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJBZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAOcG9vbEFkZHJlc3NTdHIJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NPckZhaWwAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAACZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEFAAAADGxwQXNzZXRJZFN0cgQAAAAQY2xhaW1lZEJ5VXNlcktFWQkBAAAAEGtleUNsYWltZWRCeVVzZXIAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA9jbGFpbWVkVG90YWxLRVkJAQAAAA9rZXlDbGFpbWVkVG90YWwAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAAGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJAQAAABlrZXlDbGFpbWVkQnlVc2VyTWluUmV3YXJkAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAbY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkS0VZCQEAAAAba2V5Q2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAANY2xhaW1lZEJ5VXNlcgkAATYAAAABCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAQY2xhaW1lZEJ5VXNlcktFWQQAAAAWY2xhaW1lZEJ5VXNlck1pblJld2FyZAkAATYAAAABCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAZY2xhaW1lZEJ5VXNlck1pblJld2FyZEtFWQQAAAAYY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkCQABNgAAAAEJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRLRVkEAAAADGNsYWltZWRUb3RhbAkAATYAAAABCQEAAAAMZ2V0SW50T3JaZXJvAAAAAgUAAAAEdGhpcwUAAAAPY2xhaW1lZFRvdGFsS0VZBAAAAA0kdDAxODAyMzE4MTM1CQEAAAAQcmVmcmVzaElOVEVHUkFMUwAAAAQFAAAADGxwQXNzZXRJZFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADnBvb2xBZGRyZXNzU3RyAAAAAAAAAAAABAAAABB3eFRvQ2xhaW1Vc2VyTmV3CAUAAAANJHQwMTgwMjMxODEzNQAAAAJfMQQAAAANaW50ZWdyYWxTVEFURQgFAAAADSR0MDE4MDIzMTgxMzUAAAACXzIEAAAABWRlYnVnCAUAAAANJHQwMTgwMjMxODEzNQAAAAJfMwQAAAAQYXZhaWxhYmxlVG9DbGFpbQkAATgAAAACBQAAABB3eFRvQ2xhaW1Vc2VyTmV3BQAAAA1jbGFpbWVkQnlVc2VyAwkAAUAAAAACBQAAAAp6ZXJvQmlnSW50BQAAABBhdmFpbGFibGVUb0NsYWltCQAAAgAAAAECAAAAEG5vdGhpbmcgdG8gY2xhaW0EAAAAEnd4QW1vdW50Qm9vc3RUb3RhbAkBAAAABWFzSW50AAAAAQkAAZEAAAACCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAABBib29zdGluZ0NvbnRyYWN0AgAAAAxjbGFpbVd4Qm9vc3QJAARMAAAAAgUAAAAMbHBBc3NldElkU3RyCQAETAAAAAIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAQAAAANbWluUmV3YXJkUGFydAUAAAAQYXZhaWxhYmxlVG9DbGFpbQQAAAAPYm9vc3RSZXdhcmRQYXJ0CQABmQAAAAEJAARMAAAAAgkAATkAAAACBQAAAA1taW5SZXdhcmRQYXJ0CQABNgAAAAEAAAAAAAAAAAIJAARMAAAAAgkAATYAAAABBQAAABJ3eEFtb3VudEJvb3N0VG90YWwFAAAAA25pbAQAAAAJd3hBc3NldElkCQEAAAAMYXNCeXRlVmVjdG9yAAAAAQkAAZEAAAACCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAABBlbWlzc2lvbkNvbnRyYWN0AgAAAARlbWl0CQAETAAAAAIFAAAADW1pblJld2FyZFBhcnQFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAABAAAAAllbWl0Qm9vc3QJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGVtaXQJAARMAAAAAgUAAAAPYm9vc3RSZXdhcmRQYXJ0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAJZW1pdEJvb3N0BQAAAAllbWl0Qm9vc3QEAAAAEmNsYWltZWRCeVVzZXJWYWx1ZQkAATcAAAACBQAAAA1jbGFpbWVkQnlVc2VyBQAAABBhdmFpbGFibGVUb0NsYWltBAAAAB5jbGFpbWVkQnlVc2VyTWluUmV3YXJkUGx1c1BhcnQJAAE3AAAAAgUAAAAWY2xhaW1lZEJ5VXNlck1pblJld2FyZAUAAAANbWluUmV3YXJkUGFydAQAAAArY2xhaW1lZEJ5VXNlckJvb3N0UmV3YXJkUGx1c0Jvb3N0UmV3YXJkUGFydAkAATcAAAACBQAAABZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBQAAAA1taW5SZXdhcmRQYXJ0BAAAACBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkAATcAAAACBQAAABZjbGFpbWVkQnlVc2VyTWluUmV3YXJkBQAAAA1taW5SZXdhcmRQYXJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEGNsYWltZWRCeVVzZXJLRVkJAAGmAAAAAQUAAAASY2xhaW1lZEJ5VXNlclZhbHVlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGWNsYWltZWRCeVVzZXJNaW5SZXdhcmRLRVkJAAGmAAAAAQUAAAAeY2xhaW1lZEJ5VXNlck1pblJld2FyZFBsdXNQYXJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAG2NsYWltZWRCeVVzZXJCb29zdFJld2FyZEtFWQkAAaYAAAABBQAAACtjbGFpbWVkQnlVc2VyQm9vc3RSZXdhcmRQbHVzQm9vc3RSZXdhcmRQYXJ0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2NsYWltZWRUb3RhbEtFWQkAAaYAAAABBQAAACBjbGFpbWVkVG90YWxQbHVzQXZhaWxhYmxlVG9DbGFpbQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAt1c2VyQWRkcmVzcwkAAaAAAAABBQAAAA1taW5SZXdhcmRQYXJ0BQAAAAl3eEFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MJAAGgAAAAAQUAAAAPYm9vc3RSZXdhcmRQYXJ0BQAAAAl3eEFzc2V0SWQJAARMAAAAAgkBAAAAFU9wZXJhdGlvbkhpc3RvcnlFbnRyeQAAAAUCAAAABWNsYWltBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAMbHBBc3NldElkU3RyCQABoAAAAAEFAAAAEGF2YWlsYWJsZVRvQ2xhaW0IBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAPY2xhaW1XeFJFQURPTkxZAAAAAgAAAAxscEFzc2V0SWRTdHIAAAAOdXNlckFkZHJlc3NTdHIEAAAAD3N0YWtlZEJ5VXNlcktFWQkBAAAAD2tleVN0YWtlZEJ5VXNlcgAAAAIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAxscEFzc2V0SWRTdHIEAAAADnN0YWtlZFRvdGFsS0VZCQEAAAAOa2V5U3Rha2VkVG90YWwAAAABBQAAAAxscEFzc2V0SWRTdHIEAAAAEGNsYWltZWRCeVVzZXJLRVkJAQAAABBrZXlDbGFpbWVkQnlVc2VyAAAAAgUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAMc3Rha2VkQnlVc2VyCQEAAAAKcmVhZFN0YWtlZAAAAAEFAAAAD3N0YWtlZEJ5VXNlcktFWQQAAAALc3Rha2VkVG90YWwJAQAAAApyZWFkU3Rha2VkAAAAAQUAAAAOc3Rha2VkVG90YWxLRVkEAAAADWNsYWltZWRCeVVzZXIJAQAAAAxnZXRJbnRPclplcm8AAAACBQAAAAR0aGlzBQAAABBjbGFpbWVkQnlVc2VyS0VZBAAAAA5wb29sQWRkcmVzc1N0cgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc09yRmFpbAAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAJmtleUZhY3RvcnlMcEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAQUAAAAMbHBBc3NldElkU3RyBAAAAApwb29sV2VpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABRrZXlGYWN0b3J5UG9vbFdlaWdodAAAAAEFAAAADnBvb2xBZGRyZXNzU3RyBAAAABJ3eEVtaXNzaW9uUGVyQmxvY2sJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAAea2V5RW1pc3Npb25SYXRlUGVyQmxvY2tDdXJyZW50AAAAAAQAAAASZW1pc3Npb25TdGFydEJsb2NrCQEAAAAMZ2V0SW50T3JGYWlsAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkBAAAAFWtleUVtaXNzaW9uU3RhcnRCbG9jawAAAAAEAAAADHBhc3NlZEJsb2NrcwMJAABmAAAAAgUAAAASZW1pc3Npb25TdGFydEJsb2NrBQAAAAZoZWlnaHQAAAAAAAAAAAAJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJlbWlzc2lvblN0YXJ0QmxvY2sEAAAADnBvb2xXeEVtaXNzaW9uCQAAawAAAAMJAABoAAAAAgUAAAASd3hFbWlzc2lvblBlckJsb2NrBQAAAAxwYXNzZWRCbG9ja3MFAAAACnBvb2xXZWlnaHQFAAAADlBPT0xXRUlHSFRNVUxUBAAAAAx1c2VyV3hSZXdhcmQJAABrAAAAAwUAAAAOcG9vbFd4RW1pc3Npb24FAAAADHN0YWtlZEJ5VXNlcgUAAAALc3Rha2VkVG90YWwEAAAADSR0MDIwNzIwMjA4MzIJAQAAABByZWZyZXNoSU5URUdSQUxTAAAABAUAAAAMbHBBc3NldElkU3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAOcG9vbEFkZHJlc3NTdHIAAAAAAAAAAAAEAAAAEHd4VG9DbGFpbVVzZXJOZXcIBQAAAA0kdDAyMDcyMDIwODMyAAAAAl8xBAAAAA1pbnRlZ3JhbFNUQVRFCAUAAAANJHQwMjA3MjAyMDgzMgAAAAJfMgQAAAAFZGVidWcIBQAAAA0kdDAyMDcyMDIwODMyAAAAAl8zBAAAABBhdmFpbGFibGVUb0NsYWltCQABOAAAAAIFAAAAEHd4VG9DbGFpbVVzZXJOZXcJAAE2AAAAAQUAAAANY2xhaW1lZEJ5VXNlcgQAAAAOYm9vc3RJbnZSZXN1bHQJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAEGJvb3N0aW5nQ29udHJhY3QCAAAAFGNsYWltV3hCb29zdFJFQURPTkxZCQAETAAAAAIFAAAADGxwQXNzZXRJZFN0cgkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAADbmlsBQAAAANuaWwEAAAAEnd4QW1vdW50Qm9vc3RUb3RhbAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA5ib29zdEludlJlc3VsdAAAAAAAAAAAAAQAAAAKYm9vc3REZWJ1ZwkBAAAACGFzU3RyaW5nAAAAAQkAAZEAAAACBQAAAA5ib29zdEludlJlc3VsdAAAAAAAAAAAAQQAAAANbWluUmV3YXJkUGFydAUAAAAQYXZhaWxhYmxlVG9DbGFpbQQAAAAPYm9vc3RSZXdhcmRQYXJ0CQABmQAAAAEJAARMAAAAAgkAATkAAAACBQAAAA1taW5SZXdhcmRQYXJ0CQABNgAAAAEAAAAAAAAAAAIJAARMAAAAAgkAATYAAAABBQAAABJ3eEFtb3VudEJvb3N0VG90YWwFAAAAA25pbAQAAAALdG90YWxSZXdhcmQJAAE3AAAAAgUAAAANbWluUmV3YXJkUGFydAUAAAAPYm9vc3RSZXdhcmRQYXJ0CQAFFAAAAAIFAAAAA25pbAkABLkAAAACCQAETAAAAAICAAAADiVzJXMlZCVkJWQlZCVzCQAETAAAAAIFAAAADGxwQXNzZXRJZFN0cgkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgkABEwAAAACCQABpgAAAAEFAAAAC3RvdGFsUmV3YXJkCQAETAAAAAIJAAGkAAAAAQUAAAANY2xhaW1lZEJ5VXNlcgkABEwAAAACCQABpgAAAAEFAAAADW1pblJld2FyZFBhcnQJAARMAAAAAgkAAaYAAAABBQAAAA9ib29zdFJld2FyZFBhcnQJAARMAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAVkZWJ1ZwIAAAACOjoJAAGkAAAAAQUAAAAMdXNlcld4UmV3YXJkAgAAAA46OkJPT1NUREVCVUc6OgUAAAAKYm9vc3REZWJ1ZwUAAAADbmlsBQAAAANTRVAAAAABaQEAAAAOb25Nb2RpZnlXZWlnaHQAAAACAAAADGxwQXNzZXRJZFN0cgAAAA5wb29sQWRkcmVzc1N0cgMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAPZmFjdG9yeUNvbnRyYWN0CQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAANJHQwMjE3NDUyMTg1NQkBAAAAFHJlZnJlc2hQb29sSU5URUdSQUxTAAAAAwUAAAAMbHBBc3NldElkU3RyBQAAAA5wb29sQWRkcmVzc1N0cgAAAAAAAAAAAAQAAAASd3hQZXJMcEludGVncmFsTmV3CAUAAAANJHQwMjE3NDUyMTg1NQAAAAJfMQQAAAARcG9vbEludGVncmFsU1RBVEUIBQAAAA0kdDAyMTc0NTIxODU1AAAAAl8yBAAAAAlwb29sREVCVUcIBQAAAA0kdDAyMTc0NTIxODU1AAAAAl8zBQAAABFwb29sSW50ZWdyYWxTVEFURQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXnKVxVe", "chainId": 84, "height": 2096239, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3AKn7adiUhyer32L4ETErbBL1nodvwsVk8QGF4sKEg27 Next: HLNGxu9TLaerUEpJcQtmogbk9NNM9ti9MR3q4pH2aa2A Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = 8
55
6-let b = makeString(["%s", "fee"], a)
6+let b = 100000000
77
8-let c = makeString(["%s", "usdnAssetId"], a)
8+let c = 18
99
10-let d = makeString(["%s", "epochLength"], a)
10+let d = toBigInt(1000000000000000000)
1111
12-let e = makeString(["%s", "finalizeReward"], a)
12+let e = "__"
1313
14-let f = makeString(["%s", "wxAssetId"], a)
14+let f = b
1515
16-let g = makeString(["%s", "assetsStoreContract"], a)
16+let g = toBigInt(0)
1717
18-let h = makeString(["%s", "userPoolContract"], a)
18+let h = toBigInt(1)
1919
20-let i = makeString(["%s", "emissionContract"], a)
21-
22-let j = makeString(["%s", "boostingContract"], a)
23-
24-let k = makeString(["%s", "factoryContract"], a)
25-
26-let l = makeString(["%s", "votingEmissionContract"], a)
27-
28-func m (n) = valueOrErrorMessage(getString(this, n), (n + " is not defined"))
29-
30-
31-func o (p,q) = makeString(["%s%s%s", "inList", p, q], a)
32-
33-
34-func r (p,q) = makeString(["%s%s%s", "suggestIndex", p, q], a)
35-
36-
37-func s (p,q,t) = makeString(["%s%s%s%d", "startHeight", p, q, toString(t)], a)
38-
39-
40-func u (p,q,t) = makeString(["%s%s%s%d", "votingResult", p, q, toString(t)], a)
41-
42-
43-func v (w,x) = makeString(["%d%d", w, x], a)
44-
45-
46-func y (p,q,t,z) = makeString(["%s%s%s%d%s", "vote", p, q, toString(t), z], a)
47-
48-
49-func A (B,C) = {
50- let n = if (C)
51- then makeString(["%d%s", B, "yes"], a)
52- else makeString(["%d%s", B, "no"], a)
53- n
20+func i (j) = {
21+ let k = j
22+ if ($isInstanceOf(k, "List[Any]"))
23+ then {
24+ let l = k
25+ l
26+ }
27+ else throw("fail to cast into List[Any]")
5428 }
5529
5630
57-func D () = "%s__managerPublicKey"
31+func m (j) = {
32+ let k = j
33+ if ($isInstanceOf(k, "Int"))
34+ then {
35+ let n = k
36+ n
37+ }
38+ else throw("fail to cast into Int")
39+ }
5840
5941
60-func E () = "%s__pendingManagerPublicKey"
42+func o (j) = {
43+ let k = j
44+ if ($isInstanceOf(k, "String"))
45+ then {
46+ let p = k
47+ p
48+ }
49+ else throw("fail to cast into Int")
50+ }
6151
6252
63-let F = addressFromStringValue(m(g))
53+func q (j) = {
54+ let k = j
55+ if ($isInstanceOf(k, "ByteVector"))
56+ then {
57+ let r = k
58+ r
59+ }
60+ else throw("fail to cast into Int")
61+ }
6462
65-let G = addressFromStringValue(m(j))
6663
67-let H = addressFromStringValue(m(i))
64+func s (t,u) = valueOrErrorMessage(getString(t, u), (("mandatory this." + u) + " is not defined"))
6865
69-let I = addressFromStringValue(m(k))
7066
71-let J = addressFromStringValue(m(h))
67+func v (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
7268
73-let K = addressFromStringValue(m(l))
7469
75-func L () = {
76- let M = getString(D())
77- if ($isInstanceOf(M, "String"))
70+func w (t,u) = valueOrElse(getInteger(t, u), 0)
71+
72+
73+func x (t,u,y) = valueOrElse(getInteger(t, u), y)
74+
75+
76+func z (t,u) = valueOrErrorMessage(getInteger(t, u), (("mandatory this." + u) + " is not defined"))
77+
78+
79+func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
80+
81+
82+func D (j,E) = toInt(fraction(j, toBigInt(E), d))
83+
84+
85+func F () = "%s%s__config__factoryAddress"
86+
87+
88+let G = 1
89+
90+let H = 2
91+
92+let I = 3
93+
94+let J = 4
95+
96+let K = 5
97+
98+let L = 6
99+
100+let M = 7
101+
102+func N () = "%s__factoryConfig"
103+
104+
105+func O () = "%s__managerPublicKey"
106+
107+
108+func P () = "%s__pendingManagerPublicKey"
109+
110+
111+func Q () = "%s__stablePoolAddonAddr"
112+
113+
114+func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
115+
116+
117+func T () = "%s__lpTokensList"
118+
119+
120+func U (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
121+
122+
123+func V (W) = makeString(["%s%s", "poolWeight", W], e)
124+
125+
126+func X (Y) = split(valueOrElse(getString(Y, T()), ""), e)
127+
128+
129+func Z (Y) = split(v(Y, N()), e)
130+
131+
132+func aa (ab) = addressFromStringValue(ab[H])
133+
134+
135+func ac (ab) = addressFromStringValue(ab[K])
136+
137+
138+func ad (ab) = addressFromStringValue(ab[G])
139+
140+
141+func ae () = "%s%s__ratePerBlock__current"
142+
143+
144+func af () = "%s%s__ratePerBlockMax__current"
145+
146+
147+func ag () = "%s%s__emission__startBlock"
148+
149+
150+func ah () = "%s%s__emission__duration"
151+
152+
153+func ai () = "%s%s__emission__endBlock"
154+
155+
156+func aj (ak,al) = makeString(["%s%s%s__staked", ak, al], e)
157+
158+
159+func am (al) = ("%s%s%s__staked__total__" + al)
160+
161+
162+func an (al,ak) = makeString(["%s%s%s__claimed", ak, al], e)
163+
164+
165+func ao (al,ak) = makeString(["%s%s%s__claimedMinReward", ak, al], e)
166+
167+
168+func ap (al,ak) = makeString(["%s%s%s__claimedBoostReward", ak, al], e)
169+
170+
171+func aq (al) = makeString(["%s%s%s__claimed", "total", al], e)
172+
173+
174+func ar (u) = valueOrElse(getInteger(this, u), 0)
175+
176+
177+func as (at) = makeString(["%s%s%s", at, "total", "bal"], e)
178+
179+
180+func au (at,av) = makeString(["%s%s%s", at, av, "bal"], e)
181+
182+
183+func aw (at) = makeString(["%s%s%s", at, "total", "balINT"], e)
184+
185+
186+func ax (at,av) = makeString(["%s%s%s", at, av, "balINT"], e)
187+
188+
189+func ay (at) = makeString(["%s%s%s", at, "total", "lastUpd"], e)
190+
191+
192+func az (at,av) = makeString(["%s%s%s", at, av, "lastUpd"], e)
193+
194+
195+func aA (at) = makeString(["%s%s%s%s", at, "common", "lpInt"], e)
196+
197+
198+func aB (at) = makeString(["%s%s%s%s", at, "common", "lpIntH"], e)
199+
200+
201+func aC (at,av) = makeString(["%s%s%s%s", at, av, "lpInt"], e)
202+
203+
204+func aD (at,av) = makeString(["%s%s%s%s", at, av, "lpIntH"], e)
205+
206+
207+func aE (at) = makeString(["%s", at, "wxPerLp"], e)
208+
209+
210+func aF (at) = makeString(["%s", at, "wxPerLpX18"], e)
211+
212+
213+func aG (at,av) = makeString(["%s%s%s%s", at, av, "uIntL"], e)
214+
215+
216+func aH (aI,av,aJ) = makeString(["%s%s%s%s__history", aI, av, aJ], e)
217+
218+
219+func aK (av,at,aI,aL) = makeString(["%s%s%s%d%d%d", av, at, aI, toString(height), toString(lastBlock.timestamp), toString(aL)], e)
220+
221+
222+func aM (aI,av,at,aL,aN) = StringEntry(aH(aI, av, toBase58String(aN)), aK(av, at, aI, aL))
223+
224+
225+let aO = s(this, F())
226+
227+let aP = addressFromStringValue(aO)
228+
229+let ab = Z(aP)
230+
231+let aQ = ac(ab)
232+
233+let aR = aa(ab)
234+
235+func aS (aT,aU,aV,aW) = if (if ((aU == g))
236+ then (aT > g)
237+ else false)
238+ then g
239+ else if ((aT == g))
240+ then aV
241+ else if (if ((aU > g))
242+ then (aT > g)
243+ else false)
244+ then value(parseBigInt(s(this, aW)))
245+ else throw("calcWxPerLpIntegralUserLast: unexpected state")
246+
247+
248+func aX (al,aY,aZ) = {
249+ let ba = am(al)
250+ let bb = toBigInt(ar(ba))
251+ let bc = if ((bb == g))
252+ then h
253+ else bb
254+ let bd = getIntegerValue(aP, V(aY))
255+ let be = z(aQ, ag())
256+ let bf = 1000
257+ let bg = (z(aQ, ae()) * bf)
258+ let bh = fraction(bg, bd, (f * 3))
259+ let bi = aA(al)
260+ let bj = aB(al)
261+ let bk = aE(al)
262+ let bl = x(this, bj, be)
263+ let bm = w(this, bi)
264+ let bn = 0
265+ let bo = max([(height - bl), 0])
266+ let bp = if ((bn != 0))
267+ then toBigInt(bn)
268+ else fraction(toBigInt(bh), toBigInt(b), bc)
269+ let bq = (bb + toBigInt(aZ))
270+ let br = if ((bq == g))
271+ then h
272+ else bq
273+ let aV = (toBigInt(bm) + (bp * toBigInt(bo)))
274+ let bs = (toBigInt(bh) / br)
275+ let bt = height
276+ let bu = makeString(["wxPerLpIntegralNew=", toString(aV), "dh=", toString(bo), "wxPerLpX3=", toString(bp), "stakedTotal=", toString(bb), "poolWxEmissionPerBlockX3=", toString(bh), "wxEmissionPerBlockX3=", toString(bg), "poolWeight=", toString(bd)], "::")
277+ $Tuple3(aV, [StringEntry(bi, toString(aV)), IntegerEntry(bj, bt), StringEntry(bk, toString(bs))], bu)
278+ }
279+
280+
281+func bv (al,ak,aY,aZ) = {
282+ let bw = aX(al, aY, aZ)
283+ let aV = bw._1
284+ let bx = bw._2
285+ let by = bw._3
286+ let bf = 1000
287+ let bz = aj(ak, al)
288+ let aT = ar(bz)
289+ let bA = aC(al, ak)
290+ let bB = aD(al, ak)
291+ let aW = aG(al, ak)
292+ let bC = w(this, bA)
293+ let aU = w(this, bB)
294+ let bD = aS(toBigInt(aT), toBigInt(aU), aV, aW)
295+ let bE = (b * bf)
296+ let bF = (toBigInt(bC) + fraction((aV - bD), toBigInt(aT), toBigInt(bE)))
297+ let bG = aV
298+ let bH = height
299+ let bu = makeString(["wxToClaimUserNew=", toString(bF), "wxPerLpIntegralUserLast=", toString(bD), "stakedByUser=", toString(aT), "poolDEBUG=", by, "height=", toString(height)], "::")
300+ $Tuple3(bF, (bx ++ [StringEntry(bA, toString(bF)), IntegerEntry(bB, bH), StringEntry(aW, toString(bG))]), bu)
301+ }
302+
303+
304+func bI () = {
305+ let k = getString(O())
306+ if ($isInstanceOf(k, "String"))
78307 then {
79- let N = M
80- fromBase58String(N)
308+ let bJ = k
309+ fromBase58String(bJ)
81310 }
82- else if ($isInstanceOf(M, "Unit"))
311+ else if ($isInstanceOf(k, "Unit"))
83312 then unit
84313 else throw("Match error")
85314 }
86315
87316
88-func O () = {
89- let M = getString(E())
90- if ($isInstanceOf(M, "String"))
317+func bK () = {
318+ let k = getString(P())
319+ if ($isInstanceOf(k, "String"))
91320 then {
92- let N = M
93- fromBase58String(N)
321+ let bJ = k
322+ fromBase58String(bJ)
94323 }
95- else if ($isInstanceOf(M, "Unit"))
324+ else if ($isInstanceOf(k, "Unit"))
96325 then unit
97326 else throw("Match error")
98327 }
99328
100329
101-func P (Q) = {
102- let R = throw("permission denied")
103- let M = L()
104- if ($isInstanceOf(M, "ByteVector"))
330+func bL (bM) = {
331+ let bN = throw("Permission denied")
332+ let k = bI()
333+ if ($isInstanceOf(k, "ByteVector"))
105334 then {
106- let S = M
107- if ((Q.callerPublicKey == S))
335+ let bO = k
336+ if ((bM.callerPublicKey == bO))
108337 then true
109- else R
338+ else bN
110339 }
111- else if ($isInstanceOf(M, "Unit"))
112- then if ((Q.caller == this))
340+ else if ($isInstanceOf(k, "Unit"))
341+ then if ((bM.caller == this))
113342 then true
114- else R
343+ else bN
115344 else throw("Match error")
116345 }
117346
118347
119-func T (U) = {
120- let M = U
121- if ($isInstanceOf(M, "Int"))
122- then {
123- let V = M
124- V
125- }
126- else throw("failed to cast into Integer")
127- }
128-
129-
130-@Callable(Q)
131-func constructor (W,X,Y,Z,aa,ab,ac,ad,ae,af,ag) = {
132- let ah = [P(Q), if (isDefined(addressFromString(W)))
133- then true
134- else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(X)))
135- then true
136- else throw("Invalid boosting contract address"), if (isDefined(addressFromString(aa)))
137- then true
138- else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(Y)))
139- then true
140- else throw("Invalid emission contract address"), if (isDefined(addressFromString(Z)))
141- then true
142- else throw("Invalid factory contract address"), if ((ac >= 0))
143- then true
144- else throw("Invalid fee amount"), if ((ae > 0))
145- then true
146- else throw("Invalid voting duration"), if ((ag > 0))
147- then true
148- else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(ad))))
149- then true
150- else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(af))))
151- then true
152- else throw("Invalid USDN asset ID")]
153- if ((ah == ah))
154- then $Tuple2([StringEntry(g, W), StringEntry(j, X), StringEntry(i, Y), StringEntry(k, Z), StringEntry(h, aa), StringEntry(l, ab), IntegerEntry(b, ac), IntegerEntry(d, ae), IntegerEntry(e, ag), StringEntry(f, ad), StringEntry(c, af)], unit)
348+@Callable(bM)
349+func constructor (bP) = {
350+ let bQ = bL(bM)
351+ if ((bQ == bQ))
352+ then [StringEntry(F(), bP)]
155353 else throw("Strict value is not equal to itself.")
156354 }
157355
158356
159357
160-@Callable(Q)
161-func suggest (p,q) = {
162- let ai = value(Q.payments[0])
163- let aj = valueOrErrorMessage(assetInfo(fromBase58String(p)), "invalid amountAssetId ID")
164- let ah = [if ((aj.issuer == Q.caller))
165- then true
166- else throw("asset can only be suggested by its issuer"), if ((aj.scripted == false))
167- then true
168- else throw("asset is smart"), if ((toBase58String(value(ai.assetId)) == value(getString(f))))
169- then true
170- else throw("invalid fee asset"), if ((ai.amount == value(getInteger(b))))
171- then true
172- else throw("invalid fee amount"), if ((q == value(getString(c))))
173- then true
174- else throw("priceAssetId is not USDN"), if ((getInteger(o(p, q)) == unit))
175- then true
176- else throw("already in voting list")]
177- if ((ah == ah))
358+@Callable(bM)
359+func setManager (bR) = {
360+ let bQ = bL(bM)
361+ if ((bQ == bQ))
178362 then {
179- let ak = {
180- let M = invoke(J, "statusREADONLY", [p, q], nil)
181- if ($isInstanceOf(M, "String"))
182- then {
183- let N = M
184- if ((N == "active"))
185- then true
186- else throw("user pool is not active")
187- }
188- else throw("user pool is not active")
189- }
190- if ((ak == ak))
191- then {
192- let al = {
193- let M = invoke(F, "isVerifiedREADONLY", [p], nil)
194- if ($isInstanceOf(M, "Boolean"))
195- then {
196- let am = M
197- if (am)
198- then true
199- else throw("asset is not verified")
200- }
201- else throw("asset is not verified")
202- }
203- if ((al == al))
204- then {
205- let an = invoke(H, "burn", nil, [AttachedPayment(ai.assetId, ai.amount)])
206- if ((an == an))
207- then {
208- let ao = {
209- let M = getInteger(r(p, q))
210- if ($isInstanceOf(M, "Int"))
211- then {
212- let ap = M
213- (ap + 1)
214- }
215- else 0
216- }
217- $Tuple2([IntegerEntry(o(p, q), ao), IntegerEntry(s(p, q, ao), height), StringEntry(u(p, q, ao), v("0", "0")), IntegerEntry(r(p, q), ao)], unit)
218- }
219- else throw("Strict value is not equal to itself.")
220- }
221- else throw("Strict value is not equal to itself.")
222- }
363+ let bS = fromBase58String(bR)
364+ if ((bS == bS))
365+ then [StringEntry(P(), bR)]
223366 else throw("Strict value is not equal to itself.")
224367 }
225368 else throw("Strict value is not equal to itself.")
227370
228371
229372
230-@Callable(Q)
231-func vote (p,q,aq) = {
232- let t = value(getInteger(o(p, q)))
233- let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
234- let ah = [if (isDefined(getInteger(o(p, q))))
373+@Callable(bM)
374+func confirmManager () = {
375+ let bT = bK()
376+ let bU = if (isDefined(bT))
235377 then true
236- else throw("the token isn't on the voting list"), if ((ar > height))
237- then true
238- else throw("too late to vote")]
239- if ((ah == ah))
378+ else throw("No pending manager")
379+ if ((bU == bU))
240380 then {
241- let B = invoke(G, "getUserGwxAmountAtHeightREADONLY", [toString(Q.caller), ar], nil)
242- let as = if ((T(B) > 0))
381+ let bV = if ((bM.callerPublicKey == value(bT)))
243382 then true
244- else throw("you don't have gwx")
245- if ((as == as))
246- then {
247- let C = {
248- let M = getString(y(p, q, t, toString(Q.caller)))
249- if ($isInstanceOf(M, "String"))
250- then {
251- let N = M
252- let C = split(N, a)
253- let at = C[1]
254- let au = C[2]
255- let av = if (if ((au == "yes"))
256- then (aq == true)
257- else false)
258- then true
259- else if ((au == "no"))
260- then (aq == false)
261- else false
262- let aw = if (av)
263- then (T(B) == parseIntValue(at))
264- else false
265- let ax = if (if (av)
266- then aw
267- else false)
268- then throw("you already voted")
269- else invoke(this, "cancelVote", [p, q], nil)
270- ax
271- }
272- else if ($isInstanceOf(M, "Unit"))
273- then {
274- let ay = M
275- ay
276- }
277- else throw("Match error")
278- }
279- if ((C == C))
280- then {
281- let az = split(value(getString(u(p, q, t))), a)
282- let aA = az[1]
283- let aB = az[2]
284- let aC = if (aq)
285- then {
286- let aD = (parseIntValue(aA) + T(B))
287-[toString(aD), aB]
288- }
289- else {
290- let aE = (parseIntValue(aB) + T(B))
291-[aA, toString(aE)]
292- }
293- let aF = y(p, q, t, toString(Q.caller))
294- let at = A(toString(T(B)), aq)
295- $Tuple2([StringEntry(u(p, q, t), v(aC[0], aC[1])), StringEntry(aF, at)], unit)
296- }
297- else throw("Strict value is not equal to itself.")
298- }
383+ else throw("You are not pending manager")
384+ if ((bV == bV))
385+ then [StringEntry(O(), toBase58String(value(bT))), DeleteEntry(P())]
299386 else throw("Strict value is not equal to itself.")
300387 }
301388 else throw("Strict value is not equal to itself.")
303390
304391
305392
306-@Callable(Q)
307-func cancelVote (p,q) = {
308- let aG = if ((Q.caller == this))
309- then toString(Q.originCaller)
310- else toString(Q.caller)
311- let t = value(getInteger(o(p, q)))
312- let ah = [if (isDefined(getString(u(p, q, t))))
393+@Callable(bM)
394+func stake () = if ((size(bM.payments) != 1))
395+ then throw("invalid payment - exact one payment must be attached")
396+ else {
397+ let bW = bM.payments[0]
398+ let at = value(bW.assetId)
399+ let al = toBase58String(at)
400+ let aL = bW.amount
401+ let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
402+ let bX = toString(bM.caller)
403+ let ak = if ((bX == aY))
404+ then toString(bM.originCaller)
405+ else bX
406+ let bz = aj(ak, al)
407+ let ba = am(al)
408+ let aT = ar(bz)
409+ let bb = ar(ba)
410+ let bY = bv(al, ak, aY, aL)
411+ let bF = bY._1
412+ let bZ = bY._2
413+ let bu = bY._3
414+ ([IntegerEntry(bz, (aT + aL)), IntegerEntry(ba, (bb + aL)), aM("stake", ak, al, aL, bM.transactionId)] ++ bZ)
415+ }
416+
417+
418+
419+@Callable(bM)
420+func unstake (al,aL) = {
421+ let at = fromBase58String(al)
422+ let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
423+ let ca = valueOrElse(getString(this, Q()), aY)
424+ let bX = toString(bM.caller)
425+ let ak = if (if ((bX == aY))
313426 then true
314- else throw("no vote for assets pair")]
315- if ((ah == ah))
316- then {
317- let C = split(value(getString(y(p, q, t, aG))), a)
318- let at = C[1]
319- let au = C[2]
320- let az = split(value(getString(u(p, q, t))), a)
321- let aA = az[1]
322- let aB = az[2]
323- let aH = if ((au == "yes"))
324- then {
325- let aD = (parseIntValue(aA) - parseIntValue(at))
326- $Tuple2([StringEntry(u(p, q, t), v(toString(aD), aB)), DeleteEntry(y(p, q, t, aG))], unit)
327- }
328- else {
329- let aE = (parseIntValue(aB) - parseIntValue(at))
330- $Tuple2([StringEntry(u(p, q, t), v(aA, toString(aE))), DeleteEntry(y(p, q, t, aG))], unit)
331- }
332- aH
333- }
334- else throw("Strict value is not equal to itself.")
427+ else (bX == ca))
428+ then toString(bM.originCaller)
429+ else bX
430+ let bz = aj(ak, al)
431+ let ba = am(al)
432+ let aT = ar(bz)
433+ let bb = ar(ba)
434+ let cb = bv(al, ak, aY, -(aL))
435+ let bF = cb._1
436+ let bZ = cb._2
437+ let bu = cb._3
438+ if ((aL > aT))
439+ then throw("passed amount is less then available")
440+ else ([IntegerEntry(bz, (aT - aL)), IntegerEntry(ba, (bb - aL)), ScriptTransfer(bM.caller, aL, at), aM("unstake", ak, al, aL, bM.transactionId)] ++ bZ)
335441 }
336442
337443
338444
339-@Callable(Q)
340-func setFee (aI) = {
341- let ah = [P(Q)]
342- if ((ah == ah))
343- then [IntegerEntry(b, aI)]
344- else throw("Strict value is not equal to itself.")
445+@Callable(bM)
446+func claimWx (al) = {
447+ let av = bM.caller
448+ let ak = toString(bM.caller)
449+ let aY = v(aP, U(al))
450+ let cc = an(al, ak)
451+ let cd = aq(al)
452+ let ce = ao(al, ak)
453+ let cf = ap(al, ak)
454+ let cg = toBigInt(w(this, cc))
455+ let ch = toBigInt(w(this, ce))
456+ let ci = toBigInt(w(this, cf))
457+ let cj = toBigInt(w(this, cd))
458+ let ck = bv(al, ak, aY, 0)
459+ let bF = ck._1
460+ let bZ = ck._2
461+ let bu = ck._3
462+ let cl = (bF - cg)
463+ if ((g >= cl))
464+ then throw("nothing to claim")
465+ else {
466+ let cm = m(i(invoke(aR, "claimWxBoost", [al, ak], nil))[0])
467+ let cn = cl
468+ let co = min([(cn * toBigInt(2)), toBigInt(cm)])
469+ let cp = q(i(invoke(aQ, "emit", [cn], nil))[0])
470+ let cq = i(invoke(aQ, "emit", [co], nil))
471+ if ((cq == cq))
472+ then {
473+ let cr = (cg + cl)
474+ let cs = (ch + cn)
475+ let ct = (ch + cn)
476+ let cu = (ch + cn)
477+[StringEntry(cc, toString(cr)), StringEntry(ce, toString(cs)), StringEntry(cf, toString(ct)), StringEntry(cd, toString(cu)), ScriptTransfer(av, toInt(cn), cp), ScriptTransfer(av, toInt(co), cp), aM("claim", ak, al, toInt(cl), bM.transactionId)]
478+ }
479+ else throw("Strict value is not equal to itself.")
480+ }
345481 }
346482
347483
348484
349-@Callable(Q)
350-func finalize (p,q) = {
351- let t = value(getInteger(o(p, q)))
352- let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
353- let ah = [if (isDefined(getInteger(o(p, q))))
354- then true
355- else throw("no assets pair"), if ((height >= ar))
356- then true
357- else throw("insufficient height for completion")]
358- if ((ah == ah))
359- then {
360- let az = split(value(getString(u(p, q, t))), a)
361- let aA = parseIntValue(az[1])
362- let aB = parseIntValue(az[2])
363- let aH = if ((aA > aB))
364- then {
365- let aJ = invoke(I, "setWxEmissionPoolLabel", [p, q], nil)
366- if ((aJ == aJ))
367- then {
368- let aK = invoke(K, "create", [p, q], nil)
369- if ((aK == aK))
370- then $Tuple2([DeleteEntry(o(p, q))], unit)
371- else throw("Strict value is not equal to itself.")
372- }
373- else throw("Strict value is not equal to itself.")
374- }
375- else $Tuple2([DeleteEntry(o(p, q))], unit)
376- aH
377- }
378- else throw("Strict value is not equal to itself.")
485+@Callable(bM)
486+func claimWxREADONLY (al,ak) = {
487+ let bz = aj(ak, al)
488+ let ba = am(al)
489+ let cc = an(al, ak)
490+ let aT = ar(bz)
491+ let bb = ar(ba)
492+ let cg = w(this, cc)
493+ let aY = v(aP, U(al))
494+ let bd = getIntegerValue(aP, V(aY))
495+ let cv = z(aQ, ae())
496+ let be = z(aQ, ag())
497+ let cw = if ((be > height))
498+ then 0
499+ else (height - be)
500+ let cx = fraction((cv * cw), bd, f)
501+ let cy = fraction(cx, aT, bb)
502+ let cz = bv(al, ak, aY, 0)
503+ let bF = cz._1
504+ let bZ = cz._2
505+ let bu = cz._3
506+ let cl = (bF - toBigInt(cg))
507+ let cA = i(invoke(aR, "claimWxBoostREADONLY", [al, ak], nil))
508+ let cm = m(cA[0])
509+ let cB = o(cA[1])
510+ let cn = cl
511+ let co = min([(cn * toBigInt(2)), toBigInt(cm)])
512+ let cC = (cn + co)
513+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", al, ak, toString(cC), toString(cg), toString(cn), toString(co), ((((bu + "::") + toString(cy)) + "::BOOSTDEBUG::") + cB)], e))
379514 }
380515
381516
382517
383-@Callable(Q)
384-func setManager (aL) = {
385- let aM = P(Q)
386- if ((aM == aM))
387- then {
388- let aN = fromBase58String(aL)
389- if ((aN == aN))
390- then [StringEntry(E(), aL)]
391- else throw("Strict value is not equal to itself.")
392- }
393- else throw("Strict value is not equal to itself.")
394- }
518+@Callable(bM)
519+func onModifyWeight (al,aY) = if ((bM.caller != aP))
520+ then throw("permissions denied")
521+ else {
522+ let cD = aX(al, aY, 0)
523+ let aV = cD._1
524+ let bx = cD._2
525+ let by = cD._3
526+ bx
527+ }
395528
396529
397-
398-@Callable(Q)
399-func confirmManager () = {
400- let aO = O()
401- let aP = if (isDefined(aO))
402- then true
403- else throw("no pending manager")
404- if ((aP == aP))
405- then {
406- let aQ = if ((Q.callerPublicKey == value(aO)))
407- then true
408- else throw("you are not pending manager")
409- if ((aQ == aQ))
410- then [StringEntry(D(), toBase58String(value(aO))), DeleteEntry(E())]
411- else throw("Strict value is not equal to itself.")
412- }
413- else throw("Strict value is not equal to itself.")
414- }
415-
416-
417-@Verifier(aR)
418-func aS () = {
419- let aT = {
420- let M = L()
421- if ($isInstanceOf(M, "ByteVector"))
530+@Verifier(cE)
531+func cF () = {
532+ let cG = {
533+ let k = bI()
534+ if ($isInstanceOf(k, "ByteVector"))
422535 then {
423- let S = M
424- S
536+ let bO = k
537+ bO
425538 }
426- else if ($isInstanceOf(M, "Unit"))
427- then aR.senderPublicKey
539+ else if ($isInstanceOf(k, "Unit"))
540+ then cE.senderPublicKey
428541 else throw("Match error")
429542 }
430- sigVerify(aR.bodyBytes, aR.proofs[0], aT)
543+ sigVerify(cE.bodyBytes, cE.proofs[0], cG)
431544 }
432545
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "__"
4+let a = 8
55
6-let b = makeString(["%s", "fee"], a)
6+let b = 100000000
77
8-let c = makeString(["%s", "usdnAssetId"], a)
8+let c = 18
99
10-let d = makeString(["%s", "epochLength"], a)
10+let d = toBigInt(1000000000000000000)
1111
12-let e = makeString(["%s", "finalizeReward"], a)
12+let e = "__"
1313
14-let f = makeString(["%s", "wxAssetId"], a)
14+let f = b
1515
16-let g = makeString(["%s", "assetsStoreContract"], a)
16+let g = toBigInt(0)
1717
18-let h = makeString(["%s", "userPoolContract"], a)
18+let h = toBigInt(1)
1919
20-let i = makeString(["%s", "emissionContract"], a)
21-
22-let j = makeString(["%s", "boostingContract"], a)
23-
24-let k = makeString(["%s", "factoryContract"], a)
25-
26-let l = makeString(["%s", "votingEmissionContract"], a)
27-
28-func m (n) = valueOrErrorMessage(getString(this, n), (n + " is not defined"))
29-
30-
31-func o (p,q) = makeString(["%s%s%s", "inList", p, q], a)
32-
33-
34-func r (p,q) = makeString(["%s%s%s", "suggestIndex", p, q], a)
35-
36-
37-func s (p,q,t) = makeString(["%s%s%s%d", "startHeight", p, q, toString(t)], a)
38-
39-
40-func u (p,q,t) = makeString(["%s%s%s%d", "votingResult", p, q, toString(t)], a)
41-
42-
43-func v (w,x) = makeString(["%d%d", w, x], a)
44-
45-
46-func y (p,q,t,z) = makeString(["%s%s%s%d%s", "vote", p, q, toString(t), z], a)
47-
48-
49-func A (B,C) = {
50- let n = if (C)
51- then makeString(["%d%s", B, "yes"], a)
52- else makeString(["%d%s", B, "no"], a)
53- n
20+func i (j) = {
21+ let k = j
22+ if ($isInstanceOf(k, "List[Any]"))
23+ then {
24+ let l = k
25+ l
26+ }
27+ else throw("fail to cast into List[Any]")
5428 }
5529
5630
57-func D () = "%s__managerPublicKey"
31+func m (j) = {
32+ let k = j
33+ if ($isInstanceOf(k, "Int"))
34+ then {
35+ let n = k
36+ n
37+ }
38+ else throw("fail to cast into Int")
39+ }
5840
5941
60-func E () = "%s__pendingManagerPublicKey"
42+func o (j) = {
43+ let k = j
44+ if ($isInstanceOf(k, "String"))
45+ then {
46+ let p = k
47+ p
48+ }
49+ else throw("fail to cast into Int")
50+ }
6151
6252
63-let F = addressFromStringValue(m(g))
53+func q (j) = {
54+ let k = j
55+ if ($isInstanceOf(k, "ByteVector"))
56+ then {
57+ let r = k
58+ r
59+ }
60+ else throw("fail to cast into Int")
61+ }
6462
65-let G = addressFromStringValue(m(j))
6663
67-let H = addressFromStringValue(m(i))
64+func s (t,u) = valueOrErrorMessage(getString(t, u), (("mandatory this." + u) + " is not defined"))
6865
69-let I = addressFromStringValue(m(k))
7066
71-let J = addressFromStringValue(m(h))
67+func v (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
7268
73-let K = addressFromStringValue(m(l))
7469
75-func L () = {
76- let M = getString(D())
77- if ($isInstanceOf(M, "String"))
70+func w (t,u) = valueOrElse(getInteger(t, u), 0)
71+
72+
73+func x (t,u,y) = valueOrElse(getInteger(t, u), y)
74+
75+
76+func z (t,u) = valueOrErrorMessage(getInteger(t, u), (("mandatory this." + u) + " is not defined"))
77+
78+
79+func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
80+
81+
82+func D (j,E) = toInt(fraction(j, toBigInt(E), d))
83+
84+
85+func F () = "%s%s__config__factoryAddress"
86+
87+
88+let G = 1
89+
90+let H = 2
91+
92+let I = 3
93+
94+let J = 4
95+
96+let K = 5
97+
98+let L = 6
99+
100+let M = 7
101+
102+func N () = "%s__factoryConfig"
103+
104+
105+func O () = "%s__managerPublicKey"
106+
107+
108+func P () = "%s__pendingManagerPublicKey"
109+
110+
111+func Q () = "%s__stablePoolAddonAddr"
112+
113+
114+func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
115+
116+
117+func T () = "%s__lpTokensList"
118+
119+
120+func U (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
121+
122+
123+func V (W) = makeString(["%s%s", "poolWeight", W], e)
124+
125+
126+func X (Y) = split(valueOrElse(getString(Y, T()), ""), e)
127+
128+
129+func Z (Y) = split(v(Y, N()), e)
130+
131+
132+func aa (ab) = addressFromStringValue(ab[H])
133+
134+
135+func ac (ab) = addressFromStringValue(ab[K])
136+
137+
138+func ad (ab) = addressFromStringValue(ab[G])
139+
140+
141+func ae () = "%s%s__ratePerBlock__current"
142+
143+
144+func af () = "%s%s__ratePerBlockMax__current"
145+
146+
147+func ag () = "%s%s__emission__startBlock"
148+
149+
150+func ah () = "%s%s__emission__duration"
151+
152+
153+func ai () = "%s%s__emission__endBlock"
154+
155+
156+func aj (ak,al) = makeString(["%s%s%s__staked", ak, al], e)
157+
158+
159+func am (al) = ("%s%s%s__staked__total__" + al)
160+
161+
162+func an (al,ak) = makeString(["%s%s%s__claimed", ak, al], e)
163+
164+
165+func ao (al,ak) = makeString(["%s%s%s__claimedMinReward", ak, al], e)
166+
167+
168+func ap (al,ak) = makeString(["%s%s%s__claimedBoostReward", ak, al], e)
169+
170+
171+func aq (al) = makeString(["%s%s%s__claimed", "total", al], e)
172+
173+
174+func ar (u) = valueOrElse(getInteger(this, u), 0)
175+
176+
177+func as (at) = makeString(["%s%s%s", at, "total", "bal"], e)
178+
179+
180+func au (at,av) = makeString(["%s%s%s", at, av, "bal"], e)
181+
182+
183+func aw (at) = makeString(["%s%s%s", at, "total", "balINT"], e)
184+
185+
186+func ax (at,av) = makeString(["%s%s%s", at, av, "balINT"], e)
187+
188+
189+func ay (at) = makeString(["%s%s%s", at, "total", "lastUpd"], e)
190+
191+
192+func az (at,av) = makeString(["%s%s%s", at, av, "lastUpd"], e)
193+
194+
195+func aA (at) = makeString(["%s%s%s%s", at, "common", "lpInt"], e)
196+
197+
198+func aB (at) = makeString(["%s%s%s%s", at, "common", "lpIntH"], e)
199+
200+
201+func aC (at,av) = makeString(["%s%s%s%s", at, av, "lpInt"], e)
202+
203+
204+func aD (at,av) = makeString(["%s%s%s%s", at, av, "lpIntH"], e)
205+
206+
207+func aE (at) = makeString(["%s", at, "wxPerLp"], e)
208+
209+
210+func aF (at) = makeString(["%s", at, "wxPerLpX18"], e)
211+
212+
213+func aG (at,av) = makeString(["%s%s%s%s", at, av, "uIntL"], e)
214+
215+
216+func aH (aI,av,aJ) = makeString(["%s%s%s%s__history", aI, av, aJ], e)
217+
218+
219+func aK (av,at,aI,aL) = makeString(["%s%s%s%d%d%d", av, at, aI, toString(height), toString(lastBlock.timestamp), toString(aL)], e)
220+
221+
222+func aM (aI,av,at,aL,aN) = StringEntry(aH(aI, av, toBase58String(aN)), aK(av, at, aI, aL))
223+
224+
225+let aO = s(this, F())
226+
227+let aP = addressFromStringValue(aO)
228+
229+let ab = Z(aP)
230+
231+let aQ = ac(ab)
232+
233+let aR = aa(ab)
234+
235+func aS (aT,aU,aV,aW) = if (if ((aU == g))
236+ then (aT > g)
237+ else false)
238+ then g
239+ else if ((aT == g))
240+ then aV
241+ else if (if ((aU > g))
242+ then (aT > g)
243+ else false)
244+ then value(parseBigInt(s(this, aW)))
245+ else throw("calcWxPerLpIntegralUserLast: unexpected state")
246+
247+
248+func aX (al,aY,aZ) = {
249+ let ba = am(al)
250+ let bb = toBigInt(ar(ba))
251+ let bc = if ((bb == g))
252+ then h
253+ else bb
254+ let bd = getIntegerValue(aP, V(aY))
255+ let be = z(aQ, ag())
256+ let bf = 1000
257+ let bg = (z(aQ, ae()) * bf)
258+ let bh = fraction(bg, bd, (f * 3))
259+ let bi = aA(al)
260+ let bj = aB(al)
261+ let bk = aE(al)
262+ let bl = x(this, bj, be)
263+ let bm = w(this, bi)
264+ let bn = 0
265+ let bo = max([(height - bl), 0])
266+ let bp = if ((bn != 0))
267+ then toBigInt(bn)
268+ else fraction(toBigInt(bh), toBigInt(b), bc)
269+ let bq = (bb + toBigInt(aZ))
270+ let br = if ((bq == g))
271+ then h
272+ else bq
273+ let aV = (toBigInt(bm) + (bp * toBigInt(bo)))
274+ let bs = (toBigInt(bh) / br)
275+ let bt = height
276+ let bu = makeString(["wxPerLpIntegralNew=", toString(aV), "dh=", toString(bo), "wxPerLpX3=", toString(bp), "stakedTotal=", toString(bb), "poolWxEmissionPerBlockX3=", toString(bh), "wxEmissionPerBlockX3=", toString(bg), "poolWeight=", toString(bd)], "::")
277+ $Tuple3(aV, [StringEntry(bi, toString(aV)), IntegerEntry(bj, bt), StringEntry(bk, toString(bs))], bu)
278+ }
279+
280+
281+func bv (al,ak,aY,aZ) = {
282+ let bw = aX(al, aY, aZ)
283+ let aV = bw._1
284+ let bx = bw._2
285+ let by = bw._3
286+ let bf = 1000
287+ let bz = aj(ak, al)
288+ let aT = ar(bz)
289+ let bA = aC(al, ak)
290+ let bB = aD(al, ak)
291+ let aW = aG(al, ak)
292+ let bC = w(this, bA)
293+ let aU = w(this, bB)
294+ let bD = aS(toBigInt(aT), toBigInt(aU), aV, aW)
295+ let bE = (b * bf)
296+ let bF = (toBigInt(bC) + fraction((aV - bD), toBigInt(aT), toBigInt(bE)))
297+ let bG = aV
298+ let bH = height
299+ let bu = makeString(["wxToClaimUserNew=", toString(bF), "wxPerLpIntegralUserLast=", toString(bD), "stakedByUser=", toString(aT), "poolDEBUG=", by, "height=", toString(height)], "::")
300+ $Tuple3(bF, (bx ++ [StringEntry(bA, toString(bF)), IntegerEntry(bB, bH), StringEntry(aW, toString(bG))]), bu)
301+ }
302+
303+
304+func bI () = {
305+ let k = getString(O())
306+ if ($isInstanceOf(k, "String"))
78307 then {
79- let N = M
80- fromBase58String(N)
308+ let bJ = k
309+ fromBase58String(bJ)
81310 }
82- else if ($isInstanceOf(M, "Unit"))
311+ else if ($isInstanceOf(k, "Unit"))
83312 then unit
84313 else throw("Match error")
85314 }
86315
87316
88-func O () = {
89- let M = getString(E())
90- if ($isInstanceOf(M, "String"))
317+func bK () = {
318+ let k = getString(P())
319+ if ($isInstanceOf(k, "String"))
91320 then {
92- let N = M
93- fromBase58String(N)
321+ let bJ = k
322+ fromBase58String(bJ)
94323 }
95- else if ($isInstanceOf(M, "Unit"))
324+ else if ($isInstanceOf(k, "Unit"))
96325 then unit
97326 else throw("Match error")
98327 }
99328
100329
101-func P (Q) = {
102- let R = throw("permission denied")
103- let M = L()
104- if ($isInstanceOf(M, "ByteVector"))
330+func bL (bM) = {
331+ let bN = throw("Permission denied")
332+ let k = bI()
333+ if ($isInstanceOf(k, "ByteVector"))
105334 then {
106- let S = M
107- if ((Q.callerPublicKey == S))
335+ let bO = k
336+ if ((bM.callerPublicKey == bO))
108337 then true
109- else R
338+ else bN
110339 }
111- else if ($isInstanceOf(M, "Unit"))
112- then if ((Q.caller == this))
340+ else if ($isInstanceOf(k, "Unit"))
341+ then if ((bM.caller == this))
113342 then true
114- else R
343+ else bN
115344 else throw("Match error")
116345 }
117346
118347
119-func T (U) = {
120- let M = U
121- if ($isInstanceOf(M, "Int"))
122- then {
123- let V = M
124- V
125- }
126- else throw("failed to cast into Integer")
127- }
128-
129-
130-@Callable(Q)
131-func constructor (W,X,Y,Z,aa,ab,ac,ad,ae,af,ag) = {
132- let ah = [P(Q), if (isDefined(addressFromString(W)))
133- then true
134- else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(X)))
135- then true
136- else throw("Invalid boosting contract address"), if (isDefined(addressFromString(aa)))
137- then true
138- else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(Y)))
139- then true
140- else throw("Invalid emission contract address"), if (isDefined(addressFromString(Z)))
141- then true
142- else throw("Invalid factory contract address"), if ((ac >= 0))
143- then true
144- else throw("Invalid fee amount"), if ((ae > 0))
145- then true
146- else throw("Invalid voting duration"), if ((ag > 0))
147- then true
148- else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(ad))))
149- then true
150- else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(af))))
151- then true
152- else throw("Invalid USDN asset ID")]
153- if ((ah == ah))
154- then $Tuple2([StringEntry(g, W), StringEntry(j, X), StringEntry(i, Y), StringEntry(k, Z), StringEntry(h, aa), StringEntry(l, ab), IntegerEntry(b, ac), IntegerEntry(d, ae), IntegerEntry(e, ag), StringEntry(f, ad), StringEntry(c, af)], unit)
348+@Callable(bM)
349+func constructor (bP) = {
350+ let bQ = bL(bM)
351+ if ((bQ == bQ))
352+ then [StringEntry(F(), bP)]
155353 else throw("Strict value is not equal to itself.")
156354 }
157355
158356
159357
160-@Callable(Q)
161-func suggest (p,q) = {
162- let ai = value(Q.payments[0])
163- let aj = valueOrErrorMessage(assetInfo(fromBase58String(p)), "invalid amountAssetId ID")
164- let ah = [if ((aj.issuer == Q.caller))
165- then true
166- else throw("asset can only be suggested by its issuer"), if ((aj.scripted == false))
167- then true
168- else throw("asset is smart"), if ((toBase58String(value(ai.assetId)) == value(getString(f))))
169- then true
170- else throw("invalid fee asset"), if ((ai.amount == value(getInteger(b))))
171- then true
172- else throw("invalid fee amount"), if ((q == value(getString(c))))
173- then true
174- else throw("priceAssetId is not USDN"), if ((getInteger(o(p, q)) == unit))
175- then true
176- else throw("already in voting list")]
177- if ((ah == ah))
358+@Callable(bM)
359+func setManager (bR) = {
360+ let bQ = bL(bM)
361+ if ((bQ == bQ))
178362 then {
179- let ak = {
180- let M = invoke(J, "statusREADONLY", [p, q], nil)
181- if ($isInstanceOf(M, "String"))
182- then {
183- let N = M
184- if ((N == "active"))
185- then true
186- else throw("user pool is not active")
187- }
188- else throw("user pool is not active")
189- }
190- if ((ak == ak))
191- then {
192- let al = {
193- let M = invoke(F, "isVerifiedREADONLY", [p], nil)
194- if ($isInstanceOf(M, "Boolean"))
195- then {
196- let am = M
197- if (am)
198- then true
199- else throw("asset is not verified")
200- }
201- else throw("asset is not verified")
202- }
203- if ((al == al))
204- then {
205- let an = invoke(H, "burn", nil, [AttachedPayment(ai.assetId, ai.amount)])
206- if ((an == an))
207- then {
208- let ao = {
209- let M = getInteger(r(p, q))
210- if ($isInstanceOf(M, "Int"))
211- then {
212- let ap = M
213- (ap + 1)
214- }
215- else 0
216- }
217- $Tuple2([IntegerEntry(o(p, q), ao), IntegerEntry(s(p, q, ao), height), StringEntry(u(p, q, ao), v("0", "0")), IntegerEntry(r(p, q), ao)], unit)
218- }
219- else throw("Strict value is not equal to itself.")
220- }
221- else throw("Strict value is not equal to itself.")
222- }
363+ let bS = fromBase58String(bR)
364+ if ((bS == bS))
365+ then [StringEntry(P(), bR)]
223366 else throw("Strict value is not equal to itself.")
224367 }
225368 else throw("Strict value is not equal to itself.")
226369 }
227370
228371
229372
230-@Callable(Q)
231-func vote (p,q,aq) = {
232- let t = value(getInteger(o(p, q)))
233- let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
234- let ah = [if (isDefined(getInteger(o(p, q))))
373+@Callable(bM)
374+func confirmManager () = {
375+ let bT = bK()
376+ let bU = if (isDefined(bT))
235377 then true
236- else throw("the token isn't on the voting list"), if ((ar > height))
237- then true
238- else throw("too late to vote")]
239- if ((ah == ah))
378+ else throw("No pending manager")
379+ if ((bU == bU))
240380 then {
241- let B = invoke(G, "getUserGwxAmountAtHeightREADONLY", [toString(Q.caller), ar], nil)
242- let as = if ((T(B) > 0))
381+ let bV = if ((bM.callerPublicKey == value(bT)))
243382 then true
244- else throw("you don't have gwx")
245- if ((as == as))
246- then {
247- let C = {
248- let M = getString(y(p, q, t, toString(Q.caller)))
249- if ($isInstanceOf(M, "String"))
250- then {
251- let N = M
252- let C = split(N, a)
253- let at = C[1]
254- let au = C[2]
255- let av = if (if ((au == "yes"))
256- then (aq == true)
257- else false)
258- then true
259- else if ((au == "no"))
260- then (aq == false)
261- else false
262- let aw = if (av)
263- then (T(B) == parseIntValue(at))
264- else false
265- let ax = if (if (av)
266- then aw
267- else false)
268- then throw("you already voted")
269- else invoke(this, "cancelVote", [p, q], nil)
270- ax
271- }
272- else if ($isInstanceOf(M, "Unit"))
273- then {
274- let ay = M
275- ay
276- }
277- else throw("Match error")
278- }
279- if ((C == C))
280- then {
281- let az = split(value(getString(u(p, q, t))), a)
282- let aA = az[1]
283- let aB = az[2]
284- let aC = if (aq)
285- then {
286- let aD = (parseIntValue(aA) + T(B))
287-[toString(aD), aB]
288- }
289- else {
290- let aE = (parseIntValue(aB) + T(B))
291-[aA, toString(aE)]
292- }
293- let aF = y(p, q, t, toString(Q.caller))
294- let at = A(toString(T(B)), aq)
295- $Tuple2([StringEntry(u(p, q, t), v(aC[0], aC[1])), StringEntry(aF, at)], unit)
296- }
297- else throw("Strict value is not equal to itself.")
298- }
383+ else throw("You are not pending manager")
384+ if ((bV == bV))
385+ then [StringEntry(O(), toBase58String(value(bT))), DeleteEntry(P())]
299386 else throw("Strict value is not equal to itself.")
300387 }
301388 else throw("Strict value is not equal to itself.")
302389 }
303390
304391
305392
306-@Callable(Q)
307-func cancelVote (p,q) = {
308- let aG = if ((Q.caller == this))
309- then toString(Q.originCaller)
310- else toString(Q.caller)
311- let t = value(getInteger(o(p, q)))
312- let ah = [if (isDefined(getString(u(p, q, t))))
393+@Callable(bM)
394+func stake () = if ((size(bM.payments) != 1))
395+ then throw("invalid payment - exact one payment must be attached")
396+ else {
397+ let bW = bM.payments[0]
398+ let at = value(bW.assetId)
399+ let al = toBase58String(at)
400+ let aL = bW.amount
401+ let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
402+ let bX = toString(bM.caller)
403+ let ak = if ((bX == aY))
404+ then toString(bM.originCaller)
405+ else bX
406+ let bz = aj(ak, al)
407+ let ba = am(al)
408+ let aT = ar(bz)
409+ let bb = ar(ba)
410+ let bY = bv(al, ak, aY, aL)
411+ let bF = bY._1
412+ let bZ = bY._2
413+ let bu = bY._3
414+ ([IntegerEntry(bz, (aT + aL)), IntegerEntry(ba, (bb + aL)), aM("stake", ak, al, aL, bM.transactionId)] ++ bZ)
415+ }
416+
417+
418+
419+@Callable(bM)
420+func unstake (al,aL) = {
421+ let at = fromBase58String(al)
422+ let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
423+ let ca = valueOrElse(getString(this, Q()), aY)
424+ let bX = toString(bM.caller)
425+ let ak = if (if ((bX == aY))
313426 then true
314- else throw("no vote for assets pair")]
315- if ((ah == ah))
316- then {
317- let C = split(value(getString(y(p, q, t, aG))), a)
318- let at = C[1]
319- let au = C[2]
320- let az = split(value(getString(u(p, q, t))), a)
321- let aA = az[1]
322- let aB = az[2]
323- let aH = if ((au == "yes"))
324- then {
325- let aD = (parseIntValue(aA) - parseIntValue(at))
326- $Tuple2([StringEntry(u(p, q, t), v(toString(aD), aB)), DeleteEntry(y(p, q, t, aG))], unit)
327- }
328- else {
329- let aE = (parseIntValue(aB) - parseIntValue(at))
330- $Tuple2([StringEntry(u(p, q, t), v(aA, toString(aE))), DeleteEntry(y(p, q, t, aG))], unit)
331- }
332- aH
333- }
334- else throw("Strict value is not equal to itself.")
427+ else (bX == ca))
428+ then toString(bM.originCaller)
429+ else bX
430+ let bz = aj(ak, al)
431+ let ba = am(al)
432+ let aT = ar(bz)
433+ let bb = ar(ba)
434+ let cb = bv(al, ak, aY, -(aL))
435+ let bF = cb._1
436+ let bZ = cb._2
437+ let bu = cb._3
438+ if ((aL > aT))
439+ then throw("passed amount is less then available")
440+ else ([IntegerEntry(bz, (aT - aL)), IntegerEntry(ba, (bb - aL)), ScriptTransfer(bM.caller, aL, at), aM("unstake", ak, al, aL, bM.transactionId)] ++ bZ)
335441 }
336442
337443
338444
339-@Callable(Q)
340-func setFee (aI) = {
341- let ah = [P(Q)]
342- if ((ah == ah))
343- then [IntegerEntry(b, aI)]
344- else throw("Strict value is not equal to itself.")
445+@Callable(bM)
446+func claimWx (al) = {
447+ let av = bM.caller
448+ let ak = toString(bM.caller)
449+ let aY = v(aP, U(al))
450+ let cc = an(al, ak)
451+ let cd = aq(al)
452+ let ce = ao(al, ak)
453+ let cf = ap(al, ak)
454+ let cg = toBigInt(w(this, cc))
455+ let ch = toBigInt(w(this, ce))
456+ let ci = toBigInt(w(this, cf))
457+ let cj = toBigInt(w(this, cd))
458+ let ck = bv(al, ak, aY, 0)
459+ let bF = ck._1
460+ let bZ = ck._2
461+ let bu = ck._3
462+ let cl = (bF - cg)
463+ if ((g >= cl))
464+ then throw("nothing to claim")
465+ else {
466+ let cm = m(i(invoke(aR, "claimWxBoost", [al, ak], nil))[0])
467+ let cn = cl
468+ let co = min([(cn * toBigInt(2)), toBigInt(cm)])
469+ let cp = q(i(invoke(aQ, "emit", [cn], nil))[0])
470+ let cq = i(invoke(aQ, "emit", [co], nil))
471+ if ((cq == cq))
472+ then {
473+ let cr = (cg + cl)
474+ let cs = (ch + cn)
475+ let ct = (ch + cn)
476+ let cu = (ch + cn)
477+[StringEntry(cc, toString(cr)), StringEntry(ce, toString(cs)), StringEntry(cf, toString(ct)), StringEntry(cd, toString(cu)), ScriptTransfer(av, toInt(cn), cp), ScriptTransfer(av, toInt(co), cp), aM("claim", ak, al, toInt(cl), bM.transactionId)]
478+ }
479+ else throw("Strict value is not equal to itself.")
480+ }
345481 }
346482
347483
348484
349-@Callable(Q)
350-func finalize (p,q) = {
351- let t = value(getInteger(o(p, q)))
352- let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
353- let ah = [if (isDefined(getInteger(o(p, q))))
354- then true
355- else throw("no assets pair"), if ((height >= ar))
356- then true
357- else throw("insufficient height for completion")]
358- if ((ah == ah))
359- then {
360- let az = split(value(getString(u(p, q, t))), a)
361- let aA = parseIntValue(az[1])
362- let aB = parseIntValue(az[2])
363- let aH = if ((aA > aB))
364- then {
365- let aJ = invoke(I, "setWxEmissionPoolLabel", [p, q], nil)
366- if ((aJ == aJ))
367- then {
368- let aK = invoke(K, "create", [p, q], nil)
369- if ((aK == aK))
370- then $Tuple2([DeleteEntry(o(p, q))], unit)
371- else throw("Strict value is not equal to itself.")
372- }
373- else throw("Strict value is not equal to itself.")
374- }
375- else $Tuple2([DeleteEntry(o(p, q))], unit)
376- aH
377- }
378- else throw("Strict value is not equal to itself.")
485+@Callable(bM)
486+func claimWxREADONLY (al,ak) = {
487+ let bz = aj(ak, al)
488+ let ba = am(al)
489+ let cc = an(al, ak)
490+ let aT = ar(bz)
491+ let bb = ar(ba)
492+ let cg = w(this, cc)
493+ let aY = v(aP, U(al))
494+ let bd = getIntegerValue(aP, V(aY))
495+ let cv = z(aQ, ae())
496+ let be = z(aQ, ag())
497+ let cw = if ((be > height))
498+ then 0
499+ else (height - be)
500+ let cx = fraction((cv * cw), bd, f)
501+ let cy = fraction(cx, aT, bb)
502+ let cz = bv(al, ak, aY, 0)
503+ let bF = cz._1
504+ let bZ = cz._2
505+ let bu = cz._3
506+ let cl = (bF - toBigInt(cg))
507+ let cA = i(invoke(aR, "claimWxBoostREADONLY", [al, ak], nil))
508+ let cm = m(cA[0])
509+ let cB = o(cA[1])
510+ let cn = cl
511+ let co = min([(cn * toBigInt(2)), toBigInt(cm)])
512+ let cC = (cn + co)
513+ $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", al, ak, toString(cC), toString(cg), toString(cn), toString(co), ((((bu + "::") + toString(cy)) + "::BOOSTDEBUG::") + cB)], e))
379514 }
380515
381516
382517
383-@Callable(Q)
384-func setManager (aL) = {
385- let aM = P(Q)
386- if ((aM == aM))
387- then {
388- let aN = fromBase58String(aL)
389- if ((aN == aN))
390- then [StringEntry(E(), aL)]
391- else throw("Strict value is not equal to itself.")
392- }
393- else throw("Strict value is not equal to itself.")
394- }
518+@Callable(bM)
519+func onModifyWeight (al,aY) = if ((bM.caller != aP))
520+ then throw("permissions denied")
521+ else {
522+ let cD = aX(al, aY, 0)
523+ let aV = cD._1
524+ let bx = cD._2
525+ let by = cD._3
526+ bx
527+ }
395528
396529
397-
398-@Callable(Q)
399-func confirmManager () = {
400- let aO = O()
401- let aP = if (isDefined(aO))
402- then true
403- else throw("no pending manager")
404- if ((aP == aP))
405- then {
406- let aQ = if ((Q.callerPublicKey == value(aO)))
407- then true
408- else throw("you are not pending manager")
409- if ((aQ == aQ))
410- then [StringEntry(D(), toBase58String(value(aO))), DeleteEntry(E())]
411- else throw("Strict value is not equal to itself.")
412- }
413- else throw("Strict value is not equal to itself.")
414- }
415-
416-
417-@Verifier(aR)
418-func aS () = {
419- let aT = {
420- let M = L()
421- if ($isInstanceOf(M, "ByteVector"))
530+@Verifier(cE)
531+func cF () = {
532+ let cG = {
533+ let k = bI()
534+ if ($isInstanceOf(k, "ByteVector"))
422535 then {
423- let S = M
424- S
536+ let bO = k
537+ bO
425538 }
426- else if ($isInstanceOf(M, "Unit"))
427- then aR.senderPublicKey
539+ else if ($isInstanceOf(k, "Unit"))
540+ then cE.senderPublicKey
428541 else throw("Match error")
429542 }
430- sigVerify(aR.bodyBytes, aR.proofs[0], aT)
543+ sigVerify(cE.bodyBytes, cE.proofs[0], cG)
431544 }
432545

github/deemru/w8io/c3f4982 
92.59 ms