tx · 4ZzKWWxeVCpKBDFrfkRRmziHWh5aGSzhY2D3sXNst7B6

3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT:  -0.01400000 Waves

2021.06.08 13:34 [1561266] smart account 3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT > SELF 0.00000000 Waves

{ "type": 13, "id": "4ZzKWWxeVCpKBDFrfkRRmziHWh5aGSzhY2D3sXNst7B6", "fee": 1400000, "feeAssetId": null, "timestamp": 1623148505865, "version": 2, "chainId": 84, "sender": "3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT", "senderPublicKey": "3ijdmxaYrpDFsKVbQH2kvB7i6JzHj9bep9bGWiQPra2D", "proofs": [ "3zjrCxqGpcEchkTDUQPaZmVcPnt1AHCmxQn8PNYMWbu6YMwmc24dyhJhTDeGA1euPEVEv88UHGucouAj5WotkEBA" ], "script": "base64:AAIEAAAAAAAAACEIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgMKAQgAAABUAAAAAAxhZG1pblB1YktleTEBAAAAIATPdeVk0MEPTme5HxNkxBoN6oQkQjF9M5BdQFgKnZNKAAAAAAxhZG1pblB1YktleTIBAAAAIATPdeVk0MEPTme5HxNkxBoN6oQkQjF9M5BdQFgKnZNKAAAAAAxhZG1pblB1YktleTMBAAAAIATPdeVk0MEPTme5HxNkxBoN6oQkQjF9M5BdQFgKnZNKAAAAABRrZXlTaGFyZVRva2Vuc0xvY2tlZAIAAAAaX3RvdGFsX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAC2tTaGFyZUxpbWl0AgAAABxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AAAAABxrZXlSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AgAAAB1fY3VycmVudF9wb29sX2ZyYWN0aW9uX3Jld2FyZAAAAAAda2V5UmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCAAAAHl9wcmV2aW91c19wb29sX2ZyYWN0aW9uX3Jld2FyZAAAAAAVa2V5SGVpZ2h0UG9vbEZyYWN0aW9uAgAAABVfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50AgAAAB50b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX2N1cnJlbnQAAAAAHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwIAAAAfdG90YWxfcmV3YXJkX3Blcl9ibG9ja19wcmV2aW91cwAAAAAVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0AgAAABRyZXdhcmRfdXBkYXRlX2hlaWdodAAAAAAPa2V5TGFzdEludGVyZXN0AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0AgAAABVfbGFzdF9pbnRlcmVzdF9oZWlnaHQAAAAAGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZAIAAAAUX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QCAAAADl9sYXN0X2ludGVyZXN0AAAAAAlrZXlTV09QaWQCAAAAB1NXT1BfaWQAAAAAGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudAIAAAAUX1NXT1BfY2xhaW1lZF9hbW91bnQAAAAAHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQCAAAAGV9TV09QX2xhc3RfY2xhaW1lZF9hbW91bnQAAAAAEGtleUF2YWlsYWJsZVNXT1ACAAAAD19hdmFpbGFibGVfU1dPUAAAAAAVa2V5RmFybWluZ1N0YXJ0SGVpZ2h0AgAAABRmYXJtaW5nX3N0YXJ0X2hlaWdodAAAAAAGa2V5QVBZAgAAAANhcHkAAAAAFmtQcmV2aW91c1RvdGFsVm90ZVNXT1ACAAAAGHByZXZpb3VzX3RvdGFsX3ZvdGVfU1dPUAAAAAATa2V5U3dvcFllYXJFbWlzc2lvbgIAAAASc3dvcF95ZWFyX2VtaXNzaW9uAAAAAA9rZXlCYWxhbmNlY3BtbUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZWNwbW1CAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAIWtIYXJ2ZXN0UG9vbEFjdGl2ZVZvdGVTdHJ1Y1ZvdGluZwIAAAAeX2hhcnZlc3RfcG9vbF9hY3RpdmVWb3RlX3N0cnVjAAAAACVrSGFydmVzdFVzZXJQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nAgAAACNfaGFydmVzdF91c2VyX3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAAZa2V5TGltaXRTaGFyZUZpcnN0SGFydmVzdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAALa2V5QXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAAC2tleUFzc2V0SWRCAgAAAApCX2Fzc2V0X2lkAAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAABNrZXlmaXJzdEhhcnZlc3RDcG1tAgAAAA1maXJzdF9oYXJ2ZXN0AAAAABFnb3Zlcm5hbmNlQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBVKr6ad6B9BNShco/LjqIUbMZ6pgcWfINLQAAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU3z1Ll4lYWd4V4ORRC1bdPXpfvbV/hSGJAAAAAA12b3RpbmdBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUGjZ+31einSdpXP6/9ybU5/uhw2g+IMp/AAAAABxhZG1pbkluY3JlYXNlSW50ZXJlc3RBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU3z1Ll4lYWd4V4ORRC1bdPXpfvbV/hSGJAAAAAA5vbmVXZWVrSW5CbG9jawAAAAAAAAAnegAAAAAOdG90YWxWb3RlU2hhcmUAAAAAAlQL5AAAAAAAC3NjYWxlVmFsdWUxAAAAAAAAAAAKAAAAAAtzY2FsZVZhbHVlMwAAAAAAAAAD6AAAAAALc2NhbGVWYWx1ZTUAAAAAAAABhqAAAAAAC3NjYWxlVmFsdWU2AAAAAAAAD0JAAAAAAAtzY2FsZVZhbHVlOAAAAAAABfXhAAAAAAAMc2NhbGVWYWx1ZTExAAAAABdIdugAAQAAAAtzdHJBc3NldElkQQAAAAEAAAAEcG9vbAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEcG9vbAUAAAALa2V5QXNzZXRJZEEBAAAAC3N0ckFzc2V0SWRCAAAAAQAAAARwb29sCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAARwb29sBQAAAAtrZXlBc3NldElkQgEAAAAIYXNzZXRJZEEAAAABAAAABHBvb2wDCQAAAAAAAAIJAQAAAAtzdHJBc3NldElkQQAAAAEFAAAABHBvb2wCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEJAQAAAAtzdHJBc3NldElkQQAAAAEFAAAABHBvb2wBAAAACGFzc2V0SWRCAAAAAQAAAARwb29sAwkAAAAAAAACCQEAAAALc3RyQXNzZXRJZEIAAAABBQAAAARwb29sAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABCQEAAAALc3RyQXNzZXRJZEIAAAABBQAAAARwb29sAAAAAAtrQmFzZVBlcmlvZAIAAAALYmFzZV9wZXJpb2QAAAAADWtQZXJpb2RMZW5ndGgCAAAADXBlcmlvZF9sZW5ndGgAAAAADGtTdGFydEhlaWdodAIAAAAMc3RhcnRfaGVpZ2h0AAAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAAWa0R1cmF0aW9uRnVsbFZvdGVQb3dlcgIAAAAYZHVyYXRpb25fZnVsbF92b3RlX3Bvd2VyAAAAAA1rTWluVm90ZVBvd2VyAgAAAA5taW5fdm90ZV9wb3dlcgAAAAAKYmFzZVBlcmlvZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAAC2tCYXNlUGVyaW9kAgAAABFFbXB0eSBrQmFzZVBlcmlvZAAAAAALc3RhcnRIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA12b3RpbmdBZGRyZXNzBQAAAAxrU3RhcnRIZWlnaHQCAAAAEkVtcHR5IGtTdGFydEhlaWdodAAAAAAMcGVyaW9kTGVuZ3RoCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAANa1BlcmlvZExlbmd0aAIAAAATRW1wdHkga1BlcmlvZExlbmd0aAAAAAAVZHVyYXRpb25GdWxsVm90ZVBvd2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAAWa0R1cmF0aW9uRnVsbFZvdGVQb3dlcgIAAAAcRW1wdHkga0R1cmF0aW9uRnVsbFZvdGVQb3dlcgAAAAAMbWluVm90ZVBvd2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAANa01pblZvdGVQb3dlcgIAAAATRW1wdHkga01pblZvdGVQb3dlcgAAAAAKY3VyclBlcmlvZAkAAGQAAAACBQAAAApiYXNlUGVyaW9kCQAAaQAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAAtzdGFydEhlaWdodAUAAAAMcGVyaW9kTGVuZ3RoAQAAAA1nZXRMaW1pdFRva2VuAAAAAQAAAARwb29sCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAARwb29sBQAAABlr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RXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwUAAAAda2V5VG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAB1rZXlUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAEWdvdmVybmFuY2VBZGRyZXNzBAAAABt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwUAAAAea2V5VG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABRObyBkYXRhIG9uIHRoZSBrZXk6IAUAAAAea2V5VG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzAgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAARZ292ZXJuYW5jZUFkZHJlc3MEAAAAGXJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwkAASwAAAACBQAAAARwb29sBQAAABxrZXlSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAARwb29sBQAAABxrZXlSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAARZ292ZXJuYW5jZUFkZHJlc3MEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABVrZXlSZXdhcmRVcGRhdGVIZWlnaHQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAABVrZXlSZXdhcmRVcGRhdGVIZWlnaHQCAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwQAAAAWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEWdvdmVybmFuY2VBZGRyZXNzCQABLAAAAAIFAAAABHBvb2wFAAAAFWtleUhlaWdodFBvb2xGcmFjdGlvbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABRObyBkYXRhIG9uIHRoZSBrZXk6IAUAAAAEcG9vbAUAAAAVa2V5SGVpZ2h0UG9vbEZyYWN0aW9uAgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAARZ292ZXJuYW5jZUFkZHJlc3MEAAAAGnJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAARZ292ZXJuYW5jZUFkZHJlc3MJAAEsAAAAAgUAAAAEcG9vbAUAAAAda2V5UmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAABHBvb2wFAAAAHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAARZ292ZXJuYW5jZUFkZHJlc3MEAAAAEXJld2FyZFBvb2xDdXJyZW50CQAAawAAAAMFAAAAGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BQAAABlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50BQAAAA50b3RhbFZvdGVTaGFyZQQAAAAScmV3YXJkUG9vbFByZXZpb3VzCQAAawAAAAMFAAAAG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwUAAAAacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMFAAAADnRvdGFsVm90ZVNoYXJlAwMJAABmAAAAAgUAAAARcmV3YXJkUG9vbEN1cnJlbnQFAAAAGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BgkAAGYAAAACBQAAABJyZXdhcmRQb29sUHJldmlvdXMFAAAAG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkAAAIAAAABAgAAAGJyZXdhcmRQb29sQ3VycmVudCA+IHRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50IG9yIHJld2FyZFBvb2xQcmV2aW91cyA+IHRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkABRYAAAAEBQAAABFyZXdhcmRQb29sQ3VycmVudAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABJyZXdhcmRQb29sUHJldmlvdXMFAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABAAAABHBvb2wEAAAADGxhc3RJbnRlcmVzdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0CQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAQAAAASbGFzdEludGVyZXN0SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAEcG9vbAUAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQJAAUUAAAAAgUAAAASbGFzdEludGVyZXN0SGVpZ2h0BQAAAAxsYXN0SW50ZXJlc3QBAAAAE2dldFVzZXJJbnRlcmVzdEluZm8AAAACAAAABHBvb2wAAAALdXNlckFkZHJlc3MEAAAAEHVzZXJMYXN0SW50ZXJlc3QJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAATa2V5VXNlckxhc3RJbnRlcmVzdAQAAAAJdXNlclNoYXJlCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQUAAAALdXNlckFkZHJlc3MFAAAAGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZAQAAAAMbGFzdEludGVyZXN0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QJAAEsAAAAAgkAASwAAAACAgAAABRObyBkYXRhIG9uIHRoZSBrZXk6IAUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0BAAAABV1c2VyTGFzdEludGVyZXN0VmFsdWUEAAAAByRtYXRjaDAFAAAAEHVzZXJMYXN0SW50ZXJlc3QDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAQdXNlckxhc3RJbnRlcmVzdAUAAAAHJG1hdGNoMAUAAAAQdXNlckxhc3RJbnRlcmVzdAUAAAAMbGFzdEludGVyZXN0BAAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQEAAAAByRtYXRjaDAFAAAACXVzZXJTaGFyZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAl1c2VyU2hhcmUFAAAAByRtYXRjaDAFAAAACXVzZXJTaGFyZQAAAAAAAAAAAAkABRQAAAACBQAAABV1c2VyTGFzdEludGVyZXN0VmFsdWUFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAEAAAAMY2FsY0ludGVyZXN0AAAACgAAABJsYXN0SW50ZXJlc3RIZWlnaHQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0AAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQAAAAMbGFzdEludGVyZXN0AAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawAAABBzaGFyZVRva2VuTG9ja2VkAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sAAAAMc2hhcmVBc3NldElkAAAACnNjYWxlVmFsdWUAAAAJcG10QW1vdW50AwkAAAAAAAACBQAAABBzaGFyZVRva2VuTG9ja2VkAAAAAAAAAAAAAAAAAAAAAAAAAwMJAABnAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAAAZoZWlnaHQJAAAAAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BwQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkAAGQAAAACBQAAAAxsYXN0SW50ZXJlc3QJAABrAAAAAwUAAAAGcmV3YXJkBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkAwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAAAAAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BwQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkAAGQAAAACBQAAAAxsYXN0SW50ZXJlc3QJAABrAAAAAwUAAAAGcmV3YXJkBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkAwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAQAAAAIhPQAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcEAAAABnJld2FyZAkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0CQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQDCQAAZgAAAAIFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BAAAAAZyZXdhcmQJAABoAAAAAgUAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0CQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQEAAAAKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZQkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0BAAAABNpbnRlcmVzdEFmdGVyVXBkYXRlCQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAACpyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQEAAAABnJld2FyZAkAAGgAAAACBQAAABVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAABkAAAAAgUAAAATaW50ZXJlc3RBZnRlclVwZGF0ZQkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQBAAAACWNsYWltQ2FsYwAAAAMAAAAEcG9vbAAAAAZjYWxsZXIAAAAJcG10QW1vdW50BAAAAAxzaGFyZUFzc2V0SWQJAQAAAA9nZXRTaGFyZUFzc2V0SWQAAAABBQAAAARwb29sBAAAAApzY2FsZVZhbHVlCQEAAAAOY2FsY1NjYWxlVmFsdWUAAAACBQAAAARTV09QBQAAAAxzaGFyZUFzc2V0SWQEAAAAEHNoYXJlVG9rZW5Mb2NrZWQJAQAAABhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQAAAABBQAAAARwb29sBAAAAA0kdDAxMTg1NzExOTIyCQEAAAATZ2V0TGFzdEludGVyZXN0SW5mbwAAAAEFAAAABHBvb2wEAAAAEmxhc3RJbnRlcmVzdEhlaWdodAgFAAAADSR0MDExODU3MTE5MjIAAAACXzEEAAAADGxhc3RJbnRlcmVzdAgFAAAADSR0MDExODU3MTE5MjIAAAACXzIEAAAADSR0MDExOTI3MTIwMzkJAQAAAApyZXdhcmRJbmZvAAAAAQUAAAAEcG9vbAQAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCAUAAAANJHQwMTE5MjcxMjAzOQAAAAJfMQQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTE5MjcxMjAzOQAAAAJfMgQAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFAAAADSR0MDExOTI3MTIwMzkAAAACXzMEAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQAAAA0kdDAxMTkyNzEyMDM5AAAAAl80BAAAAA0kdDAxMjA0NDEyMTIzCQEAAAATZ2V0VXNlckludGVyZXN0SW5mbwAAAAIFAAAABHBvb2wFAAAABmNhbGxlcgQAAAAQdXNlckxhc3RJbnRlcmVzdAgFAAAADSR0MDEyMDQ0MTIxMjMAAAACXzEEAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAgFAAAADSR0MDEyMDQ0MTIxMjMAAAACXzIEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADGNhbGNJbnRlcmVzdAAAAAoFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BQAAAAxsYXN0SW50ZXJlc3QFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawUAAAAQc2hhcmVUb2tlbkxvY2tlZAUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawUAAAAMc2hhcmVBc3NldElkBQAAAApzY2FsZVZhbHVlBQAAAAlwbXRBbW91bnQEAAAAC2NsYWltQW1vdW50CQAAawAAAAMFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAACnNjYWxlVmFsdWUEAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0CQAFFgAAAAQFAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0BQAAAAtjbGFpbUFtb3VudAUAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50AQAAABdjYWxjdWxhdGVQcm90b2NvbFJld2FyZAAAAAEAAAAEcG9vbAQAAAANJHQwMTI2MTkxMjY4NAkBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABBQAAAARwb29sBAAAABJsYXN0SW50ZXJlc3RIZWlnaHQIBQAAAA0kdDAxMjYxOTEyNjg0AAAAAl8xBAAAAAxsYXN0SW50ZXJlc3QIBQAAAA0kdDAxMjYxOTEyNjg0AAAAAl8yBAAAAA0kdDAxMjY4OTEyODAwCQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFAAAADSR0MDEyNjg5MTI4MDAAAAACXzEEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDEyNjg5MTI4MDAAAAACXzIEAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQAAAA0kdDAxMjY4OTEyODAwAAAAAl8zBAAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTI2ODkxMjgwMAAAAAJfNAQAAAAQc2hhcmVUb2tlbkxvY2tlZAkBAAAAGGdldFRvdGFsU2hhcmVUb2tlbkxvY2tlZAAAAAEFAAAABHBvb2wDCQAAAAAAAAIFAAAAEHNoYXJlVG9rZW5Mb2NrZWQAAAAAAAAAAAADCQAAZgAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAGaGVpZ2h0BAAAAAZyZXdhcmQJAABoAAAAAgUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAGcmV3YXJkAwkAAGYAAAACBQAAABJsYXN0SW50ZXJlc3RIZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAGcmV3YXJkBAAAACpyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUJAABoAAAAAgUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAkAAGQAAAACBQAAAAZyZXdhcmQFAAAAKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZQAAAAAAAAAAAAEAAAAWY2hlY2tQbXRBc3NldElkQ29ycmVjdAAAAAIAAAAEcG9vbAAAAApwbXRBc3NldElkBAAAABBwb29sU2hhcmVBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQUAAAAEcG9vbAIAAAAOc2hhcmVfYXNzZXRfaWQDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAAEHBvb2xTaGFyZUFzc2V0SWQGBwEAAAAYZ2V0VXNlclNXT1BDbGFpbWVkQW1vdW50AAAAAgAAAARwb29sAAAABHVzZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABBQAAAAR1c2VyBQAAABhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQAAAAAAAAAAAAAAAAGAAAAAWkBAAAABGluaXQAAAABAAAAB2Vhcmx5TFADCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAlrZXlTV09QaWQJAAACAAAAAQIAAAAYU1dPUCBhbHJlYWR5IGluaXRpYWxpemVkBAAAAAppbml0QW1vdW50AAAAWvMQekAABAAAAAlTV09QaXNzdWUJAARCAAAABQIAAAAEU1dPUAIAAAATU1dPUCBwcm90b2NvbCB0b2tlbgUAAAAKaW5pdEFtb3VudAAAAAAAAAAACAYEAAAABlNXT1BpZAkABDgAAAABBQAAAAlTV09QaXNzdWUJAARMAAAAAgkABEIAAAAFAgAAAARTV09QAgAAABNTV09QIHByb3RvY29sIHRva2VuBQAAAAppbml0QW1vdW50AAAAAAAAAAAIBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlrZXlTV09QaWQJAAJYAAAAAQUAAAAGU1dPUGlkBQAAAANuaWwAAAABaQEAAAAUaW5pdFBvb2xTaGFyZUZhcm1pbmcAAAABAAAABHBvb2wDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAArT25seSB0aGUgREFwcCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQAAAANJHQwMTQ1NTAxNDY1MwkBAAAACnJld2FyZEluZm8AAAABBQAAAARwb29sBAAAAA1jdXJyZW50UmV3YXJkCAUAAAANJHQwMTQ1NTAxNDY1MwAAAAJfMQQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTQ1NTAxNDY1MwAAAAJfMgQAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFAAAADSR0MDE0NTUwMTQ2NTMAAAACXzMEAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQAAAA0kdDAxNDU1MDE0NjUzAAAAAl80CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAFGtleVNoYXJlVG9rZW5zTG9ja2VkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAABVrZXlMYXN0SW50ZXJlc3RIZWlnaHQFAAAABmhlaWdodAUAAAADbmlsAAAAAWkBAAAAEnVwZGF0ZVBvb2xJbnRlcmVzdAAAAAEAAAAEcG9vbAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAGd2FsbGV0CQAAAgAAAAECAAAALE9ubHkgdGhlIEFkbWluIGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAAAAA0kdDAxNDk5MTE1MTExCQEAAAAJY2xhaW1DYWxjAAAAAwUAAAAEcG9vbAUAAAAcYWRtaW5JbmNyZWFzZUludGVyZXN0QWRkcmVzcwAAAAAAAAAAAAQAAAAPdXNlck5ld0ludGVyZXN0CAUAAAANJHQwMTQ5OTExNTExMQAAAAJfMQQAAAAPY3VycmVudEludGVyZXN0CAUAAAANJHQwMTQ5OTExNTExMQAAAAJfMgQAAAALY2xhaW1BbW91bnQIBQAAAA0kdDAxNDk5MTE1MTExAAAAAl8zBAAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQIBQAAAA0kdDAxNDk5MTE1MTExAAAAAl80BAAAAA0kdDAxNTExNjE1MjE5CQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAADWN1cnJlbnRSZXdhcmQIBQAAAA0kdDAxNTExNjE1MjE5AAAAAl8xBAAAABJyZXdhcmRVcGRhdGVIZWlnaHQIBQAAAA0kdDAxNTExNjE1MjE5AAAAAl8yBAAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCAUAAAANJHQwMTUxMTYxNTIxOQAAAAJfMwQAAAAWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDE1MTE2MTUyMTkAAAACXzQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAUa2V5U2hhcmVUb2tlbnNMb2NrZWQAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0BQAAAA91c2VyTmV3SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQFAAAAA25pbAAAAAFpAQAAAA9sb2NrU2hhcmVUb2tlbnMAAAABAAAABHBvb2wEAAAADSR0MDE1NDY1MTU1NDAJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNTQ2NTE1NTQwAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTU0NjUxNTU0MAAAAAJfMgQAAAANJHQwMTU1NDUxNTYxOAkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAA0kdDAxNTU0NTE1NjE4AAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAA0kdDAxNTU0NTE1NjE4AAAAAl8yBAAAAAtwbXREZWNpbWFscwgFAAAADSR0MDE1NTQ1MTU2MTgAAAACXzMEAAAADSR0MDE1NjIzMTU3MzEJAQAAAAljbGFpbUNhbGMAAAADBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAQAAAAPdXNlck5ld0ludGVyZXN0CAUAAAANJHQwMTU2MjMxNTczMQAAAAJfMQQAAAAPY3VycmVudEludGVyZXN0CAUAAAANJHQwMTU2MjMxNTczMQAAAAJfMgQAAAALY2xhaW1BbW91bnQIBQAAAA0kdDAxNTYyMzE1NzMxAAAAAl8zBAAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQIBQAAAA0kdDAxNTYyMzE1NzMxAAAAAl80BAAAABJ1c2VyU2hhcmVBbW91bnROZXcJAABkAAAAAgUAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50BQAAAAlwbXRBbW91bnQEAAAAEWF2YWlsYWJsZUZ1bmRzTmV3CQAAZAAAAAIJAQAAABF1c2VyQXZhaWxhYmxlU1dPUAAAAAIFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgUAAAALY2xhaW1BbW91bnQEAAAAEHRvdGFsU2hhcmVBbW91bnQJAQAAABhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQAAAABBQAAAARwb29sBAAAABN0b3RhbFNoYXJlQW1vdW50TmV3CQAAZAAAAAIFAAAAEHRvdGFsU2hhcmVBbW91bnQFAAAACXBtdEFtb3VudAQAAAARdXNlckNsYWltZWRBbW91bnQJAQAAABhnZXRV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UAUAAAADbmlsAwkAAGcAAAACBQAAAApzaGFyZVRva2VuBQAAAAlwbXRBbW91bnQFAAAACWJhc2VFbnRyeQkAAAIAAAABCQABLAAAAAICAAAAHFlvdXIgbWF4aW11bSBzaGFyZSB0b2tlbiBpcyAJAAGkAAAAAQUAAAAKc2hhcmVUb2tlbgkAAAIAAAABAgAAABVZb3UgY2FuJ3Qgc2hhcmUgdG9rZW4JAAACAAAAAQIAAAAgWW91ciBhbW91bnQgb2YgdG9rZW4gbGVzcyB0aGFuIDAFAAAACWJhc2VFbnRyeQAAAAFpAQAAABN3aXRoZHJhd1NoYXJlVG9rZW5zAAAAAgAAAARwb29sAAAAGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEAAAADXNoYXJlVG9rZW5zSWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAABXZhbHVlAAAAAQkABCYAAAABBQAAAARwb29sAgAAAA5zaGFyZV9hc3NldF9pZAQAAAANJHQwMjAwMjYyMDEyNgkBAAAACWNsYWltQ2FsYwAAAAMFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAQQAAAAPdXNlck5ld0ludGVyZXN0CAUAAAANJHQwMjAwMjYyMDEyNgAAAAJfMQQAAAAPY3VycmVudEludGVyZXN0CAUAAAANJHQwMjAwMjYyMDEyNgAAAAJfMgQAAAALY2xhaW1BbW91bnQIBQAAAA0kdDAyMDAyNjIwMTI2AAAAAl8zBAAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQIBQAAAA0kdDAyMDAyNjIwMTI2AAAAAl80BAAAABJ1c2VyU2hhcmVBbW91bnROZXcJAABlAAAAAgUAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50BQAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BAAAABFhdmFpbGFibGVGdW5kc05ldwkAAGQAAAACCQEAAAARdXNlckF2YWlsYWJsZVNXT1AAAAACBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIFAAAAC2NsYWltQW1vdW50BAAAABB0b3RhbFNoYXJlQW1vdW50CQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAQAAAATdG90YWxTaGFyZUFtb3VudE5ldwkAAGUAAAACBQAAABB0b3RhbFNoYXJlQW1vdW50BQAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BAAAABF1c2VyQ2xhaW1lZEFtb3VudAkBAAAAGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudAAAAAIFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgQAAAAUdXNlckNsYWltZWRBbW91bnROZXcJAABkAAAAAgUAAAARdXNlckNsYWltZWRBbW91bnQFAAAAC2NsYWltQW1vdW50AwkAAGYAAAACBQAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BQAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQJAAACAAAAAQIAAAAsV2l0aGRyYXcgYW1vdW50IG1vcmUgdGhlbiB1c2VyIGxvY2tlZCBhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABNrZXlVc2VyTGFzdEludGVyZXN0BQAAAA91c2VyTmV3SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABhrZXlVc2VyU2hhcmVUb2tlbnNMb2NrZWQFAAAAEnVzZXJTaGFyZUFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QFAAAAD2N1cnJlbnRJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAABVrZXlMYXN0SW50ZXJlc3RIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAABRrZXlTaGFyZVRva2Vuc0xvY2tlZAUAAAATdG90YWxTaGFyZUFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAEGtleUF2YWlsYWJsZVNXT1AFAAAAEWF2YWlsYWJsZUZ1bmRzTmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAYa2V5VXNlclNXT1BDbGFpbWVkQW1vdW50BQAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQFAAAAC2NsYWltQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAUAAAANc2hhcmVUb2tlbnNJZAUAAAADbmlsAAAAAWkBAAAABWNsYWltAAAAAQAAAARwb29sBAAAABBzaGFyZVRva2VuTG9ja2VkCQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAQAAAANJHQwMjE2MzkyMTcwNAkBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABBQAAAARwb29sBAAAABJsYXN0SW50ZXJlc3RIZWlnaHQIBQAAAA0kdDAyMTYzOTIxNzA0AAAAAl8xBAAAAAxsYXN0SW50ZXJlc3QIBQAAAA0kdDAyMTYzOTIxNzA0AAAAAl8yBAAAAA0kdDAyMTcwOTIxODIxCQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFAAAADSR0MDIxNzA5MjE4MjEAAAACXzEEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDIxNzA5MjE4MjEAAAACXzIEAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQAAAA0kdDAyMTcwOTIxODIxAAAAAl8zBAAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMjE3MDkyMTgyMQAAAAJfNAQAAAANJHQwMjE4MjYyMTkyNgkBAAAACWNsYWltQ2FsYwAAAAMFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAQQAAAAPdXNlck5ld0ludGVyZXN0CAUAAAANJHQwMjE4MjYyMTkyNgAAAAJfMQQAAAAPY3VycmVudEludGVyZXN0CAUAAAANJHQwMjE4MjYyMTkyNgAAAAJfMgQAAAALY2xhaW1BbW91bnQIBQAAAA0kdDAyMTgyNjIxOTI2AAAAAl8zBAAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQIBQAAAA0kdDAyMTgyNjIxOTI2AAAAAl80BAAAAA1hdmFpbGFibGVGdW5kCQAAZAAAAAIJAQAAABF1c2VyQXZhaWxhYmxlU1dPUAAAAAIFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgUAAAALY2xhaW1BbW91bnQEAAAAEXVzZXJDbGFpbWVkQW1vdW50CQEAAAAYZ2V0VXNlclNXT1BDbGFpbWVkQW1vdW50AAAAAgUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQDCQAAAAAAAAIFAAAADWF2YWlsYWJsZUZ1bmQAAAAAAAAAAAAJAAACAAAAAQIAAAAZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QFAAAAD3VzZXJOZXdJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QFAAAAD2N1cnJlbnRJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAABVrZXlMYXN0SW50ZXJlc3RIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAEGtleUF2YWlsYWJsZVNXT1AAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQFAAAAFHVzZXJDbGFpbWVkQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA1hdmFpbGFibGVGdW5kBQAAAARTV09QBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXm45ANF", "height": 1561266, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: D1KSoMS8xTczkowcuS4f3nwAtd3weNs2GevxnBKRU9h8 Next: 4TuVx77Gw9N4vsNGS4WkvzxxuBPMPnHnT2qiAcnwdaYZ Diff:
OldNewDifferences
1515
1616 let g = "_previous_pool_fraction_reward"
1717
18-let h = "total_reward_per_block_current"
18+let h = "_reward_update_height"
1919
20-let i = "total_reward_per_block_previous"
20+let i = "total_reward_per_block_current"
2121
22-let j = "reward_update_height"
22+let j = "total_reward_per_block_previous"
2323
24-let k = "_last_interest"
24+let k = "reward_update_height"
2525
26-let l = "_last_interest_height"
26+let l = "_last_interest"
2727
28-let m = "_share_tokens_locked"
28+let m = "_last_interest_height"
2929
30-let n = "_last_interest"
30+let n = "_share_tokens_locked"
3131
32-let o = "SWOP_id"
32+let o = "_last_interest"
3333
34-let p = "_SWOP_claimed_amount"
34+let p = "SWOP_id"
3535
36-let q = "_SWOP_last_claimed_amount"
36+let q = "_SWOP_claimed_amount"
3737
38-let r = "_available_SWOP"
38+let r = "_SWOP_last_claimed_amount"
3939
40-let s = "farming_start_height"
40+let s = "_available_SWOP"
4141
42-let t = "apy"
42+let t = "farming_start_height"
4343
44-let u = "previous_total_vote_SWOP"
44+let u = "apy"
4545
46-let v = "swop_year_emission"
46+let v = "previous_total_vote_SWOP"
4747
48-let w = "A_asset_balance"
48+let w = "swop_year_emission"
4949
50-let x = "B_asset_balance"
50+let x = "A_asset_balance"
5151
52-let y = "_harvest_pool_activeVote_struc"
52+let y = "B_asset_balance"
5353
54-let z = "_harvest_user_pool_activeVote_struc"
54+let z = "_harvest_pool_activeVote_struc"
5555
56-let A = "share_limit_on_first_harvest"
56+let A = "_harvest_user_pool_activeVote_struc"
5757
58-let B = "A_asset_id"
58+let B = "share_limit_on_first_harvest"
5959
60-let C = "B_asset_id"
60+let C = "A_asset_id"
6161
62-let D = "first_harvest_height"
62+let D = "B_asset_id"
6363
64-let E = "first_harvest"
64+let E = "first_harvest_height"
6565
66-let F = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
66+let F = "first_harvest"
6767
68-let G = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
68+let G = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
6969
70-let H = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
70+let H = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7171
72-let I = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
72+let I = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
7373
74-let J = 10106
74+let J = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7575
76-let K = 10000000000
76+let K = 10106
7777
78-let L = 10
78+let L = 10000000000
7979
80-let M = 1000
80+let M = 10
8181
82-let N = 100000
82+let N = 1000
8383
84-let O = 1000000
84+let O = 100000
8585
86-let P = 100000000
86+let P = 1000000
8787
88-let Q = 100000000000
88+let Q = 100000000
8989
90-func R (S) = getStringValue(S, B)
90+let R = 100000000000
91+
92+func S (T) = getStringValue(T, C)
9193
9294
93-func T (S) = getStringValue(S, C)
95+func U (T) = getStringValue(T, D)
9496
9597
96-func U (S) = if ((R(S) == "WAVES"))
98+func V (T) = if ((S(T) == "WAVES"))
9799 then unit
98- else fromBase58String(R(S))
100+ else fromBase58String(S(T))
99101
100102
101-func V (S) = if ((T(S) == "WAVES"))
103+func W (T) = if ((U(T) == "WAVES"))
102104 then unit
103- else fromBase58String(T(S))
105+ else fromBase58String(U(T))
104106
105107
106-let W = "base_period"
108+let X = "base_period"
107109
108-let X = "period_length"
110+let Y = "period_length"
109111
110-let Y = "start_height"
112+let Z = "start_height"
111113
112-let Z = "first_harvest_height"
114+let aa = "first_harvest_height"
113115
114-let aa = "duration_full_vote_power"
116+let ab = "duration_full_vote_power"
115117
116-let ab = "min_vote_power"
118+let ac = "min_vote_power"
117119
118-let ac = valueOrErrorMessage(getInteger(H, W), "Empty kBasePeriod")
120+let ad = valueOrErrorMessage(getInteger(I, X), "Empty kBasePeriod")
119121
120-let ad = valueOrErrorMessage(getInteger(H, Y), "Empty kStartHeight")
122+let ae = valueOrErrorMessage(getInteger(I, Z), "Empty kStartHeight")
121123
122-let ae = valueOrErrorMessage(getInteger(H, X), "Empty kPeriodLength")
124+let af = valueOrErrorMessage(getInteger(I, Y), "Empty kPeriodLength")
123125
124-let af = valueOrErrorMessage(getInteger(H, aa), "Empty kDurationFullVotePower")
126+let ag = valueOrErrorMessage(getInteger(I, ab), "Empty kDurationFullVotePower")
125127
126-let ag = valueOrErrorMessage(getInteger(H, ab), "Empty kMinVotePower")
128+let ah = valueOrErrorMessage(getInteger(I, ac), "Empty kMinVotePower")
127129
128-let ah = (ac + ((height - ad) / ae))
130+let ai = (ad + ((height - ae) / af))
129131
130-func ai (S) = valueOrElse(getIntegerValue(S, A), 0)
132+func aj (T) = valueOrElse(getIntegerValue(T, B), 0)
131133
132134
133-let aj = getIntegerValue(this, t)
135+let ak = getIntegerValue(this, u)
134136
135-let ak = getIntegerValue(this, v)
137+let al = getIntegerValue(this, w)
136138
137-func al (S) = {
138- let am = U(S)
139- if ($isInstanceOf(am, "ByteVector"))
139+func am (T) = {
140+ let an = V(T)
141+ if ($isInstanceOf(an, "ByteVector"))
140142 then {
141- let an = am
142- value(assetInfo(an)).name
143+ let ao = an
144+ value(assetInfo(ao)).name
143145 }
144- else if ($isInstanceOf(am, "Unit"))
146+ else if ($isInstanceOf(an, "Unit"))
145147 then {
146- let ao = am
148+ let ap = an
147149 "WAVES"
148150 }
149151 else throw("Match error")
150152 }
151153
152154
153-func ap (S) = {
154- let am = V(S)
155- if ($isInstanceOf(am, "ByteVector"))
155+func aq (T) = {
156+ let an = W(T)
157+ if ($isInstanceOf(an, "ByteVector"))
156158 then {
157- let an = am
158- value(assetInfo(an)).name
159+ let ao = an
160+ value(assetInfo(ao)).name
159161 }
160- else if ($isInstanceOf(am, "Unit"))
162+ else if ($isInstanceOf(an, "Unit"))
161163 then {
162- let ao = am
164+ let ap = an
163165 "WAVES"
164166 }
165167 else throw("Match error")
166168 }
167169
168170
169-let aq = fromBase58String(getStringValue(this, o))
171+let ar = fromBase58String(getStringValue(this, p))
170172
171-func ar (S) = valueOrElse(getBoolean(S, E), false)
173+func as (T) = valueOrElse(getBoolean(T, F), false)
172174
173175
174-func as (S) = valueOrElse(getInteger(S, D), 0)
176+func at (T) = valueOrElse(getInteger(T, E), 0)
175177
176178
177-func at (S) = valueOrErrorMessage(getInteger(S, w), ("No data on the key: " + w))
179+func au (T) = valueOrErrorMessage(getInteger(T, x), ("No data on the key: " + x))
178180
179181
180-func au (S) = valueOrErrorMessage(getInteger(S, x), ("No data on the key: " + x))
182+func av (T) = valueOrErrorMessage(getInteger(T, y), ("No data on the key: " + y))
181183
182184
183-func av (S) = valueOrErrorMessage(getInteger(S, e), ("No data on the key: " + e))
185+func aw (T) = valueOrErrorMessage(getInteger(T, e), ("No data on the key: " + e))
184186
185187
186-func aw (S) = valueOrErrorMessage(getInteger(this, (S + d)), (("No data on the key: " + S) + d))
188+func ax (T) = valueOrErrorMessage(getInteger(this, (T + d)), (("No data on the key: " + T) + d))
187189
188190
189-func ax (S) = fromBase58String(getStringValue(value(addressFromString(S)), "share_asset_id"))
191+func ay (T) = fromBase58String(getStringValue(value(addressFromString(T)), "share_asset_id"))
190192
191193
192-func ay (az) = {
193- let am = az
194- if ($isInstanceOf(am, "ByteVector"))
194+func az (aA) = {
195+ let an = aA
196+ if ($isInstanceOf(an, "ByteVector"))
195197 then {
196- let an = am
197- let aA = toBase58String(an)
198- let aB = valueOrErrorMessage(assetInfo(an), (("Asset " + aA) + " doesn't exist"))
199- $Tuple3(aA, aB.name, aB.decimals)
198+ let ao = an
199+ let aB = toBase58String(ao)
200+ let aC = valueOrErrorMessage(assetInfo(ao), (("Asset " + aB) + " doesn't exist"))
201+ $Tuple3(aB, aC.name, aC.decimals)
200202 }
201- else if ($isInstanceOf(am, "Unit"))
203+ else if ($isInstanceOf(an, "Unit"))
202204 then {
203- let ao = am
205+ let ap = an
204206 $Tuple3("WAVES", "WAVES", 8)
205207 }
206208 else throw("Match error")
207209 }
208210
209211
210-func aC (aD,aE) = {
211- let aF = value(assetInfo(aD)).decimals
212+func aD (aE,aF) = {
212213 let aG = value(assetInfo(aE)).decimals
213- let aH = ((aG - aF) + 8)
214- pow(10, 0, aH, 0, 0, HALFDOWN)
214+ let aH = value(assetInfo(aF)).decimals
215+ let aI = ((aH - aG) + 8)
216+ pow(10, 0, aI, 0, 0, HALFDOWN)
215217 }
216218
217219
218-func aI (S,aJ) = valueOrElse(getInteger(this, (((S + "_") + toString(aJ)) + r)), 0)
220+func aJ (T,aK) = valueOrElse(getInteger(this, (((T + "_") + toString(aK)) + s)), 0)
219221
220222
221-func aK (S) = if ((S == "3PCdNCULgjM9ZMLEt61M45qxV26ro6o48Jj"))
222- then true
223- else (S == "3PMcDUBDyjNB1fkRGeLGpsz1ZQPfcmyp4r5")
224-
225-
226-func aL (S) = {
227- let aM = valueOrErrorMessage(getInteger(F, h), ((("No data on the key: " + h) + " at address ") + toString(F)))
228- let aN = valueOrErrorMessage(getInteger(F, i), ((("No data on the key: " + i) + " at address ") + toString(F)))
229- let aO = valueOrErrorMessage(getInteger(F, (S + f)), (((("No data on the key: " + S) + f) + " at address ") + toString(F)))
230- let aP = valueOrErrorMessage(getInteger(F, j), ((("No data on the key: " + j) + " at address ") + toString(F)))
231- let aQ = valueOrErrorMessage(getInteger(F, (S + g)), (((("No data on the key: " + S) + g) + " at address ") + toString(F)))
232- let aR = fraction(aM, aO, K)
233- let aS = fraction(aN, aQ, K)
234- if (if ((aR > aM))
223+func aL (T) = {
224+ let aM = valueOrErrorMessage(getInteger(G, i), ((("No data on the key: " + i) + " at address ") + toString(G)))
225+ let aN = valueOrErrorMessage(getInteger(G, j), ((("No data on the key: " + j) + " at address ") + toString(G)))
226+ let aO = valueOrErrorMessage(getInteger(G, (T + f)), (((("No data on the key: " + T) + f) + " at address ") + toString(G)))
227+ let aP = valueOrErrorMessage(getInteger(G, k), ((("No data on the key: " + k) + " at address ") + toString(G)))
228+ let aQ = valueOrErrorMessage(getInteger(G, (T + h)), (((("No data on the key: " + T) + h) + " at address ") + toString(G)))
229+ let aR = valueOrErrorMessage(getInteger(G, (T + g)), (((("No data on the key: " + T) + g) + " at address ") + toString(G)))
230+ let aS = fraction(aM, aO, L)
231+ let aT = fraction(aN, aR, L)
232+ if (if ((aS > aM))
235233 then true
236- else (aS > aN))
234+ else (aT > aN))
237235 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
238- else $Tuple3(aR, aP, aS)
236+ else $Tuple4(aS, aP, aT, aQ)
239237 }
240238
241239
242-func aT (S) = {
243- let aU = valueOrErrorMessage(getInteger(this, (S + k)), (("No data on the key: " + S) + k))
244- let aV = valueOrElse(getInteger(this, (S + l)), height)
245- $Tuple2(aV, aU)
240+func aU (T) = {
241+ let aV = valueOrErrorMessage(getInteger(this, (T + l)), (("No data on the key: " + T) + l))
242+ let aW = valueOrElse(getInteger(this, (T + m)), height)
243+ $Tuple2(aW, aV)
246244 }
247245
248246
249-func aW (S,aX) = {
250- let aY = getInteger(this, (((S + "_") + toString(aX)) + n))
251- let aZ = getInteger(this, (((S + "_") + toString(aX)) + m))
252- let aU = valueOrErrorMessage(getInteger(this, (S + k)), (("No data on the key: " + S) + k))
253- let ba = {
254- let am = aY
255- if ($isInstanceOf(am, "Int"))
247+func aX (T,aY) = {
248+ let aZ = getInteger(this, (((T + "_") + toString(aY)) + o))
249+ let ba = getInteger(this, (((T + "_") + toString(aY)) + n))
250+ let aV = valueOrErrorMessage(getInteger(this, (T + l)), (("No data on the key: " + T) + l))
251+ let bb = {
252+ let an = aZ
253+ if ($isInstanceOf(an, "Int"))
256254 then {
257- let aY = am
258- aY
255+ let aZ = an
256+ aZ
259257 }
260- else aU
258+ else aV
261259 }
262- let bb = {
263- let am = aZ
264- if ($isInstanceOf(am, "Int"))
260+ let bc = {
261+ let an = ba
262+ if ($isInstanceOf(an, "Int"))
265263 then {
266- let aZ = am
267- aZ
264+ let ba = an
265+ ba
268266 }
269267 else 0
270268 }
271- $Tuple2(ba, bb)
269+ $Tuple2(bb, bc)
272270 }
273271
274272
275-func bc (aV,aP,aU,bd,be,bf,bg,bh,bi) = if ((be == 0))
273+func bd (aW,aP,aQ,aV,be,bf,bg,bh,bi,bj) = if ((bf == 0))
276274 then 0
277- else if ((aP > height))
275+ else if (if ((aP >= height))
276+ then (aP == aQ)
277+ else false)
278278 then {
279- let bj = (bf * (height - aV))
280- (aU + fraction(bj, bh, be))
279+ let bk = (be * (height - aW))
280+ (aV + fraction(bk, bi, bf))
281281 }
282- else if ((aV > aP))
282+ else if (if ((height > aP))
283+ then (aP == aQ)
284+ else false)
283285 then {
284- let bj = (bd * (height - aV))
285- (aU + fraction(bj, bh, be))
286+ let bk = (be * (height - aW))
287+ (aV + fraction(bk, bi, bf))
286288 }
287- else {
288- let bk = (bf * (aP - aV))
289- let bl = (aU + fraction(bk, bh, be))
290- let bj = (bd * (height - aP))
291- (bl + fraction(bj, bh, be))
292- }
289+ else if (if ((height > aP))
290+ then (aP != aQ)
291+ else false)
292+ then {
293+ let bk = (bg * (height - aW))
294+ (aV + fraction(bk, bi, bf))
295+ }
296+ else if ((aW > aP))
297+ then {
298+ let bk = (be * (height - aW))
299+ (aV + fraction(bk, bi, bf))
300+ }
301+ else {
302+ let bl = (bg * (aP - aW))
303+ let bm = (aV + fraction(bl, bi, bf))
304+ let bk = (be * (height - aP))
305+ (bm + fraction(bk, bi, bf))
306+ }
293307
294308
295-func bm (S,bn,bi) = {
296- let bg = ax(S)
297- let bh = aC(aq, bg)
298- let be = aw(S)
299- let bo = aT(S)
300- let aV = bo._1
301- let aU = bo._2
302- let bp = aL(S)
303- let bd = bp._1
304- let aP = bp._2
305- let bf = bp._3
306- let bq = aW(S, bn)
307- let aY = bq._1
308- let bb = bq._2
309- let br = bc(aV, aP, aU, bd, be, bf, bg, bh, bi)
310- let bs = fraction(bb, (br - aY), bh)
311- let bt = br
312- $Tuple4(bt, br, bs, bb)
309+func bn (T,bo,bj) = {
310+ let bh = ay(T)
311+ let bi = aD(ar, bh)
312+ let bf = ax(T)
313+ let bp = aU(T)
314+ let aW = bp._1
315+ let aV = bp._2
316+ let bq = aL(T)
317+ let be = bq._1
318+ let aP = bq._2
319+ let bg = bq._3
320+ let aQ = bq._4
321+ let br = aX(T, bo)
322+ let aZ = br._1
323+ let bc = br._2
324+ let bs = bd(aW, aP, aQ, aV, be, bf, bg, bh, bi, bj)
325+ let bt = fraction(bc, (bs - aZ), bi)
326+ let bu = bs
327+ $Tuple4(bu, bs, bt, bc)
313328 }
314329
315330
316-func bu (S) = {
317- let bv = aT(S)
318- let aV = bv._1
319- let aU = bv._2
320- let bw = aL(S)
321- let bd = bw._1
322- let aP = bw._2
323- let bf = bw._3
324- let be = aw(S)
325- if ((be == 0))
331+func bv (T) = {
332+ let bw = aU(T)
333+ let aW = bw._1
334+ let aV = bw._2
335+ let bx = aL(T)
336+ let be = bx._1
337+ let aP = bx._2
338+ let bg = bx._3
339+ let aQ = bx._4
340+ let bf = ax(T)
341+ if ((bf == 0))
326342 then if ((aP > height))
327343 then {
328- let bj = (bf * (height - aV))
329- bj
344+ let bk = (bg * (height - aW))
345+ bk
330346 }
331- else if ((aV > aP))
347+ else if ((aW > aP))
332348 then {
333- let bj = (bd * (height - aV))
334- bj
349+ let bk = (be * (height - aW))
350+ bk
335351 }
336352 else {
337- let bk = (bf * (aP - aV))
338- let bj = (bd * (height - aP))
339- (bj + bk)
353+ let bl = (bg * (aP - aW))
354+ let bk = (be * (height - aP))
355+ (bk + bl)
340356 }
341357 else 0
342358 }
343359
344360
345-func bx (S,by) = {
346- let bz = fromBase58String(getStringValue(value(addressFromString(S)), "share_asset_id"))
347- if ((by == bz))
361+func by (T,bz) = {
362+ let bA = fromBase58String(getStringValue(value(addressFromString(T)), "share_asset_id"))
363+ if ((bz == bA))
348364 then true
349365 else false
350366 }
351367
352368
353-func bA (S,aJ) = valueOrElse(getInteger(this, (((S + "_") + toString(aJ)) + p)), 0)
369+func bB (T,aK) = valueOrElse(getInteger(this, (((T + "_") + toString(aK)) + q)), 0)
354370
355371
356-@Callable(bB)
357-func init (bC) = if (isDefined(getString(this, o)))
372+@Callable(bC)
373+func init (bD) = if (isDefined(getString(this, p)))
358374 then throw("SWOP already initialized")
359375 else {
360- let bD = 100000000000000
361- let bE = Issue("SWOP", "SWOP protocol token", bD, 8, true)
362- let bF = calculateAssetId(bE)
363-[Issue("SWOP", "SWOP protocol token", bD, 8, true), StringEntry(o, toBase58String(bF))]
376+ let bE = 100000000000000
377+ let bF = Issue("SWOP", "SWOP protocol token", bE, 8, true)
378+ let bG = calculateAssetId(bF)
379+[Issue("SWOP", "SWOP protocol token", bE, 8, true), StringEntry(p, toBase58String(bG))]
364380 }
365381
366382
367383
368-@Callable(bB)
369-func initPoolShareFarming (S) = if (aK(S))
370- then throw("Work is currently underway")
371- else if ((bB.caller != this))
372- then throw("Only the DApp itself can call this function")
373- else {
374- let bG = aL(S)
375- let bH = bG._1
376- let aP = bG._2
377- let bf = bG._3
378-[IntegerEntry((S + d), 0), IntegerEntry((S + k), 0), IntegerEntry((S + l), height)]
379- }
380-
381-
382-
383-@Callable(bB)
384-func lockShareTokens (S) = if (aK(S))
385- then throw("Work is currently underway")
384+@Callable(bC)
385+func initPoolShareFarming (T) = if ((bC.caller != this))
386+ then throw("Only the DApp itself can call this function")
386387 else {
387- let bI = $Tuple2(bB.payments[0].amount, bB.payments[0].assetId)
388- let bi = bI._1
389- let by = bI._2
390- let bJ = ay(by)
391- let bK = bJ._1
392- let bL = bJ._2
393- let bM = bJ._3
394- let bN = bm(S, bB.caller, bi)
395- let bt = bN._1
396- let br = bN._2
397- let bs = bN._3
398- let bb = bN._4
399- let bO = (bb + bi)
400- let bP = (aI(S, bB.caller) + bs)
401- let bQ = aw(S)
402- let bR = (bQ + bi)
403- let bS = bA(S, bB.caller)
404- let bT = (bS + bs)
405- let bU = [IntegerEntry((((S + "_") + toString(bB.caller)) + n), bt), IntegerEntry((((S + "_") + toString(bB.caller)) + m), bO), IntegerEntry((S + d), bR), IntegerEntry((S + k), br), IntegerEntry((S + l), height), IntegerEntry((((S + "_") + toString(bB.caller)) + p), bT), IntegerEntry((((S + "_") + toString(bB.caller)) + q), bs), IntegerEntry((((S + "_") + toString(bB.caller)) + r), bP)]
406- if ((0 >= bi))
407- then throw("You can't lock token")
408- else if (!(bx(S, by)))
409- then throw("Incorrect pmtAssetId")
410- else if (if (ar(Address(fromBase58String(S))))
411- then (as(Address(fromBase58String(S))) > height)
412- else false)
413- then {
414- let bV = ((((as(Address(fromBase58String(S))) - ad) + 1) / ae) - 1)
415- let bW = split(getStringValue(H, (((toString(bB.caller) + "_") + S) + "_user_pool_struc")), "_")
416- let bX = split(getStringValue(H, (S + "_pool_struc")), "_")
417- let bY = split(valueOrElse(getString(H, (((toString(bB.caller) + "_") + S) + z)), ""), "_")
418- let bZ = split(valueOrElse(getString(H, (S + y)), ""), "_")
419- let ca = bb
420- let cb = if ((toString(ah) == bW[2]))
421- then valueOrElse(parseInt(bY[0]), 0)
422- else valueOrElse(parseInt(bW[1]), 0)
423- let cc = if ((toString(ah) == bX[2]))
424- then valueOrElse(parseInt(bZ[0]), 0)
425- else valueOrElse(parseInt(bX[1]), 0)
426- let cd = bu(S)
427- if ((cb != 0))
428- then {
429- let ce = av(addressFromStringValue(S))
430- let cf = (fraction(ce, cb, cc) - ca)
431- if (if ((size(bY) > 1))
432- then (valueOrElse(parseInt(bY[1]), 0) >= bV)
433- else false)
434- then throw("You can't share token")
435- else if ((bi > ce))
436- then throw(("You can't share token more than " + toString(ce)))
437- else if ((cf > 0))
438- then if ((bQ == 0))
439- then (bU ++ [ScriptTransfer(G, cd, aq)])
440- else if ((cf >= bi))
441- then bU
442- else throw(("Your maximum share token is " + toString(cf)))
443- else throw("You can't share token")
444- }
445- else throw("Your amount of token less than 0")
446- }
447- else bU
388+ let bH = aL(T)
389+ let bI = bH._1
390+ let aP = bH._2
391+ let bg = bH._3
392+ let aQ = bH._4
393+[IntegerEntry((T + d), 0), IntegerEntry((T + l), 0), IntegerEntry((T + m), height)]
448394 }
449395
450396
451397
452-@Callable(bB)
453-func withdrawShareTokens (S,cg) = if (aK(S))
454- then throw("Work is currently underway")
398+@Callable(bC)
399+func updatePoolInterest (T) = if ((bC.caller != H))
400+ then throw("Only the Admin itself can call this function")
455401 else {
456- let ch = fromBase58String(getStringValue(value(addressFromString(S)), "share_asset_id"))
457- let ci = bm(S, bB.caller, 1)
458- let bt = ci._1
459- let br = ci._2
460- let bs = ci._3
461- let bb = ci._4
462- let bO = (bb - cg)
463- let bP = (aI(S, bB.caller) + bs)
464- let bQ = aw(S)
465- let bR = (bQ - cg)
466- let bS = bA(S, bB.caller)
467- let bT = (bS + bs)
468- if ((cg > bb))
469- then throw("Withdraw amount more then user locked amount")
470- else [IntegerEntry((((S + "_") + toString(bB.caller)) + n), bt), IntegerEntry((((S + "_") + toString(bB.caller)) + m), bO), IntegerEntry((S + k), br), IntegerEntry((S + l), height), IntegerEntry((S + d), bR), IntegerEntry((((S + "_") + toString(bB.caller)) + r), bP), IntegerEntry((((S + "_") + toString(bB.caller)) + p), bT), IntegerEntry((((S + "_") + toString(bB.caller)) + q), bs), ScriptTransfer(bB.caller, cg, ch)]
402+ let bJ = bn(T, J, 0)
403+ let bu = bJ._1
404+ let bs = bJ._2
405+ let bt = bJ._3
406+ let bc = bJ._4
407+ let bK = aL(T)
408+ let bI = bK._1
409+ let aP = bK._2
410+ let bg = bK._3
411+ let aQ = bK._4
412+[IntegerEntry((T + d), 0), IntegerEntry((T + l), bu), IntegerEntry((T + m), height)]
471413 }
472414
473415
474416
475-@Callable(bB)
476-func claim (S) = if (aK(S))
477- then throw("Work is currently underway")
478- else {
479- let be = aw(S)
480- let cj = aT(S)
481- let aV = cj._1
482- let aU = cj._2
483- let ck = aL(S)
484- let bd = ck._1
485- let aP = ck._2
486- let bf = ck._3
487- let cl = bm(S, bB.caller, 1)
488- let bt = cl._1
489- let br = cl._2
490- let bs = cl._3
491- let bb = cl._4
492- let cm = (aI(S, bB.caller) + bs)
493- let bS = bA(S, bB.caller)
494- let bT = (bS + bs)
495- if ((cm == 0))
496- then throw("You have 0 available SWOP")
497- else [IntegerEntry((((S + "_") + toString(bB.caller)) + n), bt), IntegerEntry((S + k), br), IntegerEntry((S + l), height), IntegerEntry((((S + "_") + toString(bB.caller)) + r), 0), IntegerEntry((((S + "_") + toString(bB.caller)) + p), bT), IntegerEntry((((S + "_") + toString(bB.caller)) + q), bs), ScriptTransfer(bB.caller, cm, aq)]
498- }
417+@Callable(bC)
418+func lockShareTokens (T) = {
419+ let bL = $Tuple2(bC.payments[0].amount, bC.payments[0].assetId)
420+ let bj = bL._1
421+ let bz = bL._2
422+ let bM = az(bz)
423+ let bN = bM._1
424+ let bO = bM._2
425+ let bP = bM._3
426+ let bQ = bn(T, bC.caller, bj)
427+ let bu = bQ._1
428+ let bs = bQ._2
429+ let bt = bQ._3
430+ let bc = bQ._4
431+ let bR = (bc + bj)
432+ let bS = (aJ(T, bC.caller) + bt)
433+ let bT = ax(T)
434+ let bU = (bT + bj)
435+ let bV = bB(T, bC.caller)
436+ let bW = (bV + bt)
437+ let bX = [IntegerEntry((((T + "_") + toString(bC.caller)) + o), bu), IntegerEntry((((T + "_") + toString(bC.caller)) + n), bR), IntegerEntry((T + d), bU), IntegerEntry((T + l), bs), IntegerEntry((T + m), height), IntegerEntry((((T + "_") + toString(bC.caller)) + q), bW), IntegerEntry((((T + "_") + toString(bC.caller)) + r), bt), IntegerEntry((((T + "_") + toString(bC.caller)) + s), bS)]
438+ if ((0 >= bj))
439+ then throw("You can't lock token")
440+ else if (!(by(T, bz)))
441+ then throw("Incorrect pmtAssetId")
442+ else if (if (as(Address(fromBase58String(T))))
443+ then (at(Address(fromBase58String(T))) > height)
444+ else false)
445+ then {
446+ let bY = ((((at(Address(fromBase58String(T))) - ae) + 1) / af) - 1)
447+ let bZ = split(getStringValue(I, (((toString(bC.caller) + "_") + T) + "_user_pool_struc")), "_")
448+ let ca = split(getStringValue(I, (T + "_pool_struc")), "_")
449+ let cb = split(valueOrElse(getString(I, (((toString(bC.caller) + "_") + T) + A)), ""), "_")
450+ let cc = split(valueOrElse(getString(I, (T + z)), ""), "_")
451+ let cd = bc
452+ let ce = if ((toString(ai) == bZ[2]))
453+ then valueOrElse(parseInt(cb[0]), 0)
454+ else valueOrElse(parseInt(bZ[1]), 0)
455+ let cf = if ((toString(ai) == ca[2]))
456+ then valueOrElse(parseInt(cc[0]), 0)
457+ else valueOrElse(parseInt(ca[1]), 0)
458+ let cg = bv(T)
459+ if ((ce != 0))
460+ then {
461+ let ch = aw(addressFromStringValue(T))
462+ let ci = (fraction(ch, ce, cf) - cd)
463+ if (if ((size(cb) > 1))
464+ then (valueOrElse(parseInt(cb[1]), 0) >= bY)
465+ else false)
466+ then throw("You can't share token")
467+ else if ((bj > ch))
468+ then throw(("You can't share token more than " + toString(ch)))
469+ else if ((ci > 0))
470+ then if ((bT == 0))
471+ then (bX ++ [ScriptTransfer(H, cg, ar)])
472+ else if ((ci >= bj))
473+ then bX
474+ else throw(("Your maximum share token is " + toString(ci)))
475+ else throw("You can't share token")
476+ }
477+ else throw("Your amount of token less than 0")
478+ }
479+ else bX
480+ }
499481
500482
501-@Verifier(cn)
502-func co () = {
503- let am = cn
504- sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
483+
484+@Callable(bC)
485+func withdrawShareTokens (T,cj) = {
486+ let ck = fromBase58String(getStringValue(value(addressFromString(T)), "share_asset_id"))
487+ let cl = bn(T, bC.caller, 1)
488+ let bu = cl._1
489+ let bs = cl._2
490+ let bt = cl._3
491+ let bc = cl._4
492+ let bR = (bc - cj)
493+ let bS = (aJ(T, bC.caller) + bt)
494+ let bT = ax(T)
495+ let bU = (bT - cj)
496+ let bV = bB(T, bC.caller)
497+ let bW = (bV + bt)
498+ if ((cj > bc))
499+ then throw("Withdraw amount more then user locked amount")
500+ else [IntegerEntry((((T + "_") + toString(bC.caller)) + o), bu), IntegerEntry((((T + "_") + toString(bC.caller)) + n), bR), IntegerEntry((T + l), bs), IntegerEntry((T + m), height), IntegerEntry((T + d), bU), IntegerEntry((((T + "_") + toString(bC.caller)) + s), bS), IntegerEntry((((T + "_") + toString(bC.caller)) + q), bW), IntegerEntry((((T + "_") + toString(bC.caller)) + r), bt), ScriptTransfer(bC.caller, cj, ck)]
501+ }
502+
503+
504+
505+@Callable(bC)
506+func claim (T) = {
507+ let bf = ax(T)
508+ let cm = aU(T)
509+ let aW = cm._1
510+ let aV = cm._2
511+ let cn = aL(T)
512+ let be = cn._1
513+ let aP = cn._2
514+ let bg = cn._3
515+ let aQ = cn._4
516+ let co = bn(T, bC.caller, 1)
517+ let bu = co._1
518+ let bs = co._2
519+ let bt = co._3
520+ let bc = co._4
521+ let cp = (aJ(T, bC.caller) + bt)
522+ let bV = bB(T, bC.caller)
523+ let bW = (bV + bt)
524+ if ((cp == 0))
525+ then throw("You have 0 available SWOP")
526+ else [IntegerEntry((((T + "_") + toString(bC.caller)) + o), bu), IntegerEntry((T + l), bs), IntegerEntry((T + m), height), IntegerEntry((((T + "_") + toString(bC.caller)) + s), 0), IntegerEntry((((T + "_") + toString(bC.caller)) + q), bW), IntegerEntry((((T + "_") + toString(bC.caller)) + r), bt), ScriptTransfer(bC.caller, cp, ar)]
527+ }
528+
529+
530+@Verifier(cq)
531+func cr () = {
532+ let an = cq
533+ sigVerify(cq.bodyBytes, cq.proofs[0], cq.senderPublicKey)
505534 }
506535
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
55
66 let b = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
77
88 let c = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
99
1010 let d = "_total_share_tokens_locked"
1111
1212 let e = "share_limit_on_first_harvest"
1313
1414 let f = "_current_pool_fraction_reward"
1515
1616 let g = "_previous_pool_fraction_reward"
1717
18-let h = "total_reward_per_block_current"
18+let h = "_reward_update_height"
1919
20-let i = "total_reward_per_block_previous"
20+let i = "total_reward_per_block_current"
2121
22-let j = "reward_update_height"
22+let j = "total_reward_per_block_previous"
2323
24-let k = "_last_interest"
24+let k = "reward_update_height"
2525
26-let l = "_last_interest_height"
26+let l = "_last_interest"
2727
28-let m = "_share_tokens_locked"
28+let m = "_last_interest_height"
2929
30-let n = "_last_interest"
30+let n = "_share_tokens_locked"
3131
32-let o = "SWOP_id"
32+let o = "_last_interest"
3333
34-let p = "_SWOP_claimed_amount"
34+let p = "SWOP_id"
3535
36-let q = "_SWOP_last_claimed_amount"
36+let q = "_SWOP_claimed_amount"
3737
38-let r = "_available_SWOP"
38+let r = "_SWOP_last_claimed_amount"
3939
40-let s = "farming_start_height"
40+let s = "_available_SWOP"
4141
42-let t = "apy"
42+let t = "farming_start_height"
4343
44-let u = "previous_total_vote_SWOP"
44+let u = "apy"
4545
46-let v = "swop_year_emission"
46+let v = "previous_total_vote_SWOP"
4747
48-let w = "A_asset_balance"
48+let w = "swop_year_emission"
4949
50-let x = "B_asset_balance"
50+let x = "A_asset_balance"
5151
52-let y = "_harvest_pool_activeVote_struc"
52+let y = "B_asset_balance"
5353
54-let z = "_harvest_user_pool_activeVote_struc"
54+let z = "_harvest_pool_activeVote_struc"
5555
56-let A = "share_limit_on_first_harvest"
56+let A = "_harvest_user_pool_activeVote_struc"
5757
58-let B = "A_asset_id"
58+let B = "share_limit_on_first_harvest"
5959
60-let C = "B_asset_id"
60+let C = "A_asset_id"
6161
62-let D = "first_harvest_height"
62+let D = "B_asset_id"
6363
64-let E = "first_harvest"
64+let E = "first_harvest_height"
6565
66-let F = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
66+let F = "first_harvest"
6767
68-let G = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
68+let G = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
6969
70-let H = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
70+let H = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7171
72-let I = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
72+let I = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
7373
74-let J = 10106
74+let J = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7575
76-let K = 10000000000
76+let K = 10106
7777
78-let L = 10
78+let L = 10000000000
7979
80-let M = 1000
80+let M = 10
8181
82-let N = 100000
82+let N = 1000
8383
84-let O = 1000000
84+let O = 100000
8585
86-let P = 100000000
86+let P = 1000000
8787
88-let Q = 100000000000
88+let Q = 100000000
8989
90-func R (S) = getStringValue(S, B)
90+let R = 100000000000
91+
92+func S (T) = getStringValue(T, C)
9193
9294
93-func T (S) = getStringValue(S, C)
95+func U (T) = getStringValue(T, D)
9496
9597
96-func U (S) = if ((R(S) == "WAVES"))
98+func V (T) = if ((S(T) == "WAVES"))
9799 then unit
98- else fromBase58String(R(S))
100+ else fromBase58String(S(T))
99101
100102
101-func V (S) = if ((T(S) == "WAVES"))
103+func W (T) = if ((U(T) == "WAVES"))
102104 then unit
103- else fromBase58String(T(S))
105+ else fromBase58String(U(T))
104106
105107
106-let W = "base_period"
108+let X = "base_period"
107109
108-let X = "period_length"
110+let Y = "period_length"
109111
110-let Y = "start_height"
112+let Z = "start_height"
111113
112-let Z = "first_harvest_height"
114+let aa = "first_harvest_height"
113115
114-let aa = "duration_full_vote_power"
116+let ab = "duration_full_vote_power"
115117
116-let ab = "min_vote_power"
118+let ac = "min_vote_power"
117119
118-let ac = valueOrErrorMessage(getInteger(H, W), "Empty kBasePeriod")
120+let ad = valueOrErrorMessage(getInteger(I, X), "Empty kBasePeriod")
119121
120-let ad = valueOrErrorMessage(getInteger(H, Y), "Empty kStartHeight")
122+let ae = valueOrErrorMessage(getInteger(I, Z), "Empty kStartHeight")
121123
122-let ae = valueOrErrorMessage(getInteger(H, X), "Empty kPeriodLength")
124+let af = valueOrErrorMessage(getInteger(I, Y), "Empty kPeriodLength")
123125
124-let af = valueOrErrorMessage(getInteger(H, aa), "Empty kDurationFullVotePower")
126+let ag = valueOrErrorMessage(getInteger(I, ab), "Empty kDurationFullVotePower")
125127
126-let ag = valueOrErrorMessage(getInteger(H, ab), "Empty kMinVotePower")
128+let ah = valueOrErrorMessage(getInteger(I, ac), "Empty kMinVotePower")
127129
128-let ah = (ac + ((height - ad) / ae))
130+let ai = (ad + ((height - ae) / af))
129131
130-func ai (S) = valueOrElse(getIntegerValue(S, A), 0)
132+func aj (T) = valueOrElse(getIntegerValue(T, B), 0)
131133
132134
133-let aj = getIntegerValue(this, t)
135+let ak = getIntegerValue(this, u)
134136
135-let ak = getIntegerValue(this, v)
137+let al = getIntegerValue(this, w)
136138
137-func al (S) = {
138- let am = U(S)
139- if ($isInstanceOf(am, "ByteVector"))
139+func am (T) = {
140+ let an = V(T)
141+ if ($isInstanceOf(an, "ByteVector"))
140142 then {
141- let an = am
142- value(assetInfo(an)).name
143+ let ao = an
144+ value(assetInfo(ao)).name
143145 }
144- else if ($isInstanceOf(am, "Unit"))
146+ else if ($isInstanceOf(an, "Unit"))
145147 then {
146- let ao = am
148+ let ap = an
147149 "WAVES"
148150 }
149151 else throw("Match error")
150152 }
151153
152154
153-func ap (S) = {
154- let am = V(S)
155- if ($isInstanceOf(am, "ByteVector"))
155+func aq (T) = {
156+ let an = W(T)
157+ if ($isInstanceOf(an, "ByteVector"))
156158 then {
157- let an = am
158- value(assetInfo(an)).name
159+ let ao = an
160+ value(assetInfo(ao)).name
159161 }
160- else if ($isInstanceOf(am, "Unit"))
162+ else if ($isInstanceOf(an, "Unit"))
161163 then {
162- let ao = am
164+ let ap = an
163165 "WAVES"
164166 }
165167 else throw("Match error")
166168 }
167169
168170
169-let aq = fromBase58String(getStringValue(this, o))
171+let ar = fromBase58String(getStringValue(this, p))
170172
171-func ar (S) = valueOrElse(getBoolean(S, E), false)
173+func as (T) = valueOrElse(getBoolean(T, F), false)
172174
173175
174-func as (S) = valueOrElse(getInteger(S, D), 0)
176+func at (T) = valueOrElse(getInteger(T, E), 0)
175177
176178
177-func at (S) = valueOrErrorMessage(getInteger(S, w), ("No data on the key: " + w))
179+func au (T) = valueOrErrorMessage(getInteger(T, x), ("No data on the key: " + x))
178180
179181
180-func au (S) = valueOrErrorMessage(getInteger(S, x), ("No data on the key: " + x))
182+func av (T) = valueOrErrorMessage(getInteger(T, y), ("No data on the key: " + y))
181183
182184
183-func av (S) = valueOrErrorMessage(getInteger(S, e), ("No data on the key: " + e))
185+func aw (T) = valueOrErrorMessage(getInteger(T, e), ("No data on the key: " + e))
184186
185187
186-func aw (S) = valueOrErrorMessage(getInteger(this, (S + d)), (("No data on the key: " + S) + d))
188+func ax (T) = valueOrErrorMessage(getInteger(this, (T + d)), (("No data on the key: " + T) + d))
187189
188190
189-func ax (S) = fromBase58String(getStringValue(value(addressFromString(S)), "share_asset_id"))
191+func ay (T) = fromBase58String(getStringValue(value(addressFromString(T)), "share_asset_id"))
190192
191193
192-func ay (az) = {
193- let am = az
194- if ($isInstanceOf(am, "ByteVector"))
194+func az (aA) = {
195+ let an = aA
196+ if ($isInstanceOf(an, "ByteVector"))
195197 then {
196- let an = am
197- let aA = toBase58String(an)
198- let aB = valueOrErrorMessage(assetInfo(an), (("Asset " + aA) + " doesn't exist"))
199- $Tuple3(aA, aB.name, aB.decimals)
198+ let ao = an
199+ let aB = toBase58String(ao)
200+ let aC = valueOrErrorMessage(assetInfo(ao), (("Asset " + aB) + " doesn't exist"))
201+ $Tuple3(aB, aC.name, aC.decimals)
200202 }
201- else if ($isInstanceOf(am, "Unit"))
203+ else if ($isInstanceOf(an, "Unit"))
202204 then {
203- let ao = am
205+ let ap = an
204206 $Tuple3("WAVES", "WAVES", 8)
205207 }
206208 else throw("Match error")
207209 }
208210
209211
210-func aC (aD,aE) = {
211- let aF = value(assetInfo(aD)).decimals
212+func aD (aE,aF) = {
212213 let aG = value(assetInfo(aE)).decimals
213- let aH = ((aG - aF) + 8)
214- pow(10, 0, aH, 0, 0, HALFDOWN)
214+ let aH = value(assetInfo(aF)).decimals
215+ let aI = ((aH - aG) + 8)
216+ pow(10, 0, aI, 0, 0, HALFDOWN)
215217 }
216218
217219
218-func aI (S,aJ) = valueOrElse(getInteger(this, (((S + "_") + toString(aJ)) + r)), 0)
220+func aJ (T,aK) = valueOrElse(getInteger(this, (((T + "_") + toString(aK)) + s)), 0)
219221
220222
221-func aK (S) = if ((S == "3PCdNCULgjM9ZMLEt61M45qxV26ro6o48Jj"))
222- then true
223- else (S == "3PMcDUBDyjNB1fkRGeLGpsz1ZQPfcmyp4r5")
224-
225-
226-func aL (S) = {
227- let aM = valueOrErrorMessage(getInteger(F, h), ((("No data on the key: " + h) + " at address ") + toString(F)))
228- let aN = valueOrErrorMessage(getInteger(F, i), ((("No data on the key: " + i) + " at address ") + toString(F)))
229- let aO = valueOrErrorMessage(getInteger(F, (S + f)), (((("No data on the key: " + S) + f) + " at address ") + toString(F)))
230- let aP = valueOrErrorMessage(getInteger(F, j), ((("No data on the key: " + j) + " at address ") + toString(F)))
231- let aQ = valueOrErrorMessage(getInteger(F, (S + g)), (((("No data on the key: " + S) + g) + " at address ") + toString(F)))
232- let aR = fraction(aM, aO, K)
233- let aS = fraction(aN, aQ, K)
234- if (if ((aR > aM))
223+func aL (T) = {
224+ let aM = valueOrErrorMessage(getInteger(G, i), ((("No data on the key: " + i) + " at address ") + toString(G)))
225+ let aN = valueOrErrorMessage(getInteger(G, j), ((("No data on the key: " + j) + " at address ") + toString(G)))
226+ let aO = valueOrErrorMessage(getInteger(G, (T + f)), (((("No data on the key: " + T) + f) + " at address ") + toString(G)))
227+ let aP = valueOrErrorMessage(getInteger(G, k), ((("No data on the key: " + k) + " at address ") + toString(G)))
228+ let aQ = valueOrErrorMessage(getInteger(G, (T + h)), (((("No data on the key: " + T) + h) + " at address ") + toString(G)))
229+ let aR = valueOrErrorMessage(getInteger(G, (T + g)), (((("No data on the key: " + T) + g) + " at address ") + toString(G)))
230+ let aS = fraction(aM, aO, L)
231+ let aT = fraction(aN, aR, L)
232+ if (if ((aS > aM))
235233 then true
236- else (aS > aN))
234+ else (aT > aN))
237235 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
238- else $Tuple3(aR, aP, aS)
236+ else $Tuple4(aS, aP, aT, aQ)
239237 }
240238
241239
242-func aT (S) = {
243- let aU = valueOrErrorMessage(getInteger(this, (S + k)), (("No data on the key: " + S) + k))
244- let aV = valueOrElse(getInteger(this, (S + l)), height)
245- $Tuple2(aV, aU)
240+func aU (T) = {
241+ let aV = valueOrErrorMessage(getInteger(this, (T + l)), (("No data on the key: " + T) + l))
242+ let aW = valueOrElse(getInteger(this, (T + m)), height)
243+ $Tuple2(aW, aV)
246244 }
247245
248246
249-func aW (S,aX) = {
250- let aY = getInteger(this, (((S + "_") + toString(aX)) + n))
251- let aZ = getInteger(this, (((S + "_") + toString(aX)) + m))
252- let aU = valueOrErrorMessage(getInteger(this, (S + k)), (("No data on the key: " + S) + k))
253- let ba = {
254- let am = aY
255- if ($isInstanceOf(am, "Int"))
247+func aX (T,aY) = {
248+ let aZ = getInteger(this, (((T + "_") + toString(aY)) + o))
249+ let ba = getInteger(this, (((T + "_") + toString(aY)) + n))
250+ let aV = valueOrErrorMessage(getInteger(this, (T + l)), (("No data on the key: " + T) + l))
251+ let bb = {
252+ let an = aZ
253+ if ($isInstanceOf(an, "Int"))
256254 then {
257- let aY = am
258- aY
255+ let aZ = an
256+ aZ
259257 }
260- else aU
258+ else aV
261259 }
262- let bb = {
263- let am = aZ
264- if ($isInstanceOf(am, "Int"))
260+ let bc = {
261+ let an = ba
262+ if ($isInstanceOf(an, "Int"))
265263 then {
266- let aZ = am
267- aZ
264+ let ba = an
265+ ba
268266 }
269267 else 0
270268 }
271- $Tuple2(ba, bb)
269+ $Tuple2(bb, bc)
272270 }
273271
274272
275-func bc (aV,aP,aU,bd,be,bf,bg,bh,bi) = if ((be == 0))
273+func bd (aW,aP,aQ,aV,be,bf,bg,bh,bi,bj) = if ((bf == 0))
276274 then 0
277- else if ((aP > height))
275+ else if (if ((aP >= height))
276+ then (aP == aQ)
277+ else false)
278278 then {
279- let bj = (bf * (height - aV))
280- (aU + fraction(bj, bh, be))
279+ let bk = (be * (height - aW))
280+ (aV + fraction(bk, bi, bf))
281281 }
282- else if ((aV > aP))
282+ else if (if ((height > aP))
283+ then (aP == aQ)
284+ else false)
283285 then {
284- let bj = (bd * (height - aV))
285- (aU + fraction(bj, bh, be))
286+ let bk = (be * (height - aW))
287+ (aV + fraction(bk, bi, bf))
286288 }
287- else {
288- let bk = (bf * (aP - aV))
289- let bl = (aU + fraction(bk, bh, be))
290- let bj = (bd * (height - aP))
291- (bl + fraction(bj, bh, be))
292- }
289+ else if (if ((height > aP))
290+ then (aP != aQ)
291+ else false)
292+ then {
293+ let bk = (bg * (height - aW))
294+ (aV + fraction(bk, bi, bf))
295+ }
296+ else if ((aW > aP))
297+ then {
298+ let bk = (be * (height - aW))
299+ (aV + fraction(bk, bi, bf))
300+ }
301+ else {
302+ let bl = (bg * (aP - aW))
303+ let bm = (aV + fraction(bl, bi, bf))
304+ let bk = (be * (height - aP))
305+ (bm + fraction(bk, bi, bf))
306+ }
293307
294308
295-func bm (S,bn,bi) = {
296- let bg = ax(S)
297- let bh = aC(aq, bg)
298- let be = aw(S)
299- let bo = aT(S)
300- let aV = bo._1
301- let aU = bo._2
302- let bp = aL(S)
303- let bd = bp._1
304- let aP = bp._2
305- let bf = bp._3
306- let bq = aW(S, bn)
307- let aY = bq._1
308- let bb = bq._2
309- let br = bc(aV, aP, aU, bd, be, bf, bg, bh, bi)
310- let bs = fraction(bb, (br - aY), bh)
311- let bt = br
312- $Tuple4(bt, br, bs, bb)
309+func bn (T,bo,bj) = {
310+ let bh = ay(T)
311+ let bi = aD(ar, bh)
312+ let bf = ax(T)
313+ let bp = aU(T)
314+ let aW = bp._1
315+ let aV = bp._2
316+ let bq = aL(T)
317+ let be = bq._1
318+ let aP = bq._2
319+ let bg = bq._3
320+ let aQ = bq._4
321+ let br = aX(T, bo)
322+ let aZ = br._1
323+ let bc = br._2
324+ let bs = bd(aW, aP, aQ, aV, be, bf, bg, bh, bi, bj)
325+ let bt = fraction(bc, (bs - aZ), bi)
326+ let bu = bs
327+ $Tuple4(bu, bs, bt, bc)
313328 }
314329
315330
316-func bu (S) = {
317- let bv = aT(S)
318- let aV = bv._1
319- let aU = bv._2
320- let bw = aL(S)
321- let bd = bw._1
322- let aP = bw._2
323- let bf = bw._3
324- let be = aw(S)
325- if ((be == 0))
331+func bv (T) = {
332+ let bw = aU(T)
333+ let aW = bw._1
334+ let aV = bw._2
335+ let bx = aL(T)
336+ let be = bx._1
337+ let aP = bx._2
338+ let bg = bx._3
339+ let aQ = bx._4
340+ let bf = ax(T)
341+ if ((bf == 0))
326342 then if ((aP > height))
327343 then {
328- let bj = (bf * (height - aV))
329- bj
344+ let bk = (bg * (height - aW))
345+ bk
330346 }
331- else if ((aV > aP))
347+ else if ((aW > aP))
332348 then {
333- let bj = (bd * (height - aV))
334- bj
349+ let bk = (be * (height - aW))
350+ bk
335351 }
336352 else {
337- let bk = (bf * (aP - aV))
338- let bj = (bd * (height - aP))
339- (bj + bk)
353+ let bl = (bg * (aP - aW))
354+ let bk = (be * (height - aP))
355+ (bk + bl)
340356 }
341357 else 0
342358 }
343359
344360
345-func bx (S,by) = {
346- let bz = fromBase58String(getStringValue(value(addressFromString(S)), "share_asset_id"))
347- if ((by == bz))
361+func by (T,bz) = {
362+ let bA = fromBase58String(getStringValue(value(addressFromString(T)), "share_asset_id"))
363+ if ((bz == bA))
348364 then true
349365 else false
350366 }
351367
352368
353-func bA (S,aJ) = valueOrElse(getInteger(this, (((S + "_") + toString(aJ)) + p)), 0)
369+func bB (T,aK) = valueOrElse(getInteger(this, (((T + "_") + toString(aK)) + q)), 0)
354370
355371
356-@Callable(bB)
357-func init (bC) = if (isDefined(getString(this, o)))
372+@Callable(bC)
373+func init (bD) = if (isDefined(getString(this, p)))
358374 then throw("SWOP already initialized")
359375 else {
360- let bD = 100000000000000
361- let bE = Issue("SWOP", "SWOP protocol token", bD, 8, true)
362- let bF = calculateAssetId(bE)
363-[Issue("SWOP", "SWOP protocol token", bD, 8, true), StringEntry(o, toBase58String(bF))]
376+ let bE = 100000000000000
377+ let bF = Issue("SWOP", "SWOP protocol token", bE, 8, true)
378+ let bG = calculateAssetId(bF)
379+[Issue("SWOP", "SWOP protocol token", bE, 8, true), StringEntry(p, toBase58String(bG))]
364380 }
365381
366382
367383
368-@Callable(bB)
369-func initPoolShareFarming (S) = if (aK(S))
370- then throw("Work is currently underway")
371- else if ((bB.caller != this))
372- then throw("Only the DApp itself can call this function")
373- else {
374- let bG = aL(S)
375- let bH = bG._1
376- let aP = bG._2
377- let bf = bG._3
378-[IntegerEntry((S + d), 0), IntegerEntry((S + k), 0), IntegerEntry((S + l), height)]
379- }
380-
381-
382-
383-@Callable(bB)
384-func lockShareTokens (S) = if (aK(S))
385- then throw("Work is currently underway")
384+@Callable(bC)
385+func initPoolShareFarming (T) = if ((bC.caller != this))
386+ then throw("Only the DApp itself can call this function")
386387 else {
387- let bI = $Tuple2(bB.payments[0].amount, bB.payments[0].assetId)
388- let bi = bI._1
389- let by = bI._2
390- let bJ = ay(by)
391- let bK = bJ._1
392- let bL = bJ._2
393- let bM = bJ._3
394- let bN = bm(S, bB.caller, bi)
395- let bt = bN._1
396- let br = bN._2
397- let bs = bN._3
398- let bb = bN._4
399- let bO = (bb + bi)
400- let bP = (aI(S, bB.caller) + bs)
401- let bQ = aw(S)
402- let bR = (bQ + bi)
403- let bS = bA(S, bB.caller)
404- let bT = (bS + bs)
405- let bU = [IntegerEntry((((S + "_") + toString(bB.caller)) + n), bt), IntegerEntry((((S + "_") + toString(bB.caller)) + m), bO), IntegerEntry((S + d), bR), IntegerEntry((S + k), br), IntegerEntry((S + l), height), IntegerEntry((((S + "_") + toString(bB.caller)) + p), bT), IntegerEntry((((S + "_") + toString(bB.caller)) + q), bs), IntegerEntry((((S + "_") + toString(bB.caller)) + r), bP)]
406- if ((0 >= bi))
407- then throw("You can't lock token")
408- else if (!(bx(S, by)))
409- then throw("Incorrect pmtAssetId")
410- else if (if (ar(Address(fromBase58String(S))))
411- then (as(Address(fromBase58String(S))) > height)
412- else false)
413- then {
414- let bV = ((((as(Address(fromBase58String(S))) - ad) + 1) / ae) - 1)
415- let bW = split(getStringValue(H, (((toString(bB.caller) + "_") + S) + "_user_pool_struc")), "_")
416- let bX = split(getStringValue(H, (S + "_pool_struc")), "_")
417- let bY = split(valueOrElse(getString(H, (((toString(bB.caller) + "_") + S) + z)), ""), "_")
418- let bZ = split(valueOrElse(getString(H, (S + y)), ""), "_")
419- let ca = bb
420- let cb = if ((toString(ah) == bW[2]))
421- then valueOrElse(parseInt(bY[0]), 0)
422- else valueOrElse(parseInt(bW[1]), 0)
423- let cc = if ((toString(ah) == bX[2]))
424- then valueOrElse(parseInt(bZ[0]), 0)
425- else valueOrElse(parseInt(bX[1]), 0)
426- let cd = bu(S)
427- if ((cb != 0))
428- then {
429- let ce = av(addressFromStringValue(S))
430- let cf = (fraction(ce, cb, cc) - ca)
431- if (if ((size(bY) > 1))
432- then (valueOrElse(parseInt(bY[1]), 0) >= bV)
433- else false)
434- then throw("You can't share token")
435- else if ((bi > ce))
436- then throw(("You can't share token more than " + toString(ce)))
437- else if ((cf > 0))
438- then if ((bQ == 0))
439- then (bU ++ [ScriptTransfer(G, cd, aq)])
440- else if ((cf >= bi))
441- then bU
442- else throw(("Your maximum share token is " + toString(cf)))
443- else throw("You can't share token")
444- }
445- else throw("Your amount of token less than 0")
446- }
447- else bU
388+ let bH = aL(T)
389+ let bI = bH._1
390+ let aP = bH._2
391+ let bg = bH._3
392+ let aQ = bH._4
393+[IntegerEntry((T + d), 0), IntegerEntry((T + l), 0), IntegerEntry((T + m), height)]
448394 }
449395
450396
451397
452-@Callable(bB)
453-func withdrawShareTokens (S,cg) = if (aK(S))
454- then throw("Work is currently underway")
398+@Callable(bC)
399+func updatePoolInterest (T) = if ((bC.caller != H))
400+ then throw("Only the Admin itself can call this function")
455401 else {
456- let ch = fromBase58String(getStringValue(value(addressFromString(S)), "share_asset_id"))
457- let ci = bm(S, bB.caller, 1)
458- let bt = ci._1
459- let br = ci._2
460- let bs = ci._3
461- let bb = ci._4
462- let bO = (bb - cg)
463- let bP = (aI(S, bB.caller) + bs)
464- let bQ = aw(S)
465- let bR = (bQ - cg)
466- let bS = bA(S, bB.caller)
467- let bT = (bS + bs)
468- if ((cg > bb))
469- then throw("Withdraw amount more then user locked amount")
470- else [IntegerEntry((((S + "_") + toString(bB.caller)) + n), bt), IntegerEntry((((S + "_") + toString(bB.caller)) + m), bO), IntegerEntry((S + k), br), IntegerEntry((S + l), height), IntegerEntry((S + d), bR), IntegerEntry((((S + "_") + toString(bB.caller)) + r), bP), IntegerEntry((((S + "_") + toString(bB.caller)) + p), bT), IntegerEntry((((S + "_") + toString(bB.caller)) + q), bs), ScriptTransfer(bB.caller, cg, ch)]
402+ let bJ = bn(T, J, 0)
403+ let bu = bJ._1
404+ let bs = bJ._2
405+ let bt = bJ._3
406+ let bc = bJ._4
407+ let bK = aL(T)
408+ let bI = bK._1
409+ let aP = bK._2
410+ let bg = bK._3
411+ let aQ = bK._4
412+[IntegerEntry((T + d), 0), IntegerEntry((T + l), bu), IntegerEntry((T + m), height)]
471413 }
472414
473415
474416
475-@Callable(bB)
476-func claim (S) = if (aK(S))
477- then throw("Work is currently underway")
478- else {
479- let be = aw(S)
480- let cj = aT(S)
481- let aV = cj._1
482- let aU = cj._2
483- let ck = aL(S)
484- let bd = ck._1
485- let aP = ck._2
486- let bf = ck._3
487- let cl = bm(S, bB.caller, 1)
488- let bt = cl._1
489- let br = cl._2
490- let bs = cl._3
491- let bb = cl._4
492- let cm = (aI(S, bB.caller) + bs)
493- let bS = bA(S, bB.caller)
494- let bT = (bS + bs)
495- if ((cm == 0))
496- then throw("You have 0 available SWOP")
497- else [IntegerEntry((((S + "_") + toString(bB.caller)) + n), bt), IntegerEntry((S + k), br), IntegerEntry((S + l), height), IntegerEntry((((S + "_") + toString(bB.caller)) + r), 0), IntegerEntry((((S + "_") + toString(bB.caller)) + p), bT), IntegerEntry((((S + "_") + toString(bB.caller)) + q), bs), ScriptTransfer(bB.caller, cm, aq)]
498- }
417+@Callable(bC)
418+func lockShareTokens (T) = {
419+ let bL = $Tuple2(bC.payments[0].amount, bC.payments[0].assetId)
420+ let bj = bL._1
421+ let bz = bL._2
422+ let bM = az(bz)
423+ let bN = bM._1
424+ let bO = bM._2
425+ let bP = bM._3
426+ let bQ = bn(T, bC.caller, bj)
427+ let bu = bQ._1
428+ let bs = bQ._2
429+ let bt = bQ._3
430+ let bc = bQ._4
431+ let bR = (bc + bj)
432+ let bS = (aJ(T, bC.caller) + bt)
433+ let bT = ax(T)
434+ let bU = (bT + bj)
435+ let bV = bB(T, bC.caller)
436+ let bW = (bV + bt)
437+ let bX = [IntegerEntry((((T + "_") + toString(bC.caller)) + o), bu), IntegerEntry((((T + "_") + toString(bC.caller)) + n), bR), IntegerEntry((T + d), bU), IntegerEntry((T + l), bs), IntegerEntry((T + m), height), IntegerEntry((((T + "_") + toString(bC.caller)) + q), bW), IntegerEntry((((T + "_") + toString(bC.caller)) + r), bt), IntegerEntry((((T + "_") + toString(bC.caller)) + s), bS)]
438+ if ((0 >= bj))
439+ then throw("You can't lock token")
440+ else if (!(by(T, bz)))
441+ then throw("Incorrect pmtAssetId")
442+ else if (if (as(Address(fromBase58String(T))))
443+ then (at(Address(fromBase58String(T))) > height)
444+ else false)
445+ then {
446+ let bY = ((((at(Address(fromBase58String(T))) - ae) + 1) / af) - 1)
447+ let bZ = split(getStringValue(I, (((toString(bC.caller) + "_") + T) + "_user_pool_struc")), "_")
448+ let ca = split(getStringValue(I, (T + "_pool_struc")), "_")
449+ let cb = split(valueOrElse(getString(I, (((toString(bC.caller) + "_") + T) + A)), ""), "_")
450+ let cc = split(valueOrElse(getString(I, (T + z)), ""), "_")
451+ let cd = bc
452+ let ce = if ((toString(ai) == bZ[2]))
453+ then valueOrElse(parseInt(cb[0]), 0)
454+ else valueOrElse(parseInt(bZ[1]), 0)
455+ let cf = if ((toString(ai) == ca[2]))
456+ then valueOrElse(parseInt(cc[0]), 0)
457+ else valueOrElse(parseInt(ca[1]), 0)
458+ let cg = bv(T)
459+ if ((ce != 0))
460+ then {
461+ let ch = aw(addressFromStringValue(T))
462+ let ci = (fraction(ch, ce, cf) - cd)
463+ if (if ((size(cb) > 1))
464+ then (valueOrElse(parseInt(cb[1]), 0) >= bY)
465+ else false)
466+ then throw("You can't share token")
467+ else if ((bj > ch))
468+ then throw(("You can't share token more than " + toString(ch)))
469+ else if ((ci > 0))
470+ then if ((bT == 0))
471+ then (bX ++ [ScriptTransfer(H, cg, ar)])
472+ else if ((ci >= bj))
473+ then bX
474+ else throw(("Your maximum share token is " + toString(ci)))
475+ else throw("You can't share token")
476+ }
477+ else throw("Your amount of token less than 0")
478+ }
479+ else bX
480+ }
499481
500482
501-@Verifier(cn)
502-func co () = {
503- let am = cn
504- sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
483+
484+@Callable(bC)
485+func withdrawShareTokens (T,cj) = {
486+ let ck = fromBase58String(getStringValue(value(addressFromString(T)), "share_asset_id"))
487+ let cl = bn(T, bC.caller, 1)
488+ let bu = cl._1
489+ let bs = cl._2
490+ let bt = cl._3
491+ let bc = cl._4
492+ let bR = (bc - cj)
493+ let bS = (aJ(T, bC.caller) + bt)
494+ let bT = ax(T)
495+ let bU = (bT - cj)
496+ let bV = bB(T, bC.caller)
497+ let bW = (bV + bt)
498+ if ((cj > bc))
499+ then throw("Withdraw amount more then user locked amount")
500+ else [IntegerEntry((((T + "_") + toString(bC.caller)) + o), bu), IntegerEntry((((T + "_") + toString(bC.caller)) + n), bR), IntegerEntry((T + l), bs), IntegerEntry((T + m), height), IntegerEntry((T + d), bU), IntegerEntry((((T + "_") + toString(bC.caller)) + s), bS), IntegerEntry((((T + "_") + toString(bC.caller)) + q), bW), IntegerEntry((((T + "_") + toString(bC.caller)) + r), bt), ScriptTransfer(bC.caller, cj, ck)]
501+ }
502+
503+
504+
505+@Callable(bC)
506+func claim (T) = {
507+ let bf = ax(T)
508+ let cm = aU(T)
509+ let aW = cm._1
510+ let aV = cm._2
511+ let cn = aL(T)
512+ let be = cn._1
513+ let aP = cn._2
514+ let bg = cn._3
515+ let aQ = cn._4
516+ let co = bn(T, bC.caller, 1)
517+ let bu = co._1
518+ let bs = co._2
519+ let bt = co._3
520+ let bc = co._4
521+ let cp = (aJ(T, bC.caller) + bt)
522+ let bV = bB(T, bC.caller)
523+ let bW = (bV + bt)
524+ if ((cp == 0))
525+ then throw("You have 0 available SWOP")
526+ else [IntegerEntry((((T + "_") + toString(bC.caller)) + o), bu), IntegerEntry((T + l), bs), IntegerEntry((T + m), height), IntegerEntry((((T + "_") + toString(bC.caller)) + s), 0), IntegerEntry((((T + "_") + toString(bC.caller)) + q), bW), IntegerEntry((((T + "_") + toString(bC.caller)) + r), bt), ScriptTransfer(bC.caller, cp, ar)]
527+ }
528+
529+
530+@Verifier(cq)
531+func cr () = {
532+ let an = cq
533+ sigVerify(cq.bodyBytes, cq.proofs[0], cq.senderPublicKey)
505534 }
506535

github/deemru/w8io/169f3d6 
139.62 ms