tx · 6ZYEWT36y8HhEf4MuifTYHDQt2SqYvpZgxyTNooAXeBP

3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK:  -0.09000000 Waves

2023.02.06 13:23 [2437625] smart account 3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK > SELF 0.00000000 Waves

{ "type": 13, "id": "6ZYEWT36y8HhEf4MuifTYHDQt2SqYvpZgxyTNooAXeBP", "fee": 9000000, "feeAssetId": null, "timestamp": 1675678954736, "version": 2, "chainId": 84, "sender": "3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK", "senderPublicKey": "FFdBua5rzzMkZebvsvmN7sAdU7XhFK8QNJ3hiwwxAYRA", "proofs": [ "4VeZH8fAEzyFykWKBxfm2eURUDubu5aL2j3oykLXNfaBZFghoacuzczXL71rah7GucKmzPucZUWN1VeiHuBMh7bz", "2E318y8GEwnfLBNFb8eRfZcUyRgA77ZgcaqDugpZWM5Skohjg1uT5jB1KBma23Kk63RjfsrHdsvKSu9sLPxVvJQA" ], "script": "base64:BgJiCAISAwoBCBIDCgEIEgMKAQgSBAoCCAESBQoDAggBEgUKAwgBARIECgIICBIECgIICBIECgIIARIFCgMCCAESAwoBCBIECgIIAhIDCgEIEgMKARgSAwoBGBIECgIICBIAEgBgAAdrQWN0aXZlAgZhY3RpdmUAC2tBY3RpdmVHbG9iAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAPa0RlcHJlY2F0ZWRQb29sAgtkZXByZWNhdGVkXwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkABtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCHl9wcmV2aW91c19wb29sX2ZyYWN0aW9uX3Jld2FyZAATa0hlaWdodFBvb2xGcmFjdGlvbgIaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAG2tUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAIedG90YWxfcmV3YXJkX3Blcl9ibG9ja19jdXJyZW50ABxrVG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzAh90b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX3ByZXZpb3VzABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhRyZXdhcmRfdXBkYXRlX2hlaWdodAAWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAIUX3NoYXJlX3Rva2Vuc19sb2NrZWQAFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQCFV9zaGFyZV90b2tlbnNfYmxvY2tlZAAaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUCGl9zaGFyZV90b2tlbnNfYmxvY2tlZF90eXBlABxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0Ahxfc2hhcmVfdG9rZW5zX2Jsb2NrZWRfaGVpZ2h0ABdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAIVX3NoYXJlX3Rva2Vuc192aXJ0dWFsABZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zAhpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAATa1NoYXJlVG9rZW5zVmlydHVhbAIbX3RvdGFsX3NoYXJlX3Rva2Vuc192aXJ0dWFsAAtrTG9ja1BhcmFtcwIMX2xvY2tfcGFyYW1zAA1rTG9ja1dhdmVzRmVlAg5sb2NrX3dhdmVzX2ZlZQAOa1Bvb2xCb29zdENvZWYCC19ib29zdF9jb2VmABFrRmFybUxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAFWtGYXJtVXNlckxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAEmtCb29zdExhc3RJbnRlcmVzdAIQX2xhc3RfaW50ZXJlc3RfYgAWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAISX2xhc3RfaW50ZXJlc3RfdV9iABNrTGFzdEludGVyZXN0SGVpZ2h0AhVfbGFzdF9pbnRlcmVzdF9oZWlnaHQAB2tTV09QaWQCB1NXT1BfaWQADmtBdmFpbGFibGVTV09QAg9fYXZhaWxhYmxlX1NXT1AAEWtTd29wWWVhckVtaXNzaW9uAhJzd29wX3llYXJfZW1pc3Npb24AEGtIYXJ2ZXN0UG9vbFZvdGUCGF9oYXJ2ZXN0X3Bvb2xfdm90ZV9nU1dPUAAJa1Bvb2xWb3RlAhBfcG9vbF92b3RlX2dTV09QAA1rVXNlclBvb2xWb3RlAhBfdXNlcl92b3RlX2dTV09QAAprUG9vbFN0cnVjAgtfcG9vbF9zdHJ1YwAOa1VzZXJQb29sU3RydWMCEF91c2VyX3Bvb2xfc3RydWMAFGtIYXJ2ZXN0VXNlclBvb2xWb3RlAh1faGFydmVzdF91c2VyX3Bvb2xfdm90ZV9nU1dPUAATa0ZpcnN0SGFydmVzdEhlaWdodAIUZmlyc3RfaGFydmVzdF9oZWlnaHQADWtTaGFyZUxpbWl0RkgCHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAE2tTdHJhdEJGYXJtSW50ZXJlc3QCFl9zdHJhdF9iX2Zhcm1faW50ZXJlc3QADWtDcG1tQ29udHJhY3QCDWNwbW1fY29udHJhY3QADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MADmtWb3RpbmdBZGRyZXNzAg52b3RpbmdfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcAFGtGYXJtaW5nVHJlYXN1cmVBZGRyAhBmYXJtaW5nX3RyZWFzdXJlAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kADnRvdGFsVm90ZVNoYXJlAIDIr6AlAAtzY2FsZVZhbHVlOACAwtcvABJsb2NrQm9vc3RDb2VmU2NhbGUA6AcAEGRlZlBvb2xCb29zdENvZWYA9AMAB2JTdGFydEgA2rHPAQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEWFkbWluSW52b2tlUHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzABNmYXJtaW5nVHJlYXN1cmVBZGRyCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUUa0Zhcm1pbmdUcmVhc3VyZUFkZHIADGNwbW1Db250cmFjdAkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtDcG1tQ29udHJhY3QABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAEU1dPUAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrU1dPUGlkARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFE2tGaXJzdEhhcnZlc3RIZWlnaHQAAAEUZ2V0RkhTaGFyZUxpbWl0VG9rZW4BBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQRwb29sBQ1rU2hhcmVMaW1pdEZICQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQ1rU2hhcmVMaW1pdEZIARJnZXRUb3RhbFNoYXJlVG9rZW4BBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwEMZ2V0UG9vbFZvdGVkAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgUEcG9vbAUJa1Bvb2xWb3RlCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgUEcG9vbAUKa1Bvb2xTdHJ1YwIAAgFfAAAAAAEQZ2V0VXNlclBvb2xWb3RlZAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFDWtVc2VyUG9vbFZvdGUJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNdm90aW5nQWRkcmVzcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUEcG9vbAUOa1VzZXJQb29sU3RydWMCAAIBXwAAAAABD2dldFNoYXJlQXNzZXRJZAEEcG9vbAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQEFdmFsdWUBCQCmCAEFBHBvb2wCDnNoYXJlX2Fzc2V0X2lkAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgEOY2FsY1NjYWxlVmFsdWUCCGFzc2V0SWQxCGFzc2V0SWQyBBBhc3NldElkMURlY2ltYWxzCAkBBXZhbHVlAQkA7AcBBQhhc3NldElkMQhkZWNpbWFscwQQYXNzZXRJZDJEZWNpbWFscwgJAQV2YWx1ZQEJAOwHAQUIYXNzZXRJZDIIZGVjaW1hbHMEC3NjYWxlRGlnaXRzCQBkAgkAZQIFEGFzc2V0SWQyRGVjaW1hbHMFEGFzc2V0SWQxRGVjaW1hbHMACAkAbAYACgAABQtzY2FsZURpZ2l0cwAAAAAFBERPV04BEXVzZXJBdmFpbGFibGVTV09QAgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AAAAEKcmV3YXJkSW5mbwEEcG9vbAQadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzBRtrVG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBRtrVG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzBRxrVG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQCsAgIJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUca1RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwIMIGF0IGFkZHJlc3MgCQClCAEFCmdvdkFkZHJlc3MEGXJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50CQCsAgIJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRprUmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAIMIGF0IGFkZHJlc3MgCQClCAEFCmdvdkFkZHJlc3MEEnJld2FyZFVwZGF0ZUhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MFE2tSZXdhcmRVcGRhdGVIZWlnaHQJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBRNrUmV3YXJkVXBkYXRlSGVpZ2h0AgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHBvb2wFE2tIZWlnaHRQb29sRnJhY3Rpb24FEnJld2FyZFVwZGF0ZUhlaWdodAQacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHBvb2wFG2tSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkArAICCQCsAgIJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQRcmV3YXJkUG9vbEN1cnJlbnQJAGsDBRp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAUZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAUOdG90YWxWb3RlU2hhcmUEEnJld2FyZFBvb2xQcmV2aW91cwkAawMFGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BRpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwUOdG90YWxWb3RlU2hhcmUDAwkAZgIFEXJld2FyZFBvb2xDdXJyZW50BRp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAYJAGYCBRJyZXdhcmRQb29sUHJldmlvdXMFG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkAAgECYnJld2FyZFBvb2xDdXJyZW50ID4gdG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQgb3IgcmV3YXJkUG9vbFByZXZpb3VzID4gdG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQCWCgQFEXJld2FyZFBvb2xDdXJyZW50BRJyZXdhcmRVcGRhdGVIZWlnaHQFEnJld2FyZFBvb2xQcmV2aW91cwUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAETZ2V0TGFzdEludGVyZXN0SW5mbwEEcG9vbAQMZmFybUludGVyZXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAQNYm9vc3RJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAAABBJsYXN0SW50ZXJlc3RIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAJUKAwUSbGFzdEludGVyZXN0SGVpZ2h0BQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QBC2NhbGNGYXJtUndkAgRwb29sDmN1clRvdGFsUmV3YXJkBA1wb29sQm9vc3RDb2VmCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xCb29zdENvZWYFEGRlZlBvb2xCb29zdENvZWYJAGsDBQ5jdXJUb3RhbFJld2FyZAUSbG9ja0Jvb3N0Q29lZlNjYWxlCQBkAgUNcG9vbEJvb3N0Q29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlAQxjYWxjQm9vc3RSd2QCBHBvb2wOY3VyVG90YWxSZXdhcmQEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgkAawMFDmN1clRvdGFsUmV3YXJkBQ1wb29sQm9vc3RDb2VmCQBkAgUNcG9vbEJvb3N0Q29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlAQxjYWxjSW50ZXJlc3QLBHBvb2wSbGFzdEludGVyZXN0SGVpZ2h0EnJld2FyZFVwZGF0ZUhlaWdodBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0DGZhcm1JbnRlcmVzdA1ib29zdEludGVyZXN0CXBvb2xWb3RlZBVjdXJyZW50UmV3YXJkUGVyQmxvY2sQc2hhcmVUb2tlbkxvY2tlZBZwcmV2aW91c1Jld2FyZFBlckJsb2NrCnNjYWxlVmFsdWUEDCR0MDk1MTYxMDY4OQMDAwkAZgIFEnJld2FyZFVwZGF0ZUhlaWdodAUGaGVpZ2h0CQAAAgUScmV3YXJkVXBkYXRlSGVpZ2h0BRZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BwYDCQBmAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAQIhPQIFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcEAXIJAGgCBRZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJUKAwUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0AwMDCQBmAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAAACBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHCQBmAgUSbGFzdEludGVyZXN0SGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQHBAFyCQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJUKAwUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0BAlyd2RCZnJVcGQJAGgCBRZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQBlAgUScmV3YXJkVXBkYXRlSGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQEBmZCZnJVcAkAZAIFDGZhcm1JbnRlcmVzdAkAawMJAQtjYWxjRmFybVJ3ZAIFBHBvb2wFCXJ3ZEJmclVwZAUKc2NhbGVWYWx1ZQUQc2hhcmVUb2tlbkxvY2tlZAQGYkJmclVwCQBkAgUNYm9vc3RJbnRlcmVzdAMJAGYCBQlwb29sVm90ZWQAAAkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQlyd2RCZnJVcGQFC3NjYWxlVmFsdWU4BQlwb29sVm90ZWQAAAQDcndkCQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAJUKAwUDcndkBQZmQmZyVXAFBmJCZnJVcAQGcmV3YXJkCAUMJHQwOTUxNjEwNjg5Al8xBA5mYXJtSW50ckJlZm9yZQgFDCR0MDk1MTYxMDY4OQJfMgQPYm9vc3RJbnRyQmVmb3JlCAUMJHQwOTUxNjEwNjg5Al8zBA9uZXdGYXJtSW50ZXJlc3QJAGQCBQ5mYXJtSW50ckJlZm9yZQkAawMJAQtjYWxjRmFybVJ3ZAIFBHBvb2wFBnJld2FyZAUKc2NhbGVWYWx1ZQUQc2hhcmVUb2tlbkxvY2tlZAQQbmV3Qm9vc3RJbnRlcmVzdAkAZAIFD2Jvb3N0SW50ckJlZm9yZQMJAGYCBQlwb29sVm90ZWQAAAkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQZyZXdhcmQFC3NjYWxlVmFsdWU4BQlwb29sVm90ZWQAAAkAlAoCBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QBCWNsYWltQ2FsYwIEcG9vbAR1c2VyBApzY2FsZVZhbHVlCQEOY2FsY1NjYWxlVmFsdWUCBQRTV09QCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQJcG9vbFZvdGVkCQEMZ2V0UG9vbFZvdGVkAQUEcG9vbAQKdVBvb2xWb3RlZAkBEGdldFVzZXJQb29sVm90ZWQCBQRwb29sBQR1c2VyBApzaGFyZVRva2VuCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQpzaGFyZVRva2VuBBJzdHJhdEJGYXJtSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU3RyYXRCRmFybUludGVyZXN0AAAEDSR0MDExNTI3MTE2MDgJARNnZXRMYXN0SW50ZXJlc3RJbmZvAQUEcG9vbAQSbGFzdEludGVyZXN0SGVpZ2h0CAUNJHQwMTE1MjcxMTYwOAJfMQQMZmFybUludGVyZXN0CAUNJHQwMTE1MjcxMTYwOAJfMgQNYm9vc3RJbnRlcmVzdAgFDSR0MDExNTI3MTE2MDgCXzMEDSR0MDExNjEzMTE3MjcJAQpyZXdhcmRJbmZvAQUEcG9vbAQVY3VycmVudFJld2FyZFBlckJsb2NrCAUNJHQwMTE2MTMxMTcyNwJfMQQScmV3YXJkVXBkYXRlSGVpZ2h0CAUNJHQwMTE2MTMxMTcyNwJfMgQWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFDSR0MDExNjEzMTE3MjcCXzMEFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQ0kdDAxMTYxMzExNzI3Al80BA11RmFybUludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0BA51Qm9vc3RJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0AwMJAGYCBRJzdHJhdEJGYXJtSW50ZXJlc3QFDXVGYXJtSW50ZXJlc3QJAGYCBQp1UG9vbFZvdGVkAAAHAAAFDWJvb3N0SW50ZXJlc3QEEnVTaGFyZVRva2Vuc1N0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVTaGFyZVRva2Vuc1ZpcnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEnVTaGFyZVRva2Vuc1N0YWtlZAMJAAACBRF0b3RhbFNoYXJlVmlydHVhbAAABAp0b1RyZWFzdXJ5CQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJYKBAUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0AAAFCnRvVHJlYXN1cnkEDSR0MDEyNDQwMTI4MzIJAQxjYWxjSW50ZXJlc3QLBQRwb29sBRJsYXN0SW50ZXJlc3RIZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0BQlwb29sVm90ZWQFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawURdG90YWxTaGFyZVZpcnR1YWwFFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sFCnNjYWxlVmFsdWUED25ld0Zhcm1JbnRlcmVzdAgFDSR0MDEyNDQwMTI4MzICXzEEEG5ld0Jvb3N0SW50ZXJlc3QIBQ0kdDAxMjQ0MDEyODMyAl8yBAdmYXJtUndkCQBrAwUQdVNoYXJlVG9rZW5zVmlydAkAZQIFD25ld0Zhcm1JbnRlcmVzdAUNdUZhcm1JbnRlcmVzdAUKc2NhbGVWYWx1ZQQNcG9vbEJvb3N0Q29lZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQm9vc3RDb2VmBRBkZWZQb29sQm9vc3RDb2VmBAtib29zdFJ3ZE1heAkAawMJAGsDBRB1U2hhcmVUb2tlbnNWaXJ0CQBlAgUPbmV3RmFybUludGVyZXN0CQCWAwEJAMwIAgUNdUZhcm1JbnRlcmVzdAkAzAgCBRJzdHJhdEJGYXJtSW50ZXJlc3QFA25pbAUKc2NhbGVWYWx1ZQUNcG9vbEJvb3N0Q29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlBAtjdXJCb29zdFJ3ZAkAawMJAGUCBRBuZXdCb29zdEludGVyZXN0BQ51Qm9vc3RJbnRlcmVzdAUKdVBvb2xWb3RlZAULc2NhbGVWYWx1ZTgECGJvb3N0UndkCQCXAwEJAMwIAgULYm9vc3RSd2RNYXgJAMwIAgULY3VyQm9vc3RSd2QFA25pbAQKdG9UcmVhc3VyeQkAZQIFC2Jvb3N0UndkTWF4BQhib29zdFJ3ZAMJAGYCAAAFCnRvVHJlYXN1cnkJAAIBAg50b1RyZWFzdXJ5IDwgMAkAlgoEBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QJAGQCBQdmYXJtUndkBQhib29zdFJ3ZAUKdG9UcmVhc3VyeQEbYXZhaWxhYmxlQ2xhaW1DYWxjQWxsQnlVc2VyAgVwb29scwR1c2VyCgENY2FsY0F2YWlsYWJsZQIDYWNjBHBvb2wEDSR0MDEzNzAxMTM3MzAFA2FjYwQIbmV3UG9vbHMIBQ0kdDAxMzcwMTEzNzMwAl8xBAdhbW91bnRzCAUNJHQwMTM3MDExMzczMAJfMgQNJHQwMTM3MzkxMzc5MgkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEAmZpCAUNJHQwMTM3MzkxMzc5MgJfMQQCYmkIBQ0kdDAxMzczOTEzNzkyAl8yBAtjbGFpbUFtb3VudAgFDSR0MDEzNzM5MTM3OTICXzMEAnR0CAUNJHQwMTM3MzkxMzc5MgJfNAQNYXZhaWxhYmxlRnVuZAkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQCUCgIJAM0IAgUIbmV3UG9vbHMFBHBvb2wJAM0IAgUHYW1vdW50cwUNYXZhaWxhYmxlRnVuZAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWNhbGNBdmFpbGFibGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDYwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8ARVjYW5Mb2NrSW5GaXJzdEhhcnZlc3QFBHBvb2wEdXNlchV1c2VyU2hhcmVUb2tlbnNTdGFrZWQJcG10QW1vdW50CGxvY2tUeXBlAwkAZgIJARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBQRwb29sBQZoZWlnaHQED3RvdGFsVm90ZUFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ12b3RpbmdBZGRyZXNzCQCsAgIFBHBvb2wFEGtIYXJ2ZXN0UG9vbFZvdGUAAAQOdXNlclZvdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNdm90aW5nQWRkcmVzcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUEcG9vbAUUa0hhcnZlc3RVc2VyUG9vbFZvdGUAAAQRRkhTaGFyZVRva2VuTGltaXQJARRnZXRGSFNoYXJlTGltaXRUb2tlbgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEFUZIU2hhcmVUb2tlblVzZXJMaW1pdAkAZQIJAGsDBRFGSFNoYXJlVG9rZW5MaW1pdAUOdXNlclZvdGVBbW91bnQFD3RvdGFsVm90ZUFtb3VudAUVdXNlclNoYXJlVG9rZW5zU3Rha2VkAwkAZgIFCGxvY2tUeXBlAAAJAAIBAjJZb3UgY2FuJ3QgbG9jayBzaGFyZVRva2VucyB0aWxsIGZpcnN0IGhhcnZlc3QgZW5kLgMJAAACBQ51c2VyVm90ZUFtb3VudAAAAAADCQBnAgUJcG10QW1vdW50BRVGSFNoYXJlVG9rZW5Vc2VyTGltaXQJAGUCBQlwbXRBbW91bnQFFUZIU2hhcmVUb2tlblVzZXJMaW1pdAAAAAABDWdldExvY2tQYXJhbXMBBHR5cGUECmxvY2tQYXJhbXMJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkApAMBBQR0eXBlBQtrTG9ja1BhcmFtcwkArAICAh5UaGVyZSBhcmUgbm8ga2V5IGZvciBsb2NrIHR5cGUJAKQDAQUEdHlwZQIBXwkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKbG9ja1BhcmFtcwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKbG9ja1BhcmFtcwABAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQhpc0FjdGl2ZQADAwUGYWN0aXZlBQphY3RpdmVHbG9iBwUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1Bvb2xDYWxsAgFpBHBvb2wDAwkAAAIJAKUIAQgFAWkGY2FsbGVyBQRwb29sBgkAAAIIBQFpBmNhbGxlcgUMY3BtbUNvbnRyYWN0BQR1bml0CQACAQIgT25seSBwb29sIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BEWdldERlcHJlY2F0ZWRQb29sAQRwb29sCQELdmFsdWVPckVsc2UCCQCbCAIFBm9yYWNsZQkArAICBQ9rRGVwcmVjYXRlZFBvb2wFBHBvb2wHARBpc0RlcHJlY2F0ZWRQb29sAQRwb29sAwkBASEBCQERZ2V0RGVwcmVjYXRlZFBvb2wBBQRwb29sBQR1bml0CQACAQIvUG9vbCBpcyBkZXByZWNhdGVkLiBPbmx5IHVubG9jayBhY3Rpb24gYWxsb3dlZC4BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgETY2FsY0xvY2tTaGFyZVRva2VucwQBaQZjYWxsZXIEcG9vbAhsb2NrVHlwZQQMc2hhcmVBc3NldElkCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQEdXNlcgkApQgBBQZjYWxsZXIECnRvdGFsU2hhcmUJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFCnRvdGFsU2hhcmUEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABA91c2VyTG9ja2VkSGVpZ3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEFHRvdGFsVXNlclNoYXJlVG9rZW5zCQBkAgkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA0kdDAxNjg0MTE2ODkzCQENZ2V0TG9ja1BhcmFtcwEFCGxvY2tUeXBlBApsb2NrUGVyaW9kCAUNJHQwMTY4NDExNjg5MwJfMQQIbG9ja0NvZWYIBQ0kdDAxNjg0MTE2ODkzAl8yBAxsb2NrV2F2ZXNGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgECG1dyb25nIHNoYXJldG9rZW4gaW4gcGF5bWVudAMJAGcCAAAICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQACAQIlUGF5bWVudCBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFCGxvY2tUeXBlCQACAQIVbG9ja1R5cGUgbXVzdCBiZSA+PSAwBBVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJARVjYW5Mb2NrSW5GaXJzdEhhcnZlc3QFBQRwb29sBQR1c2VyBRB1c2VyU3Rha2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIbG9ja1R5cGUDCQAAAgUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZIBRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgEDSR0MDE3MzIwMTkyNTQDCQAAAgUIbG9ja1R5cGUAAAQUdXNlckFtb3VudFZpcnR1YWxOZXcJAGUCCQBkAgURdXNlckFtb3VudFZpcnR1YWwICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAkAZQIJAGQCBRB1c2VyU3Rha2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZQIJAGQCBRF0b3RhbFNoYXJlVmlydHVhbAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwJAGUCCQBkAgUKdG90YWxTaGFyZQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAADAwkAZgIAAgkAkAMBCAUBaQhwYXltZW50cwYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAUEdW5pdAYJAGYCBQxsb2NrV2F2ZXNGZWUICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BwkAAgEJAKwCAgkArAICAitZb3UgbmVlZCB0byBwYXkgYWRkaXRpb25hbCB3YXZlcyBjb21pc3Npb24gCQCkAwEFDGxvY2tXYXZlc0ZlZQIFV0FWRVMDCQBmAgUPdXNlckxvY2tlZEhlaWd0CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kCQACAQJPWW91IGNhbm5vdCBsb2NrIHNoYXJldG9rZW5zIGZvciBhIHBlcmlvZCBsZXNzIHRoYW4gd2hhdCB5b3UgaGF2ZSBhbHJlYWR5IGxvY2tlZAQTdXNlckxvY2tlZEFtb3VudE5ldwkAZAIFEHVzZXJMb2NrZWRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBJ1c2VyTG9ja2VkSGVpZ3ROZXcJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBkAgkAawMFE3VzZXJMb2NrZWRBbW91bnROZXcFCGxvY2tDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUFEHVzZXJTdGFrZWRBbW91bnQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAUTdXNlckxvY2tlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAUSdXNlckxvY2tlZEhlaWd0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQUIbG9ja1R5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcFA25pbAkAZAIFCnRvdGFsU2hhcmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAtsb2NrRW50cmllcwgFDSR0MDE3MzIwMTkyNTQCXzEEDXRvdGFsU2hhcmVOZXcIBQ0kdDAxNzMyMDE5MjU0Al8yAwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDHNoYXJlQXNzZXRJZAUNdG90YWxTaGFyZU5ldwkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAQNJHQwMTkzNzkxOTQ2MQkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDE5Mzc5MTk0NjECXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAxOTM3OTE5NDYxAl8yBAtjbGFpbUFtb3VudAgFDSR0MDE5Mzc5MTk0NjECXzMECnRvVHJlYXN1cmUIBQ0kdDAxOTM3OTE5NDYxAl80BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50BAR1cGxwAwkAAAIJAJ0IAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3ZlcnNpb24CBTMuMC4wCQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCEnVwZGF0ZVVzZXJJbnRlcmVzdAkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgUUdG90YWxVc2VyU2hhcmVUb2tlbnMFA25pbAUDbmlsAAADCQAAAgUEdXBscAUEdXBscAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwUNdG90YWxTaGFyZU5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsBQtsb2NrRW50cmllcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEXY2FsY1dpdGhkcmF3U2hhcmVUb2tlbnMEAWkGY2FsbGVyBHBvb2wZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAQDaW52AwkBEWdldERlcHJlY2F0ZWRQb29sAQUEcG9vbAkA/AcEBQR0aGlzAhh1bmxvY2tVc2VyTG9ja0RlcHJlY2F0ZWQJAMwIAgUEcG9vbAkAzAgCCQClCAEFBmNhbGxlcgUDbmlsBQNuaWwAAAMJAAACBQNpbnYFA2ludgQNc2hhcmVUb2tlbnNJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQEFdmFsdWUBCQCmCAEFBHBvb2wCDnNoYXJlX2Fzc2V0X2lkBAR1c2VyCQClCAEFBmNhbGxlcgQNJHQwMjA3NTgyMDg0MAkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDIwNzU4MjA4NDACXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAyMDc1ODIwODQwAl8yBAtjbGFpbUFtb3VudAgFDSR0MDIwNzU4MjA4NDACXzMECnRvVHJlYXN1cmUIBQ0kdDAyMDc1ODIwODQwAl80BBB1c2VyU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQQdXNlckxvY2tlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkAAAEEXVzZXJBbW91bnRWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRB1c2VyU3Rha2VkQW1vdW50BBN1c2VyU3Rha2VkQW1vdW50TmV3CQBlAgUQdXNlclN0YWtlZEFtb3VudAUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAQQdG90YWxTaGFyZUFtb3VudAkBEmdldFRvdGFsU2hhcmVUb2tlbgEFBHBvb2wEEXRvdGFsU2hhcmVWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAUQdG90YWxTaGFyZUFtb3VudAQTdG90YWxTaGFyZUFtb3VudE5ldwkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEFHRvdGFsU2hhcmVWaXJ0dWFsTmV3CQBlAgURdG90YWxTaGFyZVZpcnR1YWwFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBlAgURdXNlckFtb3VudFZpcnR1YWwFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQDCQBmAgUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAUQdXNlclN0YWtlZEFtb3VudAkAAgECLFdpdGhkcmF3IGFtb3VudCBtb3JlIHRoZW4gdXNlciBsb2NrZWQgYW1vdW50AwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDXNoYXJlVG9rZW5zSWQFEHRvdGFsU2hhcmVBbW91bnQJAAIBAjBCYWxhbmNlIG9mIHNoYXJlLXRva2VuIGlzIGxvd2VyIHRoYW4gdG90YWxBbW91bnQEBHVwbHADCQAAAgkAnQgCCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHdmVyc2lvbgIFMy4wLjAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwISdXBkYXRlVXNlckludGVyZXN0CQDMCAIFBHVzZXIJAMwIAgUEcG9vbAkAzAgCCQBkAgUQdXNlclN0YWtlZEFtb3VudAUQdXNlckxvY2tlZEFtb3VudAUDbmlsBQNuaWwAAAMJAAACBQR1cGxwBQR1cGxwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zBRN0b3RhbFNoYXJlQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFFHRvdGFsU2hhcmVWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAUNc2hhcmVUb2tlbnNJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQljYWxjQ2xhaW0DAWkEcG9vbAZjYWxsZXIEDXNoYXJlVG9rZW5zSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAQEdXNlcgkApQgBBQZjYWxsZXIEEHNoYXJlVG9rZW5Mb2NrZWQJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBA0kdDAyMzM1MTIzNDMzCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMjMzNTEyMzQzMwJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDIzMzUxMjM0MzMCXzIEC2NsYWltQW1vdW50CAUNJHQwMjMzNTEyMzQzMwJfMwQKdG9UcmVhc3VyZQgFDSR0MDIzMzUxMjM0MzMCXzQEDWF2YWlsYWJsZUZ1bmQJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQ1zaGFyZVRva2Vuc0lkBRBzaGFyZVRva2VuTG9ja2VkCQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50BAZ1VHJhbnMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ1hdmFpbGFibGVGdW5kBQRTV09QBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AAAAkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AJAGQCBQp0b1RyZWFzdXJlBQ1hdmFpbGFibGVGdW5kBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwFBnVUcmFucwUNYXZhaWxhYmxlRnVuZAESdW5sb2NrVXNlckxvY2tDYWxjAwFpBHBvb2wEdXNlcgQRdG90YWxTaGFyZVZpcnR1YWwJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQEDSR0MDI0ODM2MjQ5MTgJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyNDgzNjI0OTE4Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMjQ4MzYyNDkxOAJfMgQLY2xhaW1BbW91bnQIBQ0kdDAyNDgzNjI0OTE4Al8zBAp0b1RyZWFzdXJlCAUNJHQwMjQ4MzYyNDkxOAJfNAQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbBIBaQEEaW5pdAEHZWFybHlMUAMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFB2tTV09QaWQJAAIBAhhTV09QIGFscmVhZHkgaW5pdGlhbGl6ZWQECmluaXRBbW91bnQAgIDpg7HeFgQJU1dPUGlzc3VlCQDCCAUCBFNXT1ACE1NXT1AgcHJvdG9jb2wgdG9rZW4FCmluaXRBbW91bnQACAYEBlNXT1BpZAkAuAgBBQlTV09QaXNzdWUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAMIIBQIEU1dPUAITU1dPUCBwcm90b2NvbCB0b2tlbgUKaW5pdEFtb3VudAAIBgkAzAgCCQELU3RyaW5nRW50cnkCBQdrU1dPUGlkCQDYBAEFBlNXT1BpZAUDbmlsAWkBFGluaXRQb29sU2hhcmVGYXJtaW5nAQRwb29sCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsAWkBEnVwZGF0ZVBvb2xJbnRlcmVzdAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQFpBmNhbGxlcgUKZ292QWRkcmVzcwkAAgECJk9ubHkgR292ZXJuYW5jZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAR1c2VyCQClCAEJAKcIAQURYWRtaW5JbnZva2VQdWJLZXkEDSR0MDI3MDg0MjcxNTgJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyNzA4NDI3MTU4Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMjcwODQyNzE1OAJfMgQPYm9vc3RMUGludGVyZXN0CAUNJHQwMjcwODQyNzE1OAJfMwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAFpAQ9sb2NrU2hhcmVUb2tlbnMCBHBvb2wIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJARBpc0RlcHJlY2F0ZWRQb29sAQUEcG9vbAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBE2NhbGNMb2NrU2hhcmVUb2tlbnMEBQFpCAUBaQZjYWxsZXIFBHBvb2wFCGxvY2tUeXBlAWkBF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sAwtjYWxsZXJCeXRlcwRwb29sCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEQaXNEZXByZWNhdGVkUG9vbAEFBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc1Bvb2xDYWxsAgUBaQUEcG9vbAkBE2NhbGNMb2NrU2hhcmVUb2tlbnMEBQFpCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBQRwb29sBQhsb2NrVHlwZQFpARVsb2NrU3Rha2VkU2hhcmVUb2tlbnMDBHBvb2wIbG9ja1R5cGUKbG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBEGlzRGVwcmVjYXRlZFBvb2wBBQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAxzaGFyZUFzc2V0SWQJAQ9nZXRTaGFyZUFzc2V0SWQBBQRwb29sBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQKdG90YWxTaGFyZQkBEmdldFRvdGFsU2hhcmVUb2tlbgEFBHBvb2wEEXRvdGFsU2hhcmVWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAUKdG90YWxTaGFyZQQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAED3VzZXJMb2NrZWRIZWlndAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0AAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQUdG90YWxVc2VyU2hhcmVUb2tlbnMJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50BA0kdDAyODc4NzI4ODM5CQENZ2V0TG9ja1BhcmFtcwEFCGxvY2tUeXBlBApsb2NrUGVyaW9kCAUNJHQwMjg3ODcyODgzOQJfMQQIbG9ja0NvZWYIBQ0kdDAyODc4NzI4ODM5Al8yBAxsb2NrV2F2ZXNGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtMb2NrV2F2ZXNGZWUDCQBmAgkBFWdldEhlaWdodEZpcnN0SGFydmVzdAEFBHBvb2wFBmhlaWdodAkAAgECMllvdSBjYW4ndCBsb2NrIHNoYXJlVG9rZW5zIHRpbGwgZmlyc3QgaGFydmVzdCBlbmQuAwkAZwIAAAUIbG9ja1R5cGUJAAIBAhRsb2NrVHlwZSBtdXN0IGJlID4gMAMJAGYCBQpsb2NrQW1vdW50BRB1c2VyU3Rha2VkQW1vdW50CQACAQkArAICAhlZb3UgY2FuJ3QgbG9jayBtb3JlIHRoYW4gCQCkAwEFEHVzZXJTdGFrZWRBbW91bnQDCQBmAgkBDmFjY291bnRCYWxhbmNlAQUMc2hhcmVBc3NldElkBQp0b3RhbFNoYXJlCQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50AwMJAAACBQ91c2VyTG9ja2VkSGVpZ3QAAAMDCQBmAgABCQCQAwEIBQFpCHBheW1lbnRzBgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0BgkAZgIFDGxvY2tXYXZlc0ZlZQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQHCQACAQkArAICCQCsAgICK1lvdSBuZWVkIHRvIHBheSBhZGRpdGlvbmFsIHdhdmVzIGNvbWlzc2lvbiAJAKQDAQUMbG9ja1dhdmVzRmVlAgVXQVZFUwMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAAJAGcCAAAFCmxvY2tBbW91bnQHCQACAQIhbG9ja0Ftb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIAAAUKbG9ja0Ftb3VudAkAAgECG2xvY2tBbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQMJAGYCBQ91c2VyTG9ja2VkSGVpZ3QJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QJAAIBAk9Zb3UgY2Fubm90IGxvY2sgc2hhcmV0b2tlbnMgZm9yIGEgcGVyaW9kIGxlc3MgdGhhbiB3aGF0IHlvdSBoYXZlIGFscmVhZHkgbG9ja2VkBBN1c2VyTG9ja2VkQW1vdW50TmV3CQBkAgUQdXNlckxvY2tlZEFtb3VudAUKbG9ja0Ftb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZQIFEHVzZXJTdGFrZWRBbW91bnQFCmxvY2tBbW91bnQEEnVzZXJMb2NrZWRIZWlndE5ldwkAZAIFBmhlaWdodAUKbG9ja1BlcmlvZAQUdXNlckFtb3VudFZpcnR1YWxOZXcJAGQCCQBrAwUTdXNlckxvY2tlZEFtb3VudE5ldwUIbG9ja0NvZWYFEmxvY2tCb29zdENvZWZTY2FsZQUTdXNlclN0YWtlZEFtb3VudE5ldwQNJHQwMzAxODUzMDI2NwkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDMwMTg1MzAyNjcCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAzMDE4NTMwMjY3Al8yBAtjbGFpbUFtb3VudAgFDSR0MDMwMTg1MzAyNjcCXzMECnRvVHJlYXN1cmUIBQ0kdDAzMDE4NTMwMjY3Al80BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkBRN1c2VyTG9ja2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0BRJ1c2VyTG9ja2VkSGVpZ3ROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFGmtVc2VyU2hhcmVUb2tlbnNMb2NrZWRUeXBlBQhsb2NrVHlwZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwJAGQCCQBlAgURdG90YWxTaGFyZVZpcnR1YWwFEXVzZXJBbW91bnRWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBB1JlaXNzdWUDBQRTV09QBQp0b1RyZWFzdXJlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwBaQEOdW5sb2NrVXNlckxvY2sCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQPdXNlckxvY2tlZEhlaWd0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAkArAICCQCsAgIJAKwCAgkArAICAhFUaGVyZSBpcyBubyBwb29sIAUEcG9vbAIJIG9yIHVzZXIgBQR1c2VyAgl3aXRoIGxvY2sDCQBmAgUPdXNlckxvY2tlZEhlaWd0BQZoZWlnaHQJAAIBCQCsAgICIllvdSBjYW4ndCB1bmxvY2sgc2hhcmV0b2tlbnMgdGlsbCAJAKQDAQUPdXNlckxvY2tlZEhlaWd0CQDOCAIJARJ1bmxvY2tVc2VyTG9ja0NhbGMDBQFpBQRwb29sBQR1c2VyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa0xvY2tXYXZlc0ZlZQUEdW5pdAUDbmlsAWkBGHVubG9ja1VzZXJMb2NrRGVwcmVjYXRlZAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkDCQEBIQEJARFnZXREZXByZWNhdGVkUG9vbAEFBHBvb2wJAAIBAhdQb29sIG11c3QgYmUgZGVwcmVjYXRlZAMJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQJAM4IAgkBEnVubG9ja1VzZXJMb2NrQ2FsYwMFAWkFBHBvb2wFBHVzZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlBQR1bml0BQNuaWwFA25pbAFpARN3aXRoZHJhd1NoYXJlVG9rZW5zAgRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJARdjYWxjV2l0aGRyYXdTaGFyZVRva2VucwQFAWkIBQFpBmNhbGxlcgUEcG9vbAUZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAFpARt3aXRoZHJhd1NoYXJlVG9rZW5zRnJvbVBvb2wDC2NhbGxlckJ5dGVzBHBvb2wZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBCmlzUG9vbENhbGwCBQFpBQRwb29sCQEXY2FsY1dpdGhkcmF3U2hhcmVUb2tlbnMEBQFpCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBQRwb29sBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AWkBBWNsYWltAQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAFyCQEJY2FsY0NsYWltAwUBaQUEcG9vbAgFAWkGY2FsbGVyAwkAAAIIBQFyAl8yAAAJAAIBAhlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QBQFyAWkBDWNsYWltSW50ZXJuYWwCBHBvb2wGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkJAQljYWxjQ2xhaW0DBQFpBQRwb29sCQEHQWRkcmVzcwEFBmNhbGxlcgFpAQ1jbGFpbUFuZFN0YWtlAQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAtjbGFpbUFtb3VudAoAAUAJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQRwb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtjbGFpbUFtb3VudAULY2xhaW1BbW91bnQDCQAAAgULY2xhaW1BbW91bnQAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AECnN0YWtlVG9Hb3YJAPwHBAUKZ292QWRkcmVzcwITbG9ja1NXT1BGcm9tRmFybWluZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRTV09QBQtjbGFpbUFtb3VudAUDbmlsAwkAAAIFCnN0YWtlVG9Hb3YFCnN0YWtlVG9Hb3YFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhjbGFpbUFsbAEFcG9vbHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAKAQhjbGFpbUludgIKY2xhaW1Ub3RhbARwb29sBAtjbGFpbUFtb3VudAoAAUAJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQRwb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtjbGFpbUFtb3VudAULY2xhaW1BbW91bnQJAGQCBQpjbGFpbVRvdGFsBQtjbGFpbUFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQKY2xhaW1Ub3RhbAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIY2xhaW1JbnYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDYwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AwkAAAIFCmNsYWltVG90YWwAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpjbGFpbVRvdGFsBQRTV09QBQNuaWwBaQEQY2xhaW1BbGxBbmRTdGFrZQEFcG9vbHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAKAQhjbGFpbUludgIKY2xhaW1Ub3RhbARwb29sBAtjbGFpbUFtb3VudAoAAUAJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQRwb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQtjbGFpbUFtb3VudAULY2xhaW1BbW91bnQJAGQCBQpjbGFpbVRvdGFsBQtjbGFpbUFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQKY2xhaW1Ub3RhbAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIY2xhaW1JbnYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDYwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AwkAAAIFCmNsYWltVG90YWwAAAkAAgECGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AECnN0YWtlVG9Hb3YJAPwHBAUKZ292QWRkcmVzcwITbG9ja1NXT1BGcm9tRmFybWluZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRTV09QBQpjbGFpbVRvdGFsBQNuaWwDCQAAAgUKc3Rha2VUb0dvdgUKc3Rha2VUb0dvdgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBF3VwZGF0ZVVzZXJCb29zdEludGVyZXN0AgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCAUBaQZjYWxsZXIFDXZvdGluZ0FkZHJlc3MJAAIBAiNPbmx5IHZvaXRpbmcgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQNJHQwMzUwMTYzNTA5OAkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDM1MDE2MzUwOTgCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAzNTAxNjM1MDk4Al8yBAtjbGFpbUFtb3VudAgFDSR0MDM1MDE2MzUwOTgCXzMECnRvVHJlYXN1cmUIBQ0kdDAzNTAxNjM1MDk4Al80BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbAFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFBmFjdGl2ZQkAAgEJAKwCAgIiREFwcCBpcyBhbHJlYWR5IHN1c3BlbmRlZC4gQ2F1c2U6IAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrQ2F1c2UCGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkCQEHc3VzcGVuZAECD1BhdXNlZCBieSBhZG1pbgFpAQhhY3RpdmF0ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDBQZhY3RpdmUJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELRGVsZXRlRW50cnkBBQZrQ2F1c2UFA25pbAECdHgBBnZlcmlmeQAEByRtYXRjaDAFAnR4BBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIhr/TB", "height": 2437625, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8hNcYcVgiRSaBTrTeeeJBXye7CPDt6krFJuhbR9zQ9Ty Next: EQbGy1MSs5Q4K2Z5c6VD9v5ywUBemomGN7gc1BcASdT1 Diff:
OldNewDifferences
55
66 let b = "active_all_contracts"
77
8-let c = "shutdown_cause"
8+let c = "deprecated_"
99
10-let d = "_current_pool_fraction_reward"
10+let d = "shutdown_cause"
1111
12-let e = "_previous_pool_fraction_reward"
12+let e = "_current_pool_fraction_reward"
1313
14-let f = "_pool_reward_update_height"
14+let f = "_previous_pool_fraction_reward"
1515
16-let g = "reward_update_height"
16+let g = "_pool_reward_update_height"
1717
18-let h = "_share_tokens_locked"
18+let h = "total_reward_per_block_current"
1919
20-let i = "_share_tokens_blocked"
20+let i = "total_reward_per_block_previous"
2121
22-let j = "_share_tokens_blocked_type"
22+let j = "reward_update_height"
2323
24-let k = "_share_tokens_blocked_height"
24+let k = "_share_tokens_locked"
2525
26-let l = "_share_tokens_virtual"
26+let l = "_share_tokens_blocked"
2727
28-let m = "_total_share_tokens_locked"
28+let m = "_share_tokens_blocked_type"
2929
30-let n = "_total_share_tokens_virtual"
30+let n = "_share_tokens_blocked_height"
3131
32-let o = "_lock_params"
32+let o = "_share_tokens_virtual"
3333
34-let p = "lock_waves_fee"
34+let p = "_total_share_tokens_locked"
3535
36-let q = "_boost_coef"
36+let q = "_total_share_tokens_virtual"
3737
38-let r = "_last_interest"
38+let r = "_lock_params"
3939
40-let s = "_last_interest"
40+let s = "lock_waves_fee"
4141
42-let t = "_last_interest_b"
42+let t = "_boost_coef"
4343
44-let u = "_last_interest_u_b"
44+let u = "_last_interest"
4545
46-let v = "_last_interest_height"
46+let v = "_last_interest"
4747
48-let w = "SWOP_id"
48+let w = "_last_interest_b"
4949
50-let x = "_available_SWOP"
50+let x = "_last_interest_u_b"
5151
52-let y = "_harvest_pool_vote_gSWOP"
52+let y = "_last_interest_height"
5353
54-let z = "_pool_vote_gSWOP"
54+let z = "SWOP_id"
5555
56-let A = "_user_vote_gSWOP"
56+let A = "_available_SWOP"
5757
58-let B = "_pool_struc"
58+let B = "swop_year_emission"
5959
60-let C = "_user_pool_struc"
60+let C = "_harvest_pool_vote_gSWOP"
6161
62-let D = "_harvest_user_pool_vote_gSWOP"
62+let D = "_pool_vote_gSWOP"
6363
64-let E = "first_harvest_height"
64+let E = "_user_vote_gSWOP"
6565
66-let F = "share_limit_on_first_harvest"
66+let F = "_pool_struc"
6767
68-let G = "_strat_b_farm_interest"
68+let G = "_user_pool_struc"
6969
70-let H = "cpmm_contract"
70+let H = "_harvest_user_pool_vote_gSWOP"
7171
72-let I = "admin_pub_1"
72+let I = "first_harvest_height"
7373
74-let J = "admin_pub_2"
74+let J = "share_limit_on_first_harvest"
7575
76-let K = "admin_pub_3"
76+let K = "_strat_b_farm_interest"
7777
78-let L = "admin_invoke_pub"
78+let L = "cpmm_contract"
7979
80-let M = "money_box_address"
80+let M = "admin_pub_1"
8181
82-let N = "voting_address"
82+let N = "admin_pub_2"
8383
84-let O = "governance_address"
84+let O = "admin_pub_3"
8585
86-let P = "lp_farming"
86+let P = "admin_invoke_pub"
8787
88-let Q = "farming_treasure"
88+let Q = "money_box_address"
8989
90-let R = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
90+let R = "voting_address"
9191
92-let S = 10000000000
92+let S = "governance_address"
9393
94-let T = 100000000
94+let T = "lp_farming"
9595
96-let U = 1000
96+let U = "farming_treasure"
9797
98-let V = 500
98+let V = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9999
100-let W = 1911271
100+let W = 10000000000
101101
102-let X = 100000000000000
102+let X = 100000000
103103
104-let Y = 526330
104+let Y = 1000
105105
106-func Z (aa) = {
107- let ab = getString(R, aa)
108- if ($isInstanceOf(ab, "String"))
106+let Z = 500
107+
108+let aa = 3397850
109+
110+func ab (ac) = {
111+ let ad = getString(V, ac)
112+ if ($isInstanceOf(ad, "String"))
109113 then {
110- let ac = ab
111- fromBase58String(ac)
114+ let ae = ad
115+ fromBase58String(ae)
112116 }
113117 else {
114- let ad = ab
115- throw((aa + "is empty"))
118+ let af = ad
119+ throw((ac + "is empty"))
116120 }
117121 }
118122
119123
120-let ae = Z(I)
124+let ag = ab(M)
121125
122-let af = Z(J)
126+let ah = ab(N)
123127
124-let ag = Z(K)
128+let ai = ab(O)
125129
126-let ah = Address(Z(M))
130+let aj = Address(ab(Q))
127131
128-let ai = Address(Z(N))
132+let ak = Address(ab(R))
129133
130-let aj = Address(Z(O))
134+let al = Address(ab(S))
131135
132-let ak = Z(L)
136+let am = ab(P)
133137
134-let al = Address(Z(P))
138+let an = Address(ab(T))
135139
136-let am = Address(Z(Q))
140+let ao = Address(ab(U))
137141
138-let an = Address(Z(H))
142+let ap = Address(ab(L))
139143
140-let ao = getBooleanValue(this, a)
144+let aq = getBooleanValue(this, a)
141145
142-let ap = valueOrElse(getBoolean(R, b), true)
146+let ar = valueOrElse(getBoolean(V, b), true)
143147
144-let aq = fromBase58String(getStringValue(this, w))
148+let as = fromBase58String(getStringValue(this, z))
145149
146-func ar () = {
147- let as = ((height - W) / Y)
148- func at (au,av) = {
149- let aw = au
150- let ax = aw._1
151- let ay = aw._2
152- if ((as > av))
153- then $Tuple2(fraction(ax, 75, 100), ax)
154- else $Tuple2(ax, ay)
155- }
156-
157- let az = {
158- let aA = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
159- let aB = size(aA)
160- let aC = $Tuple2(X, X)
161- func aD (aE,aF) = if ((aF >= aB))
162- then aE
163- else at(aE, aA[aF])
164-
165- func aG (aE,aF) = if ((aF >= aB))
166- then aE
167- else throw("List size exceeds 20")
168-
169- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
170- }
171- let ax = az._1
172- let ay = az._2
173- $Tuple3((ax / Y), (ay / Y), (W + (Y * as)))
174- }
150+func at (au) = valueOrElse(getInteger(Address(fromBase58String(au)), I), 0)
175151
176152
177-func aH (aI) = valueOrElse(getInteger(Address(fromBase58String(aI)), E), 0)
153+func av (au) = valueOrErrorMessage(getInteger(au, J), ("No data on the key: " + J))
178154
179155
180-func aJ (aI) = valueOrErrorMessage(getInteger(aI, F), ("No data on the key: " + F))
156+func aw (au) = valueOrErrorMessage(getInteger(this, (au + p)), (("No data on the key: " + au) + p))
181157
182158
183-func aK (aI) = valueOrErrorMessage(getInteger(this, (aI + m)), (("No data on the key: " + aI) + m))
159+func ax (au) = valueOrElse(getInteger(ak, (au + D)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (au + F)), ""), "_")[0]), 0))
184160
185161
186-func aL (aI) = valueOrElse(getInteger(ai, (aI + z)), valueOrElse(parseInt(split(valueOrElse(getString(ai, (aI + B)), ""), "_")[0]), 0))
162+func ay (au,az) = valueOrElse(getInteger(ak, (((az + "_") + au) + E)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (((az + "_") + au) + G)), ""), "_")[0]), 0))
187163
188164
189-func aM (aI,aN) = valueOrElse(getInteger(ai, (((aN + "_") + aI) + A)), valueOrElse(parseInt(split(valueOrElse(getString(ai, (((aN + "_") + aI) + C)), ""), "_")[0]), 0))
165+func aA (au) = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
190166
191167
192-func aO (aI) = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id"))
193-
194-
195-func aP (aQ) = {
196- let ab = aQ
197- if ($isInstanceOf(ab, "ByteVector"))
168+func aB (aC) = {
169+ let ad = aC
170+ if ($isInstanceOf(ad, "ByteVector"))
198171 then {
199- let aR = ab
200- assetBalance(this, aR)
172+ let aD = ad
173+ assetBalance(this, aD)
201174 }
202- else if ($isInstanceOf(ab, "Unit"))
175+ else if ($isInstanceOf(ad, "Unit"))
203176 then {
204- let aS = ab
177+ let aE = ad
205178 wavesBalance(this).available
206179 }
207180 else throw("Match error")
208181 }
209182
210183
211-func aT (aU,aV) = {
212- let aW = value(assetInfo(aU)).decimals
213- let aX = value(assetInfo(aV)).decimals
214- let aY = ((aX - aW) + 8)
215- pow(10, 0, aY, 0, 0, DOWN)
184+func aF (aG,aH) = {
185+ let aI = value(assetInfo(aG)).decimals
186+ let aJ = value(assetInfo(aH)).decimals
187+ let aK = ((aJ - aI) + 8)
188+ pow(10, 0, aK, 0, 0, DOWN)
216189 }
217190
218191
219-func aZ (aI,aN) = valueOrElse(getInteger(this, (((aI + "_") + aN) + x)), 0)
192+func aL (au,az) = valueOrElse(getInteger(this, (((au + "_") + az) + A)), 0)
220193
221194
222-func ba (aI) = {
223- let bb = ar()
224- let bc = bb._1
225- let bd = bb._2
226- let be = bb._3
227- let bf = valueOrErrorMessage(getInteger(aj, (aI + d)), (((("No data on the key: " + aI) + d) + " at address ") + toString(aj)))
228- let bg = valueOrErrorMessage(getInteger(aj, g), ((("No data on the key: " + g) + " at address ") + toString(aj)))
229- let bh = valueOrElse(getInteger(aj, (aI + f)), bg)
230- let bi = valueOrErrorMessage(getInteger(aj, (aI + e)), (((("No data on the key: " + aI) + e) + " at address ") + toString(aj)))
231- let bj = fraction(bc, bf, S)
232- let bk = fraction(bc, bi, S)
233- let bl = fraction(bd, bf, S)
234- let bm = fraction(bd, bi, S)
235- if (if ((bj > bc))
195+func aM (au) = {
196+ let aN = valueOrErrorMessage(getInteger(al, h), ((("No data on the key: " + h) + " at address ") + toString(al)))
197+ let aO = valueOrErrorMessage(getInteger(al, i), ((("No data on the key: " + i) + " at address ") + toString(al)))
198+ let aP = valueOrErrorMessage(getInteger(al, (au + e)), (((("No data on the key: " + au) + e) + " at address ") + toString(al)))
199+ let aQ = valueOrErrorMessage(getInteger(al, j), ((("No data on the key: " + j) + " at address ") + toString(al)))
200+ let aR = valueOrElse(getInteger(al, (au + g)), aQ)
201+ let aS = valueOrErrorMessage(getInteger(al, (au + f)), (((("No data on the key: " + au) + f) + " at address ") + toString(al)))
202+ let aT = fraction(aN, aP, W)
203+ let aU = fraction(aN, aS, W)
204+ if (if ((aT > aN))
236205 then true
237- else (bk > bd))
206+ else (aU > aO))
238207 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
239- else $Tuple7(bj, bg, bk, bh, be, bl, bm)
208+ else $Tuple4(aT, aQ, aU, aR)
240209 }
241210
242211
243-func bn (aI) = {
244- let bo = valueOrErrorMessage(getInteger(this, (aI + r)), (("No data on the key: " + aI) + r))
245- let bp = valueOrElse(getInteger(this, (aI + t)), 0)
246- let bq = valueOrElse(getInteger(this, (aI + v)), height)
247- $Tuple3(bq, bo, bp)
212+func aV (au) = {
213+ let aW = valueOrErrorMessage(getInteger(this, (au + u)), (("No data on the key: " + au) + u))
214+ let aX = valueOrElse(getInteger(this, (au + w)), 0)
215+ let aY = valueOrElse(getInteger(this, (au + y)), height)
216+ $Tuple3(aY, aW, aX)
248217 }
249218
250219
251-func br (aI,bs) = {
252- let bt = valueOrElse(getInteger(this, (aI + q)), V)
253- fraction(bs, U, (bt + U))
220+func aZ (au,ba) = {
221+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
222+ fraction(ba, Y, (bb + Y))
254223 }
255224
256225
257-func bu (aI,bs) = {
258- let bt = valueOrElse(getInteger(this, (aI + q)), V)
259- fraction(bs, bt, (bt + U))
226+func bc (au,ba) = {
227+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
228+ fraction(ba, bb, (bb + Y))
260229 }
261230
262231
263-func bv (aI,bq,bg,bh,bo,bp,bw,bx,by,bz,bA,bB) = {
264- let bC = if (if (if ((bg > bB))
265- then (bg == bh)
232+func bd (au,aY,aQ,aR,aW,aX,be,bf,bg,bh,bi) = {
233+ let bj = if (if (if ((aQ > height))
234+ then (aQ == aR)
266235 else false)
267236 then true
268- else if ((bB > bg))
269- then (bg != bh)
237+ else if ((height > aQ))
238+ then (aQ != aR)
270239 else false)
271240 then {
272- let bD = (bz * (bB - bq))
273- $Tuple3(bD, bo, bp)
241+ let bk = (bh * (height - aY))
242+ $Tuple3(bk, aW, aX)
274243 }
275- else if (if (if ((bB > bg))
276- then (bg == bh)
244+ else if (if (if ((height > aQ))
245+ then (aQ == aR)
277246 else false)
278- then (bq > bg)
247+ then (aY > aQ)
279248 else false)
280249 then {
281- let bD = (bx * (bB - bq))
282- $Tuple3(bD, bo, bp)
250+ let bk = (bf * (height - aY))
251+ $Tuple3(bk, aW, aX)
283252 }
284253 else {
285- let bE = (bz * (bg - bq))
286- let bF = (bo + fraction(br(aI, bE), bA, by))
287- let bG = (bp + (if ((bw > 0))
288- then fraction(bu(aI, bE), T, bw)
254+ let bl = (bh * (aQ - aY))
255+ let bm = (aW + fraction(aZ(au, bl), bi, bg))
256+ let bn = (aX + (if ((be > 0))
257+ then fraction(bc(au, bl), X, be)
289258 else 0))
290- let bH = (bx * (bB - bg))
291- $Tuple3(bH, bF, bG)
259+ let bo = (bf * (height - aQ))
260+ $Tuple3(bo, bm, bn)
292261 }
293- let bI = bC._1
294- let bJ = bC._2
295- let bK = bC._3
296- let bL = (bJ + fraction(br(aI, bI), bA, by))
297- let bM = (bK + (if ((bw > 0))
298- then fraction(bu(aI, bI), T, bw)
262+ let bp = bj._1
263+ let bq = bj._2
264+ let br = bj._3
265+ let bs = (bq + fraction(aZ(au, bp), bi, bg))
266+ let bt = (br + (if ((be > 0))
267+ then fraction(bc(au, bp), X, be)
299268 else 0))
300- $Tuple2(bL, bM)
269+ $Tuple2(bs, bt)
301270 }
302271
303272
304-func bN (aI,aN) = {
305- let bA = aT(aq, aO(aI))
306- let bw = aL(aI)
307- let bO = aM(aI, aN)
308- let bP = aK(aI)
309- let bQ = valueOrElse(getInteger(this, (aI + n)), bP)
310- let bR = valueOrElse(getInteger(this, (aI + G)), 0)
311- let bS = bn(aI)
312- let bq = bS._1
313- let bo = bS._2
314- let bp = bS._3
315- let bT = ba(aI)
316- let bx = bT._1
317- let bg = bT._2
318- let bz = bT._3
319- let bh = bT._4
320- let bU = bT._5
321- let bV = bT._6
322- let bW = bT._7
323- let bX = valueOrElse(getInteger(this, (((aI + "_") + aN) + s)), bo)
324- let bY = valueOrElse(getInteger(this, (((aI + "_") + aN) + u)), if (if ((bR > bX))
325- then (bO > 0)
273+func bu (au,az) = {
274+ let bi = aF(as, aA(au))
275+ let be = ax(au)
276+ let bv = ay(au, az)
277+ let bw = aw(au)
278+ let bx = valueOrElse(getInteger(this, (au + q)), bw)
279+ let by = valueOrElse(getInteger(this, (au + K)), 0)
280+ let bz = aV(au)
281+ let aY = bz._1
282+ let aW = bz._2
283+ let aX = bz._3
284+ let bA = aM(au)
285+ let bf = bA._1
286+ let aQ = bA._2
287+ let bh = bA._3
288+ let aR = bA._4
289+ let bB = valueOrElse(getInteger(this, (((au + "_") + az) + v)), aW)
290+ let bC = valueOrElse(getInteger(this, (((au + "_") + az) + x)), if (if ((by > bB))
291+ then (bv > 0)
326292 else false)
327293 then 0
328- else bp)
329- let bZ = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
330- let ca = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), bZ)
331- if ((bQ == 0))
294+ else aX)
295+ let bD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
296+ let bE = valueOrElse(getInteger(this, (((au + "_") + az) + o)), bD)
297+ if ((bx == 0))
332298 then {
333- let cb = if ((bU > bq))
334- then ((bV * (bU - bq)) + (bx * (height - bU)))
335- else (bx * (height - bq))
336- $Tuple4(bo, bp, 0, cb)
299+ let bF = (bf * (height - aY))
300+ $Tuple4(aW, aX, 0, bF)
337301 }
338302 else {
339- let cc = if ((bU > bq))
340- then {
341- let cd = bv(aI, bq, bg, bh, bo, bp, bw, bV, bQ, bW, bA, bU)
342- let ce = cd._1
343- let cf = cd._2
344- $Tuple3(ce, cf, bU)
345- }
346- else $Tuple3(bo, bp, bq)
347- let cg = cc._1
348- let ch = cc._2
349- let ci = cc._3
350- let cj = bv(aI, ci, bg, bh, cg, ch, bw, bx, bQ, bz, bA, height)
351- let bL = cj._1
352- let bM = cj._2
353- let ck = fraction(ca, (bL - bX), bA)
354- let bt = valueOrElse(getInteger(this, (aI + q)), V)
355- let cl = fraction(fraction(ca, (bL - max([bX, bR])), bA), bt, U)
356- let cm = fraction((bM - bY), bO, T)
357- let cn = min([cl, cm])
358- let cb = (cl - cn)
359- if ((0 > cb))
303+ let bG = bd(au, aY, aQ, aR, aW, aX, be, bf, bx, bh, bi)
304+ let bs = bG._1
305+ let bt = bG._2
306+ let bH = fraction(bE, (bs - bB), bi)
307+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
308+ let bI = fraction(fraction(bE, (bs - max([bB, by])), bi), bb, Y)
309+ let bJ = fraction((bt - bC), bv, X)
310+ let bK = min([bI, bJ])
311+ let bF = (bI - bK)
312+ if ((0 > bF))
360313 then throw("toTreasury < 0")
361- else $Tuple4(bL, bM, (ck + cn), cb)
314+ else $Tuple4(bs, bt, (bH + bK), bF)
362315 }
363316 }
364317
365318
366-func co (cp,aN) = {
367- func cq (au,aI) = {
368- let cr = au
369- let cs = cr._1
370- let ct = cr._2
371- let cu = bN(aI, aN)
372- let cv = cu._1
373- let cw = cu._2
374- let cx = cu._3
375- let cy = cu._4
376- let cz = (aZ(aI, aN) + cx)
377- $Tuple2((cs :+ aI), (ct :+ cz))
319+func bL (bM,az) = {
320+ func bN (bO,au) = {
321+ let bP = bO
322+ let bQ = bP._1
323+ let bR = bP._2
324+ let bS = bu(au, az)
325+ let bT = bS._1
326+ let bU = bS._2
327+ let bV = bS._3
328+ let bW = bS._4
329+ let bX = (aL(au, az) + bV)
330+ $Tuple2((bQ :+ au), (bR :+ bX))
378331 }
379332
380- let aA = cp
381- let aB = size(aA)
382- let aC = $Tuple2(nil, nil)
383- func aD (aE,aF) = if ((aF >= aB))
384- then aE
385- else cq(aE, aA[aF])
333+ let bY = bM
334+ let bZ = size(bY)
335+ let ca = $Tuple2(nil, nil)
336+ func cb (cc,cd) = if ((cd >= bZ))
337+ then cc
338+ else bN(cc, bY[cd])
386339
387- func aG (aE,aF) = if ((aF >= aB))
388- then aE
340+ func ce (cc,cd) = if ((cd >= bZ))
341+ then cc
389342 else throw("List size exceeds 60")
390343
391- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
344+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
392345 }
393346
394347
395-func cA (aI,aN,cB,cC,cD) = if ((aH(aI) > height))
348+func cf (au,az,cg,ch,ci) = if ((at(au) > height))
396349 then {
397- let cE = valueOrElse(getInteger(ai, (aI + y)), 0)
398- let cF = valueOrElse(getInteger(ai, (((aN + "_") + aI) + D)), 0)
399- let cG = aJ(addressFromStringValue(aI))
400- let cH = (fraction(cG, cF, cE) - cB)
401- if ((cD > 0))
350+ let cj = valueOrElse(getInteger(ak, (au + C)), 0)
351+ let ck = valueOrElse(getInteger(ak, (((az + "_") + au) + H)), 0)
352+ let cl = av(addressFromStringValue(au))
353+ let cm = (fraction(cl, ck, cj) - cg)
354+ if ((ci > 0))
402355 then throw("You can't lock shareTokens till first harvest end.")
403- else if ((cF == 0))
356+ else if ((ck == 0))
404357 then 0
405- else if ((cC >= cH))
406- then (cC - cH)
358+ else if ((ch >= cm))
359+ then (ch - cm)
407360 else 0
408361 }
409362 else 0
410363
411364
412-func cI (cJ) = {
413- let cK = split(valueOrErrorMessage(getString(this, (toString(cJ) + o)), ("There are no key for lock type" + toString(cJ))), "_")
414- $Tuple2(parseIntValue(cK[0]), parseIntValue(cK[1]))
365+func cn (co) = {
366+ let cp = split(valueOrErrorMessage(getString(this, (toString(co) + r)), ("There are no key for lock type" + toString(co))), "_")
367+ $Tuple2(parseIntValue(cp[0]), parseIntValue(cp[1]))
415368 }
416369
417370
418-func cL (cM) = [BooleanEntry(a, false), StringEntry(c, cM)]
371+func cq (cr) = [BooleanEntry(a, false), StringEntry(d, cr)]
419372
420373
421-func cN () = if (if (ao)
422- then ap
374+func cs () = if (if (aq)
375+ then ar
423376 else false)
424377 then unit
425378 else throw("DApp is inactive at this moment")
426379
427380
428-func cO (av) = if (containsElement([ae, af, ag], av.callerPublicKey))
381+func ct (cu) = if (containsElement([ag, ah, ai], cu.callerPublicKey))
429382 then unit
430383 else throw("Only admin can call this function")
431384
432385
433-func cP (av,aI) = if (if ((toString(av.caller) == aI))
386+func cv (cu,au) = if (if ((toString(cu.caller) == au))
434387 then true
435- else (av.caller == an))
388+ else (cu.caller == ap))
436389 then unit
437390 else throw("Only pool can call this function")
438391
439392
440-func cQ (av) = if ((av.caller == this))
393+func cw (au) = valueOrElse(getBoolean(V, (c + au)), false)
394+
395+
396+func cx (au) = if (!(cw(au)))
397+ then unit
398+ else throw("Pool is deprecated. Only unlock action allowed.")
399+
400+
401+func cy (cu) = if ((cu.caller == this))
441402 then unit
442403 else throw("Only contract itself can call this function")
443404
444405
445-func cR (av,cS,aI,cD) = {
446- let cT = aO(aI)
447- let aN = toString(cS)
448- let cU = aK(aI)
449- let bQ = valueOrElse(getInteger(this, (aI + n)), cU)
450- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
451- let cW = valueOrElse(getInteger(this, (((aI + "_") + aN) + k)), 0)
452- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
453- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
454- let cZ = ((cV + cX) + av.payments[0].amount)
455- let da = cI(cD)
456- let db = da._1
457- let dc = da._2
458- let dd = getIntegerValue(this, p)
459- if ((av.payments[0].assetId != cT))
406+func cz (cu,cA,au,ci) = {
407+ let cB = aA(au)
408+ let az = toString(cA)
409+ let cC = aw(au)
410+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
411+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
412+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
413+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
414+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
415+ let cH = ((cD + cF) + cu.payments[0].amount)
416+ let cI = cn(ci)
417+ let cJ = cI._1
418+ let cK = cI._2
419+ let cL = getIntegerValue(this, s)
420+ if ((cu.payments[0].assetId != cB))
460421 then throw("Wrong sharetoken in payment")
461- else if ((0 >= av.payments[0].amount))
422+ else if ((0 >= cu.payments[0].amount))
462423 then throw("Payment amount must be greater than 0")
463- else if ((0 > cD))
424+ else if ((0 > ci))
464425 then throw("lockType must be >= 0")
465426 else {
466- let de = cA(aI, aN, cV, av.payments[0].amount, cD)
467- if ((de == de))
427+ let cM = cf(au, az, cD, cu.payments[0].amount, ci)
428+ if ((cM == cM))
468429 then {
469- let df = if ((cD == 0))
430+ let cN = if ((ci == 0))
470431 then {
471- let dg = ((cY + av.payments[0].amount) - de)
472- $Tuple2([IntegerEntry((((aI + "_") + aN) + h), ((cV + av.payments[0].amount) - de)), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + n), ((bQ + av.payments[0].amount) - de)), ScriptTransfer(cS, de, av.payments[0].assetId)], ((cU + av.payments[0].amount) - de))
432+ let cO = ((cG + cu.payments[0].amount) - cM)
433+ $Tuple2([IntegerEntry((((au + "_") + az) + k), ((cD + cu.payments[0].amount) - cM)), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx + cu.payments[0].amount) - cM)), ScriptTransfer(cA, cM, cu.payments[0].assetId)], ((cC + cu.payments[0].amount) - cM))
473434 }
474- else if (if ((cW == 0))
475- then if (if ((2 > size(av.payments)))
435+ else if (if ((cE == 0))
436+ then if (if ((2 > size(cu.payments)))
476437 then true
477- else (av.payments[1].assetId != unit))
438+ else (cu.payments[1].assetId != unit))
478439 then true
479- else (dd > av.payments[1].amount)
440+ else (cL > cu.payments[1].amount)
480441 else false)
481- then throw((("You need to pay additional waves comission " + toString(dd)) + "WAVES"))
482- else if ((cW > (height + db)))
442+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
443+ else if ((cE > (height + cJ)))
483444 then throw("You cannot lock sharetokens for a period less than what you have already locked")
484445 else {
485- let dh = (cX + av.payments[0].amount)
486- let di = (height + db)
487- let dg = (fraction(dh, dc, U) + cV)
488- $Tuple2([IntegerEntry((((aI + "_") + aN) + i), dh), IntegerEntry((((aI + "_") + aN) + k), di), IntegerEntry((((aI + "_") + aN) + j), cD), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + n), ((bQ - cY) + dg))], (cU + av.payments[0].amount))
446+ let cP = (cF + cu.payments[0].amount)
447+ let cQ = (height + cJ)
448+ let cO = (fraction(cP, cK, Y) + cD)
449+ $Tuple2([IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO))], (cC + cu.payments[0].amount))
489450 }
490- let dj = df._1
491- let dk = df._2
492- if ((aP(cT) > dk))
451+ let cR = cN._1
452+ let cS = cN._2
453+ if ((aB(cB) > cS))
493454 then throw("Balance of share-token is lower than totalAmount")
494455 else {
495- let dl = bN(aI, aN)
496- let bo = dl._1
497- let bp = dl._2
498- let cx = dl._3
499- let dm = dl._4
500- let dn = (aZ(aI, aN) + cx)
501- let do = if ((getString(Address(fromBase58String(aI)), "version") == "3.0.0"))
502- then invoke(al, "updateUserInterest", [aN, aI, cZ], nil)
456+ let cT = bu(au, az)
457+ let aW = cT._1
458+ let aX = cT._2
459+ let bV = cT._3
460+ let cU = cT._4
461+ let cV = (aL(au, az) + bV)
462+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
463+ then invoke(an, "updateUserInterest", [az, au, cH], nil)
503464 else 0
504- if ((do == do))
505- then ([IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((aI + m), dk), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq)] ++ dj)
465+ if ((cW == cW))
466+ then ([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((au + p), cS), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)] ++ cR)
506467 else throw("Strict value is not equal to itself.")
507468 }
508469 }
511472 }
512473
513474
514-func dp (av,cS,aI,dq) = valueOrElse(cN(), {
515- let dr = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id"))
516- let aN = toString(cS)
517- let ds = bN(aI, aN)
518- let bo = ds._1
519- let bp = ds._2
520- let cx = ds._3
521- let dm = ds._4
522- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
523- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
524- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
525- let dt = (cV - dq)
526- let dn = (aZ(aI, aN) + cx)
527- let du = aK(aI)
528- let bQ = valueOrElse(getInteger(this, (aI + n)), du)
529- let dv = (du - dq)
530- let dw = (bQ - dq)
531- let dg = (cY - dq)
532- if ((dq > cV))
533- then throw("Withdraw amount more then user locked amount")
534- else if ((aP(dr) > du))
535- then throw("Balance of share-token is lower than totalAmount")
536- else {
537- let do = if ((getString(Address(fromBase58String(aI)), "version") == "3.0.0"))
538- then invoke(al, "updateUserInterest", [aN, aI, (cV + cX)], nil)
539- else 0
540- if ((do == do))
541- then [IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + m), dv), IntegerEntry((aI + n), dw), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dq, dr)]
542- else throw("Strict value is not equal to itself.")
543- }
544- })
475+func cX (cu,cA,au,cY) = {
476+ let cZ = if (cw(au))
477+ then invoke(this, "unlockUserLockDeprecated", [au, toString(cA)], nil)
478+ else 0
479+ if ((cZ == cZ))
480+ then {
481+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
482+ let az = toString(cA)
483+ let db = bu(au, az)
484+ let aW = db._1
485+ let aX = db._2
486+ let bV = db._3
487+ let cU = db._4
488+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
489+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
490+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
491+ let dc = (cD - cY)
492+ let cV = (aL(au, az) + bV)
493+ let dd = aw(au)
494+ let bx = valueOrElse(getInteger(this, (au + q)), dd)
495+ let de = (dd - cY)
496+ let df = (bx - cY)
497+ let cO = (cG - cY)
498+ if ((cY > cD))
499+ then throw("Withdraw amount more then user locked amount")
500+ else if ((aB(da) > dd))
501+ then throw("Balance of share-token is lower than totalAmount")
502+ else {
503+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
504+ then invoke(an, "updateUserInterest", [az, au, (cD + cF)], nil)
505+ else 0
506+ if ((cW == cW))
507+ then [IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + p), de), IntegerEntry((au + q), df), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as), ScriptTransfer(cu.caller, cY, da)]
508+ else throw("Strict value is not equal to itself.")
509+ }
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
545513
546514
547-func dx (av,aI,cS) = {
548- let dr = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id"))
549- let aN = toString(cS)
550- let by = aK(aI)
551- let dy = bN(aI, aN)
552- let bo = dy._1
553- let bp = dy._2
554- let cx = dy._3
555- let dm = dy._4
556- let cz = (aZ(aI, aN) + cx)
557- if ((aP(dr) > by))
515+func dg (cu,au,cA) = {
516+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
517+ let az = toString(cA)
518+ let bg = aw(au)
519+ let dh = bu(au, az)
520+ let aW = dh._1
521+ let aX = dh._2
522+ let bV = dh._3
523+ let cU = dh._4
524+ let bX = (aL(au, az) + bV)
525+ if ((aB(da) > bg))
558526 then throw("Balance of share-token is lower than totalAmount")
559527 else {
560- let dz = if ((av.caller != this))
561- then [ScriptTransfer(av.caller, cz, aq)]
528+ let di = if ((cu.caller != this))
529+ then [ScriptTransfer(cu.caller, bX, as)]
562530 else nil
563- $Tuple2(([IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + x), 0), Reissue(aq, (dm + cz), true), ScriptTransfer(am, dm, aq)] ++ dz), cz)
531+ $Tuple2(([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), 0), Reissue(as, (cU + bX), true), ScriptTransfer(ao, cU, as)] ++ di), bX)
564532 }
565533 }
566534
567535
568-@Callable(av)
569-func init (dA) = if (isDefined(getString(this, w)))
536+func dj (cu,au,az) = {
537+ let bx = getIntegerValue(this, (au + q))
538+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
539+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
540+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
541+ let dc = (cD + cF)
542+ let dk = bu(au, az)
543+ let aW = dk._1
544+ let aX = dk._2
545+ let bV = dk._3
546+ let cU = dk._4
547+ let cV = (aL(au, az) + bV)
548+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), dc), IntegerEntry((au + q), ((bx - cG) + dc)), IntegerEntry((((au + "_") + az) + A), cV), DeleteEntry((((au + "_") + az) + l)), DeleteEntry((((au + "_") + az) + n)), DeleteEntry((((au + "_") + az) + m)), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
549+ }
550+
551+
552+@Callable(cu)
553+func init (dl) = if (isDefined(getString(this, z)))
570554 then throw("SWOP already initialized")
571555 else {
572- let dB = 100000000000000
573- let dC = Issue("SWOP", "SWOP protocol token", dB, 8, true)
574- let dD = calculateAssetId(dC)
575-[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dB, 8, true), StringEntry(w, toBase58String(dD))]
556+ let dm = 100000000000000
557+ let dn = Issue("SWOP", "SWOP protocol token", dm, 8, true)
558+ let do = calculateAssetId(dn)
559+[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dm, 8, true), StringEntry(z, toBase58String(do))]
576560 }
577561
578562
579563
580-@Callable(av)
581-func initPoolShareFarming (aI) = valueOrElse(cO(av), [IntegerEntry((aI + m), 0), IntegerEntry((aI + r), 0), IntegerEntry((aI + t), 0), IntegerEntry((aI + v), height)])
564+@Callable(cu)
565+func initPoolShareFarming (au) = valueOrElse(ct(cu), [IntegerEntry((au + p), 0), IntegerEntry((au + u), 0), IntegerEntry((au + w), 0), IntegerEntry((au + y), height)])
582566
583567
584568
585-@Callable(av)
586-func updatePoolInterest (aI) = valueOrElse(cN(), if ((av.caller != aj))
569+@Callable(cu)
570+func updatePoolInterest (au) = valueOrElse(cs(), if ((cu.caller != al))
587571 then throw("Only Governance can call this function")
588572 else {
589- let aN = toString(addressFromPublicKey(ak))
590- let dE = bN(aI, aN)
591- let bo = dE._1
592- let bp = dE._2
593- let dF = dE._3
594-[IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height)]
573+ let az = toString(addressFromPublicKey(am))
574+ let dp = bu(au, az)
575+ let aW = dp._1
576+ let aX = dp._2
577+ let dq = dp._3
578+[IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height)]
595579 })
596580
597581
598582
599-@Callable(av)
600-func lockShareTokens (aI,cD) = valueOrElse(cN(), cR(av, av.caller, aI, cD))
583+@Callable(cu)
584+func lockShareTokens (au,ci) = valueOrElse(cx(au), valueOrElse(cs(), cz(cu, cu.caller, au, ci)))
601585
602586
603587
604-@Callable(av)
605-func lockShareTokensFromPool (dG,aI,cD) = valueOrElse(cN(), valueOrElse(cP(av, aI), cR(av, Address(dG), aI, cD)))
588+@Callable(cu)
589+func lockShareTokensFromPool (dr,au,ci) = valueOrElse(cx(au), valueOrElse(cs(), valueOrElse(cv(cu, au), cz(cu, Address(dr), au, ci))))
606590
607591
608592
609-@Callable(av)
610-func lockStakedShareTokens (aI,cD,dH) = valueOrElse(cN(), {
611- let cT = aO(aI)
612- let aN = toString(av.caller)
613- let cU = aK(aI)
614- let bQ = valueOrElse(getInteger(this, (aI + n)), cU)
615- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
616- let cW = valueOrElse(getInteger(this, (((aI + "_") + aN) + k)), 0)
617- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
618- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
619- let cZ = (cV + cX)
620- let dI = cI(cD)
621- let db = dI._1
622- let dc = dI._2
623- let dd = getIntegerValue(this, p)
624- if ((aH(aI) > height))
593+@Callable(cu)
594+func lockStakedShareTokens (au,ci,ds) = valueOrElse(cx(au), valueOrElse(cs(), {
595+ let cB = aA(au)
596+ let az = toString(cu.caller)
597+ let cC = aw(au)
598+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
599+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
600+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
601+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
602+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
603+ let cH = (cD + cF)
604+ let dt = cn(ci)
605+ let cJ = dt._1
606+ let cK = dt._2
607+ let cL = getIntegerValue(this, s)
608+ if ((at(au) > height))
625609 then throw("You can't lock shareTokens till first harvest end.")
626- else if ((0 >= cD))
610+ else if ((0 >= ci))
627611 then throw("lockType must be > 0")
628- else if ((dH > cV))
629- then throw(("You can't lock more than " + toString(cV)))
630- else if ((aP(cT) > cU))
612+ else if ((ds > cD))
613+ then throw(("You can't lock more than " + toString(cD)))
614+ else if ((aB(cB) > cC))
631615 then throw("Balance of share-token is lower than totalAmount")
632- else if (if ((cW == 0))
633- then if (if ((1 > size(av.payments)))
616+ else if (if ((cE == 0))
617+ then if (if ((1 > size(cu.payments)))
634618 then true
635- else (av.payments[0].assetId != unit))
619+ else (cu.payments[0].assetId != unit))
636620 then true
637- else (dd > av.payments[0].amount)
621+ else (cL > cu.payments[0].amount)
638622 else false)
639- then throw((("You need to pay additional waves comission " + toString(dd)) + "WAVES"))
640- else if (if ((cW == 0))
641- then (0 >= dH)
623+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
624+ else if (if ((cE == 0))
625+ then (0 >= ds)
642626 else false)
643627 then throw("lockAmount must be greater than 0")
644- else if ((0 > dH))
628+ else if ((0 > ds))
645629 then throw("lockAmount must be positive")
646- else if ((cW > (height + db)))
630+ else if ((cE > (height + cJ)))
647631 then throw("You cannot lock sharetokens for a period less than what you have already locked")
648632 else {
649- let dh = (cX + dH)
650- let dt = (cV - dH)
651- let di = (height + db)
652- let dg = (fraction(dh, dc, U) + dt)
653- let dJ = bN(aI, aN)
654- let bo = dJ._1
655- let bp = dJ._2
656- let cx = dJ._3
657- let dm = dJ._4
658- let dn = (aZ(aI, aN) + cx)
659-[IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + i), dh), IntegerEntry((((aI + "_") + aN) + k), di), IntegerEntry((((aI + "_") + aN) + j), cD), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + n), ((bQ - cY) + dg)), IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq)]
633+ let cP = (cF + ds)
634+ let dc = (cD - ds)
635+ let cQ = (height + cJ)
636+ let cO = (fraction(cP, cK, Y) + dc)
637+ let du = bu(au, az)
638+ let aW = du._1
639+ let aX = du._2
640+ let bV = du._3
641+ let cU = du._4
642+ let cV = (aL(au, az) + bV)
643+[IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO)), IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
660644 }
645+ }))
646+
647+
648+
649+@Callable(cu)
650+func unlockUserLock (au,az) = valueOrElse(cs(), {
651+ let cE = valueOrErrorMessage(getInteger(this, (((au + "_") + az) + n)), (((("There is no pool " + au) + " or user ") + az) + "with lock"))
652+ if ((cE > height))
653+ then throw(("You can't unlock sharetokens till " + toString(cE)))
654+ else (dj(cu, au, az) ++ [ScriptTransfer(cu.caller, getIntegerValue(this, s), unit)])
661655 })
662656
663657
664658
665-@Callable(av)
666-func unlockUserLock (aI,aN) = valueOrElse(cN(), {
667- let dd = getIntegerValue(this, p)
668- let cW = valueOrErrorMessage(getInteger(this, (((aI + "_") + aN) + k)), (((("There is no pool " + aI) + " or user ") + aN) + "with lock"))
669- let bQ = getIntegerValue(this, (aI + n))
670- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
671- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
672- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
673- if ((cW > height))
674- then throw(("You can't unlock sharetokens till " + toString(cW)))
675- else {
676- let dt = (cV + cX)
677- let dK = bN(aI, aN)
678- let bo = dK._1
679- let bp = dK._2
680- let cx = dK._3
681- let dm = dK._4
682- let dn = (aZ(aI, aN) + cx)
683-[IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dt), IntegerEntry((aI + n), ((bQ - cY) + dt)), IntegerEntry((((aI + "_") + aN) + x), dn), DeleteEntry((((aI + "_") + aN) + i)), DeleteEntry((((aI + "_") + aN) + k)), DeleteEntry((((aI + "_") + aN) + j)), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dd, unit)]
684- }
659+@Callable(cu)
660+func unlockUserLockDeprecated (au,az) = valueOrElse(cs(), valueOrElse(cy(cu), if (!(cw(au)))
661+ then throw("Pool must be deprecated")
662+ else if (isDefined(getInteger(this, (((au + "_") + az) + n))))
663+ then (dj(cu, au, az) ++ [ScriptTransfer(aj, getIntegerValue(this, s), unit)])
664+ else nil))
665+
666+
667+
668+@Callable(cu)
669+func withdrawShareTokens (au,cY) = valueOrElse(cs(), cX(cu, cu.caller, au, cY))
670+
671+
672+
673+@Callable(cu)
674+func withdrawShareTokensFromPool (dr,au,cY) = valueOrElse(cs(), valueOrElse(cv(cu, au), cX(cu, Address(dr), au, cY)))
675+
676+
677+
678+@Callable(cu)
679+func claim (au) = valueOrElse(cs(), {
680+ let bk = dg(cu, au, cu.caller)
681+ if ((bk._2 == 0))
682+ then throw("You have 0 available SWOP")
683+ else bk
685684 })
686685
687686
688687
689-@Callable(av)
690-func withdrawShareTokens (aI,dq) = valueOrElse(cN(), dp(av, av.caller, aI, dq))
688+@Callable(cu)
689+func claimInternal (au,cA) = valueOrElse(cs(), valueOrElse(cy(cu), dg(cu, au, Address(cA))))
691690
692691
693692
694-@Callable(av)
695-func withdrawShareTokensFromPool (dG,aI,dq) = valueOrElse(cN(), valueOrElse(cP(av, aI), dp(av, Address(dG), aI, dq)))
696-
697-
698-
699-@Callable(av)
700-func claim (aI) = valueOrElse(cN(), {
701- let bD = dx(av, aI, av.caller)
702- if ((bD._2 == 0))
703- then throw("You have 0 available SWOP")
704- else bD
705- })
706-
707-
708-
709-@Callable(av)
710-func claimInternal (aI,cS) = valueOrElse(cN(), valueOrElse(cQ(av), dx(av, aI, Address(cS))))
711-
712-
713-
714-@Callable(av)
715-func claimAndStake (aI) = valueOrElse(cN(), {
716- let cx = {
717- let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil)
718- if ($isInstanceOf(dL, "Int"))
719- then dL
720- else throw(($getType(dL) + " couldn't be cast to Int"))
693+@Callable(cu)
694+func claimAndStake (au) = valueOrElse(cs(), {
695+ let bV = {
696+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
697+ if ($isInstanceOf(dv, "Int"))
698+ then dv
699+ else throw(($getType(dv) + " couldn't be cast to Int"))
721700 }
722- if ((cx == cx))
723- then if ((cx == 0))
701+ if ((bV == bV))
702+ then if ((bV == 0))
724703 then throw("You have 0 available SWOP")
725704 else {
726- let dM = invoke(aj, "lockSWOPFromFarming", nil, [AttachedPayment(aq, cx)])
727- if ((dM == dM))
705+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, bV)])
706+ if ((dw == dw))
728707 then nil
729708 else throw("Strict value is not equal to itself.")
730709 }
733712
734713
735714
736-@Callable(av)
737-func claimAll (cp) = valueOrElse(cN(), {
738- func dN (dO,aI) = {
739- let cx = {
740- let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil)
741- if ($isInstanceOf(dL, "Int"))
742- then dL
743- else throw(($getType(dL) + " couldn't be cast to Int"))
715+@Callable(cu)
716+func claimAll (bM) = valueOrElse(cs(), {
717+ func dx (dy,au) = {
718+ let bV = {
719+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
720+ if ($isInstanceOf(dv, "Int"))
721+ then dv
722+ else throw(($getType(dv) + " couldn't be cast to Int"))
744723 }
745- if ((cx == cx))
746- then (dO + cx)
724+ if ((bV == bV))
725+ then (dy + bV)
747726 else throw("Strict value is not equal to itself.")
748727 }
749728
750- let dO = {
751- let aA = cp
752- let aB = size(aA)
753- let aC = 0
754- func aD (aE,aF) = if ((aF >= aB))
755- then aE
756- else dN(aE, aA[aF])
729+ let dy = {
730+ let bY = bM
731+ let bZ = size(bY)
732+ let ca = 0
733+ func cb (cc,cd) = if ((cd >= bZ))
734+ then cc
735+ else dx(cc, bY[cd])
757736
758- func aG (aE,aF) = if ((aF >= aB))
759- then aE
737+ func ce (cc,cd) = if ((cd >= bZ))
738+ then cc
760739 else throw("List size exceeds 60")
761740
762- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
741+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
763742 }
764- if ((dO == 0))
743+ if ((dy == 0))
765744 then throw("You have 0 available SWOP")
766- else [ScriptTransfer(av.caller, dO, aq)]
745+ else [ScriptTransfer(cu.caller, dy, as)]
767746 })
768747
769748
770749
771-@Callable(av)
772-func claimAllAndStake (cp) = valueOrElse(cN(), {
773- func dN (dO,aI) = {
774- let cx = {
775- let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil)
776- if ($isInstanceOf(dL, "Int"))
777- then dL
778- else throw(($getType(dL) + " couldn't be cast to Int"))
750+@Callable(cu)
751+func claimAllAndStake (bM) = valueOrElse(cs(), {
752+ func dx (dy,au) = {
753+ let bV = {
754+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
755+ if ($isInstanceOf(dv, "Int"))
756+ then dv
757+ else throw(($getType(dv) + " couldn't be cast to Int"))
779758 }
780- if ((cx == cx))
781- then (dO + cx)
759+ if ((bV == bV))
760+ then (dy + bV)
782761 else throw("Strict value is not equal to itself.")
783762 }
784763
785- let dO = {
786- let aA = cp
787- let aB = size(aA)
788- let aC = 0
789- func aD (aE,aF) = if ((aF >= aB))
790- then aE
791- else dN(aE, aA[aF])
764+ let dy = {
765+ let bY = bM
766+ let bZ = size(bY)
767+ let ca = 0
768+ func cb (cc,cd) = if ((cd >= bZ))
769+ then cc
770+ else dx(cc, bY[cd])
792771
793- func aG (aE,aF) = if ((aF >= aB))
794- then aE
772+ func ce (cc,cd) = if ((cd >= bZ))
773+ then cc
795774 else throw("List size exceeds 60")
796775
797- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
776+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
798777 }
799- if ((dO == 0))
778+ if ((dy == 0))
800779 then throw("You have 0 available SWOP")
801780 else {
802- let dM = invoke(aj, "lockSWOPFromFarming", nil, [AttachedPayment(aq, dO)])
803- if ((dM == dM))
781+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, dy)])
782+ if ((dw == dw))
804783 then nil
805784 else throw("Strict value is not equal to itself.")
806785 }
808787
809788
810789
811-@Callable(av)
812-func updateUserBoostInterest (aI,aN) = valueOrElse(cN(), if ((av.caller != ai))
790+@Callable(cu)
791+func updateUserBoostInterest (au,az) = valueOrElse(cs(), if ((cu.caller != ak))
813792 then throw("Only voiting can call this function")
814793 else {
815- let dP = bN(aI, aN)
816- let bo = dP._1
817- let bp = dP._2
818- let cx = dP._3
819- let dm = dP._4
820- let dn = (aZ(aI, aN) + cx)
821-[IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq)]
794+ let dz = bu(au, az)
795+ let aW = dz._1
796+ let aX = dz._2
797+ let bV = dz._3
798+ let cU = dz._4
799+ let cV = (aL(au, az) + bV)
800+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
822801 })
823802
824803
825804
826-@Callable(av)
827-func shutdown () = valueOrElse(cO(av), if (!(ao))
828- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
829- else cL("Paused by admin"))
805+@Callable(cu)
806+func shutdown () = valueOrElse(ct(cu), if (!(aq))
807+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified")))
808+ else cq("Paused by admin"))
830809
831810
832811
833-@Callable(av)
834-func activate () = valueOrElse(cO(av), if (ao)
812+@Callable(cu)
813+func activate () = valueOrElse(ct(cu), if (aq)
835814 then throw("DApp is already active")
836- else [BooleanEntry(a, true), DeleteEntry(c)])
815+ else [BooleanEntry(a, true), DeleteEntry(d)])
837816
838817
839-@Verifier(dQ)
840-func dR () = {
841- let ab = dQ
842- let dS = if (sigVerify(dQ.bodyBytes, dQ.proofs[0], ae))
818+@Verifier(dA)
819+func dB () = {
820+ let ad = dA
821+ let dC = if (sigVerify(dA.bodyBytes, dA.proofs[0], ag))
843822 then 1
844823 else 0
845- let dT = if (sigVerify(dQ.bodyBytes, dQ.proofs[1], af))
824+ let dD = if (sigVerify(dA.bodyBytes, dA.proofs[1], ah))
846825 then 1
847826 else 0
848- let dU = if (sigVerify(dQ.bodyBytes, dQ.proofs[2], ag))
827+ let dE = if (sigVerify(dA.bodyBytes, dA.proofs[2], ai))
849828 then 1
850829 else 0
851- (((dS + dT) + dU) >= 2)
830+ (((dC + dD) + dE) >= 2)
852831 }
853832
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "active"
55
66 let b = "active_all_contracts"
77
8-let c = "shutdown_cause"
8+let c = "deprecated_"
99
10-let d = "_current_pool_fraction_reward"
10+let d = "shutdown_cause"
1111
12-let e = "_previous_pool_fraction_reward"
12+let e = "_current_pool_fraction_reward"
1313
14-let f = "_pool_reward_update_height"
14+let f = "_previous_pool_fraction_reward"
1515
16-let g = "reward_update_height"
16+let g = "_pool_reward_update_height"
1717
18-let h = "_share_tokens_locked"
18+let h = "total_reward_per_block_current"
1919
20-let i = "_share_tokens_blocked"
20+let i = "total_reward_per_block_previous"
2121
22-let j = "_share_tokens_blocked_type"
22+let j = "reward_update_height"
2323
24-let k = "_share_tokens_blocked_height"
24+let k = "_share_tokens_locked"
2525
26-let l = "_share_tokens_virtual"
26+let l = "_share_tokens_blocked"
2727
28-let m = "_total_share_tokens_locked"
28+let m = "_share_tokens_blocked_type"
2929
30-let n = "_total_share_tokens_virtual"
30+let n = "_share_tokens_blocked_height"
3131
32-let o = "_lock_params"
32+let o = "_share_tokens_virtual"
3333
34-let p = "lock_waves_fee"
34+let p = "_total_share_tokens_locked"
3535
36-let q = "_boost_coef"
36+let q = "_total_share_tokens_virtual"
3737
38-let r = "_last_interest"
38+let r = "_lock_params"
3939
40-let s = "_last_interest"
40+let s = "lock_waves_fee"
4141
42-let t = "_last_interest_b"
42+let t = "_boost_coef"
4343
44-let u = "_last_interest_u_b"
44+let u = "_last_interest"
4545
46-let v = "_last_interest_height"
46+let v = "_last_interest"
4747
48-let w = "SWOP_id"
48+let w = "_last_interest_b"
4949
50-let x = "_available_SWOP"
50+let x = "_last_interest_u_b"
5151
52-let y = "_harvest_pool_vote_gSWOP"
52+let y = "_last_interest_height"
5353
54-let z = "_pool_vote_gSWOP"
54+let z = "SWOP_id"
5555
56-let A = "_user_vote_gSWOP"
56+let A = "_available_SWOP"
5757
58-let B = "_pool_struc"
58+let B = "swop_year_emission"
5959
60-let C = "_user_pool_struc"
60+let C = "_harvest_pool_vote_gSWOP"
6161
62-let D = "_harvest_user_pool_vote_gSWOP"
62+let D = "_pool_vote_gSWOP"
6363
64-let E = "first_harvest_height"
64+let E = "_user_vote_gSWOP"
6565
66-let F = "share_limit_on_first_harvest"
66+let F = "_pool_struc"
6767
68-let G = "_strat_b_farm_interest"
68+let G = "_user_pool_struc"
6969
70-let H = "cpmm_contract"
70+let H = "_harvest_user_pool_vote_gSWOP"
7171
72-let I = "admin_pub_1"
72+let I = "first_harvest_height"
7373
74-let J = "admin_pub_2"
74+let J = "share_limit_on_first_harvest"
7575
76-let K = "admin_pub_3"
76+let K = "_strat_b_farm_interest"
7777
78-let L = "admin_invoke_pub"
78+let L = "cpmm_contract"
7979
80-let M = "money_box_address"
80+let M = "admin_pub_1"
8181
82-let N = "voting_address"
82+let N = "admin_pub_2"
8383
84-let O = "governance_address"
84+let O = "admin_pub_3"
8585
86-let P = "lp_farming"
86+let P = "admin_invoke_pub"
8787
88-let Q = "farming_treasure"
88+let Q = "money_box_address"
8989
90-let R = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
90+let R = "voting_address"
9191
92-let S = 10000000000
92+let S = "governance_address"
9393
94-let T = 100000000
94+let T = "lp_farming"
9595
96-let U = 1000
96+let U = "farming_treasure"
9797
98-let V = 500
98+let V = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9999
100-let W = 1911271
100+let W = 10000000000
101101
102-let X = 100000000000000
102+let X = 100000000
103103
104-let Y = 526330
104+let Y = 1000
105105
106-func Z (aa) = {
107- let ab = getString(R, aa)
108- if ($isInstanceOf(ab, "String"))
106+let Z = 500
107+
108+let aa = 3397850
109+
110+func ab (ac) = {
111+ let ad = getString(V, ac)
112+ if ($isInstanceOf(ad, "String"))
109113 then {
110- let ac = ab
111- fromBase58String(ac)
114+ let ae = ad
115+ fromBase58String(ae)
112116 }
113117 else {
114- let ad = ab
115- throw((aa + "is empty"))
118+ let af = ad
119+ throw((ac + "is empty"))
116120 }
117121 }
118122
119123
120-let ae = Z(I)
124+let ag = ab(M)
121125
122-let af = Z(J)
126+let ah = ab(N)
123127
124-let ag = Z(K)
128+let ai = ab(O)
125129
126-let ah = Address(Z(M))
130+let aj = Address(ab(Q))
127131
128-let ai = Address(Z(N))
132+let ak = Address(ab(R))
129133
130-let aj = Address(Z(O))
134+let al = Address(ab(S))
131135
132-let ak = Z(L)
136+let am = ab(P)
133137
134-let al = Address(Z(P))
138+let an = Address(ab(T))
135139
136-let am = Address(Z(Q))
140+let ao = Address(ab(U))
137141
138-let an = Address(Z(H))
142+let ap = Address(ab(L))
139143
140-let ao = getBooleanValue(this, a)
144+let aq = getBooleanValue(this, a)
141145
142-let ap = valueOrElse(getBoolean(R, b), true)
146+let ar = valueOrElse(getBoolean(V, b), true)
143147
144-let aq = fromBase58String(getStringValue(this, w))
148+let as = fromBase58String(getStringValue(this, z))
145149
146-func ar () = {
147- let as = ((height - W) / Y)
148- func at (au,av) = {
149- let aw = au
150- let ax = aw._1
151- let ay = aw._2
152- if ((as > av))
153- then $Tuple2(fraction(ax, 75, 100), ax)
154- else $Tuple2(ax, ay)
155- }
156-
157- let az = {
158- let aA = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
159- let aB = size(aA)
160- let aC = $Tuple2(X, X)
161- func aD (aE,aF) = if ((aF >= aB))
162- then aE
163- else at(aE, aA[aF])
164-
165- func aG (aE,aF) = if ((aF >= aB))
166- then aE
167- else throw("List size exceeds 20")
168-
169- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
170- }
171- let ax = az._1
172- let ay = az._2
173- $Tuple3((ax / Y), (ay / Y), (W + (Y * as)))
174- }
150+func at (au) = valueOrElse(getInteger(Address(fromBase58String(au)), I), 0)
175151
176152
177-func aH (aI) = valueOrElse(getInteger(Address(fromBase58String(aI)), E), 0)
153+func av (au) = valueOrErrorMessage(getInteger(au, J), ("No data on the key: " + J))
178154
179155
180-func aJ (aI) = valueOrErrorMessage(getInteger(aI, F), ("No data on the key: " + F))
156+func aw (au) = valueOrErrorMessage(getInteger(this, (au + p)), (("No data on the key: " + au) + p))
181157
182158
183-func aK (aI) = valueOrErrorMessage(getInteger(this, (aI + m)), (("No data on the key: " + aI) + m))
159+func ax (au) = valueOrElse(getInteger(ak, (au + D)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (au + F)), ""), "_")[0]), 0))
184160
185161
186-func aL (aI) = valueOrElse(getInteger(ai, (aI + z)), valueOrElse(parseInt(split(valueOrElse(getString(ai, (aI + B)), ""), "_")[0]), 0))
162+func ay (au,az) = valueOrElse(getInteger(ak, (((az + "_") + au) + E)), valueOrElse(parseInt(split(valueOrElse(getString(ak, (((az + "_") + au) + G)), ""), "_")[0]), 0))
187163
188164
189-func aM (aI,aN) = valueOrElse(getInteger(ai, (((aN + "_") + aI) + A)), valueOrElse(parseInt(split(valueOrElse(getString(ai, (((aN + "_") + aI) + C)), ""), "_")[0]), 0))
165+func aA (au) = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
190166
191167
192-func aO (aI) = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id"))
193-
194-
195-func aP (aQ) = {
196- let ab = aQ
197- if ($isInstanceOf(ab, "ByteVector"))
168+func aB (aC) = {
169+ let ad = aC
170+ if ($isInstanceOf(ad, "ByteVector"))
198171 then {
199- let aR = ab
200- assetBalance(this, aR)
172+ let aD = ad
173+ assetBalance(this, aD)
201174 }
202- else if ($isInstanceOf(ab, "Unit"))
175+ else if ($isInstanceOf(ad, "Unit"))
203176 then {
204- let aS = ab
177+ let aE = ad
205178 wavesBalance(this).available
206179 }
207180 else throw("Match error")
208181 }
209182
210183
211-func aT (aU,aV) = {
212- let aW = value(assetInfo(aU)).decimals
213- let aX = value(assetInfo(aV)).decimals
214- let aY = ((aX - aW) + 8)
215- pow(10, 0, aY, 0, 0, DOWN)
184+func aF (aG,aH) = {
185+ let aI = value(assetInfo(aG)).decimals
186+ let aJ = value(assetInfo(aH)).decimals
187+ let aK = ((aJ - aI) + 8)
188+ pow(10, 0, aK, 0, 0, DOWN)
216189 }
217190
218191
219-func aZ (aI,aN) = valueOrElse(getInteger(this, (((aI + "_") + aN) + x)), 0)
192+func aL (au,az) = valueOrElse(getInteger(this, (((au + "_") + az) + A)), 0)
220193
221194
222-func ba (aI) = {
223- let bb = ar()
224- let bc = bb._1
225- let bd = bb._2
226- let be = bb._3
227- let bf = valueOrErrorMessage(getInteger(aj, (aI + d)), (((("No data on the key: " + aI) + d) + " at address ") + toString(aj)))
228- let bg = valueOrErrorMessage(getInteger(aj, g), ((("No data on the key: " + g) + " at address ") + toString(aj)))
229- let bh = valueOrElse(getInteger(aj, (aI + f)), bg)
230- let bi = valueOrErrorMessage(getInteger(aj, (aI + e)), (((("No data on the key: " + aI) + e) + " at address ") + toString(aj)))
231- let bj = fraction(bc, bf, S)
232- let bk = fraction(bc, bi, S)
233- let bl = fraction(bd, bf, S)
234- let bm = fraction(bd, bi, S)
235- if (if ((bj > bc))
195+func aM (au) = {
196+ let aN = valueOrErrorMessage(getInteger(al, h), ((("No data on the key: " + h) + " at address ") + toString(al)))
197+ let aO = valueOrErrorMessage(getInteger(al, i), ((("No data on the key: " + i) + " at address ") + toString(al)))
198+ let aP = valueOrErrorMessage(getInteger(al, (au + e)), (((("No data on the key: " + au) + e) + " at address ") + toString(al)))
199+ let aQ = valueOrErrorMessage(getInteger(al, j), ((("No data on the key: " + j) + " at address ") + toString(al)))
200+ let aR = valueOrElse(getInteger(al, (au + g)), aQ)
201+ let aS = valueOrErrorMessage(getInteger(al, (au + f)), (((("No data on the key: " + au) + f) + " at address ") + toString(al)))
202+ let aT = fraction(aN, aP, W)
203+ let aU = fraction(aN, aS, W)
204+ if (if ((aT > aN))
236205 then true
237- else (bk > bd))
206+ else (aU > aO))
238207 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
239- else $Tuple7(bj, bg, bk, bh, be, bl, bm)
208+ else $Tuple4(aT, aQ, aU, aR)
240209 }
241210
242211
243-func bn (aI) = {
244- let bo = valueOrErrorMessage(getInteger(this, (aI + r)), (("No data on the key: " + aI) + r))
245- let bp = valueOrElse(getInteger(this, (aI + t)), 0)
246- let bq = valueOrElse(getInteger(this, (aI + v)), height)
247- $Tuple3(bq, bo, bp)
212+func aV (au) = {
213+ let aW = valueOrErrorMessage(getInteger(this, (au + u)), (("No data on the key: " + au) + u))
214+ let aX = valueOrElse(getInteger(this, (au + w)), 0)
215+ let aY = valueOrElse(getInteger(this, (au + y)), height)
216+ $Tuple3(aY, aW, aX)
248217 }
249218
250219
251-func br (aI,bs) = {
252- let bt = valueOrElse(getInteger(this, (aI + q)), V)
253- fraction(bs, U, (bt + U))
220+func aZ (au,ba) = {
221+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
222+ fraction(ba, Y, (bb + Y))
254223 }
255224
256225
257-func bu (aI,bs) = {
258- let bt = valueOrElse(getInteger(this, (aI + q)), V)
259- fraction(bs, bt, (bt + U))
226+func bc (au,ba) = {
227+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
228+ fraction(ba, bb, (bb + Y))
260229 }
261230
262231
263-func bv (aI,bq,bg,bh,bo,bp,bw,bx,by,bz,bA,bB) = {
264- let bC = if (if (if ((bg > bB))
265- then (bg == bh)
232+func bd (au,aY,aQ,aR,aW,aX,be,bf,bg,bh,bi) = {
233+ let bj = if (if (if ((aQ > height))
234+ then (aQ == aR)
266235 else false)
267236 then true
268- else if ((bB > bg))
269- then (bg != bh)
237+ else if ((height > aQ))
238+ then (aQ != aR)
270239 else false)
271240 then {
272- let bD = (bz * (bB - bq))
273- $Tuple3(bD, bo, bp)
241+ let bk = (bh * (height - aY))
242+ $Tuple3(bk, aW, aX)
274243 }
275- else if (if (if ((bB > bg))
276- then (bg == bh)
244+ else if (if (if ((height > aQ))
245+ then (aQ == aR)
277246 else false)
278- then (bq > bg)
247+ then (aY > aQ)
279248 else false)
280249 then {
281- let bD = (bx * (bB - bq))
282- $Tuple3(bD, bo, bp)
250+ let bk = (bf * (height - aY))
251+ $Tuple3(bk, aW, aX)
283252 }
284253 else {
285- let bE = (bz * (bg - bq))
286- let bF = (bo + fraction(br(aI, bE), bA, by))
287- let bG = (bp + (if ((bw > 0))
288- then fraction(bu(aI, bE), T, bw)
254+ let bl = (bh * (aQ - aY))
255+ let bm = (aW + fraction(aZ(au, bl), bi, bg))
256+ let bn = (aX + (if ((be > 0))
257+ then fraction(bc(au, bl), X, be)
289258 else 0))
290- let bH = (bx * (bB - bg))
291- $Tuple3(bH, bF, bG)
259+ let bo = (bf * (height - aQ))
260+ $Tuple3(bo, bm, bn)
292261 }
293- let bI = bC._1
294- let bJ = bC._2
295- let bK = bC._3
296- let bL = (bJ + fraction(br(aI, bI), bA, by))
297- let bM = (bK + (if ((bw > 0))
298- then fraction(bu(aI, bI), T, bw)
262+ let bp = bj._1
263+ let bq = bj._2
264+ let br = bj._3
265+ let bs = (bq + fraction(aZ(au, bp), bi, bg))
266+ let bt = (br + (if ((be > 0))
267+ then fraction(bc(au, bp), X, be)
299268 else 0))
300- $Tuple2(bL, bM)
269+ $Tuple2(bs, bt)
301270 }
302271
303272
304-func bN (aI,aN) = {
305- let bA = aT(aq, aO(aI))
306- let bw = aL(aI)
307- let bO = aM(aI, aN)
308- let bP = aK(aI)
309- let bQ = valueOrElse(getInteger(this, (aI + n)), bP)
310- let bR = valueOrElse(getInteger(this, (aI + G)), 0)
311- let bS = bn(aI)
312- let bq = bS._1
313- let bo = bS._2
314- let bp = bS._3
315- let bT = ba(aI)
316- let bx = bT._1
317- let bg = bT._2
318- let bz = bT._3
319- let bh = bT._4
320- let bU = bT._5
321- let bV = bT._6
322- let bW = bT._7
323- let bX = valueOrElse(getInteger(this, (((aI + "_") + aN) + s)), bo)
324- let bY = valueOrElse(getInteger(this, (((aI + "_") + aN) + u)), if (if ((bR > bX))
325- then (bO > 0)
273+func bu (au,az) = {
274+ let bi = aF(as, aA(au))
275+ let be = ax(au)
276+ let bv = ay(au, az)
277+ let bw = aw(au)
278+ let bx = valueOrElse(getInteger(this, (au + q)), bw)
279+ let by = valueOrElse(getInteger(this, (au + K)), 0)
280+ let bz = aV(au)
281+ let aY = bz._1
282+ let aW = bz._2
283+ let aX = bz._3
284+ let bA = aM(au)
285+ let bf = bA._1
286+ let aQ = bA._2
287+ let bh = bA._3
288+ let aR = bA._4
289+ let bB = valueOrElse(getInteger(this, (((au + "_") + az) + v)), aW)
290+ let bC = valueOrElse(getInteger(this, (((au + "_") + az) + x)), if (if ((by > bB))
291+ then (bv > 0)
326292 else false)
327293 then 0
328- else bp)
329- let bZ = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
330- let ca = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), bZ)
331- if ((bQ == 0))
294+ else aX)
295+ let bD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
296+ let bE = valueOrElse(getInteger(this, (((au + "_") + az) + o)), bD)
297+ if ((bx == 0))
332298 then {
333- let cb = if ((bU > bq))
334- then ((bV * (bU - bq)) + (bx * (height - bU)))
335- else (bx * (height - bq))
336- $Tuple4(bo, bp, 0, cb)
299+ let bF = (bf * (height - aY))
300+ $Tuple4(aW, aX, 0, bF)
337301 }
338302 else {
339- let cc = if ((bU > bq))
340- then {
341- let cd = bv(aI, bq, bg, bh, bo, bp, bw, bV, bQ, bW, bA, bU)
342- let ce = cd._1
343- let cf = cd._2
344- $Tuple3(ce, cf, bU)
345- }
346- else $Tuple3(bo, bp, bq)
347- let cg = cc._1
348- let ch = cc._2
349- let ci = cc._3
350- let cj = bv(aI, ci, bg, bh, cg, ch, bw, bx, bQ, bz, bA, height)
351- let bL = cj._1
352- let bM = cj._2
353- let ck = fraction(ca, (bL - bX), bA)
354- let bt = valueOrElse(getInteger(this, (aI + q)), V)
355- let cl = fraction(fraction(ca, (bL - max([bX, bR])), bA), bt, U)
356- let cm = fraction((bM - bY), bO, T)
357- let cn = min([cl, cm])
358- let cb = (cl - cn)
359- if ((0 > cb))
303+ let bG = bd(au, aY, aQ, aR, aW, aX, be, bf, bx, bh, bi)
304+ let bs = bG._1
305+ let bt = bG._2
306+ let bH = fraction(bE, (bs - bB), bi)
307+ let bb = valueOrElse(getInteger(this, (au + t)), Z)
308+ let bI = fraction(fraction(bE, (bs - max([bB, by])), bi), bb, Y)
309+ let bJ = fraction((bt - bC), bv, X)
310+ let bK = min([bI, bJ])
311+ let bF = (bI - bK)
312+ if ((0 > bF))
360313 then throw("toTreasury < 0")
361- else $Tuple4(bL, bM, (ck + cn), cb)
314+ else $Tuple4(bs, bt, (bH + bK), bF)
362315 }
363316 }
364317
365318
366-func co (cp,aN) = {
367- func cq (au,aI) = {
368- let cr = au
369- let cs = cr._1
370- let ct = cr._2
371- let cu = bN(aI, aN)
372- let cv = cu._1
373- let cw = cu._2
374- let cx = cu._3
375- let cy = cu._4
376- let cz = (aZ(aI, aN) + cx)
377- $Tuple2((cs :+ aI), (ct :+ cz))
319+func bL (bM,az) = {
320+ func bN (bO,au) = {
321+ let bP = bO
322+ let bQ = bP._1
323+ let bR = bP._2
324+ let bS = bu(au, az)
325+ let bT = bS._1
326+ let bU = bS._2
327+ let bV = bS._3
328+ let bW = bS._4
329+ let bX = (aL(au, az) + bV)
330+ $Tuple2((bQ :+ au), (bR :+ bX))
378331 }
379332
380- let aA = cp
381- let aB = size(aA)
382- let aC = $Tuple2(nil, nil)
383- func aD (aE,aF) = if ((aF >= aB))
384- then aE
385- else cq(aE, aA[aF])
333+ let bY = bM
334+ let bZ = size(bY)
335+ let ca = $Tuple2(nil, nil)
336+ func cb (cc,cd) = if ((cd >= bZ))
337+ then cc
338+ else bN(cc, bY[cd])
386339
387- func aG (aE,aF) = if ((aF >= aB))
388- then aE
340+ func ce (cc,cd) = if ((cd >= bZ))
341+ then cc
389342 else throw("List size exceeds 60")
390343
391- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
344+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
392345 }
393346
394347
395-func cA (aI,aN,cB,cC,cD) = if ((aH(aI) > height))
348+func cf (au,az,cg,ch,ci) = if ((at(au) > height))
396349 then {
397- let cE = valueOrElse(getInteger(ai, (aI + y)), 0)
398- let cF = valueOrElse(getInteger(ai, (((aN + "_") + aI) + D)), 0)
399- let cG = aJ(addressFromStringValue(aI))
400- let cH = (fraction(cG, cF, cE) - cB)
401- if ((cD > 0))
350+ let cj = valueOrElse(getInteger(ak, (au + C)), 0)
351+ let ck = valueOrElse(getInteger(ak, (((az + "_") + au) + H)), 0)
352+ let cl = av(addressFromStringValue(au))
353+ let cm = (fraction(cl, ck, cj) - cg)
354+ if ((ci > 0))
402355 then throw("You can't lock shareTokens till first harvest end.")
403- else if ((cF == 0))
356+ else if ((ck == 0))
404357 then 0
405- else if ((cC >= cH))
406- then (cC - cH)
358+ else if ((ch >= cm))
359+ then (ch - cm)
407360 else 0
408361 }
409362 else 0
410363
411364
412-func cI (cJ) = {
413- let cK = split(valueOrErrorMessage(getString(this, (toString(cJ) + o)), ("There are no key for lock type" + toString(cJ))), "_")
414- $Tuple2(parseIntValue(cK[0]), parseIntValue(cK[1]))
365+func cn (co) = {
366+ let cp = split(valueOrErrorMessage(getString(this, (toString(co) + r)), ("There are no key for lock type" + toString(co))), "_")
367+ $Tuple2(parseIntValue(cp[0]), parseIntValue(cp[1]))
415368 }
416369
417370
418-func cL (cM) = [BooleanEntry(a, false), StringEntry(c, cM)]
371+func cq (cr) = [BooleanEntry(a, false), StringEntry(d, cr)]
419372
420373
421-func cN () = if (if (ao)
422- then ap
374+func cs () = if (if (aq)
375+ then ar
423376 else false)
424377 then unit
425378 else throw("DApp is inactive at this moment")
426379
427380
428-func cO (av) = if (containsElement([ae, af, ag], av.callerPublicKey))
381+func ct (cu) = if (containsElement([ag, ah, ai], cu.callerPublicKey))
429382 then unit
430383 else throw("Only admin can call this function")
431384
432385
433-func cP (av,aI) = if (if ((toString(av.caller) == aI))
386+func cv (cu,au) = if (if ((toString(cu.caller) == au))
434387 then true
435- else (av.caller == an))
388+ else (cu.caller == ap))
436389 then unit
437390 else throw("Only pool can call this function")
438391
439392
440-func cQ (av) = if ((av.caller == this))
393+func cw (au) = valueOrElse(getBoolean(V, (c + au)), false)
394+
395+
396+func cx (au) = if (!(cw(au)))
397+ then unit
398+ else throw("Pool is deprecated. Only unlock action allowed.")
399+
400+
401+func cy (cu) = if ((cu.caller == this))
441402 then unit
442403 else throw("Only contract itself can call this function")
443404
444405
445-func cR (av,cS,aI,cD) = {
446- let cT = aO(aI)
447- let aN = toString(cS)
448- let cU = aK(aI)
449- let bQ = valueOrElse(getInteger(this, (aI + n)), cU)
450- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
451- let cW = valueOrElse(getInteger(this, (((aI + "_") + aN) + k)), 0)
452- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
453- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
454- let cZ = ((cV + cX) + av.payments[0].amount)
455- let da = cI(cD)
456- let db = da._1
457- let dc = da._2
458- let dd = getIntegerValue(this, p)
459- if ((av.payments[0].assetId != cT))
406+func cz (cu,cA,au,ci) = {
407+ let cB = aA(au)
408+ let az = toString(cA)
409+ let cC = aw(au)
410+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
411+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
412+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
413+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
414+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
415+ let cH = ((cD + cF) + cu.payments[0].amount)
416+ let cI = cn(ci)
417+ let cJ = cI._1
418+ let cK = cI._2
419+ let cL = getIntegerValue(this, s)
420+ if ((cu.payments[0].assetId != cB))
460421 then throw("Wrong sharetoken in payment")
461- else if ((0 >= av.payments[0].amount))
422+ else if ((0 >= cu.payments[0].amount))
462423 then throw("Payment amount must be greater than 0")
463- else if ((0 > cD))
424+ else if ((0 > ci))
464425 then throw("lockType must be >= 0")
465426 else {
466- let de = cA(aI, aN, cV, av.payments[0].amount, cD)
467- if ((de == de))
427+ let cM = cf(au, az, cD, cu.payments[0].amount, ci)
428+ if ((cM == cM))
468429 then {
469- let df = if ((cD == 0))
430+ let cN = if ((ci == 0))
470431 then {
471- let dg = ((cY + av.payments[0].amount) - de)
472- $Tuple2([IntegerEntry((((aI + "_") + aN) + h), ((cV + av.payments[0].amount) - de)), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + n), ((bQ + av.payments[0].amount) - de)), ScriptTransfer(cS, de, av.payments[0].assetId)], ((cU + av.payments[0].amount) - de))
432+ let cO = ((cG + cu.payments[0].amount) - cM)
433+ $Tuple2([IntegerEntry((((au + "_") + az) + k), ((cD + cu.payments[0].amount) - cM)), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx + cu.payments[0].amount) - cM)), ScriptTransfer(cA, cM, cu.payments[0].assetId)], ((cC + cu.payments[0].amount) - cM))
473434 }
474- else if (if ((cW == 0))
475- then if (if ((2 > size(av.payments)))
435+ else if (if ((cE == 0))
436+ then if (if ((2 > size(cu.payments)))
476437 then true
477- else (av.payments[1].assetId != unit))
438+ else (cu.payments[1].assetId != unit))
478439 then true
479- else (dd > av.payments[1].amount)
440+ else (cL > cu.payments[1].amount)
480441 else false)
481- then throw((("You need to pay additional waves comission " + toString(dd)) + "WAVES"))
482- else if ((cW > (height + db)))
442+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
443+ else if ((cE > (height + cJ)))
483444 then throw("You cannot lock sharetokens for a period less than what you have already locked")
484445 else {
485- let dh = (cX + av.payments[0].amount)
486- let di = (height + db)
487- let dg = (fraction(dh, dc, U) + cV)
488- $Tuple2([IntegerEntry((((aI + "_") + aN) + i), dh), IntegerEntry((((aI + "_") + aN) + k), di), IntegerEntry((((aI + "_") + aN) + j), cD), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + n), ((bQ - cY) + dg))], (cU + av.payments[0].amount))
446+ let cP = (cF + cu.payments[0].amount)
447+ let cQ = (height + cJ)
448+ let cO = (fraction(cP, cK, Y) + cD)
449+ $Tuple2([IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO))], (cC + cu.payments[0].amount))
489450 }
490- let dj = df._1
491- let dk = df._2
492- if ((aP(cT) > dk))
451+ let cR = cN._1
452+ let cS = cN._2
453+ if ((aB(cB) > cS))
493454 then throw("Balance of share-token is lower than totalAmount")
494455 else {
495- let dl = bN(aI, aN)
496- let bo = dl._1
497- let bp = dl._2
498- let cx = dl._3
499- let dm = dl._4
500- let dn = (aZ(aI, aN) + cx)
501- let do = if ((getString(Address(fromBase58String(aI)), "version") == "3.0.0"))
502- then invoke(al, "updateUserInterest", [aN, aI, cZ], nil)
456+ let cT = bu(au, az)
457+ let aW = cT._1
458+ let aX = cT._2
459+ let bV = cT._3
460+ let cU = cT._4
461+ let cV = (aL(au, az) + bV)
462+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
463+ then invoke(an, "updateUserInterest", [az, au, cH], nil)
503464 else 0
504- if ((do == do))
505- then ([IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((aI + m), dk), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq)] ++ dj)
465+ if ((cW == cW))
466+ then ([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((au + p), cS), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)] ++ cR)
506467 else throw("Strict value is not equal to itself.")
507468 }
508469 }
509470 else throw("Strict value is not equal to itself.")
510471 }
511472 }
512473
513474
514-func dp (av,cS,aI,dq) = valueOrElse(cN(), {
515- let dr = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id"))
516- let aN = toString(cS)
517- let ds = bN(aI, aN)
518- let bo = ds._1
519- let bp = ds._2
520- let cx = ds._3
521- let dm = ds._4
522- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
523- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
524- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
525- let dt = (cV - dq)
526- let dn = (aZ(aI, aN) + cx)
527- let du = aK(aI)
528- let bQ = valueOrElse(getInteger(this, (aI + n)), du)
529- let dv = (du - dq)
530- let dw = (bQ - dq)
531- let dg = (cY - dq)
532- if ((dq > cV))
533- then throw("Withdraw amount more then user locked amount")
534- else if ((aP(dr) > du))
535- then throw("Balance of share-token is lower than totalAmount")
536- else {
537- let do = if ((getString(Address(fromBase58String(aI)), "version") == "3.0.0"))
538- then invoke(al, "updateUserInterest", [aN, aI, (cV + cX)], nil)
539- else 0
540- if ((do == do))
541- then [IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + m), dv), IntegerEntry((aI + n), dw), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dq, dr)]
542- else throw("Strict value is not equal to itself.")
543- }
544- })
475+func cX (cu,cA,au,cY) = {
476+ let cZ = if (cw(au))
477+ then invoke(this, "unlockUserLockDeprecated", [au, toString(cA)], nil)
478+ else 0
479+ if ((cZ == cZ))
480+ then {
481+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
482+ let az = toString(cA)
483+ let db = bu(au, az)
484+ let aW = db._1
485+ let aX = db._2
486+ let bV = db._3
487+ let cU = db._4
488+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
489+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
490+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
491+ let dc = (cD - cY)
492+ let cV = (aL(au, az) + bV)
493+ let dd = aw(au)
494+ let bx = valueOrElse(getInteger(this, (au + q)), dd)
495+ let de = (dd - cY)
496+ let df = (bx - cY)
497+ let cO = (cG - cY)
498+ if ((cY > cD))
499+ then throw("Withdraw amount more then user locked amount")
500+ else if ((aB(da) > dd))
501+ then throw("Balance of share-token is lower than totalAmount")
502+ else {
503+ let cW = if ((getString(Address(fromBase58String(au)), "version") == "3.0.0"))
504+ then invoke(an, "updateUserInterest", [az, au, (cD + cF)], nil)
505+ else 0
506+ if ((cW == cW))
507+ then [IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + p), de), IntegerEntry((au + q), df), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as), ScriptTransfer(cu.caller, cY, da)]
508+ else throw("Strict value is not equal to itself.")
509+ }
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
545513
546514
547-func dx (av,aI,cS) = {
548- let dr = fromBase58String(getStringValue(value(addressFromString(aI)), "share_asset_id"))
549- let aN = toString(cS)
550- let by = aK(aI)
551- let dy = bN(aI, aN)
552- let bo = dy._1
553- let bp = dy._2
554- let cx = dy._3
555- let dm = dy._4
556- let cz = (aZ(aI, aN) + cx)
557- if ((aP(dr) > by))
515+func dg (cu,au,cA) = {
516+ let da = fromBase58String(getStringValue(value(addressFromString(au)), "share_asset_id"))
517+ let az = toString(cA)
518+ let bg = aw(au)
519+ let dh = bu(au, az)
520+ let aW = dh._1
521+ let aX = dh._2
522+ let bV = dh._3
523+ let cU = dh._4
524+ let bX = (aL(au, az) + bV)
525+ if ((aB(da) > bg))
558526 then throw("Balance of share-token is lower than totalAmount")
559527 else {
560- let dz = if ((av.caller != this))
561- then [ScriptTransfer(av.caller, cz, aq)]
528+ let di = if ((cu.caller != this))
529+ then [ScriptTransfer(cu.caller, bX, as)]
562530 else nil
563- $Tuple2(([IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + x), 0), Reissue(aq, (dm + cz), true), ScriptTransfer(am, dm, aq)] ++ dz), cz)
531+ $Tuple2(([IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), 0), Reissue(as, (cU + bX), true), ScriptTransfer(ao, cU, as)] ++ di), bX)
564532 }
565533 }
566534
567535
568-@Callable(av)
569-func init (dA) = if (isDefined(getString(this, w)))
536+func dj (cu,au,az) = {
537+ let bx = getIntegerValue(this, (au + q))
538+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
539+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
540+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
541+ let dc = (cD + cF)
542+ let dk = bu(au, az)
543+ let aW = dk._1
544+ let aX = dk._2
545+ let bV = dk._3
546+ let cU = dk._4
547+ let cV = (aL(au, az) + bV)
548+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + o), dc), IntegerEntry((au + q), ((bx - cG) + dc)), IntegerEntry((((au + "_") + az) + A), cV), DeleteEntry((((au + "_") + az) + l)), DeleteEntry((((au + "_") + az) + n)), DeleteEntry((((au + "_") + az) + m)), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
549+ }
550+
551+
552+@Callable(cu)
553+func init (dl) = if (isDefined(getString(this, z)))
570554 then throw("SWOP already initialized")
571555 else {
572- let dB = 100000000000000
573- let dC = Issue("SWOP", "SWOP protocol token", dB, 8, true)
574- let dD = calculateAssetId(dC)
575-[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dB, 8, true), StringEntry(w, toBase58String(dD))]
556+ let dm = 100000000000000
557+ let dn = Issue("SWOP", "SWOP protocol token", dm, 8, true)
558+ let do = calculateAssetId(dn)
559+[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dm, 8, true), StringEntry(z, toBase58String(do))]
576560 }
577561
578562
579563
580-@Callable(av)
581-func initPoolShareFarming (aI) = valueOrElse(cO(av), [IntegerEntry((aI + m), 0), IntegerEntry((aI + r), 0), IntegerEntry((aI + t), 0), IntegerEntry((aI + v), height)])
564+@Callable(cu)
565+func initPoolShareFarming (au) = valueOrElse(ct(cu), [IntegerEntry((au + p), 0), IntegerEntry((au + u), 0), IntegerEntry((au + w), 0), IntegerEntry((au + y), height)])
582566
583567
584568
585-@Callable(av)
586-func updatePoolInterest (aI) = valueOrElse(cN(), if ((av.caller != aj))
569+@Callable(cu)
570+func updatePoolInterest (au) = valueOrElse(cs(), if ((cu.caller != al))
587571 then throw("Only Governance can call this function")
588572 else {
589- let aN = toString(addressFromPublicKey(ak))
590- let dE = bN(aI, aN)
591- let bo = dE._1
592- let bp = dE._2
593- let dF = dE._3
594-[IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height)]
573+ let az = toString(addressFromPublicKey(am))
574+ let dp = bu(au, az)
575+ let aW = dp._1
576+ let aX = dp._2
577+ let dq = dp._3
578+[IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height)]
595579 })
596580
597581
598582
599-@Callable(av)
600-func lockShareTokens (aI,cD) = valueOrElse(cN(), cR(av, av.caller, aI, cD))
583+@Callable(cu)
584+func lockShareTokens (au,ci) = valueOrElse(cx(au), valueOrElse(cs(), cz(cu, cu.caller, au, ci)))
601585
602586
603587
604-@Callable(av)
605-func lockShareTokensFromPool (dG,aI,cD) = valueOrElse(cN(), valueOrElse(cP(av, aI), cR(av, Address(dG), aI, cD)))
588+@Callable(cu)
589+func lockShareTokensFromPool (dr,au,ci) = valueOrElse(cx(au), valueOrElse(cs(), valueOrElse(cv(cu, au), cz(cu, Address(dr), au, ci))))
606590
607591
608592
609-@Callable(av)
610-func lockStakedShareTokens (aI,cD,dH) = valueOrElse(cN(), {
611- let cT = aO(aI)
612- let aN = toString(av.caller)
613- let cU = aK(aI)
614- let bQ = valueOrElse(getInteger(this, (aI + n)), cU)
615- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
616- let cW = valueOrElse(getInteger(this, (((aI + "_") + aN) + k)), 0)
617- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
618- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
619- let cZ = (cV + cX)
620- let dI = cI(cD)
621- let db = dI._1
622- let dc = dI._2
623- let dd = getIntegerValue(this, p)
624- if ((aH(aI) > height))
593+@Callable(cu)
594+func lockStakedShareTokens (au,ci,ds) = valueOrElse(cx(au), valueOrElse(cs(), {
595+ let cB = aA(au)
596+ let az = toString(cu.caller)
597+ let cC = aw(au)
598+ let bx = valueOrElse(getInteger(this, (au + q)), cC)
599+ let cD = valueOrElse(getInteger(this, (((au + "_") + az) + k)), 0)
600+ let cE = valueOrElse(getInteger(this, (((au + "_") + az) + n)), 0)
601+ let cF = valueOrElse(getInteger(this, (((au + "_") + az) + l)), 0)
602+ let cG = valueOrElse(getInteger(this, (((au + "_") + az) + o)), cD)
603+ let cH = (cD + cF)
604+ let dt = cn(ci)
605+ let cJ = dt._1
606+ let cK = dt._2
607+ let cL = getIntegerValue(this, s)
608+ if ((at(au) > height))
625609 then throw("You can't lock shareTokens till first harvest end.")
626- else if ((0 >= cD))
610+ else if ((0 >= ci))
627611 then throw("lockType must be > 0")
628- else if ((dH > cV))
629- then throw(("You can't lock more than " + toString(cV)))
630- else if ((aP(cT) > cU))
612+ else if ((ds > cD))
613+ then throw(("You can't lock more than " + toString(cD)))
614+ else if ((aB(cB) > cC))
631615 then throw("Balance of share-token is lower than totalAmount")
632- else if (if ((cW == 0))
633- then if (if ((1 > size(av.payments)))
616+ else if (if ((cE == 0))
617+ then if (if ((1 > size(cu.payments)))
634618 then true
635- else (av.payments[0].assetId != unit))
619+ else (cu.payments[0].assetId != unit))
636620 then true
637- else (dd > av.payments[0].amount)
621+ else (cL > cu.payments[0].amount)
638622 else false)
639- then throw((("You need to pay additional waves comission " + toString(dd)) + "WAVES"))
640- else if (if ((cW == 0))
641- then (0 >= dH)
623+ then throw((("You need to pay additional waves comission " + toString(cL)) + "WAVES"))
624+ else if (if ((cE == 0))
625+ then (0 >= ds)
642626 else false)
643627 then throw("lockAmount must be greater than 0")
644- else if ((0 > dH))
628+ else if ((0 > ds))
645629 then throw("lockAmount must be positive")
646- else if ((cW > (height + db)))
630+ else if ((cE > (height + cJ)))
647631 then throw("You cannot lock sharetokens for a period less than what you have already locked")
648632 else {
649- let dh = (cX + dH)
650- let dt = (cV - dH)
651- let di = (height + db)
652- let dg = (fraction(dh, dc, U) + dt)
653- let dJ = bN(aI, aN)
654- let bo = dJ._1
655- let bp = dJ._2
656- let cx = dJ._3
657- let dm = dJ._4
658- let dn = (aZ(aI, aN) + cx)
659-[IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + i), dh), IntegerEntry((((aI + "_") + aN) + k), di), IntegerEntry((((aI + "_") + aN) + j), cD), IntegerEntry((((aI + "_") + aN) + l), dg), IntegerEntry((aI + n), ((bQ - cY) + dg)), IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq)]
633+ let cP = (cF + ds)
634+ let dc = (cD - ds)
635+ let cQ = (height + cJ)
636+ let cO = (fraction(cP, cK, Y) + dc)
637+ let du = bu(au, az)
638+ let aW = du._1
639+ let aX = du._2
640+ let bV = du._3
641+ let cU = du._4
642+ let cV = (aL(au, az) + bV)
643+[IntegerEntry((((au + "_") + az) + k), dc), IntegerEntry((((au + "_") + az) + l), cP), IntegerEntry((((au + "_") + az) + n), cQ), IntegerEntry((((au + "_") + az) + m), ci), IntegerEntry((((au + "_") + az) + o), cO), IntegerEntry((au + q), ((bx - cG) + cO)), IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
660644 }
645+ }))
646+
647+
648+
649+@Callable(cu)
650+func unlockUserLock (au,az) = valueOrElse(cs(), {
651+ let cE = valueOrErrorMessage(getInteger(this, (((au + "_") + az) + n)), (((("There is no pool " + au) + " or user ") + az) + "with lock"))
652+ if ((cE > height))
653+ then throw(("You can't unlock sharetokens till " + toString(cE)))
654+ else (dj(cu, au, az) ++ [ScriptTransfer(cu.caller, getIntegerValue(this, s), unit)])
661655 })
662656
663657
664658
665-@Callable(av)
666-func unlockUserLock (aI,aN) = valueOrElse(cN(), {
667- let dd = getIntegerValue(this, p)
668- let cW = valueOrErrorMessage(getInteger(this, (((aI + "_") + aN) + k)), (((("There is no pool " + aI) + " or user ") + aN) + "with lock"))
669- let bQ = getIntegerValue(this, (aI + n))
670- let cV = valueOrElse(getInteger(this, (((aI + "_") + aN) + h)), 0)
671- let cX = valueOrElse(getInteger(this, (((aI + "_") + aN) + i)), 0)
672- let cY = valueOrElse(getInteger(this, (((aI + "_") + aN) + l)), cV)
673- if ((cW > height))
674- then throw(("You can't unlock sharetokens till " + toString(cW)))
675- else {
676- let dt = (cV + cX)
677- let dK = bN(aI, aN)
678- let bo = dK._1
679- let bp = dK._2
680- let cx = dK._3
681- let dm = dK._4
682- let dn = (aZ(aI, aN) + cx)
683-[IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + h), dt), IntegerEntry((((aI + "_") + aN) + l), dt), IntegerEntry((aI + n), ((bQ - cY) + dt)), IntegerEntry((((aI + "_") + aN) + x), dn), DeleteEntry((((aI + "_") + aN) + i)), DeleteEntry((((aI + "_") + aN) + k)), DeleteEntry((((aI + "_") + aN) + j)), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq), ScriptTransfer(av.caller, dd, unit)]
684- }
659+@Callable(cu)
660+func unlockUserLockDeprecated (au,az) = valueOrElse(cs(), valueOrElse(cy(cu), if (!(cw(au)))
661+ then throw("Pool must be deprecated")
662+ else if (isDefined(getInteger(this, (((au + "_") + az) + n))))
663+ then (dj(cu, au, az) ++ [ScriptTransfer(aj, getIntegerValue(this, s), unit)])
664+ else nil))
665+
666+
667+
668+@Callable(cu)
669+func withdrawShareTokens (au,cY) = valueOrElse(cs(), cX(cu, cu.caller, au, cY))
670+
671+
672+
673+@Callable(cu)
674+func withdrawShareTokensFromPool (dr,au,cY) = valueOrElse(cs(), valueOrElse(cv(cu, au), cX(cu, Address(dr), au, cY)))
675+
676+
677+
678+@Callable(cu)
679+func claim (au) = valueOrElse(cs(), {
680+ let bk = dg(cu, au, cu.caller)
681+ if ((bk._2 == 0))
682+ then throw("You have 0 available SWOP")
683+ else bk
685684 })
686685
687686
688687
689-@Callable(av)
690-func withdrawShareTokens (aI,dq) = valueOrElse(cN(), dp(av, av.caller, aI, dq))
688+@Callable(cu)
689+func claimInternal (au,cA) = valueOrElse(cs(), valueOrElse(cy(cu), dg(cu, au, Address(cA))))
691690
692691
693692
694-@Callable(av)
695-func withdrawShareTokensFromPool (dG,aI,dq) = valueOrElse(cN(), valueOrElse(cP(av, aI), dp(av, Address(dG), aI, dq)))
696-
697-
698-
699-@Callable(av)
700-func claim (aI) = valueOrElse(cN(), {
701- let bD = dx(av, aI, av.caller)
702- if ((bD._2 == 0))
703- then throw("You have 0 available SWOP")
704- else bD
705- })
706-
707-
708-
709-@Callable(av)
710-func claimInternal (aI,cS) = valueOrElse(cN(), valueOrElse(cQ(av), dx(av, aI, Address(cS))))
711-
712-
713-
714-@Callable(av)
715-func claimAndStake (aI) = valueOrElse(cN(), {
716- let cx = {
717- let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil)
718- if ($isInstanceOf(dL, "Int"))
719- then dL
720- else throw(($getType(dL) + " couldn't be cast to Int"))
693+@Callable(cu)
694+func claimAndStake (au) = valueOrElse(cs(), {
695+ let bV = {
696+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
697+ if ($isInstanceOf(dv, "Int"))
698+ then dv
699+ else throw(($getType(dv) + " couldn't be cast to Int"))
721700 }
722- if ((cx == cx))
723- then if ((cx == 0))
701+ if ((bV == bV))
702+ then if ((bV == 0))
724703 then throw("You have 0 available SWOP")
725704 else {
726- let dM = invoke(aj, "lockSWOPFromFarming", nil, [AttachedPayment(aq, cx)])
727- if ((dM == dM))
705+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, bV)])
706+ if ((dw == dw))
728707 then nil
729708 else throw("Strict value is not equal to itself.")
730709 }
731710 else throw("Strict value is not equal to itself.")
732711 })
733712
734713
735714
736-@Callable(av)
737-func claimAll (cp) = valueOrElse(cN(), {
738- func dN (dO,aI) = {
739- let cx = {
740- let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil)
741- if ($isInstanceOf(dL, "Int"))
742- then dL
743- else throw(($getType(dL) + " couldn't be cast to Int"))
715+@Callable(cu)
716+func claimAll (bM) = valueOrElse(cs(), {
717+ func dx (dy,au) = {
718+ let bV = {
719+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
720+ if ($isInstanceOf(dv, "Int"))
721+ then dv
722+ else throw(($getType(dv) + " couldn't be cast to Int"))
744723 }
745- if ((cx == cx))
746- then (dO + cx)
724+ if ((bV == bV))
725+ then (dy + bV)
747726 else throw("Strict value is not equal to itself.")
748727 }
749728
750- let dO = {
751- let aA = cp
752- let aB = size(aA)
753- let aC = 0
754- func aD (aE,aF) = if ((aF >= aB))
755- then aE
756- else dN(aE, aA[aF])
729+ let dy = {
730+ let bY = bM
731+ let bZ = size(bY)
732+ let ca = 0
733+ func cb (cc,cd) = if ((cd >= bZ))
734+ then cc
735+ else dx(cc, bY[cd])
757736
758- func aG (aE,aF) = if ((aF >= aB))
759- then aE
737+ func ce (cc,cd) = if ((cd >= bZ))
738+ then cc
760739 else throw("List size exceeds 60")
761740
762- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
741+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
763742 }
764- if ((dO == 0))
743+ if ((dy == 0))
765744 then throw("You have 0 available SWOP")
766- else [ScriptTransfer(av.caller, dO, aq)]
745+ else [ScriptTransfer(cu.caller, dy, as)]
767746 })
768747
769748
770749
771-@Callable(av)
772-func claimAllAndStake (cp) = valueOrElse(cN(), {
773- func dN (dO,aI) = {
774- let cx = {
775- let dL = invoke(this, "claimInternal", [aI, av.caller.bytes], nil)
776- if ($isInstanceOf(dL, "Int"))
777- then dL
778- else throw(($getType(dL) + " couldn't be cast to Int"))
750+@Callable(cu)
751+func claimAllAndStake (bM) = valueOrElse(cs(), {
752+ func dx (dy,au) = {
753+ let bV = {
754+ let dv = invoke(this, "claimInternal", [au, cu.caller.bytes], nil)
755+ if ($isInstanceOf(dv, "Int"))
756+ then dv
757+ else throw(($getType(dv) + " couldn't be cast to Int"))
779758 }
780- if ((cx == cx))
781- then (dO + cx)
759+ if ((bV == bV))
760+ then (dy + bV)
782761 else throw("Strict value is not equal to itself.")
783762 }
784763
785- let dO = {
786- let aA = cp
787- let aB = size(aA)
788- let aC = 0
789- func aD (aE,aF) = if ((aF >= aB))
790- then aE
791- else dN(aE, aA[aF])
764+ let dy = {
765+ let bY = bM
766+ let bZ = size(bY)
767+ let ca = 0
768+ func cb (cc,cd) = if ((cd >= bZ))
769+ then cc
770+ else dx(cc, bY[cd])
792771
793- func aG (aE,aF) = if ((aF >= aB))
794- then aE
772+ func ce (cc,cd) = if ((cd >= bZ))
773+ then cc
795774 else throw("List size exceeds 60")
796775
797- aG(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aD(aC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
776+ ce(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(ca, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
798777 }
799- if ((dO == 0))
778+ if ((dy == 0))
800779 then throw("You have 0 available SWOP")
801780 else {
802- let dM = invoke(aj, "lockSWOPFromFarming", nil, [AttachedPayment(aq, dO)])
803- if ((dM == dM))
781+ let dw = invoke(al, "lockSWOPFromFarming", nil, [AttachedPayment(as, dy)])
782+ if ((dw == dw))
804783 then nil
805784 else throw("Strict value is not equal to itself.")
806785 }
807786 })
808787
809788
810789
811-@Callable(av)
812-func updateUserBoostInterest (aI,aN) = valueOrElse(cN(), if ((av.caller != ai))
790+@Callable(cu)
791+func updateUserBoostInterest (au,az) = valueOrElse(cs(), if ((cu.caller != ak))
813792 then throw("Only voiting can call this function")
814793 else {
815- let dP = bN(aI, aN)
816- let bo = dP._1
817- let bp = dP._2
818- let cx = dP._3
819- let dm = dP._4
820- let dn = (aZ(aI, aN) + cx)
821-[IntegerEntry((((aI + "_") + aN) + s), bo), IntegerEntry((((aI + "_") + aN) + u), bp), IntegerEntry((aI + r), bo), IntegerEntry((aI + t), bp), IntegerEntry((aI + v), height), IntegerEntry((((aI + "_") + aN) + x), dn), Reissue(aq, dm, true), ScriptTransfer(am, dm, aq)]
794+ let dz = bu(au, az)
795+ let aW = dz._1
796+ let aX = dz._2
797+ let bV = dz._3
798+ let cU = dz._4
799+ let cV = (aL(au, az) + bV)
800+[IntegerEntry((((au + "_") + az) + v), aW), IntegerEntry((((au + "_") + az) + x), aX), IntegerEntry((au + u), aW), IntegerEntry((au + w), aX), IntegerEntry((au + y), height), IntegerEntry((((au + "_") + az) + A), cV), Reissue(as, cU, true), ScriptTransfer(ao, cU, as)]
822801 })
823802
824803
825804
826-@Callable(av)
827-func shutdown () = valueOrElse(cO(av), if (!(ao))
828- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
829- else cL("Paused by admin"))
805+@Callable(cu)
806+func shutdown () = valueOrElse(ct(cu), if (!(aq))
807+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, d), "the cause wasn't specified")))
808+ else cq("Paused by admin"))
830809
831810
832811
833-@Callable(av)
834-func activate () = valueOrElse(cO(av), if (ao)
812+@Callable(cu)
813+func activate () = valueOrElse(ct(cu), if (aq)
835814 then throw("DApp is already active")
836- else [BooleanEntry(a, true), DeleteEntry(c)])
815+ else [BooleanEntry(a, true), DeleteEntry(d)])
837816
838817
839-@Verifier(dQ)
840-func dR () = {
841- let ab = dQ
842- let dS = if (sigVerify(dQ.bodyBytes, dQ.proofs[0], ae))
818+@Verifier(dA)
819+func dB () = {
820+ let ad = dA
821+ let dC = if (sigVerify(dA.bodyBytes, dA.proofs[0], ag))
843822 then 1
844823 else 0
845- let dT = if (sigVerify(dQ.bodyBytes, dQ.proofs[1], af))
824+ let dD = if (sigVerify(dA.bodyBytes, dA.proofs[1], ah))
846825 then 1
847826 else 0
848- let dU = if (sigVerify(dQ.bodyBytes, dQ.proofs[2], ag))
827+ let dE = if (sigVerify(dA.bodyBytes, dA.proofs[2], ai))
849828 then 1
850829 else 0
851- (((dS + dT) + dU) >= 2)
830+ (((dC + dD) + dE) >= 2)
852831 }
853832

github/deemru/w8io/169f3d6 
380.36 ms