tx · Hr2KEJ7XcawRiWrsfsnDxKjocAURw7wixBjzGyXyfAsH

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.01800000 Waves

2024.11.23 13:16 [3383979] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "Hr2KEJ7XcawRiWrsfsnDxKjocAURw7wixBjzGyXyfAsH", "fee": 1800000, "feeAssetId": null, "timestamp": 1732357031390, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "4r43tUZEaEucGjk38pxe1qti7LcjxacnmxwcuMxtff7nLt85YNvwaPiKPP6P49JkcBrZe8B6VK9MLfxa9F9suyVG" ], "script": "base64:BgI9CAISABIECgIICBIDCgEEEgMKAQESABIAEgMKAQESABIECgIIARIAEgMKAQgSAwoBCBIECgIIARIECgIIAUIAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAKREFZX01JTExJUwCAuJkpABVVU0RUMkFDUkVTX01VTFRJUExJRVIACgATT05FX1BFUkNFTlRfRElWSVNPUgBkAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BGd1l0YThiaUV6MzF6cGVGZTVESks4d0U1dHJTcFFWRjgDCQAAAgEBVAUHJG1hdGNoMAIjM043VXVZYXI2MjY0UDU4RkJoVldLUFFBaDRZdWEyaGduZ3YJAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AFW9sZFN0YWtpbmdDb250cmFjdFN0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BMbmNYdFMxVTgzRDZjUWJGRDNIOHJCSFBMZ3p4U0ZLWjEDCQAAAgEBVAUHJG1hdGNoMAIjM05EQ3lCRzVxODVKdWFSaWlnVWVFdGFpbnlqQ1FUM1hwWm0JAAIBAg1Vbmtub3duIGNoYWluAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAAQSWR4Q2ZnQWNyZXMyRGFwcAABAA1JZHhDZmdXbGdEYXBwAAIAFElkeENmZ0ludmVzdEZ1bmREYXBwAAUBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEPa2V5UmVzdDJBZGRyZXNzAAINJXNfX3Jlc3QyQWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCHJlc3QyQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUIcmVzdDJDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA1yZXN0MkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlSZXN0MkFkZHJlc3MABRZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyAAhyZXN0MkNmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUNcmVzdDJDb250cmFjdAAOYWNyZXMyQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUQSWR4Q2ZnQWNyZXMyRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUNSWR4Q2ZnV2xnRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFFElkeENmZ0ludmVzdEZ1bmREYXBwABNvbGRBY3Jlc0NvbnRyYWN0S2V5AhBvbGRBY3Jlc0NvbnRyYWN0AQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQRhZGRyCQCsAgICE2xhc3RXZWVrVHhJZEJ5VXNlcl8FBGFkZHIBFGtleUN1cldlZWtUeElkQnlVc2VyAQRhZGRyCQCsAgICEmN1cldlZWtUeElkQnlVc2VyXwUEYWRkcgAUYWNyZXNJc3N1ZWRBbW91bnRLZXkCEWFjcmVzSXNzdWVkQW1vdW50AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUOYWNyZXMyQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEEYWRkcgkArAICAhZhY3Jlc1N0YWtlZFRpbWVCeVVzZXJfBQRhZGRyARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEMYXNUdXBsZTVJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAhkoSW50LCBJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIrZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQsIEludCwgSW50KQEMYXNUdXBsZTRJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAhQoSW50LCBJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECJmZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50LCBJbnQpAQxhc1R1cGxlM0ludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACDyhJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECIWZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50KQEMYXNUdXBsZTJJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgooSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIcZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50KQEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQAA004XwCAwtcvAAtXRUVLX0JMT0NLUwDgTgAPd2xnSXNzdWVkQW10S2V5AhB3bGdfaXNzdWVkQW1vdW50AA56Yklzc3VlZEFtdEtleQISemJpbGxfaXNzdWVkQW1vdW50ARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEEYWRkcgkArAICAhNmYXJtaW5nUG93ZXJCeVVzZXJfBQRhZGRyABJhY3Jlc1N0YWtkVG90YWxLZXkCFmFjcmVzU3Rha2VkQW1vdW50VG90YWwAFHRvdGFsRmFybWluZ1Bvd2VyS2V5AhF0b3RhbEZhcm1pbmdQb3dlcgAVSWR4RHR4M1BlcmNDb252ZXJzaW9uAAAACmxldmVsQWNyZXMJAMwIAgAACQDMCAIACgkAzAgCABQJAMwIAgAoCQDMCAIAUAkAzAgCAJYBCQDMCAIA+gEJAMwIAgCQAwkAzAgCALwFCQDMCAIA6AcFA25pbAEPZ2V0TGV2ZWxCeUFjcmVzAQVhY3JlcwQDYWNyCQBpAgkAZAIFBWFjcmVzAP/B1y8FA004XwoBB2NoZWNrZXICA2FjYwRpdGVtAwkAZwIFBGl0ZW0FA2FjcgUDYWNjCQBkAgUDYWNjAAEKAAIkbAUKbGV2ZWxBY3JlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFYWNyZXMJAGgCCQBoAgUFYWNyZXMAFAkAZAIJAQ9nZXRMZXZlbEJ5QWNyZXMBBQVhY3JlcwAEABFrZXlOZnRUb3RhbElzc3VlZAIObmZ0VG90YWxJc3N1ZWQBFWtleU5mdE51bWJlckJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAhNuZnROdW1iZXJCeUFzc2V0SWRfBQdhc3NldElkARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIAFGtleUxhc3RBY3Jlc1NlbGxUaW1lAhFsYXN0QWNyZXNTZWxsVGltZQAQa2V5TGFzdExpbWl0TGVmdAINbGFzdExpbWl0TGVmdAAPbmZ0RGVzY3JpcHRpb25zCQDMCAICd3sibmFtZSI6ICJHb2xkIHNob3ZlbCIsICJkZXNjcmlwdGlvbiI6ICJSZXdhcmQgZm9yIGVhcmx5IGJpcmRzIiwgInJhcmUiOiAiUHJvbW8iLCAiYm9udXMiOiAzLCAiYm9udXNUeXBlIjogIkZhcm1Qb3dlciJ9CQDMCAICcXsibmFtZSI6ICJQaWNrYXhlIiwgImRlc2NyaXB0aW9uIjogIkluY3JlYXNlcyBGYXJtUG93ZXIiLCAicmFyZSI6ICJDb21tb24iLCAiYm9udXMiOiAxLCAiYm9udXNUeXBlIjogIkZhcm1Qb3dlciJ9BQNuaWwACG5mdE5hbWVzCQDMCAICCVNIT1ZFTC1QMwkAzAgCAgpQSUNLQVhFLUMxBQNuaWwAC2NvbnRlbnRLZXlzCQDMCAICD2NvbnRlbnRTaG92ZWxQMwkAzAgCAhBjb250ZW50UGlja2F4ZUMxBQNuaWwBBnByb2xvZwEBaQMDCQECIT0CCAUBaQxvcmlnaW5DYWxsZXIFDXJlc3QyQ29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQEd2VlawkAaQIFBmhlaWdodAULV0VFS19CTE9DS1MEEmxhc3RXZWVrVHhJZEJ5VXNlcgkAoggBCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAN3dHgJAKwCAgkArAICCQCkAwEFBHdlZWsCAV8FBHR4SWQDCQEJaXNEZWZpbmVkAQUSbGFzdFdlZWtUeElkQnlVc2VyBApsYXN0V2Vla1R4CQC1CQIJAQV2YWx1ZQEFEmxhc3RXZWVrVHhJZEJ5VXNlcgIBXwMJAAACCQCRAwIFCmxhc3RXZWVrVHgAAAkApAMBBQR3ZWVrCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUN1cldlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4BQNuaWwDCQAAAgkAkQMCBQpsYXN0V2Vla1R4AAAJAKQDAQkAZQIFBHdlZWsAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgFA25pbAQRY3VyV2Vla1R4SWRCeVVzZXIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQRhZGRyBAljdXJXZWVrVHgJALUJAgURY3VyV2Vla1R4SWRCeVVzZXICAV8DCQAAAgkAkQMCBQljdXJXZWVrVHgAAAkApAMBBQR3ZWVrCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEFBGFkZHIFA3d0eAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQRhZGRyBRFjdXJXZWVrVHhJZEJ5VXNlcgkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4CQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEFBGFkZHIFA3d0eAUDbmlsARBpc3N1ZU5GVGludGVybmFsAghuZnRJbmRleARhZGRyAwkAZwIFCG5mdEluZGV4CQCQAwEFC2NvbnRlbnRLZXlzCQACAQIWbmZ0SW5kZXggb3V0IG9mIGJvdW5kcwQJbmZ0U2VyaWFsCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRFrZXlOZnRUb3RhbElzc3VlZAD///////////8BAAEEBWlzc3VlCQDCCAUJAJEDAgUIbmZ0TmFtZXMFCG5mdEluZGV4CQC6CQIJAMwIAgkAkQMCBQtjb250ZW50S2V5cwUIbmZ0SW5kZXgJAMwIAgkApAMBBQluZnRTZXJpYWwJAMwIAgkAkQMCBQ9uZnREZXNjcmlwdGlvbnMFCG5mdEluZGV4BQNuaWwFA1NFUAABAAAHBApuZnRBc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAMwIAgUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtleU5mdFRvdGFsSXNzdWVkBQluZnRTZXJpYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlOZnROdW1iZXJCeUFzc2V0SWQBCQDYBAEFCm5mdEFzc2V0SWQFCW5mdFNlcmlhbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQRhZGRyAAEFCm5mdEFzc2V0SWQFA25pbAUKbmZ0QXNzZXRJZAEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAIDYW10B2FkZHJlc3MECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAwkAAAIFCXdsZ1Jlc3VsdAUJd2xnUmVzdWx0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAd0aW1lS2V5CQEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQUHYWRkcmVzcwQJYW1vdW50S2V5CQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzBA5vbGRBY3Jlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAMDCQBmAgAABQNhbXQJAGYCAAAJAGQCBQ5vbGRBY3Jlc0Ftb3VudAUDYW10BwkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQEKZml4ZWRQb2ludAIFDm9sZEFjcmVzQW1vdW50AAgCICBBQ1JFUyBzdGFrZWQsIHRyaWVkIHRvIHVuc3Rha2UgCQEKZml4ZWRQb2ludAIJAQEtAQUDYW10AAgEDm5ld0FjcmVzQW1vdW50CQBkAgUOb2xkQWNyZXNBbW91bnQFA2FtdAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSYWNyZXNTdGFrZFRvdGFsS2V5AAAECXVzZXJGcEtleQkBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEFB2FkZHJlc3MEBW9sZEZwCQELdmFsdWVPckVsc2UCCQCfCAEFCXVzZXJGcEtleQAABAVuZXdGcAkBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBQ5uZXdBY3Jlc0Ftb3VudAQKb2xkVG90YWxGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRR0b3RhbEZhcm1pbmdQb3dlcktleQAACQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhbW91bnRLZXkFDm5ld0FjcmVzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJhY3Jlc1N0YWtkVG90YWxLZXkJAGQCBQhvbGRUb3RhbAUDYW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQl1c2VyRnBLZXkFBW5ld0ZwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRR0b3RhbEZhcm1pbmdQb3dlcktleQkAZAIJAGUCBQpvbGRUb3RhbEZwBQVvbGRGcAUFbmV3RnAFA25pbAUJd2xnUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtnZXRXbGdQcmljZQEVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAxpc3N1ZWRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQt3bGdDb250cmFjdAUPd2xnSXNzdWVkQW10S2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQEBndsZ1VzZAkA8AcCBQt3bGdDb250cmFjdAULdXNkdEFzc2V0SWQECWFjcmVzMlVzZAkAZQIJAPAHAgUOYWNyZXMyQ29udHJhY3QFC3VzZHRBc3NldElkBRV1c2R0QmFsYW5jZUNvcnJlY3Rpb24ED2ludmVzdEZ1bmRUb3RhbAkAZAIJAPAHAgUSaW52ZXN0RnVuZENvbnRyYWN0BQt1c2R0QXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJpbnZlc3RGdW5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDXRvdGFsRnVuZHNVc2QJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAkAawMFDXRvdGFsRnVuZHNVc2QFBU1VTFQ4BQxpc3N1ZWRBbW91bnQBEWdldFN3YXBMaW1pdEFjcmVzAAQGd2xnVXNkCQDwBwIFC3dsZ0NvbnRyYWN0BQt1c2R0QXNzZXRJZAQJYWNyZXMyVXNkCQDwBwIFBHRoaXMFC3VzZHRBc3NldElkBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEmludmVzdEZ1bmRDb250cmFjdAULdXNkdEFzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQ56Yklzc3VlZEFtdEtleQAABAxkZWZhdWx0TGltaXQJAGkCCQBkAgkAZAIFCWFjcmVzMlVzZAUGd2xnVXNkBQ9pbnZlc3RGdW5kVG90YWwFE09ORV9QRVJDRU5UX0RJVklTT1IEDWxhc3RMaW1pdExlZnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUQa2V5TGFzdExpbWl0TGVmdAUMZGVmYXVsdExpbWl0BAhsYXN0VGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRrZXlMYXN0QWNyZXNTZWxsVGltZQAABANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAxjdXJyZW50TGltaXQJAGQCBQ1sYXN0TGltaXRMZWZ0CQBrAwUMZGVmYXVsdExpbWl0CQBlAgUDbm93BQhsYXN0VGltZQUKREFZX01JTExJUwQNbGltaXRMZWZ0VXNkdAkAlwMBCQDMCAIFDGN1cnJlbnRMaW1pdAkAzAgCBQxkZWZhdWx0TGltaXQFA25pbAkAlAoCCQEMSW50ZWdlckVudHJ5AgUUa2V5TGFzdEFjcmVzU2VsbFRpbWUFA25vdwUNbGltaXRMZWZ0VXNkdA4BaQEKc2F2ZUxhc3RUeAADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkBBnByb2xvZwEFAWkAKgFpAQ1jb25zdHJ1Y3RvclYxAglyZXN0MkFkZHIOb2xkQWNyQ29udHJhY3QDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQOb2xkQWNyQ29udEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDm9sZEFjckNvbnRyYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRhY3Jlc0lzc3VlZEFtb3VudEtleQkBEUBleHRyTmF0aXZlKDEwNTApAgUOb2xkQWNyQ29udEFkZHIFFGFjcmVzSXNzdWVkQW1vdW50S2V5CQDMCAIJAQtCaW5hcnlFbnRyeQIFD2FjcmVzQXNzZXRJZEtleQkBEUBleHRyTmF0aXZlKDEwNTIpAgUOb2xkQWNyQ29udEFkZHIFD2FjcmVzQXNzZXRJZEtleQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UmVzdDJBZGRyZXNzAAUJcmVzdDJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFE29sZEFjcmVzQ29udHJhY3RLZXkFDm9sZEFjckNvbnRyYWN0BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEMdW5zdGFrZUFjcmVzAQZhbW91bnQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkAZwIAAAUGYW1vdW50CQACAQIZQW1vdW50IHNob3VsZCBiZSBwb3NpdGl2ZQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEZa2V5TGFzdFdsZ1RyYWRlVGltZUJ5VXNlcgEFB2FkZHJlc3MAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQACAQkArAICAi1Zb3UgdHJhZGVkIHNvbWUgV0xHT0xELCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOYXJiUmVsZWFzZVRpbWUECyR0MDczNTE3NDI4CQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAIJAQEtAQUGYW1vdW50BQdhZGRyZXNzBAdhY3Rpb25zCAULJHQwNzM1MTc0MjgCXzEEEHdsZ0NsYWltZWRBbW91bnQIBQskdDA3MzUxNzQyOAJfMgkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFDGFjcmVzQXNzZXRJZAUNcHJvbG9nQWN0aW9ucwUQd2xnQ2xhaW1lZEFtb3VudAFpAQpzdGFrZUFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQQLJHQwNzg3OTc5NTIJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAgUDYW10BQdhZGRyZXNzBAdhY3Rpb25zCAULJHQwNzg3OTc5NTICXzEEEHdsZ0NsYWltZWRBbW91bnQIBQskdDA3ODc5Nzk1MgJfMgkAlAoCCQDOCAIFB2FjdGlvbnMFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEIYnV5QWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAp1c2R0QW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAGYCBQVNVUxUNgUKdXNkdEFtb3VudAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ2AAYCBSBVU0RUBAthY3Jlc0Ftb3VudAkAaAIFCnVzZHRBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQJd2xnQW1vdW50CQBrAwUKdXNkdEFtb3VudAUFTVVMVDgJAQtnZXRXbGdQcmljZQEFCnVzZHRBbW91bnQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTb2xkQWNyZXNDb250cmFjdEtleQQDcmVxCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIUcmVxdWVzdEFjcmVzQ2FsbGJhY2sJAMwIAgULYWNyZXNBbW91bnQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBAl3bGdSZW1haW4JAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCmJ1cm5XbGdvbGQJAMwIAgUJd2xnQW1vdW50BQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthY3Jlc0Ftb3VudAUMYWNyZXNBc3NldElkBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1JlbWFpbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBidXlBY3Jlc1JFQURPTkxZAQp1c2R0QW1vdW50BAthY3Jlc0Ftb3VudAkAaAIFCnVzZHRBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQJd2xnVG9CdXJuCQBrAwUKdXNkdEFtb3VudAUFTVVMVDgJAQtnZXRXbGdQcmljZQEFCnVzZHRBbW91bnQJAJQKAgUDbmlsCQDMCAIFC2FjcmVzQW1vdW50CQDMCAIFBU1VTFQ2CQDMCAIFC2FjcmVzQW1vdW50CQDMCAIFCXdsZ1RvQnVybgUDbmlsAWkBCXNlbGxBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEC2FjcmVzQW1vdW50CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhAwkAZgIFBU1VTFQ3BQthY3Jlc0Ftb3VudAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ3AAgCBiBBQ1JFUwQEYWRkcgkApQgBCAUBaQZjYWxsZXIECyR0MDk4MDk5ODU3CQERZ2V0U3dhcExpbWl0QWNyZXMABAtsaW1pdEFjdGlvbggFCyR0MDk4MDk5ODU3Al8xBAdtYXhVc2R0CAULJHQwOTgwOTk4NTcCXzIECG1heEFjcmVzCQBoAgUHbWF4VXNkdAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAwkAZgIFC2FjcmVzQW1vdW50BQhtYXhBY3JlcwkAAgEJAKwCAgkArAICAhFZb3UgY2FuIHNlbGwgbWF4IAkBCmZpeGVkUG9pbnQCBQhtYXhBY3JlcwAIAgYgQUNSRVMECnVzZHRBbW91bnQJAGkCCQBpAgULYWNyZXNBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgACCQCUCgIJAM4IAgkAzAgCBQtsaW1pdEFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5TGFzdExpbWl0TGVmdAkAZQIFB21heFVzZHQFCnVzZHRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp1c2R0QW1vdW50BQt1c2R0QXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQp1c2R0QW1vdW50AWkBEXNlbGxBY3Jlc1JFQURPTkxZAgdhZGRyZXNzC2FjcmVzQW1vdW50BA0kdDAxMDM1MzEwNDAxCQERZ2V0U3dhcExpbWl0QWNyZXMABAtsaW1pdEFjdGlvbggFDSR0MDEwMzUzMTA0MDECXzEEB21heFVzZHQIBQ0kdDAxMDM1MzEwNDAxAl8yBAp1c2R0QW1vdW50CQBpAgkAaQIFC2FjcmVzQW1vdW50BRVVU0RUMkFDUkVTX01VTFRJUExJRVIAAgkAlAoCBQNuaWwJAMwIAgUKdXNkdEFtb3VudAkAzAgCBQVNVUxUNwkAzAgCCQBoAgUHbWF4VXNkdAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCQDMCAIAAAUDbmlsAWkBEGNvbnZlcnRPbGRTdGFrZXMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVGVtcG9yYXJpbHkgZGlzYWJsZWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQED29sZEFjcmVzQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUTb2xkQWNyZXNDb250cmFjdEtleQQGYW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFD29sZEFjcmVzQWRkcmVzcwkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwAABAlnb3RBY3JlczADCQBmAgUGYW1vdW50AAAJAQxhc1R1cGxlMkludHMBCQD8BwQFD29sZEFjcmVzQWRkcmVzcwIUdW5zdGFrZUFjcmVzQ2FsbGJhY2sJAMwIAgUGYW1vdW50CQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIAAAAABBFvbGRTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAhsYW5kc1N0cgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEC2xhbmRzUmVzdWx0AwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyBAVsYW5kcwkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAMJAAACBQtsYW5kQXNzZXRJZAIACQACAQIXbGFuZEFzc2V0SWQgaXMgcmVxdWlyZWQEAXIJAQxhc1R1cGxlNUludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlTGFuZENhbGxiYWNrCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCWCgQJAGQCCAUDYWNjAl8xCAUBcgJfMQkAZAIIBQNhY2MCXzIIBQFyAl8yCQBkAggFA2FjYwJfMwgFAXICXzMJAGQCCAUDYWNjAl80CAUBcgJfNAQCcnIKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAAAAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHb25lTGFuZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYA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IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAkAlgoEAAAAAAAAAAAJAJQKAgUDbmlsBQtsYW5kc1Jlc3VsdAFpARJzdGFrZUFjcmVzQ2FsbGJhY2sBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFW9sZFN0YWtpbmdDb250cmFjdFN0cgkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQRhZGRyAWkBGnNpbXVsYXRlU3Rha2VBY3Jlc1JFQURPTkxZAgdhZGRyZXNzC2FkZGVkQW1vdW50BAlhbW91bnRLZXkJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFB2FkZHJlc3MEDm5ld0FjcmVzQW1vdW50CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAULYWRkZWRBbW91bnQECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEmFjcmVzU3Rha2RUb3RhbEtleQAABAl1c2VyRnBLZXkJARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBQdhZGRyZXNzBAVvbGRGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQl1c2VyRnBLZXkAAAQFbmV3RnAJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUObmV3QWNyZXNBbW91bnQECm9sZFRvdGFsRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAQKbmV3VG90YWxGcAkAZAIJAGUCBQpvbGRUb3RhbEZwBQVvbGRGcAUFbmV3RnAJAJQKAgUDbmlsCQDMCAIFBW9sZEZwCQDMCAIFBW5ld0ZwCQDMCAIFCm9sZFRvdGFsRnAJAMwIAgUKbmV3VG90YWxGcAUDbmlsAWkBCGlzc3VlTkZUAgpmb3JBZGRyZXNzCG5mdEluZGV4AwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQEQaXNzdWVORlRpbnRlcm5hbAIFCG5mdEluZGV4CQERQGV4dHJOYXRpdmUoMTA2MikBBQpmb3JBZGRyZXNzAP1wsH4=", "height": 3383979, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3paaK7hWixdLRkKk2eiTRBE8vf6JMZ8AudVeszJV51mx Next: BhU1p7tfFZkMTyaoycRkLt7L5R6GnFDvKZ53kVoaXs8k Diff:
OldNewDifferences
216216
217217 let keyLastLimitLeft = "lastLimitLeft"
218218
219-let dtxArray = match chain {
220- case _ =>
221- if ((base58'2W' == $match0))
222- then nil
223- else if ((base58'2T' == $match0))
224- then ["Cy1b1cu6E5Vx67Mo2wvWi2pvJzT28exsb81maoyYPmvu", "6GEyPU5H2giZahjKnUfZ4djSMacEhSWswVp23Xr8B7wy"]
225- else throw("Unknown chain")
226-}
227-
228219 let nftDescriptions = ["{\"name\": \"Gold shovel\", \"description\": \"Reward for early birds\", \"rare\": \"Promo\", \"bonus\": 3, \"bonusType\": \"FarmPower\"}", "{\"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 1, \"bonusType\": \"FarmPower\"}"]
229220
230221 let nftNames = ["SHOVEL-P3", "PICKAXE-C1"]
222+
223+let contentKeys = ["contentShovelP3", "contentPickaxeC1"]
231224
232225 func prolog (i) = if (if ((i.originCaller != rest2Contract))
233226 then valueOrElse(getBoolean(keyBlocked()), false)
258251 }
259252
260253
261-func issueNFTinternal (nftIndex,addr) = if ((nftIndex >= size(dtxArray)))
254+func issueNFTinternal (nftIndex,addr) = if ((nftIndex >= size(contentKeys)))
262255 then throw("nftIndex out of bounds")
263256 else {
264257 let nftSerial = (valueOrElse(getInteger(keyNftTotalIssued), -1) + 1)
265- let issue = Issue(nftNames[nftIndex], makeString_2C([dtxArray[nftIndex], toString(nftSerial), nftDescriptions[nftIndex]], SEP), 1, 0, false)
258+ let issue = Issue(nftNames[nftIndex], makeString_2C([contentKeys[nftIndex], toString(nftSerial), nftDescriptions[nftIndex]], SEP), 1, 0, false)
266259 let nftAssetId = calculateAssetId(issue)
267260 $Tuple2([issue, IntegerEntry(keyNftTotalIssued, nftSerial), IntegerEntry(keyNftNumberByAssetId(toBase58String(nftAssetId)), nftSerial), ScriptTransfer(addr, 1, nftAssetId)], nftAssetId)
268261 }
356349 if ((arbReleaseTime > lastBlock.timestamp))
357350 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
358351 else {
359- let $t074337510 = stakeUnstakeAcresInternal(-(amount), address)
360- let actions = $t074337510._1
361- let wlgClaimedAmount = $t074337510._2
352+ let $t073517428 = stakeUnstakeAcresInternal(-(amount), address)
353+ let actions = $t073517428._1
354+ let wlgClaimedAmount = $t073517428._2
362355 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
363356 }
364357 }
381374 else (value(pmt.assetId) != acresAssetId))
382375 then throw("ACRES payments only!")
383376 else {
384- let $t079618034 = stakeUnstakeAcresInternal(amt, address)
385- let actions = $t079618034._1
386- let wlgClaimedAmount = $t079618034._2
377+ let $t078797952 = stakeUnstakeAcresInternal(amt, address)
378+ let actions = $t078797952._1
379+ let wlgClaimedAmount = $t078797952._2
387380 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
388381 }
389382 }
447440 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
448441 else {
449442 let addr = toString(i.caller)
450- let $t098919939 = getSwapLimitAcres()
451- let limitAction = $t098919939._1
452- let maxUsdt = $t098919939._2
443+ let $t098099857 = getSwapLimitAcres()
444+ let limitAction = $t098099857._1
445+ let maxUsdt = $t098099857._2
453446 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
454447 if ((acresAmount > maxAcres))
455448 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
465458
466459 @Callable(i)
467460 func sellAcresREADONLY (address,acresAmount) = {
468- let $t01043510483 = getSwapLimitAcres()
469- let limitAction = $t01043510483._1
470- let maxUsdt = $t01043510483._2
461+ let $t01035310401 = getSwapLimitAcres()
462+ let limitAction = $t01035310401._1
463+ let maxUsdt = $t01035310401._2
471464 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
472465 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
473466 }
519512 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
520513 if ((req == req))
521514 then {
522- let $t01235512435 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
523- let nftActions = $t01235512435._1
524- let nftAssetId = $t01235512435._2
515+ let $t01227312353 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
516+ let nftActions = $t01227312353._1
517+ let nftAssetId = $t01227312353._2
525518 $Tuple5(rr._1, rr._2, rr._3, rr._4, nftActions)
526519 }
527520 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let MULT6 = 1000000
77
88 let MULT7 = 10000000
99
1010 let MULT8 = 100000000
1111
1212 let DAY_MILLIS = 86400000
1313
1414 let USDT2ACRES_MULTIPLIER = 10
1515
1616 let ONE_PERCENT_DIVISOR = 100
1717
1818 let chain = take(drop(this.bytes, 1), 1)
1919
2020 let usdtAssetId = match chain {
2121 case _ =>
2222 if ((base58'2W' == $match0))
2323 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2424 else if ((base58'2T' == $match0))
2525 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
2626 else throw("Unknown chain")
2727 }
2828
2929 let defaultRest2AddressStr = match chain {
3030 case _ =>
3131 if ((base58'2W' == $match0))
3232 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
3333 else if ((base58'2T' == $match0))
3434 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
3535 else throw("Unknown chain")
3636 }
3737
3838 let arbitrageDelay = match chain {
3939 case _ =>
4040 if ((base58'2W' == $match0))
4141 then DAY_MILLIS
4242 else if ((base58'2T' == $match0))
4343 then 60000
4444 else throw("Unknown chain")
4545 }
4646
4747 let oldStakingContractStr = match chain {
4848 case _ =>
4949 if ((base58'2W' == $match0))
5050 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
5151 else if ((base58'2T' == $match0))
5252 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
5353 else throw("Unknown chain")
5454 }
5555
5656 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
5757
5858
5959 let IdxCfgAcres2Dapp = 1
6060
6161 let IdxCfgWlgDapp = 2
6262
6363 let IdxCfgInvestFundDapp = 5
6464
6565 func keyRestCfg () = "%s__restConfig"
6666
6767
6868 func keyRest2Address () = "%s__rest2Addr"
6969
7070
7171 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
7272
7373
7474 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
7575
7676
7777 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
7878
7979 let rest2Cfg = readRestCfgOrFail(rest2Contract)
8080
8181 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
8282
8383 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
8484
8585 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
8686
8787 let oldAcresContractKey = "oldAcresContract"
8888
8989 func keyBlocked () = "contractsBlocked"
9090
9191
9292 func keyLastWeekTxIdByUser (addr) = ("lastWeekTxIdByUser_" + addr)
9393
9494
9595 func keyCurWeekTxIdByUser (addr) = ("curWeekTxIdByUser_" + addr)
9696
9797
9898 let acresIssuedAmountKey = "acresIssuedAmount"
9999
100100 let acresAssetIdKey = "acresAssetId"
101101
102102 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
103103
104104 func keyAcresStakedTimeByUser (addr) = ("acresStakedTimeByUser_" + addr)
105105
106106
107107 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
108108
109109
110110 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
111111
112112
113113 func asInt (v) = match v {
114114 case n: Int =>
115115 n
116116 case _ =>
117117 throw("fail to cast into Int")
118118 }
119119
120120
121121 func asTuple5Ints (val) = match val {
122122 case t: (Int, Int, Int, Int, Int) =>
123123 t
124124 case _ =>
125125 throw("fail to cast into (Int, Int, Int, Int, Int)")
126126 }
127127
128128
129129 func asTuple4Ints (val) = match val {
130130 case t: (Int, Int, Int, Int) =>
131131 t
132132 case _ =>
133133 throw("fail to cast into (Int, Int, Int, Int)")
134134 }
135135
136136
137137 func asTuple3Ints (val) = match val {
138138 case t: (Int, Int, Int) =>
139139 t
140140 case _ =>
141141 throw("fail to cast into (Int, Int, Int)")
142142 }
143143
144144
145145 func asTuple2Ints (val) = match val {
146146 case t: (Int, Int) =>
147147 t
148148 case _ =>
149149 throw("fail to cast into (Int, Int)")
150150 }
151151
152152
153153 func fixedPoint (val,decimals) = {
154154 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
155155 let lowPart = toString((val % tenPow))
156156 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
157157 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
158158 }
159159
160160
161161 let M8_ = 100000000
162162
163163 let WEEK_BLOCKS = 10080
164164
165165 let wlgIssuedAmtKey = "wlg_issuedAmount"
166166
167167 let zbIssuedAmtKey = "zbill_issuedAmount"
168168
169169 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
170170
171171
172172 func keyFarmingPowerByUser (addr) = ("farmingPowerByUser_" + addr)
173173
174174
175175 let acresStakdTotalKey = "acresStakedAmountTotal"
176176
177177 let totalFarmingPowerKey = "totalFarmingPower"
178178
179179 let IdxDtx3PercConversion = 0
180180
181181 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
182182
183183 func getLevelByAcres (acres) = {
184184 let acr = ((acres + 99999999) / M8_)
185185 func checker (acc,item) = if ((item >= acr))
186186 then acc
187187 else (acc + 1)
188188
189189 let $l = levelAcres
190190 let $s = size($l)
191191 let $acc0 = 0
192192 func $f0_1 ($a,$i) = if (($i >= $s))
193193 then $a
194194 else checker($a, $l[$i])
195195
196196 func $f0_2 ($a,$i) = if (($i >= $s))
197197 then $a
198198 else throw("List size exceeds 10")
199199
200200 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
201201 }
202202
203203
204204 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
205205
206206
207207 let keyNftTotalIssued = "nftTotalIssued"
208208
209209 func keyNftNumberByAssetId (assetId) = ("nftNumberByAssetId_" + assetId)
210210
211211
212212 func keyLastWlgTradeTimeByUser (addr) = ("lastArbTimeUser_" + addr)
213213
214214
215215 let keyLastAcresSellTime = "lastAcresSellTime"
216216
217217 let keyLastLimitLeft = "lastLimitLeft"
218218
219-let dtxArray = match chain {
220- case _ =>
221- if ((base58'2W' == $match0))
222- then nil
223- else if ((base58'2T' == $match0))
224- then ["Cy1b1cu6E5Vx67Mo2wvWi2pvJzT28exsb81maoyYPmvu", "6GEyPU5H2giZahjKnUfZ4djSMacEhSWswVp23Xr8B7wy"]
225- else throw("Unknown chain")
226-}
227-
228219 let nftDescriptions = ["{\"name\": \"Gold shovel\", \"description\": \"Reward for early birds\", \"rare\": \"Promo\", \"bonus\": 3, \"bonusType\": \"FarmPower\"}", "{\"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 1, \"bonusType\": \"FarmPower\"}"]
229220
230221 let nftNames = ["SHOVEL-P3", "PICKAXE-C1"]
222+
223+let contentKeys = ["contentShovelP3", "contentPickaxeC1"]
231224
232225 func prolog (i) = if (if ((i.originCaller != rest2Contract))
233226 then valueOrElse(getBoolean(keyBlocked()), false)
234227 else false)
235228 then throw("Contracts are under maintenance")
236229 else {
237230 let addr = toString(i.originCaller)
238231 let week = (height / WEEK_BLOCKS)
239232 let lastWeekTxIdByUser = getString(keyLastWeekTxIdByUser(addr))
240233 let txId = toBase58String(i.transactionId)
241234 let wtx = ((toString(week) + "_") + txId)
242235 if (isDefined(lastWeekTxIdByUser))
243236 then {
244237 let lastWeekTx = split(value(lastWeekTxIdByUser), "_")
245238 if ((lastWeekTx[0] == toString(week)))
246239 then [StringEntry(keyLastWeekTxIdByUser(addr), wtx), StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
247240 else if ((lastWeekTx[0] == toString((week - 1))))
248241 then [StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
249242 else {
250243 let curWeekTxIdByUser = getStringValue(keyLastWeekTxIdByUser(addr))
251244 let curWeekTx = split(curWeekTxIdByUser, "_")
252245 if ((curWeekTx[0] == toString(week)))
253246 then [StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
254247 else [StringEntry(keyLastWeekTxIdByUser(addr), curWeekTxIdByUser), StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
255248 }
256249 }
257250 else [StringEntry(keyLastWeekTxIdByUser(addr), wtx), StringEntry(keyCurWeekTxIdByUser(addr), wtx)]
258251 }
259252
260253
261-func issueNFTinternal (nftIndex,addr) = if ((nftIndex >= size(dtxArray)))
254+func issueNFTinternal (nftIndex,addr) = if ((nftIndex >= size(contentKeys)))
262255 then throw("nftIndex out of bounds")
263256 else {
264257 let nftSerial = (valueOrElse(getInteger(keyNftTotalIssued), -1) + 1)
265- let issue = Issue(nftNames[nftIndex], makeString_2C([dtxArray[nftIndex], toString(nftSerial), nftDescriptions[nftIndex]], SEP), 1, 0, false)
258+ let issue = Issue(nftNames[nftIndex], makeString_2C([contentKeys[nftIndex], toString(nftSerial), nftDescriptions[nftIndex]], SEP), 1, 0, false)
266259 let nftAssetId = calculateAssetId(issue)
267260 $Tuple2([issue, IntegerEntry(keyNftTotalIssued, nftSerial), IntegerEntry(keyNftNumberByAssetId(toBase58String(nftAssetId)), nftSerial), ScriptTransfer(addr, 1, nftAssetId)], nftAssetId)
268261 }
269262
270263
271264 func stakeUnstakeAcresInternal (amt,address) = {
272265 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
273266 if ((wlgResult == wlgResult))
274267 then {
275268 let now = lastBlock.timestamp
276269 let timeKey = keyAcresStakedTimeByUser(address)
277270 let amountKey = keyAcresStakedAmtByUser(address)
278271 let oldAcresAmount = valueOrElse(getInteger(amountKey), 0)
279272 if (if ((0 > amt))
280273 then (0 > (oldAcresAmount + amt))
281274 else false)
282275 then throw(((("You have only " + fixedPoint(oldAcresAmount, 8)) + " ACRES staked, tried to unstake ") + fixedPoint(-(amt), 8)))
283276 else {
284277 let newAcresAmount = (oldAcresAmount + amt)
285278 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
286279 let userFpKey = keyFarmingPowerByUser(address)
287280 let oldFp = valueOrElse(getInteger(userFpKey), 0)
288281 let newFp = getFarmingPowerByAcres(newAcresAmount)
289282 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
290283 $Tuple2([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, newAcresAmount), IntegerEntry(acresStakdTotalKey, (oldTotal + amt)), IntegerEntry(userFpKey, newFp), IntegerEntry(totalFarmingPowerKey, ((oldTotalFp - oldFp) + newFp))], wlgResult)
291284 }
292285 }
293286 else throw("Strict value is not equal to itself.")
294287 }
295288
296289
297290 func getWlgPrice (usdtBalanceCorrection) = {
298291 let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmtKey), "WLGOLD is not issued yet")
299292 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
300293 let acres2Usd = (assetBalance(acres2Contract, usdtAssetId) - usdtBalanceCorrection)
301294 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
302295 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
303296 fraction(totalFundsUsd, MULT8, issuedAmount)
304297 }
305298
306299
307300 func getSwapLimitAcres () = {
308301 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
309302 let acres2Usd = assetBalance(this, usdtAssetId)
310303 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
311304 let defaultLimit = (((acres2Usd + wlgUsd) + investFundTotal) / ONE_PERCENT_DIVISOR)
312305 let lastLimitLeft = valueOrElse(getInteger(keyLastLimitLeft), defaultLimit)
313306 let lastTime = valueOrElse(getInteger(keyLastAcresSellTime), 0)
314307 let now = lastBlock.timestamp
315308 let currentLimit = (lastLimitLeft + fraction(defaultLimit, (now - lastTime), DAY_MILLIS))
316309 let limitLeftUsdt = min([currentLimit, defaultLimit])
317310 $Tuple2(IntegerEntry(keyLastAcresSellTime, now), limitLeftUsdt)
318311 }
319312
320313
321314 @Callable(i)
322315 func saveLastTx () = if (!(containsElement([wlgContract], i.caller)))
323316 then throw("Access denied")
324317 else $Tuple2(prolog(i), 42)
325318
326319
327320
328321 @Callable(i)
329322 func constructorV1 (rest2Addr,oldAcrContract) = if ((i.caller != this))
330323 then throw("Permission denied")
331324 else {
332325 let oldAcrContAddr = addressFromStringValue(oldAcrContract)
333326 [IntegerEntry(acresIssuedAmountKey, getIntegerValue(oldAcrContAddr, acresIssuedAmountKey)), BinaryEntry(acresAssetIdKey, getBinaryValue(oldAcrContAddr, acresAssetIdKey)), StringEntry(keyRest2Address(), rest2Addr), StringEntry(oldAcresContractKey, oldAcrContract)]
334327 }
335328
336329
337330
338331 @Callable(i)
339332 func setBlocked (isBlocked) = if ((i.caller != this))
340333 then throw("permission denied")
341334 else [BooleanEntry(keyBlocked(), isBlocked)]
342335
343336
344337
345338 @Callable(i)
346339 func unstakeAcres (amount) = {
347340 let prologActions = prolog(i)
348341 if ((0 >= amount))
349342 then throw("Amount should be positive")
350343 else {
351344 let address = toString(i.caller)
352345 if ((size(i.payments) != 0))
353346 then throw("No payments required")
354347 else {
355348 let arbReleaseTime = (valueOrElse(getInteger(wlgContract, keyLastWlgTradeTimeByUser(address)), 0) + arbitrageDelay)
356349 if ((arbReleaseTime > lastBlock.timestamp))
357350 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
358351 else {
359- let $t074337510 = stakeUnstakeAcresInternal(-(amount), address)
360- let actions = $t074337510._1
361- let wlgClaimedAmount = $t074337510._2
352+ let $t073517428 = stakeUnstakeAcresInternal(-(amount), address)
353+ let actions = $t073517428._1
354+ let wlgClaimedAmount = $t073517428._2
362355 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
363356 }
364357 }
365358 }
366359 }
367360
368361
369362
370363 @Callable(i)
371364 func stakeAcres () = {
372365 let prologActions = prolog(i)
373366 let address = toString(i.caller)
374367 if ((size(i.payments) != 1))
375368 then throw("exactly 1 payment must be attached")
376369 else {
377370 let pmt = i.payments[0]
378371 let amt = pmt.amount
379372 if (if (!(isDefined(pmt.assetId)))
380373 then true
381374 else (value(pmt.assetId) != acresAssetId))
382375 then throw("ACRES payments only!")
383376 else {
384- let $t079618034 = stakeUnstakeAcresInternal(amt, address)
385- let actions = $t079618034._1
386- let wlgClaimedAmount = $t079618034._2
377+ let $t078797952 = stakeUnstakeAcresInternal(amt, address)
378+ let actions = $t078797952._1
379+ let wlgClaimedAmount = $t078797952._2
387380 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
388381 }
389382 }
390383 }
391384
392385
393386
394387 @Callable(i)
395388 func buyAcres () = {
396389 let prologActions = prolog(i)
397390 if ((size(i.payments) != 1))
398391 then throw("exactly 1 payment must be attached")
399392 else {
400393 let pmt = i.payments[0]
401394 let usdtAmount = pmt.amount
402395 if (if (!(isDefined(pmt.assetId)))
403396 then true
404397 else (value(pmt.assetId) != usdtAssetId))
405398 then throw("USDT payments only!")
406399 else if ((MULT6 > usdtAmount))
407400 then throw((("Min payment should be " + fixedPoint(MULT6, 6)) + " USDT"))
408401 else {
409402 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
410403 let wlgAmount = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
411404 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
412405 let req = invoke(oldAcresAddress, "requestAcresCallback", [acresAmount], nil)
413406 if ((req == req))
414407 then {
415408 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", [wlgAmount], nil))
416409 $Tuple2(([ScriptTransfer(i.caller, acresAmount, acresAssetId)] ++ prologActions), wlgRemain)
417410 }
418411 else throw("Strict value is not equal to itself.")
419412 }
420413 }
421414 }
422415
423416
424417
425418 @Callable(i)
426419 func buyAcresREADONLY (usdtAmount) = {
427420 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
428421 let wlgToBurn = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
429422 $Tuple2(nil, [acresAmount, MULT6, acresAmount, wlgToBurn])
430423 }
431424
432425
433426
434427 @Callable(i)
435428 func sellAcres () = {
436429 let prologActions = prolog(i)
437430 if ((size(i.payments) != 1))
438431 then throw("exactly 1 payment must be attached")
439432 else {
440433 let pmt = i.payments[0]
441434 let acresAmount = pmt.amount
442435 if (if (!(isDefined(pmt.assetId)))
443436 then true
444437 else (value(pmt.assetId) != acresAssetId))
445438 then throw("ACRES payments only!")
446439 else if ((MULT7 > acresAmount))
447440 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
448441 else {
449442 let addr = toString(i.caller)
450- let $t098919939 = getSwapLimitAcres()
451- let limitAction = $t098919939._1
452- let maxUsdt = $t098919939._2
443+ let $t098099857 = getSwapLimitAcres()
444+ let limitAction = $t098099857._1
445+ let maxUsdt = $t098099857._2
453446 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
454447 if ((acresAmount > maxAcres))
455448 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
456449 else {
457450 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
458451 $Tuple2(([limitAction, IntegerEntry(keyLastLimitLeft, (maxUsdt - usdtAmount)), ScriptTransfer(i.caller, usdtAmount, usdtAssetId)] ++ prologActions), usdtAmount)
459452 }
460453 }
461454 }
462455 }
463456
464457
465458
466459 @Callable(i)
467460 func sellAcresREADONLY (address,acresAmount) = {
468- let $t01043510483 = getSwapLimitAcres()
469- let limitAction = $t01043510483._1
470- let maxUsdt = $t01043510483._2
461+ let $t01035310401 = getSwapLimitAcres()
462+ let limitAction = $t01035310401._1
463+ let maxUsdt = $t01035310401._2
471464 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
472465 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
473466 }
474467
475468
476469
477470 @Callable(i)
478471 func convertOldStakes () = if ((i.caller != this))
479472 then throw("Temporarily disabled")
480473 else {
481474 let address = toString(i.caller)
482475 if ((size(i.payments) != 0))
483476 then throw("No payments required")
484477 else {
485478 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
486479 let amount = valueOrElse(getInteger(oldAcresAddress, keyAcresStakedAmtByUser(address)), 0)
487480 let gotAcres0 = if ((amount > 0))
488481 then asTuple2Ints(invoke(oldAcresAddress, "unstakeAcresCallback", [amount, address], nil))
489482 else $Tuple2(0, 0)
490483 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
491484 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
492485 let landsResult = if (isDefined(landsStr))
493486 then {
494487 let lands = split_51C(value(landsStr), "_")
495488 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
496489 then throw("landAssetId is required")
497490 else {
498491 let r = asTuple5Ints(invoke(oldStakingAddress, "unstakeLandCallback", [landAssetId, address], nil))
499492 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
500493 }
501494
502495 let rr = {
503496 let $l = lands
504497 let $s = size($l)
505498 let $acc0 = $Tuple4(0, 0, 0, 0)
506499 func $f0_1 ($a,$i) = if (($i >= $s))
507500 then $a
508501 else oneLand($a, $l[$i])
509502
510503 func $f0_2 ($a,$i) = if (($i >= $s))
511504 then $a
512505 else throw("List size exceeds 100")
513506
514507 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 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), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
515508 }
516509 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
517510 if ((finalize == finalize))
518511 then {
519512 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
520513 if ((req == req))
521514 then {
522- let $t01235512435 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
523- let nftActions = $t01235512435._1
524- let nftAssetId = $t01235512435._2
515+ let $t01227312353 = issueNFTinternal(IdxDtx3PercConversion, i.caller)
516+ let nftActions = $t01227312353._1
517+ let nftAssetId = $t01227312353._2
525518 $Tuple5(rr._1, rr._2, rr._3, rr._4, nftActions)
526519 }
527520 else throw("Strict value is not equal to itself.")
528521 }
529522 else throw("Strict value is not equal to itself.")
530523 }
531524 else $Tuple5(0, 0, 0, 0, nil)
532525 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(address)), "")
533526 let duckResult = if ((duckAssetId != ""))
534527 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
535528 else $Tuple3(0, 0, 0)
536529 let x = stakeUnstakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
537530 $Tuple2((landsResult._5 ++ x._1), x._2)
538531 }
539532 }
540533
541534
542535
543536 @Callable(i)
544537 func unstakeLandsREADONLY (address) = {
545538 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
546539 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
547540 let landsResult = if (isDefined(landsStr))
548541 then {
549542 let lands = split_51C(value(landsStr), "_")
550543 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
551544 then throw("landAssetId is required")
552545 else {
553546 let r = asTuple4Ints(invoke(oldStakingAddress, "unstakeLandREADONLY", [landAssetId, address], nil))
554547 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
555548 }
556549
557550 let $l = lands
558551 let $s = size($l)
559552 let $acc0 = $Tuple4(0, 0, 0, 0)
560553 func $f0_1 ($a,$i) = if (($i >= $s))
561554 then $a
562555 else oneLand($a, $l[$i])
563556
564557 func $f0_2 ($a,$i) = if (($i >= $s))
565558 then $a
566559 else throw("List size exceeds 100")
567560
568561 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 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), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
569562 }
570563 else $Tuple4(0, 0, 0, 0)
571564 $Tuple2(nil, landsResult)
572565 }
573566
574567
575568
576569 @Callable(i)
577570 func stakeAcresCallback (addr) = if ((i.caller != addressFromStringValue(oldStakingContractStr)))
578571 then throw("Permission denied")
579572 else stakeUnstakeAcresInternal(i.payments[0].amount, addr)
580573
581574
582575
583576 @Callable(i)
584577 func simulateStakeAcresREADONLY (address,addedAmount) = {
585578 let amountKey = keyAcresStakedAmtByUser(address)
586579 let newAcresAmount = (valueOrElse(getInteger(amountKey), 0) + addedAmount)
587580 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
588581 let userFpKey = keyFarmingPowerByUser(address)
589582 let oldFp = valueOrElse(getInteger(userFpKey), 0)
590583 let newFp = getFarmingPowerByAcres(newAcresAmount)
591584 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
592585 let newTotalFp = ((oldTotalFp - oldFp) + newFp)
593586 $Tuple2(nil, [oldFp, newFp, oldTotalFp, newTotalFp])
594587 }
595588
596589
597590
598591 @Callable(i)
599592 func issueNFT (forAddress,nftIndex) = if ((i.caller != wlgContract))
600593 then throw("Permission denied")
601594 else issueNFTinternal(nftIndex, addressFromStringValue(forAddress))
602595
603596

github/deemru/w8io/026f985 
63.80 ms