tx · 6HkRXcagHDDX8LcCyv2sVnNKLp41GRsgMUEUU8K7XeKE

3N7dQeENwSgKPp9Ki4aEHhRWWKVjn1DE9Qg:  -0.01900000 Waves

2023.11.27 03:32 [2861091] smart account 3N7dQeENwSgKPp9Ki4aEHhRWWKVjn1DE9Qg > SELF 0.00000000 Waves

{ "type": 13, "id": "6HkRXcagHDDX8LcCyv2sVnNKLp41GRsgMUEUU8K7XeKE", "fee": 1900000, "feeAssetId": null, "timestamp": 1701045227755, "version": 2, "chainId": 84, "sender": "3N7dQeENwSgKPp9Ki4aEHhRWWKVjn1DE9Qg", "senderPublicKey": "5BN6FQeKuMm2XJYToUZvbBX4UELGpE3Z47P4q6sP46PG", "proofs": [ "4LP2TbrB8KoRtRoa9CxBVVBb7vSMHfHMNzeSdZseyN1BM6X3fysUR1EdRKs1YMyBNAdVUNzzkyv2i18cx6vkRmzc" ], "script": "base64:BgI2CAISBAoCCAESAwoBARIAEgASBAoCCAESBQoDCAEBEgMKAQESABIDCgEIEgASAwoBARIDCgEBQAAITUlMTElPTjYAgIDpg7HeFgAJREFZTUlMTElTAIC4mSkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgEaa2V5QWNyZXNMb2NrZWRBbW91bnRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNMb2NrZWRBbW91bnRCeVVzZXJfBQRhZGRyARdrZXlBY3Jlc0xvY2tlZEV0YUJ5VXNlcgEEYWRkcgkArAICAhVhY3Jlc0xvY2tlZEV0YUJ5VXNlcl8FBGFkZHIAE2FjcmVzU3Rha2VkVG90YWxLZXkCFmFjcmVzU3Rha2VkQW1vdW50VG90YWwACnhwTmV3U0xhbmQAwJaxAgAPREFJTFlSRVNCWVBJRUNFAID40gEAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKARprZXlJc0F3YXJkZWRCeVByb21vQW5kVXNlcgIHcHJvbW9JZARhZGRyCQC5CQIJAMwIAgIfJXMlZCVzX19pc0F3YXJkZWRCeVByb21vQW5kVXNlcgkAzAgCCQCkAwEFB3Byb21vSWQJAMwIAgUEYWRkcgUDbmlsAgJfXwEWa2V5VGlja2V0c1RvdGFsQnlQcm9tbwEHcHJvbW9JZAkArAICAhslcyVkX190aWNrZXRzVG90YWxCeVByb21vX18JAKQDAQUHcHJvbW9JZAEea2V5VGlja2V0c1RvdGFsQnlQcm9tb0FuZFJvdW5kAgdwcm9tb0lkB3JvdW5kSWQJALkJAgkAzAgCAiMlcyVkJWRfX3RpY2tldHNUb3RhbEJ5UHJvbW9BbmRSb3VuZAkAzAgCCQCkAwEFB3Byb21vSWQJAMwIAgkApAMBBQdyb3VuZElkBQNuaWwCAl9fAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4ADHByb21vMk1hcEtleQIJcHJvbW8yTWFwARRrZXlQcm9tbzJNYXBGb3JSb3VuZAEHcm91bmRJZAkArAICAhNwcm9tbzJNYXBGb3JSb3VuZF9fCQCkAwEFB3JvdW5kSWQAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAGSVRFUjIwCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIADUlkeENmZ1dsZ0RhcHAABAAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAAFGFjcmVzSXNzdWVkQW1vdW50S2V5AhFhY3Jlc0lzc3VlZEFtb3VudAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDWFjcmVzQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEEYWRkcgkArAICAhZhY3Jlc1N0YWtlZFRpbWVCeVVzZXJfBQRhZGRyAAtJZHhFZmZUb3RhbAAAAAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgIPZmluaXNoQmxvY2tGb3JfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBDmFzVHdvSW50c1R1cGxlAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgooSW50LCBJbnQpBAJ0MgUHJG1hdGNoMAUCdDIJAAIBAhxmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQpARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBDmdldFZvdGluZ1Bvd2VyARJ1c2VyQWRkclN0ck9yRW1wdHkEBXByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwoBBWFkZGVyAgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAp0b3RhbFBvd2VyCgACJGwFBXByb3BzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQKdXNlcnNQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUSdXNlckFkZHJTdHJPckVtcHR5AAAJAMwIAgUKdG90YWxQb3dlcgkAzAgCBQp1c2Vyc1Bvd2VyBQNuaWwBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQRwYWRMAgN2YWwDbGVuBAR2YWxTCQCkAwEFA3ZhbAQGemVyb2VzCQCwAgIJAKQDAQkAbAYACgAACQBlAgUDbGVuCQCxAgEFBHZhbFMAAAAABQRET1dOAAEJAKwCAgUGemVyb2VzBQR2YWxTAQ9nZXRSYW5kb21OdW1iZXIDCG1heFZhbHVlBHNhbHQHZW50cm9weQMJAGcCAAAFCG1heFZhbHVlCQACAQIWbWF4VmFsdWUgc2hvdWxkIGJlID4gMAQKcmFuZG9tSGFzaAkA9wMBCQDLAQIFBHNhbHQFB2VudHJvcHkJAGoCCQCxCQEFCnJhbmRvbUhhc2gFCG1heFZhbHVlAB1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwCAreIEAAxCTEFDS0xJU1RFRDEC3wYzUDJOR1g0UTVuZ2UxTUNhdXdRVzVhcVlMZGtjY1NHajFFcF8zUDJ4RkFIVzl5aHlOb2hZb3pXZDRIRmhFWFp1M2JzTlNvUl8zUDJ5S2FaMmd2bjlYZTV0dGk4MWE3UDlMWmhIZ2p2VG9WOV8zUDM3elEzY2YyZWN1NTVSbUpxRWlHU2l2ZHpOOWF2dDNtOV8zUDRhejZkdHpzdkdDV0ZBeGE5NFVkZXZLelh5RXd4RWlGR18zUDRrWlU2WDNUVExGY1NVZTU1SlN5OEJ5U3FpdGNQZ01Cel8zUDVoQ3hCRWgzTmdOaXpaaE5CcmV5QlNxdGJoSllMa0tQRF8zUDdITHZ1Y3kxMXl4eU1KVXdqelhGSEhLTUVEd2kxRXdmQ18zUDhKdWFxSDlQVFFBdjhENUhCR2dRZkthdUxUWXQyTlFmdF8zUDlnVERCNHJ0REVWYnBYM2FzVTYzSDRaaW5oMkVuVG1aRV8zUDlpTjNxcnRmSmljVVZ5N2FtWmVWc2V0VkQzdlVNazhiZV8zUENhMkJzQWE2SkJMaXJzelFmVjVyOWZKcnVqZmh3dHdmUF8zUEQzaTRYTjhLdHlnY0Z4NHJ5NU03VUdxZGZIOFZZdnRSVF8zUERFTW5uSk5jMmt4OWNQRW12VnZoWFVyOFN2aEFOS2hzYV8zUERHRTl0S1FpemFlWkZlRERxNWFZU3Y4OW53WWJmaXJwWl8zUERNS1FUQ3JVUFpFQ1ZYRUpKOG0xc0h0dXRTdTFuYVNmMV8zUEdoMlF1Nll2eDhHVENSUlZOdkJVVlpMZGFpZFlTYXhvNV8zUEtrbUF0YlNLNUQyaFFkbzFSZkVnOGVYeU1iRGNSVWM5Ml8zUExNbmJ4enNzUDhXOEU4WGpKMVJMQkJnOFVaTDhDejNQMl8zUE11eG80UENBb3g5czRhN1IxZXN6aDRpcXF1OGdTN2pIdl8zUE5yTXRFUUNodzg3V1pVMUpBSjdhR0h5a0NhOFRqbkROS18zUFB1QlhmV29CeTNFRW9yeTdjN3ZnaTlVc2prYTdvNXRCal8zUFF3eWV5RWhUNFk2YUdBTDZ0ZzczYVFXSnRWMXpSdDNuUl8zUFJHRFNodU1HYjg0TUp0VEp2dFRnOHFEZnN3a1lXY20zZQANUFJPTU8xX0FNT1VOVADCra8CABdQUk9NT18yX1NUQVJUX1RJTUVTVEFNUAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA8LT5vjEDCQAAAgEBVAUHJG1hdGNoMACA59DHvjEJAAIBAg1Vbmtub3duIGNoYWluABVQUk9NT18yX0VORF9USU1FU1RBTVAEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAA/7/N8MAxAwkAAAIBAVQFByRtYXRjaDAAgIjX674xCQACAQINVW5rbm93biBjaGFpbgAXcHJvbW8yTnVtUHJpemVzUGVyUm91bmQJAMwIAgABCQDMCAIAAwkAzAgCAAUJAMwIAgAUBQNuaWwAE3Byb21vMkF3YXJkUGVyUm91bmQJAMwIAgCAyrXuAQkAzAgCAICEr18JAMwIAgCAwtcvCQDMCAIAgNrECQUDbmlsARNpc0JsYWNrbGlzdGVkUHJvbW8xAQRhZGRyCQEIY29udGFpbnMCBQxCTEFDS0xJU1RFRDEFBGFkZHIBBnByb2xvZwAJAQVhc0ludAEJAP0HBAUPc3Rha2luZ0NvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAESY2xhaW1BY3Jlc0ludGVybmFsAwRhZGRyC2FjcmVzQW1vdW50DWxhc3RDbGFpbVRpbWUECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ1sYXN0Q2xhaW1UaW1lBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFD0RBSUxZUkVTQllQSUVDRQULYWNyZXNBbW91bnQJAGgCBQlEQVlNSUxMSVMFBU1VTFQ4BApjYW5HZXRVc2R0CQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIac2VsbFJlc291cmNlc1dvcmxkUkVBRE9OTFkJAMwIAgUIYXZhaWxSZXMFA25pbAUDbmlsBAdnb3RVc2R0CQCWAwEJAMwIAgAACQDMCAIFCmNhbkdldFVzZHQFA25pbAkAaAIFB2dvdFVzZHQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgENY2xhaW1JbnRlcm5hbAMEYWRkcgthY3Jlc0Ftb3VudA1sYXN0Q2xhaW1UaW1lBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUNbGFzdENsYWltVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFDWxhc3RDbGFpbVRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBQ9EQUlMWVJFU0JZUElFQ0UFC2FjcmVzQW1vdW50CQBoAgUJREFZTUlMTElTBQVNVUxUOAQKY2FuR2V0VXNkdAkBBWFzSW50AQkA/AcEBQ9lY29ub215Q29udHJhY3QCGnNlbGxSZXNvdXJjZXNXb3JsZFJFQURPTkxZCQDMCAIFCGF2YWlsUmVzBQNuaWwFA25pbAQHZ290VXNkdAMJAGcCAAAFCmNhbkdldFVzZHQAAAgJAQ5hc1R3b0ludHNUdXBsZQEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhJzZWxsUmVzb3VyY2VzV29ybGQJAMwIAgUEYWRkcgkAzAgCBQhhdmFpbFJlcwUDbmlsBQNuaWwCXzEJAGgCBQdnb3RVc2R0BRVVU0RUMkFDUkVTX01VTFRJUExJRVIBC21lcmdlTG9ja2VkBAlvbGRBbW91bnQGb2xkRVRBCW5ld0Ftb3VudAZuZXdFVEEEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEA2R0MQkAlgMBCQDMCAIAAAkAzAgCCQBlAgUGb2xkRVRBBQNub3cFA25pbAQDZHQyCQCWAwEJAMwIAgAACQDMCAIJAGUCBQZuZXdFVEEFA25vdwUDbmlsBANzdW0JAGQCBQlvbGRBbW91bnQFCW5ld0Ftb3VudAQCZHQDCQAAAgUDc3VtAAAAAAkAZAIJAGsDBQNkdDEFCW9sZEFtb3VudAUDc3VtCQBrAwUDZHQyBQluZXdBbW91bnQFA3N1bQkAZAIFA25vdwUCZHQMAWkBDWNvbnN0cnVjdG9yVjECCHJlc3RBZGRyDnVuc3Rha2VkUGllY2VzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQDCQEJaXNEZWZpbmVkAQkAoQgBBQ9hY3Jlc0Fzc2V0SWRLZXkJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkBAhuZnRBY3JlcwkAZAIJAJEDAgkBDmdldFZvdGluZ1Bvd2VyAQIABQtJZHhFZmZUb3RhbAUOdW5zdGFrZWRQaWVjZXMEDGlzc3VlZEFtb3VudAkAZQIFCE1JTExJT042CQBoAgUIbmZ0QWNyZXMFBU1VTFQ4BAVpc3N1ZQkAwwgHAgVBQ1JFUwImV2F2ZXNMYW5kcyBsYW5kIGFjcmVzIGludmVzdG1lbnQgdG9rZW4FDGlzc3VlZEFtb3VudAAIBwUEdW5pdAAABAdhc3NldElkCQC4CAEFBWlzc3VlCQDMCAIFBWlzc3VlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRhY3Jlc0lzc3VlZEFtb3VudEtleQUMaXNzdWVkQW1vdW50CQDMCAIJAQtCaW5hcnlFbnRyeQIFD2FjcmVzQXNzZXRJZEtleQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBDHVuc3Rha2VBY3JlcwEGYW1vdW50BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkAZwIAAAUGYW1vdW50CQACAQIZQW1vdW50IHNob3VsZCBiZSBwb3NpdGl2ZQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHdGltZUtleQkBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEFB2FkZHJlc3MECWFtb3VudEtleQkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQUHYWRkcmVzcwQOb2xkQWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAADCQBmAgUGYW1vdW50BQ5vbGRBY3Jlc0Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQEKZml4ZWRQb2ludAIFDm9sZEFjcmVzQW1vdW50AAgCICBBQ1JFUyBzdGFrZWQsIHRyaWVkIHRvIHVuc3Rha2UgCQEKZml4ZWRQb2ludAIFBmFtb3VudAAIBAxsb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBGmtleUFjcmVzTG9ja2VkQW1vdW50QnlVc2VyAQUHYWRkcmVzcwAABAlsb2NrZWRFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBF2tleUFjcmVzTG9ja2VkRXRhQnlVc2VyAQUHYWRkcmVzcwAABANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwMJAGcCBQNub3cFF1BST01PXzJfU1RBUlRfVElNRVNUQU1QCQBnAgUVUFJPTU9fMl9FTkRfVElNRVNUQU1QBQNub3cHCQACAQImWW91IGNhbm5vdCB1bnN0YWtlIEFDUkVTIGR1cmluZyBQcm9tbzIEEHVuc3Rha2FibGVBbW91bnQDCQETaXNCbGFja2xpc3RlZFByb21vMQEFB2FkZHJlc3MJAGUCCQBlAgUOb2xkQWNyZXNBbW91bnQFDGxvY2tlZEFtb3VudAUNUFJPTU8xX0FNT1VOVAkAZQIFDm9sZEFjcmVzQW1vdW50BQxsb2NrZWRBbW91bnQDAwkAZgIFCWxvY2tlZEVUQQUDbm93CQBmAgUGYW1vdW50BRB1bnN0YWthYmxlQW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICBU9ubHkgCQEKZml4ZWRQb2ludAIFEHVuc3Rha2FibGVBbW91bnQACAInIEFDUkVTIGNhbiBiZSB1bnN0YWtlZCBub3csIHdhaXQgdW50aWwgCQCkAwEFCWxvY2tlZEVUQQQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTYWNyZXNTdGFrZWRUb3RhbEtleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAQMY2xhaW1lZEFjcmVzCQENY2xhaW1JbnRlcm5hbAMFB2FkZHJlc3MFDm9sZEFjcmVzQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEFB3RpbWVLZXkAAAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYW1vdW50S2V5CQBlAgUOb2xkQWNyZXNBbW91bnQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTYWNyZXNTdGFrZWRUb3RhbEtleQkAZQIFCG9sZFRvdGFsBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBkAgUGYW1vdW50BQxjbGFpbWVkQWNyZXMFDGFjcmVzQXNzZXRJZAUDbmlsCQCUCgIFDHByb2xvZ1Jlc3VsdAUJd2xnUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnN0YWtlQWNyZXMABAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAwkAAAIFCXdsZ1Jlc3VsdAUJd2xnUmVzdWx0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwMJAGYCBRdQUk9NT18yX1NUQVJUX1RJTUVTVEFNUAUDbm93BgkAZgIFA25vdwUVUFJPTU9fMl9FTkRfVElNRVNUQU1QBAd0aW1lS2V5CQEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQUHYWRkcmVzcwQJYW1vdW50S2V5CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQdhZGRyZXNzBA5vbGRBY3Jlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTYWNyZXNTdGFrZWRUb3RhbEtleQAABAxjbGFpbWVkQWNyZXMJAQ1jbGFpbUludGVybmFsAwUHYWRkcmVzcwUOb2xkQWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdGltZUtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIDCQAAAgUMY2xhaW1lZEFjcmVzAAAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDGNsYWltZWRBY3JlcwUMYWNyZXNBc3NldElkBQNuaWwJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBDEludGVnZXJFbnRyeQIFCWFtb3VudEtleQkAZAIFDm9sZEFjcmVzQW1vdW50BQNhbXQJAQxJbnRlZ2VyRW50cnkCBRNhY3Jlc1N0YWtlZFRvdGFsS2V5CQBkAgUIb2xkVG90YWwFA2FtdAkAlAoCBQxwcm9sb2dSZXN1bHQFCXdsZ1Jlc3VsdAMJAGYCBR1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwUDYW10CQACAQkArAICCQCsAgICOU1pbiBzdGFrZWQgYW1vdW50IGR1cmluZyBwcm9tbyBhY3Rpb24gc2hvdWxkIGJlIGF0IGxlYXN0IAkBCmZpeGVkUG9pbnQCBR1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwAIAgYgQUNSRVMEC3N0YWtlUmVzdWx0CQD8BwQFBHRoaXMCD3NlbmRMb2NrZWRBY3JlcwkAzAgCBQdhZGRyZXNzCQDMCAIFA2FtdAkAzAgCAB4FA25pbAUDbmlsBAlwcm9tbzJNYXAJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcHJvbW8yTWFwS2V5AgAEB25ld01hcDIDCQEIY29udGFpbnMCBQlwcm9tbzJNYXAFB2FkZHJlc3MEBXBhcnRzCQC9CQIFCXByb21vMk1hcAUHYWRkcmVzcwQJb2xkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAK8CAgkAsAICCQCRAwIFBXBhcnRzAAEAAQAOCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUFcGFydHMAAAUHYWRkcmVzcwIBOgkBBHBhZEwCCQBkAgUJb2xkQW1vdW50BQNhbXQADgkAsAICCQCRAwIFBXBhcnRzAAEADwQJZmluYWxQYXJ0CQCsAgIJAKwCAgUHYWRkcmVzcwIBOgkBBHBhZEwCBQNhbXQADgMJAAACBQlwcm9tbzJNYXACAAUJZmluYWxQYXJ0CQCsAgIJAKwCAgUJcHJvbW8yTWFwAgFfBQlmaW5hbFBhcnQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQxwcm9tbzJNYXBLZXkFB25ld01hcDIFA25pbAkAlQoDBQxwcm9sb2dSZXN1bHQFCXdsZ1Jlc3VsdAULc3Rha2VSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIYnV5QWNyZXMABAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkAZgIFBU1VTFQ2BQNhbXQJAAIBCQCsAgIJAKwCAgIWTWluIHBheW1lbnQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQVNVUxUNgAGAgUgVVNEVAQLYWNyZXNBbW91bnQJAGgCBQNhbXQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgQOYWNjU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQdhZGRyZXNzCQDMCAIJAGsDBQp4cE5ld1NMYW5kBQthY3Jlc0Ftb3VudAkAaAIAGQUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0BQNhbXQFC3VzZHRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYWNyZXNBbW91bnQFDGFjcmVzQXNzZXRJZAUDbmlsCQCUCgIFDHByb2xvZ1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJc2VuZEFjcmVzAgRhZGRyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyBQZhbW91bnQFDGFjcmVzQXNzZXRJZAUDbmlsBQZhbW91bnQBaQEPc2VuZExvY2tlZEFjcmVzAwRhZGRyBmFtb3VudAhsb2NrRGF5cwMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0BwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAd0aW1lS2V5CQEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQUEYWRkcgQJYW1vdW50S2V5CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyBA5vbGRBY3Jlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTYWNyZXNTdGFrZWRUb3RhbEtleQAABAdvbGRUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEFB3RpbWVLZXkFA25vdwQGZXRhS2V5CQEXa2V5QWNyZXNMb2NrZWRFdGFCeVVzZXIBBQRhZGRyBA9sb2NrZWRBbW91bnRLZXkJARprZXlBY3Jlc0xvY2tlZEFtb3VudEJ5VXNlcgEFBGFkZHIED29sZExvY2tlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9sb2NrZWRBbW91bnRLZXkAAAQMb2xkTG9ja2VkRVRBCQELdmFsdWVPckVsc2UCCQCfCAEFBmV0YUtleQAABAltZXJnZWRFVEEJAQttZXJnZUxvY2tlZAQFD29sZExvY2tlZEFtb3VudAUMb2xkTG9ja2VkRVRBBQZhbW91bnQJAGQCBQNub3cJAGgCBQhsb2NrRGF5cwUJREFZTUlMTElTCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkFB29sZFRpbWUJAMwIAgkBDEludGVnZXJFbnRyeQIFCWFtb3VudEtleQkAZAIFDm9sZEFjcmVzQW1vdW50BQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFE2FjcmVzU3Rha2VkVG90YWxLZXkJAGQCBQhvbGRUb3RhbAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZldGFLZXkFCW1lcmdlZEVUQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPbG9ja2VkQW1vdW50S2V5CQBkAgUPb2xkTG9ja2VkQW1vdW50BQZhbW91bnQFA25pbAUGYW1vdW50AWkBCWJ1cm5BY3JlcwEGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQKYW1vdW50TGVmdAkAZQIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUYWNyZXNJc3N1ZWRBbW91bnRLZXkAAAUGYW1vdW50AwkAZgIAAAUKYW1vdW50TGVmdAkAAgECJ0F0dGVtcHQgdG8gYnVybiBtb3JlIEFDUkVTLCB0aGFuIGV4aXN0cwkAlAoCCQDMCAIJAQRCdXJuAgUMYWNyZXNBc3NldElkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFGFjcmVzSXNzdWVkQW1vdW50S2V5BQphbW91bnRMZWZ0BQNuaWwFBmFtb3VudAFpAQpjbGFpbUFjcmVzAAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHdGltZUtleQkBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEFB2FkZHJlc3MECWFtb3VudEtleQkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQUHYWRkcmVzcwQLYWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAAECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsBAxjbGFpbWVkQWNyZXMJAQ1jbGFpbUludGVybmFsAwUHYWRkcmVzcwULYWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdGltZUtleQAACQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMY2xhaW1lZEFjcmVzBQxhY3Jlc0Fzc2V0SWQFA25pbAkAlAoCBQxwcm9sb2dSZXN1bHQFCXdsZ1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJjbGFpbUFjcmVzUkVBRE9OTFkBB2FkZHJlc3MEB3RpbWVLZXkJARhrZXlBY3Jlc1N0YWtlZFRpbWVCeVVzZXIBBQdhZGRyZXNzBAlhbW91bnRLZXkJARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEFB2FkZHJlc3MEC2FjcmVzQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEFCWFtb3VudEtleQAABAhsYXN0VGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd0aW1lS2V5AAAEDGNsYWltZWRBY3JlcwkBEmNsYWltQWNyZXNJbnRlcm5hbAMFB2FkZHJlc3MFC2FjcmVzQW1vdW50BQhsYXN0VGltZQkAlAoCBQNuaWwJAMwIAgUMY2xhaW1lZEFjcmVzCQDMCAIFCGxhc3RUaW1lBQNuaWwBaQELY2xhaW1Qcm9tbzIABAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFFVBST01PXzJfRU5EX1RJTUVTVEFNUAUDbm93CQACAQIXUHJvbW8gMiBpcyBub3Qgb3ZlciB5ZXQECmF3YXJkZWRLZXkJARprZXlJc0F3YXJkZWRCeVByb21vQW5kVXNlcgIAAgUHYWRkcmVzcwMJAQt2YWx1ZU9yRWxzZQIJAKAIAQUKYXdhcmRlZEtleQcJAAIBCQCsAgIJAKwCAgIMWW91ciB3YWxsZXQgBQdhZGRyZXNzAh4gaXMgYWxyZWFkeSBhd2FyZGVkIGluIHByb21vIDIECXByb21vMk1hcAkBC3ZhbHVlT3JFbHNlAgkAoggBBQxwcm9tbzJNYXBLZXkCAAMJAQEhAQkBCGNvbnRhaW5zAgUJcHJvbW8yTWFwBQdhZGRyZXNzCQACAQIiWW91IGFyZSBub3QgcGFydGljaXBhbnQgb2YgcHJvbW8gMgQFcGFydHMJAL0JAgUJcHJvbW8yTWFwBQdhZGRyZXNzBAthY3Jlc0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCvAgIJALACAgkAkQMCBQVwYXJ0cwABAAEADgQHdGlja2V0cwkAaQIFC2FjcmVzQW1vdW50BR1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwQLdG90YWxUaWtldHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVRpY2tldHNUb3RhbEJ5UHJvbW8BAAIAAAQNJHQwMTIzNDkxMjc4OQMJAAACBQt0b3RhbFRpa2V0cwAACgEMY291bnRUaWNrZXRzAgNhY2MCZWwJAGQCBQNhY2MJAGkCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCBQJlbAIBOgABBR1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwQMdGlja2V0c0NvdW50CgACJGwJAL0JAgUJcHJvbW8yTWFwAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjb3VudFRpY2tldHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VGlja2V0c1RvdGFsQnlQcm9tbwEAAgUMdGlja2V0c0NvdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5VGlja2V0c1RvdGFsQnlQcm9tb0FuZFJvdW5kAgACAAEFDHRpY2tldHNDb3VudAUDbmlsBQx0aWNrZXRzQ291bnQJAJQKAgUDbmlsBQt0b3RhbFRpa2V0cwQOdGlja2V0c0FjdGlvbnMIBQ0kdDAxMjM0OTEyNzg5Al8xBAp0b3RhbENvdW50CAUNJHQwMTIzNDkxMjc4OQJfMgQFYXdhcmQJAGsDBQd0aWNrZXRzBR1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwUKdG90YWxDb3VudAQLc3Rha2VSZXN1bHQJAPwHBAUEdGhpcwIPc2VuZExvY2tlZEFjcmVzCQDMCAIFB2FkZHJlc3MJAMwIAgUFYXdhcmQJAMwIAgAeBQNuaWwFA25pbAkAlAoCCQDNCAIJAM0IAgUOdGlja2V0c0FjdGlvbnMJAQxCb29sZWFuRW50cnkCBQphd2FyZGVkS2V5BgkBC1N0cmluZ0VudHJ5AgkBFGtleVByb21vMk1hcEZvclJvdW5kAQABBQlwcm9tbzJNYXAFC3N0YWtlUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFGNvbW1pdEZvclByb21vMlJvdW5kAQdyb3VuZElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQDAwkAZgIAAQUHcm91bmRJZAYJAGYCBQdyb3VuZElkAAQJAAIBCQCsAgICEUludmFsaWQgcm91bmRJZDogCQCkAwEFB3JvdW5kSWQEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQkArAICAgIyXwkApAMBBQdyb3VuZElkBQtmaW5pc2hCbG9jawUDbmlsBQtmaW5pc2hCbG9jawFpAQ9kcmF3UHJvbW8yUm91bmQBB3JvdW5kSWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAMDCQBmAgABBQdyb3VuZElkBgkAZgIFB3JvdW5kSWQABAkAAgEJAKwCAgIRSW52YWxpZCByb3VuZElkOiAJAKQDAQUHcm91bmRJZAQJZmluaXNoS2V5CQEJa2V5Q29tbWl0AQkArAICAgIyXwkApAMBBQdyb3VuZElkBAtmaW5pc2hCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFCWZpbmlzaEtleQIwWW91IGhhdmUgdG8gY29tbWl0Rm9yUHJvbW8yUm91bmQocm91bmRJZCkgZmlyc3QhAwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBCQCsAgICNFJhbmRvbSBudW1iZXIgaXMgbm90IHJlYWR5IHlldCwgd2FpdCB1bnRpbCBoZWlnaHQgPSAJAKQDAQULZmluaXNoQmxvY2sECG1heFZhbHVlCQELdmFsdWVPckVsc2UCCQCfCAEJAR5rZXlUaWNrZXRzVG90YWxCeVByb21vQW5kUm91bmQCAAIFB3JvdW5kSWQAAAMJAAACBQhtYXhWYWx1ZQAACQACAQInUGxlYXNlIGNhbGwgY2xhaW1Qcm9tbzIoKSBhdCBsZWFzdCBvbmNlBAdlbnRyb3B5CQEFdmFsdWUBCAkBBXZhbHVlAQkA7QcBBQtmaW5pc2hCbG9jawN2cmYEBHNhbHQIBQFpDXRyYW5zYWN0aW9uSWQECXByb21vMk1hcAkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5UHJvbW8yTWFwRm9yUm91bmQBBQdyb3VuZElkAgAKAQpzaW5nbGVEcmF3AgJhYwFqAwkAZgIFAWoJAJEDAgUXcHJvbW8yTnVtUHJpemVzUGVyUm91bmQJAGUCBQdyb3VuZElkAAEFAmFjBARyYW5kCQEPZ2V0UmFuZG9tTnVtYmVyAwgFAmFjAl8xCAUCYWMCXzIFB2VudHJvcHkECnByb21vMkxpc3QDCQAAAggFAmFjAl8zAgAFA25pbAkAvQkCCAUCYWMCXzMCAV8KAQxjb3VudFRpY2tldHMCA2FjYwJlbAQFcGFydHMJALUJAgUCZWwCAToEBGFkZHIJAJEDAgUFcGFydHMAAAQHdGlja2V0cwkAaQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABBR1NSU5fQUNSRVNfQU1PVU5UX0RVUklOR19QUk9NTwQIbmV3VG90YWwJAGQCCAUDYWNjAl8xBQd0aWNrZXRzAwMJAAACCAUDYWNjAl8zAgAJAGYCBQhuZXdUb3RhbAUEcmFuZAcJAJUKAwUIbmV3VG90YWwFB3RpY2tldHMFBGFkZHIJAJUKAwUIbmV3VG90YWwIBQNhY2MCXzIIBQNhY2MCXzMEAXIKAAIkbAUKcHJvbW8yTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwAAAAACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMY291bnRUaWNrZXRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIEBndpbm5lcggFAXICXzMDCQAAAgUGd2lubmVyAgAJAAIBAglubyB3aW5uZXIECG1hcFBhcnRzCQC9CQIIBQJhYwJfMwUGd2lubmVyBAZuZXdNYXAJAKwCAgkAkQMCBQhtYXBQYXJ0cwAACQCwAgIJAJEDAgUIbWFwUGFydHMAAQAPBAtzdGFrZVJlc3VsdAkA/AcEBQR0aGlzAg9zZW5kTG9ja2VkQWNyZXMJAMwIAgUGd2lubmVyCQDMCAIJAJEDAgUTcHJvbW8yQXdhcmRQZXJSb3VuZAkAZQIFB3JvdW5kSWQAAQkAzAgCAB4FA25pbAUDbmlsCQCWCgQJAGUCCAUCYWMCXzEIBQFyAl8yCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFD3N0YWtpbmdDb250cmFjdAkBEWtleUxhc3RUeElkQnlVc2VyAQUGd2lubmVyBQZuZXdNYXAJAM0IAggFAmFjAl80BQtzdGFrZVJlc3VsdAQFZHJhd3MKAAIkbAUGSVRFUjIwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQhtYXhWYWx1ZQgFAWkNdHJhbnNhY3Rpb25JZAUJcHJvbW8yTWFwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnNpbmdsZURyYXcCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEFCWZpbmlzaEtleQkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5UHJvbW8yTWFwRm9yUm91bmQBCQBkAgUHcm91bmRJZAABCAUFZHJhd3MCXzMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlUaWNrZXRzVG90YWxCeVByb21vQW5kUm91bmQCAAIJAGQCBQdyb3VuZElkAAEIBQVkcmF3cwJfMQUDbmlsCAUFZHJhd3MCXzQAvv6RLw==", "height": 2861091, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Amj5RL6rhLAdkb3chBndRjcga93XYgq4KYd4mNSSQF2D Next: BcjVGK9XNUNfKa5FCwowKVrUrKFVDTcprMyhoLo5JKto Diff:
OldNewDifferences
2828 func m (l) = ("%s%d__ticketsTotalByPromo__" + toString(l))
2929
3030
31-let n = take(drop(this.bytes, 1), 1)
31+func n (l,o) = makeString(["%s%d%d__ticketsTotalByPromoAndRound", toString(l), toString(o)], "__")
3232
33-let o = {
34- let p = n
35- if ((base58'2W' == p))
33+
34+let p = take(drop(this.bytes, 1), 1)
35+
36+let q = {
37+ let r = p
38+ if ((base58'2W' == r))
3639 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
37- else if ((base58'2T' == p))
40+ else if ((base58'2T' == r))
3841 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
3942 else throw("Unknown chain")
4043 }
4144
42-let q = {
43- let p = n
44- if ((base58'2W' == p))
45+let s = {
46+ let r = p
47+ if ((base58'2W' == r))
4548 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
46- else if ((base58'2T' == p))
49+ else if ((base58'2T' == r))
4750 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
4851 else throw("Unknown chain")
4952 }
5053
51-let r = "promo2Map"
54+let t = "promo2Map"
5255
53-let s = "__"
54-
55-let t = 1000000
56-
57-let u = 100000000
58-
59-func v (w,x) = valueOrErrorMessage(getString(w, x), makeString(["mandatory ", toString(w), ".", x, " is not defined"], ""))
56+func u (o) = ("promo2MapForRound__" + toString(o))
6057
6158
62-let y = 1
59+let v = "__"
6360
64-let z = 2
61+let w = 1000000
6562
66-let A = 4
63+let x = 100000000
6764
68-let B = 8
65+let y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
6966
70-func C () = "%s__restConfig"
67+func z (A,B) = valueOrErrorMessage(getString(A, B), makeString(["mandatory ", toString(A), ".", B, " is not defined"], ""))
7168
7269
73-func D () = "%s__restAddr"
70+let C = 1
71+
72+let D = 2
73+
74+let E = 4
75+
76+let F = 8
77+
78+func G () = "%s__restConfig"
7479
7580
76-func E (F) = split_4C(v(F, C()), s)
81+func H () = "%s__restAddr"
7782
7883
79-func G (H,I) = valueOrErrorMessage(addressFromString(H[I]), ("Rest cfg doesn't contain address at index " + toString(I)))
84+func I (J) = split_4C(z(J, G()), v)
8085
8186
82-let J = addressFromStringValue(valueOrElse(getString(this, D()), q))
83-
84-let H = E(J)
85-
86-let K = G(H, y)
87-
88-let L = G(H, z)
89-
90-let M = G(H, A)
91-
92-let N = G(H, B)
93-
94-let O = "acresIssuedAmount"
95-
96-let P = "acresAssetId"
97-
98-let Q = valueOrErrorMessage(getBinary(N, P), "ACRES is not issued yet")
99-
100-func R (d) = ("acresStakedTimeByUser_" + d)
87+func K (L,M) = valueOrErrorMessage(addressFromString(L[M]), ("Rest cfg doesn't contain address at index " + toString(M)))
10188
10289
103-let S = 0
90+let N = addressFromStringValue(valueOrElse(getString(this, H()), s))
10491
105-func T () = "resTypesProportions"
92+let L = I(N)
93+
94+let O = K(L, C)
95+
96+let P = K(L, D)
97+
98+let Q = K(L, E)
99+
100+let R = K(L, F)
101+
102+let S = "acresIssuedAmount"
103+
104+let T = "acresAssetId"
105+
106+let U = valueOrErrorMessage(getBinary(R, T), "ACRES is not issued yet")
107+
108+func V (d) = ("acresStakedTimeByUser_" + d)
106109
107110
108-func U (V) = ("stakedPiecesByOwner_" + V)
111+let W = 0
112+
113+let X = 2
114+
115+func Y (A) = ("finishBlockFor_" + A)
109116
110117
111-func W (X) = {
112- let p = X
113- if ($isInstanceOf(p, "Int"))
118+func Z () = "resTypesProportions"
119+
120+
121+func aa (ab) = ("stakedPiecesByOwner_" + ab)
122+
123+
124+func ac (ad) = {
125+ let r = ad
126+ if ($isInstanceOf(r, "Int"))
114127 then {
115- let Y = p
116- Y
128+ let ae = r
129+ ae
117130 }
118131 else throw("fail to cast into Int")
119132 }
120133
121134
122-func Z (aa) = {
123- let p = aa
124- if ($isInstanceOf(p, "(Int, Int)"))
135+func af (ag) = {
136+ let r = ag
137+ if ($isInstanceOf(r, "(Int, Int)"))
125138 then {
126- let ab = p
127- ab
139+ let ah = r
140+ ah
128141 }
129142 else throw("fail to cast into (Int, Int)")
130143 }
131144
132145
133-func ac (ad) = {
134- let ae = split(valueOrElse(getString(K, T()), "0_0_0_0_0_0"), "_")
135- func af (ag,ah) = (ag + parseIntValue(ah))
146+func ai (d) = ("lastTxIdByUser_" + d)
136147
137- let ai = {
138- let aj = ae
139- let ak = size(aj)
140- let al = 0
141- func am (an,ao) = if ((ao >= ak))
142- then an
143- else af(an, aj[ao])
144148
145- func ap (an,ao) = if ((ao >= ak))
146- then an
149+func aj (ak) = {
150+ let al = split(valueOrElse(getString(O, Z()), "0_0_0_0_0_0"), "_")
151+ func am (an,ao) = (an + parseIntValue(ao))
152+
153+ let ap = {
154+ let aq = al
155+ let ar = size(aq)
156+ let as = 0
157+ func at (au,av) = if ((av >= ar))
158+ then au
159+ else am(au, aq[av])
160+
161+ func aw (au,av) = if ((av >= ar))
162+ then au
147163 else throw("List size exceeds 6")
148164
149- ap(am(am(am(am(am(am(al, 0), 1), 2), 3), 4), 5), 6)
165+ aw(at(at(at(at(at(at(as, 0), 1), 2), 3), 4), 5), 6)
150166 }
151- let aq = valueOrElse(getInteger(K, U(ad)), 0)
152-[ai, aq]
167+ let ax = valueOrElse(getInteger(O, aa(ak)), 0)
168+[ap, ax]
153169 }
154170
155171
156-func ar (aa,as) = {
157- let at = pow(10, 0, as, 0, 0, DOWN)
158- let au = toString((aa % at))
159- let av = drop(toString(at), (1 + size(au)))
160- (((toString((aa / at)) + ".") + av) + au)
172+func ay (ag,az) = {
173+ let aA = pow(10, 0, az, 0, 0, DOWN)
174+ let aB = toString((ag % aA))
175+ let aC = drop(toString(aA), (1 + size(aB)))
176+ (((toString((ag / aA)) + ".") + aC) + aB)
161177 }
162178
163179
164-func aw (aa,ax) = {
165- let ay = toString(aa)
166- let av = drop(toString(pow(10, 0, (ax - size(ay)), 0, 0, DOWN)), 1)
167- (av + ay)
180+func aD (ag,aE) = {
181+ let aF = toString(ag)
182+ let aC = drop(toString(pow(10, 0, (aE - size(aF)), 0, 0, DOWN)), 1)
183+ (aC + aF)
168184 }
169185
170186
171-let az = 10000000
187+func aG (aH,aI,aJ) = if ((0 >= aH))
188+ then throw("maxValue should be > 0")
189+ else {
190+ let aK = sha256((aI + aJ))
191+ (toInt(aK) % aH)
192+ }
172193
173-let aA = "3P2NGX4Q5nge1MCauwQW5aqYLdkccSGj1Ep_3P2xFAHW9yhyNohYozWd4HFhEXZu3bsNSoR_3P2yKaZ2gvn9Xe5tti81a7P9LZhHgjvToV9_3P37zQ3cf2ecu55RmJqEiGSivdzN9avt3m9_3P4az6dtzsvGCWFAxa94UdevKzXyEwxEiFG_3P4kZU6X3TTLFcSUe55JSy8BySqitcPgMBz_3P5hCxBEh3NgNizZhNBreyBSqtbhJYLkKPD_3P7HLvucy11yxyMJUwjzXFHHKMEDwi1EwfC_3P8JuaqH9PTQAv8D5HBGgQfKauLTYt2NQft_3P9gTDB4rtDEVbpX3asU63H4Zinh2EnTmZE_3P9iN3qrtfJicUVy7amZeVsetVD3vUMk8be_3PCa2BsAa6JBLirszQfV5r9fJrujfhwtwfP_3PD3i4XN8KtygcFx4ry5M7UGqdfH8VYvtRT_3PDEMnnJNc2kx9cPEmvVvhXUr8SvhANKhsa_3PDGE9tKQizaeZFeDDq5aYSv89nwYbfirpZ_3PDMKQTCrUPZECVXEJJ8m1sHtutSu1naSf1_3PGh2Qu6Yvx8GTCRRVNvBUVZLdaidYSaxo5_3PKkmAtbSK5D2hQdo1RfEg8eXyMbDcRUc92_3PLMnbxzssP8W8E8XjJ1RLBBg8UZL8Cz3P2_3PMuxo4PCAox9s4a7R1eszh4iqqu8gS7jHv_3PNrMtEQChw87WZU1JAJ7aGHykCa8TjnDNK_3PPuBXfWoBy3EEory7c7vgi9Usjka7o5tBj_3PQwyeyEhT4Y6aGAL6tg73aQWJtV1zRt3nR_3PRGDShuMGb84MJtTJvtTg8qDfswkYWcm3e"
174194
175-let aB = 4970178
195+let aL = 10000000
176196
177-let aC = {
178- let p = n
179- if ((base58'2W' == p))
197+let aM = "3P2NGX4Q5nge1MCauwQW5aqYLdkccSGj1Ep_3P2xFAHW9yhyNohYozWd4HFhEXZu3bsNSoR_3P2yKaZ2gvn9Xe5tti81a7P9LZhHgjvToV9_3P37zQ3cf2ecu55RmJqEiGSivdzN9avt3m9_3P4az6dtzsvGCWFAxa94UdevKzXyEwxEiFG_3P4kZU6X3TTLFcSUe55JSy8BySqitcPgMBz_3P5hCxBEh3NgNizZhNBreyBSqtbhJYLkKPD_3P7HLvucy11yxyMJUwjzXFHHKMEDwi1EwfC_3P8JuaqH9PTQAv8D5HBGgQfKauLTYt2NQft_3P9gTDB4rtDEVbpX3asU63H4Zinh2EnTmZE_3P9iN3qrtfJicUVy7amZeVsetVD3vUMk8be_3PCa2BsAa6JBLirszQfV5r9fJrujfhwtwfP_3PD3i4XN8KtygcFx4ry5M7UGqdfH8VYvtRT_3PDEMnnJNc2kx9cPEmvVvhXUr8SvhANKhsa_3PDGE9tKQizaeZFeDDq5aYSv89nwYbfirpZ_3PDMKQTCrUPZECVXEJJ8m1sHtutSu1naSf1_3PGh2Qu6Yvx8GTCRRVNvBUVZLdaidYSaxo5_3PKkmAtbSK5D2hQdo1RfEg8eXyMbDcRUc92_3PLMnbxzssP8W8E8XjJ1RLBBg8UZL8Cz3P2_3PMuxo4PCAox9s4a7R1eszh4iqqu8gS7jHv_3PNrMtEQChw87WZU1JAJ7aGHykCa8TjnDNK_3PPuBXfWoBy3EEory7c7vgi9Usjka7o5tBj_3PQwyeyEhT4Y6aGAL6tg73aQWJtV1zRt3nR_3PRGDShuMGb84MJtTJvtTg8qDfswkYWcm3e"
198+
199+let aN = 4970178
200+
201+let aO = {
202+ let r = p
203+ if ((base58'2W' == r))
180204 then 1700524800000
181- else if ((base58'2T' == p))
205+ else if ((base58'2T' == r))
182206 then 1700420400000
183207 else throw("Unknown chain")
184208 }
185209
186-let aD = {
187- let p = n
188- if ((base58'2W' == p))
210+let aP = {
211+ let r = p
212+ if ((base58'2W' == r))
189213 then 1701043199999
190- else if ((base58'2T' == p))
214+ else if ((base58'2T' == r))
191215 then 1700496000000
192216 else throw("Unknown chain")
193217 }
194218
195-func aE (d) = contains(aA, d)
219+let aQ = [1, 3, 5, 20]
220+
221+let aR = [500000000, 200000000, 100000000, 20000000]
222+
223+func aS (d) = contains(aM, d)
196224
197225
198-func aF () = W(reentrantInvoke(K, "saveLastTx", nil, nil))
226+func aT () = ac(reentrantInvoke(O, "saveLastTx", nil, nil))
199227
200228
201-func aG (d,aH,aI) = {
202- let aJ = (lastBlock.timestamp - aI)
203- let aK = fraction(aJ, (i * aH), (b * u))
204- let aL = W(invoke(L, "sellResourcesWorldREADONLY", [aK], nil))
205- let aM = max([0, aL])
206- (aM * j)
229+func aU (d,aV,aW) = {
230+ let aX = (lastBlock.timestamp - aW)
231+ let aY = fraction(aX, (i * aV), (b * x))
232+ let aZ = ac(invoke(P, "sellResourcesWorldREADONLY", [aY], nil))
233+ let ba = max([0, aZ])
234+ (ba * j)
207235 }
208236
209237
210-func aN (d,aH,aI) = {
211- let aJ = (lastBlock.timestamp - aI)
212- if ((0 > aJ))
213- then throw(((("Saved timestamp is in future, saved = " + toString(aI)) + ", current = ") + toString(lastBlock.timestamp)))
238+func bb (d,aV,aW) = {
239+ let aX = (lastBlock.timestamp - aW)
240+ if ((0 > aX))
241+ then throw(((("Saved timestamp is in future, saved = " + toString(aW)) + ", current = ") + toString(lastBlock.timestamp)))
214242 else {
215- let aK = fraction(aJ, (i * aH), (b * u))
216- let aL = W(invoke(L, "sellResourcesWorldREADONLY", [aK], nil))
217- let aM = if ((0 >= aL))
243+ let aY = fraction(aX, (i * aV), (b * x))
244+ let aZ = ac(invoke(P, "sellResourcesWorldREADONLY", [aY], nil))
245+ let ba = if ((0 >= aZ))
218246 then 0
219- else Z(invoke(L, "sellResourcesWorld", [d, aK], nil))._1
220- (aM * j)
247+ else af(invoke(P, "sellResourcesWorld", [d, aY], nil))._1
248+ (ba * j)
221249 }
222250 }
223251
224252
225-func aO (aP,aQ,aR,aS) = {
226- let aT = lastBlock.timestamp
227- let aU = max([0, (aQ - aT)])
228- let aV = max([0, (aS - aT)])
229- let aW = (aP + aR)
230- let aX = if ((aW == 0))
253+func bc (bd,be,bf,bg) = {
254+ let bh = lastBlock.timestamp
255+ let bi = max([0, (be - bh)])
256+ let bj = max([0, (bg - bh)])
257+ let bk = (bd + bf)
258+ let bl = if ((bk == 0))
231259 then 0
232- else (fraction(aU, aP, aW) + fraction(aV, aR, aW))
233- (aT + aX)
260+ else (fraction(bi, bd, bk) + fraction(bj, bf, bk))
261+ (bh + bl)
234262 }
235263
236264
237-@Callable(aY)
238-func constructorV1 (aZ,ba) = if ((aY.caller != this))
265+@Callable(bm)
266+func constructorV1 (bn,bo) = if ((bm.caller != this))
239267 then throw("Permission denied")
240- else if (isDefined(getBinary(P)))
268+ else if (isDefined(getBinary(T)))
241269 then throw("Already initialized")
242270 else {
243- let bb = (ac("")[S] + ba)
244- let bc = (a - (bb * u))
245- let bd = Issue("ACRES", "WavesLands land acres investment token", bc, 8, false, unit, 0)
246- let be = calculateAssetId(bd)
247-[bd, IntegerEntry(O, bc), BinaryEntry(P, be), StringEntry(D(), aZ)]
271+ let bp = (aj("")[W] + bo)
272+ let bq = (a - (bp * x))
273+ let br = Issue("ACRES", "WavesLands land acres investment token", bq, 8, false, unit, 0)
274+ let bs = calculateAssetId(br)
275+[br, IntegerEntry(S, bq), BinaryEntry(T, bs), StringEntry(H(), bn)]
248276 }
249277
250278
251279
252-@Callable(aY)
253-func unstakeAcres (bf) = {
254- let bg = aF()
255- if ((bg == bg))
256- then if ((0 >= bf))
280+@Callable(bm)
281+func unstakeAcres (bt) = {
282+ let bu = aT()
283+ if ((bu == bu))
284+ then if ((0 >= bt))
257285 then throw("Amount should be positive")
258286 else {
259- let w = toString(aY.caller)
260- if ((size(aY.payments) != 0))
287+ let A = toString(bm.caller)
288+ if ((size(bm.payments) != 0))
261289 then throw("No payments required")
262290 else {
263- let bh = R(w)
264- let bi = c(w)
265- let bj = valueOrElse(getInteger(bi), 0)
266- if ((bf > bj))
267- then throw(((("You have only " + ar(bj, 8)) + " ACRES staked, tried to unstake ") + ar(bf, 8)))
291+ let bv = V(A)
292+ let bw = c(A)
293+ let bx = valueOrElse(getInteger(bw), 0)
294+ if ((bt > bx))
295+ then throw(((("You have only " + ay(bx, 8)) + " ACRES staked, tried to unstake ") + ay(bt, 8)))
268296 else {
269- let bk = valueOrElse(getInteger(e(w)), 0)
270- let bl = valueOrElse(getInteger(f(w)), 0)
271- let aT = lastBlock.timestamp
272- if (if ((aT >= aC))
273- then (aD >= aT)
297+ let by = valueOrElse(getInteger(e(A)), 0)
298+ let bz = valueOrElse(getInteger(f(A)), 0)
299+ let bh = lastBlock.timestamp
300+ if (if ((bh >= aO))
301+ then (aP >= bh)
274302 else false)
275303 then throw("You cannot unstake ACRES during Promo2")
276304 else {
277- let bm = if (aE(w))
278- then ((bj - bk) - aB)
279- else (bj - bk)
280- if (if ((bl > aT))
281- then (bf > bm)
305+ let bA = if (aS(A))
306+ then ((bx - by) - aN)
307+ else (bx - by)
308+ if (if ((bz > bh))
309+ then (bt > bA)
282310 else false)
283- then throw(((("Only " + ar(bm, 8)) + " ACRES can be unstaked now, wait until ") + toString(bl)))
311+ then throw(((("Only " + ay(bA, 8)) + " ACRES can be unstaked now, wait until ") + toString(bz)))
284312 else {
285- let bn = valueOrElse(getInteger(g), 0)
286- let bo = invoke(M, "onStakeUnstakeLand", [w], nil)
287- let bp = aN(w, bj, valueOrElse(getInteger(bh), 0))
288- $Tuple2([IntegerEntry(bh, lastBlock.timestamp), IntegerEntry(bi, (bj - bf)), IntegerEntry(g, (bn - bf)), ScriptTransfer(aY.caller, (bf + bp), Q)], $Tuple2(bg, bo))
313+ let bB = valueOrElse(getInteger(g), 0)
314+ let bC = invoke(Q, "onStakeUnstakeLand", [A], nil)
315+ let bD = bb(A, bx, valueOrElse(getInteger(bv), 0))
316+ $Tuple2([IntegerEntry(bv, lastBlock.timestamp), IntegerEntry(bw, (bx - bt)), IntegerEntry(g, (bB - bt)), ScriptTransfer(bm.caller, (bt + bD), U)], $Tuple2(bu, bC))
289317 }
290318 }
291319 }
296324
297325
298326
299-@Callable(aY)
327+@Callable(bm)
300328 func stakeAcres () = {
301- let bg = aF()
302- if ((bg == bg))
329+ let bu = aT()
330+ if ((bu == bu))
303331 then {
304- let w = toString(aY.caller)
305- if ((size(aY.payments) != 1))
332+ let A = toString(bm.caller)
333+ if ((size(bm.payments) != 1))
306334 then throw("exactly 1 payment must be attached")
307335 else {
308- let bq = aY.payments[0]
309- let br = bq.amount
310- if (if (!(isDefined(bq.assetId)))
336+ let bE = bm.payments[0]
337+ let bF = bE.amount
338+ if (if (!(isDefined(bE.assetId)))
311339 then true
312- else (value(bq.assetId) != Q))
340+ else (value(bE.assetId) != U))
313341 then throw("ACRES payments only!")
314342 else {
315- let bo = invoke(M, "onStakeUnstakeLand", [w], nil)
316- if ((bo == bo))
343+ let bC = invoke(Q, "onStakeUnstakeLand", [A], nil)
344+ if ((bC == bC))
317345 then {
318- let aT = lastBlock.timestamp
319- if (if ((aC > aT))
346+ let bh = lastBlock.timestamp
347+ if (if ((aO > bh))
320348 then true
321- else (aT > aD))
349+ else (bh > aP))
322350 then {
323- let bh = R(w)
324- let bi = c(w)
325- let bj = valueOrElse(getInteger(bi), 0)
326- let bn = valueOrElse(getInteger(g), 0)
327- let bp = aN(w, bj, valueOrElse(getInteger(bh), 0))
328- $Tuple2(((((if ((bp == 0))
351+ let bv = V(A)
352+ let bw = c(A)
353+ let bx = valueOrElse(getInteger(bw), 0)
354+ let bB = valueOrElse(getInteger(g), 0)
355+ let bD = bb(A, bx, valueOrElse(getInteger(bv), 0))
356+ $Tuple2(((((if ((bD == 0))
329357 then nil
330- else [ScriptTransfer(aY.caller, bp, Q)]) :+ IntegerEntry(bh, lastBlock.timestamp)) :+ IntegerEntry(bi, (bj + br))) :+ IntegerEntry(g, (bn + br))), $Tuple2(bg, bo))
358+ else [ScriptTransfer(bm.caller, bD, U)]) :+ IntegerEntry(bv, lastBlock.timestamp)) :+ IntegerEntry(bw, (bx + bF))) :+ IntegerEntry(g, (bB + bF))), $Tuple2(bu, bC))
331359 }
332- else if ((az > br))
333- then throw((("Min staked amount during promo action should be at least " + ar(az, 8)) + " ACRES"))
360+ else if ((aL > bF))
361+ then throw((("Min staked amount during promo action should be at least " + ay(aL, 8)) + " ACRES"))
334362 else {
335- let bs = invoke(this, "sendLockedAcres", [w, br, 30], nil)
336- let bt = valueOrElse(getString(r), "")
337- let bu = if (contains(bt, w))
363+ let bG = invoke(this, "sendLockedAcres", [A, bF, 30], nil)
364+ let bH = valueOrElse(getString(t), "")
365+ let bI = if (contains(bH, A))
338366 then {
339- let bv = split_51C(bt, w)
340- let aP = parseIntValue(take(drop(bv[1], 1), 14))
341- ((((bv[0] + w) + ":") + aw((aP + br), 14)) + drop(bv[1], 15))
367+ let bJ = split_51C(bH, A)
368+ let bd = parseIntValue(take(drop(bJ[1], 1), 14))
369+ ((((bJ[0] + A) + ":") + aD((bd + bF), 14)) + drop(bJ[1], 15))
342370 }
343371 else {
344- let bw = ((w + ":") + aw(br, 14))
345- if ((bt == ""))
346- then bw
347- else ((bt + "_") + bw)
372+ let bK = ((A + ":") + aD(bF, 14))
373+ if ((bH == ""))
374+ then bK
375+ else ((bH + "_") + bK)
348376 }
349- $Tuple2([StringEntry(r, bu)], $Tuple3(bg, bo, bs))
377+ $Tuple2([StringEntry(t, bI)], $Tuple3(bu, bC, bG))
350378 }
351379 }
352380 else throw("Strict value is not equal to itself.")
358386
359387
360388
361-@Callable(aY)
389+@Callable(bm)
362390 func buyAcres () = {
363- let bg = aF()
364- if ((bg == bg))
391+ let bu = aT()
392+ if ((bu == bu))
365393 then {
366- let w = toString(aY.caller)
367- if ((size(aY.payments) != 1))
394+ let A = toString(bm.caller)
395+ if ((size(bm.payments) != 1))
368396 then throw("exactly 1 payment must be attached")
369397 else {
370- let bq = aY.payments[0]
371- let br = bq.amount
372- if (if (!(isDefined(bq.assetId)))
398+ let bE = bm.payments[0]
399+ let bF = bE.amount
400+ if (if (!(isDefined(bE.assetId)))
373401 then true
374- else (value(bq.assetId) != o))
402+ else (value(bE.assetId) != q))
375403 then throw("USDT payments only!")
376- else if ((t > br))
377- then throw((("Min payment should be " + ar(t, 6)) + " USDT"))
404+ else if ((w > bF))
405+ then throw((("Min payment should be " + ay(w, 6)) + " USDT"))
378406 else {
379- let aH = (br * j)
380- let bx = W(invoke(K, "updateAccStats", [w, fraction(h, aH, (25 * u))], nil))
381- $Tuple2([ScriptTransfer(L, br, o), ScriptTransfer(aY.caller, aH, Q)], $Tuple2(bg, bx))
407+ let aV = (bF * j)
408+ let bL = ac(invoke(O, "updateAccStats", [A, fraction(h, aV, (25 * x))], nil))
409+ $Tuple2([ScriptTransfer(P, bF, q), ScriptTransfer(bm.caller, aV, U)], $Tuple2(bu, bL))
382410 }
383411 }
384412 }
387415
388416
389417
390-@Callable(aY)
391-func sendAcres (d,bf) = if ((aY.caller != L))
418+@Callable(bm)
419+func sendAcres (d,bt) = if ((bm.caller != P))
392420 then throw("Permission denied")
393- else $Tuple2([ScriptTransfer(addressFromStringValue(d), bf, Q)], bf)
421+ else $Tuple2([ScriptTransfer(addressFromStringValue(d), bt, U)], bt)
394422
395423
396424
397-@Callable(aY)
398-func sendLockedAcres (d,bf,by) = if (if ((aY.caller != this))
399- then (aY.caller != J)
425+@Callable(bm)
426+func sendLockedAcres (d,bt,bM) = if (if ((bm.caller != this))
427+ then (bm.caller != N)
400428 else false)
401429 then throw("Permission denied")
402430 else {
403- let aT = lastBlock.timestamp
404- let bh = R(d)
405- let bi = c(d)
406- let bj = valueOrElse(getInteger(bi), 0)
407- let bn = valueOrElse(getInteger(g), 0)
408- let bz = valueOrElse(getInteger(bh), aT)
409- let bA = f(d)
410- let bB = e(d)
411- let bC = valueOrElse(getInteger(bB), 0)
412- let bD = valueOrElse(getInteger(bA), 0)
413- let bE = aO(bC, bD, bf, (aT + (by * b)))
414- $Tuple2([IntegerEntry(bh, bz), IntegerEntry(bi, (bj + bf)), IntegerEntry(g, (bn + bf)), IntegerEntry(bA, bE), IntegerEntry(bB, (bC + bf))], bf)
431+ let bh = lastBlock.timestamp
432+ let bv = V(d)
433+ let bw = c(d)
434+ let bx = valueOrElse(getInteger(bw), 0)
435+ let bB = valueOrElse(getInteger(g), 0)
436+ let bN = valueOrElse(getInteger(bv), bh)
437+ let bO = f(d)
438+ let bP = e(d)
439+ let bQ = valueOrElse(getInteger(bP), 0)
440+ let bR = valueOrElse(getInteger(bO), 0)
441+ let bS = bc(bQ, bR, bt, (bh + (bM * b)))
442+ $Tuple2([IntegerEntry(bv, bN), IntegerEntry(bw, (bx + bt)), IntegerEntry(g, (bB + bt)), IntegerEntry(bO, bS), IntegerEntry(bP, (bQ + bt))], bt)
415443 }
416444
417445
418446
419-@Callable(aY)
420-func burnAcres (bf) = if ((aY.caller != K))
447+@Callable(bm)
448+func burnAcres (bt) = if ((bm.caller != O))
421449 then throw("Permission denied")
422450 else {
423- let bF = (valueOrElse(getInteger(O), 0) - bf)
424- if ((0 > bF))
451+ let bT = (valueOrElse(getInteger(S), 0) - bt)
452+ if ((0 > bT))
425453 then throw("Attempt to burn more ACRES, than exists")
426- else $Tuple2([Burn(Q, bf), IntegerEntry(O, bF)], bf)
454+ else $Tuple2([Burn(U, bt), IntegerEntry(S, bT)], bt)
427455 }
428456
429457
430458
431-@Callable(aY)
459+@Callable(bm)
432460 func claimAcres () = {
433- let bg = aF()
434- if ((bg == bg))
461+ let bu = aT()
462+ if ((bu == bu))
435463 then {
436- let w = toString(aY.caller)
437- if ((size(aY.payments) != 0))
464+ let A = toString(bm.caller)
465+ if ((size(bm.payments) != 0))
438466 then throw("No payments required")
439467 else {
440- let bh = R(w)
441- let bi = c(w)
442- let aH = valueOrElse(getInteger(bi), 0)
443- let bo = invoke(M, "onStakeUnstakeLand", [w], nil)
444- let bp = aN(w, aH, valueOrElse(getInteger(bh), 0))
445- $Tuple2([IntegerEntry(bh, lastBlock.timestamp), ScriptTransfer(aY.caller, bp, Q)], $Tuple2(bg, bo))
468+ let bv = V(A)
469+ let bw = c(A)
470+ let aV = valueOrElse(getInteger(bw), 0)
471+ let bC = invoke(Q, "onStakeUnstakeLand", [A], nil)
472+ let bD = bb(A, aV, valueOrElse(getInteger(bv), 0))
473+ $Tuple2([IntegerEntry(bv, lastBlock.timestamp), ScriptTransfer(bm.caller, bD, U)], $Tuple2(bu, bC))
446474 }
447475 }
448476 else throw("Strict value is not equal to itself.")
450478
451479
452480
453-@Callable(aY)
454-func claimAcresREADONLY (w) = {
455- let bh = R(w)
456- let bi = c(w)
457- let aH = valueOrElse(getInteger(bi), 0)
458- let bG = valueOrElse(getInteger(bh), 0)
459- let bp = aG(w, aH, bG)
460- $Tuple2(nil, [bp, bG])
481+@Callable(bm)
482+func claimAcresREADONLY (A) = {
483+ let bv = V(A)
484+ let bw = c(A)
485+ let aV = valueOrElse(getInteger(bw), 0)
486+ let bU = valueOrElse(getInteger(bv), 0)
487+ let bD = aU(A, aV, bU)
488+ $Tuple2(nil, [bD, bU])
461489 }
462490
463491
464492
465-@Callable(aY)
493+@Callable(bm)
466494 func claimPromo2 () = {
467- let bg = aF()
468- if ((bg == bg))
495+ let bu = aT()
496+ if ((bu == bu))
469497 then {
470- let w = toString(aY.caller)
471- if ((size(aY.payments) != 0))
498+ let A = toString(bm.caller)
499+ if ((size(bm.payments) != 0))
472500 then throw("No payments required")
473501 else {
474- let aT = lastBlock.timestamp
475- if ((aD > aT))
502+ let bh = lastBlock.timestamp
503+ if ((aP > bh))
476504 then throw("Promo 2 is not over yet")
477505 else {
478- let bH = k(2, w)
479- if (valueOrElse(getBoolean(bH), false))
480- then throw((("Your wallet " + w) + " is already awarded in promo 2"))
506+ let bV = k(2, A)
507+ if (valueOrElse(getBoolean(bV), false))
508+ then throw((("Your wallet " + A) + " is already awarded in promo 2"))
481509 else {
482- let bt = valueOrElse(getString(r), "")
483- if (!(contains(bt, w)))
510+ let bH = valueOrElse(getString(t), "")
511+ if (!(contains(bH, A)))
484512 then throw("You are not participant of promo 2")
485513 else {
486- let bv = split_51C(bt, w)
487- let aH = parseIntValue(take(drop(bv[1], 1), 14))
488- let bI = (aH / az)
489- let bJ = valueOrElse(getInteger(m(2)), 0)
490- let bK = if ((bJ == 0))
514+ let bJ = split_51C(bH, A)
515+ let aV = parseIntValue(take(drop(bJ[1], 1), 14))
516+ let bW = (aV / aL)
517+ let bX = valueOrElse(getInteger(m(2)), 0)
518+ let bY = if ((bX == 0))
491519 then {
492- func bL (ag,bM) = (ag + parseIntValue(split(bM, ":")[1]))
520+ func bZ (an,ca) = (an + (parseIntValue(split(ca, ":")[1]) / aL))
493521
494- let bN = {
495- let aj = split_51C(bt, "_")
496- let ak = size(aj)
497- let al = 0
498- func am (an,ao) = if ((ao >= ak))
499- then an
500- else bL(an, aj[ao])
522+ let cb = {
523+ let aq = split_51C(bH, "_")
524+ let ar = size(aq)
525+ let as = 0
526+ func at (au,av) = if ((av >= ar))
527+ then au
528+ else bZ(au, aq[av])
501529
502- func ap (an,ao) = if ((ao >= ak))
503- then an
530+ func aw (au,av) = if ((av >= ar))
531+ then au
504532 else throw("List size exceeds 50")
505533
506- ap(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(al, 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)
534+ aw(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(as, 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)
507535 }
508- $Tuple2([IntegerEntry(m(2), bN)], bN)
536+ $Tuple2([IntegerEntry(m(2), cb), IntegerEntry(n(2, 1), cb)], cb)
509537 }
510- else $Tuple2(nil, bJ)
511- let bO = bK._1
512- let bP = bK._2
513- let bQ = fraction(bI, az, bP)
514- let bs = invoke(this, "sendLockedAcres", [w, bQ, 30], nil)
515- $Tuple2((bO :+ BooleanEntry(bH, true)), bs)
538+ else $Tuple2(nil, bX)
539+ let cc = bY._1
540+ let cd = bY._2
541+ let ce = fraction(bW, aL, cd)
542+ let bG = invoke(this, "sendLockedAcres", [A, ce, 30], nil)
543+ $Tuple2(((cc :+ BooleanEntry(bV, true)) :+ StringEntry(u(1), bH)), bG)
516544 }
517545 }
518546 }
522550 }
523551
524552
553+
554+@Callable(bm)
555+func commitForPromo2Round (o) = if ((bm.caller != this))
556+ then throw("Permission denied")
557+ else if (if ((1 > o))
558+ then true
559+ else (o > 4))
560+ then throw(("Invalid roundId: " + toString(o)))
561+ else {
562+ let cf = (height + X)
563+ $Tuple2([IntegerEntry(Y(("2_" + toString(o))), cf)], cf)
564+ }
565+
566+
567+
568+@Callable(bm)
569+func drawPromo2Round (o) = if ((bm.caller != this))
570+ then throw("Permission denied")
571+ else if (if ((1 > o))
572+ then true
573+ else (o > 4))
574+ then throw(("Invalid roundId: " + toString(o)))
575+ else {
576+ let cg = Y(("2_" + toString(o)))
577+ let cf = valueOrErrorMessage(getInteger(cg), "You have to commitForPromo2Round(roundId) first!")
578+ if ((cf > height))
579+ then throw(("Random number is not ready yet, wait until height = " + toString(cf)))
580+ else {
581+ let aH = valueOrElse(getInteger(n(2, o)), 0)
582+ if ((aH == 0))
583+ then throw("Please call claimPromo2() at least once")
584+ else {
585+ let aJ = value(value(blockInfoByHeight(cf)).vrf)
586+ let aI = bm.transactionId
587+ let bH = valueOrElse(getString(u(o)), "")
588+ func ch (ci,cj) = if ((cj > aQ[(o - 1)]))
589+ then ci
590+ else {
591+ let ck = aG(ci._1, ci._2, aJ)
592+ let cl = if ((ci._3 == ""))
593+ then nil
594+ else split_51C(ci._3, "_")
595+ func bZ (an,ca) = {
596+ let bJ = split(ca, ":")
597+ let d = bJ[0]
598+ let bW = (parseIntValue(bJ[1]) / aL)
599+ let cm = (an._1 + bW)
600+ if (if ((an._3 == ""))
601+ then (cm > ck)
602+ else false)
603+ then $Tuple3(cm, bW, d)
604+ else $Tuple3(cm, an._2, an._3)
605+ }
606+
607+ let cn = {
608+ let aq = cl
609+ let ar = size(aq)
610+ let as = $Tuple3(0, 0, "")
611+ func at (au,av) = if ((av >= ar))
612+ then au
613+ else bZ(au, aq[av])
614+
615+ func aw (au,av) = if ((av >= ar))
616+ then au
617+ else throw("List size exceeds 50")
618+
619+ aw(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(as, 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)
620+ }
621+ let co = cn._3
622+ if ((co == ""))
623+ then throw("no winner")
624+ else {
625+ let cp = split_51C(ci._3, co)
626+ let cq = (cp[0] + drop(cp[1], 15))
627+ let bG = invoke(this, "sendLockedAcres", [co, aR[(o - 1)], 30], nil)
628+ $Tuple4((ci._1 - cn._2), fromBase58String(getStringValue(O, ai(co))), cq, (ci._4 :+ bG))
629+ }
630+ }
631+
632+ let cr = {
633+ let aq = y
634+ let ar = size(aq)
635+ let as = $Tuple4(aH, bm.transactionId, bH, nil)
636+ func at (au,av) = if ((av >= ar))
637+ then au
638+ else ch(au, aq[av])
639+
640+ func aw (au,av) = if ((av >= ar))
641+ then au
642+ else throw("List size exceeds 20")
643+
644+ aw(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(as, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
645+ }
646+ $Tuple2([DeleteEntry(cg), StringEntry(u((o + 1)), cr._3), IntegerEntry(n(2, (o + 1)), cr._1)], cr._4)
647+ }
648+ }
649+ }
650+
651+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000000000
55
66 let b = 86400000
77
88 func c (d) = ("acresStakedAmountByUser_" + d)
99
1010
1111 func e (d) = ("acresLockedAmountByUser_" + d)
1212
1313
1414 func f (d) = ("acresLockedEtaByUser_" + d)
1515
1616
1717 let g = "acresStakedAmountTotal"
1818
1919 let h = 5000000
2020
2121 let i = 3456000
2222
2323 let j = 10
2424
2525 func k (l,d) = makeString(["%s%d%s__isAwardedByPromoAndUser", toString(l), d], "__")
2626
2727
2828 func m (l) = ("%s%d__ticketsTotalByPromo__" + toString(l))
2929
3030
31-let n = take(drop(this.bytes, 1), 1)
31+func n (l,o) = makeString(["%s%d%d__ticketsTotalByPromoAndRound", toString(l), toString(o)], "__")
3232
33-let o = {
34- let p = n
35- if ((base58'2W' == p))
33+
34+let p = take(drop(this.bytes, 1), 1)
35+
36+let q = {
37+ let r = p
38+ if ((base58'2W' == r))
3639 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
37- else if ((base58'2T' == p))
40+ else if ((base58'2T' == r))
3841 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
3942 else throw("Unknown chain")
4043 }
4144
42-let q = {
43- let p = n
44- if ((base58'2W' == p))
45+let s = {
46+ let r = p
47+ if ((base58'2W' == r))
4548 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
46- else if ((base58'2T' == p))
49+ else if ((base58'2T' == r))
4750 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
4851 else throw("Unknown chain")
4952 }
5053
51-let r = "promo2Map"
54+let t = "promo2Map"
5255
53-let s = "__"
54-
55-let t = 1000000
56-
57-let u = 100000000
58-
59-func v (w,x) = valueOrErrorMessage(getString(w, x), makeString(["mandatory ", toString(w), ".", x, " is not defined"], ""))
56+func u (o) = ("promo2MapForRound__" + toString(o))
6057
6158
62-let y = 1
59+let v = "__"
6360
64-let z = 2
61+let w = 1000000
6562
66-let A = 4
63+let x = 100000000
6764
68-let B = 8
65+let y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
6966
70-func C () = "%s__restConfig"
67+func z (A,B) = valueOrErrorMessage(getString(A, B), makeString(["mandatory ", toString(A), ".", B, " is not defined"], ""))
7168
7269
73-func D () = "%s__restAddr"
70+let C = 1
71+
72+let D = 2
73+
74+let E = 4
75+
76+let F = 8
77+
78+func G () = "%s__restConfig"
7479
7580
76-func E (F) = split_4C(v(F, C()), s)
81+func H () = "%s__restAddr"
7782
7883
79-func G (H,I) = valueOrErrorMessage(addressFromString(H[I]), ("Rest cfg doesn't contain address at index " + toString(I)))
84+func I (J) = split_4C(z(J, G()), v)
8085
8186
82-let J = addressFromStringValue(valueOrElse(getString(this, D()), q))
83-
84-let H = E(J)
85-
86-let K = G(H, y)
87-
88-let L = G(H, z)
89-
90-let M = G(H, A)
91-
92-let N = G(H, B)
93-
94-let O = "acresIssuedAmount"
95-
96-let P = "acresAssetId"
97-
98-let Q = valueOrErrorMessage(getBinary(N, P), "ACRES is not issued yet")
99-
100-func R (d) = ("acresStakedTimeByUser_" + d)
87+func K (L,M) = valueOrErrorMessage(addressFromString(L[M]), ("Rest cfg doesn't contain address at index " + toString(M)))
10188
10289
103-let S = 0
90+let N = addressFromStringValue(valueOrElse(getString(this, H()), s))
10491
105-func T () = "resTypesProportions"
92+let L = I(N)
93+
94+let O = K(L, C)
95+
96+let P = K(L, D)
97+
98+let Q = K(L, E)
99+
100+let R = K(L, F)
101+
102+let S = "acresIssuedAmount"
103+
104+let T = "acresAssetId"
105+
106+let U = valueOrErrorMessage(getBinary(R, T), "ACRES is not issued yet")
107+
108+func V (d) = ("acresStakedTimeByUser_" + d)
106109
107110
108-func U (V) = ("stakedPiecesByOwner_" + V)
111+let W = 0
112+
113+let X = 2
114+
115+func Y (A) = ("finishBlockFor_" + A)
109116
110117
111-func W (X) = {
112- let p = X
113- if ($isInstanceOf(p, "Int"))
118+func Z () = "resTypesProportions"
119+
120+
121+func aa (ab) = ("stakedPiecesByOwner_" + ab)
122+
123+
124+func ac (ad) = {
125+ let r = ad
126+ if ($isInstanceOf(r, "Int"))
114127 then {
115- let Y = p
116- Y
128+ let ae = r
129+ ae
117130 }
118131 else throw("fail to cast into Int")
119132 }
120133
121134
122-func Z (aa) = {
123- let p = aa
124- if ($isInstanceOf(p, "(Int, Int)"))
135+func af (ag) = {
136+ let r = ag
137+ if ($isInstanceOf(r, "(Int, Int)"))
125138 then {
126- let ab = p
127- ab
139+ let ah = r
140+ ah
128141 }
129142 else throw("fail to cast into (Int, Int)")
130143 }
131144
132145
133-func ac (ad) = {
134- let ae = split(valueOrElse(getString(K, T()), "0_0_0_0_0_0"), "_")
135- func af (ag,ah) = (ag + parseIntValue(ah))
146+func ai (d) = ("lastTxIdByUser_" + d)
136147
137- let ai = {
138- let aj = ae
139- let ak = size(aj)
140- let al = 0
141- func am (an,ao) = if ((ao >= ak))
142- then an
143- else af(an, aj[ao])
144148
145- func ap (an,ao) = if ((ao >= ak))
146- then an
149+func aj (ak) = {
150+ let al = split(valueOrElse(getString(O, Z()), "0_0_0_0_0_0"), "_")
151+ func am (an,ao) = (an + parseIntValue(ao))
152+
153+ let ap = {
154+ let aq = al
155+ let ar = size(aq)
156+ let as = 0
157+ func at (au,av) = if ((av >= ar))
158+ then au
159+ else am(au, aq[av])
160+
161+ func aw (au,av) = if ((av >= ar))
162+ then au
147163 else throw("List size exceeds 6")
148164
149- ap(am(am(am(am(am(am(al, 0), 1), 2), 3), 4), 5), 6)
165+ aw(at(at(at(at(at(at(as, 0), 1), 2), 3), 4), 5), 6)
150166 }
151- let aq = valueOrElse(getInteger(K, U(ad)), 0)
152-[ai, aq]
167+ let ax = valueOrElse(getInteger(O, aa(ak)), 0)
168+[ap, ax]
153169 }
154170
155171
156-func ar (aa,as) = {
157- let at = pow(10, 0, as, 0, 0, DOWN)
158- let au = toString((aa % at))
159- let av = drop(toString(at), (1 + size(au)))
160- (((toString((aa / at)) + ".") + av) + au)
172+func ay (ag,az) = {
173+ let aA = pow(10, 0, az, 0, 0, DOWN)
174+ let aB = toString((ag % aA))
175+ let aC = drop(toString(aA), (1 + size(aB)))
176+ (((toString((ag / aA)) + ".") + aC) + aB)
161177 }
162178
163179
164-func aw (aa,ax) = {
165- let ay = toString(aa)
166- let av = drop(toString(pow(10, 0, (ax - size(ay)), 0, 0, DOWN)), 1)
167- (av + ay)
180+func aD (ag,aE) = {
181+ let aF = toString(ag)
182+ let aC = drop(toString(pow(10, 0, (aE - size(aF)), 0, 0, DOWN)), 1)
183+ (aC + aF)
168184 }
169185
170186
171-let az = 10000000
187+func aG (aH,aI,aJ) = if ((0 >= aH))
188+ then throw("maxValue should be > 0")
189+ else {
190+ let aK = sha256((aI + aJ))
191+ (toInt(aK) % aH)
192+ }
172193
173-let aA = "3P2NGX4Q5nge1MCauwQW5aqYLdkccSGj1Ep_3P2xFAHW9yhyNohYozWd4HFhEXZu3bsNSoR_3P2yKaZ2gvn9Xe5tti81a7P9LZhHgjvToV9_3P37zQ3cf2ecu55RmJqEiGSivdzN9avt3m9_3P4az6dtzsvGCWFAxa94UdevKzXyEwxEiFG_3P4kZU6X3TTLFcSUe55JSy8BySqitcPgMBz_3P5hCxBEh3NgNizZhNBreyBSqtbhJYLkKPD_3P7HLvucy11yxyMJUwjzXFHHKMEDwi1EwfC_3P8JuaqH9PTQAv8D5HBGgQfKauLTYt2NQft_3P9gTDB4rtDEVbpX3asU63H4Zinh2EnTmZE_3P9iN3qrtfJicUVy7amZeVsetVD3vUMk8be_3PCa2BsAa6JBLirszQfV5r9fJrujfhwtwfP_3PD3i4XN8KtygcFx4ry5M7UGqdfH8VYvtRT_3PDEMnnJNc2kx9cPEmvVvhXUr8SvhANKhsa_3PDGE9tKQizaeZFeDDq5aYSv89nwYbfirpZ_3PDMKQTCrUPZECVXEJJ8m1sHtutSu1naSf1_3PGh2Qu6Yvx8GTCRRVNvBUVZLdaidYSaxo5_3PKkmAtbSK5D2hQdo1RfEg8eXyMbDcRUc92_3PLMnbxzssP8W8E8XjJ1RLBBg8UZL8Cz3P2_3PMuxo4PCAox9s4a7R1eszh4iqqu8gS7jHv_3PNrMtEQChw87WZU1JAJ7aGHykCa8TjnDNK_3PPuBXfWoBy3EEory7c7vgi9Usjka7o5tBj_3PQwyeyEhT4Y6aGAL6tg73aQWJtV1zRt3nR_3PRGDShuMGb84MJtTJvtTg8qDfswkYWcm3e"
174194
175-let aB = 4970178
195+let aL = 10000000
176196
177-let aC = {
178- let p = n
179- if ((base58'2W' == p))
197+let aM = "3P2NGX4Q5nge1MCauwQW5aqYLdkccSGj1Ep_3P2xFAHW9yhyNohYozWd4HFhEXZu3bsNSoR_3P2yKaZ2gvn9Xe5tti81a7P9LZhHgjvToV9_3P37zQ3cf2ecu55RmJqEiGSivdzN9avt3m9_3P4az6dtzsvGCWFAxa94UdevKzXyEwxEiFG_3P4kZU6X3TTLFcSUe55JSy8BySqitcPgMBz_3P5hCxBEh3NgNizZhNBreyBSqtbhJYLkKPD_3P7HLvucy11yxyMJUwjzXFHHKMEDwi1EwfC_3P8JuaqH9PTQAv8D5HBGgQfKauLTYt2NQft_3P9gTDB4rtDEVbpX3asU63H4Zinh2EnTmZE_3P9iN3qrtfJicUVy7amZeVsetVD3vUMk8be_3PCa2BsAa6JBLirszQfV5r9fJrujfhwtwfP_3PD3i4XN8KtygcFx4ry5M7UGqdfH8VYvtRT_3PDEMnnJNc2kx9cPEmvVvhXUr8SvhANKhsa_3PDGE9tKQizaeZFeDDq5aYSv89nwYbfirpZ_3PDMKQTCrUPZECVXEJJ8m1sHtutSu1naSf1_3PGh2Qu6Yvx8GTCRRVNvBUVZLdaidYSaxo5_3PKkmAtbSK5D2hQdo1RfEg8eXyMbDcRUc92_3PLMnbxzssP8W8E8XjJ1RLBBg8UZL8Cz3P2_3PMuxo4PCAox9s4a7R1eszh4iqqu8gS7jHv_3PNrMtEQChw87WZU1JAJ7aGHykCa8TjnDNK_3PPuBXfWoBy3EEory7c7vgi9Usjka7o5tBj_3PQwyeyEhT4Y6aGAL6tg73aQWJtV1zRt3nR_3PRGDShuMGb84MJtTJvtTg8qDfswkYWcm3e"
198+
199+let aN = 4970178
200+
201+let aO = {
202+ let r = p
203+ if ((base58'2W' == r))
180204 then 1700524800000
181- else if ((base58'2T' == p))
205+ else if ((base58'2T' == r))
182206 then 1700420400000
183207 else throw("Unknown chain")
184208 }
185209
186-let aD = {
187- let p = n
188- if ((base58'2W' == p))
210+let aP = {
211+ let r = p
212+ if ((base58'2W' == r))
189213 then 1701043199999
190- else if ((base58'2T' == p))
214+ else if ((base58'2T' == r))
191215 then 1700496000000
192216 else throw("Unknown chain")
193217 }
194218
195-func aE (d) = contains(aA, d)
219+let aQ = [1, 3, 5, 20]
220+
221+let aR = [500000000, 200000000, 100000000, 20000000]
222+
223+func aS (d) = contains(aM, d)
196224
197225
198-func aF () = W(reentrantInvoke(K, "saveLastTx", nil, nil))
226+func aT () = ac(reentrantInvoke(O, "saveLastTx", nil, nil))
199227
200228
201-func aG (d,aH,aI) = {
202- let aJ = (lastBlock.timestamp - aI)
203- let aK = fraction(aJ, (i * aH), (b * u))
204- let aL = W(invoke(L, "sellResourcesWorldREADONLY", [aK], nil))
205- let aM = max([0, aL])
206- (aM * j)
229+func aU (d,aV,aW) = {
230+ let aX = (lastBlock.timestamp - aW)
231+ let aY = fraction(aX, (i * aV), (b * x))
232+ let aZ = ac(invoke(P, "sellResourcesWorldREADONLY", [aY], nil))
233+ let ba = max([0, aZ])
234+ (ba * j)
207235 }
208236
209237
210-func aN (d,aH,aI) = {
211- let aJ = (lastBlock.timestamp - aI)
212- if ((0 > aJ))
213- then throw(((("Saved timestamp is in future, saved = " + toString(aI)) + ", current = ") + toString(lastBlock.timestamp)))
238+func bb (d,aV,aW) = {
239+ let aX = (lastBlock.timestamp - aW)
240+ if ((0 > aX))
241+ then throw(((("Saved timestamp is in future, saved = " + toString(aW)) + ", current = ") + toString(lastBlock.timestamp)))
214242 else {
215- let aK = fraction(aJ, (i * aH), (b * u))
216- let aL = W(invoke(L, "sellResourcesWorldREADONLY", [aK], nil))
217- let aM = if ((0 >= aL))
243+ let aY = fraction(aX, (i * aV), (b * x))
244+ let aZ = ac(invoke(P, "sellResourcesWorldREADONLY", [aY], nil))
245+ let ba = if ((0 >= aZ))
218246 then 0
219- else Z(invoke(L, "sellResourcesWorld", [d, aK], nil))._1
220- (aM * j)
247+ else af(invoke(P, "sellResourcesWorld", [d, aY], nil))._1
248+ (ba * j)
221249 }
222250 }
223251
224252
225-func aO (aP,aQ,aR,aS) = {
226- let aT = lastBlock.timestamp
227- let aU = max([0, (aQ - aT)])
228- let aV = max([0, (aS - aT)])
229- let aW = (aP + aR)
230- let aX = if ((aW == 0))
253+func bc (bd,be,bf,bg) = {
254+ let bh = lastBlock.timestamp
255+ let bi = max([0, (be - bh)])
256+ let bj = max([0, (bg - bh)])
257+ let bk = (bd + bf)
258+ let bl = if ((bk == 0))
231259 then 0
232- else (fraction(aU, aP, aW) + fraction(aV, aR, aW))
233- (aT + aX)
260+ else (fraction(bi, bd, bk) + fraction(bj, bf, bk))
261+ (bh + bl)
234262 }
235263
236264
237-@Callable(aY)
238-func constructorV1 (aZ,ba) = if ((aY.caller != this))
265+@Callable(bm)
266+func constructorV1 (bn,bo) = if ((bm.caller != this))
239267 then throw("Permission denied")
240- else if (isDefined(getBinary(P)))
268+ else if (isDefined(getBinary(T)))
241269 then throw("Already initialized")
242270 else {
243- let bb = (ac("")[S] + ba)
244- let bc = (a - (bb * u))
245- let bd = Issue("ACRES", "WavesLands land acres investment token", bc, 8, false, unit, 0)
246- let be = calculateAssetId(bd)
247-[bd, IntegerEntry(O, bc), BinaryEntry(P, be), StringEntry(D(), aZ)]
271+ let bp = (aj("")[W] + bo)
272+ let bq = (a - (bp * x))
273+ let br = Issue("ACRES", "WavesLands land acres investment token", bq, 8, false, unit, 0)
274+ let bs = calculateAssetId(br)
275+[br, IntegerEntry(S, bq), BinaryEntry(T, bs), StringEntry(H(), bn)]
248276 }
249277
250278
251279
252-@Callable(aY)
253-func unstakeAcres (bf) = {
254- let bg = aF()
255- if ((bg == bg))
256- then if ((0 >= bf))
280+@Callable(bm)
281+func unstakeAcres (bt) = {
282+ let bu = aT()
283+ if ((bu == bu))
284+ then if ((0 >= bt))
257285 then throw("Amount should be positive")
258286 else {
259- let w = toString(aY.caller)
260- if ((size(aY.payments) != 0))
287+ let A = toString(bm.caller)
288+ if ((size(bm.payments) != 0))
261289 then throw("No payments required")
262290 else {
263- let bh = R(w)
264- let bi = c(w)
265- let bj = valueOrElse(getInteger(bi), 0)
266- if ((bf > bj))
267- then throw(((("You have only " + ar(bj, 8)) + " ACRES staked, tried to unstake ") + ar(bf, 8)))
291+ let bv = V(A)
292+ let bw = c(A)
293+ let bx = valueOrElse(getInteger(bw), 0)
294+ if ((bt > bx))
295+ then throw(((("You have only " + ay(bx, 8)) + " ACRES staked, tried to unstake ") + ay(bt, 8)))
268296 else {
269- let bk = valueOrElse(getInteger(e(w)), 0)
270- let bl = valueOrElse(getInteger(f(w)), 0)
271- let aT = lastBlock.timestamp
272- if (if ((aT >= aC))
273- then (aD >= aT)
297+ let by = valueOrElse(getInteger(e(A)), 0)
298+ let bz = valueOrElse(getInteger(f(A)), 0)
299+ let bh = lastBlock.timestamp
300+ if (if ((bh >= aO))
301+ then (aP >= bh)
274302 else false)
275303 then throw("You cannot unstake ACRES during Promo2")
276304 else {
277- let bm = if (aE(w))
278- then ((bj - bk) - aB)
279- else (bj - bk)
280- if (if ((bl > aT))
281- then (bf > bm)
305+ let bA = if (aS(A))
306+ then ((bx - by) - aN)
307+ else (bx - by)
308+ if (if ((bz > bh))
309+ then (bt > bA)
282310 else false)
283- then throw(((("Only " + ar(bm, 8)) + " ACRES can be unstaked now, wait until ") + toString(bl)))
311+ then throw(((("Only " + ay(bA, 8)) + " ACRES can be unstaked now, wait until ") + toString(bz)))
284312 else {
285- let bn = valueOrElse(getInteger(g), 0)
286- let bo = invoke(M, "onStakeUnstakeLand", [w], nil)
287- let bp = aN(w, bj, valueOrElse(getInteger(bh), 0))
288- $Tuple2([IntegerEntry(bh, lastBlock.timestamp), IntegerEntry(bi, (bj - bf)), IntegerEntry(g, (bn - bf)), ScriptTransfer(aY.caller, (bf + bp), Q)], $Tuple2(bg, bo))
313+ let bB = valueOrElse(getInteger(g), 0)
314+ let bC = invoke(Q, "onStakeUnstakeLand", [A], nil)
315+ let bD = bb(A, bx, valueOrElse(getInteger(bv), 0))
316+ $Tuple2([IntegerEntry(bv, lastBlock.timestamp), IntegerEntry(bw, (bx - bt)), IntegerEntry(g, (bB - bt)), ScriptTransfer(bm.caller, (bt + bD), U)], $Tuple2(bu, bC))
289317 }
290318 }
291319 }
292320 }
293321 }
294322 else throw("Strict value is not equal to itself.")
295323 }
296324
297325
298326
299-@Callable(aY)
327+@Callable(bm)
300328 func stakeAcres () = {
301- let bg = aF()
302- if ((bg == bg))
329+ let bu = aT()
330+ if ((bu == bu))
303331 then {
304- let w = toString(aY.caller)
305- if ((size(aY.payments) != 1))
332+ let A = toString(bm.caller)
333+ if ((size(bm.payments) != 1))
306334 then throw("exactly 1 payment must be attached")
307335 else {
308- let bq = aY.payments[0]
309- let br = bq.amount
310- if (if (!(isDefined(bq.assetId)))
336+ let bE = bm.payments[0]
337+ let bF = bE.amount
338+ if (if (!(isDefined(bE.assetId)))
311339 then true
312- else (value(bq.assetId) != Q))
340+ else (value(bE.assetId) != U))
313341 then throw("ACRES payments only!")
314342 else {
315- let bo = invoke(M, "onStakeUnstakeLand", [w], nil)
316- if ((bo == bo))
343+ let bC = invoke(Q, "onStakeUnstakeLand", [A], nil)
344+ if ((bC == bC))
317345 then {
318- let aT = lastBlock.timestamp
319- if (if ((aC > aT))
346+ let bh = lastBlock.timestamp
347+ if (if ((aO > bh))
320348 then true
321- else (aT > aD))
349+ else (bh > aP))
322350 then {
323- let bh = R(w)
324- let bi = c(w)
325- let bj = valueOrElse(getInteger(bi), 0)
326- let bn = valueOrElse(getInteger(g), 0)
327- let bp = aN(w, bj, valueOrElse(getInteger(bh), 0))
328- $Tuple2(((((if ((bp == 0))
351+ let bv = V(A)
352+ let bw = c(A)
353+ let bx = valueOrElse(getInteger(bw), 0)
354+ let bB = valueOrElse(getInteger(g), 0)
355+ let bD = bb(A, bx, valueOrElse(getInteger(bv), 0))
356+ $Tuple2(((((if ((bD == 0))
329357 then nil
330- else [ScriptTransfer(aY.caller, bp, Q)]) :+ IntegerEntry(bh, lastBlock.timestamp)) :+ IntegerEntry(bi, (bj + br))) :+ IntegerEntry(g, (bn + br))), $Tuple2(bg, bo))
358+ else [ScriptTransfer(bm.caller, bD, U)]) :+ IntegerEntry(bv, lastBlock.timestamp)) :+ IntegerEntry(bw, (bx + bF))) :+ IntegerEntry(g, (bB + bF))), $Tuple2(bu, bC))
331359 }
332- else if ((az > br))
333- then throw((("Min staked amount during promo action should be at least " + ar(az, 8)) + " ACRES"))
360+ else if ((aL > bF))
361+ then throw((("Min staked amount during promo action should be at least " + ay(aL, 8)) + " ACRES"))
334362 else {
335- let bs = invoke(this, "sendLockedAcres", [w, br, 30], nil)
336- let bt = valueOrElse(getString(r), "")
337- let bu = if (contains(bt, w))
363+ let bG = invoke(this, "sendLockedAcres", [A, bF, 30], nil)
364+ let bH = valueOrElse(getString(t), "")
365+ let bI = if (contains(bH, A))
338366 then {
339- let bv = split_51C(bt, w)
340- let aP = parseIntValue(take(drop(bv[1], 1), 14))
341- ((((bv[0] + w) + ":") + aw((aP + br), 14)) + drop(bv[1], 15))
367+ let bJ = split_51C(bH, A)
368+ let bd = parseIntValue(take(drop(bJ[1], 1), 14))
369+ ((((bJ[0] + A) + ":") + aD((bd + bF), 14)) + drop(bJ[1], 15))
342370 }
343371 else {
344- let bw = ((w + ":") + aw(br, 14))
345- if ((bt == ""))
346- then bw
347- else ((bt + "_") + bw)
372+ let bK = ((A + ":") + aD(bF, 14))
373+ if ((bH == ""))
374+ then bK
375+ else ((bH + "_") + bK)
348376 }
349- $Tuple2([StringEntry(r, bu)], $Tuple3(bg, bo, bs))
377+ $Tuple2([StringEntry(t, bI)], $Tuple3(bu, bC, bG))
350378 }
351379 }
352380 else throw("Strict value is not equal to itself.")
353381 }
354382 }
355383 }
356384 else throw("Strict value is not equal to itself.")
357385 }
358386
359387
360388
361-@Callable(aY)
389+@Callable(bm)
362390 func buyAcres () = {
363- let bg = aF()
364- if ((bg == bg))
391+ let bu = aT()
392+ if ((bu == bu))
365393 then {
366- let w = toString(aY.caller)
367- if ((size(aY.payments) != 1))
394+ let A = toString(bm.caller)
395+ if ((size(bm.payments) != 1))
368396 then throw("exactly 1 payment must be attached")
369397 else {
370- let bq = aY.payments[0]
371- let br = bq.amount
372- if (if (!(isDefined(bq.assetId)))
398+ let bE = bm.payments[0]
399+ let bF = bE.amount
400+ if (if (!(isDefined(bE.assetId)))
373401 then true
374- else (value(bq.assetId) != o))
402+ else (value(bE.assetId) != q))
375403 then throw("USDT payments only!")
376- else if ((t > br))
377- then throw((("Min payment should be " + ar(t, 6)) + " USDT"))
404+ else if ((w > bF))
405+ then throw((("Min payment should be " + ay(w, 6)) + " USDT"))
378406 else {
379- let aH = (br * j)
380- let bx = W(invoke(K, "updateAccStats", [w, fraction(h, aH, (25 * u))], nil))
381- $Tuple2([ScriptTransfer(L, br, o), ScriptTransfer(aY.caller, aH, Q)], $Tuple2(bg, bx))
407+ let aV = (bF * j)
408+ let bL = ac(invoke(O, "updateAccStats", [A, fraction(h, aV, (25 * x))], nil))
409+ $Tuple2([ScriptTransfer(P, bF, q), ScriptTransfer(bm.caller, aV, U)], $Tuple2(bu, bL))
382410 }
383411 }
384412 }
385413 else throw("Strict value is not equal to itself.")
386414 }
387415
388416
389417
390-@Callable(aY)
391-func sendAcres (d,bf) = if ((aY.caller != L))
418+@Callable(bm)
419+func sendAcres (d,bt) = if ((bm.caller != P))
392420 then throw("Permission denied")
393- else $Tuple2([ScriptTransfer(addressFromStringValue(d), bf, Q)], bf)
421+ else $Tuple2([ScriptTransfer(addressFromStringValue(d), bt, U)], bt)
394422
395423
396424
397-@Callable(aY)
398-func sendLockedAcres (d,bf,by) = if (if ((aY.caller != this))
399- then (aY.caller != J)
425+@Callable(bm)
426+func sendLockedAcres (d,bt,bM) = if (if ((bm.caller != this))
427+ then (bm.caller != N)
400428 else false)
401429 then throw("Permission denied")
402430 else {
403- let aT = lastBlock.timestamp
404- let bh = R(d)
405- let bi = c(d)
406- let bj = valueOrElse(getInteger(bi), 0)
407- let bn = valueOrElse(getInteger(g), 0)
408- let bz = valueOrElse(getInteger(bh), aT)
409- let bA = f(d)
410- let bB = e(d)
411- let bC = valueOrElse(getInteger(bB), 0)
412- let bD = valueOrElse(getInteger(bA), 0)
413- let bE = aO(bC, bD, bf, (aT + (by * b)))
414- $Tuple2([IntegerEntry(bh, bz), IntegerEntry(bi, (bj + bf)), IntegerEntry(g, (bn + bf)), IntegerEntry(bA, bE), IntegerEntry(bB, (bC + bf))], bf)
431+ let bh = lastBlock.timestamp
432+ let bv = V(d)
433+ let bw = c(d)
434+ let bx = valueOrElse(getInteger(bw), 0)
435+ let bB = valueOrElse(getInteger(g), 0)
436+ let bN = valueOrElse(getInteger(bv), bh)
437+ let bO = f(d)
438+ let bP = e(d)
439+ let bQ = valueOrElse(getInteger(bP), 0)
440+ let bR = valueOrElse(getInteger(bO), 0)
441+ let bS = bc(bQ, bR, bt, (bh + (bM * b)))
442+ $Tuple2([IntegerEntry(bv, bN), IntegerEntry(bw, (bx + bt)), IntegerEntry(g, (bB + bt)), IntegerEntry(bO, bS), IntegerEntry(bP, (bQ + bt))], bt)
415443 }
416444
417445
418446
419-@Callable(aY)
420-func burnAcres (bf) = if ((aY.caller != K))
447+@Callable(bm)
448+func burnAcres (bt) = if ((bm.caller != O))
421449 then throw("Permission denied")
422450 else {
423- let bF = (valueOrElse(getInteger(O), 0) - bf)
424- if ((0 > bF))
451+ let bT = (valueOrElse(getInteger(S), 0) - bt)
452+ if ((0 > bT))
425453 then throw("Attempt to burn more ACRES, than exists")
426- else $Tuple2([Burn(Q, bf), IntegerEntry(O, bF)], bf)
454+ else $Tuple2([Burn(U, bt), IntegerEntry(S, bT)], bt)
427455 }
428456
429457
430458
431-@Callable(aY)
459+@Callable(bm)
432460 func claimAcres () = {
433- let bg = aF()
434- if ((bg == bg))
461+ let bu = aT()
462+ if ((bu == bu))
435463 then {
436- let w = toString(aY.caller)
437- if ((size(aY.payments) != 0))
464+ let A = toString(bm.caller)
465+ if ((size(bm.payments) != 0))
438466 then throw("No payments required")
439467 else {
440- let bh = R(w)
441- let bi = c(w)
442- let aH = valueOrElse(getInteger(bi), 0)
443- let bo = invoke(M, "onStakeUnstakeLand", [w], nil)
444- let bp = aN(w, aH, valueOrElse(getInteger(bh), 0))
445- $Tuple2([IntegerEntry(bh, lastBlock.timestamp), ScriptTransfer(aY.caller, bp, Q)], $Tuple2(bg, bo))
468+ let bv = V(A)
469+ let bw = c(A)
470+ let aV = valueOrElse(getInteger(bw), 0)
471+ let bC = invoke(Q, "onStakeUnstakeLand", [A], nil)
472+ let bD = bb(A, aV, valueOrElse(getInteger(bv), 0))
473+ $Tuple2([IntegerEntry(bv, lastBlock.timestamp), ScriptTransfer(bm.caller, bD, U)], $Tuple2(bu, bC))
446474 }
447475 }
448476 else throw("Strict value is not equal to itself.")
449477 }
450478
451479
452480
453-@Callable(aY)
454-func claimAcresREADONLY (w) = {
455- let bh = R(w)
456- let bi = c(w)
457- let aH = valueOrElse(getInteger(bi), 0)
458- let bG = valueOrElse(getInteger(bh), 0)
459- let bp = aG(w, aH, bG)
460- $Tuple2(nil, [bp, bG])
481+@Callable(bm)
482+func claimAcresREADONLY (A) = {
483+ let bv = V(A)
484+ let bw = c(A)
485+ let aV = valueOrElse(getInteger(bw), 0)
486+ let bU = valueOrElse(getInteger(bv), 0)
487+ let bD = aU(A, aV, bU)
488+ $Tuple2(nil, [bD, bU])
461489 }
462490
463491
464492
465-@Callable(aY)
493+@Callable(bm)
466494 func claimPromo2 () = {
467- let bg = aF()
468- if ((bg == bg))
495+ let bu = aT()
496+ if ((bu == bu))
469497 then {
470- let w = toString(aY.caller)
471- if ((size(aY.payments) != 0))
498+ let A = toString(bm.caller)
499+ if ((size(bm.payments) != 0))
472500 then throw("No payments required")
473501 else {
474- let aT = lastBlock.timestamp
475- if ((aD > aT))
502+ let bh = lastBlock.timestamp
503+ if ((aP > bh))
476504 then throw("Promo 2 is not over yet")
477505 else {
478- let bH = k(2, w)
479- if (valueOrElse(getBoolean(bH), false))
480- then throw((("Your wallet " + w) + " is already awarded in promo 2"))
506+ let bV = k(2, A)
507+ if (valueOrElse(getBoolean(bV), false))
508+ then throw((("Your wallet " + A) + " is already awarded in promo 2"))
481509 else {
482- let bt = valueOrElse(getString(r), "")
483- if (!(contains(bt, w)))
510+ let bH = valueOrElse(getString(t), "")
511+ if (!(contains(bH, A)))
484512 then throw("You are not participant of promo 2")
485513 else {
486- let bv = split_51C(bt, w)
487- let aH = parseIntValue(take(drop(bv[1], 1), 14))
488- let bI = (aH / az)
489- let bJ = valueOrElse(getInteger(m(2)), 0)
490- let bK = if ((bJ == 0))
514+ let bJ = split_51C(bH, A)
515+ let aV = parseIntValue(take(drop(bJ[1], 1), 14))
516+ let bW = (aV / aL)
517+ let bX = valueOrElse(getInteger(m(2)), 0)
518+ let bY = if ((bX == 0))
491519 then {
492- func bL (ag,bM) = (ag + parseIntValue(split(bM, ":")[1]))
520+ func bZ (an,ca) = (an + (parseIntValue(split(ca, ":")[1]) / aL))
493521
494- let bN = {
495- let aj = split_51C(bt, "_")
496- let ak = size(aj)
497- let al = 0
498- func am (an,ao) = if ((ao >= ak))
499- then an
500- else bL(an, aj[ao])
522+ let cb = {
523+ let aq = split_51C(bH, "_")
524+ let ar = size(aq)
525+ let as = 0
526+ func at (au,av) = if ((av >= ar))
527+ then au
528+ else bZ(au, aq[av])
501529
502- func ap (an,ao) = if ((ao >= ak))
503- then an
530+ func aw (au,av) = if ((av >= ar))
531+ then au
504532 else throw("List size exceeds 50")
505533
506- ap(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(am(al, 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)
534+ aw(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(as, 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)
507535 }
508- $Tuple2([IntegerEntry(m(2), bN)], bN)
536+ $Tuple2([IntegerEntry(m(2), cb), IntegerEntry(n(2, 1), cb)], cb)
509537 }
510- else $Tuple2(nil, bJ)
511- let bO = bK._1
512- let bP = bK._2
513- let bQ = fraction(bI, az, bP)
514- let bs = invoke(this, "sendLockedAcres", [w, bQ, 30], nil)
515- $Tuple2((bO :+ BooleanEntry(bH, true)), bs)
538+ else $Tuple2(nil, bX)
539+ let cc = bY._1
540+ let cd = bY._2
541+ let ce = fraction(bW, aL, cd)
542+ let bG = invoke(this, "sendLockedAcres", [A, ce, 30], nil)
543+ $Tuple2(((cc :+ BooleanEntry(bV, true)) :+ StringEntry(u(1), bH)), bG)
516544 }
517545 }
518546 }
519547 }
520548 }
521549 else throw("Strict value is not equal to itself.")
522550 }
523551
524552
553+
554+@Callable(bm)
555+func commitForPromo2Round (o) = if ((bm.caller != this))
556+ then throw("Permission denied")
557+ else if (if ((1 > o))
558+ then true
559+ else (o > 4))
560+ then throw(("Invalid roundId: " + toString(o)))
561+ else {
562+ let cf = (height + X)
563+ $Tuple2([IntegerEntry(Y(("2_" + toString(o))), cf)], cf)
564+ }
565+
566+
567+
568+@Callable(bm)
569+func drawPromo2Round (o) = if ((bm.caller != this))
570+ then throw("Permission denied")
571+ else if (if ((1 > o))
572+ then true
573+ else (o > 4))
574+ then throw(("Invalid roundId: " + toString(o)))
575+ else {
576+ let cg = Y(("2_" + toString(o)))
577+ let cf = valueOrErrorMessage(getInteger(cg), "You have to commitForPromo2Round(roundId) first!")
578+ if ((cf > height))
579+ then throw(("Random number is not ready yet, wait until height = " + toString(cf)))
580+ else {
581+ let aH = valueOrElse(getInteger(n(2, o)), 0)
582+ if ((aH == 0))
583+ then throw("Please call claimPromo2() at least once")
584+ else {
585+ let aJ = value(value(blockInfoByHeight(cf)).vrf)
586+ let aI = bm.transactionId
587+ let bH = valueOrElse(getString(u(o)), "")
588+ func ch (ci,cj) = if ((cj > aQ[(o - 1)]))
589+ then ci
590+ else {
591+ let ck = aG(ci._1, ci._2, aJ)
592+ let cl = if ((ci._3 == ""))
593+ then nil
594+ else split_51C(ci._3, "_")
595+ func bZ (an,ca) = {
596+ let bJ = split(ca, ":")
597+ let d = bJ[0]
598+ let bW = (parseIntValue(bJ[1]) / aL)
599+ let cm = (an._1 + bW)
600+ if (if ((an._3 == ""))
601+ then (cm > ck)
602+ else false)
603+ then $Tuple3(cm, bW, d)
604+ else $Tuple3(cm, an._2, an._3)
605+ }
606+
607+ let cn = {
608+ let aq = cl
609+ let ar = size(aq)
610+ let as = $Tuple3(0, 0, "")
611+ func at (au,av) = if ((av >= ar))
612+ then au
613+ else bZ(au, aq[av])
614+
615+ func aw (au,av) = if ((av >= ar))
616+ then au
617+ else throw("List size exceeds 50")
618+
619+ aw(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(as, 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)
620+ }
621+ let co = cn._3
622+ if ((co == ""))
623+ then throw("no winner")
624+ else {
625+ let cp = split_51C(ci._3, co)
626+ let cq = (cp[0] + drop(cp[1], 15))
627+ let bG = invoke(this, "sendLockedAcres", [co, aR[(o - 1)], 30], nil)
628+ $Tuple4((ci._1 - cn._2), fromBase58String(getStringValue(O, ai(co))), cq, (ci._4 :+ bG))
629+ }
630+ }
631+
632+ let cr = {
633+ let aq = y
634+ let ar = size(aq)
635+ let as = $Tuple4(aH, bm.transactionId, bH, nil)
636+ func at (au,av) = if ((av >= ar))
637+ then au
638+ else ch(au, aq[av])
639+
640+ func aw (au,av) = if ((av >= ar))
641+ then au
642+ else throw("List size exceeds 20")
643+
644+ aw(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(at(as, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
645+ }
646+ $Tuple2([DeleteEntry(cg), StringEntry(u((o + 1)), cr._3), IntegerEntry(n(2, (o + 1)), cr._1)], cr._4)
647+ }
648+ }
649+ }
650+
651+

github/deemru/w8io/169f3d6 
241.12 ms