tx · 9iCofFmGB55kmxJ8EUHWbiV5pWLtJsgmEgUBWMtaH6Cb

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.10500000 Waves

2023.09.23 17:41 [2768161] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "9iCofFmGB55kmxJ8EUHWbiV5pWLtJsgmEgUBWMtaH6Cb", "fee": 10500000, "feeAssetId": null, "timestamp": 1695480077959, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "5PNJSh55MvaRAuuDXD2Kyw5gqksQdSbqC7YYetvXtCRysQLD1G8TtUL83n5e9qB4jXRUd5LjqhuvqyfYbsbguonJ" ], "script": "base64:BgLgAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBCBIAEgQKAgICEgASAwoBCBIECgIICBIDCgEYEgQKAggIEgQKAggIEgMKAQgSAwoBGBIDCgEIEgUKAwgICBIECgIICBIHCgUBAQEBARIDCgEBEgUKAwEBCBIDCgEIEgMKAQgSABIECgIIARIECgIIARIDCgEIEgQKAggIEgMKAQgSABIDCgEIEgMKAQgSAwoBCBIECgICAhIECgICAhIAmQIACURBWU1JTExJUwCAuJkpARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAA5yb2JiZXJ5Q29zdE1pbgCAwtcvABRyb2JiZXJ5Q29vbGRvd25Db2VmZgCQAwAMcmVxdWlyZW1lbnRzCQDMCAICCFN0cmVuZ3RoCQDMCAICCEFjY3VyYWN5CQDMCAICCUludGVsbGVjdAkAzAgCAglFbmR1cmFuY2UJAMwIAgIJRGV4dGVyaXR5CQDMCAICBUxldmVsCQDMCAICBkhlYWx0aAUDbmlsAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC3NlZ0JhY2twYWNrAAAAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgANTUFYUFJPRElOU0xPVAAeABBsYW5kUm9iQ29vbGRvd25zCQDMCAIAAAkAzAgCAMDPJAkAzAgCAKD3NgkAzAgCAIDczBQJAMwIAgCArqYKBQNuaWwADk1JTl9SRVNfVE9fUk9CAIDaxAkADHJvYklkeExvY2tlZAABAAtkdWNrSWR4RnJlZQAAABBkdWNrSWR4UHJlcGFyaW5nAAEBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIBDmtleVNhdmVkSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgxzYXZlZEhlYWx0aF8FC2R1Y2tBc3NldElkARBrZXlTYXZlZExvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg5zYXZlZExvY2F0aW9uXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tCdWZmcwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0J1ZmZzXwULZHVja0Fzc2V0SWQBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIQbGFzdFJvYmJlcnlUaW1lXwULZHVja0Fzc2V0SWQBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIQbGFzdFJvYmJlcnlDb3N0XwULZHVja0Fzc2V0SWQBE2tleUxhbmRSb2JiZXJ5U3RhdGUBC2xhbmRBc3NldElkCQCsAgICEWxhbmRSb2JiZXJ5U3RhdGVfBQtsYW5kQXNzZXRJZAESa2V5TGFuZENvb2xkb3duRVRBAQtsYW5kQXNzZXRJZAkArAICAhBsYW5kQ29vbGRvd25FVEFfBQtsYW5kQXNzZXRJZAETa2V5RHVja1JvYmJlcnlTdGF0ZQELZHVja0Fzc2V0SWQJAKwCAgIRZHVja1JvYmJlcnlTdGF0ZV8FC2R1Y2tBc3NldElkARNrZXlMb2NrZWRMYW5kQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhFsb2NrZWRMYW5kQnlEdWNrXwULZHVja0Fzc2V0SWQBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICFGRlbGl2ZXJ5RGVsYXlCeUR1Y2tfBQtkdWNrQXNzZXRJZAAHeHBDbGFpbQCQTgAPeHBTdWNjZXNzRmxpZ2h0AJBOAAx4cEZhaWxGbGlnaHQA0A8ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCEPQAKeHBOZXdTTGFuZADAlrECAA54cFVwZ3JhZGVJbmZyYQCQTgAHeHBNZXJnZQDAhD0ACXhwT25ib2FyZADAhD0ABnhwSGVhbACQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEJbWF4SGVhbHRoAQVsZXZlbAkAZAIAZAUFbGV2ZWwBB2xldmVsVXACCWN1cnJMZXZlbAVuZXdYUAQIbmV3TGV2ZWwJAQlsZXZlbEJ5WFABBQVuZXdYUAkAzAgCBQhuZXdMZXZlbAkAzAgCCQBoAgUSbnVtUG9pbnRzT25MZXZlbFVwCQBlAgUIbmV3TGV2ZWwFCWN1cnJMZXZlbAUDbmlsAQxnZXREdWNrU3RhdHMED3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZApidWZmRWZmZWN0CmZvcmNlQnVmZnMEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwECnN0YXRlQnVmZnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfCQDOCAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAwUKZm9yY2VCdWZmcwkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QFA25pbAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJEZXh0ZXJpdHkFA25pbAEOZ2V0Um9iYmVyeURhdGECD3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZAQLbGFzdFJvYkNvc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQULZHVja0Fzc2V0SWQAAAQLbGFzdFJvYlRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHcm9iQ29zdAkAlgMBCQDMCAIFDnJvYmJlcnlDb3N0TWluCQDMCAIJAGUCBQtsYXN0Um9iQ29zdAkAaAIFFHJvYmJlcnlDb29sZG93bkNvZWZmCQBlAgUDbm93BQtsYXN0Um9iVGltZQUDbmlsBAlkdWNrU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQESa2V5TGFuZENvb2xkb3duRVRBAQUKbG9ja2VkTGFuZAAACQCXCgUFB3JvYkNvc3QFC2xhc3RSb2JUaW1lBQlkdWNrU3RhdGUFCmxvY2tlZExhbmQFB2xhbmRFVEEACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGABhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIAGQAPREFJTFlSRVNCWVBJRUNFAID40gEADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoAFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQDQhgMAElRFTl9NSU5VVEVTX01JTExJUwDAzyQACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwkAzAgCAgdNaW5lIEwxCQDMCAICB01pbmUgTDIJAMwIAgIHTWluZSBMMwkAzAgCAgdUcmFwIEwxCQDMCAICB1RyYXAgTDIJAMwIAgIHVHJhcCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBmb3J0QWxsb3dlZFByb2RzCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMJAMwIAgAUBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAgVsY25hXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgNzdF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAgNsYXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgZzdHRhb18FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgN3aF8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIPZm9ydGlmaWNhdGlvbnNfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAARZGVsaXZlcnlMb2NrZWRLZXkCDmRlbGl2ZXJ5TG9ja2VkAA1sYXN0VG91cklkS2V5Ag4lc19fbGFzdFRvdXJJZAEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQN0SWQJAKwCAgIWJXMlZF9fdG91clN0YXRpY0RhdGFfXwkApAMBBQN0SWQBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBA3RJZAkArAICAhclcyVkX190b3VyRHluYW1pY0RhdGFfXwkApAMBBQN0SWQBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAh8lcyVkJXNfX2Jlc3RSZXN1bHRCeVRvdXJBbmREdWNrCQDMCAIJAKQDAQUDdElkCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwCAl9fAAlpZHhTdGF0aWMAAAAKaWR4RHluYW1pYwABAAp0U3RhdGljRW5kAAYADnREeW5hbWljU3RhdHVzAAEBC2dldFRvdXJEYXRhAgx0b3VyQ29udHJhY3QDdElkBAZzdGF0aWMJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18EB2R5bmFtaWMJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fCQDMCAIFBnN0YXRpYwkAzAgCBQdkeW5hbWljBQNuaWwBDmlzSW5Ub3VybmFtZW50Agx0b3VyQ29udHJhY3QIbG9jYXRpb24EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQx0b3VyQ29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUMdG91ckNvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBDGlzSW5EZWxpdmVyeQEIbG9jYXRpb24EA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQECGRpc3RhbmNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQhsb2NJZHhJZAMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQJAGYCBQNub3cJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwcJAGcCAAMFCGRpc3RhbmNlBwEPaXNVc3VhbExvY2F0aW9uAQhsb2NhdGlvbgQHbG9jVHlwZQkAkQMCCQC1CQIFCGxvY2F0aW9uAgFfBQpsb2NJZHhUeXBlAwkBAiE9AgUHbG9jVHlwZQIBVAkBAiE9AgUHbG9jVHlwZQIBRAcBDG5vdE9uTWlzc2lvbgIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQHbG9jVHlwZQkAkQMCBQNsb2MFCmxvY0lkeFR5cGUDAwkBAiE9AgUHbG9jVHlwZQIBVAkBAiE9AgUHbG9jVHlwZQIBRAcGCQEBIQEDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAEMY2hlYXRBdHRlbXB0AgZvbGRMb2MGbmV3TG9jCQACAQkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQUGb2xkTG9jAgksIG5ld0xvYz0FBm5ld0xvYwAWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQcAGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQcAEUtTX0FMTE9XX0RFTElWRVJZBgAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAuJkpAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAAVJVEVSNgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdUb3VybmFtZW50RGFwcAAHAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAASdG91cm5hbWVudENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnVG91cm5hbWVudERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMADXdsZ0Fzc2V0SWRLZXkCC3dsZ19hc3NldElkAAp3bGdBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgULd2xnQ29udHJhY3QFDXdsZ0Fzc2V0SWRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDWFjcmVzQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQAC3JhbmRvbURlbGF5AAIBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAhNmaW5pc2hCbG9ja0ZvckFkZHJfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCWNvbnRpbmVudAkArAICAhRyZXNUeXBlc0J5Q29udGluZW50XwUJY29udGluZW50ARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJYXNCb29sZWFuAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXMFByRtYXRjaDAFAXMJAAIBAhlmYWlsIHRvIGNhc3QgaW50byBCb29sZWFuARBhc1N0cmluZ0ludFR1cGxlAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAg0oU3RyaW5nLCBJbnQpBAJ0MgUHJG1hdGNoMAUCdDIJAAIBAh9mYWlsIHRvIGNhc3QgaW50byAoU3RyaW5nLCBJbnQpAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQxmaW5pc2hIZWlnaHQKYXV4RW50cm9weQQPcmFuZG9tU2VlZEJsb2NrCQEFdmFsdWUBCQDtBwEFDGZpbmlzaEhlaWdodAQKcmFuZG9tSGFzaAkA9wMBCQDLAQIJAQV2YWx1ZQEIBQ9yYW5kb21TZWVkQmxvY2sDdnJmBQphdXhFbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgADcHViBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAwUWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQEgqxdXjxVn41lUQbDWcutmm8Sj02Ze1ZmGUN+YNx+yCQgBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAwkAAAIBAVQFByRtYXRjaDABIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoCQACAQINVW5rbm93biBjaGFpbgAMRU1QVFlfUFJPRDUwAZADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ADFNfQ09TVF9BQ1JFUwCA8ouoCQAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAgRsY25fBQRuYW1lARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICA2xhXwUHbGFuZE51bQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgIFaWxhb18FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIDbG9fBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplAQh0b1ZvbHVtZQIGYW1vdW50B3BrZ1NpemUEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgERc3VidHJhY3RNYXRlcmlhbHMDDHNob3VsZFVzZU1hdANoYXMJdG90YWxOZWVkBARuZWVkCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJdG90YWxOZWVkCgEKc3VidHJhY3RvcgIDYWNjA2lkeAQGcmVzdWx0CQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2hhcwUDaWR4CQCRAwIFBG5lZWQFA2lkeAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhOb3QgZW5vdWdoIG1hdGVyaWFsIGlkeD0JAKQDAQUDaWR4AgssIHlvdSBoYXZlIAkAkQMCBQNoYXMFA2lkeAILLCBidXQgbmVlZCAJAKQDAQkAkQMCBQRuZWVkBQNpZHgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAMFDHNob3VsZFVzZU1hdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARFzdWJ0cmFjdEVxdWlwbWVudAIFb2xkRXEFcFVzZWQDCQAAAgUFcFVzZWQCAAkAlAoCBQVvbGRFcQcKAQdzdWJVc2VkAgNhY2MGaWR4QW10BAVwYXJ0cwkAtQkCBQZpZHhBbXQCASwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXgsYW1vdW50BANpZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAAwMJAGYCAAAFA2lkeAYJAGcCBQNpZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgEA2FtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEEB2VxUGFydHMJALUJAggFA2FjYwJfMQkArAICCQCRAwIFBXBhcnRzAAACAToDCQECIT0CCQCQAwEFB2VxUGFydHMAAgkAAgEJAKwCAgkArAICAg9Zb3UgZG9uJ3QgaGF2ZSAJAJEDAgUJcHJvZFR5cGVzBQNpZHgCCSBlcXVpcHBlZAQDdG1wCQCRAwIFB2VxUGFydHMAAQQGbnVtTGVuAwkBB2lzRGlnaXQBCQCvAgIJALACAgUDdG1wAAEAAQACAAEEBGN1cnIJAQ1wYXJzZUludFZhbHVlAQkArwICBQN0bXAFBm51bUxlbgQEdGFpbAkAsAICBQN0bXAFBm51bUxlbgQGbmV3QW10AwkAZwIFBGN1cnIFA2FtdAkAZQIFBGN1cnIFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1Zb3UgZXF1aXBwZWQgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQNpZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUDYW10CQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQdlcVBhcnRzAAAJAJEDAgUFcGFydHMAAAIBOgkApAMBBQZuZXdBbXQFBHRhaWwDCAUDYWNjAl8yBgMDCQBnAgUDaWR4AAYJAGcCAAgFA2lkeAcJAAACBQZuZXdBbXQAAAcKAAIkbAkAtQkCBQVwVXNlZAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUFb2xkRXEHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdWJVc2VkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQ5wcm9kU3RyVG9CeXRlcwEHcHJvZFN0cgQFcExpc3QDCQAAAgUHcHJvZFN0cgIABQNuaWwJALwJAgUHcHJvZFN0cgIBXwoBBHRvQlYCA2FjYwZyZWNpcGUEAWoJAGkCCQDIAQEFA2FjYwAIBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwTGlzdAUBagAACQDLAQIFA2FjYwkAmgMBBQRjdXJyCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwAQAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBHRvQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgEOYnl0ZXNUb1Byb2RTdHIBAmJ2CgEGZnJvbUJWAgNhY2MGcmVjaXBlBAFqCQCQAwEFA2FjYwQBYgkAyQECCQDKAQIFAmJ2CQBoAgAIBQFqAAgJAM0IAgUDYWNjCQCkAwEJALEJAQUBYgkAugkCCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmZyb21CVgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAgFfARVjaGVja1N0YXRSZXF1aXJlbWVudHMCCWR1Y2tTdGF0cwRyZXFzCgEFY2hlY2sCA2FjYwFqBARidWZmAwkAZgIJAJADAQUJZHVja1N0YXRzCQBkAgAHBQFqCQCRAwIFCWR1Y2tTdGF0cwkAZAIABwUBagAAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRyZXFzBQFqCQBkAgkAkQMCBQlkdWNrU3RhdHMFAWoFBGJ1ZmYJAAIBCQCsAgICG1JlcXVpcmVtZW50IG5vdCBzYXRpc2ZpZWQ6IAkAkQMCBQxyZXF1aXJlbWVudHMFAWoGCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFY2hlY2sCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDcJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwEKcGxhY2VQcm9kQgYGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUJZHVja1N0YXRzCG9jY3VwaWVkBGZyZWUEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQDAwkBASEBBQppc1Bvc2l0aXZlCQECIT0CCQCxAgEJAJEDAgUFcGFydHMAAAACBwkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBRBmb3J0QWxsb3dlZFByb2RzBQpwcm9kdWN0SWR4CQACAQkArAICCQCsAgICCVByb2R1Y3QgJwkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCIScgY2Fubm90IGJlIHVzZWQgZm9yIGxhbmQgZGVmZW5zZQMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQBmAgUFY291bnQFDU1BWFBST0RJTlNMT1QJAAIBCQCsAgIJAKwCAgkArAICAhRDYW4ndCBwdXQgbW9yZSB0aGFuIAkApAMBBQ1NQVhQUk9ESU5TTE9UAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAMJAAACBQVjb3VudAAACQCVCgMFBXBMaXN0BQhvY2N1cGllZAUEZnJlZQQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAZuZXdBbXQDAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwkAZQIFBGN1cnIFBWNvdW50CQBkAgUEY3VycgUFY291bnQECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgUGbmV3QW10BQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUEY3VycgUOUFJPRFVDVFBLR1NJWkUJAJUKAwkAywECCQDLAQIFBGhlYWQJAJoDAQUGbmV3QW10BQR0YWlsCQBkAgUIb2NjdXBpZWQFCGRlbHRhVm9sCQBlAgUEZnJlZQUIZGVsdGFWb2wBCGFkZFByb2RCBwZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEc2xvdAlkdWNrU3RhdHMEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQDAwkBASEBBQppc1Bvc2l0aXZlCQECIT0CCQCxAgEJAJEDAgUFcGFydHMAAAACBwkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgFc3RhdHMDCQECIT0CBQFnAgAEBXNsb3RzCQC1CQIFAWcCASwDCQBmAgkAkAMBBQVzbG90cwUITUFYU0xPVFMJAAIBAhJXcm9uZyBzbG90cyBmb3JtYXQEAnMwCQCRAwIFBXNsb3RzAAAEAnMxAwkAZgIJAJADAQUFc2xvdHMAAQkAkQMCBQVzbG90cwABAgADAwkAAAIFAnMwAgAJAAACBQJzMQIABwUEYnBJbgQFdG1wUzADCQECIT0CBQJzMAIACQEIYWRkUHJvZEIHBQJzMAUEYnBJbgUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAAABQVzdGF0cwkAlAoCBQRicEluBwMJAQIhPQIFAnMxAgADCAUFdG1wUzACXzIJAAIBAh5CaWcgaXRlbSBhbHJlYWR5IG9jY3VwaWVzIHNsb3QICQEIYWRkUHJvZEIHBQJzMQgFBXRtcFMwAl8xBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAEFBXN0YXRzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQVzdGF0cwoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEEB21haW5BdXgJALUJAgUDc2VnAgE7AwkBAiE9AgkAkAMBBQdtYWluQXV4BQpOVU1NQUlOQVVYCQACAQIUV3Jvbmcgc2VnbWVudCBmb3JtYXQEAW0JAJEDAgUHbWFpbkF1eAAABAFhCQCRAwIFB21haW5BdXgAAQMDCQAAAgUBbQIACQAAAgUBYQIABwkAlAoCCQBkAgUBagABCAUDYWNjAl8yBAR0bXBNCQELc2xvdHNHcm91cEIGBQFtCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQFqAAAFBXN0YXRzCQCUCgIJAGQCBQFqAAEJAQtzbG90c0dyb3VwQgYFAWEFBHRtcE0FCmlzUG9zaXRpdmUFAWoAAQUFc3RhdHMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yAQVmb3J0QgYHc2VnTGlzdAZwQnl0ZXMIb2NjdXBpZWQEZnJlZQppc1Bvc2l0aXZlCWR1Y2tTdGF0cwMJAGYCAAMJAJADAQUHc2VnTGlzdAkAAgECMUF0IGxlYXN0IGR1Y2ssIG1pbmVzIGFuZCB0cmFwcyBwYXJ0cyBhcmUgcmVxdWlyZWQKAQdzZWdtZW50AgNhY2MDc2VnBAFqCAUDYWNjAl8xAwkAAAIFAWoAAAkAlgoECQBkAgUBagABCAUDYWNjAl8yCAUDYWNjAl8zCAUDYWNjAl80BAFwCQEKcGxhY2VQcm9kQgYFA3NlZwgFA2FjYwJfMgUKaXNQb3NpdGl2ZQUJZHVja1N0YXRzCAUDYWNjAl8zCAUDYWNjAl80CQCWCgQJAGQCBQFqAAEIBQFwAl8xCAUBcAJfMggFAXACXzMEAXQKAAIkbAUHc2VnTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQZwQnl0ZXMFCG9jY3VwaWVkBQRmcmVlCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCQCVCgMIBQF0Al8yCAUBdAJfMwgFAXQCXzQBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQtkdWNrQXNzZXRJZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEBmN1cnJFcQkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQJdGVtcFByb2RCCQEGZHJlc3NCBAUGY3VyckVxBQxFTVBUWV9QUk9ENTAGBQNuaWwECHNlZ0JwQXV4CQCRAwIJALUJAgkAkQMCBQZjdXJyRXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUGY3VyckVxBQl0ZW1wUHJvZEIHBQVzdGF0cwkAAAIFCG5ld1Byb2RCBQhuZXdQcm9kQgEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIcHJvcExpc3QNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24DCQECIT0CCQCQAwEFCHByb3BMaXN0BQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhCgEHdXBkYXRlcgIDYWNjAWkEBnJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wTGlzdAUBaQkAaAIJAGgCBQRzaWduCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFlBhbmljISBQaWVjZXMgb2YgdHlwZT0JAKQDAQUBaQIHLCBzaWduPQkApAMBBQRzaWduAhMsIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAgFfAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BCXZpcnRDbGFpbQQNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAlAoCCQDNCAIIBQNhY2MCXzEFCXJlc09mVHlwZQkAZAIIBQNhY2MCXzIFCXJlc09mVHlwZQoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhhZGRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIFAXICAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8KAQxhZGRQYXJ0TGlzdHMCA2FjYwFpBAZ3aFBhcnQJAGsDCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCQCUCgIJAM0IAggFA2FjYwJfMQkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQUGd2hQYXJ0CQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFBndoUGFydAQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZFBhcnRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQNhYnMBAXgDCQDAAgIFAXgJALYCAQAABQF4CQC+AgEFAXgABGZyZXEJAMwIAgkAzAgCAAYJAMwIAgAJCQDMCAIADgkAzAgCAA8JAMwIAgAQBQNuaWwJAMwIAgkAzAgCAAUJAMwIAgAICQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAECQDMCAIACQkAzAgCAAoJAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAGCQDMCAIABwkAzAgCAA8JAMwIAgATBQNuaWwJAMwIAgkAzAgCAAQJAMwIAgAHCQDMCAIACAkAzAgCAA0JAMwIAgASBQNuaWwFA25pbAEHZ2VuQ2hhcgIBbgVmcmVxcwQDcmVtCQCgAwEJALsCAgUBbgUHVFdFTlRZWAQGbGV0dGVyAwkAZgIJAJEDAgUFZnJlcXMAAAUDcmVtAgFBAwkAZgIJAJEDAgUFZnJlcXMAAQUDcmVtAgFCAwkAZgIJAJEDAgUFZnJlcXMAAgUDcmVtAgFDAwkAZgIJAJEDAgUFZnJlcXMAAwUDcmVtAgFEAwkAZgIJAJEDAgUFZnJlcXMABAUDcmVtAgFFAgFGBQZsZXR0ZXIBC2dlblRlcnJhaW5zAgRzZWVkDGNvbnRpbmVudElkeAQBZgkAkQMCBQRmcmVxBQxjb250aW5lbnRJZHgKARB0ZXJyYWluR2VuZXJhdG9yAgNhY2MEZWxlbQkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAggFA2FjYwJfMQkBB2dlbkNoYXICCAUDYWNjAl8yBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUHVFdFTlRZWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTJYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZM1gFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFk0WAUBZgkAugICCAUDYWNjAl8yBQhUV0VOVFk1WAQBdAoAAiRsCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgIACQC6AgIFBHNlZWQFBUZJVkVYCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARB0ZXJyYWluR2VuZXJhdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQgFAXQCXzEABlBFUk0yNQkAzAgCAAcJAMwIAgACCQDMCAIADwkAzAgCABMJAMwIAgAICQDMCAIAGAkAzAgCAAEJAMwIAgAVCQDMCAIAEAkAzAgCAAUJAMwIAgAACQDMCAIAFgkAzAgCABQJAMwIAgAXCQDMCAIACwkAzAgCAAQJAMwIAgASCQDMCAIADAkAzAgCAAYJAMwIAgAKCQDMCAIAAwkAzAgCABEJAMwIAgANCQDMCAIACQkAzAgCAA4FA25pbAAGVENIQVJTCQDMCAICAUEJAMwIAgIBQgkAzAgCAgFDCQDMCAICAUQJAMwIAgIBRQkAzAgCAgFGBQNuaWwBE2dlblRlcnJhaW5zRm9yTWVyZ2UCC3N1bVRlcnJhaW5zDWxhbmRTaXplSW5kZXgKAQVzdGVwMQIDYWNjAXMEAWoIBQNhY2MCXzIEAmVsCQENcGFyc2VJbnRWYWx1ZQEFAXMEAXgDCQAAAgUCZWwAAAAAAwkAZwIFAmVsCQBoAgAEBQ1sYW5kU2l6ZUluZGV4CQBpAgUCZWwFDWxhbmRTaXplSW5kZXgDCQBmAgUCZWwJAGgCAAMFDWxhbmRTaXplSW5kZXgAAwkAZAIJAGkCCQBlAgUCZWwAAQUNbGFuZFNpemVJbmRleAABCQCVCgMJAM0IAggFA2FjYwJfMQUBeAkAZAIIBQNhY2MCXzIAAQkAZAIIBQNhY2MCXzMFAXgEAXQKAAIkbAULc3VtVGVycmFpbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBXN0ZXAxAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBANhcnIIBQF0Al8xBAZtYXhJZHgJAQV2YWx1ZQEJAM8IAgUDYXJyCQCWAwEFA2FycgQFZGVsdGEJAGUCCAUBdAJfMwAZCgEGc3ViYmVyAgNhY2MDaWR4BAN2YWwDCQAAAgUDaWR4BQZtYXhJZHgJAGUCCQCRAwIFA2FycgUDaWR4BQVkZWx0YQkAkQMCBQNhcnIFA2lkeAQGemVyb2VzAwkAAAIFA3ZhbAAABQNuaWwJALUJAgkAsAICCQCkAwEJAGwGAAoAAAUDdmFsAAAAAAUERE9XTgABAgAEAWMJAJEDAgUGVENIQVJTBQNpZHgKAQdsaXN0R2VuAgJhYwdpZ25vcmVkCQDNCAIFAmFjBQFjBAF6CgACJGwFBnplcm9lcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHbGlzdEdlbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQkAzggCBQNhY2MFAXoEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBnN1YmJlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBBnBlcm11dAIDYWNjAWoJAKwCAgUDYWNjCQCRAwIFAXIFAWoKAAIkbAUGUEVSTTI1CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZwZXJtdXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDI1CQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkBC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAQdzdW1Qcm9kAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FDlBST0RVQ1RQS0dTSVpFAAEFDlBST0RVQ1RQS0dTSVpFCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQId2hNYXRWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQKd2hHb29kc1ZvbAMJAAACBQVnb29kcwIAAAAICgACJGwJALwJAgUFZ29vZHMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1Qcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADICXzIJAGQCCQBkAgUId2hSZXNWb2wFCHdoTWF0Vm9sBQp3aEdvb2RzVm9sAQxnZXRXYXJlaG91c2UDBXdoS2V5CWxhbmRJbmRleAppbmZyYUxldmVsBAl2b2xQcmVmaXgJAKwCAgkArAICCQCkAwEFCWxhbmRJbmRleAIBXwkApAMBBQppbmZyYUxldmVsBAd3aFRvdGFsCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQl2b2xQcmVmaXgEBXdoU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFBXdoS2V5CQCsAgIFCXZvbFByZWZpeAIbOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOjowBAJ3aAkAvAkCBQV3aFN0cgIBOgQKd2hPY2N1cGllZAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBndoTG9mdAMJAGYCAAUJAJADAQUCd2gJALkJAgkAzAgCAgEwCQDMCAIJAKQDAQUKd2hPY2N1cGllZAkAzAgCCQCkAwEJAGUCBQd3aFRvdGFsBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfBARsb2Z0CQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwQId2hMb2NrZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQEA29jYwMJAGYCCQCQAwEFBGxvZnQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQp3aE9jY3VwaWVkCQC5CQIJAMwIAgkApAMBBQh3aExvY2tlZAkAzAgCCQCkAwEFA29jYwkAzAgCCQCkAwEJAGUCCQBlAgUHd2hUb3RhbAUId2hMb2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC8CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hyAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0EAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZSAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZNAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2htCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoTWF0BQFpBANicG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hNYXQFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBtAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2htCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3dobQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFtCgACJGwFCG1hdFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBcgJfNAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZNAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZQAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hwAwkAZgIJAJADAQUKY3VycldoUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJXaFByb2QFAWkAAAQDYnBwAwkAZgIJAJADAQUPY3VycmVudFBhY2tQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPY3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wDCQBmAgkBAS0BBQJhbQUDd2hwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAugkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAugkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALwJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALwJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgDCQEBIQEJARdjYW5XZWFyQ3VycmVudEVxdWlwbWVudAEFC2R1Y2tBc3NldElkCQACAQIWRXF1aXBtZW50IGluY29tcGF0aWJsZQQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECHByb2RVc2VkAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAkAkQMCBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCXCgUFBW5ld0hQBQtkdWNrQXNzZXRJZAUKc2VudEFtb3VudAULbmV3TG9jYXRpb24FCHByb2RVc2VkAQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMzM3MzgzNDI3NwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAzMzczODM0Mjc3Al8xBAZkdWNrSWQIBQ0kdDAzMzczODM0Mjc3Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM2NjUxMzc1MjIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM2NjUxMzc1MjICXzEEBWJwUmVzCAUNJHQwMzY2NTEzNzUyMgJfMgQFbG9mdE8IBQ0kdDAzNjY1MTM3NTIyAl8zBAVsb2Z0RggFDSR0MDM2NjUxMzc1MjICXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwMJAQEhAQUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBnAgUIY3VyTGV2ZWwAAwcJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbWF4SW5mcmEJAGQCCQBpAgkBBHNxcnQEBQZwaWVjZXMAAAAABQRET1dOAAUAAgQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABAwMFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZgIFCG5ld0xldmVsBQhtYXhJbmZyYQcJAAIBCQCsAgICJUN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAJAKQDAQUIbWF4SW5mcmEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EB21hdFVzZWQJAGsDBRFJbmZyYVVwZ3JhZGVDb3N0UwkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUHbWF0VXNlZAIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJUKAwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwFB21hdFVzZWQBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgtkdWNrQXNzZXRJZAdkZWx0YVhQBAZsdmxLZXkJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAQFeHBLZXkJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIEYWRkcgdkZWx0YVhQBAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCAULY2xhaW1SZXN1bHQCXzEJAQxJbnRlZ2VyRW50cnkCBQ1hY3RpdmF0aW9uS2V5BQZwaWVjZXMJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCAULY2xhaW1SZXN1bHQCXzUCAToBD2NoZWNrVG91cm5hbWVudAELZHVja0Fzc2V0SWQEBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFEnRvdXJuYW1lbnRDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAVQHAwMDCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIWZXhpdFRvdXJuYW1lbnRJbnRlcm5hbAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsBQNuaWwBDWNoZWNrRGVsaXZlcnkBC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRAcECXN0YXJ0VGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQECGRpc3RhbmNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkAwMJAGYCBQNub3cJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwkAZgIAAwUIZGlzdGFuY2UHCQACAQIgWW91ciBkdWNrIGlzIG9uIGRlbGl2ZXJ5IG1pc3Npb24JAQlhc0Jvb2xlYW4BCQD8BwQFBHRoaXMCFGV4aXREZWxpdmVyeUludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAESZXhpdERlbGl2ZXJ5Q29tbW9uAQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQtkdWNrQXNzZXRJZAIUTkZUIGR1Y2sgaXMgb3JwaGFuZWQECWhlYWx0aEtleQkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJY3VySGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBBQloZWFsdGhLZXkEDm91dGNvbWVBY3Rpb25zAwkAZwIFCGRpc3RhbmNlAAMEBnJld2FyZAkA/AcEBQ9lY29ub215Q29udHJhY3QCEnNlbmREZWxpdmVyeVJld2FyZAkAzAgCBQVvd25lcgUDbmlsBQNuaWwDCQAAAgUGcmV3YXJkBQZyZXdhcmQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAGYCBQNub3cJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwkAAgECJllvdXIgZHVjayBpcyBzdGlsbCBvbiBkZWxpdmVyeSBtaXNzaW9uBAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEBnVubG9jawkA/AcEBQ9lY29ub215Q29udHJhY3QCFHVwZGF0ZURlbGl2ZXJ5TG9ja2VkCQDMCAIJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawMJAGcCAAAFCWN1ckhlYWx0aAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQBkAgUJc3RhcnRUaW1lBQlEQVlNSUxMSVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCWCgQFDm91dGNvbWVBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQloZWFsdGhLZXkFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBQ1zYXZlZExvY2F0aW9uBQtzYXZlZEhlYWx0aAENbWVyZ2VJbnRlcm5hbAYLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwduZWVkTWF0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAh1tZXJnZUludGVybmFsX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhttZXJnZUludGVybmFsX2NoZWNrRGVsaXZlcnkKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzYFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAZjUHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwNfMTAFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAtzdW1UZXJyYWlucwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl85BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAnAoKBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzggCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFA2FjYwJfNQkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQUJY3VzdG9tS2V5CQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQMJAQIhPQIFCmN1c3RvbU5hbWUCAAkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBQNuaWwFA25pbAUFcHJvcHMJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAkAZAIIBQNhY2MCXzgFBnBpZWNlcwULc3VtVGVycmFpbnMFBmNQcm9wcwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQFY29udDAJAJEDAgkAtQkCCAkBBXZhbHVlAQkA7AcBCQDZBAEJAJEDAgUMbGFuZEFzc2V0SWRzAAALZGVzY3JpcHRpb24CAV8FDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQVjb250MAILMF8wXzBfMF8wXzACAV8EAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUIcHJvcExpc3QFB2xhbmRzSW4AAAkAtQkCAgswXzBfMF8wXzBfMAIBXwUJY29udFByb3BzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJARNnZW5UZXJyYWluc0Zvck1lcmdlAggFAXICXzkJAGkCCQEPbnVtUGllY2VzQnlTaXplAQULbmV3TGFuZFNpemUFBVNTSVpFBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEECm5ld0xhbmROdW0JAKQDAQUHZnJlZU51bQQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQpuZXdMYW5kTnVtBQtuZXdMYW5kU2l6ZQkAuQkCCQDMCAIFCm5ld0xhbmROdW0JAMwIAgULbmV3TGFuZFNpemUJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8ECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAggFAXICXzgFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzCAUBcgJfOAkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACQC5CQIIBQFyAl82AgFfCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFCWNvbnRpbmVudAkAuQkCCAUBcgNfMTACAV8JAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTQADAgRTU1NTBQRhZGRyBQxsYW5kQXNzZXRJZHMAAAEDbTJsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFMAAQCA1NNTQUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMABAEEbDJ4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgICWEwABQIFU1NTTUwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAC8BBnhsMnh4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIDWFhMAAYCA0xYTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMANgELbWVyZ2VDb21tb24CBGFkZHIMbGFuZEFzc2V0SWRzBAckbWF0Y2gwCQCQAwEFDGxhbmRBc3NldElkcwMJAAACAAQFByRtYXRjaDAJAQNzMm0CBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgADBQckbWF0Y2gwCQEDbTJsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIABQUHJG1hdGNoMAkBBGwyeGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzCQACAQINVW5rbm93biBtZXJnZQEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZC0BaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJAM0IAgUFbGFuZHMFC2xhbmRBc3NldElkAgFfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkJAGQCBQlvbGRQaWVjZXMFBnBpZWNlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEAWQIBQFjAl8zBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM0IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQljdXJIZWFsdGgFDHByb2xvZ0FjdGlvbgFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFCmFzc2V0SWRTdHIJAAIBAhl1bnN0YWtlRHVja19jaGVja0RlbGl2ZXJ5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQFbmV3SFAIBQFmAl8xBAtkdWNrQXNzZXRJZAgFAWYCXzIEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQLbmV3TG9jYXRpb24IBQFmAl80AwkAAAIFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAAgECIllvdSBjYW4ndCBmbHkgdG8gdGhlIHNhbWUgbG9jYXRpb24EBm5ld0xvYwkAtQkCBQtuZXdMb2NhdGlvbgIBXwQGaXNUb3VyCQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAVQEB2lzRGVsaXYJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBRAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDY4NDE5Njg1MTYJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNjg0MTk2ODUxNgJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNjg0MTk2ODUxNgJfMgQNJHQwNjg1MTk3MTYwMQMJAQxub3RPbk1pc3Npb24CBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEPaXNVc3VhbExvY2F0aW9uAQULbmV3TG9jYXRpb24JAQxjaGVhdEF0dGVtcHQCBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAJQKAgULY3VyTG9jYXRpb24AAAMJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24DCQEBIQEJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULbmV3TG9jYXRpb24JAAIBAipZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gdGhlIHRvdXJuYW1lbnQEBXNjb3JlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGbmV3TG9jBQhsb2NJZHhJZAQGY3VyTG9jCQC1CQIFC2N1ckxvY2F0aW9uAgFfBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAADCQECIT0CBQVzY29yZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZjdXJMb2MFCGxvY0lkeElkAAEJAQxjaGVhdEF0dGVtcHQCBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAMJAQEhAQkBDGlzSW5EZWxpdmVyeQEFC2N1ckxvY2F0aW9uBAlsb2NIZWFsdGgJARBhc1N0cmluZ0ludFR1cGxlAQkA/AcEBQR0aGlzAhBhdXRvRXhpdERlbGl2ZXJ5CQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAMJAAACBQlsb2NIZWFsdGgFCWxvY0hlYWx0aAMFB2lzRGVsaXYFCWxvY0hlYWx0aAMJAGYCBQVuZXdIUAAACQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAlAoCCAUJbG9jSGVhbHRoAl8xAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQEBIQEFB2lzRGVsaXYJAAIBAiRZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gZGVsaXZlcnkDCQEBIQEJAQxpc0luRGVsaXZlcnkBBQtuZXdMb2NhdGlvbgkBDGNoZWF0QXR0ZW1wdAIFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgQFc2NvcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZuZXdMb2MFCGxvY0lkeElkBAZjdXJMb2MJALUJAgULY3VyTG9jYXRpb24CAV8DCQECIT0CBQVzY29yZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZjdXJMb2MFCGxvY0lkeElkAAEJAQxjaGVhdEF0dGVtcHQCBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAECWxvY0hlYWx0aAkBEGFzU3RyaW5nSW50VHVwbGUBCQD8BwQFBHRoaXMCEGF1dG9FeGl0RGVsaXZlcnkJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFCWxvY0hlYWx0aAUJbG9jSGVhbHRoBQlsb2NIZWFsdGgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECWxvY1RvU2F2ZQgFDSR0MDY4NTE5NzE2MDECXzEECGhwVG9TYXZlCAUNJHQwNjg1MTk3MTYwMQJfMgkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQlsb2NUb1NhdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQVuZXdIUAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDOCAIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIFBW5ld0hQAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIUaGVhbF9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQISaGVhbF9jaGVja0RlbGl2ZXJ5BANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwZyZWNpcGUEAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAADCQBmAgADBQFuBAFxCQCRAwIFA3F0cwUBbgMJAGYCBQFxBQF4CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUBeAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAW4JAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQF4BQFxCQBkAgUBbgABCQBkAggFA2FjYwJfMwkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFBnJlY2lwZQIBXwUKcklkeEVmZmVjdAUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZoZWFsRVNfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxFU19jaGVja0RlbGl2ZXJ5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8FCnJJZHhFZmZlY3QEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgUFTVVMVDgFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAtmaW5pc2hCbG9jawkAZAIFBmhlaWdodAULcmFuZG9tRGVsYXkEBGFkZHIJAKUIAQgFAWkGY2FsbGVyCQCUCgIJAM0IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleUNvbW1pdAEFBGFkZHIFC2ZpbmlzaEJsb2NrBQNuaWwFDHByb2xvZ0FjdGlvbgULZmluaXNoQmxvY2sBaQEKYXdhcmRTTGFuZAEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIIBQZyZXN1bHQCXzEICAUGcmVzdWx0Al8yAl8xAWkBCGJ1eVNMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM0IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA0kdDA3OTAwNTc5MTAyCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81BAVuZXdFcQgFDSR0MDc5MDA1NzkxMDICXzEED3Nob3VsZFplcm9CdWZmcwgFDSR0MDc5MDA1NzkxMDICXzIEAWUJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEAmlkCAgFAWUCXzICXzEEBnJlc3VsdAMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQUDbmlsAgAAAAkAlQoDCQDOCAIIBQFlAl8xAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwJAM0IAgkAzQgCCQDNCAIJAM0IAgUDbmlsCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BQJpZAgFAWYCXzMDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhpleHBlZGl0aW9uX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhhleHBlZGl0aW9uX2NoZWNrRGVsaXZlcnkEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlQoDCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zBQthY3Jlc1Jlc3VsdAFpARBidXlTTGFuZEZvckFjcmVzAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDFNfQ09TVF9BQ1JFUwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFDFNfQ09TVF9BQ1JFUwQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGFjcmVzQXNzZXRJZAUDYW10BQNuaWwJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24JAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDNCAIFBnJlc3VsdAUMcHJvbG9nQWN0aW9uAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBQxsYW5kQXNzZXRJZHMJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBF2ZpeENvbnRpbmVudFByb3BvcnRpb25zAQxsYW5kQXNzZXRJZHMDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQKAQhnZXRQcm9wcwIDYWNjBGNvbnQJAM0IAgUDYWNjCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUEY29udAILMF8wXzBfMF8wXzAEAXAKAAIkbAUKY29udGluZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZ2V0UHJvcHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCgEJcHJvY2Vzc29yAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQUFU1NJWkUEBGNvbnQJAJEDAgUBZAUMcmVjQ29udGluZW50BA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMEDGNvbnRpbmVudElkeAkBBXZhbHVlAQkAzwgCBQpjb250aW5lbnRzBQRjb250BAljb250UHJvcHMJALUJAgkAkQMCBQNhY2MFDGNvbnRpbmVudElkeAIBXwQHdXBkYXRlZAkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8EByRtYXRjaDAFBGNvbnQDCQAAAgIIQW1lcmljYXMFByRtYXRjaDAJAMwIAgUHdXBkYXRlZAkAzAgCCQCRAwIFA2FjYwABCQDMCAIJAJEDAgUDYWNjAAIJAMwIAgkAkQMCBQNhY2MAAwkAzAgCCQCRAwIFA2FjYwAEBQNuaWwDCQAAAgIGRXVyb3BlBQckbWF0Y2gwCQDMCAIJAJEDAgUDYWNjAAAJAMwIAgUHdXBkYXRlZAkAzAgCCQCRAwIFA2FjYwACCQDMCAIJAJEDAgUDYWNjAAMJAMwIAgkAkQMCBQNhY2MABAUDbmlsAwkAAAICBEFzaWEFByRtYXRjaDAJAMwIAgkAkQMCBQNhY2MAAAkAzAgCCQCRAwIFA2FjYwABCQDMCAIFB3VwZGF0ZWQJAMwIAgkAkQMCBQNhY2MAAwkAzAgCCQCRAwIFA2FjYwAEBQNuaWwDCQAAAgIGQWZyaWNhBQckbWF0Y2gwCQDMCAIJAJEDAgUDYWNjAAAJAMwIAgkAkQMCBQNhY2MAAQkAzAgCCQCRAwIFA2FjYwACCQDMCAIFB3VwZGF0ZWQJAMwIAgkAkQMCBQNhY2MABAUDbmlsAwkAAAICB09jZWFuaWEFByRtYXRjaDAJAMwIAgkAkQMCBQNhY2MAAAkAzAgCCQCRAwIFA2FjYwABCQDMCAIJAJEDAgUDYWNjAAIJAMwIAgkAkQMCBQNhY2MAAwkAzAgCBQd1cGRhdGVkBQNuaWwJAAIBAg93cm9uZyBjb250aW5lbnQEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUBcAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJcHJvY2Vzc29yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQIIQW1lcmljYXMJAJEDAgUBcgAACQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQIGRXVyb3BlCQCRAwIFAXIAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAECBEFzaWEJAJEDAgUBcgACCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQIGQWZyaWNhCQCRAwIFAXIAAwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAECB09jZWFuaWEJAJEDAgUBcgAEBQNuaWwAAAFpAQ9maXhTdGFrZWRQaWVjZXMBB2FkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEDHN0YWtlZFBpZWNlcwMJAAACBQdhZGRyZXNzAgAAAAQIbGFuZHNTdHIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQIbGFuZFNpemUJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplCQBkAgUDYWNjCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwUMc3Rha2VkUGllY2VzBQNuaWwFDHN0YWtlZFBpZWNlcwFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECmZyZWVLZXlBY2MJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIEDWZyZWVQb2ludHNBY2MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQpmcmVlS2V5QWNjAAAEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUIY2hhcnNLZXkCCTBfMF8wXzBfMAIBXwQGbmV3QWNjCQBlAgUNZnJlZVBvaW50c0FjYwUPc3VtVG9EaXN0cmlidXRlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQEGYW1vdW50CQCUCgIFA25pbAkBEmdldE5lZWRlZE1hdGVyaWFscwEFBmFtb3VudAFpASRzcGxpdEJ5R2xvYmFsQW5kTG9jYWxXZWlnaHRzUkVBRE9OTFkDCW1hdEFtb3VudAlyZXNBbW91bnQIdGVycmFpbnMEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQUIdGVycmFpbnMJAJQKAgUDbmlsCQCUCgIJARJnZXROZWVkZWRNYXRlcmlhbHMBBQltYXRBbW91bnQJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUJcmVzQW1vdW50BQ10ZXJyYWluQ291bnRzAWkBE2dldEJhY2twYWNrUkVBRE9OTFkBC2R1Y2tBc3NldElkCQCUCgIFA25pbAkAuQkCCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAIBOgFpARRnZXRXYXJlaG91c2VSRUFET05MWQELbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQCUCgIFA25pbAkAugkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwCAToBaQEKc2F2ZUxhc3RUeAAEBmNhbGxlcggFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAUGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQDMCAIJAQZwcm9sb2cBBQFpBQNuaWwAKgFpAQ91cGRhdGVEdWNrU3RhdHMCC2R1Y2tBc3NldElkB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQdkZWx0YVhQAWkBDnVwZGF0ZUFjY1N0YXRzAgRhZGRyB2RlbHRhWFADAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUNYWNyZXNDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGWVxdWlwRHVja19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIXZXF1aXBEdWNrX2NoZWNrRGVsaXZlcnkEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBW5ld0VxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQVzdGF0cwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUJZXF1aXBtZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAcJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAgJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAkJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAoJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAsFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBD2ZvcnRpZmljYXRlTGFuZAILbGFuZEFzc2V0SWQEcGxhbgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAlkdWNrU3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAAABwQHZm9ydEtleQkBF2tleUZvcnRpZmljYXRpb25zQnlMYW5kAQULbGFuZEFzc2V0SWQEDGN1cnJlbnRGb3J0cwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFB2ZvcnRLZXkCDDowXzE1OjBfMTg6MAIBXwQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQHY3VyTG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8EBGN1ck8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQt2b2xPY2N1cGllZAQEY3VyRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2N1ckxvZnQFB3ZvbEZyZWUECG5ld0ZvcnRzCQC1CQIFBHBsYW4CAV8EDyR0MDEwMTIwNjEwMTMyMQkBBWZvcnRCBgUMY3VycmVudEZvcnRzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFAndoBQl3aElkeFByb2QFBGN1ck8FBGN1ckYGBQNuaWwECXRlbXBQcm9kQggFDyR0MDEwMTIwNjEwMTMyMQJfMQQFdGVtcE8IBQ8kdDAxMDEyMDYxMDEzMjECXzIEBXRlbXBGCAUPJHQwMTAxMjA2MTAxMzIxAl8zBA8kdDAxMDEzMjQxMDE0MjAJAQVmb3J0QgYFCG5ld0ZvcnRzBQl0ZW1wUHJvZEIFBXRlbXBPBQV0ZW1wRgcFCWR1Y2tTdGF0cwQIbmV3UHJvZEIIBQ8kdDAxMDEzMjQxMDE0MjACXzEEBG5ld08IBQ8kdDAxMDEzMjQxMDE0MjACXzIEBG5ld0YIBQ8kdDAxMDEzMjQxMDE0MjACXzMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQdjdXJMb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQRuZXdPCQDMCAIJAKQDAQUEbmV3RgkAzAgCCQCRAwIFB2N1ckxvZnQFCHZvbFRvdGFsBQNuaWwCAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQdmb3J0S2V5BQRwbGFuCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgUDbmlsBQtjdXJMb2NhdGlvbgFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAcBaQEUZXhpdERlbGl2ZXJ5SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQBZQkBEmV4aXREZWxpdmVyeUNvbW1vbgEFC2R1Y2tBc3NldElkCQCUCgIJAM4IAggFAWUCXzEIBQFlAl8yBwFpARBhdXRvRXhpdERlbGl2ZXJ5AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEAWUJARJleGl0RGVsaXZlcnlDb21tb24BBQtkdWNrQXNzZXRJZAkAlAoCCAUBZQJfMQkAlAoCCAUBZQJfMwgFAWUCXzQBaQEOcHJlcGFyZVJvYmJlcnkCB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAhRXcm9uZyBtZXNzYWdlIGZvcm1hdAQLZHVja0Fzc2V0SWQJAJEDAgUFcGFydHMAAAQHcm9iQ29zdAgJAQ5nZXRSb2JiZXJ5RGF0YQIFBHRoaXMFC2R1Y2tBc3NldElkAl8xAwkAZgIFB3JvYkNvc3QFBndsZ0FtdAkAAgEJAKwCAgkArAICCQCsAgICCFBheW1lbnQgCQCkAwEFBndsZ0FtdAIMIDwgcmVxdWlyZWQgCQCkAwEFB3JvYkNvc3QECmNhbmRpZGF0ZXMJALUJAgkAkQMCBQVwYXJ0cwABAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlkdWNrU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCiCAEJARNrZXlMb2NrZWRMYW5kQnlEdWNrAQULZHVja0Fzc2V0SWQCAAQHbGFuZEVUQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TGFuZENvb2xkb3duRVRBAQUKbG9ja2VkTGFuZAAAAwMJAQIhPQIFCWR1Y2tTdGF0ZQULZHVja0lkeEZyZWUJAGYCBQdsYW5kRVRBBQNub3cHCQACAQkArAICAidZb3UgYWxyZWFkeSBzdGFydGVkIHJvYmJpbmcsIHdhaXQgdGlsbCAJAKQDAQUHbGFuZEVUQQoBB2NoZWNrZXICA2FjYwtsYW5kQXNzZXRJZAQFc3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE2tleUxhbmRSb2JiZXJ5U3RhdGUBBQtsYW5kQXNzZXRJZAAABAtjb29sZG93bkVUQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TGFuZENvb2xkb3duRVRBAQULbGFuZEFzc2V0SWQAAAMJAGYCBQVzdGF0ZQkAkAMBBRBsYW5kUm9iQ29vbGRvd25zCQACAQINSW52YWxpZCBzdGF0ZQMJAGYCBQNub3cFC2Nvb2xkb3duRVRBBApzdGFrZWRUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAMJAGcCAAAFCnN0YWtlZFRpbWUFA2FjYwQBYQkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAFkCQC1CQIIBQFhC2Rlc2NyaXB0aW9uAgFfBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAxwcm9kdWN0aXZpdHkJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlkZWx0YVRpbWUJAGUCBQNub3cFCnN0YWtlZFRpbWUECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUMcHJvZHVjdGl2aXR5BQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQ5NSU5fUkVTX1RPX1JPQgUIYXZhaWxSZXMFA2FjYwkAzQgCBQNhY2MFC2xhbmRBc3NldElkBQNhY2MECGZpbHRlcmVkCgACJGwFCmNhbmRpZGF0ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NoZWNrZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgkAkAMBBQhmaWx0ZXJlZAAACQACAQIZTm8gY2FuZGlkYXRlcyBmb3Igcm9iYmVyeQQGcm5kSWR4CQEPZ2V0UmFuZG9tTnVtYmVyAwkAkAMBBQhmaWx0ZXJlZAUGaGVpZ2h0CQDLAQIFA3NpZwgFAWkNdHJhbnNhY3Rpb25JZAQLbGFuZEFzc2V0SWQJAJEDAgUIZmlsdGVyZWQFBnJuZElkeAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAkAZAIFA25vdwkAkQMCBRBsYW5kUm9iQ29vbGRvd25zBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQFEGR1Y2tJZHhQcmVwYXJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAULbGFuZEFzc2V0SWQJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFC2xhbmRBc3NldElkAWkBB3JvYkxhbmQCB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBBQtkdWNrQXNzZXRJZAUDbm93BQNuaWwAAAFpAQ5hY2NlcHREZWxpdmVyeQADCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BQ9kZWxpdmVyeUZ1bmRLZXkAAAQLbG9ja2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BRFkZWxpdmVyeUxvY2tlZEtleQAAAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAZQIFCWZ1bmRUb3RhbAULbG9ja2VkVG90YWwJAAIBCQCsAgIJAKwCAgkArAICAiBEZWxpdmVyeSBpcyBub3QgYXZhaWxhYmxlLCBmdW5kPQkBCmZpeGVkUG9pbnQCBQlmdW5kVG90YWwABgIJLCBsb2NrZWQ9CQEKZml4ZWRQb2ludAIFC2xvY2tlZFRvdGFsAAYEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECGRlbGF5RVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlEZWxpdmVyeURlbGF5QnlEdWNrAQULZHVja0Fzc2V0SWQAAAMJAGYCBQhkZWxheUVUQQUDbm93CQACAQkArAICAipEZWxpdmVyeSBpcyBmb3JiaWRkZW4gZm9yIHlvdXIgZHVjayB1bnRpbCAJAKQDAQUIZGVsYXlFVEEDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAh5hY2NlcHREZWxpdmVyeV9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIcYWNjZXB0RGVsaXZlcnlfY2hlY2tEZWxpdmVyeQQObmV3TG9ja2VkVG90YWwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBkAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OBBBkZWxpdmVyeUxvY2F0aW9uCQCsAgIJAKQDAQUDbm93AgRfRF8wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUQZGVsaXZlcnlMb2NhdGlvbgUDbmlsCQCUCgIFEGRlbGl2ZXJ5TG9jYXRpb24FDm5ld0xvY2tlZFRvdGFsALZ+tSo=", "height": 2768161, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7j34EtuKEvVTLxQkXEdxVXzBS6knWJGGToPdzcTbUEZ3 Next: 8RhRnoCrB9KL43ncxmWmtdKbZnjCHef1poLFPejkf8ES Diff:
OldNewDifferences
184184
185185 let aM = 50000
186186
187-let aN = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
188-
189-let aO = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
190-
191-let aP = 10000000
192-
193-let aQ = [15, 16, 17, 18, 19, 20]
194-
195-let aR = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
196-
197-let aS = 6
198-
199-let aT = 8
200-
201-let aU = 9
202-
203-let aV = 10
187+let aN = 600000
188+
189+let aO = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
190+
191+let aP = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
192+
193+let aQ = 10000000
194+
195+let aR = [15, 16, 17, 18, 19, 20]
196+
197+let aS = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
198+
199+let aT = 6
200+
201+let aU = 8
202+
203+let aV = 9
204204
205205 let aW = 10
206206
207-let aX = 0
208-
209-let aY = 1
210-
211-let aZ = 2
212-
213-let ba = 3
214-
215-let bb = 4
216-
217-let bc = 0
218-
219-let bd = 1
220-
221-let be = 2
222-
223-let bf = 3
224-
225-let bg = 0
226-
227-let bh = 1
228-
229-let bi = 2
230-
231-let bj = 3
232-
233-let bk = 0
234-
235-let bl = 1
236-
237-let bm = 2
238-
239-func bn (bo) = ("no_" + bo)
240-
241-
242-func bp (bo) = ("lcna_" + bo)
243-
244-
245-func bq (bo) = ("st_" + bo)
246-
247-
248-func br (bs,bo) = makeString(["las", bs, bo], "_")
249-
250-
251-func bt (bu,bo,bv) = ((((("sttao_" + bu) + "_") + bo) + "_") + bv)
252-
253-
254-func bw (P) = ("wh_" + P)
255-
256-
257-func bx (bo) = ("infraLevel_" + bo)
258-
259-
260-func by (P) = ("fortifications_" + P)
261-
262-
263-func bz (bo) = ("duckCustomNameByAssetId_" + bo)
264-
265-
266-func bA (c) = ("accountCustomNameByAddr_" + c)
267-
268-
269-func bB (c) = ("accRefBy_" + c)
270-
271-
272-func bC (A) = ("onboardArtActivatedOnDuck_" + A)
273-
274-
275-func bD (c) = ("onboardArtActivatedDuckBy_" + c)
276-
277-
278-func bE (c) = ("accReferrals_" + c)
279-
280-
281-func bF (bo) = ("duckOwner_" + bo)
282-
283-
284-func bG (bv) = ("stakedDuckByOwner_" + bv)
285-
286-
287-func bH (A) = ("backPack_" + A)
288-
289-
290-func bI (A) = ("duckLocation_" + A)
291-
292-
293-func bJ (bK) = ("%s%s__userGwlReleaseTime__" + bK)
294-
295-
296-func bL () = "emergencyWarehouseProducts"
297-
298-
299-let bM = "deliveryFund"
300-
301-let bN = "deliveryLocked"
302-
303-let bO = "%s__lastTourId"
304-
305-func bP (bQ) = ("%s%d__tourStaticData__" + toString(bQ))
306-
307-
308-func bR (bQ) = ("%s%d__tourDynamicData__" + toString(bQ))
309-
310-
311-func bS (bQ,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bQ), A], "__")
312-
313-
314-let bT = 0
315-
316-let bU = 1
317-
318-let bV = 6
319-
320-let bW = 1
321-
322-func bX (bY,bQ) = {
323- let bZ = split(valueOrErrorMessage(getString(bY, bP(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
324- let ca = split_4C(valueOrErrorMessage(getString(bY, bR(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
325-[bZ, ca]
326- }
327-
328-
329-func cb (bY,cc) = {
330- let cd = valueOrElse(getInteger(bY, bO), 0)
331- let ce = split(cc, "_")
207+let aX = 10
208+
209+let aY = 0
210+
211+let aZ = 1
212+
213+let ba = 2
214+
215+let bb = 3
216+
217+let bc = 4
218+
219+let bd = 0
220+
221+let be = 1
222+
223+let bf = 2
224+
225+let bg = 3
226+
227+let bh = 0
228+
229+let bi = 1
230+
231+let bj = 2
232+
233+let bk = 3
234+
235+let bl = 0
236+
237+let bm = 1
238+
239+let bn = 2
240+
241+func bo (bp) = ("no_" + bp)
242+
243+
244+func bq (bp) = ("lcna_" + bp)
245+
246+
247+func br (bp) = ("st_" + bp)
248+
249+
250+func bs (bt,bp) = makeString(["las", bt, bp], "_")
251+
252+
253+func bu (bv,bp,bw) = ((((("sttao_" + bv) + "_") + bp) + "_") + bw)
254+
255+
256+func bx (P) = ("wh_" + P)
257+
258+
259+func by (bp) = ("infraLevel_" + bp)
260+
261+
262+func bz (P) = ("fortifications_" + P)
263+
264+
265+func bA (bp) = ("duckCustomNameByAssetId_" + bp)
266+
267+
268+func bB (c) = ("accountCustomNameByAddr_" + c)
269+
270+
271+func bC (c) = ("accRefBy_" + c)
272+
273+
274+func bD (A) = ("onboardArtActivatedOnDuck_" + A)
275+
276+
277+func bE (c) = ("onboardArtActivatedDuckBy_" + c)
278+
279+
280+func bF (c) = ("accReferrals_" + c)
281+
282+
283+func bG (bp) = ("duckOwner_" + bp)
284+
285+
286+func bH (bw) = ("stakedDuckByOwner_" + bw)
287+
288+
289+func bI (A) = ("backPack_" + A)
290+
291+
292+func bJ (A) = ("duckLocation_" + A)
293+
294+
295+func bK (bL) = ("%s%s__userGwlReleaseTime__" + bL)
296+
297+
298+func bM () = "emergencyWarehouseProducts"
299+
300+
301+let bN = "deliveryFund"
302+
303+let bO = "deliveryLocked"
304+
305+let bP = "%s__lastTourId"
306+
307+func bQ (bR) = ("%s%d__tourStaticData__" + toString(bR))
308+
309+
310+func bS (bR) = ("%s%d__tourDynamicData__" + toString(bR))
311+
312+
313+func bT (bR,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bR), A], "__")
314+
315+
316+let bU = 0
317+
318+let bV = 1
319+
320+let bW = 6
321+
322+let bX = 1
323+
324+func bY (bZ,bR) = {
325+ let ca = split(valueOrErrorMessage(getString(bZ, bQ(bR)), (("Error reading tournament " + toString(bR)) + " data")), "__")
326+ let cb = split_4C(valueOrErrorMessage(getString(bZ, bS(bR)), (("Error reading tournament " + toString(bR)) + " data")), "__")
327+[ca, cb]
328+ }
329+
330+
331+func cc (bZ,cd) = {
332+ let ce = valueOrElse(getInteger(bZ, bP), 0)
333+ let cf = split(cd, "_")
332334 let ax = lastBlock.timestamp
333- let cf = bX(bY, cd)
334- let bZ = cf[bT]
335- let ca = cf[bU]
336- if (if (if ((ce[bl] == "T"))
337- then (parseIntValue(ce[bk]) == cd)
335+ let cg = bY(bZ, ce)
336+ let ca = cg[bU]
337+ let cb = cg[bV]
338+ if (if (if ((cf[bm] == "T"))
339+ then (parseIntValue(cf[bl]) == ce)
338340 else false)
339- then (ca[bW] == "INPROGRESS")
341+ then (cb[bX] == "INPROGRESS")
340342 else false)
341- then (parseIntValue(bZ[bV]) > ax)
343+ then (parseIntValue(ca[bW]) > ax)
342344 else false
343345 }
344346
345347
346-func cg (ch) = (parseIntValue(ch[aS]) * aP)
347-
348-
349-let ci = false
350-
351-let cj = false
352-
353-let ck = true
354-
355-let cl = take(drop(this.bytes, 1), 1)
356-
357-let cm = {
358- let cn = cl
359- if ((base58'2W' == cn))
348+func ch (cd) = {
349+ let cf = split(cd, "_")
350+ let ax = lastBlock.timestamp
351+ let ci = parseIntValue(cf[bl])
352+ let cj = parseIntValue(cf[bn])
353+ if (if ((cf[bm] == "D"))
354+ then (ax > (ci + aN))
355+ else false)
356+ then (3 >= cj)
357+ else false
358+ }
359+
360+
361+func ck (cd) = {
362+ let cl = split(cd, "_")[bm]
363+ if ((cl != "T"))
364+ then (cl != "D")
365+ else false
366+ }
367+
368+
369+func cm (bZ,cd) = {
370+ let ce = valueOrElse(getInteger(bZ, bP), 0)
371+ let cf = split(cd, "_")
372+ let ax = lastBlock.timestamp
373+ let cg = bY(bZ, ce)
374+ let ca = cg[bU]
375+ let cb = cg[bV]
376+ let cl = cf[bm]
377+ if (if ((cl != "T"))
378+ then (cl != "D")
379+ else false)
380+ then true
381+ else !(if (if (if ((cf[bm] == "T"))
382+ then (parseIntValue(cf[bl]) == ce)
383+ else false)
384+ then (cb[bX] == "INPROGRESS")
385+ else false)
386+ then (parseIntValue(ca[bW]) > ax)
387+ else false)
388+ }
389+
390+
391+func cn (co) = (parseIntValue(co[aT]) * aQ)
392+
393+
394+func cp (cq,cr) = throw(((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr))
395+
396+
397+let cs = false
398+
399+let ct = false
400+
401+let cu = true
402+
403+let cv = take(drop(this.bytes, 1), 1)
404+
405+let cw = {
406+ let cx = cv
407+ if ((base58'2W' == cx))
360408 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
361- else if ((base58'2T' == cn))
409+ else if ((base58'2T' == cx))
362410 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
363411 else throw("Unknown chain")
364412 }
365413
366-let co = {
367- let cn = cl
368- if ((base58'2W' == cn))
414+let cy = {
415+ let cx = cv
416+ if ((base58'2W' == cx))
369417 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
370- else if ((base58'2T' == cn))
418+ else if ((base58'2T' == cx))
371419 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
372420 else throw("Unknown chain")
373421 }
374422
375-let cp = {
376- let cn = cl
377- if ((base58'2W' == cn))
423+let cz = {
424+ let cx = cv
425+ if ((base58'2W' == cx))
378426 then 10000000000
379- else if ((base58'2T' == cn))
427+ else if ((base58'2T' == cx))
380428 then 100000000
381429 else throw("Unknown chain")
382430 }
383431
384-let cq = {
385- let cn = cl
386- if ((base58'2W' == cn))
432+let cA = {
433+ let cx = cv
434+ if ((base58'2W' == cx))
387435 then 86400000
388- else if ((base58'2T' == cn))
436+ else if ((base58'2T' == cx))
389437 then 60000
390438 else throw("Unknown chain")
391439 }
392440
393-let cr = "__"
394-
395-let cs = 1000000
396-
397-let ct = 100000000
398-
399-let cu = 25
400-
401-let cv = 100
402-
403-let cw = 225
404-
405-let cx = 400
406-
407-let cy = 625
408-
409-let cz = [0, 1, 2, 3, 4, 5]
410-
411-func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
412-
413-
414-let cD = 1
415-
416-let cE = 2
417-
418-let cF = 3
419-
420-let cG = 4
421-
422-let cH = 7
423-
424-let cI = 8
425-
426-func cJ () = "%s__restConfig"
427-
428-
429-func cK () = "%s__restAddr"
430-
431-
432-func cL (cM) = split_4C(cA(cM, cJ()), cr)
433-
434-
435-func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
436-
437-
438-let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
439-
440-let cO = cL(cQ)
441-
442-let an = cN(cO, cD)
443-
444-let cR = cN(cO, cE)
445-
446-let cS = cN(cO, cF)
447-
448-let cT = cN(cO, cG)
449-
450-let cU = cN(cO, cH)
451-
452-let cV = cN(cO, cI)
453-
454-let cW = 0
455-
456-let cX = 1
457-
458-let cY = 2
459-
460-let cZ = 3
461-
462-let da = "wlg_assetId"
463-
464-let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
465-
466-let dc = "acresAssetId"
467-
468-let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
469-
470-let de = 2
471-
472-func df (cB) = ("finishBlockForAddr_" + cB)
473-
474-
475-func dg () = "resTypesProportions"
476-
477-
478-func dh (di) = ("resTypesByContinent_" + di)
479-
480-
481-func dj (bv) = ("stakedLandsByOwner_" + bv)
482-
483-
484-func dk (bv) = ("stakedPiecesByOwner_" + bv)
485-
486-
487-func dl (dm) = {
488- let cn = dm
489- if ($isInstanceOf(cn, "String"))
441+let cB = "__"
442+
443+let cC = 1000000
444+
445+let cD = 100000000
446+
447+let cE = 25
448+
449+let cF = 100
450+
451+let cG = 225
452+
453+let cH = 400
454+
455+let cI = 625
456+
457+let cJ = [0, 1, 2, 3, 4, 5]
458+
459+func cK (cL,cM) = valueOrErrorMessage(getString(cL, cM), makeString(["mandatory ", toString(cL), ".", cM, " is not defined"], ""))
460+
461+
462+let cN = 1
463+
464+let cO = 2
465+
466+let cP = 3
467+
468+let cQ = 4
469+
470+let cR = 7
471+
472+let cS = 8
473+
474+func cT () = "%s__restConfig"
475+
476+
477+func cU () = "%s__restAddr"
478+
479+
480+func cV (cW) = split_4C(cK(cW, cT()), cB)
481+
482+
483+func cX (cY,cZ) = valueOrErrorMessage(addressFromString(cY[cZ]), ("Rest cfg doesn't contain address at index " + toString(cZ)))
484+
485+
486+let da = addressFromStringValue(valueOrElse(getString(this, cU()), cy))
487+
488+let cY = cV(da)
489+
490+let an = cX(cY, cN)
491+
492+let db = cX(cY, cO)
493+
494+let dc = cX(cY, cP)
495+
496+let dd = cX(cY, cQ)
497+
498+let de = cX(cY, cR)
499+
500+let df = cX(cY, cS)
501+
502+let dg = 0
503+
504+let dh = 1
505+
506+let di = 2
507+
508+let dj = 3
509+
510+let dk = "wlg_assetId"
511+
512+let dl = valueOrErrorMessage(getBinary(dd, dk), "WLGOLD is not issued yet")
513+
514+let dm = "acresAssetId"
515+
516+let dn = valueOrErrorMessage(getBinary(df, dm), "ACRES is not issued yet")
517+
518+let do = 2
519+
520+func dp (cL) = ("finishBlockForAddr_" + cL)
521+
522+
523+func dq () = "resTypesProportions"
524+
525+
526+func dr (ds) = ("resTypesByContinent_" + ds)
527+
528+
529+func dt (bw) = ("stakedLandsByOwner_" + bw)
530+
531+
532+func du (bw) = ("stakedPiecesByOwner_" + bw)
533+
534+
535+func dv (dw) = {
536+ let cx = dw
537+ if ($isInstanceOf(cx, "String"))
490538 then {
491- let dn = cn
492- dn
539+ let dx = cx
540+ dx
493541 }
494542 else throw("fail to cast into String")
495543 }
496544
497545
498-func do (dm) = {
499- let cn = dm
500- if ($isInstanceOf(cn, "Int"))
546+func dy (dw) = {
547+ let cx = dw
548+ if ($isInstanceOf(cx, "Int"))
501549 then {
502- let dp = cn
503- dp
550+ let dz = cx
551+ dz
504552 }
505553 else throw("fail to cast into Int")
506554 }
507555
508556
509-func dq (dm) = {
510- let cn = dm
511- if ($isInstanceOf(cn, "Boolean"))
557+func dA (dw) = {
558+ let cx = dw
559+ if ($isInstanceOf(cx, "Boolean"))
512560 then {
513- let dn = cn
514- dn
561+ let dx = cx
562+ dx
515563 }
516564 else throw("fail to cast into Boolean")
517565 }
518566
519567
520-func dr (ds) = {
521- let cn = ds
522- if (("S" == cn))
523- then cu
524- else if (("M" == cn))
525- then cv
526- else if (("L" == cn))
527- then cw
528- else if (("XL" == cn))
529- then cx
530- else if (("XXL" == cn))
531- then cy
568+func dB (dC) = {
569+ let cx = dC
570+ if ($isInstanceOf(cx, "(String, Int)"))
571+ then {
572+ let dD = cx
573+ dD
574+ }
575+ else throw("fail to cast into (String, Int)")
576+ }
577+
578+
579+func dE (dF) = {
580+ let cx = dF
581+ if (("S" == cx))
582+ then cE
583+ else if (("M" == cx))
584+ then cF
585+ else if (("L" == cx))
586+ then cG
587+ else if (("XL" == cx))
588+ then cH
589+ else if (("XXL" == cx))
590+ then cI
532591 else throw("Unknown land size")
533592 }
534593
535594
536-func dt (dn) = isDefined(parseInt(dn))
537-
538-
539-func du () = "contractsBlocked"
540-
541-
542-func dv (c) = ("lastTxIdByUser_" + c)
543-
544-
545-func dw (dx,dy) = {
546- let dz = pow(10, 0, dy, 0, 0, DOWN)
547- let dA = toString((dx % dz))
548- let dB = drop(toString(dz), (1 + size(dA)))
549- (((toString((dx / dz)) + ".") + dB) + dA)
550- }
551-
552-
553-func dC (dD,dE,dF) = {
554- let dG = value(blockInfoByHeight(dE))
555- let dH = sha256((value(dG.vrf) + dF))
556- (toInt(dH) % dD)
557- }
558-
559-
560-let dI = {
561- let cn = cl
562- if ((base58'2W' == cn))
595+func dG (dx) = isDefined(parseInt(dx))
596+
597+
598+func dH () = "contractsBlocked"
599+
600+
601+func dI (c) = ("lastTxIdByUser_" + c)
602+
603+
604+func dJ (dC,dK) = {
605+ let dL = pow(10, 0, dK, 0, 0, DOWN)
606+ let dM = toString((dC % dL))
607+ let dN = drop(toString(dL), (1 + size(dM)))
608+ (((toString((dC / dL)) + ".") + dN) + dM)
609+ }
610+
611+
612+func dO (dP,dQ,dR) = {
613+ let dS = value(blockInfoByHeight(dQ))
614+ let dT = sha256((value(dS.vrf) + dR))
615+ (toInt(dT) % dP)
616+ }
617+
618+
619+let dU = {
620+ let cx = cv
621+ if ((base58'2W' == cx))
563622 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
564- else if ((base58'2T' == cn))
623+ else if ((base58'2T' == cx))
565624 then this
566625 else throw("Unknown chain")
567626 }
568627
569-let dJ = {
570- let cn = cl
571- if ((base58'2W' == cn))
628+let dV = {
629+ let cx = cv
630+ if ((base58'2W' == cx))
572631 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
573- else if ((base58'2T' == cn))
632+ else if ((base58'2T' == cx))
574633 then this
575634 else throw("Unknown chain")
576635 }
577636
578-let dK = {
579- let cn = cl
580- if ((base58'2W' == cn))
581- then if (ci)
637+let dW = {
638+ let cx = cv
639+ if ((base58'2W' == cx))
640+ then if (cs)
582641 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
583642 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
584- else if ((base58'2T' == cn))
643+ else if ((base58'2T' == cx))
585644 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
586645 else throw("Unknown chain")
587646 }
588647
589-let dL = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
590-
591-let dM = 300000
592-
593-let dN = 600000
594-
595-let dO = 5000000
596-
597-let dP = 50
598-
599-let dQ = 10000000
600-
601-let dR = {
602- let cn = cl
603- if ((base58'2W' == cn))
648+let dX = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
649+
650+let dY = 300000
651+
652+let dZ = 5000000
653+
654+let ea = 50
655+
656+let eb = 10000000
657+
658+let ec = {
659+ let cx = cv
660+ if ((base58'2W' == cx))
604661 then 252289527462
605- else if ((base58'2T' == cn))
662+ else if ((base58'2T' == cx))
606663 then 2522895274
607664 else throw("Unknown chain")
608665 }
609666
610-let dS = {
611- let cn = cl
612- if ((base58'2W' == cn))
667+let ed = {
668+ let cx = cv
669+ if ((base58'2W' == cx))
613670 then 250000000
614- else if ((base58'2T' == cn))
671+ else if ((base58'2T' == cx))
615672 then 250000000
616673 else throw("Unknown chain")
617674 }
618675
619-let dT = 2500000000
620-
621-let dU = toBigInt(5)
622-
623-let dV = toBigInt(20)
624-
625-let dW = toBigInt((20 * 20))
626-
627-let dX = toBigInt(((20 * 20) * 20))
628-
629-let dY = toBigInt((((20 * 20) * 20) * 20))
630-
631-let dZ = toBigInt(((((20 * 20) * 20) * 20) * 20))
632-
633-let ea = 500
634-
635-func eb () = "nextLandNum"
636-
637-
638-func ec (ed) = ("lcn_" + ed)
639-
640-
641-func ee (ef) = ("la_" + ef)
642-
643-
644-func eg (bo,bv) = ((("ilao_" + bo) + "_") + bv)
645-
646-
647-func eh (ef) = ("lo_" + ef)
648-
649-
650-func ei (ed) = ("duckByCustomName_" + ed)
651-
652-
653-func ej (ed) = ("accountByCustomName_" + ed)
654-
655-
656-func ek () = "oldiesList"
657-
658-
659-let el = 0
660-
661-let em = 1
662-
663-let en = 2
664-
665-let eo = 0
666-
667-let ep = 5
668-
669-let eq = 6
670-
671-let er = 7
672-
673-func es (ef,ds) = ((aC + ef) + ds)
674-
675-
676-func et (eu,ev) = {
677- let ew = if ((eu >= 0))
678- then (((eu + ev) - 1) / ev)
679- else -((((-(eu) + ev) - 1) / ev))
680- (ew * ct)
681- }
682-
683-
684-func ex (ey,ez) = {
685- let eA = (((((ez[0] + ez[1]) + ez[2]) + ez[3]) + ez[4]) + ez[5])
686- if ((0 >= eA))
676+let ee = 2500000000
677+
678+let ef = toBigInt(5)
679+
680+let eg = toBigInt(20)
681+
682+let eh = toBigInt((20 * 20))
683+
684+let ei = toBigInt(((20 * 20) * 20))
685+
686+let ej = toBigInt((((20 * 20) * 20) * 20))
687+
688+let ek = toBigInt(((((20 * 20) * 20) * 20) * 20))
689+
690+let el = 500
691+
692+func em () = "nextLandNum"
693+
694+
695+func en (eo) = ("lcn_" + eo)
696+
697+
698+func ep (eq) = ("la_" + eq)
699+
700+
701+func er (bp,bw) = ((("ilao_" + bp) + "_") + bw)
702+
703+
704+func es (eq) = ("lo_" + eq)
705+
706+
707+func et (eo) = ("duckByCustomName_" + eo)
708+
709+
710+func eu (eo) = ("accountByCustomName_" + eo)
711+
712+
713+func ev () = "oldiesList"
714+
715+
716+let ew = 0
717+
718+let ex = 1
719+
720+let ey = 2
721+
722+let ez = 0
723+
724+let eA = 5
725+
726+let eB = 6
727+
728+let eC = 7
729+
730+func eD (eq,dF) = ((aC + eq) + dF)
731+
732+
733+func eE (eF,eG) = {
734+ let eH = if ((eF >= 0))
735+ then (((eF + eG) - 1) / eG)
736+ else -((((-(eF) + eG) - 1) / eG))
737+ (eH * cD)
738+ }
739+
740+
741+func eI (eJ,eK) = {
742+ let eL = (((((eK[0] + eK[1]) + eK[2]) + eK[3]) + eK[4]) + eK[5])
743+ if ((0 >= eL))
687744 then throw("Zero weights sum")
688745 else {
689- let eB = fraction(ey, cs, eA)
690- func eC (eD,eE) = (eD :+ fraction(eE, eB, cs))
691-
692- let eF = ez
693- let eG = size(eF)
694- let eH = nil
695- func eI (eJ,eK) = if ((eK >= eG))
696- then eJ
697- else eC(eJ, eF[eK])
698-
699- func eL (eJ,eK) = if ((eK >= eG))
700- then eJ
746+ let eM = fraction(eJ, cC, eL)
747+ func eN (eO,eP) = (eO :+ fraction(eP, eM, cC))
748+
749+ let eQ = eK
750+ let eR = size(eQ)
751+ let eS = nil
752+ func eT (eU,eV) = if ((eV >= eR))
753+ then eU
754+ else eN(eU, eQ[eV])
755+
756+ func eW (eU,eV) = if ((eV >= eR))
757+ then eU
701758 else throw("List size exceeds 6")
702759
703- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
704- }
705- }
706-
707-
708-func eM (ey) = {
709- let eN = split(value(getString(dg())), "_")
710- if ((size(eN) != aF))
760+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
761+ }
762+ }
763+
764+
765+func eX (eJ) = {
766+ let eY = split(value(getString(dq())), "_")
767+ if ((size(eY) != aF))
711768 then throw("Wrong proportions data")
712769 else {
713- let eO = [parseIntValue(eN[0]), parseIntValue(eN[1]), parseIntValue(eN[2]), parseIntValue(eN[3]), parseIntValue(eN[4]), parseIntValue(eN[5])]
714- ex(ey, eO)
715- }
716- }
717-
718-
719-func eP (eQ,eR,eS) = {
720- let eT = eM(eS)
721- func eU (eD,cP) = {
722- let eV = (parseIntValue(eR[cP]) - eT[cP])
723- if ((0 > eV))
724- then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eR[cP]) + ", but need ") + toString(eT[cP])))
725- else (eD :+ toString(eV))
770+ let eZ = [parseIntValue(eY[0]), parseIntValue(eY[1]), parseIntValue(eY[2]), parseIntValue(eY[3]), parseIntValue(eY[4]), parseIntValue(eY[5])]
771+ eI(eJ, eZ)
772+ }
773+ }
774+
775+
776+func fa (fb,fc,fd) = {
777+ let fe = eX(fd)
778+ func ff (eO,cZ) = {
779+ let fg = (parseIntValue(fc[cZ]) - fe[cZ])
780+ if ((0 > fg))
781+ then throw(((((("Not enough material idx=" + toString(cZ)) + ", you have ") + fc[cZ]) + ", but need ") + toString(fe[cZ])))
782+ else (eO :+ toString(fg))
726783 }
727784
728- if (eQ)
785+ if (fb)
729786 then {
730- let eF = cz
731- let eG = size(eF)
732- let eH = nil
733- func eI (eJ,eK) = if ((eK >= eG))
734- then eJ
735- else eU(eJ, eF[eK])
736-
737- func eL (eJ,eK) = if ((eK >= eG))
738- then eJ
787+ let eQ = cJ
788+ let eR = size(eQ)
789+ let eS = nil
790+ func eT (eU,eV) = if ((eV >= eR))
791+ then eU
792+ else ff(eU, eQ[eV])
793+
794+ func eW (eU,eV) = if ((eV >= eR))
795+ then eU
739796 else throw("List size exceeds 6")
740797
741- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
742- }
743- else eR
744- }
745-
746-
747-func eW (eX,eY) = if ((eY == ""))
748- then $Tuple2(eX, false)
798+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
799+ }
800+ else fc
801+ }
802+
803+
804+func fh (fi,fj) = if ((fj == ""))
805+ then $Tuple2(fi, false)
749806 else {
750- func eZ (eD,fa) = {
751- let fb = split(fa, ",")
752- if ((size(fb) != 2))
807+ func fk (eO,fl) = {
808+ let fm = split(fl, ",")
809+ if ((size(fm) != 2))
753810 then throw("Incorrect format, should be index,amount")
754811 else {
755- let cP = parseIntValue(fb[0])
756- if (if ((0 > cP))
812+ let cZ = parseIntValue(fm[0])
813+ if (if ((0 > cZ))
757814 then true
758- else (cP >= size(aR)))
815+ else (cZ >= size(aS)))
759816 then throw("Unknown product idx")
760817 else {
761- let fc = parseIntValue(fb[1])
762- let fd = split(eD._1, (fb[0] + ":"))
763- if ((size(fd) != 2))
764- then throw((("You don't have " + aN[cP]) + " equipped"))
818+ let fn = parseIntValue(fm[1])
819+ let fo = split(eO._1, (fm[0] + ":"))
820+ if ((size(fo) != 2))
821+ then throw((("You don't have " + aO[cZ]) + " equipped"))
765822 else {
766- let fe = fd[1]
767- let ff = if (dt(take(drop(fe, 1), 1)))
823+ let fp = fo[1]
824+ let fq = if (dG(take(drop(fp, 1), 1)))
768825 then 2
769826 else 1
770- let fg = parseIntValue(take(fe, ff))
771- let fh = drop(fe, ff)
772- let fi = if ((fg >= fc))
773- then (fg - fc)
774- else throw(((((("You equipped " + toString(fg)) + " of ") + aN[cP]) + ", but tried to use ") + toString(fc)))
775- $Tuple2(((((fd[0] + fb[0]) + ":") + toString(fi)) + fh), if (eD._2)
827+ let fr = parseIntValue(take(fp, fq))
828+ let fs = drop(fp, fq)
829+ let ft = if ((fr >= fn))
830+ then (fr - fn)
831+ else throw(((((("You equipped " + toString(fr)) + " of ") + aO[cZ]) + ", but tried to use ") + toString(fn)))
832+ $Tuple2(((((fo[0] + fm[0]) + ":") + toString(ft)) + fs), if (eO._2)
776833 then true
777- else if (if ((cP >= 6))
778- then (8 >= cP)
834+ else if (if ((cZ >= 6))
835+ then (8 >= cZ)
779836 else false)
780- then (fi == 0)
837+ then (ft == 0)
781838 else false)
782839 }
783840 }
784841 }
785842 }
786843
787- let eF = split(eY, "_")
788- let eG = size(eF)
789- let eH = $Tuple2(eX, false)
790- func eI (eJ,eK) = if ((eK >= eG))
791- then eJ
792- else eZ(eJ, eF[eK])
793-
794- func eL (eJ,eK) = if ((eK >= eG))
795- then eJ
844+ let eQ = split(fj, "_")
845+ let eR = size(eQ)
846+ let eS = $Tuple2(fi, false)
847+ func eT (eU,eV) = if ((eV >= eR))
848+ then eU
849+ else fk(eU, eQ[eV])
850+
851+ func eW (eU,eV) = if ((eV >= eR))
852+ then eU
796853 else throw("List size exceeds 10")
797854
798- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
855+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
799856 }
800857
801858
802-func fj (fk) = {
803- let fl = if ((fk == ""))
859+func fu (fv) = {
860+ let fw = if ((fv == ""))
804861 then nil
805- else split_4C(fk, "_")
806- func fm (eD,ch) = {
807- let fn = (size(eD) / 8)
808- let fg = if ((size(fl) > fn))
809- then parseIntValue(fl[fn])
862+ else split_4C(fv, "_")
863+ func fx (eO,co) = {
864+ let fy = (size(eO) / 8)
865+ let fr = if ((size(fw) > fy))
866+ then parseIntValue(fw[fy])
810867 else 0
811- (eD + toBytes(fg))
868+ (eO + toBytes(fr))
812869 }
813870
814- let eF = aR
815- let eG = size(eF)
816- let eH = base58''
817- func eI (eJ,eK) = if ((eK >= eG))
818- then eJ
819- else fm(eJ, eF[eK])
820-
821- func eL (eJ,eK) = if ((eK >= eG))
822- then eJ
871+ let eQ = aS
872+ let eR = size(eQ)
873+ let eS = base58''
874+ func eT (eU,eV) = if ((eV >= eR))
875+ then eU
876+ else fx(eU, eQ[eV])
877+
878+ func eW (eU,eV) = if ((eV >= eR))
879+ then eU
823880 else throw("List size exceeds 50")
824881
825- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
826- }
827-
828-
829-func fo (fp) = {
830- func fq (eD,ch) = {
831- let fn = size(eD)
832- let fr = take(drop(fp, (8 * fn)), 8)
833- (eD :+ toString(toInt(fr)))
882+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
883+ }
884+
885+
886+func fz (fA) = {
887+ func fB (eO,co) = {
888+ let fy = size(eO)
889+ let fC = take(drop(fA, (8 * fy)), 8)
890+ (eO :+ toString(toInt(fC)))
834891 }
835892
836893 makeString_2C({
837- let eF = aR
838- let eG = size(eF)
839- let eH = nil
840- func eI (eJ,eK) = if ((eK >= eG))
841- then eJ
842- else fq(eJ, eF[eK])
843-
844- func eL (eJ,eK) = if ((eK >= eG))
845- then eJ
894+ let eQ = aS
895+ let eR = size(eQ)
896+ let eS = nil
897+ func eT (eU,eV) = if ((eV >= eR))
898+ then eU
899+ else fB(eU, eQ[eV])
900+
901+ func eW (eU,eV) = if ((eV >= eR))
902+ then eU
846903 else throw("List size exceeds 50")
847904
848- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
905+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
849906 }, "_")
850907 }
851908
852909
853-func fs (ft,fu) = {
854- func fv (eD,fn) = {
855- let fw = if ((size(ft) > (7 + fn)))
856- then ft[(7 + fn)]
910+func fD (fE,fF) = {
911+ func fG (eO,fy) = {
912+ let fH = if ((size(fE) > (7 + fy)))
913+ then fE[(7 + fy)]
857914 else 0
858- if ((parseIntValue(fu[fn]) > (ft[fn] + fw)))
859- then throw(("Requirement not satisfied: " + j[fn]))
915+ if ((parseIntValue(fF[fy]) > (fE[fy] + fH)))
916+ then throw(("Requirement not satisfied: " + j[fy]))
860917 else true
861918 }
862919
863- let eF = [0, 1, 2, 3, 4, 5, 6]
864- let eG = size(eF)
865- let eH = false
866- func eI (eJ,eK) = if ((eK >= eG))
867- then eJ
868- else fv(eJ, eF[eK])
869-
870- func eL (eJ,eK) = if ((eK >= eG))
871- then eJ
920+ let eQ = [0, 1, 2, 3, 4, 5, 6]
921+ let eR = size(eQ)
922+ let eS = false
923+ func eT (eU,eV) = if ((eV >= eR))
924+ then eU
925+ else fG(eU, eQ[eV])
926+
927+ func eW (eU,eV) = if ((eV >= eR))
928+ then eU
872929 else throw("List size exceeds 7")
873930
874- eL(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7)
875- }
876-
877-
878-func fx (fy,fl,fz,ft,fA,fB) = {
879- let fb = split(fy, ":")
880- if ((size(fb) != 2))
931+ eW(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7)
932+ }
933+
934+
935+func fI (fJ,fw,fK,fE,fL,fM) = {
936+ let fm = split(fJ, ":")
937+ if ((size(fm) != 2))
881938 then throw("Incorrect format, should be index:amount")
882- else if (if (!(fz))
883- then (size(fb[0]) != 2)
939+ else if (if (!(fK))
940+ then (size(fm[0]) != 2)
884941 else false)
885942 then throw("Product idx should be 2 digits, zero padded")
886943 else {
887- let fC = parseIntValue(fb[0])
888- let fD = parseIntValue(fb[1])
889- if (!(containsElement(aQ, fC)))
890- then throw((("Product '" + aN[fC]) + "' cannot be used for land defense"))
891- else if ((0 > fD))
944+ let fN = parseIntValue(fm[0])
945+ let fO = parseIntValue(fm[1])
946+ if (!(containsElement(aR, fN)))
947+ then throw((("Product '" + aO[fN]) + "' cannot be used for land defense"))
948+ else if ((0 > fO))
892949 then throw("Count can't be negative")
893- else if ((fD > t))
894- then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
895- else if ((fD == 0))
896- then $Tuple3(fl, fA, fB)
950+ else if ((fO > t))
951+ then throw(((("Can't put more than " + toString(t)) + " of ") + aO[fN]))
952+ else if ((fO == 0))
953+ then $Tuple3(fw, fL, fM)
897954 else {
898- let fE = take(fl, (8 * fC))
899- let fg = toInt(take(drop(fl, (8 * fC)), 8))
900- let fh = drop(fl, (8 * (fC + 1)))
901- let ch = split(aR[fC], "_")
902- if (if (!(fz))
903- then (fD > fg)
955+ let fP = take(fw, (8 * fN))
956+ let fr = toInt(take(drop(fw, (8 * fN)), 8))
957+ let fs = drop(fw, (8 * (fN + 1)))
958+ let co = split(aS[fN], "_")
959+ if (if (!(fK))
960+ then (fO > fr)
904961 else false)
905- then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
962+ then throw(((((("You have " + toString(fr)) + " of ") + aO[fN]) + ", but tried to use ") + toString(fO)))
906963 else {
907- let fi = if (if (!(fz))
908- then fs(ft, split(ch[aU], ","))
964+ let ft = if (if (!(fK))
965+ then fD(fE, split(co[aV], ","))
909966 else false)
910- then (fg - fD)
911- else (fg + fD)
912- let fF = (et(fi, aW) - et(fg, aW))
913- $Tuple3(((fE + toBytes(fi)) + fh), (fA + fF), (fB - fF))
967+ then (fr - fO)
968+ else (fr + fO)
969+ let fQ = (eE(ft, aX) - eE(fr, aX))
970+ $Tuple3(((fP + toBytes(ft)) + fs), (fL + fQ), (fM - fQ))
914971 }
915972 }
916973 }
917974 }
918975
919976
920-func fG (fy,fl,fz,fH,fI,fJ,ft) = {
921- let fb = split(fy, ":")
922- if ((size(fb) != 2))
977+func fR (fJ,fw,fK,fS,fT,fU,fE) = {
978+ let fm = split(fJ, ":")
979+ if ((size(fm) != 2))
923980 then throw("Incorrect format, should be index:amount")
924- else if (if (!(fz))
925- then (size(fb[0]) != 2)
981+ else if (if (!(fK))
982+ then (size(fm[0]) != 2)
926983 else false)
927984 then throw("Product idx should be 2 digits, zero padded")
928985 else {
929- let fC = parseIntValue(fb[0])
930- let fD = parseIntValue(fb[1])
931- if (if ((0 > fC))
986+ let fN = parseIntValue(fm[0])
987+ let fO = parseIntValue(fm[1])
988+ if (if ((0 > fN))
932989 then true
933- else (fC >= size(aR)))
990+ else (fN >= size(aS)))
934991 then throw("Unknown product idx")
935- else if ((0 > fD))
992+ else if ((0 > fO))
936993 then throw("Count can't be negative")
937- else if ((fD > t))
938- then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
939- else if ((fD == 0))
940- then $Tuple2(fl, false)
994+ else if ((fO > t))
995+ then throw(((("Can't put more than " + toString(t)) + " of ") + aO[fN]))
996+ else if ((fO == 0))
997+ then $Tuple2(fw, false)
941998 else {
942- let fE = take(fl, (8 * fC))
943- let fg = toInt(take(drop(fl, (8 * fC)), 8))
944- let fh = drop(fl, (8 * (fC + 1)))
945- let ch = split(aR[fC], "_")
946- if (if (!(fz))
947- then (fD > fg)
999+ let fP = take(fw, (8 * fN))
1000+ let fr = toInt(take(drop(fw, (8 * fN)), 8))
1001+ let fs = drop(fw, (8 * (fN + 1)))
1002+ let co = split(aS[fN], "_")
1003+ if (if (!(fK))
1004+ then (fO > fr)
9481005 else false)
949- then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
1006+ then throw(((((("You have " + toString(fr)) + " of ") + aO[fN]) + ", but tried to use ") + toString(fO)))
9501007 else {
951- let fK = if (if (!(fz))
952- then fs(ft, split(ch[aU], ","))
1008+ let fV = if (if (!(fK))
1009+ then fD(fE, split(co[aV], ","))
9531010 else false)
9541011 then {
955- let fL = ch[aV]
956- if ((fL == ""))
1012+ let fW = co[aW]
1013+ if ((fW == ""))
9571014 then throw("Item cannot be equipped")
9581015 else {
959- let fM = parseIntValue(fL)
960- let fN = (fM / 100)
961- if ((fH != fN))
1016+ let fX = parseIntValue(fW)
1017+ let fY = (fX / 100)
1018+ if ((fS != fY))
9621019 then throw("Segment incompatible")
9631020 else {
964- let fO = ((fM % 100) / 10)
965- if ((fI != fO))
1021+ let fZ = ((fX % 100) / 10)
1022+ if ((fT != fZ))
9661023 then throw("Slot incompatible")
9671024 else {
968- let fP = (fM % 10)
969- if (if ((fJ != 0))
970- then (fP > 1)
1025+ let ga = (fX % 10)
1026+ if (if ((fU != 0))
1027+ then (ga > 1)
9711028 else false)
9721029 then throw("Big items should occupy slot 0")
973- else (fP > 1)
1030+ else (ga > 1)
9741031 }
9751032 }
9761033 }
9771034 }
9781035 else false
979- $Tuple2(((fE + toBytes((fg + (if (fz)
980- then fD
981- else -(fD))))) + fh), fK)
1036+ $Tuple2(((fP + toBytes((fr + (if (fK)
1037+ then fO
1038+ else -(fO))))) + fs), fV)
9821039 }
9831040 }
9841041 }
9851042 }
9861043
9871044
988-func fQ (fR,fS,fz,fH,fI,fT) = if ((fR != ""))
1045+func gb (gc,gd,fK,fS,fT,ge) = if ((gc != ""))
9891046 then {
990- let fU = split(fR, ",")
991- if ((size(fU) > s))
1047+ let gf = split(gc, ",")
1048+ if ((size(gf) > s))
9921049 then throw("Wrong slots format")
9931050 else {
994- let fV = fU[0]
995- let fW = if ((size(fU) > 1))
996- then fU[1]
1051+ let gg = gf[0]
1052+ let gh = if ((size(gf) > 1))
1053+ then gf[1]
9971054 else ""
998- if (if ((fV == ""))
999- then (fW == "")
1055+ if (if ((gg == ""))
1056+ then (gh == "")
10001057 else false)
1001- then fS
1058+ then gd
10021059 else {
1003- let fX = if ((fV != ""))
1004- then fG(fV, fS, fz, fH, fI, 0, fT)
1005- else $Tuple2(fS, false)
1006- if ((fW != ""))
1007- then if (fX._2)
1060+ let gi = if ((gg != ""))
1061+ then fR(gg, gd, fK, fS, fT, 0, ge)
1062+ else $Tuple2(gd, false)
1063+ if ((gh != ""))
1064+ then if (gi._2)
10081065 then throw("Big item already occupies slot")
1009- else fG(fW, fX._1, fz, fH, fI, 1, fT)._1
1010- else fX._1
1066+ else fR(gh, gi._1, fK, fS, fT, 1, ge)._1
1067+ else gi._1
10111068 }
10121069 }
10131070 }
1014- else fS
1015-
1016-
1017-func fY (fZ,ga,fz,fT) = {
1018- func fH (eD,gb) = {
1019- let fn = eD._1
1020- let fI = split(gb, ";")
1021- if ((size(fI) != r))
1071+ else gd
1072+
1073+
1074+func gj (gk,gl,fK,ge) = {
1075+ func fS (eO,gm) = {
1076+ let fy = eO._1
1077+ let fT = split(gm, ";")
1078+ if ((size(fT) != r))
10221079 then throw("Wrong segment format")
10231080 else {
1024- let gc = fI[0]
1025- let gd = fI[1]
1026- if (if ((gc == ""))
1027- then (gd == "")
1081+ let gn = fT[0]
1082+ let go = fT[1]
1083+ if (if ((gn == ""))
1084+ then (go == "")
10281085 else false)
1029- then $Tuple2((fn + 1), eD._2)
1086+ then $Tuple2((fy + 1), eO._2)
10301087 else {
1031- let ge = fQ(gc, eD._2, fz, fn, 0, fT)
1032- $Tuple2((fn + 1), fQ(gd, ge, fz, fn, 1, fT))
1088+ let gp = gb(gn, eO._2, fK, fy, 0, ge)
1089+ $Tuple2((fy + 1), gb(go, gp, fK, fy, 1, ge))
10331090 }
10341091 }
10351092 }
10361093
1037-( let eF = fZ
1038- let eG = size(eF)
1039- let eH = $Tuple2(0, ga)
1040- func eI (eJ,eK) = if ((eK >= eG))
1041- then eJ
1042- else fH(eJ, eF[eK])
1043-
1044- func eL (eJ,eK) = if ((eK >= eG))
1045- then eJ
1094+( let eQ = gk
1095+ let eR = size(eQ)
1096+ let eS = $Tuple2(0, gl)
1097+ func eT (eU,eV) = if ((eV >= eR))
1098+ then eU
1099+ else fS(eU, eQ[eV])
1100+
1101+ func eW (eU,eV) = if ((eV >= eR))
1102+ then eU
10461103 else throw("List size exceeds 6")
10471104
1048- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6))._2
1049- }
1050-
1051-
1052-func gf (fZ,ga,fA,fB,fz,ft) = if ((3 > size(fZ)))
1105+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6))._2
1106+ }
1107+
1108+
1109+func gq (gk,gl,fL,fM,fK,fE) = if ((3 > size(gk)))
10531110 then throw("At least duck, mines and traps parts are required")
10541111 else {
1055- func fH (eD,gb) = {
1056- let fn = eD._1
1057- if ((fn == 0))
1058- then $Tuple4((fn + 1), eD._2, eD._3, eD._4)
1112+ func fS (eO,gm) = {
1113+ let fy = eO._1
1114+ if ((fy == 0))
1115+ then $Tuple4((fy + 1), eO._2, eO._3, eO._4)
10591116 else {
1060- let gg = fx(gb, eD._2, fz, ft, eD._3, eD._4)
1061- $Tuple4((fn + 1), gg._1, gg._2, gg._3)
1117+ let gr = fI(gm, eO._2, fK, fE, eO._3, eO._4)
1118+ $Tuple4((fy + 1), gr._1, gr._2, gr._3)
10621119 }
10631120 }
10641121
1065- let gh = {
1066- let eF = fZ
1067- let eG = size(eF)
1068- let eH = $Tuple4(0, ga, fA, fB)
1069- func eI (eJ,eK) = if ((eK >= eG))
1070- then eJ
1071- else fH(eJ, eF[eK])
1072-
1073- func eL (eJ,eK) = if ((eK >= eG))
1074- then eJ
1122+ let gs = {
1123+ let eQ = gk
1124+ let eR = size(eQ)
1125+ let eS = $Tuple4(0, gl, fL, fM)
1126+ func eT (eU,eV) = if ((eV >= eR))
1127+ then eU
1128+ else fS(eU, eQ[eV])
1129+
1130+ func eW (eU,eV) = if ((eV >= eR))
1131+ then eU
10751132 else throw("List size exceeds 10")
10761133
1077- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1078- }
1079- $Tuple3(gh._2, gh._3, gh._4)
1134+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1135+ }
1136+ $Tuple3(gs._2, gs._3, gs._4)
10801137 }
10811138
10821139
1083-func gi (A) = {
1084- let gj = F(A)
1085- let gk = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1086- let gl = fY(gk, dL, true, nil)
1087- let gm = split(gk[p], ";")[1]
1088- let ao = if ((gm == ""))
1140+func gt (A) = {
1141+ let gu = F(A)
1142+ let gv = split(valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1143+ let gw = gj(gv, dX, true, nil)
1144+ let gx = split(gv[p], ";")[1]
1145+ let ao = if ((gx == ""))
10891146 then 0
10901147 else {
1091- let gn = split(gm, ",")[0]
1092- if ((gn == ""))
1148+ let gy = split(gx, ",")[0]
1149+ if ((gy == ""))
10931150 then 0
10941151 else {
1095- let fy = split(gn, ":")
1096- let cP = fy[0]
1097- let go = fy[1]
1098- if (if (if (if (if ((cP == "06"))
1152+ let fJ = split(gy, ":")
1153+ let cZ = fJ[0]
1154+ let gz = fJ[1]
1155+ if (if (if (if (if ((cZ == "06"))
10991156 then true
1100- else (cP == "07"))
1157+ else (cZ == "07"))
11011158 then true
1102- else (cP == "08"))
1103- then (go != "")
1159+ else (cZ == "08"))
1160+ then (gz != "")
11041161 else false)
1105- then (parseIntValue(go) > 0)
1162+ then (parseIntValue(gz) > 0)
11061163 else false)
1107- then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
1164+ then parseIntValue(split(aS[parseIntValue(cZ)], "_")[aU])
11081165 else 0
11091166 }
11101167 }
1111- let fT = am(this, A, ao, true)
1112- let gp = fY(gk, gl, false, fT)
1113- (gp == gp)
1114- }
1115-
1116-
1117-func gq (gr,gs,gt,gu) = if ((size(gr) != aF))
1168+ let ge = am(this, A, ao, true)
1169+ let gA = gj(gv, gw, false, ge)
1170+ (gA == gA)
1171+ }
1172+
1173+
1174+func gB (gC,gD,gE,gF) = if ((size(gC) != aF))
11181175 then throw("Wrong proportions data")
11191176 else {
1120- func gv (eD,gw) = {
1121- let eV = (parseIntValue(gr[gw]) + ((gu * gs[gw]) * gt))
1122- if ((0 > eV))
1123- then throw(((((((("Panic! Pieces of type=" + toString(gw)) + ", sign=") + toString(gu)) + ", terrainCounts[i]=") + toString(gs[gw])) + ", landSizeIndex=") + toString(gt)))
1124- else (eD :+ toString(eV))
1125- }
1126-
1127- let eF = cz
1128- let eG = size(eF)
1129- let eH = nil
1130- func eI (eJ,eK) = if ((eK >= eG))
1131- then eJ
1132- else gv(eJ, eF[eK])
1133-
1134- func eL (eJ,eK) = if ((eK >= eG))
1135- then eJ
1177+ func gG (eO,gH) = {
1178+ let fg = (parseIntValue(gC[gH]) + ((gF * gD[gH]) * gE))
1179+ if ((0 > fg))
1180+ then throw(((((((("Panic! Pieces of type=" + toString(gH)) + ", sign=") + toString(gF)) + ", terrainCounts[i]=") + toString(gD[gH])) + ", landSizeIndex=") + toString(gE)))
1181+ else (eO :+ toString(fg))
1182+ }
1183+
1184+ let eQ = cJ
1185+ let eR = size(eQ)
1186+ let eS = nil
1187+ func eT (eU,eV) = if ((eV >= eR))
1188+ then eU
1189+ else gG(eU, eQ[eV])
1190+
1191+ func eW (eU,eV) = if ((eV >= eR))
1192+ then eU
11361193 else throw("List size exceeds 6")
11371194
1138- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1195+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
11391196 }
11401197
11411198
1142-func gx (gs,gt,gu) = {
1143- let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1144- makeString(gq(gr, gs, gt, gu), "_")
1145- }
1146-
1147-
1148-func gy (gz) = [(size(split(gz, "A")) - 1), (size(split(gz, "B")) - 1), (size(split(gz, "C")) - 1), (size(split(gz, "D")) - 1), (size(split(gz, "E")) - 1), (size(split(gz, "F")) - 1)]
1149-
1150-
1151-func gA (gB,gs,gC,gt,gD) = {
1152- func gE (eD,gw) = {
1153- let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1154- (eD :+ toString((parseIntValue(gB[gw]) + gF)))
1199+func gI (gD,gE,gF) = {
1200+ let gC = split(valueOrElse(getString(dq()), "0_0_0_0_0_0"), "_")
1201+ makeString(gB(gC, gD, gE, gF), "_")
1202+ }
1203+
1204+
1205+func gJ (gK) = [(size(split(gK, "A")) - 1), (size(split(gK, "B")) - 1), (size(split(gK, "C")) - 1), (size(split(gK, "D")) - 1), (size(split(gK, "E")) - 1), (size(split(gK, "F")) - 1)]
1206+
1207+
1208+func gL (gM,gD,gN,gE,gO) = {
1209+ func gP (eO,gH) = {
1210+ let gQ = ((fraction(gN, gO, a) * gD[gH]) * gE)
1211+ (eO :+ toString((parseIntValue(gM[gH]) + gQ)))
11551212 }
11561213
1157- let eO = {
1158- let eF = cz
1159- let eG = size(eF)
1160- let eH = nil
1161- func eI (eJ,eK) = if ((eK >= eG))
1162- then eJ
1163- else gE(eJ, eF[eK])
1164-
1165- func eL (eJ,eK) = if ((eK >= eG))
1166- then eJ
1214+ let eZ = {
1215+ let eQ = cJ
1216+ let eR = size(eQ)
1217+ let eS = nil
1218+ func eT (eU,eV) = if ((eV >= eR))
1219+ then eU
1220+ else gP(eU, eQ[eV])
1221+
1222+ func eW (eU,eV) = if ((eV >= eR))
1223+ then eU
11671224 else throw("List size exceeds 6")
11681225
1169- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1226+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
11701227 }
1171- makeString(eO, "_")
1172- }
1173-
1174-
1175-func gG (gs,gC,gt,gD) = {
1176- func gE (eD,gw) = {
1177- let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1178- $Tuple2((eD._1 :+ gF), (eD._2 + gF))
1228+ makeString(eZ, "_")
1229+ }
1230+
1231+
1232+func gR (gD,gN,gE,gO) = {
1233+ func gP (eO,gH) = {
1234+ let gQ = ((fraction(gN, gO, a) * gD[gH]) * gE)
1235+ $Tuple2((eO._1 :+ gQ), (eO._2 + gQ))
11791236 }
11801237
1181- let eF = cz
1182- let eG = size(eF)
1183- let eH = $Tuple2(nil, 0)
1184- func eI (eJ,eK) = if ((eK >= eG))
1185- then eJ
1186- else gE(eJ, eF[eK])
1187-
1188- func eL (eJ,eK) = if ((eK >= eG))
1189- then eJ
1238+ let eQ = cJ
1239+ let eR = size(eQ)
1240+ let eS = $Tuple2(nil, 0)
1241+ func eT (eU,eV) = if ((eV >= eR))
1242+ then eU
1243+ else gP(eU, eQ[eV])
1244+
1245+ func eW (eU,eV) = if ((eV >= eR))
1246+ then eU
11901247 else throw("List size exceeds 6")
11911248
1192- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1193- }
1194-
1195-
1196-func gH (gI,gJ,gK,gL) = {
1197- let gM = gK._1
1198- let gN = gK._2
1199- if ((gN == 0))
1200- then $Tuple2(makeString(gI, "_"), makeString(gJ, "_"))
1201- else if ((gL >= gN))
1249+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
1250+ }
1251+
1252+
1253+func gS (gT,gU,gV,gW) = {
1254+ let gX = gV._1
1255+ let gY = gV._2
1256+ if ((gY == 0))
1257+ then $Tuple2(makeString(gT, "_"), makeString(gU, "_"))
1258+ else if ((gW >= gY))
12021259 then {
1203- func gO (eD,gw) = (eD :+ toString((parseIntValue(gI[gw]) + gM[gw])))
1204-
1205- let eO = {
1206- let eF = cz
1207- let eG = size(eF)
1208- let eH = nil
1209- func eI (eJ,eK) = if ((eK >= eG))
1210- then eJ
1211- else gO(eJ, eF[eK])
1212-
1213- func eL (eJ,eK) = if ((eK >= eG))
1214- then eJ
1260+ func gZ (eO,gH) = (eO :+ toString((parseIntValue(gT[gH]) + gX[gH])))
1261+
1262+ let eZ = {
1263+ let eQ = cJ
1264+ let eR = size(eQ)
1265+ let eS = nil
1266+ func eT (eU,eV) = if ((eV >= eR))
1267+ then eU
1268+ else gZ(eU, eQ[eV])
1269+
1270+ func eW (eU,eV) = if ((eV >= eR))
1271+ then eU
12151272 else throw("List size exceeds 6")
12161273
1217- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1274+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
12181275 }
1219- $Tuple2(makeString(eO, "_"), makeString(gJ, "_"))
1276+ $Tuple2(makeString(eZ, "_"), makeString(gU, "_"))
12201277 }
12211278 else {
1222- func gP (eD,gw) = {
1223- let gQ = fraction(gM[gw], gL, gN)
1224- $Tuple2((eD._1 :+ toString((parseIntValue(gI[gw]) + gQ))), (eD._2 :+ toString(((parseIntValue(gJ[gw]) + gM[gw]) - gQ))))
1279+ func ha (eO,gH) = {
1280+ let hb = fraction(gX[gH], gW, gY)
1281+ $Tuple2((eO._1 :+ toString((parseIntValue(gT[gH]) + hb))), (eO._2 :+ toString(((parseIntValue(gU[gH]) + gX[gH]) - hb))))
12251282 }
12261283
1227- let eO = {
1228- let eF = cz
1229- let eG = size(eF)
1230- let eH = $Tuple2(nil, nil)
1231- func eI (eJ,eK) = if ((eK >= eG))
1232- then eJ
1233- else gP(eJ, eF[eK])
1234-
1235- func eL (eJ,eK) = if ((eK >= eG))
1236- then eJ
1284+ let eZ = {
1285+ let eQ = cJ
1286+ let eR = size(eQ)
1287+ let eS = $Tuple2(nil, nil)
1288+ func eT (eU,eV) = if ((eV >= eR))
1289+ then eU
1290+ else ha(eU, eQ[eV])
1291+
1292+ func eW (eU,eV) = if ((eV >= eR))
1293+ then eU
12371294 else throw("List size exceeds 6")
12381295
1239- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1296+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
12401297 }
1241- $Tuple2(makeString(eO._1, "_"), makeString(eO._2, "_"))
1298+ $Tuple2(makeString(eZ._1, "_"), makeString(eZ._2, "_"))
12421299 }
12431300 }
12441301
12451302
1246-func gR (gS) = if ((gS >= toBigInt(0)))
1247- then gS
1248- else -(gS)
1249-
1250-
1251-let gT = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1252-
1253-func gU (dp,gV) = {
1254- let gW = toInt((dp % dV))
1255- let gX = if ((gV[0] > gW))
1303+func hc (hd) = if ((hd >= toBigInt(0)))
1304+ then hd
1305+ else -(hd)
1306+
1307+
1308+let he = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1309+
1310+func hf (dz,hg) = {
1311+ let hh = toInt((dz % eg))
1312+ let hi = if ((hg[0] > hh))
12561313 then "A"
1257- else if ((gV[1] > gW))
1314+ else if ((hg[1] > hh))
12581315 then "B"
1259- else if ((gV[2] > gW))
1316+ else if ((hg[2] > hh))
12601317 then "C"
1261- else if ((gV[3] > gW))
1318+ else if ((hg[3] > hh))
12621319 then "D"
1263- else if ((gV[4] > gW))
1320+ else if ((hg[4] > hh))
12641321 then "E"
12651322 else "F"
1266- gX
1267- }
1268-
1269-
1270-func gY (gZ,ha) = {
1271- let hb = gT[ha]
1272- func hc (eD,eE) = $Tuple2((((((eD._1 + gU(eD._2, hb)) + gU((eD._2 / dV), hb)) + gU((eD._2 / dW), hb)) + gU((eD._2 / dX), hb)) + gU((eD._2 / dY), hb)), (eD._2 / dZ))
1273-
1274- let gh = {
1275- let eF = [1, 2, 3, 4, 5]
1276- let eG = size(eF)
1277- let eH = $Tuple2("", (gZ / dU))
1278- func eI (eJ,eK) = if ((eK >= eG))
1279- then eJ
1280- else hc(eJ, eF[eK])
1281-
1282- func eL (eJ,eK) = if ((eK >= eG))
1283- then eJ
1323+ hi
1324+ }
1325+
1326+
1327+func hj (hk,hl) = {
1328+ let hm = he[hl]
1329+ func hn (eO,eP) = $Tuple2((((((eO._1 + hf(eO._2, hm)) + hf((eO._2 / eg), hm)) + hf((eO._2 / eh), hm)) + hf((eO._2 / ei), hm)) + hf((eO._2 / ej), hm)), (eO._2 / ek))
1330+
1331+ let gs = {
1332+ let eQ = [1, 2, 3, 4, 5]
1333+ let eR = size(eQ)
1334+ let eS = $Tuple2("", (hk / ef))
1335+ func eT (eU,eV) = if ((eV >= eR))
1336+ then eU
1337+ else hn(eU, eQ[eV])
1338+
1339+ func eW (eU,eV) = if ((eV >= eR))
1340+ then eU
12841341 else throw("List size exceeds 5")
12851342
1286- eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
1343+ eW(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5)
12871344 }
1288- gh._1
1289- }
1290-
1291-
1292-let hd = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1293-
1294-let he = ["A", "B", "C", "D", "E", "F"]
1295-
1296-func hf (hg,gt) = {
1297- func hh (eD,dn) = {
1298- let fn = eD._2
1299- let hi = parseIntValue(dn)
1300- let gS = if ((hi == 0))
1345+ gs._1
1346+ }
1347+
1348+
1349+let ho = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1350+
1351+let hp = ["A", "B", "C", "D", "E", "F"]
1352+
1353+func hq (hr,gE) = {
1354+ func hs (eO,dx) = {
1355+ let fy = eO._2
1356+ let ht = parseIntValue(dx)
1357+ let hd = if ((ht == 0))
13011358 then 0
1302- else if ((hi >= (4 * gt)))
1303- then (hi / gt)
1304- else if ((hi > (3 * gt)))
1359+ else if ((ht >= (4 * gE)))
1360+ then (ht / gE)
1361+ else if ((ht > (3 * gE)))
13051362 then 3
1306- else (((hi - 1) / gt) + 1)
1307- $Tuple3((eD._1 :+ gS), (eD._2 + 1), (eD._3 + gS))
1363+ else (((ht - 1) / gE) + 1)
1364+ $Tuple3((eO._1 :+ hd), (eO._2 + 1), (eO._3 + hd))
13081365 }
13091366
1310- let gh = {
1311- let eF = hg
1312- let eG = size(eF)
1313- let eH = $Tuple3(nil, 0, 0)
1314- func eI (eJ,eK) = if ((eK >= eG))
1315- then eJ
1316- else hh(eJ, eF[eK])
1317-
1318- func eL (eJ,eK) = if ((eK >= eG))
1319- then eJ
1367+ let gs = {
1368+ let eQ = hr
1369+ let eR = size(eQ)
1370+ let eS = $Tuple3(nil, 0, 0)
1371+ func eT (eU,eV) = if ((eV >= eR))
1372+ then eU
1373+ else hs(eU, eQ[eV])
1374+
1375+ func eW (eU,eV) = if ((eV >= eR))
1376+ then eU
13201377 else throw("List size exceeds 6")
13211378
1322- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1379+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
13231380 }
1324- let hj = gh._1
1325- let hk = value(indexOf(hj, max(hj)))
1326- let hl = (gh._3 - 25)
1327- func hm (eD,cP) = {
1328- let dx = if ((cP == hk))
1329- then (hj[cP] - hl)
1330- else hj[cP]
1331- let dB = if ((dx == 0))
1381+ let hu = gs._1
1382+ let hv = value(indexOf(hu, max(hu)))
1383+ let hw = (gs._3 - 25)
1384+ func hx (eO,cZ) = {
1385+ let dC = if ((cZ == hv))
1386+ then (hu[cZ] - hw)
1387+ else hu[cZ]
1388+ let dN = if ((dC == 0))
13321389 then nil
1333- else split(drop(toString(pow(10, 0, dx, 0, 0, DOWN)), 1), "")
1334- let fM = he[cP]
1335- func hn (ho,hp) = (ho :+ fM)
1336-
1337- let hq = {
1338- let eF = dB
1339- let eG = size(eF)
1340- let eH = nil
1341- func hr (eJ,eK) = if ((eK >= eG))
1342- then eJ
1343- else hn(eJ, eF[eK])
1344-
1345- func hs (eJ,eK) = if ((eK >= eG))
1346- then eJ
1390+ else split(drop(toString(pow(10, 0, dC, 0, 0, DOWN)), 1), "")
1391+ let fX = hp[cZ]
1392+ func hy (hz,hA) = (hz :+ fX)
1393+
1394+ let hB = {
1395+ let eQ = dN
1396+ let eR = size(eQ)
1397+ let eS = nil
1398+ func hC (eU,eV) = if ((eV >= eR))
1399+ then eU
1400+ else hy(eU, eQ[eV])
1401+
1402+ func hD (eU,eV) = if ((eV >= eR))
1403+ then eU
13471404 else throw("List size exceeds 25")
13481405
1349- hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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)
1350- }
1351- (eD ++ hq)
1406+ hD(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(eS, 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)
1407+ }
1408+ (eO ++ hB)
13521409 }
13531410
1354- let eO = {
1355- let eF = cz
1356- let eG = size(eF)
1357- let eH = nil
1358- func hr (eJ,eK) = if ((eK >= eG))
1359- then eJ
1360- else hm(eJ, eF[eK])
1361-
1362- func hs (eJ,eK) = if ((eK >= eG))
1363- then eJ
1411+ let eZ = {
1412+ let eQ = cJ
1413+ let eR = size(eQ)
1414+ let eS = nil
1415+ func hC (eU,eV) = if ((eV >= eR))
1416+ then eU
1417+ else hx(eU, eQ[eV])
1418+
1419+ func hD (eU,eV) = if ((eV >= eR))
1420+ then eU
13641421 else throw("List size exceeds 6")
13651422
1366- hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
1423+ hD(hC(hC(hC(hC(hC(hC(eS, 0), 1), 2), 3), 4), 5), 6)
13671424 }
1368- func ht (eD,fn) = (eD + eO[fn])
1369-
1370- let eF = hd
1371- let eG = size(eF)
1372- let eH = ""
1373- func hu (eJ,eK) = if ((eK >= eG))
1374- then eJ
1375- else ht(eJ, eF[eK])
1376-
1377- func hv (eJ,eK) = if ((eK >= eG))
1378- then eJ
1425+ func hE (eO,fy) = (eO + eZ[fy])
1426+
1427+ let eQ = ho
1428+ let eR = size(eQ)
1429+ let eS = ""
1430+ func hF (eU,eV) = if ((eV >= eR))
1431+ then eU
1432+ else hE(eU, eQ[eV])
1433+
1434+ func hG (eU,eV) = if ((eV >= eR))
1435+ then eU
13791436 else throw("List size exceeds 25")
13801437
1381- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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)
1382- }
1383-
1384-
1385-func hw (hx) = {
1386- let gg = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1387-[toString(valueOrElse(parseInt(gg[bg]), 0)), if ((size(split(gg[bh], "_")) == aF))
1388- then gg[bh]
1389- else "0_0_0_0_0_0", if ((size(split(gg[bi], "_")) == aF))
1390- then gg[bi]
1391- else "0_0_0_0_0_0", gg[bj]]
1392- }
1393-
1394-
1395-func hy (hz) = {
1396- let fb = split(hz, "_")
1397- ((aI * (parseIntValue(fb[1]) + 1)) * parseIntValue(fb[0]))
1398- }
1399-
1400-
1401-func hA (hB) = {
1402- let hC = hB[ba]
1403- func hD (eD,hE) = (eD + parseIntValue(hE))
1404-
1405- func hF (eD,hE) = {
1406- let cP = eD._1
1407- let ew = (((parseIntValue(hE) + aW) - 1) / aW)
1408- $Tuple2((cP + 1), (eD._2 + (ew * ct)))
1438+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eS, 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)
1439+ }
1440+
1441+
1442+func hH (hI) = {
1443+ let gr = split(valueOrElse(getString(hI), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1444+[toString(valueOrElse(parseInt(gr[bh]), 0)), if ((size(split(gr[bi], "_")) == aF))
1445+ then gr[bi]
1446+ else "0_0_0_0_0_0", if ((size(split(gr[bj], "_")) == aF))
1447+ then gr[bj]
1448+ else "0_0_0_0_0_0", gr[bk]]
1449+ }
1450+
1451+
1452+func hJ (hK) = {
1453+ let fm = split(hK, "_")
1454+ ((aI * (parseIntValue(fm[1]) + 1)) * parseIntValue(fm[0]))
1455+ }
1456+
1457+
1458+func hL (hM) = {
1459+ let hN = hM[bb]
1460+ func hO (eO,hP) = (eO + parseIntValue(hP))
1461+
1462+ func hQ (eO,hP) = {
1463+ let cZ = eO._1
1464+ let eH = (((parseIntValue(hP) + aX) - 1) / aX)
1465+ $Tuple2((cZ + 1), (eO._2 + (eH * cD)))
14091466 }
14101467
1411- let hG = {
1412- let eF = split(hB[aY], "_")
1413- let eG = size(eF)
1414- let eH = 0
1415- func eI (eJ,eK) = if ((eK >= eG))
1416- then eJ
1417- else hD(eJ, eF[eK])
1418-
1419- func eL (eJ,eK) = if ((eK >= eG))
1420- then eJ
1468+ let hR = {
1469+ let eQ = split(hM[aZ], "_")
1470+ let eR = size(eQ)
1471+ let eS = 0
1472+ func eT (eU,eV) = if ((eV >= eR))
1473+ then eU
1474+ else hO(eU, eQ[eV])
1475+
1476+ func eW (eU,eV) = if ((eV >= eR))
1477+ then eU
14211478 else throw("List size exceeds 6")
14221479
1423- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1480+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
14241481 }
1425- let hH = {
1426- let eF = split(hB[aZ], "_")
1427- let eG = size(eF)
1428- let eH = 0
1429- func hr (eJ,eK) = if ((eK >= eG))
1430- then eJ
1431- else hD(eJ, eF[eK])
1432-
1433- func hs (eJ,eK) = if ((eK >= eG))
1434- then eJ
1482+ let hS = {
1483+ let eQ = split(hM[ba], "_")
1484+ let eR = size(eQ)
1485+ let eS = 0
1486+ func hC (eU,eV) = if ((eV >= eR))
1487+ then eU
1488+ else hO(eU, eQ[eV])
1489+
1490+ func hD (eU,eV) = if ((eV >= eR))
1491+ then eU
14351492 else throw("List size exceeds 6")
14361493
1437- hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
1494+ hD(hC(hC(hC(hC(hC(hC(eS, 0), 1), 2), 3), 4), 5), 6)
14381495 }
1439- let hI = if ((hC == ""))
1496+ let hT = if ((hN == ""))
14401497 then 0
1441- else ( let eF = split_4C(hC, "_")
1442- let eG = size(eF)
1443- let eH = $Tuple2(0, 0)
1444- func hu (eJ,eK) = if ((eK >= eG))
1445- then eJ
1446- else hF(eJ, eF[eK])
1447-
1448- func hv (eJ,eK) = if ((eK >= eG))
1449- then eJ
1498+ else ( let eQ = split_4C(hN, "_")
1499+ let eR = size(eQ)
1500+ let eS = $Tuple2(0, 0)
1501+ func hF (eU,eV) = if ((eV >= eR))
1502+ then eU
1503+ else hQ(eU, eQ[eV])
1504+
1505+ func hG (eU,eV) = if ((eV >= eR))
1506+ then eU
14501507 else throw("List size exceeds 50")
14511508
1452- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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))._2
1453- ((hG + hH) + hI)
1454- }
1455-
1456-
1457-func hJ (hK,hL,hM) = {
1458- let hz = ((toString(hL) + "_") + toString(hM))
1459- let hN = hy(hz)
1460- let hO = valueOrElse(getString(hK), (hz + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1461- let hP = split_4C(hO, ":")
1462- let hQ = hA(hP)
1463- let hR = if ((5 > size(hP)))
1464- then makeString(["0", toString(hQ), toString((hN - hQ)), toString(hN)], "_")
1509+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eS, 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))._2
1510+ ((hR + hS) + hT)
1511+ }
1512+
1513+
1514+func hU (hV,hW,hX) = {
1515+ let hK = ((toString(hW) + "_") + toString(hX))
1516+ let hY = hJ(hK)
1517+ let hZ = valueOrElse(getString(hV), (hK + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1518+ let ia = split_4C(hZ, ":")
1519+ let ib = hL(ia)
1520+ let ic = if ((5 > size(ia)))
1521+ then makeString(["0", toString(ib), toString((hY - ib)), toString(hY)], "_")
14651522 else {
1466- let hS = split(hP[bb], "_")
1467- let hT = parseIntValue(hS[bc])
1468- let hU = if ((size(hS) > 1))
1469- then parseIntValue(hS[bd])
1470- else hQ
1471- makeString([toString(hT), toString(hU), toString(((hN - hT) - hU)), toString(hN)], "_")
1472- }
1473-[hP[aX], if ((size(split(hP[aY], "_")) == aF))
1474- then hP[aY]
1475- else "0_0_0_0_0_0", if ((size(split(hP[aZ], "_")) == aF))
1476- then hP[aZ]
1477- else "0_0_0_0_0_0", hP[ba], hR]
1478- }
1479-
1480-
1481-func hV (hB) = {
1482- let hW = hA(hB)
1483- let hX = parseIntValue(split(hB[bb], "_")[bc])
1484- ((hy(hB[aX]) - hW) - hX)
1485- }
1486-
1487-
1488-func hY (hZ,hB,ia) = if ((size(hZ) != 3))
1523+ let id = split(ia[bc], "_")
1524+ let ie = parseIntValue(id[bd])
1525+ let if = if ((size(id) > 1))
1526+ then parseIntValue(id[be])
1527+ else ib
1528+ makeString([toString(ie), toString(if), toString(((hY - ie) - if)), toString(hY)], "_")
1529+ }
1530+[ia[aY], if ((size(split(ia[aZ], "_")) == aF))
1531+ then ia[aZ]
1532+ else "0_0_0_0_0_0", if ((size(split(ia[ba], "_")) == aF))
1533+ then ia[ba]
1534+ else "0_0_0_0_0_0", ia[bb], ic]
1535+ }
1536+
1537+
1538+func ig (hM) = {
1539+ let ih = hL(hM)
1540+ let ii = parseIntValue(split(hM[bc], "_")[bd])
1541+ ((hJ(hM[aY]) - ih) - ii)
1542+ }
1543+
1544+
1545+func ij (ik,hM,il) = if ((size(ik) != 3))
14891546 then throw("cargoListStr should contain exactly 2 ':' separators")
14901547 else {
1491- let ib = split(hZ[0], "_")
1492- let ic = split(hZ[1], "_")
1493- let id = if ((hZ[2] == ""))
1548+ let im = split(ik[0], "_")
1549+ let in = split(ik[1], "_")
1550+ let io = if ((ik[2] == ""))
14941551 then nil
1495- else split_4C(hZ[2], "_")
1496- if ((size(ib) != aF))
1552+ else split_4C(ik[2], "_")
1553+ if ((size(im) != aF))
14971554 then throw("All 6 resources should be passed")
1498- else if ((size(ic) != aF))
1555+ else if ((size(in) != aF))
14991556 then throw("All 6 materials should be passed")
15001557 else {
1501- let gL = hV(hB)
1502- let ie = split(hB[aY], "_")
1503- let if = split(hB[aZ], "_")
1504- let ig = if ((hB[ba] == ""))
1558+ let gW = ig(hM)
1559+ let ip = split(hM[aZ], "_")
1560+ let iq = split(hM[ba], "_")
1561+ let ir = if ((hM[bb] == ""))
15051562 then nil
1506- else split_4C(hB[ba], "_")
1507- let gJ = split(ia[bh], "_")
1508- let ih = split(ia[bi], "_")
1509- let ii = if ((ia[bj] == ""))
1563+ else split_4C(hM[bb], "_")
1564+ let gU = split(il[bi], "_")
1565+ let is = split(il[bj], "_")
1566+ let it = if ((il[bk] == ""))
15101567 then nil
1511- else split_4C(ia[bj], "_")
1512- func ij (eD,hE) = {
1513- let gw = eD._1
1514- let ik = parseIntValue(hE)
1515- let il = parseIntValue(ie[gw])
1516- let im = parseIntValue(gJ[gw])
1517- if ((ik == 0))
1518- then $Tuple4((gw + 1), (eD._2 :+ ie[gw]), (eD._3 :+ gJ[gw]), eD._4)
1519- else if ((ik > 0))
1520- then if ((ik > im))
1521- then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(im)) + " available"))
1522- else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
1523- else if ((-(ik) > il))
1524- then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(il)) + " available"))
1525- else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
1568+ else split_4C(il[bk], "_")
1569+ func iu (eO,hP) = {
1570+ let gH = eO._1
1571+ let iv = parseIntValue(hP)
1572+ let iw = parseIntValue(ip[gH])
1573+ let ix = parseIntValue(gU[gH])
1574+ if ((iv == 0))
1575+ then $Tuple4((gH + 1), (eO._2 :+ ip[gH]), (eO._3 :+ gU[gH]), eO._4)
1576+ else if ((iv > 0))
1577+ then if ((iv > ix))
1578+ then throw((((("Attempt to take " + hP) + " from backpack, but only ") + toString(ix)) + " available"))
1579+ else $Tuple4((gH + 1), (eO._2 :+ toString((iw + iv))), (eO._3 :+ toString((ix - iv))), (eO._4 + iv))
1580+ else if ((-(iv) > iw))
1581+ then throw((((("Attempt to take " + toString(-(iv))) + " from warehouse, but only ") + toString(iw)) + " available"))
1582+ else $Tuple4((gH + 1), (eO._2 :+ toString((iw + iv))), (eO._3 :+ toString((ix - iv))), (eO._4 + iv))
15261583 }
15271584
1528- let eO = {
1529- let eF = ib
1530- let eG = size(eF)
1531- let eH = $Tuple4(0, nil, nil, 0)
1532- func eI (eJ,eK) = if ((eK >= eG))
1533- then eJ
1534- else ij(eJ, eF[eK])
1535-
1536- func eL (eJ,eK) = if ((eK >= eG))
1537- then eJ
1585+ let eZ = {
1586+ let eQ = im
1587+ let eR = size(eQ)
1588+ let eS = $Tuple4(0, nil, nil, 0)
1589+ func eT (eU,eV) = if ((eV >= eR))
1590+ then eU
1591+ else iu(eU, eQ[eV])
1592+
1593+ func eW (eU,eV) = if ((eV >= eR))
1594+ then eU
15381595 else throw("List size exceeds 6")
15391596
1540- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1597+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
15411598 }
1542- func in (eD,hE) = {
1543- let gw = eD._1
1544- let ik = parseIntValue(hE)
1545- let io = parseIntValue(if[gw])
1546- let ip = parseIntValue(ih[gw])
1547- if ((ik == 0))
1548- then $Tuple4((gw + 1), (eD._2 :+ if[gw]), (eD._3 :+ ih[gw]), eD._4)
1549- else if ((ik > 0))
1550- then if ((ik > ip))
1551- then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(ip)) + " available"))
1552- else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
1553- else if ((-(ik) > io))
1554- then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(io)) + " available"))
1555- else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
1599+ func iy (eO,hP) = {
1600+ let gH = eO._1
1601+ let iv = parseIntValue(hP)
1602+ let iz = parseIntValue(iq[gH])
1603+ let iA = parseIntValue(is[gH])
1604+ if ((iv == 0))
1605+ then $Tuple4((gH + 1), (eO._2 :+ iq[gH]), (eO._3 :+ is[gH]), eO._4)
1606+ else if ((iv > 0))
1607+ then if ((iv > iA))
1608+ then throw((((("Attempt to take " + hP) + " from backpack, but only ") + toString(iA)) + " available"))
1609+ else $Tuple4((gH + 1), (eO._2 :+ toString((iz + iv))), (eO._3 :+ toString((iA - iv))), (eO._4 + iv))
1610+ else if ((-(iv) > iz))
1611+ then throw((((("Attempt to take " + toString(-(iv))) + " from warehouse, but only ") + toString(iz)) + " available"))
1612+ else $Tuple4((gH + 1), (eO._2 :+ toString((iz + iv))), (eO._3 :+ toString((iA - iv))), (eO._4 + iv))
15561613 }
15571614
1558- let gc = {
1559- let eF = ic
1560- let eG = size(eF)
1561- let eH = $Tuple4(0, nil, nil, eO._4)
1562- func hr (eJ,eK) = if ((eK >= eG))
1563- then eJ
1564- else in(eJ, eF[eK])
1565-
1566- func hs (eJ,eK) = if ((eK >= eG))
1567- then eJ
1615+ let gn = {
1616+ let eQ = in
1617+ let eR = size(eQ)
1618+ let eS = $Tuple4(0, nil, nil, eZ._4)
1619+ func hC (eU,eV) = if ((eV >= eR))
1620+ then eU
1621+ else iy(eU, eQ[eV])
1622+
1623+ func hD (eU,eV) = if ((eV >= eR))
1624+ then eU
15681625 else throw("List size exceeds 6")
15691626
1570- hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
1627+ hD(hC(hC(hC(hC(hC(hC(eS, 0), 1), 2), 3), 4), 5), 6)
15711628 }
1572- func iq (eD,hE) = {
1573- let gw = eD._1
1574- let ik = parseIntValue(hE)
1575- let ir = if ((size(ig) > gw))
1576- then parseIntValue(ig[gw])
1629+ func iB (eO,hP) = {
1630+ let gH = eO._1
1631+ let iv = parseIntValue(hP)
1632+ let iC = if ((size(ir) > gH))
1633+ then parseIntValue(ir[gH])
15771634 else 0
1578- let is = if ((size(ii) > gw))
1579- then parseIntValue(ii[gw])
1635+ let iD = if ((size(it) > gH))
1636+ then parseIntValue(it[gH])
15801637 else 0
1581- if ((ik == 0))
1582- then $Tuple4((gw + 1), (eD._2 :+ toString(ir)), (eD._3 :+ toString(is)), eD._4)
1583- else if ((ik > 0))
1584- then if ((ik > is))
1585- then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(is)) + " available"))
1638+ if ((iv == 0))
1639+ then $Tuple4((gH + 1), (eO._2 :+ toString(iC)), (eO._3 :+ toString(iD)), eO._4)
1640+ else if ((iv > 0))
1641+ then if ((iv > iD))
1642+ then throw((((("Attempt to take " + hP) + " from backpack, but only ") + toString(iD)) + " available"))
15861643 else {
1587- let fF = (et((ir + ik), aW) - et(ir, aW))
1588- $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
1644+ let fQ = (eE((iC + iv), aX) - eE(iC, aX))
1645+ $Tuple4((gH + 1), (eO._2 :+ toString((iC + iv))), (eO._3 :+ toString((iD - iv))), (eO._4 + fQ))
15891646 }
1590- else if ((-(ik) > ir))
1591- then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(ir)) + " available"))
1647+ else if ((-(iv) > iC))
1648+ then throw((((("Attempt to take " + toString(-(iv))) + " from warehouse, but only ") + toString(iC)) + " available"))
15921649 else {
1593- let fF = (et((ir + ik), aW) - et(ir, aW))
1594- $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
1650+ let fQ = (eE((iC + iv), aX) - eE(iC, aX))
1651+ $Tuple4((gH + 1), (eO._2 :+ toString((iC + iv))), (eO._3 :+ toString((iD - iv))), (eO._4 + fQ))
15951652 }
15961653 }
15971654
1598- let gg = if ((size(id) != 0))
1655+ let gr = if ((size(io) != 0))
15991656 then {
1600- let eF = id
1601- let eG = size(eF)
1602- let eH = $Tuple4(0, nil, nil, gc._4)
1603- func hu (eJ,eK) = if ((eK >= eG))
1604- then eJ
1605- else iq(eJ, eF[eK])
1606-
1607- func hv (eJ,eK) = if ((eK >= eG))
1608- then eJ
1657+ let eQ = io
1658+ let eR = size(eQ)
1659+ let eS = $Tuple4(0, nil, nil, gn._4)
1660+ func hF (eU,eV) = if ((eV >= eR))
1661+ then eU
1662+ else iB(eU, eQ[eV])
1663+
1664+ func hG (eU,eV) = if ((eV >= eR))
1665+ then eU
16091666 else throw("List size exceeds 50")
16101667
1611- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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)
1668+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eS, 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)
16121669 }
1613- else $Tuple4(0, ig, ii, gc._4)
1614- let it = gg._4
1615- if ((it > gL))
1616- then throw((((("Attempt to put total " + toString(it)) + " stuff, but only ") + toString(gL)) + " warehouse space left"))
1617- else $Tuple7(makeString(eO._2, "_"), makeString(gc._2, "_"), makeString_2C(gg._2, "_"), makeString(eO._3, "_"), makeString(gc._3, "_"), makeString_2C(gg._3, "_"), it)
1670+ else $Tuple4(0, ir, it, gn._4)
1671+ let iE = gr._4
1672+ if ((iE > gW))
1673+ then throw((((("Attempt to put total " + toString(iE)) + " stuff, but only ") + toString(gW)) + " warehouse space left"))
1674+ else $Tuple7(makeString(eZ._2, "_"), makeString(gn._2, "_"), makeString_2C(gr._2, "_"), makeString(eZ._3, "_"), makeString(gn._3, "_"), makeString_2C(gr._3, "_"), iE)
16181675 }
16191676 }
16201677
16211678
1622-func iu (iv,iw) = {
1623- let bK = toString(iv)
1624- let ix = gR(toBigInt(iw))
1625- let iy = valueOrElse(getInteger(eb()), (ea + 1))
1626- let ef = toString(iy)
1627- let ha = toInt((ix % dU))
1628- let gz = gY(ix, ha)
1629- let di = aO[ha]
1630- let iz = Issue(es(ef, "S"), makeString([ef, "S", gz, di], "_"), 1, 0, false)
1631- let bo = calculateAssetId(iz)
1632- let iA = toBase58String(bo)
1633- $Tuple2([IntegerEntry(eb(), (iy + 1)), iz, StringEntry(ee(ef), iA), StringEntry(bn(iA), bK), StringEntry(eh(ef), bK), IntegerEntry(bx(iA), 0), IntegerEntry(eg(iA, bK), 0), ScriptTransfer(iv, 1, bo)], $Tuple2(iA, di))
1634- }
1635-
1636-
1637-func iB (bK,iC,iD) = if (!(sigVerify_8Kb(iC, iD, dK)))
1679+func iF (iG,iH) = {
1680+ let bL = toString(iG)
1681+ let iI = hc(toBigInt(iH))
1682+ let iJ = valueOrElse(getInteger(em()), (el + 1))
1683+ let eq = toString(iJ)
1684+ let hl = toInt((iI % ef))
1685+ let gK = hj(iI, hl)
1686+ let ds = aP[hl]
1687+ let iK = Issue(eD(eq, "S"), makeString([eq, "S", gK, ds], "_"), 1, 0, false)
1688+ let bp = calculateAssetId(iK)
1689+ let iL = toBase58String(bp)
1690+ $Tuple2([IntegerEntry(em(), (iJ + 1)), iK, StringEntry(ep(eq), iL), StringEntry(bo(iL), bL), StringEntry(es(eq), bL), IntegerEntry(by(iL), 0), IntegerEntry(er(iL, bL), 0), ScriptTransfer(iG, 1, bp)], $Tuple2(iL, ds))
1691+ }
1692+
1693+
1694+func iM (bL,iN,iO) = if (!(sigVerify_8Kb(iN, iO, dW)))
16381695 then throw("signature does not match")
16391696 else {
1640- let fb = split_4C(toUtf8String(iC), ";")
1641- let iE = split_4C(fb[0], "|")
1642- let iF = split(iE[eo], "_")
1643- let iG = parseIntValue(iF[0])
1644- let iH = parseIntValue(iF[1])
1645- let iI = split(fb[1], ":")
1646- let iJ = iI[0]
1647- let iK = parseIntValue(iE[ep])
1648- if (if ((iK > (lastBlock.timestamp + dM)))
1697+ let fm = split_4C(toUtf8String(iN), ";")
1698+ let iP = split_4C(fm[0], "|")
1699+ let iQ = split(iP[ez], "_")
1700+ let iR = parseIntValue(iQ[0])
1701+ let iS = parseIntValue(iQ[1])
1702+ let iT = split(fm[1], ":")
1703+ let iU = iT[0]
1704+ let iV = parseIntValue(iP[eA])
1705+ if (if ((iV > (lastBlock.timestamp + dY)))
16491706 then true
1650- else ((lastBlock.timestamp - dM) > iK))
1651- then throw(((("signature outdated: logTime=" + toString(iK)) + ", bcTime=") + toString(lastBlock.timestamp)))
1707+ else ((lastBlock.timestamp - dY) > iV))
1708+ then throw(((("signature outdated: logTime=" + toString(iV)) + ", bcTime=") + toString(lastBlock.timestamp)))
16521709 else {
1653- let iL = iI[1]
1654- let iM = valueOrElse(getString(dv(bK)), "")
1655- if ((iM != iL))
1656- then throw(((("Tx ids don't match! In state: " + iM) + ", in msg: ") + iL))
1710+ let iW = iT[1]
1711+ let iX = valueOrElse(getString(dI(bL)), "")
1712+ if ((iX != iW))
1713+ then throw(((("Tx ids don't match! In state: " + iX) + ", in msg: ") + iW))
16571714 else {
1658- let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
1659- let iN = z(A)
1660- let iO = ag(valueOrElse(getInteger(D(A)), 0))
1661- let iP = valueOrElse(getInteger(iN), iO)
1662- if ((iP != iG))
1663- then throw(((("oldHealth=" + toString(iP)) + " from state does not match one from flight log=") + toString(iG)))
1664- else if ((0 >= iG))
1715+ let A = valueOrErrorMessage(getString(bH(bL)), "You don't have a duck staked")
1716+ let iY = z(A)
1717+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
1718+ let ja = valueOrElse(getInteger(iY), iZ)
1719+ if ((ja != iR))
1720+ then throw(((("oldHealth=" + toString(ja)) + " from state does not match one from flight log=") + toString(iR)))
1721+ else if ((0 >= iR))
16651722 then throw("You can't fly with zero health")
1666- else if (!(gi(A)))
1723+ else if (!(gt(A)))
16671724 then throw("Equipment incompatible")
16681725 else {
1669- let iQ = if ((size(iE) > eq))
1670- then iE[eq]
1726+ let jb = if ((size(iP) > eB))
1727+ then iP[eB]
16711728 else ""
1672- let iR = if ((size(iE) > er))
1673- then iE[er]
1729+ let jc = if ((size(iP) > eC))
1730+ then iP[eC]
16741731 else ""
1675- let iS = if (if ((iH > 0))
1676- then (iQ == "$")
1732+ let jd = if (if ((iS > 0))
1733+ then (jb == "$")
16771734 else false)
1678- then do(invoke(cQ, "sendUsdtPrize", [bK], nil))
1735+ then dy(invoke(da, "sendUsdtPrize", [bL], nil))
16791736 else 0
1680- $Tuple5(iH, A, iS, iJ, iR)
1737+ $Tuple5(iS, A, jd, iU, jc)
16811738 }
16821739 }
16831740 }
16841741 }
16851742
16861743
1687-func iT (P,iU) = {
1688- let hM = valueOrElse(getInteger(bx(P)), 0)
1689- let iV = valueOrElse(getInteger(br(aE, P)), 0)
1690- let iW = (hM / 6)
1691- let iX = (hM / 7)
1692- ((aH + fraction(aH, ((hM + iW) + (2 * iX)), 5)) + fraction(aH, iV, (iU * 5)))
1693- }
1694-
1695-
1696-func iY (c,iZ,ja) = {
1697- let jb = if ((iZ == el))
1698- then $Tuple2(ja, valueOrElse(getString(bG(c)), ""))
1744+func je (P,jf) = {
1745+ let hX = valueOrElse(getInteger(by(P)), 0)
1746+ let jg = valueOrElse(getInteger(bs(aE, P)), 0)
1747+ let jh = (hX / 6)
1748+ let ji = (hX / 7)
1749+ ((aH + fraction(aH, ((hX + jh) + (2 * ji)), 5)) + fraction(aH, jg, (jf * 5)))
1750+ }
1751+
1752+
1753+func jj (c,jk,jl) = {
1754+ let jm = if ((jk == ew))
1755+ then $Tuple2(jl, valueOrElse(getString(bH(c)), ""))
16991756 else {
1700- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1701- let jc = valueOrElse(getString(bI(A)), aJ)
1702- let ce = split(value(jc), "_")
1703- if ((ce[bl] != "L"))
1704- then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
1705- else $Tuple2(ce[bm], A)
1706- }
1707- let P = jb._1
1708- let jd = jb._2
1709- let je = value(assetInfo(fromBase58String(P)))
1710- let jf = bq(P)
1711- let jg = valueOrErrorMessage(getInteger(jf), (("Land " + je.name) + " is not staked"))
1712- let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1713- if ((jh != c))
1757+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
1758+ let jn = valueOrElse(getString(bJ(A)), aJ)
1759+ let cf = split(value(jn), "_")
1760+ if ((cf[bm] != "L"))
1761+ then throw((("Duck location type is " + cf[bm]) + ", but should be L"))
1762+ else $Tuple2(cf[bn], A)
1763+ }
1764+ let P = jm._1
1765+ let jo = jm._2
1766+ let jp = value(assetInfo(fromBase58String(P)))
1767+ let jq = br(P)
1768+ let jr = valueOrErrorMessage(getInteger(jq), (("Land " + jp.name) + " is not staked"))
1769+ let js = valueOrErrorMessage(getString(bo(P)), (("NFT " + jp.name) + " is orphaned"))
1770+ if ((js != c))
17141771 then throw((aC + " is not yours"))
17151772 else {
1716- let ji = split(je.description, "_")
1717- $Tuple4(jd, P, ji, jg)
1718- }
1719- }
1720-
1721-
1722-func jj (c,eu,iZ,ja) = if ((0 > eu))
1773+ let jt = split(jp.description, "_")
1774+ $Tuple4(jo, P, jt, jr)
1775+ }
1776+ }
1777+
1778+
1779+func ju (c,eF,jk,jl) = if ((0 > eF))
17231780 then throw("Negative amount")
17241781 else {
1725- let fM = iY(c, iZ, ja)
1726- let ds = fM._3[cX]
1727- let gs = gy(fM._3[cY])
1728- let gC = (lastBlock.timestamp - fM._4)
1729- if ((0 > gC))
1730- then throw(((("Saved timestamp is in future, saved = " + toString(fM._4)) + ", current = ") + toString(lastBlock.timestamp)))
1782+ let fX = jj(c, jk, jl)
1783+ let dF = fX._3[dh]
1784+ let gD = gJ(fX._3[di])
1785+ let gN = (lastBlock.timestamp - fX._4)
1786+ if ((0 > gN))
1787+ then throw(((("Saved timestamp is in future, saved = " + toString(fX._4)) + ", current = ") + toString(lastBlock.timestamp)))
17311788 else {
1732- let iU = dr(ds)
1733- let jk = iT(fM._2, iU)
1734- let jl = fraction(gC, (jk * iU), a)
1735- if ((eu > jl))
1736- then throw(((("Not enough resources, available = " + toString(jl)) + ", requested = ") + toString(eu)))
1789+ let jf = dE(dF)
1790+ let jv = je(fX._2, jf)
1791+ let jw = fraction(gN, (jv * jf), a)
1792+ if ((eF > jw))
1793+ then throw(((("Not enough resources, available = " + toString(jw)) + ", requested = ") + toString(eF)))
17371794 else {
1738- let jm = fraction((jl - eu), a, (jk * iU))
1739- let jn = (lastBlock.timestamp - jm)
1740- let hL = (iU / cu)
1741- let gK = gG(gs, (gC - jm), hL, jk)
1742- let hK = bw(fM._2)
1743- let hM = valueOrElse(getInteger(bx(fM._2)), 0)
1744- let hB = hJ(hK, hL, hM)
1745- let hS = split(hB[bb], "_")
1746- let gL = parseIntValue(hS[be])
1747- if (if ((iZ == el))
1748- then (eu > gL)
1795+ let jx = fraction((jw - eF), a, (jv * jf))
1796+ let jy = (lastBlock.timestamp - jx)
1797+ let hW = (jf / cE)
1798+ let gV = gR(gD, (gN - jx), hW, jv)
1799+ let hV = bx(fX._2)
1800+ let hX = valueOrElse(getInteger(by(fX._2)), 0)
1801+ let hM = hU(hV, hW, hX)
1802+ let id = split(hM[bc], "_")
1803+ let gW = parseIntValue(id[bf])
1804+ if (if ((jk == ew))
1805+ then (eF > gW)
17491806 else false)
1750- then throw((("Only " + toString(gL)) + " space left in warehouse"))
1807+ then throw((("Only " + toString(gW)) + " space left in warehouse"))
17511808 else {
1752- let hx = bH(fM._1)
1753- let ia = hw(hx)
1754- let gJ = split(ia[bh], "_")
1755- let gI = split(hB[aY], "_")
1756- let jo = if ((iZ == el))
1757- then $Tuple4(gA(gI, gs, (gC - jm), hL, jk), ia[bh], (parseIntValue(hS[bd]) + gK._2), (parseIntValue(hS[be]) - gK._2))
1758- else if ((iZ == em))
1759- then $Tuple4(hB[aY], gA(gJ, gs, (gC - jm), hL, jk), parseIntValue(hS[bd]), parseIntValue(hS[be]))
1809+ let hI = bI(fX._1)
1810+ let il = hH(hI)
1811+ let gU = split(il[bi], "_")
1812+ let gT = split(hM[aZ], "_")
1813+ let jz = if ((jk == ew))
1814+ then $Tuple4(gL(gT, gD, (gN - jx), hW, jv), il[bi], (parseIntValue(id[be]) + gV._2), (parseIntValue(id[bf]) - gV._2))
1815+ else if ((jk == ex))
1816+ then $Tuple4(hM[aZ], gL(gU, gD, (gN - jx), hW, jv), parseIntValue(id[be]), parseIntValue(id[bf]))
17601817 else {
1761- let jp = gH(gI, gJ, gK, gL)
1762- let jq = min([parseIntValue(hS[be]), gK._2])
1763- $Tuple4(jp._1, jp._2, (parseIntValue(hS[bd]) + jq), (parseIntValue(hS[be]) - jq))
1818+ let jA = gS(gT, gU, gV, gW)
1819+ let jB = min([parseIntValue(id[bf]), gV._2])
1820+ $Tuple4(jA._1, jA._2, (parseIntValue(id[be]) + jB), (parseIntValue(id[bf]) - jB))
17641821 }
1765- let jr = jo._1
1766- let js = jo._2
1767- let jt = jo._3
1768- let ju = jo._4
1769- $Tuple5([IntegerEntry(bq(fM._2), jn), IntegerEntry(bt(aC, fM._2, c), jn)], hx, [ia[bg], js, ia[bi], ia[bj]], hK, [hB[aX], jr, hB[aZ], hB[ba], makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")])
1822+ let jC = jz._1
1823+ let jD = jz._2
1824+ let jE = jz._3
1825+ let jF = jz._4
1826+ $Tuple5([IntegerEntry(br(fX._2), jy), IntegerEntry(bu(aC, fX._2, c), jy)], hI, [il[bh], jD, il[bj], il[bk]], hV, [hM[aY], jC, hM[ba], hM[bb], makeString([id[bd], toString(jE), toString(jF), id[bg]], "_")])
17701827 }
17711828 }
17721829 }
17731830 }
17741831
17751832
1776-func jv (c,P,iU,iZ) = {
1777- let jf = bq(P)
1778- let jg = value(getInteger(jf))
1779- let jl = (fraction((lastBlock.timestamp - jg), iT(P, iU), a) * iU)
1780- jj(c, jl, iZ, P)
1781- }
1782-
1783-
1784-func jw (eQ,iv,jx,P) = {
1785- let c = toString(iv)
1786- let fM = iY(c, en, P)
1787- let iU = dr(fM._3[cX])
1788- let jy = bx(fM._2)
1789- let jz = valueOrElse(getInteger(jy), 0)
1790- if (if (!(cj))
1791- then (jz >= 3)
1833+func jG (c,P,jf,jk) = {
1834+ let jq = br(P)
1835+ let jr = value(getInteger(jq))
1836+ let jw = (fraction((lastBlock.timestamp - jr), je(P, jf), a) * jf)
1837+ ju(c, jw, jk, P)
1838+ }
1839+
1840+
1841+func jH (fb,iG,jI,P) = {
1842+ let c = toString(iG)
1843+ let fX = jj(c, ey, P)
1844+ let jf = dE(fX._3[dh])
1845+ let jJ = by(fX._2)
1846+ let jK = valueOrElse(getInteger(jJ), 0)
1847+ if (if (!(ct))
1848+ then (jK >= 3)
17921849 else false)
17931850 then throw("Currently max infrastructure level = 3")
17941851 else {
1795- let jA = ((sqrt(iU, 0, 0, DOWN) / 5) + 2)
1796- let al = (jz + 1)
1797- if (if (cj)
1798- then (al > jA)
1852+ let jL = ((sqrt(jf, 0, 0, DOWN) / 5) + 2)
1853+ let al = (jK + 1)
1854+ if (if (ct)
1855+ then (al > jL)
17991856 else false)
1800- then throw(("Currently max infrastructure level = " + toString(jA)))
1857+ then throw(("Currently max infrastructure level = " + toString(jL)))
18011858 else {
1802- let jB = fraction(dQ, (iU * al), cu)
1803- if (if (!(eQ))
1804- then (jx != jB)
1859+ let jM = fraction(eb, (jf * al), cE)
1860+ if (if (!(fb))
1861+ then (jI != jM)
18051862 else false)
1806- then throw(("Payment attached should be " + toString(jB)))
1863+ then throw(("Payment attached should be " + toString(jM)))
18071864 else {
1808- let hx = bH(fM._1)
1809- let ia = hw(hx)
1810- let jC = split(ia[bi], "_")
1811- let jD = fraction(cp, (iU * al), cu)
1812- let jE = makeString(eP(eQ, jC, jD), "_")
1813- let jF = jv(c, fM._2, iU, en)
1814- let jG = jF._5
1815- let jH = hy(jG[aX])
1816- let jI = makeString([split(jG[aX], "_")[0], toString(al)], "_")
1817- let jJ = hy(jI)
1818- let hS = split(jG[bb], "_")
1819- let jK = makeString([hS[bc], hS[bd], toString(((parseIntValue(hS[be]) + jJ) - jH)), toString(jJ)], "_")
1820- $Tuple3(([IntegerEntry(jy, al), IntegerEntry(eg(fM._2, c), al), StringEntry(hx, makeString([ia[bg], jF._3[bh], jE, ia[bj]], ":")), StringEntry(jF._4, makeString([jI, jG[aY], jG[aZ], jG[ba], jK], ":"))] ++ jF._1), al, jD)
1865+ let hI = bI(fX._1)
1866+ let il = hH(hI)
1867+ let jN = split(il[bj], "_")
1868+ let jO = fraction(cz, (jf * al), cE)
1869+ let jP = makeString(fa(fb, jN, jO), "_")
1870+ let jQ = jG(c, fX._2, jf, ey)
1871+ let jR = jQ._5
1872+ let jS = hJ(jR[aY])
1873+ let jT = makeString([split(jR[aY], "_")[0], toString(al)], "_")
1874+ let jU = hJ(jT)
1875+ let id = split(jR[bc], "_")
1876+ let jV = makeString([id[bd], id[be], toString(((parseIntValue(id[bf]) + jU) - jS)), toString(jU)], "_")
1877+ $Tuple3(([IntegerEntry(jJ, al), IntegerEntry(er(fX._2, c), al), StringEntry(hI, makeString([il[bh], jQ._3[bi], jP, il[bk]], ":")), StringEntry(jQ._4, makeString([jT, jR[aZ], jR[ba], jR[bb], jV], ":"))] ++ jQ._1), al, jO)
18211878 }
18221879 }
18231880 }
18241881 }
18251882
18261883
1827-func jL (A,jM) = {
1828- let jN = D(A)
1829- let jO = C(A)
1830- let af = valueOrElse(getInteger(an, jO), 0)
1831- let ak = (af + jM)
1832- let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1833- let jQ = E(A)
1834- $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1835- }
1836-
1837-
1838-func jR (c,jM) = {
1839- let jN = H(c)
1840- let jO = G(c)
1841- let af = valueOrElse(getInteger(an, jO), 0)
1842- let ak = (af + jM)
1843- let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1844- let jQ = I(c)
1845- $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1846- }
1847-
1848-
1849-func jS (c) = {
1850- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1851- let jT = bB(c)
1852- let jU = getString(jT)
1853- if (!(isDefined(jU)))
1884+func jW (A,jX) = {
1885+ let jY = D(A)
1886+ let jZ = C(A)
1887+ let af = valueOrElse(getInteger(an, jZ), 0)
1888+ let ak = (af + jX)
1889+ let ka = ai(valueOrElse(getInteger(an, jY), 0), ak)
1890+ let kb = E(A)
1891+ $Tuple2([IntegerEntry(jY, ka[0]), IntegerEntry(jZ, ak), IntegerEntry(kb, (valueOrElse(getInteger(kb), 0) + ka[1]))], ak)
1892+ }
1893+
1894+
1895+func kc (c,jX) = {
1896+ let jY = H(c)
1897+ let jZ = G(c)
1898+ let af = valueOrElse(getInteger(an, jZ), 0)
1899+ let ak = (af + jX)
1900+ let ka = ai(valueOrElse(getInteger(an, jY), 0), ak)
1901+ let kb = I(c)
1902+ $Tuple2([IntegerEntry(jY, ka[0]), IntegerEntry(jZ, ak), IntegerEntry(kb, (valueOrElse(getInteger(kb), 0) + ka[1]))], ak)
1903+ }
1904+
1905+
1906+func kd (c) = {
1907+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
1908+ let ke = bC(c)
1909+ let kf = getString(ke)
1910+ if (!(isDefined(kf)))
18541911 then throw("You are not eligible for ONBOARD artifact")
18551912 else {
1856- let jV = bD(c)
1857- let jW = getString(jV)
1858- if (isDefined(jW))
1859- then throw(("You already used your ONBOARD artifact on duck " + value(jW)))
1913+ let kg = bE(c)
1914+ let kh = getString(kg)
1915+ if (isDefined(kh))
1916+ then throw(("You already used your ONBOARD artifact on duck " + value(kh)))
18601917 else {
1861- let jX = bC(A)
1862- let jY = getString(jX)
1863- if (isDefined(jY))
1864- then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(jY)))
1865- else ([StringEntry(jV, A), StringEntry(jX, c)] ++ jL(A, ac)._1)
1918+ let ki = bD(A)
1919+ let kj = getString(ki)
1920+ if (isDefined(kj))
1921+ then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(kj)))
1922+ else ([StringEntry(kg, A), StringEntry(ki, c)] ++ jW(A, ac)._1)
18661923 }
18671924 }
18681925 }
18691926
18701927
1871-func jZ (c,ja) = {
1872- let fM = iY(c, en, ja)
1873- let P = fM._2
1874- let iU = dr(fM._3[cX])
1875- let ka = br(aE, P)
1876- if ((valueOrElse(getInteger(ka), 0) > 0))
1928+func kk (c,jl) = {
1929+ let fX = jj(c, ey, jl)
1930+ let P = fX._2
1931+ let jf = dE(fX._3[dh])
1932+ let kl = bs(aE, P)
1933+ if ((valueOrElse(getInteger(kl), 0) > 0))
18771934 then throw("Presale artifact is already activated")
1878- else if ((parseIntValue(fM._3[cW]) > ea))
1935+ else if ((parseIntValue(fX._3[dg]) > el))
18791936 then throw((((aC + " ") + P) + " is not eligible for presale artifact"))
18801937 else {
1881- let jF = jv(c, P, iU, en)
1882- (((jF._1 :+ IntegerEntry(ka, iU)) :+ StringEntry(jF._2, makeString(jF._3, ":"))) :+ StringEntry(jF._4, makeString(jF._5, ":")))
1938+ let jQ = jG(c, P, jf, ey)
1939+ (((jQ._1 :+ IntegerEntry(kl, jf)) :+ StringEntry(jQ._2, makeString(jQ._3, ":"))) :+ StringEntry(jQ._4, makeString(jQ._5, ":")))
18831940 }
18841941 }
18851942
18861943
1887-func kb (A) = {
1888- let cd = valueOrElse(getInteger(cU, bO), 0)
1889- let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1944+func km (A) = {
1945+ let ce = valueOrElse(getInteger(de, bP), 0)
1946+ let jn = split(valueOrElse(getString(bJ(A)), aJ), "_")
18901947 let ax = lastBlock.timestamp
1891- let cf = bX(cU, cd)
1892- let bZ = cf[bT]
1893- let ca = cf[bU]
1894- if ((jc[bl] != "T"))
1948+ let cg = bY(de, ce)
1949+ let ca = cg[bU]
1950+ let cb = cg[bV]
1951+ if ((jn[bm] != "T"))
18951952 then false
1896- else if (if (if ((parseIntValue(jc[bk]) == cd))
1897- then (ca[bW] == "INPROGRESS")
1953+ else if (if (if ((parseIntValue(jn[bl]) == ce))
1954+ then (cb[bX] == "INPROGRESS")
18981955 else false)
1899- then (parseIntValue(bZ[bV]) > ax)
1956+ then (parseIntValue(ca[bW]) > ax)
19001957 else false)
19011958 then throw("Your duck is taking part in the tournament")
1902- else dq(invoke(this, "exitTournamentInternal", [A], nil))
1903- }
1904-
1905-
1906-func kc (A) = {
1907- let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1959+ else dA(invoke(this, "exitTournamentInternal", [A], nil))
1960+ }
1961+
1962+
1963+func kn (A) = {
1964+ let jn = split(valueOrElse(getString(bJ(A)), aJ), "_")
19081965 let ax = lastBlock.timestamp
1909- if ((jc[bl] != "D"))
1966+ if ((jn[bm] != "D"))
19101967 then false
19111968 else {
1912- let kd = parseIntValue(jc[bk])
1913- let ke = parseIntValue(jc[bm])
1914- if (if ((ax > (kd + dN)))
1915- then (3 > ke)
1969+ let ci = parseIntValue(jn[bl])
1970+ let cj = parseIntValue(jn[bn])
1971+ if (if ((ax > (ci + aN)))
1972+ then (3 > cj)
19161973 else false)
19171974 then throw("Your duck is on delivery mission")
1918- else dq(invoke(this, "exitDeliveryInternal", [A], nil))
1919- }
1920- }
1921-
1922-
1923-func kf (kg,al,kh,c,ki,kj) = {
1924- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1925- if (kb(A))
1975+ else dA(invoke(this, "exitDeliveryInternal", [A], nil))
1976+ }
1977+ }
1978+
1979+
1980+func ko (A) = {
1981+ let jn = split(valueOrElse(getString(bJ(A)), aJ), "_")
1982+ let ax = lastBlock.timestamp
1983+ let ci = parseIntValue(jn[bl])
1984+ let cj = parseIntValue(jn[bn])
1985+ let js = valueOrErrorMessage(getString(bG(A)), "NFT duck is orphaned")
1986+ let kp = z(A)
1987+ let kq = getIntegerValue(kp)
1988+ let kr = if ((cj >= 3))
1989+ then {
1990+ let ks = invoke(db, "sendDeliveryReward", [js], nil)
1991+ if ((ks == ks))
1992+ then nil
1993+ else throw("Strict value is not equal to itself.")
1994+ }
1995+ else if ((ax > (ci + aN)))
1996+ then throw("Your duck is still on delivery mission")
1997+ else {
1998+ let kt = valueOrElse(getInteger(db, bO), 0)
1999+ let ku = invoke(db, "updateDeliveryLocked", [(kt - aM)], nil)
2000+ if ((ku == ku))
2001+ then if ((0 >= kq))
2002+ then nil
2003+ else [IntegerEntry(T(A), (ci + a))]
2004+ else throw("Strict value is not equal to itself.")
2005+ }
2006+ let kv = getIntegerValue(J(A))
2007+ let kw = getStringValue(K(A))
2008+ $Tuple4(kr, [IntegerEntry(kp, kv), StringEntry(bJ(A), kw)], kw, kv)
2009+ }
2010+
2011+
2012+func kx (ky,al,kz,c,kA,kB) = {
2013+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
2014+ if (km(A))
19262015 then throw("mergeInternal_checkTournament")
1927- else if (kc(A))
2016+ else if (kn(A))
19282017 then throw("mergeInternal_checkDelivery")
19292018 else {
1930- func kk (eD,P) = {
1931- let je = value(assetInfo(fromBase58String(P)))
1932- let jf = bq(P)
1933- let jg = valueOrErrorMessage(getInteger(jf), (("NFT " + je.name) + " is not staked"))
1934- let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1935- if ((jh != c))
2019+ func kC (eO,P) = {
2020+ let jp = value(assetInfo(fromBase58String(P)))
2021+ let jq = br(P)
2022+ let jr = valueOrErrorMessage(getInteger(jq), (("NFT " + jp.name) + " is not staked"))
2023+ let js = valueOrErrorMessage(getString(bo(P)), (("NFT " + jp.name) + " is orphaned"))
2024+ if ((js != c))
19362025 then throw((aC + " is not yours"))
19372026 else {
1938- let ji = split(je.description, "_")
1939- let di = ji[cZ]
1940- if (if ((eD._3 != ""))
1941- then (eD._3 != di)
2027+ let jt = split(jp.description, "_")
2028+ let ds = jt[dj]
2029+ if (if ((eO._3 != ""))
2030+ then (eO._3 != ds)
19422031 else false)
19432032 then throw("Lands should be on the same continent to merge")
19442033 else {
1945- let ds = ji[cX]
1946- let kl = eD._1
1947- let gw = valueOrErrorMessage(indexOf(kl, ds), "You haven't passed all the lands needed")
1948- let km = (take(kl, gw) + drop(kl, (gw + 1)))
1949- let iU = dr(ds)
1950- let kn = (eD._2 + valueOrElse(getInteger(br(aE, P)), 0))
1951- let hM = valueOrElse(getInteger(bx(P)), 0)
1952- let ko = {
1953- let cn = ds
1954- if (("S" == cn))
2034+ let dF = jt[dh]
2035+ let kD = eO._1
2036+ let gH = valueOrErrorMessage(indexOf(kD, dF), "You haven't passed all the lands needed")
2037+ let kE = (take(kD, gH) + drop(kD, (gH + 1)))
2038+ let jf = dE(dF)
2039+ let kF = (eO._2 + valueOrElse(getInteger(bs(aE, P)), 0))
2040+ let hX = valueOrElse(getInteger(by(P)), 0)
2041+ let kG = {
2042+ let cx = dF
2043+ if (("S" == cx))
19552044 then 3
1956- else if (("M" == cn))
2045+ else if (("M" == cx))
19572046 then 4
1958- else if (("L" == cn))
2047+ else if (("L" == cx))
19592048 then 5
1960- else if (("XL" == cn))
2049+ else if (("XL" == cx))
19612050 then 6
19622051 else throw("Only S, M, L, XL can merge")
19632052 }
1964- if ((hM != ko))
2053+ if ((hX != kG))
19652054 then throw("All lands should be maxed to merge")
19662055 else {
1967- let ef = ji[cW]
1968- let gs = gy(ji[cY])
1969- let gC = (lastBlock.timestamp - jg)
1970- if ((0 > gC))
1971- then throw(((("Saved timestamp is in future, saved = " + toString(jg)) + ", current = ") + toString(lastBlock.timestamp)))
2056+ let eq = jt[dg]
2057+ let gD = gJ(jt[di])
2058+ let gN = (lastBlock.timestamp - jr)
2059+ if ((0 > gN))
2060+ then throw(((("Saved timestamp is in future, saved = " + toString(jr)) + ", current = ") + toString(lastBlock.timestamp)))
19722061 else {
1973- let jk = iT(P, iU)
1974- let hL = (iU / cu)
1975- let js = gA(split(eD._4, "_"), gs, gC, hL, jk)
1976- let eN = gq(eD._6, gs, hL, -1)
1977- let kp = gq(eD._10, gs, hL, -1)
1978- let hg = gq(eD._9, gs, hL, 1)
1979- let kq = eD._7
1980- let cP = indexOf(kq, P)
1981- if (!(isDefined(cP)))
2062+ let jv = je(P, jf)
2063+ let hW = (jf / cE)
2064+ let jD = gL(split(eO._4, "_"), gD, gN, hW, jv)
2065+ let eY = gB(eO._6, gD, hW, -1)
2066+ let kH = gB(eO._10, gD, hW, -1)
2067+ let hr = gB(eO._9, gD, hW, 1)
2068+ let kI = eO._7
2069+ let cZ = indexOf(kI, P)
2070+ if (!(isDefined(cZ)))
19822071 then throw(("Your staked lands don't contain " + P))
19832072 else {
1984- let kr = bp(P)
1985- let ks = valueOrElse(getString(kr), "")
1986- $Tuple10(km, kn, di, js, ((((((((((((eD._5 :+ DeleteEntry(bq(P))) :+ DeleteEntry(bt(aC, P, c))) :+ DeleteEntry(ee(ef))) :+ DeleteEntry(bn(P))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(eg(P, c))) :+ DeleteEntry(br(aE, P))) :+ DeleteEntry(eh(ef))) :+ DeleteEntry(bw(P))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(P), 1)) ++ (if ((ks != ""))
1987- then [DeleteEntry(ec(ks))]
1988- else nil)), eN, removeByIndex(kq, value(cP)), (eD._8 + iU), hg, kp)
2073+ let kJ = bq(P)
2074+ let kK = valueOrElse(getString(kJ), "")
2075+ $Tuple10(kE, kF, ds, jD, ((((((((((((eO._5 :+ DeleteEntry(br(P))) :+ DeleteEntry(bu(aC, P, c))) :+ DeleteEntry(ep(eq))) :+ DeleteEntry(bo(P))) :+ DeleteEntry(by(P))) :+ DeleteEntry(er(P, c))) :+ DeleteEntry(bs(aE, P))) :+ DeleteEntry(es(eq))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(kJ)) :+ Burn(fromBase58String(P), 1)) ++ (if ((kK != ""))
2076+ then [DeleteEntry(en(kK))]
2077+ else nil)), eY, removeByIndex(kI, value(cZ)), (eO._8 + jf), hr, kH)
19892078 }
19902079 }
19912080 }
19932082 }
19942083 }
19952084
1996- let hx = bH(A)
1997- let ia = hw(hx)
1998- let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1999- let kt = dj(c)
2000- let ku = getString(kt)
2001- let kv = if (isDefined(ku))
2002- then split_51C(value(ku), "_")
2085+ let hI = bI(A)
2086+ let il = hH(hI)
2087+ let gC = split(valueOrElse(getString(dq()), "0_0_0_0_0_0"), "_")
2088+ let kL = dt(c)
2089+ let kM = getString(kL)
2090+ let kN = if (isDefined(kM))
2091+ then split_51C(value(kM), "_")
20032092 else nil
2004- let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
2005- let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
2006- let eO = {
2007- let eF = ki
2008- let eG = size(eF)
2009- let eH = $Tuple10(kh, 0, "", ia[bh], nil, gr, kv, 0, split("0_0_0_0_0_0", "_"), kx)
2010- func eI (eJ,eK) = if ((eK >= eG))
2011- then eJ
2012- else kk(eJ, eF[eK])
2013-
2014- func eL (eJ,eK) = if ((eK >= eG))
2015- then eJ
2093+ let kO = split(value(assetInfo(fromBase58String(kA[0]))).description, "_")[dj]
2094+ let kP = split(valueOrElse(getString(dr(kO)), "0_0_0_0_0_0"), "_")
2095+ let eZ = {
2096+ let eQ = kA
2097+ let eR = size(eQ)
2098+ let eS = $Tuple10(kz, 0, "", il[bi], nil, gC, kN, 0, split("0_0_0_0_0_0", "_"), kP)
2099+ func eT (eU,eV) = if ((eV >= eR))
2100+ then eU
2101+ else kC(eU, eQ[eV])
2102+
2103+ func eW (eU,eV) = if ((eV >= eR))
2104+ then eU
20162105 else throw("List size exceeds 5")
20172106
2018- eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2107+ eW(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5)
20192108 }
2020- let di = eO._3
2021- let ha = valueOrErrorMessage(indexOf(aO, di), ("Unknown continent: " + di))
2022- let gz = hf(eO._9, (dr(kg) / cu))
2023- let iy = valueOrElse(getInteger(eb()), (ea + 1))
2024- let ky = toString(iy)
2025- let iz = Issue(es(ky, kg), makeString([ky, kg, gz, di], "_"), 1, 0, false)
2026- let bo = calculateAssetId(iz)
2027- let kz = toBase58String(bo)
2028- let jE = makeString(eP((kj > 0), split(ia[bi], "_"), kj), "_")
2029- let kA = dk(c)
2030- let kB = valueOrElse(getInteger(kA), 0)
2031- $Tuple2((((((((((((((((eO._5 :+ (if ((size(eO._7) > 0))
2032- then StringEntry(kt, makeString_11C(eO._7, "_"))
2033- else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eO._8 > kB))
2109+ let ds = eZ._3
2110+ let hl = valueOrErrorMessage(indexOf(aP, ds), ("Unknown continent: " + ds))
2111+ let gK = hq(eZ._9, (dE(ky) / cE))
2112+ let iJ = valueOrElse(getInteger(em()), (el + 1))
2113+ let kQ = toString(iJ)
2114+ let iK = Issue(eD(kQ, ky), makeString([kQ, ky, gK, ds], "_"), 1, 0, false)
2115+ let bp = calculateAssetId(iK)
2116+ let kR = toBase58String(bp)
2117+ let jP = makeString(fa((kB > 0), split(il[bj], "_"), kB), "_")
2118+ let kS = du(c)
2119+ let kT = valueOrElse(getInteger(kS), 0)
2120+ $Tuple2((((((((((((((((eZ._5 :+ (if ((size(eZ._7) > 0))
2121+ then StringEntry(kL, makeString_11C(eZ._7, "_"))
2122+ else DeleteEntry(kL))) :+ IntegerEntry(kS, if ((eZ._8 > kT))
20342123 then 0
2035- else (kB - eO._8))) :+ IntegerEntry(eb(), (iy + 1))) :+ iz) :+ StringEntry(ee(ky), kz)) :+ StringEntry(bn(kz), c)) :+ StringEntry(eh(ky), c)) :+ IntegerEntry(br(aE, kz), eO._2)) :+ IntegerEntry(bx(kz), al)) :+ IntegerEntry(eg(kz, c), al)) :+ StringEntry(hx, makeString([ia[bg], eO._4, jE, ia[bj]], ":"))) :+ StringEntry(dg(), makeString(eO._6, "_"))) :+ StringEntry(dh(di), makeString(eO._10, "_"))) :+ StringEntry(bI(A), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bo)), kz)
2124+ else (kT - eZ._8))) :+ IntegerEntry(em(), (iJ + 1))) :+ iK) :+ StringEntry(ep(kQ), kR)) :+ StringEntry(bo(kR), c)) :+ StringEntry(es(kQ), c)) :+ IntegerEntry(bs(aE, kR), eZ._2)) :+ IntegerEntry(by(kR), al)) :+ IntegerEntry(er(kR, c), al)) :+ StringEntry(hI, makeString([il[bh], eZ._4, jP, il[bk]], ":"))) :+ StringEntry(dq(), makeString(eZ._6, "_"))) :+ StringEntry(dr(ds), makeString(eZ._10, "_"))) :+ StringEntry(bJ(A), makeString([ds, "L", kR], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bp)), kR)
20362125 }
20372126 }
20382127
20392128
2040-func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
2041-
2042-
2043-func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
2044-
2045-
2046-func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
2047-
2048-
2049-func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
2050-
2051-
2052-func kG (c,ki) = {
2053- let cn = size(ki)
2054- if ((4 == cn))
2055- then kC(c, ki)
2056- else if ((3 == cn))
2057- then kD(c, ki)
2058- else if ((5 == cn))
2059- then kE(c, ki)
2060- else if ((2 == cn))
2061- then kF(c, ki)
2129+func kU (c,kA) = kx("M", 3, "SSSS", c, kA, 0)
2130+
2131+
2132+func kV (c,kA) = kx("L", 4, "SMM", c, kA, (cz * 4))
2133+
2134+
2135+func kW (c,kA) = kx("XL", 5, "SSSML", c, kA, (cz * 47))
2136+
2137+
2138+func kX (c,kA) = kx("XXL", 6, "LXL", c, kA, (cz * 54))
2139+
2140+
2141+func kY (c,kA) = {
2142+ let cx = size(kA)
2143+ if ((4 == cx))
2144+ then kU(c, kA)
2145+ else if ((3 == cx))
2146+ then kV(c, kA)
2147+ else if ((5 == cx))
2148+ then kW(c, kA)
2149+ else if ((2 == cx))
2150+ then kX(c, kA)
20622151 else throw("Unknown merge")
20632152 }
20642153
20652154
2066-func kH (gw) = if (if ((gw.originCaller != cQ))
2067- then valueOrElse(getBoolean(du()), false)
2155+func kZ (gH) = if (if ((gH.originCaller != da))
2156+ then valueOrElse(getBoolean(dH()), false)
20682157 else false)
20692158 then throw("Contracts are under maintenance")
2070- else StringEntry(dv(toString(gw.originCaller)), toBase58String(gw.transactionId))
2071-
2072-
2073-@Callable(gw)
2074-func constructorV1 (kI) = if ((gw.caller != this))
2159+ else StringEntry(dI(toString(gH.originCaller)), toBase58String(gH.transactionId))
2160+
2161+
2162+@Callable(gH)
2163+func constructorV1 (la) = if ((gH.caller != this))
20752164 then throw("Permission denied")
2076- else [StringEntry(cK(), kI)]
2077-
2078-
2079-
2080-@Callable(gw)
2081-func setBlocked (kJ) = if ((gw.caller != this))
2165+ else [StringEntry(cU(), la)]
2166+
2167+
2168+
2169+@Callable(gH)
2170+func setBlocked (lb) = if ((gH.caller != this))
20822171 then throw("permission denied")
2083- else [BooleanEntry(du(), kJ)]
2084-
2085-
2086-
2087-@Callable(gw)
2172+ else [BooleanEntry(dH(), lb)]
2173+
2174+
2175+
2176+@Callable(gH)
20882177 func stakeLand () = {
2089- let kK = kH(gw)
2090- if ((size(gw.payments) != 1))
2178+ let lc = kZ(gH)
2179+ if ((size(gH.payments) != 1))
20912180 then throw("Exactly one payment required")
20922181 else {
2093- let kL = value(gw.payments[0])
2094- let bo = value(kL.assetId)
2095- let cB = toString(gw.caller)
2096- if ((kL.amount != 1))
2182+ let ld = value(gH.payments[0])
2183+ let bp = value(ld.assetId)
2184+ let cL = toString(gH.caller)
2185+ if ((ld.amount != 1))
20972186 then throw((("NFT " + aC) + " token should be attached as payment"))
20982187 else {
2099- let je = value(assetInfo(bo))
2100- if ((je.issuer != this))
2188+ let jp = value(assetInfo(bp))
2189+ if ((jp.issuer != this))
21012190 then throw("Unknown issuer of token")
2102- else if (!(contains(je.name, aC)))
2191+ else if (!(contains(jp.name, aC)))
21032192 then throw((("Only NFT " + aC) + " tokens are accepted"))
21042193 else {
2105- let kM = drop(je.name, 4)
2106- let ef = if (contains(kM, "XXL"))
2107- then dropRight(kM, 3)
2108- else if (contains(kM, "XL"))
2109- then dropRight(kM, 2)
2110- else dropRight(kM, 1)
2111- if (!(isDefined(parseInt(ef))))
2112- then throw(("Cannot parse land number from " + je.name))
2194+ let le = drop(jp.name, 4)
2195+ let eq = if (contains(le, "XXL"))
2196+ then dropRight(le, 3)
2197+ else if (contains(le, "XL"))
2198+ then dropRight(le, 2)
2199+ else dropRight(le, 1)
2200+ if (!(isDefined(parseInt(eq))))
2201+ then throw(("Cannot parse land number from " + jp.name))
21132202 else {
2114- let P = toBase58String(bo)
2115- let jf = bq(P)
2116- if (isDefined(getInteger(jf)))
2117- then throw((("NFT " + je.name) + " is already staked"))
2203+ let P = toBase58String(bp)
2204+ let jq = br(P)
2205+ if (isDefined(getInteger(jq)))
2206+ then throw((("NFT " + jp.name) + " is already staked"))
21182207 else {
2119- let ji = split(je.description, "_")
2120- let gs = gy(ji[cY])
2121- let iU = dr(ji[cX])
2122- let hL = (iU / cu)
2123- let eN = gx(gs, hL, 1)
2124- let kN = dh(ji[cZ])
2125- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2126- let kO = makeString(gq(kx, gs, hL, 1), "_")
2127- let kt = dj(cB)
2128- let ku = getString(kt)
2129- let kq = if (isDefined(ku))
2130- then split_51C(value(ku), "_")
2208+ let jt = split(jp.description, "_")
2209+ let gD = gJ(jt[di])
2210+ let jf = dE(jt[dh])
2211+ let hW = (jf / cE)
2212+ let eY = gI(gD, hW, 1)
2213+ let lf = dr(jt[dj])
2214+ let kP = split(valueOrElse(getString(lf), "0_0_0_0_0_0"), "_")
2215+ let lg = makeString(gB(kP, gD, hW, 1), "_")
2216+ let kL = dt(cL)
2217+ let kM = getString(kL)
2218+ let kI = if (isDefined(kM))
2219+ then split_51C(value(kM), "_")
21312220 else nil
2132- if (containsElement(kq, P))
2221+ if (containsElement(kI, P))
21332222 then throw(("Your staked lands already contain " + P))
2134- else if ((size(kq) >= aG))
2223+ else if ((size(kI) >= aG))
21352224 then throw((("Your already staked max (" + toString(aG)) + ") lands"))
21362225 else {
2137- let hM = valueOrElse(getInteger(bx(P)), 0)
2138- let kA = dk(cB)
2139- let kP = valueOrElse(getInteger(kA), 0)
2140- let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2141- $Tuple2([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aC, P, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ P), "_")), IntegerEntry(kA, (kP + iU)), StringEntry(bn(P), cB), StringEntry(eh(ef), cB), IntegerEntry(eg(P, cB), hM), StringEntry(dg(), eN), StringEntry(kN, kO), kK], kQ)
2226+ let hX = valueOrElse(getInteger(by(P)), 0)
2227+ let kS = du(cL)
2228+ let lh = valueOrElse(getInteger(kS), 0)
2229+ let li = invoke(dd, "onStakeUnstakeLand", [cL], nil)
2230+ $Tuple2([IntegerEntry(jq, lastBlock.timestamp), IntegerEntry(bu(aC, P, cL), lastBlock.timestamp), StringEntry(kL, makeString_11C((kI :+ P), "_")), IntegerEntry(kS, (lh + jf)), StringEntry(bo(P), cL), StringEntry(es(eq), cL), IntegerEntry(er(P, cL), hX), StringEntry(dq(), eY), StringEntry(lf, lg), lc], li)
21422231 }
21432232 }
21442233 }
21492238
21502239
21512240
2152-@Callable(gw)
2153-func unstakeLand (ja) = {
2154- let kK = kH(gw)
2155- if ((size(gw.payments) != 0))
2241+@Callable(gH)
2242+func unstakeLand (jl) = {
2243+ let lc = kZ(gH)
2244+ if ((size(gH.payments) != 0))
21562245 then throw("No payments required")
21572246 else {
2158- let c = toString(gw.caller)
2159- let fM = iY(c, em, ja)
2160- let P = fM._2
2161- let ji = fM._3
2162- let kt = dj(c)
2163- let gs = gy(ji[cY])
2164- let iU = dr(ji[cX])
2165- let hL = (iU / cu)
2166- let eN = gx(gs, hL, -1)
2167- let kN = dh(ji[cZ])
2168- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2169- let kO = makeString(gq(kx, gs, hL, -1), "_")
2170- let jF = jv(c, P, iU, em)
2171- let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2172- let cP = indexOf(kq, P)
2173- if (!(isDefined(cP)))
2247+ let c = toString(gH.caller)
2248+ let fX = jj(c, ex, jl)
2249+ let P = fX._2
2250+ let jt = fX._3
2251+ let kL = dt(c)
2252+ let gD = gJ(jt[di])
2253+ let jf = dE(jt[dh])
2254+ let hW = (jf / cE)
2255+ let eY = gI(gD, hW, -1)
2256+ let lf = dr(jt[dj])
2257+ let kP = split(valueOrElse(getString(lf), "0_0_0_0_0_0"), "_")
2258+ let lg = makeString(gB(kP, gD, hW, -1), "_")
2259+ let jQ = jG(c, P, jf, ex)
2260+ let kI = split_51C(valueOrElse(getString(kL), ""), "_")
2261+ let cZ = indexOf(kI, P)
2262+ if (!(isDefined(cZ)))
21742263 then throw(("Your staked lands don't contain " + P))
21752264 else {
21762265 let ax = lastBlock.timestamp
2177- let kR = valueOrElse(getInteger(cS, bJ(c)), 0)
2178- if ((kR >= ax))
2179- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
2266+ let lj = valueOrElse(getInteger(dc, bK(c)), 0)
2267+ if ((lj >= ax))
2268+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lj)))
21802269 else {
2181- let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2182- if ((kS > ax))
2183- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
2270+ let lk = (valueOrElse(getInteger(dd, b(c)), 0) + cA)
2271+ if ((lk > ax))
2272+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lk)))
21842273 else {
2185- let kA = dk(c)
2186- let kB = valueOrElse(getInteger(kA), 0)
2187- let kT = if ((iU > kB))
2274+ let kS = du(c)
2275+ let kT = valueOrElse(getInteger(kS), 0)
2276+ let ll = if ((jf > kT))
21882277 then 0
2189- else (kB - iU)
2190- let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2191- $Tuple2([ScriptTransfer(gw.caller, 1, fromBase58String(P)), DeleteEntry(bq(P)), DeleteEntry(bt(aC, P, c)), StringEntry(dg(), eN), StringEntry(kN, kO), StringEntry(jF._2, makeString(jF._3, ":")), if ((size(kq) > 1))
2192- then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2193- else DeleteEntry(kt), IntegerEntry(kA, kT), kK], kQ)
2278+ else (kT - jf)
2279+ let li = invoke(dd, "onStakeUnstakeLand", [c], nil)
2280+ $Tuple2([ScriptTransfer(gH.caller, 1, fromBase58String(P)), DeleteEntry(br(P)), DeleteEntry(bu(aC, P, c)), StringEntry(dq(), eY), StringEntry(lf, lg), StringEntry(jQ._2, makeString(jQ._3, ":")), if ((size(kI) > 1))
2281+ then StringEntry(kL, makeString_11C(removeByIndex(kI, value(cZ)), "_"))
2282+ else DeleteEntry(kL), IntegerEntry(kS, ll), lc], li)
21942283 }
21952284 }
21962285 }
21992288
22002289
22012290
2202-@Callable(gw)
2291+@Callable(gH)
22032292 func stakeDuck () = {
2204- let kK = kH(gw)
2205- if ((size(gw.payments) != 1))
2293+ let lc = kZ(gH)
2294+ if ((size(gH.payments) != 1))
22062295 then throw("Exactly one payment required")
22072296 else {
2208- let kL = value(gw.payments[0])
2209- let bo = value(kL.assetId)
2210- let cB = toString(gw.caller)
2211- if ((kL.amount != 1))
2297+ let ld = value(gH.payments[0])
2298+ let bp = value(ld.assetId)
2299+ let cL = toString(gH.caller)
2300+ if ((ld.amount != 1))
22122301 then throw((("NFT " + aD) + " token should be attached as payment"))
22132302 else {
2214- let je = value(assetInfo(bo))
2215- if (if ((je.issuer != dI))
2216- then (je.issuer != dJ)
2303+ let jp = value(assetInfo(bp))
2304+ if (if ((jp.issuer != dU))
2305+ then (jp.issuer != dV)
22172306 else false)
22182307 then throw((("Unknown issuer of " + aD) + " token"))
2219- else if (!(contains(je.name, aD)))
2308+ else if (!(contains(jp.name, aD)))
22202309 then throw((("Only NFT " + aD) + " tokens are accepted"))
22212310 else {
2222- let kU = toBase58String(bo)
2223- let jf = bq(kU)
2224- if (isDefined(getInteger(jf)))
2225- then throw((("NFT " + je.name) + " is already staked"))
2226- else if (isDefined(getString(bG(cB))))
2227- then throw(("You already staked one duck: " + je.name))
2311+ let lm = toBase58String(bp)
2312+ let jq = br(lm)
2313+ if (isDefined(getInteger(jq)))
2314+ then throw((("NFT " + jp.name) + " is already staked"))
2315+ else if (isDefined(getString(bH(cL))))
2316+ then throw(("You already staked one duck: " + jp.name))
22282317 else {
2229- let kV = bI(kU)
2230- let cc = getString(kV)
2231- let hx = bH(kU)
2232- let kW = getString(hx)
2233- let iN = z(kU)
2234- let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2235- let kX = valueOrElse(getInteger(iN), iO)
2236- ([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aD, toBase58String(bo), cB), lastBlock.timestamp), StringEntry(bF(kU), cB), StringEntry(bG(cB), kU)] ++ (if (isDefined(cc))
2318+ let ln = bJ(lm)
2319+ let cd = getString(ln)
2320+ let hI = bI(lm)
2321+ let lo = getString(hI)
2322+ let iY = z(lm)
2323+ let iZ = ag(valueOrElse(getInteger(D(lm)), 0))
2324+ let kq = valueOrElse(getInteger(iY), iZ)
2325+ ([IntegerEntry(jq, lastBlock.timestamp), IntegerEntry(bu(aD, toBase58String(bp), cL), lastBlock.timestamp), StringEntry(bG(lm), cL), StringEntry(bH(cL), lm)] ++ (if (isDefined(cd))
22372326 then nil
2238- else ([StringEntry(kV, aJ)] ++ (if (isDefined(kW))
2327+ else ([StringEntry(ln, aJ)] ++ (if (isDefined(lo))
22392328 then nil
2240- else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iN, kX)) :+ kK)))))
2329+ else (([StringEntry(hI, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iY, kq)) :+ lc)))))
22412330 }
22422331 }
22432332 }
22462335
22472336
22482337
2249-@Callable(gw)
2250-func unstakeDuck (kU) = {
2251- let kK = kH(gw)
2252- if ((size(gw.payments) != 0))
2338+@Callable(gH)
2339+func unstakeDuck (lm) = {
2340+ let lc = kZ(gH)
2341+ if ((size(gH.payments) != 0))
22532342 then throw("No payments required")
22542343 else {
2255- let bo = fromBase58String(kU)
2256- let cB = toString(gw.caller)
2257- let je = value(assetInfo(bo))
2258- let jf = bq(kU)
2259- if (!(isDefined(getInteger(jf))))
2260- then throw((("NFT " + je.name) + " is not staked"))
2261- else if (!(isDefined(getString(bG(cB)))))
2262- then throw((("The duck " + je.name) + " is not staked"))
2344+ let bp = fromBase58String(lm)
2345+ let cL = toString(gH.caller)
2346+ let jp = value(assetInfo(bp))
2347+ let jq = br(lm)
2348+ if (!(isDefined(getInteger(jq))))
2349+ then throw((("NFT " + jp.name) + " is not staked"))
2350+ else if (!(isDefined(getString(bH(cL)))))
2351+ then throw((("The duck " + jp.name) + " is not staked"))
22632352 else {
2264- let jh = valueOrErrorMessage(getString(bF(kU)), (("NFT " + je.name) + " is orphaned"))
2265- if ((jh != cB))
2353+ let js = valueOrErrorMessage(getString(bG(lm)), (("NFT " + jp.name) + " is orphaned"))
2354+ if ((js != cL))
22662355 then throw("Staked NFT is not yours")
2267- else if (kb(kU))
2356+ else if (km(lm))
22682357 then throw("unstakeDuck_checkTournament")
2269- else if (kc(kU))
2358+ else if (kn(lm))
22702359 then throw("unstakeDuck_checkDelivery")
22712360 else {
2272- let iN = z(kU)
2273- let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2274- let as = valueOrElse(getInteger(iN), iO)
2275- if ((iO > as))
2276- then throw((("Please heal your duck to " + toString(iO)) + "hp before unstaking"))
2277- else [ScriptTransfer(gw.caller, 1, bo), DeleteEntry(jf), DeleteEntry(iN), DeleteEntry(bI(kU)), DeleteEntry(bF(kU)), DeleteEntry(bt(aD, kU, cB)), DeleteEntry(bG(cB)), kK]
2361+ let iY = z(lm)
2362+ let iZ = ag(valueOrElse(getInteger(D(lm)), 0))
2363+ let as = valueOrElse(getInteger(iY), iZ)
2364+ if ((iZ > as))
2365+ then throw((("Please heal your duck to " + toString(iZ)) + "hp before unstaking"))
2366+ else [ScriptTransfer(gH.caller, 1, bp), DeleteEntry(jq), DeleteEntry(iY), DeleteEntry(bJ(lm)), DeleteEntry(bG(lm)), DeleteEntry(bu(aD, lm, cL)), DeleteEntry(bH(cL)), lc]
22782367 }
22792368 }
22802369 }
22822371
22832372
22842373
2285-@Callable(gw)
2286-func claimRes (eu,kY) = {
2287- let kK = kH(gw)
2288- if ((size(gw.payments) != 0))
2374+@Callable(gH)
2375+func claimRes (eF,lp) = {
2376+ let lc = kZ(gH)
2377+ if ((size(gH.payments) != 0))
22892378 then throw("No payments required")
22902379 else {
2291- let c = toString(gw.originCaller)
2292- let eV = jj(c, eu, em, kY)
2293- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2294- $Tuple2(((((eV._1 ++ jL(A, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._3[bh])
2295- }
2296- }
2297-
2298-
2299-
2300-@Callable(gw)
2301-func claimResToWH (eu,kY) = {
2302- let kK = kH(gw)
2303- if ((size(gw.payments) != 0))
2380+ let c = toString(gH.originCaller)
2381+ let fg = ju(c, eF, ex, lp)
2382+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
2383+ $Tuple2(((((fg._1 ++ jW(A, fraction(U, eF, cD))._1) :+ StringEntry(fg._2, makeString(fg._3, ":"))) :+ StringEntry(fg._4, makeString(fg._5, ":"))) :+ lc), fg._3[bi])
2384+ }
2385+ }
2386+
2387+
2388+
2389+@Callable(gH)
2390+func claimResToWH (eF,lp) = {
2391+ let lc = kZ(gH)
2392+ if ((size(gH.payments) != 0))
23042393 then throw("No payments required")
23052394 else {
2306- let c = toString(gw.originCaller)
2307- let eV = jj(c, eu, el, kY)
2308- $Tuple2(((((eV._1 ++ jR(c, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._5[aY])
2309- }
2310- }
2311-
2312-
2313-
2314-@Callable(gw)
2315-func flight (iC,iD) = {
2316- let kK = kH(gw)
2317- if ((size(gw.payments) != 0))
2395+ let c = toString(gH.originCaller)
2396+ let fg = ju(c, eF, ew, lp)
2397+ $Tuple2(((((fg._1 ++ kc(c, fraction(U, eF, cD))._1) :+ StringEntry(fg._2, makeString(fg._3, ":"))) :+ StringEntry(fg._4, makeString(fg._5, ":"))) :+ lc), fg._5[aZ])
2398+ }
2399+ }
2400+
2401+
2402+
2403+@Callable(gH)
2404+func flight (iN,iO) = {
2405+ let lc = kZ(gH)
2406+ if ((size(gH.payments) != 0))
23182407 then throw("No payments required")
23192408 else {
2320- let bK = toString(gw.caller)
2321- let hb = iB(bK, iC, iD)
2322- let iH = hb._1
2323- let A = hb._2
2324- let kV = bI(A)
2325- let jc = valueOrElse(getString(kV), aJ)
2326- let iJ = hb._4
2327- if ((iJ == jc))
2409+ let bL = toString(gH.caller)
2410+ let hm = iM(bL, iN, iO)
2411+ let iS = hm._1
2412+ let A = hm._2
2413+ let ln = bJ(A)
2414+ let jn = valueOrElse(getString(ln), aJ)
2415+ let iU = hm._4
2416+ if ((iU == jn))
23282417 then throw("You can't fly to the same location")
23292418 else {
2330- let kZ = split(iJ, "_")
2331- let la = (kZ[bl] == "T")
2332- let gj = F(A)
2333- let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2334- let lc = eW(lb, hb._5)
2335- let ld = lc._1
2336- let le = lc._2
2337- let lf = if (!(cb(cU, jc)))
2338- then if (la)
2339- then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2340- else if ((iH > 0))
2341- then iJ
2342- else jc
2343- else if (!(cb(cU, iJ)))
2344- then throw("Your duck is taking part in the tournament")
2345- else {
2346- let lg = parseIntValue(kZ[bm])
2347- let lh = split(jc, "_")
2348- let cd = valueOrElse(getInteger(cU, bO), 0)
2349- if ((lg != (parseIntValue(lh[bm]) + 1)))
2350- then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2351- else if ((iH > 0))
2352- then {
2353- let li = valueOrElse(getInteger(cU, bS(cd, A)), 0)
2354- let lj = if ((lg > li))
2355- then invoke(cU, "saveDuckResult", [A, lg], nil)
2356- else unit
2357- if ((lj == lj))
2358- then iJ
2359- else throw("Strict value is not equal to itself.")
2419+ let cr = split(iU, "_")
2420+ let lq = (cr[bm] == "T")
2421+ let lr = (cr[bm] == "D")
2422+ let gu = F(A)
2423+ let ls = valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,")
2424+ let lt = fh(ls, hm._5)
2425+ let lu = lt._1
2426+ let lv = lt._2
2427+ let lw = if (cm(de, jn))
2428+ then if (!(ck(iU)))
2429+ then cp(jn, iU)
2430+ else if ((iS > 0))
2431+ then $Tuple2(iU, iS)
2432+ else $Tuple2(jn, 0)
2433+ else if (cc(de, jn))
2434+ then if (!(cc(de, iU)))
2435+ then throw("Your duck is taking part in the tournament")
2436+ else {
2437+ let lx = parseIntValue(cr[bn])
2438+ let ly = split(jn, "_")
2439+ let ce = valueOrElse(getInteger(de, bP), 0)
2440+ if ((lx != (parseIntValue(ly[bn]) + 1)))
2441+ then cp(jn, iU)
2442+ else if ((iS > 0))
2443+ then {
2444+ let lz = valueOrElse(getInteger(de, bT(ce, A)), 0)
2445+ let lA = if ((lx > lz))
2446+ then invoke(de, "saveDuckResult", [A, lx], nil)
2447+ else unit
2448+ if ((lA == lA))
2449+ then $Tuple2(iU, iS)
2450+ else throw("Strict value is not equal to itself.")
2451+ }
2452+ else $Tuple2(jn, 0)
2453+ }
2454+ else if (!(ch(jn)))
2455+ then {
2456+ let lB = dB(invoke(this, "autoExitDelivery", [A], nil))
2457+ if ((lB == lB))
2458+ then if (lr)
2459+ then lB
2460+ else if ((iS > 0))
2461+ then $Tuple2(iU, iS)
2462+ else $Tuple2(lB._1, 0)
2463+ else throw("Strict value is not equal to itself.")
2464+ }
2465+ else if (!(lr))
2466+ then throw("Your duck is taking part in delivery")
2467+ else if (!(ch(iU)))
2468+ then cp(jn, iU)
2469+ else {
2470+ let lx = parseIntValue(cr[bn])
2471+ let ly = split(jn, "_")
2472+ if ((lx != (parseIntValue(ly[bn]) + 1)))
2473+ then cp(jn, iU)
2474+ else if ((iS > 0))
2475+ then $Tuple2(iU, iS)
2476+ else {
2477+ let lB = dB(invoke(this, "autoExitDelivery", [A], nil))
2478+ if ((lB == lB))
2479+ then lB
2480+ else throw("Strict value is not equal to itself.")
2481+ }
23602482 }
2361- else jc
2362- }
2363- $Tuple2(([StringEntry(kV, lf), StringEntry(gj, ld), IntegerEntry(z(A), iH), kK] ++ (if (le)
2483+ let lC = lw._1
2484+ let lD = lw._2
2485+ $Tuple2(([StringEntry(ln, lC), StringEntry(gu, lu), IntegerEntry(z(A), iS), lc] ++ (if (lv)
23642486 then [StringEntry(L(A), "0_0_0_0_0")]
2365- else (nil ++ jL(A, if ((iH > 0))
2487+ else (nil ++ jW(A, if ((iS > 0))
23662488 then V
2367- else W)._1))), hb._3)
2489+ else W)._1))), hm._3)
23682490 }
23692491 }
23702492 }
23712493
23722494
23732495
2374-@Callable(gw)
2375-func heal (lk,ll,lm) = {
2376- let kK = kH(gw)
2377- if (if (if ((0 > lk))
2496+@Callable(gH)
2497+func heal (lE,lF,lG) = {
2498+ let lc = kZ(gH)
2499+ if (if (if ((0 > lE))
23782500 then true
2379- else (0 > ll))
2501+ else (0 > lF))
23802502 then true
2381- else (0 > lm))
2503+ else (0 > lG))
23822504 then throw("Quantity cannot be negative")
23832505 else {
2384- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2385- if (kb(A))
2506+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
2507+ if (km(A))
23862508 then throw("heal_checkTournament")
2387- else if (kc(A))
2509+ else if (kn(A))
23882510 then throw("heal_checkDelivery")
23892511 else {
2390- let ln = [lk, ll, lm]
2391- let iN = z(A)
2392- let iO = ag(valueOrElse(getInteger(D(A)), 0))
2393- let lo = valueOrElse(getInteger(iN), iO)
2394- if ((lo >= iO))
2395- then throw((("HP should be < " + toString(iO)) + " to heal"))
2512+ let lH = [lE, lF, lG]
2513+ let iY = z(A)
2514+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
2515+ let lI = valueOrElse(getInteger(iY), iZ)
2516+ if ((lI >= iZ))
2517+ then throw((("HP should be < " + toString(iZ)) + " to heal"))
23962518 else {
2397- let hx = bH(A)
2398- let ia = hw(hx)
2399- let lp = if ((ia[bj] == ""))
2519+ let hI = bI(A)
2520+ let il = hH(hI)
2521+ let lJ = if ((il[bk] == ""))
24002522 then nil
2401- else split_4C(ia[bj], "_")
2402- func lq (eD,ch) = {
2403- let dp = eD._2
2404- let gS = if ((size(lp) > dp))
2405- then parseIntValue(lp[dp])
2523+ else split_4C(il[bk], "_")
2524+ func lK (eO,co) = {
2525+ let dz = eO._2
2526+ let hd = if ((size(lJ) > dz))
2527+ then parseIntValue(lJ[dz])
24062528 else 0
2407- if ((3 > dp))
2529+ if ((3 > dz))
24082530 then {
2409- let lr = ln[dp]
2410- if ((lr > gS))
2411- then throw(((("You have only " + toString(gS)) + " of ") + aN[dp]))
2412- else $Tuple3((eD._1 :+ toString((gS - lr))), (dp + 1), (eD._3 + (parseIntValue(split(ch, "_")[aT]) * lr)))
2531+ let lL = lH[dz]
2532+ if ((lL > hd))
2533+ then throw(((("You have only " + toString(hd)) + " of ") + aO[dz]))
2534+ else $Tuple3((eO._1 :+ toString((hd - lL))), (dz + 1), (eO._3 + (parseIntValue(split(co, "_")[aU]) * lL)))
24132535 }
2414- else $Tuple3((eD._1 :+ toString(gS)), (dp + 1), eD._3)
2536+ else $Tuple3((eO._1 :+ toString(hd)), (dz + 1), eO._3)
24152537 }
24162538
2417- let eV = {
2418- let eF = aR
2419- let eG = size(eF)
2420- let eH = $Tuple3(nil, 0, 0)
2421- func eI (eJ,eK) = if ((eK >= eG))
2422- then eJ
2423- else lq(eJ, eF[eK])
2424-
2425- func eL (eJ,eK) = if ((eK >= eG))
2426- then eJ
2539+ let fg = {
2540+ let eQ = aS
2541+ let eR = size(eQ)
2542+ let eS = $Tuple3(nil, 0, 0)
2543+ func eT (eU,eV) = if ((eV >= eR))
2544+ then eU
2545+ else lK(eU, eQ[eV])
2546+
2547+ func eW (eU,eV) = if ((eV >= eR))
2548+ then eU
24272549 else throw("List size exceeds 50")
24282550
2429- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
2551+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
24302552 }
2431- let ls = min([iO, (lo + eV._3)])
2432- $Tuple2(([IntegerEntry(iN, ls), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], makeString(eV._1, "_")], ":")), kK] ++ jL(A, (ad * ((lk + ll) + lm)))._1), ls)
2553+ let lM = min([iZ, (lI + fg._3)])
2554+ $Tuple2(([IntegerEntry(iY, lM), StringEntry(hI, makeString_2C([il[bh], il[bi], il[bj], makeString(fg._1, "_")], ":")), lc] ++ jW(A, (ad * ((lE + lF) + lG)))._1), lM)
24332555 }
24342556 }
24352557 }
24372559
24382560
24392561
2440-@Callable(gw)
2562+@Callable(gH)
24412563 func healES () = {
2442- let kK = kH(gw)
2443- if ((size(gw.payments) != 1))
2564+ let lc = kZ(gH)
2565+ if ((size(gH.payments) != 1))
24442566 then throw("Exactly one payment required")
24452567 else {
2446- let kL = value(gw.payments[0])
2447- if ((kL.assetId != cm))
2568+ let ld = value(gH.payments[0])
2569+ if ((ld.assetId != cw))
24482570 then throw("Allowed USDT payment only!")
24492571 else {
2450- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2451- if (kb(A))
2572+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
2573+ if (km(A))
24522574 then throw("healES_checkTournament")
2453- else if (kc(A))
2575+ else if (kn(A))
24542576 then throw("healES_checkDelivery")
24552577 else {
2456- let iN = z(A)
2457- let iO = ag(valueOrElse(getInteger(D(A)), 0))
2458- let lo = valueOrElse(getInteger(iN), iO)
2459- if ((lo > 0))
2578+ let iY = z(A)
2579+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
2580+ let lI = valueOrElse(getInteger(iY), iZ)
2581+ if ((lI > 0))
24602582 then throw("HP should be 0 to call Emergency Service")
24612583 else {
2462- let hx = bH(A)
2463- let ia = hw(hx)
2464- let lp = if ((ia[bj] == ""))
2584+ let hI = bI(A)
2585+ let il = hH(hI)
2586+ let lJ = if ((il[bk] == ""))
24652587 then nil
2466- else split_4C(ia[bj], "_")
2467- let lt = if ((size(lp) > 0))
2468- then parseIntValue(lp[0])
2588+ else split_4C(il[bk], "_")
2589+ let lN = if ((size(lJ) > 0))
2590+ then parseIntValue(lJ[0])
24692591 else 0
2470- let lu = if ((size(lp) > 1))
2471- then parseIntValue(lp[1])
2592+ let lO = if ((size(lJ) > 1))
2593+ then parseIntValue(lJ[1])
24722594 else 0
2473- let lv = if ((size(lp) > 2))
2474- then parseIntValue(lp[2])
2595+ let lP = if ((size(lJ) > 2))
2596+ then parseIntValue(lJ[2])
24752597 else 0
2476- if (if (if ((lt > 0))
2598+ if (if (if ((lN > 0))
24772599 then true
2478- else (lu > 0))
2600+ else (lO > 0))
24792601 then true
2480- else (lv > 0))
2602+ else (lP > 0))
24812603 then throw("You have to use own Medical Kit")
24822604 else {
2483- let lw = getString(cR, bL())
2484- let lx = if (isDefined(lw))
2485- then split_4C(value(lw), "_")
2605+ let lQ = getString(db, bM())
2606+ let lR = if (isDefined(lQ))
2607+ then split_4C(value(lQ), "_")
24862608 else nil
2487- let ly = if ((size(lx) > 0))
2488- then parseIntValue(lx[0])
2609+ let lS = if ((size(lR) > 0))
2610+ then parseIntValue(lR[0])
24892611 else 0
2490- if ((0 >= ly))
2612+ if ((0 >= lS))
24912613 then throw("There are no Medical Kits L1 at Emergency Service storage")
24922614 else {
2493- let ls = (lo + parseIntValue(split(aR[0], "_")[aT]))
2494- let lz = makeString([toString((ly - 1)), removeByIndex(lx, 0)], "_")
2495- let ch = split(aR[0], "_")
2496- let lA = cg(ch)
2497- let lB = fraction((lA * aL), aK, (ct * aW))
2498- if ((kL.amount != lB))
2499- then throw(("Payment attached should be " + toString(lB)))
2615+ let lM = (lI + parseIntValue(split(aS[0], "_")[aU]))
2616+ let lT = makeString([toString((lS - 1)), removeByIndex(lR, 0)], "_")
2617+ let co = split(aS[0], "_")
2618+ let lU = cn(co)
2619+ let lV = fraction((lU * aL), aK, (cD * aX))
2620+ if ((ld.amount != lV))
2621+ then throw(("Payment attached should be " + toString(lV)))
25002622 else {
2501- let eV = dl(invoke(cR, "updateEsStorage", [lz], [AttachedPayment(cm, lB)]))
2502- $Tuple2(([IntegerEntry(iN, ls), kK] ++ jL(A, X)._1), eV)
2623+ let fg = dv(invoke(db, "updateEsStorage", [lT], [AttachedPayment(cw, lV)]))
2624+ $Tuple2(([IntegerEntry(iY, lM), lc] ++ jW(A, X)._1), fg)
25032625 }
25042626 }
25052627 }
25112633
25122634
25132635
2514-@Callable(gw)
2515-func updateBackpack (A,lC) = if ((gw.caller != cR))
2636+@Callable(gH)
2637+func updateBackpack (A,lW) = if ((gH.caller != db))
25162638 then throw("permission denied")
2517- else $Tuple2([StringEntry(bH(A), lC)], lC)
2518-
2519-
2520-
2521-@Callable(gw)
2639+ else $Tuple2([StringEntry(bI(A), lW)], lW)
2640+
2641+
2642+
2643+@Callable(gH)
25222644 func commitForRandom () = {
2523- let kK = kH(gw)
2524- let lD = (height + de)
2525- let c = toString(gw.caller)
2526- $Tuple2(([IntegerEntry(df(c), lD)] :+ kK), lD)
2527- }
2528-
2529-
2530-
2531-@Callable(gw)
2532-func awardSLand (cB) = if ((gw.caller != cU))
2645+ let lc = kZ(gH)
2646+ let lX = (height + do)
2647+ let c = toString(gH.caller)
2648+ $Tuple2(([IntegerEntry(dp(c), lX)] :+ lc), lX)
2649+ }
2650+
2651+
2652+
2653+@Callable(gH)
2654+func awardSLand (cL) = if ((gH.caller != de))
25332655 then throw("Access denied")
2534- else if ((size(gw.payments) != 0))
2656+ else if ((size(gH.payments) != 0))
25352657 then throw("No payments required")
25362658 else {
2537- let eV = iu(addressFromStringValue(cB), gw.transactionId)
2538- $Tuple2(eV._1, eV._2._1)
2539- }
2540-
2541-
2542-
2543-@Callable(gw)
2659+ let fg = iF(addressFromStringValue(cL), gH.transactionId)
2660+ $Tuple2(fg._1, fg._2._1)
2661+ }
2662+
2663+
2664+
2665+@Callable(gH)
25442666 func buySLand () = {
2545- let kK = kH(gw)
2546- if ((size(gw.payments) != 1))
2667+ let lc = kZ(gH)
2668+ if ((size(gH.payments) != 1))
25472669 then throw("Exactly one payment required")
25482670 else {
2549- let kL = value(gw.payments[0])
2550- if ((kL.assetId != cm))
2671+ let ld = value(gH.payments[0])
2672+ if ((ld.assetId != cw))
25512673 then throw("Allowed USDT payment only!")
2552- else if ((kL.amount != dS))
2553- then throw(("Payment attached should be " + toString(dS)))
2674+ else if ((ld.amount != ed))
2675+ then throw(("Payment attached should be " + toString(ed)))
25542676 else {
2555- let eV = iu(gw.caller, gw.transactionId)
2556- let lE = do(invoke(cV, "burnAcres", [dT], nil))
2557- $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2677+ let fg = iF(gH.caller, gH.transactionId)
2678+ let lY = dy(invoke(df, "burnAcres", [ee], nil))
2679+ $Tuple2((((fg._1 :+ ScriptTransfer(db, ld.amount, cw)) ++ kc(toString(gH.caller), Z)._1) :+ lc), $Tuple2(fg._2._1, lY))
25582680 }
25592681 }
25602682 }
25612683
25622684
25632685
2564-@Callable(gw)
2565-func expedition (iC,iD) = {
2566- let kK = kH(gw)
2567- if ((size(gw.payments) != 0))
2686+@Callable(gH)
2687+func expedition (iN,iO) = {
2688+ let lc = kZ(gH)
2689+ if ((size(gH.payments) != 0))
25682690 then throw("No payments required")
25692691 else {
2570- let bK = toString(gw.caller)
2571- let hb = iB(bK, iC, iD)
2572- let A = hb._2
2573- let iN = z(A)
2574- let hx = bH(A)
2575- let ia = hw(hx)
2576- let jC = split(ia[bi], "_")
2577- let jE = makeString(eP(true, jC, dR), "_")
2578- let gj = F(A)
2579- let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2580- let lF = eW(lb, hb._5)
2581- let ld = lF._1
2582- let le = lF._2
2583- let lG = iu(gw.caller, gw.transactionId)
2584- let iA = lG._2._1
2585- let eV = if ((0 >= hb._1))
2586- then $Tuple3([IntegerEntry(iN, 0), StringEntry(gj, ld)], "", 0)
2587- else $Tuple3((lG._1 ++ (if (le)
2692+ let bL = toString(gH.caller)
2693+ let hm = iM(bL, iN, iO)
2694+ let A = hm._2
2695+ let iY = z(A)
2696+ let hI = bI(A)
2697+ let il = hH(hI)
2698+ let jN = split(il[bj], "_")
2699+ let jP = makeString(fa(true, jN, ec), "_")
2700+ let gu = F(A)
2701+ let ls = valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,")
2702+ let lZ = fh(ls, hm._5)
2703+ let lu = lZ._1
2704+ let lv = lZ._2
2705+ let ma = iF(gH.caller, gH.transactionId)
2706+ let iL = ma._2._1
2707+ let fg = if ((0 >= hm._1))
2708+ then $Tuple3([IntegerEntry(iY, 0), StringEntry(gu, lu)], "", 0)
2709+ else $Tuple3((ma._1 ++ (if (lv)
25882710 then [StringEntry(L(A), "0_0_0_0_0")]
2589- else ((((nil :+ StringEntry(bI(A), makeString([lG._2._2, "L", iA], "_"))) :+ IntegerEntry(iN, hb._1)) :+ StringEntry(gj, ld)) :+ StringEntry(hx, makeString([ia[bg], ia[bh], jE, ia[bj]], ":"))))), iA, hb._3)
2590- if (kb(A))
2711+ else ((((nil :+ StringEntry(bJ(A), makeString([ma._2._2, "L", iL], "_"))) :+ IntegerEntry(iY, hm._1)) :+ StringEntry(gu, lu)) :+ StringEntry(hI, makeString([il[bh], il[bi], jP, il[bk]], ":"))))), iL, hm._3)
2712+ if (km(A))
25912713 then throw("expedition_checkTournament")
2592- else if (kc(A))
2714+ else if (kn(A))
25932715 then throw("expedition_checkDelivery")
25942716 else {
2595- let lE = do(invoke(cV, "burnAcres", [dT], nil))
2596- $Tuple2(((eV._1 ++ jL(A, Z)._1) :+ kK), $Tuple3(eV._2, eV._3, lE))
2717+ let lY = dy(invoke(df, "burnAcres", [ee], nil))
2718+ $Tuple2(((fg._1 ++ jW(A, Z)._1) :+ lc), $Tuple3(fg._2, fg._3, lY))
25972719 }
25982720 }
25992721 }
26002722
26012723
26022724
2603-@Callable(gw)
2725+@Callable(gH)
26042726 func buySLandForAcres () = {
2605- let kK = kH(gw)
2606- if ((size(gw.payments) != 1))
2727+ let lc = kZ(gH)
2728+ if ((size(gH.payments) != 1))
26072729 then throw("exactly 1 payment must be attached")
26082730 else {
2609- let kL = gw.payments[0]
2610- let fc = kL.amount
2611- if (if (!(isDefined(kL.assetId)))
2731+ let ld = gH.payments[0]
2732+ let fn = ld.amount
2733+ if (if (!(isDefined(ld.assetId)))
26122734 then true
2613- else (value(kL.assetId) != dd))
2735+ else (value(ld.assetId) != dn))
26142736 then throw("ACRES payments only!")
2615- else if ((fc != dT))
2616- then throw(("Payment attached should be " + toString(dT)))
2737+ else if ((fn != ee))
2738+ then throw(("Payment attached should be " + toString(ee)))
26172739 else {
2618- let eV = iu(gw.caller, gw.transactionId)
2619- let lE = do(invoke(cV, "burnAcres", [dT], [AttachedPayment(dd, fc)]))
2620- $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2740+ let fg = iF(gH.caller, gH.transactionId)
2741+ let lY = dy(invoke(df, "burnAcres", [ee], [AttachedPayment(dn, fn)]))
2742+ $Tuple2(((fg._1 ++ kc(toString(gH.caller), Z)._1) :+ lc), $Tuple2(fg._2._1, lY))
26212743 }
26222744 }
26232745 }
26242746
26252747
26262748
2627-@Callable(gw)
2749+@Callable(gH)
26282750 func upgradeInfra (P) = {
2629- let kK = kH(gw)
2630- if ((size(gw.payments) != 0))
2751+ let lc = kZ(gH)
2752+ if ((size(gH.payments) != 0))
26312753 then throw("No payments required")
26322754 else {
2633- let eV = jw(true, gw.caller, 0, P)
2634- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2635- $Tuple2(((eV._1 :+ kK) ++ jL(A, fraction(aa, eV._3, ct))._1), eV._2)
2636- }
2637- }
2638-
2639-
2640-
2641-@Callable(gw)
2642-func activateArtifact (lH,lI) = {
2643- let kK = kH(gw)
2644- if ((size(gw.payments) != 0))
2755+ let fg = jH(true, gH.caller, 0, P)
2756+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
2757+ $Tuple2(((fg._1 :+ lc) ++ jW(A, fraction(aa, fg._3, cD))._1), fg._2)
2758+ }
2759+ }
2760+
2761+
2762+
2763+@Callable(gH)
2764+func activateArtifact (mb,mc) = {
2765+ let lc = kZ(gH)
2766+ if ((size(gH.payments) != 0))
26452767 then throw("No payments required")
26462768 else {
2647- let c = toString(gw.caller)
2648- let eV = {
2649- let cn = lH
2650- if (("PRESALE" == cn))
2651- then jZ(c, lI)
2652- else if (("ONBOARD" == cn))
2653- then jS(c)
2769+ let c = toString(gH.caller)
2770+ let fg = {
2771+ let cx = mb
2772+ if (("PRESALE" == cx))
2773+ then kk(c, mc)
2774+ else if (("ONBOARD" == cx))
2775+ then kd(c)
26542776 else throw("Unknown artifact")
26552777 }
2656- (eV :+ kK)
2657- }
2658- }
2659-
2660-
2661-
2662-@Callable(gw)
2663-func mergeLands (ki) = {
2664- let kK = kH(gw)
2665- if ((size(gw.payments) != 0))
2778+ (fg :+ lc)
2779+ }
2780+ }
2781+
2782+
2783+
2784+@Callable(gH)
2785+func mergeLands (kA) = {
2786+ let lc = kZ(gH)
2787+ if ((size(gH.payments) != 0))
26662788 then throw("No payments required")
26672789 else {
2668- let eV = kG(toString(gw.caller), ki)
2669- $Tuple2(((eV._1 :+ kK) ++ jR(toString(gw.caller), ab)._1), eV._2)
2670- }
2671- }
2672-
2673-
2674-
2675-@Callable(gw)
2676-func cargoExchange (lJ,P) = {
2677- let kK = kH(gw)
2678- if ((size(gw.payments) != 0))
2790+ let fg = kY(toString(gH.caller), kA)
2791+ $Tuple2(((fg._1 :+ lc) ++ kc(toString(gH.caller), ab)._1), fg._2)
2792+ }
2793+ }
2794+
2795+
2796+
2797+@Callable(gH)
2798+func cargoExchange (md,P) = {
2799+ let lc = kZ(gH)
2800+ if ((size(gH.payments) != 0))
26792801 then throw("No payments required")
26802802 else {
2681- let hZ = split_4C(lJ, ":")
2682- let c = toString(gw.originCaller)
2683- let je = value(assetInfo(fromBase58String(P)))
2684- let jf = bq(P)
2685- if (!(isDefined(getInteger(jf))))
2686- then throw((je.name + " is not staked"))
2803+ let ik = split_4C(md, ":")
2804+ let c = toString(gH.originCaller)
2805+ let jp = value(assetInfo(fromBase58String(P)))
2806+ let jq = br(P)
2807+ if (!(isDefined(getInteger(jq))))
2808+ then throw((jp.name + " is not staked"))
26872809 else {
2688- let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
2689- if ((jh != c))
2810+ let js = valueOrErrorMessage(getString(bo(P)), (("NFT " + jp.name) + " is orphaned"))
2811+ if ((js != c))
26902812 then throw((aC + " is not yours"))
26912813 else {
2692- let hL = (dr(split(je.description, "_")[cX]) / cu)
2693- let hM = valueOrElse(getInteger(bx(P)), 0)
2694- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2695- let jc = valueOrElse(getString(bI(A)), aJ)
2696- let ce = split(value(jc), "_")
2697- if ((ce[bl] != "L"))
2698- then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
2699- else if ((ce[bm] != P))
2814+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
2815+ let hX = valueOrElse(getInteger(by(P)), 0)
2816+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
2817+ let jn = valueOrElse(getString(bJ(A)), aJ)
2818+ let cf = split(value(jn), "_")
2819+ if ((cf[bm] != "L"))
2820+ then throw((("Duck location type is " + cf[bm]) + ", but should be L"))
2821+ else if ((cf[bn] != P))
27002822 then throw(("Duck should be on the land " + P))
27012823 else {
2702- let hK = bw(P)
2703- let hB = hJ(hK, hL, hM)
2704- let hx = bH(A)
2705- let ia = hw(hx)
2706- let eV = hY(hZ, hB, ia)
2707- let hS = split(hB[bb], "_")
2708- let jt = (parseIntValue(hS[bd]) + eV._7)
2709- let ju = (parseIntValue(hS[be]) - eV._7)
2710-[StringEntry(hx, makeString_2C([ia[bg], eV._4, eV._5, eV._6], ":")), StringEntry(hK, makeString_2C([hB[aX], eV._1, eV._2, eV._3, makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")], ":")), kK]
2824+ let hV = bx(P)
2825+ let hM = hU(hV, hW, hX)
2826+ let hI = bI(A)
2827+ let il = hH(hI)
2828+ let fg = ij(ik, hM, il)
2829+ let id = split(hM[bc], "_")
2830+ let jE = (parseIntValue(id[be]) + fg._7)
2831+ let jF = (parseIntValue(id[bf]) - fg._7)
2832+[StringEntry(hI, makeString_2C([il[bh], fg._4, fg._5, fg._6], ":")), StringEntry(hV, makeString_2C([hM[aY], fg._1, fg._2, fg._3, makeString([id[bd], toString(jE), toString(jF), id[bg]], "_")], ":")), lc]
27112833 }
27122834 }
27132835 }
27162838
27172839
27182840
2719-@Callable(gw)
2720-func saveWarehouse (hO,P) = if ((gw.caller != cR))
2841+@Callable(gH)
2842+func saveWarehouse (hZ,P) = if ((gH.caller != db))
27212843 then throw("Access denied")
27222844 else {
2723- let hK = bw(P)
2724- let hP = split_4C(hO, ":")
2725- if ((size(hP) != 5))
2845+ let hV = bx(P)
2846+ let ia = split_4C(hZ, ":")
2847+ if ((size(ia) != 5))
27262848 then throw("warehouse string should contain 4 ':' separators")
27272849 else {
2728- let lK = split(hP[bb], "_")[bc]
2729- let jt = hA(hP)
2730- let lL = hy(hP[aX])
2731- let ju = ((lL - parseIntValue(lK)) - jt)
2732- let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([lK, toString(jt), toString(ju), toString(lL)], "_")], ":")
2733- $Tuple2([StringEntry(hK, lM)], lM)
2850+ let me = split(ia[bc], "_")[bd]
2851+ let jE = hL(ia)
2852+ let mf = hJ(ia[aY])
2853+ let jF = ((mf - parseIntValue(me)) - jE)
2854+ let mg = makeString_2C([ia[aY], ia[aZ], ia[ba], ia[bb], makeString([me, toString(jE), toString(jF), toString(mf)], "_")], ":")
2855+ $Tuple2([StringEntry(hV, mg)], mg)
27342856 }
27352857 }
27362858
27372859
27382860
2739-@Callable(gw)
2740-func fixWarehouseFormat (P) = if ((gw.caller != cQ))
2861+@Callable(gH)
2862+func fixWarehouseFormat (P) = if ((gH.caller != da))
27412863 then throw("Access denied")
27422864 else {
2743- let hK = bw(P)
2744- let je = value(assetInfo(fromBase58String(P)))
2745- let hL = (dr(split(je.description, "_")[cX]) / cu)
2746- let hM = valueOrElse(getInteger(bx(P)), 0)
2747- let hP = hJ(hK, hL, hM)
2748- let lK = do(invoke(cR, "recalcLockedVolumeREADONLY", [P, hP], nil))
2749- let jt = hA(hP)
2750- let lL = hy(hP[aX])
2751- let ju = ((lL - lK) - jt)
2752- let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([toString(lK), toString(jt), toString(ju), toString(lL)], "_")], ":")
2753- $Tuple2([StringEntry(hK, lM)], lM)
2865+ let hV = bx(P)
2866+ let jp = value(assetInfo(fromBase58String(P)))
2867+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
2868+ let hX = valueOrElse(getInteger(by(P)), 0)
2869+ let ia = hU(hV, hW, hX)
2870+ let me = dy(invoke(db, "recalcLockedVolumeREADONLY", [P, ia], nil))
2871+ let jE = hL(ia)
2872+ let mf = hJ(ia[aY])
2873+ let jF = ((mf - me) - jE)
2874+ let mg = makeString_2C([ia[aY], ia[aZ], ia[ba], ia[bb], makeString([toString(me), toString(jE), toString(jF), toString(mf)], "_")], ":")
2875+ $Tuple2([StringEntry(hV, mg)], mg)
27542876 }
27552877
27562878
27572879
2758-@Callable(gw)
2759-func fixContinentProportions (ki) = if ((gw.caller != cQ))
2880+@Callable(gH)
2881+func fixContinentProportions (kA) = if ((gH.caller != da))
27602882 then throw("Access denied")
27612883 else {
2762- func lN (eD,lO) = (eD :+ valueOrElse(getString(dh(lO)), "0_0_0_0_0_0"))
2763-
2764- let gg = {
2765- let eF = aO
2766- let eG = size(eF)
2767- let eH = nil
2768- func eI (eJ,eK) = if ((eK >= eG))
2769- then eJ
2770- else lN(eJ, eF[eK])
2771-
2772- func eL (eJ,eK) = if ((eK >= eG))
2773- then eJ
2884+ func mh (eO,mi) = (eO :+ valueOrElse(getString(dr(mi)), "0_0_0_0_0_0"))
2885+
2886+ let gr = {
2887+ let eQ = aP
2888+ let eR = size(eQ)
2889+ let eS = nil
2890+ func eT (eU,eV) = if ((eV >= eR))
2891+ then eU
2892+ else mh(eU, eQ[eV])
2893+
2894+ func eW (eU,eV) = if ((eV >= eR))
2895+ then eU
27742896 else throw("List size exceeds 5")
27752897
2776- eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2777- }
2778- func lP (eD,P) = {
2779- let je = value(assetInfo(fromBase58String(P)))
2780- let ji = split(je.description, "_")
2781- let hL = (dr(ji[cX]) / cu)
2782- let lO = ji[cZ]
2783- let gs = gy(ji[cY])
2784- let ha = value(indexOf(aO, lO))
2785- let kx = split(eD[ha], "_")
2786- let lQ = makeString(gq(kx, gs, hL, 1), "_")
2787- let cn = lO
2788- if (("Americas" == cn))
2789- then [lQ, eD[1], eD[2], eD[3], eD[4]]
2790- else if (("Europe" == cn))
2791- then [eD[0], lQ, eD[2], eD[3], eD[4]]
2792- else if (("Asia" == cn))
2793- then [eD[0], eD[1], lQ, eD[3], eD[4]]
2794- else if (("Africa" == cn))
2795- then [eD[0], eD[1], eD[2], lQ, eD[4]]
2796- else if (("Oceania" == cn))
2797- then [eD[0], eD[1], eD[2], eD[3], lQ]
2898+ eW(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5)
2899+ }
2900+ func mj (eO,P) = {
2901+ let jp = value(assetInfo(fromBase58String(P)))
2902+ let jt = split(jp.description, "_")
2903+ let hW = (dE(jt[dh]) / cE)
2904+ let mi = jt[dj]
2905+ let gD = gJ(jt[di])
2906+ let hl = value(indexOf(aP, mi))
2907+ let kP = split(eO[hl], "_")
2908+ let mk = makeString(gB(kP, gD, hW, 1), "_")
2909+ let cx = mi
2910+ if (("Americas" == cx))
2911+ then [mk, eO[1], eO[2], eO[3], eO[4]]
2912+ else if (("Europe" == cx))
2913+ then [eO[0], mk, eO[2], eO[3], eO[4]]
2914+ else if (("Asia" == cx))
2915+ then [eO[0], eO[1], mk, eO[3], eO[4]]
2916+ else if (("Africa" == cx))
2917+ then [eO[0], eO[1], eO[2], mk, eO[4]]
2918+ else if (("Oceania" == cx))
2919+ then [eO[0], eO[1], eO[2], eO[3], mk]
27982920 else throw("wrong continent")
27992921 }
28002922
2801- let eO = {
2802- let eF = ki
2803- let eG = size(eF)
2804- let eH = gg
2805- func hr (eJ,eK) = if ((eK >= eG))
2806- then eJ
2807- else lP(eJ, eF[eK])
2808-
2809- func hs (eJ,eK) = if ((eK >= eG))
2810- then eJ
2923+ let eZ = {
2924+ let eQ = kA
2925+ let eR = size(eQ)
2926+ let eS = gr
2927+ func hC (eU,eV) = if ((eV >= eR))
2928+ then eU
2929+ else mj(eU, eQ[eV])
2930+
2931+ func hD (eU,eV) = if ((eV >= eR))
2932+ then eU
28112933 else throw("List size exceeds 100")
28122934
2813- hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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)
2814- }
2815- $Tuple2([StringEntry(dh("Americas"), eO[0]), StringEntry(dh("Europe"), eO[1]), StringEntry(dh("Asia"), eO[2]), StringEntry(dh("Africa"), eO[3]), StringEntry(dh("Oceania"), eO[4])], 0)
2935+ hD(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(eS, 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)
2936+ }
2937+ $Tuple2([StringEntry(dr("Americas"), eZ[0]), StringEntry(dr("Europe"), eZ[1]), StringEntry(dr("Asia"), eZ[2]), StringEntry(dr("Africa"), eZ[3]), StringEntry(dr("Oceania"), eZ[4])], 0)
28162938 }
28172939
28182940
28192941
2820-@Callable(gw)
2821-func fixStakedPieces (cB) = if ((gw.caller != cQ))
2942+@Callable(gH)
2943+func fixStakedPieces (cL) = if ((gH.caller != da))
28222944 then throw("Access denied")
28232945 else {
2824- let kB = if ((cB == ""))
2946+ let kT = if ((cL == ""))
28252947 then 0
28262948 else {
2827- let ku = getString(an, dj(cB))
2828- let kq = if (isDefined(ku))
2829- then split_51C(value(ku), "_")
2949+ let kM = getString(an, dt(cL))
2950+ let kI = if (isDefined(kM))
2951+ then split_51C(value(kM), "_")
28302952 else nil
2831- func lR (eD,P) = {
2832- let je = value(assetInfo(fromBase58String(P)))
2833- let ds = split(je.description, "_")[cX]
2834- (eD + dr(ds))
2953+ func ml (eO,P) = {
2954+ let jp = value(assetInfo(fromBase58String(P)))
2955+ let dF = split(jp.description, "_")[dh]
2956+ (eO + dE(dF))
28352957 }
28362958
2837- let eF = kq
2838- let eG = size(eF)
2839- let eH = 0
2840- func eI (eJ,eK) = if ((eK >= eG))
2841- then eJ
2842- else lR(eJ, eF[eK])
2843-
2844- func eL (eJ,eK) = if ((eK >= eG))
2845- then eJ
2959+ let eQ = kI
2960+ let eR = size(eQ)
2961+ let eS = 0
2962+ func eT (eU,eV) = if ((eV >= eR))
2963+ then eU
2964+ else ml(eU, eQ[eV])
2965+
2966+ func eW (eU,eV) = if ((eV >= eR))
2967+ then eU
28462968 else throw("List size exceeds 100")
28472969
2848- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
2970+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
28492971 }
2850- $Tuple2([IntegerEntry(dk(cB), kB)], kB)
2972+ $Tuple2([IntegerEntry(du(cL), kT)], kT)
28512973 }
28522974
28532975
28542976
2855-@Callable(gw)
2856-func setCustomName (bo,ks,bs) = {
2857- let kK = kH(gw)
2858- if ((size(gw.payments) != 1))
2977+@Callable(gH)
2978+func setCustomName (bp,kK,bt) = {
2979+ let lc = kZ(gH)
2980+ if ((size(gH.payments) != 1))
28592981 then throw("Exactly one payment required")
28602982 else {
2861- let kL = value(gw.payments[0])
2862- if ((kL.assetId != cm))
2983+ let ld = value(gH.payments[0])
2984+ if ((ld.assetId != cw))
28632985 then throw("Allowed USDT payment only!")
2864- else if ((kL.amount != dO))
2865- then throw(("Payment should be " + toString(dO)))
2866- else if (contains(ks, "__"))
2867- then throw(("Name should not contain '__': " + ks))
2868- else if ((size(ks) > dP))
2869- then throw(("Name too long, maxLength=" + toString(dP)))
2986+ else if ((ld.amount != dZ))
2987+ then throw(("Payment should be " + toString(dZ)))
2988+ else if (contains(kK, "__"))
2989+ then throw(("Name should not contain '__': " + kK))
2990+ else if ((size(kK) > ea))
2991+ then throw(("Name too long, maxLength=" + toString(ea)))
28702992 else {
2871- let c = toString(gw.originCaller)
2872- let lS = {
2873- let cn = bs
2874- if (("ACCOUNT" == cn))
2993+ let c = toString(gH.originCaller)
2994+ let mm = {
2995+ let cx = bt
2996+ if (("ACCOUNT" == cx))
28752997 then {
2876- let lT = ej(ks)
2877- let lU = getString(lT)
2878- if (isDefined(lU))
2879- then throw(("Name already registered: " + ks))
2998+ let mn = eu(kK)
2999+ let mo = getString(mn)
3000+ if (isDefined(mo))
3001+ then throw(("Name already registered: " + kK))
28803002 else {
2881- let lV = bA(c)
2882- let lW = getString(lV)
2883- let lX = if (isDefined(lW))
2884- then [DeleteEntry(ej(value(lW)))]
3003+ let mp = bB(c)
3004+ let mq = getString(mp)
3005+ let mr = if (isDefined(mq))
3006+ then [DeleteEntry(eu(value(mq)))]
28853007 else nil
2886- (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jR(c, Y)._1)
3008+ (((mr :+ StringEntry(mp, kK)) :+ StringEntry(mn, c)) ++ kc(c, Y)._1)
28873009 }
28883010 }
2889- else if (("LAND" == cn))
3011+ else if (("LAND" == cx))
28903012 then {
2891- let je = value(assetInfo(fromBase58String(bo)))
2892- let jf = bq(bo)
2893- if (!(isDefined(getInteger(jf))))
2894- then throw((je.name + " is not staked"))
3013+ let jp = value(assetInfo(fromBase58String(bp)))
3014+ let jq = br(bp)
3015+ if (!(isDefined(getInteger(jq))))
3016+ then throw((jp.name + " is not staked"))
28953017 else {
2896- let jh = valueOrErrorMessage(getString(bn(bo)), (("NFT " + je.name) + " is orphaned"))
2897- if ((jh != c))
3018+ let js = valueOrErrorMessage(getString(bo(bp)), (("NFT " + jp.name) + " is orphaned"))
3019+ if ((js != c))
28983020 then throw((aC + " is not yours"))
28993021 else {
2900- let lT = ec(ks)
2901- let lU = getString(lT)
2902- if (isDefined(lU))
2903- then throw(("Name already registered: " + ks))
3022+ let mn = en(kK)
3023+ let mo = getString(mn)
3024+ if (isDefined(mo))
3025+ then throw(("Name already registered: " + kK))
29043026 else {
2905- let lY = bp(bo)
2906- let lW = getString(lY)
2907- let lX = if (isDefined(lW))
2908- then [DeleteEntry(ec(value(lW)))]
3027+ let ms = bq(bp)
3028+ let mq = getString(ms)
3029+ let mr = if (isDefined(mq))
3030+ then [DeleteEntry(en(value(mq)))]
29093031 else nil
2910- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jR(c, Y)._1)
3032+ (((mr :+ StringEntry(ms, kK)) :+ StringEntry(mn, bp)) ++ kc(c, Y)._1)
29113033 }
29123034 }
29133035 }
29143036 }
2915- else if (("DUCK" == cn))
3037+ else if (("DUCK" == cx))
29163038 then {
2917- let je = value(assetInfo(fromBase58String(bo)))
2918- let jf = bq(bo)
2919- if (if (!(isDefined(getInteger(jf))))
3039+ let jp = value(assetInfo(fromBase58String(bp)))
3040+ let jq = br(bp)
3041+ if (if (!(isDefined(getInteger(jq))))
29203042 then true
2921- else !(isDefined(getString(bG(c)))))
2922- then throw((je.name + " is not staked"))
3043+ else !(isDefined(getString(bH(c)))))
3044+ then throw((jp.name + " is not staked"))
29233045 else {
2924- let jh = valueOrErrorMessage(getString(bF(bo)), (("NFT " + je.name) + " is orphaned"))
2925- if ((jh != c))
3046+ let js = valueOrErrorMessage(getString(bG(bp)), (("NFT " + jp.name) + " is orphaned"))
3047+ if ((js != c))
29263048 then throw((aD + " is not yours"))
29273049 else {
2928- let lT = ei(ks)
2929- let lU = getString(lT)
2930- if (isDefined(lU))
2931- then throw(("Name already registered: " + ks))
3050+ let mn = et(kK)
3051+ let mo = getString(mn)
3052+ if (isDefined(mo))
3053+ then throw(("Name already registered: " + kK))
29323054 else {
2933- let lY = bz(bo)
2934- let lW = getString(lY)
2935- let lX = if (isDefined(lW))
2936- then [DeleteEntry(ei(value(lW)))]
3055+ let ms = bA(bp)
3056+ let mq = getString(ms)
3057+ let mr = if (isDefined(mq))
3058+ then [DeleteEntry(et(value(mq)))]
29373059 else nil
2938- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jL(bo, Y)._1)
3060+ (((mr :+ StringEntry(ms, kK)) :+ StringEntry(mn, bp)) ++ jW(bp, Y)._1)
29393061 }
29403062 }
29413063 }
29423064 }
29433065 else throw("Unknown entity type")
29443066 }
2945- $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cm)) :+ kK), 0)
3067+ $Tuple2(((mm :+ ScriptTransfer(db, ld.amount, cw)) :+ lc), 0)
29463068 }
29473069 }
29483070 }
29493071
29503072
29513073
2952-@Callable(gw)
2953-func setReferrals (lZ,ma) = if ((gw.callerPublicKey != dK))
3074+@Callable(gH)
3075+func setReferrals (mt,mu) = if ((gH.callerPublicKey != dW))
29543076 then throw("Permission denied")
29553077 else {
2956- let kK = kH(gw)
2957- if ((size(gw.payments) != 0))
3078+ let lc = kZ(gH)
3079+ if ((size(gH.payments) != 0))
29583080 then throw("No payments required")
2959- else if (!(isDefined(addressFromString(lZ))))
2960- then throw(("Invalid address: " + lZ))
2961- else if (!(isDefined(addressFromString(ma))))
2962- then throw(("Invalid address: " + ma))
3081+ else if (!(isDefined(addressFromString(mt))))
3082+ then throw(("Invalid address: " + mt))
3083+ else if (!(isDefined(addressFromString(mu))))
3084+ then throw(("Invalid address: " + mu))
29633085 else {
2964- let mb = ek()
2965- let mc = getString(mb)
2966- let md = if (isDefined(mc))
2967- then split_4C(value(mc), "_")
3086+ let mv = ev()
3087+ let mw = getString(mv)
3088+ let mx = if (isDefined(mw))
3089+ then split_4C(value(mw), "_")
29683090 else nil
2969- if (containsElement(md, ma))
2970- then throw((ma + " is not newbie (already has referrals)"))
3091+ if (containsElement(mx, mu))
3092+ then throw((mu + " is not newbie (already has referrals)"))
29713093 else {
2972- let jT = bB(ma)
2973- let jU = getString(jT)
2974- if (if (isDefined(jU))
2975- then isDefined(addressFromString(value(jU)))
3094+ let ke = bC(mu)
3095+ let kf = getString(ke)
3096+ if (if (isDefined(kf))
3097+ then isDefined(addressFromString(value(kf)))
29763098 else false)
2977- then throw(((ma + " already has refBy: ") + value(jU)))
3099+ then throw(((mu + " already has refBy: ") + value(kf)))
29783100 else {
2979- let me = bE(lZ)
2980- let mf = getString(me)
2981- let mg = if (isDefined(mf))
2982- then split_4C(value(mf), "_")
3101+ let my = bF(mt)
3102+ let mz = getString(my)
3103+ let mA = if (isDefined(mz))
3104+ then split_4C(value(mz), "_")
29833105 else nil
2984- if (containsElement(mg, ma))
2985- then throw((((lZ + " already contains ") + ma) + " within referrals"))
3106+ if (containsElement(mA, mu))
3107+ then throw((((mt + " already contains ") + mu) + " within referrals"))
29863108 else {
2987- let mh = makeString_2C((mg :+ ma), "_")
2988- let mi = if (containsElement(md, lZ))
2989- then value(mc)
2990- else makeString_2C((md :+ lZ), "_")
2991- $Tuple2([StringEntry(jT, lZ), StringEntry(me, mh), StringEntry(mb, mi), kK], 0)
3109+ let mB = makeString_2C((mA :+ mu), "_")
3110+ let mC = if (containsElement(mx, mt))
3111+ then value(mw)
3112+ else makeString_2C((mx :+ mt), "_")
3113+ $Tuple2([StringEntry(ke, mt), StringEntry(my, mB), StringEntry(mv, mC), lc], 0)
29923114 }
29933115 }
29943116 }
29973119
29983120
29993121
3000-@Callable(gw)
3001-func distributePoints (mj,mk,ml,mm,mn) = {
3002- let kK = kH(gw)
3003- if ((size(gw.payments) != 0))
3122+@Callable(gH)
3123+func distributePoints (mD,mE,mF,mG,mH) = {
3124+ let lc = kZ(gH)
3125+ if ((size(gH.payments) != 0))
30043126 then throw("No payments required")
30053127 else {
3006- let c = toString(gw.originCaller)
3007- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3008- let mo = I(c)
3009- let mp = valueOrElse(getInteger(an, mo), 0)
3010- let mq = E(A)
3011- let mr = valueOrElse(getInteger(an, mq), 0)
3012- let ms = (mp + mr)
3013- let mt = ((((mj + mk) + ml) + mm) + mn)
3014- if ((mt > ms))
3015- then throw((("There are only " + toString(ms)) + " free points to distribute"))
3128+ let c = toString(gH.originCaller)
3129+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
3130+ let mI = I(c)
3131+ let mJ = valueOrElse(getInteger(an, mI), 0)
3132+ let mK = E(A)
3133+ let mL = valueOrElse(getInteger(an, mK), 0)
3134+ let mM = (mJ + mL)
3135+ let mN = ((((mD + mE) + mF) + mG) + mH)
3136+ if ((mN > mM))
3137+ then throw((("There are only " + toString(mM)) + " free points to distribute"))
30163138 else {
3017- let mu = B(A)
3018- let aq = split(valueOrElse(getString(an, mu), "0_0_0_0_0"), "_")
3019- let mv = (mp - mt)
3020- $Tuple2([IntegerEntry(mo, if ((0 > mv))
3139+ let mO = B(A)
3140+ let aq = split(valueOrElse(getString(an, mO), "0_0_0_0_0"), "_")
3141+ let mP = (mJ - mN)
3142+ $Tuple2([IntegerEntry(mI, if ((0 > mP))
30213143 then 0
3022- else mv), IntegerEntry(mq, if ((0 > mv))
3023- then (mr + mv)
3024- else mr), StringEntry(mu, makeString([toString((parseIntValue(aq[k]) + mj)), toString((parseIntValue(aq[l]) + mk)), toString((parseIntValue(aq[m]) + ml)), toString((parseIntValue(aq[n]) + mm)), toString((parseIntValue(aq[o]) + mn))], "_")), kK], 0)
3144+ else mP), IntegerEntry(mK, if ((0 > mP))
3145+ then (mL + mP)
3146+ else mL), StringEntry(mO, makeString([toString((parseIntValue(aq[k]) + mD)), toString((parseIntValue(aq[l]) + mE)), toString((parseIntValue(aq[m]) + mF)), toString((parseIntValue(aq[n]) + mG)), toString((parseIntValue(aq[o]) + mH))], "_")), lc], 0)
30253147 }
30263148 }
30273149 }
30283150
30293151
30303152
3031-@Callable(gw)
3032-func splitByGlobalWeightsREADONLY (eu) = $Tuple2(nil, eM(eu))
3033-
3034-
3035-
3036-@Callable(gw)
3037-func splitByGlobalAndLocalWeightsREADONLY (mw,mx,gz) = {
3038- let gs = gy(gz)
3039- $Tuple2(nil, $Tuple2(eM(mw), ex(mx, gs)))
3040- }
3041-
3042-
3043-
3044-@Callable(gw)
3045-func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hw(bH(A)), ":"))
3046-
3047-
3048-
3049-@Callable(gw)
3153+@Callable(gH)
3154+func splitByGlobalWeightsREADONLY (eF) = $Tuple2(nil, eX(eF))
3155+
3156+
3157+
3158+@Callable(gH)
3159+func splitByGlobalAndLocalWeightsREADONLY (mQ,mR,gK) = {
3160+ let gD = gJ(gK)
3161+ $Tuple2(nil, $Tuple2(eX(mQ), eI(mR, gD)))
3162+ }
3163+
3164+
3165+
3166+@Callable(gH)
3167+func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hH(bI(A)), ":"))
3168+
3169+
3170+
3171+@Callable(gH)
30503172 func getWarehouseREADONLY (P) = {
3051- let je = value(assetInfo(fromBase58String(P)))
3052- let hL = (dr(split(je.description, "_")[cX]) / cu)
3053- let hM = valueOrElse(getInteger(bx(P)), 0)
3054- $Tuple2(nil, makeString_2C(hJ(bw(P), hL, hM), ":"))
3055- }
3056-
3057-
3058-
3059-@Callable(gw)
3173+ let jp = value(assetInfo(fromBase58String(P)))
3174+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
3175+ let hX = valueOrElse(getInteger(by(P)), 0)
3176+ $Tuple2(nil, makeString_2C(hU(bx(P), hW, hX), ":"))
3177+ }
3178+
3179+
3180+
3181+@Callable(gH)
30603182 func saveLastTx () = {
3061- let iv = gw.caller
3062- if (!(containsElement([cT, cR, cU, cV], iv)))
3183+ let iG = gH.caller
3184+ if (!(containsElement([dd, db, de, df], iG)))
30633185 then throw("Access denied")
3064- else $Tuple2([kH(gw)], 42)
3065- }
3066-
3067-
3068-
3069-@Callable(gw)
3070-func updateDuckStats (A,jM) = if ((gw.caller != cR))
3186+ else $Tuple2([kZ(gH)], 42)
3187+ }
3188+
3189+
3190+
3191+@Callable(gH)
3192+func updateDuckStats (A,jX) = if ((gH.caller != db))
30713193 then throw("Access denied")
3072- else jL(A, jM)
3073-
3074-
3075-
3076-@Callable(gw)
3077-func updateAccStats (c,jM) = if (if ((gw.caller != cR))
3078- then (gw.caller != cV)
3194+ else jW(A, jX)
3195+
3196+
3197+
3198+@Callable(gH)
3199+func updateAccStats (c,jX) = if (if ((gH.caller != db))
3200+ then (gH.caller != df)
30793201 else false)
30803202 then throw("Access denied")
3081- else jR(c, jM)
3082-
3083-
3084-
3085-@Callable(gw)
3086-func equipDuck (my) = {
3087- let kK = kH(gw)
3088- if ((size(gw.payments) != 0))
3203+ else kc(c, jX)
3204+
3205+
3206+
3207+@Callable(gH)
3208+func equipDuck (mS) = {
3209+ let lc = kZ(gH)
3210+ if ((size(gH.payments) != 0))
30893211 then throw("No payments required")
30903212 else {
3091- let c = toString(gw.originCaller)
3092- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3093- if (kb(A))
3213+ let c = toString(gH.originCaller)
3214+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
3215+ if (km(A))
30943216 then throw("equipDuck_checkTournament")
3095- else if (kc(A))
3217+ else if (kn(A))
30963218 then throw("equipDuck_checkDelivery")
30973219 else {
3098- let gj = F(A)
3099- let mz = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3100- let hx = bH(A)
3101- let ia = hw(hx)
3102- let ld = split(my, "_")
3103- if ((size(ld) != q))
3220+ let gu = F(A)
3221+ let mT = split(valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3222+ let hI = bI(A)
3223+ let il = hH(hI)
3224+ let lu = split(mS, "_")
3225+ if ((size(lu) != q))
31043226 then throw("Wrong equipment string")
31053227 else {
3106- let gl = fY(mz, fj(ia[bj]), true, nil)
3107- let gm = split(ld[p], ";")[1]
3108- let ao = if ((gm == ""))
3228+ let gw = gj(mT, fu(il[bk]), true, nil)
3229+ let gx = split(lu[p], ";")[1]
3230+ let ao = if ((gx == ""))
31093231 then 0
31103232 else {
3111- let gn = split(gm, ",")[0]
3112- if ((gn == ""))
3233+ let gy = split(gx, ",")[0]
3234+ if ((gy == ""))
31133235 then 0
31143236 else {
3115- let fy = split(gn, ":")
3116- let cP = fy[0]
3117- let go = fy[1]
3118- if (if (if (if (if ((cP == "06"))
3237+ let fJ = split(gy, ":")
3238+ let cZ = fJ[0]
3239+ let gz = fJ[1]
3240+ if (if (if (if (if ((cZ == "06"))
31193241 then true
3120- else (cP == "07"))
3242+ else (cZ == "07"))
31213243 then true
3122- else (cP == "08"))
3123- then (go != "")
3244+ else (cZ == "08"))
3245+ then (gz != "")
31243246 else false)
3125- then (parseIntValue(go) > 0)
3247+ then (parseIntValue(gz) > 0)
31263248 else false)
3127- then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
3249+ then parseIntValue(split(aS[parseIntValue(cZ)], "_")[aU])
31283250 else 0
31293251 }
31303252 }
3131- let fT = am(this, A, ao, true)
3132- let gp = fY(ld, gl, false, fT)
3133- let mA = fo(gp)
3134- $Tuple2([StringEntry(gj, my), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], mA], ":")), StringEntry(L(A), makeString([toString(fT[7]), toString(fT[8]), toString(fT[9]), toString(fT[10]), toString(fT[11])], "_")), kK], 0)
3253+ let ge = am(this, A, ao, true)
3254+ let gA = gj(lu, gw, false, ge)
3255+ let mU = fz(gA)
3256+ $Tuple2([StringEntry(gu, mS), StringEntry(hI, makeString_2C([il[bh], il[bi], il[bj], mU], ":")), StringEntry(L(A), makeString([toString(ge[7]), toString(ge[8]), toString(ge[9]), toString(ge[10]), toString(ge[11])], "_")), lc], 0)
31353257 }
31363258 }
31373259 }
31393261
31403262
31413263
3142-@Callable(gw)
3143-func fortificateLand (P,mB) = {
3144- let kK = kH(gw)
3145- if ((size(gw.payments) != 0))
3264+@Callable(gH)
3265+func fortificateLand (P,mV) = {
3266+ let lc = kZ(gH)
3267+ if ((size(gH.payments) != 0))
31463268 then throw("No payments required")
31473269 else {
3148- let c = toString(gw.originCaller)
3149- let A = valueOrElse(getString(bG(c)), "")
3150- let ft = am(this, A, 0, false)
3151- let mC = by(P)
3152- let mD = split(valueOrElse(getString(mC), ":0_15:0_18:0"), "_")
3153- let je = value(assetInfo(fromBase58String(P)))
3154- let hL = (dr(split(je.description, "_")[cX]) / cu)
3155- let hM = valueOrElse(getInteger(bx(P)), 0)
3156- let hK = bw(P)
3157- let hP = hJ(hK, hL, hM)
3158- let mE = split(hP[bb], "_")
3159- let mF = parseIntValue(mE[bd])
3160- let mG = parseIntValue(mE[be])
3161- let mH = split(mB, "_")
3162- let mI = gf(mD, fj(hP[ba]), mF, mG, true, nil)
3163- let gl = mI._1
3164- let mJ = mI._2
3165- let mK = mI._3
3166- let mL = gf(mH, gl, mJ, mK, false, ft)
3167- let gp = mL._1
3168- let mM = mL._2
3169- let mN = mL._3
3170- let mA = fo(gp)
3171- let jK = makeString([mE[bc], toString(mM), toString(mN), mE[bf]], "_")
3172- $Tuple2([StringEntry(mC, mB), StringEntry(hK, makeString_2C([hP[aX], hP[aY], hP[aZ], mA, jK], ":")), kK], 0)
3173- }
3174- }
3175-
3176-
3177-
3178-@Callable(gw)
3179-func initDuckTourAttempt (A) = if ((gw.caller != cU))
3270+ let c = toString(gH.originCaller)
3271+ let A = valueOrElse(getString(bH(c)), "")
3272+ let fE = am(this, A, 0, false)
3273+ let mW = bz(P)
3274+ let mX = split(valueOrElse(getString(mW), ":0_15:0_18:0"), "_")
3275+ let jp = value(assetInfo(fromBase58String(P)))
3276+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
3277+ let hX = valueOrElse(getInteger(by(P)), 0)
3278+ let hV = bx(P)
3279+ let ia = hU(hV, hW, hX)
3280+ let mY = split(ia[bc], "_")
3281+ let mZ = parseIntValue(mY[be])
3282+ let na = parseIntValue(mY[bf])
3283+ let nb = split(mV, "_")
3284+ let nc = gq(mX, fu(ia[bb]), mZ, na, true, nil)
3285+ let gw = nc._1
3286+ let nd = nc._2
3287+ let ne = nc._3
3288+ let nf = gq(nb, gw, nd, ne, false, fE)
3289+ let gA = nf._1
3290+ let ng = nf._2
3291+ let nh = nf._3
3292+ let mU = fz(gA)
3293+ let jV = makeString([mY[bd], toString(ng), toString(nh), mY[bg]], "_")
3294+ $Tuple2([StringEntry(mW, mV), StringEntry(hV, makeString_2C([ia[aY], ia[aZ], ia[ba], mU, jV], ":")), lc], 0)
3295+ }
3296+ }
3297+
3298+
3299+
3300+@Callable(gH)
3301+func initDuckTourAttempt (A) = if ((gH.caller != de))
31803302 then throw("Access denied")
31813303 else {
3182- let kK = kH(gw)
3183- let iN = z(A)
3184- let iO = ag(valueOrElse(getInteger(D(A)), 0))
3185- let kX = valueOrElse(getInteger(iN), iO)
3186- let mO = bI(A)
3187- let jc = valueOrElse(getString(mO), aJ)
3188- let cd = valueOrElse(getInteger(cU, bO), 0)
3189- let mP = (toString(cd) + "_T_0")
3190- $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, mP)], mP)
3304+ let lc = kZ(gH)
3305+ let iY = z(A)
3306+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
3307+ let kq = valueOrElse(getInteger(iY), iZ)
3308+ let ni = bJ(A)
3309+ let jn = valueOrElse(getString(ni), aJ)
3310+ let ce = valueOrElse(getInteger(de, bP), 0)
3311+ let nj = (toString(ce) + "_T_0")
3312+ $Tuple2([lc, IntegerEntry(J(A), kq), IntegerEntry(iY, iZ), StringEntry(K(A), jn), StringEntry(ni, nj)], nj)
31913313 }
31923314
31933315
31943316
3195-@Callable(gw)
3317+@Callable(gH)
31963318 func breakAttempt () = {
3197- let kK = kH(gw)
3198- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
3199- let mO = bI(A)
3200- let jc = valueOrElse(getString(mO), aJ)
3201- if ((split(jc, "_")[bl] != "T"))
3319+ let lc = kZ(gH)
3320+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
3321+ let ni = bJ(A)
3322+ let jn = valueOrElse(getString(ni), aJ)
3323+ if ((split(jn, "_")[bm] != "T"))
32023324 then throw("Your duck is not in the tournament")
32033325 else {
3204- let mQ = getIntegerValue(J(A))
3205- let mR = getStringValue(K(A))
3206- $Tuple2([kK, IntegerEntry(z(A), mQ), StringEntry(mO, mR)], jc)
3207- }
3208- }
3209-
3210-
3211-
3212-@Callable(gw)
3213-func exitTournamentInternal (A) = if ((gw.caller != this))
3326+ let kv = getIntegerValue(J(A))
3327+ let kw = getStringValue(K(A))
3328+ $Tuple2([lc, IntegerEntry(z(A), kv), StringEntry(ni, kw)], jn)
3329+ }
3330+ }
3331+
3332+
3333+
3334+@Callable(gH)
3335+func exitTournamentInternal (A) = if ((gH.caller != this))
32143336 then throw("Access denied")
32153337 else {
3216- let mQ = getIntegerValue(J(A))
3217- let mR = getStringValue(K(A))
3218- $Tuple2([IntegerEntry(z(A), mQ), StringEntry(bI(A), mR)], false)
3338+ let kv = getIntegerValue(J(A))
3339+ let kw = getStringValue(K(A))
3340+ $Tuple2([IntegerEntry(z(A), kv), StringEntry(bJ(A), kw)], false)
32193341 }
32203342
32213343
32223344
3223-@Callable(gw)
3224-func exitDeliveryInternal (A) = if ((gw.caller != this))
3345+@Callable(gH)
3346+func exitDeliveryInternal (A) = if ((gH.caller != this))
32253347 then throw("Access denied")
32263348 else {
3227- let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
3228- let ax = lastBlock.timestamp
3229- let kd = parseIntValue(jc[bk])
3230- let ke = parseIntValue(jc[bm])
3231- let jh = valueOrErrorMessage(getString(bF(A)), "NFT duck is orphaned")
3232- let mS = z(A)
3233- let kX = getIntegerValue(mS)
3234- let mT = if ((ke >= 3))
3235- then {
3236- let mU = invoke(cR, "sendDeliveryReward", [jh], nil)
3237- if ((mU == mU))
3238- then nil
3239- else throw("Strict value is not equal to itself.")
3240- }
3241- else {
3242- let mV = valueOrElse(getInteger(cR, bN), 0)
3243- let mW = invoke(cR, "updateDeliveryLocked", [(mV - aM)], nil)
3244- if ((mW == mW))
3245- then if ((0 >= kX))
3246- then nil
3247- else [IntegerEntry(T(A), (kd + a))]
3248- else throw("Strict value is not equal to itself.")
3249- }
3250- let mQ = getIntegerValue(J(A))
3251- let mR = getStringValue(K(A))
3252- $Tuple2(((mT :+ IntegerEntry(mS, mQ)) :+ StringEntry(bI(A), mR)), false)
3349+ let ma = ko(A)
3350+ $Tuple2((ma._1 ++ ma._2), false)
32533351 }
32543352
32553353
32563354
3257-@Callable(gw)
3258-func prepareRobbery (iC,iD) = {
3259- let kK = kH(gw)
3260- if (!(sigVerify_8Kb(iC, iD, dK)))
3355+@Callable(gH)
3356+func autoExitDelivery (A) = if ((gH.caller != this))
3357+ then throw("Access denied")
3358+ else {
3359+ let ma = ko(A)
3360+ $Tuple2(ma._1, $Tuple2(ma._3, ma._4))
3361+ }
3362+
3363+
3364+
3365+@Callable(gH)
3366+func prepareRobbery (iN,iO) = {
3367+ let lc = kZ(gH)
3368+ if (!(sigVerify_8Kb(iN, iO, dW)))
32613369 then throw("signature does not match")
3262- else if ((size(gw.payments) != 1))
3370+ else if ((size(gH.payments) != 1))
32633371 then throw("exactly 1 payment must be attached")
32643372 else {
3265- let kL = gw.payments[0]
3266- let mX = kL.amount
3267- if (if (!(isDefined(kL.assetId)))
3373+ let ld = gH.payments[0]
3374+ let nk = ld.amount
3375+ if (if (!(isDefined(ld.assetId)))
32683376 then true
3269- else (value(kL.assetId) != db))
3377+ else (value(ld.assetId) != dl))
32703378 then throw("WLGOLD payments only!")
32713379 else {
3272- let fb = split(toUtf8String(iC), "|")
3273- if ((size(fb) != 2))
3380+ let fm = split(toUtf8String(iN), "|")
3381+ if ((size(fm) != 2))
32743382 then throw("Wrong message format")
32753383 else {
3276- let A = fb[0]
3384+ let A = fm[0]
32773385 let ay = au(this, A)._1
3278- if ((ay > mX))
3279- then throw(((("Payment " + toString(mX)) + " < required ") + toString(ay)))
3386+ if ((ay > nk))
3387+ then throw(((("Payment " + toString(nk)) + " < required ") + toString(ay)))
32803388 else {
3281- let mY = split(fb[1], "_")
3389+ let nl = split(fm[1], "_")
32823390 let ax = lastBlock.timestamp
32833391 let az = valueOrElse(getInteger(R(A)), 0)
32843392 let aA = valueOrElse(getString(S(A)), "")
32883396 else false)
32893397 then throw(("You already started robbing, wait till " + toString(aB)))
32903398 else {
3291- func mZ (eD,P) = {
3292- let na = valueOrElse(getInteger(O(P)), 0)
3293- let nb = valueOrElse(getInteger(Q(P)), 0)
3294- if ((na > size(u)))
3399+ func nm (eO,P) = {
3400+ let nn = valueOrElse(getInteger(O(P)), 0)
3401+ let no = valueOrElse(getInteger(Q(P)), 0)
3402+ if ((nn > size(u)))
32953403 then throw("Invalid state")
3296- else if ((ax > nb))
3404+ else if ((ax > no))
32973405 then {
3298- let nc = valueOrElse(getInteger(bq(P)), 0)
3299- if ((0 >= nc))
3300- then eD
3406+ let np = valueOrElse(getInteger(br(P)), 0)
3407+ if ((0 >= np))
3408+ then eO
33013409 else {
3302- let gd = value(assetInfo(fromBase58String(P)))
3303- let ji = split(gd.description, "_")
3304- let iU = dr(ji[cX])
3305- let nd = iT(P, iU)
3306- let gC = (ax - nc)
3307- let jl = fraction(gC, (nd * iU), a)
3308- if ((v > jl))
3309- then eD
3310- else (eD :+ P)
3410+ let go = value(assetInfo(fromBase58String(P)))
3411+ let jt = split(go.description, "_")
3412+ let jf = dE(jt[dh])
3413+ let nq = je(P, jf)
3414+ let gN = (ax - np)
3415+ let jw = fraction(gN, (nq * jf), a)
3416+ if ((v > jw))
3417+ then eO
3418+ else (eO :+ P)
33113419 }
33123420 }
3313- else eD
3421+ else eO
33143422 }
33153423
3316- let ne = {
3317- let eF = mY
3318- let eG = size(eF)
3319- let eH = nil
3320- func eI (eJ,eK) = if ((eK >= eG))
3321- then eJ
3322- else mZ(eJ, eF[eK])
3323-
3324- func eL (eJ,eK) = if ((eK >= eG))
3325- then eJ
3424+ let nr = {
3425+ let eQ = nl
3426+ let eR = size(eQ)
3427+ let eS = nil
3428+ func eT (eU,eV) = if ((eV >= eR))
3429+ then eU
3430+ else nm(eU, eQ[eV])
3431+
3432+ func eW (eU,eV) = if ((eV >= eR))
3433+ then eU
33263434 else throw("List size exceeds 10")
33273435
3328- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3436+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
33293437 }
3330- if ((size(ne) == 0))
3438+ if ((size(nr) == 0))
33313439 then throw("No candidates for robbery")
33323440 else {
3333- let nf = dC(size(ne), height, (iD + gw.transactionId))
3334- let P = ne[nf]
3335- $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), kK], P)
3441+ let ns = dO(size(nr), height, (iO + gH.transactionId))
3442+ let P = nr[ns]
3443+ $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), lc], P)
33363444 }
33373445 }
33383446 }
33433451
33443452
33453453
3346-@Callable(gw)
3347-func robLand (iC,iD) = {
3348- let kK = kH(gw)
3349- if (!(sigVerify_8Kb(iC, iD, dK)))
3454+@Callable(gH)
3455+func robLand (iN,iO) = {
3456+ let lc = kZ(gH)
3457+ if (!(sigVerify_8Kb(iN, iO, dW)))
33503458 then throw("signature does not match")
33513459 else {
3352- let bK = toString(gw.caller)
3353- let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3460+ let bL = toString(gH.caller)
3461+ let A = valueOrErrorMessage(getString(bH(bL)), "You don't have a duck staked")
33543462 let ax = lastBlock.timestamp
3355- $Tuple2([kK, IntegerEntry(M(A), ax)], 0)
3356- }
3357- }
3358-
3359-
3360-
3361-@Callable(gw)
3362-func acceptDelivery () = if (!(ck))
3463+ $Tuple2([lc, IntegerEntry(M(A), ax)], 0)
3464+ }
3465+ }
3466+
3467+
3468+
3469+@Callable(gH)
3470+func acceptDelivery () = if (!(cu))
33633471 then throw("Delivery feature is turned off!")
33643472 else {
3365- let kK = kH(gw)
3366- let bK = toString(gw.caller)
3367- let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3368- let ng = valueOrElse(getInteger(cR, bM), 0)
3369- let mV = valueOrElse(getInteger(cR, bN), 0)
3370- if ((aM > (ng - mV)))
3371- then throw(((("Delivery is not available, fund=" + dw(ng, 6)) + ", locked=") + dw(mV, 6)))
3473+ let lc = kZ(gH)
3474+ let bL = toString(gH.caller)
3475+ let A = valueOrErrorMessage(getString(bH(bL)), "You don't have a duck staked")
3476+ let nt = valueOrElse(getInteger(db, bN), 0)
3477+ let kt = valueOrElse(getInteger(db, bO), 0)
3478+ if ((aM > (nt - kt)))
3479+ then throw(((("Delivery is not available, fund=" + dJ(nt, 6)) + ", locked=") + dJ(kt, 6)))
33723480 else {
33733481 let ax = lastBlock.timestamp
3374- let nh = valueOrElse(getInteger(T(A)), 0)
3375- if ((nh > ax))
3376- then throw(("Delivery is forbidden for your duck until " + toString(nh)))
3377- else if (kb(A))
3482+ let nu = valueOrElse(getInteger(T(A)), 0)
3483+ if ((nu > ax))
3484+ then throw(("Delivery is forbidden for your duck until " + toString(nu)))
3485+ else if (km(A))
33783486 then throw("acceptDelivery_checkTournament")
3379- else if (kc(A))
3487+ else if (kn(A))
33803488 then throw("acceptDelivery_checkDelivery")
33813489 else {
3382- let ni = do(invoke(cR, "updateDeliveryLocked", [(mV + aM)], nil))
3383- let iN = z(A)
3384- let iO = ag(valueOrElse(getInteger(D(A)), 0))
3385- let kX = valueOrElse(getInteger(iN), iO)
3386- let mO = bI(A)
3387- let jc = valueOrElse(getString(mO), aJ)
3388- let nj = (toString(ax) + "_D_0")
3389- $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, nj)], $Tuple2(nj, ni))
3490+ let nv = dy(invoke(db, "updateDeliveryLocked", [(kt + aM)], nil))
3491+ let iY = z(A)
3492+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
3493+ let kq = valueOrElse(getInteger(iY), iZ)
3494+ let ni = bJ(A)
3495+ let jn = valueOrElse(getString(ni), aJ)
3496+ let nw = (toString(ax) + "_D_0")
3497+ $Tuple2([lc, IntegerEntry(J(A), kq), IntegerEntry(iY, iZ), StringEntry(K(A), jn), StringEntry(ni, nw)], $Tuple2(nw, nv))
33903498 }
33913499 }
33923500 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 86400000
55
66 func b (c) = ("lastArbTimeUser_" + c)
77
88
99 let d = 100000000
1010
1111 let e = 3200
1212
1313 let f = 4000
1414
1515 let g = 3
1616
1717 let h = 100000000
1818
1919 let i = 400
2020
2121 let j = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
2222
2323 let k = 0
2424
2525 let l = 1
2626
2727 let m = 2
2828
2929 let n = 3
3030
3131 let o = 4
3232
3333 let p = 0
3434
3535 let q = 6
3636
3737 let r = 2
3838
3939 let s = 2
4040
4141 let t = 30
4242
4343 let u = [0, 600000, 900000, 43200000, 21600000]
4444
4545 let v = 20000000
4646
4747 let w = 1
4848
4949 let x = 0
5050
5151 let y = 1
5252
5353 func z (A) = ("duckHealth_" + A)
5454
5555
5656 func B (A) = ("duckChars_" + A)
5757
5858
5959 func C (A) = ("duckXP_" + A)
6060
6161
6262 func D (A) = ("duckLevel_" + A)
6363
6464
6565 func E (A) = ("duckFreePoints_" + A)
6666
6767
6868 func F (A) = ("duckEquipment_" + A)
6969
7070
7171 func G (c) = ("userXP_" + c)
7272
7373
7474 func H (c) = ("userLevel_" + c)
7575
7676
7777 func I (c) = ("userFreePoints_" + c)
7878
7979
8080 func J (A) = ("savedHealth_" + A)
8181
8282
8383 func K (A) = ("savedLocation_" + A)
8484
8585
8686 func L (A) = ("duckBuffs_" + A)
8787
8888
8989 func M (A) = ("lastRobberyTime_" + A)
9090
9191
9292 func N (A) = ("lastRobberyCost_" + A)
9393
9494
9595 func O (P) = ("landRobberyState_" + P)
9696
9797
9898 func Q (P) = ("landCooldownETA_" + P)
9999
100100
101101 func R (A) = ("duckRobberyState_" + A)
102102
103103
104104 func S (A) = ("lockedLandByDuck_" + A)
105105
106106
107107 func T (A) = ("deliveryDelayByDuck_" + A)
108108
109109
110110 let U = 10000
111111
112112 let V = 10000
113113
114114 let W = 2000
115115
116116 let X = 100000
117117
118118 let Y = 1000000
119119
120120 let Z = 5000000
121121
122122 let aa = 10000
123123
124124 let ab = 1000000
125125
126126 let ac = 1000000
127127
128128 let ad = 10000
129129
130130 func ae (af) = fraction(e, pow(af, 4, f, 4, 4, DOWN), d)
131131
132132
133133 func ag (ah) = (100 + ah)
134134
135135
136136 func ai (aj,ak) = {
137137 let al = ae(ak)
138138 [al, (g * (al - aj))]
139139 }
140140
141141
142142 func am (an,A,ao,ap) = {
143143 let aq = split(valueOrElse(getString(an, B(A)), "0_0_0_0_0"), "_")
144144 let ar = valueOrElse(getInteger(an, D(A)), 0)
145145 let as = valueOrElse(getInteger(an, z(A)), ag(ar))
146146 let at = split(valueOrElse(getString(an, L(A)), "0_0_0_0_0"), "_")
147147 ([parseIntValue(aq[k]), parseIntValue(aq[l]), parseIntValue(aq[m]), parseIntValue(aq[n]), parseIntValue(aq[o]), ar, as] ++ (if (ap)
148148 then [ao, ao, ao, ao, ao]
149149 else [parseIntValue(at[k]), parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o])]))
150150 }
151151
152152
153153 func au (an,A) = {
154154 let av = valueOrElse(getInteger(an, N(A)), 0)
155155 let aw = valueOrElse(getInteger(an, M(A)), 0)
156156 let ax = lastBlock.timestamp
157157 let ay = max([h, (av - (i * (ax - aw)))])
158158 let az = valueOrElse(getInteger(an, R(A)), 0)
159159 let aA = valueOrElse(getString(an, S(A)), "")
160160 let aB = valueOrElse(getInteger(an, Q(aA)), 0)
161161 $Tuple5(ay, aw, az, aA, aB)
162162 }
163163
164164
165165 let aC = "LAND"
166166
167167 let aD = "DUCK"
168168
169169 let aE = "PRESALE"
170170
171171 let aF = 6
172172
173173 let aG = 25
174174
175175 let aH = 3456000
176176
177177 let aI = 10000000000
178178
179179 let aJ = "Africa_F_Africa"
180180
181181 let aK = 39637
182182
183183 let aL = 10
184184
185185 let aM = 50000
186186
187-let aN = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
188-
189-let aO = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
190-
191-let aP = 10000000
192-
193-let aQ = [15, 16, 17, 18, 19, 20]
194-
195-let aR = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
196-
197-let aS = 6
198-
199-let aT = 8
200-
201-let aU = 9
202-
203-let aV = 10
187+let aN = 600000
188+
189+let aO = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
190+
191+let aP = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
192+
193+let aQ = 10000000
194+
195+let aR = [15, 16, 17, 18, 19, 20]
196+
197+let aS = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
198+
199+let aT = 6
200+
201+let aU = 8
202+
203+let aV = 9
204204
205205 let aW = 10
206206
207-let aX = 0
208-
209-let aY = 1
210-
211-let aZ = 2
212-
213-let ba = 3
214-
215-let bb = 4
216-
217-let bc = 0
218-
219-let bd = 1
220-
221-let be = 2
222-
223-let bf = 3
224-
225-let bg = 0
226-
227-let bh = 1
228-
229-let bi = 2
230-
231-let bj = 3
232-
233-let bk = 0
234-
235-let bl = 1
236-
237-let bm = 2
238-
239-func bn (bo) = ("no_" + bo)
240-
241-
242-func bp (bo) = ("lcna_" + bo)
243-
244-
245-func bq (bo) = ("st_" + bo)
246-
247-
248-func br (bs,bo) = makeString(["las", bs, bo], "_")
249-
250-
251-func bt (bu,bo,bv) = ((((("sttao_" + bu) + "_") + bo) + "_") + bv)
252-
253-
254-func bw (P) = ("wh_" + P)
255-
256-
257-func bx (bo) = ("infraLevel_" + bo)
258-
259-
260-func by (P) = ("fortifications_" + P)
261-
262-
263-func bz (bo) = ("duckCustomNameByAssetId_" + bo)
264-
265-
266-func bA (c) = ("accountCustomNameByAddr_" + c)
267-
268-
269-func bB (c) = ("accRefBy_" + c)
270-
271-
272-func bC (A) = ("onboardArtActivatedOnDuck_" + A)
273-
274-
275-func bD (c) = ("onboardArtActivatedDuckBy_" + c)
276-
277-
278-func bE (c) = ("accReferrals_" + c)
279-
280-
281-func bF (bo) = ("duckOwner_" + bo)
282-
283-
284-func bG (bv) = ("stakedDuckByOwner_" + bv)
285-
286-
287-func bH (A) = ("backPack_" + A)
288-
289-
290-func bI (A) = ("duckLocation_" + A)
291-
292-
293-func bJ (bK) = ("%s%s__userGwlReleaseTime__" + bK)
294-
295-
296-func bL () = "emergencyWarehouseProducts"
297-
298-
299-let bM = "deliveryFund"
300-
301-let bN = "deliveryLocked"
302-
303-let bO = "%s__lastTourId"
304-
305-func bP (bQ) = ("%s%d__tourStaticData__" + toString(bQ))
306-
307-
308-func bR (bQ) = ("%s%d__tourDynamicData__" + toString(bQ))
309-
310-
311-func bS (bQ,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bQ), A], "__")
312-
313-
314-let bT = 0
315-
316-let bU = 1
317-
318-let bV = 6
319-
320-let bW = 1
321-
322-func bX (bY,bQ) = {
323- let bZ = split(valueOrErrorMessage(getString(bY, bP(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
324- let ca = split_4C(valueOrErrorMessage(getString(bY, bR(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
325-[bZ, ca]
326- }
327-
328-
329-func cb (bY,cc) = {
330- let cd = valueOrElse(getInteger(bY, bO), 0)
331- let ce = split(cc, "_")
207+let aX = 10
208+
209+let aY = 0
210+
211+let aZ = 1
212+
213+let ba = 2
214+
215+let bb = 3
216+
217+let bc = 4
218+
219+let bd = 0
220+
221+let be = 1
222+
223+let bf = 2
224+
225+let bg = 3
226+
227+let bh = 0
228+
229+let bi = 1
230+
231+let bj = 2
232+
233+let bk = 3
234+
235+let bl = 0
236+
237+let bm = 1
238+
239+let bn = 2
240+
241+func bo (bp) = ("no_" + bp)
242+
243+
244+func bq (bp) = ("lcna_" + bp)
245+
246+
247+func br (bp) = ("st_" + bp)
248+
249+
250+func bs (bt,bp) = makeString(["las", bt, bp], "_")
251+
252+
253+func bu (bv,bp,bw) = ((((("sttao_" + bv) + "_") + bp) + "_") + bw)
254+
255+
256+func bx (P) = ("wh_" + P)
257+
258+
259+func by (bp) = ("infraLevel_" + bp)
260+
261+
262+func bz (P) = ("fortifications_" + P)
263+
264+
265+func bA (bp) = ("duckCustomNameByAssetId_" + bp)
266+
267+
268+func bB (c) = ("accountCustomNameByAddr_" + c)
269+
270+
271+func bC (c) = ("accRefBy_" + c)
272+
273+
274+func bD (A) = ("onboardArtActivatedOnDuck_" + A)
275+
276+
277+func bE (c) = ("onboardArtActivatedDuckBy_" + c)
278+
279+
280+func bF (c) = ("accReferrals_" + c)
281+
282+
283+func bG (bp) = ("duckOwner_" + bp)
284+
285+
286+func bH (bw) = ("stakedDuckByOwner_" + bw)
287+
288+
289+func bI (A) = ("backPack_" + A)
290+
291+
292+func bJ (A) = ("duckLocation_" + A)
293+
294+
295+func bK (bL) = ("%s%s__userGwlReleaseTime__" + bL)
296+
297+
298+func bM () = "emergencyWarehouseProducts"
299+
300+
301+let bN = "deliveryFund"
302+
303+let bO = "deliveryLocked"
304+
305+let bP = "%s__lastTourId"
306+
307+func bQ (bR) = ("%s%d__tourStaticData__" + toString(bR))
308+
309+
310+func bS (bR) = ("%s%d__tourDynamicData__" + toString(bR))
311+
312+
313+func bT (bR,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bR), A], "__")
314+
315+
316+let bU = 0
317+
318+let bV = 1
319+
320+let bW = 6
321+
322+let bX = 1
323+
324+func bY (bZ,bR) = {
325+ let ca = split(valueOrErrorMessage(getString(bZ, bQ(bR)), (("Error reading tournament " + toString(bR)) + " data")), "__")
326+ let cb = split_4C(valueOrErrorMessage(getString(bZ, bS(bR)), (("Error reading tournament " + toString(bR)) + " data")), "__")
327+[ca, cb]
328+ }
329+
330+
331+func cc (bZ,cd) = {
332+ let ce = valueOrElse(getInteger(bZ, bP), 0)
333+ let cf = split(cd, "_")
332334 let ax = lastBlock.timestamp
333- let cf = bX(bY, cd)
334- let bZ = cf[bT]
335- let ca = cf[bU]
336- if (if (if ((ce[bl] == "T"))
337- then (parseIntValue(ce[bk]) == cd)
335+ let cg = bY(bZ, ce)
336+ let ca = cg[bU]
337+ let cb = cg[bV]
338+ if (if (if ((cf[bm] == "T"))
339+ then (parseIntValue(cf[bl]) == ce)
338340 else false)
339- then (ca[bW] == "INPROGRESS")
341+ then (cb[bX] == "INPROGRESS")
340342 else false)
341- then (parseIntValue(bZ[bV]) > ax)
343+ then (parseIntValue(ca[bW]) > ax)
342344 else false
343345 }
344346
345347
346-func cg (ch) = (parseIntValue(ch[aS]) * aP)
347-
348-
349-let ci = false
350-
351-let cj = false
352-
353-let ck = true
354-
355-let cl = take(drop(this.bytes, 1), 1)
356-
357-let cm = {
358- let cn = cl
359- if ((base58'2W' == cn))
348+func ch (cd) = {
349+ let cf = split(cd, "_")
350+ let ax = lastBlock.timestamp
351+ let ci = parseIntValue(cf[bl])
352+ let cj = parseIntValue(cf[bn])
353+ if (if ((cf[bm] == "D"))
354+ then (ax > (ci + aN))
355+ else false)
356+ then (3 >= cj)
357+ else false
358+ }
359+
360+
361+func ck (cd) = {
362+ let cl = split(cd, "_")[bm]
363+ if ((cl != "T"))
364+ then (cl != "D")
365+ else false
366+ }
367+
368+
369+func cm (bZ,cd) = {
370+ let ce = valueOrElse(getInteger(bZ, bP), 0)
371+ let cf = split(cd, "_")
372+ let ax = lastBlock.timestamp
373+ let cg = bY(bZ, ce)
374+ let ca = cg[bU]
375+ let cb = cg[bV]
376+ let cl = cf[bm]
377+ if (if ((cl != "T"))
378+ then (cl != "D")
379+ else false)
380+ then true
381+ else !(if (if (if ((cf[bm] == "T"))
382+ then (parseIntValue(cf[bl]) == ce)
383+ else false)
384+ then (cb[bX] == "INPROGRESS")
385+ else false)
386+ then (parseIntValue(ca[bW]) > ax)
387+ else false)
388+ }
389+
390+
391+func cn (co) = (parseIntValue(co[aT]) * aQ)
392+
393+
394+func cp (cq,cr) = throw(((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr))
395+
396+
397+let cs = false
398+
399+let ct = false
400+
401+let cu = true
402+
403+let cv = take(drop(this.bytes, 1), 1)
404+
405+let cw = {
406+ let cx = cv
407+ if ((base58'2W' == cx))
360408 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
361- else if ((base58'2T' == cn))
409+ else if ((base58'2T' == cx))
362410 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
363411 else throw("Unknown chain")
364412 }
365413
366-let co = {
367- let cn = cl
368- if ((base58'2W' == cn))
414+let cy = {
415+ let cx = cv
416+ if ((base58'2W' == cx))
369417 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
370- else if ((base58'2T' == cn))
418+ else if ((base58'2T' == cx))
371419 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
372420 else throw("Unknown chain")
373421 }
374422
375-let cp = {
376- let cn = cl
377- if ((base58'2W' == cn))
423+let cz = {
424+ let cx = cv
425+ if ((base58'2W' == cx))
378426 then 10000000000
379- else if ((base58'2T' == cn))
427+ else if ((base58'2T' == cx))
380428 then 100000000
381429 else throw("Unknown chain")
382430 }
383431
384-let cq = {
385- let cn = cl
386- if ((base58'2W' == cn))
432+let cA = {
433+ let cx = cv
434+ if ((base58'2W' == cx))
387435 then 86400000
388- else if ((base58'2T' == cn))
436+ else if ((base58'2T' == cx))
389437 then 60000
390438 else throw("Unknown chain")
391439 }
392440
393-let cr = "__"
394-
395-let cs = 1000000
396-
397-let ct = 100000000
398-
399-let cu = 25
400-
401-let cv = 100
402-
403-let cw = 225
404-
405-let cx = 400
406-
407-let cy = 625
408-
409-let cz = [0, 1, 2, 3, 4, 5]
410-
411-func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
412-
413-
414-let cD = 1
415-
416-let cE = 2
417-
418-let cF = 3
419-
420-let cG = 4
421-
422-let cH = 7
423-
424-let cI = 8
425-
426-func cJ () = "%s__restConfig"
427-
428-
429-func cK () = "%s__restAddr"
430-
431-
432-func cL (cM) = split_4C(cA(cM, cJ()), cr)
433-
434-
435-func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
436-
437-
438-let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
439-
440-let cO = cL(cQ)
441-
442-let an = cN(cO, cD)
443-
444-let cR = cN(cO, cE)
445-
446-let cS = cN(cO, cF)
447-
448-let cT = cN(cO, cG)
449-
450-let cU = cN(cO, cH)
451-
452-let cV = cN(cO, cI)
453-
454-let cW = 0
455-
456-let cX = 1
457-
458-let cY = 2
459-
460-let cZ = 3
461-
462-let da = "wlg_assetId"
463-
464-let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
465-
466-let dc = "acresAssetId"
467-
468-let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
469-
470-let de = 2
471-
472-func df (cB) = ("finishBlockForAddr_" + cB)
473-
474-
475-func dg () = "resTypesProportions"
476-
477-
478-func dh (di) = ("resTypesByContinent_" + di)
479-
480-
481-func dj (bv) = ("stakedLandsByOwner_" + bv)
482-
483-
484-func dk (bv) = ("stakedPiecesByOwner_" + bv)
485-
486-
487-func dl (dm) = {
488- let cn = dm
489- if ($isInstanceOf(cn, "String"))
441+let cB = "__"
442+
443+let cC = 1000000
444+
445+let cD = 100000000
446+
447+let cE = 25
448+
449+let cF = 100
450+
451+let cG = 225
452+
453+let cH = 400
454+
455+let cI = 625
456+
457+let cJ = [0, 1, 2, 3, 4, 5]
458+
459+func cK (cL,cM) = valueOrErrorMessage(getString(cL, cM), makeString(["mandatory ", toString(cL), ".", cM, " is not defined"], ""))
460+
461+
462+let cN = 1
463+
464+let cO = 2
465+
466+let cP = 3
467+
468+let cQ = 4
469+
470+let cR = 7
471+
472+let cS = 8
473+
474+func cT () = "%s__restConfig"
475+
476+
477+func cU () = "%s__restAddr"
478+
479+
480+func cV (cW) = split_4C(cK(cW, cT()), cB)
481+
482+
483+func cX (cY,cZ) = valueOrErrorMessage(addressFromString(cY[cZ]), ("Rest cfg doesn't contain address at index " + toString(cZ)))
484+
485+
486+let da = addressFromStringValue(valueOrElse(getString(this, cU()), cy))
487+
488+let cY = cV(da)
489+
490+let an = cX(cY, cN)
491+
492+let db = cX(cY, cO)
493+
494+let dc = cX(cY, cP)
495+
496+let dd = cX(cY, cQ)
497+
498+let de = cX(cY, cR)
499+
500+let df = cX(cY, cS)
501+
502+let dg = 0
503+
504+let dh = 1
505+
506+let di = 2
507+
508+let dj = 3
509+
510+let dk = "wlg_assetId"
511+
512+let dl = valueOrErrorMessage(getBinary(dd, dk), "WLGOLD is not issued yet")
513+
514+let dm = "acresAssetId"
515+
516+let dn = valueOrErrorMessage(getBinary(df, dm), "ACRES is not issued yet")
517+
518+let do = 2
519+
520+func dp (cL) = ("finishBlockForAddr_" + cL)
521+
522+
523+func dq () = "resTypesProportions"
524+
525+
526+func dr (ds) = ("resTypesByContinent_" + ds)
527+
528+
529+func dt (bw) = ("stakedLandsByOwner_" + bw)
530+
531+
532+func du (bw) = ("stakedPiecesByOwner_" + bw)
533+
534+
535+func dv (dw) = {
536+ let cx = dw
537+ if ($isInstanceOf(cx, "String"))
490538 then {
491- let dn = cn
492- dn
539+ let dx = cx
540+ dx
493541 }
494542 else throw("fail to cast into String")
495543 }
496544
497545
498-func do (dm) = {
499- let cn = dm
500- if ($isInstanceOf(cn, "Int"))
546+func dy (dw) = {
547+ let cx = dw
548+ if ($isInstanceOf(cx, "Int"))
501549 then {
502- let dp = cn
503- dp
550+ let dz = cx
551+ dz
504552 }
505553 else throw("fail to cast into Int")
506554 }
507555
508556
509-func dq (dm) = {
510- let cn = dm
511- if ($isInstanceOf(cn, "Boolean"))
557+func dA (dw) = {
558+ let cx = dw
559+ if ($isInstanceOf(cx, "Boolean"))
512560 then {
513- let dn = cn
514- dn
561+ let dx = cx
562+ dx
515563 }
516564 else throw("fail to cast into Boolean")
517565 }
518566
519567
520-func dr (ds) = {
521- let cn = ds
522- if (("S" == cn))
523- then cu
524- else if (("M" == cn))
525- then cv
526- else if (("L" == cn))
527- then cw
528- else if (("XL" == cn))
529- then cx
530- else if (("XXL" == cn))
531- then cy
568+func dB (dC) = {
569+ let cx = dC
570+ if ($isInstanceOf(cx, "(String, Int)"))
571+ then {
572+ let dD = cx
573+ dD
574+ }
575+ else throw("fail to cast into (String, Int)")
576+ }
577+
578+
579+func dE (dF) = {
580+ let cx = dF
581+ if (("S" == cx))
582+ then cE
583+ else if (("M" == cx))
584+ then cF
585+ else if (("L" == cx))
586+ then cG
587+ else if (("XL" == cx))
588+ then cH
589+ else if (("XXL" == cx))
590+ then cI
532591 else throw("Unknown land size")
533592 }
534593
535594
536-func dt (dn) = isDefined(parseInt(dn))
537-
538-
539-func du () = "contractsBlocked"
540-
541-
542-func dv (c) = ("lastTxIdByUser_" + c)
543-
544-
545-func dw (dx,dy) = {
546- let dz = pow(10, 0, dy, 0, 0, DOWN)
547- let dA = toString((dx % dz))
548- let dB = drop(toString(dz), (1 + size(dA)))
549- (((toString((dx / dz)) + ".") + dB) + dA)
550- }
551-
552-
553-func dC (dD,dE,dF) = {
554- let dG = value(blockInfoByHeight(dE))
555- let dH = sha256((value(dG.vrf) + dF))
556- (toInt(dH) % dD)
557- }
558-
559-
560-let dI = {
561- let cn = cl
562- if ((base58'2W' == cn))
595+func dG (dx) = isDefined(parseInt(dx))
596+
597+
598+func dH () = "contractsBlocked"
599+
600+
601+func dI (c) = ("lastTxIdByUser_" + c)
602+
603+
604+func dJ (dC,dK) = {
605+ let dL = pow(10, 0, dK, 0, 0, DOWN)
606+ let dM = toString((dC % dL))
607+ let dN = drop(toString(dL), (1 + size(dM)))
608+ (((toString((dC / dL)) + ".") + dN) + dM)
609+ }
610+
611+
612+func dO (dP,dQ,dR) = {
613+ let dS = value(blockInfoByHeight(dQ))
614+ let dT = sha256((value(dS.vrf) + dR))
615+ (toInt(dT) % dP)
616+ }
617+
618+
619+let dU = {
620+ let cx = cv
621+ if ((base58'2W' == cx))
563622 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
564- else if ((base58'2T' == cn))
623+ else if ((base58'2T' == cx))
565624 then this
566625 else throw("Unknown chain")
567626 }
568627
569-let dJ = {
570- let cn = cl
571- if ((base58'2W' == cn))
628+let dV = {
629+ let cx = cv
630+ if ((base58'2W' == cx))
572631 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
573- else if ((base58'2T' == cn))
632+ else if ((base58'2T' == cx))
574633 then this
575634 else throw("Unknown chain")
576635 }
577636
578-let dK = {
579- let cn = cl
580- if ((base58'2W' == cn))
581- then if (ci)
637+let dW = {
638+ let cx = cv
639+ if ((base58'2W' == cx))
640+ then if (cs)
582641 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
583642 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
584- else if ((base58'2T' == cn))
643+ else if ((base58'2T' == cx))
585644 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
586645 else throw("Unknown chain")
587646 }
588647
589-let dL = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
590-
591-let dM = 300000
592-
593-let dN = 600000
594-
595-let dO = 5000000
596-
597-let dP = 50
598-
599-let dQ = 10000000
600-
601-let dR = {
602- let cn = cl
603- if ((base58'2W' == cn))
648+let dX = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
649+
650+let dY = 300000
651+
652+let dZ = 5000000
653+
654+let ea = 50
655+
656+let eb = 10000000
657+
658+let ec = {
659+ let cx = cv
660+ if ((base58'2W' == cx))
604661 then 252289527462
605- else if ((base58'2T' == cn))
662+ else if ((base58'2T' == cx))
606663 then 2522895274
607664 else throw("Unknown chain")
608665 }
609666
610-let dS = {
611- let cn = cl
612- if ((base58'2W' == cn))
667+let ed = {
668+ let cx = cv
669+ if ((base58'2W' == cx))
613670 then 250000000
614- else if ((base58'2T' == cn))
671+ else if ((base58'2T' == cx))
615672 then 250000000
616673 else throw("Unknown chain")
617674 }
618675
619-let dT = 2500000000
620-
621-let dU = toBigInt(5)
622-
623-let dV = toBigInt(20)
624-
625-let dW = toBigInt((20 * 20))
626-
627-let dX = toBigInt(((20 * 20) * 20))
628-
629-let dY = toBigInt((((20 * 20) * 20) * 20))
630-
631-let dZ = toBigInt(((((20 * 20) * 20) * 20) * 20))
632-
633-let ea = 500
634-
635-func eb () = "nextLandNum"
636-
637-
638-func ec (ed) = ("lcn_" + ed)
639-
640-
641-func ee (ef) = ("la_" + ef)
642-
643-
644-func eg (bo,bv) = ((("ilao_" + bo) + "_") + bv)
645-
646-
647-func eh (ef) = ("lo_" + ef)
648-
649-
650-func ei (ed) = ("duckByCustomName_" + ed)
651-
652-
653-func ej (ed) = ("accountByCustomName_" + ed)
654-
655-
656-func ek () = "oldiesList"
657-
658-
659-let el = 0
660-
661-let em = 1
662-
663-let en = 2
664-
665-let eo = 0
666-
667-let ep = 5
668-
669-let eq = 6
670-
671-let er = 7
672-
673-func es (ef,ds) = ((aC + ef) + ds)
674-
675-
676-func et (eu,ev) = {
677- let ew = if ((eu >= 0))
678- then (((eu + ev) - 1) / ev)
679- else -((((-(eu) + ev) - 1) / ev))
680- (ew * ct)
681- }
682-
683-
684-func ex (ey,ez) = {
685- let eA = (((((ez[0] + ez[1]) + ez[2]) + ez[3]) + ez[4]) + ez[5])
686- if ((0 >= eA))
676+let ee = 2500000000
677+
678+let ef = toBigInt(5)
679+
680+let eg = toBigInt(20)
681+
682+let eh = toBigInt((20 * 20))
683+
684+let ei = toBigInt(((20 * 20) * 20))
685+
686+let ej = toBigInt((((20 * 20) * 20) * 20))
687+
688+let ek = toBigInt(((((20 * 20) * 20) * 20) * 20))
689+
690+let el = 500
691+
692+func em () = "nextLandNum"
693+
694+
695+func en (eo) = ("lcn_" + eo)
696+
697+
698+func ep (eq) = ("la_" + eq)
699+
700+
701+func er (bp,bw) = ((("ilao_" + bp) + "_") + bw)
702+
703+
704+func es (eq) = ("lo_" + eq)
705+
706+
707+func et (eo) = ("duckByCustomName_" + eo)
708+
709+
710+func eu (eo) = ("accountByCustomName_" + eo)
711+
712+
713+func ev () = "oldiesList"
714+
715+
716+let ew = 0
717+
718+let ex = 1
719+
720+let ey = 2
721+
722+let ez = 0
723+
724+let eA = 5
725+
726+let eB = 6
727+
728+let eC = 7
729+
730+func eD (eq,dF) = ((aC + eq) + dF)
731+
732+
733+func eE (eF,eG) = {
734+ let eH = if ((eF >= 0))
735+ then (((eF + eG) - 1) / eG)
736+ else -((((-(eF) + eG) - 1) / eG))
737+ (eH * cD)
738+ }
739+
740+
741+func eI (eJ,eK) = {
742+ let eL = (((((eK[0] + eK[1]) + eK[2]) + eK[3]) + eK[4]) + eK[5])
743+ if ((0 >= eL))
687744 then throw("Zero weights sum")
688745 else {
689- let eB = fraction(ey, cs, eA)
690- func eC (eD,eE) = (eD :+ fraction(eE, eB, cs))
691-
692- let eF = ez
693- let eG = size(eF)
694- let eH = nil
695- func eI (eJ,eK) = if ((eK >= eG))
696- then eJ
697- else eC(eJ, eF[eK])
698-
699- func eL (eJ,eK) = if ((eK >= eG))
700- then eJ
746+ let eM = fraction(eJ, cC, eL)
747+ func eN (eO,eP) = (eO :+ fraction(eP, eM, cC))
748+
749+ let eQ = eK
750+ let eR = size(eQ)
751+ let eS = nil
752+ func eT (eU,eV) = if ((eV >= eR))
753+ then eU
754+ else eN(eU, eQ[eV])
755+
756+ func eW (eU,eV) = if ((eV >= eR))
757+ then eU
701758 else throw("List size exceeds 6")
702759
703- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
704- }
705- }
706-
707-
708-func eM (ey) = {
709- let eN = split(value(getString(dg())), "_")
710- if ((size(eN) != aF))
760+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
761+ }
762+ }
763+
764+
765+func eX (eJ) = {
766+ let eY = split(value(getString(dq())), "_")
767+ if ((size(eY) != aF))
711768 then throw("Wrong proportions data")
712769 else {
713- let eO = [parseIntValue(eN[0]), parseIntValue(eN[1]), parseIntValue(eN[2]), parseIntValue(eN[3]), parseIntValue(eN[4]), parseIntValue(eN[5])]
714- ex(ey, eO)
715- }
716- }
717-
718-
719-func eP (eQ,eR,eS) = {
720- let eT = eM(eS)
721- func eU (eD,cP) = {
722- let eV = (parseIntValue(eR[cP]) - eT[cP])
723- if ((0 > eV))
724- then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eR[cP]) + ", but need ") + toString(eT[cP])))
725- else (eD :+ toString(eV))
770+ let eZ = [parseIntValue(eY[0]), parseIntValue(eY[1]), parseIntValue(eY[2]), parseIntValue(eY[3]), parseIntValue(eY[4]), parseIntValue(eY[5])]
771+ eI(eJ, eZ)
772+ }
773+ }
774+
775+
776+func fa (fb,fc,fd) = {
777+ let fe = eX(fd)
778+ func ff (eO,cZ) = {
779+ let fg = (parseIntValue(fc[cZ]) - fe[cZ])
780+ if ((0 > fg))
781+ then throw(((((("Not enough material idx=" + toString(cZ)) + ", you have ") + fc[cZ]) + ", but need ") + toString(fe[cZ])))
782+ else (eO :+ toString(fg))
726783 }
727784
728- if (eQ)
785+ if (fb)
729786 then {
730- let eF = cz
731- let eG = size(eF)
732- let eH = nil
733- func eI (eJ,eK) = if ((eK >= eG))
734- then eJ
735- else eU(eJ, eF[eK])
736-
737- func eL (eJ,eK) = if ((eK >= eG))
738- then eJ
787+ let eQ = cJ
788+ let eR = size(eQ)
789+ let eS = nil
790+ func eT (eU,eV) = if ((eV >= eR))
791+ then eU
792+ else ff(eU, eQ[eV])
793+
794+ func eW (eU,eV) = if ((eV >= eR))
795+ then eU
739796 else throw("List size exceeds 6")
740797
741- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
742- }
743- else eR
744- }
745-
746-
747-func eW (eX,eY) = if ((eY == ""))
748- then $Tuple2(eX, false)
798+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
799+ }
800+ else fc
801+ }
802+
803+
804+func fh (fi,fj) = if ((fj == ""))
805+ then $Tuple2(fi, false)
749806 else {
750- func eZ (eD,fa) = {
751- let fb = split(fa, ",")
752- if ((size(fb) != 2))
807+ func fk (eO,fl) = {
808+ let fm = split(fl, ",")
809+ if ((size(fm) != 2))
753810 then throw("Incorrect format, should be index,amount")
754811 else {
755- let cP = parseIntValue(fb[0])
756- if (if ((0 > cP))
812+ let cZ = parseIntValue(fm[0])
813+ if (if ((0 > cZ))
757814 then true
758- else (cP >= size(aR)))
815+ else (cZ >= size(aS)))
759816 then throw("Unknown product idx")
760817 else {
761- let fc = parseIntValue(fb[1])
762- let fd = split(eD._1, (fb[0] + ":"))
763- if ((size(fd) != 2))
764- then throw((("You don't have " + aN[cP]) + " equipped"))
818+ let fn = parseIntValue(fm[1])
819+ let fo = split(eO._1, (fm[0] + ":"))
820+ if ((size(fo) != 2))
821+ then throw((("You don't have " + aO[cZ]) + " equipped"))
765822 else {
766- let fe = fd[1]
767- let ff = if (dt(take(drop(fe, 1), 1)))
823+ let fp = fo[1]
824+ let fq = if (dG(take(drop(fp, 1), 1)))
768825 then 2
769826 else 1
770- let fg = parseIntValue(take(fe, ff))
771- let fh = drop(fe, ff)
772- let fi = if ((fg >= fc))
773- then (fg - fc)
774- else throw(((((("You equipped " + toString(fg)) + " of ") + aN[cP]) + ", but tried to use ") + toString(fc)))
775- $Tuple2(((((fd[0] + fb[0]) + ":") + toString(fi)) + fh), if (eD._2)
827+ let fr = parseIntValue(take(fp, fq))
828+ let fs = drop(fp, fq)
829+ let ft = if ((fr >= fn))
830+ then (fr - fn)
831+ else throw(((((("You equipped " + toString(fr)) + " of ") + aO[cZ]) + ", but tried to use ") + toString(fn)))
832+ $Tuple2(((((fo[0] + fm[0]) + ":") + toString(ft)) + fs), if (eO._2)
776833 then true
777- else if (if ((cP >= 6))
778- then (8 >= cP)
834+ else if (if ((cZ >= 6))
835+ then (8 >= cZ)
779836 else false)
780- then (fi == 0)
837+ then (ft == 0)
781838 else false)
782839 }
783840 }
784841 }
785842 }
786843
787- let eF = split(eY, "_")
788- let eG = size(eF)
789- let eH = $Tuple2(eX, false)
790- func eI (eJ,eK) = if ((eK >= eG))
791- then eJ
792- else eZ(eJ, eF[eK])
793-
794- func eL (eJ,eK) = if ((eK >= eG))
795- then eJ
844+ let eQ = split(fj, "_")
845+ let eR = size(eQ)
846+ let eS = $Tuple2(fi, false)
847+ func eT (eU,eV) = if ((eV >= eR))
848+ then eU
849+ else fk(eU, eQ[eV])
850+
851+ func eW (eU,eV) = if ((eV >= eR))
852+ then eU
796853 else throw("List size exceeds 10")
797854
798- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
855+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
799856 }
800857
801858
802-func fj (fk) = {
803- let fl = if ((fk == ""))
859+func fu (fv) = {
860+ let fw = if ((fv == ""))
804861 then nil
805- else split_4C(fk, "_")
806- func fm (eD,ch) = {
807- let fn = (size(eD) / 8)
808- let fg = if ((size(fl) > fn))
809- then parseIntValue(fl[fn])
862+ else split_4C(fv, "_")
863+ func fx (eO,co) = {
864+ let fy = (size(eO) / 8)
865+ let fr = if ((size(fw) > fy))
866+ then parseIntValue(fw[fy])
810867 else 0
811- (eD + toBytes(fg))
868+ (eO + toBytes(fr))
812869 }
813870
814- let eF = aR
815- let eG = size(eF)
816- let eH = base58''
817- func eI (eJ,eK) = if ((eK >= eG))
818- then eJ
819- else fm(eJ, eF[eK])
820-
821- func eL (eJ,eK) = if ((eK >= eG))
822- then eJ
871+ let eQ = aS
872+ let eR = size(eQ)
873+ let eS = base58''
874+ func eT (eU,eV) = if ((eV >= eR))
875+ then eU
876+ else fx(eU, eQ[eV])
877+
878+ func eW (eU,eV) = if ((eV >= eR))
879+ then eU
823880 else throw("List size exceeds 50")
824881
825- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
826- }
827-
828-
829-func fo (fp) = {
830- func fq (eD,ch) = {
831- let fn = size(eD)
832- let fr = take(drop(fp, (8 * fn)), 8)
833- (eD :+ toString(toInt(fr)))
882+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
883+ }
884+
885+
886+func fz (fA) = {
887+ func fB (eO,co) = {
888+ let fy = size(eO)
889+ let fC = take(drop(fA, (8 * fy)), 8)
890+ (eO :+ toString(toInt(fC)))
834891 }
835892
836893 makeString_2C({
837- let eF = aR
838- let eG = size(eF)
839- let eH = nil
840- func eI (eJ,eK) = if ((eK >= eG))
841- then eJ
842- else fq(eJ, eF[eK])
843-
844- func eL (eJ,eK) = if ((eK >= eG))
845- then eJ
894+ let eQ = aS
895+ let eR = size(eQ)
896+ let eS = nil
897+ func eT (eU,eV) = if ((eV >= eR))
898+ then eU
899+ else fB(eU, eQ[eV])
900+
901+ func eW (eU,eV) = if ((eV >= eR))
902+ then eU
846903 else throw("List size exceeds 50")
847904
848- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
905+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
849906 }, "_")
850907 }
851908
852909
853-func fs (ft,fu) = {
854- func fv (eD,fn) = {
855- let fw = if ((size(ft) > (7 + fn)))
856- then ft[(7 + fn)]
910+func fD (fE,fF) = {
911+ func fG (eO,fy) = {
912+ let fH = if ((size(fE) > (7 + fy)))
913+ then fE[(7 + fy)]
857914 else 0
858- if ((parseIntValue(fu[fn]) > (ft[fn] + fw)))
859- then throw(("Requirement not satisfied: " + j[fn]))
915+ if ((parseIntValue(fF[fy]) > (fE[fy] + fH)))
916+ then throw(("Requirement not satisfied: " + j[fy]))
860917 else true
861918 }
862919
863- let eF = [0, 1, 2, 3, 4, 5, 6]
864- let eG = size(eF)
865- let eH = false
866- func eI (eJ,eK) = if ((eK >= eG))
867- then eJ
868- else fv(eJ, eF[eK])
869-
870- func eL (eJ,eK) = if ((eK >= eG))
871- then eJ
920+ let eQ = [0, 1, 2, 3, 4, 5, 6]
921+ let eR = size(eQ)
922+ let eS = false
923+ func eT (eU,eV) = if ((eV >= eR))
924+ then eU
925+ else fG(eU, eQ[eV])
926+
927+ func eW (eU,eV) = if ((eV >= eR))
928+ then eU
872929 else throw("List size exceeds 7")
873930
874- eL(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7)
875- }
876-
877-
878-func fx (fy,fl,fz,ft,fA,fB) = {
879- let fb = split(fy, ":")
880- if ((size(fb) != 2))
931+ eW(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7)
932+ }
933+
934+
935+func fI (fJ,fw,fK,fE,fL,fM) = {
936+ let fm = split(fJ, ":")
937+ if ((size(fm) != 2))
881938 then throw("Incorrect format, should be index:amount")
882- else if (if (!(fz))
883- then (size(fb[0]) != 2)
939+ else if (if (!(fK))
940+ then (size(fm[0]) != 2)
884941 else false)
885942 then throw("Product idx should be 2 digits, zero padded")
886943 else {
887- let fC = parseIntValue(fb[0])
888- let fD = parseIntValue(fb[1])
889- if (!(containsElement(aQ, fC)))
890- then throw((("Product '" + aN[fC]) + "' cannot be used for land defense"))
891- else if ((0 > fD))
944+ let fN = parseIntValue(fm[0])
945+ let fO = parseIntValue(fm[1])
946+ if (!(containsElement(aR, fN)))
947+ then throw((("Product '" + aO[fN]) + "' cannot be used for land defense"))
948+ else if ((0 > fO))
892949 then throw("Count can't be negative")
893- else if ((fD > t))
894- then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
895- else if ((fD == 0))
896- then $Tuple3(fl, fA, fB)
950+ else if ((fO > t))
951+ then throw(((("Can't put more than " + toString(t)) + " of ") + aO[fN]))
952+ else if ((fO == 0))
953+ then $Tuple3(fw, fL, fM)
897954 else {
898- let fE = take(fl, (8 * fC))
899- let fg = toInt(take(drop(fl, (8 * fC)), 8))
900- let fh = drop(fl, (8 * (fC + 1)))
901- let ch = split(aR[fC], "_")
902- if (if (!(fz))
903- then (fD > fg)
955+ let fP = take(fw, (8 * fN))
956+ let fr = toInt(take(drop(fw, (8 * fN)), 8))
957+ let fs = drop(fw, (8 * (fN + 1)))
958+ let co = split(aS[fN], "_")
959+ if (if (!(fK))
960+ then (fO > fr)
904961 else false)
905- then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
962+ then throw(((((("You have " + toString(fr)) + " of ") + aO[fN]) + ", but tried to use ") + toString(fO)))
906963 else {
907- let fi = if (if (!(fz))
908- then fs(ft, split(ch[aU], ","))
964+ let ft = if (if (!(fK))
965+ then fD(fE, split(co[aV], ","))
909966 else false)
910- then (fg - fD)
911- else (fg + fD)
912- let fF = (et(fi, aW) - et(fg, aW))
913- $Tuple3(((fE + toBytes(fi)) + fh), (fA + fF), (fB - fF))
967+ then (fr - fO)
968+ else (fr + fO)
969+ let fQ = (eE(ft, aX) - eE(fr, aX))
970+ $Tuple3(((fP + toBytes(ft)) + fs), (fL + fQ), (fM - fQ))
914971 }
915972 }
916973 }
917974 }
918975
919976
920-func fG (fy,fl,fz,fH,fI,fJ,ft) = {
921- let fb = split(fy, ":")
922- if ((size(fb) != 2))
977+func fR (fJ,fw,fK,fS,fT,fU,fE) = {
978+ let fm = split(fJ, ":")
979+ if ((size(fm) != 2))
923980 then throw("Incorrect format, should be index:amount")
924- else if (if (!(fz))
925- then (size(fb[0]) != 2)
981+ else if (if (!(fK))
982+ then (size(fm[0]) != 2)
926983 else false)
927984 then throw("Product idx should be 2 digits, zero padded")
928985 else {
929- let fC = parseIntValue(fb[0])
930- let fD = parseIntValue(fb[1])
931- if (if ((0 > fC))
986+ let fN = parseIntValue(fm[0])
987+ let fO = parseIntValue(fm[1])
988+ if (if ((0 > fN))
932989 then true
933- else (fC >= size(aR)))
990+ else (fN >= size(aS)))
934991 then throw("Unknown product idx")
935- else if ((0 > fD))
992+ else if ((0 > fO))
936993 then throw("Count can't be negative")
937- else if ((fD > t))
938- then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
939- else if ((fD == 0))
940- then $Tuple2(fl, false)
994+ else if ((fO > t))
995+ then throw(((("Can't put more than " + toString(t)) + " of ") + aO[fN]))
996+ else if ((fO == 0))
997+ then $Tuple2(fw, false)
941998 else {
942- let fE = take(fl, (8 * fC))
943- let fg = toInt(take(drop(fl, (8 * fC)), 8))
944- let fh = drop(fl, (8 * (fC + 1)))
945- let ch = split(aR[fC], "_")
946- if (if (!(fz))
947- then (fD > fg)
999+ let fP = take(fw, (8 * fN))
1000+ let fr = toInt(take(drop(fw, (8 * fN)), 8))
1001+ let fs = drop(fw, (8 * (fN + 1)))
1002+ let co = split(aS[fN], "_")
1003+ if (if (!(fK))
1004+ then (fO > fr)
9481005 else false)
949- then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
1006+ then throw(((((("You have " + toString(fr)) + " of ") + aO[fN]) + ", but tried to use ") + toString(fO)))
9501007 else {
951- let fK = if (if (!(fz))
952- then fs(ft, split(ch[aU], ","))
1008+ let fV = if (if (!(fK))
1009+ then fD(fE, split(co[aV], ","))
9531010 else false)
9541011 then {
955- let fL = ch[aV]
956- if ((fL == ""))
1012+ let fW = co[aW]
1013+ if ((fW == ""))
9571014 then throw("Item cannot be equipped")
9581015 else {
959- let fM = parseIntValue(fL)
960- let fN = (fM / 100)
961- if ((fH != fN))
1016+ let fX = parseIntValue(fW)
1017+ let fY = (fX / 100)
1018+ if ((fS != fY))
9621019 then throw("Segment incompatible")
9631020 else {
964- let fO = ((fM % 100) / 10)
965- if ((fI != fO))
1021+ let fZ = ((fX % 100) / 10)
1022+ if ((fT != fZ))
9661023 then throw("Slot incompatible")
9671024 else {
968- let fP = (fM % 10)
969- if (if ((fJ != 0))
970- then (fP > 1)
1025+ let ga = (fX % 10)
1026+ if (if ((fU != 0))
1027+ then (ga > 1)
9711028 else false)
9721029 then throw("Big items should occupy slot 0")
973- else (fP > 1)
1030+ else (ga > 1)
9741031 }
9751032 }
9761033 }
9771034 }
9781035 else false
979- $Tuple2(((fE + toBytes((fg + (if (fz)
980- then fD
981- else -(fD))))) + fh), fK)
1036+ $Tuple2(((fP + toBytes((fr + (if (fK)
1037+ then fO
1038+ else -(fO))))) + fs), fV)
9821039 }
9831040 }
9841041 }
9851042 }
9861043
9871044
988-func fQ (fR,fS,fz,fH,fI,fT) = if ((fR != ""))
1045+func gb (gc,gd,fK,fS,fT,ge) = if ((gc != ""))
9891046 then {
990- let fU = split(fR, ",")
991- if ((size(fU) > s))
1047+ let gf = split(gc, ",")
1048+ if ((size(gf) > s))
9921049 then throw("Wrong slots format")
9931050 else {
994- let fV = fU[0]
995- let fW = if ((size(fU) > 1))
996- then fU[1]
1051+ let gg = gf[0]
1052+ let gh = if ((size(gf) > 1))
1053+ then gf[1]
9971054 else ""
998- if (if ((fV == ""))
999- then (fW == "")
1055+ if (if ((gg == ""))
1056+ then (gh == "")
10001057 else false)
1001- then fS
1058+ then gd
10021059 else {
1003- let fX = if ((fV != ""))
1004- then fG(fV, fS, fz, fH, fI, 0, fT)
1005- else $Tuple2(fS, false)
1006- if ((fW != ""))
1007- then if (fX._2)
1060+ let gi = if ((gg != ""))
1061+ then fR(gg, gd, fK, fS, fT, 0, ge)
1062+ else $Tuple2(gd, false)
1063+ if ((gh != ""))
1064+ then if (gi._2)
10081065 then throw("Big item already occupies slot")
1009- else fG(fW, fX._1, fz, fH, fI, 1, fT)._1
1010- else fX._1
1066+ else fR(gh, gi._1, fK, fS, fT, 1, ge)._1
1067+ else gi._1
10111068 }
10121069 }
10131070 }
1014- else fS
1015-
1016-
1017-func fY (fZ,ga,fz,fT) = {
1018- func fH (eD,gb) = {
1019- let fn = eD._1
1020- let fI = split(gb, ";")
1021- if ((size(fI) != r))
1071+ else gd
1072+
1073+
1074+func gj (gk,gl,fK,ge) = {
1075+ func fS (eO,gm) = {
1076+ let fy = eO._1
1077+ let fT = split(gm, ";")
1078+ if ((size(fT) != r))
10221079 then throw("Wrong segment format")
10231080 else {
1024- let gc = fI[0]
1025- let gd = fI[1]
1026- if (if ((gc == ""))
1027- then (gd == "")
1081+ let gn = fT[0]
1082+ let go = fT[1]
1083+ if (if ((gn == ""))
1084+ then (go == "")
10281085 else false)
1029- then $Tuple2((fn + 1), eD._2)
1086+ then $Tuple2((fy + 1), eO._2)
10301087 else {
1031- let ge = fQ(gc, eD._2, fz, fn, 0, fT)
1032- $Tuple2((fn + 1), fQ(gd, ge, fz, fn, 1, fT))
1088+ let gp = gb(gn, eO._2, fK, fy, 0, ge)
1089+ $Tuple2((fy + 1), gb(go, gp, fK, fy, 1, ge))
10331090 }
10341091 }
10351092 }
10361093
1037-( let eF = fZ
1038- let eG = size(eF)
1039- let eH = $Tuple2(0, ga)
1040- func eI (eJ,eK) = if ((eK >= eG))
1041- then eJ
1042- else fH(eJ, eF[eK])
1043-
1044- func eL (eJ,eK) = if ((eK >= eG))
1045- then eJ
1094+( let eQ = gk
1095+ let eR = size(eQ)
1096+ let eS = $Tuple2(0, gl)
1097+ func eT (eU,eV) = if ((eV >= eR))
1098+ then eU
1099+ else fS(eU, eQ[eV])
1100+
1101+ func eW (eU,eV) = if ((eV >= eR))
1102+ then eU
10461103 else throw("List size exceeds 6")
10471104
1048- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6))._2
1049- }
1050-
1051-
1052-func gf (fZ,ga,fA,fB,fz,ft) = if ((3 > size(fZ)))
1105+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6))._2
1106+ }
1107+
1108+
1109+func gq (gk,gl,fL,fM,fK,fE) = if ((3 > size(gk)))
10531110 then throw("At least duck, mines and traps parts are required")
10541111 else {
1055- func fH (eD,gb) = {
1056- let fn = eD._1
1057- if ((fn == 0))
1058- then $Tuple4((fn + 1), eD._2, eD._3, eD._4)
1112+ func fS (eO,gm) = {
1113+ let fy = eO._1
1114+ if ((fy == 0))
1115+ then $Tuple4((fy + 1), eO._2, eO._3, eO._4)
10591116 else {
1060- let gg = fx(gb, eD._2, fz, ft, eD._3, eD._4)
1061- $Tuple4((fn + 1), gg._1, gg._2, gg._3)
1117+ let gr = fI(gm, eO._2, fK, fE, eO._3, eO._4)
1118+ $Tuple4((fy + 1), gr._1, gr._2, gr._3)
10621119 }
10631120 }
10641121
1065- let gh = {
1066- let eF = fZ
1067- let eG = size(eF)
1068- let eH = $Tuple4(0, ga, fA, fB)
1069- func eI (eJ,eK) = if ((eK >= eG))
1070- then eJ
1071- else fH(eJ, eF[eK])
1072-
1073- func eL (eJ,eK) = if ((eK >= eG))
1074- then eJ
1122+ let gs = {
1123+ let eQ = gk
1124+ let eR = size(eQ)
1125+ let eS = $Tuple4(0, gl, fL, fM)
1126+ func eT (eU,eV) = if ((eV >= eR))
1127+ then eU
1128+ else fS(eU, eQ[eV])
1129+
1130+ func eW (eU,eV) = if ((eV >= eR))
1131+ then eU
10751132 else throw("List size exceeds 10")
10761133
1077- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1078- }
1079- $Tuple3(gh._2, gh._3, gh._4)
1134+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1135+ }
1136+ $Tuple3(gs._2, gs._3, gs._4)
10801137 }
10811138
10821139
1083-func gi (A) = {
1084- let gj = F(A)
1085- let gk = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1086- let gl = fY(gk, dL, true, nil)
1087- let gm = split(gk[p], ";")[1]
1088- let ao = if ((gm == ""))
1140+func gt (A) = {
1141+ let gu = F(A)
1142+ let gv = split(valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1143+ let gw = gj(gv, dX, true, nil)
1144+ let gx = split(gv[p], ";")[1]
1145+ let ao = if ((gx == ""))
10891146 then 0
10901147 else {
1091- let gn = split(gm, ",")[0]
1092- if ((gn == ""))
1148+ let gy = split(gx, ",")[0]
1149+ if ((gy == ""))
10931150 then 0
10941151 else {
1095- let fy = split(gn, ":")
1096- let cP = fy[0]
1097- let go = fy[1]
1098- if (if (if (if (if ((cP == "06"))
1152+ let fJ = split(gy, ":")
1153+ let cZ = fJ[0]
1154+ let gz = fJ[1]
1155+ if (if (if (if (if ((cZ == "06"))
10991156 then true
1100- else (cP == "07"))
1157+ else (cZ == "07"))
11011158 then true
1102- else (cP == "08"))
1103- then (go != "")
1159+ else (cZ == "08"))
1160+ then (gz != "")
11041161 else false)
1105- then (parseIntValue(go) > 0)
1162+ then (parseIntValue(gz) > 0)
11061163 else false)
1107- then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
1164+ then parseIntValue(split(aS[parseIntValue(cZ)], "_")[aU])
11081165 else 0
11091166 }
11101167 }
1111- let fT = am(this, A, ao, true)
1112- let gp = fY(gk, gl, false, fT)
1113- (gp == gp)
1114- }
1115-
1116-
1117-func gq (gr,gs,gt,gu) = if ((size(gr) != aF))
1168+ let ge = am(this, A, ao, true)
1169+ let gA = gj(gv, gw, false, ge)
1170+ (gA == gA)
1171+ }
1172+
1173+
1174+func gB (gC,gD,gE,gF) = if ((size(gC) != aF))
11181175 then throw("Wrong proportions data")
11191176 else {
1120- func gv (eD,gw) = {
1121- let eV = (parseIntValue(gr[gw]) + ((gu * gs[gw]) * gt))
1122- if ((0 > eV))
1123- then throw(((((((("Panic! Pieces of type=" + toString(gw)) + ", sign=") + toString(gu)) + ", terrainCounts[i]=") + toString(gs[gw])) + ", landSizeIndex=") + toString(gt)))
1124- else (eD :+ toString(eV))
1125- }
1126-
1127- let eF = cz
1128- let eG = size(eF)
1129- let eH = nil
1130- func eI (eJ,eK) = if ((eK >= eG))
1131- then eJ
1132- else gv(eJ, eF[eK])
1133-
1134- func eL (eJ,eK) = if ((eK >= eG))
1135- then eJ
1177+ func gG (eO,gH) = {
1178+ let fg = (parseIntValue(gC[gH]) + ((gF * gD[gH]) * gE))
1179+ if ((0 > fg))
1180+ then throw(((((((("Panic! Pieces of type=" + toString(gH)) + ", sign=") + toString(gF)) + ", terrainCounts[i]=") + toString(gD[gH])) + ", landSizeIndex=") + toString(gE)))
1181+ else (eO :+ toString(fg))
1182+ }
1183+
1184+ let eQ = cJ
1185+ let eR = size(eQ)
1186+ let eS = nil
1187+ func eT (eU,eV) = if ((eV >= eR))
1188+ then eU
1189+ else gG(eU, eQ[eV])
1190+
1191+ func eW (eU,eV) = if ((eV >= eR))
1192+ then eU
11361193 else throw("List size exceeds 6")
11371194
1138- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1195+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
11391196 }
11401197
11411198
1142-func gx (gs,gt,gu) = {
1143- let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1144- makeString(gq(gr, gs, gt, gu), "_")
1145- }
1146-
1147-
1148-func gy (gz) = [(size(split(gz, "A")) - 1), (size(split(gz, "B")) - 1), (size(split(gz, "C")) - 1), (size(split(gz, "D")) - 1), (size(split(gz, "E")) - 1), (size(split(gz, "F")) - 1)]
1149-
1150-
1151-func gA (gB,gs,gC,gt,gD) = {
1152- func gE (eD,gw) = {
1153- let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1154- (eD :+ toString((parseIntValue(gB[gw]) + gF)))
1199+func gI (gD,gE,gF) = {
1200+ let gC = split(valueOrElse(getString(dq()), "0_0_0_0_0_0"), "_")
1201+ makeString(gB(gC, gD, gE, gF), "_")
1202+ }
1203+
1204+
1205+func gJ (gK) = [(size(split(gK, "A")) - 1), (size(split(gK, "B")) - 1), (size(split(gK, "C")) - 1), (size(split(gK, "D")) - 1), (size(split(gK, "E")) - 1), (size(split(gK, "F")) - 1)]
1206+
1207+
1208+func gL (gM,gD,gN,gE,gO) = {
1209+ func gP (eO,gH) = {
1210+ let gQ = ((fraction(gN, gO, a) * gD[gH]) * gE)
1211+ (eO :+ toString((parseIntValue(gM[gH]) + gQ)))
11551212 }
11561213
1157- let eO = {
1158- let eF = cz
1159- let eG = size(eF)
1160- let eH = nil
1161- func eI (eJ,eK) = if ((eK >= eG))
1162- then eJ
1163- else gE(eJ, eF[eK])
1164-
1165- func eL (eJ,eK) = if ((eK >= eG))
1166- then eJ
1214+ let eZ = {
1215+ let eQ = cJ
1216+ let eR = size(eQ)
1217+ let eS = nil
1218+ func eT (eU,eV) = if ((eV >= eR))
1219+ then eU
1220+ else gP(eU, eQ[eV])
1221+
1222+ func eW (eU,eV) = if ((eV >= eR))
1223+ then eU
11671224 else throw("List size exceeds 6")
11681225
1169- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1226+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
11701227 }
1171- makeString(eO, "_")
1172- }
1173-
1174-
1175-func gG (gs,gC,gt,gD) = {
1176- func gE (eD,gw) = {
1177- let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1178- $Tuple2((eD._1 :+ gF), (eD._2 + gF))
1228+ makeString(eZ, "_")
1229+ }
1230+
1231+
1232+func gR (gD,gN,gE,gO) = {
1233+ func gP (eO,gH) = {
1234+ let gQ = ((fraction(gN, gO, a) * gD[gH]) * gE)
1235+ $Tuple2((eO._1 :+ gQ), (eO._2 + gQ))
11791236 }
11801237
1181- let eF = cz
1182- let eG = size(eF)
1183- let eH = $Tuple2(nil, 0)
1184- func eI (eJ,eK) = if ((eK >= eG))
1185- then eJ
1186- else gE(eJ, eF[eK])
1187-
1188- func eL (eJ,eK) = if ((eK >= eG))
1189- then eJ
1238+ let eQ = cJ
1239+ let eR = size(eQ)
1240+ let eS = $Tuple2(nil, 0)
1241+ func eT (eU,eV) = if ((eV >= eR))
1242+ then eU
1243+ else gP(eU, eQ[eV])
1244+
1245+ func eW (eU,eV) = if ((eV >= eR))
1246+ then eU
11901247 else throw("List size exceeds 6")
11911248
1192- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1193- }
1194-
1195-
1196-func gH (gI,gJ,gK,gL) = {
1197- let gM = gK._1
1198- let gN = gK._2
1199- if ((gN == 0))
1200- then $Tuple2(makeString(gI, "_"), makeString(gJ, "_"))
1201- else if ((gL >= gN))
1249+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
1250+ }
1251+
1252+
1253+func gS (gT,gU,gV,gW) = {
1254+ let gX = gV._1
1255+ let gY = gV._2
1256+ if ((gY == 0))
1257+ then $Tuple2(makeString(gT, "_"), makeString(gU, "_"))
1258+ else if ((gW >= gY))
12021259 then {
1203- func gO (eD,gw) = (eD :+ toString((parseIntValue(gI[gw]) + gM[gw])))
1204-
1205- let eO = {
1206- let eF = cz
1207- let eG = size(eF)
1208- let eH = nil
1209- func eI (eJ,eK) = if ((eK >= eG))
1210- then eJ
1211- else gO(eJ, eF[eK])
1212-
1213- func eL (eJ,eK) = if ((eK >= eG))
1214- then eJ
1260+ func gZ (eO,gH) = (eO :+ toString((parseIntValue(gT[gH]) + gX[gH])))
1261+
1262+ let eZ = {
1263+ let eQ = cJ
1264+ let eR = size(eQ)
1265+ let eS = nil
1266+ func eT (eU,eV) = if ((eV >= eR))
1267+ then eU
1268+ else gZ(eU, eQ[eV])
1269+
1270+ func eW (eU,eV) = if ((eV >= eR))
1271+ then eU
12151272 else throw("List size exceeds 6")
12161273
1217- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1274+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
12181275 }
1219- $Tuple2(makeString(eO, "_"), makeString(gJ, "_"))
1276+ $Tuple2(makeString(eZ, "_"), makeString(gU, "_"))
12201277 }
12211278 else {
1222- func gP (eD,gw) = {
1223- let gQ = fraction(gM[gw], gL, gN)
1224- $Tuple2((eD._1 :+ toString((parseIntValue(gI[gw]) + gQ))), (eD._2 :+ toString(((parseIntValue(gJ[gw]) + gM[gw]) - gQ))))
1279+ func ha (eO,gH) = {
1280+ let hb = fraction(gX[gH], gW, gY)
1281+ $Tuple2((eO._1 :+ toString((parseIntValue(gT[gH]) + hb))), (eO._2 :+ toString(((parseIntValue(gU[gH]) + gX[gH]) - hb))))
12251282 }
12261283
1227- let eO = {
1228- let eF = cz
1229- let eG = size(eF)
1230- let eH = $Tuple2(nil, nil)
1231- func eI (eJ,eK) = if ((eK >= eG))
1232- then eJ
1233- else gP(eJ, eF[eK])
1234-
1235- func eL (eJ,eK) = if ((eK >= eG))
1236- then eJ
1284+ let eZ = {
1285+ let eQ = cJ
1286+ let eR = size(eQ)
1287+ let eS = $Tuple2(nil, nil)
1288+ func eT (eU,eV) = if ((eV >= eR))
1289+ then eU
1290+ else ha(eU, eQ[eV])
1291+
1292+ func eW (eU,eV) = if ((eV >= eR))
1293+ then eU
12371294 else throw("List size exceeds 6")
12381295
1239- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1296+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
12401297 }
1241- $Tuple2(makeString(eO._1, "_"), makeString(eO._2, "_"))
1298+ $Tuple2(makeString(eZ._1, "_"), makeString(eZ._2, "_"))
12421299 }
12431300 }
12441301
12451302
1246-func gR (gS) = if ((gS >= toBigInt(0)))
1247- then gS
1248- else -(gS)
1249-
1250-
1251-let gT = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1252-
1253-func gU (dp,gV) = {
1254- let gW = toInt((dp % dV))
1255- let gX = if ((gV[0] > gW))
1303+func hc (hd) = if ((hd >= toBigInt(0)))
1304+ then hd
1305+ else -(hd)
1306+
1307+
1308+let he = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1309+
1310+func hf (dz,hg) = {
1311+ let hh = toInt((dz % eg))
1312+ let hi = if ((hg[0] > hh))
12561313 then "A"
1257- else if ((gV[1] > gW))
1314+ else if ((hg[1] > hh))
12581315 then "B"
1259- else if ((gV[2] > gW))
1316+ else if ((hg[2] > hh))
12601317 then "C"
1261- else if ((gV[3] > gW))
1318+ else if ((hg[3] > hh))
12621319 then "D"
1263- else if ((gV[4] > gW))
1320+ else if ((hg[4] > hh))
12641321 then "E"
12651322 else "F"
1266- gX
1267- }
1268-
1269-
1270-func gY (gZ,ha) = {
1271- let hb = gT[ha]
1272- func hc (eD,eE) = $Tuple2((((((eD._1 + gU(eD._2, hb)) + gU((eD._2 / dV), hb)) + gU((eD._2 / dW), hb)) + gU((eD._2 / dX), hb)) + gU((eD._2 / dY), hb)), (eD._2 / dZ))
1273-
1274- let gh = {
1275- let eF = [1, 2, 3, 4, 5]
1276- let eG = size(eF)
1277- let eH = $Tuple2("", (gZ / dU))
1278- func eI (eJ,eK) = if ((eK >= eG))
1279- then eJ
1280- else hc(eJ, eF[eK])
1281-
1282- func eL (eJ,eK) = if ((eK >= eG))
1283- then eJ
1323+ hi
1324+ }
1325+
1326+
1327+func hj (hk,hl) = {
1328+ let hm = he[hl]
1329+ func hn (eO,eP) = $Tuple2((((((eO._1 + hf(eO._2, hm)) + hf((eO._2 / eg), hm)) + hf((eO._2 / eh), hm)) + hf((eO._2 / ei), hm)) + hf((eO._2 / ej), hm)), (eO._2 / ek))
1330+
1331+ let gs = {
1332+ let eQ = [1, 2, 3, 4, 5]
1333+ let eR = size(eQ)
1334+ let eS = $Tuple2("", (hk / ef))
1335+ func eT (eU,eV) = if ((eV >= eR))
1336+ then eU
1337+ else hn(eU, eQ[eV])
1338+
1339+ func eW (eU,eV) = if ((eV >= eR))
1340+ then eU
12841341 else throw("List size exceeds 5")
12851342
1286- eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
1343+ eW(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5)
12871344 }
1288- gh._1
1289- }
1290-
1291-
1292-let hd = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1293-
1294-let he = ["A", "B", "C", "D", "E", "F"]
1295-
1296-func hf (hg,gt) = {
1297- func hh (eD,dn) = {
1298- let fn = eD._2
1299- let hi = parseIntValue(dn)
1300- let gS = if ((hi == 0))
1345+ gs._1
1346+ }
1347+
1348+
1349+let ho = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1350+
1351+let hp = ["A", "B", "C", "D", "E", "F"]
1352+
1353+func hq (hr,gE) = {
1354+ func hs (eO,dx) = {
1355+ let fy = eO._2
1356+ let ht = parseIntValue(dx)
1357+ let hd = if ((ht == 0))
13011358 then 0
1302- else if ((hi >= (4 * gt)))
1303- then (hi / gt)
1304- else if ((hi > (3 * gt)))
1359+ else if ((ht >= (4 * gE)))
1360+ then (ht / gE)
1361+ else if ((ht > (3 * gE)))
13051362 then 3
1306- else (((hi - 1) / gt) + 1)
1307- $Tuple3((eD._1 :+ gS), (eD._2 + 1), (eD._3 + gS))
1363+ else (((ht - 1) / gE) + 1)
1364+ $Tuple3((eO._1 :+ hd), (eO._2 + 1), (eO._3 + hd))
13081365 }
13091366
1310- let gh = {
1311- let eF = hg
1312- let eG = size(eF)
1313- let eH = $Tuple3(nil, 0, 0)
1314- func eI (eJ,eK) = if ((eK >= eG))
1315- then eJ
1316- else hh(eJ, eF[eK])
1317-
1318- func eL (eJ,eK) = if ((eK >= eG))
1319- then eJ
1367+ let gs = {
1368+ let eQ = hr
1369+ let eR = size(eQ)
1370+ let eS = $Tuple3(nil, 0, 0)
1371+ func eT (eU,eV) = if ((eV >= eR))
1372+ then eU
1373+ else hs(eU, eQ[eV])
1374+
1375+ func eW (eU,eV) = if ((eV >= eR))
1376+ then eU
13201377 else throw("List size exceeds 6")
13211378
1322- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1379+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
13231380 }
1324- let hj = gh._1
1325- let hk = value(indexOf(hj, max(hj)))
1326- let hl = (gh._3 - 25)
1327- func hm (eD,cP) = {
1328- let dx = if ((cP == hk))
1329- then (hj[cP] - hl)
1330- else hj[cP]
1331- let dB = if ((dx == 0))
1381+ let hu = gs._1
1382+ let hv = value(indexOf(hu, max(hu)))
1383+ let hw = (gs._3 - 25)
1384+ func hx (eO,cZ) = {
1385+ let dC = if ((cZ == hv))
1386+ then (hu[cZ] - hw)
1387+ else hu[cZ]
1388+ let dN = if ((dC == 0))
13321389 then nil
1333- else split(drop(toString(pow(10, 0, dx, 0, 0, DOWN)), 1), "")
1334- let fM = he[cP]
1335- func hn (ho,hp) = (ho :+ fM)
1336-
1337- let hq = {
1338- let eF = dB
1339- let eG = size(eF)
1340- let eH = nil
1341- func hr (eJ,eK) = if ((eK >= eG))
1342- then eJ
1343- else hn(eJ, eF[eK])
1344-
1345- func hs (eJ,eK) = if ((eK >= eG))
1346- then eJ
1390+ else split(drop(toString(pow(10, 0, dC, 0, 0, DOWN)), 1), "")
1391+ let fX = hp[cZ]
1392+ func hy (hz,hA) = (hz :+ fX)
1393+
1394+ let hB = {
1395+ let eQ = dN
1396+ let eR = size(eQ)
1397+ let eS = nil
1398+ func hC (eU,eV) = if ((eV >= eR))
1399+ then eU
1400+ else hy(eU, eQ[eV])
1401+
1402+ func hD (eU,eV) = if ((eV >= eR))
1403+ then eU
13471404 else throw("List size exceeds 25")
13481405
1349- hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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)
1350- }
1351- (eD ++ hq)
1406+ hD(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(eS, 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)
1407+ }
1408+ (eO ++ hB)
13521409 }
13531410
1354- let eO = {
1355- let eF = cz
1356- let eG = size(eF)
1357- let eH = nil
1358- func hr (eJ,eK) = if ((eK >= eG))
1359- then eJ
1360- else hm(eJ, eF[eK])
1361-
1362- func hs (eJ,eK) = if ((eK >= eG))
1363- then eJ
1411+ let eZ = {
1412+ let eQ = cJ
1413+ let eR = size(eQ)
1414+ let eS = nil
1415+ func hC (eU,eV) = if ((eV >= eR))
1416+ then eU
1417+ else hx(eU, eQ[eV])
1418+
1419+ func hD (eU,eV) = if ((eV >= eR))
1420+ then eU
13641421 else throw("List size exceeds 6")
13651422
1366- hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
1423+ hD(hC(hC(hC(hC(hC(hC(eS, 0), 1), 2), 3), 4), 5), 6)
13671424 }
1368- func ht (eD,fn) = (eD + eO[fn])
1369-
1370- let eF = hd
1371- let eG = size(eF)
1372- let eH = ""
1373- func hu (eJ,eK) = if ((eK >= eG))
1374- then eJ
1375- else ht(eJ, eF[eK])
1376-
1377- func hv (eJ,eK) = if ((eK >= eG))
1378- then eJ
1425+ func hE (eO,fy) = (eO + eZ[fy])
1426+
1427+ let eQ = ho
1428+ let eR = size(eQ)
1429+ let eS = ""
1430+ func hF (eU,eV) = if ((eV >= eR))
1431+ then eU
1432+ else hE(eU, eQ[eV])
1433+
1434+ func hG (eU,eV) = if ((eV >= eR))
1435+ then eU
13791436 else throw("List size exceeds 25")
13801437
1381- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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)
1382- }
1383-
1384-
1385-func hw (hx) = {
1386- let gg = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1387-[toString(valueOrElse(parseInt(gg[bg]), 0)), if ((size(split(gg[bh], "_")) == aF))
1388- then gg[bh]
1389- else "0_0_0_0_0_0", if ((size(split(gg[bi], "_")) == aF))
1390- then gg[bi]
1391- else "0_0_0_0_0_0", gg[bj]]
1392- }
1393-
1394-
1395-func hy (hz) = {
1396- let fb = split(hz, "_")
1397- ((aI * (parseIntValue(fb[1]) + 1)) * parseIntValue(fb[0]))
1398- }
1399-
1400-
1401-func hA (hB) = {
1402- let hC = hB[ba]
1403- func hD (eD,hE) = (eD + parseIntValue(hE))
1404-
1405- func hF (eD,hE) = {
1406- let cP = eD._1
1407- let ew = (((parseIntValue(hE) + aW) - 1) / aW)
1408- $Tuple2((cP + 1), (eD._2 + (ew * ct)))
1438+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eS, 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)
1439+ }
1440+
1441+
1442+func hH (hI) = {
1443+ let gr = split(valueOrElse(getString(hI), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1444+[toString(valueOrElse(parseInt(gr[bh]), 0)), if ((size(split(gr[bi], "_")) == aF))
1445+ then gr[bi]
1446+ else "0_0_0_0_0_0", if ((size(split(gr[bj], "_")) == aF))
1447+ then gr[bj]
1448+ else "0_0_0_0_0_0", gr[bk]]
1449+ }
1450+
1451+
1452+func hJ (hK) = {
1453+ let fm = split(hK, "_")
1454+ ((aI * (parseIntValue(fm[1]) + 1)) * parseIntValue(fm[0]))
1455+ }
1456+
1457+
1458+func hL (hM) = {
1459+ let hN = hM[bb]
1460+ func hO (eO,hP) = (eO + parseIntValue(hP))
1461+
1462+ func hQ (eO,hP) = {
1463+ let cZ = eO._1
1464+ let eH = (((parseIntValue(hP) + aX) - 1) / aX)
1465+ $Tuple2((cZ + 1), (eO._2 + (eH * cD)))
14091466 }
14101467
1411- let hG = {
1412- let eF = split(hB[aY], "_")
1413- let eG = size(eF)
1414- let eH = 0
1415- func eI (eJ,eK) = if ((eK >= eG))
1416- then eJ
1417- else hD(eJ, eF[eK])
1418-
1419- func eL (eJ,eK) = if ((eK >= eG))
1420- then eJ
1468+ let hR = {
1469+ let eQ = split(hM[aZ], "_")
1470+ let eR = size(eQ)
1471+ let eS = 0
1472+ func eT (eU,eV) = if ((eV >= eR))
1473+ then eU
1474+ else hO(eU, eQ[eV])
1475+
1476+ func eW (eU,eV) = if ((eV >= eR))
1477+ then eU
14211478 else throw("List size exceeds 6")
14221479
1423- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1480+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
14241481 }
1425- let hH = {
1426- let eF = split(hB[aZ], "_")
1427- let eG = size(eF)
1428- let eH = 0
1429- func hr (eJ,eK) = if ((eK >= eG))
1430- then eJ
1431- else hD(eJ, eF[eK])
1432-
1433- func hs (eJ,eK) = if ((eK >= eG))
1434- then eJ
1482+ let hS = {
1483+ let eQ = split(hM[ba], "_")
1484+ let eR = size(eQ)
1485+ let eS = 0
1486+ func hC (eU,eV) = if ((eV >= eR))
1487+ then eU
1488+ else hO(eU, eQ[eV])
1489+
1490+ func hD (eU,eV) = if ((eV >= eR))
1491+ then eU
14351492 else throw("List size exceeds 6")
14361493
1437- hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
1494+ hD(hC(hC(hC(hC(hC(hC(eS, 0), 1), 2), 3), 4), 5), 6)
14381495 }
1439- let hI = if ((hC == ""))
1496+ let hT = if ((hN == ""))
14401497 then 0
1441- else ( let eF = split_4C(hC, "_")
1442- let eG = size(eF)
1443- let eH = $Tuple2(0, 0)
1444- func hu (eJ,eK) = if ((eK >= eG))
1445- then eJ
1446- else hF(eJ, eF[eK])
1447-
1448- func hv (eJ,eK) = if ((eK >= eG))
1449- then eJ
1498+ else ( let eQ = split_4C(hN, "_")
1499+ let eR = size(eQ)
1500+ let eS = $Tuple2(0, 0)
1501+ func hF (eU,eV) = if ((eV >= eR))
1502+ then eU
1503+ else hQ(eU, eQ[eV])
1504+
1505+ func hG (eU,eV) = if ((eV >= eR))
1506+ then eU
14501507 else throw("List size exceeds 50")
14511508
1452- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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))._2
1453- ((hG + hH) + hI)
1454- }
1455-
1456-
1457-func hJ (hK,hL,hM) = {
1458- let hz = ((toString(hL) + "_") + toString(hM))
1459- let hN = hy(hz)
1460- let hO = valueOrElse(getString(hK), (hz + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1461- let hP = split_4C(hO, ":")
1462- let hQ = hA(hP)
1463- let hR = if ((5 > size(hP)))
1464- then makeString(["0", toString(hQ), toString((hN - hQ)), toString(hN)], "_")
1509+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eS, 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))._2
1510+ ((hR + hS) + hT)
1511+ }
1512+
1513+
1514+func hU (hV,hW,hX) = {
1515+ let hK = ((toString(hW) + "_") + toString(hX))
1516+ let hY = hJ(hK)
1517+ let hZ = valueOrElse(getString(hV), (hK + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1518+ let ia = split_4C(hZ, ":")
1519+ let ib = hL(ia)
1520+ let ic = if ((5 > size(ia)))
1521+ then makeString(["0", toString(ib), toString((hY - ib)), toString(hY)], "_")
14651522 else {
1466- let hS = split(hP[bb], "_")
1467- let hT = parseIntValue(hS[bc])
1468- let hU = if ((size(hS) > 1))
1469- then parseIntValue(hS[bd])
1470- else hQ
1471- makeString([toString(hT), toString(hU), toString(((hN - hT) - hU)), toString(hN)], "_")
1472- }
1473-[hP[aX], if ((size(split(hP[aY], "_")) == aF))
1474- then hP[aY]
1475- else "0_0_0_0_0_0", if ((size(split(hP[aZ], "_")) == aF))
1476- then hP[aZ]
1477- else "0_0_0_0_0_0", hP[ba], hR]
1478- }
1479-
1480-
1481-func hV (hB) = {
1482- let hW = hA(hB)
1483- let hX = parseIntValue(split(hB[bb], "_")[bc])
1484- ((hy(hB[aX]) - hW) - hX)
1485- }
1486-
1487-
1488-func hY (hZ,hB,ia) = if ((size(hZ) != 3))
1523+ let id = split(ia[bc], "_")
1524+ let ie = parseIntValue(id[bd])
1525+ let if = if ((size(id) > 1))
1526+ then parseIntValue(id[be])
1527+ else ib
1528+ makeString([toString(ie), toString(if), toString(((hY - ie) - if)), toString(hY)], "_")
1529+ }
1530+[ia[aY], if ((size(split(ia[aZ], "_")) == aF))
1531+ then ia[aZ]
1532+ else "0_0_0_0_0_0", if ((size(split(ia[ba], "_")) == aF))
1533+ then ia[ba]
1534+ else "0_0_0_0_0_0", ia[bb], ic]
1535+ }
1536+
1537+
1538+func ig (hM) = {
1539+ let ih = hL(hM)
1540+ let ii = parseIntValue(split(hM[bc], "_")[bd])
1541+ ((hJ(hM[aY]) - ih) - ii)
1542+ }
1543+
1544+
1545+func ij (ik,hM,il) = if ((size(ik) != 3))
14891546 then throw("cargoListStr should contain exactly 2 ':' separators")
14901547 else {
1491- let ib = split(hZ[0], "_")
1492- let ic = split(hZ[1], "_")
1493- let id = if ((hZ[2] == ""))
1548+ let im = split(ik[0], "_")
1549+ let in = split(ik[1], "_")
1550+ let io = if ((ik[2] == ""))
14941551 then nil
1495- else split_4C(hZ[2], "_")
1496- if ((size(ib) != aF))
1552+ else split_4C(ik[2], "_")
1553+ if ((size(im) != aF))
14971554 then throw("All 6 resources should be passed")
1498- else if ((size(ic) != aF))
1555+ else if ((size(in) != aF))
14991556 then throw("All 6 materials should be passed")
15001557 else {
1501- let gL = hV(hB)
1502- let ie = split(hB[aY], "_")
1503- let if = split(hB[aZ], "_")
1504- let ig = if ((hB[ba] == ""))
1558+ let gW = ig(hM)
1559+ let ip = split(hM[aZ], "_")
1560+ let iq = split(hM[ba], "_")
1561+ let ir = if ((hM[bb] == ""))
15051562 then nil
1506- else split_4C(hB[ba], "_")
1507- let gJ = split(ia[bh], "_")
1508- let ih = split(ia[bi], "_")
1509- let ii = if ((ia[bj] == ""))
1563+ else split_4C(hM[bb], "_")
1564+ let gU = split(il[bi], "_")
1565+ let is = split(il[bj], "_")
1566+ let it = if ((il[bk] == ""))
15101567 then nil
1511- else split_4C(ia[bj], "_")
1512- func ij (eD,hE) = {
1513- let gw = eD._1
1514- let ik = parseIntValue(hE)
1515- let il = parseIntValue(ie[gw])
1516- let im = parseIntValue(gJ[gw])
1517- if ((ik == 0))
1518- then $Tuple4((gw + 1), (eD._2 :+ ie[gw]), (eD._3 :+ gJ[gw]), eD._4)
1519- else if ((ik > 0))
1520- then if ((ik > im))
1521- then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(im)) + " available"))
1522- else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
1523- else if ((-(ik) > il))
1524- then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(il)) + " available"))
1525- else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
1568+ else split_4C(il[bk], "_")
1569+ func iu (eO,hP) = {
1570+ let gH = eO._1
1571+ let iv = parseIntValue(hP)
1572+ let iw = parseIntValue(ip[gH])
1573+ let ix = parseIntValue(gU[gH])
1574+ if ((iv == 0))
1575+ then $Tuple4((gH + 1), (eO._2 :+ ip[gH]), (eO._3 :+ gU[gH]), eO._4)
1576+ else if ((iv > 0))
1577+ then if ((iv > ix))
1578+ then throw((((("Attempt to take " + hP) + " from backpack, but only ") + toString(ix)) + " available"))
1579+ else $Tuple4((gH + 1), (eO._2 :+ toString((iw + iv))), (eO._3 :+ toString((ix - iv))), (eO._4 + iv))
1580+ else if ((-(iv) > iw))
1581+ then throw((((("Attempt to take " + toString(-(iv))) + " from warehouse, but only ") + toString(iw)) + " available"))
1582+ else $Tuple4((gH + 1), (eO._2 :+ toString((iw + iv))), (eO._3 :+ toString((ix - iv))), (eO._4 + iv))
15261583 }
15271584
1528- let eO = {
1529- let eF = ib
1530- let eG = size(eF)
1531- let eH = $Tuple4(0, nil, nil, 0)
1532- func eI (eJ,eK) = if ((eK >= eG))
1533- then eJ
1534- else ij(eJ, eF[eK])
1535-
1536- func eL (eJ,eK) = if ((eK >= eG))
1537- then eJ
1585+ let eZ = {
1586+ let eQ = im
1587+ let eR = size(eQ)
1588+ let eS = $Tuple4(0, nil, nil, 0)
1589+ func eT (eU,eV) = if ((eV >= eR))
1590+ then eU
1591+ else iu(eU, eQ[eV])
1592+
1593+ func eW (eU,eV) = if ((eV >= eR))
1594+ then eU
15381595 else throw("List size exceeds 6")
15391596
1540- eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1597+ eW(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6)
15411598 }
1542- func in (eD,hE) = {
1543- let gw = eD._1
1544- let ik = parseIntValue(hE)
1545- let io = parseIntValue(if[gw])
1546- let ip = parseIntValue(ih[gw])
1547- if ((ik == 0))
1548- then $Tuple4((gw + 1), (eD._2 :+ if[gw]), (eD._3 :+ ih[gw]), eD._4)
1549- else if ((ik > 0))
1550- then if ((ik > ip))
1551- then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(ip)) + " available"))
1552- else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
1553- else if ((-(ik) > io))
1554- then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(io)) + " available"))
1555- else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
1599+ func iy (eO,hP) = {
1600+ let gH = eO._1
1601+ let iv = parseIntValue(hP)
1602+ let iz = parseIntValue(iq[gH])
1603+ let iA = parseIntValue(is[gH])
1604+ if ((iv == 0))
1605+ then $Tuple4((gH + 1), (eO._2 :+ iq[gH]), (eO._3 :+ is[gH]), eO._4)
1606+ else if ((iv > 0))
1607+ then if ((iv > iA))
1608+ then throw((((("Attempt to take " + hP) + " from backpack, but only ") + toString(iA)) + " available"))
1609+ else $Tuple4((gH + 1), (eO._2 :+ toString((iz + iv))), (eO._3 :+ toString((iA - iv))), (eO._4 + iv))
1610+ else if ((-(iv) > iz))
1611+ then throw((((("Attempt to take " + toString(-(iv))) + " from warehouse, but only ") + toString(iz)) + " available"))
1612+ else $Tuple4((gH + 1), (eO._2 :+ toString((iz + iv))), (eO._3 :+ toString((iA - iv))), (eO._4 + iv))
15561613 }
15571614
1558- let gc = {
1559- let eF = ic
1560- let eG = size(eF)
1561- let eH = $Tuple4(0, nil, nil, eO._4)
1562- func hr (eJ,eK) = if ((eK >= eG))
1563- then eJ
1564- else in(eJ, eF[eK])
1565-
1566- func hs (eJ,eK) = if ((eK >= eG))
1567- then eJ
1615+ let gn = {
1616+ let eQ = in
1617+ let eR = size(eQ)
1618+ let eS = $Tuple4(0, nil, nil, eZ._4)
1619+ func hC (eU,eV) = if ((eV >= eR))
1620+ then eU
1621+ else iy(eU, eQ[eV])
1622+
1623+ func hD (eU,eV) = if ((eV >= eR))
1624+ then eU
15681625 else throw("List size exceeds 6")
15691626
1570- hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
1627+ hD(hC(hC(hC(hC(hC(hC(eS, 0), 1), 2), 3), 4), 5), 6)
15711628 }
1572- func iq (eD,hE) = {
1573- let gw = eD._1
1574- let ik = parseIntValue(hE)
1575- let ir = if ((size(ig) > gw))
1576- then parseIntValue(ig[gw])
1629+ func iB (eO,hP) = {
1630+ let gH = eO._1
1631+ let iv = parseIntValue(hP)
1632+ let iC = if ((size(ir) > gH))
1633+ then parseIntValue(ir[gH])
15771634 else 0
1578- let is = if ((size(ii) > gw))
1579- then parseIntValue(ii[gw])
1635+ let iD = if ((size(it) > gH))
1636+ then parseIntValue(it[gH])
15801637 else 0
1581- if ((ik == 0))
1582- then $Tuple4((gw + 1), (eD._2 :+ toString(ir)), (eD._3 :+ toString(is)), eD._4)
1583- else if ((ik > 0))
1584- then if ((ik > is))
1585- then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(is)) + " available"))
1638+ if ((iv == 0))
1639+ then $Tuple4((gH + 1), (eO._2 :+ toString(iC)), (eO._3 :+ toString(iD)), eO._4)
1640+ else if ((iv > 0))
1641+ then if ((iv > iD))
1642+ then throw((((("Attempt to take " + hP) + " from backpack, but only ") + toString(iD)) + " available"))
15861643 else {
1587- let fF = (et((ir + ik), aW) - et(ir, aW))
1588- $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
1644+ let fQ = (eE((iC + iv), aX) - eE(iC, aX))
1645+ $Tuple4((gH + 1), (eO._2 :+ toString((iC + iv))), (eO._3 :+ toString((iD - iv))), (eO._4 + fQ))
15891646 }
1590- else if ((-(ik) > ir))
1591- then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(ir)) + " available"))
1647+ else if ((-(iv) > iC))
1648+ then throw((((("Attempt to take " + toString(-(iv))) + " from warehouse, but only ") + toString(iC)) + " available"))
15921649 else {
1593- let fF = (et((ir + ik), aW) - et(ir, aW))
1594- $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
1650+ let fQ = (eE((iC + iv), aX) - eE(iC, aX))
1651+ $Tuple4((gH + 1), (eO._2 :+ toString((iC + iv))), (eO._3 :+ toString((iD - iv))), (eO._4 + fQ))
15951652 }
15961653 }
15971654
1598- let gg = if ((size(id) != 0))
1655+ let gr = if ((size(io) != 0))
15991656 then {
1600- let eF = id
1601- let eG = size(eF)
1602- let eH = $Tuple4(0, nil, nil, gc._4)
1603- func hu (eJ,eK) = if ((eK >= eG))
1604- then eJ
1605- else iq(eJ, eF[eK])
1606-
1607- func hv (eJ,eK) = if ((eK >= eG))
1608- then eJ
1657+ let eQ = io
1658+ let eR = size(eQ)
1659+ let eS = $Tuple4(0, nil, nil, gn._4)
1660+ func hF (eU,eV) = if ((eV >= eR))
1661+ then eU
1662+ else iB(eU, eQ[eV])
1663+
1664+ func hG (eU,eV) = if ((eV >= eR))
1665+ then eU
16091666 else throw("List size exceeds 50")
16101667
1611- hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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)
1668+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eS, 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)
16121669 }
1613- else $Tuple4(0, ig, ii, gc._4)
1614- let it = gg._4
1615- if ((it > gL))
1616- then throw((((("Attempt to put total " + toString(it)) + " stuff, but only ") + toString(gL)) + " warehouse space left"))
1617- else $Tuple7(makeString(eO._2, "_"), makeString(gc._2, "_"), makeString_2C(gg._2, "_"), makeString(eO._3, "_"), makeString(gc._3, "_"), makeString_2C(gg._3, "_"), it)
1670+ else $Tuple4(0, ir, it, gn._4)
1671+ let iE = gr._4
1672+ if ((iE > gW))
1673+ then throw((((("Attempt to put total " + toString(iE)) + " stuff, but only ") + toString(gW)) + " warehouse space left"))
1674+ else $Tuple7(makeString(eZ._2, "_"), makeString(gn._2, "_"), makeString_2C(gr._2, "_"), makeString(eZ._3, "_"), makeString(gn._3, "_"), makeString_2C(gr._3, "_"), iE)
16181675 }
16191676 }
16201677
16211678
1622-func iu (iv,iw) = {
1623- let bK = toString(iv)
1624- let ix = gR(toBigInt(iw))
1625- let iy = valueOrElse(getInteger(eb()), (ea + 1))
1626- let ef = toString(iy)
1627- let ha = toInt((ix % dU))
1628- let gz = gY(ix, ha)
1629- let di = aO[ha]
1630- let iz = Issue(es(ef, "S"), makeString([ef, "S", gz, di], "_"), 1, 0, false)
1631- let bo = calculateAssetId(iz)
1632- let iA = toBase58String(bo)
1633- $Tuple2([IntegerEntry(eb(), (iy + 1)), iz, StringEntry(ee(ef), iA), StringEntry(bn(iA), bK), StringEntry(eh(ef), bK), IntegerEntry(bx(iA), 0), IntegerEntry(eg(iA, bK), 0), ScriptTransfer(iv, 1, bo)], $Tuple2(iA, di))
1634- }
1635-
1636-
1637-func iB (bK,iC,iD) = if (!(sigVerify_8Kb(iC, iD, dK)))
1679+func iF (iG,iH) = {
1680+ let bL = toString(iG)
1681+ let iI = hc(toBigInt(iH))
1682+ let iJ = valueOrElse(getInteger(em()), (el + 1))
1683+ let eq = toString(iJ)
1684+ let hl = toInt((iI % ef))
1685+ let gK = hj(iI, hl)
1686+ let ds = aP[hl]
1687+ let iK = Issue(eD(eq, "S"), makeString([eq, "S", gK, ds], "_"), 1, 0, false)
1688+ let bp = calculateAssetId(iK)
1689+ let iL = toBase58String(bp)
1690+ $Tuple2([IntegerEntry(em(), (iJ + 1)), iK, StringEntry(ep(eq), iL), StringEntry(bo(iL), bL), StringEntry(es(eq), bL), IntegerEntry(by(iL), 0), IntegerEntry(er(iL, bL), 0), ScriptTransfer(iG, 1, bp)], $Tuple2(iL, ds))
1691+ }
1692+
1693+
1694+func iM (bL,iN,iO) = if (!(sigVerify_8Kb(iN, iO, dW)))
16381695 then throw("signature does not match")
16391696 else {
1640- let fb = split_4C(toUtf8String(iC), ";")
1641- let iE = split_4C(fb[0], "|")
1642- let iF = split(iE[eo], "_")
1643- let iG = parseIntValue(iF[0])
1644- let iH = parseIntValue(iF[1])
1645- let iI = split(fb[1], ":")
1646- let iJ = iI[0]
1647- let iK = parseIntValue(iE[ep])
1648- if (if ((iK > (lastBlock.timestamp + dM)))
1697+ let fm = split_4C(toUtf8String(iN), ";")
1698+ let iP = split_4C(fm[0], "|")
1699+ let iQ = split(iP[ez], "_")
1700+ let iR = parseIntValue(iQ[0])
1701+ let iS = parseIntValue(iQ[1])
1702+ let iT = split(fm[1], ":")
1703+ let iU = iT[0]
1704+ let iV = parseIntValue(iP[eA])
1705+ if (if ((iV > (lastBlock.timestamp + dY)))
16491706 then true
1650- else ((lastBlock.timestamp - dM) > iK))
1651- then throw(((("signature outdated: logTime=" + toString(iK)) + ", bcTime=") + toString(lastBlock.timestamp)))
1707+ else ((lastBlock.timestamp - dY) > iV))
1708+ then throw(((("signature outdated: logTime=" + toString(iV)) + ", bcTime=") + toString(lastBlock.timestamp)))
16521709 else {
1653- let iL = iI[1]
1654- let iM = valueOrElse(getString(dv(bK)), "")
1655- if ((iM != iL))
1656- then throw(((("Tx ids don't match! In state: " + iM) + ", in msg: ") + iL))
1710+ let iW = iT[1]
1711+ let iX = valueOrElse(getString(dI(bL)), "")
1712+ if ((iX != iW))
1713+ then throw(((("Tx ids don't match! In state: " + iX) + ", in msg: ") + iW))
16571714 else {
1658- let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
1659- let iN = z(A)
1660- let iO = ag(valueOrElse(getInteger(D(A)), 0))
1661- let iP = valueOrElse(getInteger(iN), iO)
1662- if ((iP != iG))
1663- then throw(((("oldHealth=" + toString(iP)) + " from state does not match one from flight log=") + toString(iG)))
1664- else if ((0 >= iG))
1715+ let A = valueOrErrorMessage(getString(bH(bL)), "You don't have a duck staked")
1716+ let iY = z(A)
1717+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
1718+ let ja = valueOrElse(getInteger(iY), iZ)
1719+ if ((ja != iR))
1720+ then throw(((("oldHealth=" + toString(ja)) + " from state does not match one from flight log=") + toString(iR)))
1721+ else if ((0 >= iR))
16651722 then throw("You can't fly with zero health")
1666- else if (!(gi(A)))
1723+ else if (!(gt(A)))
16671724 then throw("Equipment incompatible")
16681725 else {
1669- let iQ = if ((size(iE) > eq))
1670- then iE[eq]
1726+ let jb = if ((size(iP) > eB))
1727+ then iP[eB]
16711728 else ""
1672- let iR = if ((size(iE) > er))
1673- then iE[er]
1729+ let jc = if ((size(iP) > eC))
1730+ then iP[eC]
16741731 else ""
1675- let iS = if (if ((iH > 0))
1676- then (iQ == "$")
1732+ let jd = if (if ((iS > 0))
1733+ then (jb == "$")
16771734 else false)
1678- then do(invoke(cQ, "sendUsdtPrize", [bK], nil))
1735+ then dy(invoke(da, "sendUsdtPrize", [bL], nil))
16791736 else 0
1680- $Tuple5(iH, A, iS, iJ, iR)
1737+ $Tuple5(iS, A, jd, iU, jc)
16811738 }
16821739 }
16831740 }
16841741 }
16851742
16861743
1687-func iT (P,iU) = {
1688- let hM = valueOrElse(getInteger(bx(P)), 0)
1689- let iV = valueOrElse(getInteger(br(aE, P)), 0)
1690- let iW = (hM / 6)
1691- let iX = (hM / 7)
1692- ((aH + fraction(aH, ((hM + iW) + (2 * iX)), 5)) + fraction(aH, iV, (iU * 5)))
1693- }
1694-
1695-
1696-func iY (c,iZ,ja) = {
1697- let jb = if ((iZ == el))
1698- then $Tuple2(ja, valueOrElse(getString(bG(c)), ""))
1744+func je (P,jf) = {
1745+ let hX = valueOrElse(getInteger(by(P)), 0)
1746+ let jg = valueOrElse(getInteger(bs(aE, P)), 0)
1747+ let jh = (hX / 6)
1748+ let ji = (hX / 7)
1749+ ((aH + fraction(aH, ((hX + jh) + (2 * ji)), 5)) + fraction(aH, jg, (jf * 5)))
1750+ }
1751+
1752+
1753+func jj (c,jk,jl) = {
1754+ let jm = if ((jk == ew))
1755+ then $Tuple2(jl, valueOrElse(getString(bH(c)), ""))
16991756 else {
1700- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1701- let jc = valueOrElse(getString(bI(A)), aJ)
1702- let ce = split(value(jc), "_")
1703- if ((ce[bl] != "L"))
1704- then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
1705- else $Tuple2(ce[bm], A)
1706- }
1707- let P = jb._1
1708- let jd = jb._2
1709- let je = value(assetInfo(fromBase58String(P)))
1710- let jf = bq(P)
1711- let jg = valueOrErrorMessage(getInteger(jf), (("Land " + je.name) + " is not staked"))
1712- let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1713- if ((jh != c))
1757+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
1758+ let jn = valueOrElse(getString(bJ(A)), aJ)
1759+ let cf = split(value(jn), "_")
1760+ if ((cf[bm] != "L"))
1761+ then throw((("Duck location type is " + cf[bm]) + ", but should be L"))
1762+ else $Tuple2(cf[bn], A)
1763+ }
1764+ let P = jm._1
1765+ let jo = jm._2
1766+ let jp = value(assetInfo(fromBase58String(P)))
1767+ let jq = br(P)
1768+ let jr = valueOrErrorMessage(getInteger(jq), (("Land " + jp.name) + " is not staked"))
1769+ let js = valueOrErrorMessage(getString(bo(P)), (("NFT " + jp.name) + " is orphaned"))
1770+ if ((js != c))
17141771 then throw((aC + " is not yours"))
17151772 else {
1716- let ji = split(je.description, "_")
1717- $Tuple4(jd, P, ji, jg)
1718- }
1719- }
1720-
1721-
1722-func jj (c,eu,iZ,ja) = if ((0 > eu))
1773+ let jt = split(jp.description, "_")
1774+ $Tuple4(jo, P, jt, jr)
1775+ }
1776+ }
1777+
1778+
1779+func ju (c,eF,jk,jl) = if ((0 > eF))
17231780 then throw("Negative amount")
17241781 else {
1725- let fM = iY(c, iZ, ja)
1726- let ds = fM._3[cX]
1727- let gs = gy(fM._3[cY])
1728- let gC = (lastBlock.timestamp - fM._4)
1729- if ((0 > gC))
1730- then throw(((("Saved timestamp is in future, saved = " + toString(fM._4)) + ", current = ") + toString(lastBlock.timestamp)))
1782+ let fX = jj(c, jk, jl)
1783+ let dF = fX._3[dh]
1784+ let gD = gJ(fX._3[di])
1785+ let gN = (lastBlock.timestamp - fX._4)
1786+ if ((0 > gN))
1787+ then throw(((("Saved timestamp is in future, saved = " + toString(fX._4)) + ", current = ") + toString(lastBlock.timestamp)))
17311788 else {
1732- let iU = dr(ds)
1733- let jk = iT(fM._2, iU)
1734- let jl = fraction(gC, (jk * iU), a)
1735- if ((eu > jl))
1736- then throw(((("Not enough resources, available = " + toString(jl)) + ", requested = ") + toString(eu)))
1789+ let jf = dE(dF)
1790+ let jv = je(fX._2, jf)
1791+ let jw = fraction(gN, (jv * jf), a)
1792+ if ((eF > jw))
1793+ then throw(((("Not enough resources, available = " + toString(jw)) + ", requested = ") + toString(eF)))
17371794 else {
1738- let jm = fraction((jl - eu), a, (jk * iU))
1739- let jn = (lastBlock.timestamp - jm)
1740- let hL = (iU / cu)
1741- let gK = gG(gs, (gC - jm), hL, jk)
1742- let hK = bw(fM._2)
1743- let hM = valueOrElse(getInteger(bx(fM._2)), 0)
1744- let hB = hJ(hK, hL, hM)
1745- let hS = split(hB[bb], "_")
1746- let gL = parseIntValue(hS[be])
1747- if (if ((iZ == el))
1748- then (eu > gL)
1795+ let jx = fraction((jw - eF), a, (jv * jf))
1796+ let jy = (lastBlock.timestamp - jx)
1797+ let hW = (jf / cE)
1798+ let gV = gR(gD, (gN - jx), hW, jv)
1799+ let hV = bx(fX._2)
1800+ let hX = valueOrElse(getInteger(by(fX._2)), 0)
1801+ let hM = hU(hV, hW, hX)
1802+ let id = split(hM[bc], "_")
1803+ let gW = parseIntValue(id[bf])
1804+ if (if ((jk == ew))
1805+ then (eF > gW)
17491806 else false)
1750- then throw((("Only " + toString(gL)) + " space left in warehouse"))
1807+ then throw((("Only " + toString(gW)) + " space left in warehouse"))
17511808 else {
1752- let hx = bH(fM._1)
1753- let ia = hw(hx)
1754- let gJ = split(ia[bh], "_")
1755- let gI = split(hB[aY], "_")
1756- let jo = if ((iZ == el))
1757- then $Tuple4(gA(gI, gs, (gC - jm), hL, jk), ia[bh], (parseIntValue(hS[bd]) + gK._2), (parseIntValue(hS[be]) - gK._2))
1758- else if ((iZ == em))
1759- then $Tuple4(hB[aY], gA(gJ, gs, (gC - jm), hL, jk), parseIntValue(hS[bd]), parseIntValue(hS[be]))
1809+ let hI = bI(fX._1)
1810+ let il = hH(hI)
1811+ let gU = split(il[bi], "_")
1812+ let gT = split(hM[aZ], "_")
1813+ let jz = if ((jk == ew))
1814+ then $Tuple4(gL(gT, gD, (gN - jx), hW, jv), il[bi], (parseIntValue(id[be]) + gV._2), (parseIntValue(id[bf]) - gV._2))
1815+ else if ((jk == ex))
1816+ then $Tuple4(hM[aZ], gL(gU, gD, (gN - jx), hW, jv), parseIntValue(id[be]), parseIntValue(id[bf]))
17601817 else {
1761- let jp = gH(gI, gJ, gK, gL)
1762- let jq = min([parseIntValue(hS[be]), gK._2])
1763- $Tuple4(jp._1, jp._2, (parseIntValue(hS[bd]) + jq), (parseIntValue(hS[be]) - jq))
1818+ let jA = gS(gT, gU, gV, gW)
1819+ let jB = min([parseIntValue(id[bf]), gV._2])
1820+ $Tuple4(jA._1, jA._2, (parseIntValue(id[be]) + jB), (parseIntValue(id[bf]) - jB))
17641821 }
1765- let jr = jo._1
1766- let js = jo._2
1767- let jt = jo._3
1768- let ju = jo._4
1769- $Tuple5([IntegerEntry(bq(fM._2), jn), IntegerEntry(bt(aC, fM._2, c), jn)], hx, [ia[bg], js, ia[bi], ia[bj]], hK, [hB[aX], jr, hB[aZ], hB[ba], makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")])
1822+ let jC = jz._1
1823+ let jD = jz._2
1824+ let jE = jz._3
1825+ let jF = jz._4
1826+ $Tuple5([IntegerEntry(br(fX._2), jy), IntegerEntry(bu(aC, fX._2, c), jy)], hI, [il[bh], jD, il[bj], il[bk]], hV, [hM[aY], jC, hM[ba], hM[bb], makeString([id[bd], toString(jE), toString(jF), id[bg]], "_")])
17701827 }
17711828 }
17721829 }
17731830 }
17741831
17751832
1776-func jv (c,P,iU,iZ) = {
1777- let jf = bq(P)
1778- let jg = value(getInteger(jf))
1779- let jl = (fraction((lastBlock.timestamp - jg), iT(P, iU), a) * iU)
1780- jj(c, jl, iZ, P)
1781- }
1782-
1783-
1784-func jw (eQ,iv,jx,P) = {
1785- let c = toString(iv)
1786- let fM = iY(c, en, P)
1787- let iU = dr(fM._3[cX])
1788- let jy = bx(fM._2)
1789- let jz = valueOrElse(getInteger(jy), 0)
1790- if (if (!(cj))
1791- then (jz >= 3)
1833+func jG (c,P,jf,jk) = {
1834+ let jq = br(P)
1835+ let jr = value(getInteger(jq))
1836+ let jw = (fraction((lastBlock.timestamp - jr), je(P, jf), a) * jf)
1837+ ju(c, jw, jk, P)
1838+ }
1839+
1840+
1841+func jH (fb,iG,jI,P) = {
1842+ let c = toString(iG)
1843+ let fX = jj(c, ey, P)
1844+ let jf = dE(fX._3[dh])
1845+ let jJ = by(fX._2)
1846+ let jK = valueOrElse(getInteger(jJ), 0)
1847+ if (if (!(ct))
1848+ then (jK >= 3)
17921849 else false)
17931850 then throw("Currently max infrastructure level = 3")
17941851 else {
1795- let jA = ((sqrt(iU, 0, 0, DOWN) / 5) + 2)
1796- let al = (jz + 1)
1797- if (if (cj)
1798- then (al > jA)
1852+ let jL = ((sqrt(jf, 0, 0, DOWN) / 5) + 2)
1853+ let al = (jK + 1)
1854+ if (if (ct)
1855+ then (al > jL)
17991856 else false)
1800- then throw(("Currently max infrastructure level = " + toString(jA)))
1857+ then throw(("Currently max infrastructure level = " + toString(jL)))
18011858 else {
1802- let jB = fraction(dQ, (iU * al), cu)
1803- if (if (!(eQ))
1804- then (jx != jB)
1859+ let jM = fraction(eb, (jf * al), cE)
1860+ if (if (!(fb))
1861+ then (jI != jM)
18051862 else false)
1806- then throw(("Payment attached should be " + toString(jB)))
1863+ then throw(("Payment attached should be " + toString(jM)))
18071864 else {
1808- let hx = bH(fM._1)
1809- let ia = hw(hx)
1810- let jC = split(ia[bi], "_")
1811- let jD = fraction(cp, (iU * al), cu)
1812- let jE = makeString(eP(eQ, jC, jD), "_")
1813- let jF = jv(c, fM._2, iU, en)
1814- let jG = jF._5
1815- let jH = hy(jG[aX])
1816- let jI = makeString([split(jG[aX], "_")[0], toString(al)], "_")
1817- let jJ = hy(jI)
1818- let hS = split(jG[bb], "_")
1819- let jK = makeString([hS[bc], hS[bd], toString(((parseIntValue(hS[be]) + jJ) - jH)), toString(jJ)], "_")
1820- $Tuple3(([IntegerEntry(jy, al), IntegerEntry(eg(fM._2, c), al), StringEntry(hx, makeString([ia[bg], jF._3[bh], jE, ia[bj]], ":")), StringEntry(jF._4, makeString([jI, jG[aY], jG[aZ], jG[ba], jK], ":"))] ++ jF._1), al, jD)
1865+ let hI = bI(fX._1)
1866+ let il = hH(hI)
1867+ let jN = split(il[bj], "_")
1868+ let jO = fraction(cz, (jf * al), cE)
1869+ let jP = makeString(fa(fb, jN, jO), "_")
1870+ let jQ = jG(c, fX._2, jf, ey)
1871+ let jR = jQ._5
1872+ let jS = hJ(jR[aY])
1873+ let jT = makeString([split(jR[aY], "_")[0], toString(al)], "_")
1874+ let jU = hJ(jT)
1875+ let id = split(jR[bc], "_")
1876+ let jV = makeString([id[bd], id[be], toString(((parseIntValue(id[bf]) + jU) - jS)), toString(jU)], "_")
1877+ $Tuple3(([IntegerEntry(jJ, al), IntegerEntry(er(fX._2, c), al), StringEntry(hI, makeString([il[bh], jQ._3[bi], jP, il[bk]], ":")), StringEntry(jQ._4, makeString([jT, jR[aZ], jR[ba], jR[bb], jV], ":"))] ++ jQ._1), al, jO)
18211878 }
18221879 }
18231880 }
18241881 }
18251882
18261883
1827-func jL (A,jM) = {
1828- let jN = D(A)
1829- let jO = C(A)
1830- let af = valueOrElse(getInteger(an, jO), 0)
1831- let ak = (af + jM)
1832- let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1833- let jQ = E(A)
1834- $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1835- }
1836-
1837-
1838-func jR (c,jM) = {
1839- let jN = H(c)
1840- let jO = G(c)
1841- let af = valueOrElse(getInteger(an, jO), 0)
1842- let ak = (af + jM)
1843- let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1844- let jQ = I(c)
1845- $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1846- }
1847-
1848-
1849-func jS (c) = {
1850- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1851- let jT = bB(c)
1852- let jU = getString(jT)
1853- if (!(isDefined(jU)))
1884+func jW (A,jX) = {
1885+ let jY = D(A)
1886+ let jZ = C(A)
1887+ let af = valueOrElse(getInteger(an, jZ), 0)
1888+ let ak = (af + jX)
1889+ let ka = ai(valueOrElse(getInteger(an, jY), 0), ak)
1890+ let kb = E(A)
1891+ $Tuple2([IntegerEntry(jY, ka[0]), IntegerEntry(jZ, ak), IntegerEntry(kb, (valueOrElse(getInteger(kb), 0) + ka[1]))], ak)
1892+ }
1893+
1894+
1895+func kc (c,jX) = {
1896+ let jY = H(c)
1897+ let jZ = G(c)
1898+ let af = valueOrElse(getInteger(an, jZ), 0)
1899+ let ak = (af + jX)
1900+ let ka = ai(valueOrElse(getInteger(an, jY), 0), ak)
1901+ let kb = I(c)
1902+ $Tuple2([IntegerEntry(jY, ka[0]), IntegerEntry(jZ, ak), IntegerEntry(kb, (valueOrElse(getInteger(kb), 0) + ka[1]))], ak)
1903+ }
1904+
1905+
1906+func kd (c) = {
1907+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
1908+ let ke = bC(c)
1909+ let kf = getString(ke)
1910+ if (!(isDefined(kf)))
18541911 then throw("You are not eligible for ONBOARD artifact")
18551912 else {
1856- let jV = bD(c)
1857- let jW = getString(jV)
1858- if (isDefined(jW))
1859- then throw(("You already used your ONBOARD artifact on duck " + value(jW)))
1913+ let kg = bE(c)
1914+ let kh = getString(kg)
1915+ if (isDefined(kh))
1916+ then throw(("You already used your ONBOARD artifact on duck " + value(kh)))
18601917 else {
1861- let jX = bC(A)
1862- let jY = getString(jX)
1863- if (isDefined(jY))
1864- then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(jY)))
1865- else ([StringEntry(jV, A), StringEntry(jX, c)] ++ jL(A, ac)._1)
1918+ let ki = bD(A)
1919+ let kj = getString(ki)
1920+ if (isDefined(kj))
1921+ then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(kj)))
1922+ else ([StringEntry(kg, A), StringEntry(ki, c)] ++ jW(A, ac)._1)
18661923 }
18671924 }
18681925 }
18691926
18701927
1871-func jZ (c,ja) = {
1872- let fM = iY(c, en, ja)
1873- let P = fM._2
1874- let iU = dr(fM._3[cX])
1875- let ka = br(aE, P)
1876- if ((valueOrElse(getInteger(ka), 0) > 0))
1928+func kk (c,jl) = {
1929+ let fX = jj(c, ey, jl)
1930+ let P = fX._2
1931+ let jf = dE(fX._3[dh])
1932+ let kl = bs(aE, P)
1933+ if ((valueOrElse(getInteger(kl), 0) > 0))
18771934 then throw("Presale artifact is already activated")
1878- else if ((parseIntValue(fM._3[cW]) > ea))
1935+ else if ((parseIntValue(fX._3[dg]) > el))
18791936 then throw((((aC + " ") + P) + " is not eligible for presale artifact"))
18801937 else {
1881- let jF = jv(c, P, iU, en)
1882- (((jF._1 :+ IntegerEntry(ka, iU)) :+ StringEntry(jF._2, makeString(jF._3, ":"))) :+ StringEntry(jF._4, makeString(jF._5, ":")))
1938+ let jQ = jG(c, P, jf, ey)
1939+ (((jQ._1 :+ IntegerEntry(kl, jf)) :+ StringEntry(jQ._2, makeString(jQ._3, ":"))) :+ StringEntry(jQ._4, makeString(jQ._5, ":")))
18831940 }
18841941 }
18851942
18861943
1887-func kb (A) = {
1888- let cd = valueOrElse(getInteger(cU, bO), 0)
1889- let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1944+func km (A) = {
1945+ let ce = valueOrElse(getInteger(de, bP), 0)
1946+ let jn = split(valueOrElse(getString(bJ(A)), aJ), "_")
18901947 let ax = lastBlock.timestamp
1891- let cf = bX(cU, cd)
1892- let bZ = cf[bT]
1893- let ca = cf[bU]
1894- if ((jc[bl] != "T"))
1948+ let cg = bY(de, ce)
1949+ let ca = cg[bU]
1950+ let cb = cg[bV]
1951+ if ((jn[bm] != "T"))
18951952 then false
1896- else if (if (if ((parseIntValue(jc[bk]) == cd))
1897- then (ca[bW] == "INPROGRESS")
1953+ else if (if (if ((parseIntValue(jn[bl]) == ce))
1954+ then (cb[bX] == "INPROGRESS")
18981955 else false)
1899- then (parseIntValue(bZ[bV]) > ax)
1956+ then (parseIntValue(ca[bW]) > ax)
19001957 else false)
19011958 then throw("Your duck is taking part in the tournament")
1902- else dq(invoke(this, "exitTournamentInternal", [A], nil))
1903- }
1904-
1905-
1906-func kc (A) = {
1907- let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1959+ else dA(invoke(this, "exitTournamentInternal", [A], nil))
1960+ }
1961+
1962+
1963+func kn (A) = {
1964+ let jn = split(valueOrElse(getString(bJ(A)), aJ), "_")
19081965 let ax = lastBlock.timestamp
1909- if ((jc[bl] != "D"))
1966+ if ((jn[bm] != "D"))
19101967 then false
19111968 else {
1912- let kd = parseIntValue(jc[bk])
1913- let ke = parseIntValue(jc[bm])
1914- if (if ((ax > (kd + dN)))
1915- then (3 > ke)
1969+ let ci = parseIntValue(jn[bl])
1970+ let cj = parseIntValue(jn[bn])
1971+ if (if ((ax > (ci + aN)))
1972+ then (3 > cj)
19161973 else false)
19171974 then throw("Your duck is on delivery mission")
1918- else dq(invoke(this, "exitDeliveryInternal", [A], nil))
1919- }
1920- }
1921-
1922-
1923-func kf (kg,al,kh,c,ki,kj) = {
1924- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1925- if (kb(A))
1975+ else dA(invoke(this, "exitDeliveryInternal", [A], nil))
1976+ }
1977+ }
1978+
1979+
1980+func ko (A) = {
1981+ let jn = split(valueOrElse(getString(bJ(A)), aJ), "_")
1982+ let ax = lastBlock.timestamp
1983+ let ci = parseIntValue(jn[bl])
1984+ let cj = parseIntValue(jn[bn])
1985+ let js = valueOrErrorMessage(getString(bG(A)), "NFT duck is orphaned")
1986+ let kp = z(A)
1987+ let kq = getIntegerValue(kp)
1988+ let kr = if ((cj >= 3))
1989+ then {
1990+ let ks = invoke(db, "sendDeliveryReward", [js], nil)
1991+ if ((ks == ks))
1992+ then nil
1993+ else throw("Strict value is not equal to itself.")
1994+ }
1995+ else if ((ax > (ci + aN)))
1996+ then throw("Your duck is still on delivery mission")
1997+ else {
1998+ let kt = valueOrElse(getInteger(db, bO), 0)
1999+ let ku = invoke(db, "updateDeliveryLocked", [(kt - aM)], nil)
2000+ if ((ku == ku))
2001+ then if ((0 >= kq))
2002+ then nil
2003+ else [IntegerEntry(T(A), (ci + a))]
2004+ else throw("Strict value is not equal to itself.")
2005+ }
2006+ let kv = getIntegerValue(J(A))
2007+ let kw = getStringValue(K(A))
2008+ $Tuple4(kr, [IntegerEntry(kp, kv), StringEntry(bJ(A), kw)], kw, kv)
2009+ }
2010+
2011+
2012+func kx (ky,al,kz,c,kA,kB) = {
2013+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
2014+ if (km(A))
19262015 then throw("mergeInternal_checkTournament")
1927- else if (kc(A))
2016+ else if (kn(A))
19282017 then throw("mergeInternal_checkDelivery")
19292018 else {
1930- func kk (eD,P) = {
1931- let je = value(assetInfo(fromBase58String(P)))
1932- let jf = bq(P)
1933- let jg = valueOrErrorMessage(getInteger(jf), (("NFT " + je.name) + " is not staked"))
1934- let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1935- if ((jh != c))
2019+ func kC (eO,P) = {
2020+ let jp = value(assetInfo(fromBase58String(P)))
2021+ let jq = br(P)
2022+ let jr = valueOrErrorMessage(getInteger(jq), (("NFT " + jp.name) + " is not staked"))
2023+ let js = valueOrErrorMessage(getString(bo(P)), (("NFT " + jp.name) + " is orphaned"))
2024+ if ((js != c))
19362025 then throw((aC + " is not yours"))
19372026 else {
1938- let ji = split(je.description, "_")
1939- let di = ji[cZ]
1940- if (if ((eD._3 != ""))
1941- then (eD._3 != di)
2027+ let jt = split(jp.description, "_")
2028+ let ds = jt[dj]
2029+ if (if ((eO._3 != ""))
2030+ then (eO._3 != ds)
19422031 else false)
19432032 then throw("Lands should be on the same continent to merge")
19442033 else {
1945- let ds = ji[cX]
1946- let kl = eD._1
1947- let gw = valueOrErrorMessage(indexOf(kl, ds), "You haven't passed all the lands needed")
1948- let km = (take(kl, gw) + drop(kl, (gw + 1)))
1949- let iU = dr(ds)
1950- let kn = (eD._2 + valueOrElse(getInteger(br(aE, P)), 0))
1951- let hM = valueOrElse(getInteger(bx(P)), 0)
1952- let ko = {
1953- let cn = ds
1954- if (("S" == cn))
2034+ let dF = jt[dh]
2035+ let kD = eO._1
2036+ let gH = valueOrErrorMessage(indexOf(kD, dF), "You haven't passed all the lands needed")
2037+ let kE = (take(kD, gH) + drop(kD, (gH + 1)))
2038+ let jf = dE(dF)
2039+ let kF = (eO._2 + valueOrElse(getInteger(bs(aE, P)), 0))
2040+ let hX = valueOrElse(getInteger(by(P)), 0)
2041+ let kG = {
2042+ let cx = dF
2043+ if (("S" == cx))
19552044 then 3
1956- else if (("M" == cn))
2045+ else if (("M" == cx))
19572046 then 4
1958- else if (("L" == cn))
2047+ else if (("L" == cx))
19592048 then 5
1960- else if (("XL" == cn))
2049+ else if (("XL" == cx))
19612050 then 6
19622051 else throw("Only S, M, L, XL can merge")
19632052 }
1964- if ((hM != ko))
2053+ if ((hX != kG))
19652054 then throw("All lands should be maxed to merge")
19662055 else {
1967- let ef = ji[cW]
1968- let gs = gy(ji[cY])
1969- let gC = (lastBlock.timestamp - jg)
1970- if ((0 > gC))
1971- then throw(((("Saved timestamp is in future, saved = " + toString(jg)) + ", current = ") + toString(lastBlock.timestamp)))
2056+ let eq = jt[dg]
2057+ let gD = gJ(jt[di])
2058+ let gN = (lastBlock.timestamp - jr)
2059+ if ((0 > gN))
2060+ then throw(((("Saved timestamp is in future, saved = " + toString(jr)) + ", current = ") + toString(lastBlock.timestamp)))
19722061 else {
1973- let jk = iT(P, iU)
1974- let hL = (iU / cu)
1975- let js = gA(split(eD._4, "_"), gs, gC, hL, jk)
1976- let eN = gq(eD._6, gs, hL, -1)
1977- let kp = gq(eD._10, gs, hL, -1)
1978- let hg = gq(eD._9, gs, hL, 1)
1979- let kq = eD._7
1980- let cP = indexOf(kq, P)
1981- if (!(isDefined(cP)))
2062+ let jv = je(P, jf)
2063+ let hW = (jf / cE)
2064+ let jD = gL(split(eO._4, "_"), gD, gN, hW, jv)
2065+ let eY = gB(eO._6, gD, hW, -1)
2066+ let kH = gB(eO._10, gD, hW, -1)
2067+ let hr = gB(eO._9, gD, hW, 1)
2068+ let kI = eO._7
2069+ let cZ = indexOf(kI, P)
2070+ if (!(isDefined(cZ)))
19822071 then throw(("Your staked lands don't contain " + P))
19832072 else {
1984- let kr = bp(P)
1985- let ks = valueOrElse(getString(kr), "")
1986- $Tuple10(km, kn, di, js, ((((((((((((eD._5 :+ DeleteEntry(bq(P))) :+ DeleteEntry(bt(aC, P, c))) :+ DeleteEntry(ee(ef))) :+ DeleteEntry(bn(P))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(eg(P, c))) :+ DeleteEntry(br(aE, P))) :+ DeleteEntry(eh(ef))) :+ DeleteEntry(bw(P))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(P), 1)) ++ (if ((ks != ""))
1987- then [DeleteEntry(ec(ks))]
1988- else nil)), eN, removeByIndex(kq, value(cP)), (eD._8 + iU), hg, kp)
2073+ let kJ = bq(P)
2074+ let kK = valueOrElse(getString(kJ), "")
2075+ $Tuple10(kE, kF, ds, jD, ((((((((((((eO._5 :+ DeleteEntry(br(P))) :+ DeleteEntry(bu(aC, P, c))) :+ DeleteEntry(ep(eq))) :+ DeleteEntry(bo(P))) :+ DeleteEntry(by(P))) :+ DeleteEntry(er(P, c))) :+ DeleteEntry(bs(aE, P))) :+ DeleteEntry(es(eq))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(kJ)) :+ Burn(fromBase58String(P), 1)) ++ (if ((kK != ""))
2076+ then [DeleteEntry(en(kK))]
2077+ else nil)), eY, removeByIndex(kI, value(cZ)), (eO._8 + jf), hr, kH)
19892078 }
19902079 }
19912080 }
19922081 }
19932082 }
19942083 }
19952084
1996- let hx = bH(A)
1997- let ia = hw(hx)
1998- let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1999- let kt = dj(c)
2000- let ku = getString(kt)
2001- let kv = if (isDefined(ku))
2002- then split_51C(value(ku), "_")
2085+ let hI = bI(A)
2086+ let il = hH(hI)
2087+ let gC = split(valueOrElse(getString(dq()), "0_0_0_0_0_0"), "_")
2088+ let kL = dt(c)
2089+ let kM = getString(kL)
2090+ let kN = if (isDefined(kM))
2091+ then split_51C(value(kM), "_")
20032092 else nil
2004- let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
2005- let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
2006- let eO = {
2007- let eF = ki
2008- let eG = size(eF)
2009- let eH = $Tuple10(kh, 0, "", ia[bh], nil, gr, kv, 0, split("0_0_0_0_0_0", "_"), kx)
2010- func eI (eJ,eK) = if ((eK >= eG))
2011- then eJ
2012- else kk(eJ, eF[eK])
2013-
2014- func eL (eJ,eK) = if ((eK >= eG))
2015- then eJ
2093+ let kO = split(value(assetInfo(fromBase58String(kA[0]))).description, "_")[dj]
2094+ let kP = split(valueOrElse(getString(dr(kO)), "0_0_0_0_0_0"), "_")
2095+ let eZ = {
2096+ let eQ = kA
2097+ let eR = size(eQ)
2098+ let eS = $Tuple10(kz, 0, "", il[bi], nil, gC, kN, 0, split("0_0_0_0_0_0", "_"), kP)
2099+ func eT (eU,eV) = if ((eV >= eR))
2100+ then eU
2101+ else kC(eU, eQ[eV])
2102+
2103+ func eW (eU,eV) = if ((eV >= eR))
2104+ then eU
20162105 else throw("List size exceeds 5")
20172106
2018- eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2107+ eW(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5)
20192108 }
2020- let di = eO._3
2021- let ha = valueOrErrorMessage(indexOf(aO, di), ("Unknown continent: " + di))
2022- let gz = hf(eO._9, (dr(kg) / cu))
2023- let iy = valueOrElse(getInteger(eb()), (ea + 1))
2024- let ky = toString(iy)
2025- let iz = Issue(es(ky, kg), makeString([ky, kg, gz, di], "_"), 1, 0, false)
2026- let bo = calculateAssetId(iz)
2027- let kz = toBase58String(bo)
2028- let jE = makeString(eP((kj > 0), split(ia[bi], "_"), kj), "_")
2029- let kA = dk(c)
2030- let kB = valueOrElse(getInteger(kA), 0)
2031- $Tuple2((((((((((((((((eO._5 :+ (if ((size(eO._7) > 0))
2032- then StringEntry(kt, makeString_11C(eO._7, "_"))
2033- else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eO._8 > kB))
2109+ let ds = eZ._3
2110+ let hl = valueOrErrorMessage(indexOf(aP, ds), ("Unknown continent: " + ds))
2111+ let gK = hq(eZ._9, (dE(ky) / cE))
2112+ let iJ = valueOrElse(getInteger(em()), (el + 1))
2113+ let kQ = toString(iJ)
2114+ let iK = Issue(eD(kQ, ky), makeString([kQ, ky, gK, ds], "_"), 1, 0, false)
2115+ let bp = calculateAssetId(iK)
2116+ let kR = toBase58String(bp)
2117+ let jP = makeString(fa((kB > 0), split(il[bj], "_"), kB), "_")
2118+ let kS = du(c)
2119+ let kT = valueOrElse(getInteger(kS), 0)
2120+ $Tuple2((((((((((((((((eZ._5 :+ (if ((size(eZ._7) > 0))
2121+ then StringEntry(kL, makeString_11C(eZ._7, "_"))
2122+ else DeleteEntry(kL))) :+ IntegerEntry(kS, if ((eZ._8 > kT))
20342123 then 0
2035- else (kB - eO._8))) :+ IntegerEntry(eb(), (iy + 1))) :+ iz) :+ StringEntry(ee(ky), kz)) :+ StringEntry(bn(kz), c)) :+ StringEntry(eh(ky), c)) :+ IntegerEntry(br(aE, kz), eO._2)) :+ IntegerEntry(bx(kz), al)) :+ IntegerEntry(eg(kz, c), al)) :+ StringEntry(hx, makeString([ia[bg], eO._4, jE, ia[bj]], ":"))) :+ StringEntry(dg(), makeString(eO._6, "_"))) :+ StringEntry(dh(di), makeString(eO._10, "_"))) :+ StringEntry(bI(A), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bo)), kz)
2124+ else (kT - eZ._8))) :+ IntegerEntry(em(), (iJ + 1))) :+ iK) :+ StringEntry(ep(kQ), kR)) :+ StringEntry(bo(kR), c)) :+ StringEntry(es(kQ), c)) :+ IntegerEntry(bs(aE, kR), eZ._2)) :+ IntegerEntry(by(kR), al)) :+ IntegerEntry(er(kR, c), al)) :+ StringEntry(hI, makeString([il[bh], eZ._4, jP, il[bk]], ":"))) :+ StringEntry(dq(), makeString(eZ._6, "_"))) :+ StringEntry(dr(ds), makeString(eZ._10, "_"))) :+ StringEntry(bJ(A), makeString([ds, "L", kR], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bp)), kR)
20362125 }
20372126 }
20382127
20392128
2040-func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
2041-
2042-
2043-func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
2044-
2045-
2046-func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
2047-
2048-
2049-func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
2050-
2051-
2052-func kG (c,ki) = {
2053- let cn = size(ki)
2054- if ((4 == cn))
2055- then kC(c, ki)
2056- else if ((3 == cn))
2057- then kD(c, ki)
2058- else if ((5 == cn))
2059- then kE(c, ki)
2060- else if ((2 == cn))
2061- then kF(c, ki)
2129+func kU (c,kA) = kx("M", 3, "SSSS", c, kA, 0)
2130+
2131+
2132+func kV (c,kA) = kx("L", 4, "SMM", c, kA, (cz * 4))
2133+
2134+
2135+func kW (c,kA) = kx("XL", 5, "SSSML", c, kA, (cz * 47))
2136+
2137+
2138+func kX (c,kA) = kx("XXL", 6, "LXL", c, kA, (cz * 54))
2139+
2140+
2141+func kY (c,kA) = {
2142+ let cx = size(kA)
2143+ if ((4 == cx))
2144+ then kU(c, kA)
2145+ else if ((3 == cx))
2146+ then kV(c, kA)
2147+ else if ((5 == cx))
2148+ then kW(c, kA)
2149+ else if ((2 == cx))
2150+ then kX(c, kA)
20622151 else throw("Unknown merge")
20632152 }
20642153
20652154
2066-func kH (gw) = if (if ((gw.originCaller != cQ))
2067- then valueOrElse(getBoolean(du()), false)
2155+func kZ (gH) = if (if ((gH.originCaller != da))
2156+ then valueOrElse(getBoolean(dH()), false)
20682157 else false)
20692158 then throw("Contracts are under maintenance")
2070- else StringEntry(dv(toString(gw.originCaller)), toBase58String(gw.transactionId))
2071-
2072-
2073-@Callable(gw)
2074-func constructorV1 (kI) = if ((gw.caller != this))
2159+ else StringEntry(dI(toString(gH.originCaller)), toBase58String(gH.transactionId))
2160+
2161+
2162+@Callable(gH)
2163+func constructorV1 (la) = if ((gH.caller != this))
20752164 then throw("Permission denied")
2076- else [StringEntry(cK(), kI)]
2077-
2078-
2079-
2080-@Callable(gw)
2081-func setBlocked (kJ) = if ((gw.caller != this))
2165+ else [StringEntry(cU(), la)]
2166+
2167+
2168+
2169+@Callable(gH)
2170+func setBlocked (lb) = if ((gH.caller != this))
20822171 then throw("permission denied")
2083- else [BooleanEntry(du(), kJ)]
2084-
2085-
2086-
2087-@Callable(gw)
2172+ else [BooleanEntry(dH(), lb)]
2173+
2174+
2175+
2176+@Callable(gH)
20882177 func stakeLand () = {
2089- let kK = kH(gw)
2090- if ((size(gw.payments) != 1))
2178+ let lc = kZ(gH)
2179+ if ((size(gH.payments) != 1))
20912180 then throw("Exactly one payment required")
20922181 else {
2093- let kL = value(gw.payments[0])
2094- let bo = value(kL.assetId)
2095- let cB = toString(gw.caller)
2096- if ((kL.amount != 1))
2182+ let ld = value(gH.payments[0])
2183+ let bp = value(ld.assetId)
2184+ let cL = toString(gH.caller)
2185+ if ((ld.amount != 1))
20972186 then throw((("NFT " + aC) + " token should be attached as payment"))
20982187 else {
2099- let je = value(assetInfo(bo))
2100- if ((je.issuer != this))
2188+ let jp = value(assetInfo(bp))
2189+ if ((jp.issuer != this))
21012190 then throw("Unknown issuer of token")
2102- else if (!(contains(je.name, aC)))
2191+ else if (!(contains(jp.name, aC)))
21032192 then throw((("Only NFT " + aC) + " tokens are accepted"))
21042193 else {
2105- let kM = drop(je.name, 4)
2106- let ef = if (contains(kM, "XXL"))
2107- then dropRight(kM, 3)
2108- else if (contains(kM, "XL"))
2109- then dropRight(kM, 2)
2110- else dropRight(kM, 1)
2111- if (!(isDefined(parseInt(ef))))
2112- then throw(("Cannot parse land number from " + je.name))
2194+ let le = drop(jp.name, 4)
2195+ let eq = if (contains(le, "XXL"))
2196+ then dropRight(le, 3)
2197+ else if (contains(le, "XL"))
2198+ then dropRight(le, 2)
2199+ else dropRight(le, 1)
2200+ if (!(isDefined(parseInt(eq))))
2201+ then throw(("Cannot parse land number from " + jp.name))
21132202 else {
2114- let P = toBase58String(bo)
2115- let jf = bq(P)
2116- if (isDefined(getInteger(jf)))
2117- then throw((("NFT " + je.name) + " is already staked"))
2203+ let P = toBase58String(bp)
2204+ let jq = br(P)
2205+ if (isDefined(getInteger(jq)))
2206+ then throw((("NFT " + jp.name) + " is already staked"))
21182207 else {
2119- let ji = split(je.description, "_")
2120- let gs = gy(ji[cY])
2121- let iU = dr(ji[cX])
2122- let hL = (iU / cu)
2123- let eN = gx(gs, hL, 1)
2124- let kN = dh(ji[cZ])
2125- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2126- let kO = makeString(gq(kx, gs, hL, 1), "_")
2127- let kt = dj(cB)
2128- let ku = getString(kt)
2129- let kq = if (isDefined(ku))
2130- then split_51C(value(ku), "_")
2208+ let jt = split(jp.description, "_")
2209+ let gD = gJ(jt[di])
2210+ let jf = dE(jt[dh])
2211+ let hW = (jf / cE)
2212+ let eY = gI(gD, hW, 1)
2213+ let lf = dr(jt[dj])
2214+ let kP = split(valueOrElse(getString(lf), "0_0_0_0_0_0"), "_")
2215+ let lg = makeString(gB(kP, gD, hW, 1), "_")
2216+ let kL = dt(cL)
2217+ let kM = getString(kL)
2218+ let kI = if (isDefined(kM))
2219+ then split_51C(value(kM), "_")
21312220 else nil
2132- if (containsElement(kq, P))
2221+ if (containsElement(kI, P))
21332222 then throw(("Your staked lands already contain " + P))
2134- else if ((size(kq) >= aG))
2223+ else if ((size(kI) >= aG))
21352224 then throw((("Your already staked max (" + toString(aG)) + ") lands"))
21362225 else {
2137- let hM = valueOrElse(getInteger(bx(P)), 0)
2138- let kA = dk(cB)
2139- let kP = valueOrElse(getInteger(kA), 0)
2140- let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2141- $Tuple2([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aC, P, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ P), "_")), IntegerEntry(kA, (kP + iU)), StringEntry(bn(P), cB), StringEntry(eh(ef), cB), IntegerEntry(eg(P, cB), hM), StringEntry(dg(), eN), StringEntry(kN, kO), kK], kQ)
2226+ let hX = valueOrElse(getInteger(by(P)), 0)
2227+ let kS = du(cL)
2228+ let lh = valueOrElse(getInteger(kS), 0)
2229+ let li = invoke(dd, "onStakeUnstakeLand", [cL], nil)
2230+ $Tuple2([IntegerEntry(jq, lastBlock.timestamp), IntegerEntry(bu(aC, P, cL), lastBlock.timestamp), StringEntry(kL, makeString_11C((kI :+ P), "_")), IntegerEntry(kS, (lh + jf)), StringEntry(bo(P), cL), StringEntry(es(eq), cL), IntegerEntry(er(P, cL), hX), StringEntry(dq(), eY), StringEntry(lf, lg), lc], li)
21422231 }
21432232 }
21442233 }
21452234 }
21462235 }
21472236 }
21482237 }
21492238
21502239
21512240
2152-@Callable(gw)
2153-func unstakeLand (ja) = {
2154- let kK = kH(gw)
2155- if ((size(gw.payments) != 0))
2241+@Callable(gH)
2242+func unstakeLand (jl) = {
2243+ let lc = kZ(gH)
2244+ if ((size(gH.payments) != 0))
21562245 then throw("No payments required")
21572246 else {
2158- let c = toString(gw.caller)
2159- let fM = iY(c, em, ja)
2160- let P = fM._2
2161- let ji = fM._3
2162- let kt = dj(c)
2163- let gs = gy(ji[cY])
2164- let iU = dr(ji[cX])
2165- let hL = (iU / cu)
2166- let eN = gx(gs, hL, -1)
2167- let kN = dh(ji[cZ])
2168- let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2169- let kO = makeString(gq(kx, gs, hL, -1), "_")
2170- let jF = jv(c, P, iU, em)
2171- let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2172- let cP = indexOf(kq, P)
2173- if (!(isDefined(cP)))
2247+ let c = toString(gH.caller)
2248+ let fX = jj(c, ex, jl)
2249+ let P = fX._2
2250+ let jt = fX._3
2251+ let kL = dt(c)
2252+ let gD = gJ(jt[di])
2253+ let jf = dE(jt[dh])
2254+ let hW = (jf / cE)
2255+ let eY = gI(gD, hW, -1)
2256+ let lf = dr(jt[dj])
2257+ let kP = split(valueOrElse(getString(lf), "0_0_0_0_0_0"), "_")
2258+ let lg = makeString(gB(kP, gD, hW, -1), "_")
2259+ let jQ = jG(c, P, jf, ex)
2260+ let kI = split_51C(valueOrElse(getString(kL), ""), "_")
2261+ let cZ = indexOf(kI, P)
2262+ if (!(isDefined(cZ)))
21742263 then throw(("Your staked lands don't contain " + P))
21752264 else {
21762265 let ax = lastBlock.timestamp
2177- let kR = valueOrElse(getInteger(cS, bJ(c)), 0)
2178- if ((kR >= ax))
2179- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
2266+ let lj = valueOrElse(getInteger(dc, bK(c)), 0)
2267+ if ((lj >= ax))
2268+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lj)))
21802269 else {
2181- let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2182- if ((kS > ax))
2183- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
2270+ let lk = (valueOrElse(getInteger(dd, b(c)), 0) + cA)
2271+ if ((lk > ax))
2272+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lk)))
21842273 else {
2185- let kA = dk(c)
2186- let kB = valueOrElse(getInteger(kA), 0)
2187- let kT = if ((iU > kB))
2274+ let kS = du(c)
2275+ let kT = valueOrElse(getInteger(kS), 0)
2276+ let ll = if ((jf > kT))
21882277 then 0
2189- else (kB - iU)
2190- let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2191- $Tuple2([ScriptTransfer(gw.caller, 1, fromBase58String(P)), DeleteEntry(bq(P)), DeleteEntry(bt(aC, P, c)), StringEntry(dg(), eN), StringEntry(kN, kO), StringEntry(jF._2, makeString(jF._3, ":")), if ((size(kq) > 1))
2192- then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2193- else DeleteEntry(kt), IntegerEntry(kA, kT), kK], kQ)
2278+ else (kT - jf)
2279+ let li = invoke(dd, "onStakeUnstakeLand", [c], nil)
2280+ $Tuple2([ScriptTransfer(gH.caller, 1, fromBase58String(P)), DeleteEntry(br(P)), DeleteEntry(bu(aC, P, c)), StringEntry(dq(), eY), StringEntry(lf, lg), StringEntry(jQ._2, makeString(jQ._3, ":")), if ((size(kI) > 1))
2281+ then StringEntry(kL, makeString_11C(removeByIndex(kI, value(cZ)), "_"))
2282+ else DeleteEntry(kL), IntegerEntry(kS, ll), lc], li)
21942283 }
21952284 }
21962285 }
21972286 }
21982287 }
21992288
22002289
22012290
2202-@Callable(gw)
2291+@Callable(gH)
22032292 func stakeDuck () = {
2204- let kK = kH(gw)
2205- if ((size(gw.payments) != 1))
2293+ let lc = kZ(gH)
2294+ if ((size(gH.payments) != 1))
22062295 then throw("Exactly one payment required")
22072296 else {
2208- let kL = value(gw.payments[0])
2209- let bo = value(kL.assetId)
2210- let cB = toString(gw.caller)
2211- if ((kL.amount != 1))
2297+ let ld = value(gH.payments[0])
2298+ let bp = value(ld.assetId)
2299+ let cL = toString(gH.caller)
2300+ if ((ld.amount != 1))
22122301 then throw((("NFT " + aD) + " token should be attached as payment"))
22132302 else {
2214- let je = value(assetInfo(bo))
2215- if (if ((je.issuer != dI))
2216- then (je.issuer != dJ)
2303+ let jp = value(assetInfo(bp))
2304+ if (if ((jp.issuer != dU))
2305+ then (jp.issuer != dV)
22172306 else false)
22182307 then throw((("Unknown issuer of " + aD) + " token"))
2219- else if (!(contains(je.name, aD)))
2308+ else if (!(contains(jp.name, aD)))
22202309 then throw((("Only NFT " + aD) + " tokens are accepted"))
22212310 else {
2222- let kU = toBase58String(bo)
2223- let jf = bq(kU)
2224- if (isDefined(getInteger(jf)))
2225- then throw((("NFT " + je.name) + " is already staked"))
2226- else if (isDefined(getString(bG(cB))))
2227- then throw(("You already staked one duck: " + je.name))
2311+ let lm = toBase58String(bp)
2312+ let jq = br(lm)
2313+ if (isDefined(getInteger(jq)))
2314+ then throw((("NFT " + jp.name) + " is already staked"))
2315+ else if (isDefined(getString(bH(cL))))
2316+ then throw(("You already staked one duck: " + jp.name))
22282317 else {
2229- let kV = bI(kU)
2230- let cc = getString(kV)
2231- let hx = bH(kU)
2232- let kW = getString(hx)
2233- let iN = z(kU)
2234- let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2235- let kX = valueOrElse(getInteger(iN), iO)
2236- ([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aD, toBase58String(bo), cB), lastBlock.timestamp), StringEntry(bF(kU), cB), StringEntry(bG(cB), kU)] ++ (if (isDefined(cc))
2318+ let ln = bJ(lm)
2319+ let cd = getString(ln)
2320+ let hI = bI(lm)
2321+ let lo = getString(hI)
2322+ let iY = z(lm)
2323+ let iZ = ag(valueOrElse(getInteger(D(lm)), 0))
2324+ let kq = valueOrElse(getInteger(iY), iZ)
2325+ ([IntegerEntry(jq, lastBlock.timestamp), IntegerEntry(bu(aD, toBase58String(bp), cL), lastBlock.timestamp), StringEntry(bG(lm), cL), StringEntry(bH(cL), lm)] ++ (if (isDefined(cd))
22372326 then nil
2238- else ([StringEntry(kV, aJ)] ++ (if (isDefined(kW))
2327+ else ([StringEntry(ln, aJ)] ++ (if (isDefined(lo))
22392328 then nil
2240- else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iN, kX)) :+ kK)))))
2329+ else (([StringEntry(hI, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iY, kq)) :+ lc)))))
22412330 }
22422331 }
22432332 }
22442333 }
22452334 }
22462335
22472336
22482337
2249-@Callable(gw)
2250-func unstakeDuck (kU) = {
2251- let kK = kH(gw)
2252- if ((size(gw.payments) != 0))
2338+@Callable(gH)
2339+func unstakeDuck (lm) = {
2340+ let lc = kZ(gH)
2341+ if ((size(gH.payments) != 0))
22532342 then throw("No payments required")
22542343 else {
2255- let bo = fromBase58String(kU)
2256- let cB = toString(gw.caller)
2257- let je = value(assetInfo(bo))
2258- let jf = bq(kU)
2259- if (!(isDefined(getInteger(jf))))
2260- then throw((("NFT " + je.name) + " is not staked"))
2261- else if (!(isDefined(getString(bG(cB)))))
2262- then throw((("The duck " + je.name) + " is not staked"))
2344+ let bp = fromBase58String(lm)
2345+ let cL = toString(gH.caller)
2346+ let jp = value(assetInfo(bp))
2347+ let jq = br(lm)
2348+ if (!(isDefined(getInteger(jq))))
2349+ then throw((("NFT " + jp.name) + " is not staked"))
2350+ else if (!(isDefined(getString(bH(cL)))))
2351+ then throw((("The duck " + jp.name) + " is not staked"))
22632352 else {
2264- let jh = valueOrErrorMessage(getString(bF(kU)), (("NFT " + je.name) + " is orphaned"))
2265- if ((jh != cB))
2353+ let js = valueOrErrorMessage(getString(bG(lm)), (("NFT " + jp.name) + " is orphaned"))
2354+ if ((js != cL))
22662355 then throw("Staked NFT is not yours")
2267- else if (kb(kU))
2356+ else if (km(lm))
22682357 then throw("unstakeDuck_checkTournament")
2269- else if (kc(kU))
2358+ else if (kn(lm))
22702359 then throw("unstakeDuck_checkDelivery")
22712360 else {
2272- let iN = z(kU)
2273- let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2274- let as = valueOrElse(getInteger(iN), iO)
2275- if ((iO > as))
2276- then throw((("Please heal your duck to " + toString(iO)) + "hp before unstaking"))
2277- else [ScriptTransfer(gw.caller, 1, bo), DeleteEntry(jf), DeleteEntry(iN), DeleteEntry(bI(kU)), DeleteEntry(bF(kU)), DeleteEntry(bt(aD, kU, cB)), DeleteEntry(bG(cB)), kK]
2361+ let iY = z(lm)
2362+ let iZ = ag(valueOrElse(getInteger(D(lm)), 0))
2363+ let as = valueOrElse(getInteger(iY), iZ)
2364+ if ((iZ > as))
2365+ then throw((("Please heal your duck to " + toString(iZ)) + "hp before unstaking"))
2366+ else [ScriptTransfer(gH.caller, 1, bp), DeleteEntry(jq), DeleteEntry(iY), DeleteEntry(bJ(lm)), DeleteEntry(bG(lm)), DeleteEntry(bu(aD, lm, cL)), DeleteEntry(bH(cL)), lc]
22782367 }
22792368 }
22802369 }
22812370 }
22822371
22832372
22842373
2285-@Callable(gw)
2286-func claimRes (eu,kY) = {
2287- let kK = kH(gw)
2288- if ((size(gw.payments) != 0))
2374+@Callable(gH)
2375+func claimRes (eF,lp) = {
2376+ let lc = kZ(gH)
2377+ if ((size(gH.payments) != 0))
22892378 then throw("No payments required")
22902379 else {
2291- let c = toString(gw.originCaller)
2292- let eV = jj(c, eu, em, kY)
2293- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2294- $Tuple2(((((eV._1 ++ jL(A, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._3[bh])
2295- }
2296- }
2297-
2298-
2299-
2300-@Callable(gw)
2301-func claimResToWH (eu,kY) = {
2302- let kK = kH(gw)
2303- if ((size(gw.payments) != 0))
2380+ let c = toString(gH.originCaller)
2381+ let fg = ju(c, eF, ex, lp)
2382+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
2383+ $Tuple2(((((fg._1 ++ jW(A, fraction(U, eF, cD))._1) :+ StringEntry(fg._2, makeString(fg._3, ":"))) :+ StringEntry(fg._4, makeString(fg._5, ":"))) :+ lc), fg._3[bi])
2384+ }
2385+ }
2386+
2387+
2388+
2389+@Callable(gH)
2390+func claimResToWH (eF,lp) = {
2391+ let lc = kZ(gH)
2392+ if ((size(gH.payments) != 0))
23042393 then throw("No payments required")
23052394 else {
2306- let c = toString(gw.originCaller)
2307- let eV = jj(c, eu, el, kY)
2308- $Tuple2(((((eV._1 ++ jR(c, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._5[aY])
2309- }
2310- }
2311-
2312-
2313-
2314-@Callable(gw)
2315-func flight (iC,iD) = {
2316- let kK = kH(gw)
2317- if ((size(gw.payments) != 0))
2395+ let c = toString(gH.originCaller)
2396+ let fg = ju(c, eF, ew, lp)
2397+ $Tuple2(((((fg._1 ++ kc(c, fraction(U, eF, cD))._1) :+ StringEntry(fg._2, makeString(fg._3, ":"))) :+ StringEntry(fg._4, makeString(fg._5, ":"))) :+ lc), fg._5[aZ])
2398+ }
2399+ }
2400+
2401+
2402+
2403+@Callable(gH)
2404+func flight (iN,iO) = {
2405+ let lc = kZ(gH)
2406+ if ((size(gH.payments) != 0))
23182407 then throw("No payments required")
23192408 else {
2320- let bK = toString(gw.caller)
2321- let hb = iB(bK, iC, iD)
2322- let iH = hb._1
2323- let A = hb._2
2324- let kV = bI(A)
2325- let jc = valueOrElse(getString(kV), aJ)
2326- let iJ = hb._4
2327- if ((iJ == jc))
2409+ let bL = toString(gH.caller)
2410+ let hm = iM(bL, iN, iO)
2411+ let iS = hm._1
2412+ let A = hm._2
2413+ let ln = bJ(A)
2414+ let jn = valueOrElse(getString(ln), aJ)
2415+ let iU = hm._4
2416+ if ((iU == jn))
23282417 then throw("You can't fly to the same location")
23292418 else {
2330- let kZ = split(iJ, "_")
2331- let la = (kZ[bl] == "T")
2332- let gj = F(A)
2333- let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2334- let lc = eW(lb, hb._5)
2335- let ld = lc._1
2336- let le = lc._2
2337- let lf = if (!(cb(cU, jc)))
2338- then if (la)
2339- then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2340- else if ((iH > 0))
2341- then iJ
2342- else jc
2343- else if (!(cb(cU, iJ)))
2344- then throw("Your duck is taking part in the tournament")
2345- else {
2346- let lg = parseIntValue(kZ[bm])
2347- let lh = split(jc, "_")
2348- let cd = valueOrElse(getInteger(cU, bO), 0)
2349- if ((lg != (parseIntValue(lh[bm]) + 1)))
2350- then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2351- else if ((iH > 0))
2352- then {
2353- let li = valueOrElse(getInteger(cU, bS(cd, A)), 0)
2354- let lj = if ((lg > li))
2355- then invoke(cU, "saveDuckResult", [A, lg], nil)
2356- else unit
2357- if ((lj == lj))
2358- then iJ
2359- else throw("Strict value is not equal to itself.")
2419+ let cr = split(iU, "_")
2420+ let lq = (cr[bm] == "T")
2421+ let lr = (cr[bm] == "D")
2422+ let gu = F(A)
2423+ let ls = valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,")
2424+ let lt = fh(ls, hm._5)
2425+ let lu = lt._1
2426+ let lv = lt._2
2427+ let lw = if (cm(de, jn))
2428+ then if (!(ck(iU)))
2429+ then cp(jn, iU)
2430+ else if ((iS > 0))
2431+ then $Tuple2(iU, iS)
2432+ else $Tuple2(jn, 0)
2433+ else if (cc(de, jn))
2434+ then if (!(cc(de, iU)))
2435+ then throw("Your duck is taking part in the tournament")
2436+ else {
2437+ let lx = parseIntValue(cr[bn])
2438+ let ly = split(jn, "_")
2439+ let ce = valueOrElse(getInteger(de, bP), 0)
2440+ if ((lx != (parseIntValue(ly[bn]) + 1)))
2441+ then cp(jn, iU)
2442+ else if ((iS > 0))
2443+ then {
2444+ let lz = valueOrElse(getInteger(de, bT(ce, A)), 0)
2445+ let lA = if ((lx > lz))
2446+ then invoke(de, "saveDuckResult", [A, lx], nil)
2447+ else unit
2448+ if ((lA == lA))
2449+ then $Tuple2(iU, iS)
2450+ else throw("Strict value is not equal to itself.")
2451+ }
2452+ else $Tuple2(jn, 0)
2453+ }
2454+ else if (!(ch(jn)))
2455+ then {
2456+ let lB = dB(invoke(this, "autoExitDelivery", [A], nil))
2457+ if ((lB == lB))
2458+ then if (lr)
2459+ then lB
2460+ else if ((iS > 0))
2461+ then $Tuple2(iU, iS)
2462+ else $Tuple2(lB._1, 0)
2463+ else throw("Strict value is not equal to itself.")
2464+ }
2465+ else if (!(lr))
2466+ then throw("Your duck is taking part in delivery")
2467+ else if (!(ch(iU)))
2468+ then cp(jn, iU)
2469+ else {
2470+ let lx = parseIntValue(cr[bn])
2471+ let ly = split(jn, "_")
2472+ if ((lx != (parseIntValue(ly[bn]) + 1)))
2473+ then cp(jn, iU)
2474+ else if ((iS > 0))
2475+ then $Tuple2(iU, iS)
2476+ else {
2477+ let lB = dB(invoke(this, "autoExitDelivery", [A], nil))
2478+ if ((lB == lB))
2479+ then lB
2480+ else throw("Strict value is not equal to itself.")
2481+ }
23602482 }
2361- else jc
2362- }
2363- $Tuple2(([StringEntry(kV, lf), StringEntry(gj, ld), IntegerEntry(z(A), iH), kK] ++ (if (le)
2483+ let lC = lw._1
2484+ let lD = lw._2
2485+ $Tuple2(([StringEntry(ln, lC), StringEntry(gu, lu), IntegerEntry(z(A), iS), lc] ++ (if (lv)
23642486 then [StringEntry(L(A), "0_0_0_0_0")]
2365- else (nil ++ jL(A, if ((iH > 0))
2487+ else (nil ++ jW(A, if ((iS > 0))
23662488 then V
2367- else W)._1))), hb._3)
2489+ else W)._1))), hm._3)
23682490 }
23692491 }
23702492 }
23712493
23722494
23732495
2374-@Callable(gw)
2375-func heal (lk,ll,lm) = {
2376- let kK = kH(gw)
2377- if (if (if ((0 > lk))
2496+@Callable(gH)
2497+func heal (lE,lF,lG) = {
2498+ let lc = kZ(gH)
2499+ if (if (if ((0 > lE))
23782500 then true
2379- else (0 > ll))
2501+ else (0 > lF))
23802502 then true
2381- else (0 > lm))
2503+ else (0 > lG))
23822504 then throw("Quantity cannot be negative")
23832505 else {
2384- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2385- if (kb(A))
2506+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
2507+ if (km(A))
23862508 then throw("heal_checkTournament")
2387- else if (kc(A))
2509+ else if (kn(A))
23882510 then throw("heal_checkDelivery")
23892511 else {
2390- let ln = [lk, ll, lm]
2391- let iN = z(A)
2392- let iO = ag(valueOrElse(getInteger(D(A)), 0))
2393- let lo = valueOrElse(getInteger(iN), iO)
2394- if ((lo >= iO))
2395- then throw((("HP should be < " + toString(iO)) + " to heal"))
2512+ let lH = [lE, lF, lG]
2513+ let iY = z(A)
2514+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
2515+ let lI = valueOrElse(getInteger(iY), iZ)
2516+ if ((lI >= iZ))
2517+ then throw((("HP should be < " + toString(iZ)) + " to heal"))
23962518 else {
2397- let hx = bH(A)
2398- let ia = hw(hx)
2399- let lp = if ((ia[bj] == ""))
2519+ let hI = bI(A)
2520+ let il = hH(hI)
2521+ let lJ = if ((il[bk] == ""))
24002522 then nil
2401- else split_4C(ia[bj], "_")
2402- func lq (eD,ch) = {
2403- let dp = eD._2
2404- let gS = if ((size(lp) > dp))
2405- then parseIntValue(lp[dp])
2523+ else split_4C(il[bk], "_")
2524+ func lK (eO,co) = {
2525+ let dz = eO._2
2526+ let hd = if ((size(lJ) > dz))
2527+ then parseIntValue(lJ[dz])
24062528 else 0
2407- if ((3 > dp))
2529+ if ((3 > dz))
24082530 then {
2409- let lr = ln[dp]
2410- if ((lr > gS))
2411- then throw(((("You have only " + toString(gS)) + " of ") + aN[dp]))
2412- else $Tuple3((eD._1 :+ toString((gS - lr))), (dp + 1), (eD._3 + (parseIntValue(split(ch, "_")[aT]) * lr)))
2531+ let lL = lH[dz]
2532+ if ((lL > hd))
2533+ then throw(((("You have only " + toString(hd)) + " of ") + aO[dz]))
2534+ else $Tuple3((eO._1 :+ toString((hd - lL))), (dz + 1), (eO._3 + (parseIntValue(split(co, "_")[aU]) * lL)))
24132535 }
2414- else $Tuple3((eD._1 :+ toString(gS)), (dp + 1), eD._3)
2536+ else $Tuple3((eO._1 :+ toString(hd)), (dz + 1), eO._3)
24152537 }
24162538
2417- let eV = {
2418- let eF = aR
2419- let eG = size(eF)
2420- let eH = $Tuple3(nil, 0, 0)
2421- func eI (eJ,eK) = if ((eK >= eG))
2422- then eJ
2423- else lq(eJ, eF[eK])
2424-
2425- func eL (eJ,eK) = if ((eK >= eG))
2426- then eJ
2539+ let fg = {
2540+ let eQ = aS
2541+ let eR = size(eQ)
2542+ let eS = $Tuple3(nil, 0, 0)
2543+ func eT (eU,eV) = if ((eV >= eR))
2544+ then eU
2545+ else lK(eU, eQ[eV])
2546+
2547+ func eW (eU,eV) = if ((eV >= eR))
2548+ then eU
24272549 else throw("List size exceeds 50")
24282550
2429- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
2551+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
24302552 }
2431- let ls = min([iO, (lo + eV._3)])
2432- $Tuple2(([IntegerEntry(iN, ls), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], makeString(eV._1, "_")], ":")), kK] ++ jL(A, (ad * ((lk + ll) + lm)))._1), ls)
2553+ let lM = min([iZ, (lI + fg._3)])
2554+ $Tuple2(([IntegerEntry(iY, lM), StringEntry(hI, makeString_2C([il[bh], il[bi], il[bj], makeString(fg._1, "_")], ":")), lc] ++ jW(A, (ad * ((lE + lF) + lG)))._1), lM)
24332555 }
24342556 }
24352557 }
24362558 }
24372559
24382560
24392561
2440-@Callable(gw)
2562+@Callable(gH)
24412563 func healES () = {
2442- let kK = kH(gw)
2443- if ((size(gw.payments) != 1))
2564+ let lc = kZ(gH)
2565+ if ((size(gH.payments) != 1))
24442566 then throw("Exactly one payment required")
24452567 else {
2446- let kL = value(gw.payments[0])
2447- if ((kL.assetId != cm))
2568+ let ld = value(gH.payments[0])
2569+ if ((ld.assetId != cw))
24482570 then throw("Allowed USDT payment only!")
24492571 else {
2450- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2451- if (kb(A))
2572+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
2573+ if (km(A))
24522574 then throw("healES_checkTournament")
2453- else if (kc(A))
2575+ else if (kn(A))
24542576 then throw("healES_checkDelivery")
24552577 else {
2456- let iN = z(A)
2457- let iO = ag(valueOrElse(getInteger(D(A)), 0))
2458- let lo = valueOrElse(getInteger(iN), iO)
2459- if ((lo > 0))
2578+ let iY = z(A)
2579+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
2580+ let lI = valueOrElse(getInteger(iY), iZ)
2581+ if ((lI > 0))
24602582 then throw("HP should be 0 to call Emergency Service")
24612583 else {
2462- let hx = bH(A)
2463- let ia = hw(hx)
2464- let lp = if ((ia[bj] == ""))
2584+ let hI = bI(A)
2585+ let il = hH(hI)
2586+ let lJ = if ((il[bk] == ""))
24652587 then nil
2466- else split_4C(ia[bj], "_")
2467- let lt = if ((size(lp) > 0))
2468- then parseIntValue(lp[0])
2588+ else split_4C(il[bk], "_")
2589+ let lN = if ((size(lJ) > 0))
2590+ then parseIntValue(lJ[0])
24692591 else 0
2470- let lu = if ((size(lp) > 1))
2471- then parseIntValue(lp[1])
2592+ let lO = if ((size(lJ) > 1))
2593+ then parseIntValue(lJ[1])
24722594 else 0
2473- let lv = if ((size(lp) > 2))
2474- then parseIntValue(lp[2])
2595+ let lP = if ((size(lJ) > 2))
2596+ then parseIntValue(lJ[2])
24752597 else 0
2476- if (if (if ((lt > 0))
2598+ if (if (if ((lN > 0))
24772599 then true
2478- else (lu > 0))
2600+ else (lO > 0))
24792601 then true
2480- else (lv > 0))
2602+ else (lP > 0))
24812603 then throw("You have to use own Medical Kit")
24822604 else {
2483- let lw = getString(cR, bL())
2484- let lx = if (isDefined(lw))
2485- then split_4C(value(lw), "_")
2605+ let lQ = getString(db, bM())
2606+ let lR = if (isDefined(lQ))
2607+ then split_4C(value(lQ), "_")
24862608 else nil
2487- let ly = if ((size(lx) > 0))
2488- then parseIntValue(lx[0])
2609+ let lS = if ((size(lR) > 0))
2610+ then parseIntValue(lR[0])
24892611 else 0
2490- if ((0 >= ly))
2612+ if ((0 >= lS))
24912613 then throw("There are no Medical Kits L1 at Emergency Service storage")
24922614 else {
2493- let ls = (lo + parseIntValue(split(aR[0], "_")[aT]))
2494- let lz = makeString([toString((ly - 1)), removeByIndex(lx, 0)], "_")
2495- let ch = split(aR[0], "_")
2496- let lA = cg(ch)
2497- let lB = fraction((lA * aL), aK, (ct * aW))
2498- if ((kL.amount != lB))
2499- then throw(("Payment attached should be " + toString(lB)))
2615+ let lM = (lI + parseIntValue(split(aS[0], "_")[aU]))
2616+ let lT = makeString([toString((lS - 1)), removeByIndex(lR, 0)], "_")
2617+ let co = split(aS[0], "_")
2618+ let lU = cn(co)
2619+ let lV = fraction((lU * aL), aK, (cD * aX))
2620+ if ((ld.amount != lV))
2621+ then throw(("Payment attached should be " + toString(lV)))
25002622 else {
2501- let eV = dl(invoke(cR, "updateEsStorage", [lz], [AttachedPayment(cm, lB)]))
2502- $Tuple2(([IntegerEntry(iN, ls), kK] ++ jL(A, X)._1), eV)
2623+ let fg = dv(invoke(db, "updateEsStorage", [lT], [AttachedPayment(cw, lV)]))
2624+ $Tuple2(([IntegerEntry(iY, lM), lc] ++ jW(A, X)._1), fg)
25032625 }
25042626 }
25052627 }
25062628 }
25072629 }
25082630 }
25092631 }
25102632 }
25112633
25122634
25132635
2514-@Callable(gw)
2515-func updateBackpack (A,lC) = if ((gw.caller != cR))
2636+@Callable(gH)
2637+func updateBackpack (A,lW) = if ((gH.caller != db))
25162638 then throw("permission denied")
2517- else $Tuple2([StringEntry(bH(A), lC)], lC)
2518-
2519-
2520-
2521-@Callable(gw)
2639+ else $Tuple2([StringEntry(bI(A), lW)], lW)
2640+
2641+
2642+
2643+@Callable(gH)
25222644 func commitForRandom () = {
2523- let kK = kH(gw)
2524- let lD = (height + de)
2525- let c = toString(gw.caller)
2526- $Tuple2(([IntegerEntry(df(c), lD)] :+ kK), lD)
2527- }
2528-
2529-
2530-
2531-@Callable(gw)
2532-func awardSLand (cB) = if ((gw.caller != cU))
2645+ let lc = kZ(gH)
2646+ let lX = (height + do)
2647+ let c = toString(gH.caller)
2648+ $Tuple2(([IntegerEntry(dp(c), lX)] :+ lc), lX)
2649+ }
2650+
2651+
2652+
2653+@Callable(gH)
2654+func awardSLand (cL) = if ((gH.caller != de))
25332655 then throw("Access denied")
2534- else if ((size(gw.payments) != 0))
2656+ else if ((size(gH.payments) != 0))
25352657 then throw("No payments required")
25362658 else {
2537- let eV = iu(addressFromStringValue(cB), gw.transactionId)
2538- $Tuple2(eV._1, eV._2._1)
2539- }
2540-
2541-
2542-
2543-@Callable(gw)
2659+ let fg = iF(addressFromStringValue(cL), gH.transactionId)
2660+ $Tuple2(fg._1, fg._2._1)
2661+ }
2662+
2663+
2664+
2665+@Callable(gH)
25442666 func buySLand () = {
2545- let kK = kH(gw)
2546- if ((size(gw.payments) != 1))
2667+ let lc = kZ(gH)
2668+ if ((size(gH.payments) != 1))
25472669 then throw("Exactly one payment required")
25482670 else {
2549- let kL = value(gw.payments[0])
2550- if ((kL.assetId != cm))
2671+ let ld = value(gH.payments[0])
2672+ if ((ld.assetId != cw))
25512673 then throw("Allowed USDT payment only!")
2552- else if ((kL.amount != dS))
2553- then throw(("Payment attached should be " + toString(dS)))
2674+ else if ((ld.amount != ed))
2675+ then throw(("Payment attached should be " + toString(ed)))
25542676 else {
2555- let eV = iu(gw.caller, gw.transactionId)
2556- let lE = do(invoke(cV, "burnAcres", [dT], nil))
2557- $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2677+ let fg = iF(gH.caller, gH.transactionId)
2678+ let lY = dy(invoke(df, "burnAcres", [ee], nil))
2679+ $Tuple2((((fg._1 :+ ScriptTransfer(db, ld.amount, cw)) ++ kc(toString(gH.caller), Z)._1) :+ lc), $Tuple2(fg._2._1, lY))
25582680 }
25592681 }
25602682 }
25612683
25622684
25632685
2564-@Callable(gw)
2565-func expedition (iC,iD) = {
2566- let kK = kH(gw)
2567- if ((size(gw.payments) != 0))
2686+@Callable(gH)
2687+func expedition (iN,iO) = {
2688+ let lc = kZ(gH)
2689+ if ((size(gH.payments) != 0))
25682690 then throw("No payments required")
25692691 else {
2570- let bK = toString(gw.caller)
2571- let hb = iB(bK, iC, iD)
2572- let A = hb._2
2573- let iN = z(A)
2574- let hx = bH(A)
2575- let ia = hw(hx)
2576- let jC = split(ia[bi], "_")
2577- let jE = makeString(eP(true, jC, dR), "_")
2578- let gj = F(A)
2579- let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2580- let lF = eW(lb, hb._5)
2581- let ld = lF._1
2582- let le = lF._2
2583- let lG = iu(gw.caller, gw.transactionId)
2584- let iA = lG._2._1
2585- let eV = if ((0 >= hb._1))
2586- then $Tuple3([IntegerEntry(iN, 0), StringEntry(gj, ld)], "", 0)
2587- else $Tuple3((lG._1 ++ (if (le)
2692+ let bL = toString(gH.caller)
2693+ let hm = iM(bL, iN, iO)
2694+ let A = hm._2
2695+ let iY = z(A)
2696+ let hI = bI(A)
2697+ let il = hH(hI)
2698+ let jN = split(il[bj], "_")
2699+ let jP = makeString(fa(true, jN, ec), "_")
2700+ let gu = F(A)
2701+ let ls = valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,")
2702+ let lZ = fh(ls, hm._5)
2703+ let lu = lZ._1
2704+ let lv = lZ._2
2705+ let ma = iF(gH.caller, gH.transactionId)
2706+ let iL = ma._2._1
2707+ let fg = if ((0 >= hm._1))
2708+ then $Tuple3([IntegerEntry(iY, 0), StringEntry(gu, lu)], "", 0)
2709+ else $Tuple3((ma._1 ++ (if (lv)
25882710 then [StringEntry(L(A), "0_0_0_0_0")]
2589- else ((((nil :+ StringEntry(bI(A), makeString([lG._2._2, "L", iA], "_"))) :+ IntegerEntry(iN, hb._1)) :+ StringEntry(gj, ld)) :+ StringEntry(hx, makeString([ia[bg], ia[bh], jE, ia[bj]], ":"))))), iA, hb._3)
2590- if (kb(A))
2711+ else ((((nil :+ StringEntry(bJ(A), makeString([ma._2._2, "L", iL], "_"))) :+ IntegerEntry(iY, hm._1)) :+ StringEntry(gu, lu)) :+ StringEntry(hI, makeString([il[bh], il[bi], jP, il[bk]], ":"))))), iL, hm._3)
2712+ if (km(A))
25912713 then throw("expedition_checkTournament")
2592- else if (kc(A))
2714+ else if (kn(A))
25932715 then throw("expedition_checkDelivery")
25942716 else {
2595- let lE = do(invoke(cV, "burnAcres", [dT], nil))
2596- $Tuple2(((eV._1 ++ jL(A, Z)._1) :+ kK), $Tuple3(eV._2, eV._3, lE))
2717+ let lY = dy(invoke(df, "burnAcres", [ee], nil))
2718+ $Tuple2(((fg._1 ++ jW(A, Z)._1) :+ lc), $Tuple3(fg._2, fg._3, lY))
25972719 }
25982720 }
25992721 }
26002722
26012723
26022724
2603-@Callable(gw)
2725+@Callable(gH)
26042726 func buySLandForAcres () = {
2605- let kK = kH(gw)
2606- if ((size(gw.payments) != 1))
2727+ let lc = kZ(gH)
2728+ if ((size(gH.payments) != 1))
26072729 then throw("exactly 1 payment must be attached")
26082730 else {
2609- let kL = gw.payments[0]
2610- let fc = kL.amount
2611- if (if (!(isDefined(kL.assetId)))
2731+ let ld = gH.payments[0]
2732+ let fn = ld.amount
2733+ if (if (!(isDefined(ld.assetId)))
26122734 then true
2613- else (value(kL.assetId) != dd))
2735+ else (value(ld.assetId) != dn))
26142736 then throw("ACRES payments only!")
2615- else if ((fc != dT))
2616- then throw(("Payment attached should be " + toString(dT)))
2737+ else if ((fn != ee))
2738+ then throw(("Payment attached should be " + toString(ee)))
26172739 else {
2618- let eV = iu(gw.caller, gw.transactionId)
2619- let lE = do(invoke(cV, "burnAcres", [dT], [AttachedPayment(dd, fc)]))
2620- $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2740+ let fg = iF(gH.caller, gH.transactionId)
2741+ let lY = dy(invoke(df, "burnAcres", [ee], [AttachedPayment(dn, fn)]))
2742+ $Tuple2(((fg._1 ++ kc(toString(gH.caller), Z)._1) :+ lc), $Tuple2(fg._2._1, lY))
26212743 }
26222744 }
26232745 }
26242746
26252747
26262748
2627-@Callable(gw)
2749+@Callable(gH)
26282750 func upgradeInfra (P) = {
2629- let kK = kH(gw)
2630- if ((size(gw.payments) != 0))
2751+ let lc = kZ(gH)
2752+ if ((size(gH.payments) != 0))
26312753 then throw("No payments required")
26322754 else {
2633- let eV = jw(true, gw.caller, 0, P)
2634- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2635- $Tuple2(((eV._1 :+ kK) ++ jL(A, fraction(aa, eV._3, ct))._1), eV._2)
2636- }
2637- }
2638-
2639-
2640-
2641-@Callable(gw)
2642-func activateArtifact (lH,lI) = {
2643- let kK = kH(gw)
2644- if ((size(gw.payments) != 0))
2755+ let fg = jH(true, gH.caller, 0, P)
2756+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
2757+ $Tuple2(((fg._1 :+ lc) ++ jW(A, fraction(aa, fg._3, cD))._1), fg._2)
2758+ }
2759+ }
2760+
2761+
2762+
2763+@Callable(gH)
2764+func activateArtifact (mb,mc) = {
2765+ let lc = kZ(gH)
2766+ if ((size(gH.payments) != 0))
26452767 then throw("No payments required")
26462768 else {
2647- let c = toString(gw.caller)
2648- let eV = {
2649- let cn = lH
2650- if (("PRESALE" == cn))
2651- then jZ(c, lI)
2652- else if (("ONBOARD" == cn))
2653- then jS(c)
2769+ let c = toString(gH.caller)
2770+ let fg = {
2771+ let cx = mb
2772+ if (("PRESALE" == cx))
2773+ then kk(c, mc)
2774+ else if (("ONBOARD" == cx))
2775+ then kd(c)
26542776 else throw("Unknown artifact")
26552777 }
2656- (eV :+ kK)
2657- }
2658- }
2659-
2660-
2661-
2662-@Callable(gw)
2663-func mergeLands (ki) = {
2664- let kK = kH(gw)
2665- if ((size(gw.payments) != 0))
2778+ (fg :+ lc)
2779+ }
2780+ }
2781+
2782+
2783+
2784+@Callable(gH)
2785+func mergeLands (kA) = {
2786+ let lc = kZ(gH)
2787+ if ((size(gH.payments) != 0))
26662788 then throw("No payments required")
26672789 else {
2668- let eV = kG(toString(gw.caller), ki)
2669- $Tuple2(((eV._1 :+ kK) ++ jR(toString(gw.caller), ab)._1), eV._2)
2670- }
2671- }
2672-
2673-
2674-
2675-@Callable(gw)
2676-func cargoExchange (lJ,P) = {
2677- let kK = kH(gw)
2678- if ((size(gw.payments) != 0))
2790+ let fg = kY(toString(gH.caller), kA)
2791+ $Tuple2(((fg._1 :+ lc) ++ kc(toString(gH.caller), ab)._1), fg._2)
2792+ }
2793+ }
2794+
2795+
2796+
2797+@Callable(gH)
2798+func cargoExchange (md,P) = {
2799+ let lc = kZ(gH)
2800+ if ((size(gH.payments) != 0))
26792801 then throw("No payments required")
26802802 else {
2681- let hZ = split_4C(lJ, ":")
2682- let c = toString(gw.originCaller)
2683- let je = value(assetInfo(fromBase58String(P)))
2684- let jf = bq(P)
2685- if (!(isDefined(getInteger(jf))))
2686- then throw((je.name + " is not staked"))
2803+ let ik = split_4C(md, ":")
2804+ let c = toString(gH.originCaller)
2805+ let jp = value(assetInfo(fromBase58String(P)))
2806+ let jq = br(P)
2807+ if (!(isDefined(getInteger(jq))))
2808+ then throw((jp.name + " is not staked"))
26872809 else {
2688- let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
2689- if ((jh != c))
2810+ let js = valueOrErrorMessage(getString(bo(P)), (("NFT " + jp.name) + " is orphaned"))
2811+ if ((js != c))
26902812 then throw((aC + " is not yours"))
26912813 else {
2692- let hL = (dr(split(je.description, "_")[cX]) / cu)
2693- let hM = valueOrElse(getInteger(bx(P)), 0)
2694- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2695- let jc = valueOrElse(getString(bI(A)), aJ)
2696- let ce = split(value(jc), "_")
2697- if ((ce[bl] != "L"))
2698- then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
2699- else if ((ce[bm] != P))
2814+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
2815+ let hX = valueOrElse(getInteger(by(P)), 0)
2816+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
2817+ let jn = valueOrElse(getString(bJ(A)), aJ)
2818+ let cf = split(value(jn), "_")
2819+ if ((cf[bm] != "L"))
2820+ then throw((("Duck location type is " + cf[bm]) + ", but should be L"))
2821+ else if ((cf[bn] != P))
27002822 then throw(("Duck should be on the land " + P))
27012823 else {
2702- let hK = bw(P)
2703- let hB = hJ(hK, hL, hM)
2704- let hx = bH(A)
2705- let ia = hw(hx)
2706- let eV = hY(hZ, hB, ia)
2707- let hS = split(hB[bb], "_")
2708- let jt = (parseIntValue(hS[bd]) + eV._7)
2709- let ju = (parseIntValue(hS[be]) - eV._7)
2710-[StringEntry(hx, makeString_2C([ia[bg], eV._4, eV._5, eV._6], ":")), StringEntry(hK, makeString_2C([hB[aX], eV._1, eV._2, eV._3, makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")], ":")), kK]
2824+ let hV = bx(P)
2825+ let hM = hU(hV, hW, hX)
2826+ let hI = bI(A)
2827+ let il = hH(hI)
2828+ let fg = ij(ik, hM, il)
2829+ let id = split(hM[bc], "_")
2830+ let jE = (parseIntValue(id[be]) + fg._7)
2831+ let jF = (parseIntValue(id[bf]) - fg._7)
2832+[StringEntry(hI, makeString_2C([il[bh], fg._4, fg._5, fg._6], ":")), StringEntry(hV, makeString_2C([hM[aY], fg._1, fg._2, fg._3, makeString([id[bd], toString(jE), toString(jF), id[bg]], "_")], ":")), lc]
27112833 }
27122834 }
27132835 }
27142836 }
27152837 }
27162838
27172839
27182840
2719-@Callable(gw)
2720-func saveWarehouse (hO,P) = if ((gw.caller != cR))
2841+@Callable(gH)
2842+func saveWarehouse (hZ,P) = if ((gH.caller != db))
27212843 then throw("Access denied")
27222844 else {
2723- let hK = bw(P)
2724- let hP = split_4C(hO, ":")
2725- if ((size(hP) != 5))
2845+ let hV = bx(P)
2846+ let ia = split_4C(hZ, ":")
2847+ if ((size(ia) != 5))
27262848 then throw("warehouse string should contain 4 ':' separators")
27272849 else {
2728- let lK = split(hP[bb], "_")[bc]
2729- let jt = hA(hP)
2730- let lL = hy(hP[aX])
2731- let ju = ((lL - parseIntValue(lK)) - jt)
2732- let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([lK, toString(jt), toString(ju), toString(lL)], "_")], ":")
2733- $Tuple2([StringEntry(hK, lM)], lM)
2850+ let me = split(ia[bc], "_")[bd]
2851+ let jE = hL(ia)
2852+ let mf = hJ(ia[aY])
2853+ let jF = ((mf - parseIntValue(me)) - jE)
2854+ let mg = makeString_2C([ia[aY], ia[aZ], ia[ba], ia[bb], makeString([me, toString(jE), toString(jF), toString(mf)], "_")], ":")
2855+ $Tuple2([StringEntry(hV, mg)], mg)
27342856 }
27352857 }
27362858
27372859
27382860
2739-@Callable(gw)
2740-func fixWarehouseFormat (P) = if ((gw.caller != cQ))
2861+@Callable(gH)
2862+func fixWarehouseFormat (P) = if ((gH.caller != da))
27412863 then throw("Access denied")
27422864 else {
2743- let hK = bw(P)
2744- let je = value(assetInfo(fromBase58String(P)))
2745- let hL = (dr(split(je.description, "_")[cX]) / cu)
2746- let hM = valueOrElse(getInteger(bx(P)), 0)
2747- let hP = hJ(hK, hL, hM)
2748- let lK = do(invoke(cR, "recalcLockedVolumeREADONLY", [P, hP], nil))
2749- let jt = hA(hP)
2750- let lL = hy(hP[aX])
2751- let ju = ((lL - lK) - jt)
2752- let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([toString(lK), toString(jt), toString(ju), toString(lL)], "_")], ":")
2753- $Tuple2([StringEntry(hK, lM)], lM)
2865+ let hV = bx(P)
2866+ let jp = value(assetInfo(fromBase58String(P)))
2867+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
2868+ let hX = valueOrElse(getInteger(by(P)), 0)
2869+ let ia = hU(hV, hW, hX)
2870+ let me = dy(invoke(db, "recalcLockedVolumeREADONLY", [P, ia], nil))
2871+ let jE = hL(ia)
2872+ let mf = hJ(ia[aY])
2873+ let jF = ((mf - me) - jE)
2874+ let mg = makeString_2C([ia[aY], ia[aZ], ia[ba], ia[bb], makeString([toString(me), toString(jE), toString(jF), toString(mf)], "_")], ":")
2875+ $Tuple2([StringEntry(hV, mg)], mg)
27542876 }
27552877
27562878
27572879
2758-@Callable(gw)
2759-func fixContinentProportions (ki) = if ((gw.caller != cQ))
2880+@Callable(gH)
2881+func fixContinentProportions (kA) = if ((gH.caller != da))
27602882 then throw("Access denied")
27612883 else {
2762- func lN (eD,lO) = (eD :+ valueOrElse(getString(dh(lO)), "0_0_0_0_0_0"))
2763-
2764- let gg = {
2765- let eF = aO
2766- let eG = size(eF)
2767- let eH = nil
2768- func eI (eJ,eK) = if ((eK >= eG))
2769- then eJ
2770- else lN(eJ, eF[eK])
2771-
2772- func eL (eJ,eK) = if ((eK >= eG))
2773- then eJ
2884+ func mh (eO,mi) = (eO :+ valueOrElse(getString(dr(mi)), "0_0_0_0_0_0"))
2885+
2886+ let gr = {
2887+ let eQ = aP
2888+ let eR = size(eQ)
2889+ let eS = nil
2890+ func eT (eU,eV) = if ((eV >= eR))
2891+ then eU
2892+ else mh(eU, eQ[eV])
2893+
2894+ func eW (eU,eV) = if ((eV >= eR))
2895+ then eU
27742896 else throw("List size exceeds 5")
27752897
2776- eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2777- }
2778- func lP (eD,P) = {
2779- let je = value(assetInfo(fromBase58String(P)))
2780- let ji = split(je.description, "_")
2781- let hL = (dr(ji[cX]) / cu)
2782- let lO = ji[cZ]
2783- let gs = gy(ji[cY])
2784- let ha = value(indexOf(aO, lO))
2785- let kx = split(eD[ha], "_")
2786- let lQ = makeString(gq(kx, gs, hL, 1), "_")
2787- let cn = lO
2788- if (("Americas" == cn))
2789- then [lQ, eD[1], eD[2], eD[3], eD[4]]
2790- else if (("Europe" == cn))
2791- then [eD[0], lQ, eD[2], eD[3], eD[4]]
2792- else if (("Asia" == cn))
2793- then [eD[0], eD[1], lQ, eD[3], eD[4]]
2794- else if (("Africa" == cn))
2795- then [eD[0], eD[1], eD[2], lQ, eD[4]]
2796- else if (("Oceania" == cn))
2797- then [eD[0], eD[1], eD[2], eD[3], lQ]
2898+ eW(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5)
2899+ }
2900+ func mj (eO,P) = {
2901+ let jp = value(assetInfo(fromBase58String(P)))
2902+ let jt = split(jp.description, "_")
2903+ let hW = (dE(jt[dh]) / cE)
2904+ let mi = jt[dj]
2905+ let gD = gJ(jt[di])
2906+ let hl = value(indexOf(aP, mi))
2907+ let kP = split(eO[hl], "_")
2908+ let mk = makeString(gB(kP, gD, hW, 1), "_")
2909+ let cx = mi
2910+ if (("Americas" == cx))
2911+ then [mk, eO[1], eO[2], eO[3], eO[4]]
2912+ else if (("Europe" == cx))
2913+ then [eO[0], mk, eO[2], eO[3], eO[4]]
2914+ else if (("Asia" == cx))
2915+ then [eO[0], eO[1], mk, eO[3], eO[4]]
2916+ else if (("Africa" == cx))
2917+ then [eO[0], eO[1], eO[2], mk, eO[4]]
2918+ else if (("Oceania" == cx))
2919+ then [eO[0], eO[1], eO[2], eO[3], mk]
27982920 else throw("wrong continent")
27992921 }
28002922
2801- let eO = {
2802- let eF = ki
2803- let eG = size(eF)
2804- let eH = gg
2805- func hr (eJ,eK) = if ((eK >= eG))
2806- then eJ
2807- else lP(eJ, eF[eK])
2808-
2809- func hs (eJ,eK) = if ((eK >= eG))
2810- then eJ
2923+ let eZ = {
2924+ let eQ = kA
2925+ let eR = size(eQ)
2926+ let eS = gr
2927+ func hC (eU,eV) = if ((eV >= eR))
2928+ then eU
2929+ else mj(eU, eQ[eV])
2930+
2931+ func hD (eU,eV) = if ((eV >= eR))
2932+ then eU
28112933 else throw("List size exceeds 100")
28122934
2813- hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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)
2814- }
2815- $Tuple2([StringEntry(dh("Americas"), eO[0]), StringEntry(dh("Europe"), eO[1]), StringEntry(dh("Asia"), eO[2]), StringEntry(dh("Africa"), eO[3]), StringEntry(dh("Oceania"), eO[4])], 0)
2935+ hD(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(hC(eS, 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)
2936+ }
2937+ $Tuple2([StringEntry(dr("Americas"), eZ[0]), StringEntry(dr("Europe"), eZ[1]), StringEntry(dr("Asia"), eZ[2]), StringEntry(dr("Africa"), eZ[3]), StringEntry(dr("Oceania"), eZ[4])], 0)
28162938 }
28172939
28182940
28192941
2820-@Callable(gw)
2821-func fixStakedPieces (cB) = if ((gw.caller != cQ))
2942+@Callable(gH)
2943+func fixStakedPieces (cL) = if ((gH.caller != da))
28222944 then throw("Access denied")
28232945 else {
2824- let kB = if ((cB == ""))
2946+ let kT = if ((cL == ""))
28252947 then 0
28262948 else {
2827- let ku = getString(an, dj(cB))
2828- let kq = if (isDefined(ku))
2829- then split_51C(value(ku), "_")
2949+ let kM = getString(an, dt(cL))
2950+ let kI = if (isDefined(kM))
2951+ then split_51C(value(kM), "_")
28302952 else nil
2831- func lR (eD,P) = {
2832- let je = value(assetInfo(fromBase58String(P)))
2833- let ds = split(je.description, "_")[cX]
2834- (eD + dr(ds))
2953+ func ml (eO,P) = {
2954+ let jp = value(assetInfo(fromBase58String(P)))
2955+ let dF = split(jp.description, "_")[dh]
2956+ (eO + dE(dF))
28352957 }
28362958
2837- let eF = kq
2838- let eG = size(eF)
2839- let eH = 0
2840- func eI (eJ,eK) = if ((eK >= eG))
2841- then eJ
2842- else lR(eJ, eF[eK])
2843-
2844- func eL (eJ,eK) = if ((eK >= eG))
2845- then eJ
2959+ let eQ = kI
2960+ let eR = size(eQ)
2961+ let eS = 0
2962+ func eT (eU,eV) = if ((eV >= eR))
2963+ then eU
2964+ else ml(eU, eQ[eV])
2965+
2966+ func eW (eU,eV) = if ((eV >= eR))
2967+ then eU
28462968 else throw("List size exceeds 100")
28472969
2848- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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)
2970+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 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)
28492971 }
2850- $Tuple2([IntegerEntry(dk(cB), kB)], kB)
2972+ $Tuple2([IntegerEntry(du(cL), kT)], kT)
28512973 }
28522974
28532975
28542976
2855-@Callable(gw)
2856-func setCustomName (bo,ks,bs) = {
2857- let kK = kH(gw)
2858- if ((size(gw.payments) != 1))
2977+@Callable(gH)
2978+func setCustomName (bp,kK,bt) = {
2979+ let lc = kZ(gH)
2980+ if ((size(gH.payments) != 1))
28592981 then throw("Exactly one payment required")
28602982 else {
2861- let kL = value(gw.payments[0])
2862- if ((kL.assetId != cm))
2983+ let ld = value(gH.payments[0])
2984+ if ((ld.assetId != cw))
28632985 then throw("Allowed USDT payment only!")
2864- else if ((kL.amount != dO))
2865- then throw(("Payment should be " + toString(dO)))
2866- else if (contains(ks, "__"))
2867- then throw(("Name should not contain '__': " + ks))
2868- else if ((size(ks) > dP))
2869- then throw(("Name too long, maxLength=" + toString(dP)))
2986+ else if ((ld.amount != dZ))
2987+ then throw(("Payment should be " + toString(dZ)))
2988+ else if (contains(kK, "__"))
2989+ then throw(("Name should not contain '__': " + kK))
2990+ else if ((size(kK) > ea))
2991+ then throw(("Name too long, maxLength=" + toString(ea)))
28702992 else {
2871- let c = toString(gw.originCaller)
2872- let lS = {
2873- let cn = bs
2874- if (("ACCOUNT" == cn))
2993+ let c = toString(gH.originCaller)
2994+ let mm = {
2995+ let cx = bt
2996+ if (("ACCOUNT" == cx))
28752997 then {
2876- let lT = ej(ks)
2877- let lU = getString(lT)
2878- if (isDefined(lU))
2879- then throw(("Name already registered: " + ks))
2998+ let mn = eu(kK)
2999+ let mo = getString(mn)
3000+ if (isDefined(mo))
3001+ then throw(("Name already registered: " + kK))
28803002 else {
2881- let lV = bA(c)
2882- let lW = getString(lV)
2883- let lX = if (isDefined(lW))
2884- then [DeleteEntry(ej(value(lW)))]
3003+ let mp = bB(c)
3004+ let mq = getString(mp)
3005+ let mr = if (isDefined(mq))
3006+ then [DeleteEntry(eu(value(mq)))]
28853007 else nil
2886- (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jR(c, Y)._1)
3008+ (((mr :+ StringEntry(mp, kK)) :+ StringEntry(mn, c)) ++ kc(c, Y)._1)
28873009 }
28883010 }
2889- else if (("LAND" == cn))
3011+ else if (("LAND" == cx))
28903012 then {
2891- let je = value(assetInfo(fromBase58String(bo)))
2892- let jf = bq(bo)
2893- if (!(isDefined(getInteger(jf))))
2894- then throw((je.name + " is not staked"))
3013+ let jp = value(assetInfo(fromBase58String(bp)))
3014+ let jq = br(bp)
3015+ if (!(isDefined(getInteger(jq))))
3016+ then throw((jp.name + " is not staked"))
28953017 else {
2896- let jh = valueOrErrorMessage(getString(bn(bo)), (("NFT " + je.name) + " is orphaned"))
2897- if ((jh != c))
3018+ let js = valueOrErrorMessage(getString(bo(bp)), (("NFT " + jp.name) + " is orphaned"))
3019+ if ((js != c))
28983020 then throw((aC + " is not yours"))
28993021 else {
2900- let lT = ec(ks)
2901- let lU = getString(lT)
2902- if (isDefined(lU))
2903- then throw(("Name already registered: " + ks))
3022+ let mn = en(kK)
3023+ let mo = getString(mn)
3024+ if (isDefined(mo))
3025+ then throw(("Name already registered: " + kK))
29043026 else {
2905- let lY = bp(bo)
2906- let lW = getString(lY)
2907- let lX = if (isDefined(lW))
2908- then [DeleteEntry(ec(value(lW)))]
3027+ let ms = bq(bp)
3028+ let mq = getString(ms)
3029+ let mr = if (isDefined(mq))
3030+ then [DeleteEntry(en(value(mq)))]
29093031 else nil
2910- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jR(c, Y)._1)
3032+ (((mr :+ StringEntry(ms, kK)) :+ StringEntry(mn, bp)) ++ kc(c, Y)._1)
29113033 }
29123034 }
29133035 }
29143036 }
2915- else if (("DUCK" == cn))
3037+ else if (("DUCK" == cx))
29163038 then {
2917- let je = value(assetInfo(fromBase58String(bo)))
2918- let jf = bq(bo)
2919- if (if (!(isDefined(getInteger(jf))))
3039+ let jp = value(assetInfo(fromBase58String(bp)))
3040+ let jq = br(bp)
3041+ if (if (!(isDefined(getInteger(jq))))
29203042 then true
2921- else !(isDefined(getString(bG(c)))))
2922- then throw((je.name + " is not staked"))
3043+ else !(isDefined(getString(bH(c)))))
3044+ then throw((jp.name + " is not staked"))
29233045 else {
2924- let jh = valueOrErrorMessage(getString(bF(bo)), (("NFT " + je.name) + " is orphaned"))
2925- if ((jh != c))
3046+ let js = valueOrErrorMessage(getString(bG(bp)), (("NFT " + jp.name) + " is orphaned"))
3047+ if ((js != c))
29263048 then throw((aD + " is not yours"))
29273049 else {
2928- let lT = ei(ks)
2929- let lU = getString(lT)
2930- if (isDefined(lU))
2931- then throw(("Name already registered: " + ks))
3050+ let mn = et(kK)
3051+ let mo = getString(mn)
3052+ if (isDefined(mo))
3053+ then throw(("Name already registered: " + kK))
29323054 else {
2933- let lY = bz(bo)
2934- let lW = getString(lY)
2935- let lX = if (isDefined(lW))
2936- then [DeleteEntry(ei(value(lW)))]
3055+ let ms = bA(bp)
3056+ let mq = getString(ms)
3057+ let mr = if (isDefined(mq))
3058+ then [DeleteEntry(et(value(mq)))]
29373059 else nil
2938- (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jL(bo, Y)._1)
3060+ (((mr :+ StringEntry(ms, kK)) :+ StringEntry(mn, bp)) ++ jW(bp, Y)._1)
29393061 }
29403062 }
29413063 }
29423064 }
29433065 else throw("Unknown entity type")
29443066 }
2945- $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cm)) :+ kK), 0)
3067+ $Tuple2(((mm :+ ScriptTransfer(db, ld.amount, cw)) :+ lc), 0)
29463068 }
29473069 }
29483070 }
29493071
29503072
29513073
2952-@Callable(gw)
2953-func setReferrals (lZ,ma) = if ((gw.callerPublicKey != dK))
3074+@Callable(gH)
3075+func setReferrals (mt,mu) = if ((gH.callerPublicKey != dW))
29543076 then throw("Permission denied")
29553077 else {
2956- let kK = kH(gw)
2957- if ((size(gw.payments) != 0))
3078+ let lc = kZ(gH)
3079+ if ((size(gH.payments) != 0))
29583080 then throw("No payments required")
2959- else if (!(isDefined(addressFromString(lZ))))
2960- then throw(("Invalid address: " + lZ))
2961- else if (!(isDefined(addressFromString(ma))))
2962- then throw(("Invalid address: " + ma))
3081+ else if (!(isDefined(addressFromString(mt))))
3082+ then throw(("Invalid address: " + mt))
3083+ else if (!(isDefined(addressFromString(mu))))
3084+ then throw(("Invalid address: " + mu))
29633085 else {
2964- let mb = ek()
2965- let mc = getString(mb)
2966- let md = if (isDefined(mc))
2967- then split_4C(value(mc), "_")
3086+ let mv = ev()
3087+ let mw = getString(mv)
3088+ let mx = if (isDefined(mw))
3089+ then split_4C(value(mw), "_")
29683090 else nil
2969- if (containsElement(md, ma))
2970- then throw((ma + " is not newbie (already has referrals)"))
3091+ if (containsElement(mx, mu))
3092+ then throw((mu + " is not newbie (already has referrals)"))
29713093 else {
2972- let jT = bB(ma)
2973- let jU = getString(jT)
2974- if (if (isDefined(jU))
2975- then isDefined(addressFromString(value(jU)))
3094+ let ke = bC(mu)
3095+ let kf = getString(ke)
3096+ if (if (isDefined(kf))
3097+ then isDefined(addressFromString(value(kf)))
29763098 else false)
2977- then throw(((ma + " already has refBy: ") + value(jU)))
3099+ then throw(((mu + " already has refBy: ") + value(kf)))
29783100 else {
2979- let me = bE(lZ)
2980- let mf = getString(me)
2981- let mg = if (isDefined(mf))
2982- then split_4C(value(mf), "_")
3101+ let my = bF(mt)
3102+ let mz = getString(my)
3103+ let mA = if (isDefined(mz))
3104+ then split_4C(value(mz), "_")
29833105 else nil
2984- if (containsElement(mg, ma))
2985- then throw((((lZ + " already contains ") + ma) + " within referrals"))
3106+ if (containsElement(mA, mu))
3107+ then throw((((mt + " already contains ") + mu) + " within referrals"))
29863108 else {
2987- let mh = makeString_2C((mg :+ ma), "_")
2988- let mi = if (containsElement(md, lZ))
2989- then value(mc)
2990- else makeString_2C((md :+ lZ), "_")
2991- $Tuple2([StringEntry(jT, lZ), StringEntry(me, mh), StringEntry(mb, mi), kK], 0)
3109+ let mB = makeString_2C((mA :+ mu), "_")
3110+ let mC = if (containsElement(mx, mt))
3111+ then value(mw)
3112+ else makeString_2C((mx :+ mt), "_")
3113+ $Tuple2([StringEntry(ke, mt), StringEntry(my, mB), StringEntry(mv, mC), lc], 0)
29923114 }
29933115 }
29943116 }
29953117 }
29963118 }
29973119
29983120
29993121
3000-@Callable(gw)
3001-func distributePoints (mj,mk,ml,mm,mn) = {
3002- let kK = kH(gw)
3003- if ((size(gw.payments) != 0))
3122+@Callable(gH)
3123+func distributePoints (mD,mE,mF,mG,mH) = {
3124+ let lc = kZ(gH)
3125+ if ((size(gH.payments) != 0))
30043126 then throw("No payments required")
30053127 else {
3006- let c = toString(gw.originCaller)
3007- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3008- let mo = I(c)
3009- let mp = valueOrElse(getInteger(an, mo), 0)
3010- let mq = E(A)
3011- let mr = valueOrElse(getInteger(an, mq), 0)
3012- let ms = (mp + mr)
3013- let mt = ((((mj + mk) + ml) + mm) + mn)
3014- if ((mt > ms))
3015- then throw((("There are only " + toString(ms)) + " free points to distribute"))
3128+ let c = toString(gH.originCaller)
3129+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
3130+ let mI = I(c)
3131+ let mJ = valueOrElse(getInteger(an, mI), 0)
3132+ let mK = E(A)
3133+ let mL = valueOrElse(getInteger(an, mK), 0)
3134+ let mM = (mJ + mL)
3135+ let mN = ((((mD + mE) + mF) + mG) + mH)
3136+ if ((mN > mM))
3137+ then throw((("There are only " + toString(mM)) + " free points to distribute"))
30163138 else {
3017- let mu = B(A)
3018- let aq = split(valueOrElse(getString(an, mu), "0_0_0_0_0"), "_")
3019- let mv = (mp - mt)
3020- $Tuple2([IntegerEntry(mo, if ((0 > mv))
3139+ let mO = B(A)
3140+ let aq = split(valueOrElse(getString(an, mO), "0_0_0_0_0"), "_")
3141+ let mP = (mJ - mN)
3142+ $Tuple2([IntegerEntry(mI, if ((0 > mP))
30213143 then 0
3022- else mv), IntegerEntry(mq, if ((0 > mv))
3023- then (mr + mv)
3024- else mr), StringEntry(mu, makeString([toString((parseIntValue(aq[k]) + mj)), toString((parseIntValue(aq[l]) + mk)), toString((parseIntValue(aq[m]) + ml)), toString((parseIntValue(aq[n]) + mm)), toString((parseIntValue(aq[o]) + mn))], "_")), kK], 0)
3144+ else mP), IntegerEntry(mK, if ((0 > mP))
3145+ then (mL + mP)
3146+ else mL), StringEntry(mO, makeString([toString((parseIntValue(aq[k]) + mD)), toString((parseIntValue(aq[l]) + mE)), toString((parseIntValue(aq[m]) + mF)), toString((parseIntValue(aq[n]) + mG)), toString((parseIntValue(aq[o]) + mH))], "_")), lc], 0)
30253147 }
30263148 }
30273149 }
30283150
30293151
30303152
3031-@Callable(gw)
3032-func splitByGlobalWeightsREADONLY (eu) = $Tuple2(nil, eM(eu))
3033-
3034-
3035-
3036-@Callable(gw)
3037-func splitByGlobalAndLocalWeightsREADONLY (mw,mx,gz) = {
3038- let gs = gy(gz)
3039- $Tuple2(nil, $Tuple2(eM(mw), ex(mx, gs)))
3040- }
3041-
3042-
3043-
3044-@Callable(gw)
3045-func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hw(bH(A)), ":"))
3046-
3047-
3048-
3049-@Callable(gw)
3153+@Callable(gH)
3154+func splitByGlobalWeightsREADONLY (eF) = $Tuple2(nil, eX(eF))
3155+
3156+
3157+
3158+@Callable(gH)
3159+func splitByGlobalAndLocalWeightsREADONLY (mQ,mR,gK) = {
3160+ let gD = gJ(gK)
3161+ $Tuple2(nil, $Tuple2(eX(mQ), eI(mR, gD)))
3162+ }
3163+
3164+
3165+
3166+@Callable(gH)
3167+func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hH(bI(A)), ":"))
3168+
3169+
3170+
3171+@Callable(gH)
30503172 func getWarehouseREADONLY (P) = {
3051- let je = value(assetInfo(fromBase58String(P)))
3052- let hL = (dr(split(je.description, "_")[cX]) / cu)
3053- let hM = valueOrElse(getInteger(bx(P)), 0)
3054- $Tuple2(nil, makeString_2C(hJ(bw(P), hL, hM), ":"))
3055- }
3056-
3057-
3058-
3059-@Callable(gw)
3173+ let jp = value(assetInfo(fromBase58String(P)))
3174+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
3175+ let hX = valueOrElse(getInteger(by(P)), 0)
3176+ $Tuple2(nil, makeString_2C(hU(bx(P), hW, hX), ":"))
3177+ }
3178+
3179+
3180+
3181+@Callable(gH)
30603182 func saveLastTx () = {
3061- let iv = gw.caller
3062- if (!(containsElement([cT, cR, cU, cV], iv)))
3183+ let iG = gH.caller
3184+ if (!(containsElement([dd, db, de, df], iG)))
30633185 then throw("Access denied")
3064- else $Tuple2([kH(gw)], 42)
3065- }
3066-
3067-
3068-
3069-@Callable(gw)
3070-func updateDuckStats (A,jM) = if ((gw.caller != cR))
3186+ else $Tuple2([kZ(gH)], 42)
3187+ }
3188+
3189+
3190+
3191+@Callable(gH)
3192+func updateDuckStats (A,jX) = if ((gH.caller != db))
30713193 then throw("Access denied")
3072- else jL(A, jM)
3073-
3074-
3075-
3076-@Callable(gw)
3077-func updateAccStats (c,jM) = if (if ((gw.caller != cR))
3078- then (gw.caller != cV)
3194+ else jW(A, jX)
3195+
3196+
3197+
3198+@Callable(gH)
3199+func updateAccStats (c,jX) = if (if ((gH.caller != db))
3200+ then (gH.caller != df)
30793201 else false)
30803202 then throw("Access denied")
3081- else jR(c, jM)
3082-
3083-
3084-
3085-@Callable(gw)
3086-func equipDuck (my) = {
3087- let kK = kH(gw)
3088- if ((size(gw.payments) != 0))
3203+ else kc(c, jX)
3204+
3205+
3206+
3207+@Callable(gH)
3208+func equipDuck (mS) = {
3209+ let lc = kZ(gH)
3210+ if ((size(gH.payments) != 0))
30893211 then throw("No payments required")
30903212 else {
3091- let c = toString(gw.originCaller)
3092- let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3093- if (kb(A))
3213+ let c = toString(gH.originCaller)
3214+ let A = valueOrErrorMessage(getString(bH(c)), "You don't have a duck staked")
3215+ if (km(A))
30943216 then throw("equipDuck_checkTournament")
3095- else if (kc(A))
3217+ else if (kn(A))
30963218 then throw("equipDuck_checkDelivery")
30973219 else {
3098- let gj = F(A)
3099- let mz = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3100- let hx = bH(A)
3101- let ia = hw(hx)
3102- let ld = split(my, "_")
3103- if ((size(ld) != q))
3220+ let gu = F(A)
3221+ let mT = split(valueOrElse(getString(gu), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3222+ let hI = bI(A)
3223+ let il = hH(hI)
3224+ let lu = split(mS, "_")
3225+ if ((size(lu) != q))
31043226 then throw("Wrong equipment string")
31053227 else {
3106- let gl = fY(mz, fj(ia[bj]), true, nil)
3107- let gm = split(ld[p], ";")[1]
3108- let ao = if ((gm == ""))
3228+ let gw = gj(mT, fu(il[bk]), true, nil)
3229+ let gx = split(lu[p], ";")[1]
3230+ let ao = if ((gx == ""))
31093231 then 0
31103232 else {
3111- let gn = split(gm, ",")[0]
3112- if ((gn == ""))
3233+ let gy = split(gx, ",")[0]
3234+ if ((gy == ""))
31133235 then 0
31143236 else {
3115- let fy = split(gn, ":")
3116- let cP = fy[0]
3117- let go = fy[1]
3118- if (if (if (if (if ((cP == "06"))
3237+ let fJ = split(gy, ":")
3238+ let cZ = fJ[0]
3239+ let gz = fJ[1]
3240+ if (if (if (if (if ((cZ == "06"))
31193241 then true
3120- else (cP == "07"))
3242+ else (cZ == "07"))
31213243 then true
3122- else (cP == "08"))
3123- then (go != "")
3244+ else (cZ == "08"))
3245+ then (gz != "")
31243246 else false)
3125- then (parseIntValue(go) > 0)
3247+ then (parseIntValue(gz) > 0)
31263248 else false)
3127- then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
3249+ then parseIntValue(split(aS[parseIntValue(cZ)], "_")[aU])
31283250 else 0
31293251 }
31303252 }
3131- let fT = am(this, A, ao, true)
3132- let gp = fY(ld, gl, false, fT)
3133- let mA = fo(gp)
3134- $Tuple2([StringEntry(gj, my), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], mA], ":")), StringEntry(L(A), makeString([toString(fT[7]), toString(fT[8]), toString(fT[9]), toString(fT[10]), toString(fT[11])], "_")), kK], 0)
3253+ let ge = am(this, A, ao, true)
3254+ let gA = gj(lu, gw, false, ge)
3255+ let mU = fz(gA)
3256+ $Tuple2([StringEntry(gu, mS), StringEntry(hI, makeString_2C([il[bh], il[bi], il[bj], mU], ":")), StringEntry(L(A), makeString([toString(ge[7]), toString(ge[8]), toString(ge[9]), toString(ge[10]), toString(ge[11])], "_")), lc], 0)
31353257 }
31363258 }
31373259 }
31383260 }
31393261
31403262
31413263
3142-@Callable(gw)
3143-func fortificateLand (P,mB) = {
3144- let kK = kH(gw)
3145- if ((size(gw.payments) != 0))
3264+@Callable(gH)
3265+func fortificateLand (P,mV) = {
3266+ let lc = kZ(gH)
3267+ if ((size(gH.payments) != 0))
31463268 then throw("No payments required")
31473269 else {
3148- let c = toString(gw.originCaller)
3149- let A = valueOrElse(getString(bG(c)), "")
3150- let ft = am(this, A, 0, false)
3151- let mC = by(P)
3152- let mD = split(valueOrElse(getString(mC), ":0_15:0_18:0"), "_")
3153- let je = value(assetInfo(fromBase58String(P)))
3154- let hL = (dr(split(je.description, "_")[cX]) / cu)
3155- let hM = valueOrElse(getInteger(bx(P)), 0)
3156- let hK = bw(P)
3157- let hP = hJ(hK, hL, hM)
3158- let mE = split(hP[bb], "_")
3159- let mF = parseIntValue(mE[bd])
3160- let mG = parseIntValue(mE[be])
3161- let mH = split(mB, "_")
3162- let mI = gf(mD, fj(hP[ba]), mF, mG, true, nil)
3163- let gl = mI._1
3164- let mJ = mI._2
3165- let mK = mI._3
3166- let mL = gf(mH, gl, mJ, mK, false, ft)
3167- let gp = mL._1
3168- let mM = mL._2
3169- let mN = mL._3
3170- let mA = fo(gp)
3171- let jK = makeString([mE[bc], toString(mM), toString(mN), mE[bf]], "_")
3172- $Tuple2([StringEntry(mC, mB), StringEntry(hK, makeString_2C([hP[aX], hP[aY], hP[aZ], mA, jK], ":")), kK], 0)
3173- }
3174- }
3175-
3176-
3177-
3178-@Callable(gw)
3179-func initDuckTourAttempt (A) = if ((gw.caller != cU))
3270+ let c = toString(gH.originCaller)
3271+ let A = valueOrElse(getString(bH(c)), "")
3272+ let fE = am(this, A, 0, false)
3273+ let mW = bz(P)
3274+ let mX = split(valueOrElse(getString(mW), ":0_15:0_18:0"), "_")
3275+ let jp = value(assetInfo(fromBase58String(P)))
3276+ let hW = (dE(split(jp.description, "_")[dh]) / cE)
3277+ let hX = valueOrElse(getInteger(by(P)), 0)
3278+ let hV = bx(P)
3279+ let ia = hU(hV, hW, hX)
3280+ let mY = split(ia[bc], "_")
3281+ let mZ = parseIntValue(mY[be])
3282+ let na = parseIntValue(mY[bf])
3283+ let nb = split(mV, "_")
3284+ let nc = gq(mX, fu(ia[bb]), mZ, na, true, nil)
3285+ let gw = nc._1
3286+ let nd = nc._2
3287+ let ne = nc._3
3288+ let nf = gq(nb, gw, nd, ne, false, fE)
3289+ let gA = nf._1
3290+ let ng = nf._2
3291+ let nh = nf._3
3292+ let mU = fz(gA)
3293+ let jV = makeString([mY[bd], toString(ng), toString(nh), mY[bg]], "_")
3294+ $Tuple2([StringEntry(mW, mV), StringEntry(hV, makeString_2C([ia[aY], ia[aZ], ia[ba], mU, jV], ":")), lc], 0)
3295+ }
3296+ }
3297+
3298+
3299+
3300+@Callable(gH)
3301+func initDuckTourAttempt (A) = if ((gH.caller != de))
31803302 then throw("Access denied")
31813303 else {
3182- let kK = kH(gw)
3183- let iN = z(A)
3184- let iO = ag(valueOrElse(getInteger(D(A)), 0))
3185- let kX = valueOrElse(getInteger(iN), iO)
3186- let mO = bI(A)
3187- let jc = valueOrElse(getString(mO), aJ)
3188- let cd = valueOrElse(getInteger(cU, bO), 0)
3189- let mP = (toString(cd) + "_T_0")
3190- $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, mP)], mP)
3304+ let lc = kZ(gH)
3305+ let iY = z(A)
3306+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
3307+ let kq = valueOrElse(getInteger(iY), iZ)
3308+ let ni = bJ(A)
3309+ let jn = valueOrElse(getString(ni), aJ)
3310+ let ce = valueOrElse(getInteger(de, bP), 0)
3311+ let nj = (toString(ce) + "_T_0")
3312+ $Tuple2([lc, IntegerEntry(J(A), kq), IntegerEntry(iY, iZ), StringEntry(K(A), jn), StringEntry(ni, nj)], nj)
31913313 }
31923314
31933315
31943316
3195-@Callable(gw)
3317+@Callable(gH)
31963318 func breakAttempt () = {
3197- let kK = kH(gw)
3198- let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
3199- let mO = bI(A)
3200- let jc = valueOrElse(getString(mO), aJ)
3201- if ((split(jc, "_")[bl] != "T"))
3319+ let lc = kZ(gH)
3320+ let A = valueOrErrorMessage(getString(bH(toString(gH.caller))), "You don't have a duck staked")
3321+ let ni = bJ(A)
3322+ let jn = valueOrElse(getString(ni), aJ)
3323+ if ((split(jn, "_")[bm] != "T"))
32023324 then throw("Your duck is not in the tournament")
32033325 else {
3204- let mQ = getIntegerValue(J(A))
3205- let mR = getStringValue(K(A))
3206- $Tuple2([kK, IntegerEntry(z(A), mQ), StringEntry(mO, mR)], jc)
3207- }
3208- }
3209-
3210-
3211-
3212-@Callable(gw)
3213-func exitTournamentInternal (A) = if ((gw.caller != this))
3326+ let kv = getIntegerValue(J(A))
3327+ let kw = getStringValue(K(A))
3328+ $Tuple2([lc, IntegerEntry(z(A), kv), StringEntry(ni, kw)], jn)
3329+ }
3330+ }
3331+
3332+
3333+
3334+@Callable(gH)
3335+func exitTournamentInternal (A) = if ((gH.caller != this))
32143336 then throw("Access denied")
32153337 else {
3216- let mQ = getIntegerValue(J(A))
3217- let mR = getStringValue(K(A))
3218- $Tuple2([IntegerEntry(z(A), mQ), StringEntry(bI(A), mR)], false)
3338+ let kv = getIntegerValue(J(A))
3339+ let kw = getStringValue(K(A))
3340+ $Tuple2([IntegerEntry(z(A), kv), StringEntry(bJ(A), kw)], false)
32193341 }
32203342
32213343
32223344
3223-@Callable(gw)
3224-func exitDeliveryInternal (A) = if ((gw.caller != this))
3345+@Callable(gH)
3346+func exitDeliveryInternal (A) = if ((gH.caller != this))
32253347 then throw("Access denied")
32263348 else {
3227- let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
3228- let ax = lastBlock.timestamp
3229- let kd = parseIntValue(jc[bk])
3230- let ke = parseIntValue(jc[bm])
3231- let jh = valueOrErrorMessage(getString(bF(A)), "NFT duck is orphaned")
3232- let mS = z(A)
3233- let kX = getIntegerValue(mS)
3234- let mT = if ((ke >= 3))
3235- then {
3236- let mU = invoke(cR, "sendDeliveryReward", [jh], nil)
3237- if ((mU == mU))
3238- then nil
3239- else throw("Strict value is not equal to itself.")
3240- }
3241- else {
3242- let mV = valueOrElse(getInteger(cR, bN), 0)
3243- let mW = invoke(cR, "updateDeliveryLocked", [(mV - aM)], nil)
3244- if ((mW == mW))
3245- then if ((0 >= kX))
3246- then nil
3247- else [IntegerEntry(T(A), (kd + a))]
3248- else throw("Strict value is not equal to itself.")
3249- }
3250- let mQ = getIntegerValue(J(A))
3251- let mR = getStringValue(K(A))
3252- $Tuple2(((mT :+ IntegerEntry(mS, mQ)) :+ StringEntry(bI(A), mR)), false)
3349+ let ma = ko(A)
3350+ $Tuple2((ma._1 ++ ma._2), false)
32533351 }
32543352
32553353
32563354
3257-@Callable(gw)
3258-func prepareRobbery (iC,iD) = {
3259- let kK = kH(gw)
3260- if (!(sigVerify_8Kb(iC, iD, dK)))
3355+@Callable(gH)
3356+func autoExitDelivery (A) = if ((gH.caller != this))
3357+ then throw("Access denied")
3358+ else {
3359+ let ma = ko(A)
3360+ $Tuple2(ma._1, $Tuple2(ma._3, ma._4))
3361+ }
3362+
3363+
3364+
3365+@Callable(gH)
3366+func prepareRobbery (iN,iO) = {
3367+ let lc = kZ(gH)
3368+ if (!(sigVerify_8Kb(iN, iO, dW)))
32613369 then throw("signature does not match")
3262- else if ((size(gw.payments) != 1))
3370+ else if ((size(gH.payments) != 1))
32633371 then throw("exactly 1 payment must be attached")
32643372 else {
3265- let kL = gw.payments[0]
3266- let mX = kL.amount
3267- if (if (!(isDefined(kL.assetId)))
3373+ let ld = gH.payments[0]
3374+ let nk = ld.amount
3375+ if (if (!(isDefined(ld.assetId)))
32683376 then true
3269- else (value(kL.assetId) != db))
3377+ else (value(ld.assetId) != dl))
32703378 then throw("WLGOLD payments only!")
32713379 else {
3272- let fb = split(toUtf8String(iC), "|")
3273- if ((size(fb) != 2))
3380+ let fm = split(toUtf8String(iN), "|")
3381+ if ((size(fm) != 2))
32743382 then throw("Wrong message format")
32753383 else {
3276- let A = fb[0]
3384+ let A = fm[0]
32773385 let ay = au(this, A)._1
3278- if ((ay > mX))
3279- then throw(((("Payment " + toString(mX)) + " < required ") + toString(ay)))
3386+ if ((ay > nk))
3387+ then throw(((("Payment " + toString(nk)) + " < required ") + toString(ay)))
32803388 else {
3281- let mY = split(fb[1], "_")
3389+ let nl = split(fm[1], "_")
32823390 let ax = lastBlock.timestamp
32833391 let az = valueOrElse(getInteger(R(A)), 0)
32843392 let aA = valueOrElse(getString(S(A)), "")
32853393 let aB = valueOrElse(getInteger(Q(aA)), 0)
32863394 if (if ((az != x))
32873395 then (aB > ax)
32883396 else false)
32893397 then throw(("You already started robbing, wait till " + toString(aB)))
32903398 else {
3291- func mZ (eD,P) = {
3292- let na = valueOrElse(getInteger(O(P)), 0)
3293- let nb = valueOrElse(getInteger(Q(P)), 0)
3294- if ((na > size(u)))
3399+ func nm (eO,P) = {
3400+ let nn = valueOrElse(getInteger(O(P)), 0)
3401+ let no = valueOrElse(getInteger(Q(P)), 0)
3402+ if ((nn > size(u)))
32953403 then throw("Invalid state")
3296- else if ((ax > nb))
3404+ else if ((ax > no))
32973405 then {
3298- let nc = valueOrElse(getInteger(bq(P)), 0)
3299- if ((0 >= nc))
3300- then eD
3406+ let np = valueOrElse(getInteger(br(P)), 0)
3407+ if ((0 >= np))
3408+ then eO
33013409 else {
3302- let gd = value(assetInfo(fromBase58String(P)))
3303- let ji = split(gd.description, "_")
3304- let iU = dr(ji[cX])
3305- let nd = iT(P, iU)
3306- let gC = (ax - nc)
3307- let jl = fraction(gC, (nd * iU), a)
3308- if ((v > jl))
3309- then eD
3310- else (eD :+ P)
3410+ let go = value(assetInfo(fromBase58String(P)))
3411+ let jt = split(go.description, "_")
3412+ let jf = dE(jt[dh])
3413+ let nq = je(P, jf)
3414+ let gN = (ax - np)
3415+ let jw = fraction(gN, (nq * jf), a)
3416+ if ((v > jw))
3417+ then eO
3418+ else (eO :+ P)
33113419 }
33123420 }
3313- else eD
3421+ else eO
33143422 }
33153423
3316- let ne = {
3317- let eF = mY
3318- let eG = size(eF)
3319- let eH = nil
3320- func eI (eJ,eK) = if ((eK >= eG))
3321- then eJ
3322- else mZ(eJ, eF[eK])
3323-
3324- func eL (eJ,eK) = if ((eK >= eG))
3325- then eJ
3424+ let nr = {
3425+ let eQ = nl
3426+ let eR = size(eQ)
3427+ let eS = nil
3428+ func eT (eU,eV) = if ((eV >= eR))
3429+ then eU
3430+ else nm(eU, eQ[eV])
3431+
3432+ func eW (eU,eV) = if ((eV >= eR))
3433+ then eU
33263434 else throw("List size exceeds 10")
33273435
3328- eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3436+ eW(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eS, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
33293437 }
3330- if ((size(ne) == 0))
3438+ if ((size(nr) == 0))
33313439 then throw("No candidates for robbery")
33323440 else {
3333- let nf = dC(size(ne), height, (iD + gw.transactionId))
3334- let P = ne[nf]
3335- $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), kK], P)
3441+ let ns = dO(size(nr), height, (iO + gH.transactionId))
3442+ let P = nr[ns]
3443+ $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), lc], P)
33363444 }
33373445 }
33383446 }
33393447 }
33403448 }
33413449 }
33423450 }
33433451
33443452
33453453
3346-@Callable(gw)
3347-func robLand (iC,iD) = {
3348- let kK = kH(gw)
3349- if (!(sigVerify_8Kb(iC, iD, dK)))
3454+@Callable(gH)
3455+func robLand (iN,iO) = {
3456+ let lc = kZ(gH)
3457+ if (!(sigVerify_8Kb(iN, iO, dW)))
33503458 then throw("signature does not match")
33513459 else {
3352- let bK = toString(gw.caller)
3353- let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3460+ let bL = toString(gH.caller)
3461+ let A = valueOrErrorMessage(getString(bH(bL)), "You don't have a duck staked")
33543462 let ax = lastBlock.timestamp
3355- $Tuple2([kK, IntegerEntry(M(A), ax)], 0)
3356- }
3357- }
3358-
3359-
3360-
3361-@Callable(gw)
3362-func acceptDelivery () = if (!(ck))
3463+ $Tuple2([lc, IntegerEntry(M(A), ax)], 0)
3464+ }
3465+ }
3466+
3467+
3468+
3469+@Callable(gH)
3470+func acceptDelivery () = if (!(cu))
33633471 then throw("Delivery feature is turned off!")
33643472 else {
3365- let kK = kH(gw)
3366- let bK = toString(gw.caller)
3367- let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3368- let ng = valueOrElse(getInteger(cR, bM), 0)
3369- let mV = valueOrElse(getInteger(cR, bN), 0)
3370- if ((aM > (ng - mV)))
3371- then throw(((("Delivery is not available, fund=" + dw(ng, 6)) + ", locked=") + dw(mV, 6)))
3473+ let lc = kZ(gH)
3474+ let bL = toString(gH.caller)
3475+ let A = valueOrErrorMessage(getString(bH(bL)), "You don't have a duck staked")
3476+ let nt = valueOrElse(getInteger(db, bN), 0)
3477+ let kt = valueOrElse(getInteger(db, bO), 0)
3478+ if ((aM > (nt - kt)))
3479+ then throw(((("Delivery is not available, fund=" + dJ(nt, 6)) + ", locked=") + dJ(kt, 6)))
33723480 else {
33733481 let ax = lastBlock.timestamp
3374- let nh = valueOrElse(getInteger(T(A)), 0)
3375- if ((nh > ax))
3376- then throw(("Delivery is forbidden for your duck until " + toString(nh)))
3377- else if (kb(A))
3482+ let nu = valueOrElse(getInteger(T(A)), 0)
3483+ if ((nu > ax))
3484+ then throw(("Delivery is forbidden for your duck until " + toString(nu)))
3485+ else if (km(A))
33783486 then throw("acceptDelivery_checkTournament")
3379- else if (kc(A))
3487+ else if (kn(A))
33803488 then throw("acceptDelivery_checkDelivery")
33813489 else {
3382- let ni = do(invoke(cR, "updateDeliveryLocked", [(mV + aM)], nil))
3383- let iN = z(A)
3384- let iO = ag(valueOrElse(getInteger(D(A)), 0))
3385- let kX = valueOrElse(getInteger(iN), iO)
3386- let mO = bI(A)
3387- let jc = valueOrElse(getString(mO), aJ)
3388- let nj = (toString(ax) + "_D_0")
3389- $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, nj)], $Tuple2(nj, ni))
3490+ let nv = dy(invoke(db, "updateDeliveryLocked", [(kt + aM)], nil))
3491+ let iY = z(A)
3492+ let iZ = ag(valueOrElse(getInteger(D(A)), 0))
3493+ let kq = valueOrElse(getInteger(iY), iZ)
3494+ let ni = bJ(A)
3495+ let jn = valueOrElse(getString(ni), aJ)
3496+ let nw = (toString(ax) + "_D_0")
3497+ $Tuple2([lc, IntegerEntry(J(A), kq), IntegerEntry(iY, iZ), StringEntry(K(A), jn), StringEntry(ni, nw)], $Tuple2(nw, nv))
33903498 }
33913499 }
33923500 }
33933501
33943502

github/deemru/w8io/169f3d6 
1662.37 ms