tx · AdZyetDQHzA1mV1Ub2ViNqAgtLJJWZp1hL4L5LegRPbL

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.06000000 Waves

2023.06.08 21:15 [2614047] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "AdZyetDQHzA1mV1Ub2ViNqAgtLJJWZp1hL4L5LegRPbL", "fee": 6000000, "feeAssetId": null, "timestamp": 1686248198839, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4fGVYu4F4kXyPtrkE1ACLadgq94Jw17ATHoopLGu4U93ET3o1QES6x9FQLh3qe5FsXM45ryy7jiMAGEmYJYgUq3G" ], "script": "base64:BgKWAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgQKAgEIEgQKAgEBEgASBAoCCAgSABIECgICAhIDCgEIEgMKAQgSBAoCCAgSAwoBGBIDCgEYEgQKAggIEgQKAggIEgMKAQgSBQoDCAgIEgQKAggIEgMKAQESBQoDAQEIEgMKAQgSAwoBCJcBAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAEXJlY2lwZUlkeFBhY2tzaXplAAcACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwEKZ2V0UGtnU2l6ZQEHcHJvZElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQdwcm9kSWR4AgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHABEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQoBBmFkZE1hdAICYWMBagkAZAIFAmFjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQFqCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGYWRkTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CFCwgIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAggFAXICXzECAV8JALkJAggFAXICXzICAV8BA2FicwEBeAMJAMACAgUBeAkAtgIBAAAFAXgJAL4CAQUBeAAEZnJlcQkAzAgCCQDMCAIABgkAzAgCAAkJAMwIAgAOCQDMCAIADwkAzAgCABAFA25pbAkAzAgCCQDMCAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCAUBdAJfMQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEB3BrZ1NpemUJAQpnZXRQa2dTaXplAQUDaWR4BARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FB3BrZ1NpemUAAQUHcGtnU2l6ZQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECndoR29vZHNWb2wDCQAAAgUFZ29vZHMCAAAACAoAAiRsCQC8CQIFBWdvb2RzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yCQBkAgkAZAIFCHdoUmVzVm9sBQh3aE1hdFZvbAUKd2hHb29kc1ZvbAEMZ2V0V2FyZWhvdXNlAwV3aEtleQlsYW5kSW5kZXgKaW5mcmFMZXZlbAQJdm9sUHJlZml4CQCsAgIJAKwCAgkApAMBBQlsYW5kSW5kZXgCAV8JAKQDAQUKaW5mcmFMZXZlbAQHd2hUb3RhbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4AQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdk0CA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWkEA2JwbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaE1hdAUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0EAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFyAl80CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdk0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdlACA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAdwa2dTaXplCQEKZ2V0UGtnU2l6ZQEFAWkEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQdwa2dTaXplCQEIdG9Wb2x1bWUCBQN3aHAFB3BrZ1NpemUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAMJAGYCCQEBLQEFAmFtBQN3aHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQdwa2dTaXplCQEIdG9Wb2x1bWUCBQN3aHAFB3BrZ1NpemUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAuQkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAuQkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEQZXhwZWRpdGlvbkNvbW1vbgUMc2hvdWxkVXNlTWF0BmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAtQkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgECEnNpZ25hdHVyZSBvdXRkYXRlZAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAGcCAAAFBW5ld0hQCQCVCgMJAM0IAgMJAQEhAQUMc2hvdWxkVXNlTWF0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUHRVhQVVNEVAULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAACAAAABAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQKc2VudEFtb3VudAMJAAACBQVib251cwIBJAkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIFBmNhbGxlcgUEdHhJZAQCaWQICAUBZQJfMgJfMQkAlQoDCQDNCAIJAM0IAgkAzQgCCAUBZQJfMQkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbmV3SFAJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkBQpzZW50QW1vdW50AQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMzE4OTYzMjQzNQMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAzMTg5NjMyNDM1Al8xBAZkdWNrSWQIBQ0kdDAzMTg5NjMyNDM1Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM0ODA5MzU2ODADCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM0ODA5MzU2ODACXzEEBWJwUmVzCAUNJHQwMzQ4MDkzNTY4MAJfMgQFbG9mdE8IBQ0kdDAzNDgwOTM1NjgwAl8zBAVsb2Z0RggFDSR0MDM0ODA5MzU2ODACXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwkAZwIFCGN1ckxldmVsAAMJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCZCgcFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmQoHBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkHQFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzU3RyCQCiCAEJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCWFydFBpZWNlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEAXQICQEFdmFsdWUBCQDtBwEFBmhlaWdodAl0aW1lc3RhbXAEC3JlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFC3JlbGVhc2VUaW1lBQF0CQACAQkArAICAjlZb3VyIGdXTCBhcmUgdGFraW5nIHBhcnQgaW4gdm90aW5nLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQULcmVsZWFzZVRpbWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEJc3Rha2VEdWNrAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM0IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyAGQFDHByb2xvZ0FjdGlvbgFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEJANgEAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBCQDYBAEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAGYCAGQFBmhlYWx0aAkAAgECJlBsZWFzZSBoZWFsIHlvdXIgZHVjayBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzQgCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIFBW5ld0hQAAAFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUKc2VudEFtb3VudAFpAQlzZXRIZWFsdGgCBmhlYWx0aAtkdWNrQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDCQBmAgAABQZoZWFsdGgGCQBmAgUGaGVhbHRoAGQJAAIBAhpIUCBzaG91bGQgYmUgd2l0aGluIDAuLjEwMAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUGaGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBBGhlYWwCC21lZEtpdExldmVsCHF1YW50aXR5BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwMJAGYCAAEFC21lZEtpdExldmVsBgkAZgIFC21lZEtpdExldmVsAAMJAAIBAhdNZWRLaXQgbGV2ZWxzIDEuLjMgb25seQMJAGcCAAAFCHF1YW50aXR5CQACAQkArAICAh1RdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUhIAkApAMBBQhxdWFudGl0eQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBnAgUJb2xkSGVhbHRoAGQJAAIBAhpIUCBzaG91bGQgYmUgPCAxMDAgdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECnByb2R1Y3RJZHgJAGUCBQttZWRLaXRMZXZlbAABBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFCnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUKcHJvZHVjdElkeAAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4CgEMc3VidHJhY3RQcm9kAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAAEAXkJAKQDAQMJAAACBQFuBQpwcm9kdWN0SWR4CQBlAgUBeAUIcXVhbnRpdHkFAXgJAJQKAgkAzQgCCAUDYWNjAl8xBQF5CQBkAgUBbgABBAtuZXdQcm9kTGlzdAgKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHN1YnRyYWN0UHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8xBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAJAGUCBQttZWRLaXRMZXZlbAABCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIFC25ld1Byb2RMaXN0AgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAAAAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4ACgMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBQYIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIJAKUIAQgFAWkGY2FsbGVyBQtsYW5kQXNzZXRJZAkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcgMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AK1oktE=", "height": 2614047, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EwAf4iHzMFaopRxmMcHubW67YQzWxpHAuhjFjehHoSgA Next: AbdkkurWE4w3L9aAashDwqj8ymv99ipfxZiDgiAgBZ9d Diff:
OldNewDifferences
6262
6363 let u = "Africa_F_Africa"
6464
65-let v = ["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"]
66-
67-let w = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
68-
69-let x = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
70-
71-let y = 7
72-
73-let z = 0
74-
75-let A = 1
76-
77-let B = 2
78-
79-let C = 3
80-
81-let D = 0
82-
83-let E = 1
84-
85-let F = 2
86-
87-let G = 3
88-
89-let H = 4
90-
91-let I = 0
92-
93-let J = 1
94-
95-let K = 2
96-
97-let L = 3
98-
99-let M = 0
100-
101-let N = 1
102-
103-let O = 2
104-
105-let P = 3
106-
107-func Q (R) = parseIntValue(split(x[R], "_")[y])
108-
109-
110-func S (T,U) = valueOrErrorMessage(getString(T, U), makeString(["mandatory ", toString(T), ".", U, " is not defined"], ""))
111-
112-
113-let V = 2
114-
115-let W = 3
116-
117-func X () = "%s__restConfig"
118-
119-
120-func Y () = "%s__restAddr"
121-
122-
123-func Z (aa) = split_4C(S(aa, X()), f)
124-
125-
126-func ab (ac,ad) = valueOrErrorMessage(addressFromString(ac[ad]), ("Rest cfg doesn't contain address at index " + toString(ad)))
127-
128-
129-let ae = addressFromStringValue(valueOrElse(getString(this, Y()), d))
130-
131-let ac = Z(ae)
132-
133-let af = ab(ac, V)
134-
135-let ag = ab(ac, W)
136-
137-func ah (ai) = ("lastTxIdByUser_" + ai)
138-
139-
140-func aj (ak) = ("nftOwner_" + ak)
141-
142-
143-func al (ak) = ("landCustomNameByAssetId_" + ak)
144-
145-
146-func am (ak) = ("stakedTime_" + ak)
147-
148-
149-func an (ak) = ("infraLevel_" + ak)
150-
151-
152-func ao (ap,ak) = makeString(["landArtStatus", ap, ak], "_")
153-
154-
155-func aq (ar,ak,as) = ((((("stakedTimeByTypeAssetIdAndOwner_" + ar) + "_") + ak) + "_") + as)
156-
157-
158-func at (au) = ("wareHouse_" + au)
159-
160-
161-func av (as) = ("stakedLandsByOwner_" + as)
162-
163-
164-func aw (ak) = ("duckCustomNameByAssetId_" + ak)
165-
166-
167-func ax (ai) = ("accountCustomNameByAddr_" + ai)
168-
169-
170-func ay (ai) = ("accRefBy_" + ai)
171-
172-
173-func az (ai) = ("accReferrals_" + ai)
174-
175-
176-func aA (ak) = ("duckOwner_" + ak)
177-
178-
179-func aB (as) = ("stakedDuckByOwner_" + as)
180-
181-
182-func aC (aD) = ("backPack_" + aD)
183-
184-
185-func aE (aD) = ("duckLocation_" + aD)
186-
187-
188-func aF (aD) = ("duckHealth_" + aD)
189-
190-
191-func aG () = "resTypesProportions"
192-
193-
194-func aH () = "contractsBlocked"
195-
196-
197-func aI (aJ) = ("%s%s__userGwlReleaseTime__" + aJ)
198-
199-
200-let aK = 1
201-
202-let aL = 2
203-
204-func aM (aN) = {
205- let c = aN
65+let v = 39637
66+
67+let w = 10
68+
69+let x = ["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"]
70+
71+let y = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
72+
73+let z = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
74+
75+let A = 7
76+
77+let B = 0
78+
79+let C = 1
80+
81+let D = 2
82+
83+let E = 3
84+
85+let F = 0
86+
87+let G = 1
88+
89+let H = 2
90+
91+let I = 3
92+
93+let J = 4
94+
95+let K = 0
96+
97+let L = 1
98+
99+let M = 2
100+
101+let N = 3
102+
103+let O = 0
104+
105+let P = 1
106+
107+let Q = 2
108+
109+let R = 3
110+
111+func S (T) = parseIntValue(split(z[T], "_")[A])
112+
113+
114+func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], ""))
115+
116+
117+let X = 2
118+
119+let Y = 3
120+
121+func Z () = "%s__restConfig"
122+
123+
124+func aa () = "%s__restAddr"
125+
126+
127+func ab (ac) = split_4C(U(ac, Z()), f)
128+
129+
130+func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af)))
131+
132+
133+let ag = addressFromStringValue(valueOrElse(getString(this, aa()), d))
134+
135+let ae = ab(ag)
136+
137+let ah = ad(ae, X)
138+
139+let ai = ad(ae, Y)
140+
141+func aj (ak) = ("lastTxIdByUser_" + ak)
142+
143+
144+func al (am) = ("nftOwner_" + am)
145+
146+
147+func an (am) = ("landCustomNameByAssetId_" + am)
148+
149+
150+func ao (am) = ("stakedTime_" + am)
151+
152+
153+func ap (am) = ("infraLevel_" + am)
154+
155+
156+func aq (ar,am) = makeString(["landArtStatus", ar, am], "_")
157+
158+
159+func as (at,am,au) = ((((("stakedTimeByTypeAssetIdAndOwner_" + at) + "_") + am) + "_") + au)
160+
161+
162+func av (aw) = ("wareHouse_" + aw)
163+
164+
165+func ax (au) = ("stakedLandsByOwner_" + au)
166+
167+
168+func ay (am) = ("duckCustomNameByAssetId_" + am)
169+
170+
171+func az (ak) = ("accountCustomNameByAddr_" + ak)
172+
173+
174+func aA (ak) = ("accRefBy_" + ak)
175+
176+
177+func aB (ak) = ("accReferrals_" + ak)
178+
179+
180+func aC (am) = ("duckOwner_" + am)
181+
182+
183+func aD (au) = ("stakedDuckByOwner_" + au)
184+
185+
186+func aE (aF) = ("backPack_" + aF)
187+
188+
189+func aG (aF) = ("duckLocation_" + aF)
190+
191+
192+func aH (aF) = ("duckHealth_" + aF)
193+
194+
195+func aI () = "resTypesProportions"
196+
197+
198+func aJ () = "contractsBlocked"
199+
200+
201+func aK (aL) = ("%s%s__userGwlReleaseTime__" + aL)
202+
203+
204+func aM () = "emergencyWarehouseProducts"
205+
206+
207+let aN = 1
208+
209+let aO = 2
210+
211+func aP (aQ) = {
212+ let c = aQ
213+ if ($isInstanceOf(c, "String"))
214+ then {
215+ let aR = c
216+ aR
217+ }
218+ else throw("fail to cast into String")
219+ }
220+
221+
222+func aS (aQ) = {
223+ let c = aQ
206224 if ($isInstanceOf(c, "Int"))
207225 then {
208- let aO = c
209- aO
226+ let aT = c
227+ aT
210228 }
211229 else throw("fail to cast into Int")
212230 }
213231
214232
215-func aP (aQ) = {
216- let c = aQ
233+func aU (aV) = {
234+ let c = aV
217235 if (("S" == c))
218236 then m
219237 else if (("M" == c))
228246 }
229247
230248
231-let aR = {
249+func aW (aX) = {
250+ func aY (aZ,ba) = (aZ + parseIntValue(aX[ba]))
251+
252+ let bb = [0, 1, 2, 3, 4, 5]
253+ let bc = size(bb)
254+ let bd = 0
255+ func be (bf,bg) = if ((bg >= bc))
256+ then bf
257+ else aY(bf, bb[bg])
258+
259+ func bh (bf,bg) = if ((bg >= bc))
260+ then bf
261+ else throw("List size exceeds 6")
262+
263+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
264+ }
265+
266+
267+let bi = {
232268 let c = a
233269 if ((base58'2W' == c))
234270 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
237273 else throw("Unknown chain")
238274 }
239275
240-let aS = {
276+let bj = {
241277 let c = a
242278 if ((base58'2W' == c))
243279 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
246282 else throw("Unknown chain")
247283 }
248284
249-let aT = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
250-
251-let aU = [30, 60, 120]
252-
253-let aV = 300000
254-
255-let aW = 5000000
256-
257-let aX = 50
258-
259-let aY = 10000000
260-
261-let aZ = {
285+let bk = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
286+
287+let bl = [30, 60, 120]
288+
289+let bm = 300000
290+
291+let bn = 5000000
292+
293+let bo = 50
294+
295+let bp = 10000000
296+
297+let bq = {
262298 let c = a
263299 if ((base58'2W' == c))
264300 then 252289527462
267303 else throw("Unknown chain")
268304 }
269305
270-let ba = {
306+let br = {
271307 let c = a
272308 if ((base58'2W' == c))
273309 then 250000000
276312 else throw("Unknown chain")
277313 }
278314
279-let bb = toBigInt(5)
280-
281-let bc = toBigInt(20)
282-
283-let bd = toBigInt((20 * 20))
284-
285-let be = toBigInt(((20 * 20) * 20))
286-
287-let bf = toBigInt((((20 * 20) * 20) * 20))
288-
289-let bg = toBigInt(((((20 * 20) * 20) * 20) * 20))
290-
291-let bh = 500
292-
293-func bi () = "nextLandNum"
294-
295-
296-func bj (bk) = ("landToAsset_" + bk)
297-
298-
299-func bl (bm) = ("landByCustomName_" + bm)
300-
301-
302-func bn (ak,as) = ((("infraLevelByAssetIdAndOwner_" + ak) + "_") + as)
303-
304-
305-func bo (ap,ak,as) = makeString(["landArtStatusByTypeAssetIdAndOwner", ap, ak, as], "_")
306-
307-
308-func bp (bk) = ("landOwner_" + bk)
309-
310-
311-func bq (bm) = ("duckByCustomName_" + bm)
312-
313-
314-func br (bm) = ("accountByCustomName_" + bm)
315-
316-
317-func bs () = "oldiesList"
318-
319-
320-let bt = 0
321-
322-let bu = 1
323-
324-let bv = 2
325-
326-let bw = 0
327-
328-let bx = 5
329-
330-let by = 6
331-
332-func bz (bk,aQ) = ((i + bk) + aQ)
333-
334-
335-func bA (bB,bC) = {
336- let bD = (((((bC[0] + bC[1]) + bC[2]) + bC[3]) + bC[4]) + bC[5])
337- if ((0 >= bD))
315+let bs = toBigInt(5)
316+
317+let bt = toBigInt(20)
318+
319+let bu = toBigInt((20 * 20))
320+
321+let bv = toBigInt(((20 * 20) * 20))
322+
323+let bw = toBigInt((((20 * 20) * 20) * 20))
324+
325+let bx = toBigInt(((((20 * 20) * 20) * 20) * 20))
326+
327+let by = 500
328+
329+func bz () = "nextLandNum"
330+
331+
332+func bA (bB) = ("landToAsset_" + bB)
333+
334+
335+func bC (bD) = ("landByCustomName_" + bD)
336+
337+
338+func bE (am,au) = ((("infraLevelByAssetIdAndOwner_" + am) + "_") + au)
339+
340+
341+func bF (ar,am,au) = makeString(["landArtStatusByTypeAssetIdAndOwner", ar, am, au], "_")
342+
343+
344+func bG (bB) = ("landOwner_" + bB)
345+
346+
347+func bH (bD) = ("duckByCustomName_" + bD)
348+
349+
350+func bI (bD) = ("accountByCustomName_" + bD)
351+
352+
353+func bJ () = "oldiesList"
354+
355+
356+let bK = 0
357+
358+let bL = 1
359+
360+let bM = 2
361+
362+let bN = 0
363+
364+let bO = 5
365+
366+let bP = 6
367+
368+func bQ (bB,aV) = ((i + bB) + aV)
369+
370+
371+func bR (bS,bT) = {
372+ let bU = (((((bT[0] + bT[1]) + bT[2]) + bT[3]) + bT[4]) + bT[5])
373+ if ((0 >= bU))
338374 then throw("Zero weights sum")
339375 else {
340- let bE = fraction(bB, g, bD)
341- func bF (bG,bH) = (bG :+ fraction(bH, bE, g))
342-
343- let bI = bC
344- let bJ = size(bI)
345- let bK = nil
346- func bL (bM,bN) = if ((bN >= bJ))
347- then bM
348- else bF(bM, bI[bN])
349-
350- func bO (bM,bN) = if ((bN >= bJ))
351- then bM
376+ let bV = fraction(bS, g, bU)
377+ func bW (bX,bY) = (bX :+ fraction(bY, bV, g))
378+
379+ let bb = bT
380+ let bc = size(bb)
381+ let bd = nil
382+ func be (bf,bg) = if ((bg >= bc))
383+ then bf
384+ else bW(bf, bb[bg])
385+
386+ func bh (bf,bg) = if ((bg >= bc))
387+ then bf
352388 else throw("List size exceeds 6")
353389
354- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
355- }
356- }
357-
358-
359-func bP (bB) = {
360- let bQ = split(value(getString(aG())), "_")
361- if ((size(bQ) != l))
390+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
391+ }
392+ }
393+
394+
395+func bZ (bS) = {
396+ let ca = split(value(getString(aI())), "_")
397+ if ((size(ca) != l))
362398 then throw("Wrong proportions data")
363399 else {
364- let bR = [parseIntValue(bQ[0]), parseIntValue(bQ[1]), parseIntValue(bQ[2]), parseIntValue(bQ[3]), parseIntValue(bQ[4]), parseIntValue(bQ[5])]
365- bA(bB, bR)
366- }
367- }
368-
369-
370-func bS (bT,bU,bV) = {
371- let bW = bP(bV)
372- func bX (bG,ad) = {
373- let bY = (parseIntValue(bU[ad]) - bW[ad])
374- if ((0 > bY))
375- then throw(((((("Not enough material idx=" + toString(ad)) + ", you have ") + bU[ad]) + ", but need ") + toString(bW[ad])))
376- else (bG :+ toString(bY))
400+ let cb = [parseIntValue(ca[0]), parseIntValue(ca[1]), parseIntValue(ca[2]), parseIntValue(ca[3]), parseIntValue(ca[4]), parseIntValue(ca[5])]
401+ bR(bS, cb)
402+ }
403+ }
404+
405+
406+func cc (cd,ce,cf) = {
407+ let cg = bZ(cf)
408+ func ch (bX,af) = {
409+ let ci = (parseIntValue(ce[af]) - cg[af])
410+ if ((0 > ci))
411+ then throw(((((("Not enough material idx=" + toString(af)) + ", you have ") + ce[af]) + ", but need ") + toString(cg[af])))
412+ else (bX :+ toString(ci))
377413 }
378414
379- if (bT)
415+ if (cd)
380416 then {
381- let bI = [0, 1, 2, 3, 4, 5]
382- let bJ = size(bI)
383- let bK = nil
384- func bL (bM,bN) = if ((bN >= bJ))
385- then bM
386- else bX(bM, bI[bN])
387-
388- func bO (bM,bN) = if ((bN >= bJ))
389- then bM
417+ let bb = [0, 1, 2, 3, 4, 5]
418+ let bc = size(bb)
419+ let bd = nil
420+ func be (bf,bg) = if ((bg >= bc))
421+ then bf
422+ else ch(bf, bb[bg])
423+
424+ func bh (bf,bg) = if ((bg >= bc))
425+ then bf
390426 else throw("List size exceeds 6")
391427
392- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
393- }
394- else bU
395- }
396-
397-
398-func bZ (ca,cb,cc,cd) = if ((size(ca) != l))
428+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
429+ }
430+ else ce
431+ }
432+
433+
434+func cj (ck,cl,cm,cn) = if ((size(ck) != l))
399435 then throw("Wrong proportions data")
400436 else {
401- func ce (bG,cf) = {
402- let bY = (parseIntValue(ca[cf]) + ((cd * cb[cf]) * cc))
403- if ((0 > bY))
404- then throw(((((((("Panic! Pieces of type=" + toString(cf)) + ", sign=") + toString(cd)) + ", terrainCounts[i]=") + toString(cb[cf])) + ", landSizeIndex=") + toString(cc)))
405- else (bG :+ toString(bY))
406- }
407-
408- let bR = {
409- let bI = [0, 1, 2, 3, 4, 5]
410- let bJ = size(bI)
411- let bK = nil
412- func bL (bM,bN) = if ((bN >= bJ))
413- then bM
414- else ce(bM, bI[bN])
415-
416- func bO (bM,bN) = if ((bN >= bJ))
417- then bM
437+ func co (bX,cp) = {
438+ let ci = (parseIntValue(ck[cp]) + ((cn * cl[cp]) * cm))
439+ if ((0 > ci))
440+ then throw(((((((("Panic! Pieces of type=" + toString(cp)) + ", sign=") + toString(cn)) + ", terrainCounts[i]=") + toString(cl[cp])) + ", landSizeIndex=") + toString(cm)))
441+ else (bX :+ toString(ci))
442+ }
443+
444+ let cb = {
445+ let bb = [0, 1, 2, 3, 4, 5]
446+ let bc = size(bb)
447+ let bd = nil
448+ func be (bf,bg) = if ((bg >= bc))
449+ then bf
450+ else co(bf, bb[bg])
451+
452+ func bh (bf,bg) = if ((bg >= bc))
453+ then bf
418454 else throw("List size exceeds 6")
419455
420- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
421- }
422- makeString(bR, "_")
456+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
457+ }
458+ makeString(cb, "_")
423459 }
424460
425461
426-func cg (cb,cc,cd) = {
427- let ca = split(valueOrElse(getString(aG()), "0_0_0_0_0_0"), "_")
428- bZ(ca, cb, cc, cd)
429- }
430-
431-
432-func ch (ci) = [(size(split(ci, "A")) - 1), (size(split(ci, "B")) - 1), (size(split(ci, "C")) - 1), (size(split(ci, "D")) - 1), (size(split(ci, "E")) - 1), (size(split(ci, "F")) - 1)]
433-
434-
435-func cj (ck,cb,cl,cc,cm) = {
436- func cn (bG,cf) = {
437- let co = ((fraction(cl, cm, s) * cb[cf]) * cc)
438- (bG :+ toString((parseIntValue(ck[cf]) + co)))
462+func cq (cl,cm,cn) = {
463+ let ck = split(valueOrElse(getString(aI()), "0_0_0_0_0_0"), "_")
464+ cj(ck, cl, cm, cn)
465+ }
466+
467+
468+func cr (cs) = [(size(split(cs, "A")) - 1), (size(split(cs, "B")) - 1), (size(split(cs, "C")) - 1), (size(split(cs, "D")) - 1), (size(split(cs, "E")) - 1), (size(split(cs, "F")) - 1)]
469+
470+
471+func ct (cu,cl,cv,cm,cw) = {
472+ func cx (bX,cp) = {
473+ let cy = ((fraction(cv, cw, s) * cl[cp]) * cm)
474+ (bX :+ toString((parseIntValue(cu[cp]) + cy)))
439475 }
440476
441- let bR = {
442- let bI = [0, 1, 2, 3, 4, 5]
443- let bJ = size(bI)
444- let bK = nil
445- func bL (bM,bN) = if ((bN >= bJ))
446- then bM
447- else cn(bM, bI[bN])
448-
449- func bO (bM,bN) = if ((bN >= bJ))
450- then bM
477+ let cb = {
478+ let bb = [0, 1, 2, 3, 4, 5]
479+ let bc = size(bb)
480+ let bd = nil
481+ func be (bf,bg) = if ((bg >= bc))
482+ then bf
483+ else cx(bf, bb[bg])
484+
485+ func bh (bf,bg) = if ((bg >= bc))
486+ then bf
451487 else throw("List size exceeds 6")
452488
453- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
489+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
454490 }
455- makeString(bR, "_")
456- }
457-
458-
459-func cp (cb,cl,cc,cm) = {
460- func cn (bG,cf) = {
461- let co = ((fraction(cl, cm, s) * cb[cf]) * cc)
462- $Tuple2((bG._1 :+ co), (bG._2 + co))
491+ makeString(cb, "_")
492+ }
493+
494+
495+func cz (cl,cv,cm,cw) = {
496+ func cx (bX,cp) = {
497+ let cy = ((fraction(cv, cw, s) * cl[cp]) * cm)
498+ $Tuple2((bX._1 :+ cy), (bX._2 + cy))
463499 }
464500
465- let bI = [0, 1, 2, 3, 4, 5]
466- let bJ = size(bI)
467- let bK = $Tuple2(nil, 0)
468- func bL (bM,bN) = if ((bN >= bJ))
469- then bM
470- else cn(bM, bI[bN])
471-
472- func bO (bM,bN) = if ((bN >= bJ))
473- then bM
501+ let bb = [0, 1, 2, 3, 4, 5]
502+ let bc = size(bb)
503+ let bd = $Tuple2(nil, 0)
504+ func be (bf,bg) = if ((bg >= bc))
505+ then bf
506+ else cx(bf, bb[bg])
507+
508+ func bh (bf,bg) = if ((bg >= bc))
509+ then bf
474510 else throw("List size exceeds 6")
475511
476- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
477- }
478-
479-
480-func cq (cr,cs,ct,cu) = {
481- let cv = ct._1
482- let cw = ct._2
483- if ((cw == 0))
484- then $Tuple2(makeString(cr, "_"), makeString(cs, "_"))
485- else if ((cu >= cw))
512+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
513+ }
514+
515+
516+func cA (cB,cC,cD,cE) = {
517+ let cF = cD._1
518+ let cG = cD._2
519+ if ((cG == 0))
520+ then $Tuple2(makeString(cB, "_"), makeString(cC, "_"))
521+ else if ((cE >= cG))
486522 then {
487- func cx (bG,cf) = (bG :+ toString((parseIntValue(cr[cf]) + cv[cf])))
488-
489- let bR = {
490- let bI = [0, 1, 2, 3, 4, 5]
491- let bJ = size(bI)
492- let bK = nil
493- func bL (bM,bN) = if ((bN >= bJ))
494- then bM
495- else cx(bM, bI[bN])
496-
497- func bO (bM,bN) = if ((bN >= bJ))
498- then bM
523+ func cH (bX,cp) = (bX :+ toString((parseIntValue(cB[cp]) + cF[cp])))
524+
525+ let cb = {
526+ let bb = [0, 1, 2, 3, 4, 5]
527+ let bc = size(bb)
528+ let bd = nil
529+ func be (bf,bg) = if ((bg >= bc))
530+ then bf
531+ else cH(bf, bb[bg])
532+
533+ func bh (bf,bg) = if ((bg >= bc))
534+ then bf
499535 else throw("List size exceeds 6")
500536
501- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
537+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
502538 }
503- $Tuple2(makeString(bR, "_"), makeString(cs, "_"))
539+ $Tuple2(makeString(cb, "_"), makeString(cC, "_"))
504540 }
505541 else {
506- func cy (bG,cf) = {
507- let cz = fraction(cv[cf], cu, cw)
508- $Tuple2((bG._1 :+ toString((parseIntValue(cr[cf]) + cz))), (bG._2 :+ toString(((parseIntValue(cs[cf]) + cv[cf]) - cz))))
542+ func cI (bX,cp) = {
543+ let cJ = fraction(cF[cp], cE, cG)
544+ $Tuple2((bX._1 :+ toString((parseIntValue(cB[cp]) + cJ))), (bX._2 :+ toString(((parseIntValue(cC[cp]) + cF[cp]) - cJ))))
509545 }
510546
511- let bR = {
512- let bI = [0, 1, 2, 3, 4, 5]
513- let bJ = size(bI)
514- let bK = $Tuple2(nil, nil)
515- func bL (bM,bN) = if ((bN >= bJ))
516- then bM
517- else cy(bM, bI[bN])
518-
519- func bO (bM,bN) = if ((bN >= bJ))
520- then bM
547+ let cb = {
548+ let bb = [0, 1, 2, 3, 4, 5]
549+ let bc = size(bb)
550+ let bd = $Tuple2(nil, nil)
551+ func be (bf,bg) = if ((bg >= bc))
552+ then bf
553+ else cI(bf, bb[bg])
554+
555+ func bh (bf,bg) = if ((bg >= bc))
556+ then bf
521557 else throw("List size exceeds 6")
522558
523- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
559+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
524560 }
525- $Tuple2(makeString(bR._1, "_"), makeString(bR._2, "_"))
561+ $Tuple2(makeString(cb._1, "_"), makeString(cb._2, "_"))
526562 }
527563 }
528564
529565
530-func cA (cB) = if ((cB >= toBigInt(0)))
531- then cB
532- else -(cB)
533-
534-
535-let cC = [[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]]
536-
537-func cD (aO,cE) = {
538- let cF = toInt((aO % bc))
539- let cG = if ((cE[0] > cF))
566+func cK (cL) = if ((cL >= toBigInt(0)))
567+ then cL
568+ else -(cL)
569+
570+
571+let cM = [[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]]
572+
573+func cN (aT,cO) = {
574+ let cP = toInt((aT % bt))
575+ let cQ = if ((cO[0] > cP))
540576 then "A"
541- else if ((cE[1] > cF))
577+ else if ((cO[1] > cP))
542578 then "B"
543- else if ((cE[2] > cF))
579+ else if ((cO[2] > cP))
544580 then "C"
545- else if ((cE[3] > cF))
581+ else if ((cO[3] > cP))
546582 then "D"
547- else if ((cE[4] > cF))
583+ else if ((cO[4] > cP))
548584 then "E"
549585 else "F"
550- cG
551- }
552-
553-
554-func cH (cI,cJ) = {
555- let cK = cC[cJ]
556- func cL (bG,bH) = $Tuple2((((((bG._1 + cD(bG._2, cK)) + cD((bG._2 / bc), cK)) + cD((bG._2 / bd), cK)) + cD((bG._2 / be), cK)) + cD((bG._2 / bf), cK)), (bG._2 / bg))
557-
558- let cM = {
559- let bI = [1, 2, 3, 4, 5]
560- let bJ = size(bI)
561- let bK = $Tuple2("", (cI / bb))
562- func bL (bM,bN) = if ((bN >= bJ))
563- then bM
564- else cL(bM, bI[bN])
565-
566- func bO (bM,bN) = if ((bN >= bJ))
567- then bM
586+ cQ
587+ }
588+
589+
590+func cR (cS,cT) = {
591+ let cU = cM[cT]
592+ func cV (bX,bY) = $Tuple2((((((bX._1 + cN(bX._2, cU)) + cN((bX._2 / bt), cU)) + cN((bX._2 / bu), cU)) + cN((bX._2 / bv), cU)) + cN((bX._2 / bw), cU)), (bX._2 / bx))
593+
594+ let cW = {
595+ let bb = [1, 2, 3, 4, 5]
596+ let bc = size(bb)
597+ let bd = $Tuple2("", (cS / bs))
598+ func be (bf,bg) = if ((bg >= bc))
599+ then bf
600+ else cV(bf, bb[bg])
601+
602+ func bh (bf,bg) = if ((bg >= bc))
603+ then bf
568604 else throw("List size exceeds 5")
569605
570- bO(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5)
606+ bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5)
571607 }
572- cM._1
573- }
574-
575-
576-func cN (cO) = {
577- let cP = split(valueOrElse(getString(cO), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
578-[toString(valueOrElse(parseInt(cP[M]), 0)), if ((size(split(cP[N], "_")) == l))
579- then cP[N]
580- else "0_0_0_0_0_0", if ((size(split(cP[O], "_")) == l))
581- then cP[O]
582- else "0_0_0_0_0_0", cP[P]]
583- }
584-
585-
586-func cQ (cR) = {
587- let cS = split(cR, "_")
588- ((t * (parseIntValue(cS[1]) + 1)) * parseIntValue(cS[0]))
589- }
590-
591-
592-func cT (cU) = {
593- let cV = cU[G]
594- func cW (bG,cX) = (bG + parseIntValue(cX))
595-
596- func cY (bG,cX) = {
597- let ad = bG._1
598- let cZ = Q(ad)
599- let da = (((parseIntValue(cX) + cZ) - 1) / cZ)
600- $Tuple2((ad + 1), (bG._2 + (da * h)))
608+ cW._1
609+ }
610+
611+
612+func cX (cY) = {
613+ let cZ = split(valueOrElse(getString(cY), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
614+[toString(valueOrElse(parseInt(cZ[O]), 0)), if ((size(split(cZ[P], "_")) == l))
615+ then cZ[P]
616+ else "0_0_0_0_0_0", if ((size(split(cZ[Q], "_")) == l))
617+ then cZ[Q]
618+ else "0_0_0_0_0_0", cZ[R]]
619+ }
620+
621+
622+func da (db) = {
623+ let dc = split(db, "_")
624+ ((t * (parseIntValue(dc[1]) + 1)) * parseIntValue(dc[0]))
625+ }
626+
627+
628+func dd (de) = {
629+ let df = de[I]
630+ func dg (bX,dh) = (bX + parseIntValue(dh))
631+
632+ func di (bX,dh) = {
633+ let af = bX._1
634+ let dj = S(af)
635+ let dk = (((parseIntValue(dh) + dj) - 1) / dj)
636+ $Tuple2((af + 1), (bX._2 + (dk * h)))
601637 }
602638
603- let db = {
604- let bI = split(cU[E], "_")
605- let bJ = size(bI)
606- let bK = 0
607- func bL (bM,bN) = if ((bN >= bJ))
608- then bM
609- else cW(bM, bI[bN])
610-
611- func bO (bM,bN) = if ((bN >= bJ))
612- then bM
639+ let dl = {
640+ let bb = split(de[G], "_")
641+ let bc = size(bb)
642+ let bd = 0
643+ func be (bf,bg) = if ((bg >= bc))
644+ then bf
645+ else dg(bf, bb[bg])
646+
647+ func bh (bf,bg) = if ((bg >= bc))
648+ then bf
613649 else throw("List size exceeds 6")
614650
615- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
651+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
616652 }
617- let dc = {
618- let bI = split(cU[F], "_")
619- let bJ = size(bI)
620- let bK = 0
621- func dd (bM,bN) = if ((bN >= bJ))
622- then bM
623- else cW(bM, bI[bN])
624-
625- func de (bM,bN) = if ((bN >= bJ))
626- then bM
653+ let dm = {
654+ let bb = split(de[H], "_")
655+ let bc = size(bb)
656+ let bd = 0
657+ func dn (bf,bg) = if ((bg >= bc))
658+ then bf
659+ else dg(bf, bb[bg])
660+
661+ func do (bf,bg) = if ((bg >= bc))
662+ then bf
627663 else throw("List size exceeds 6")
628664
629- de(dd(dd(dd(dd(dd(dd(bK, 0), 1), 2), 3), 4), 5), 6)
665+ do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6)
630666 }
631- let df = if ((cV == ""))
667+ let dp = if ((df == ""))
632668 then 0
633- else ( let bI = split_4C(cV, "_")
634- let bJ = size(bI)
635- let bK = $Tuple2(0, 0)
636- func dg (bM,bN) = if ((bN >= bJ))
637- then bM
638- else cY(bM, bI[bN])
639-
640- func dh (bM,bN) = if ((bN >= bJ))
641- then bM
669+ else ( let bb = split_4C(df, "_")
670+ let bc = size(bb)
671+ let bd = $Tuple2(0, 0)
672+ func dq (bf,bg) = if ((bg >= bc))
673+ then bf
674+ else di(bf, bb[bg])
675+
676+ func dr (bf,bg) = if ((bg >= bc))
677+ then bf
642678 else throw("List size exceeds 50")
643679
644- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(bK, 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
645- ((db + dc) + df)
646- }
647-
648-
649-func di (dj,dk,dl) = {
650- let cR = ((toString(dk) + "_") + toString(dl))
651- let dm = cQ(cR)
652- let dn = valueOrElse(getString(dj), (cR + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
653- let do = split_4C(dn, ":")
654- let dp = cT(do)
655- let dq = if ((5 > size(do)))
656- then makeString(["0", toString(dp), toString((dm - dp)), toString(dm)], "_")
657- else {
658- let dr = split(do[H], "_")
659- let ds = parseIntValue(dr[I])
660- let dt = if ((size(dr) > 1))
661- then parseIntValue(dr[J])
662- else dp
663- makeString([toString(ds), toString(dt), toString(((dm - ds) - dt)), toString(dm)], "_")
664- }
665-[do[D], if ((size(split(do[E], "_")) == l))
666- then do[E]
667- else "0_0_0_0_0_0", if ((size(split(do[F], "_")) == l))
668- then do[F]
669- else "0_0_0_0_0_0", do[G], dq]
670- }
671-
672-
673-func du (cU) = {
674- let dv = cT(cU)
675- let dw = parseIntValue(split(cU[H], "_")[I])
676- ((cQ(cU[D]) - dv) - dw)
677- }
678-
679-
680-func dx (dy,cZ) = {
681- let da = if ((dy >= 0))
682- then (((dy + cZ) - 1) / cZ)
683- else -((((-(dy) + cZ) - 1) / cZ))
684- (da * h)
685- }
686-
687-
688-func dz (dA,cU,dB) = if ((size(dA) != 3))
680+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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
681+ ((dl + dm) + dp)
682+ }
683+
684+
685+func ds (dt,du,dv) = {
686+ let db = ((toString(du) + "_") + toString(dv))
687+ let dw = da(db)
688+ let dx = valueOrElse(getString(dt), (db + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
689+ let dy = split_4C(dx, ":")
690+ let dz = dd(dy)
691+ let dA = if ((5 > size(dy)))
692+ then makeString(["0", toString(dz), toString((dw - dz)), toString(dw)], "_")
693+ else {
694+ let dB = split(dy[J], "_")
695+ let dC = parseIntValue(dB[K])
696+ let dD = if ((size(dB) > 1))
697+ then parseIntValue(dB[L])
698+ else dz
699+ makeString([toString(dC), toString(dD), toString(((dw - dC) - dD)), toString(dw)], "_")
700+ }
701+[dy[F], if ((size(split(dy[G], "_")) == l))
702+ then dy[G]
703+ else "0_0_0_0_0_0", if ((size(split(dy[H], "_")) == l))
704+ then dy[H]
705+ else "0_0_0_0_0_0", dy[I], dA]
706+ }
707+
708+
709+func dE (de) = {
710+ let dF = dd(de)
711+ let dG = parseIntValue(split(de[J], "_")[K])
712+ ((da(de[F]) - dF) - dG)
713+ }
714+
715+
716+func dH (dI,dj) = {
717+ let dk = if ((dI >= 0))
718+ then (((dI + dj) - 1) / dj)
719+ else -((((-(dI) + dj) - 1) / dj))
720+ (dk * h)
721+ }
722+
723+
724+func dJ (dK,de,dL) = if ((size(dK) != 3))
689725 then throw("cargoListStr should contain exactly 2 ':' separators")
690726 else {
691- let dC = split(dA[0], "_")
692- let dD = split(dA[1], "_")
693- let dE = if ((dA[2] == ""))
727+ let dM = split(dK[0], "_")
728+ let dN = split(dK[1], "_")
729+ let dO = if ((dK[2] == ""))
694730 then nil
695- else split(dA[2], "_")
696- if ((size(dC) != l))
731+ else split(dK[2], "_")
732+ if ((size(dM) != l))
697733 then throw("All 6 resources should be passed")
698- else if ((size(dD) != l))
734+ else if ((size(dN) != l))
699735 then throw("All 6 materials should be passed")
700736 else {
701- let cu = du(cU)
702- let dF = split(cU[E], "_")
703- let dG = split(cU[F], "_")
704- let dH = if ((cU[G] == ""))
737+ let cE = dE(de)
738+ let dP = split(de[G], "_")
739+ let dQ = split(de[H], "_")
740+ let dR = if ((de[I] == ""))
705741 then nil
706- else split(cU[G], "_")
707- let cs = split(dB[N], "_")
708- let dI = split(dB[O], "_")
709- let dJ = if ((dB[P] == ""))
742+ else split(de[I], "_")
743+ let cC = split(dL[P], "_")
744+ let dS = split(dL[Q], "_")
745+ let dT = if ((dL[R] == ""))
710746 then nil
711- else split(dB[P], "_")
712- func dK (bG,cX) = {
713- let cf = bG._1
714- let dL = parseIntValue(cX)
715- let dM = parseIntValue(dF[cf])
716- let dN = parseIntValue(cs[cf])
717- if ((dL == 0))
718- then $Tuple4((cf + 1), (bG._2 :+ dF[cf]), (bG._3 :+ cs[cf]), bG._4)
719- else if ((dL > 0))
720- then if ((dL > dN))
721- then throw((((("Attempt to take " + cX) + " from backpack, but only ") + toString(dN)) + " available"))
722- else $Tuple4((cf + 1), (bG._2 :+ toString((dM + dL))), (bG._3 :+ toString((dN - dL))), (bG._4 + dL))
723- else if ((-(dL) > dM))
724- then throw((((("Attempt to take " + toString(-(dL))) + " from warehouse, but only ") + toString(dM)) + " available"))
725- else $Tuple4((cf + 1), (bG._2 :+ toString((dM + dL))), (bG._3 :+ toString((dN - dL))), (bG._4 + dL))
747+ else split(dL[R], "_")
748+ func dU (bX,dh) = {
749+ let cp = bX._1
750+ let dV = parseIntValue(dh)
751+ let dW = parseIntValue(dP[cp])
752+ let dX = parseIntValue(cC[cp])
753+ if ((dV == 0))
754+ then $Tuple4((cp + 1), (bX._2 :+ dP[cp]), (bX._3 :+ cC[cp]), bX._4)
755+ else if ((dV > 0))
756+ then if ((dV > dX))
757+ then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(dX)) + " available"))
758+ else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV))
759+ else if ((-(dV) > dW))
760+ then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dW)) + " available"))
761+ else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV))
726762 }
727763
728- let bR = {
729- let bI = dC
730- let bJ = size(bI)
731- let bK = $Tuple4(0, nil, nil, 0)
732- func bL (bM,bN) = if ((bN >= bJ))
733- then bM
734- else dK(bM, bI[bN])
735-
736- func bO (bM,bN) = if ((bN >= bJ))
737- then bM
764+ let cb = {
765+ let bb = dM
766+ let bc = size(bb)
767+ let bd = $Tuple4(0, nil, nil, 0)
768+ func be (bf,bg) = if ((bg >= bc))
769+ then bf
770+ else dU(bf, bb[bg])
771+
772+ func bh (bf,bg) = if ((bg >= bc))
773+ then bf
738774 else throw("List size exceeds 6")
739775
740- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
776+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
741777 }
742- func dO (bG,cX) = {
743- let cf = bG._1
744- let dL = parseIntValue(cX)
745- let dP = parseIntValue(dG[cf])
746- let dQ = parseIntValue(dI[cf])
747- if ((dL == 0))
748- then $Tuple4((cf + 1), (bG._2 :+ dG[cf]), (bG._3 :+ dI[cf]), bG._4)
749- else if ((dL > 0))
750- then if ((dL > dQ))
751- then throw((((("Attempt to take " + cX) + " from backpack, but only ") + toString(dQ)) + " available"))
752- else $Tuple4((cf + 1), (bG._2 :+ toString((dP + dL))), (bG._3 :+ toString((dQ - dL))), (bG._4 + dL))
753- else if ((-(dL) > dP))
754- then throw((((("Attempt to take " + toString(-(dL))) + " from warehouse, but only ") + toString(dP)) + " available"))
755- else $Tuple4((cf + 1), (bG._2 :+ toString((dP + dL))), (bG._3 :+ toString((dQ - dL))), (bG._4 + dL))
778+ func dY (bX,dh) = {
779+ let cp = bX._1
780+ let dV = parseIntValue(dh)
781+ let dZ = parseIntValue(dQ[cp])
782+ let ea = parseIntValue(dS[cp])
783+ if ((dV == 0))
784+ then $Tuple4((cp + 1), (bX._2 :+ dQ[cp]), (bX._3 :+ dS[cp]), bX._4)
785+ else if ((dV > 0))
786+ then if ((dV > ea))
787+ then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ea)) + " available"))
788+ else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV))
789+ else if ((-(dV) > dZ))
790+ then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dZ)) + " available"))
791+ else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV))
756792 }
757793
758- let dR = {
759- let bI = dD
760- let bJ = size(bI)
761- let bK = $Tuple4(0, nil, nil, bR._4)
762- func dd (bM,bN) = if ((bN >= bJ))
763- then bM
764- else dO(bM, bI[bN])
765-
766- func de (bM,bN) = if ((bN >= bJ))
767- then bM
794+ let eb = {
795+ let bb = dN
796+ let bc = size(bb)
797+ let bd = $Tuple4(0, nil, nil, cb._4)
798+ func dn (bf,bg) = if ((bg >= bc))
799+ then bf
800+ else dY(bf, bb[bg])
801+
802+ func do (bf,bg) = if ((bg >= bc))
803+ then bf
768804 else throw("List size exceeds 6")
769805
770- de(dd(dd(dd(dd(dd(dd(bK, 0), 1), 2), 3), 4), 5), 6)
806+ do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6)
771807 }
772- func dS (bG,cX) = {
773- let cf = bG._1
774- let cZ = Q(cf)
775- let dL = parseIntValue(cX)
776- let dT = if ((size(dH) > cf))
777- then parseIntValue(dH[cf])
808+ func ec (bX,dh) = {
809+ let cp = bX._1
810+ let dj = S(cp)
811+ let dV = parseIntValue(dh)
812+ let ed = if ((size(dR) > cp))
813+ then parseIntValue(dR[cp])
778814 else 0
779- let dU = if ((size(dJ) > cf))
780- then parseIntValue(dJ[cf])
815+ let ee = if ((size(dT) > cp))
816+ then parseIntValue(dT[cp])
781817 else 0
782- if ((dL == 0))
783- then $Tuple4((cf + 1), (bG._2 :+ toString(dT)), (bG._3 :+ toString(dU)), bG._4)
784- else if ((dL > 0))
785- then if ((dL > dU))
786- then throw((((("Attempt to take " + cX) + " from backpack, but only ") + toString(dU)) + " available"))
818+ if ((dV == 0))
819+ then $Tuple4((cp + 1), (bX._2 :+ toString(ed)), (bX._3 :+ toString(ee)), bX._4)
820+ else if ((dV > 0))
821+ then if ((dV > ee))
822+ then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ee)) + " available"))
787823 else {
788- let dV = (dx((dT + dL), cZ) - dx(dT, cZ))
789- $Tuple4((cf + 1), (bG._2 :+ toString((dT + dL))), (bG._3 :+ toString((dU - dL))), (bG._4 + dV))
824+ let ef = (dH((ed + dV), dj) - dH(ed, dj))
825+ $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef))
790826 }
791- else if ((-(dL) > dT))
792- then throw((((("Attempt to take " + toString(-(dL))) + " from warehouse, but only ") + toString(dT)) + " available"))
827+ else if ((-(dV) > ed))
828+ then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(ed)) + " available"))
793829 else {
794- let dV = (dx((dT + dL), cZ) - dx(dT, cZ))
795- $Tuple4((cf + 1), (bG._2 :+ toString((dT + dL))), (bG._3 :+ toString((dU - dL))), (bG._4 + dV))
830+ let ef = (dH((ed + dV), dj) - dH(ed, dj))
831+ $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef))
796832 }
797833 }
798834
799- let cP = if ((size(dE) != 0))
835+ let cZ = if ((size(dO) != 0))
800836 then {
801- let bI = dE
802- let bJ = size(bI)
803- let bK = $Tuple4(0, nil, nil, dR._4)
804- func dg (bM,bN) = if ((bN >= bJ))
805- then bM
806- else dS(bM, bI[bN])
807-
808- func dh (bM,bN) = if ((bN >= bJ))
809- then bM
837+ let bb = dO
838+ let bc = size(bb)
839+ let bd = $Tuple4(0, nil, nil, eb._4)
840+ func dq (bf,bg) = if ((bg >= bc))
841+ then bf
842+ else ec(bf, bb[bg])
843+
844+ func dr (bf,bg) = if ((bg >= bc))
845+ then bf
810846 else throw("List size exceeds 50")
811847
812- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(bK, 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)
848+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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)
813849 }
814- else $Tuple4(0, dH, dJ, dR._4)
815- let dW = cP._4
816- if ((dW > cu))
817- then throw((((("Attempt to put total " + toString(dW)) + " stuff, but only ") + toString(cu)) + " warehouse space left"))
818- else $Tuple7(makeString(bR._2, "_"), makeString(dR._2, "_"), makeString(cP._2, "_"), makeString(bR._3, "_"), makeString(dR._3, "_"), makeString(cP._3, "_"), dW)
850+ else $Tuple4(0, dR, dT, eb._4)
851+ let eg = cZ._4
852+ if ((eg > cE))
853+ then throw((((("Attempt to put total " + toString(eg)) + " stuff, but only ") + toString(cE)) + " warehouse space left"))
854+ else $Tuple7(makeString(cb._2, "_"), makeString(eb._2, "_"), makeString(cZ._2, "_"), makeString(cb._3, "_"), makeString(eb._3, "_"), makeString(cZ._3, "_"), eg)
819855 }
820856 }
821857
822858
823-func dX (dY,dZ) = {
824- let aJ = toString(dY)
825- let ea = cA(toBigInt(dZ))
826- let eb = valueOrElse(getInteger(bi()), (bh + 1))
827- let bk = toString(eb)
828- let cJ = toInt((ea % bb))
829- let ci = cH(ea, cJ)
830- let ec = w[cJ]
831- let ed = Issue(bz(bk, "S"), makeString([bk, "S", ci, ec], "_"), 1, 0, false)
832- let ak = calculateAssetId(ed)
833- let ee = toBase58String(ak)
834- $Tuple2([IntegerEntry(bi(), (eb + 1)), ed, StringEntry(bj(bk), ee), StringEntry(aj(ee), aJ), StringEntry(bp(bk), aJ), IntegerEntry(an(ee), 0), IntegerEntry(bn(ee, aJ), 0), ScriptTransfer(dY, 1, ak)], $Tuple2(ee, ec))
835- }
836-
837-
838-func ef (bT,dY,dZ,eg,eh) = if (!(sigVerify_8Kb(eg, eh, aT)))
859+func eh (ei,ej) = {
860+ let aL = toString(ei)
861+ let ek = cK(toBigInt(ej))
862+ let el = valueOrElse(getInteger(bz()), (by + 1))
863+ let bB = toString(el)
864+ let cT = toInt((ek % bs))
865+ let cs = cR(ek, cT)
866+ let em = y[cT]
867+ let en = Issue(bQ(bB, "S"), makeString([bB, "S", cs, em], "_"), 1, 0, false)
868+ let am = calculateAssetId(en)
869+ let eo = toBase58String(am)
870+ $Tuple2([IntegerEntry(bz(), (el + 1)), en, StringEntry(bA(bB), eo), StringEntry(al(eo), aL), StringEntry(bG(bB), aL), IntegerEntry(ap(eo), 0), IntegerEntry(bE(eo, aL), 0), ScriptTransfer(ei, 1, am)], $Tuple2(eo, em))
871+ }
872+
873+
874+func ep (cd,ei,ej,eq,er) = if (!(sigVerify_8Kb(eq, er, bk)))
839875 then throw("signature does not match")
840876 else {
841- let cS = split(toUtf8String(eg), ";")
842- let ei = split(cS[0], "|")
843- let ej = split(ei[bw], "_")
844- let ek = parseIntValue(ej[0])
845- let el = parseIntValue(ej[1])
846- let em = split(cS[1], ":")
847- let en = em[0]
848- let eo = parseIntValue(ei[bx])
849- if (if ((eo > (lastBlock.timestamp + aV)))
877+ let dc = split(toUtf8String(eq), ";")
878+ let es = split(dc[0], "|")
879+ let et = split(es[bN], "_")
880+ let eu = parseIntValue(et[0])
881+ let ev = parseIntValue(et[1])
882+ let ew = split(dc[1], ":")
883+ let ex = ew[0]
884+ let ey = parseIntValue(es[bO])
885+ if (if ((ey > (lastBlock.timestamp + bm)))
850886 then true
851- else ((lastBlock.timestamp - aV) > eo))
887+ else ((lastBlock.timestamp - bm) > ey))
852888 then throw("signature outdated")
853889 else {
854- let ep = em[1]
855- let aJ = toString(dY)
856- let eq = valueOrElse(getString(ah(aJ)), "")
857- if ((eq != ep))
858- then throw(((("Tx ids don't match! In state: " + eq) + ", in msg: ") + ep))
890+ let ez = ew[1]
891+ let aL = toString(ei)
892+ let eA = valueOrElse(getString(aj(aL)), "")
893+ if ((eA != ez))
894+ then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez))
859895 else {
860- let aD = valueOrErrorMessage(getString(aB(aJ)), "You don't have a duck staked")
861- let er = aF(aD)
862- let es = valueOrElse(getInteger(er), 100)
863- if ((es != ek))
864- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(er), 100))) + " from state does not match one from flight log=") + toString(ek)))
865- else if ((0 >= ek))
896+ let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked")
897+ let eB = aH(aF)
898+ let eC = valueOrElse(getInteger(eB), 100)
899+ if ((eC != eu))
900+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu)))
901+ else if ((0 >= eu))
866902 then throw("You can't fly with zero health")
867- else if ((0 >= el))
868- then $Tuple3(((if (!(bT))
869- then [ScriptTransfer(dY, ba, b)]
870- else nil) :+ IntegerEntry(er, 0)), "", 0)
903+ else if ((0 >= ev))
904+ then $Tuple3(((if (!(cd))
905+ then [ScriptTransfer(ei, br, b)]
906+ else nil) :+ IntegerEntry(eB, 0)), "", 0)
871907 else {
872- let et = if ((size(ei) > by))
873- then ei[by]
908+ let eD = if ((size(es) > bP))
909+ then es[bP]
874910 else ""
875- let eu = if ((et == "$"))
876- then aM(invoke(ae, "sendUsdtPrize", [aJ], nil))
911+ let eE = if ((eD == "$"))
912+ then aS(invoke(ag, "sendUsdtPrize", [aL], nil))
877913 else 0
878- let cO = aC(aD)
879- let dB = cN(cO)
880- let ev = split(dB[O], "_")
881- let ew = makeString(bS(bT, ev, aZ), "_")
882- let ex = dX(dY, dZ)
883- let ee = ex._2._1
884- $Tuple3((((ex._1 :+ StringEntry(aE(aD), makeString([ex._2._2, "L", ee], "_"))) :+ IntegerEntry(er, el)) :+ StringEntry(cO, makeString([dB[M], dB[N], ew, dB[P]], ":"))), ee, eu)
914+ let cY = aE(aF)
915+ let dL = cX(cY)
916+ let eF = split(dL[Q], "_")
917+ let eG = makeString(cc(cd, eF, bq), "_")
918+ let eH = eh(ei, ej)
919+ let eo = eH._2._1
920+ $Tuple3((((eH._1 :+ StringEntry(aG(aF), makeString([eH._2._2, "L", eo], "_"))) :+ IntegerEntry(eB, ev)) :+ StringEntry(cY, makeString([dL[O], dL[P], eG, dL[R]], ":"))), eo, eE)
885921 }
886922 }
887923 }
888924 }
889925
890926
891-func ey (au,ez) = {
892- let dl = valueOrElse(getInteger(an(au)), 0)
893- let eA = valueOrElse(getInteger(ao(k, au)), 0)
894- let eB = (dl / 6)
895- let eC = (dl / 7)
896- ((r + fraction(r, ((dl + eB) + (2 * eC)), 5)) + fraction(r, eA, (ez * 5)))
897- }
898-
899-
900-func eD (ai,eE,eF) = {
901- let eG = if ((eE == bt))
902- then $Tuple2(eF, valueOrElse(getString(aB(ai)), ""))
903- else {
904- let aD = valueOrErrorMessage(getString(aB(ai)), "You don't have a duck staked")
905- let eH = valueOrElse(getString(aE(aD)), u)
906- let eI = split(value(eH), "_")
907- if ((eI[aK] != "L"))
908- then throw((("Duck location type is " + eI[aK]) + ", but should be L"))
909- else $Tuple2(eI[aL], aD)
910- }
911- let au = eG._1
912- let eJ = eG._2
913- let eK = value(assetInfo(fromBase58String(au)))
914- let eL = am(au)
915- let eM = valueOrErrorMessage(getInteger(eL), (("Land " + eK.name) + " is not staked"))
916- let eN = valueOrErrorMessage(getString(aj(au)), (("NFT " + eK.name) + " is orphaned"))
917- if ((eN != ai))
927+func eI (aw,eJ) = {
928+ let dv = valueOrElse(getInteger(ap(aw)), 0)
929+ let eK = valueOrElse(getInteger(aq(k, aw)), 0)
930+ let eL = (dv / 6)
931+ let eM = (dv / 7)
932+ ((r + fraction(r, ((dv + eL) + (2 * eM)), 5)) + fraction(r, eK, (eJ * 5)))
933+ }
934+
935+
936+func eN (ak,eO,eP) = {
937+ let eQ = if ((eO == bK))
938+ then $Tuple2(eP, valueOrElse(getString(aD(ak)), ""))
939+ else {
940+ let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked")
941+ let eR = valueOrElse(getString(aG(aF)), u)
942+ let eS = split(value(eR), "_")
943+ if ((eS[aN] != "L"))
944+ then throw((("Duck location type is " + eS[aN]) + ", but should be L"))
945+ else $Tuple2(eS[aO], aF)
946+ }
947+ let aw = eQ._1
948+ let eT = eQ._2
949+ let eU = value(assetInfo(fromBase58String(aw)))
950+ let eV = ao(aw)
951+ let eW = valueOrErrorMessage(getInteger(eV), (("Land " + eU.name) + " is not staked"))
952+ let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned"))
953+ if ((eX != ak))
918954 then throw((i + " is not yours"))
919955 else {
920- let eO = split(eK.description, "_")
921- $Tuple4(eJ, au, eO, eM)
922- }
923- }
924-
925-
926-func eP (ai,dy,eE,eF) = if ((0 > dy))
956+ let eY = split(eU.description, "_")
957+ $Tuple4(eT, aw, eY, eW)
958+ }
959+ }
960+
961+
962+func eZ (ak,dI,eO,eP) = if ((0 > dI))
927963 then throw("Negative amount")
928964 else {
929- let eQ = eD(ai, eE, eF)
930- let aQ = eQ._3[A]
931- let cb = ch(eQ._3[B])
932- let cl = (lastBlock.timestamp - eQ._4)
933- if ((0 > cl))
934- then throw(((("Saved timestamp is in future, saved = " + toString(eQ._4)) + ", current = ") + toString(lastBlock.timestamp)))
965+ let fa = eN(ak, eO, eP)
966+ let aV = fa._3[C]
967+ let cl = cr(fa._3[D])
968+ let cv = (lastBlock.timestamp - fa._4)
969+ if ((0 > cv))
970+ then throw(((("Saved timestamp is in future, saved = " + toString(fa._4)) + ", current = ") + toString(lastBlock.timestamp)))
935971 else {
936- let ez = aP(aQ)
937- let eR = ey(eQ._2, ez)
938- let eS = fraction(cl, (eR * ez), s)
939- if ((dy > eS))
940- then throw(((("Not enough resources, available = " + toString(eS)) + ", requested = ") + toString(dy)))
972+ let eJ = aU(aV)
973+ let fb = eI(fa._2, eJ)
974+ let fc = fraction(cv, (fb * eJ), s)
975+ if ((dI > fc))
976+ then throw(((("Not enough resources, available = " + toString(fc)) + ", requested = ") + toString(dI)))
941977 else {
942- let eT = fraction((eS - dy), s, (eR * ez))
943- let eU = (lastBlock.timestamp - eT)
944- let dk = (ez / m)
945- let ct = cp(cb, (cl - eT), dk, eR)
946- let dj = at(eQ._2)
947- let dl = valueOrElse(getInteger(an(eQ._2)), 0)
948- let cU = di(dj, dk, dl)
949- let dr = split(cU[H], "_")
950- let cu = parseIntValue(dr[K])
951- if (if ((eE == bt))
952- then (dy > cu)
978+ let fd = fraction((fc - dI), s, (fb * eJ))
979+ let fe = (lastBlock.timestamp - fd)
980+ let du = (eJ / m)
981+ let cD = cz(cl, (cv - fd), du, fb)
982+ let dt = av(fa._2)
983+ let dv = valueOrElse(getInteger(ap(fa._2)), 0)
984+ let de = ds(dt, du, dv)
985+ let dB = split(de[J], "_")
986+ let cE = parseIntValue(dB[M])
987+ if (if ((eO == bK))
988+ then (dI > cE)
953989 else false)
954- then throw((("Only " + toString(cu)) + " space left in warehouse"))
990+ then throw((("Only " + toString(cE)) + " space left in warehouse"))
955991 else {
956- let cO = aC(eQ._1)
957- let dB = cN(cO)
958- let cs = split(dB[N], "_")
959- let cr = split(cU[E], "_")
960- let eV = if ((eE == bt))
961- then $Tuple4(cj(cr, cb, (cl - eT), dk, eR), dB[N], (parseIntValue(dr[J]) + ct._2), (parseIntValue(dr[K]) - ct._2))
962- else if ((eE == bu))
963- then $Tuple4(cU[E], cj(cs, cb, (cl - eT), dk, eR), parseIntValue(dr[J]), parseIntValue(dr[K]))
992+ let cY = aE(fa._1)
993+ let dL = cX(cY)
994+ let cC = split(dL[P], "_")
995+ let cB = split(de[G], "_")
996+ let ff = if ((eO == bK))
997+ then $Tuple4(ct(cB, cl, (cv - fd), du, fb), dL[P], (parseIntValue(dB[L]) + cD._2), (parseIntValue(dB[M]) - cD._2))
998+ else if ((eO == bL))
999+ then $Tuple4(de[G], ct(cC, cl, (cv - fd), du, fb), parseIntValue(dB[L]), parseIntValue(dB[M]))
9641000 else {
965- let eW = cq(cr, cs, ct, cu)
966- let eX = min([parseIntValue(dr[K]), ct._2])
967- $Tuple4(eW._1, eW._2, (parseIntValue(dr[J]) + eX), (parseIntValue(dr[K]) - eX))
1001+ let fg = cA(cB, cC, cD, cE)
1002+ let fh = min([parseIntValue(dB[M]), cD._2])
1003+ $Tuple4(fg._1, fg._2, (parseIntValue(dB[L]) + fh), (parseIntValue(dB[M]) - fh))
9681004 }
969- let eY = eV._1
970- let eZ = eV._2
971- let fa = eV._3
972- let fb = eV._4
973- $Tuple5([IntegerEntry(am(eQ._2), eU), IntegerEntry(aq(i, eQ._2, ai), eU)], cO, [dB[M], eZ, dB[O], dB[P]], dj, [cU[D], eY, cU[F], cU[G], makeString([dr[I], toString(fa), toString(fb), dr[L]], "_")])
1005+ let fi = ff._1
1006+ let fj = ff._2
1007+ let fk = ff._3
1008+ let fl = ff._4
1009+ $Tuple5([IntegerEntry(ao(fa._2), fe), IntegerEntry(as(i, fa._2, ak), fe)], cY, [dL[O], fj, dL[Q], dL[R]], dt, [de[F], fi, de[H], de[I], makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")])
9741010 }
9751011 }
9761012 }
9771013 }
9781014
9791015
980-func fc (ai,au,ez,eE) = {
981- let eL = am(au)
982- let eM = value(getInteger(eL))
983- let eS = (fraction((lastBlock.timestamp - eM), ey(au, ez), s) * ez)
984- eP(ai, eS, eE, au)
985- }
986-
987-
988-func fd (bT,dY,fe,au) = {
989- let ai = toString(dY)
990- let eQ = eD(ai, bv, au)
991- let ez = aP(eQ._3[A])
992- let ff = an(eQ._2)
993- let fg = valueOrElse(getInteger(ff), 0)
994- if ((fg >= 3))
1016+func fm (ak,aw,eJ,eO) = {
1017+ let eV = ao(aw)
1018+ let eW = value(getInteger(eV))
1019+ let fc = (fraction((lastBlock.timestamp - eW), eI(aw, eJ), s) * eJ)
1020+ eZ(ak, fc, eO, aw)
1021+ }
1022+
1023+
1024+func fn (cd,ei,fo,aw) = {
1025+ let ak = toString(ei)
1026+ let fa = eN(ak, bM, aw)
1027+ let eJ = aU(fa._3[C])
1028+ let fp = ap(fa._2)
1029+ let fq = valueOrElse(getInteger(fp), 0)
1030+ if ((fq >= 3))
9951031 then throw("Currently max infrastructure level = 3")
9961032 else {
997- let fh = (fg + 1)
998- let fi = fraction(aY, (ez * fh), m)
999- if (if (!(bT))
1000- then (fe != fi)
1033+ let fr = (fq + 1)
1034+ let fs = fraction(bp, (eJ * fr), m)
1035+ if (if (!(cd))
1036+ then (fo != fs)
10011037 else false)
1002- then throw(("Payment attached should be " + toString(fi)))
1038+ then throw(("Payment attached should be " + toString(fs)))
10031039 else {
1004- let cO = aC(eQ._1)
1005- let dB = cN(cO)
1006- let ev = split(dB[O], "_")
1007- let ew = makeString(bS(bT, ev, fraction(e, (ez * fh), m)), "_")
1008- let fj = fc(ai, eQ._2, ez, bv)
1009- let fk = fj._5
1010- let fl = cQ(fk[D])
1011- let fm = makeString([split(fk[D], "_")[0], toString(fh)], "_")
1012- let fn = cQ(fm)
1013- let dr = split(fk[H], "_")
1014- let fo = makeString([dr[I], dr[J], toString(((parseIntValue(dr[K]) + fn) - fl)), toString(fn)], "_")
1015- $Tuple2(([IntegerEntry(ff, fh), IntegerEntry(bn(eQ._2, ai), fh), StringEntry(cO, makeString([dB[M], fj._3[N], ew, dB[P]], ":")), StringEntry(fj._4, makeString([fm, fk[E], fk[F], fk[G], fo], ":"))] ++ fj._1), fh)
1040+ let cY = aE(fa._1)
1041+ let dL = cX(cY)
1042+ let eF = split(dL[Q], "_")
1043+ let eG = makeString(cc(cd, eF, fraction(e, (eJ * fr), m)), "_")
1044+ let ft = fm(ak, fa._2, eJ, bM)
1045+ let fu = ft._5
1046+ let fv = da(fu[F])
1047+ let fw = makeString([split(fu[F], "_")[0], toString(fr)], "_")
1048+ let fx = da(fw)
1049+ let dB = split(fu[J], "_")
1050+ let fy = makeString([dB[K], dB[L], toString(((parseIntValue(dB[M]) + fx) - fv)), toString(fx)], "_")
1051+ $Tuple2(([IntegerEntry(fp, fr), IntegerEntry(bE(fa._2, ak), fr), StringEntry(cY, makeString([dL[O], ft._3[P], eG, dL[R]], ":")), StringEntry(ft._4, makeString([fw, fu[G], fu[H], fu[I], fy], ":"))] ++ ft._1), fr)
10161052 }
10171053 }
10181054 }
10191055
10201056
1021-func fp (ai,eF) = {
1022- let eQ = eD(ai, bv, eF)
1023- let au = eQ._2
1024- let ez = aP(eQ._3[A])
1025- let fq = ao(k, au)
1026- if ((valueOrElse(getInteger(fq), 0) > 0))
1057+func fz (ak,eP) = {
1058+ let fa = eN(ak, bM, eP)
1059+ let aw = fa._2
1060+ let eJ = aU(fa._3[C])
1061+ let fA = aq(k, aw)
1062+ if ((valueOrElse(getInteger(fA), 0) > 0))
10271063 then throw("Presale artifact is already activated")
1028- else if ((parseIntValue(eQ._3[z]) > bh))
1029- then throw((((i + " ") + au) + " is not eligible for presale artifact"))
1064+ else if ((parseIntValue(fa._3[B]) > by))
1065+ then throw((((i + " ") + aw) + " is not eligible for presale artifact"))
10301066 else {
1031- let fj = fc(ai, au, ez, bv)
1032- ((((fj._1 :+ IntegerEntry(fq, ez)) :+ IntegerEntry(bo(k, au, ai), ez)) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":")))
1067+ let ft = fm(ak, aw, eJ, bM)
1068+ ((((ft._1 :+ IntegerEntry(fA, eJ)) :+ IntegerEntry(bF(k, aw, ak), eJ)) :+ StringEntry(ft._2, makeString(ft._3, ":"))) :+ StringEntry(ft._4, makeString(ft._5, ":")))
10331069 }
10341070 }
10351071
10361072
1037-func fr (fs,fh,ft,ai,fu,dZ,fv) = {
1038- let aD = valueOrErrorMessage(getString(aB(ai)), "You don't have a duck staked")
1039- func fw (bG,au) = {
1040- let eK = value(assetInfo(fromBase58String(au)))
1041- let eL = am(au)
1042- let eM = valueOrErrorMessage(getInteger(eL), (("NFT " + eK.name) + " is not staked"))
1043- let eN = valueOrErrorMessage(getString(aj(au)), (("NFT " + eK.name) + " is orphaned"))
1044- if ((eN != ai))
1073+func fB (fC,fr,fD,ak,fE,ej,fF) = {
1074+ let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked")
1075+ func fG (bX,aw) = {
1076+ let eU = value(assetInfo(fromBase58String(aw)))
1077+ let eV = ao(aw)
1078+ let eW = valueOrErrorMessage(getInteger(eV), (("NFT " + eU.name) + " is not staked"))
1079+ let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned"))
1080+ if ((eX != ak))
10451081 then throw((i + " is not yours"))
10461082 else {
1047- let eO = split(eK.description, "_")
1048- let ec = eO[C]
1049- if (if ((bG._3 != ""))
1050- then (bG._3 != ec)
1083+ let eY = split(eU.description, "_")
1084+ let em = eY[E]
1085+ if (if ((bX._3 != ""))
1086+ then (bX._3 != em)
10511087 else false)
10521088 then throw("Lands should be on the same continent to merge")
10531089 else {
1054- let aQ = eO[A]
1055- let fx = bG._1
1056- let cf = valueOrErrorMessage(indexOf(fx, aQ), "You haven't passed all the lands needed")
1057- let fy = (take(fx, cf) + drop(fx, (cf + 1)))
1058- let ez = aP(aQ)
1059- let fz = (bG._2 + valueOrElse(getInteger(ao(k, au)), 0))
1060- let dl = valueOrElse(getInteger(an(au)), 0)
1061- let fA = {
1062- let c = aQ
1090+ let aV = eY[C]
1091+ let fH = bX._1
1092+ let cp = valueOrErrorMessage(indexOf(fH, aV), "You haven't passed all the lands needed")
1093+ let fI = (take(fH, cp) + drop(fH, (cp + 1)))
1094+ let eJ = aU(aV)
1095+ let fJ = (bX._2 + valueOrElse(getInteger(aq(k, aw)), 0))
1096+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1097+ let fK = {
1098+ let c = aV
10631099 if (("S" == c))
10641100 then 3
10651101 else if (("M" == c))
10701106 then 6
10711107 else throw("Only S, M, L, XL can merge")
10721108 }
1073- if ((dl != fA))
1109+ if ((dv != fK))
10741110 then throw("All lands should be maxed to merge")
10751111 else {
1076- let bk = eO[z]
1077- let cb = ch(eO[B])
1078- let cl = (lastBlock.timestamp - eM)
1079- if ((0 > cl))
1080- then throw(((("Saved timestamp is in future, saved = " + toString(eM)) + ", current = ") + toString(lastBlock.timestamp)))
1112+ let bB = eY[B]
1113+ let cl = cr(eY[D])
1114+ let cv = (lastBlock.timestamp - eW)
1115+ if ((0 > cv))
1116+ then throw(((("Saved timestamp is in future, saved = " + toString(eW)) + ", current = ") + toString(lastBlock.timestamp)))
10811117 else {
1082- let eR = ey(au, ez)
1083- let dk = (ez / m)
1084- let eZ = cj(split(bG._4, "_"), cb, cl, dk, eR)
1085- let bQ = bZ(split(bG._6, "_"), cb, dk, -1)
1086- let fB = bG._7
1087- let ad = indexOf(fB, au)
1088- if (!(isDefined(ad)))
1089- then throw(("Your staked lands don't contain " + au))
1118+ let fb = eI(aw, eJ)
1119+ let du = (eJ / m)
1120+ let fj = ct(split(bX._4, "_"), cl, cv, du, fb)
1121+ let ca = cj(split(bX._6, "_"), cl, du, -1)
1122+ let fL = bX._7
1123+ let af = indexOf(fL, aw)
1124+ if (!(isDefined(af)))
1125+ then throw(("Your staked lands don't contain " + aw))
10901126 else {
1091- let fC = al(au)
1092- let fD = valueOrElse(getString(fC), "")
1093- $Tuple7(fy, fz, ec, eZ, (((((((((((((bG._5 :+ DeleteEntry(am(au))) :+ DeleteEntry(aq(i, au, ai))) :+ DeleteEntry(bj(bk))) :+ DeleteEntry(aj(au))) :+ DeleteEntry(an(au))) :+ DeleteEntry(bn(au, ai))) :+ DeleteEntry(ao(k, au))) :+ DeleteEntry(bo(k, au, ai))) :+ DeleteEntry(bp(bk))) :+ DeleteEntry(at(au))) :+ DeleteEntry(fC)) :+ DeleteEntry(bl(fD))) :+ Burn(fromBase58String(au), 1)), bQ, removeByIndex(fB, value(ad)))
1127+ let fM = an(aw)
1128+ let fN = valueOrElse(getString(fM), "")
1129+ $Tuple7(fI, fJ, em, fj, (((((((((((((bX._5 :+ DeleteEntry(ao(aw))) :+ DeleteEntry(as(i, aw, ak))) :+ DeleteEntry(bA(bB))) :+ DeleteEntry(al(aw))) :+ DeleteEntry(ap(aw))) :+ DeleteEntry(bE(aw, ak))) :+ DeleteEntry(aq(k, aw))) :+ DeleteEntry(bF(k, aw, ak))) :+ DeleteEntry(bG(bB))) :+ DeleteEntry(av(aw))) :+ DeleteEntry(fM)) :+ DeleteEntry(bC(fN))) :+ Burn(fromBase58String(aw), 1)), ca, removeByIndex(fL, value(af)))
10941130 }
10951131 }
10961132 }
10981134 }
10991135 }
11001136
1101- let cO = aC(aD)
1102- let dB = cN(cO)
1103- let fE = valueOrElse(getString(aG()), "0_0_0_0_0_0")
1104- let fF = av(ai)
1105- let fG = getString(fF)
1106- let fH = if (isDefined(fG))
1107- then split_51C(value(fG), "_")
1137+ let cY = aE(aF)
1138+ let dL = cX(cY)
1139+ let fO = valueOrElse(getString(aI()), "0_0_0_0_0_0")
1140+ let fP = ax(ak)
1141+ let fQ = getString(fP)
1142+ let fR = if (isDefined(fQ))
1143+ then split_51C(value(fQ), "_")
11081144 else nil
1109- let bR = {
1110- let bI = fu
1111- let bJ = size(bI)
1112- let bK = $Tuple7(ft, 0, "", dB[N], nil, fE, fH)
1113- func bL (bM,bN) = if ((bN >= bJ))
1114- then bM
1115- else fw(bM, bI[bN])
1116-
1117- func bO (bM,bN) = if ((bN >= bJ))
1118- then bM
1145+ let cb = {
1146+ let bb = fE
1147+ let bc = size(bb)
1148+ let bd = $Tuple7(fD, 0, "", dL[P], nil, fO, fR)
1149+ func be (bf,bg) = if ((bg >= bc))
1150+ then bf
1151+ else fG(bf, bb[bg])
1152+
1153+ func bh (bf,bg) = if ((bg >= bc))
1154+ then bf
11191155 else throw("List size exceeds 5")
11201156
1121- bO(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5)
1157+ bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5)
11221158 }
1123- let ec = bR._3
1124- let cJ = valueOrErrorMessage(indexOf(w, ec), ("Unknown continent: " + ec))
1125- let ci = cH(cA(toBigInt(dZ)), cJ)
1126- let eb = valueOrElse(getInteger(bi()), (bh + 1))
1127- let fI = toString(eb)
1128- let ed = Issue(bz(fI, fs), makeString([fI, fs, ci, ec], "_"), 1, 0, false)
1129- let ak = calculateAssetId(ed)
1130- let fJ = toBase58String(ak)
1131- let ew = makeString(bS((fv > 0), split(dB[O], "_"), fv), "_")
1132- $Tuple2(((((((((((((((bR._5 :+ (if ((size(bR._7) > 0))
1133- then StringEntry(fF, makeString_11C(bR._7, "_"))
1134- else DeleteEntry(fF))) :+ IntegerEntry(bi(), (eb + 1))) :+ ed) :+ StringEntry(bj(fI), fJ)) :+ StringEntry(aj(fJ), ai)) :+ StringEntry(bp(fI), ai)) :+ IntegerEntry(ao(k, fJ), bR._2)) :+ IntegerEntry(bo(k, fJ, ai), bR._2)) :+ IntegerEntry(an(fJ), fh)) :+ IntegerEntry(bn(fJ, ai), fh)) :+ StringEntry(cO, makeString([dB[M], bR._4, ew, dB[P]], ":"))) :+ StringEntry(aG(), bR._6)) :+ StringEntry(aE(aD), makeString([ec, "L", fJ], "_"))) :+ ScriptTransfer(addressFromStringValue(ai), 1, ak)), fJ)
1135- }
1136-
1137-
1138-func fK (ai,fu,dZ) = fr("M", 3, "SSSS", ai, fu, dZ, 0)
1139-
1140-
1141-func fL (ai,fu,dZ,bT,fe) = {
1142- let fi = (aY * 4)
1143- if (if (!(bT))
1144- then (fe != fi)
1159+ let em = cb._3
1160+ let cT = valueOrErrorMessage(indexOf(y, em), ("Unknown continent: " + em))
1161+ let cs = cR(cK(toBigInt(ej)), cT)
1162+ let el = valueOrElse(getInteger(bz()), (by + 1))
1163+ let fS = toString(el)
1164+ let en = Issue(bQ(fS, fC), makeString([fS, fC, cs, em], "_"), 1, 0, false)
1165+ let am = calculateAssetId(en)
1166+ let fT = toBase58String(am)
1167+ let eG = makeString(cc((fF > 0), split(dL[Q], "_"), fF), "_")
1168+ $Tuple2(((((((((((((((cb._5 :+ (if ((size(cb._7) > 0))
1169+ then StringEntry(fP, makeString_11C(cb._7, "_"))
1170+ else DeleteEntry(fP))) :+ IntegerEntry(bz(), (el + 1))) :+ en) :+ StringEntry(bA(fS), fT)) :+ StringEntry(al(fT), ak)) :+ StringEntry(bG(fS), ak)) :+ IntegerEntry(aq(k, fT), cb._2)) :+ IntegerEntry(bF(k, fT, ak), cb._2)) :+ IntegerEntry(ap(fT), fr)) :+ IntegerEntry(bE(fT, ak), fr)) :+ StringEntry(cY, makeString([dL[O], cb._4, eG, dL[R]], ":"))) :+ StringEntry(aI(), cb._6)) :+ StringEntry(aG(aF), makeString([em, "L", fT], "_"))) :+ ScriptTransfer(addressFromStringValue(ak), 1, am)), fT)
1171+ }
1172+
1173+
1174+func fU (ak,fE,ej) = fB("M", 3, "SSSS", ak, fE, ej, 0)
1175+
1176+
1177+func fV (ak,fE,ej,cd,fo) = {
1178+ let fs = (bp * 4)
1179+ if (if (!(cd))
1180+ then (fo != fs)
11451181 else false)
1146- then throw(("Payment attached should be " + toString(fi)))
1147- else fr("L", 4, "SMM", ai, fu, dZ, (e * 4))
1148- }
1149-
1150-
1151-func fM (ai,fu,dZ,bT,fe) = {
1152- let fi = (aY * 47)
1153- if (if (!(bT))
1154- then (fe != fi)
1182+ then throw(("Payment attached should be " + toString(fs)))
1183+ else fB("L", 4, "SMM", ak, fE, ej, (e * 4))
1184+ }
1185+
1186+
1187+func fW (ak,fE,ej,cd,fo) = {
1188+ let fs = (bp * 47)
1189+ if (if (!(cd))
1190+ then (fo != fs)
11551191 else false)
1156- then throw(("Payment attached should be " + toString(fi)))
1157- else fr("XL", 5, "SSSML", ai, fu, dZ, (e * 47))
1158- }
1159-
1160-
1161-func fN (ai,fu,dZ,bT,fe) = {
1162- let fi = (aY * 54)
1163- if (if (!(bT))
1164- then (fe != fi)
1192+ then throw(("Payment attached should be " + toString(fs)))
1193+ else fB("XL", 5, "SSSML", ak, fE, ej, (e * 47))
1194+ }
1195+
1196+
1197+func fX (ak,fE,ej,cd,fo) = {
1198+ let fs = (bp * 54)
1199+ if (if (!(cd))
1200+ then (fo != fs)
11651201 else false)
1166- then throw(("Payment attached should be " + toString(fi)))
1167- else fr("XXL", 6, "LXL", ai, fu, dZ, (e * 54))
1168- }
1169-
1170-
1171-func fO (bT,ai,fe,fu,dZ) = {
1172- let fP = {
1173- let c = size(fu)
1202+ then throw(("Payment attached should be " + toString(fs)))
1203+ else fB("XXL", 6, "LXL", ak, fE, ej, (e * 54))
1204+ }
1205+
1206+
1207+func fY (cd,ak,fo,fE,ej) = {
1208+ let fZ = {
1209+ let c = size(fE)
11741210 if ((4 == c))
1175- then fK(ai, fu, dZ)
1211+ then fU(ak, fE, ej)
11761212 else if ((3 == c))
1177- then fL(ai, fu, dZ, bT, fe)
1213+ then fV(ak, fE, ej, cd, fo)
11781214 else if ((5 == c))
1179- then fM(ai, fu, dZ, bT, fe)
1215+ then fW(ak, fE, ej, cd, fo)
11801216 else if ((2 == c))
1181- then fN(ai, fu, dZ, bT, fe)
1217+ then fX(ak, fE, ej, cd, fo)
11821218 else throw("Unknown merge")
11831219 }
1184- fP
1185- }
1186-
1187-
1188-func fQ (cf) = if (if ((cf.originCaller != ae))
1189- then valueOrElse(getBoolean(aH()), false)
1220+ fZ
1221+ }
1222+
1223+
1224+func ga (cp) = if (if ((cp.originCaller != ag))
1225+ then valueOrElse(getBoolean(aJ()), false)
11901226 else false)
11911227 then throw("Contracts are under maintenance")
1192- else StringEntry(ah(toString(cf.originCaller)), toBase58String(cf.transactionId))
1193-
1194-
1195-@Callable(cf)
1196-func constructorV1 (fR) = if ((cf.caller != this))
1228+ else StringEntry(aj(toString(cp.originCaller)), toBase58String(cp.transactionId))
1229+
1230+
1231+@Callable(cp)
1232+func constructorV1 (gb) = if ((cp.caller != this))
11971233 then throw("Permission denied")
1198- else [StringEntry(Y(), fR)]
1199-
1200-
1201-
1202-@Callable(cf)
1203-func setBlocked (fS) = if ((cf.caller != this))
1234+ else [StringEntry(aa(), gb)]
1235+
1236+
1237+
1238+@Callable(cp)
1239+func setBlocked (gc) = if ((cp.caller != this))
12041240 then throw("permission denied")
1205- else [BooleanEntry(aH(), fS)]
1206-
1207-
1208-
1209-@Callable(cf)
1241+ else [BooleanEntry(aJ(), gc)]
1242+
1243+
1244+
1245+@Callable(cp)
12101246 func stakeLand () = {
1211- let fT = fQ(cf)
1212- if ((size(cf.payments) != 1))
1247+ let gd = ga(cp)
1248+ if ((size(cp.payments) != 1))
12131249 then throw("Exactly one payment required")
12141250 else {
1215- let fU = value(cf.payments[0])
1216- let ak = value(fU.assetId)
1217- let T = toString(cf.caller)
1218- if ((fU.amount != 1))
1251+ let ge = value(cp.payments[0])
1252+ let am = value(ge.assetId)
1253+ let V = toString(cp.caller)
1254+ if ((ge.amount != 1))
12191255 then throw((("NFT " + i) + " token should be attached as payment"))
12201256 else {
1221- let eK = value(assetInfo(ak))
1222- if ((eK.issuer != this))
1257+ let eU = value(assetInfo(am))
1258+ if ((eU.issuer != this))
12231259 then throw("Unknown issuer of token")
1224- else if (!(contains(eK.name, i)))
1260+ else if (!(contains(eU.name, i)))
12251261 then throw((("Only NFT " + i) + " tokens are accepted"))
12261262 else {
1227- let fV = drop(eK.name, 4)
1228- let bk = if (contains(fV, "XXL"))
1229- then dropRight(fV, 3)
1230- else if (contains(fV, "XL"))
1231- then dropRight(fV, 2)
1232- else dropRight(fV, 1)
1233- if (!(isDefined(parseInt(bk))))
1234- then throw(("Cannot parse land number from " + eK.name))
1263+ let gf = drop(eU.name, 4)
1264+ let bB = if (contains(gf, "XXL"))
1265+ then dropRight(gf, 3)
1266+ else if (contains(gf, "XL"))
1267+ then dropRight(gf, 2)
1268+ else dropRight(gf, 1)
1269+ if (!(isDefined(parseInt(bB))))
1270+ then throw(("Cannot parse land number from " + eU.name))
12351271 else {
1236- let au = toBase58String(ak)
1237- let eL = am(au)
1238- if (isDefined(getInteger(eL)))
1239- then throw((("NFT " + eK.name) + " is already staked"))
1272+ let aw = toBase58String(am)
1273+ let eV = ao(aw)
1274+ if (isDefined(getInteger(eV)))
1275+ then throw((("NFT " + eU.name) + " is already staked"))
12401276 else {
1241- let eO = split(eK.description, "_")
1242- let cb = ch(eO[B])
1243- let ez = aP(eO[A])
1244- let bQ = cg(cb, (ez / m), 1)
1245- let eA = valueOrElse(getInteger(ao(k, au)), 0)
1246- let fG = getString(av(T))
1247- let fB = if (isDefined(fG))
1248- then split_51C(value(fG), "_")
1277+ let eY = split(eU.description, "_")
1278+ let cl = cr(eY[D])
1279+ let eJ = aU(eY[C])
1280+ let ca = cq(cl, (eJ / m), 1)
1281+ let eK = valueOrElse(getInteger(aq(k, aw)), 0)
1282+ let fQ = getString(ax(V))
1283+ let fL = if (isDefined(fQ))
1284+ then split_51C(value(fQ), "_")
12491285 else nil
1250- if (containsElement(fB, au))
1251- then throw(("Your staked lands already contain " + au))
1286+ if (containsElement(fL, aw))
1287+ then throw(("Your staked lands already contain " + aw))
12521288 else {
1253- let dl = valueOrElse(getInteger(an(au)), 0)
1254-[IntegerEntry(eL, lastBlock.timestamp), IntegerEntry(aq(i, au, T), lastBlock.timestamp), StringEntry(av(T), makeString_11C((fB :+ au), "_")), StringEntry(aj(au), T), StringEntry(bp(bk), T), IntegerEntry(bo(k, au, T), eA), IntegerEntry(bn(au, T), dl), StringEntry(aG(), bQ), fT]
1289+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1290+[IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(i, aw, V), lastBlock.timestamp), StringEntry(ax(V), makeString_11C((fL :+ aw), "_")), StringEntry(al(aw), V), StringEntry(bG(bB), V), IntegerEntry(bF(k, aw, V), eK), IntegerEntry(bE(aw, V), dv), StringEntry(aI(), ca), gd]
12551291 }
12561292 }
12571293 }
12621298
12631299
12641300
1265-@Callable(cf)
1266-func unstakeLand (eF) = {
1267- let fT = fQ(cf)
1268- if ((size(cf.payments) != 0))
1301+@Callable(cp)
1302+func unstakeLand (eP) = {
1303+ let gd = ga(cp)
1304+ if ((size(cp.payments) != 0))
12691305 then throw("No payments required")
12701306 else {
1271- let ai = toString(cf.caller)
1272- let eQ = eD(ai, bu, eF)
1273- let au = eQ._2
1274- let fF = av(ai)
1275- let cb = ch(eQ._3[B])
1276- let ez = aP(eQ._3[A])
1277- let bQ = cg(cb, (ez / m), -1)
1278- let fj = fc(ai, au, ez, bu)
1279- let fB = split_51C(valueOrElse(getString(fF), ""), "_")
1280- let ad = indexOf(fB, au)
1281- if (!(isDefined(ad)))
1282- then throw(("Your staked lands don't contain " + au))
1307+ let ak = toString(cp.caller)
1308+ let fa = eN(ak, bL, eP)
1309+ let aw = fa._2
1310+ let fP = ax(ak)
1311+ let cl = cr(fa._3[D])
1312+ let eJ = aU(fa._3[C])
1313+ let ca = cq(cl, (eJ / m), -1)
1314+ let ft = fm(ak, aw, eJ, bL)
1315+ let fL = split_51C(valueOrElse(getString(fP), ""), "_")
1316+ let af = indexOf(fL, aw)
1317+ if (!(isDefined(af)))
1318+ then throw(("Your staked lands don't contain " + aw))
12831319 else {
1284- let cM = value(blockInfoByHeight(height)).timestamp
1285- let fW = valueOrElse(getInteger(ag, aI(ai)), 0)
1286- if ((fW >= cM))
1287- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(fW)))
1288- else [ScriptTransfer(cf.caller, 1, fromBase58String(au)), DeleteEntry(am(au)), DeleteEntry(aq(i, au, ai)), StringEntry(aG(), bQ), StringEntry(fj._2, makeString(fj._3, ":")), if ((size(fB) > 1))
1289- then StringEntry(fF, makeString_11C(removeByIndex(fB, value(ad)), "_"))
1290- else DeleteEntry(fF), fT]
1320+ let cW = value(blockInfoByHeight(height)).timestamp
1321+ let gg = valueOrElse(getInteger(ai, aK(ak)), 0)
1322+ if ((gg >= cW))
1323+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gg)))
1324+ else [ScriptTransfer(cp.caller, 1, fromBase58String(aw)), DeleteEntry(ao(aw)), DeleteEntry(as(i, aw, ak)), StringEntry(aI(), ca), StringEntry(ft._2, makeString(ft._3, ":")), if ((size(fL) > 1))
1325+ then StringEntry(fP, makeString_11C(removeByIndex(fL, value(af)), "_"))
1326+ else DeleteEntry(fP), gd]
12911327 }
12921328 }
12931329 }
12941330
12951331
12961332
1297-@Callable(cf)
1333+@Callable(cp)
12981334 func stakeDuck () = {
1299- let fT = fQ(cf)
1300- if ((size(cf.payments) != 1))
1335+ let gd = ga(cp)
1336+ if ((size(cp.payments) != 1))
13011337 then throw("Exactly one payment required")
13021338 else {
1303- let fU = value(cf.payments[0])
1304- let ak = value(fU.assetId)
1305- let T = toString(cf.caller)
1306- if ((fU.amount != 1))
1339+ let ge = value(cp.payments[0])
1340+ let am = value(ge.assetId)
1341+ let V = toString(cp.caller)
1342+ if ((ge.amount != 1))
13071343 then throw((("NFT " + j) + " token should be attached as payment"))
13081344 else {
1309- let eK = value(assetInfo(ak))
1310- if (if ((eK.issuer != aR))
1311- then (eK.issuer != aS)
1345+ let eU = value(assetInfo(am))
1346+ if (if ((eU.issuer != bi))
1347+ then (eU.issuer != bj)
13121348 else false)
13131349 then throw((("Unknown issuer of " + j) + " token"))
1314- else if (!(contains(eK.name, j)))
1350+ else if (!(contains(eU.name, j)))
13151351 then throw((("Only NFT " + j) + " tokens are accepted"))
13161352 else {
1317- let fX = toBase58String(ak)
1318- let eL = am(fX)
1319- if (isDefined(getInteger(eL)))
1320- then throw((("NFT " + eK.name) + " is already staked"))
1321- else if (isDefined(getString(aB(T))))
1322- then throw(("You already staked one duck: " + eK.name))
1353+ let gh = toBase58String(am)
1354+ let eV = ao(gh)
1355+ if (isDefined(getInteger(eV)))
1356+ then throw((("NFT " + eU.name) + " is already staked"))
1357+ else if (isDefined(getString(aD(V))))
1358+ then throw(("You already staked one duck: " + eU.name))
13231359 else {
1324- let fY = aE(fX)
1325- let fZ = getString(fY)
1326- let cO = aC(fX)
1327- let ga = getString(cO)
1328- ([IntegerEntry(eL, lastBlock.timestamp), IntegerEntry(aq(j, toBase58String(ak), T), lastBlock.timestamp), StringEntry(aA(fX), T), StringEntry(aB(T), fX)] ++ (if (isDefined(fZ))
1360+ let gi = aG(gh)
1361+ let gj = getString(gi)
1362+ let cY = aE(gh)
1363+ let gk = getString(cY)
1364+ ([IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(j, toBase58String(am), V), lastBlock.timestamp), StringEntry(aC(gh), V), StringEntry(aD(V), gh)] ++ (if (isDefined(gj))
13291365 then nil
1330- else ([StringEntry(fY, u)] ++ (if (isDefined(ga))
1366+ else ([StringEntry(gi, u)] ++ (if (isDefined(gk))
13311367 then nil
1332- else (([StringEntry(cO, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aF(fX), 100)) :+ fT)))))
1368+ else (([StringEntry(cY, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aH(gh), 100)) :+ gd)))))
13331369 }
13341370 }
13351371 }
13381374
13391375
13401376
1341-@Callable(cf)
1342-func unstakeDuck (fX) = {
1343- let fT = fQ(cf)
1344- if ((size(cf.payments) != 0))
1377+@Callable(cp)
1378+func unstakeDuck (gh) = {
1379+ let gd = ga(cp)
1380+ if ((size(cp.payments) != 0))
13451381 then throw("No payments required")
13461382 else {
1347- let ak = fromBase58String(fX)
1348- let T = toString(cf.caller)
1349- let eK = value(assetInfo(ak))
1350- let eL = am(toBase58String(ak))
1351- if (!(isDefined(getInteger(eL))))
1352- then throw((("NFT " + eK.name) + " is not staked"))
1353- else if (!(isDefined(getString(aB(T)))))
1354- then throw((("The duck " + eK.name) + " is not staked"))
1383+ let am = fromBase58String(gh)
1384+ let V = toString(cp.caller)
1385+ let eU = value(assetInfo(am))
1386+ let eV = ao(toBase58String(am))
1387+ if (!(isDefined(getInteger(eV))))
1388+ then throw((("NFT " + eU.name) + " is not staked"))
1389+ else if (!(isDefined(getString(aD(V)))))
1390+ then throw((("The duck " + eU.name) + " is not staked"))
13551391 else {
1356- let eN = valueOrErrorMessage(getString(aA(toBase58String(ak))), (("NFT " + eK.name) + " is orphaned"))
1357- if ((eN != T))
1392+ let eX = valueOrErrorMessage(getString(aC(toBase58String(am))), (("NFT " + eU.name) + " is orphaned"))
1393+ if ((eX != V))
13581394 then throw("Staked NFT is not yours")
13591395 else {
1360- let er = aF(fX)
1361- let gb = valueOrElse(getInteger(er), 100)
1362- if ((100 > gb))
1396+ let eB = aH(gh)
1397+ let gl = valueOrElse(getInteger(eB), 100)
1398+ if ((100 > gl))
13631399 then throw("Please heal your duck before unstaking")
1364- else [ScriptTransfer(cf.caller, 1, ak), DeleteEntry(eL), DeleteEntry(er), DeleteEntry(aE(fX)), DeleteEntry(aA(fX)), DeleteEntry(aq(j, fX, T)), DeleteEntry(aB(T)), fT]
1400+ else [ScriptTransfer(cp.caller, 1, am), DeleteEntry(eV), DeleteEntry(eB), DeleteEntry(aG(gh)), DeleteEntry(aC(gh)), DeleteEntry(as(j, gh, V)), DeleteEntry(aD(V)), gd]
13651401 }
13661402 }
13671403 }
13691405
13701406
13711407
1372-@Callable(cf)
1373-func claimRes (dy,gc) = {
1374- let fT = fQ(cf)
1375- if ((size(cf.payments) != 0))
1408+@Callable(cp)
1409+func claimRes (dI,gm) = {
1410+ let gd = ga(cp)
1411+ if ((size(cp.payments) != 0))
13761412 then throw("No payments required")
13771413 else {
1378- let ai = toString(cf.originCaller)
1379- let bY = eP(ai, dy, bu, gc)
1380- $Tuple2((((bY._1 :+ StringEntry(bY._2, makeString(bY._3, ":"))) :+ StringEntry(bY._4, makeString(bY._5, ":"))) :+ fT), bY._3[N])
1381- }
1382- }
1383-
1384-
1385-
1386-@Callable(cf)
1387-func claimResToWH (dy,gc) = {
1388- let fT = fQ(cf)
1389- if ((size(cf.payments) != 0))
1414+ let ak = toString(cp.originCaller)
1415+ let ci = eZ(ak, dI, bL, gm)
1416+ $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._3[P])
1417+ }
1418+ }
1419+
1420+
1421+
1422+@Callable(cp)
1423+func claimResToWH (dI,gm) = {
1424+ let gd = ga(cp)
1425+ if ((size(cp.payments) != 0))
13901426 then throw("No payments required")
13911427 else {
1392- let ai = toString(cf.originCaller)
1393- let bY = eP(ai, dy, bt, gc)
1394- $Tuple2((((bY._1 :+ StringEntry(bY._2, makeString(bY._3, ":"))) :+ StringEntry(bY._4, makeString(bY._5, ":"))) :+ fT), bY._5[E])
1395- }
1396- }
1397-
1398-
1399-
1400-@Callable(cf)
1401-func flight (eg,eh) = {
1402- let fT = fQ(cf)
1403- if (!(sigVerify_8Kb(eg, eh, aT)))
1428+ let ak = toString(cp.originCaller)
1429+ let ci = eZ(ak, dI, bK, gm)
1430+ $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._5[G])
1431+ }
1432+ }
1433+
1434+
1435+
1436+@Callable(cp)
1437+func flight (eq,er) = {
1438+ let gd = ga(cp)
1439+ if (!(sigVerify_8Kb(eq, er, bk)))
14041440 then throw("signature does not match")
1405- else if ((size(cf.payments) != 0))
1441+ else if ((size(cp.payments) != 0))
14061442 then throw("No payments required")
14071443 else {
1408- let cS = split(toUtf8String(eg), ";")
1409- let ei = split(cS[0], "|")
1410- let ej = split(ei[bw], "_")
1411- let ek = parseIntValue(ej[0])
1412- let el = parseIntValue(ej[1])
1413- let em = split(cS[1], ":")
1414- let en = em[0]
1415- let eo = parseIntValue(ei[bx])
1416- if (if ((eo > (lastBlock.timestamp + aV)))
1444+ let dc = split(toUtf8String(eq), ";")
1445+ let es = split(dc[0], "|")
1446+ let et = split(es[bN], "_")
1447+ let eu = parseIntValue(et[0])
1448+ let ev = parseIntValue(et[1])
1449+ let ew = split(dc[1], ":")
1450+ let ex = ew[0]
1451+ let ey = parseIntValue(es[bO])
1452+ if (if ((ey > (lastBlock.timestamp + bm)))
14171453 then true
1418- else ((lastBlock.timestamp - aV) > eo))
1454+ else ((lastBlock.timestamp - bm) > ey))
14191455 then throw("signature outdated")
14201456 else {
1421- let ep = em[1]
1422- let eq = valueOrElse(getString(ah(toString(cf.originCaller))), "")
1423- if ((eq != ep))
1424- then throw(((("Tx ids don't match! In state: " + eq) + ", in msg: ") + ep))
1457+ let ez = ew[1]
1458+ let eA = valueOrElse(getString(aj(toString(cp.originCaller))), "")
1459+ if ((eA != ez))
1460+ then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez))
14251461 else {
1426- let aJ = toString(cf.caller)
1427- let aD = valueOrErrorMessage(getString(aB(aJ)), "You don't have a duck staked")
1428- let er = aF(aD)
1429- let es = valueOrElse(getInteger(er), 100)
1430- if ((es != ek))
1431- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(er), 100))) + " from state does not match one from flight log=") + toString(ek)))
1432- else if ((0 >= ek))
1462+ let aL = toString(cp.caller)
1463+ let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked")
1464+ let eB = aH(aF)
1465+ let eC = valueOrElse(getInteger(eB), 100)
1466+ if ((eC != eu))
1467+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu)))
1468+ else if ((0 >= eu))
14331469 then throw("You can't fly with zero health")
14341470 else {
1435- let fY = aE(aD)
1436- let eH = valueOrElse(getString(fY), u)
1437- if ((en == eH))
1471+ let gi = aG(aF)
1472+ let eR = valueOrElse(getString(gi), u)
1473+ if ((ex == eR))
14381474 then throw("You can't fly to the same location")
14391475 else {
1440- let et = if ((size(ei) > by))
1441- then ei[by]
1476+ let eD = if ((size(es) > bP))
1477+ then es[bP]
14421478 else ""
1443- let eu = if (if ((el > 0))
1444- then (et == "$")
1479+ let eE = if (if ((ev > 0))
1480+ then (eD == "$")
14451481 else false)
1446- then aM(invoke(ae, "sendUsdtPrize", [aJ], nil))
1482+ then aS(invoke(ag, "sendUsdtPrize", [aL], nil))
14471483 else 0
1448- $Tuple2([StringEntry(fY, if ((el > 0))
1449- then en
1450- else eH), IntegerEntry(er, el), fT], eu)
1484+ $Tuple2([StringEntry(gi, if ((ev > 0))
1485+ then ex
1486+ else eR), IntegerEntry(eB, ev), gd], eE)
14511487 }
14521488 }
14531489 }
14571493
14581494
14591495
1460-@Callable(cf)
1461-func setHealth (gb,aD) = {
1462- let fT = fQ(cf)
1463- if (if ((0 > gb))
1496+@Callable(cp)
1497+func setHealth (gl,aF) = {
1498+ let gd = ga(cp)
1499+ if (if ((0 > gl))
14641500 then true
1465- else (gb > 100))
1501+ else (gl > 100))
14661502 then throw("HP should be within 0..100")
1467- else [IntegerEntry(aF(aD), gb), fT]
1468- }
1469-
1470-
1471-
1472-@Callable(cf)
1473-func heal (gd,ge) = {
1474- let fT = fQ(cf)
1475- if (if ((1 > gd))
1503+ else [IntegerEntry(aH(aF), gl), gd]
1504+ }
1505+
1506+
1507+
1508+@Callable(cp)
1509+func heal (gn,go) = {
1510+ let gd = ga(cp)
1511+ if (if ((1 > gn))
14761512 then true
1477- else (gd > 3))
1513+ else (gn > 3))
14781514 then throw("MedKit levels 1..3 only")
1479- else if ((0 >= ge))
1480- then throw(("Quantity should be positive! " + toString(ge)))
1515+ else if ((0 >= go))
1516+ then throw(("Quantity should be positive! " + toString(go)))
14811517 else {
1482- let aD = valueOrErrorMessage(getString(aB(toString(cf.caller))), "You don't have a duck staked")
1483- let er = aF(aD)
1484- let gf = valueOrElse(getInteger(er), 100)
1485- if ((gf >= 100))
1518+ let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked")
1519+ let eB = aH(aF)
1520+ let gp = valueOrElse(getInteger(eB), 100)
1521+ if ((gp >= 100))
14861522 then throw("HP should be < 100 to heal")
14871523 else {
1488- let cO = aC(aD)
1489- let dB = cN(cO)
1490- let gg = (gd - 1)
1491- let gh = if ((dB[P] == ""))
1524+ let cY = aE(aF)
1525+ let dL = cX(cY)
1526+ let gq = (gn - 1)
1527+ let gr = if ((dL[R] == ""))
14921528 then nil
1493- else split(dB[P], "_")
1494- let gi = if ((size(gh) > gg))
1495- then parseIntValue(gh[gg])
1529+ else split(dL[R], "_")
1530+ let gs = if ((size(gr) > gq))
1531+ then parseIntValue(gr[gq])
14961532 else 0
1497- if ((ge > gi))
1498- then throw(((("You have only " + toString(gi)) + " of ") + v[gg]))
1533+ if ((go > gs))
1534+ then throw(((("You have only " + toString(gs)) + " of ") + x[gq]))
14991535 else {
1500- func gj (bG,gk) = {
1501- let aO = bG._2
1502- let cB = if ((size(gh) > aO))
1503- then parseIntValue(gh[aO])
1536+ func gt (bX,gu) = {
1537+ let aT = bX._2
1538+ let cL = if ((size(gr) > aT))
1539+ then parseIntValue(gr[aT])
15041540 else 0
1505- let gl = toString(if ((aO == gg))
1506- then (cB - ge)
1507- else cB)
1508- $Tuple2((bG._1 :+ gl), (aO + 1))
1541+ let gv = toString(if ((aT == gq))
1542+ then (cL - go)
1543+ else cL)
1544+ $Tuple2((bX._1 :+ gv), (aT + 1))
15091545 }
15101546
1511- let gm = ( let bI = x
1512- let bJ = size(bI)
1513- let bK = $Tuple2(nil, 0)
1514- func bL (bM,bN) = if ((bN >= bJ))
1515- then bM
1516- else gj(bM, bI[bN])
1517-
1518- func bO (bM,bN) = if ((bN >= bJ))
1519- then bM
1547+ let gw = ( let bb = z
1548+ let bc = size(bb)
1549+ let bd = $Tuple2(nil, 0)
1550+ func be (bf,bg) = if ((bg >= bc))
1551+ then bf
1552+ else gt(bf, bb[bg])
1553+
1554+ func bh (bf,bg) = if ((bg >= bc))
1555+ then bf
15201556 else throw("List size exceeds 50")
15211557
1522- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 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))._1
1523- let gn = (gf + aU[(gd - 1)])
1524- $Tuple2([IntegerEntry(er, gn), StringEntry(cO, makeString_2C([dB[M], dB[N], dB[O], makeString(gm, "_")], ":")), fT], gn)
1558+ bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 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))._1
1559+ let gx = (gp + bl[(gn - 1)])
1560+ $Tuple2([IntegerEntry(eB, gx), StringEntry(cY, makeString_2C([dL[O], dL[P], dL[Q], makeString(gw, "_")], ":")), gd], gx)
15251561 }
15261562 }
15271563 }
15291565
15301566
15311567
1532-@Callable(cf)
1533-func healES (gd,ge) = {
1534- let fT = fQ(cf)
1535- $Tuple2([fT], 0)
1536- }
1537-
1538-
1539-
1540-@Callable(cf)
1541-func updateBackpack (aD,go) = {
1542- let fT = fQ(cf)
1543- if ((cf.caller != af))
1568+@Callable(cp)
1569+func healES () = {
1570+ let gd = ga(cp)
1571+ if ((size(cp.payments) != 1))
1572+ then throw("Exactly one payment required")
1573+ else {
1574+ let ge = value(cp.payments[0])
1575+ if ((ge.assetId != b))
1576+ then throw("Allowed USDT payment only!")
1577+ else {
1578+ let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked")
1579+ let eB = aH(aF)
1580+ let gp = valueOrElse(getInteger(eB), 100)
1581+ if ((gp > 0))
1582+ then throw("HP should be 0 to call Emergency Service")
1583+ else {
1584+ let cY = aE(aF)
1585+ let dL = cX(cY)
1586+ let gr = if ((dL[R] == ""))
1587+ then nil
1588+ else split(dL[R], "_")
1589+ let gy = if ((size(gr) > 0))
1590+ then parseIntValue(gr[0])
1591+ else 0
1592+ let gz = if ((size(gr) > 1))
1593+ then parseIntValue(gr[1])
1594+ else 0
1595+ let gA = if ((size(gr) > 2))
1596+ then parseIntValue(gr[2])
1597+ else 0
1598+ if (if (if ((gy > 0))
1599+ then true
1600+ else (gz > 0))
1601+ then true
1602+ else (gA > 0))
1603+ then throw("You have to use own Medical Kit")
1604+ else {
1605+ let gB = getString(ah, aM())
1606+ let gC = if (isDefined(gB))
1607+ then split(value(gB), "_")
1608+ else nil
1609+ let gD = if ((size(gC) > 0))
1610+ then parseIntValue(gC[0])
1611+ else 0
1612+ if ((0 >= gD))
1613+ then throw("There are no Medical Kits L1 at Emergency Service storage")
1614+ else {
1615+ let gx = (gp + bl[0])
1616+ let gE = makeString([toString((gD - 1)), removeByIndex(gC, 0)], "_")
1617+ let aX = split(z[0], "_")
1618+ let gF = aW(aX)
1619+ let gG = fraction((gF * w), v, 10)
1620+ if ((ge.amount != gG))
1621+ then throw(("Payment attached should be " + toString(gG)))
1622+ else {
1623+ let ci = aP(invoke(ah, "updateEsStorage", [gE], nil))
1624+ $Tuple2([IntegerEntry(eB, gx), gd], ci)
1625+ }
1626+ }
1627+ }
1628+ }
1629+ }
1630+ }
1631+ }
1632+
1633+
1634+
1635+@Callable(cp)
1636+func updateBackpack (aF,gH) = {
1637+ let gd = ga(cp)
1638+ if ((cp.caller != ah))
15441639 then throw("permission denied")
1545- else $Tuple2([StringEntry(aC(aD), go), fT], go)
1546- }
1547-
1548-
1549-
1550-@Callable(cf)
1640+ else $Tuple2([StringEntry(aE(aF), gH), gd], gH)
1641+ }
1642+
1643+
1644+
1645+@Callable(cp)
15511646 func buySLand () = {
1552- let fT = fQ(cf)
1553- if ((size(cf.payments) != 1))
1647+ let gd = ga(cp)
1648+ if ((size(cp.payments) != 1))
15541649 then throw("Exactly one payment required")
15551650 else {
1556- let fU = value(cf.payments[0])
1557- if ((fU.assetId != b))
1651+ let ge = value(cp.payments[0])
1652+ if ((ge.assetId != b))
15581653 then throw("Allowed USDT payment only!")
1559- else if ((fU.amount != ba))
1560- then throw(("Payment attached should be " + toString(ba)))
1654+ else if ((ge.amount != br))
1655+ then throw(("Payment attached should be " + toString(br)))
15611656 else {
1562- let bY = dX(cf.caller, cf.transactionId)
1563- $Tuple2(((bY._1 :+ ScriptTransfer(af, fU.amount, b)) :+ fT), bY._2._1)
1657+ let ci = eh(cp.caller, cp.transactionId)
1658+ $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2._1)
15641659 }
15651660 }
15661661 }
15671662
15681663
15691664
1570-@Callable(cf)
1571-func expedition (eg,eh) = {
1572- let fT = fQ(cf)
1573- if ((size(cf.payments) != 0))
1665+@Callable(cp)
1666+func expedition (eq,er) = {
1667+ let gd = ga(cp)
1668+ if ((size(cp.payments) != 0))
15741669 then throw("No payments required")
15751670 else {
1576- let bY = ef(true, cf.caller, cf.transactionId, eg, eh)
1577- $Tuple2((bY._1 :+ fT), $Tuple2(bY._2, bY._3))
1578- }
1579- }
1580-
1581-
1582-
1583-@Callable(cf)
1584-func upgradeInfra (au) = {
1585- let fT = fQ(cf)
1586- if ((size(cf.payments) != 0))
1671+ let ci = ep(true, cp.caller, cp.transactionId, eq, er)
1672+ $Tuple2((ci._1 :+ gd), $Tuple2(ci._2, ci._3))
1673+ }
1674+ }
1675+
1676+
1677+
1678+@Callable(cp)
1679+func upgradeInfra (aw) = {
1680+ let gd = ga(cp)
1681+ if ((size(cp.payments) != 0))
15871682 then throw("No payments required")
15881683 else {
1589- let bY = fd(true, cf.caller, 0, au)
1590- $Tuple2((bY._1 :+ fT), bY._2)
1591- }
1592- }
1593-
1594-
1595-
1596-@Callable(cf)
1597-func upgradeInfraUsdt (au) = if ((cf.caller != this))
1684+ let ci = fn(true, cp.caller, 0, aw)
1685+ $Tuple2((ci._1 :+ gd), ci._2)
1686+ }
1687+ }
1688+
1689+
1690+
1691+@Callable(cp)
1692+func upgradeInfraUsdt (aw) = if ((cp.caller != this))
15981693 then throw("Permission denied")
15991694 else {
1600- let fT = fQ(cf)
1601- if ((size(cf.payments) != 1))
1695+ let gd = ga(cp)
1696+ if ((size(cp.payments) != 1))
16021697 then throw("Exactly one payment required")
16031698 else {
1604- let fU = value(cf.payments[0])
1605- if ((fU.assetId != b))
1699+ let ge = value(cp.payments[0])
1700+ if ((ge.assetId != b))
16061701 then throw("Allowed USDT payment only!")
16071702 else {
1608- let bY = fd(false, cf.caller, fU.amount, au)
1609- $Tuple2(((bY._1 :+ ScriptTransfer(af, fU.amount, b)) :+ fT), bY._2)
1703+ let ci = fn(false, cp.caller, ge.amount, aw)
1704+ $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2)
16101705 }
16111706 }
16121707 }
16131708
16141709
16151710
1616-@Callable(cf)
1617-func activateArtifact (gp,au) = {
1618- let fT = fQ(cf)
1619- if ((size(cf.payments) != 0))
1711+@Callable(cp)
1712+func activateArtifact (gI,aw) = {
1713+ let gd = ga(cp)
1714+ if ((size(cp.payments) != 0))
16201715 then throw("No payments required")
16211716 else {
1622- let bY = {
1623- let c = gp
1717+ let ci = {
1718+ let c = gI
16241719 if (("PRESALE" == c))
1625- then fp(toString(cf.caller), au)
1720+ then fz(toString(cp.caller), aw)
16261721 else throw("Unknown artifact")
16271722 }
1628- (bY :+ fT)
1629- }
1630- }
1631-
1632-
1633-
1634-@Callable(cf)
1635-func mergeLands (fu) = {
1636- let fT = fQ(cf)
1637- if ((size(cf.payments) != 0))
1723+ (ci :+ gd)
1724+ }
1725+ }
1726+
1727+
1728+
1729+@Callable(cp)
1730+func mergeLands (fE) = {
1731+ let gd = ga(cp)
1732+ if ((size(cp.payments) != 0))
16381733 then throw("No payments required")
16391734 else {
1640- let bY = fO(true, toString(cf.caller), 0, fu, cf.transactionId)
1641- $Tuple2((bY._1 :+ fT), bY._2)
1642- }
1643- }
1644-
1645-
1646-
1647-@Callable(cf)
1648-func mergeLandsUsdt (fu) = {
1649- let fT = fQ(cf)
1650- if ((size(cf.payments) != 1))
1735+ let ci = fY(true, toString(cp.caller), 0, fE, cp.transactionId)
1736+ $Tuple2((ci._1 :+ gd), ci._2)
1737+ }
1738+ }
1739+
1740+
1741+
1742+@Callable(cp)
1743+func mergeLandsUsdt (fE) = {
1744+ let gd = ga(cp)
1745+ if ((size(cp.payments) != 1))
16511746 then throw("Exactly one payment required")
16521747 else {
1653- let fU = value(cf.payments[0])
1654- if ((fU.assetId != b))
1748+ let ge = value(cp.payments[0])
1749+ if ((ge.assetId != b))
16551750 then throw("Allowed USDT payment only!")
16561751 else {
1657- let bY = fO(false, toString(cf.caller), fU.amount, fu, cf.transactionId)
1658- $Tuple2(((bY._1 :+ ScriptTransfer(af, fU.amount, b)) :+ fT), bY._2)
1752+ let ci = fY(false, toString(cp.caller), ge.amount, fE, cp.transactionId)
1753+ $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2)
16591754 }
16601755 }
16611756 }
16621757
16631758
16641759
1665-@Callable(cf)
1666-func cargoExchange (gq,au) = {
1667- let fT = fQ(cf)
1668- if ((size(cf.payments) != 0))
1760+@Callable(cp)
1761+func cargoExchange (gJ,aw) = {
1762+ let gd = ga(cp)
1763+ if ((size(cp.payments) != 0))
16691764 then throw("No payments required")
16701765 else {
1671- let dA = split_4C(gq, ":")
1672- let ai = toString(cf.originCaller)
1673- let eK = value(assetInfo(fromBase58String(au)))
1674- let eL = am(au)
1675- if (!(isDefined(getInteger(eL))))
1676- then throw((eK.name + " is not staked"))
1766+ let dK = split_4C(gJ, ":")
1767+ let ak = toString(cp.originCaller)
1768+ let eU = value(assetInfo(fromBase58String(aw)))
1769+ let eV = ao(aw)
1770+ if (!(isDefined(getInteger(eV))))
1771+ then throw((eU.name + " is not staked"))
16771772 else {
1678- let eN = valueOrErrorMessage(getString(aj(au)), (("NFT " + eK.name) + " is orphaned"))
1679- if ((eN != ai))
1773+ let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned"))
1774+ if ((eX != ak))
16801775 then throw((i + " is not yours"))
16811776 else {
1682- let dk = (aP(split(eK.description, "_")[A]) / m)
1683- let dl = valueOrElse(getInteger(an(au)), 0)
1684- let aD = valueOrErrorMessage(getString(aB(ai)), "You don't have a duck staked")
1685- let eH = valueOrElse(getString(aE(aD)), u)
1686- let eI = split(value(eH), "_")
1687- if ((eI[aK] != "L"))
1688- then throw((("Duck location type is " + eI[aK]) + ", but should be L"))
1689- else if ((eI[aL] != au))
1690- then throw(("Duck should be on the land " + au))
1777+ let du = (aU(split(eU.description, "_")[C]) / m)
1778+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1779+ let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked")
1780+ let eR = valueOrElse(getString(aG(aF)), u)
1781+ let eS = split(value(eR), "_")
1782+ if ((eS[aN] != "L"))
1783+ then throw((("Duck location type is " + eS[aN]) + ", but should be L"))
1784+ else if ((eS[aO] != aw))
1785+ then throw(("Duck should be on the land " + aw))
16911786 else {
1692- let dj = at(au)
1693- let cU = di(dj, dk, dl)
1694- let cO = aC(aD)
1695- let dB = cN(cO)
1696- let bY = dz(dA, cU, dB)
1697- let dr = split(cU[H], "_")
1698- let fa = (parseIntValue(dr[J]) + bY._7)
1699- let fb = (parseIntValue(dr[K]) - bY._7)
1700-[StringEntry(cO, makeString_2C([dB[M], bY._4, bY._5, bY._6], ":")), StringEntry(dj, makeString_2C([cU[D], bY._1, bY._2, bY._3, makeString([dr[I], toString(fa), toString(fb), dr[L]], "_")], ":")), fT]
1787+ let dt = av(aw)
1788+ let de = ds(dt, du, dv)
1789+ let cY = aE(aF)
1790+ let dL = cX(cY)
1791+ let ci = dJ(dK, de, dL)
1792+ let dB = split(de[J], "_")
1793+ let fk = (parseIntValue(dB[L]) + ci._7)
1794+ let fl = (parseIntValue(dB[M]) - ci._7)
1795+[StringEntry(cY, makeString_2C([dL[O], ci._4, ci._5, ci._6], ":")), StringEntry(dt, makeString_2C([de[F], ci._1, ci._2, ci._3, makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")], ":")), gd]
17011796 }
17021797 }
17031798 }
17061801
17071802
17081803
1709-@Callable(cf)
1710-func saveWarehouse (dn,au) = {
1711- let fT = fQ(cf)
1712- if ((cf.caller != af))
1804+@Callable(cp)
1805+func saveWarehouse (dx,aw) = {
1806+ let gd = ga(cp)
1807+ if ((cp.caller != ah))
17131808 then throw("Access denied")
17141809 else {
1715- let dj = at(au)
1716- let do = split_4C(dn, ":")
1717- if ((size(do) != 5))
1810+ let dt = av(aw)
1811+ let dy = split_4C(dx, ":")
1812+ if ((size(dy) != 5))
17181813 then throw("warehouse string should contain 4 ':' separators")
17191814 else {
1720- let gr = split(do[H], "_")[I]
1721- let fa = cT(do)
1722- let gs = cQ(do[D])
1723- let fb = ((gs - parseIntValue(gr)) - fa)
1724- let gt = makeString_2C([do[D], do[E], do[F], do[G], makeString([gr, toString(fa), toString(fb), toString(gs)], "_")], ":")
1725- $Tuple2([StringEntry(dj, gt), fT], gt)
1815+ let gK = split(dy[J], "_")[K]
1816+ let fk = dd(dy)
1817+ let gL = da(dy[F])
1818+ let fl = ((gL - parseIntValue(gK)) - fk)
1819+ let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([gK, toString(fk), toString(fl), toString(gL)], "_")], ":")
1820+ $Tuple2([StringEntry(dt, gM), gd], gM)
17261821 }
17271822 }
17281823 }
17291824
17301825
17311826
1732-@Callable(cf)
1733-func fixWarehouseFormat (au) = if ((cf.caller != ae))
1827+@Callable(cp)
1828+func fixWarehouseFormat (aw) = if ((cp.caller != ag))
17341829 then throw("Access denied")
17351830 else {
1736- let dj = at(au)
1737- let eK = value(assetInfo(fromBase58String(au)))
1738- let dk = (aP(split(eK.description, "_")[A]) / m)
1739- let dl = valueOrElse(getInteger(an(au)), 0)
1740- let do = di(dj, dk, dl)
1741- let gr = aM(invoke(af, "recalcLockedVolumeREADONLY", [au, do], nil))
1742- let fa = cT(do)
1743- let gs = cQ(do[D])
1744- let fb = ((gs - gr) - fa)
1745- let gt = makeString_2C([do[D], do[E], do[F], do[G], makeString([toString(gr), toString(fa), toString(fb), toString(gs)], "_")], ":")
1746- $Tuple2([StringEntry(dj, gt)], gt)
1831+ let dt = av(aw)
1832+ let eU = value(assetInfo(fromBase58String(aw)))
1833+ let du = (aU(split(eU.description, "_")[C]) / m)
1834+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1835+ let dy = ds(dt, du, dv)
1836+ let gK = aS(invoke(ah, "recalcLockedVolumeREADONLY", [aw, dy], nil))
1837+ let fk = dd(dy)
1838+ let gL = da(dy[F])
1839+ let fl = ((gL - gK) - fk)
1840+ let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([toString(gK), toString(fk), toString(fl), toString(gL)], "_")], ":")
1841+ $Tuple2([StringEntry(dt, gM)], gM)
17471842 }
17481843
17491844
17501845
1751-@Callable(cf)
1752-func setCustomName (ak,fD,ap) = {
1753- let fT = fQ(cf)
1754- if ((size(cf.payments) != 1))
1846+@Callable(cp)
1847+func setCustomName (am,fN,ar) = {
1848+ let gd = ga(cp)
1849+ if ((size(cp.payments) != 1))
17551850 then throw("Exactly one payment required")
17561851 else {
1757- let fU = value(cf.payments[0])
1758- if ((fU.assetId != b))
1852+ let ge = value(cp.payments[0])
1853+ if ((ge.assetId != b))
17591854 then throw("Allowed USDT payment only!")
1760- else if ((fU.amount != aW))
1761- then throw(("Payment should be " + toString(aW)))
1762- else if (contains(fD, "__"))
1763- then throw(("Name should not contain '__': " + fD))
1764- else if ((size(fD) > aX))
1765- then throw(("Name too long, maxLength=" + toString(aX)))
1855+ else if ((ge.amount != bn))
1856+ then throw(("Payment should be " + toString(bn)))
1857+ else if (contains(fN, "__"))
1858+ then throw(("Name should not contain '__': " + fN))
1859+ else if ((size(fN) > bo))
1860+ then throw(("Name too long, maxLength=" + toString(bo)))
17661861 else {
1767- let ai = toString(cf.originCaller)
1768- let gu = {
1769- let c = ap
1862+ let ak = toString(cp.originCaller)
1863+ let gN = {
1864+ let c = ar
17701865 if (("ACCOUNT" == c))
17711866 then {
1772- let gv = br(fD)
1773- let gw = getString(gv)
1774- if (isDefined(gw))
1775- then throw(("Name already registered: " + fD))
1867+ let gO = bI(fN)
1868+ let gP = getString(gO)
1869+ if (isDefined(gP))
1870+ then throw(("Name already registered: " + fN))
17761871 else {
1777- let gx = ax(ai)
1778- let gy = getString(gx)
1779- let gz = if (isDefined(gy))
1780- then [DeleteEntry(br(value(gy)))]
1872+ let gQ = az(ak)
1873+ let gR = getString(gQ)
1874+ let gS = if (isDefined(gR))
1875+ then [DeleteEntry(bI(value(gR)))]
17811876 else nil
1782- ((gz :+ StringEntry(gx, fD)) :+ StringEntry(gv, ai))
1877+ ((gS :+ StringEntry(gQ, fN)) :+ StringEntry(gO, ak))
17831878 }
17841879 }
17851880 else if (("LAND" == c))
17861881 then {
1787- let eK = value(assetInfo(fromBase58String(ak)))
1788- let eL = am(ak)
1789- if (!(isDefined(getInteger(eL))))
1790- then throw((eK.name + " is not staked"))
1882+ let eU = value(assetInfo(fromBase58String(am)))
1883+ let eV = ao(am)
1884+ if (!(isDefined(getInteger(eV))))
1885+ then throw((eU.name + " is not staked"))
17911886 else {
1792- let eN = valueOrErrorMessage(getString(aj(ak)), (("NFT " + eK.name) + " is orphaned"))
1793- if ((eN != ai))
1887+ let eX = valueOrErrorMessage(getString(al(am)), (("NFT " + eU.name) + " is orphaned"))
1888+ if ((eX != ak))
17941889 then throw((i + " is not yours"))
17951890 else {
1796- let gv = bl(fD)
1797- let gw = getString(gv)
1798- if (isDefined(gw))
1799- then throw(("Name already registered: " + fD))
1891+ let gO = bC(fN)
1892+ let gP = getString(gO)
1893+ if (isDefined(gP))
1894+ then throw(("Name already registered: " + fN))
18001895 else {
1801- let gA = al(ak)
1802- let gy = getString(gA)
1803- let gz = if (isDefined(gy))
1804- then [DeleteEntry(bl(value(gy)))]
1896+ let gT = an(am)
1897+ let gR = getString(gT)
1898+ let gS = if (isDefined(gR))
1899+ then [DeleteEntry(bC(value(gR)))]
18051900 else nil
1806- ((gz :+ StringEntry(gA, fD)) :+ StringEntry(gv, ak))
1901+ ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am))
18071902 }
18081903 }
18091904 }
18101905 }
18111906 else if (("DUCK" == c))
18121907 then {
1813- let eK = value(assetInfo(fromBase58String(ak)))
1814- let eL = am(ak)
1815- if (if (!(isDefined(getInteger(eL))))
1908+ let eU = value(assetInfo(fromBase58String(am)))
1909+ let eV = ao(am)
1910+ if (if (!(isDefined(getInteger(eV))))
18161911 then true
1817- else !(isDefined(getString(aB(ai)))))
1818- then throw((eK.name + " is not staked"))
1912+ else !(isDefined(getString(aD(ak)))))
1913+ then throw((eU.name + " is not staked"))
18191914 else {
1820- let eN = valueOrErrorMessage(getString(aA(ak)), (("NFT " + eK.name) + " is orphaned"))
1821- if ((eN != ai))
1915+ let eX = valueOrErrorMessage(getString(aC(am)), (("NFT " + eU.name) + " is orphaned"))
1916+ if ((eX != ak))
18221917 then throw((j + " is not yours"))
18231918 else {
1824- let gv = bq(fD)
1825- let gw = getString(gv)
1826- if (isDefined(gw))
1827- then throw(("Name already registered: " + fD))
1919+ let gO = bH(fN)
1920+ let gP = getString(gO)
1921+ if (isDefined(gP))
1922+ then throw(("Name already registered: " + fN))
18281923 else {
1829- let gA = aw(ak)
1830- let gy = getString(gA)
1831- let gz = if (isDefined(gy))
1832- then [DeleteEntry(bq(value(gy)))]
1924+ let gT = ay(am)
1925+ let gR = getString(gT)
1926+ let gS = if (isDefined(gR))
1927+ then [DeleteEntry(bH(value(gR)))]
18331928 else nil
1834- ((gz :+ StringEntry(gA, fD)) :+ StringEntry(gv, ak))
1929+ ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am))
18351930 }
18361931 }
18371932 }
18381933 }
18391934 else throw("Unknown entity type")
18401935 }
1841- $Tuple2(((gu :+ ScriptTransfer(af, fU.amount, b)) :+ fT), 0)
1936+ $Tuple2(((gN :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), 0)
18421937 }
18431938 }
18441939 }
18451940
18461941
18471942
1848-@Callable(cf)
1849-func setReferrals (gB,gC) = if ((cf.callerPublicKey != aT))
1943+@Callable(cp)
1944+func setReferrals (gU,gV) = if ((cp.callerPublicKey != bk))
18501945 then throw("Permission denied")
18511946 else {
1852- let fT = fQ(cf)
1853- if ((size(cf.payments) != 0))
1947+ let gd = ga(cp)
1948+ if ((size(cp.payments) != 0))
18541949 then throw("No payments required")
1855- else if (!(isDefined(addressFromString(gB))))
1856- then throw(("Invalid address: " + gB))
1857- else if (!(isDefined(addressFromString(gC))))
1858- then throw(("Invalid address: " + gC))
1950+ else if (!(isDefined(addressFromString(gU))))
1951+ then throw(("Invalid address: " + gU))
1952+ else if (!(isDefined(addressFromString(gV))))
1953+ then throw(("Invalid address: " + gV))
18591954 else {
1860- let gD = bs()
1861- let gE = getString(gD)
1862- let gF = if (isDefined(gE))
1863- then split_4C(value(gE), "_")
1955+ let gW = bJ()
1956+ let gX = getString(gW)
1957+ let gY = if (isDefined(gX))
1958+ then split_4C(value(gX), "_")
18641959 else nil
1865- if (containsElement(gF, gC))
1866- then throw((gC + " is not newbie (already has referrals)"))
1960+ if (containsElement(gY, gV))
1961+ then throw((gV + " is not newbie (already has referrals)"))
18671962 else {
1868- let gG = ay(gC)
1869- let gH = getString(gG)
1870- if (if (isDefined(gH))
1871- then isDefined(addressFromString(value(gH)))
1963+ let gZ = aA(gV)
1964+ let ha = getString(gZ)
1965+ if (if (isDefined(ha))
1966+ then isDefined(addressFromString(value(ha)))
18721967 else false)
1873- then throw(((gC + " already has refBy: ") + value(gH)))
1968+ then throw(((gV + " already has refBy: ") + value(ha)))
18741969 else {
1875- let gI = az(gB)
1876- let gJ = getString(gI)
1877- let gK = if (isDefined(gJ))
1878- then split_4C(value(gJ), "_")
1970+ let hb = aB(gU)
1971+ let hc = getString(hb)
1972+ let hd = if (isDefined(hc))
1973+ then split_4C(value(hc), "_")
18791974 else nil
1880- if (containsElement(gK, gC))
1881- then throw((((gB + " already contains ") + gC) + " within referrals"))
1975+ if (containsElement(hd, gV))
1976+ then throw((((gU + " already contains ") + gV) + " within referrals"))
18821977 else {
1883- let gL = makeString_2C((gK :+ gC), "_")
1884- let gM = makeString_2C((gF :+ gB), "_")
1885- $Tuple2([StringEntry(gG, gB), StringEntry(gI, gL), StringEntry(gD, gM), fT], 0)
1978+ let he = makeString_2C((hd :+ gV), "_")
1979+ let hf = makeString_2C((gY :+ gU), "_")
1980+ $Tuple2([StringEntry(gZ, gU), StringEntry(hb, he), StringEntry(gW, hf), gd], 0)
18861981 }
18871982 }
18881983 }
18911986
18921987
18931988
1894-@Callable(cf)
1895-func splitByGlobalWeightsREADONLY (dy) = $Tuple2(nil, bP(dy))
1896-
1897-
1898-
1899-@Callable(cf)
1900-func splitByGlobalAndLocalWeightsREADONLY (gN,gO,ci) = {
1901- let cb = ch(ci)
1902- $Tuple2(nil, $Tuple2(bP(gN), bA(gO, cb)))
1903- }
1904-
1905-
1906-
1907-@Callable(cf)
1908-func getBackpackREADONLY (aD) = $Tuple2(nil, makeString(cN(aC(aD)), ":"))
1909-
1910-
1911-
1912-@Callable(cf)
1913-func getWarehouseREADONLY (au) = {
1914- let eK = value(assetInfo(fromBase58String(au)))
1915- let dk = (aP(split(eK.description, "_")[A]) / m)
1916- let dl = valueOrElse(getInteger(an(au)), 0)
1917- $Tuple2(nil, makeString_2C(di(at(au), dk, dl), ":"))
1989+@Callable(cp)
1990+func splitByGlobalWeightsREADONLY (dI) = $Tuple2(nil, bZ(dI))
1991+
1992+
1993+
1994+@Callable(cp)
1995+func splitByGlobalAndLocalWeightsREADONLY (hg,hh,cs) = {
1996+ let cl = cr(cs)
1997+ $Tuple2(nil, $Tuple2(bZ(hg), bR(hh, cl)))
1998+ }
1999+
2000+
2001+
2002+@Callable(cp)
2003+func getBackpackREADONLY (aF) = $Tuple2(nil, makeString(cX(aE(aF)), ":"))
2004+
2005+
2006+
2007+@Callable(cp)
2008+func getWarehouseREADONLY (aw) = {
2009+ let eU = value(assetInfo(fromBase58String(aw)))
2010+ let du = (aU(split(eU.description, "_")[C]) / m)
2011+ let dv = valueOrElse(getInteger(ap(aw)), 0)
2012+ $Tuple2(nil, makeString_2C(ds(av(aw), du, dv), ":"))
19182013 }
19192014
19202015
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = take(drop(this.bytes, 1), 1)
55
66 let b = {
77 let c = a
88 if ((base58'2W' == c))
99 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1010 else if ((base58'2T' == c))
1111 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if ((base58'2W' == c))
1818 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
1919 else if ((base58'2T' == c))
2020 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if ((base58'2W' == c))
2727 then 10000000000
2828 else if ((base58'2T' == c))
2929 then 100000000
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = "__"
3434
3535 let g = 1000000
3636
3737 let h = 100000000
3838
3939 let i = "LAND"
4040
4141 let j = "DUCK"
4242
4343 let k = "PRESALE"
4444
4545 let l = 6
4646
4747 let m = 25
4848
4949 let n = 100
5050
5151 let o = 225
5252
5353 let p = 400
5454
5555 let q = 625
5656
5757 let r = 3456000
5858
5959 let s = 86400000
6060
6161 let t = 10000000000
6262
6363 let u = "Africa_F_Africa"
6464
65-let v = ["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"]
66-
67-let w = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
68-
69-let x = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
70-
71-let y = 7
72-
73-let z = 0
74-
75-let A = 1
76-
77-let B = 2
78-
79-let C = 3
80-
81-let D = 0
82-
83-let E = 1
84-
85-let F = 2
86-
87-let G = 3
88-
89-let H = 4
90-
91-let I = 0
92-
93-let J = 1
94-
95-let K = 2
96-
97-let L = 3
98-
99-let M = 0
100-
101-let N = 1
102-
103-let O = 2
104-
105-let P = 3
106-
107-func Q (R) = parseIntValue(split(x[R], "_")[y])
108-
109-
110-func S (T,U) = valueOrErrorMessage(getString(T, U), makeString(["mandatory ", toString(T), ".", U, " is not defined"], ""))
111-
112-
113-let V = 2
114-
115-let W = 3
116-
117-func X () = "%s__restConfig"
118-
119-
120-func Y () = "%s__restAddr"
121-
122-
123-func Z (aa) = split_4C(S(aa, X()), f)
124-
125-
126-func ab (ac,ad) = valueOrErrorMessage(addressFromString(ac[ad]), ("Rest cfg doesn't contain address at index " + toString(ad)))
127-
128-
129-let ae = addressFromStringValue(valueOrElse(getString(this, Y()), d))
130-
131-let ac = Z(ae)
132-
133-let af = ab(ac, V)
134-
135-let ag = ab(ac, W)
136-
137-func ah (ai) = ("lastTxIdByUser_" + ai)
138-
139-
140-func aj (ak) = ("nftOwner_" + ak)
141-
142-
143-func al (ak) = ("landCustomNameByAssetId_" + ak)
144-
145-
146-func am (ak) = ("stakedTime_" + ak)
147-
148-
149-func an (ak) = ("infraLevel_" + ak)
150-
151-
152-func ao (ap,ak) = makeString(["landArtStatus", ap, ak], "_")
153-
154-
155-func aq (ar,ak,as) = ((((("stakedTimeByTypeAssetIdAndOwner_" + ar) + "_") + ak) + "_") + as)
156-
157-
158-func at (au) = ("wareHouse_" + au)
159-
160-
161-func av (as) = ("stakedLandsByOwner_" + as)
162-
163-
164-func aw (ak) = ("duckCustomNameByAssetId_" + ak)
165-
166-
167-func ax (ai) = ("accountCustomNameByAddr_" + ai)
168-
169-
170-func ay (ai) = ("accRefBy_" + ai)
171-
172-
173-func az (ai) = ("accReferrals_" + ai)
174-
175-
176-func aA (ak) = ("duckOwner_" + ak)
177-
178-
179-func aB (as) = ("stakedDuckByOwner_" + as)
180-
181-
182-func aC (aD) = ("backPack_" + aD)
183-
184-
185-func aE (aD) = ("duckLocation_" + aD)
186-
187-
188-func aF (aD) = ("duckHealth_" + aD)
189-
190-
191-func aG () = "resTypesProportions"
192-
193-
194-func aH () = "contractsBlocked"
195-
196-
197-func aI (aJ) = ("%s%s__userGwlReleaseTime__" + aJ)
198-
199-
200-let aK = 1
201-
202-let aL = 2
203-
204-func aM (aN) = {
205- let c = aN
65+let v = 39637
66+
67+let w = 10
68+
69+let x = ["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"]
70+
71+let y = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
72+
73+let z = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
74+
75+let A = 7
76+
77+let B = 0
78+
79+let C = 1
80+
81+let D = 2
82+
83+let E = 3
84+
85+let F = 0
86+
87+let G = 1
88+
89+let H = 2
90+
91+let I = 3
92+
93+let J = 4
94+
95+let K = 0
96+
97+let L = 1
98+
99+let M = 2
100+
101+let N = 3
102+
103+let O = 0
104+
105+let P = 1
106+
107+let Q = 2
108+
109+let R = 3
110+
111+func S (T) = parseIntValue(split(z[T], "_")[A])
112+
113+
114+func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], ""))
115+
116+
117+let X = 2
118+
119+let Y = 3
120+
121+func Z () = "%s__restConfig"
122+
123+
124+func aa () = "%s__restAddr"
125+
126+
127+func ab (ac) = split_4C(U(ac, Z()), f)
128+
129+
130+func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af)))
131+
132+
133+let ag = addressFromStringValue(valueOrElse(getString(this, aa()), d))
134+
135+let ae = ab(ag)
136+
137+let ah = ad(ae, X)
138+
139+let ai = ad(ae, Y)
140+
141+func aj (ak) = ("lastTxIdByUser_" + ak)
142+
143+
144+func al (am) = ("nftOwner_" + am)
145+
146+
147+func an (am) = ("landCustomNameByAssetId_" + am)
148+
149+
150+func ao (am) = ("stakedTime_" + am)
151+
152+
153+func ap (am) = ("infraLevel_" + am)
154+
155+
156+func aq (ar,am) = makeString(["landArtStatus", ar, am], "_")
157+
158+
159+func as (at,am,au) = ((((("stakedTimeByTypeAssetIdAndOwner_" + at) + "_") + am) + "_") + au)
160+
161+
162+func av (aw) = ("wareHouse_" + aw)
163+
164+
165+func ax (au) = ("stakedLandsByOwner_" + au)
166+
167+
168+func ay (am) = ("duckCustomNameByAssetId_" + am)
169+
170+
171+func az (ak) = ("accountCustomNameByAddr_" + ak)
172+
173+
174+func aA (ak) = ("accRefBy_" + ak)
175+
176+
177+func aB (ak) = ("accReferrals_" + ak)
178+
179+
180+func aC (am) = ("duckOwner_" + am)
181+
182+
183+func aD (au) = ("stakedDuckByOwner_" + au)
184+
185+
186+func aE (aF) = ("backPack_" + aF)
187+
188+
189+func aG (aF) = ("duckLocation_" + aF)
190+
191+
192+func aH (aF) = ("duckHealth_" + aF)
193+
194+
195+func aI () = "resTypesProportions"
196+
197+
198+func aJ () = "contractsBlocked"
199+
200+
201+func aK (aL) = ("%s%s__userGwlReleaseTime__" + aL)
202+
203+
204+func aM () = "emergencyWarehouseProducts"
205+
206+
207+let aN = 1
208+
209+let aO = 2
210+
211+func aP (aQ) = {
212+ let c = aQ
213+ if ($isInstanceOf(c, "String"))
214+ then {
215+ let aR = c
216+ aR
217+ }
218+ else throw("fail to cast into String")
219+ }
220+
221+
222+func aS (aQ) = {
223+ let c = aQ
206224 if ($isInstanceOf(c, "Int"))
207225 then {
208- let aO = c
209- aO
226+ let aT = c
227+ aT
210228 }
211229 else throw("fail to cast into Int")
212230 }
213231
214232
215-func aP (aQ) = {
216- let c = aQ
233+func aU (aV) = {
234+ let c = aV
217235 if (("S" == c))
218236 then m
219237 else if (("M" == c))
220238 then n
221239 else if (("L" == c))
222240 then o
223241 else if (("XL" == c))
224242 then p
225243 else if (("XXL" == c))
226244 then q
227245 else throw("Unknown land size")
228246 }
229247
230248
231-let aR = {
249+func aW (aX) = {
250+ func aY (aZ,ba) = (aZ + parseIntValue(aX[ba]))
251+
252+ let bb = [0, 1, 2, 3, 4, 5]
253+ let bc = size(bb)
254+ let bd = 0
255+ func be (bf,bg) = if ((bg >= bc))
256+ then bf
257+ else aY(bf, bb[bg])
258+
259+ func bh (bf,bg) = if ((bg >= bc))
260+ then bf
261+ else throw("List size exceeds 6")
262+
263+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
264+ }
265+
266+
267+let bi = {
232268 let c = a
233269 if ((base58'2W' == c))
234270 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
235271 else if ((base58'2T' == c))
236272 then this
237273 else throw("Unknown chain")
238274 }
239275
240-let aS = {
276+let bj = {
241277 let c = a
242278 if ((base58'2W' == c))
243279 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
244280 else if ((base58'2T' == c))
245281 then this
246282 else throw("Unknown chain")
247283 }
248284
249-let aT = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
250-
251-let aU = [30, 60, 120]
252-
253-let aV = 300000
254-
255-let aW = 5000000
256-
257-let aX = 50
258-
259-let aY = 10000000
260-
261-let aZ = {
285+let bk = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
286+
287+let bl = [30, 60, 120]
288+
289+let bm = 300000
290+
291+let bn = 5000000
292+
293+let bo = 50
294+
295+let bp = 10000000
296+
297+let bq = {
262298 let c = a
263299 if ((base58'2W' == c))
264300 then 252289527462
265301 else if ((base58'2T' == c))
266302 then 2522895274
267303 else throw("Unknown chain")
268304 }
269305
270-let ba = {
306+let br = {
271307 let c = a
272308 if ((base58'2W' == c))
273309 then 250000000
274310 else if ((base58'2T' == c))
275311 then 250000000
276312 else throw("Unknown chain")
277313 }
278314
279-let bb = toBigInt(5)
280-
281-let bc = toBigInt(20)
282-
283-let bd = toBigInt((20 * 20))
284-
285-let be = toBigInt(((20 * 20) * 20))
286-
287-let bf = toBigInt((((20 * 20) * 20) * 20))
288-
289-let bg = toBigInt(((((20 * 20) * 20) * 20) * 20))
290-
291-let bh = 500
292-
293-func bi () = "nextLandNum"
294-
295-
296-func bj (bk) = ("landToAsset_" + bk)
297-
298-
299-func bl (bm) = ("landByCustomName_" + bm)
300-
301-
302-func bn (ak,as) = ((("infraLevelByAssetIdAndOwner_" + ak) + "_") + as)
303-
304-
305-func bo (ap,ak,as) = makeString(["landArtStatusByTypeAssetIdAndOwner", ap, ak, as], "_")
306-
307-
308-func bp (bk) = ("landOwner_" + bk)
309-
310-
311-func bq (bm) = ("duckByCustomName_" + bm)
312-
313-
314-func br (bm) = ("accountByCustomName_" + bm)
315-
316-
317-func bs () = "oldiesList"
318-
319-
320-let bt = 0
321-
322-let bu = 1
323-
324-let bv = 2
325-
326-let bw = 0
327-
328-let bx = 5
329-
330-let by = 6
331-
332-func bz (bk,aQ) = ((i + bk) + aQ)
333-
334-
335-func bA (bB,bC) = {
336- let bD = (((((bC[0] + bC[1]) + bC[2]) + bC[3]) + bC[4]) + bC[5])
337- if ((0 >= bD))
315+let bs = toBigInt(5)
316+
317+let bt = toBigInt(20)
318+
319+let bu = toBigInt((20 * 20))
320+
321+let bv = toBigInt(((20 * 20) * 20))
322+
323+let bw = toBigInt((((20 * 20) * 20) * 20))
324+
325+let bx = toBigInt(((((20 * 20) * 20) * 20) * 20))
326+
327+let by = 500
328+
329+func bz () = "nextLandNum"
330+
331+
332+func bA (bB) = ("landToAsset_" + bB)
333+
334+
335+func bC (bD) = ("landByCustomName_" + bD)
336+
337+
338+func bE (am,au) = ((("infraLevelByAssetIdAndOwner_" + am) + "_") + au)
339+
340+
341+func bF (ar,am,au) = makeString(["landArtStatusByTypeAssetIdAndOwner", ar, am, au], "_")
342+
343+
344+func bG (bB) = ("landOwner_" + bB)
345+
346+
347+func bH (bD) = ("duckByCustomName_" + bD)
348+
349+
350+func bI (bD) = ("accountByCustomName_" + bD)
351+
352+
353+func bJ () = "oldiesList"
354+
355+
356+let bK = 0
357+
358+let bL = 1
359+
360+let bM = 2
361+
362+let bN = 0
363+
364+let bO = 5
365+
366+let bP = 6
367+
368+func bQ (bB,aV) = ((i + bB) + aV)
369+
370+
371+func bR (bS,bT) = {
372+ let bU = (((((bT[0] + bT[1]) + bT[2]) + bT[3]) + bT[4]) + bT[5])
373+ if ((0 >= bU))
338374 then throw("Zero weights sum")
339375 else {
340- let bE = fraction(bB, g, bD)
341- func bF (bG,bH) = (bG :+ fraction(bH, bE, g))
342-
343- let bI = bC
344- let bJ = size(bI)
345- let bK = nil
346- func bL (bM,bN) = if ((bN >= bJ))
347- then bM
348- else bF(bM, bI[bN])
349-
350- func bO (bM,bN) = if ((bN >= bJ))
351- then bM
376+ let bV = fraction(bS, g, bU)
377+ func bW (bX,bY) = (bX :+ fraction(bY, bV, g))
378+
379+ let bb = bT
380+ let bc = size(bb)
381+ let bd = nil
382+ func be (bf,bg) = if ((bg >= bc))
383+ then bf
384+ else bW(bf, bb[bg])
385+
386+ func bh (bf,bg) = if ((bg >= bc))
387+ then bf
352388 else throw("List size exceeds 6")
353389
354- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
355- }
356- }
357-
358-
359-func bP (bB) = {
360- let bQ = split(value(getString(aG())), "_")
361- if ((size(bQ) != l))
390+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
391+ }
392+ }
393+
394+
395+func bZ (bS) = {
396+ let ca = split(value(getString(aI())), "_")
397+ if ((size(ca) != l))
362398 then throw("Wrong proportions data")
363399 else {
364- let bR = [parseIntValue(bQ[0]), parseIntValue(bQ[1]), parseIntValue(bQ[2]), parseIntValue(bQ[3]), parseIntValue(bQ[4]), parseIntValue(bQ[5])]
365- bA(bB, bR)
366- }
367- }
368-
369-
370-func bS (bT,bU,bV) = {
371- let bW = bP(bV)
372- func bX (bG,ad) = {
373- let bY = (parseIntValue(bU[ad]) - bW[ad])
374- if ((0 > bY))
375- then throw(((((("Not enough material idx=" + toString(ad)) + ", you have ") + bU[ad]) + ", but need ") + toString(bW[ad])))
376- else (bG :+ toString(bY))
400+ let cb = [parseIntValue(ca[0]), parseIntValue(ca[1]), parseIntValue(ca[2]), parseIntValue(ca[3]), parseIntValue(ca[4]), parseIntValue(ca[5])]
401+ bR(bS, cb)
402+ }
403+ }
404+
405+
406+func cc (cd,ce,cf) = {
407+ let cg = bZ(cf)
408+ func ch (bX,af) = {
409+ let ci = (parseIntValue(ce[af]) - cg[af])
410+ if ((0 > ci))
411+ then throw(((((("Not enough material idx=" + toString(af)) + ", you have ") + ce[af]) + ", but need ") + toString(cg[af])))
412+ else (bX :+ toString(ci))
377413 }
378414
379- if (bT)
415+ if (cd)
380416 then {
381- let bI = [0, 1, 2, 3, 4, 5]
382- let bJ = size(bI)
383- let bK = nil
384- func bL (bM,bN) = if ((bN >= bJ))
385- then bM
386- else bX(bM, bI[bN])
387-
388- func bO (bM,bN) = if ((bN >= bJ))
389- then bM
417+ let bb = [0, 1, 2, 3, 4, 5]
418+ let bc = size(bb)
419+ let bd = nil
420+ func be (bf,bg) = if ((bg >= bc))
421+ then bf
422+ else ch(bf, bb[bg])
423+
424+ func bh (bf,bg) = if ((bg >= bc))
425+ then bf
390426 else throw("List size exceeds 6")
391427
392- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
393- }
394- else bU
395- }
396-
397-
398-func bZ (ca,cb,cc,cd) = if ((size(ca) != l))
428+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
429+ }
430+ else ce
431+ }
432+
433+
434+func cj (ck,cl,cm,cn) = if ((size(ck) != l))
399435 then throw("Wrong proportions data")
400436 else {
401- func ce (bG,cf) = {
402- let bY = (parseIntValue(ca[cf]) + ((cd * cb[cf]) * cc))
403- if ((0 > bY))
404- then throw(((((((("Panic! Pieces of type=" + toString(cf)) + ", sign=") + toString(cd)) + ", terrainCounts[i]=") + toString(cb[cf])) + ", landSizeIndex=") + toString(cc)))
405- else (bG :+ toString(bY))
406- }
407-
408- let bR = {
409- let bI = [0, 1, 2, 3, 4, 5]
410- let bJ = size(bI)
411- let bK = nil
412- func bL (bM,bN) = if ((bN >= bJ))
413- then bM
414- else ce(bM, bI[bN])
415-
416- func bO (bM,bN) = if ((bN >= bJ))
417- then bM
437+ func co (bX,cp) = {
438+ let ci = (parseIntValue(ck[cp]) + ((cn * cl[cp]) * cm))
439+ if ((0 > ci))
440+ then throw(((((((("Panic! Pieces of type=" + toString(cp)) + ", sign=") + toString(cn)) + ", terrainCounts[i]=") + toString(cl[cp])) + ", landSizeIndex=") + toString(cm)))
441+ else (bX :+ toString(ci))
442+ }
443+
444+ let cb = {
445+ let bb = [0, 1, 2, 3, 4, 5]
446+ let bc = size(bb)
447+ let bd = nil
448+ func be (bf,bg) = if ((bg >= bc))
449+ then bf
450+ else co(bf, bb[bg])
451+
452+ func bh (bf,bg) = if ((bg >= bc))
453+ then bf
418454 else throw("List size exceeds 6")
419455
420- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
421- }
422- makeString(bR, "_")
456+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
457+ }
458+ makeString(cb, "_")
423459 }
424460
425461
426-func cg (cb,cc,cd) = {
427- let ca = split(valueOrElse(getString(aG()), "0_0_0_0_0_0"), "_")
428- bZ(ca, cb, cc, cd)
429- }
430-
431-
432-func ch (ci) = [(size(split(ci, "A")) - 1), (size(split(ci, "B")) - 1), (size(split(ci, "C")) - 1), (size(split(ci, "D")) - 1), (size(split(ci, "E")) - 1), (size(split(ci, "F")) - 1)]
433-
434-
435-func cj (ck,cb,cl,cc,cm) = {
436- func cn (bG,cf) = {
437- let co = ((fraction(cl, cm, s) * cb[cf]) * cc)
438- (bG :+ toString((parseIntValue(ck[cf]) + co)))
462+func cq (cl,cm,cn) = {
463+ let ck = split(valueOrElse(getString(aI()), "0_0_0_0_0_0"), "_")
464+ cj(ck, cl, cm, cn)
465+ }
466+
467+
468+func cr (cs) = [(size(split(cs, "A")) - 1), (size(split(cs, "B")) - 1), (size(split(cs, "C")) - 1), (size(split(cs, "D")) - 1), (size(split(cs, "E")) - 1), (size(split(cs, "F")) - 1)]
469+
470+
471+func ct (cu,cl,cv,cm,cw) = {
472+ func cx (bX,cp) = {
473+ let cy = ((fraction(cv, cw, s) * cl[cp]) * cm)
474+ (bX :+ toString((parseIntValue(cu[cp]) + cy)))
439475 }
440476
441- let bR = {
442- let bI = [0, 1, 2, 3, 4, 5]
443- let bJ = size(bI)
444- let bK = nil
445- func bL (bM,bN) = if ((bN >= bJ))
446- then bM
447- else cn(bM, bI[bN])
448-
449- func bO (bM,bN) = if ((bN >= bJ))
450- then bM
477+ let cb = {
478+ let bb = [0, 1, 2, 3, 4, 5]
479+ let bc = size(bb)
480+ let bd = nil
481+ func be (bf,bg) = if ((bg >= bc))
482+ then bf
483+ else cx(bf, bb[bg])
484+
485+ func bh (bf,bg) = if ((bg >= bc))
486+ then bf
451487 else throw("List size exceeds 6")
452488
453- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
489+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
454490 }
455- makeString(bR, "_")
456- }
457-
458-
459-func cp (cb,cl,cc,cm) = {
460- func cn (bG,cf) = {
461- let co = ((fraction(cl, cm, s) * cb[cf]) * cc)
462- $Tuple2((bG._1 :+ co), (bG._2 + co))
491+ makeString(cb, "_")
492+ }
493+
494+
495+func cz (cl,cv,cm,cw) = {
496+ func cx (bX,cp) = {
497+ let cy = ((fraction(cv, cw, s) * cl[cp]) * cm)
498+ $Tuple2((bX._1 :+ cy), (bX._2 + cy))
463499 }
464500
465- let bI = [0, 1, 2, 3, 4, 5]
466- let bJ = size(bI)
467- let bK = $Tuple2(nil, 0)
468- func bL (bM,bN) = if ((bN >= bJ))
469- then bM
470- else cn(bM, bI[bN])
471-
472- func bO (bM,bN) = if ((bN >= bJ))
473- then bM
501+ let bb = [0, 1, 2, 3, 4, 5]
502+ let bc = size(bb)
503+ let bd = $Tuple2(nil, 0)
504+ func be (bf,bg) = if ((bg >= bc))
505+ then bf
506+ else cx(bf, bb[bg])
507+
508+ func bh (bf,bg) = if ((bg >= bc))
509+ then bf
474510 else throw("List size exceeds 6")
475511
476- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
477- }
478-
479-
480-func cq (cr,cs,ct,cu) = {
481- let cv = ct._1
482- let cw = ct._2
483- if ((cw == 0))
484- then $Tuple2(makeString(cr, "_"), makeString(cs, "_"))
485- else if ((cu >= cw))
512+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
513+ }
514+
515+
516+func cA (cB,cC,cD,cE) = {
517+ let cF = cD._1
518+ let cG = cD._2
519+ if ((cG == 0))
520+ then $Tuple2(makeString(cB, "_"), makeString(cC, "_"))
521+ else if ((cE >= cG))
486522 then {
487- func cx (bG,cf) = (bG :+ toString((parseIntValue(cr[cf]) + cv[cf])))
488-
489- let bR = {
490- let bI = [0, 1, 2, 3, 4, 5]
491- let bJ = size(bI)
492- let bK = nil
493- func bL (bM,bN) = if ((bN >= bJ))
494- then bM
495- else cx(bM, bI[bN])
496-
497- func bO (bM,bN) = if ((bN >= bJ))
498- then bM
523+ func cH (bX,cp) = (bX :+ toString((parseIntValue(cB[cp]) + cF[cp])))
524+
525+ let cb = {
526+ let bb = [0, 1, 2, 3, 4, 5]
527+ let bc = size(bb)
528+ let bd = nil
529+ func be (bf,bg) = if ((bg >= bc))
530+ then bf
531+ else cH(bf, bb[bg])
532+
533+ func bh (bf,bg) = if ((bg >= bc))
534+ then bf
499535 else throw("List size exceeds 6")
500536
501- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
537+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
502538 }
503- $Tuple2(makeString(bR, "_"), makeString(cs, "_"))
539+ $Tuple2(makeString(cb, "_"), makeString(cC, "_"))
504540 }
505541 else {
506- func cy (bG,cf) = {
507- let cz = fraction(cv[cf], cu, cw)
508- $Tuple2((bG._1 :+ toString((parseIntValue(cr[cf]) + cz))), (bG._2 :+ toString(((parseIntValue(cs[cf]) + cv[cf]) - cz))))
542+ func cI (bX,cp) = {
543+ let cJ = fraction(cF[cp], cE, cG)
544+ $Tuple2((bX._1 :+ toString((parseIntValue(cB[cp]) + cJ))), (bX._2 :+ toString(((parseIntValue(cC[cp]) + cF[cp]) - cJ))))
509545 }
510546
511- let bR = {
512- let bI = [0, 1, 2, 3, 4, 5]
513- let bJ = size(bI)
514- let bK = $Tuple2(nil, nil)
515- func bL (bM,bN) = if ((bN >= bJ))
516- then bM
517- else cy(bM, bI[bN])
518-
519- func bO (bM,bN) = if ((bN >= bJ))
520- then bM
547+ let cb = {
548+ let bb = [0, 1, 2, 3, 4, 5]
549+ let bc = size(bb)
550+ let bd = $Tuple2(nil, nil)
551+ func be (bf,bg) = if ((bg >= bc))
552+ then bf
553+ else cI(bf, bb[bg])
554+
555+ func bh (bf,bg) = if ((bg >= bc))
556+ then bf
521557 else throw("List size exceeds 6")
522558
523- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
559+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
524560 }
525- $Tuple2(makeString(bR._1, "_"), makeString(bR._2, "_"))
561+ $Tuple2(makeString(cb._1, "_"), makeString(cb._2, "_"))
526562 }
527563 }
528564
529565
530-func cA (cB) = if ((cB >= toBigInt(0)))
531- then cB
532- else -(cB)
533-
534-
535-let cC = [[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]]
536-
537-func cD (aO,cE) = {
538- let cF = toInt((aO % bc))
539- let cG = if ((cE[0] > cF))
566+func cK (cL) = if ((cL >= toBigInt(0)))
567+ then cL
568+ else -(cL)
569+
570+
571+let cM = [[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]]
572+
573+func cN (aT,cO) = {
574+ let cP = toInt((aT % bt))
575+ let cQ = if ((cO[0] > cP))
540576 then "A"
541- else if ((cE[1] > cF))
577+ else if ((cO[1] > cP))
542578 then "B"
543- else if ((cE[2] > cF))
579+ else if ((cO[2] > cP))
544580 then "C"
545- else if ((cE[3] > cF))
581+ else if ((cO[3] > cP))
546582 then "D"
547- else if ((cE[4] > cF))
583+ else if ((cO[4] > cP))
548584 then "E"
549585 else "F"
550- cG
551- }
552-
553-
554-func cH (cI,cJ) = {
555- let cK = cC[cJ]
556- func cL (bG,bH) = $Tuple2((((((bG._1 + cD(bG._2, cK)) + cD((bG._2 / bc), cK)) + cD((bG._2 / bd), cK)) + cD((bG._2 / be), cK)) + cD((bG._2 / bf), cK)), (bG._2 / bg))
557-
558- let cM = {
559- let bI = [1, 2, 3, 4, 5]
560- let bJ = size(bI)
561- let bK = $Tuple2("", (cI / bb))
562- func bL (bM,bN) = if ((bN >= bJ))
563- then bM
564- else cL(bM, bI[bN])
565-
566- func bO (bM,bN) = if ((bN >= bJ))
567- then bM
586+ cQ
587+ }
588+
589+
590+func cR (cS,cT) = {
591+ let cU = cM[cT]
592+ func cV (bX,bY) = $Tuple2((((((bX._1 + cN(bX._2, cU)) + cN((bX._2 / bt), cU)) + cN((bX._2 / bu), cU)) + cN((bX._2 / bv), cU)) + cN((bX._2 / bw), cU)), (bX._2 / bx))
593+
594+ let cW = {
595+ let bb = [1, 2, 3, 4, 5]
596+ let bc = size(bb)
597+ let bd = $Tuple2("", (cS / bs))
598+ func be (bf,bg) = if ((bg >= bc))
599+ then bf
600+ else cV(bf, bb[bg])
601+
602+ func bh (bf,bg) = if ((bg >= bc))
603+ then bf
568604 else throw("List size exceeds 5")
569605
570- bO(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5)
606+ bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5)
571607 }
572- cM._1
573- }
574-
575-
576-func cN (cO) = {
577- let cP = split(valueOrElse(getString(cO), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
578-[toString(valueOrElse(parseInt(cP[M]), 0)), if ((size(split(cP[N], "_")) == l))
579- then cP[N]
580- else "0_0_0_0_0_0", if ((size(split(cP[O], "_")) == l))
581- then cP[O]
582- else "0_0_0_0_0_0", cP[P]]
583- }
584-
585-
586-func cQ (cR) = {
587- let cS = split(cR, "_")
588- ((t * (parseIntValue(cS[1]) + 1)) * parseIntValue(cS[0]))
589- }
590-
591-
592-func cT (cU) = {
593- let cV = cU[G]
594- func cW (bG,cX) = (bG + parseIntValue(cX))
595-
596- func cY (bG,cX) = {
597- let ad = bG._1
598- let cZ = Q(ad)
599- let da = (((parseIntValue(cX) + cZ) - 1) / cZ)
600- $Tuple2((ad + 1), (bG._2 + (da * h)))
608+ cW._1
609+ }
610+
611+
612+func cX (cY) = {
613+ let cZ = split(valueOrElse(getString(cY), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
614+[toString(valueOrElse(parseInt(cZ[O]), 0)), if ((size(split(cZ[P], "_")) == l))
615+ then cZ[P]
616+ else "0_0_0_0_0_0", if ((size(split(cZ[Q], "_")) == l))
617+ then cZ[Q]
618+ else "0_0_0_0_0_0", cZ[R]]
619+ }
620+
621+
622+func da (db) = {
623+ let dc = split(db, "_")
624+ ((t * (parseIntValue(dc[1]) + 1)) * parseIntValue(dc[0]))
625+ }
626+
627+
628+func dd (de) = {
629+ let df = de[I]
630+ func dg (bX,dh) = (bX + parseIntValue(dh))
631+
632+ func di (bX,dh) = {
633+ let af = bX._1
634+ let dj = S(af)
635+ let dk = (((parseIntValue(dh) + dj) - 1) / dj)
636+ $Tuple2((af + 1), (bX._2 + (dk * h)))
601637 }
602638
603- let db = {
604- let bI = split(cU[E], "_")
605- let bJ = size(bI)
606- let bK = 0
607- func bL (bM,bN) = if ((bN >= bJ))
608- then bM
609- else cW(bM, bI[bN])
610-
611- func bO (bM,bN) = if ((bN >= bJ))
612- then bM
639+ let dl = {
640+ let bb = split(de[G], "_")
641+ let bc = size(bb)
642+ let bd = 0
643+ func be (bf,bg) = if ((bg >= bc))
644+ then bf
645+ else dg(bf, bb[bg])
646+
647+ func bh (bf,bg) = if ((bg >= bc))
648+ then bf
613649 else throw("List size exceeds 6")
614650
615- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
651+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
616652 }
617- let dc = {
618- let bI = split(cU[F], "_")
619- let bJ = size(bI)
620- let bK = 0
621- func dd (bM,bN) = if ((bN >= bJ))
622- then bM
623- else cW(bM, bI[bN])
624-
625- func de (bM,bN) = if ((bN >= bJ))
626- then bM
653+ let dm = {
654+ let bb = split(de[H], "_")
655+ let bc = size(bb)
656+ let bd = 0
657+ func dn (bf,bg) = if ((bg >= bc))
658+ then bf
659+ else dg(bf, bb[bg])
660+
661+ func do (bf,bg) = if ((bg >= bc))
662+ then bf
627663 else throw("List size exceeds 6")
628664
629- de(dd(dd(dd(dd(dd(dd(bK, 0), 1), 2), 3), 4), 5), 6)
665+ do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6)
630666 }
631- let df = if ((cV == ""))
667+ let dp = if ((df == ""))
632668 then 0
633- else ( let bI = split_4C(cV, "_")
634- let bJ = size(bI)
635- let bK = $Tuple2(0, 0)
636- func dg (bM,bN) = if ((bN >= bJ))
637- then bM
638- else cY(bM, bI[bN])
639-
640- func dh (bM,bN) = if ((bN >= bJ))
641- then bM
669+ else ( let bb = split_4C(df, "_")
670+ let bc = size(bb)
671+ let bd = $Tuple2(0, 0)
672+ func dq (bf,bg) = if ((bg >= bc))
673+ then bf
674+ else di(bf, bb[bg])
675+
676+ func dr (bf,bg) = if ((bg >= bc))
677+ then bf
642678 else throw("List size exceeds 50")
643679
644- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(bK, 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
645- ((db + dc) + df)
646- }
647-
648-
649-func di (dj,dk,dl) = {
650- let cR = ((toString(dk) + "_") + toString(dl))
651- let dm = cQ(cR)
652- let dn = valueOrElse(getString(dj), (cR + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
653- let do = split_4C(dn, ":")
654- let dp = cT(do)
655- let dq = if ((5 > size(do)))
656- then makeString(["0", toString(dp), toString((dm - dp)), toString(dm)], "_")
657- else {
658- let dr = split(do[H], "_")
659- let ds = parseIntValue(dr[I])
660- let dt = if ((size(dr) > 1))
661- then parseIntValue(dr[J])
662- else dp
663- makeString([toString(ds), toString(dt), toString(((dm - ds) - dt)), toString(dm)], "_")
664- }
665-[do[D], if ((size(split(do[E], "_")) == l))
666- then do[E]
667- else "0_0_0_0_0_0", if ((size(split(do[F], "_")) == l))
668- then do[F]
669- else "0_0_0_0_0_0", do[G], dq]
670- }
671-
672-
673-func du (cU) = {
674- let dv = cT(cU)
675- let dw = parseIntValue(split(cU[H], "_")[I])
676- ((cQ(cU[D]) - dv) - dw)
677- }
678-
679-
680-func dx (dy,cZ) = {
681- let da = if ((dy >= 0))
682- then (((dy + cZ) - 1) / cZ)
683- else -((((-(dy) + cZ) - 1) / cZ))
684- (da * h)
685- }
686-
687-
688-func dz (dA,cU,dB) = if ((size(dA) != 3))
680+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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
681+ ((dl + dm) + dp)
682+ }
683+
684+
685+func ds (dt,du,dv) = {
686+ let db = ((toString(du) + "_") + toString(dv))
687+ let dw = da(db)
688+ let dx = valueOrElse(getString(dt), (db + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
689+ let dy = split_4C(dx, ":")
690+ let dz = dd(dy)
691+ let dA = if ((5 > size(dy)))
692+ then makeString(["0", toString(dz), toString((dw - dz)), toString(dw)], "_")
693+ else {
694+ let dB = split(dy[J], "_")
695+ let dC = parseIntValue(dB[K])
696+ let dD = if ((size(dB) > 1))
697+ then parseIntValue(dB[L])
698+ else dz
699+ makeString([toString(dC), toString(dD), toString(((dw - dC) - dD)), toString(dw)], "_")
700+ }
701+[dy[F], if ((size(split(dy[G], "_")) == l))
702+ then dy[G]
703+ else "0_0_0_0_0_0", if ((size(split(dy[H], "_")) == l))
704+ then dy[H]
705+ else "0_0_0_0_0_0", dy[I], dA]
706+ }
707+
708+
709+func dE (de) = {
710+ let dF = dd(de)
711+ let dG = parseIntValue(split(de[J], "_")[K])
712+ ((da(de[F]) - dF) - dG)
713+ }
714+
715+
716+func dH (dI,dj) = {
717+ let dk = if ((dI >= 0))
718+ then (((dI + dj) - 1) / dj)
719+ else -((((-(dI) + dj) - 1) / dj))
720+ (dk * h)
721+ }
722+
723+
724+func dJ (dK,de,dL) = if ((size(dK) != 3))
689725 then throw("cargoListStr should contain exactly 2 ':' separators")
690726 else {
691- let dC = split(dA[0], "_")
692- let dD = split(dA[1], "_")
693- let dE = if ((dA[2] == ""))
727+ let dM = split(dK[0], "_")
728+ let dN = split(dK[1], "_")
729+ let dO = if ((dK[2] == ""))
694730 then nil
695- else split(dA[2], "_")
696- if ((size(dC) != l))
731+ else split(dK[2], "_")
732+ if ((size(dM) != l))
697733 then throw("All 6 resources should be passed")
698- else if ((size(dD) != l))
734+ else if ((size(dN) != l))
699735 then throw("All 6 materials should be passed")
700736 else {
701- let cu = du(cU)
702- let dF = split(cU[E], "_")
703- let dG = split(cU[F], "_")
704- let dH = if ((cU[G] == ""))
737+ let cE = dE(de)
738+ let dP = split(de[G], "_")
739+ let dQ = split(de[H], "_")
740+ let dR = if ((de[I] == ""))
705741 then nil
706- else split(cU[G], "_")
707- let cs = split(dB[N], "_")
708- let dI = split(dB[O], "_")
709- let dJ = if ((dB[P] == ""))
742+ else split(de[I], "_")
743+ let cC = split(dL[P], "_")
744+ let dS = split(dL[Q], "_")
745+ let dT = if ((dL[R] == ""))
710746 then nil
711- else split(dB[P], "_")
712- func dK (bG,cX) = {
713- let cf = bG._1
714- let dL = parseIntValue(cX)
715- let dM = parseIntValue(dF[cf])
716- let dN = parseIntValue(cs[cf])
717- if ((dL == 0))
718- then $Tuple4((cf + 1), (bG._2 :+ dF[cf]), (bG._3 :+ cs[cf]), bG._4)
719- else if ((dL > 0))
720- then if ((dL > dN))
721- then throw((((("Attempt to take " + cX) + " from backpack, but only ") + toString(dN)) + " available"))
722- else $Tuple4((cf + 1), (bG._2 :+ toString((dM + dL))), (bG._3 :+ toString((dN - dL))), (bG._4 + dL))
723- else if ((-(dL) > dM))
724- then throw((((("Attempt to take " + toString(-(dL))) + " from warehouse, but only ") + toString(dM)) + " available"))
725- else $Tuple4((cf + 1), (bG._2 :+ toString((dM + dL))), (bG._3 :+ toString((dN - dL))), (bG._4 + dL))
747+ else split(dL[R], "_")
748+ func dU (bX,dh) = {
749+ let cp = bX._1
750+ let dV = parseIntValue(dh)
751+ let dW = parseIntValue(dP[cp])
752+ let dX = parseIntValue(cC[cp])
753+ if ((dV == 0))
754+ then $Tuple4((cp + 1), (bX._2 :+ dP[cp]), (bX._3 :+ cC[cp]), bX._4)
755+ else if ((dV > 0))
756+ then if ((dV > dX))
757+ then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(dX)) + " available"))
758+ else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV))
759+ else if ((-(dV) > dW))
760+ then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dW)) + " available"))
761+ else $Tuple4((cp + 1), (bX._2 :+ toString((dW + dV))), (bX._3 :+ toString((dX - dV))), (bX._4 + dV))
726762 }
727763
728- let bR = {
729- let bI = dC
730- let bJ = size(bI)
731- let bK = $Tuple4(0, nil, nil, 0)
732- func bL (bM,bN) = if ((bN >= bJ))
733- then bM
734- else dK(bM, bI[bN])
735-
736- func bO (bM,bN) = if ((bN >= bJ))
737- then bM
764+ let cb = {
765+ let bb = dM
766+ let bc = size(bb)
767+ let bd = $Tuple4(0, nil, nil, 0)
768+ func be (bf,bg) = if ((bg >= bc))
769+ then bf
770+ else dU(bf, bb[bg])
771+
772+ func bh (bf,bg) = if ((bg >= bc))
773+ then bf
738774 else throw("List size exceeds 6")
739775
740- bO(bL(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5), 6)
776+ bh(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6)
741777 }
742- func dO (bG,cX) = {
743- let cf = bG._1
744- let dL = parseIntValue(cX)
745- let dP = parseIntValue(dG[cf])
746- let dQ = parseIntValue(dI[cf])
747- if ((dL == 0))
748- then $Tuple4((cf + 1), (bG._2 :+ dG[cf]), (bG._3 :+ dI[cf]), bG._4)
749- else if ((dL > 0))
750- then if ((dL > dQ))
751- then throw((((("Attempt to take " + cX) + " from backpack, but only ") + toString(dQ)) + " available"))
752- else $Tuple4((cf + 1), (bG._2 :+ toString((dP + dL))), (bG._3 :+ toString((dQ - dL))), (bG._4 + dL))
753- else if ((-(dL) > dP))
754- then throw((((("Attempt to take " + toString(-(dL))) + " from warehouse, but only ") + toString(dP)) + " available"))
755- else $Tuple4((cf + 1), (bG._2 :+ toString((dP + dL))), (bG._3 :+ toString((dQ - dL))), (bG._4 + dL))
778+ func dY (bX,dh) = {
779+ let cp = bX._1
780+ let dV = parseIntValue(dh)
781+ let dZ = parseIntValue(dQ[cp])
782+ let ea = parseIntValue(dS[cp])
783+ if ((dV == 0))
784+ then $Tuple4((cp + 1), (bX._2 :+ dQ[cp]), (bX._3 :+ dS[cp]), bX._4)
785+ else if ((dV > 0))
786+ then if ((dV > ea))
787+ then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ea)) + " available"))
788+ else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV))
789+ else if ((-(dV) > dZ))
790+ then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(dZ)) + " available"))
791+ else $Tuple4((cp + 1), (bX._2 :+ toString((dZ + dV))), (bX._3 :+ toString((ea - dV))), (bX._4 + dV))
756792 }
757793
758- let dR = {
759- let bI = dD
760- let bJ = size(bI)
761- let bK = $Tuple4(0, nil, nil, bR._4)
762- func dd (bM,bN) = if ((bN >= bJ))
763- then bM
764- else dO(bM, bI[bN])
765-
766- func de (bM,bN) = if ((bN >= bJ))
767- then bM
794+ let eb = {
795+ let bb = dN
796+ let bc = size(bb)
797+ let bd = $Tuple4(0, nil, nil, cb._4)
798+ func dn (bf,bg) = if ((bg >= bc))
799+ then bf
800+ else dY(bf, bb[bg])
801+
802+ func do (bf,bg) = if ((bg >= bc))
803+ then bf
768804 else throw("List size exceeds 6")
769805
770- de(dd(dd(dd(dd(dd(dd(bK, 0), 1), 2), 3), 4), 5), 6)
806+ do(dn(dn(dn(dn(dn(dn(bd, 0), 1), 2), 3), 4), 5), 6)
771807 }
772- func dS (bG,cX) = {
773- let cf = bG._1
774- let cZ = Q(cf)
775- let dL = parseIntValue(cX)
776- let dT = if ((size(dH) > cf))
777- then parseIntValue(dH[cf])
808+ func ec (bX,dh) = {
809+ let cp = bX._1
810+ let dj = S(cp)
811+ let dV = parseIntValue(dh)
812+ let ed = if ((size(dR) > cp))
813+ then parseIntValue(dR[cp])
778814 else 0
779- let dU = if ((size(dJ) > cf))
780- then parseIntValue(dJ[cf])
815+ let ee = if ((size(dT) > cp))
816+ then parseIntValue(dT[cp])
781817 else 0
782- if ((dL == 0))
783- then $Tuple4((cf + 1), (bG._2 :+ toString(dT)), (bG._3 :+ toString(dU)), bG._4)
784- else if ((dL > 0))
785- then if ((dL > dU))
786- then throw((((("Attempt to take " + cX) + " from backpack, but only ") + toString(dU)) + " available"))
818+ if ((dV == 0))
819+ then $Tuple4((cp + 1), (bX._2 :+ toString(ed)), (bX._3 :+ toString(ee)), bX._4)
820+ else if ((dV > 0))
821+ then if ((dV > ee))
822+ then throw((((("Attempt to take " + dh) + " from backpack, but only ") + toString(ee)) + " available"))
787823 else {
788- let dV = (dx((dT + dL), cZ) - dx(dT, cZ))
789- $Tuple4((cf + 1), (bG._2 :+ toString((dT + dL))), (bG._3 :+ toString((dU - dL))), (bG._4 + dV))
824+ let ef = (dH((ed + dV), dj) - dH(ed, dj))
825+ $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef))
790826 }
791- else if ((-(dL) > dT))
792- then throw((((("Attempt to take " + toString(-(dL))) + " from warehouse, but only ") + toString(dT)) + " available"))
827+ else if ((-(dV) > ed))
828+ then throw((((("Attempt to take " + toString(-(dV))) + " from warehouse, but only ") + toString(ed)) + " available"))
793829 else {
794- let dV = (dx((dT + dL), cZ) - dx(dT, cZ))
795- $Tuple4((cf + 1), (bG._2 :+ toString((dT + dL))), (bG._3 :+ toString((dU - dL))), (bG._4 + dV))
830+ let ef = (dH((ed + dV), dj) - dH(ed, dj))
831+ $Tuple4((cp + 1), (bX._2 :+ toString((ed + dV))), (bX._3 :+ toString((ee - dV))), (bX._4 + ef))
796832 }
797833 }
798834
799- let cP = if ((size(dE) != 0))
835+ let cZ = if ((size(dO) != 0))
800836 then {
801- let bI = dE
802- let bJ = size(bI)
803- let bK = $Tuple4(0, nil, nil, dR._4)
804- func dg (bM,bN) = if ((bN >= bJ))
805- then bM
806- else dS(bM, bI[bN])
807-
808- func dh (bM,bN) = if ((bN >= bJ))
809- then bM
837+ let bb = dO
838+ let bc = size(bb)
839+ let bd = $Tuple4(0, nil, nil, eb._4)
840+ func dq (bf,bg) = if ((bg >= bc))
841+ then bf
842+ else ec(bf, bb[bg])
843+
844+ func dr (bf,bg) = if ((bg >= bc))
845+ then bf
810846 else throw("List size exceeds 50")
811847
812- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(bK, 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)
848+ dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bd, 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)
813849 }
814- else $Tuple4(0, dH, dJ, dR._4)
815- let dW = cP._4
816- if ((dW > cu))
817- then throw((((("Attempt to put total " + toString(dW)) + " stuff, but only ") + toString(cu)) + " warehouse space left"))
818- else $Tuple7(makeString(bR._2, "_"), makeString(dR._2, "_"), makeString(cP._2, "_"), makeString(bR._3, "_"), makeString(dR._3, "_"), makeString(cP._3, "_"), dW)
850+ else $Tuple4(0, dR, dT, eb._4)
851+ let eg = cZ._4
852+ if ((eg > cE))
853+ then throw((((("Attempt to put total " + toString(eg)) + " stuff, but only ") + toString(cE)) + " warehouse space left"))
854+ else $Tuple7(makeString(cb._2, "_"), makeString(eb._2, "_"), makeString(cZ._2, "_"), makeString(cb._3, "_"), makeString(eb._3, "_"), makeString(cZ._3, "_"), eg)
819855 }
820856 }
821857
822858
823-func dX (dY,dZ) = {
824- let aJ = toString(dY)
825- let ea = cA(toBigInt(dZ))
826- let eb = valueOrElse(getInteger(bi()), (bh + 1))
827- let bk = toString(eb)
828- let cJ = toInt((ea % bb))
829- let ci = cH(ea, cJ)
830- let ec = w[cJ]
831- let ed = Issue(bz(bk, "S"), makeString([bk, "S", ci, ec], "_"), 1, 0, false)
832- let ak = calculateAssetId(ed)
833- let ee = toBase58String(ak)
834- $Tuple2([IntegerEntry(bi(), (eb + 1)), ed, StringEntry(bj(bk), ee), StringEntry(aj(ee), aJ), StringEntry(bp(bk), aJ), IntegerEntry(an(ee), 0), IntegerEntry(bn(ee, aJ), 0), ScriptTransfer(dY, 1, ak)], $Tuple2(ee, ec))
835- }
836-
837-
838-func ef (bT,dY,dZ,eg,eh) = if (!(sigVerify_8Kb(eg, eh, aT)))
859+func eh (ei,ej) = {
860+ let aL = toString(ei)
861+ let ek = cK(toBigInt(ej))
862+ let el = valueOrElse(getInteger(bz()), (by + 1))
863+ let bB = toString(el)
864+ let cT = toInt((ek % bs))
865+ let cs = cR(ek, cT)
866+ let em = y[cT]
867+ let en = Issue(bQ(bB, "S"), makeString([bB, "S", cs, em], "_"), 1, 0, false)
868+ let am = calculateAssetId(en)
869+ let eo = toBase58String(am)
870+ $Tuple2([IntegerEntry(bz(), (el + 1)), en, StringEntry(bA(bB), eo), StringEntry(al(eo), aL), StringEntry(bG(bB), aL), IntegerEntry(ap(eo), 0), IntegerEntry(bE(eo, aL), 0), ScriptTransfer(ei, 1, am)], $Tuple2(eo, em))
871+ }
872+
873+
874+func ep (cd,ei,ej,eq,er) = if (!(sigVerify_8Kb(eq, er, bk)))
839875 then throw("signature does not match")
840876 else {
841- let cS = split(toUtf8String(eg), ";")
842- let ei = split(cS[0], "|")
843- let ej = split(ei[bw], "_")
844- let ek = parseIntValue(ej[0])
845- let el = parseIntValue(ej[1])
846- let em = split(cS[1], ":")
847- let en = em[0]
848- let eo = parseIntValue(ei[bx])
849- if (if ((eo > (lastBlock.timestamp + aV)))
877+ let dc = split(toUtf8String(eq), ";")
878+ let es = split(dc[0], "|")
879+ let et = split(es[bN], "_")
880+ let eu = parseIntValue(et[0])
881+ let ev = parseIntValue(et[1])
882+ let ew = split(dc[1], ":")
883+ let ex = ew[0]
884+ let ey = parseIntValue(es[bO])
885+ if (if ((ey > (lastBlock.timestamp + bm)))
850886 then true
851- else ((lastBlock.timestamp - aV) > eo))
887+ else ((lastBlock.timestamp - bm) > ey))
852888 then throw("signature outdated")
853889 else {
854- let ep = em[1]
855- let aJ = toString(dY)
856- let eq = valueOrElse(getString(ah(aJ)), "")
857- if ((eq != ep))
858- then throw(((("Tx ids don't match! In state: " + eq) + ", in msg: ") + ep))
890+ let ez = ew[1]
891+ let aL = toString(ei)
892+ let eA = valueOrElse(getString(aj(aL)), "")
893+ if ((eA != ez))
894+ then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez))
859895 else {
860- let aD = valueOrErrorMessage(getString(aB(aJ)), "You don't have a duck staked")
861- let er = aF(aD)
862- let es = valueOrElse(getInteger(er), 100)
863- if ((es != ek))
864- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(er), 100))) + " from state does not match one from flight log=") + toString(ek)))
865- else if ((0 >= ek))
896+ let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked")
897+ let eB = aH(aF)
898+ let eC = valueOrElse(getInteger(eB), 100)
899+ if ((eC != eu))
900+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu)))
901+ else if ((0 >= eu))
866902 then throw("You can't fly with zero health")
867- else if ((0 >= el))
868- then $Tuple3(((if (!(bT))
869- then [ScriptTransfer(dY, ba, b)]
870- else nil) :+ IntegerEntry(er, 0)), "", 0)
903+ else if ((0 >= ev))
904+ then $Tuple3(((if (!(cd))
905+ then [ScriptTransfer(ei, br, b)]
906+ else nil) :+ IntegerEntry(eB, 0)), "", 0)
871907 else {
872- let et = if ((size(ei) > by))
873- then ei[by]
908+ let eD = if ((size(es) > bP))
909+ then es[bP]
874910 else ""
875- let eu = if ((et == "$"))
876- then aM(invoke(ae, "sendUsdtPrize", [aJ], nil))
911+ let eE = if ((eD == "$"))
912+ then aS(invoke(ag, "sendUsdtPrize", [aL], nil))
877913 else 0
878- let cO = aC(aD)
879- let dB = cN(cO)
880- let ev = split(dB[O], "_")
881- let ew = makeString(bS(bT, ev, aZ), "_")
882- let ex = dX(dY, dZ)
883- let ee = ex._2._1
884- $Tuple3((((ex._1 :+ StringEntry(aE(aD), makeString([ex._2._2, "L", ee], "_"))) :+ IntegerEntry(er, el)) :+ StringEntry(cO, makeString([dB[M], dB[N], ew, dB[P]], ":"))), ee, eu)
914+ let cY = aE(aF)
915+ let dL = cX(cY)
916+ let eF = split(dL[Q], "_")
917+ let eG = makeString(cc(cd, eF, bq), "_")
918+ let eH = eh(ei, ej)
919+ let eo = eH._2._1
920+ $Tuple3((((eH._1 :+ StringEntry(aG(aF), makeString([eH._2._2, "L", eo], "_"))) :+ IntegerEntry(eB, ev)) :+ StringEntry(cY, makeString([dL[O], dL[P], eG, dL[R]], ":"))), eo, eE)
885921 }
886922 }
887923 }
888924 }
889925
890926
891-func ey (au,ez) = {
892- let dl = valueOrElse(getInteger(an(au)), 0)
893- let eA = valueOrElse(getInteger(ao(k, au)), 0)
894- let eB = (dl / 6)
895- let eC = (dl / 7)
896- ((r + fraction(r, ((dl + eB) + (2 * eC)), 5)) + fraction(r, eA, (ez * 5)))
897- }
898-
899-
900-func eD (ai,eE,eF) = {
901- let eG = if ((eE == bt))
902- then $Tuple2(eF, valueOrElse(getString(aB(ai)), ""))
903- else {
904- let aD = valueOrErrorMessage(getString(aB(ai)), "You don't have a duck staked")
905- let eH = valueOrElse(getString(aE(aD)), u)
906- let eI = split(value(eH), "_")
907- if ((eI[aK] != "L"))
908- then throw((("Duck location type is " + eI[aK]) + ", but should be L"))
909- else $Tuple2(eI[aL], aD)
910- }
911- let au = eG._1
912- let eJ = eG._2
913- let eK = value(assetInfo(fromBase58String(au)))
914- let eL = am(au)
915- let eM = valueOrErrorMessage(getInteger(eL), (("Land " + eK.name) + " is not staked"))
916- let eN = valueOrErrorMessage(getString(aj(au)), (("NFT " + eK.name) + " is orphaned"))
917- if ((eN != ai))
927+func eI (aw,eJ) = {
928+ let dv = valueOrElse(getInteger(ap(aw)), 0)
929+ let eK = valueOrElse(getInteger(aq(k, aw)), 0)
930+ let eL = (dv / 6)
931+ let eM = (dv / 7)
932+ ((r + fraction(r, ((dv + eL) + (2 * eM)), 5)) + fraction(r, eK, (eJ * 5)))
933+ }
934+
935+
936+func eN (ak,eO,eP) = {
937+ let eQ = if ((eO == bK))
938+ then $Tuple2(eP, valueOrElse(getString(aD(ak)), ""))
939+ else {
940+ let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked")
941+ let eR = valueOrElse(getString(aG(aF)), u)
942+ let eS = split(value(eR), "_")
943+ if ((eS[aN] != "L"))
944+ then throw((("Duck location type is " + eS[aN]) + ", but should be L"))
945+ else $Tuple2(eS[aO], aF)
946+ }
947+ let aw = eQ._1
948+ let eT = eQ._2
949+ let eU = value(assetInfo(fromBase58String(aw)))
950+ let eV = ao(aw)
951+ let eW = valueOrErrorMessage(getInteger(eV), (("Land " + eU.name) + " is not staked"))
952+ let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned"))
953+ if ((eX != ak))
918954 then throw((i + " is not yours"))
919955 else {
920- let eO = split(eK.description, "_")
921- $Tuple4(eJ, au, eO, eM)
922- }
923- }
924-
925-
926-func eP (ai,dy,eE,eF) = if ((0 > dy))
956+ let eY = split(eU.description, "_")
957+ $Tuple4(eT, aw, eY, eW)
958+ }
959+ }
960+
961+
962+func eZ (ak,dI,eO,eP) = if ((0 > dI))
927963 then throw("Negative amount")
928964 else {
929- let eQ = eD(ai, eE, eF)
930- let aQ = eQ._3[A]
931- let cb = ch(eQ._3[B])
932- let cl = (lastBlock.timestamp - eQ._4)
933- if ((0 > cl))
934- then throw(((("Saved timestamp is in future, saved = " + toString(eQ._4)) + ", current = ") + toString(lastBlock.timestamp)))
965+ let fa = eN(ak, eO, eP)
966+ let aV = fa._3[C]
967+ let cl = cr(fa._3[D])
968+ let cv = (lastBlock.timestamp - fa._4)
969+ if ((0 > cv))
970+ then throw(((("Saved timestamp is in future, saved = " + toString(fa._4)) + ", current = ") + toString(lastBlock.timestamp)))
935971 else {
936- let ez = aP(aQ)
937- let eR = ey(eQ._2, ez)
938- let eS = fraction(cl, (eR * ez), s)
939- if ((dy > eS))
940- then throw(((("Not enough resources, available = " + toString(eS)) + ", requested = ") + toString(dy)))
972+ let eJ = aU(aV)
973+ let fb = eI(fa._2, eJ)
974+ let fc = fraction(cv, (fb * eJ), s)
975+ if ((dI > fc))
976+ then throw(((("Not enough resources, available = " + toString(fc)) + ", requested = ") + toString(dI)))
941977 else {
942- let eT = fraction((eS - dy), s, (eR * ez))
943- let eU = (lastBlock.timestamp - eT)
944- let dk = (ez / m)
945- let ct = cp(cb, (cl - eT), dk, eR)
946- let dj = at(eQ._2)
947- let dl = valueOrElse(getInteger(an(eQ._2)), 0)
948- let cU = di(dj, dk, dl)
949- let dr = split(cU[H], "_")
950- let cu = parseIntValue(dr[K])
951- if (if ((eE == bt))
952- then (dy > cu)
978+ let fd = fraction((fc - dI), s, (fb * eJ))
979+ let fe = (lastBlock.timestamp - fd)
980+ let du = (eJ / m)
981+ let cD = cz(cl, (cv - fd), du, fb)
982+ let dt = av(fa._2)
983+ let dv = valueOrElse(getInteger(ap(fa._2)), 0)
984+ let de = ds(dt, du, dv)
985+ let dB = split(de[J], "_")
986+ let cE = parseIntValue(dB[M])
987+ if (if ((eO == bK))
988+ then (dI > cE)
953989 else false)
954- then throw((("Only " + toString(cu)) + " space left in warehouse"))
990+ then throw((("Only " + toString(cE)) + " space left in warehouse"))
955991 else {
956- let cO = aC(eQ._1)
957- let dB = cN(cO)
958- let cs = split(dB[N], "_")
959- let cr = split(cU[E], "_")
960- let eV = if ((eE == bt))
961- then $Tuple4(cj(cr, cb, (cl - eT), dk, eR), dB[N], (parseIntValue(dr[J]) + ct._2), (parseIntValue(dr[K]) - ct._2))
962- else if ((eE == bu))
963- then $Tuple4(cU[E], cj(cs, cb, (cl - eT), dk, eR), parseIntValue(dr[J]), parseIntValue(dr[K]))
992+ let cY = aE(fa._1)
993+ let dL = cX(cY)
994+ let cC = split(dL[P], "_")
995+ let cB = split(de[G], "_")
996+ let ff = if ((eO == bK))
997+ then $Tuple4(ct(cB, cl, (cv - fd), du, fb), dL[P], (parseIntValue(dB[L]) + cD._2), (parseIntValue(dB[M]) - cD._2))
998+ else if ((eO == bL))
999+ then $Tuple4(de[G], ct(cC, cl, (cv - fd), du, fb), parseIntValue(dB[L]), parseIntValue(dB[M]))
9641000 else {
965- let eW = cq(cr, cs, ct, cu)
966- let eX = min([parseIntValue(dr[K]), ct._2])
967- $Tuple4(eW._1, eW._2, (parseIntValue(dr[J]) + eX), (parseIntValue(dr[K]) - eX))
1001+ let fg = cA(cB, cC, cD, cE)
1002+ let fh = min([parseIntValue(dB[M]), cD._2])
1003+ $Tuple4(fg._1, fg._2, (parseIntValue(dB[L]) + fh), (parseIntValue(dB[M]) - fh))
9681004 }
969- let eY = eV._1
970- let eZ = eV._2
971- let fa = eV._3
972- let fb = eV._4
973- $Tuple5([IntegerEntry(am(eQ._2), eU), IntegerEntry(aq(i, eQ._2, ai), eU)], cO, [dB[M], eZ, dB[O], dB[P]], dj, [cU[D], eY, cU[F], cU[G], makeString([dr[I], toString(fa), toString(fb), dr[L]], "_")])
1005+ let fi = ff._1
1006+ let fj = ff._2
1007+ let fk = ff._3
1008+ let fl = ff._4
1009+ $Tuple5([IntegerEntry(ao(fa._2), fe), IntegerEntry(as(i, fa._2, ak), fe)], cY, [dL[O], fj, dL[Q], dL[R]], dt, [de[F], fi, de[H], de[I], makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")])
9741010 }
9751011 }
9761012 }
9771013 }
9781014
9791015
980-func fc (ai,au,ez,eE) = {
981- let eL = am(au)
982- let eM = value(getInteger(eL))
983- let eS = (fraction((lastBlock.timestamp - eM), ey(au, ez), s) * ez)
984- eP(ai, eS, eE, au)
985- }
986-
987-
988-func fd (bT,dY,fe,au) = {
989- let ai = toString(dY)
990- let eQ = eD(ai, bv, au)
991- let ez = aP(eQ._3[A])
992- let ff = an(eQ._2)
993- let fg = valueOrElse(getInteger(ff), 0)
994- if ((fg >= 3))
1016+func fm (ak,aw,eJ,eO) = {
1017+ let eV = ao(aw)
1018+ let eW = value(getInteger(eV))
1019+ let fc = (fraction((lastBlock.timestamp - eW), eI(aw, eJ), s) * eJ)
1020+ eZ(ak, fc, eO, aw)
1021+ }
1022+
1023+
1024+func fn (cd,ei,fo,aw) = {
1025+ let ak = toString(ei)
1026+ let fa = eN(ak, bM, aw)
1027+ let eJ = aU(fa._3[C])
1028+ let fp = ap(fa._2)
1029+ let fq = valueOrElse(getInteger(fp), 0)
1030+ if ((fq >= 3))
9951031 then throw("Currently max infrastructure level = 3")
9961032 else {
997- let fh = (fg + 1)
998- let fi = fraction(aY, (ez * fh), m)
999- if (if (!(bT))
1000- then (fe != fi)
1033+ let fr = (fq + 1)
1034+ let fs = fraction(bp, (eJ * fr), m)
1035+ if (if (!(cd))
1036+ then (fo != fs)
10011037 else false)
1002- then throw(("Payment attached should be " + toString(fi)))
1038+ then throw(("Payment attached should be " + toString(fs)))
10031039 else {
1004- let cO = aC(eQ._1)
1005- let dB = cN(cO)
1006- let ev = split(dB[O], "_")
1007- let ew = makeString(bS(bT, ev, fraction(e, (ez * fh), m)), "_")
1008- let fj = fc(ai, eQ._2, ez, bv)
1009- let fk = fj._5
1010- let fl = cQ(fk[D])
1011- let fm = makeString([split(fk[D], "_")[0], toString(fh)], "_")
1012- let fn = cQ(fm)
1013- let dr = split(fk[H], "_")
1014- let fo = makeString([dr[I], dr[J], toString(((parseIntValue(dr[K]) + fn) - fl)), toString(fn)], "_")
1015- $Tuple2(([IntegerEntry(ff, fh), IntegerEntry(bn(eQ._2, ai), fh), StringEntry(cO, makeString([dB[M], fj._3[N], ew, dB[P]], ":")), StringEntry(fj._4, makeString([fm, fk[E], fk[F], fk[G], fo], ":"))] ++ fj._1), fh)
1040+ let cY = aE(fa._1)
1041+ let dL = cX(cY)
1042+ let eF = split(dL[Q], "_")
1043+ let eG = makeString(cc(cd, eF, fraction(e, (eJ * fr), m)), "_")
1044+ let ft = fm(ak, fa._2, eJ, bM)
1045+ let fu = ft._5
1046+ let fv = da(fu[F])
1047+ let fw = makeString([split(fu[F], "_")[0], toString(fr)], "_")
1048+ let fx = da(fw)
1049+ let dB = split(fu[J], "_")
1050+ let fy = makeString([dB[K], dB[L], toString(((parseIntValue(dB[M]) + fx) - fv)), toString(fx)], "_")
1051+ $Tuple2(([IntegerEntry(fp, fr), IntegerEntry(bE(fa._2, ak), fr), StringEntry(cY, makeString([dL[O], ft._3[P], eG, dL[R]], ":")), StringEntry(ft._4, makeString([fw, fu[G], fu[H], fu[I], fy], ":"))] ++ ft._1), fr)
10161052 }
10171053 }
10181054 }
10191055
10201056
1021-func fp (ai,eF) = {
1022- let eQ = eD(ai, bv, eF)
1023- let au = eQ._2
1024- let ez = aP(eQ._3[A])
1025- let fq = ao(k, au)
1026- if ((valueOrElse(getInteger(fq), 0) > 0))
1057+func fz (ak,eP) = {
1058+ let fa = eN(ak, bM, eP)
1059+ let aw = fa._2
1060+ let eJ = aU(fa._3[C])
1061+ let fA = aq(k, aw)
1062+ if ((valueOrElse(getInteger(fA), 0) > 0))
10271063 then throw("Presale artifact is already activated")
1028- else if ((parseIntValue(eQ._3[z]) > bh))
1029- then throw((((i + " ") + au) + " is not eligible for presale artifact"))
1064+ else if ((parseIntValue(fa._3[B]) > by))
1065+ then throw((((i + " ") + aw) + " is not eligible for presale artifact"))
10301066 else {
1031- let fj = fc(ai, au, ez, bv)
1032- ((((fj._1 :+ IntegerEntry(fq, ez)) :+ IntegerEntry(bo(k, au, ai), ez)) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":")))
1067+ let ft = fm(ak, aw, eJ, bM)
1068+ ((((ft._1 :+ IntegerEntry(fA, eJ)) :+ IntegerEntry(bF(k, aw, ak), eJ)) :+ StringEntry(ft._2, makeString(ft._3, ":"))) :+ StringEntry(ft._4, makeString(ft._5, ":")))
10331069 }
10341070 }
10351071
10361072
1037-func fr (fs,fh,ft,ai,fu,dZ,fv) = {
1038- let aD = valueOrErrorMessage(getString(aB(ai)), "You don't have a duck staked")
1039- func fw (bG,au) = {
1040- let eK = value(assetInfo(fromBase58String(au)))
1041- let eL = am(au)
1042- let eM = valueOrErrorMessage(getInteger(eL), (("NFT " + eK.name) + " is not staked"))
1043- let eN = valueOrErrorMessage(getString(aj(au)), (("NFT " + eK.name) + " is orphaned"))
1044- if ((eN != ai))
1073+func fB (fC,fr,fD,ak,fE,ej,fF) = {
1074+ let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked")
1075+ func fG (bX,aw) = {
1076+ let eU = value(assetInfo(fromBase58String(aw)))
1077+ let eV = ao(aw)
1078+ let eW = valueOrErrorMessage(getInteger(eV), (("NFT " + eU.name) + " is not staked"))
1079+ let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned"))
1080+ if ((eX != ak))
10451081 then throw((i + " is not yours"))
10461082 else {
1047- let eO = split(eK.description, "_")
1048- let ec = eO[C]
1049- if (if ((bG._3 != ""))
1050- then (bG._3 != ec)
1083+ let eY = split(eU.description, "_")
1084+ let em = eY[E]
1085+ if (if ((bX._3 != ""))
1086+ then (bX._3 != em)
10511087 else false)
10521088 then throw("Lands should be on the same continent to merge")
10531089 else {
1054- let aQ = eO[A]
1055- let fx = bG._1
1056- let cf = valueOrErrorMessage(indexOf(fx, aQ), "You haven't passed all the lands needed")
1057- let fy = (take(fx, cf) + drop(fx, (cf + 1)))
1058- let ez = aP(aQ)
1059- let fz = (bG._2 + valueOrElse(getInteger(ao(k, au)), 0))
1060- let dl = valueOrElse(getInteger(an(au)), 0)
1061- let fA = {
1062- let c = aQ
1090+ let aV = eY[C]
1091+ let fH = bX._1
1092+ let cp = valueOrErrorMessage(indexOf(fH, aV), "You haven't passed all the lands needed")
1093+ let fI = (take(fH, cp) + drop(fH, (cp + 1)))
1094+ let eJ = aU(aV)
1095+ let fJ = (bX._2 + valueOrElse(getInteger(aq(k, aw)), 0))
1096+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1097+ let fK = {
1098+ let c = aV
10631099 if (("S" == c))
10641100 then 3
10651101 else if (("M" == c))
10661102 then 4
10671103 else if (("L" == c))
10681104 then 5
10691105 else if (("XL" == c))
10701106 then 6
10711107 else throw("Only S, M, L, XL can merge")
10721108 }
1073- if ((dl != fA))
1109+ if ((dv != fK))
10741110 then throw("All lands should be maxed to merge")
10751111 else {
1076- let bk = eO[z]
1077- let cb = ch(eO[B])
1078- let cl = (lastBlock.timestamp - eM)
1079- if ((0 > cl))
1080- then throw(((("Saved timestamp is in future, saved = " + toString(eM)) + ", current = ") + toString(lastBlock.timestamp)))
1112+ let bB = eY[B]
1113+ let cl = cr(eY[D])
1114+ let cv = (lastBlock.timestamp - eW)
1115+ if ((0 > cv))
1116+ then throw(((("Saved timestamp is in future, saved = " + toString(eW)) + ", current = ") + toString(lastBlock.timestamp)))
10811117 else {
1082- let eR = ey(au, ez)
1083- let dk = (ez / m)
1084- let eZ = cj(split(bG._4, "_"), cb, cl, dk, eR)
1085- let bQ = bZ(split(bG._6, "_"), cb, dk, -1)
1086- let fB = bG._7
1087- let ad = indexOf(fB, au)
1088- if (!(isDefined(ad)))
1089- then throw(("Your staked lands don't contain " + au))
1118+ let fb = eI(aw, eJ)
1119+ let du = (eJ / m)
1120+ let fj = ct(split(bX._4, "_"), cl, cv, du, fb)
1121+ let ca = cj(split(bX._6, "_"), cl, du, -1)
1122+ let fL = bX._7
1123+ let af = indexOf(fL, aw)
1124+ if (!(isDefined(af)))
1125+ then throw(("Your staked lands don't contain " + aw))
10901126 else {
1091- let fC = al(au)
1092- let fD = valueOrElse(getString(fC), "")
1093- $Tuple7(fy, fz, ec, eZ, (((((((((((((bG._5 :+ DeleteEntry(am(au))) :+ DeleteEntry(aq(i, au, ai))) :+ DeleteEntry(bj(bk))) :+ DeleteEntry(aj(au))) :+ DeleteEntry(an(au))) :+ DeleteEntry(bn(au, ai))) :+ DeleteEntry(ao(k, au))) :+ DeleteEntry(bo(k, au, ai))) :+ DeleteEntry(bp(bk))) :+ DeleteEntry(at(au))) :+ DeleteEntry(fC)) :+ DeleteEntry(bl(fD))) :+ Burn(fromBase58String(au), 1)), bQ, removeByIndex(fB, value(ad)))
1127+ let fM = an(aw)
1128+ let fN = valueOrElse(getString(fM), "")
1129+ $Tuple7(fI, fJ, em, fj, (((((((((((((bX._5 :+ DeleteEntry(ao(aw))) :+ DeleteEntry(as(i, aw, ak))) :+ DeleteEntry(bA(bB))) :+ DeleteEntry(al(aw))) :+ DeleteEntry(ap(aw))) :+ DeleteEntry(bE(aw, ak))) :+ DeleteEntry(aq(k, aw))) :+ DeleteEntry(bF(k, aw, ak))) :+ DeleteEntry(bG(bB))) :+ DeleteEntry(av(aw))) :+ DeleteEntry(fM)) :+ DeleteEntry(bC(fN))) :+ Burn(fromBase58String(aw), 1)), ca, removeByIndex(fL, value(af)))
10941130 }
10951131 }
10961132 }
10971133 }
10981134 }
10991135 }
11001136
1101- let cO = aC(aD)
1102- let dB = cN(cO)
1103- let fE = valueOrElse(getString(aG()), "0_0_0_0_0_0")
1104- let fF = av(ai)
1105- let fG = getString(fF)
1106- let fH = if (isDefined(fG))
1107- then split_51C(value(fG), "_")
1137+ let cY = aE(aF)
1138+ let dL = cX(cY)
1139+ let fO = valueOrElse(getString(aI()), "0_0_0_0_0_0")
1140+ let fP = ax(ak)
1141+ let fQ = getString(fP)
1142+ let fR = if (isDefined(fQ))
1143+ then split_51C(value(fQ), "_")
11081144 else nil
1109- let bR = {
1110- let bI = fu
1111- let bJ = size(bI)
1112- let bK = $Tuple7(ft, 0, "", dB[N], nil, fE, fH)
1113- func bL (bM,bN) = if ((bN >= bJ))
1114- then bM
1115- else fw(bM, bI[bN])
1116-
1117- func bO (bM,bN) = if ((bN >= bJ))
1118- then bM
1145+ let cb = {
1146+ let bb = fE
1147+ let bc = size(bb)
1148+ let bd = $Tuple7(fD, 0, "", dL[P], nil, fO, fR)
1149+ func be (bf,bg) = if ((bg >= bc))
1150+ then bf
1151+ else fG(bf, bb[bg])
1152+
1153+ func bh (bf,bg) = if ((bg >= bc))
1154+ then bf
11191155 else throw("List size exceeds 5")
11201156
1121- bO(bL(bL(bL(bL(bL(bK, 0), 1), 2), 3), 4), 5)
1157+ bh(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5)
11221158 }
1123- let ec = bR._3
1124- let cJ = valueOrErrorMessage(indexOf(w, ec), ("Unknown continent: " + ec))
1125- let ci = cH(cA(toBigInt(dZ)), cJ)
1126- let eb = valueOrElse(getInteger(bi()), (bh + 1))
1127- let fI = toString(eb)
1128- let ed = Issue(bz(fI, fs), makeString([fI, fs, ci, ec], "_"), 1, 0, false)
1129- let ak = calculateAssetId(ed)
1130- let fJ = toBase58String(ak)
1131- let ew = makeString(bS((fv > 0), split(dB[O], "_"), fv), "_")
1132- $Tuple2(((((((((((((((bR._5 :+ (if ((size(bR._7) > 0))
1133- then StringEntry(fF, makeString_11C(bR._7, "_"))
1134- else DeleteEntry(fF))) :+ IntegerEntry(bi(), (eb + 1))) :+ ed) :+ StringEntry(bj(fI), fJ)) :+ StringEntry(aj(fJ), ai)) :+ StringEntry(bp(fI), ai)) :+ IntegerEntry(ao(k, fJ), bR._2)) :+ IntegerEntry(bo(k, fJ, ai), bR._2)) :+ IntegerEntry(an(fJ), fh)) :+ IntegerEntry(bn(fJ, ai), fh)) :+ StringEntry(cO, makeString([dB[M], bR._4, ew, dB[P]], ":"))) :+ StringEntry(aG(), bR._6)) :+ StringEntry(aE(aD), makeString([ec, "L", fJ], "_"))) :+ ScriptTransfer(addressFromStringValue(ai), 1, ak)), fJ)
1135- }
1136-
1137-
1138-func fK (ai,fu,dZ) = fr("M", 3, "SSSS", ai, fu, dZ, 0)
1139-
1140-
1141-func fL (ai,fu,dZ,bT,fe) = {
1142- let fi = (aY * 4)
1143- if (if (!(bT))
1144- then (fe != fi)
1159+ let em = cb._3
1160+ let cT = valueOrErrorMessage(indexOf(y, em), ("Unknown continent: " + em))
1161+ let cs = cR(cK(toBigInt(ej)), cT)
1162+ let el = valueOrElse(getInteger(bz()), (by + 1))
1163+ let fS = toString(el)
1164+ let en = Issue(bQ(fS, fC), makeString([fS, fC, cs, em], "_"), 1, 0, false)
1165+ let am = calculateAssetId(en)
1166+ let fT = toBase58String(am)
1167+ let eG = makeString(cc((fF > 0), split(dL[Q], "_"), fF), "_")
1168+ $Tuple2(((((((((((((((cb._5 :+ (if ((size(cb._7) > 0))
1169+ then StringEntry(fP, makeString_11C(cb._7, "_"))
1170+ else DeleteEntry(fP))) :+ IntegerEntry(bz(), (el + 1))) :+ en) :+ StringEntry(bA(fS), fT)) :+ StringEntry(al(fT), ak)) :+ StringEntry(bG(fS), ak)) :+ IntegerEntry(aq(k, fT), cb._2)) :+ IntegerEntry(bF(k, fT, ak), cb._2)) :+ IntegerEntry(ap(fT), fr)) :+ IntegerEntry(bE(fT, ak), fr)) :+ StringEntry(cY, makeString([dL[O], cb._4, eG, dL[R]], ":"))) :+ StringEntry(aI(), cb._6)) :+ StringEntry(aG(aF), makeString([em, "L", fT], "_"))) :+ ScriptTransfer(addressFromStringValue(ak), 1, am)), fT)
1171+ }
1172+
1173+
1174+func fU (ak,fE,ej) = fB("M", 3, "SSSS", ak, fE, ej, 0)
1175+
1176+
1177+func fV (ak,fE,ej,cd,fo) = {
1178+ let fs = (bp * 4)
1179+ if (if (!(cd))
1180+ then (fo != fs)
11451181 else false)
1146- then throw(("Payment attached should be " + toString(fi)))
1147- else fr("L", 4, "SMM", ai, fu, dZ, (e * 4))
1148- }
1149-
1150-
1151-func fM (ai,fu,dZ,bT,fe) = {
1152- let fi = (aY * 47)
1153- if (if (!(bT))
1154- then (fe != fi)
1182+ then throw(("Payment attached should be " + toString(fs)))
1183+ else fB("L", 4, "SMM", ak, fE, ej, (e * 4))
1184+ }
1185+
1186+
1187+func fW (ak,fE,ej,cd,fo) = {
1188+ let fs = (bp * 47)
1189+ if (if (!(cd))
1190+ then (fo != fs)
11551191 else false)
1156- then throw(("Payment attached should be " + toString(fi)))
1157- else fr("XL", 5, "SSSML", ai, fu, dZ, (e * 47))
1158- }
1159-
1160-
1161-func fN (ai,fu,dZ,bT,fe) = {
1162- let fi = (aY * 54)
1163- if (if (!(bT))
1164- then (fe != fi)
1192+ then throw(("Payment attached should be " + toString(fs)))
1193+ else fB("XL", 5, "SSSML", ak, fE, ej, (e * 47))
1194+ }
1195+
1196+
1197+func fX (ak,fE,ej,cd,fo) = {
1198+ let fs = (bp * 54)
1199+ if (if (!(cd))
1200+ then (fo != fs)
11651201 else false)
1166- then throw(("Payment attached should be " + toString(fi)))
1167- else fr("XXL", 6, "LXL", ai, fu, dZ, (e * 54))
1168- }
1169-
1170-
1171-func fO (bT,ai,fe,fu,dZ) = {
1172- let fP = {
1173- let c = size(fu)
1202+ then throw(("Payment attached should be " + toString(fs)))
1203+ else fB("XXL", 6, "LXL", ak, fE, ej, (e * 54))
1204+ }
1205+
1206+
1207+func fY (cd,ak,fo,fE,ej) = {
1208+ let fZ = {
1209+ let c = size(fE)
11741210 if ((4 == c))
1175- then fK(ai, fu, dZ)
1211+ then fU(ak, fE, ej)
11761212 else if ((3 == c))
1177- then fL(ai, fu, dZ, bT, fe)
1213+ then fV(ak, fE, ej, cd, fo)
11781214 else if ((5 == c))
1179- then fM(ai, fu, dZ, bT, fe)
1215+ then fW(ak, fE, ej, cd, fo)
11801216 else if ((2 == c))
1181- then fN(ai, fu, dZ, bT, fe)
1217+ then fX(ak, fE, ej, cd, fo)
11821218 else throw("Unknown merge")
11831219 }
1184- fP
1185- }
1186-
1187-
1188-func fQ (cf) = if (if ((cf.originCaller != ae))
1189- then valueOrElse(getBoolean(aH()), false)
1220+ fZ
1221+ }
1222+
1223+
1224+func ga (cp) = if (if ((cp.originCaller != ag))
1225+ then valueOrElse(getBoolean(aJ()), false)
11901226 else false)
11911227 then throw("Contracts are under maintenance")
1192- else StringEntry(ah(toString(cf.originCaller)), toBase58String(cf.transactionId))
1193-
1194-
1195-@Callable(cf)
1196-func constructorV1 (fR) = if ((cf.caller != this))
1228+ else StringEntry(aj(toString(cp.originCaller)), toBase58String(cp.transactionId))
1229+
1230+
1231+@Callable(cp)
1232+func constructorV1 (gb) = if ((cp.caller != this))
11971233 then throw("Permission denied")
1198- else [StringEntry(Y(), fR)]
1199-
1200-
1201-
1202-@Callable(cf)
1203-func setBlocked (fS) = if ((cf.caller != this))
1234+ else [StringEntry(aa(), gb)]
1235+
1236+
1237+
1238+@Callable(cp)
1239+func setBlocked (gc) = if ((cp.caller != this))
12041240 then throw("permission denied")
1205- else [BooleanEntry(aH(), fS)]
1206-
1207-
1208-
1209-@Callable(cf)
1241+ else [BooleanEntry(aJ(), gc)]
1242+
1243+
1244+
1245+@Callable(cp)
12101246 func stakeLand () = {
1211- let fT = fQ(cf)
1212- if ((size(cf.payments) != 1))
1247+ let gd = ga(cp)
1248+ if ((size(cp.payments) != 1))
12131249 then throw("Exactly one payment required")
12141250 else {
1215- let fU = value(cf.payments[0])
1216- let ak = value(fU.assetId)
1217- let T = toString(cf.caller)
1218- if ((fU.amount != 1))
1251+ let ge = value(cp.payments[0])
1252+ let am = value(ge.assetId)
1253+ let V = toString(cp.caller)
1254+ if ((ge.amount != 1))
12191255 then throw((("NFT " + i) + " token should be attached as payment"))
12201256 else {
1221- let eK = value(assetInfo(ak))
1222- if ((eK.issuer != this))
1257+ let eU = value(assetInfo(am))
1258+ if ((eU.issuer != this))
12231259 then throw("Unknown issuer of token")
1224- else if (!(contains(eK.name, i)))
1260+ else if (!(contains(eU.name, i)))
12251261 then throw((("Only NFT " + i) + " tokens are accepted"))
12261262 else {
1227- let fV = drop(eK.name, 4)
1228- let bk = if (contains(fV, "XXL"))
1229- then dropRight(fV, 3)
1230- else if (contains(fV, "XL"))
1231- then dropRight(fV, 2)
1232- else dropRight(fV, 1)
1233- if (!(isDefined(parseInt(bk))))
1234- then throw(("Cannot parse land number from " + eK.name))
1263+ let gf = drop(eU.name, 4)
1264+ let bB = if (contains(gf, "XXL"))
1265+ then dropRight(gf, 3)
1266+ else if (contains(gf, "XL"))
1267+ then dropRight(gf, 2)
1268+ else dropRight(gf, 1)
1269+ if (!(isDefined(parseInt(bB))))
1270+ then throw(("Cannot parse land number from " + eU.name))
12351271 else {
1236- let au = toBase58String(ak)
1237- let eL = am(au)
1238- if (isDefined(getInteger(eL)))
1239- then throw((("NFT " + eK.name) + " is already staked"))
1272+ let aw = toBase58String(am)
1273+ let eV = ao(aw)
1274+ if (isDefined(getInteger(eV)))
1275+ then throw((("NFT " + eU.name) + " is already staked"))
12401276 else {
1241- let eO = split(eK.description, "_")
1242- let cb = ch(eO[B])
1243- let ez = aP(eO[A])
1244- let bQ = cg(cb, (ez / m), 1)
1245- let eA = valueOrElse(getInteger(ao(k, au)), 0)
1246- let fG = getString(av(T))
1247- let fB = if (isDefined(fG))
1248- then split_51C(value(fG), "_")
1277+ let eY = split(eU.description, "_")
1278+ let cl = cr(eY[D])
1279+ let eJ = aU(eY[C])
1280+ let ca = cq(cl, (eJ / m), 1)
1281+ let eK = valueOrElse(getInteger(aq(k, aw)), 0)
1282+ let fQ = getString(ax(V))
1283+ let fL = if (isDefined(fQ))
1284+ then split_51C(value(fQ), "_")
12491285 else nil
1250- if (containsElement(fB, au))
1251- then throw(("Your staked lands already contain " + au))
1286+ if (containsElement(fL, aw))
1287+ then throw(("Your staked lands already contain " + aw))
12521288 else {
1253- let dl = valueOrElse(getInteger(an(au)), 0)
1254-[IntegerEntry(eL, lastBlock.timestamp), IntegerEntry(aq(i, au, T), lastBlock.timestamp), StringEntry(av(T), makeString_11C((fB :+ au), "_")), StringEntry(aj(au), T), StringEntry(bp(bk), T), IntegerEntry(bo(k, au, T), eA), IntegerEntry(bn(au, T), dl), StringEntry(aG(), bQ), fT]
1289+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1290+[IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(i, aw, V), lastBlock.timestamp), StringEntry(ax(V), makeString_11C((fL :+ aw), "_")), StringEntry(al(aw), V), StringEntry(bG(bB), V), IntegerEntry(bF(k, aw, V), eK), IntegerEntry(bE(aw, V), dv), StringEntry(aI(), ca), gd]
12551291 }
12561292 }
12571293 }
12581294 }
12591295 }
12601296 }
12611297 }
12621298
12631299
12641300
1265-@Callable(cf)
1266-func unstakeLand (eF) = {
1267- let fT = fQ(cf)
1268- if ((size(cf.payments) != 0))
1301+@Callable(cp)
1302+func unstakeLand (eP) = {
1303+ let gd = ga(cp)
1304+ if ((size(cp.payments) != 0))
12691305 then throw("No payments required")
12701306 else {
1271- let ai = toString(cf.caller)
1272- let eQ = eD(ai, bu, eF)
1273- let au = eQ._2
1274- let fF = av(ai)
1275- let cb = ch(eQ._3[B])
1276- let ez = aP(eQ._3[A])
1277- let bQ = cg(cb, (ez / m), -1)
1278- let fj = fc(ai, au, ez, bu)
1279- let fB = split_51C(valueOrElse(getString(fF), ""), "_")
1280- let ad = indexOf(fB, au)
1281- if (!(isDefined(ad)))
1282- then throw(("Your staked lands don't contain " + au))
1307+ let ak = toString(cp.caller)
1308+ let fa = eN(ak, bL, eP)
1309+ let aw = fa._2
1310+ let fP = ax(ak)
1311+ let cl = cr(fa._3[D])
1312+ let eJ = aU(fa._3[C])
1313+ let ca = cq(cl, (eJ / m), -1)
1314+ let ft = fm(ak, aw, eJ, bL)
1315+ let fL = split_51C(valueOrElse(getString(fP), ""), "_")
1316+ let af = indexOf(fL, aw)
1317+ if (!(isDefined(af)))
1318+ then throw(("Your staked lands don't contain " + aw))
12831319 else {
1284- let cM = value(blockInfoByHeight(height)).timestamp
1285- let fW = valueOrElse(getInteger(ag, aI(ai)), 0)
1286- if ((fW >= cM))
1287- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(fW)))
1288- else [ScriptTransfer(cf.caller, 1, fromBase58String(au)), DeleteEntry(am(au)), DeleteEntry(aq(i, au, ai)), StringEntry(aG(), bQ), StringEntry(fj._2, makeString(fj._3, ":")), if ((size(fB) > 1))
1289- then StringEntry(fF, makeString_11C(removeByIndex(fB, value(ad)), "_"))
1290- else DeleteEntry(fF), fT]
1320+ let cW = value(blockInfoByHeight(height)).timestamp
1321+ let gg = valueOrElse(getInteger(ai, aK(ak)), 0)
1322+ if ((gg >= cW))
1323+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gg)))
1324+ else [ScriptTransfer(cp.caller, 1, fromBase58String(aw)), DeleteEntry(ao(aw)), DeleteEntry(as(i, aw, ak)), StringEntry(aI(), ca), StringEntry(ft._2, makeString(ft._3, ":")), if ((size(fL) > 1))
1325+ then StringEntry(fP, makeString_11C(removeByIndex(fL, value(af)), "_"))
1326+ else DeleteEntry(fP), gd]
12911327 }
12921328 }
12931329 }
12941330
12951331
12961332
1297-@Callable(cf)
1333+@Callable(cp)
12981334 func stakeDuck () = {
1299- let fT = fQ(cf)
1300- if ((size(cf.payments) != 1))
1335+ let gd = ga(cp)
1336+ if ((size(cp.payments) != 1))
13011337 then throw("Exactly one payment required")
13021338 else {
1303- let fU = value(cf.payments[0])
1304- let ak = value(fU.assetId)
1305- let T = toString(cf.caller)
1306- if ((fU.amount != 1))
1339+ let ge = value(cp.payments[0])
1340+ let am = value(ge.assetId)
1341+ let V = toString(cp.caller)
1342+ if ((ge.amount != 1))
13071343 then throw((("NFT " + j) + " token should be attached as payment"))
13081344 else {
1309- let eK = value(assetInfo(ak))
1310- if (if ((eK.issuer != aR))
1311- then (eK.issuer != aS)
1345+ let eU = value(assetInfo(am))
1346+ if (if ((eU.issuer != bi))
1347+ then (eU.issuer != bj)
13121348 else false)
13131349 then throw((("Unknown issuer of " + j) + " token"))
1314- else if (!(contains(eK.name, j)))
1350+ else if (!(contains(eU.name, j)))
13151351 then throw((("Only NFT " + j) + " tokens are accepted"))
13161352 else {
1317- let fX = toBase58String(ak)
1318- let eL = am(fX)
1319- if (isDefined(getInteger(eL)))
1320- then throw((("NFT " + eK.name) + " is already staked"))
1321- else if (isDefined(getString(aB(T))))
1322- then throw(("You already staked one duck: " + eK.name))
1353+ let gh = toBase58String(am)
1354+ let eV = ao(gh)
1355+ if (isDefined(getInteger(eV)))
1356+ then throw((("NFT " + eU.name) + " is already staked"))
1357+ else if (isDefined(getString(aD(V))))
1358+ then throw(("You already staked one duck: " + eU.name))
13231359 else {
1324- let fY = aE(fX)
1325- let fZ = getString(fY)
1326- let cO = aC(fX)
1327- let ga = getString(cO)
1328- ([IntegerEntry(eL, lastBlock.timestamp), IntegerEntry(aq(j, toBase58String(ak), T), lastBlock.timestamp), StringEntry(aA(fX), T), StringEntry(aB(T), fX)] ++ (if (isDefined(fZ))
1360+ let gi = aG(gh)
1361+ let gj = getString(gi)
1362+ let cY = aE(gh)
1363+ let gk = getString(cY)
1364+ ([IntegerEntry(eV, lastBlock.timestamp), IntegerEntry(as(j, toBase58String(am), V), lastBlock.timestamp), StringEntry(aC(gh), V), StringEntry(aD(V), gh)] ++ (if (isDefined(gj))
13291365 then nil
1330- else ([StringEntry(fY, u)] ++ (if (isDefined(ga))
1366+ else ([StringEntry(gi, u)] ++ (if (isDefined(gk))
13311367 then nil
1332- else (([StringEntry(cO, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aF(fX), 100)) :+ fT)))))
1368+ else (([StringEntry(cY, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aH(gh), 100)) :+ gd)))))
13331369 }
13341370 }
13351371 }
13361372 }
13371373 }
13381374
13391375
13401376
1341-@Callable(cf)
1342-func unstakeDuck (fX) = {
1343- let fT = fQ(cf)
1344- if ((size(cf.payments) != 0))
1377+@Callable(cp)
1378+func unstakeDuck (gh) = {
1379+ let gd = ga(cp)
1380+ if ((size(cp.payments) != 0))
13451381 then throw("No payments required")
13461382 else {
1347- let ak = fromBase58String(fX)
1348- let T = toString(cf.caller)
1349- let eK = value(assetInfo(ak))
1350- let eL = am(toBase58String(ak))
1351- if (!(isDefined(getInteger(eL))))
1352- then throw((("NFT " + eK.name) + " is not staked"))
1353- else if (!(isDefined(getString(aB(T)))))
1354- then throw((("The duck " + eK.name) + " is not staked"))
1383+ let am = fromBase58String(gh)
1384+ let V = toString(cp.caller)
1385+ let eU = value(assetInfo(am))
1386+ let eV = ao(toBase58String(am))
1387+ if (!(isDefined(getInteger(eV))))
1388+ then throw((("NFT " + eU.name) + " is not staked"))
1389+ else if (!(isDefined(getString(aD(V)))))
1390+ then throw((("The duck " + eU.name) + " is not staked"))
13551391 else {
1356- let eN = valueOrErrorMessage(getString(aA(toBase58String(ak))), (("NFT " + eK.name) + " is orphaned"))
1357- if ((eN != T))
1392+ let eX = valueOrErrorMessage(getString(aC(toBase58String(am))), (("NFT " + eU.name) + " is orphaned"))
1393+ if ((eX != V))
13581394 then throw("Staked NFT is not yours")
13591395 else {
1360- let er = aF(fX)
1361- let gb = valueOrElse(getInteger(er), 100)
1362- if ((100 > gb))
1396+ let eB = aH(gh)
1397+ let gl = valueOrElse(getInteger(eB), 100)
1398+ if ((100 > gl))
13631399 then throw("Please heal your duck before unstaking")
1364- else [ScriptTransfer(cf.caller, 1, ak), DeleteEntry(eL), DeleteEntry(er), DeleteEntry(aE(fX)), DeleteEntry(aA(fX)), DeleteEntry(aq(j, fX, T)), DeleteEntry(aB(T)), fT]
1400+ else [ScriptTransfer(cp.caller, 1, am), DeleteEntry(eV), DeleteEntry(eB), DeleteEntry(aG(gh)), DeleteEntry(aC(gh)), DeleteEntry(as(j, gh, V)), DeleteEntry(aD(V)), gd]
13651401 }
13661402 }
13671403 }
13681404 }
13691405
13701406
13711407
1372-@Callable(cf)
1373-func claimRes (dy,gc) = {
1374- let fT = fQ(cf)
1375- if ((size(cf.payments) != 0))
1408+@Callable(cp)
1409+func claimRes (dI,gm) = {
1410+ let gd = ga(cp)
1411+ if ((size(cp.payments) != 0))
13761412 then throw("No payments required")
13771413 else {
1378- let ai = toString(cf.originCaller)
1379- let bY = eP(ai, dy, bu, gc)
1380- $Tuple2((((bY._1 :+ StringEntry(bY._2, makeString(bY._3, ":"))) :+ StringEntry(bY._4, makeString(bY._5, ":"))) :+ fT), bY._3[N])
1381- }
1382- }
1383-
1384-
1385-
1386-@Callable(cf)
1387-func claimResToWH (dy,gc) = {
1388- let fT = fQ(cf)
1389- if ((size(cf.payments) != 0))
1414+ let ak = toString(cp.originCaller)
1415+ let ci = eZ(ak, dI, bL, gm)
1416+ $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._3[P])
1417+ }
1418+ }
1419+
1420+
1421+
1422+@Callable(cp)
1423+func claimResToWH (dI,gm) = {
1424+ let gd = ga(cp)
1425+ if ((size(cp.payments) != 0))
13901426 then throw("No payments required")
13911427 else {
1392- let ai = toString(cf.originCaller)
1393- let bY = eP(ai, dy, bt, gc)
1394- $Tuple2((((bY._1 :+ StringEntry(bY._2, makeString(bY._3, ":"))) :+ StringEntry(bY._4, makeString(bY._5, ":"))) :+ fT), bY._5[E])
1395- }
1396- }
1397-
1398-
1399-
1400-@Callable(cf)
1401-func flight (eg,eh) = {
1402- let fT = fQ(cf)
1403- if (!(sigVerify_8Kb(eg, eh, aT)))
1428+ let ak = toString(cp.originCaller)
1429+ let ci = eZ(ak, dI, bK, gm)
1430+ $Tuple2((((ci._1 :+ StringEntry(ci._2, makeString(ci._3, ":"))) :+ StringEntry(ci._4, makeString(ci._5, ":"))) :+ gd), ci._5[G])
1431+ }
1432+ }
1433+
1434+
1435+
1436+@Callable(cp)
1437+func flight (eq,er) = {
1438+ let gd = ga(cp)
1439+ if (!(sigVerify_8Kb(eq, er, bk)))
14041440 then throw("signature does not match")
1405- else if ((size(cf.payments) != 0))
1441+ else if ((size(cp.payments) != 0))
14061442 then throw("No payments required")
14071443 else {
1408- let cS = split(toUtf8String(eg), ";")
1409- let ei = split(cS[0], "|")
1410- let ej = split(ei[bw], "_")
1411- let ek = parseIntValue(ej[0])
1412- let el = parseIntValue(ej[1])
1413- let em = split(cS[1], ":")
1414- let en = em[0]
1415- let eo = parseIntValue(ei[bx])
1416- if (if ((eo > (lastBlock.timestamp + aV)))
1444+ let dc = split(toUtf8String(eq), ";")
1445+ let es = split(dc[0], "|")
1446+ let et = split(es[bN], "_")
1447+ let eu = parseIntValue(et[0])
1448+ let ev = parseIntValue(et[1])
1449+ let ew = split(dc[1], ":")
1450+ let ex = ew[0]
1451+ let ey = parseIntValue(es[bO])
1452+ if (if ((ey > (lastBlock.timestamp + bm)))
14171453 then true
1418- else ((lastBlock.timestamp - aV) > eo))
1454+ else ((lastBlock.timestamp - bm) > ey))
14191455 then throw("signature outdated")
14201456 else {
1421- let ep = em[1]
1422- let eq = valueOrElse(getString(ah(toString(cf.originCaller))), "")
1423- if ((eq != ep))
1424- then throw(((("Tx ids don't match! In state: " + eq) + ", in msg: ") + ep))
1457+ let ez = ew[1]
1458+ let eA = valueOrElse(getString(aj(toString(cp.originCaller))), "")
1459+ if ((eA != ez))
1460+ then throw(((("Tx ids don't match! In state: " + eA) + ", in msg: ") + ez))
14251461 else {
1426- let aJ = toString(cf.caller)
1427- let aD = valueOrErrorMessage(getString(aB(aJ)), "You don't have a duck staked")
1428- let er = aF(aD)
1429- let es = valueOrElse(getInteger(er), 100)
1430- if ((es != ek))
1431- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(er), 100))) + " from state does not match one from flight log=") + toString(ek)))
1432- else if ((0 >= ek))
1462+ let aL = toString(cp.caller)
1463+ let aF = valueOrErrorMessage(getString(aD(aL)), "You don't have a duck staked")
1464+ let eB = aH(aF)
1465+ let eC = valueOrElse(getInteger(eB), 100)
1466+ if ((eC != eu))
1467+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eB), 100))) + " from state does not match one from flight log=") + toString(eu)))
1468+ else if ((0 >= eu))
14331469 then throw("You can't fly with zero health")
14341470 else {
1435- let fY = aE(aD)
1436- let eH = valueOrElse(getString(fY), u)
1437- if ((en == eH))
1471+ let gi = aG(aF)
1472+ let eR = valueOrElse(getString(gi), u)
1473+ if ((ex == eR))
14381474 then throw("You can't fly to the same location")
14391475 else {
1440- let et = if ((size(ei) > by))
1441- then ei[by]
1476+ let eD = if ((size(es) > bP))
1477+ then es[bP]
14421478 else ""
1443- let eu = if (if ((el > 0))
1444- then (et == "$")
1479+ let eE = if (if ((ev > 0))
1480+ then (eD == "$")
14451481 else false)
1446- then aM(invoke(ae, "sendUsdtPrize", [aJ], nil))
1482+ then aS(invoke(ag, "sendUsdtPrize", [aL], nil))
14471483 else 0
1448- $Tuple2([StringEntry(fY, if ((el > 0))
1449- then en
1450- else eH), IntegerEntry(er, el), fT], eu)
1484+ $Tuple2([StringEntry(gi, if ((ev > 0))
1485+ then ex
1486+ else eR), IntegerEntry(eB, ev), gd], eE)
14511487 }
14521488 }
14531489 }
14541490 }
14551491 }
14561492 }
14571493
14581494
14591495
1460-@Callable(cf)
1461-func setHealth (gb,aD) = {
1462- let fT = fQ(cf)
1463- if (if ((0 > gb))
1496+@Callable(cp)
1497+func setHealth (gl,aF) = {
1498+ let gd = ga(cp)
1499+ if (if ((0 > gl))
14641500 then true
1465- else (gb > 100))
1501+ else (gl > 100))
14661502 then throw("HP should be within 0..100")
1467- else [IntegerEntry(aF(aD), gb), fT]
1468- }
1469-
1470-
1471-
1472-@Callable(cf)
1473-func heal (gd,ge) = {
1474- let fT = fQ(cf)
1475- if (if ((1 > gd))
1503+ else [IntegerEntry(aH(aF), gl), gd]
1504+ }
1505+
1506+
1507+
1508+@Callable(cp)
1509+func heal (gn,go) = {
1510+ let gd = ga(cp)
1511+ if (if ((1 > gn))
14761512 then true
1477- else (gd > 3))
1513+ else (gn > 3))
14781514 then throw("MedKit levels 1..3 only")
1479- else if ((0 >= ge))
1480- then throw(("Quantity should be positive! " + toString(ge)))
1515+ else if ((0 >= go))
1516+ then throw(("Quantity should be positive! " + toString(go)))
14811517 else {
1482- let aD = valueOrErrorMessage(getString(aB(toString(cf.caller))), "You don't have a duck staked")
1483- let er = aF(aD)
1484- let gf = valueOrElse(getInteger(er), 100)
1485- if ((gf >= 100))
1518+ let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked")
1519+ let eB = aH(aF)
1520+ let gp = valueOrElse(getInteger(eB), 100)
1521+ if ((gp >= 100))
14861522 then throw("HP should be < 100 to heal")
14871523 else {
1488- let cO = aC(aD)
1489- let dB = cN(cO)
1490- let gg = (gd - 1)
1491- let gh = if ((dB[P] == ""))
1524+ let cY = aE(aF)
1525+ let dL = cX(cY)
1526+ let gq = (gn - 1)
1527+ let gr = if ((dL[R] == ""))
14921528 then nil
1493- else split(dB[P], "_")
1494- let gi = if ((size(gh) > gg))
1495- then parseIntValue(gh[gg])
1529+ else split(dL[R], "_")
1530+ let gs = if ((size(gr) > gq))
1531+ then parseIntValue(gr[gq])
14961532 else 0
1497- if ((ge > gi))
1498- then throw(((("You have only " + toString(gi)) + " of ") + v[gg]))
1533+ if ((go > gs))
1534+ then throw(((("You have only " + toString(gs)) + " of ") + x[gq]))
14991535 else {
1500- func gj (bG,gk) = {
1501- let aO = bG._2
1502- let cB = if ((size(gh) > aO))
1503- then parseIntValue(gh[aO])
1536+ func gt (bX,gu) = {
1537+ let aT = bX._2
1538+ let cL = if ((size(gr) > aT))
1539+ then parseIntValue(gr[aT])
15041540 else 0
1505- let gl = toString(if ((aO == gg))
1506- then (cB - ge)
1507- else cB)
1508- $Tuple2((bG._1 :+ gl), (aO + 1))
1541+ let gv = toString(if ((aT == gq))
1542+ then (cL - go)
1543+ else cL)
1544+ $Tuple2((bX._1 :+ gv), (aT + 1))
15091545 }
15101546
1511- let gm = ( let bI = x
1512- let bJ = size(bI)
1513- let bK = $Tuple2(nil, 0)
1514- func bL (bM,bN) = if ((bN >= bJ))
1515- then bM
1516- else gj(bM, bI[bN])
1517-
1518- func bO (bM,bN) = if ((bN >= bJ))
1519- then bM
1547+ let gw = ( let bb = z
1548+ let bc = size(bb)
1549+ let bd = $Tuple2(nil, 0)
1550+ func be (bf,bg) = if ((bg >= bc))
1551+ then bf
1552+ else gt(bf, bb[bg])
1553+
1554+ func bh (bf,bg) = if ((bg >= bc))
1555+ then bf
15201556 else throw("List size exceeds 50")
15211557
1522- bO(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bL(bK, 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))._1
1523- let gn = (gf + aU[(gd - 1)])
1524- $Tuple2([IntegerEntry(er, gn), StringEntry(cO, makeString_2C([dB[M], dB[N], dB[O], makeString(gm, "_")], ":")), fT], gn)
1558+ bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 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))._1
1559+ let gx = (gp + bl[(gn - 1)])
1560+ $Tuple2([IntegerEntry(eB, gx), StringEntry(cY, makeString_2C([dL[O], dL[P], dL[Q], makeString(gw, "_")], ":")), gd], gx)
15251561 }
15261562 }
15271563 }
15281564 }
15291565
15301566
15311567
1532-@Callable(cf)
1533-func healES (gd,ge) = {
1534- let fT = fQ(cf)
1535- $Tuple2([fT], 0)
1536- }
1537-
1538-
1539-
1540-@Callable(cf)
1541-func updateBackpack (aD,go) = {
1542- let fT = fQ(cf)
1543- if ((cf.caller != af))
1568+@Callable(cp)
1569+func healES () = {
1570+ let gd = ga(cp)
1571+ if ((size(cp.payments) != 1))
1572+ then throw("Exactly one payment required")
1573+ else {
1574+ let ge = value(cp.payments[0])
1575+ if ((ge.assetId != b))
1576+ then throw("Allowed USDT payment only!")
1577+ else {
1578+ let aF = valueOrErrorMessage(getString(aD(toString(cp.caller))), "You don't have a duck staked")
1579+ let eB = aH(aF)
1580+ let gp = valueOrElse(getInteger(eB), 100)
1581+ if ((gp > 0))
1582+ then throw("HP should be 0 to call Emergency Service")
1583+ else {
1584+ let cY = aE(aF)
1585+ let dL = cX(cY)
1586+ let gr = if ((dL[R] == ""))
1587+ then nil
1588+ else split(dL[R], "_")
1589+ let gy = if ((size(gr) > 0))
1590+ then parseIntValue(gr[0])
1591+ else 0
1592+ let gz = if ((size(gr) > 1))
1593+ then parseIntValue(gr[1])
1594+ else 0
1595+ let gA = if ((size(gr) > 2))
1596+ then parseIntValue(gr[2])
1597+ else 0
1598+ if (if (if ((gy > 0))
1599+ then true
1600+ else (gz > 0))
1601+ then true
1602+ else (gA > 0))
1603+ then throw("You have to use own Medical Kit")
1604+ else {
1605+ let gB = getString(ah, aM())
1606+ let gC = if (isDefined(gB))
1607+ then split(value(gB), "_")
1608+ else nil
1609+ let gD = if ((size(gC) > 0))
1610+ then parseIntValue(gC[0])
1611+ else 0
1612+ if ((0 >= gD))
1613+ then throw("There are no Medical Kits L1 at Emergency Service storage")
1614+ else {
1615+ let gx = (gp + bl[0])
1616+ let gE = makeString([toString((gD - 1)), removeByIndex(gC, 0)], "_")
1617+ let aX = split(z[0], "_")
1618+ let gF = aW(aX)
1619+ let gG = fraction((gF * w), v, 10)
1620+ if ((ge.amount != gG))
1621+ then throw(("Payment attached should be " + toString(gG)))
1622+ else {
1623+ let ci = aP(invoke(ah, "updateEsStorage", [gE], nil))
1624+ $Tuple2([IntegerEntry(eB, gx), gd], ci)
1625+ }
1626+ }
1627+ }
1628+ }
1629+ }
1630+ }
1631+ }
1632+
1633+
1634+
1635+@Callable(cp)
1636+func updateBackpack (aF,gH) = {
1637+ let gd = ga(cp)
1638+ if ((cp.caller != ah))
15441639 then throw("permission denied")
1545- else $Tuple2([StringEntry(aC(aD), go), fT], go)
1546- }
1547-
1548-
1549-
1550-@Callable(cf)
1640+ else $Tuple2([StringEntry(aE(aF), gH), gd], gH)
1641+ }
1642+
1643+
1644+
1645+@Callable(cp)
15511646 func buySLand () = {
1552- let fT = fQ(cf)
1553- if ((size(cf.payments) != 1))
1647+ let gd = ga(cp)
1648+ if ((size(cp.payments) != 1))
15541649 then throw("Exactly one payment required")
15551650 else {
1556- let fU = value(cf.payments[0])
1557- if ((fU.assetId != b))
1651+ let ge = value(cp.payments[0])
1652+ if ((ge.assetId != b))
15581653 then throw("Allowed USDT payment only!")
1559- else if ((fU.amount != ba))
1560- then throw(("Payment attached should be " + toString(ba)))
1654+ else if ((ge.amount != br))
1655+ then throw(("Payment attached should be " + toString(br)))
15611656 else {
1562- let bY = dX(cf.caller, cf.transactionId)
1563- $Tuple2(((bY._1 :+ ScriptTransfer(af, fU.amount, b)) :+ fT), bY._2._1)
1657+ let ci = eh(cp.caller, cp.transactionId)
1658+ $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2._1)
15641659 }
15651660 }
15661661 }
15671662
15681663
15691664
1570-@Callable(cf)
1571-func expedition (eg,eh) = {
1572- let fT = fQ(cf)
1573- if ((size(cf.payments) != 0))
1665+@Callable(cp)
1666+func expedition (eq,er) = {
1667+ let gd = ga(cp)
1668+ if ((size(cp.payments) != 0))
15741669 then throw("No payments required")
15751670 else {
1576- let bY = ef(true, cf.caller, cf.transactionId, eg, eh)
1577- $Tuple2((bY._1 :+ fT), $Tuple2(bY._2, bY._3))
1578- }
1579- }
1580-
1581-
1582-
1583-@Callable(cf)
1584-func upgradeInfra (au) = {
1585- let fT = fQ(cf)
1586- if ((size(cf.payments) != 0))
1671+ let ci = ep(true, cp.caller, cp.transactionId, eq, er)
1672+ $Tuple2((ci._1 :+ gd), $Tuple2(ci._2, ci._3))
1673+ }
1674+ }
1675+
1676+
1677+
1678+@Callable(cp)
1679+func upgradeInfra (aw) = {
1680+ let gd = ga(cp)
1681+ if ((size(cp.payments) != 0))
15871682 then throw("No payments required")
15881683 else {
1589- let bY = fd(true, cf.caller, 0, au)
1590- $Tuple2((bY._1 :+ fT), bY._2)
1591- }
1592- }
1593-
1594-
1595-
1596-@Callable(cf)
1597-func upgradeInfraUsdt (au) = if ((cf.caller != this))
1684+ let ci = fn(true, cp.caller, 0, aw)
1685+ $Tuple2((ci._1 :+ gd), ci._2)
1686+ }
1687+ }
1688+
1689+
1690+
1691+@Callable(cp)
1692+func upgradeInfraUsdt (aw) = if ((cp.caller != this))
15981693 then throw("Permission denied")
15991694 else {
1600- let fT = fQ(cf)
1601- if ((size(cf.payments) != 1))
1695+ let gd = ga(cp)
1696+ if ((size(cp.payments) != 1))
16021697 then throw("Exactly one payment required")
16031698 else {
1604- let fU = value(cf.payments[0])
1605- if ((fU.assetId != b))
1699+ let ge = value(cp.payments[0])
1700+ if ((ge.assetId != b))
16061701 then throw("Allowed USDT payment only!")
16071702 else {
1608- let bY = fd(false, cf.caller, fU.amount, au)
1609- $Tuple2(((bY._1 :+ ScriptTransfer(af, fU.amount, b)) :+ fT), bY._2)
1703+ let ci = fn(false, cp.caller, ge.amount, aw)
1704+ $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2)
16101705 }
16111706 }
16121707 }
16131708
16141709
16151710
1616-@Callable(cf)
1617-func activateArtifact (gp,au) = {
1618- let fT = fQ(cf)
1619- if ((size(cf.payments) != 0))
1711+@Callable(cp)
1712+func activateArtifact (gI,aw) = {
1713+ let gd = ga(cp)
1714+ if ((size(cp.payments) != 0))
16201715 then throw("No payments required")
16211716 else {
1622- let bY = {
1623- let c = gp
1717+ let ci = {
1718+ let c = gI
16241719 if (("PRESALE" == c))
1625- then fp(toString(cf.caller), au)
1720+ then fz(toString(cp.caller), aw)
16261721 else throw("Unknown artifact")
16271722 }
1628- (bY :+ fT)
1629- }
1630- }
1631-
1632-
1633-
1634-@Callable(cf)
1635-func mergeLands (fu) = {
1636- let fT = fQ(cf)
1637- if ((size(cf.payments) != 0))
1723+ (ci :+ gd)
1724+ }
1725+ }
1726+
1727+
1728+
1729+@Callable(cp)
1730+func mergeLands (fE) = {
1731+ let gd = ga(cp)
1732+ if ((size(cp.payments) != 0))
16381733 then throw("No payments required")
16391734 else {
1640- let bY = fO(true, toString(cf.caller), 0, fu, cf.transactionId)
1641- $Tuple2((bY._1 :+ fT), bY._2)
1642- }
1643- }
1644-
1645-
1646-
1647-@Callable(cf)
1648-func mergeLandsUsdt (fu) = {
1649- let fT = fQ(cf)
1650- if ((size(cf.payments) != 1))
1735+ let ci = fY(true, toString(cp.caller), 0, fE, cp.transactionId)
1736+ $Tuple2((ci._1 :+ gd), ci._2)
1737+ }
1738+ }
1739+
1740+
1741+
1742+@Callable(cp)
1743+func mergeLandsUsdt (fE) = {
1744+ let gd = ga(cp)
1745+ if ((size(cp.payments) != 1))
16511746 then throw("Exactly one payment required")
16521747 else {
1653- let fU = value(cf.payments[0])
1654- if ((fU.assetId != b))
1748+ let ge = value(cp.payments[0])
1749+ if ((ge.assetId != b))
16551750 then throw("Allowed USDT payment only!")
16561751 else {
1657- let bY = fO(false, toString(cf.caller), fU.amount, fu, cf.transactionId)
1658- $Tuple2(((bY._1 :+ ScriptTransfer(af, fU.amount, b)) :+ fT), bY._2)
1752+ let ci = fY(false, toString(cp.caller), ge.amount, fE, cp.transactionId)
1753+ $Tuple2(((ci._1 :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), ci._2)
16591754 }
16601755 }
16611756 }
16621757
16631758
16641759
1665-@Callable(cf)
1666-func cargoExchange (gq,au) = {
1667- let fT = fQ(cf)
1668- if ((size(cf.payments) != 0))
1760+@Callable(cp)
1761+func cargoExchange (gJ,aw) = {
1762+ let gd = ga(cp)
1763+ if ((size(cp.payments) != 0))
16691764 then throw("No payments required")
16701765 else {
1671- let dA = split_4C(gq, ":")
1672- let ai = toString(cf.originCaller)
1673- let eK = value(assetInfo(fromBase58String(au)))
1674- let eL = am(au)
1675- if (!(isDefined(getInteger(eL))))
1676- then throw((eK.name + " is not staked"))
1766+ let dK = split_4C(gJ, ":")
1767+ let ak = toString(cp.originCaller)
1768+ let eU = value(assetInfo(fromBase58String(aw)))
1769+ let eV = ao(aw)
1770+ if (!(isDefined(getInteger(eV))))
1771+ then throw((eU.name + " is not staked"))
16771772 else {
1678- let eN = valueOrErrorMessage(getString(aj(au)), (("NFT " + eK.name) + " is orphaned"))
1679- if ((eN != ai))
1773+ let eX = valueOrErrorMessage(getString(al(aw)), (("NFT " + eU.name) + " is orphaned"))
1774+ if ((eX != ak))
16801775 then throw((i + " is not yours"))
16811776 else {
1682- let dk = (aP(split(eK.description, "_")[A]) / m)
1683- let dl = valueOrElse(getInteger(an(au)), 0)
1684- let aD = valueOrErrorMessage(getString(aB(ai)), "You don't have a duck staked")
1685- let eH = valueOrElse(getString(aE(aD)), u)
1686- let eI = split(value(eH), "_")
1687- if ((eI[aK] != "L"))
1688- then throw((("Duck location type is " + eI[aK]) + ", but should be L"))
1689- else if ((eI[aL] != au))
1690- then throw(("Duck should be on the land " + au))
1777+ let du = (aU(split(eU.description, "_")[C]) / m)
1778+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1779+ let aF = valueOrErrorMessage(getString(aD(ak)), "You don't have a duck staked")
1780+ let eR = valueOrElse(getString(aG(aF)), u)
1781+ let eS = split(value(eR), "_")
1782+ if ((eS[aN] != "L"))
1783+ then throw((("Duck location type is " + eS[aN]) + ", but should be L"))
1784+ else if ((eS[aO] != aw))
1785+ then throw(("Duck should be on the land " + aw))
16911786 else {
1692- let dj = at(au)
1693- let cU = di(dj, dk, dl)
1694- let cO = aC(aD)
1695- let dB = cN(cO)
1696- let bY = dz(dA, cU, dB)
1697- let dr = split(cU[H], "_")
1698- let fa = (parseIntValue(dr[J]) + bY._7)
1699- let fb = (parseIntValue(dr[K]) - bY._7)
1700-[StringEntry(cO, makeString_2C([dB[M], bY._4, bY._5, bY._6], ":")), StringEntry(dj, makeString_2C([cU[D], bY._1, bY._2, bY._3, makeString([dr[I], toString(fa), toString(fb), dr[L]], "_")], ":")), fT]
1787+ let dt = av(aw)
1788+ let de = ds(dt, du, dv)
1789+ let cY = aE(aF)
1790+ let dL = cX(cY)
1791+ let ci = dJ(dK, de, dL)
1792+ let dB = split(de[J], "_")
1793+ let fk = (parseIntValue(dB[L]) + ci._7)
1794+ let fl = (parseIntValue(dB[M]) - ci._7)
1795+[StringEntry(cY, makeString_2C([dL[O], ci._4, ci._5, ci._6], ":")), StringEntry(dt, makeString_2C([de[F], ci._1, ci._2, ci._3, makeString([dB[K], toString(fk), toString(fl), dB[N]], "_")], ":")), gd]
17011796 }
17021797 }
17031798 }
17041799 }
17051800 }
17061801
17071802
17081803
1709-@Callable(cf)
1710-func saveWarehouse (dn,au) = {
1711- let fT = fQ(cf)
1712- if ((cf.caller != af))
1804+@Callable(cp)
1805+func saveWarehouse (dx,aw) = {
1806+ let gd = ga(cp)
1807+ if ((cp.caller != ah))
17131808 then throw("Access denied")
17141809 else {
1715- let dj = at(au)
1716- let do = split_4C(dn, ":")
1717- if ((size(do) != 5))
1810+ let dt = av(aw)
1811+ let dy = split_4C(dx, ":")
1812+ if ((size(dy) != 5))
17181813 then throw("warehouse string should contain 4 ':' separators")
17191814 else {
1720- let gr = split(do[H], "_")[I]
1721- let fa = cT(do)
1722- let gs = cQ(do[D])
1723- let fb = ((gs - parseIntValue(gr)) - fa)
1724- let gt = makeString_2C([do[D], do[E], do[F], do[G], makeString([gr, toString(fa), toString(fb), toString(gs)], "_")], ":")
1725- $Tuple2([StringEntry(dj, gt), fT], gt)
1815+ let gK = split(dy[J], "_")[K]
1816+ let fk = dd(dy)
1817+ let gL = da(dy[F])
1818+ let fl = ((gL - parseIntValue(gK)) - fk)
1819+ let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([gK, toString(fk), toString(fl), toString(gL)], "_")], ":")
1820+ $Tuple2([StringEntry(dt, gM), gd], gM)
17261821 }
17271822 }
17281823 }
17291824
17301825
17311826
1732-@Callable(cf)
1733-func fixWarehouseFormat (au) = if ((cf.caller != ae))
1827+@Callable(cp)
1828+func fixWarehouseFormat (aw) = if ((cp.caller != ag))
17341829 then throw("Access denied")
17351830 else {
1736- let dj = at(au)
1737- let eK = value(assetInfo(fromBase58String(au)))
1738- let dk = (aP(split(eK.description, "_")[A]) / m)
1739- let dl = valueOrElse(getInteger(an(au)), 0)
1740- let do = di(dj, dk, dl)
1741- let gr = aM(invoke(af, "recalcLockedVolumeREADONLY", [au, do], nil))
1742- let fa = cT(do)
1743- let gs = cQ(do[D])
1744- let fb = ((gs - gr) - fa)
1745- let gt = makeString_2C([do[D], do[E], do[F], do[G], makeString([toString(gr), toString(fa), toString(fb), toString(gs)], "_")], ":")
1746- $Tuple2([StringEntry(dj, gt)], gt)
1831+ let dt = av(aw)
1832+ let eU = value(assetInfo(fromBase58String(aw)))
1833+ let du = (aU(split(eU.description, "_")[C]) / m)
1834+ let dv = valueOrElse(getInteger(ap(aw)), 0)
1835+ let dy = ds(dt, du, dv)
1836+ let gK = aS(invoke(ah, "recalcLockedVolumeREADONLY", [aw, dy], nil))
1837+ let fk = dd(dy)
1838+ let gL = da(dy[F])
1839+ let fl = ((gL - gK) - fk)
1840+ let gM = makeString_2C([dy[F], dy[G], dy[H], dy[I], makeString([toString(gK), toString(fk), toString(fl), toString(gL)], "_")], ":")
1841+ $Tuple2([StringEntry(dt, gM)], gM)
17471842 }
17481843
17491844
17501845
1751-@Callable(cf)
1752-func setCustomName (ak,fD,ap) = {
1753- let fT = fQ(cf)
1754- if ((size(cf.payments) != 1))
1846+@Callable(cp)
1847+func setCustomName (am,fN,ar) = {
1848+ let gd = ga(cp)
1849+ if ((size(cp.payments) != 1))
17551850 then throw("Exactly one payment required")
17561851 else {
1757- let fU = value(cf.payments[0])
1758- if ((fU.assetId != b))
1852+ let ge = value(cp.payments[0])
1853+ if ((ge.assetId != b))
17591854 then throw("Allowed USDT payment only!")
1760- else if ((fU.amount != aW))
1761- then throw(("Payment should be " + toString(aW)))
1762- else if (contains(fD, "__"))
1763- then throw(("Name should not contain '__': " + fD))
1764- else if ((size(fD) > aX))
1765- then throw(("Name too long, maxLength=" + toString(aX)))
1855+ else if ((ge.amount != bn))
1856+ then throw(("Payment should be " + toString(bn)))
1857+ else if (contains(fN, "__"))
1858+ then throw(("Name should not contain '__': " + fN))
1859+ else if ((size(fN) > bo))
1860+ then throw(("Name too long, maxLength=" + toString(bo)))
17661861 else {
1767- let ai = toString(cf.originCaller)
1768- let gu = {
1769- let c = ap
1862+ let ak = toString(cp.originCaller)
1863+ let gN = {
1864+ let c = ar
17701865 if (("ACCOUNT" == c))
17711866 then {
1772- let gv = br(fD)
1773- let gw = getString(gv)
1774- if (isDefined(gw))
1775- then throw(("Name already registered: " + fD))
1867+ let gO = bI(fN)
1868+ let gP = getString(gO)
1869+ if (isDefined(gP))
1870+ then throw(("Name already registered: " + fN))
17761871 else {
1777- let gx = ax(ai)
1778- let gy = getString(gx)
1779- let gz = if (isDefined(gy))
1780- then [DeleteEntry(br(value(gy)))]
1872+ let gQ = az(ak)
1873+ let gR = getString(gQ)
1874+ let gS = if (isDefined(gR))
1875+ then [DeleteEntry(bI(value(gR)))]
17811876 else nil
1782- ((gz :+ StringEntry(gx, fD)) :+ StringEntry(gv, ai))
1877+ ((gS :+ StringEntry(gQ, fN)) :+ StringEntry(gO, ak))
17831878 }
17841879 }
17851880 else if (("LAND" == c))
17861881 then {
1787- let eK = value(assetInfo(fromBase58String(ak)))
1788- let eL = am(ak)
1789- if (!(isDefined(getInteger(eL))))
1790- then throw((eK.name + " is not staked"))
1882+ let eU = value(assetInfo(fromBase58String(am)))
1883+ let eV = ao(am)
1884+ if (!(isDefined(getInteger(eV))))
1885+ then throw((eU.name + " is not staked"))
17911886 else {
1792- let eN = valueOrErrorMessage(getString(aj(ak)), (("NFT " + eK.name) + " is orphaned"))
1793- if ((eN != ai))
1887+ let eX = valueOrErrorMessage(getString(al(am)), (("NFT " + eU.name) + " is orphaned"))
1888+ if ((eX != ak))
17941889 then throw((i + " is not yours"))
17951890 else {
1796- let gv = bl(fD)
1797- let gw = getString(gv)
1798- if (isDefined(gw))
1799- then throw(("Name already registered: " + fD))
1891+ let gO = bC(fN)
1892+ let gP = getString(gO)
1893+ if (isDefined(gP))
1894+ then throw(("Name already registered: " + fN))
18001895 else {
1801- let gA = al(ak)
1802- let gy = getString(gA)
1803- let gz = if (isDefined(gy))
1804- then [DeleteEntry(bl(value(gy)))]
1896+ let gT = an(am)
1897+ let gR = getString(gT)
1898+ let gS = if (isDefined(gR))
1899+ then [DeleteEntry(bC(value(gR)))]
18051900 else nil
1806- ((gz :+ StringEntry(gA, fD)) :+ StringEntry(gv, ak))
1901+ ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am))
18071902 }
18081903 }
18091904 }
18101905 }
18111906 else if (("DUCK" == c))
18121907 then {
1813- let eK = value(assetInfo(fromBase58String(ak)))
1814- let eL = am(ak)
1815- if (if (!(isDefined(getInteger(eL))))
1908+ let eU = value(assetInfo(fromBase58String(am)))
1909+ let eV = ao(am)
1910+ if (if (!(isDefined(getInteger(eV))))
18161911 then true
1817- else !(isDefined(getString(aB(ai)))))
1818- then throw((eK.name + " is not staked"))
1912+ else !(isDefined(getString(aD(ak)))))
1913+ then throw((eU.name + " is not staked"))
18191914 else {
1820- let eN = valueOrErrorMessage(getString(aA(ak)), (("NFT " + eK.name) + " is orphaned"))
1821- if ((eN != ai))
1915+ let eX = valueOrErrorMessage(getString(aC(am)), (("NFT " + eU.name) + " is orphaned"))
1916+ if ((eX != ak))
18221917 then throw((j + " is not yours"))
18231918 else {
1824- let gv = bq(fD)
1825- let gw = getString(gv)
1826- if (isDefined(gw))
1827- then throw(("Name already registered: " + fD))
1919+ let gO = bH(fN)
1920+ let gP = getString(gO)
1921+ if (isDefined(gP))
1922+ then throw(("Name already registered: " + fN))
18281923 else {
1829- let gA = aw(ak)
1830- let gy = getString(gA)
1831- let gz = if (isDefined(gy))
1832- then [DeleteEntry(bq(value(gy)))]
1924+ let gT = ay(am)
1925+ let gR = getString(gT)
1926+ let gS = if (isDefined(gR))
1927+ then [DeleteEntry(bH(value(gR)))]
18331928 else nil
1834- ((gz :+ StringEntry(gA, fD)) :+ StringEntry(gv, ak))
1929+ ((gS :+ StringEntry(gT, fN)) :+ StringEntry(gO, am))
18351930 }
18361931 }
18371932 }
18381933 }
18391934 else throw("Unknown entity type")
18401935 }
1841- $Tuple2(((gu :+ ScriptTransfer(af, fU.amount, b)) :+ fT), 0)
1936+ $Tuple2(((gN :+ ScriptTransfer(ah, ge.amount, b)) :+ gd), 0)
18421937 }
18431938 }
18441939 }
18451940
18461941
18471942
1848-@Callable(cf)
1849-func setReferrals (gB,gC) = if ((cf.callerPublicKey != aT))
1943+@Callable(cp)
1944+func setReferrals (gU,gV) = if ((cp.callerPublicKey != bk))
18501945 then throw("Permission denied")
18511946 else {
1852- let fT = fQ(cf)
1853- if ((size(cf.payments) != 0))
1947+ let gd = ga(cp)
1948+ if ((size(cp.payments) != 0))
18541949 then throw("No payments required")
1855- else if (!(isDefined(addressFromString(gB))))
1856- then throw(("Invalid address: " + gB))
1857- else if (!(isDefined(addressFromString(gC))))
1858- then throw(("Invalid address: " + gC))
1950+ else if (!(isDefined(addressFromString(gU))))
1951+ then throw(("Invalid address: " + gU))
1952+ else if (!(isDefined(addressFromString(gV))))
1953+ then throw(("Invalid address: " + gV))
18591954 else {
1860- let gD = bs()
1861- let gE = getString(gD)
1862- let gF = if (isDefined(gE))
1863- then split_4C(value(gE), "_")
1955+ let gW = bJ()
1956+ let gX = getString(gW)
1957+ let gY = if (isDefined(gX))
1958+ then split_4C(value(gX), "_")
18641959 else nil
1865- if (containsElement(gF, gC))
1866- then throw((gC + " is not newbie (already has referrals)"))
1960+ if (containsElement(gY, gV))
1961+ then throw((gV + " is not newbie (already has referrals)"))
18671962 else {
1868- let gG = ay(gC)
1869- let gH = getString(gG)
1870- if (if (isDefined(gH))
1871- then isDefined(addressFromString(value(gH)))
1963+ let gZ = aA(gV)
1964+ let ha = getString(gZ)
1965+ if (if (isDefined(ha))
1966+ then isDefined(addressFromString(value(ha)))
18721967 else false)
1873- then throw(((gC + " already has refBy: ") + value(gH)))
1968+ then throw(((gV + " already has refBy: ") + value(ha)))
18741969 else {
1875- let gI = az(gB)
1876- let gJ = getString(gI)
1877- let gK = if (isDefined(gJ))
1878- then split_4C(value(gJ), "_")
1970+ let hb = aB(gU)
1971+ let hc = getString(hb)
1972+ let hd = if (isDefined(hc))
1973+ then split_4C(value(hc), "_")
18791974 else nil
1880- if (containsElement(gK, gC))
1881- then throw((((gB + " already contains ") + gC) + " within referrals"))
1975+ if (containsElement(hd, gV))
1976+ then throw((((gU + " already contains ") + gV) + " within referrals"))
18821977 else {
1883- let gL = makeString_2C((gK :+ gC), "_")
1884- let gM = makeString_2C((gF :+ gB), "_")
1885- $Tuple2([StringEntry(gG, gB), StringEntry(gI, gL), StringEntry(gD, gM), fT], 0)
1978+ let he = makeString_2C((hd :+ gV), "_")
1979+ let hf = makeString_2C((gY :+ gU), "_")
1980+ $Tuple2([StringEntry(gZ, gU), StringEntry(hb, he), StringEntry(gW, hf), gd], 0)
18861981 }
18871982 }
18881983 }
18891984 }
18901985 }
18911986
18921987
18931988
1894-@Callable(cf)
1895-func splitByGlobalWeightsREADONLY (dy) = $Tuple2(nil, bP(dy))
1896-
1897-
1898-
1899-@Callable(cf)
1900-func splitByGlobalAndLocalWeightsREADONLY (gN,gO,ci) = {
1901- let cb = ch(ci)
1902- $Tuple2(nil, $Tuple2(bP(gN), bA(gO, cb)))
1903- }
1904-
1905-
1906-
1907-@Callable(cf)
1908-func getBackpackREADONLY (aD) = $Tuple2(nil, makeString(cN(aC(aD)), ":"))
1909-
1910-
1911-
1912-@Callable(cf)
1913-func getWarehouseREADONLY (au) = {
1914- let eK = value(assetInfo(fromBase58String(au)))
1915- let dk = (aP(split(eK.description, "_")[A]) / m)
1916- let dl = valueOrElse(getInteger(an(au)), 0)
1917- $Tuple2(nil, makeString_2C(di(at(au), dk, dl), ":"))
1989+@Callable(cp)
1990+func splitByGlobalWeightsREADONLY (dI) = $Tuple2(nil, bZ(dI))
1991+
1992+
1993+
1994+@Callable(cp)
1995+func splitByGlobalAndLocalWeightsREADONLY (hg,hh,cs) = {
1996+ let cl = cr(cs)
1997+ $Tuple2(nil, $Tuple2(bZ(hg), bR(hh, cl)))
1998+ }
1999+
2000+
2001+
2002+@Callable(cp)
2003+func getBackpackREADONLY (aF) = $Tuple2(nil, makeString(cX(aE(aF)), ":"))
2004+
2005+
2006+
2007+@Callable(cp)
2008+func getWarehouseREADONLY (aw) = {
2009+ let eU = value(assetInfo(fromBase58String(aw)))
2010+ let du = (aU(split(eU.description, "_")[C]) / m)
2011+ let dv = valueOrElse(getInteger(ap(aw)), 0)
2012+ $Tuple2(nil, makeString_2C(ds(av(aw), du, dv), ":"))
19182013 }
19192014
19202015

github/deemru/w8io/026f985 
820.31 ms