tx · GdBmar5LDBNngKGezh1CvQkUhdmduvM9t1HhNWbUK8i

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.10400000 Waves

2023.11.12 14:29 [2840066] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "GdBmar5LDBNngKGezh1CvQkUhdmduvM9t1HhNWbUK8i", "fee": 10400000, "feeAssetId": null, "timestamp": 1699788589361, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "a9RNu3oBz67X8Qt1XWPpeuWjmRqwymwGyBVATBi8UQM3cwyxRifRNTunQ6Djer3ebRPPtKbS4FqCZKJv1qPXGZT" ], "script": "base64:BgLgAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASABIECgICAhIAEgMKAQgSBAoCCAgSAwoBGBIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIECgIICBIDCgEIEgASABIDCgEIEgMKAQgSBgoECAEIARIAEgQKAgICEgQKAgICEgASAwoBCBIApgIACURBWU1JTExJUwCAuJkpARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIABlNDQUxFOACAwtcvAAx4cExldmVsU2NhbGUAgBkAD3hwTGV2ZWxSZWNpcFBvdwCgHwASbnVtUG9pbnRzT25MZXZlbFVwAAMADnJvYmJlcnlDb3N0TWluAIDC1y8AFHJvYmJlcnlDb29sZG93bkNvZWZmAJADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAALc2VnQmFja3BhY2sAAAALTlVNU0VHTUVOVFMABgAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4AEGxhbmRSb2JDb29sZG93bnMJAMwIAgAACQDMCAIAwM8kCQDMCAIAoPc2CQDMCAIAgNzMFAkAzAgCAICupgoFA25pbAAOTUlOX1JFU19UT19ST0IAgNrECQAMcm9iSWR4TG9ja2VkAAEAC2R1Y2tJZHhGcmVlAAAAEGR1Y2tJZHhQcmVwYXJpbmcAAQENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgEOa2V5U2F2ZWRIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICDHNhdmVkSGVhbHRoXwULZHVja0Fzc2V0SWQBEGtleVNhdmVkTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDnNhdmVkTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEMa2V5RHVja0J1ZmZzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQnVmZnNfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeVRpbWVfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeUNvc3RfBQtkdWNrQXNzZXRJZAETa2V5TGFuZFJvYmJlcnlTdGF0ZQELbGFuZEFzc2V0SWQJAKwCAgIRbGFuZFJvYmJlcnlTdGF0ZV8FC2xhbmRBc3NldElkARJrZXlMYW5kQ29vbGRvd25FVEEBC2xhbmRBc3NldElkCQCsAgICEGxhbmRDb29sZG93bkVUQV8FC2xhbmRBc3NldElkARNrZXlEdWNrUm9iYmVyeVN0YXRlAQtkdWNrQXNzZXRJZAkArAICAhFkdWNrUm9iYmVyeVN0YXRlXwULZHVja0Fzc2V0SWQBE2tleUxvY2tlZExhbmRCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEWxvY2tlZExhbmRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIUZGVsaXZlcnlEZWxheUJ5RHVja18FC2R1Y2tBc3NldElkARRrZXlVc2VyRGVsaXZlcnlDb3VudAEEYWRkcgkArAICAhJ1c2VyRGVsaXZlcnlDb3VudF8FBGFkZHIBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBGFkZHIJAKwCAgIUdXNlckxhc3REZWxpdmVyeURheV8FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAAtST0JPX1BSRUZJWAIEUk9CTwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgAZAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwASVEVOX01JTlVURVNfTUlMTElTAMDPJAAXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMAAQAaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQAgOHrFwAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEGZvcnRBbGxvd2VkUHJvZHMJAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwUDbmlsAAlySWR4Q29lZmYABgAKcklkeEVmZmVjdAAIABBySWR4UmVxdWlyZW1lbnRzAAkACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgNub18FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICBWxjbmFfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICA2xhcwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBnN0dGFvXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICA3doXwULbGFuZEFzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBF2tleUZvcnRpZmljYXRpb25zQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAg9mb3J0aWZpY2F0aW9uc18FC2xhbmRBc3NldElkARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQtkdWNrQXNzZXRJZAkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrXwULZHVja0Fzc2V0SWQBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBGFkZHIJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZER1Y2tCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQh1c2VyQWRkcgkArAICAholcyVzX191c2VyR3dsUmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMAD2RlbGl2ZXJ5RnVuZEtleQIMZGVsaXZlcnlGdW5kABFkZWxpdmVyeUxvY2tlZEtleQIOZGVsaXZlcnlMb2NrZWQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBA3RJZAkArAICAhYlcyVkX190b3VyU3RhdGljRGF0YV9fCQCkAwEFA3RJZAEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEDdElkCQCsAgICFyVzJWRfX3RvdXJEeW5hbWljRGF0YV9fCQCkAwEFA3RJZAEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHyVzJWQlc19fYmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18ACWlkeFN0YXRpYwAAAAppZHhEeW5hbWljAAEACnRTdGF0aWNFbmQABgAOdER5bmFtaWNTdGF0dXMAAQELZ2V0VG91ckRhdGECDHRvdXJDb250cmFjdAN0SWQEBnN0YXRpYwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMdG91ckNvbnRyYWN0CQEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwQHZHluYW1pYwkAvAkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMdG91ckNvbnRyYWN0CQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18JAMwIAgUGc3RhdGljCQDMCAIFB2R5bmFtaWMFA25pbAEOaXNJblRvdXJuYW1lbnQCDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwEMaXNJbkRlbGl2ZXJ5AQhsb2NhdGlvbgQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlzdGFydFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFCGxvY0lkeElkAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBRAkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93BwkAZwIAAwUIZGlzdGFuY2UHAQ9pc1VzdWFsTG9jYXRpb24BCGxvY2F0aW9uBAdsb2NUeXBlCQCRAwIJALUJAgUIbG9jYXRpb24CAV8FCmxvY0lkeFR5cGUDCQECIT0CBQdsb2NUeXBlAgFUCQECIT0CBQdsb2NUeXBlAgFEBwEJb25NaXNzaW9uAgx0b3VyQ29udHJhY3QIbG9jYXRpb24EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQx0b3VyQ29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUMdG91ckNvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAdsb2NUeXBlCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQMJAAACBQdsb2NUeXBlAgFEBgMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUAQxjaGVhdEF0dGVtcHQDBm9sZExvYwZuZXdMb2MJY2hlYXRDYXNlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFkNoZWF0IGF0dGVtcHQ6IG9sZExvYz0FBm9sZExvYwIJLCBuZXdMb2M9BQZuZXdMb2MCBywgY2FzZT0JAKQDAQUJY2hlYXRDYXNlABZLU19TRVBBUkFURV9QVUJMSUNfS0VZBwAYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFBwATS1NfQUxMT1dfUk9CT19EVUNLUwYACkRBWV9NSUxMSVMAgLiZKQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AE0RFTElWRVJZX1BVTklTSE1FTlQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgJeTBQMJAAACAQFUBQckbWF0Y2gwAKD3NgkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnRvdXJuYW1lbnRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1RvdXJuYW1lbnREYXBwAA1hY3Jlc0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUPSWR4Q2ZnQWNyZXNEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgITZmluaXNoQmxvY2tGb3JBZGRyXwUHYWRkcmVzcwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQljb250aW5lbnQJAKwCAgIUcmVzVHlwZXNCeUNvbnRpbmVudF8FCWNvbnRpbmVudAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BCWFzQm9vbGVhbgEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFzBQckbWF0Y2gwBQFzCQACAQIZZmFpbCB0byBjYXN0IGludG8gQm9vbGVhbgEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQEHaXNEaWdpdAEBcwkBCWlzRGVmaW5lZAEJALYJAQUBcwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQBD2dldFJhbmRvbU51bWJlcgMIbWF4VmFsdWUEc2FsdAdlbnRyb3B5BApyYW5kb21IYXNoCQD3AwEJAMsBAgUEc2FsdAUHZW50cm9weQkAagIJALEJAQUKcmFuZG9tSGFzaAUIbWF4VmFsdWUADWluY3ViYXRvckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRWt0VnV4MlJoY2hTTjYzRHNEbzRiNG16NFFxektTZUR2AwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAticmVlZGVyQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BEVnVVNDVIN0VoNWRtdE5iblJOUlN0R3dVTEE3Tlk2SGIDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AA3B1YgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAMFFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkBIKsXV48VZ+NZVEGw1nLrZpvEo9NmXtWZhlDfmDcfsgkIASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAMJAAACAQFUBQckbWF0Y2gwASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAkAAgECDVVua25vd24gY2hhaW4ADEVNUFRZX1BST0Q1MAGQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AICt4gQADEVYUE1BVEVSSUFMUwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACm3YLtqwcDCQAAAgEBVAUHJG1hdGNoMACqp4GzCQkAAgECDVVua25vd24gY2hhaW4AB0VYUFVTRFQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgOWadwMJAAACAQFUBQckbWF0Y2gwAIDlmncJAAIBAg1Vbmtub3duIGNoYWluAA5ST0JPX0RVQ0tfVVNEVACgjQYADFNfQ09TVF9BQ1JFUwCA8ouoCQAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAgRsY25fBQRuYW1lARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICA2xhXwUHbGFuZE51bQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgIFaWxhb18FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIDbG9fBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAEPa2V5TmV4dFJvYm9EdWNrAAIMbmV4dFJvYm9EdWNrAAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgAIZmxIZWFsdGgAAAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4ARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIACQCUCgIFBW9sZEVxBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAMIBQNhY2MCXzIGAwMJAGcCBQNpZHgABgkAZwIACAUDaWR4BwkAAAIFBm5ld0FtdAAABwoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQVvbGRFcQcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1YlVzZWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBDnByb2RTdHJUb0J5dGVzAQdwcm9kU3RyBAVwTGlzdAMJAAACBQdwcm9kU3RyAgAFA25pbAkAvAkCBQdwcm9kU3RyAgFfCgEEdG9CVgIDYWNjBnJlY2lwZQQBagkAaQIJAMgBAQUDYWNjAAgEBGN1cnIDCQBmAgkAkAMBBQVwTGlzdAUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBMaXN0BQFqAAAJAMsBAgUDYWNjCQCaAwEF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CQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJUKAwUFcExpc3QFCG9jY3VwaWVkBQRmcmVlBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQEBm5ld0FtdAMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHCQBlAgUEY3VycgUFY291bnQJAGQCBQRjdXJyBQVjb3VudAQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCBQZuZXdBbXQFDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQRjdXJyBQ5QUk9EVUNUUEtHU0laRQkAlQoDCQDLAQIJAMsBAgUEaGVhZAkAmgMBBQZuZXdBbXQFBHRhaWwJAGQCBQhvY2N1cGllZAUIZGVsdGFWb2wJAGUCBQRmcmVlBQhkZWx0YVZvbAEIYWRkUHJvZEIHBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eARzbG90CWR1Y2tTdGF0cwQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBXN0YXRzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUFc3RhdHMCXzEIBQV0bXBTMAJfMQUEYnBJbgEGZHJlc3NCBAdzZWdMaXN0BnBCeXRl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XwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFCXRlbXBQcm9kQgcFBXN0YXRzCQAAAgUIbmV3UHJvZEIFCG5ld1Byb2RCARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDWRpc3RyaWJ1dGVSZXMEDGN1cnJlbnRXaFJlcw5jdXJyZW50UGFja1JlcwpyZXNUb0NsYWltC3doU3BhY2VMZWZ0BA5yZXNMaXN0VG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzEEDHJlc0FtVG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUMcmVzQW1Ub0NsYWltAAAJAJQKAgkAuQkCBQxjdXJyZW50V2hSZXMCAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8DCQBnAgULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQoBCGFkZExpc3RzAgNhY2MBaQkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUC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eAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEB3doVG90YWwJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCXZvbFByZWZpeAQFd2hTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFd2hLZXkJAKwCAgUJdm9sUHJlZml4Ahs6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6OjAEAndoCQC8CQIFBXdoU3RyAgE6BAp3aE9jY3VwaWVkCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQGd2hMb2Z0AwkAZgIABQkAkAMBBQJ3aAkAuQkCCQDMCAICATAJAMwIAgkApAMBBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdk0CA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWkEA2JwbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaE1hdAUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0EAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFyAl80CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdk0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdlACA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHADCQBmAgkAkAMBBQpjdXJyV2hQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycldoUHJvZAUBaQAABANicHADCQBmAgkAkAMBBQ9jdXJyZW50UGFja1Byb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ9jdXJyZW50UGFja1Byb2QFAWkAAAMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBBQN3aHAJAM0IAggFA2FjYwJfMwkApAMBBQNicHAIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAMJAGYCCQEBLQEFAmFtBQN3aHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sBAFwAwkBAiE9AgkAkAMBBQlwcm9kUGFydHMAAAoAAiRsBQlwcm9kUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFtAl80CgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAlgoEAAAFCmN1cnJXaFByb2QFD2N1cnJlbnRQYWNrUHJvZAgFAW0CXzQECHZvbFNhbGRvCAUBcAJfNAMJAGYCBQh2b2xTYWxkbwULd2hTcGFjZUxlZnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICFUF0dGVtcHQgdG8gcHV0IHRvdGFsIAkApAMBBQh2b2xTYWxkbwIRIHN0dWZmLCBidXQgb25seSAJAKQDAQULd2hTcGFjZUxlZnQCFSB3YXJlaG91c2Ugc3BhY2UgbGVmdAkAmQoHCQC5CQIIBQFyAl8yAgFfCQC5CQIIBQFtAl8yAgFfCQC6CQIIBQFwAl8yAgFfCQC5CQIIBQFyAl8zAgFfCQC5CQIIBQFtAl8zAgFfCQC6CQIIBQFwAl8zAgFfBQh2b2xTYWxkbwESZXhwZWRpdGlvbkludGVybmFsAgZjYWxsZXIEdHhJZAQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50AQxmbGlnaHRDb21tb24DCHVzZXJBZGRyB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEFDG9sZEZyb21TdGF0ZQIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAQEhAQkBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZFcXVpcG1lbnQgaW5jb21wYXRpYmxlBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMzc2NzM0MzA2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMzNzY3MzQzMDYCXzEEBmR1Y2tJZAgFDSR0MDMzNzY3MzQzMDYCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzY2ODAzNzU1MQMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzY2ODAzNzU1MQJfMQQFYnBSZXMIBQ0kdDAzNjY4MDM3NTUxAl8yBAVsb2Z0TwgFDSR0MDM2NjgwMzc1NTECXzMEBWxvZnRGCAUNJHQwMzY2ODAzNzU1MQJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADAwkBASEBBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGcCBQhjdXJMZXZlbAADBwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhtYXhJbmZyYQkAZAIJAGkCCQEEc3FydAQFBnBpZWNlcwAAAAAFBERPV04ABQACBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEDAwUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBmAgUIbmV3TGV2ZWwFCG1heEluZnJhBwkAAgEJAKwCAgIlQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IAkApAMBBQhtYXhJbmZyYQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAETdXBkYXRlU3RhdHNJbnRlcm5hbAQGbHZsS2V5BXhwS2V5CXBvaW50c0tleQdkZWx0YVhQBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQZsdmxLZXkAAAUFbmV3WFAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBvaW50c0tleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcG9pbnRzS2V5AAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgtkdWNrQXNzZXRJZAdkZWx0YVhQBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2R1Y2tBc3NldElkBARhZGRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQtkdWNrQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDAwMFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBwkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFC1JPQk9fUFJFRklYBwkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkCQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBQdkZWx0YVhQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENY2hlY2tEZWxpdmVyeQELZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFEBwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQDAwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93CQBmAgABBQhkaXN0YW5jZQcJAAIBAiBZb3VyIGR1Y2sgaXMgb24gZGVsaXZlcnkgbWlzc2lvbgkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIUZXhpdERlbGl2ZXJ5SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsARJleGl0RGVsaXZlcnlDb21tb24EC2R1Y2tBc3NldElkBWNoZWNrBW5ld0hQBXNjb3JlBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlzdGFydFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAhkaXN0YW5jZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkAhRORlQgZHVjayBpcyBvcnBoYW5lZAQJaGVhbHRoS2V5CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAljdXJIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlYWx0aEtleQQOb3V0Y29tZUFjdGlvbnMDAwkAZgIFCGRpc3RhbmNlAAAGAwMFBWNoZWNrCQBmAgUFc2NvcmUAAAcJAGYCBQVuZXdIUAAABwQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFBW93bmVyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFBW93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBW93bmVyCQBpAgUJc3RhcnRUaW1lBQlEQVlNSUxMSVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMDAwUFY2hlY2sJAGYCBQVuZXdIUAAABwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93BwkAAgECJllvdXIgZHVjayBpcyBzdGlsbCBvbiBkZWxpdmVyeSBtaXNzaW9uBAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEBnVubG9jawkA/AcEBQ9lY29ub215Q29udHJhY3QCFHVwZGF0ZURlbGl2ZXJ5TG9ja2VkCQDMCAIJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawMDAwUFY2hlY2sJAGcCAAAFBW5ld0hQBwYJAGcCAAAFCWN1ckhlYWx0aAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQBkAgUJc3RhcnRUaW1lBRNERUxJVkVSWV9QVU5JU0hNRU5UBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJUKAwUOb3V0Y29tZUFjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwFDXNhdmVkTG9jYXRpb24BDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIbbWVyZ2VJbnRlcm5hbF9jaGVja0RlbGl2ZXJ5CgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl82BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQGY1Byb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MDXzEwBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQLc3VtVGVycmFpbnMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfOQUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEBWxhbmRzCAUDYWNjAl83BANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQECWN1c3RvbUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VzdG9tS2V5AgAJAJwKCgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEDCQECIT0CBQpjdXN0b21OYW1lAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQUDbmlsBQNuaWwFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMFC3N1bVRlcnJhaW5zBQZjUHJvcHMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEBWNvbnQwCQCRAwIJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBCQCRAwIFDGxhbmRBc3NldElkcwAAC2Rlc2NyaXB0aW9uAgFfBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUFY29udDACCzBfMF8wXzBfMF8wAgFfBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFCHByb3BMaXN0BQdsYW5kc0luAAAJALUJAgILMF8wXzBfMF8wXzACAV8FCWNvbnRQcm9wcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQETZ2VuVGVycmFpbnNGb3JNZXJnZQIIBQFyAl85CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEFC25ld0xhbmRTaXplBQVTU0laRQQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAkAuQkCCAUBcgJfNgIBXwkBC1N0cmluZ0VudHJ5AgkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQljb250aW5lbnQJALkJAggFAXIDXzEwAgFfCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0CBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzAAABA20ybAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uAgRhZGRyDGxhbmRBc3NldElkcwQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAwUHJG1hdGNoMAkBA20ybAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAUFByRtYXRjaDAJAQRsMnhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAIFBGFkZHIFDGxhbmRBc3NldElkcwkAAgECDVVua25vd24gbWVyZ2UBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEIdXNlckFkZHIEBGR1Y2sJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHIDCQEJaXNEZWZpbmVkAQUEZHVjawQLZHVja0Fzc2V0SWQJAQV2YWx1ZQEFBGR1Y2sEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBANsb2MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgIBXwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQDAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQGCQBmAgkAZAIFCXN0YXJ0VGltZQUSVEVOX01JTlVURVNfTUlMTElTCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsBAloZWFsdGhLZXkJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUIbG9jSWR4SWQAAAQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDNCAIEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAURZGVsaXZlcnlMb2NrZWRLZXkAAAQGdW5sb2NrCQD8BwQFD2Vjb25vbXlDb250cmFjdAIUdXBkYXRlRGVsaXZlcnlMb2NrZWQJAMwIAgkAZQIFC2xvY2tlZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAUDbmlsAwkAAAIFBnVubG9jawUGdW5sb2NrAwkAZwIAAAkBEUBleHRyTmF0aXZlKDEwNTUpAQUJaGVhbHRoS2V5BQNuaWwECnB1bmlzaG1lbnQJAPwHBAUEdGhpcwILc2F2ZUludGVnZXIJAMwIAgkBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBBQtkdWNrQXNzZXRJZAkAzAgCCQBkAgUJc3RhcnRUaW1lBRNERUxJVkVSWV9QVU5JU0hNRU5UBQNuaWwFA25pbAMJAAACBQpwdW5pc2htZW50BQpwdW5pc2htZW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAQtTdHJpbmdFbnRyeQIFBmxvY0tleQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBAh1c2VyQWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIJAM0IAgkBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEFCHVzZXJBZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAQxwcm9sb2dGbGlnaHQBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbC4BaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAZpc1JvYm8DAwUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMHCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQULUk9CT19QUkVGSVgHAwMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAQEhAQUGaXNSb2JvBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgQgb3IgBQtST0JPX1BSRUZJWAIGIHRva2VuAwMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAQEhAQUGaXNSb2JvBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAgQgb3IgBQtST0JPX1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzggCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUNcHJvbG9nQWN0aW9ucwFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwMJAQ9jaGVja1RvdXJuYW1lbnQBBQphc3NldElkU3RyCQACAQIbdW5zdGFrZUR1Y2tfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQphc3NldElkU3RyCQACAQIZdW5zdGFrZUR1Y2tfY2hlY2tEZWxpdmVyeQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQVtYXhIUAUGaGVhbHRoCQACAQkArAICCQCsAgICGVBsZWFzZSBoZWFsIHlvdXIgZHVjayB0byAJAKQDAQUFbWF4SFACE2hwIGJlZm9yZSB1bnN0YWtpbmcJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFA25pbAUNcHJvbG9nQWN0aW9ucwFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQ1wcm9sb2dBY3Rpb25zCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQ1wcm9sb2dBY3Rpb25zCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQxwcm9sb2dGbGlnaHQBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEBW5ld0hQCAUBZgJfMQQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EC25ld0xvY2F0aW9uCAUBZgJfNAMJAAACBQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAZuZXdMb2MJALUJAgULbmV3TG9jYXRpb24CAV8EBmlzVG91cgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFUBAdpc0RlbGl2CQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAUQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA0kdDA3MDY1NDcwNzUxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81BAVuZXdFcQgFDSR0MDcwNjU0NzA3NTECXzEED3Nob3VsZFplcm9CdWZmcwgFDSR0MDcwNjU0NzA3NTECXzIEDSR0MDcwNzU0NzM4NjYDCQEBIQEJAQlvbk1pc3Npb24CBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEPaXNVc3VhbExvY2F0aW9uAQULbmV3TG9jYXRpb24JAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ABQMJAGYCBQVuZXdIUAAACQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAlAoCBQtjdXJMb2NhdGlvbgAAAwkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgMJAQEhAQkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtuZXdMb2NhdGlvbgkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAQFc2NvcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZuZXdMb2MFCGxvY0lkeElkBAZjdXJMb2MJALUJAgULY3VyTG9jYXRpb24CAV8EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAMJAQIhPQIFBXNjb3JlCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBmN1ckxvYwUIbG9jSWR4SWQAAQkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAHAwkAZgIFBW5ld0hQAAAECWxvY2FsQmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QJARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQAAAQIdXBkTG9jYWwDCQBmAgUFc2NvcmUFCWxvY2FsQmVzdAkA/AcEBRJ0b3VybmFtZW50Q29udHJhY3QCDnNhdmVEdWNrUmVzdWx0CQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFBXNjb3JlBQNuaWwFA25pbAUEdW5pdAMJAAACBQh1cGRMb2NhbAUIdXBkTG9jYWwJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEBIQEJAQxpc0luRGVsaXZlcnkBBQtjdXJMb2NhdGlvbgQIc2F2ZWRMb2MJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIQYXV0b0V4aXREZWxpdmVyeQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQVuZXdIUAkAzAgCAwUHaXNEZWxpdgICMTACAjExCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUIc2F2ZWRMb2MFCHNhdmVkTG9jAwUHaXNEZWxpdgkAlAoCBQhzYXZlZExvYwUFbmV3SFADCQBmAgUFbmV3SFAAAAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAJQKAgUIc2F2ZWRMb2MAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAQEhAQUHaXNEZWxpdgkAAgECJFlvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiBkZWxpdmVyeQMJAQEhAQkBDGlzSW5EZWxpdmVyeQEFC25ld0xvY2F0aW9uCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAA0EBXNjb3JlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGbmV3TG9jBQhsb2NJZHhJZAQGY3VyTG9jCQC1CQIFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAA4DAwkAZgIFBW5ld0hQAAAJAGYCAAEFBXNjb3JlBwkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAECHNhdmVkTG9jCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCEGF1dG9FeGl0RGVsaXZlcnkJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFbmV3SFAJAMwIAgIFMTUtMTcJAMwIAgUFc2NvcmUFA25pbAUDbmlsAwkAAAIFCHNhdmVkTG9jBQhzYXZlZExvYwkAlAoCBQhzYXZlZExvYwUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECWxvY1RvU2F2ZQgFDSR0MDcwNzU0NzM4NjYCXzEECGhwVG9TYXZlCAUNJHQwNzA3NTQ3Mzg2NgJfMgkAlAoCCQDOCAIJAM4IAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUJbG9jVG9TYXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUIaHBUb1NhdmUFA25pbAUNcHJvbG9nQWN0aW9ucwMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCBQVuZXdIUAAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhJoZWFsX2NoZWNrRGVsaXZlcnkEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0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BQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIWaGVhbEVTX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsRVNfY2hlY2tEZWxpdmVyeQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAvAkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBQpySWR4RWZmZWN0BAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEPY29tbWl0Rm9yUmFuZG9tAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUNcHJvbG9nQWN0aW9ucwULZmluaXNoQmxvY2sBaQEIYnV5U0xhbmQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDgxMzA2ODE0MDMJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwODEzMDY4MTQwMwJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwODEzMDY4MTQwMwJfMgQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQCaWQICAUBZQJfMgJfMQQGcmVzdWx0AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAACQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGmV4cGVkaXRpb25fY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECGGV4cGVkaXRpb25fY2hlY2tEZWxpdmVyeQQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlQoDCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zBQthY3Jlc1Jlc3VsdAFpARBidXlTTGFuZEZvckFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQxTX0NPU1RfQUNSRVMJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQxTX0NPU1RfQUNSRVMEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxhY3Jlc0Fzc2V0SWQFA2FtdAUDbmlsCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEFDXByb2xvZ0FjdGlvbnMICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFDnhwVXBncmFkZUluZnJhCAUGcmVzdWx0Al8zBQVNVUxUOAJfMQgFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM4IAgUGcmVzdWx0BQ1wcm9sb2dBY3Rpb25zAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24CCQClCAEIBQFpBmNhbGxlcgUMbGFuZEFzc2V0SWRzCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xBQ1wcm9sb2dBY3Rpb25zCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwMJAGYCAAAFBWxvZnRGCQACAQIwT3BlcmF0aW9uIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgd2FyZWhvdXNlIHNwYWNlBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDXByb2xvZ0FjdGlvbnMAAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMFA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLdmlydFdsZ0RhdGEJAQlhc0FueUxpc3QBCQD8BwQFC3dsZ0NvbnRyYWN0AhJjaGVja1dsZ1hwUkVBRE9OTFkJAMwIAgUEYWRkcgUDbmlsBQNuaWwEDXZpcnRXbGdQb2ludHMJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAQQNJHQwOTcwMjM5NzQxMwMJAGcCAAAFDXZpcnRXbGdQb2ludHMJAJQKAgAABQNuaWwEB2RlbHRhWFAJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCXRha2VXbGdYcAkAzAgCBQRhZGRyBQNuaWwFA25pbAMJAAACBQdkZWx0YVhQBQdkZWx0YVhQCQCUCgIFDXZpcnRXbGdQb2ludHMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlVc2VyWFABBQRhZGRyCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJd2xnUG9pbnRzCAUNJHQwOTcwMjM5NzQxMwJfMQQKd2xnQWN0aW9ucwgFDSR0MDk3MDIzOTc0MTMCXzIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKZnJlZUtleUFjYwAABQl3bGdQb2ludHMEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJ8IAQULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfBQNuaWwFDXByb2xvZ0FjdGlvbnMFCndsZ0FjdGlvbnMAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFEnRvdXJuYW1lbnRDb250cmFjdAkAzAgCBQ1hY3Jlc0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkBBnByb2xvZwEFAWkAKgFpAQ91cGRhdGVEdWNrU3RhdHMCC2R1Y2tBc3NldElkB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQdkZWx0YVhQAWkBDnVwZGF0ZUFjY1N0YXRzAgRhZGRyB2RlbHRhWFADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFD2Vjb25vbXlDb250cmFjdAkAzAgCBQ1hY3Jlc0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUHZGVsdGFYUAFpAQllcXVpcER1Y2sBCWVxdWlwbWVudAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGWVxdWlwRHVja19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIXZXF1aXBEdWNrX2NoZWNrRGVsaXZlcnkEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBW5ld0VxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQVzdGF0cwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCQCkAwEJAJEDAgUFc3RhdHMABwkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACAkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACQkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACgkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACwUDbmlsAgFfBQNuaWwFDXByb2xvZ0FjdGlvbnMAAAFpAQ9mb3J0aWZpY2F0ZUxhbmQCC2xhbmRBc3NldElkBHBsYW4EDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAECWR1Y2tTdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkAAAHBAdmb3J0S2V5CQEXa2V5Rm9ydGlmaWNhdGlvbnNCeUxhbmQBBQtsYW5kQXNzZXRJZAQMY3VycmVudEZvcnRzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUHZm9ydEtleQIMOjBfMTU6MF8xODowAgFfBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAdjdXJMb2Z0CQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwQEY3VyTwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2N1ckxvZnQFC3ZvbE9jY3VwaWVkBARjdXJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAUHdm9sRnJlZQQIbmV3Rm9ydHMJALUJAgUEcGxhbgIBXwQPJHQwMTA0MjUxMTA0MzY2CQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUPJHQwMTA0MjUxMTA0MzY2Al8xBAV0ZW1wTwgFDyR0MDEwNDI1MTEwNDM2NgJfMgQFdGVtcEYIBQ8kdDAxMDQyNTExMDQzNjYCXzMEDyR0MDEwNDM2OTEwNDQ2NQkBBWZvcnRCBgUIbmV3Rm9ydHMFCXRlbXBQcm9kQgUFdGVtcE8FBXRlbXBGBwUJZHVja1N0YXRzBAhuZXdQcm9kQggFDyR0MDEwNDM2OTEwNDQ2NQJfMQQEbmV3TwgFDyR0MDEwNDM2OTEwNDQ2NQJfMgQEbmV3RggFDyR0MDEwNDM2OTEwNDQ2NQJfMwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFB2N1ckxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBG5ld08JAMwIAgkApAMBBQRuZXdGCQDMCAIJAJEDAgUHY3VyTG9mdAUIdm9sVG90YWwFA25pbAIBXwkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHZm9ydEtleQUEcGxhbgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwFDXByb2xvZ0FjdGlvbnMAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBQljdXJIZWFsdGgJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbWF4SFAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQx0b3VyTG9jYXRpb24FA25pbAUMdG91ckxvY2F0aW9uAWkBDGJyZWFrQXR0ZW1wdAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzQgCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQ1zYXZlZExvY2F0aW9uBQtjdXJMb2NhdGlvbgFpARRicmVha0F0dGVtcHRDYWxsYmFjawADCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQNuaWwCFGJyZWFrQXR0ZW1wdENhbGxiYWNrAWkBFmV4aXRUb3VybmFtZW50SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBwFpARRleGl0RGVsaXZlcnlJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAFlCQESZXhpdERlbGl2ZXJ5Q29tbW9uBAULZHVja0Fzc2V0SWQHAAAAAAkAlAoCCQDOCAIIBQFlAl8xCAUBZQJfMgcBaQEQYXV0b0V4aXREZWxpdmVyeQQLZHVja0Fzc2V0SWQFbmV3SFAGcmVhc29uBXNjb3JlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQBZQkBEmV4aXREZWxpdmVyeUNvbW1vbgQFC2R1Y2tBc3NldElkBgUFbmV3SFAFBXNjb3JlCQCUCgIIBQFlAl8xCAUBZQJfMwFpAQ1icmVha0RlbGl2ZXJ5AAkAlAoCCQEGcHJvbG9nAQUBaQINYnJlYWtEZWxpdmVyeQFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQBmAgACCQCQAwEFBXBhcnRzCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQECXR4RnJvbU1zZwMJAGcCCQCQAwEFBXBhcnRzAAIJAJEDAgUFcGFydHMAAgIABAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkAkQMCBQVwYXJ0cwAAAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIecHJlcGFyZVJvYmJlcnlfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECHHByZXBhcmVSb2JiZXJ5X2NoZWNrRGVsaXZlcnkEB3JvYkNvc3QICQEOZ2V0Um9iYmVyeURhdGECBQR0aGlzBQtkdWNrQXNzZXRJZAJfMQMJAGYCBQdyb2JDb3N0BQZ3bGdBbXQJAAIBCQCsAgIJAKwCAgkArAICAghQYXltZW50IAkApAMBBQZ3bGdBbXQCDCA8IHJlcXVpcmVkIAkApAMBBQdyb2JDb3N0BApjYW5kaWRhdGVzCQC1CQIJAJEDAgUFcGFydHMAAQIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQAAAQKbG9ja2VkTGFuZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAMDCQECIT0CBQlkdWNrU3RhdGUFC2R1Y2tJZHhGcmVlCQBmAgUHbGFuZEVUQQUDbm93BwkAAgEJAKwCAgInWW91IGFscmVhZHkgc3RhcnRlZCByb2JiaW5nLCB3YWl0IHRpbGwgCQCkAwEFB2xhbmRFVEEKAQdjaGVja2VyAgNhY2MLbGFuZEFzc2V0SWQEBXN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQAAAQLY29vbGRvd25FVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkAAADCQBmAgUFc3RhdGUJAJADAQUQbGFuZFJvYkNvb2xkb3ducwkAAgECDUludmFsaWQgc3RhdGUDCQBmAgUDbm93BQtjb29sZG93bkVUQQQKc3Rha2VkVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAADCQBnAgAABQpzdGFrZWRUaW1lBQNhY2MEAWEJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUBYQtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQMcHJvZHVjdGl2aXR5CQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJZGVsdGFUaW1lCQBlAgUDbm93BQpzdGFrZWRUaW1lBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFDHByb2R1Y3Rpdml0eQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUOTUlOX1JFU19UT19ST0IFCGF2YWlsUmVzBQNhY2MJAM0IAgUDYWNjBQtsYW5kQXNzZXRJZAUDYWNjBAhmaWx0ZXJlZAoAAiRsBQpjYW5kaWRhdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIJAJADAQUIZmlsdGVyZWQAAAkAAgECGU5vIGNhbmRpZGF0ZXMgZm9yIHJvYmJlcnkEBnJuZElkeAkBD2dldFJhbmRvbU51bWJlcgMJAJADAQUIZmlsdGVyZWQFB21lc3NhZ2UFA3NpZwQLbGFuZEFzc2V0SWQJAJEDAgUIZmlsdGVyZWQFBnJuZElkeAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQFDHJvYklkeExvY2tlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkCQBkAgUDbm93CQCRAwIFEGxhbmRSb2JDb29sZG93bnMFDHJvYklkeExvY2tlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAUQZHVja0lkeFByZXBhcmluZwkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkBQtsYW5kQXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtsYW5kQXNzZXRJZAFpAQdyb2JMYW5kAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAlAoCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCCQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQFA25vdwAAAWkBDmFjY2VwdERlbGl2ZXJ5AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAURZGVsaXZlcnlMb2NrZWRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkJAGUCBQlmdW5kVG90YWwFC2xvY2tlZFRvdGFsCQACAQkArAICCQCsAgIJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYCCSwgbG9ja2VkPQkBCmZpeGVkUG9pbnQCBQtsb2NrZWRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhkZWxheUVUQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkAAADCQBmAgUIZGVsYXlFVEEFA25vdwkAAgEJAKwCAgIqRGVsaXZlcnkgaXMgZm9yYmlkZGVuIGZvciB5b3VyIGR1Y2sgdW50aWwgCQCkAwEFCGRlbGF5RVRBBAZoZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQDCQBnAgAABQZoZWFsdGgJAAIBAitZb3UgY2Fubm90IGFjY2VwdCBkZWxpdmVyeSB3aXRoIHplcm8gaGVhbHRoBAhjb3VudEtleQkBFGtleVVzZXJEZWxpdmVyeUNvdW50AQUIdXNlckFkZHIEBWNvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFCGNvdW50S2V5AAAEB2xhc3REYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBQh1c2VyQWRkcgAABAV0b2RheQkAaQIFA25vdwUJREFZTUlMTElTBAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQh1c2VyQWRkcgAABBFhbGxvd2VkRGVsaXZlcmllcwkAZAIFF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTCQBpAgUFYWNyZXMFGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAwMJAGcCBQVjb3VudAURYWxsb3dlZERlbGl2ZXJpZXMJAAACBQdsYXN0RGF5BQV0b2RheQcJAAIBCQCsAgIJAKwCAgIRWW91IGFscmVhZHkgdXNlZCAJAKQDAQURYWxsb3dlZERlbGl2ZXJpZXMCHCBkZWxpdmVyeSBhdHRlbXB0cyBmb3IgdG9kYXkDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAh5hY2NlcHREZWxpdmVyeV9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIcYWNjZXB0RGVsaXZlcnlfY2hlY2tEZWxpdmVyeQQObmV3TG9ja2VkVG90YWwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBkAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQQZGVsaXZlcnlMb2NhdGlvbgkArAICCQCkAwEFA25vdwIEX0RfMAkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BRBkZWxpdmVyeUxvY2F0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQMJAQIhPQIFB2xhc3REYXkFBXRvZGF5AAAFBWNvdW50BQNuaWwFDXByb2xvZ0FjdGlvbnMJAJQKAgUQZGVsaXZlcnlMb2NhdGlvbgUObmV3TG9ja2VkVG90YWwBaQEVY2hlY2tEZWxpdmVyeUNhbGxiYWNrAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkAlAoCBQNuaWwJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQBaQELYnV5Um9ib0R1Y2sAAwkBASEBBRNLU19BTExPV19ST0JPX0RVQ0tTCQACAQIVRmVhdHVyZSBpcyB0dXJuZWQgb2ZmBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDlJPQk9fRFVDS19VU0RUCQACAQkArAICCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQ5ST0JPX0RVQ0tfVVNEVAAGAgUgVVNEVAQHbmV4dE51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEPa2V5TmV4dFJvYm9EdWNrAAAABAVieXRlegkAmgMBBQduZXh0TnVtBARuYW1lCQCsAgIJAKwCAgULUk9CT19QUkVGSVgCAS0JALICAgkA3AQBBQVieXRlegAIBAVjb2xvcgkAsgICCQDcBAEJANQWAQUFYnl0ZXoABgQFaXNzdWUJAMIIBQUEbmFtZQkArAICAjdSb2JvIER1Y2sgTkZUIGZvciBXYXZlc0xhbmRzIGdhbWUsIGJhY2tncm91bmQgY29sb3IgPSAjBQVjb2xvcgABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ9rZXlOZXh0Um9ib0R1Y2sACQBkAgUHbmV4dE51bQABBQVpc3N1ZQkBDlNjcmlwdFRyYW5zZmVyAwgFAWkMb3JpZ2luQ2FsbGVyAAEFB2Fzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCQCUCgIJANgEAQUHYXNzZXRJZAUFY29sb3IApXAYOQ==", "height": 2840066, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CwuQiMjdhptCN94m3MrixMsibm3Chv5dhRmxkdBVrrzW Next: 7fD6oRtzNkHJ7eQCB8ea6S7EmwnthUWpPWcJ9HbSJ9S8 Diff:
OldNewDifferences
175175
176176 let aG = "DUCK"
177177
178-let aH = "PRESALE"
179-
180-let aI = 6
181-
182-let aJ = 25
183-
184-let aK = 3456000
185-
186-let aL = 10000000000
187-
188-let aM = "Africa_F_Africa"
189-
190-let aN = 39637
191-
192-let aO = 10
193-
194-let aP = 50000
195-
196-let aQ = 600000
197-
198-let aR = 1
199-
200-let aS = 50000000
201-
202-let aT = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
203-
204-let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205-
206-let aV = 10000000
207-
208-let aW = [15, 16, 17, 18, 19, 20]
209-
210-let aX = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
211-
212-let aY = 6
213-
214-let aZ = 8
215-
216-let ba = 9
217-
218-let bb = 10
178+let aH = "ROBO"
179+
180+let aI = "PRESALE"
181+
182+let aJ = 6
183+
184+let aK = 25
185+
186+let aL = 3456000
187+
188+let aM = 10000000000
189+
190+let aN = "Africa_F_Africa"
191+
192+let aO = 39637
193+
194+let aP = 10
195+
196+let aQ = 50000
197+
198+let aR = 600000
199+
200+let aS = 1
201+
202+let aT = 50000000
203+
204+let aU = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
205+
206+let aV = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
207+
208+let aW = 10000000
209+
210+let aX = [15, 16, 17, 18, 19, 20]
211+
212+let aY = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
213+
214+let aZ = 6
215+
216+let ba = 8
217+
218+let bb = 9
219219
220220 let bc = 10
221221
222-let bd = 0
223-
224-let be = 1
225-
226-let bf = 2
227-
228-let bg = 3
229-
230-let bh = 4
231-
232-let bi = 0
233-
234-let bj = 1
235-
236-let bk = 2
237-
238-let bl = 3
239-
240-let bm = 0
241-
242-let bn = 1
243-
244-let bo = 2
245-
246-let bp = 3
247-
248-let bq = 0
249-
250-let br = 1
251-
252-let bs = 2
253-
254-func bt (bu) = ("no_" + bu)
255-
256-
257-func bv (bu) = ("lcna_" + bu)
258-
259-
260-func bw (bu) = ("st_" + bu)
261-
262-
263-func bx (by,bu) = makeString(["las", by, bu], "_")
264-
265-
266-func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267-
268-
269-func bC (Q) = ("wh_" + Q)
270-
271-
272-func bD (bu) = ("infraLevel_" + bu)
273-
274-
275-func bE (Q) = ("fortifications_" + Q)
276-
277-
278-func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279-
280-
281-func bG (c) = ("accountCustomNameByAddr_" + c)
282-
283-
284-func bH (c) = ("accRefBy_" + c)
285-
286-
287-func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288-
289-
290-func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291-
292-
293-func bK (c) = ("accReferrals_" + c)
294-
295-
296-func bL (bu) = ("duckOwner_" + bu)
297-
298-
299-func bM (bB) = ("stakedDuckByOwner_" + bB)
300-
301-
302-func bN (B) = ("backPack_" + B)
303-
304-
305-func bO (B) = ("duckLocation_" + B)
306-
307-
308-func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309-
310-
311-func bR () = "emergencyWarehouseProducts"
312-
313-
314-let bS = "deliveryFund"
315-
316-let bT = "deliveryLocked"
317-
318-let bU = "%s__lastTourId"
319-
320-func bV (bW) = ("%s%d__tourStaticData__" + toString(bW))
321-
322-
323-func bX (bW) = ("%s%d__tourDynamicData__" + toString(bW))
324-
325-
326-func bY (bW,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bW), B], "__")
327-
328-
329-let bZ = 0
330-
331-let ca = 1
332-
333-let cb = 6
334-
335-let cc = 1
336-
337-func cd (ce,bW) = {
338- let cf = split(valueOrErrorMessage(getString(ce, bV(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__")
339- let cg = split_4C(valueOrErrorMessage(getString(ce, bX(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__")
340-[cf, cg]
341- }
342-
343-
344-func ch (ce,ci) = {
345- let cj = valueOrElse(getInteger(ce, bU), 0)
346- let ck = split(ci, "_")
222+let bd = 10
223+
224+let be = 0
225+
226+let bf = 1
227+
228+let bg = 2
229+
230+let bh = 3
231+
232+let bi = 4
233+
234+let bj = 0
235+
236+let bk = 1
237+
238+let bl = 2
239+
240+let bm = 3
241+
242+let bn = 0
243+
244+let bo = 1
245+
246+let bp = 2
247+
248+let bq = 3
249+
250+let br = 0
251+
252+let bs = 1
253+
254+let bt = 2
255+
256+func bu (bv) = ("no_" + bv)
257+
258+
259+func bw (bv) = ("lcna_" + bv)
260+
261+
262+func bx (bv) = ("st_" + bv)
263+
264+
265+func by (bz,bv) = makeString(["las", bz, bv], "_")
266+
267+
268+func bA (bB,bv,bC) = ((((("sttao_" + bB) + "_") + bv) + "_") + bC)
269+
270+
271+func bD (Q) = ("wh_" + Q)
272+
273+
274+func bE (bv) = ("infraLevel_" + bv)
275+
276+
277+func bF (Q) = ("fortifications_" + Q)
278+
279+
280+func bG (bv) = ("duckCustomNameByAssetId_" + bv)
281+
282+
283+func bH (c) = ("accountCustomNameByAddr_" + c)
284+
285+
286+func bI (c) = ("accRefBy_" + c)
287+
288+
289+func bJ (B) = ("onboardArtActivatedOnDuck_" + B)
290+
291+
292+func bK (c) = ("onboardArtActivatedDuckBy_" + c)
293+
294+
295+func bL (c) = ("accReferrals_" + c)
296+
297+
298+func bM (bv) = ("duckOwner_" + bv)
299+
300+
301+func bN (bC) = ("stakedDuckByOwner_" + bC)
302+
303+
304+func bO (B) = ("backPack_" + B)
305+
306+
307+func bP (B) = ("duckLocation_" + B)
308+
309+
310+func bQ (bR) = ("%s%s__userGwlReleaseTime__" + bR)
311+
312+
313+func bS () = "emergencyWarehouseProducts"
314+
315+
316+let bT = "deliveryFund"
317+
318+let bU = "deliveryLocked"
319+
320+let bV = "%s__lastTourId"
321+
322+func bW (bX) = ("%s%d__tourStaticData__" + toString(bX))
323+
324+
325+func bY (bX) = ("%s%d__tourDynamicData__" + toString(bX))
326+
327+
328+func bZ (bX,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bX), B], "__")
329+
330+
331+let ca = 0
332+
333+let cb = 1
334+
335+let cc = 6
336+
337+let cd = 1
338+
339+func ce (cf,bX) = {
340+ let cg = split(valueOrErrorMessage(getString(cf, bW(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__")
341+ let ch = split_4C(valueOrErrorMessage(getString(cf, bY(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__")
342+[cg, ch]
343+ }
344+
345+
346+func ci (cf,cj) = {
347+ let ck = valueOrElse(getInteger(cf, bV), 0)
348+ let cl = split(cj, "_")
347349 let aA = lastBlock.timestamp
348- let cl = cd(ce, cj)
349- let cf = cl[bZ]
350- let cg = cl[ca]
351- if (if (if ((ck[br] == "T"))
352- then (parseIntValue(ck[bq]) == cj)
350+ let cm = ce(cf, ck)
351+ let cg = cm[ca]
352+ let ch = cm[cb]
353+ if (if (if ((cl[bs] == "T"))
354+ then (parseIntValue(cl[br]) == ck)
353355 else false)
354- then (cg[cc] == "INPROGRESS")
356+ then (ch[cd] == "INPROGRESS")
355357 else false)
356- then (parseIntValue(cf[cb]) > aA)
358+ then (parseIntValue(cg[cc]) > aA)
357359 else false
358360 }
359361
360362
361-func cm (ci) = {
362- let ck = split(ci, "_")
363+func cn (cj) = {
364+ let cl = split(cj, "_")
363365 let aA = lastBlock.timestamp
364- let cn = parseIntValue(ck[bq])
365- let co = parseIntValue(ck[bs])
366- if (if ((ck[br] == "D"))
367- then ((cn + aQ) > aA)
366+ let co = parseIntValue(cl[br])
367+ let cp = parseIntValue(cl[bt])
368+ if (if ((cl[bs] == "D"))
369+ then ((co + aR) > aA)
368370 else false)
369- then (3 >= co)
371+ then (3 >= cp)
370372 else false
371373 }
372374
373375
374-func cp (ci) = {
375- let cq = split(ci, "_")[br]
376- if ((cq != "T"))
377- then (cq != "D")
376+func cq (cj) = {
377+ let cr = split(cj, "_")[bs]
378+ if ((cr != "T"))
379+ then (cr != "D")
378380 else false
379381 }
380382
381383
382-func cr (ce,ci) = {
383- let cj = valueOrElse(getInteger(ce, bU), 0)
384- let ck = split(ci, "_")
384+func cs (cf,cj) = {
385+ let ck = valueOrElse(getInteger(cf, bV), 0)
386+ let cl = split(cj, "_")
385387 let aA = lastBlock.timestamp
386- let cl = cd(ce, cj)
387- let cf = cl[bZ]
388- let cg = cl[ca]
389- let cq = ck[br]
390- if ((cq == "D"))
388+ let cm = ce(cf, ck)
389+ let cg = cm[ca]
390+ let ch = cm[cb]
391+ let cr = cl[bs]
392+ if ((cr == "D"))
391393 then true
392- else if (if (if ((ck[br] == "T"))
393- then (parseIntValue(ck[bq]) == cj)
394+ else if (if (if ((cl[bs] == "T"))
395+ then (parseIntValue(cl[br]) == ck)
394396 else false)
395- then (cg[cc] == "INPROGRESS")
397+ then (ch[cd] == "INPROGRESS")
396398 else false)
397- then (parseIntValue(cf[cb]) > aA)
399+ then (parseIntValue(cg[cc]) > aA)
398400 else false
399401 }
400402
401403
402-func cs (ct) = (parseIntValue(ct[aY]) * aV)
403-
404-
405-func cu (cv,cw,cx) = throw(((((("Cheat attempt: oldLoc=" + cv) + ", newLoc=") + cw) + ", case=") + toString(cx)))
406-
407-
408-let cy = false
404+func ct (cu) = (parseIntValue(cu[aZ]) * aW)
405+
406+
407+func cv (cw,cx,cy) = throw(((((("Cheat attempt: oldLoc=" + cw) + ", newLoc=") + cx) + ", case=") + toString(cy)))
408+
409409
410410 let cz = false
411411
412-let cA = 86400000
413-
414-let cB = take(drop(this.bytes, 1), 1)
415-
416-let cC = {
417- let cD = cB
418- if ((base58'2W' == cD))
412+let cA = false
413+
414+let cB = true
415+
416+let cC = 86400000
417+
418+let cD = take(drop(this.bytes, 1), 1)
419+
420+let cE = {
421+ let cF = cD
422+ if ((base58'2W' == cF))
419423 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
420- else if ((base58'2T' == cD))
424+ else if ((base58'2T' == cF))
421425 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
422426 else throw("Unknown chain")
423427 }
424428
425-let cE = {
426- let cD = cB
427- if ((base58'2W' == cD))
429+let cG = {
430+ let cF = cD
431+ if ((base58'2W' == cF))
428432 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
429- else if ((base58'2T' == cD))
433+ else if ((base58'2T' == cF))
430434 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
431435 else throw("Unknown chain")
432436 }
433437
434-let cF = {
435- let cD = cB
436- if ((base58'2W' == cD))
438+let cH = {
439+ let cF = cD
440+ if ((base58'2W' == cF))
437441 then 10000000000
438- else if ((base58'2T' == cD))
442+ else if ((base58'2T' == cF))
439443 then 100000000
440444 else throw("Unknown chain")
441445 }
442446
443-let cG = {
444- let cD = cB
445- if ((base58'2W' == cD))
446- then cA
447- else if ((base58'2T' == cD))
447+let cI = {
448+ let cF = cD
449+ if ((base58'2W' == cF))
450+ then cC
451+ else if ((base58'2T' == cF))
448452 then 60000
449453 else throw("Unknown chain")
450454 }
451455
452-let cH = {
453- let cD = cB
454- if ((base58'2W' == cD))
456+let cJ = {
457+ let cF = cD
458+ if ((base58'2W' == cF))
455459 then 10800000
456- else if ((base58'2T' == cD))
460+ else if ((base58'2T' == cF))
457461 then 900000
458462 else throw("Unknown chain")
459463 }
460464
461-let cI = "__"
462-
463-let cJ = 1000000
464-
465-let cK = 100000000
466-
467-let cL = 25
468-
469-let cM = 100
470-
471-let cN = 225
472-
473-let cO = 400
474-
475-let cP = 625
476-
477-let cQ = [0, 1, 2, 3, 4, 5]
478-
479-func cR (cS,cT) = valueOrErrorMessage(getString(cS, cT), makeString(["mandatory ", toString(cS), ".", cT, " is not defined"], ""))
480-
481-
482-let cU = 1
483-
484-let cV = 2
485-
486-let cW = 3
487-
488-let cX = 4
489-
490-let cY = 7
491-
492-let cZ = 8
493-
494-func da () = "%s__restConfig"
495-
496-
497-func db () = "%s__restAddr"
498-
499-
500-func dc (dd) = split_4C(cR(dd, da()), cI)
501-
502-
503-func de (df,dg) = valueOrErrorMessage(addressFromString(df[dg]), ("Rest cfg doesn't contain address at index " + toString(dg)))
504-
505-
506-let dh = addressFromStringValue(valueOrElse(getString(this, db()), cE))
507-
508-let df = dc(dh)
509-
510-let aq = de(df, cU)
511-
512-let di = de(df, cV)
513-
514-let dj = de(df, cW)
515-
516-let dk = de(df, cX)
517-
518-let dl = de(df, cY)
519-
520-let dm = de(df, cZ)
521-
522-let dn = 0
523-
524-let do = 1
525-
526-let dp = 2
527-
528-let dq = 3
529-
530-let dr = "wlg_assetId"
531-
532-let ds = valueOrErrorMessage(getBinary(dk, dr), "WLGOLD is not issued yet")
533-
534-let dt = "acresAssetId"
535-
536-let du = valueOrErrorMessage(getBinary(dm, dt), "ACRES is not issued yet")
537-
538-let dv = 2
539-
540-func dw (cS) = ("finishBlockForAddr_" + cS)
541-
542-
543-func dx () = "resTypesProportions"
544-
545-
546-func dy (dz) = ("resTypesByContinent_" + dz)
547-
548-
549-func dA (bB) = ("stakedLandsByOwner_" + bB)
550-
551-
552-func dB (bB) = ("stakedPiecesByOwner_" + bB)
553-
554-
555-func dC (dD) = {
556- let cD = dD
557- if ($isInstanceOf(cD, "String"))
465+let cK = "__"
466+
467+let cL = 1000000
468+
469+let cM = 100000000
470+
471+let cN = 25
472+
473+let cO = 100
474+
475+let cP = 225
476+
477+let cQ = 400
478+
479+let cR = 625
480+
481+let cS = [0, 1, 2, 3, 4, 5]
482+
483+func cT (cU,cV) = valueOrErrorMessage(getString(cU, cV), makeString(["mandatory ", toString(cU), ".", cV, " is not defined"], ""))
484+
485+
486+let cW = 1
487+
488+let cX = 2
489+
490+let cY = 3
491+
492+let cZ = 4
493+
494+let da = 7
495+
496+let db = 8
497+
498+func dc () = "%s__restConfig"
499+
500+
501+func dd () = "%s__restAddr"
502+
503+
504+func de (df) = split_4C(cT(df, dc()), cK)
505+
506+
507+func dg (dh,di) = valueOrErrorMessage(addressFromString(dh[di]), ("Rest cfg doesn't contain address at index " + toString(di)))
508+
509+
510+let dj = addressFromStringValue(valueOrElse(getString(this, dd()), cG))
511+
512+let dh = de(dj)
513+
514+let aq = dg(dh, cW)
515+
516+let dk = dg(dh, cX)
517+
518+let dl = dg(dh, cY)
519+
520+let dm = dg(dh, cZ)
521+
522+let dn = dg(dh, da)
523+
524+let do = dg(dh, db)
525+
526+let dp = 0
527+
528+let dq = 1
529+
530+let dr = 2
531+
532+let ds = 3
533+
534+let dt = "wlg_assetId"
535+
536+let du = valueOrErrorMessage(getBinary(dm, dt), "WLGOLD is not issued yet")
537+
538+let dv = "acresAssetId"
539+
540+let dw = valueOrErrorMessage(getBinary(do, dv), "ACRES is not issued yet")
541+
542+let dx = 2
543+
544+func dy (cU) = ("finishBlockForAddr_" + cU)
545+
546+
547+func dz () = "resTypesProportions"
548+
549+
550+func dA (dB) = ("resTypesByContinent_" + dB)
551+
552+
553+func dC (bC) = ("stakedLandsByOwner_" + bC)
554+
555+
556+func dD (bC) = ("stakedPiecesByOwner_" + bC)
557+
558+
559+func dE (dF) = {
560+ let cF = dF
561+ if ($isInstanceOf(cF, "String"))
558562 then {
559- let dE = cD
560- dE
563+ let dG = cF
564+ dG
561565 }
562566 else throw("fail to cast into String")
563567 }
564568
565569
566-func dF (dD) = {
567- let cD = dD
568- if ($isInstanceOf(cD, "Int"))
570+func dH (dF) = {
571+ let cF = dF
572+ if ($isInstanceOf(cF, "Int"))
569573 then {
570- let dG = cD
574+ let dI = cF
575+ dI
576+ }
577+ else throw("fail to cast into Int")
578+ }
579+
580+
581+func dJ (dF) = {
582+ let cF = dF
583+ if ($isInstanceOf(cF, "List[Any]"))
584+ then {
585+ let dK = cF
586+ dK
587+ }
588+ else throw("fail to cast into List[Any]")
589+ }
590+
591+
592+func dL (dF) = {
593+ let cF = dF
594+ if ($isInstanceOf(cF, "Boolean"))
595+ then {
596+ let dG = cF
571597 dG
572598 }
573- else throw("fail to cast into Int")
574- }
575-
576-
577-func dH (dD) = {
578- let cD = dD
579- if ($isInstanceOf(cD, "List[Any]"))
580- then {
581- let dI = cD
582- dI
583- }
584- else throw("fail to cast into List[Any]")
585- }
586-
587-
588-func dJ (dD) = {
589- let cD = dD
590- if ($isInstanceOf(cD, "Boolean"))
591- then {
592- let dE = cD
593- dE
594- }
595599 else throw("fail to cast into Boolean")
596600 }
597601
598602
599-func dK (dL) = {
600- let cD = dL
601- if (("S" == cD))
602- then cL
603- else if (("M" == cD))
604- then cM
605- else if (("L" == cD))
606- then cN
607- else if (("XL" == cD))
608- then cO
609- else if (("XXL" == cD))
610- then cP
603+func dM (dN) = {
604+ let cF = dN
605+ if (("S" == cF))
606+ then cN
607+ else if (("M" == cF))
608+ then cO
609+ else if (("L" == cF))
610+ then cP
611+ else if (("XL" == cF))
612+ then cQ
613+ else if (("XXL" == cF))
614+ then cR
611615 else throw("Unknown land size")
612616 }
613617
614618
615-func dM (dE) = isDefined(parseInt(dE))
616-
617-
618-func dN () = "contractsBlocked"
619-
620-
621-func dO (c) = ("lastTxIdByUser_" + c)
622-
623-
624-func dP (dQ,dR) = {
625- let dS = pow(10, 0, dR, 0, 0, DOWN)
626- let dT = toString((dQ % dS))
627- let dU = drop(toString(dS), (1 + size(dT)))
628- (((toString((dQ / dS)) + ".") + dU) + dT)
629- }
630-
631-
632-func dV (dW,dX,dY) = {
633- let dZ = sha256((dX + dY))
634- (toInt(dZ) % dW)
635- }
636-
637-
638-let ea = {
639- let cD = cB
640- if ((base58'2W' == cD))
619+func dO (dG) = isDefined(parseInt(dG))
620+
621+
622+func dP () = "contractsBlocked"
623+
624+
625+func dQ (c) = ("lastTxIdByUser_" + c)
626+
627+
628+func dR (dS,dT) = {
629+ let dU = pow(10, 0, dT, 0, 0, DOWN)
630+ let dV = toString((dS % dU))
631+ let dW = drop(toString(dU), (1 + size(dV)))
632+ (((toString((dS / dU)) + ".") + dW) + dV)
633+ }
634+
635+
636+func dX (dY,dZ,ea) = {
637+ let eb = sha256((dZ + ea))
638+ (toInt(eb) % dY)
639+ }
640+
641+
642+let ec = {
643+ let cF = cD
644+ if ((base58'2W' == cF))
641645 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
642- else if ((base58'2T' == cD))
646+ else if ((base58'2T' == cF))
643647 then this
644648 else throw("Unknown chain")
645649 }
646650
647-let eb = {
648- let cD = cB
649- if ((base58'2W' == cD))
651+let ed = {
652+ let cF = cD
653+ if ((base58'2W' == cF))
650654 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
651- else if ((base58'2T' == cD))
655+ else if ((base58'2T' == cF))
652656 then this
653657 else throw("Unknown chain")
654658 }
655659
656-let ec = {
657- let cD = cB
658- if ((base58'2W' == cD))
659- then if (cy)
660+let ee = {
661+ let cF = cD
662+ if ((base58'2W' == cF))
663+ then if (cz)
660664 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
661665 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
662- else if ((base58'2T' == cD))
666+ else if ((base58'2T' == cF))
663667 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
664668 else throw("Unknown chain")
665669 }
666670
667-let ed = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
668-
669-let ee = 300000
670-
671-let ef = 5000000
672-
673-let eg = 50
674-
675-let eh = 10000000
676-
677-let ei = {
678- let cD = cB
679- if ((base58'2W' == cD))
671+let ef = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
672+
673+let eg = 300000
674+
675+let eh = 5000000
676+
677+let ei = 50
678+
679+let ej = 10000000
680+
681+let ek = {
682+ let cF = cD
683+ if ((base58'2W' == cF))
680684 then 252289527462
681- else if ((base58'2T' == cD))
685+ else if ((base58'2T' == cF))
682686 then 2522895274
683687 else throw("Unknown chain")
684688 }
685689
686-let ej = {
687- let cD = cB
688- if ((base58'2W' == cD))
690+let el = {
691+ let cF = cD
692+ if ((base58'2W' == cF))
689693 then 250000000
690- else if ((base58'2T' == cD))
694+ else if ((base58'2T' == cF))
691695 then 250000000
692696 else throw("Unknown chain")
693697 }
694698
695-let ek = 2500000000
696-
697-let el = toBigInt(5)
698-
699-let em = toBigInt(20)
700-
701-let en = toBigInt((20 * 20))
702-
703-let eo = toBigInt(((20 * 20) * 20))
704-
705-let ep = toBigInt((((20 * 20) * 20) * 20))
706-
707-let eq = toBigInt(((((20 * 20) * 20) * 20) * 20))
708-
709-let er = 500
710-
711-func es () = "nextLandNum"
712-
713-
714-func et (eu) = ("lcn_" + eu)
715-
716-
717-func ev (ew) = ("la_" + ew)
718-
719-
720-func ex (bu,bB) = ((("ilao_" + bu) + "_") + bB)
721-
722-
723-func ey (ew) = ("lo_" + ew)
724-
725-
726-func ez (eu) = ("duckByCustomName_" + eu)
727-
728-
729-func eA (eu) = ("accountByCustomName_" + eu)
730-
731-
732-func eB () = "oldiesList"
733-
734-
735-let eC = 0
736-
737-let eD = 1
738-
739-let eE = 2
740-
741-let eF = 0
742-
743-let eG = 5
744-
745-let eH = 6
746-
747-let eI = 7
748-
749-func eJ (ew,dL) = ((aF + ew) + dL)
750-
751-
752-func eK (eL,eM) = {
753- let eN = if ((eL >= 0))
754- then (((eL + eM) - 1) / eM)
755- else -((((-(eL) + eM) - 1) / eM))
756- (eN * cK)
757- }
699+let em = 100000
700+
701+let en = 2500000000
702+
703+let eo = toBigInt(5)
704+
705+let ep = toBigInt(20)
706+
707+let eq = toBigInt((20 * 20))
708+
709+let er = toBigInt(((20 * 20) * 20))
710+
711+let es = toBigInt((((20 * 20) * 20) * 20))
712+
713+let et = toBigInt(((((20 * 20) * 20) * 20) * 20))
714+
715+let eu = 500
716+
717+func ev () = "nextLandNum"
718+
719+
720+func ew (ex) = ("lcn_" + ex)
721+
722+
723+func ey (ez) = ("la_" + ez)
724+
725+
726+func eA (bv,bC) = ((("ilao_" + bv) + "_") + bC)
727+
728+
729+func eB (ez) = ("lo_" + ez)
730+
731+
732+func eC (ex) = ("duckByCustomName_" + ex)
733+
734+
735+func eD (ex) = ("accountByCustomName_" + ex)
736+
737+
738+func eE () = "oldiesList"
739+
740+
741+func eF () = "nextRoboDuck"
742+
743+
744+let eG = 0
745+
746+let eH = 1
747+
748+let eI = 2
749+
750+let eJ = 0
751+
752+let eK = 5
753+
754+let eL = 6
755+
756+let eM = 7
757+
758+func eN (ez,dN) = ((aF + ez) + dN)
758759
759760
760761 func eO (eP,eQ) = {
761- let eR = (((((eQ[0] + eQ[1]) + eQ[2]) + eQ[3]) + eQ[4]) + eQ[5])
762- if ((0 >= eR))
762+ let eR = if ((eP >= 0))
763+ then (((eP + eQ) - 1) / eQ)
764+ else -((((-(eP) + eQ) - 1) / eQ))
765+ (eR * cM)
766+ }
767+
768+
769+func eS (eT,eU) = {
770+ let eV = (((((eU[0] + eU[1]) + eU[2]) + eU[3]) + eU[4]) + eU[5])
771+ if ((0 >= eV))
763772 then throw("Zero weights sum")
764773 else {
765- let eS = fraction(eP, cJ, eR)
766- func eT (eU,eV) = (eU :+ fraction(eV, eS, cJ))
767-
768- let eW = eQ
769- let eX = size(eW)
770- let eY = nil
771- func eZ (fa,fb) = if ((fb >= eX))
772- then fa
773- else eT(fa, eW[fb])
774-
775- func fc (fa,fb) = if ((fb >= eX))
776- then fa
774+ let eW = fraction(eT, cL, eV)
775+ func eX (eY,eZ) = (eY :+ fraction(eZ, eW, cL))
776+
777+ let fa = eU
778+ let fb = size(fa)
779+ let fc = nil
780+ func fd (fe,ff) = if ((ff >= fb))
781+ then fe
782+ else eX(fe, fa[ff])
783+
784+ func fg (fe,ff) = if ((ff >= fb))
785+ then fe
777786 else throw("List size exceeds 6")
778787
779- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
780- }
781- }
782-
783-
784-func fd (eP) = {
785- let fe = split(value(getString(dx())), "_")
786- if ((size(fe) != aI))
788+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
789+ }
790+ }
791+
792+
793+func fh (eT) = {
794+ let fi = split(value(getString(dz())), "_")
795+ if ((size(fi) != aJ))
787796 then throw("Wrong proportions data")
788797 else {
789- let ff = [parseIntValue(fe[0]), parseIntValue(fe[1]), parseIntValue(fe[2]), parseIntValue(fe[3]), parseIntValue(fe[4]), parseIntValue(fe[5])]
790- eO(eP, ff)
791- }
792- }
793-
794-
795-func fg (fh,fi,fj) = {
796- let fk = fd(fj)
797- func fl (eU,dg) = {
798- let fm = (parseIntValue(fi[dg]) - fk[dg])
799- if ((0 > fm))
800- then throw(((((("Not enough material idx=" + toString(dg)) + ", you have ") + fi[dg]) + ", but need ") + toString(fk[dg])))
801- else (eU :+ toString(fm))
798+ let fj = [parseIntValue(fi[0]), parseIntValue(fi[1]), parseIntValue(fi[2]), parseIntValue(fi[3]), parseIntValue(fi[4]), parseIntValue(fi[5])]
799+ eS(eT, fj)
800+ }
801+ }
802+
803+
804+func fk (fl,fm,fn) = {
805+ let fo = fh(fn)
806+ func fp (eY,di) = {
807+ let fq = (parseIntValue(fm[di]) - fo[di])
808+ if ((0 > fq))
809+ then throw(((((("Not enough material idx=" + toString(di)) + ", you have ") + fm[di]) + ", but need ") + toString(fo[di])))
810+ else (eY :+ toString(fq))
802811 }
803812
804- if (fh)
813+ if (fl)
805814 then {
806- let eW = cQ
807- let eX = size(eW)
808- let eY = nil
809- func eZ (fa,fb) = if ((fb >= eX))
810- then fa
811- else fl(fa, eW[fb])
812-
813- func fc (fa,fb) = if ((fb >= eX))
814- then fa
815+ let fa = cS
816+ let fb = size(fa)
817+ let fc = nil
818+ func fd (fe,ff) = if ((ff >= fb))
819+ then fe
820+ else fp(fe, fa[ff])
821+
822+ func fg (fe,ff) = if ((ff >= fb))
823+ then fe
815824 else throw("List size exceeds 6")
816825
817- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
818- }
819- else fi
820- }
821-
822-
823-func fn (fo,fp) = if ((fp == ""))
824- then $Tuple2(fo, false)
826+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
827+ }
828+ else fm
829+ }
830+
831+
832+func fr (fs,ft) = if ((ft == ""))
833+ then $Tuple2(fs, false)
825834 else {
826- func fq (eU,fr) = {
827- let fs = split(fr, ",")
828- if ((size(fs) != 2))
835+ func fu (eY,fv) = {
836+ let fw = split(fv, ",")
837+ if ((size(fw) != 2))
829838 then throw("Incorrect format, should be index,amount")
830839 else {
831- let dg = parseIntValue(fs[0])
832- if (if ((0 > dg))
840+ let di = parseIntValue(fw[0])
841+ if (if ((0 > di))
833842 then true
834- else (dg >= size(aX)))
843+ else (di >= size(aY)))
835844 then throw("Unknown product idx")
836845 else {
837- let ft = parseIntValue(fs[1])
838- let fu = split(eU._1, (fs[0] + ":"))
839- if ((size(fu) != 2))
840- then throw((("You don't have " + aT[dg]) + " equipped"))
846+ let fx = parseIntValue(fw[1])
847+ let fy = split(eY._1, (fw[0] + ":"))
848+ if ((size(fy) != 2))
849+ then throw((("You don't have " + aU[di]) + " equipped"))
841850 else {
842- let fv = fu[1]
843- let fw = if (dM(take(drop(fv, 1), 1)))
851+ let fz = fy[1]
852+ let fA = if (dO(take(drop(fz, 1), 1)))
844853 then 2
845854 else 1
846- let fx = parseIntValue(take(fv, fw))
847- let fy = drop(fv, fw)
848- let fz = if ((fx >= ft))
849- then (fx - ft)
850- else throw(((((("You equipped " + toString(fx)) + " of ") + aT[dg]) + ", but tried to use ") + toString(ft)))
851- $Tuple2(((((fu[0] + fs[0]) + ":") + toString(fz)) + fy), if (eU._2)
855+ let fB = parseIntValue(take(fz, fA))
856+ let fC = drop(fz, fA)
857+ let fD = if ((fB >= fx))
858+ then (fB - fx)
859+ else throw(((((("You equipped " + toString(fB)) + " of ") + aU[di]) + ", but tried to use ") + toString(fx)))
860+ $Tuple2(((((fy[0] + fw[0]) + ":") + toString(fD)) + fC), if (eY._2)
852861 then true
853- else if (if ((dg >= 6))
854- then (8 >= dg)
862+ else if (if ((di >= 6))
863+ then (8 >= di)
855864 else false)
856- then (fz == 0)
865+ then (fD == 0)
857866 else false)
858867 }
859868 }
860869 }
861870 }
862871
863- let eW = split(fp, "_")
864- let eX = size(eW)
865- let eY = $Tuple2(fo, false)
866- func eZ (fa,fb) = if ((fb >= eX))
867- then fa
868- else fq(fa, eW[fb])
869-
870- func fc (fa,fb) = if ((fb >= eX))
871- then fa
872+ let fa = split(ft, "_")
873+ let fb = size(fa)
874+ let fc = $Tuple2(fs, false)
875+ func fd (fe,ff) = if ((ff >= fb))
876+ then fe
877+ else fu(fe, fa[ff])
878+
879+ func fg (fe,ff) = if ((ff >= fb))
880+ then fe
872881 else throw("List size exceeds 10")
873882
874- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
883+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
875884 }
876885
877886
878-func fA (fB) = {
879- let fC = if ((fB == ""))
887+func fE (fF) = {
888+ let fG = if ((fF == ""))
880889 then nil
881- else split_4C(fB, "_")
882- func fD (eU,ct) = {
883- let fE = (size(eU) / 8)
884- let fx = if ((size(fC) > fE))
885- then parseIntValue(fC[fE])
890+ else split_4C(fF, "_")
891+ func fH (eY,cu) = {
892+ let fI = (size(eY) / 8)
893+ let fB = if ((size(fG) > fI))
894+ then parseIntValue(fG[fI])
886895 else 0
887- (eU + toBytes(fx))
896+ (eY + toBytes(fB))
888897 }
889898
890- let eW = aX
891- let eX = size(eW)
892- let eY = base58''
893- func eZ (fa,fb) = if ((fb >= eX))
894- then fa
895- else fD(fa, eW[fb])
896-
897- func fc (fa,fb) = if ((fb >= eX))
898- then fa
899+ let fa = aY
900+ let fb = size(fa)
901+ let fc = base58''
902+ func fd (fe,ff) = if ((ff >= fb))
903+ then fe
904+ else fH(fe, fa[ff])
905+
906+ func fg (fe,ff) = if ((ff >= fb))
907+ then fe
899908 else throw("List size exceeds 50")
900909
901- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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)
902- }
903-
904-
905-func fF (fG) = {
906- func fH (eU,ct) = {
907- let fE = size(eU)
908- let fI = take(drop(fG, (8 * fE)), 8)
909- (eU :+ toString(toInt(fI)))
910+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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)
911+ }
912+
913+
914+func fJ (fK) = {
915+ func fL (eY,cu) = {
916+ let fI = size(eY)
917+ let fM = take(drop(fK, (8 * fI)), 8)
918+ (eY :+ toString(toInt(fM)))
910919 }
911920
912921 makeString_2C({
913- let eW = aX
914- let eX = size(eW)
915- let eY = nil
916- func eZ (fa,fb) = if ((fb >= eX))
917- then fa
918- else fH(fa, eW[fb])
919-
920- func fc (fa,fb) = if ((fb >= eX))
921- then fa
922+ let fa = aY
923+ let fb = size(fa)
924+ let fc = nil
925+ func fd (fe,ff) = if ((ff >= fb))
926+ then fe
927+ else fL(fe, fa[ff])
928+
929+ func fg (fe,ff) = if ((ff >= fb))
930+ then fe
922931 else throw("List size exceeds 50")
923932
924- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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)
933+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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)
925934 }, "_")
926935 }
927936
928937
929-func fJ (fK,fL) = {
930- func fM (eU,fE) = {
931- let fN = if ((size(fK) > (7 + fE)))
932- then fK[(7 + fE)]
938+func fN (fO,fP) = {
939+ func fQ (eY,fI) = {
940+ let fR = if ((size(fO) > (7 + fI)))
941+ then fO[(7 + fI)]
933942 else 0
934- if ((parseIntValue(fL[fE]) > (fK[fE] + fN)))
935- then throw(("Requirement not satisfied: " + k[fE]))
943+ if ((parseIntValue(fP[fI]) > (fO[fI] + fR)))
944+ then throw(("Requirement not satisfied: " + k[fI]))
936945 else true
937946 }
938947
939- let eW = [0, 1, 2, 3, 4, 5, 6]
940- let eX = size(eW)
941- let eY = false
942- func eZ (fa,fb) = if ((fb >= eX))
943- then fa
944- else fM(fa, eW[fb])
945-
946- func fc (fa,fb) = if ((fb >= eX))
947- then fa
948+ let fa = [0, 1, 2, 3, 4, 5, 6]
949+ let fb = size(fa)
950+ let fc = false
951+ func fd (fe,ff) = if ((ff >= fb))
952+ then fe
953+ else fQ(fe, fa[ff])
954+
955+ func fg (fe,ff) = if ((ff >= fb))
956+ then fe
948957 else throw("List size exceeds 7")
949958
950- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7)
951- }
952-
953-
954-func fO (fP,fC,fQ,fK,fR,fS) = {
955- let fs = split(fP, ":")
956- if ((size(fs) != 2))
959+ fg(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7)
960+ }
961+
962+
963+func fS (fT,fG,fU,fO,fV,fW) = {
964+ let fw = split(fT, ":")
965+ if ((size(fw) != 2))
957966 then throw("Incorrect format, should be index:amount")
958- else if (if (!(fQ))
959- then (size(fs[0]) != 2)
967+ else if (if (!(fU))
968+ then (size(fw[0]) != 2)
960969 else false)
961970 then throw("Product idx should be 2 digits, zero padded")
962971 else {
963- let fT = parseIntValue(fs[0])
964- let fU = parseIntValue(fs[1])
965- if (!(containsElement(aW, fT)))
966- then throw((("Product '" + aT[fT]) + "' cannot be used for land defense"))
967- else if ((0 > fU))
972+ let fX = parseIntValue(fw[0])
973+ let fY = parseIntValue(fw[1])
974+ if (!(containsElement(aX, fX)))
975+ then throw((("Product '" + aU[fX]) + "' cannot be used for land defense"))
976+ else if ((0 > fY))
968977 then throw("Count can't be negative")
969- else if ((fU > u))
970- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT]))
971- else if ((fU == 0))
972- then $Tuple3(fC, fR, fS)
978+ else if ((fY > u))
979+ then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX]))
980+ else if ((fY == 0))
981+ then $Tuple3(fG, fV, fW)
973982 else {
974- let fV = take(fC, (8 * fT))
975- let fx = toInt(take(drop(fC, (8 * fT)), 8))
976- let fy = drop(fC, (8 * (fT + 1)))
977- let ct = split(aX[fT], "_")
978- if (if (!(fQ))
979- then (fU > fx)
983+ let fZ = take(fG, (8 * fX))
984+ let fB = toInt(take(drop(fG, (8 * fX)), 8))
985+ let fC = drop(fG, (8 * (fX + 1)))
986+ let cu = split(aY[fX], "_")
987+ if (if (!(fU))
988+ then (fY > fB)
980989 else false)
981- then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU)))
990+ then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY)))
982991 else {
983- let fz = if (if (!(fQ))
984- then fJ(fK, split(ct[ba], ","))
992+ let fD = if (if (!(fU))
993+ then fN(fO, split(cu[bb], ","))
985994 else false)
986- then (fx - fU)
987- else (fx + fU)
988- let fW = (eK(fz, bc) - eK(fx, bc))
989- $Tuple3(((fV + toBytes(fz)) + fy), (fR + fW), (fS - fW))
995+ then (fB - fY)
996+ else (fB + fY)
997+ let ga = (eO(fD, bd) - eO(fB, bd))
998+ $Tuple3(((fZ + toBytes(fD)) + fC), (fV + ga), (fW - ga))
990999 }
9911000 }
9921001 }
9931002 }
9941003
9951004
996-func fX (fP,fC,fQ,fY,fZ,ga,fK) = {
997- let fs = split(fP, ":")
998- if ((size(fs) != 2))
1005+func gb (fT,fG,fU,gc,gd,ge,fO) = {
1006+ let fw = split(fT, ":")
1007+ if ((size(fw) != 2))
9991008 then throw("Incorrect format, should be index:amount")
1000- else if (if (!(fQ))
1001- then (size(fs[0]) != 2)
1009+ else if (if (!(fU))
1010+ then (size(fw[0]) != 2)
10021011 else false)
10031012 then throw("Product idx should be 2 digits, zero padded")
10041013 else {
1005- let fT = parseIntValue(fs[0])
1006- let fU = parseIntValue(fs[1])
1007- if (if ((0 > fT))
1014+ let fX = parseIntValue(fw[0])
1015+ let fY = parseIntValue(fw[1])
1016+ if (if ((0 > fX))
10081017 then true
1009- else (fT >= size(aX)))
1018+ else (fX >= size(aY)))
10101019 then throw("Unknown product idx")
1011- else if ((0 > fU))
1020+ else if ((0 > fY))
10121021 then throw("Count can't be negative")
1013- else if ((fU > u))
1014- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT]))
1015- else if ((fU == 0))
1016- then $Tuple2(fC, false)
1022+ else if ((fY > u))
1023+ then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX]))
1024+ else if ((fY == 0))
1025+ then $Tuple2(fG, false)
10171026 else {
1018- let fV = take(fC, (8 * fT))
1019- let fx = toInt(take(drop(fC, (8 * fT)), 8))
1020- let fy = drop(fC, (8 * (fT + 1)))
1021- let ct = split(aX[fT], "_")
1022- if (if (!(fQ))
1023- then (fU > fx)
1027+ let fZ = take(fG, (8 * fX))
1028+ let fB = toInt(take(drop(fG, (8 * fX)), 8))
1029+ let fC = drop(fG, (8 * (fX + 1)))
1030+ let cu = split(aY[fX], "_")
1031+ if (if (!(fU))
1032+ then (fY > fB)
10241033 else false)
1025- then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU)))
1034+ then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY)))
10261035 else {
1027- let gb = if (if (!(fQ))
1028- then fJ(fK, split(ct[ba], ","))
1036+ let gf = if (if (!(fU))
1037+ then fN(fO, split(cu[bb], ","))
10291038 else false)
10301039 then {
1031- let gc = ct[bb]
1032- if ((gc == ""))
1040+ let gg = cu[bc]
1041+ if ((gg == ""))
10331042 then throw("Item cannot be equipped")
10341043 else {
1035- let gd = parseIntValue(gc)
1036- let ge = (gd / 100)
1037- if ((fY != ge))
1044+ let gh = parseIntValue(gg)
1045+ let gi = (gh / 100)
1046+ if ((gc != gi))
10381047 then throw("Segment incompatible")
10391048 else {
1040- let gf = ((gd % 100) / 10)
1041- if ((fZ != gf))
1049+ let gj = ((gh % 100) / 10)
1050+ if ((gd != gj))
10421051 then throw("Slot incompatible")
10431052 else {
1044- let gg = (gd % 10)
1045- if (if ((ga != 0))
1046- then (gg > 1)
1053+ let gk = (gh % 10)
1054+ if (if ((ge != 0))
1055+ then (gk > 1)
10471056 else false)
10481057 then throw("Big items should occupy slot 0")
1049- else (gg > 1)
1058+ else (gk > 1)
10501059 }
10511060 }
10521061 }
10531062 }
10541063 else false
1055- $Tuple2(((fV + toBytes((fx + (if (fQ)
1056- then fU
1057- else -(fU))))) + fy), gb)
1064+ $Tuple2(((fZ + toBytes((fB + (if (fU)
1065+ then fY
1066+ else -(fY))))) + fC), gf)
10581067 }
10591068 }
10601069 }
10611070 }
10621071
10631072
1064-func gh (gi,gj,fQ,fY,fZ,gk) = if ((gi != ""))
1073+func gl (gm,gn,fU,gc,gd,go) = if ((gm != ""))
10651074 then {
1066- let gl = split(gi, ",")
1067- if ((size(gl) > t))
1075+ let gp = split(gm, ",")
1076+ if ((size(gp) > t))
10681077 then throw("Wrong slots format")
10691078 else {
1070- let gm = gl[0]
1071- let gn = if ((size(gl) > 1))
1072- then gl[1]
1079+ let gq = gp[0]
1080+ let gr = if ((size(gp) > 1))
1081+ then gp[1]
10731082 else ""
1074- if (if ((gm == ""))
1075- then (gn == "")
1083+ if (if ((gq == ""))
1084+ then (gr == "")
10761085 else false)
1077- then gj
1086+ then gn
10781087 else {
1079- let go = if ((gm != ""))
1080- then fX(gm, gj, fQ, fY, fZ, 0, gk)
1081- else $Tuple2(gj, false)
1082- if ((gn != ""))
1083- then if (go._2)
1088+ let gs = if ((gq != ""))
1089+ then gb(gq, gn, fU, gc, gd, 0, go)
1090+ else $Tuple2(gn, false)
1091+ if ((gr != ""))
1092+ then if (gs._2)
10841093 then throw("Big item already occupies slot")
1085- else fX(gn, go._1, fQ, fY, fZ, 1, gk)._1
1086- else go._1
1094+ else gb(gr, gs._1, fU, gc, gd, 1, go)._1
1095+ else gs._1
10871096 }
10881097 }
10891098 }
1090- else gj
1091-
1092-
1093-func gp (gq,gr,fQ,gk) = {
1094- func fY (eU,gs) = {
1095- let fE = eU._1
1096- let fZ = split(gs, ";")
1097- if ((size(fZ) != s))
1099+ else gn
1100+
1101+
1102+func gt (gu,gv,fU,go) = {
1103+ func gc (eY,gw) = {
1104+ let fI = eY._1
1105+ let gd = split(gw, ";")
1106+ if ((size(gd) != s))
10981107 then throw("Wrong segment format")
10991108 else {
1100- let gt = fZ[0]
1101- let gu = fZ[1]
1102- if (if ((gt == ""))
1103- then (gu == "")
1109+ let gx = gd[0]
1110+ let gy = gd[1]
1111+ if (if ((gx == ""))
1112+ then (gy == "")
11041113 else false)
1105- then $Tuple2((fE + 1), eU._2)
1114+ then $Tuple2((fI + 1), eY._2)
11061115 else {
1107- let gv = gh(gt, eU._2, fQ, fE, 0, gk)
1108- $Tuple2((fE + 1), gh(gu, gv, fQ, fE, 1, gk))
1116+ let gz = gl(gx, eY._2, fU, fI, 0, go)
1117+ $Tuple2((fI + 1), gl(gy, gz, fU, fI, 1, go))
11091118 }
11101119 }
11111120 }
11121121
1113-( let eW = gq
1114- let eX = size(eW)
1115- let eY = $Tuple2(0, gr)
1116- func eZ (fa,fb) = if ((fb >= eX))
1117- then fa
1118- else fY(fa, eW[fb])
1119-
1120- func fc (fa,fb) = if ((fb >= eX))
1121- then fa
1122+( let fa = gu
1123+ let fb = size(fa)
1124+ let fc = $Tuple2(0, gv)
1125+ func fd (fe,ff) = if ((ff >= fb))
1126+ then fe
1127+ else gc(fe, fa[ff])
1128+
1129+ func fg (fe,ff) = if ((ff >= fb))
1130+ then fe
11221131 else throw("List size exceeds 6")
11231132
1124- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6))._2
1125- }
1126-
1127-
1128-func gw (gq,gr,fR,fS,fQ,fK) = if ((3 > size(gq)))
1133+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6))._2
1134+ }
1135+
1136+
1137+func gA (gu,gv,fV,fW,fU,fO) = if ((3 > size(gu)))
11291138 then throw("At least duck, mines and traps parts are required")
11301139 else {
1131- func fY (eU,gs) = {
1132- let fE = eU._1
1133- if ((fE == 0))
1134- then $Tuple4((fE + 1), eU._2, eU._3, eU._4)
1140+ func gc (eY,gw) = {
1141+ let fI = eY._1
1142+ if ((fI == 0))
1143+ then $Tuple4((fI + 1), eY._2, eY._3, eY._4)
11351144 else {
1136- let gx = fO(gs, eU._2, fQ, fK, eU._3, eU._4)
1137- $Tuple4((fE + 1), gx._1, gx._2, gx._3)
1145+ let gB = fS(gw, eY._2, fU, fO, eY._3, eY._4)
1146+ $Tuple4((fI + 1), gB._1, gB._2, gB._3)
11381147 }
11391148 }
11401149
1141- let gy = {
1142- let eW = gq
1143- let eX = size(eW)
1144- let eY = $Tuple4(0, gr, fR, fS)
1145- func eZ (fa,fb) = if ((fb >= eX))
1146- then fa
1147- else fY(fa, eW[fb])
1148-
1149- func fc (fa,fb) = if ((fb >= eX))
1150- then fa
1150+ let gC = {
1151+ let fa = gu
1152+ let fb = size(fa)
1153+ let fc = $Tuple4(0, gv, fV, fW)
1154+ func fd (fe,ff) = if ((ff >= fb))
1155+ then fe
1156+ else gc(fe, fa[ff])
1157+
1158+ func fg (fe,ff) = if ((ff >= fb))
1159+ then fe
11511160 else throw("List size exceeds 10")
11521161
1153- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1154- }
1155- $Tuple3(gy._2, gy._3, gy._4)
1162+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1163+ }
1164+ $Tuple3(gC._2, gC._3, gC._4)
11561165 }
11571166
11581167
1159-func gz (B) = {
1160- let gA = G(B)
1161- let gB = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1162- let gC = gp(gB, ed, true, nil)
1163- let gD = split(gB[q], ";")[1]
1164- let ar = if ((gD == ""))
1168+func gD (B) = {
1169+ let gE = G(B)
1170+ let gF = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1171+ let gG = gt(gF, ef, true, nil)
1172+ let gH = split(gF[q], ";")[1]
1173+ let ar = if ((gH == ""))
11651174 then 0
11661175 else {
1167- let gE = split(gD, ",")[0]
1168- if ((gE == ""))
1176+ let gI = split(gH, ",")[0]
1177+ if ((gI == ""))
11691178 then 0
11701179 else {
1171- let fP = split(gE, ":")
1172- let dg = fP[0]
1173- let gF = fP[1]
1174- if (if (if (if (if ((dg == "06"))
1180+ let fT = split(gI, ":")
1181+ let di = fT[0]
1182+ let gJ = fT[1]
1183+ if (if (if (if (if ((di == "06"))
11751184 then true
1176- else (dg == "07"))
1185+ else (di == "07"))
11771186 then true
1178- else (dg == "08"))
1179- then (gF != "")
1187+ else (di == "08"))
1188+ then (gJ != "")
11801189 else false)
1181- then (parseIntValue(gF) > 0)
1190+ then (parseIntValue(gJ) > 0)
11821191 else false)
1183- then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ])
1192+ then parseIntValue(split(aY[parseIntValue(di)], "_")[ba])
11841193 else 0
11851194 }
11861195 }
1187- let gk = ap(this, B, ar, true)
1188- let gG = gp(gB, gC, false, gk)
1189- (gG == gG)
1190- }
1191-
1192-
1193-func gH (gI,gJ,gK,gL) = if ((size(gI) != aI))
1196+ let go = ap(this, B, ar, true)
1197+ let gK = gt(gF, gG, false, go)
1198+ (gK == gK)
1199+ }
1200+
1201+
1202+func gL (gM,gN,gO,gP) = if ((size(gM) != aJ))
11941203 then throw("Wrong proportions data")
11951204 else {
1196- func gM (eU,gN) = {
1197- let fm = (parseIntValue(gI[gN]) + ((gL * gJ[gN]) * gK))
1198- if ((0 > fm))
1199- then throw(((((((("Panic! Pieces of type=" + toString(gN)) + ", sign=") + toString(gL)) + ", terrainCounts[i]=") + toString(gJ[gN])) + ", landSizeIndex=") + toString(gK)))
1200- else (eU :+ toString(fm))
1201- }
1202-
1203- let eW = cQ
1204- let eX = size(eW)
1205- let eY = nil
1206- func eZ (fa,fb) = if ((fb >= eX))
1207- then fa
1208- else gM(fa, eW[fb])
1209-
1210- func fc (fa,fb) = if ((fb >= eX))
1211- then fa
1205+ func gQ (eY,gR) = {
1206+ let fq = (parseIntValue(gM[gR]) + ((gP * gN[gR]) * gO))
1207+ if ((0 > fq))
1208+ then throw(((((((("Panic! Pieces of type=" + toString(gR)) + ", sign=") + toString(gP)) + ", terrainCounts[i]=") + toString(gN[gR])) + ", landSizeIndex=") + toString(gO)))
1209+ else (eY :+ toString(fq))
1210+ }
1211+
1212+ let fa = cS
1213+ let fb = size(fa)
1214+ let fc = nil
1215+ func fd (fe,ff) = if ((ff >= fb))
1216+ then fe
1217+ else gQ(fe, fa[ff])
1218+
1219+ func fg (fe,ff) = if ((ff >= fb))
1220+ then fe
12121221 else throw("List size exceeds 6")
12131222
1214- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1223+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
12151224 }
12161225
12171226
1218-func gO (gJ,gK,gL) = {
1219- let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
1220- makeString(gH(gI, gJ, gK, gL), "_")
1221- }
1222-
1223-
1224-func gP (gQ) = [(size(split(gQ, "A")) - 1), (size(split(gQ, "B")) - 1), (size(split(gQ, "C")) - 1), (size(split(gQ, "D")) - 1), (size(split(gQ, "E")) - 1), (size(split(gQ, "F")) - 1)]
1225-
1226-
1227-func gR (gS,gJ,gT,gK,gU) = {
1228- func gV (eU,gN) = {
1229- let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK)
1230- (eU :+ toString((parseIntValue(gS[gN]) + gW)))
1227+func gS (gN,gO,gP) = {
1228+ let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_")
1229+ makeString(gL(gM, gN, gO, gP), "_")
1230+ }
1231+
1232+
1233+func gT (gU) = [(size(split(gU, "A")) - 1), (size(split(gU, "B")) - 1), (size(split(gU, "C")) - 1), (size(split(gU, "D")) - 1), (size(split(gU, "E")) - 1), (size(split(gU, "F")) - 1)]
1234+
1235+
1236+func gV (gW,gN,gX,gO,gY) = {
1237+ func gZ (eY,gR) = {
1238+ let ha = ((fraction(gX, gY, a) * gN[gR]) * gO)
1239+ (eY :+ toString((parseIntValue(gW[gR]) + ha)))
12311240 }
12321241
1233- let ff = {
1234- let eW = cQ
1235- let eX = size(eW)
1236- let eY = nil
1237- func eZ (fa,fb) = if ((fb >= eX))
1238- then fa
1239- else gV(fa, eW[fb])
1240-
1241- func fc (fa,fb) = if ((fb >= eX))
1242- then fa
1242+ let fj = {
1243+ let fa = cS
1244+ let fb = size(fa)
1245+ let fc = nil
1246+ func fd (fe,ff) = if ((ff >= fb))
1247+ then fe
1248+ else gZ(fe, fa[ff])
1249+
1250+ func fg (fe,ff) = if ((ff >= fb))
1251+ then fe
12431252 else throw("List size exceeds 6")
12441253
1245- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1254+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
12461255 }
1247- makeString(ff, "_")
1248- }
1249-
1250-
1251-func gX (gJ,gT,gK,gU) = {
1252- func gV (eU,gN) = {
1253- let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK)
1254- $Tuple2((eU._1 :+ gW), (eU._2 + gW))
1256+ makeString(fj, "_")
1257+ }
1258+
1259+
1260+func hb (gN,gX,gO,gY) = {
1261+ func gZ (eY,gR) = {
1262+ let ha = ((fraction(gX, gY, a) * gN[gR]) * gO)
1263+ $Tuple2((eY._1 :+ ha), (eY._2 + ha))
12551264 }
12561265
1257- let eW = cQ
1258- let eX = size(eW)
1259- let eY = $Tuple2(nil, 0)
1260- func eZ (fa,fb) = if ((fb >= eX))
1261- then fa
1262- else gV(fa, eW[fb])
1263-
1264- func fc (fa,fb) = if ((fb >= eX))
1265- then fa
1266+ let fa = cS
1267+ let fb = size(fa)
1268+ let fc = $Tuple2(nil, 0)
1269+ func fd (fe,ff) = if ((ff >= fb))
1270+ then fe
1271+ else gZ(fe, fa[ff])
1272+
1273+ func fg (fe,ff) = if ((ff >= fb))
1274+ then fe
12661275 else throw("List size exceeds 6")
12671276
1268- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1269- }
1270-
1271-
1272-func gY (gZ,ha,hb,hc) = {
1273- let hd = hb._1
1274- let he = hb._2
1275- if ((he == 0))
1276- then $Tuple2(makeString(gZ, "_"), makeString(ha, "_"))
1277- else if ((hc >= he))
1277+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
1278+ }
1279+
1280+
1281+func hc (hd,he,hf,hg) = {
1282+ let hh = hf._1
1283+ let hi = hf._2
1284+ if ((hi == 0))
1285+ then $Tuple2(makeString(hd, "_"), makeString(he, "_"))
1286+ else if ((hg >= hi))
12781287 then {
1279- func hf (eU,gN) = (eU :+ toString((parseIntValue(gZ[gN]) + hd[gN])))
1280-
1281- let ff = {
1282- let eW = cQ
1283- let eX = size(eW)
1284- let eY = nil
1285- func eZ (fa,fb) = if ((fb >= eX))
1286- then fa
1287- else hf(fa, eW[fb])
1288-
1289- func fc (fa,fb) = if ((fb >= eX))
1290- then fa
1288+ func hj (eY,gR) = (eY :+ toString((parseIntValue(hd[gR]) + hh[gR])))
1289+
1290+ let fj = {
1291+ let fa = cS
1292+ let fb = size(fa)
1293+ let fc = nil
1294+ func fd (fe,ff) = if ((ff >= fb))
1295+ then fe
1296+ else hj(fe, fa[ff])
1297+
1298+ func fg (fe,ff) = if ((ff >= fb))
1299+ then fe
12911300 else throw("List size exceeds 6")
12921301
1293- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1302+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
12941303 }
1295- $Tuple2(makeString(ff, "_"), makeString(ha, "_"))
1304+ $Tuple2(makeString(fj, "_"), makeString(he, "_"))
12961305 }
12971306 else {
1298- func hg (eU,gN) = {
1299- let hh = fraction(hd[gN], hc, he)
1300- $Tuple2((eU._1 :+ toString((parseIntValue(gZ[gN]) + hh))), (eU._2 :+ toString(((parseIntValue(ha[gN]) + hd[gN]) - hh))))
1307+ func hk (eY,gR) = {
1308+ let hl = fraction(hh[gR], hg, hi)
1309+ $Tuple2((eY._1 :+ toString((parseIntValue(hd[gR]) + hl))), (eY._2 :+ toString(((parseIntValue(he[gR]) + hh[gR]) - hl))))
13011310 }
13021311
1303- let ff = {
1304- let eW = cQ
1305- let eX = size(eW)
1306- let eY = $Tuple2(nil, nil)
1307- func eZ (fa,fb) = if ((fb >= eX))
1308- then fa
1309- else hg(fa, eW[fb])
1310-
1311- func fc (fa,fb) = if ((fb >= eX))
1312- then fa
1312+ let fj = {
1313+ let fa = cS
1314+ let fb = size(fa)
1315+ let fc = $Tuple2(nil, nil)
1316+ func fd (fe,ff) = if ((ff >= fb))
1317+ then fe
1318+ else hk(fe, fa[ff])
1319+
1320+ func fg (fe,ff) = if ((ff >= fb))
1321+ then fe
13131322 else throw("List size exceeds 6")
13141323
1315- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1324+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
13161325 }
1317- $Tuple2(makeString(ff._1, "_"), makeString(ff._2, "_"))
1326+ $Tuple2(makeString(fj._1, "_"), makeString(fj._2, "_"))
13181327 }
13191328 }
13201329
13211330
1322-func hi (hj) = if ((hj >= toBigInt(0)))
1323- then hj
1324- else -(hj)
1325-
1326-
1327-let hk = [[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]]
1328-
1329-func hl (dG,hm) = {
1330- let hn = toInt((dG % em))
1331- let ho = if ((hm[0] > hn))
1331+func hm (hn) = if ((hn >= toBigInt(0)))
1332+ then hn
1333+ else -(hn)
1334+
1335+
1336+let ho = [[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]]
1337+
1338+func hp (dI,hq) = {
1339+ let hr = toInt((dI % ep))
1340+ let hs = if ((hq[0] > hr))
13321341 then "A"
1333- else if ((hm[1] > hn))
1342+ else if ((hq[1] > hr))
13341343 then "B"
1335- else if ((hm[2] > hn))
1344+ else if ((hq[2] > hr))
13361345 then "C"
1337- else if ((hm[3] > hn))
1346+ else if ((hq[3] > hr))
13381347 then "D"
1339- else if ((hm[4] > hn))
1348+ else if ((hq[4] > hr))
13401349 then "E"
13411350 else "F"
1342- ho
1343- }
1344-
1345-
1346-func hp (hq,hr) = {
1347- let hs = hk[hr]
1348- func ht (eU,eV) = $Tuple2((((((eU._1 + hl(eU._2, hs)) + hl((eU._2 / em), hs)) + hl((eU._2 / en), hs)) + hl((eU._2 / eo), hs)) + hl((eU._2 / ep), hs)), (eU._2 / eq))
1349-
1350- let gy = {
1351- let eW = [1, 2, 3, 4, 5]
1352- let eX = size(eW)
1353- let eY = $Tuple2("", (hq / el))
1354- func eZ (fa,fb) = if ((fb >= eX))
1355- then fa
1356- else ht(fa, eW[fb])
1357-
1358- func fc (fa,fb) = if ((fb >= eX))
1359- then fa
1351+ hs
1352+ }
1353+
1354+
1355+func ht (hu,hv) = {
1356+ let hw = ho[hv]
1357+ func hx (eY,eZ) = $Tuple2((((((eY._1 + hp(eY._2, hw)) + hp((eY._2 / ep), hw)) + hp((eY._2 / eq), hw)) + hp((eY._2 / er), hw)) + hp((eY._2 / es), hw)), (eY._2 / et))
1358+
1359+ let gC = {
1360+ let fa = [1, 2, 3, 4, 5]
1361+ let fb = size(fa)
1362+ let fc = $Tuple2("", (hu / eo))
1363+ func fd (fe,ff) = if ((ff >= fb))
1364+ then fe
1365+ else hx(fe, fa[ff])
1366+
1367+ func fg (fe,ff) = if ((ff >= fb))
1368+ then fe
13601369 else throw("List size exceeds 5")
13611370
1362- fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
1371+ fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5)
13631372 }
1364- gy._1
1365- }
1366-
1367-
1368-let hu = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1369-
1370-let hv = ["A", "B", "C", "D", "E", "F"]
1371-
1372-func hw (hx,gK) = {
1373- func hy (eU,dE) = {
1374- let fE = eU._2
1375- let hz = parseIntValue(dE)
1376- let hj = if ((hz == 0))
1373+ gC._1
1374+ }
1375+
1376+
1377+let hy = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1378+
1379+let hz = ["A", "B", "C", "D", "E", "F"]
1380+
1381+func hA (hB,gO) = {
1382+ func hC (eY,dG) = {
1383+ let fI = eY._2
1384+ let hD = parseIntValue(dG)
1385+ let hn = if ((hD == 0))
13771386 then 0
1378- else if ((hz >= (4 * gK)))
1379- then (hz / gK)
1380- else if ((hz > (3 * gK)))
1387+ else if ((hD >= (4 * gO)))
1388+ then (hD / gO)
1389+ else if ((hD > (3 * gO)))
13811390 then 3
1382- else (((hz - 1) / gK) + 1)
1383- $Tuple3((eU._1 :+ hj), (eU._2 + 1), (eU._3 + hj))
1391+ else (((hD - 1) / gO) + 1)
1392+ $Tuple3((eY._1 :+ hn), (eY._2 + 1), (eY._3 + hn))
13841393 }
13851394
1386- let gy = {
1387- let eW = hx
1388- let eX = size(eW)
1389- let eY = $Tuple3(nil, 0, 0)
1390- func eZ (fa,fb) = if ((fb >= eX))
1391- then fa
1392- else hy(fa, eW[fb])
1393-
1394- func fc (fa,fb) = if ((fb >= eX))
1395- then fa
1395+ let gC = {
1396+ let fa = hB
1397+ let fb = size(fa)
1398+ let fc = $Tuple3(nil, 0, 0)
1399+ func fd (fe,ff) = if ((ff >= fb))
1400+ then fe
1401+ else hC(fe, fa[ff])
1402+
1403+ func fg (fe,ff) = if ((ff >= fb))
1404+ then fe
13961405 else throw("List size exceeds 6")
13971406
1398- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1407+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
13991408 }
1400- let hA = gy._1
1401- let hB = value(indexOf(hA, max(hA)))
1402- let hC = (gy._3 - 25)
1403- func hD (eU,dg) = {
1404- let dQ = if ((dg == hB))
1405- then (hA[dg] - hC)
1406- else hA[dg]
1407- let dU = if ((dQ == 0))
1409+ let hE = gC._1
1410+ let hF = value(indexOf(hE, max(hE)))
1411+ let hG = (gC._3 - 25)
1412+ func hH (eY,di) = {
1413+ let dS = if ((di == hF))
1414+ then (hE[di] - hG)
1415+ else hE[di]
1416+ let dW = if ((dS == 0))
14081417 then nil
1409- else split(drop(toString(pow(10, 0, dQ, 0, 0, DOWN)), 1), "")
1410- let gd = hv[dg]
1411- func hE (hF,hG) = (hF :+ gd)
1412-
1413- let hH = {
1414- let eW = dU
1415- let eX = size(eW)
1416- let eY = nil
1417- func hI (fa,fb) = if ((fb >= eX))
1418- then fa
1419- else hE(fa, eW[fb])
1420-
1421- func hJ (fa,fb) = if ((fb >= eX))
1422- then fa
1418+ else split(drop(toString(pow(10, 0, dS, 0, 0, DOWN)), 1), "")
1419+ let gh = hz[di]
1420+ func hI (hJ,hK) = (hJ :+ gh)
1421+
1422+ let hL = {
1423+ let fa = dW
1424+ let fb = size(fa)
1425+ let fc = nil
1426+ func hM (fe,ff) = if ((ff >= fb))
1427+ then fe
1428+ else hI(fe, fa[ff])
1429+
1430+ func hN (fe,ff) = if ((ff >= fb))
1431+ then fe
14231432 else throw("List size exceeds 25")
14241433
1425- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eY, 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)
1426- }
1427- (eU ++ hH)
1434+ hN(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(fc, 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)
1435+ }
1436+ (eY ++ hL)
14281437 }
14291438
1430- let ff = {
1431- let eW = cQ
1432- let eX = size(eW)
1433- let eY = nil
1434- func hI (fa,fb) = if ((fb >= eX))
1435- then fa
1436- else hD(fa, eW[fb])
1437-
1438- func hJ (fa,fb) = if ((fb >= eX))
1439- then fa
1439+ let fj = {
1440+ let fa = cS
1441+ let fb = size(fa)
1442+ let fc = nil
1443+ func hM (fe,ff) = if ((ff >= fb))
1444+ then fe
1445+ else hH(fe, fa[ff])
1446+
1447+ func hN (fe,ff) = if ((ff >= fb))
1448+ then fe
14401449 else throw("List size exceeds 6")
14411450
1442- hJ(hI(hI(hI(hI(hI(hI(eY, 0), 1), 2), 3), 4), 5), 6)
1451+ hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6)
14431452 }
1444- func hK (eU,fE) = (eU + ff[fE])
1445-
1446- let eW = hu
1447- let eX = size(eW)
1448- let eY = ""
1449- func hL (fa,fb) = if ((fb >= eX))
1450- then fa
1451- else hK(fa, eW[fb])
1452-
1453- func hM (fa,fb) = if ((fb >= eX))
1454- then fa
1453+ func hO (eY,fI) = (eY + fj[fI])
1454+
1455+ let fa = hy
1456+ let fb = size(fa)
1457+ let fc = ""
1458+ func hP (fe,ff) = if ((ff >= fb))
1459+ then fe
1460+ else hO(fe, fa[ff])
1461+
1462+ func hQ (fe,ff) = if ((ff >= fb))
1463+ then fe
14551464 else throw("List size exceeds 25")
14561465
1457- hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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)
1458- }
1459-
1460-
1461-func hN (hO) = {
1462- let gx = split(valueOrElse(getString(hO), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1463-[toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI))
1464- then gx[bn]
1465- else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI))
1466- then gx[bo]
1467- else "0_0_0_0_0_0", gx[bp]]
1468- }
1469-
1470-
1471-func hP (hQ) = {
1472- let fs = split(hQ, "_")
1473- ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0]))
1466+ hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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)
14741467 }
14751468
14761469
14771470 func hR (hS) = {
1478- let hT = hS[bg]
1479- func hU (eU,hV) = (eU + parseIntValue(hV))
1480-
1481- func hW (eU,hV) = {
1482- let dg = eU._1
1483- let eN = (((parseIntValue(hV) + bc) - 1) / bc)
1484- $Tuple2((dg + 1), (eU._2 + (eN * cK)))
1471+ let gB = split(valueOrElse(getString(hS), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1472+[toString(valueOrElse(parseInt(gB[bn]), 0)), if ((size(split(gB[bo], "_")) == aJ))
1473+ then gB[bo]
1474+ else "0_0_0_0_0_0", if ((size(split(gB[bp], "_")) == aJ))
1475+ then gB[bp]
1476+ else "0_0_0_0_0_0", gB[bq]]
1477+ }
1478+
1479+
1480+func hT (hU) = {
1481+ let fw = split(hU, "_")
1482+ ((aM * (parseIntValue(fw[1]) + 1)) * parseIntValue(fw[0]))
1483+ }
1484+
1485+
1486+func hV (hW) = {
1487+ let hX = hW[bh]
1488+ func hY (eY,hZ) = (eY + parseIntValue(hZ))
1489+
1490+ func ia (eY,hZ) = {
1491+ let di = eY._1
1492+ let eR = (((parseIntValue(hZ) + bd) - 1) / bd)
1493+ $Tuple2((di + 1), (eY._2 + (eR * cM)))
14851494 }
14861495
1487- let hX = {
1488- let eW = split(hS[be], "_")
1489- let eX = size(eW)
1490- let eY = 0
1491- func eZ (fa,fb) = if ((fb >= eX))
1492- then fa
1493- else hU(fa, eW[fb])
1494-
1495- func fc (fa,fb) = if ((fb >= eX))
1496- then fa
1496+ let ib = {
1497+ let fa = split(hW[bf], "_")
1498+ let fb = size(fa)
1499+ let fc = 0
1500+ func fd (fe,ff) = if ((ff >= fb))
1501+ then fe
1502+ else hY(fe, fa[ff])
1503+
1504+ func fg (fe,ff) = if ((ff >= fb))
1505+ then fe
14971506 else throw("List size exceeds 6")
14981507
1499- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1508+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
15001509 }
1501- let hY = {
1502- let eW = split(hS[bf], "_")
1503- let eX = size(eW)
1504- let eY = 0
1505- func hI (fa,fb) = if ((fb >= eX))
1506- then fa
1507- else hU(fa, eW[fb])
1508-
1509- func hJ (fa,fb) = if ((fb >= eX))
1510- then fa
1510+ let ic = {
1511+ let fa = split(hW[bg], "_")
1512+ let fb = size(fa)
1513+ let fc = 0
1514+ func hM (fe,ff) = if ((ff >= fb))
1515+ then fe
1516+ else hY(fe, fa[ff])
1517+
1518+ func hN (fe,ff) = if ((ff >= fb))
1519+ then fe
15111520 else throw("List size exceeds 6")
15121521
1513- hJ(hI(hI(hI(hI(hI(hI(eY, 0), 1), 2), 3), 4), 5), 6)
1522+ hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6)
15141523 }
1515- let hZ = if ((hT == ""))
1524+ let id = if ((hX == ""))
15161525 then 0
1517- else ( let eW = split_4C(hT, "_")
1518- let eX = size(eW)
1519- let eY = $Tuple2(0, 0)
1520- func hL (fa,fb) = if ((fb >= eX))
1521- then fa
1522- else hW(fa, eW[fb])
1523-
1524- func hM (fa,fb) = if ((fb >= eX))
1525- then fa
1526+ else ( let fa = split_4C(hX, "_")
1527+ let fb = size(fa)
1528+ let fc = $Tuple2(0, 0)
1529+ func hP (fe,ff) = if ((ff >= fb))
1530+ then fe
1531+ else ia(fe, fa[ff])
1532+
1533+ func hQ (fe,ff) = if ((ff >= fb))
1534+ then fe
15261535 else throw("List size exceeds 50")
15271536
1528- hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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
1529- ((hX + hY) + hZ)
1530- }
1531-
1532-
1533-func ia (ib,ic,id) = {
1534- let hQ = ((toString(ic) + "_") + toString(id))
1535- let ie = hP(hQ)
1536- let if = valueOrElse(getString(ib), (hQ + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1537- let ig = split_4C(if, ":")
1538- let ih = hR(ig)
1539- let ii = if ((5 > size(ig)))
1540- then makeString(["0", toString(ih), toString((ie - ih)), toString(ie)], "_")
1537+ hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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
1538+ ((ib + ic) + id)
1539+ }
1540+
1541+
1542+func ie (if,ig,ih) = {
1543+ let hU = ((toString(ig) + "_") + toString(ih))
1544+ let ii = hT(hU)
1545+ let ij = valueOrElse(getString(if), (hU + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1546+ let ik = split_4C(ij, ":")
1547+ let il = hV(ik)
1548+ let im = if ((5 > size(ik)))
1549+ then makeString(["0", toString(il), toString((ii - il)), toString(ii)], "_")
15411550 else {
1542- let ij = split(ig[bh], "_")
1543- let ik = parseIntValue(ij[bi])
1544- let il = if ((size(ij) > 1))
1545- then parseIntValue(ij[bj])
1546- else ih
1547- makeString([toString(ik), toString(il), toString(((ie - ik) - il)), toString(ie)], "_")
1548- }
1549-[ig[bd], if ((size(split(ig[be], "_")) == aI))
1550- then ig[be]
1551- else "0_0_0_0_0_0", if ((size(split(ig[bf], "_")) == aI))
1552- then ig[bf]
1553- else "0_0_0_0_0_0", ig[bg], ii]
1554- }
1555-
1556-
1557-func im (hS) = {
1558- let in = hR(hS)
1559- let io = parseIntValue(split(hS[bh], "_")[bi])
1560- ((hP(hS[bd]) - in) - io)
1561- }
1562-
1563-
1564-func ip (iq,hS,ir) = if ((size(iq) != 3))
1551+ let in = split(ik[bi], "_")
1552+ let io = parseIntValue(in[bj])
1553+ let ip = if ((size(in) > 1))
1554+ then parseIntValue(in[bk])
1555+ else il
1556+ makeString([toString(io), toString(ip), toString(((ii - io) - ip)), toString(ii)], "_")
1557+ }
1558+[ik[be], if ((size(split(ik[bf], "_")) == aJ))
1559+ then ik[bf]
1560+ else "0_0_0_0_0_0", if ((size(split(ik[bg], "_")) == aJ))
1561+ then ik[bg]
1562+ else "0_0_0_0_0_0", ik[bh], im]
1563+ }
1564+
1565+
1566+func iq (hW) = {
1567+ let ir = hV(hW)
1568+ let is = parseIntValue(split(hW[bi], "_")[bj])
1569+ ((hT(hW[be]) - ir) - is)
1570+ }
1571+
1572+
1573+func it (iu,hW,iv) = if ((size(iu) != 3))
15651574 then throw("cargoListStr should contain exactly 2 ':' separators")
15661575 else {
1567- let is = split(iq[0], "_")
1568- let it = split(iq[1], "_")
1569- let iu = if ((iq[2] == ""))
1576+ let iw = split(iu[0], "_")
1577+ let ix = split(iu[1], "_")
1578+ let iy = if ((iu[2] == ""))
15701579 then nil
1571- else split_4C(iq[2], "_")
1572- if ((size(is) != aI))
1580+ else split_4C(iu[2], "_")
1581+ if ((size(iw) != aJ))
15731582 then throw("All 6 resources should be passed")
1574- else if ((size(it) != aI))
1583+ else if ((size(ix) != aJ))
15751584 then throw("All 6 materials should be passed")
15761585 else {
1577- let hc = im(hS)
1578- let iv = split(hS[be], "_")
1579- let iw = split(hS[bf], "_")
1580- let ix = if ((hS[bg] == ""))
1586+ let hg = iq(hW)
1587+ let iz = split(hW[bf], "_")
1588+ let iA = split(hW[bg], "_")
1589+ let iB = if ((hW[bh] == ""))
15811590 then nil
1582- else split_4C(hS[bg], "_")
1583- let ha = split(ir[bn], "_")
1584- let iy = split(ir[bo], "_")
1585- let iz = if ((ir[bp] == ""))
1591+ else split_4C(hW[bh], "_")
1592+ let he = split(iv[bo], "_")
1593+ let iC = split(iv[bp], "_")
1594+ let iD = if ((iv[bq] == ""))
15861595 then nil
1587- else split_4C(ir[bp], "_")
1588- func iA (eU,hV) = {
1589- let gN = eU._1
1590- let iB = parseIntValue(hV)
1591- let iC = parseIntValue(iv[gN])
1592- let iD = parseIntValue(ha[gN])
1593- if ((iB == 0))
1594- then $Tuple4((gN + 1), (eU._2 :+ iv[gN]), (eU._3 :+ ha[gN]), eU._4)
1595- else if ((iB > 0))
1596- then if ((iB > iD))
1597- then throw((((("Attempt to take " + hV) + " from backpack, but only ") + toString(iD)) + " available"))
1598- else $Tuple4((gN + 1), (eU._2 :+ toString((iC + iB))), (eU._3 :+ toString((iD - iB))), (eU._4 + iB))
1599- else if ((-(iB) > iC))
1600- then throw((((("Attempt to take " + toString(-(iB))) + " from warehouse, but only ") + toString(iC)) + " available"))
1601- else $Tuple4((gN + 1), (eU._2 :+ toString((iC + iB))), (eU._3 :+ toString((iD - iB))), (eU._4 + iB))
1596+ else split_4C(iv[bq], "_")
1597+ func iE (eY,hZ) = {
1598+ let gR = eY._1
1599+ let iF = parseIntValue(hZ)
1600+ let iG = parseIntValue(iz[gR])
1601+ let iH = parseIntValue(he[gR])
1602+ if ((iF == 0))
1603+ then $Tuple4((gR + 1), (eY._2 :+ iz[gR]), (eY._3 :+ he[gR]), eY._4)
1604+ else if ((iF > 0))
1605+ then if ((iF > iH))
1606+ then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iH)) + " available"))
1607+ else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF))
1608+ else if ((-(iF) > iG))
1609+ then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iG)) + " available"))
1610+ else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF))
16021611 }
16031612
1604- let ff = {
1605- let eW = is
1606- let eX = size(eW)
1607- let eY = $Tuple4(0, nil, nil, 0)
1608- func eZ (fa,fb) = if ((fb >= eX))
1609- then fa
1610- else iA(fa, eW[fb])
1611-
1612- func fc (fa,fb) = if ((fb >= eX))
1613- then fa
1613+ let fj = {
1614+ let fa = iw
1615+ let fb = size(fa)
1616+ let fc = $Tuple4(0, nil, nil, 0)
1617+ func fd (fe,ff) = if ((ff >= fb))
1618+ then fe
1619+ else iE(fe, fa[ff])
1620+
1621+ func fg (fe,ff) = if ((ff >= fb))
1622+ then fe
16141623 else throw("List size exceeds 6")
16151624
1616- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1625+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
16171626 }
1618- func iE (eU,hV) = {
1619- let gN = eU._1
1620- let iB = parseIntValue(hV)
1621- let iF = parseIntValue(iw[gN])
1622- let iG = parseIntValue(iy[gN])
1623- if ((iB == 0))
1624- then $Tuple4((gN + 1), (eU._2 :+ iw[gN]), (eU._3 :+ iy[gN]), eU._4)
1625- else if ((iB > 0))
1626- then if ((iB > iG))
1627- then throw((((("Attempt to take " + hV) + " from backpack, but only ") + toString(iG)) + " available"))
1628- else $Tuple4((gN + 1), (eU._2 :+ toString((iF + iB))), (eU._3 :+ toString((iG - iB))), (eU._4 + iB))
1629- else if ((-(iB) > iF))
1630- then throw((((("Attempt to take " + toString(-(iB))) + " from warehouse, but only ") + toString(iF)) + " available"))
1631- else $Tuple4((gN + 1), (eU._2 :+ toString((iF + iB))), (eU._3 :+ toString((iG - iB))), (eU._4 + iB))
1627+ func iI (eY,hZ) = {
1628+ let gR = eY._1
1629+ let iF = parseIntValue(hZ)
1630+ let iJ = parseIntValue(iA[gR])
1631+ let iK = parseIntValue(iC[gR])
1632+ if ((iF == 0))
1633+ then $Tuple4((gR + 1), (eY._2 :+ iA[gR]), (eY._3 :+ iC[gR]), eY._4)
1634+ else if ((iF > 0))
1635+ then if ((iF > iK))
1636+ then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iK)) + " available"))
1637+ else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF))
1638+ else if ((-(iF) > iJ))
1639+ then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iJ)) + " available"))
1640+ else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF))
16321641 }
16331642
1634- let gt = {
1635- let eW = it
1636- let eX = size(eW)
1637- let eY = $Tuple4(0, nil, nil, ff._4)
1638- func hI (fa,fb) = if ((fb >= eX))
1639- then fa
1640- else iE(fa, eW[fb])
1641-
1642- func hJ (fa,fb) = if ((fb >= eX))
1643- then fa
1643+ let gx = {
1644+ let fa = ix
1645+ let fb = size(fa)
1646+ let fc = $Tuple4(0, nil, nil, fj._4)
1647+ func hM (fe,ff) = if ((ff >= fb))
1648+ then fe
1649+ else iI(fe, fa[ff])
1650+
1651+ func hN (fe,ff) = if ((ff >= fb))
1652+ then fe
16441653 else throw("List size exceeds 6")
16451654
1646- hJ(hI(hI(hI(hI(hI(hI(eY, 0), 1), 2), 3), 4), 5), 6)
1655+ hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6)
16471656 }
1648- func iH (eU,hV) = {
1649- let gN = eU._1
1650- let iB = parseIntValue(hV)
1651- let iI = if ((size(ix) > gN))
1652- then parseIntValue(ix[gN])
1657+ func iL (eY,hZ) = {
1658+ let gR = eY._1
1659+ let iF = parseIntValue(hZ)
1660+ let iM = if ((size(iB) > gR))
1661+ then parseIntValue(iB[gR])
16531662 else 0
1654- let iJ = if ((size(iz) > gN))
1655- then parseIntValue(iz[gN])
1663+ let iN = if ((size(iD) > gR))
1664+ then parseIntValue(iD[gR])
16561665 else 0
1657- if ((iB == 0))
1658- then $Tuple4((gN + 1), (eU._2 :+ toString(iI)), (eU._3 :+ toString(iJ)), eU._4)
1659- else if ((iB > 0))
1660- then if ((iB > iJ))
1661- then throw((((("Attempt to take " + hV) + " from backpack, but only ") + toString(iJ)) + " available"))
1666+ if ((iF == 0))
1667+ then $Tuple4((gR + 1), (eY._2 :+ toString(iM)), (eY._3 :+ toString(iN)), eY._4)
1668+ else if ((iF > 0))
1669+ then if ((iF > iN))
1670+ then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iN)) + " available"))
16621671 else {
1663- let fW = (eK((iI + iB), bc) - eK(iI, bc))
1664- $Tuple4((gN + 1), (eU._2 :+ toString((iI + iB))), (eU._3 :+ toString((iJ - iB))), (eU._4 + fW))
1672+ let ga = (eO((iM + iF), bd) - eO(iM, bd))
1673+ $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga))
16651674 }
1666- else if ((-(iB) > iI))
1667- then throw((((("Attempt to take " + toString(-(iB))) + " from warehouse, but only ") + toString(iI)) + " available"))
1675+ else if ((-(iF) > iM))
1676+ then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iM)) + " available"))
16681677 else {
1669- let fW = (eK((iI + iB), bc) - eK(iI, bc))
1670- $Tuple4((gN + 1), (eU._2 :+ toString((iI + iB))), (eU._3 :+ toString((iJ - iB))), (eU._4 + fW))
1678+ let ga = (eO((iM + iF), bd) - eO(iM, bd))
1679+ $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga))
16711680 }
16721681 }
16731682
1674- let gx = if ((size(iu) != 0))
1683+ let gB = if ((size(iy) != 0))
16751684 then {
1676- let eW = iu
1677- let eX = size(eW)
1678- let eY = $Tuple4(0, nil, nil, gt._4)
1679- func hL (fa,fb) = if ((fb >= eX))
1680- then fa
1681- else iH(fa, eW[fb])
1682-
1683- func hM (fa,fb) = if ((fb >= eX))
1684- then fa
1685+ let fa = iy
1686+ let fb = size(fa)
1687+ let fc = $Tuple4(0, nil, nil, gx._4)
1688+ func hP (fe,ff) = if ((ff >= fb))
1689+ then fe
1690+ else iL(fe, fa[ff])
1691+
1692+ func hQ (fe,ff) = if ((ff >= fb))
1693+ then fe
16851694 else throw("List size exceeds 50")
16861695
1687- hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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)
1696+ hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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)
16881697 }
1689- else $Tuple4(0, ix, iz, gt._4)
1690- let iK = gx._4
1691- if ((iK > hc))
1692- then throw((((("Attempt to put total " + toString(iK)) + " stuff, but only ") + toString(hc)) + " warehouse space left"))
1693- else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), iK)
1698+ else $Tuple4(0, iB, iD, gx._4)
1699+ let iO = gB._4
1700+ if ((iO > hg))
1701+ then throw((((("Attempt to put total " + toString(iO)) + " stuff, but only ") + toString(hg)) + " warehouse space left"))
1702+ else $Tuple7(makeString(fj._2, "_"), makeString(gx._2, "_"), makeString_2C(gB._2, "_"), makeString(fj._3, "_"), makeString(gx._3, "_"), makeString_2C(gB._3, "_"), iO)
16941703 }
16951704 }
16961705
16971706
1698-func iL (iM,iN) = {
1699- let bQ = toString(iM)
1700- let iO = hi(toBigInt(iN))
1701- let iP = valueOrElse(getInteger(es()), (er + 1))
1702- let ew = toString(iP)
1703- let hr = toInt((iO % el))
1704- let gQ = hp(iO, hr)
1705- let dz = aU[hr]
1706- let iQ = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false)
1707- let bu = calculateAssetId(iQ)
1708- let iR = toBase58String(bu)
1709- $Tuple2([IntegerEntry(es(), (iP + 1)), iQ, StringEntry(ev(ew), iR), StringEntry(bt(iR), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(iR), 0), IntegerEntry(ex(iR, bQ), 0), ScriptTransfer(iM, 1, bu)], $Tuple2(iR, dz))
1710- }
1711-
1712-
1713-func iS (bQ,iT,iU) = if (!(sigVerify_8Kb(iT, iU, ec)))
1707+func iP (iQ,iR) = {
1708+ let bR = toString(iQ)
1709+ let iS = hm(toBigInt(iR))
1710+ let iT = valueOrElse(getInteger(ev()), (eu + 1))
1711+ let ez = toString(iT)
1712+ let hv = toInt((iS % eo))
1713+ let gU = ht(iS, hv)
1714+ let dB = aV[hv]
1715+ let iU = Issue(eN(ez, "S"), makeString([ez, "S", gU, dB], "_"), 1, 0, false)
1716+ let bv = calculateAssetId(iU)
1717+ let iV = toBase58String(bv)
1718+ $Tuple2([IntegerEntry(ev(), (iT + 1)), iU, StringEntry(ey(ez), iV), StringEntry(bu(iV), bR), StringEntry(eB(ez), bR), IntegerEntry(bE(iV), 0), IntegerEntry(eA(iV, bR), 0), ScriptTransfer(iQ, 1, bv)], $Tuple2(iV, dB))
1719+ }
1720+
1721+
1722+func iW (bR,iX,iY) = if (!(sigVerify_8Kb(iX, iY, ee)))
17141723 then throw("signature does not match")
17151724 else {
1716- let fs = split_4C(toUtf8String(iT), ";")
1717- let iV = split_4C(fs[0], "|")
1718- let iW = split(iV[eF], "_")
1719- let iX = parseIntValue(iW[0])
1720- let iY = parseIntValue(iW[1])
1721- let iZ = split(fs[1], ":")
1722- let ja = iZ[0]
1723- let jb = parseIntValue(iV[eG])
1724- if (if ((jb > (lastBlock.timestamp + ee)))
1725+ let fw = split_4C(toUtf8String(iX), ";")
1726+ let iZ = split_4C(fw[0], "|")
1727+ let ja = split(iZ[eJ], "_")
1728+ let jb = parseIntValue(ja[0])
1729+ let jc = parseIntValue(ja[1])
1730+ let jd = split(fw[1], ":")
1731+ let je = jd[0]
1732+ let jf = parseIntValue(iZ[eK])
1733+ if (if ((jf > (lastBlock.timestamp + eg)))
17251734 then true
1726- else ((lastBlock.timestamp - ee) > jb))
1727- then throw(((("signature outdated: logTime=" + toString(jb)) + ", bcTime=") + toString(lastBlock.timestamp)))
1735+ else ((lastBlock.timestamp - eg) > jf))
1736+ then throw(((("signature outdated: logTime=" + toString(jf)) + ", bcTime=") + toString(lastBlock.timestamp)))
17281737 else {
1729- let jc = iZ[1]
1730- let jd = valueOrElse(getString(dO(bQ)), "")
1731- if ((jd != jc))
1732- then throw(((("Tx ids don't match! In state: " + jd) + ", in msg: ") + jc))
1738+ let jg = jd[1]
1739+ let jh = valueOrElse(getString(dQ(bR)), "")
1740+ if ((jh != jg))
1741+ then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg))
17331742 else {
1734- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1735- let je = A(B)
1736- let jf = aj(valueOrElse(getInteger(E(B)), 0))
1737- let jg = valueOrElse(getInteger(je), jf)
1738- if ((jg != iX))
1739- then throw(((("oldHealth=" + toString(jg)) + " from state does not match one from flight log=") + toString(iX)))
1740- else if ((0 >= iX))
1743+ let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked")
1744+ let ji = A(B)
1745+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
1746+ let jk = valueOrElse(getInteger(ji), jj)
1747+ if ((jk != jb))
1748+ then throw(((("oldHealth=" + toString(jk)) + " from state does not match one from flight log=") + toString(jb)))
1749+ else if ((0 >= jb))
17411750 then throw("You can't fly with zero health")
1742- else if (!(gz(B)))
1751+ else if (!(gD(B)))
17431752 then throw("Equipment incompatible")
17441753 else {
1745- let jh = if ((size(iV) > eH))
1746- then iV[eH]
1754+ let jl = if ((size(iZ) > eL))
1755+ then iZ[eL]
17471756 else ""
1748- let ji = if ((size(iV) > eI))
1749- then iV[eI]
1757+ let jm = if ((size(iZ) > eM))
1758+ then iZ[eM]
17501759 else ""
1751- let jj = if (if ((iY > 0))
1752- then (jh == "$")
1760+ let jn = if (if ((jc > 0))
1761+ then (jl == "$")
17531762 else false)
1754- then dF(invoke(dh, "sendUsdtPrize", [bQ], nil))
1763+ then dH(invoke(dj, "sendUsdtPrize", [bR], nil))
17551764 else 0
1756- $Tuple5(iY, B, jj, ja, ji)
1765+ $Tuple5(jc, B, jn, je, jm)
17571766 }
17581767 }
17591768 }
17601769 }
17611770
17621771
1763-func jk (Q,jl) = {
1764- let id = valueOrElse(getInteger(bD(Q)), 0)
1765- let jm = valueOrElse(getInteger(bx(aH, Q)), 0)
1766- let jn = (id / 6)
1767- let jo = (id / 7)
1768- ((aK + fraction(aK, ((id + jn) + (2 * jo)), 5)) + fraction(aK, jm, (jl * 5)))
1769- }
1770-
1771-
1772-func jp (c,jq,jr) = {
1773- let js = if ((jq == eC))
1774- then $Tuple2(jr, valueOrElse(getString(bM(c)), ""))
1772+func jo (Q,jp) = {
1773+ let ih = valueOrElse(getInteger(bE(Q)), 0)
1774+ let jq = valueOrElse(getInteger(by(aI, Q)), 0)
1775+ let jr = (ih / 6)
1776+ let js = (ih / 7)
1777+ ((aL + fraction(aL, ((ih + jr) + (2 * js)), 5)) + fraction(aL, jq, (jp * 5)))
1778+ }
1779+
1780+
1781+func jt (c,ju,jv) = {
1782+ let jw = if ((ju == eG))
1783+ then $Tuple2(jv, valueOrElse(getString(bN(c)), ""))
17751784 else {
1776- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1777- let jt = valueOrElse(getString(bO(B)), aM)
1778- let ck = split(value(jt), "_")
1779- if ((ck[br] != "L"))
1780- then throw((("Duck location type is " + ck[br]) + ", but should be L"))
1781- else $Tuple2(ck[bs], B)
1782- }
1783- let Q = js._1
1784- let ju = js._2
1785- let jv = value(assetInfo(fromBase58String(Q)))
1786- let jw = bw(Q)
1787- let jx = valueOrErrorMessage(getInteger(jw), (("Land " + jv.name) + " is not staked"))
1788- let jy = valueOrErrorMessage(getString(bt(Q)), (("NFT " + jv.name) + " is orphaned"))
1789- if ((jy != c))
1785+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
1786+ let jx = valueOrElse(getString(bP(B)), aN)
1787+ let cl = split(value(jx), "_")
1788+ if ((cl[bs] != "L"))
1789+ then throw((("Duck location type is " + cl[bs]) + ", but should be L"))
1790+ else $Tuple2(cl[bt], B)
1791+ }
1792+ let Q = jw._1
1793+ let jy = jw._2
1794+ let jz = value(assetInfo(fromBase58String(Q)))
1795+ let jA = bx(Q)
1796+ let jB = valueOrErrorMessage(getInteger(jA), (("Land " + jz.name) + " is not staked"))
1797+ let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned"))
1798+ if ((jC != c))
17901799 then throw((aF + " is not yours"))
17911800 else {
1792- let jz = split(jv.description, "_")
1793- $Tuple4(ju, Q, jz, jx)
1794- }
1795- }
1796-
1797-
1798-func jA (c,eL,jq,jr) = if ((0 > eL))
1801+ let jD = split(jz.description, "_")
1802+ $Tuple4(jy, Q, jD, jB)
1803+ }
1804+ }
1805+
1806+
1807+func jE (c,eP,ju,jv) = if ((0 > eP))
17991808 then throw("Negative amount")
18001809 else {
1801- let gd = jp(c, jq, jr)
1802- let dL = gd._3[do]
1803- let gJ = gP(gd._3[dp])
1804- let gT = (lastBlock.timestamp - gd._4)
1805- if ((0 > gT))
1806- then throw(((("Saved timestamp is in future, saved = " + toString(gd._4)) + ", current = ") + toString(lastBlock.timestamp)))
1810+ let gh = jt(c, ju, jv)
1811+ let dN = gh._3[dq]
1812+ let gN = gT(gh._3[dr])
1813+ let gX = (lastBlock.timestamp - gh._4)
1814+ if ((0 > gX))
1815+ then throw(((("Saved timestamp is in future, saved = " + toString(gh._4)) + ", current = ") + toString(lastBlock.timestamp)))
18071816 else {
1808- let jl = dK(dL)
1809- let jB = jk(gd._2, jl)
1810- let jC = fraction(gT, (jB * jl), a)
1811- if ((eL > jC))
1812- then throw(((("Not enough resources, available = " + toString(jC)) + ", requested = ") + toString(eL)))
1817+ let jp = dM(dN)
1818+ let jF = jo(gh._2, jp)
1819+ let jG = fraction(gX, (jF * jp), a)
1820+ if ((eP > jG))
1821+ then throw(((("Not enough resources, available = " + toString(jG)) + ", requested = ") + toString(eP)))
18131822 else {
1814- let jD = fraction((jC - eL), a, (jB * jl))
1815- let jE = (lastBlock.timestamp - jD)
1816- let ic = (jl / cL)
1817- let hb = gX(gJ, (gT - jD), ic, jB)
1818- let ib = bC(gd._2)
1819- let id = valueOrElse(getInteger(bD(gd._2)), 0)
1820- let hS = ia(ib, ic, id)
1821- let ij = split(hS[bh], "_")
1822- let hc = parseIntValue(ij[bk])
1823- if (if ((jq == eC))
1824- then (eL > hc)
1823+ let jH = fraction((jG - eP), a, (jF * jp))
1824+ let jI = (lastBlock.timestamp - jH)
1825+ let ig = (jp / cN)
1826+ let hf = hb(gN, (gX - jH), ig, jF)
1827+ let if = bD(gh._2)
1828+ let ih = valueOrElse(getInteger(bE(gh._2)), 0)
1829+ let hW = ie(if, ig, ih)
1830+ let in = split(hW[bi], "_")
1831+ let hg = parseIntValue(in[bl])
1832+ if (if ((ju == eG))
1833+ then (eP > hg)
18251834 else false)
1826- then throw((("Only " + toString(hc)) + " space left in warehouse"))
1835+ then throw((("Only " + toString(hg)) + " space left in warehouse"))
18271836 else {
1828- let hO = bN(gd._1)
1829- let ir = hN(hO)
1830- let ha = split(ir[bn], "_")
1831- let gZ = split(hS[be], "_")
1832- let jF = if ((jq == eC))
1833- then $Tuple4(gR(gZ, gJ, (gT - jD), ic, jB), ir[bn], (parseIntValue(ij[bj]) + hb._2), (parseIntValue(ij[bk]) - hb._2))
1834- else if ((jq == eD))
1835- then $Tuple4(hS[be], gR(ha, gJ, (gT - jD), ic, jB), parseIntValue(ij[bj]), parseIntValue(ij[bk]))
1837+ let hS = bO(gh._1)
1838+ let iv = hR(hS)
1839+ let he = split(iv[bo], "_")
1840+ let hd = split(hW[bf], "_")
1841+ let jJ = if ((ju == eG))
1842+ then $Tuple4(gV(hd, gN, (gX - jH), ig, jF), iv[bo], (parseIntValue(in[bk]) + hf._2), (parseIntValue(in[bl]) - hf._2))
1843+ else if ((ju == eH))
1844+ then $Tuple4(hW[bf], gV(he, gN, (gX - jH), ig, jF), parseIntValue(in[bk]), parseIntValue(in[bl]))
18361845 else {
1837- let jG = gY(gZ, ha, hb, hc)
1838- let jH = min([parseIntValue(ij[bk]), hb._2])
1839- $Tuple4(jG._1, jG._2, (parseIntValue(ij[bj]) + jH), (parseIntValue(ij[bk]) - jH))
1846+ let jK = hc(hd, he, hf, hg)
1847+ let jL = min([parseIntValue(in[bl]), hf._2])
1848+ $Tuple4(jK._1, jK._2, (parseIntValue(in[bk]) + jL), (parseIntValue(in[bl]) - jL))
18401849 }
1841- let jI = jF._1
1842- let jJ = jF._2
1843- let jK = jF._3
1844- let jL = jF._4
1845- $Tuple5([IntegerEntry(bw(gd._2), jE), IntegerEntry(bz(aF, gd._2, c), jE)], hO, [ir[bm], jJ, ir[bo], ir[bp]], ib, [hS[bd], jI, hS[bf], hS[bg], makeString([ij[bi], toString(jK), toString(jL), ij[bl]], "_")])
1850+ let jM = jJ._1
1851+ let jN = jJ._2
1852+ let jO = jJ._3
1853+ let jP = jJ._4
1854+ $Tuple5([IntegerEntry(bx(gh._2), jI), IntegerEntry(bA(aF, gh._2, c), jI)], hS, [iv[bn], jN, iv[bp], iv[bq]], if, [hW[be], jM, hW[bg], hW[bh], makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")])
18461855 }
18471856 }
18481857 }
18491858 }
18501859
18511860
1852-func jM (c,Q,jl,jq) = {
1853- let jw = bw(Q)
1854- let jx = value(getInteger(jw))
1855- let jC = (fraction((lastBlock.timestamp - jx), jk(Q, jl), a) * jl)
1856- jA(c, jC, jq, Q)
1857- }
1858-
1859-
1860-func jN (fh,iM,jO,Q) = {
1861- let c = toString(iM)
1862- let gd = jp(c, eE, Q)
1863- let jl = dK(gd._3[do])
1864- let jP = bD(gd._2)
1865- let jQ = valueOrElse(getInteger(jP), 0)
1866- if (if (!(cz))
1867- then (jQ >= 3)
1861+func jQ (c,Q,jp,ju) = {
1862+ let jA = bx(Q)
1863+ let jB = value(getInteger(jA))
1864+ let jG = (fraction((lastBlock.timestamp - jB), jo(Q, jp), a) * jp)
1865+ jE(c, jG, ju, Q)
1866+ }
1867+
1868+
1869+func jR (fl,iQ,jS,Q) = {
1870+ let c = toString(iQ)
1871+ let gh = jt(c, eI, Q)
1872+ let jp = dM(gh._3[dq])
1873+ let jT = bE(gh._2)
1874+ let jU = valueOrElse(getInteger(jT), 0)
1875+ if (if (!(cA))
1876+ then (jU >= 3)
18681877 else false)
18691878 then throw("Currently max infrastructure level = 3")
18701879 else {
1871- let jR = ((sqrt(jl, 0, 0, DOWN) / 5) + 2)
1872- let ao = (jQ + 1)
1873- if (if (cz)
1874- then (ao > jR)
1880+ let jV = ((sqrt(jp, 0, 0, DOWN) / 5) + 2)
1881+ let ao = (jU + 1)
1882+ if (if (cA)
1883+ then (ao > jV)
18751884 else false)
1876- then throw(("Currently max infrastructure level = " + toString(jR)))
1885+ then throw(("Currently max infrastructure level = " + toString(jV)))
18771886 else {
1878- let jS = fraction(eh, (jl * ao), cL)
1879- if (if (!(fh))
1880- then (jO != jS)
1887+ let jW = fraction(ej, (jp * ao), cN)
1888+ if (if (!(fl))
1889+ then (jS != jW)
18811890 else false)
1882- then throw(("Payment attached should be " + toString(jS)))
1891+ then throw(("Payment attached should be " + toString(jW)))
18831892 else {
1884- let hO = bN(gd._1)
1885- let ir = hN(hO)
1886- let jT = split(ir[bo], "_")
1887- let jU = fraction(cF, (jl * ao), cL)
1888- let jV = makeString(fg(fh, jT, jU), "_")
1889- let jW = jM(c, gd._2, jl, eE)
1890- let jX = jW._5
1891- let jY = hP(jX[bd])
1892- let jZ = makeString([split(jX[bd], "_")[0], toString(ao)], "_")
1893- let ka = hP(jZ)
1894- let ij = split(jX[bh], "_")
1895- let kb = makeString([ij[bi], ij[bj], toString(((parseIntValue(ij[bk]) + ka) - jY)), toString(ka)], "_")
1896- $Tuple3(([IntegerEntry(jP, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(hO, makeString([ir[bm], jW._3[bn], jV, ir[bp]], ":")), StringEntry(jW._4, makeString([jZ, jX[be], jX[bf], jX[bg], kb], ":"))] ++ jW._1), ao, jU)
1893+ let hS = bO(gh._1)
1894+ let iv = hR(hS)
1895+ let jX = split(iv[bp], "_")
1896+ let jY = fraction(cH, (jp * ao), cN)
1897+ let jZ = makeString(fk(fl, jX, jY), "_")
1898+ let ka = jQ(c, gh._2, jp, eI)
1899+ let kb = ka._5
1900+ let kc = hT(kb[be])
1901+ let kd = makeString([split(kb[be], "_")[0], toString(ao)], "_")
1902+ let ke = hT(kd)
1903+ let in = split(kb[bi], "_")
1904+ let kf = makeString([in[bj], in[bk], toString(((parseIntValue(in[bl]) + ke) - kc)), toString(ke)], "_")
1905+ $Tuple3(([IntegerEntry(jT, ao), IntegerEntry(eA(gh._2, c), ao), StringEntry(hS, makeString([iv[bn], ka._3[bo], jZ, iv[bq]], ":")), StringEntry(ka._4, makeString([kd, kb[bf], kb[bg], kb[bh], kf], ":"))] ++ ka._1), ao, jY)
18971906 }
18981907 }
18991908 }
19001909 }
19011910
19021911
1903-func kc (kd,ke,kf,kg) = {
1904- let ai = valueOrElse(getInteger(ke), 0)
1905- let an = (ai + kg)
1906- let kh = al(valueOrElse(getInteger(kd), 0), an)
1907- $Tuple2([IntegerEntry(kd, kh[0]), IntegerEntry(ke, an), IntegerEntry(kf, (valueOrElse(getInteger(kf), 0) + kh[1]))], an)
1908- }
1909-
1910-
1911-func ki (B,kg) = kc(E(B), D(B), F(B), kg)
1912-
1913-
1914-func kj (c,kg) = kc(I(c), H(c), J(c), kg)
1915-
1916-
1917-func kk (c) = {
1918- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1919- let kl = bH(c)
1920- let km = getString(kl)
1921- if (!(isDefined(km)))
1912+func kg (kh,ki,kj,kk) = {
1913+ let ai = valueOrElse(getInteger(ki), 0)
1914+ let an = (ai + kk)
1915+ let kl = al(valueOrElse(getInteger(kh), 0), an)
1916+ $Tuple2([IntegerEntry(kh, kl[0]), IntegerEntry(ki, an), IntegerEntry(kj, (valueOrElse(getInteger(kj), 0) + kl[1]))], an)
1917+ }
1918+
1919+
1920+func km (B,kk) = {
1921+ let jz = value(assetInfo(fromBase58String(B)))
1922+ let c = valueOrErrorMessage(getString(bM(B)), (("NFT " + jz.name) + " is orphaned"))
1923+ if (if (if (cB)
1924+ then (jz.issuer == this)
1925+ else false)
1926+ then contains(jz.name, aH)
1927+ else false)
1928+ then kg(I(c), H(c), J(c), kk)
1929+ else kg(E(B), D(B), F(B), kk)
1930+ }
1931+
1932+
1933+func kn (c,kk) = kg(I(c), H(c), J(c), kk)
1934+
1935+
1936+func ko (c) = {
1937+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
1938+ let kp = bI(c)
1939+ let kq = getString(kp)
1940+ if (!(isDefined(kq)))
19221941 then throw("You are not eligible for ONBOARD artifact")
19231942 else {
1924- let kn = bJ(c)
1925- let ko = getString(kn)
1926- if (isDefined(ko))
1927- then throw(("You already used your ONBOARD artifact on duck " + value(ko)))
1943+ let kr = bK(c)
1944+ let ks = getString(kr)
1945+ if (isDefined(ks))
1946+ then throw(("You already used your ONBOARD artifact on duck " + value(ks)))
19281947 else {
1929- let kp = bI(B)
1930- let kq = getString(kp)
1931- if (isDefined(kq))
1932- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kq)))
1933- else ([StringEntry(kn, B), StringEntry(kp, c)] ++ ki(B, af)._1)
1948+ let kt = bJ(B)
1949+ let ku = getString(kt)
1950+ if (isDefined(ku))
1951+ then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ku)))
1952+ else ([StringEntry(kr, B), StringEntry(kt, c)] ++ km(B, af)._1)
19341953 }
19351954 }
19361955 }
19371956
19381957
1939-func kr (c,jr) = {
1940- let gd = jp(c, eE, jr)
1941- let Q = gd._2
1942- let jl = dK(gd._3[do])
1943- let ks = bx(aH, Q)
1944- if ((valueOrElse(getInteger(ks), 0) > 0))
1958+func kv (c,jv) = {
1959+ let gh = jt(c, eI, jv)
1960+ let Q = gh._2
1961+ let jp = dM(gh._3[dq])
1962+ let kw = by(aI, Q)
1963+ if ((valueOrElse(getInteger(kw), 0) > 0))
19451964 then throw("Presale artifact is already activated")
1946- else if ((parseIntValue(gd._3[dn]) > er))
1965+ else if ((parseIntValue(gh._3[dp]) > eu))
19471966 then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
19481967 else {
1949- let jW = jM(c, Q, jl, eE)
1950- (((jW._1 :+ IntegerEntry(ks, jl)) :+ StringEntry(jW._2, makeString(jW._3, ":"))) :+ StringEntry(jW._4, makeString(jW._5, ":")))
1968+ let ka = jQ(c, Q, jp, eI)
1969+ (((ka._1 :+ IntegerEntry(kw, jp)) :+ StringEntry(ka._2, makeString(ka._3, ":"))) :+ StringEntry(ka._4, makeString(ka._5, ":")))
19511970 }
19521971 }
19531972
19541973
1955-func kt (B) = {
1956- let cj = valueOrElse(getInteger(dl, bU), 0)
1957- let jt = split(valueOrElse(getString(bO(B)), aM), "_")
1974+func kx (B) = {
1975+ let ck = valueOrElse(getInteger(dn, bV), 0)
1976+ let jx = split(valueOrElse(getString(bP(B)), aN), "_")
19581977 let aA = lastBlock.timestamp
1959- let cl = cd(dl, cj)
1960- let cf = cl[bZ]
1961- let cg = cl[ca]
1962- if ((jt[br] != "T"))
1978+ let cm = ce(dn, ck)
1979+ let cg = cm[ca]
1980+ let ch = cm[cb]
1981+ if ((jx[bs] != "T"))
19631982 then false
1964- else if (if (if ((parseIntValue(jt[bq]) == cj))
1965- then (cg[cc] == "INPROGRESS")
1983+ else if (if (if ((parseIntValue(jx[br]) == ck))
1984+ then (ch[cd] == "INPROGRESS")
19661985 else false)
1967- then (parseIntValue(cf[cb]) > aA)
1986+ then (parseIntValue(cg[cc]) > aA)
19681987 else false)
19691988 then throw("Your duck is taking part in the tournament")
1970- else dJ(invoke(this, "exitTournamentInternal", [B], nil))
1971- }
1972-
1973-
1974-func ku (B) = {
1975- let jt = split(valueOrElse(getString(bO(B)), aM), "_")
1989+ else dL(invoke(this, "exitTournamentInternal", [B], nil))
1990+ }
1991+
1992+
1993+func ky (B) = {
1994+ let jx = split(valueOrElse(getString(bP(B)), aN), "_")
19761995 let aA = lastBlock.timestamp
1977- if ((jt[br] != "D"))
1996+ if ((jx[bs] != "D"))
19781997 then false
19791998 else {
1980- let cn = parseIntValue(jt[bq])
1981- let co = parseIntValue(jt[bs])
1982- if (if (((cn + aQ) > aA))
1983- then (1 > co)
1999+ let co = parseIntValue(jx[br])
2000+ let cp = parseIntValue(jx[bt])
2001+ if (if (((co + aR) > aA))
2002+ then (1 > cp)
19842003 else false)
19852004 then throw("Your duck is on delivery mission")
1986- else dJ(invoke(this, "exitDeliveryInternal", [B], nil))
1987- }
1988- }
1989-
1990-
1991-func kv (B,fM,iY,kw) = {
1992- let jt = split(valueOrElse(getString(bO(B)), aM), "_")
2005+ else dL(invoke(this, "exitDeliveryInternal", [B], nil))
2006+ }
2007+ }
2008+
2009+
2010+func kz (B,fQ,jc,kA) = {
2011+ let jx = split(valueOrElse(getString(bP(B)), aN), "_")
19932012 let aA = lastBlock.timestamp
1994- let cn = parseIntValue(jt[bq])
1995- let co = parseIntValue(jt[bs])
1996- let jy = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned")
1997- let kx = A(B)
1998- let ky = getIntegerValue(kx)
1999- let kz = if (if ((co > 0))
2013+ let co = parseIntValue(jx[br])
2014+ let cp = parseIntValue(jx[bt])
2015+ let jC = valueOrErrorMessage(getString(bM(B)), "NFT duck is orphaned")
2016+ let kB = A(B)
2017+ let kC = getIntegerValue(kB)
2018+ let kD = if (if ((cp > 0))
20002019 then true
2001- else if (if (fM)
2002- then (kw > 0)
2020+ else if (if (fQ)
2021+ then (kA > 0)
20032022 else false)
2004- then (iY > 0)
2023+ then (jc > 0)
20052024 else false)
20062025 then {
2007- let kA = invoke(di, "sendDeliveryReward", [jy], nil)
2008- if ((kA == kA))
2026+ let kE = invoke(dk, "sendDeliveryReward", [jC], nil)
2027+ if ((kE == kE))
20092028 then {
2010- let kB = V(jy)
2011-[IntegerEntry(kB, (valueOrElse(getInteger(kB), 0) + 1)), IntegerEntry(W(jy), (cn / a))]
2029+ let kF = V(jC)
2030+[IntegerEntry(kF, (valueOrElse(getInteger(kF), 0) + 1)), IntegerEntry(W(jC), (co / a))]
20122031 }
20132032 else throw("Strict value is not equal to itself.")
20142033 }
2015- else if (if (if (fM)
2016- then (iY > 0)
2034+ else if (if (if (fQ)
2035+ then (jc > 0)
20172036 else false)
2018- then ((cn + aQ) > aA)
2037+ then ((co + aR) > aA)
20192038 else false)
20202039 then throw("Your duck is still on delivery mission")
20212040 else {
2022- let kC = valueOrElse(getInteger(di, bT), 0)
2023- let kD = invoke(di, "updateDeliveryLocked", [(kC - aP)], nil)
2024- if ((kD == kD))
2025- then if (if (if (fM)
2026- then (0 >= iY)
2041+ let kG = valueOrElse(getInteger(dk, bU), 0)
2042+ let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil)
2043+ if ((kH == kH))
2044+ then if (if (if (fQ)
2045+ then (0 >= jc)
20272046 else false)
20282047 then true
2029- else (0 >= ky))
2048+ else (0 >= kC))
20302049 then nil
2031- else [IntegerEntry(U(B), (cn + cH))]
2050+ else [IntegerEntry(U(B), (co + cJ))]
20322051 else throw("Strict value is not equal to itself.")
20332052 }
2034- let kE = getStringValue(L(B))
2035- $Tuple3(kz, [StringEntry(bO(B), kE)], kE)
2036- }
2037-
2038-
2039-func kF (kG,ao,kH,c,kI,kJ) = {
2040- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2041- if (kt(B))
2053+ let kI = getStringValue(L(B))
2054+ $Tuple3(kD, [StringEntry(bP(B), kI)], kI)
2055+ }
2056+
2057+
2058+func kJ (kK,ao,kL,c,kM,kN) = {
2059+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
2060+ if (kx(B))
20422061 then throw("mergeInternal_checkTournament")
2043- else if (ku(B))
2062+ else if (ky(B))
20442063 then throw("mergeInternal_checkDelivery")
20452064 else {
2046- func kK (eU,Q) = {
2047- let jv = value(assetInfo(fromBase58String(Q)))
2048- let jw = bw(Q)
2049- let jx = valueOrErrorMessage(getInteger(jw), (("NFT " + jv.name) + " is not staked"))
2050- let jy = valueOrErrorMessage(getString(bt(Q)), (("NFT " + jv.name) + " is orphaned"))
2051- if ((jy != c))
2065+ func kO (eY,Q) = {
2066+ let jz = value(assetInfo(fromBase58String(Q)))
2067+ let jA = bx(Q)
2068+ let jB = valueOrErrorMessage(getInteger(jA), (("NFT " + jz.name) + " is not staked"))
2069+ let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned"))
2070+ if ((jC != c))
20522071 then throw((aF + " is not yours"))
20532072 else {
2054- let jz = split(jv.description, "_")
2055- let dz = jz[dq]
2056- if (if ((eU._3 != ""))
2057- then (eU._3 != dz)
2073+ let jD = split(jz.description, "_")
2074+ let dB = jD[ds]
2075+ if (if ((eY._3 != ""))
2076+ then (eY._3 != dB)
20582077 else false)
20592078 then throw("Lands should be on the same continent to merge")
20602079 else {
2061- let dL = jz[do]
2062- let kL = eU._1
2063- let gN = valueOrErrorMessage(indexOf(kL, dL), "You haven't passed all the lands needed")
2064- let kM = (take(kL, gN) + drop(kL, (gN + 1)))
2065- let jl = dK(dL)
2066- let kN = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0))
2067- let id = valueOrElse(getInteger(bD(Q)), 0)
2068- let kO = {
2069- let cD = dL
2070- if (("S" == cD))
2080+ let dN = jD[dq]
2081+ let kP = eY._1
2082+ let gR = valueOrErrorMessage(indexOf(kP, dN), "You haven't passed all the lands needed")
2083+ let kQ = (take(kP, gR) + drop(kP, (gR + 1)))
2084+ let jp = dM(dN)
2085+ let kR = (eY._2 + valueOrElse(getInteger(by(aI, Q)), 0))
2086+ let ih = valueOrElse(getInteger(bE(Q)), 0)
2087+ let kS = {
2088+ let cF = dN
2089+ if (("S" == cF))
20712090 then 3
2072- else if (("M" == cD))
2091+ else if (("M" == cF))
20732092 then 4
2074- else if (("L" == cD))
2093+ else if (("L" == cF))
20752094 then 5
2076- else if (("XL" == cD))
2095+ else if (("XL" == cF))
20772096 then 6
20782097 else throw("Only S, M, L, XL can merge")
20792098 }
2080- if ((id != kO))
2099+ if ((ih != kS))
20812100 then throw("All lands should be maxed to merge")
20822101 else {
2083- let ew = jz[dn]
2084- let gJ = gP(jz[dp])
2085- let gT = (lastBlock.timestamp - jx)
2086- if ((0 > gT))
2087- then throw(((("Saved timestamp is in future, saved = " + toString(jx)) + ", current = ") + toString(lastBlock.timestamp)))
2102+ let ez = jD[dp]
2103+ let gN = gT(jD[dr])
2104+ let gX = (lastBlock.timestamp - jB)
2105+ if ((0 > gX))
2106+ then throw(((("Saved timestamp is in future, saved = " + toString(jB)) + ", current = ") + toString(lastBlock.timestamp)))
20882107 else {
2089- let jB = jk(Q, jl)
2090- let ic = (jl / cL)
2091- let jJ = gR(split(eU._4, "_"), gJ, gT, ic, jB)
2092- let fe = gH(eU._6, gJ, ic, -1)
2093- let kP = gH(eU._10, gJ, ic, -1)
2094- let hx = gH(eU._9, gJ, ic, 1)
2095- let kQ = eU._7
2096- let dg = indexOf(kQ, Q)
2097- if (!(isDefined(dg)))
2108+ let jF = jo(Q, jp)
2109+ let ig = (jp / cN)
2110+ let jN = gV(split(eY._4, "_"), gN, gX, ig, jF)
2111+ let fi = gL(eY._6, gN, ig, -1)
2112+ let kT = gL(eY._10, gN, ig, -1)
2113+ let hB = gL(eY._9, gN, ig, 1)
2114+ let kU = eY._7
2115+ let di = indexOf(kU, Q)
2116+ if (!(isDefined(di)))
20982117 then throw(("Your staked lands don't contain " + Q))
20992118 else {
2100- let kR = bv(Q)
2101- let kS = valueOrElse(getString(kR), "")
2102- $Tuple10(kM, kN, dz, jJ, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kR)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kS != ""))
2103- then [DeleteEntry(et(kS))]
2104- else nil)), fe, removeByIndex(kQ, value(dg)), (eU._8 + jl), hx, kP)
2119+ let kV = bw(Q)
2120+ let kW = valueOrElse(getString(kV), "")
2121+ $Tuple10(kQ, kR, dB, jN, ((((((((((((eY._5 :+ DeleteEntry(bx(Q))) :+ DeleteEntry(bA(aF, Q, c))) :+ DeleteEntry(ey(ez))) :+ DeleteEntry(bu(Q))) :+ DeleteEntry(bE(Q))) :+ DeleteEntry(eA(Q, c))) :+ DeleteEntry(by(aI, Q))) :+ DeleteEntry(eB(ez))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(kV)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kW != ""))
2122+ then [DeleteEntry(ew(kW))]
2123+ else nil)), fi, removeByIndex(kU, value(di)), (eY._8 + jp), hB, kT)
21052124 }
21062125 }
21072126 }
21092128 }
21102129 }
21112130
2112- let hO = bN(B)
2113- let ir = hN(hO)
2114- let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
2115- let kT = dA(c)
2116- let kU = getString(kT)
2117- let kV = if (isDefined(kU))
2118- then split_51C(value(kU), "_")
2131+ let hS = bO(B)
2132+ let iv = hR(hS)
2133+ let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_")
2134+ let kX = dC(c)
2135+ let kY = getString(kX)
2136+ let kZ = if (isDefined(kY))
2137+ then split_51C(value(kY), "_")
21192138 else nil
2120- let kW = split(value(assetInfo(fromBase58String(kI[0]))).description, "_")[dq]
2121- let kX = split(valueOrElse(getString(dy(kW)), "0_0_0_0_0_0"), "_")
2122- let ff = {
2123- let eW = kI
2124- let eX = size(eW)
2125- let eY = $Tuple10(kH, 0, "", ir[bn], nil, gI, kV, 0, split("0_0_0_0_0_0", "_"), kX)
2126- func eZ (fa,fb) = if ((fb >= eX))
2127- then fa
2128- else kK(fa, eW[fb])
2129-
2130- func fc (fa,fb) = if ((fb >= eX))
2131- then fa
2139+ let la = split(value(assetInfo(fromBase58String(kM[0]))).description, "_")[ds]
2140+ let lb = split(valueOrElse(getString(dA(la)), "0_0_0_0_0_0"), "_")
2141+ let fj = {
2142+ let fa = kM
2143+ let fb = size(fa)
2144+ let fc = $Tuple10(kL, 0, "", iv[bo], nil, gM, kZ, 0, split("0_0_0_0_0_0", "_"), lb)
2145+ func fd (fe,ff) = if ((ff >= fb))
2146+ then fe
2147+ else kO(fe, fa[ff])
2148+
2149+ func fg (fe,ff) = if ((ff >= fb))
2150+ then fe
21322151 else throw("List size exceeds 5")
21332152
2134- fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
2153+ fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5)
21352154 }
2136- let dz = ff._3
2137- let hr = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz))
2138- let gQ = hw(ff._9, (dK(kG) / cL))
2139- let iP = valueOrElse(getInteger(es()), (er + 1))
2140- let kY = toString(iP)
2141- let iQ = Issue(eJ(kY, kG), makeString([kY, kG, gQ, dz], "_"), 1, 0, false)
2142- let bu = calculateAssetId(iQ)
2143- let kZ = toBase58String(bu)
2144- let jV = makeString(fg((kJ > 0), split(ir[bo], "_"), kJ), "_")
2145- let la = dB(c)
2146- let lb = valueOrElse(getInteger(la), 0)
2147- $Tuple2((((((((((((((((ff._5 :+ (if ((size(ff._7) > 0))
2148- then StringEntry(kT, makeString_11C(ff._7, "_"))
2149- else DeleteEntry(kT))) :+ IntegerEntry(la, if ((ff._8 > lb))
2155+ let dB = fj._3
2156+ let hv = valueOrErrorMessage(indexOf(aV, dB), ("Unknown continent: " + dB))
2157+ let gU = hA(fj._9, (dM(kK) / cN))
2158+ let iT = valueOrElse(getInteger(ev()), (eu + 1))
2159+ let lc = toString(iT)
2160+ let iU = Issue(eN(lc, kK), makeString([lc, kK, gU, dB], "_"), 1, 0, false)
2161+ let bv = calculateAssetId(iU)
2162+ let ld = toBase58String(bv)
2163+ let jZ = makeString(fk((kN > 0), split(iv[bp], "_"), kN), "_")
2164+ let le = dD(c)
2165+ let lf = valueOrElse(getInteger(le), 0)
2166+ $Tuple2((((((((((((((((fj._5 :+ (if ((size(fj._7) > 0))
2167+ then StringEntry(kX, makeString_11C(fj._7, "_"))
2168+ else DeleteEntry(kX))) :+ IntegerEntry(le, if ((fj._8 > lf))
21502169 then 0
2151- else (lb - ff._8))) :+ IntegerEntry(es(), (iP + 1))) :+ iQ) :+ StringEntry(ev(kY), kZ)) :+ StringEntry(bt(kZ), c)) :+ StringEntry(ey(kY), c)) :+ IntegerEntry(bx(aH, kZ), ff._2)) :+ IntegerEntry(bD(kZ), ao)) :+ IntegerEntry(ex(kZ, c), ao)) :+ StringEntry(hO, makeString([ir[bm], ff._4, jV, ir[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", kZ], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kZ)
2170+ else (lf - fj._8))) :+ IntegerEntry(ev(), (iT + 1))) :+ iU) :+ StringEntry(ey(lc), ld)) :+ StringEntry(bu(ld), c)) :+ StringEntry(eB(lc), c)) :+ IntegerEntry(by(aI, ld), fj._2)) :+ IntegerEntry(bE(ld), ao)) :+ IntegerEntry(eA(ld, c), ao)) :+ StringEntry(hS, makeString([iv[bn], fj._4, jZ, iv[bq]], ":"))) :+ StringEntry(dz(), makeString(fj._6, "_"))) :+ StringEntry(dA(dB), makeString(fj._10, "_"))) :+ StringEntry(bP(B), makeString([dB, "L", ld], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bv)), ld)
21522171 }
21532172 }
21542173
21552174
2156-func lc (c,kI) = kF("M", 3, "SSSS", c, kI, 0)
2157-
2158-
2159-func ld (c,kI) = kF("L", 4, "SMM", c, kI, (cF * 4))
2160-
2161-
2162-func le (c,kI) = kF("XL", 5, "SSSML", c, kI, (cF * 47))
2163-
2164-
2165-func lf (c,kI) = kF("XXL", 6, "LXL", c, kI, (cF * 54))
2166-
2167-
2168-func lg (c,kI) = {
2169- let cD = size(kI)
2170- if ((4 == cD))
2171- then lc(c, kI)
2172- else if ((3 == cD))
2173- then ld(c, kI)
2174- else if ((5 == cD))
2175- then le(c, kI)
2176- else if ((2 == cD))
2177- then lf(c, kI)
2175+func lg (c,kM) = kJ("M", 3, "SSSS", c, kM, 0)
2176+
2177+
2178+func lh (c,kM) = kJ("L", 4, "SMM", c, kM, (cH * 4))
2179+
2180+
2181+func li (c,kM) = kJ("XL", 5, "SSSML", c, kM, (cH * 47))
2182+
2183+
2184+func lj (c,kM) = kJ("XXL", 6, "LXL", c, kM, (cH * 54))
2185+
2186+
2187+func lk (c,kM) = {
2188+ let cF = size(kM)
2189+ if ((4 == cF))
2190+ then lg(c, kM)
2191+ else if ((3 == cF))
2192+ then lh(c, kM)
2193+ else if ((5 == cF))
2194+ then li(c, kM)
2195+ else if ((2 == cF))
2196+ then lj(c, kM)
21782197 else throw("Unknown merge")
21792198 }
21802199
21812200
2182-func lh (bQ) = {
2183- let li = getString(bM(bQ))
2184- if (isDefined(li))
2201+func ll (bR) = {
2202+ let lm = getString(bN(bR))
2203+ if (isDefined(lm))
21852204 then {
2186- let B = value(li)
2187- let lj = bO(B)
2188- let ck = split(valueOrElse(getString(lj), aM), "_")
2189- let cn = parseIntValue(ck[bq])
2190- if (if ((ck[br] != "D"))
2205+ let B = value(lm)
2206+ let ln = bP(B)
2207+ let cl = split(valueOrElse(getString(ln), aN), "_")
2208+ let co = parseIntValue(cl[br])
2209+ if (if ((cl[bs] != "D"))
21912210 then true
2192- else ((cn + aQ) > lastBlock.timestamp))
2211+ else ((co + aR) > lastBlock.timestamp))
21932212 then nil
21942213 else {
2195- let kx = A(B)
2196- if ((parseIntValue(ck[bs]) > 0))
2214+ let kB = A(B)
2215+ if ((parseIntValue(cl[bt]) > 0))
21972216 then {
2198- let kA = invoke(di, "sendDeliveryReward", [bQ], nil)
2199- if ((kA == kA))
2217+ let kE = invoke(dk, "sendDeliveryReward", [bR], nil)
2218+ if ((kE == kE))
22002219 then nil
22012220 else throw("Strict value is not equal to itself.")
22022221 }
22032222 else ({
2204- let kC = valueOrElse(getInteger(di, bT), 0)
2205- let kD = invoke(di, "updateDeliveryLocked", [(kC - aP)], nil)
2206- if ((kD == kD))
2207- then if ((0 >= getIntegerValue(kx)))
2223+ let kG = valueOrElse(getInteger(dk, bU), 0)
2224+ let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil)
2225+ if ((kH == kH))
2226+ then if ((0 >= getIntegerValue(kB)))
22082227 then nil
22092228 else {
2210- let lk = invoke(this, "saveInteger", [U(B), (cn + cH)], nil)
2211- if ((lk == lk))
2229+ let lo = invoke(this, "saveInteger", [U(B), (co + cJ)], nil)
2230+ if ((lo == lo))
22122231 then nil
22132232 else throw("Strict value is not equal to itself.")
22142233 }
22152234 else throw("Strict value is not equal to itself.")
2216- } :+ StringEntry(lj, getStringValue(L(B))))
2235+ } :+ StringEntry(ln, getStringValue(L(B))))
22172236 }
22182237 }
22192238 else nil
22202239 }
22212240
22222241
2223-func ll (gN) = if (if ((gN.originCaller != dh))
2224- then valueOrElse(getBoolean(dN()), false)
2242+func lp (gR) = if (if ((gR.originCaller != dj))
2243+ then valueOrElse(getBoolean(dP()), false)
22252244 else false)
22262245 then throw("Contracts are under maintenance")
22272246 else {
2228- let bQ = toString(gN.originCaller)
2229- (lh(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId)))
2247+ let bR = toString(gR.originCaller)
2248+ (ll(bR) :+ StringEntry(dQ(bR), toBase58String(gR.transactionId)))
22302249 }
22312250
22322251
2233-func lm (gN) = if (if ((gN.originCaller != dh))
2234- then valueOrElse(getBoolean(dN()), false)
2252+func lq (gR) = if (if ((gR.originCaller != dj))
2253+ then valueOrElse(getBoolean(dP()), false)
22352254 else false)
22362255 then throw("Contracts are under maintenance")
2237- else [StringEntry(dO(toString(gN.originCaller)), toBase58String(gN.transactionId))]
2238-
2239-
2240-@Callable(gN)
2241-func constructorV1 (ln) = if ((gN.caller != this))
2256+ else [StringEntry(dQ(toString(gR.originCaller)), toBase58String(gR.transactionId))]
2257+
2258+
2259+@Callable(gR)
2260+func constructorV1 (lr) = if ((gR.caller != this))
22422261 then throw("Permission denied")
2243- else [StringEntry(db(), ln)]
2244-
2245-
2246-
2247-@Callable(gN)
2248-func saveInteger (cT,eL) = if ((gN.caller != this))
2262+ else [StringEntry(dd(), lr)]
2263+
2264+
2265+
2266+@Callable(gR)
2267+func saveInteger (cV,eP) = if ((gR.caller != this))
22492268 then throw("saveInteger is not public method")
2250- else [IntegerEntry(cT, eL)]
2251-
2252-
2253-
2254-@Callable(gN)
2255-func setBlocked (lo) = if ((gN.caller != this))
2269+ else [IntegerEntry(cV, eP)]
2270+
2271+
2272+
2273+@Callable(gR)
2274+func setBlocked (ls) = if ((gR.caller != this))
22562275 then throw("permission denied")
2257- else [BooleanEntry(dN(), lo)]
2258-
2259-
2260-
2261-@Callable(gN)
2276+ else [BooleanEntry(dP(), ls)]
2277+
2278+
2279+
2280+@Callable(gR)
22622281 func stakeLand () = {
2263- let lp = ll(gN)
2264- if ((size(gN.payments) != 1))
2282+ let lt = lp(gR)
2283+ if ((size(gR.payments) != 1))
22652284 then throw("Exactly one payment required")
22662285 else {
2267- let lq = value(gN.payments[0])
2268- let bu = value(lq.assetId)
2269- let cS = toString(gN.caller)
2270- if ((lq.amount != 1))
2286+ let lu = value(gR.payments[0])
2287+ let bv = value(lu.assetId)
2288+ let cU = toString(gR.caller)
2289+ if ((lu.amount != 1))
22712290 then throw((("NFT " + aF) + " token should be attached as payment"))
22722291 else {
2273- let jv = value(assetInfo(bu))
2274- if ((jv.issuer != this))
2292+ let jz = value(assetInfo(bv))
2293+ if ((jz.issuer != this))
22752294 then throw("Unknown issuer of token")
2276- else if (!(contains(jv.name, aF)))
2295+ else if (!(contains(jz.name, aF)))
22772296 then throw((("Only NFT " + aF) + " tokens are accepted"))
22782297 else {
2279- let lr = drop(jv.name, 4)
2280- let ew = if (contains(lr, "XXL"))
2281- then dropRight(lr, 3)
2282- else if (contains(lr, "XL"))
2283- then dropRight(lr, 2)
2284- else dropRight(lr, 1)
2285- if (!(isDefined(parseInt(ew))))
2286- then throw(("Cannot parse land number from " + jv.name))
2298+ let lv = drop(jz.name, 4)
2299+ let ez = if (contains(lv, "XXL"))
2300+ then dropRight(lv, 3)
2301+ else if (contains(lv, "XL"))
2302+ then dropRight(lv, 2)
2303+ else dropRight(lv, 1)
2304+ if (!(isDefined(parseInt(ez))))
2305+ then throw(("Cannot parse land number from " + jz.name))
22872306 else {
2288- let Q = toBase58String(bu)
2289- let jw = bw(Q)
2290- if (isDefined(getInteger(jw)))
2291- then throw((("NFT " + jv.name) + " is already staked"))
2307+ let Q = toBase58String(bv)
2308+ let jA = bx(Q)
2309+ if (isDefined(getInteger(jA)))
2310+ then throw((("NFT " + jz.name) + " is already staked"))
22922311 else {
2293- let jz = split(jv.description, "_")
2294- let gJ = gP(jz[dp])
2295- let jl = dK(jz[do])
2296- let ic = (jl / cL)
2297- let fe = gO(gJ, ic, 1)
2298- let ls = dy(jz[dq])
2299- let kX = split(valueOrElse(getString(ls), "0_0_0_0_0_0"), "_")
2300- let lt = makeString(gH(kX, gJ, ic, 1), "_")
2301- let kT = dA(cS)
2302- let kU = getString(kT)
2303- let kQ = if (isDefined(kU))
2304- then split_51C(value(kU), "_")
2312+ let jD = split(jz.description, "_")
2313+ let gN = gT(jD[dr])
2314+ let jp = dM(jD[dq])
2315+ let ig = (jp / cN)
2316+ let fi = gS(gN, ig, 1)
2317+ let lw = dA(jD[ds])
2318+ let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_")
2319+ let lx = makeString(gL(lb, gN, ig, 1), "_")
2320+ let kX = dC(cU)
2321+ let kY = getString(kX)
2322+ let kU = if (isDefined(kY))
2323+ then split_51C(value(kY), "_")
23052324 else nil
2306- if (containsElement(kQ, Q))
2325+ if (containsElement(kU, Q))
23072326 then throw(("Your staked lands already contain " + Q))
2308- else if ((size(kQ) >= aJ))
2309- then throw((("Your already staked max (" + toString(aJ)) + ") lands"))
2327+ else if ((size(kU) >= aK))
2328+ then throw((("Your already staked max (" + toString(aK)) + ") lands"))
23102329 else {
2311- let id = valueOrElse(getInteger(bD(Q)), 0)
2312- let la = dB(cS)
2313- let lu = valueOrElse(getInteger(la), 0)
2314- let lv = invoke(dk, "onStakeUnstakeLand", [cS], nil)
2315- $Tuple2(([IntegerEntry(jw, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(kT, makeString_11C((kQ :+ Q), "_")), IntegerEntry(la, (lu + jl)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), id), StringEntry(dx(), fe), StringEntry(ls, lt)] ++ lp), lv)
2330+ let ih = valueOrElse(getInteger(bE(Q)), 0)
2331+ let le = dD(cU)
2332+ let ly = valueOrElse(getInteger(le), 0)
2333+ let lz = invoke(dm, "onStakeUnstakeLand", [cU], nil)
2334+ $Tuple2(([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aF, Q, cU), lastBlock.timestamp), StringEntry(kX, makeString_11C((kU :+ Q), "_")), IntegerEntry(le, (ly + jp)), StringEntry(bu(Q), cU), StringEntry(eB(ez), cU), IntegerEntry(eA(Q, cU), ih), StringEntry(dz(), fi), StringEntry(lw, lx)] ++ lt), lz)
23162335 }
23172336 }
23182337 }
23232342
23242343
23252344
2326-@Callable(gN)
2327-func unstakeLand (jr) = {
2328- let lp = ll(gN)
2329- if ((size(gN.payments) != 0))
2345+@Callable(gR)
2346+func unstakeLand (jv) = {
2347+ let lt = lp(gR)
2348+ if ((size(gR.payments) != 0))
23302349 then throw("No payments required")
23312350 else {
2332- let c = toString(gN.caller)
2333- let gd = jp(c, eD, jr)
2334- let Q = gd._2
2335- let jz = gd._3
2336- let kT = dA(c)
2337- let gJ = gP(jz[dp])
2338- let jl = dK(jz[do])
2339- let ic = (jl / cL)
2340- let fe = gO(gJ, ic, -1)
2341- let ls = dy(jz[dq])
2342- let kX = split(valueOrElse(getString(ls), "0_0_0_0_0_0"), "_")
2343- let lt = makeString(gH(kX, gJ, ic, -1), "_")
2344- let jW = jM(c, Q, jl, eD)
2345- let kQ = split_51C(valueOrElse(getString(kT), ""), "_")
2346- let dg = indexOf(kQ, Q)
2347- if (!(isDefined(dg)))
2351+ let c = toString(gR.caller)
2352+ let gh = jt(c, eH, jv)
2353+ let Q = gh._2
2354+ let jD = gh._3
2355+ let kX = dC(c)
2356+ let gN = gT(jD[dr])
2357+ let jp = dM(jD[dq])
2358+ let ig = (jp / cN)
2359+ let fi = gS(gN, ig, -1)
2360+ let lw = dA(jD[ds])
2361+ let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_")
2362+ let lx = makeString(gL(lb, gN, ig, -1), "_")
2363+ let ka = jQ(c, Q, jp, eH)
2364+ let kU = split_51C(valueOrElse(getString(kX), ""), "_")
2365+ let di = indexOf(kU, Q)
2366+ if (!(isDefined(di)))
23482367 then throw(("Your staked lands don't contain " + Q))
23492368 else {
23502369 let aA = lastBlock.timestamp
2351- let lw = valueOrElse(getInteger(dj, bP(c)), 0)
2352- if ((lw >= aA))
2353- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lw)))
2370+ let lA = valueOrElse(getInteger(dl, bQ(c)), 0)
2371+ if ((lA >= aA))
2372+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lA)))
23542373 else {
2355- let lx = (valueOrElse(getInteger(dk, b(c)), 0) + cG)
2356- if ((lx > aA))
2357- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lx)))
2374+ let lB = (valueOrElse(getInteger(dm, b(c)), 0) + cI)
2375+ if ((lB > aA))
2376+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lB)))
23582377 else {
2359- let la = dB(c)
2360- let lb = valueOrElse(getInteger(la), 0)
2361- let ly = if ((jl > lb))
2378+ let le = dD(c)
2379+ let lf = valueOrElse(getInteger(le), 0)
2380+ let lC = if ((jp > lf))
23622381 then 0
2363- else (lb - jl)
2364- let lv = invoke(dk, "onStakeUnstakeLand", [c], nil)
2365- $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(ls, lt), StringEntry(jW._2, makeString(jW._3, ":")), if ((size(kQ) > 1))
2366- then StringEntry(kT, makeString_11C(removeByIndex(kQ, value(dg)), "_"))
2367- else DeleteEntry(kT), IntegerEntry(la, ly)] ++ lp), lv)
2382+ else (lf - jp)
2383+ let lz = invoke(dm, "onStakeUnstakeLand", [c], nil)
2384+ $Tuple2(([ScriptTransfer(gR.caller, 1, fromBase58String(Q)), DeleteEntry(bx(Q)), DeleteEntry(bA(aF, Q, c)), StringEntry(dz(), fi), StringEntry(lw, lx), StringEntry(ka._2, makeString(ka._3, ":")), if ((size(kU) > 1))
2385+ then StringEntry(kX, makeString_11C(removeByIndex(kU, value(di)), "_"))
2386+ else DeleteEntry(kX), IntegerEntry(le, lC)] ++ lt), lz)
23682387 }
23692388 }
23702389 }
23732392
23742393
23752394
2376-@Callable(gN)
2395+@Callable(gR)
23772396 func stakeDuck () = {
2378- let lp = ll(gN)
2379- if ((size(gN.payments) != 1))
2397+ let lt = lp(gR)
2398+ if ((size(gR.payments) != 1))
23802399 then throw("Exactly one payment required")
23812400 else {
2382- let lq = value(gN.payments[0])
2383- let bu = value(lq.assetId)
2384- let cS = toString(gN.caller)
2385- if ((lq.amount != 1))
2401+ let lu = value(gR.payments[0])
2402+ let bv = value(lu.assetId)
2403+ let cU = toString(gR.caller)
2404+ if ((lu.amount != 1))
23862405 then throw((("NFT " + aG) + " token should be attached as payment"))
23872406 else {
2388- let jv = value(assetInfo(bu))
2389- if (if ((jv.issuer != ea))
2390- then (jv.issuer != eb)
2407+ let jz = value(assetInfo(bv))
2408+ let lD = if (if (cB)
2409+ then (jz.issuer == this)
23912410 else false)
2392- then throw((("Unknown issuer of " + aG) + " token"))
2393- else if (!(contains(jv.name, aG)))
2394- then throw((("Only NFT " + aG) + " tokens are accepted"))
2411+ then contains(jz.name, aH)
2412+ else false
2413+ if (if (if ((jz.issuer != ec))
2414+ then (jz.issuer != ed)
2415+ else false)
2416+ then !(lD)
2417+ else false)
2418+ then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token"))
2419+ else if (if (!(contains(jz.name, aG)))
2420+ then !(lD)
2421+ else false)
2422+ then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted"))
23952423 else {
2396- let lz = toBase58String(bu)
2397- let jw = bw(lz)
2398- if (isDefined(getInteger(jw)))
2399- then throw((("NFT " + jv.name) + " is already staked"))
2400- else if (isDefined(getString(bM(cS))))
2401- then throw(("You already staked one duck: " + jv.name))
2424+ let lE = toBase58String(bv)
2425+ let jA = bx(lE)
2426+ if (isDefined(getInteger(jA)))
2427+ then throw((("NFT " + jz.name) + " is already staked"))
2428+ else if (isDefined(getString(bN(cU))))
2429+ then throw(("You already staked one duck: " + jz.name))
24022430 else {
2403- let lj = bO(lz)
2404- let ci = getString(lj)
2405- let hO = bN(lz)
2406- let lA = getString(hO)
2407- let je = A(lz)
2408- let jf = aj(valueOrElse(getInteger(E(lz)), 0))
2409- let ky = valueOrElse(getInteger(je), jf)
2410- ([IntegerEntry(jw, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(lz), cS), StringEntry(bM(cS), lz)] ++ (if (isDefined(ci))
2431+ let ln = bP(lE)
2432+ let cj = getString(ln)
2433+ let hS = bO(lE)
2434+ let lF = getString(hS)
2435+ let ji = A(lE)
2436+ let jj = aj(valueOrElse(getInteger(E(lE)), 0))
2437+ let kC = valueOrElse(getInteger(ji), jj)
2438+ ([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aG, toBase58String(bv), cU), lastBlock.timestamp), StringEntry(bM(lE), cU), StringEntry(bN(cU), lE)] ++ (if (isDefined(cj))
24112439 then nil
2412- else ([StringEntry(lj, aM)] ++ (if (isDefined(lA))
2440+ else ([StringEntry(ln, aN)] ++ (if (isDefined(lF))
24132441 then nil
2414- else (([StringEntry(hO, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(je, ky)) ++ lp)))))
2442+ else (([StringEntry(hS, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ji, kC)) ++ lt)))))
24152443 }
24162444 }
24172445 }
24202448
24212449
24222450
2423-@Callable(gN)
2424-func unstakeDuck (lz) = {
2425- let lp = ll(gN)
2426- if ((size(gN.payments) != 0))
2451+@Callable(gR)
2452+func unstakeDuck (lE) = {
2453+ let lt = lp(gR)
2454+ if ((size(gR.payments) != 0))
24272455 then throw("No payments required")
24282456 else {
2429- let bu = fromBase58String(lz)
2430- let cS = toString(gN.caller)
2431- let jv = value(assetInfo(bu))
2432- let jw = bw(lz)
2433- if (!(isDefined(getInteger(jw))))
2434- then throw((("NFT " + jv.name) + " is not staked"))
2435- else if (!(isDefined(getString(bM(cS)))))
2436- then throw((("The duck " + jv.name) + " is not staked"))
2457+ let bv = fromBase58String(lE)
2458+ let cU = toString(gR.caller)
2459+ let jz = value(assetInfo(bv))
2460+ let jA = bx(lE)
2461+ if (!(isDefined(getInteger(jA))))
2462+ then throw((("NFT " + jz.name) + " is not staked"))
2463+ else if (!(isDefined(getString(bN(cU)))))
2464+ then throw((("The duck " + jz.name) + " is not staked"))
24372465 else {
2438- let jy = valueOrErrorMessage(getString(bL(lz)), (("NFT " + jv.name) + " is orphaned"))
2439- if ((jy != cS))
2466+ let jC = valueOrErrorMessage(getString(bM(lE)), (("NFT " + jz.name) + " is orphaned"))
2467+ if ((jC != cU))
24402468 then throw("Staked NFT is not yours")
2441- else if (kt(lz))
2469+ else if (kx(lE))
24422470 then throw("unstakeDuck_checkTournament")
2443- else if (ku(lz))
2471+ else if (ky(lE))
24442472 then throw("unstakeDuck_checkDelivery")
24452473 else {
2446- let je = A(lz)
2447- let jf = aj(valueOrElse(getInteger(E(lz)), 0))
2448- let av = valueOrElse(getInteger(je), jf)
2449- if ((jf > av))
2450- then throw((("Please heal your duck to " + toString(jf)) + "hp before unstaking"))
2451- else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(jw), DeleteEntry(je), DeleteEntry(bO(lz)), DeleteEntry(bL(lz)), DeleteEntry(bz(aG, lz, cS)), DeleteEntry(bM(cS))] ++ lp)
2474+ let ji = A(lE)
2475+ let jj = aj(valueOrElse(getInteger(E(lE)), 0))
2476+ let av = valueOrElse(getInteger(ji), jj)
2477+ if ((jj > av))
2478+ then throw((("Please heal your duck to " + toString(jj)) + "hp before unstaking"))
2479+ else ([ScriptTransfer(gR.caller, 1, bv), DeleteEntry(jA), DeleteEntry(ji), DeleteEntry(bP(lE)), DeleteEntry(bM(lE)), DeleteEntry(bA(aG, lE, cU)), DeleteEntry(bN(cU))] ++ lt)
24522480 }
24532481 }
24542482 }
24562484
24572485
24582486
2459-@Callable(gN)
2460-func claimRes (eL,lB) = {
2461- let lp = ll(gN)
2462- if ((size(gN.payments) != 0))
2487+@Callable(gR)
2488+func claimRes (eP,lG) = {
2489+ let lt = lp(gR)
2490+ if ((size(gR.payments) != 0))
24632491 then throw("No payments required")
24642492 else {
2465- let c = toString(gN.originCaller)
2466- let fm = jA(c, eL, eD, lB)
2467- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2468- $Tuple2(((((fm._1 ++ ki(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ lp), fm._3[bn])
2469- }
2470- }
2471-
2472-
2473-
2474-@Callable(gN)
2475-func claimResToWH (eL,lB) = {
2476- let lp = ll(gN)
2477- if ((size(gN.payments) != 0))
2493+ let c = toString(gR.originCaller)
2494+ let fq = jE(c, eP, eH, lG)
2495+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
2496+ $Tuple2(((((fq._1 ++ km(B, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._3[bo])
2497+ }
2498+ }
2499+
2500+
2501+
2502+@Callable(gR)
2503+func claimResToWH (eP,lG) = {
2504+ let lt = lp(gR)
2505+ if ((size(gR.payments) != 0))
24782506 then throw("No payments required")
24792507 else {
2480- let c = toString(gN.originCaller)
2481- let fm = jA(c, eL, eC, lB)
2482- $Tuple2(((((fm._1 ++ kj(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ lp), fm._5[be])
2483- }
2484- }
2485-
2486-
2487-
2488-@Callable(gN)
2489-func flight (iT,iU) = {
2490- let lp = lm(gN)
2491- if ((size(gN.payments) != 0))
2508+ let c = toString(gR.originCaller)
2509+ let fq = jE(c, eP, eG, lG)
2510+ $Tuple2(((((fq._1 ++ kn(c, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._5[bf])
2511+ }
2512+ }
2513+
2514+
2515+
2516+@Callable(gR)
2517+func flight (iX,iY) = {
2518+ let lt = lq(gR)
2519+ if ((size(gR.payments) != 0))
24922520 then throw("No payments required")
24932521 else {
2494- let bQ = toString(gN.caller)
2495- let hs = iS(bQ, iT, iU)
2496- let iY = hs._1
2497- let B = hs._2
2498- let lj = bO(B)
2499- let jt = valueOrElse(getString(lj), aM)
2500- let ja = hs._4
2501- if ((ja == jt))
2522+ let bR = toString(gR.caller)
2523+ let hw = iW(bR, iX, iY)
2524+ let jc = hw._1
2525+ let B = hw._2
2526+ let ln = bP(B)
2527+ let jx = valueOrElse(getString(ln), aN)
2528+ let je = hw._4
2529+ if ((je == jx))
25022530 then throw("You can't fly to the same location")
25032531 else {
2504- let cw = split(ja, "_")
2505- let lC = (cw[br] == "T")
2506- let lD = (cw[br] == "D")
2507- let gA = G(B)
2508- let lE = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2509- let lF = fn(lE, hs._5)
2510- let lG = lF._1
2511- let lH = lF._2
2512- let lI = if (!(cr(dl, jt)))
2513- then if (!(cp(ja)))
2514- then cu(jt, ja, 5)
2515- else if ((iY > 0))
2516- then $Tuple2(ja, iY)
2517- else $Tuple2(jt, 0)
2518- else if (ch(dl, jt))
2519- then if (!(ch(dl, ja)))
2532+ let cx = split(je, "_")
2533+ let lH = (cx[bs] == "T")
2534+ let lI = (cx[bs] == "D")
2535+ let gE = G(B)
2536+ let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,")
2537+ let lK = fr(lJ, hw._5)
2538+ let lL = lK._1
2539+ let lM = lK._2
2540+ let lN = if (!(cs(dn, jx)))
2541+ then if (!(cq(je)))
2542+ then cv(jx, je, 5)
2543+ else if ((jc > 0))
2544+ then $Tuple2(je, jc)
2545+ else $Tuple2(jx, 0)
2546+ else if (ci(dn, jx))
2547+ then if (!(ci(dn, je)))
25202548 then throw("Your duck is taking part in the tournament")
25212549 else {
2522- let kw = parseIntValue(cw[bs])
2523- let lJ = split(jt, "_")
2524- let cj = valueOrElse(getInteger(dl, bU), 0)
2525- if ((kw != (parseIntValue(lJ[bs]) + 1)))
2526- then cu(jt, ja, 7)
2527- else if ((iY > 0))
2550+ let kA = parseIntValue(cx[bt])
2551+ let lO = split(jx, "_")
2552+ let ck = valueOrElse(getInteger(dn, bV), 0)
2553+ if ((kA != (parseIntValue(lO[bt]) + 1)))
2554+ then cv(jx, je, 7)
2555+ else if ((jc > 0))
25282556 then {
2529- let lK = valueOrElse(getInteger(dl, bY(cj, B)), 0)
2530- let lL = if ((kw > lK))
2531- then invoke(dl, "saveDuckResult", [B, kw], nil)
2557+ let lP = valueOrElse(getInteger(dn, bZ(ck, B)), 0)
2558+ let lQ = if ((kA > lP))
2559+ then invoke(dn, "saveDuckResult", [B, kA], nil)
25322560 else unit
2533- if ((lL == lL))
2534- then $Tuple2(ja, iY)
2561+ if ((lQ == lQ))
2562+ then $Tuple2(je, jc)
25352563 else throw("Strict value is not equal to itself.")
25362564 }
2537- else $Tuple2(jt, 0)
2565+ else $Tuple2(jx, 0)
25382566 }
2539- else if (!(cm(jt)))
2567+ else if (!(cn(jx)))
25402568 then {
2541- let lM = dC(invoke(this, "autoExitDelivery", [B, iY, if (lD)
2569+ let lR = dE(invoke(this, "autoExitDelivery", [B, jc, if (lI)
25422570 then "10"
25432571 else "11", 0], nil))
2544- if ((lM == lM))
2545- then if (lD)
2546- then $Tuple2(lM, iY)
2547- else if ((iY > 0))
2548- then $Tuple2(ja, iY)
2549- else $Tuple2(lM, 0)
2572+ if ((lR == lR))
2573+ then if (lI)
2574+ then $Tuple2(lR, jc)
2575+ else if ((jc > 0))
2576+ then $Tuple2(je, jc)
2577+ else $Tuple2(lR, 0)
25502578 else throw("Strict value is not equal to itself.")
25512579 }
2552- else if (!(lD))
2580+ else if (!(lI))
25532581 then throw("Your duck is taking part in delivery")
2554- else if (!(cm(ja)))
2555- then cu(jt, ja, 13)
2582+ else if (!(cn(je)))
2583+ then cv(jx, je, 13)
25562584 else {
2557- let kw = parseIntValue(cw[bs])
2558- let lJ = split(jt, "_")
2559- if ((kw != (parseIntValue(lJ[bs]) + 1)))
2560- then cu(jt, ja, 14)
2561- else if (if ((iY > 0))
2562- then (1 > kw)
2585+ let kA = parseIntValue(cx[bt])
2586+ let lO = split(jx, "_")
2587+ if ((kA != (parseIntValue(lO[bt]) + 1)))
2588+ then cv(jx, je, 14)
2589+ else if (if ((jc > 0))
2590+ then (1 > kA)
25632591 else false)
2564- then $Tuple2(ja, iY)
2592+ then $Tuple2(je, jc)
25652593 else {
2566- let lM = dC(invoke(this, "autoExitDelivery", [B, iY, "15-17", kw], nil))
2567- if ((lM == lM))
2568- then $Tuple2(lM, iY)
2594+ let lR = dE(invoke(this, "autoExitDelivery", [B, jc, "15-17", kA], nil))
2595+ if ((lR == lR))
2596+ then $Tuple2(lR, jc)
25692597 else throw("Strict value is not equal to itself.")
25702598 }
25712599 }
2572- let lN = lI._1
2573- let lO = lI._2
2574- $Tuple2(((([StringEntry(lj, lN), StringEntry(gA, lG), IntegerEntry(A(B), lO)] ++ lp) ++ (if (lH)
2600+ let lS = lN._1
2601+ let lT = lN._2
2602+ $Tuple2(((([StringEntry(ln, lS), StringEntry(gE, lL), IntegerEntry(A(B), lT)] ++ lt) ++ (if (lM)
25752603 then [StringEntry(M(B), "0_0_0_0_0")]
2576- else nil)) ++ ki(B, if ((iY > 0))
2604+ else nil)) ++ km(B, if ((jc > 0))
25772605 then Y
2578- else Z)._1), hs._3)
2606+ else Z)._1), hw._3)
25792607 }
25802608 }
25812609 }
25822610
25832611
25842612
2585-@Callable(gN)
2586-func heal (lP,lQ,lR) = {
2587- let lp = ll(gN)
2588- if (if (if ((0 > lP))
2613+@Callable(gR)
2614+func heal (lU,lV,lW) = {
2615+ let lt = lp(gR)
2616+ if (if (if ((0 > lU))
25892617 then true
2590- else (0 > lQ))
2618+ else (0 > lV))
25912619 then true
2592- else (0 > lR))
2620+ else (0 > lW))
25932621 then throw("Quantity cannot be negative")
25942622 else {
2595- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2596- if (kt(B))
2623+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
2624+ if (kx(B))
25972625 then throw("heal_checkTournament")
2598- else if (ku(B))
2626+ else if (ky(B))
25992627 then throw("heal_checkDelivery")
26002628 else {
2601- let lS = [lP, lQ, lR]
2602- let je = A(B)
2603- let jf = aj(valueOrElse(getInteger(E(B)), 0))
2604- let lT = valueOrElse(getInteger(je), jf)
2605- if ((lT >= jf))
2606- then throw((("HP should be < " + toString(jf)) + " to heal"))
2629+ let lX = [lU, lV, lW]
2630+ let ji = A(B)
2631+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
2632+ let lY = valueOrElse(getInteger(ji), jj)
2633+ if ((lY >= jj))
2634+ then throw((("HP should be < " + toString(jj)) + " to heal"))
26072635 else {
2608- let hO = bN(B)
2609- let ir = hN(hO)
2610- let lU = if ((ir[bp] == ""))
2636+ let hS = bO(B)
2637+ let iv = hR(hS)
2638+ let lZ = if ((iv[bq] == ""))
26112639 then nil
2612- else split_4C(ir[bp], "_")
2613- func lV (eU,ct) = {
2614- let dG = eU._2
2615- let hj = if ((size(lU) > dG))
2616- then parseIntValue(lU[dG])
2640+ else split_4C(iv[bq], "_")
2641+ func ma (eY,cu) = {
2642+ let dI = eY._2
2643+ let hn = if ((size(lZ) > dI))
2644+ then parseIntValue(lZ[dI])
26172645 else 0
2618- if ((3 > dG))
2646+ if ((3 > dI))
26192647 then {
2620- let lW = lS[dG]
2621- if ((lW > hj))
2622- then throw(((("You have only " + toString(hj)) + " of ") + aT[dG]))
2623- else $Tuple3((eU._1 :+ toString((hj - lW))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * lW)))
2648+ let mb = lX[dI]
2649+ if ((mb > hn))
2650+ then throw(((("You have only " + toString(hn)) + " of ") + aU[dI]))
2651+ else $Tuple3((eY._1 :+ toString((hn - mb))), (dI + 1), (eY._3 + (parseIntValue(split(cu, "_")[ba]) * mb)))
26242652 }
2625- else $Tuple3((eU._1 :+ toString(hj)), (dG + 1), eU._3)
2653+ else $Tuple3((eY._1 :+ toString(hn)), (dI + 1), eY._3)
26262654 }
26272655
2628- let fm = {
2629- let eW = aX
2630- let eX = size(eW)
2631- let eY = $Tuple3(nil, 0, 0)
2632- func eZ (fa,fb) = if ((fb >= eX))
2633- then fa
2634- else lV(fa, eW[fb])
2635-
2636- func fc (fa,fb) = if ((fb >= eX))
2637- then fa
2656+ let fq = {
2657+ let fa = aY
2658+ let fb = size(fa)
2659+ let fc = $Tuple3(nil, 0, 0)
2660+ func fd (fe,ff) = if ((ff >= fb))
2661+ then fe
2662+ else ma(fe, fa[ff])
2663+
2664+ func fg (fe,ff) = if ((ff >= fb))
2665+ then fe
26382666 else throw("List size exceeds 50")
26392667
2640- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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)
2668+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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)
26412669 }
2642- let lX = min([jf, (lT + fm._3)])
2643- $Tuple2((([IntegerEntry(je, lX), StringEntry(hO, makeString_2C([ir[bm], ir[bn], ir[bo], makeString(fm._1, "_")], ":"))] ++ lp) ++ ki(B, (ag * ((lP + lQ) + lR)))._1), lX)
2670+ let mc = min([jj, (lY + fq._3)])
2671+ $Tuple2((([IntegerEntry(ji, mc), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], makeString(fq._1, "_")], ":"))] ++ lt) ++ km(B, (ag * ((lU + lV) + lW)))._1), mc)
26442672 }
26452673 }
26462674 }
26482676
26492677
26502678
2651-@Callable(gN)
2679+@Callable(gR)
26522680 func healES () = {
2653- let lp = ll(gN)
2654- if ((size(gN.payments) != 1))
2681+ let lt = lp(gR)
2682+ if ((size(gR.payments) != 1))
26552683 then throw("Exactly one payment required")
26562684 else {
2657- let lq = value(gN.payments[0])
2658- if ((lq.assetId != cC))
2685+ let lu = value(gR.payments[0])
2686+ if ((lu.assetId != cE))
26592687 then throw("Allowed USDT payment only!")
26602688 else {
2661- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2662- if (kt(B))
2689+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
2690+ if (kx(B))
26632691 then throw("healES_checkTournament")
2664- else if (ku(B))
2692+ else if (ky(B))
26652693 then throw("healES_checkDelivery")
26662694 else {
2667- let je = A(B)
2668- let jf = aj(valueOrElse(getInteger(E(B)), 0))
2669- let lT = valueOrElse(getInteger(je), jf)
2670- if ((lT > 0))
2695+ let ji = A(B)
2696+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
2697+ let lY = valueOrElse(getInteger(ji), jj)
2698+ if ((lY > 0))
26712699 then throw("HP should be 0 to call Emergency Service")
26722700 else {
2673- let hO = bN(B)
2674- let ir = hN(hO)
2675- let lU = if ((ir[bp] == ""))
2701+ let hS = bO(B)
2702+ let iv = hR(hS)
2703+ let lZ = if ((iv[bq] == ""))
26762704 then nil
2677- else split_4C(ir[bp], "_")
2678- let lY = if ((size(lU) > 0))
2679- then parseIntValue(lU[0])
2705+ else split_4C(iv[bq], "_")
2706+ let md = if ((size(lZ) > 0))
2707+ then parseIntValue(lZ[0])
26802708 else 0
2681- let lZ = if ((size(lU) > 1))
2682- then parseIntValue(lU[1])
2709+ let me = if ((size(lZ) > 1))
2710+ then parseIntValue(lZ[1])
26832711 else 0
2684- let ma = if ((size(lU) > 2))
2685- then parseIntValue(lU[2])
2712+ let mf = if ((size(lZ) > 2))
2713+ then parseIntValue(lZ[2])
26862714 else 0
2687- if (if (if ((lY > 0))
2715+ if (if (if ((md > 0))
26882716 then true
2689- else (lZ > 0))
2717+ else (me > 0))
26902718 then true
2691- else (ma > 0))
2719+ else (mf > 0))
26922720 then throw("You have to use own Medical Kit")
26932721 else {
2694- let mb = getString(di, bR())
2695- let mc = if (isDefined(mb))
2696- then split_4C(value(mb), "_")
2722+ let mg = getString(dk, bS())
2723+ let mh = if (isDefined(mg))
2724+ then split_4C(value(mg), "_")
26972725 else nil
2698- let md = if ((size(mc) > 0))
2699- then parseIntValue(mc[0])
2726+ let mi = if ((size(mh) > 0))
2727+ then parseIntValue(mh[0])
27002728 else 0
2701- if ((0 >= md))
2729+ if ((0 >= mi))
27022730 then throw("There are no Medical Kits L1 at Emergency Service storage")
27032731 else {
2704- let lX = (lT + parseIntValue(split(aX[0], "_")[aZ]))
2705- let me = makeString([toString((md - 1)), removeByIndex(mc, 0)], "_")
2706- let ct = split(aX[0], "_")
2707- let mf = cs(ct)
2708- let mg = fraction((mf * aO), aN, (cK * bc))
2709- if ((lq.amount != mg))
2710- then throw(("Payment attached should be " + toString(mg)))
2732+ let mc = (lY + parseIntValue(split(aY[0], "_")[ba]))
2733+ let mj = makeString([toString((mi - 1)), removeByIndex(mh, 0)], "_")
2734+ let cu = split(aY[0], "_")
2735+ let mk = ct(cu)
2736+ let ml = fraction((mk * aP), aO, (cM * bd))
2737+ if ((lu.amount != ml))
2738+ then throw(("Payment attached should be " + toString(ml)))
27112739 else {
2712- let fm = dC(invoke(di, "updateEsStorage", [me], [AttachedPayment(cC, mg)]))
2713- $Tuple2(((lp :+ IntegerEntry(je, lX)) ++ ki(B, aa)._1), fm)
2740+ let fq = dE(invoke(dk, "updateEsStorage", [mj], [AttachedPayment(cE, ml)]))
2741+ $Tuple2(((lt :+ IntegerEntry(ji, mc)) ++ km(B, aa)._1), fq)
27142742 }
27152743 }
27162744 }
27222750
27232751
27242752
2725-@Callable(gN)
2726-func updateBackpack (B,mh) = if ((gN.caller != di))
2753+@Callable(gR)
2754+func updateBackpack (B,mm) = if ((gR.caller != dk))
27272755 then throw("permission denied")
2728- else $Tuple2([StringEntry(bN(B), mh)], mh)
2729-
2730-
2731-
2732-@Callable(gN)
2756+ else $Tuple2([StringEntry(bO(B), mm)], mm)
2757+
2758+
2759+
2760+@Callable(gR)
27332761 func commitForRandom () = {
2734- let lp = ll(gN)
2735- let mi = (height + dv)
2736- let c = toString(gN.caller)
2737- $Tuple2(([IntegerEntry(dw(c), mi)] ++ lp), mi)
2738- }
2739-
2740-
2741-
2742-@Callable(gN)
2762+ let lt = lp(gR)
2763+ let mn = (height + dx)
2764+ let c = toString(gR.caller)
2765+ $Tuple2(([IntegerEntry(dy(c), mn)] ++ lt), mn)
2766+ }
2767+
2768+
2769+
2770+@Callable(gR)
27432771 func buySLand () = {
2744- let lp = ll(gN)
2745- if ((size(gN.payments) != 1))
2772+ let lt = lp(gR)
2773+ if ((size(gR.payments) != 1))
27462774 then throw("Exactly one payment required")
27472775 else {
2748- let lq = value(gN.payments[0])
2749- if ((lq.assetId != cC))
2776+ let lu = value(gR.payments[0])
2777+ if ((lu.assetId != cE))
27502778 then throw("Allowed USDT payment only!")
2751- else if ((lq.amount != ej))
2752- then throw(("Payment attached should be " + toString(ej)))
2779+ else if ((lu.amount != el))
2780+ then throw(("Payment attached should be " + toString(el)))
27532781 else {
2754- let fm = iL(gN.caller, gN.transactionId)
2755- let mj = dF(invoke(dm, "burnAcres", [ek], nil))
2756- $Tuple2((((fm._1 :+ ScriptTransfer(di, lq.amount, cC)) ++ kj(toString(gN.caller), ac)._1) ++ lp), $Tuple2(fm._2._1, mj))
2782+ let fq = iP(gR.caller, gR.transactionId)
2783+ let mo = dH(invoke(do, "burnAcres", [en], nil))
2784+ $Tuple2((((fq._1 :+ ScriptTransfer(dk, lu.amount, cE)) ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo))
27572785 }
27582786 }
27592787 }
27602788
27612789
27622790
2763-@Callable(gN)
2764-func expedition (iT,iU) = {
2765- let lp = ll(gN)
2766- if ((size(gN.payments) != 0))
2791+@Callable(gR)
2792+func expedition (iX,iY) = {
2793+ let lt = lp(gR)
2794+ if ((size(gR.payments) != 0))
27672795 then throw("No payments required")
27682796 else {
2769- let bQ = toString(gN.caller)
2770- let hs = iS(bQ, iT, iU)
2771- let B = hs._2
2772- let je = A(B)
2773- let hO = bN(B)
2774- let ir = hN(hO)
2775- let jT = split(ir[bo], "_")
2776- let jV = makeString(fg(true, jT, ei), "_")
2777- let gA = G(B)
2778- let lE = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2779- let mk = fn(lE, hs._5)
2780- let lG = mk._1
2781- let lH = mk._2
2782- let ml = iL(gN.caller, gN.transactionId)
2783- let iR = ml._2._1
2784- let fm = if ((0 >= hs._1))
2785- then $Tuple3([IntegerEntry(je, 0), StringEntry(gA, lG)], "", 0)
2786- else $Tuple3((ml._1 ++ (if (lH)
2797+ let bR = toString(gR.caller)
2798+ let hw = iW(bR, iX, iY)
2799+ let B = hw._2
2800+ let ji = A(B)
2801+ let hS = bO(B)
2802+ let iv = hR(hS)
2803+ let jX = split(iv[bp], "_")
2804+ let jZ = makeString(fk(true, jX, ek), "_")
2805+ let gE = G(B)
2806+ let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,")
2807+ let mp = fr(lJ, hw._5)
2808+ let lL = mp._1
2809+ let lM = mp._2
2810+ let mq = iP(gR.caller, gR.transactionId)
2811+ let iV = mq._2._1
2812+ let fq = if ((0 >= hw._1))
2813+ then $Tuple3([IntegerEntry(ji, 0), StringEntry(gE, lL)], "", 0)
2814+ else $Tuple3((mq._1 ++ (if (lM)
27872815 then [StringEntry(M(B), "0_0_0_0_0")]
2788- else ((((nil :+ StringEntry(bO(B), makeString([ml._2._2, "L", iR], "_"))) :+ IntegerEntry(je, hs._1)) :+ StringEntry(gA, lG)) :+ StringEntry(hO, makeString([ir[bm], ir[bn], jV, ir[bp]], ":"))))), iR, hs._3)
2789- if (kt(B))
2816+ else ((((nil :+ StringEntry(bP(B), makeString([mq._2._2, "L", iV], "_"))) :+ IntegerEntry(ji, hw._1)) :+ StringEntry(gE, lL)) :+ StringEntry(hS, makeString([iv[bn], iv[bo], jZ, iv[bq]], ":"))))), iV, hw._3)
2817+ if (kx(B))
27902818 then throw("expedition_checkTournament")
2791- else if (ku(B))
2819+ else if (ky(B))
27922820 then throw("expedition_checkDelivery")
27932821 else {
2794- let mj = dF(invoke(dm, "burnAcres", [ek], nil))
2795- $Tuple2(((fm._1 ++ ki(B, ac)._1) ++ lp), $Tuple3(fm._2, fm._3, mj))
2822+ let mo = dH(invoke(do, "burnAcres", [en], nil))
2823+ $Tuple2(((fq._1 ++ km(B, ac)._1) ++ lt), $Tuple3(fq._2, fq._3, mo))
27962824 }
27972825 }
27982826 }
27992827
28002828
28012829
2802-@Callable(gN)
2830+@Callable(gR)
28032831 func buySLandForAcres () = {
2804- let lp = ll(gN)
2805- if ((size(gN.payments) != 1))
2832+ let lt = lp(gR)
2833+ if ((size(gR.payments) != 1))
28062834 then throw("exactly 1 payment must be attached")
28072835 else {
2808- let lq = gN.payments[0]
2809- let ft = lq.amount
2810- if (if (!(isDefined(lq.assetId)))
2836+ let lu = gR.payments[0]
2837+ let fx = lu.amount
2838+ if (if (!(isDefined(lu.assetId)))
28112839 then true
2812- else (value(lq.assetId) != du))
2840+ else (value(lu.assetId) != dw))
28132841 then throw("ACRES payments only!")
2814- else if ((ft != ek))
2815- then throw(("Payment attached should be " + toString(ek)))
2842+ else if ((fx != en))
2843+ then throw(("Payment attached should be " + toString(en)))
28162844 else {
2817- let fm = iL(gN.caller, gN.transactionId)
2818- let mj = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)]))
2819- $Tuple2(((fm._1 ++ kj(toString(gN.caller), ac)._1) ++ lp), $Tuple2(fm._2._1, mj))
2845+ let fq = iP(gR.caller, gR.transactionId)
2846+ let mo = dH(invoke(do, "burnAcres", [en], [AttachedPayment(dw, fx)]))
2847+ $Tuple2(((fq._1 ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo))
28202848 }
28212849 }
28222850 }
28232851
28242852
28252853
2826-@Callable(gN)
2854+@Callable(gR)
28272855 func upgradeInfra (Q) = {
2828- let lp = ll(gN)
2829- if ((size(gN.payments) != 0))
2856+ let lt = lp(gR)
2857+ if ((size(gR.payments) != 0))
28302858 then throw("No payments required")
28312859 else {
2832- let fm = jN(true, gN.caller, 0, Q)
2833- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2834- $Tuple2(((fm._1 ++ lp) ++ ki(B, fraction(ad, fm._3, cK))._1), fm._2)
2835- }
2836- }
2837-
2838-
2839-
2840-@Callable(gN)
2841-func activateArtifact (mm,mn) = {
2842- let lp = ll(gN)
2843- if ((size(gN.payments) != 0))
2860+ let fq = jR(true, gR.caller, 0, Q)
2861+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
2862+ $Tuple2(((fq._1 ++ lt) ++ km(B, fraction(ad, fq._3, cM))._1), fq._2)
2863+ }
2864+ }
2865+
2866+
2867+
2868+@Callable(gR)
2869+func activateArtifact (mr,ms) = {
2870+ let lt = lp(gR)
2871+ if ((size(gR.payments) != 0))
28442872 then throw("No payments required")
28452873 else {
2846- let c = toString(gN.caller)
2847- let fm = {
2848- let cD = mm
2849- if (("PRESALE" == cD))
2850- then kr(c, mn)
2851- else if (("ONBOARD" == cD))
2852- then kk(c)
2874+ let c = toString(gR.caller)
2875+ let fq = {
2876+ let cF = mr
2877+ if (("PRESALE" == cF))
2878+ then kv(c, ms)
2879+ else if (("ONBOARD" == cF))
2880+ then ko(c)
28532881 else throw("Unknown artifact")
28542882 }
2855- (fm ++ lp)
2856- }
2857- }
2858-
2859-
2860-
2861-@Callable(gN)
2862-func mergeLands (kI) = {
2863- let lp = ll(gN)
2864- if ((size(gN.payments) != 0))
2883+ (fq ++ lt)
2884+ }
2885+ }
2886+
2887+
2888+
2889+@Callable(gR)
2890+func mergeLands (kM) = {
2891+ let lt = lp(gR)
2892+ if ((size(gR.payments) != 0))
28652893 then throw("No payments required")
28662894 else {
2867- let fm = lg(toString(gN.caller), kI)
2868- $Tuple2(((fm._1 ++ lp) ++ kj(toString(gN.caller), ae)._1), fm._2)
2869- }
2870- }
2871-
2872-
2873-
2874-@Callable(gN)
2875-func cargoExchange (mo,Q) = {
2876- let lp = ll(gN)
2877- if ((size(gN.payments) != 0))
2895+ let fq = lk(toString(gR.caller), kM)
2896+ $Tuple2(((fq._1 ++ lt) ++ kn(toString(gR.caller), ae)._1), fq._2)
2897+ }
2898+ }
2899+
2900+
2901+
2902+@Callable(gR)
2903+func cargoExchange (mt,Q) = {
2904+ let lt = lp(gR)
2905+ if ((size(gR.payments) != 0))
28782906 then throw("No payments required")
28792907 else {
2880- let iq = split_4C(mo, ":")
2881- let c = toString(gN.originCaller)
2882- let jv = value(assetInfo(fromBase58String(Q)))
2883- let jw = bw(Q)
2884- if (!(isDefined(getInteger(jw))))
2885- then throw((jv.name + " is not staked"))
2908+ let iu = split_4C(mt, ":")
2909+ let c = toString(gR.originCaller)
2910+ let jz = value(assetInfo(fromBase58String(Q)))
2911+ let jA = bx(Q)
2912+ if (!(isDefined(getInteger(jA))))
2913+ then throw((jz.name + " is not staked"))
28862914 else {
2887- let jy = valueOrErrorMessage(getString(bt(Q)), (("NFT " + jv.name) + " is orphaned"))
2888- if ((jy != c))
2915+ let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned"))
2916+ if ((jC != c))
28892917 then throw((aF + " is not yours"))
28902918 else {
2891- let ic = (dK(split(jv.description, "_")[do]) / cL)
2892- let id = valueOrElse(getInteger(bD(Q)), 0)
2893- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2894- let jt = valueOrElse(getString(bO(B)), aM)
2895- let ck = split(value(jt), "_")
2896- if ((ck[br] != "L"))
2897- then throw((("Duck location type is " + ck[br]) + ", but should be L"))
2898- else if ((ck[bs] != Q))
2919+ let ig = (dM(split(jz.description, "_")[dq]) / cN)
2920+ let ih = valueOrElse(getInteger(bE(Q)), 0)
2921+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
2922+ let jx = valueOrElse(getString(bP(B)), aN)
2923+ let cl = split(value(jx), "_")
2924+ if ((cl[bs] != "L"))
2925+ then throw((("Duck location type is " + cl[bs]) + ", but should be L"))
2926+ else if ((cl[bt] != Q))
28992927 then throw(("Duck should be on the land " + Q))
29002928 else {
2901- let ib = bC(Q)
2902- let hS = ia(ib, ic, id)
2903- let hO = bN(B)
2904- let ir = hN(hO)
2905- let fm = ip(iq, hS, ir)
2906- let ij = split(hS[bh], "_")
2907- let jK = (parseIntValue(ij[bj]) + fm._7)
2908- let jL = (parseIntValue(ij[bk]) - fm._7)
2909- ([StringEntry(hO, makeString_2C([ir[bm], fm._4, fm._5, fm._6], ":")), StringEntry(ib, makeString_2C([hS[bd], fm._1, fm._2, fm._3, makeString([ij[bi], toString(jK), toString(jL), ij[bl]], "_")], ":"))] ++ lp)
2929+ let if = bD(Q)
2930+ let hW = ie(if, ig, ih)
2931+ let hS = bO(B)
2932+ let iv = hR(hS)
2933+ let fq = it(iu, hW, iv)
2934+ let in = split(hW[bi], "_")
2935+ let jO = (parseIntValue(in[bk]) + fq._7)
2936+ let jP = (parseIntValue(in[bl]) - fq._7)
2937+ ([StringEntry(hS, makeString_2C([iv[bn], fq._4, fq._5, fq._6], ":")), StringEntry(if, makeString_2C([hW[be], fq._1, fq._2, fq._3, makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")], ":"))] ++ lt)
29102938 }
29112939 }
29122940 }
29152943
29162944
29172945
2918-@Callable(gN)
2919-func saveWarehouse (if,Q) = if ((gN.caller != di))
2946+@Callable(gR)
2947+func saveWarehouse (ij,Q) = if ((gR.caller != dk))
29202948 then throw("Access denied")
29212949 else {
2922- let ib = bC(Q)
2923- let ig = split_4C(if, ":")
2924- if ((size(ig) != 5))
2950+ let if = bD(Q)
2951+ let ik = split_4C(ij, ":")
2952+ if ((size(ik) != 5))
29252953 then throw("warehouse string should contain 4 ':' separators")
29262954 else {
2927- let mp = split(ig[bh], "_")[bi]
2928- let jK = hR(ig)
2929- let mq = hP(ig[bd])
2930- let jL = ((mq - parseIntValue(mp)) - jK)
2931- if ((0 > jL))
2955+ let mu = split(ik[bi], "_")[bj]
2956+ let jO = hV(ik)
2957+ let mv = hT(ik[be])
2958+ let jP = ((mv - parseIntValue(mu)) - jO)
2959+ if ((0 > jP))
29322960 then throw("Operation leads to negative free warehouse space")
29332961 else {
2934- let mr = makeString_2C([ig[bd], ig[be], ig[bf], ig[bg], makeString([mp, toString(jK), toString(jL), toString(mq)], "_")], ":")
2935- $Tuple2([StringEntry(ib, mr)], mr)
2962+ let mw = makeString_2C([ik[be], ik[bf], ik[bg], ik[bh], makeString([mu, toString(jO), toString(jP), toString(mv)], "_")], ":")
2963+ $Tuple2([StringEntry(if, mw)], mw)
29362964 }
29372965 }
29382966 }
29392967
29402968
29412969
2942-@Callable(gN)
2943-func setCustomName (bu,kS,by) = {
2944- let lp = ll(gN)
2945- if ((size(gN.payments) != 1))
2970+@Callable(gR)
2971+func setCustomName (bv,kW,bz) = {
2972+ let lt = lp(gR)
2973+ if ((size(gR.payments) != 1))
29462974 then throw("Exactly one payment required")
29472975 else {
2948- let lq = value(gN.payments[0])
2949- if ((lq.assetId != cC))
2976+ let lu = value(gR.payments[0])
2977+ if ((lu.assetId != cE))
29502978 then throw("Allowed USDT payment only!")
2951- else if ((lq.amount != ef))
2952- then throw(("Payment should be " + toString(ef)))
2953- else if (contains(kS, "__"))
2954- then throw(("Name should not contain '__': " + kS))
2955- else if ((size(kS) > eg))
2956- then throw(("Name too long, maxLength=" + toString(eg)))
2979+ else if ((lu.amount != eh))
2980+ then throw(("Payment should be " + toString(eh)))
2981+ else if (contains(kW, "__"))
2982+ then throw(("Name should not contain '__': " + kW))
2983+ else if ((size(kW) > ei))
2984+ then throw(("Name too long, maxLength=" + toString(ei)))
29572985 else {
2958- let c = toString(gN.originCaller)
2959- let ms = {
2960- let cD = by
2961- if (("ACCOUNT" == cD))
2986+ let c = toString(gR.originCaller)
2987+ let mx = {
2988+ let cF = bz
2989+ if (("ACCOUNT" == cF))
29622990 then {
2963- let mt = eA(kS)
2964- let mu = getString(mt)
2965- if (isDefined(mu))
2966- then throw(("Name already registered: " + kS))
2991+ let my = eD(kW)
2992+ let mz = getString(my)
2993+ if (isDefined(mz))
2994+ then throw(("Name already registered: " + kW))
29672995 else {
2968- let mv = bG(c)
2969- let mw = getString(mv)
2970- let mx = if (isDefined(mw))
2971- then [DeleteEntry(eA(value(mw)))]
2996+ let mA = bH(c)
2997+ let mB = getString(mA)
2998+ let mC = if (isDefined(mB))
2999+ then [DeleteEntry(eD(value(mB)))]
29723000 else nil
2973- (((mx :+ StringEntry(mv, kS)) :+ StringEntry(mt, c)) ++ kj(c, ab)._1)
3001+ (((mC :+ StringEntry(mA, kW)) :+ StringEntry(my, c)) ++ kn(c, ab)._1)
29743002 }
29753003 }
2976- else if (("LAND" == cD))
3004+ else if (("LAND" == cF))
29773005 then {
2978- let jv = value(assetInfo(fromBase58String(bu)))
2979- let jw = bw(bu)
2980- if (!(isDefined(getInteger(jw))))
2981- then throw((jv.name + " is not staked"))
3006+ let jz = value(assetInfo(fromBase58String(bv)))
3007+ let jA = bx(bv)
3008+ if (!(isDefined(getInteger(jA))))
3009+ then throw((jz.name + " is not staked"))
29823010 else {
2983- let jy = valueOrErrorMessage(getString(bt(bu)), (("NFT " + jv.name) + " is orphaned"))
2984- if ((jy != c))
3011+ let jC = valueOrErrorMessage(getString(bu(bv)), (("NFT " + jz.name) + " is orphaned"))
3012+ if ((jC != c))
29853013 then throw((aF + " is not yours"))
29863014 else {
2987- let mt = et(kS)
2988- let mu = getString(mt)
2989- if (isDefined(mu))
2990- then throw(("Name already registered: " + kS))
3015+ let my = ew(kW)
3016+ let mz = getString(my)
3017+ if (isDefined(mz))
3018+ then throw(("Name already registered: " + kW))
29913019 else {
2992- let my = bv(bu)
2993- let mw = getString(my)
2994- let mx = if (isDefined(mw))
2995- then [DeleteEntry(et(value(mw)))]
3020+ let mD = bw(bv)
3021+ let mB = getString(mD)
3022+ let mC = if (isDefined(mB))
3023+ then [DeleteEntry(ew(value(mB)))]
29963024 else nil
2997- (((mx :+ StringEntry(my, kS)) :+ StringEntry(mt, bu)) ++ kj(c, ab)._1)
3025+ (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ kn(c, ab)._1)
29983026 }
29993027 }
30003028 }
30013029 }
3002- else if (("DUCK" == cD))
3030+ else if (("DUCK" == cF))
30033031 then {
3004- let jv = value(assetInfo(fromBase58String(bu)))
3005- let jw = bw(bu)
3006- if (if (!(isDefined(getInteger(jw))))
3032+ let jz = value(assetInfo(fromBase58String(bv)))
3033+ let jA = bx(bv)
3034+ if (if (!(isDefined(getInteger(jA))))
30073035 then true
3008- else !(isDefined(getString(bM(c)))))
3009- then throw((jv.name + " is not staked"))
3036+ else !(isDefined(getString(bN(c)))))
3037+ then throw((jz.name + " is not staked"))
30103038 else {
3011- let jy = valueOrErrorMessage(getString(bL(bu)), (("NFT " + jv.name) + " is orphaned"))
3012- if ((jy != c))
3039+ let jC = valueOrErrorMessage(getString(bM(bv)), (("NFT " + jz.name) + " is orphaned"))
3040+ if ((jC != c))
30133041 then throw((aG + " is not yours"))
30143042 else {
3015- let mt = ez(kS)
3016- let mu = getString(mt)
3017- if (isDefined(mu))
3018- then throw(("Name already registered: " + kS))
3043+ let my = eC(kW)
3044+ let mz = getString(my)
3045+ if (isDefined(mz))
3046+ then throw(("Name already registered: " + kW))
30193047 else {
3020- let my = bF(bu)
3021- let mw = getString(my)
3022- let mx = if (isDefined(mw))
3023- then [DeleteEntry(ez(value(mw)))]
3048+ let mD = bG(bv)
3049+ let mB = getString(mD)
3050+ let mC = if (isDefined(mB))
3051+ then [DeleteEntry(eC(value(mB)))]
30243052 else nil
3025- (((mx :+ StringEntry(my, kS)) :+ StringEntry(mt, bu)) ++ ki(bu, ab)._1)
3053+ (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ km(bv, ab)._1)
30263054 }
30273055 }
30283056 }
30293057 }
30303058 else throw("Unknown entity type")
30313059 }
3032- $Tuple2(((ms :+ ScriptTransfer(di, lq.amount, cC)) ++ lp), 0)
3060+ $Tuple2(((mx :+ ScriptTransfer(dk, lu.amount, cE)) ++ lt), 0)
30333061 }
30343062 }
30353063 }
30363064
30373065
30383066
3039-@Callable(gN)
3040-func setReferrals (mz,mA) = if ((gN.callerPublicKey != ec))
3067+@Callable(gR)
3068+func setReferrals (mE,mF) = if ((gR.callerPublicKey != ee))
30413069 then throw("Permission denied")
30423070 else {
3043- let lp = ll(gN)
3044- if ((size(gN.payments) != 0))
3071+ let lt = lp(gR)
3072+ if ((size(gR.payments) != 0))
30453073 then throw("No payments required")
3046- else if (!(isDefined(addressFromString(mz))))
3047- then throw(("Invalid address: " + mz))
3048- else if (!(isDefined(addressFromString(mA))))
3049- then throw(("Invalid address: " + mA))
3074+ else if (!(isDefined(addressFromString(mE))))
3075+ then throw(("Invalid address: " + mE))
3076+ else if (!(isDefined(addressFromString(mF))))
3077+ then throw(("Invalid address: " + mF))
30503078 else {
3051- let mB = eB()
3052- let mC = getString(mB)
3053- let mD = if (isDefined(mC))
3054- then split_4C(value(mC), "_")
3079+ let mG = eE()
3080+ let mH = getString(mG)
3081+ let mI = if (isDefined(mH))
3082+ then split_4C(value(mH), "_")
30553083 else nil
3056- if (containsElement(mD, mA))
3057- then throw((mA + " is not newbie (already has referrals)"))
3084+ if (containsElement(mI, mF))
3085+ then throw((mF + " is not newbie (already has referrals)"))
30583086 else {
3059- let kl = bH(mA)
3060- let km = getString(kl)
3061- if (if (isDefined(km))
3062- then isDefined(addressFromString(value(km)))
3087+ let kp = bI(mF)
3088+ let kq = getString(kp)
3089+ if (if (isDefined(kq))
3090+ then isDefined(addressFromString(value(kq)))
30633091 else false)
3064- then throw(((mA + " already has refBy: ") + value(km)))
3092+ then throw(((mF + " already has refBy: ") + value(kq)))
30653093 else {
3066- let mE = bK(mz)
3067- let mF = getString(mE)
3068- let mG = if (isDefined(mF))
3069- then split_4C(value(mF), "_")
3094+ let mJ = bL(mE)
3095+ let mK = getString(mJ)
3096+ let mL = if (isDefined(mK))
3097+ then split_4C(value(mK), "_")
30703098 else nil
3071- if (containsElement(mG, mA))
3072- then throw((((mz + " already contains ") + mA) + " within referrals"))
3099+ if (containsElement(mL, mF))
3100+ then throw((((mE + " already contains ") + mF) + " within referrals"))
30733101 else {
3074- let mH = makeString_2C((mG :+ mA), "_")
3075- let mI = if (containsElement(mD, mz))
3076- then value(mC)
3077- else makeString_2C((mD :+ mz), "_")
3078- $Tuple2(([StringEntry(kl, mz), StringEntry(mE, mH), StringEntry(mB, mI)] ++ lp), 0)
3102+ let mM = makeString_2C((mL :+ mF), "_")
3103+ let mN = if (containsElement(mI, mE))
3104+ then value(mH)
3105+ else makeString_2C((mI :+ mE), "_")
3106+ $Tuple2(([StringEntry(kp, mE), StringEntry(mJ, mM), StringEntry(mG, mN)] ++ lt), 0)
30793107 }
30803108 }
30813109 }
30843112
30853113
30863114
3087-@Callable(gN)
3088-func distributePoints (mJ,mK,mL,mM,mN) = {
3089- let lp = ll(gN)
3090- if ((size(gN.payments) != 0))
3115+@Callable(gR)
3116+func distributePoints (mO,mP,mQ,mR,mS) = {
3117+ let lt = lp(gR)
3118+ if ((size(gR.payments) != 0))
30913119 then throw("No payments required")
30923120 else {
3093- let c = toString(gN.originCaller)
3094- let mO = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil))
3095- let mP = dF(mO[1])
3096- let mQ = if ((0 >= mP))
3121+ let c = toString(gR.originCaller)
3122+ let mT = dJ(invoke(dm, "checkWlgXpREADONLY", [c], nil))
3123+ let mU = dH(mT[1])
3124+ let mV = if ((0 >= mU))
30973125 then $Tuple2(0, nil)
30983126 else {
3099- let kg = dF(invoke(dk, "takeWlgXp", [c], nil))
3100- if ((kg == kg))
3101- then $Tuple2(mP, [IntegerEntry(I(c), dF(mO[0])), IntegerEntry(H(c), dF(mO[2]))])
3127+ let kk = dH(invoke(dm, "takeWlgXp", [c], nil))
3128+ if ((kk == kk))
3129+ then $Tuple2(mU, [IntegerEntry(I(c), dH(mT[0])), IntegerEntry(H(c), dH(mT[2]))])
31023130 else throw("Strict value is not equal to itself.")
31033131 }
3104- let mR = mQ._1
3105- let mS = mQ._2
3106- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3107- let mT = J(c)
3108- let mU = (valueOrElse(getInteger(mT), 0) + mR)
3109- let mV = F(B)
3110- let mW = valueOrElse(getInteger(mV), 0)
3111- let mX = (mU + mW)
3112- let mY = ((((mJ + mK) + mL) + mM) + mN)
3113- if ((mY > mX))
3114- then throw((("There are only " + toString(mX)) + " free points to distribute"))
3132+ let mW = mV._1
3133+ let mX = mV._2
3134+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
3135+ let mY = J(c)
3136+ let mZ = (valueOrElse(getInteger(mY), 0) + mW)
3137+ let na = F(B)
3138+ let nb = valueOrElse(getInteger(na), 0)
3139+ let nc = (mZ + nb)
3140+ let nd = ((((mO + mP) + mQ) + mR) + mS)
3141+ if ((nd > nc))
3142+ then throw((("There are only " + toString(nc)) + " free points to distribute"))
31153143 else {
3116- let mZ = C(B)
3117- let at = split(valueOrElse(getString(mZ), "0_0_0_0_0"), "_")
3118- let na = (mU - mY)
3119- $Tuple2((([IntegerEntry(mT, if ((0 > na))
3144+ let ne = C(B)
3145+ let at = split(valueOrElse(getString(ne), "0_0_0_0_0"), "_")
3146+ let nf = (mZ - nd)
3147+ $Tuple2((([IntegerEntry(mY, if ((0 > nf))
31203148 then 0
3121- else na), IntegerEntry(mV, if ((0 > na))
3122- then (mW + na)
3123- else mW), StringEntry(mZ, makeString([toString((parseIntValue(at[l]) + mJ)), toString((parseIntValue(at[m]) + mK)), toString((parseIntValue(at[n]) + mL)), toString((parseIntValue(at[o]) + mM)), toString((parseIntValue(at[p]) + mN))], "_"))] ++ lp) ++ mS), 0)
3149+ else nf), IntegerEntry(na, if ((0 > nf))
3150+ then (nb + nf)
3151+ else nb), StringEntry(ne, makeString([toString((parseIntValue(at[l]) + mO)), toString((parseIntValue(at[m]) + mP)), toString((parseIntValue(at[n]) + mQ)), toString((parseIntValue(at[o]) + mR)), toString((parseIntValue(at[p]) + mS))], "_"))] ++ lt) ++ mX), 0)
31243152 }
31253153 }
31263154 }
31273155
31283156
31293157
3130-@Callable(gN)
3131-func splitByGlobalWeightsREADONLY (eL) = $Tuple2(nil, fd(eL))
3132-
3133-
3134-
3135-@Callable(gN)
3136-func splitByGlobalAndLocalWeightsREADONLY (nb,nc,gQ) = {
3137- let gJ = gP(gQ)
3138- $Tuple2(nil, $Tuple2(fd(nb), eO(nc, gJ)))
3139- }
3140-
3141-
3142-
3143-@Callable(gN)
3144-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hN(bN(B)), ":"))
3145-
3146-
3147-
3148-@Callable(gN)
3158+@Callable(gR)
3159+func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, fh(eP))
3160+
3161+
3162+
3163+@Callable(gR)
3164+func splitByGlobalAndLocalWeightsREADONLY (ng,nh,gU) = {
3165+ let gN = gT(gU)
3166+ $Tuple2(nil, $Tuple2(fh(ng), eS(nh, gN)))
3167+ }
3168+
3169+
3170+
3171+@Callable(gR)
3172+func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hR(bO(B)), ":"))
3173+
3174+
3175+
3176+@Callable(gR)
31493177 func getWarehouseREADONLY (Q) = {
3150- let jv = value(assetInfo(fromBase58String(Q)))
3151- let ic = (dK(split(jv.description, "_")[do]) / cL)
3152- let id = valueOrElse(getInteger(bD(Q)), 0)
3153- $Tuple2(nil, makeString_2C(ia(bC(Q), ic, id), ":"))
3154- }
3155-
3156-
3157-
3158-@Callable(gN)
3159-func saveLastTx () = if (!(containsElement([dk, di, dl, dm], gN.caller)))
3178+ let jz = value(assetInfo(fromBase58String(Q)))
3179+ let ig = (dM(split(jz.description, "_")[dq]) / cN)
3180+ let ih = valueOrElse(getInteger(bE(Q)), 0)
3181+ $Tuple2(nil, makeString_2C(ie(bD(Q), ig, ih), ":"))
3182+ }
3183+
3184+
3185+
3186+@Callable(gR)
3187+func saveLastTx () = if (!(containsElement([dm, dk, dn, do], gR.caller)))
31603188 then throw("Access denied")
3161- else $Tuple2(ll(gN), 42)
3162-
3163-
3164-
3165-@Callable(gN)
3166-func updateDuckStats (B,kg) = if ((gN.caller != di))
3189+ else $Tuple2(lp(gR), 42)
3190+
3191+
3192+
3193+@Callable(gR)
3194+func updateDuckStats (B,kk) = if ((gR.caller != dk))
31673195 then throw("Access denied")
3168- else ki(B, kg)
3169-
3170-
3171-
3172-@Callable(gN)
3173-func updateAccStats (c,kg) = if (!(containsElement([dk, di, dm], gN.caller)))
3196+ else km(B, kk)
3197+
3198+
3199+
3200+@Callable(gR)
3201+func updateAccStats (c,kk) = if (!(containsElement([dm, dk, do], gR.caller)))
31743202 then throw("Access denied")
3175- else kj(c, kg)
3176-
3177-
3178-
3179-@Callable(gN)
3180-func equipDuck (nd) = {
3181- let lp = ll(gN)
3182- if ((size(gN.payments) != 0))
3203+ else kn(c, kk)
3204+
3205+
3206+
3207+@Callable(gR)
3208+func equipDuck (ni) = {
3209+ let lt = lp(gR)
3210+ if ((size(gR.payments) != 0))
31833211 then throw("No payments required")
31843212 else {
3185- let c = toString(gN.originCaller)
3186- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3187- if (kt(B))
3213+ let c = toString(gR.originCaller)
3214+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
3215+ if (kx(B))
31883216 then throw("equipDuck_checkTournament")
3189- else if (ku(B))
3217+ else if (ky(B))
31903218 then throw("equipDuck_checkDelivery")
31913219 else {
3192- let gA = G(B)
3193- let ne = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3194- let hO = bN(B)
3195- let ir = hN(hO)
3196- let lG = split(nd, "_")
3197- if ((size(lG) != r))
3220+ let gE = G(B)
3221+ let nj = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3222+ let hS = bO(B)
3223+ let iv = hR(hS)
3224+ let lL = split(ni, "_")
3225+ if ((size(lL) != r))
31983226 then throw("Wrong equipment string")
31993227 else {
3200- let gC = gp(ne, fA(ir[bp]), true, nil)
3201- let gD = split(lG[q], ";")[1]
3202- let ar = if ((gD == ""))
3228+ let gG = gt(nj, fE(iv[bq]), true, nil)
3229+ let gH = split(lL[q], ";")[1]
3230+ let ar = if ((gH == ""))
32033231 then 0
32043232 else {
3205- let gE = split(gD, ",")[0]
3206- if ((gE == ""))
3233+ let gI = split(gH, ",")[0]
3234+ if ((gI == ""))
32073235 then 0
32083236 else {
3209- let fP = split(gE, ":")
3210- let dg = fP[0]
3211- let gF = fP[1]
3212- if (if (if (if (if ((dg == "06"))
3237+ let fT = split(gI, ":")
3238+ let di = fT[0]
3239+ let gJ = fT[1]
3240+ if (if (if (if (if ((di == "06"))
32133241 then true
3214- else (dg == "07"))
3242+ else (di == "07"))
32153243 then true
3216- else (dg == "08"))
3217- then (gF != "")
3244+ else (di == "08"))
3245+ then (gJ != "")
32183246 else false)
3219- then (parseIntValue(gF) > 0)
3247+ then (parseIntValue(gJ) > 0)
32203248 else false)
3221- then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ])
3249+ then parseIntValue(split(aY[parseIntValue(di)], "_")[ba])
32223250 else 0
32233251 }
32243252 }
3225- let gk = ap(this, B, ar, true)
3226- let gG = gp(lG, gC, false, gk)
3227- let nf = fF(gG)
3228- $Tuple2(([StringEntry(gA, nd), StringEntry(hO, makeString_2C([ir[bm], ir[bn], ir[bo], nf], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ lp), 0)
3253+ let go = ap(this, B, ar, true)
3254+ let gK = gt(lL, gG, false, go)
3255+ let nk = fJ(gK)
3256+ $Tuple2(([StringEntry(gE, ni), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], nk], ":")), StringEntry(M(B), makeString([toString(go[7]), toString(go[8]), toString(go[9]), toString(go[10]), toString(go[11])], "_"))] ++ lt), 0)
32293257 }
32303258 }
32313259 }
32333261
32343262
32353263
3236-@Callable(gN)
3237-func fortificateLand (Q,ng) = {
3238- let lp = ll(gN)
3239- if ((size(gN.payments) != 0))
3264+@Callable(gR)
3265+func fortificateLand (Q,nl) = {
3266+ let lt = lp(gR)
3267+ if ((size(gR.payments) != 0))
32403268 then throw("No payments required")
32413269 else {
3242- let c = toString(gN.originCaller)
3243- let B = valueOrElse(getString(bM(c)), "")
3244- let fK = ap(this, B, 0, false)
3245- let nh = bE(Q)
3246- let ni = split(valueOrElse(getString(nh), ":0_15:0_18:0"), "_")
3247- let jv = value(assetInfo(fromBase58String(Q)))
3248- let ic = (dK(split(jv.description, "_")[do]) / cL)
3249- let id = valueOrElse(getInteger(bD(Q)), 0)
3250- let ib = bC(Q)
3251- let ig = ia(ib, ic, id)
3252- let nj = split(ig[bh], "_")
3253- let nk = parseIntValue(nj[bj])
3254- let nl = parseIntValue(nj[bk])
3255- let nm = split(ng, "_")
3256- let nn = gw(ni, fA(ig[bg]), nk, nl, true, nil)
3257- let gC = nn._1
3258- let no = nn._2
3259- let np = nn._3
3260- let nq = gw(nm, gC, no, np, false, fK)
3261- let gG = nq._1
3262- let nr = nq._2
3263- let ns = nq._3
3264- let nf = fF(gG)
3265- let kb = makeString([nj[bi], toString(nr), toString(ns), nj[bl]], "_")
3266- $Tuple2(([StringEntry(nh, ng), StringEntry(ib, makeString_2C([ig[bd], ig[be], ig[bf], nf, kb], ":"))] ++ lp), 0)
3267- }
3268- }
3269-
3270-
3271-
3272-@Callable(gN)
3273-func initDuckTourAttempt (B) = if ((gN.caller != dl))
3270+ let c = toString(gR.originCaller)
3271+ let B = valueOrElse(getString(bN(c)), "")
3272+ let fO = ap(this, B, 0, false)
3273+ let nm = bF(Q)
3274+ let nn = split(valueOrElse(getString(nm), ":0_15:0_18:0"), "_")
3275+ let jz = value(assetInfo(fromBase58String(Q)))
3276+ let ig = (dM(split(jz.description, "_")[dq]) / cN)
3277+ let ih = valueOrElse(getInteger(bE(Q)), 0)
3278+ let if = bD(Q)
3279+ let ik = ie(if, ig, ih)
3280+ let no = split(ik[bi], "_")
3281+ let np = parseIntValue(no[bk])
3282+ let nq = parseIntValue(no[bl])
3283+ let nr = split(nl, "_")
3284+ let ns = gA(nn, fE(ik[bh]), np, nq, true, nil)
3285+ let gG = ns._1
3286+ let nt = ns._2
3287+ let nu = ns._3
3288+ let nv = gA(nr, gG, nt, nu, false, fO)
3289+ let gK = nv._1
3290+ let nw = nv._2
3291+ let nx = nv._3
3292+ let nk = fJ(gK)
3293+ let kf = makeString([no[bj], toString(nw), toString(nx), no[bm]], "_")
3294+ $Tuple2(([StringEntry(nm, nl), StringEntry(if, makeString_2C([ik[be], ik[bf], ik[bg], nk, kf], ":"))] ++ lt), 0)
3295+ }
3296+ }
3297+
3298+
3299+
3300+@Callable(gR)
3301+func initDuckTourAttempt (B) = if ((gR.caller != dn))
32743302 then throw("Access denied")
32753303 else {
3276- let je = A(B)
3277- let jf = aj(valueOrElse(getInteger(E(B)), 0))
3278- let ky = valueOrElse(getInteger(je), jf)
3279- let nt = bO(B)
3280- let jt = valueOrElse(getString(nt), aM)
3281- let cj = valueOrElse(getInteger(dl, bU), 0)
3282- let nu = (toString(cj) + "_T_0")
3283- $Tuple2([IntegerEntry(K(B), ky), IntegerEntry(je, jf), StringEntry(L(B), jt), StringEntry(nt, nu)], nu)
3304+ let ji = A(B)
3305+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
3306+ let kC = valueOrElse(getInteger(ji), jj)
3307+ let ny = bP(B)
3308+ let jx = valueOrElse(getString(ny), aN)
3309+ let ck = valueOrElse(getInteger(dn, bV), 0)
3310+ let nz = (toString(ck) + "_T_0")
3311+ $Tuple2([IntegerEntry(K(B), kC), IntegerEntry(ji, jj), StringEntry(L(B), jx), StringEntry(ny, nz)], nz)
32843312 }
32853313
32863314
32873315
3288-@Callable(gN)
3316+@Callable(gR)
32893317 func breakAttempt () = {
3290- let lp = ll(gN)
3291- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
3292- let nt = bO(B)
3293- let jt = valueOrElse(getString(nt), aM)
3294- if ((split(jt, "_")[br] != "T"))
3318+ let lt = lp(gR)
3319+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
3320+ let ny = bP(B)
3321+ let jx = valueOrElse(getString(ny), aN)
3322+ if ((split(jx, "_")[bs] != "T"))
32953323 then throw("Your duck is not in the tournament")
32963324 else {
3297- let nv = getIntegerValue(K(B))
3298- let kE = getStringValue(L(B))
3299- $Tuple2(((lp :+ IntegerEntry(A(B), nv)) :+ StringEntry(nt, kE)), jt)
3300- }
3301- }
3302-
3303-
3304-
3305-@Callable(gN)
3306-func breakAttemptCallback () = if ((gN.caller != dl))
3325+ let nA = getIntegerValue(K(B))
3326+ let kI = getStringValue(L(B))
3327+ $Tuple2(((lt :+ IntegerEntry(A(B), nA)) :+ StringEntry(ny, kI)), jx)
3328+ }
3329+ }
3330+
3331+
3332+
3333+@Callable(gR)
3334+func breakAttemptCallback () = if ((gR.caller != dn))
33073335 then throw("Access denied")
33083336 else {
3309- let B = valueOrErrorMessage(getString(bM(toString(gN.originCaller))), "You don't have a duck staked")
3310- $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback")
3337+ let B = valueOrErrorMessage(getString(bN(toString(gR.originCaller))), "You don't have a duck staked")
3338+ $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bP(B), getStringValue(L(B)))], "breakAttemptCallback")
33113339 }
33123340
33133341
33143342
3315-@Callable(gN)
3316-func exitTournamentInternal (B) = if ((gN.caller != this))
3343+@Callable(gR)
3344+func exitTournamentInternal (B) = if ((gR.caller != this))
33173345 then throw("Access denied")
33183346 else {
3319- let nv = getIntegerValue(K(B))
3320- let kE = getStringValue(L(B))
3321- $Tuple2([IntegerEntry(A(B), nv), StringEntry(bO(B), kE)], false)
3347+ let nA = getIntegerValue(K(B))
3348+ let kI = getStringValue(L(B))
3349+ $Tuple2([IntegerEntry(A(B), nA), StringEntry(bP(B), kI)], false)
33223350 }
33233351
33243352
33253353
3326-@Callable(gN)
3327-func exitDeliveryInternal (B) = if ((gN.caller != this))
3354+@Callable(gR)
3355+func exitDeliveryInternal (B) = if ((gR.caller != this))
33283356 then throw("Access denied")
33293357 else {
3330- let ml = kv(B, false, 0, 0)
3331- $Tuple2((ml._1 ++ ml._2), false)
3358+ let mq = kz(B, false, 0, 0)
3359+ $Tuple2((mq._1 ++ mq._2), false)
33323360 }
33333361
33343362
33353363
3336-@Callable(gN)
3337-func autoExitDelivery (B,iY,nw,kw) = if ((gN.caller != this))
3364+@Callable(gR)
3365+func autoExitDelivery (B,jc,nB,kA) = if ((gR.caller != this))
33383366 then throw("Access denied")
33393367 else {
3340- let ml = kv(B, true, iY, kw)
3341- $Tuple2(ml._1, ml._3)
3368+ let mq = kz(B, true, jc, kA)
3369+ $Tuple2(mq._1, mq._3)
33423370 }
33433371
33443372
33453373
3346-@Callable(gN)
3347-func breakDelivery () = $Tuple2(ll(gN), "breakDelivery")
3348-
3349-
3350-
3351-@Callable(gN)
3352-func prepareRobbery (iT,iU) = {
3353- let lp = ll(gN)
3354- if (!(sigVerify_8Kb(iT, iU, ec)))
3374+@Callable(gR)
3375+func breakDelivery () = $Tuple2(lp(gR), "breakDelivery")
3376+
3377+
3378+
3379+@Callable(gR)
3380+func prepareRobbery (iX,iY) = {
3381+ let lt = lp(gR)
3382+ if (!(sigVerify_8Kb(iX, iY, ee)))
33553383 then throw("signature does not match")
3356- else if ((size(gN.payments) != 1))
3384+ else if ((size(gR.payments) != 1))
33573385 then throw("exactly 1 payment must be attached")
33583386 else {
3359- let lq = gN.payments[0]
3360- let nx = lq.amount
3361- if (if (!(isDefined(lq.assetId)))
3387+ let lu = gR.payments[0]
3388+ let nC = lu.amount
3389+ if (if (!(isDefined(lu.assetId)))
33623390 then true
3363- else (value(lq.assetId) != ds))
3391+ else (value(lu.assetId) != du))
33643392 then throw("WLGOLD payments only!")
33653393 else {
3366- let fs = split(toUtf8String(iT), "|")
3367- if ((2 > size(fs)))
3394+ let fw = split(toUtf8String(iX), "|")
3395+ if ((2 > size(fw)))
33683396 then throw("Wrong message format")
33693397 else {
3370- let jc = if ((size(fs) >= 2))
3371- then fs[2]
3398+ let jg = if ((size(fw) >= 2))
3399+ then fw[2]
33723400 else ""
3373- let bQ = toString(gN.caller)
3374- let jd = valueOrElse(getString(dO(bQ)), "")
3375- if ((jd != jc))
3376- then throw(((("Tx ids don't match! In state: " + jd) + ", in msg: ") + jc))
3401+ let bR = toString(gR.caller)
3402+ let jh = valueOrElse(getString(dQ(bR)), "")
3403+ if ((jh != jg))
3404+ then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg))
33773405 else {
3378- let B = fs[0]
3379- if (kt(B))
3406+ let B = fw[0]
3407+ if (kx(B))
33803408 then throw("prepareRobbery_checkTournament")
3381- else if (ku(B))
3409+ else if (ky(B))
33823410 then throw("prepareRobbery_checkDelivery")
33833411 else {
33843412 let aB = ax(this, B)._1
3385- if ((aB > nx))
3386- then throw(((("Payment " + toString(nx)) + " < required ") + toString(aB)))
3413+ if ((aB > nC))
3414+ then throw(((("Payment " + toString(nC)) + " < required ") + toString(aB)))
33873415 else {
3388- let ny = split(fs[1], "_")
3416+ let nD = split(fw[1], "_")
33893417 let aA = lastBlock.timestamp
33903418 let aC = valueOrElse(getInteger(S(B)), 0)
33913419 let aD = valueOrElse(getString(T(B)), "")
33953423 else false)
33963424 then throw(("You already started robbing, wait till " + toString(aE)))
33973425 else {
3398- func nz (eU,Q) = {
3399- let nA = valueOrElse(getInteger(P(Q)), 0)
3400- let nB = valueOrElse(getInteger(R(Q)), 0)
3401- if ((nA > size(v)))
3426+ func nE (eY,Q) = {
3427+ let nF = valueOrElse(getInteger(P(Q)), 0)
3428+ let nG = valueOrElse(getInteger(R(Q)), 0)
3429+ if ((nF > size(v)))
34023430 then throw("Invalid state")
3403- else if ((aA > nB))
3431+ else if ((aA > nG))
34043432 then {
3405- let nC = valueOrElse(getInteger(bw(Q)), 0)
3406- if ((0 >= nC))
3407- then eU
3433+ let nH = valueOrElse(getInteger(bx(Q)), 0)
3434+ if ((0 >= nH))
3435+ then eY
34083436 else {
3409- let gu = value(assetInfo(fromBase58String(Q)))
3410- let jz = split(gu.description, "_")
3411- let jl = dK(jz[do])
3412- let nD = jk(Q, jl)
3413- let gT = (aA - nC)
3414- let jC = fraction(gT, (nD * jl), a)
3415- if ((w > jC))
3416- then eU
3417- else (eU :+ Q)
3437+ let gy = value(assetInfo(fromBase58String(Q)))
3438+ let jD = split(gy.description, "_")
3439+ let jp = dM(jD[dq])
3440+ let nI = jo(Q, jp)
3441+ let gX = (aA - nH)
3442+ let jG = fraction(gX, (nI * jp), a)
3443+ if ((w > jG))
3444+ then eY
3445+ else (eY :+ Q)
34183446 }
34193447 }
3420- else eU
3448+ else eY
34213449 }
34223450
3423- let nE = {
3424- let eW = ny
3425- let eX = size(eW)
3426- let eY = nil
3427- func eZ (fa,fb) = if ((fb >= eX))
3428- then fa
3429- else nz(fa, eW[fb])
3430-
3431- func fc (fa,fb) = if ((fb >= eX))
3432- then fa
3451+ let nJ = {
3452+ let fa = nD
3453+ let fb = size(fa)
3454+ let fc = nil
3455+ func fd (fe,ff) = if ((ff >= fb))
3456+ then fe
3457+ else nE(fe, fa[ff])
3458+
3459+ func fg (fe,ff) = if ((ff >= fb))
3460+ then fe
34333461 else throw("List size exceeds 10")
34343462
3435- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3463+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
34363464 }
3437- if ((size(nE) == 0))
3465+ if ((size(nJ) == 0))
34383466 then throw("No candidates for robbery")
34393467 else {
3440- let nF = dV(size(nE), iT, iU)
3441- let Q = nE[nF]
3442- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ lp), Q)
3468+ let nK = dX(size(nJ), iX, iY)
3469+ let Q = nJ[nK]
3470+ $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ lt), Q)
34433471 }
34443472 }
34453473 }
34523480
34533481
34543482
3455-@Callable(gN)
3456-func robLand (iT,iU) = {
3457- let lp = ll(gN)
3458- if (!(sigVerify_8Kb(iT, iU, ec)))
3483+@Callable(gR)
3484+func robLand (iX,iY) = {
3485+ let lt = lp(gR)
3486+ if (!(sigVerify_8Kb(iX, iY, ee)))
34593487 then throw("signature does not match")
34603488 else {
3461- let bQ = toString(gN.caller)
3462- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3489+ let bR = toString(gR.caller)
3490+ let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked")
34633491 let aA = lastBlock.timestamp
3464- $Tuple2((lp :+ IntegerEntry(N(B), aA)), 0)
3465- }
3466- }
3467-
3468-
3469-
3470-@Callable(gN)
3492+ $Tuple2((lt :+ IntegerEntry(N(B), aA)), 0)
3493+ }
3494+ }
3495+
3496+
3497+
3498+@Callable(gR)
34713499 func acceptDelivery () = {
3472- let lp = ll(gN)
3473- let bQ = toString(gN.caller)
3474- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3475- let nG = valueOrElse(getInteger(di, bS), 0)
3476- let kC = valueOrElse(getInteger(di, bT), 0)
3477- if ((aP > (nG - kC)))
3478- then throw(((("Delivery is not available, fund=" + dP(nG, 6)) + ", locked=") + dP(kC, 6)))
3500+ let lt = lp(gR)
3501+ let bR = toString(gR.caller)
3502+ let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked")
3503+ let nL = valueOrElse(getInteger(dk, bT), 0)
3504+ let kG = valueOrElse(getInteger(dk, bU), 0)
3505+ if ((aQ > (nL - kG)))
3506+ then throw(((("Delivery is not available, fund=" + dR(nL, 6)) + ", locked=") + dR(kG, 6)))
34793507 else {
34803508 let aA = lastBlock.timestamp
3481- let nH = valueOrElse(getInteger(U(B)), 0)
3482- if ((nH > aA))
3483- then throw(("Delivery is forbidden for your duck until " + toString(nH)))
3509+ let nM = valueOrElse(getInteger(U(B)), 0)
3510+ if ((nM > aA))
3511+ then throw(("Delivery is forbidden for your duck until " + toString(nM)))
34843512 else {
34853513 let av = getIntegerValue(A(B))
34863514 if ((0 >= av))
34873515 then throw("You cannot accept delivery with zero health")
34883516 else {
3489- let kB = V(bQ)
3490- let fU = valueOrElse(getInteger(kB), 0)
3491- let nI = valueOrElse(getInteger(W(bQ)), 0)
3492- let nJ = (aA / a)
3493- let nK = valueOrElse(getInteger(dm, d(bQ)), 0)
3494- let nL = (aR + (nK / aS))
3495- if (if ((fU >= nL))
3496- then (nI == nJ)
3517+ let kF = V(bR)
3518+ let fY = valueOrElse(getInteger(kF), 0)
3519+ let nN = valueOrElse(getInteger(W(bR)), 0)
3520+ let nO = (aA / a)
3521+ let nP = valueOrElse(getInteger(do, d(bR)), 0)
3522+ let nQ = (aS + (nP / aT))
3523+ if (if ((fY >= nQ))
3524+ then (nN == nO)
34973525 else false)
3498- then throw((("You already used " + toString(nL)) + " delivery attempts for today"))
3499- else if (kt(B))
3526+ then throw((("You already used " + toString(nQ)) + " delivery attempts for today"))
3527+ else if (kx(B))
35003528 then throw("acceptDelivery_checkTournament")
3501- else if (ku(B))
3529+ else if (ky(B))
35023530 then throw("acceptDelivery_checkDelivery")
35033531 else {
3504- let nM = dF(invoke(di, "updateDeliveryLocked", [(kC + aP)], nil))
3505- let nt = bO(B)
3506- let jt = valueOrElse(getString(nt), aM)
3507- let nN = (toString(aA) + "_D_0")
3508- $Tuple2(([StringEntry(L(B), jt), StringEntry(nt, nN), IntegerEntry(kB, if ((nI != nJ))
3532+ let nR = dH(invoke(dk, "updateDeliveryLocked", [(kG + aQ)], nil))
3533+ let ny = bP(B)
3534+ let jx = valueOrElse(getString(ny), aN)
3535+ let nS = (toString(aA) + "_D_0")
3536+ $Tuple2(([StringEntry(L(B), jx), StringEntry(ny, nS), IntegerEntry(kF, if ((nN != nO))
35093537 then 0
3510- else fU)] ++ lp), $Tuple2(nN, nM))
3538+ else fY)] ++ lt), $Tuple2(nS, nR))
35113539 }
35123540 }
35133541 }
35163544
35173545
35183546
3519-@Callable(gN)
3520-func checkDeliveryCallback (B) = if ((gN.caller != dl))
3547+@Callable(gR)
3548+func checkDeliveryCallback (B) = if ((gR.caller != dn))
35213549 then throw("Access denied")
3522- else $Tuple2(nil, ku(B))
3550+ else $Tuple2(nil, ky(B))
3551+
3552+
3553+
3554+@Callable(gR)
3555+func buyRoboDuck () = if (!(cB))
3556+ then throw("Feature is turned off")
3557+ else {
3558+ let lt = lp(gR)
3559+ if ((size(gR.payments) != 1))
3560+ then throw("Exactly one payment required")
3561+ else {
3562+ let lu = value(gR.payments[0])
3563+ if ((lu.assetId != cE))
3564+ then throw("Allowed USDT payment only!")
3565+ else if ((lu.amount != em))
3566+ then throw((("Payment attached should be " + dR(em, 6)) + " USDT"))
3567+ else {
3568+ let nT = valueOrElse(getInteger(eF()), 0)
3569+ let nU = toBytes(nT)
3570+ let ex = ((aH + "-") + takeRight(toBase16String(nU), 8))
3571+ let nV = takeRight(toBase16String(sha256_16Kb(nU)), 6)
3572+ let iU = Issue(ex, ("Robo Duck NFT for WavesLands game, background color = #" + nV), 1, 0, false)
3573+ let bv = calculateAssetId(iU)
3574+ $Tuple2(((((lt :+ IntegerEntry(eF(), (nT + 1))) :+ iU) :+ ScriptTransfer(gR.originCaller, 1, bv)) :+ ScriptTransfer(dk, lu.amount, cE)), $Tuple2(toBase58String(bv), nV))
3575+ }
3576+ }
3577+ }
35233578
35243579
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 86400000
55
66 func b (c) = ("lastArbTimeUser_" + c)
77
88
99 func d (c) = ("acresStakedAmountByUser_" + c)
1010
1111
1212 let e = 100000000
1313
1414 let f = 3200
1515
1616 let g = 4000
1717
1818 let h = 3
1919
2020 let i = 100000000
2121
2222 let j = 400
2323
2424 let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
2525
2626 let l = 0
2727
2828 let m = 1
2929
3030 let n = 2
3131
3232 let o = 3
3333
3434 let p = 4
3535
3636 let q = 0
3737
3838 let r = 6
3939
4040 let s = 2
4141
4242 let t = 2
4343
4444 let u = 30
4545
4646 let v = [0, 600000, 900000, 43200000, 21600000]
4747
4848 let w = 20000000
4949
5050 let x = 1
5151
5252 let y = 0
5353
5454 let z = 1
5555
5656 func A (B) = ("duckHealth_" + B)
5757
5858
5959 func C (B) = ("duckChars_" + B)
6060
6161
6262 func D (B) = ("duckXP_" + B)
6363
6464
6565 func E (B) = ("duckLevel_" + B)
6666
6767
6868 func F (B) = ("duckFreePoints_" + B)
6969
7070
7171 func G (B) = ("duckEquipment_" + B)
7272
7373
7474 func H (c) = ("userXP_" + c)
7575
7676
7777 func I (c) = ("userLevel_" + c)
7878
7979
8080 func J (c) = ("userFreePoints_" + c)
8181
8282
8383 func K (B) = ("savedHealth_" + B)
8484
8585
8686 func L (B) = ("savedLocation_" + B)
8787
8888
8989 func M (B) = ("duckBuffs_" + B)
9090
9191
9292 func N (B) = ("lastRobberyTime_" + B)
9393
9494
9595 func O (B) = ("lastRobberyCost_" + B)
9696
9797
9898 func P (Q) = ("landRobberyState_" + Q)
9999
100100
101101 func R (Q) = ("landCooldownETA_" + Q)
102102
103103
104104 func S (B) = ("duckRobberyState_" + B)
105105
106106
107107 func T (B) = ("lockedLandByDuck_" + B)
108108
109109
110110 func U (B) = ("deliveryDelayByDuck_" + B)
111111
112112
113113 func V (c) = ("userDeliveryCount_" + c)
114114
115115
116116 func W (c) = ("userLastDeliveryDay_" + c)
117117
118118
119119 let X = 10000
120120
121121 let Y = 10000
122122
123123 let Z = 2000
124124
125125 let aa = 100000
126126
127127 let ab = 1000000
128128
129129 let ac = 5000000
130130
131131 let ad = 10000
132132
133133 let ae = 1000000
134134
135135 let af = 1000000
136136
137137 let ag = 10000
138138
139139 func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e)
140140
141141
142142 func aj (ak) = (100 + ak)
143143
144144
145145 func al (am,an) = {
146146 let ao = ah(an)
147147 [ao, (h * (ao - am))]
148148 }
149149
150150
151151 func ap (aq,B,ar,as) = {
152152 let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_")
153153 let au = valueOrElse(getInteger(aq, E(B)), 0)
154154 let av = valueOrElse(getInteger(aq, A(B)), aj(au))
155155 let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_")
156156 ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as)
157157 then [ar, ar, ar, ar, ar]
158158 else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])]))
159159 }
160160
161161
162162 func ax (aq,B) = {
163163 let ay = valueOrElse(getInteger(aq, O(B)), 0)
164164 let az = valueOrElse(getInteger(aq, N(B)), 0)
165165 let aA = lastBlock.timestamp
166166 let aB = max([i, (ay - (j * (aA - az)))])
167167 let aC = valueOrElse(getInteger(aq, S(B)), 0)
168168 let aD = valueOrElse(getString(aq, T(B)), "")
169169 let aE = valueOrElse(getInteger(aq, R(aD)), 0)
170170 $Tuple5(aB, az, aC, aD, aE)
171171 }
172172
173173
174174 let aF = "LAND"
175175
176176 let aG = "DUCK"
177177
178-let aH = "PRESALE"
179-
180-let aI = 6
181-
182-let aJ = 25
183-
184-let aK = 3456000
185-
186-let aL = 10000000000
187-
188-let aM = "Africa_F_Africa"
189-
190-let aN = 39637
191-
192-let aO = 10
193-
194-let aP = 50000
195-
196-let aQ = 600000
197-
198-let aR = 1
199-
200-let aS = 50000000
201-
202-let aT = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
203-
204-let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205-
206-let aV = 10000000
207-
208-let aW = [15, 16, 17, 18, 19, 20]
209-
210-let aX = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
211-
212-let aY = 6
213-
214-let aZ = 8
215-
216-let ba = 9
217-
218-let bb = 10
178+let aH = "ROBO"
179+
180+let aI = "PRESALE"
181+
182+let aJ = 6
183+
184+let aK = 25
185+
186+let aL = 3456000
187+
188+let aM = 10000000000
189+
190+let aN = "Africa_F_Africa"
191+
192+let aO = 39637
193+
194+let aP = 10
195+
196+let aQ = 50000
197+
198+let aR = 600000
199+
200+let aS = 1
201+
202+let aT = 50000000
203+
204+let aU = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
205+
206+let aV = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
207+
208+let aW = 10000000
209+
210+let aX = [15, 16, 17, 18, 19, 20]
211+
212+let aY = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
213+
214+let aZ = 6
215+
216+let ba = 8
217+
218+let bb = 9
219219
220220 let bc = 10
221221
222-let bd = 0
223-
224-let be = 1
225-
226-let bf = 2
227-
228-let bg = 3
229-
230-let bh = 4
231-
232-let bi = 0
233-
234-let bj = 1
235-
236-let bk = 2
237-
238-let bl = 3
239-
240-let bm = 0
241-
242-let bn = 1
243-
244-let bo = 2
245-
246-let bp = 3
247-
248-let bq = 0
249-
250-let br = 1
251-
252-let bs = 2
253-
254-func bt (bu) = ("no_" + bu)
255-
256-
257-func bv (bu) = ("lcna_" + bu)
258-
259-
260-func bw (bu) = ("st_" + bu)
261-
262-
263-func bx (by,bu) = makeString(["las", by, bu], "_")
264-
265-
266-func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267-
268-
269-func bC (Q) = ("wh_" + Q)
270-
271-
272-func bD (bu) = ("infraLevel_" + bu)
273-
274-
275-func bE (Q) = ("fortifications_" + Q)
276-
277-
278-func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279-
280-
281-func bG (c) = ("accountCustomNameByAddr_" + c)
282-
283-
284-func bH (c) = ("accRefBy_" + c)
285-
286-
287-func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288-
289-
290-func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291-
292-
293-func bK (c) = ("accReferrals_" + c)
294-
295-
296-func bL (bu) = ("duckOwner_" + bu)
297-
298-
299-func bM (bB) = ("stakedDuckByOwner_" + bB)
300-
301-
302-func bN (B) = ("backPack_" + B)
303-
304-
305-func bO (B) = ("duckLocation_" + B)
306-
307-
308-func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309-
310-
311-func bR () = "emergencyWarehouseProducts"
312-
313-
314-let bS = "deliveryFund"
315-
316-let bT = "deliveryLocked"
317-
318-let bU = "%s__lastTourId"
319-
320-func bV (bW) = ("%s%d__tourStaticData__" + toString(bW))
321-
322-
323-func bX (bW) = ("%s%d__tourDynamicData__" + toString(bW))
324-
325-
326-func bY (bW,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bW), B], "__")
327-
328-
329-let bZ = 0
330-
331-let ca = 1
332-
333-let cb = 6
334-
335-let cc = 1
336-
337-func cd (ce,bW) = {
338- let cf = split(valueOrErrorMessage(getString(ce, bV(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__")
339- let cg = split_4C(valueOrErrorMessage(getString(ce, bX(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__")
340-[cf, cg]
341- }
342-
343-
344-func ch (ce,ci) = {
345- let cj = valueOrElse(getInteger(ce, bU), 0)
346- let ck = split(ci, "_")
222+let bd = 10
223+
224+let be = 0
225+
226+let bf = 1
227+
228+let bg = 2
229+
230+let bh = 3
231+
232+let bi = 4
233+
234+let bj = 0
235+
236+let bk = 1
237+
238+let bl = 2
239+
240+let bm = 3
241+
242+let bn = 0
243+
244+let bo = 1
245+
246+let bp = 2
247+
248+let bq = 3
249+
250+let br = 0
251+
252+let bs = 1
253+
254+let bt = 2
255+
256+func bu (bv) = ("no_" + bv)
257+
258+
259+func bw (bv) = ("lcna_" + bv)
260+
261+
262+func bx (bv) = ("st_" + bv)
263+
264+
265+func by (bz,bv) = makeString(["las", bz, bv], "_")
266+
267+
268+func bA (bB,bv,bC) = ((((("sttao_" + bB) + "_") + bv) + "_") + bC)
269+
270+
271+func bD (Q) = ("wh_" + Q)
272+
273+
274+func bE (bv) = ("infraLevel_" + bv)
275+
276+
277+func bF (Q) = ("fortifications_" + Q)
278+
279+
280+func bG (bv) = ("duckCustomNameByAssetId_" + bv)
281+
282+
283+func bH (c) = ("accountCustomNameByAddr_" + c)
284+
285+
286+func bI (c) = ("accRefBy_" + c)
287+
288+
289+func bJ (B) = ("onboardArtActivatedOnDuck_" + B)
290+
291+
292+func bK (c) = ("onboardArtActivatedDuckBy_" + c)
293+
294+
295+func bL (c) = ("accReferrals_" + c)
296+
297+
298+func bM (bv) = ("duckOwner_" + bv)
299+
300+
301+func bN (bC) = ("stakedDuckByOwner_" + bC)
302+
303+
304+func bO (B) = ("backPack_" + B)
305+
306+
307+func bP (B) = ("duckLocation_" + B)
308+
309+
310+func bQ (bR) = ("%s%s__userGwlReleaseTime__" + bR)
311+
312+
313+func bS () = "emergencyWarehouseProducts"
314+
315+
316+let bT = "deliveryFund"
317+
318+let bU = "deliveryLocked"
319+
320+let bV = "%s__lastTourId"
321+
322+func bW (bX) = ("%s%d__tourStaticData__" + toString(bX))
323+
324+
325+func bY (bX) = ("%s%d__tourDynamicData__" + toString(bX))
326+
327+
328+func bZ (bX,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bX), B], "__")
329+
330+
331+let ca = 0
332+
333+let cb = 1
334+
335+let cc = 6
336+
337+let cd = 1
338+
339+func ce (cf,bX) = {
340+ let cg = split(valueOrErrorMessage(getString(cf, bW(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__")
341+ let ch = split_4C(valueOrErrorMessage(getString(cf, bY(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__")
342+[cg, ch]
343+ }
344+
345+
346+func ci (cf,cj) = {
347+ let ck = valueOrElse(getInteger(cf, bV), 0)
348+ let cl = split(cj, "_")
347349 let aA = lastBlock.timestamp
348- let cl = cd(ce, cj)
349- let cf = cl[bZ]
350- let cg = cl[ca]
351- if (if (if ((ck[br] == "T"))
352- then (parseIntValue(ck[bq]) == cj)
350+ let cm = ce(cf, ck)
351+ let cg = cm[ca]
352+ let ch = cm[cb]
353+ if (if (if ((cl[bs] == "T"))
354+ then (parseIntValue(cl[br]) == ck)
353355 else false)
354- then (cg[cc] == "INPROGRESS")
356+ then (ch[cd] == "INPROGRESS")
355357 else false)
356- then (parseIntValue(cf[cb]) > aA)
358+ then (parseIntValue(cg[cc]) > aA)
357359 else false
358360 }
359361
360362
361-func cm (ci) = {
362- let ck = split(ci, "_")
363+func cn (cj) = {
364+ let cl = split(cj, "_")
363365 let aA = lastBlock.timestamp
364- let cn = parseIntValue(ck[bq])
365- let co = parseIntValue(ck[bs])
366- if (if ((ck[br] == "D"))
367- then ((cn + aQ) > aA)
366+ let co = parseIntValue(cl[br])
367+ let cp = parseIntValue(cl[bt])
368+ if (if ((cl[bs] == "D"))
369+ then ((co + aR) > aA)
368370 else false)
369- then (3 >= co)
371+ then (3 >= cp)
370372 else false
371373 }
372374
373375
374-func cp (ci) = {
375- let cq = split(ci, "_")[br]
376- if ((cq != "T"))
377- then (cq != "D")
376+func cq (cj) = {
377+ let cr = split(cj, "_")[bs]
378+ if ((cr != "T"))
379+ then (cr != "D")
378380 else false
379381 }
380382
381383
382-func cr (ce,ci) = {
383- let cj = valueOrElse(getInteger(ce, bU), 0)
384- let ck = split(ci, "_")
384+func cs (cf,cj) = {
385+ let ck = valueOrElse(getInteger(cf, bV), 0)
386+ let cl = split(cj, "_")
385387 let aA = lastBlock.timestamp
386- let cl = cd(ce, cj)
387- let cf = cl[bZ]
388- let cg = cl[ca]
389- let cq = ck[br]
390- if ((cq == "D"))
388+ let cm = ce(cf, ck)
389+ let cg = cm[ca]
390+ let ch = cm[cb]
391+ let cr = cl[bs]
392+ if ((cr == "D"))
391393 then true
392- else if (if (if ((ck[br] == "T"))
393- then (parseIntValue(ck[bq]) == cj)
394+ else if (if (if ((cl[bs] == "T"))
395+ then (parseIntValue(cl[br]) == ck)
394396 else false)
395- then (cg[cc] == "INPROGRESS")
397+ then (ch[cd] == "INPROGRESS")
396398 else false)
397- then (parseIntValue(cf[cb]) > aA)
399+ then (parseIntValue(cg[cc]) > aA)
398400 else false
399401 }
400402
401403
402-func cs (ct) = (parseIntValue(ct[aY]) * aV)
403-
404-
405-func cu (cv,cw,cx) = throw(((((("Cheat attempt: oldLoc=" + cv) + ", newLoc=") + cw) + ", case=") + toString(cx)))
406-
407-
408-let cy = false
404+func ct (cu) = (parseIntValue(cu[aZ]) * aW)
405+
406+
407+func cv (cw,cx,cy) = throw(((((("Cheat attempt: oldLoc=" + cw) + ", newLoc=") + cx) + ", case=") + toString(cy)))
408+
409409
410410 let cz = false
411411
412-let cA = 86400000
413-
414-let cB = take(drop(this.bytes, 1), 1)
415-
416-let cC = {
417- let cD = cB
418- if ((base58'2W' == cD))
412+let cA = false
413+
414+let cB = true
415+
416+let cC = 86400000
417+
418+let cD = take(drop(this.bytes, 1), 1)
419+
420+let cE = {
421+ let cF = cD
422+ if ((base58'2W' == cF))
419423 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
420- else if ((base58'2T' == cD))
424+ else if ((base58'2T' == cF))
421425 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
422426 else throw("Unknown chain")
423427 }
424428
425-let cE = {
426- let cD = cB
427- if ((base58'2W' == cD))
429+let cG = {
430+ let cF = cD
431+ if ((base58'2W' == cF))
428432 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
429- else if ((base58'2T' == cD))
433+ else if ((base58'2T' == cF))
430434 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
431435 else throw("Unknown chain")
432436 }
433437
434-let cF = {
435- let cD = cB
436- if ((base58'2W' == cD))
438+let cH = {
439+ let cF = cD
440+ if ((base58'2W' == cF))
437441 then 10000000000
438- else if ((base58'2T' == cD))
442+ else if ((base58'2T' == cF))
439443 then 100000000
440444 else throw("Unknown chain")
441445 }
442446
443-let cG = {
444- let cD = cB
445- if ((base58'2W' == cD))
446- then cA
447- else if ((base58'2T' == cD))
447+let cI = {
448+ let cF = cD
449+ if ((base58'2W' == cF))
450+ then cC
451+ else if ((base58'2T' == cF))
448452 then 60000
449453 else throw("Unknown chain")
450454 }
451455
452-let cH = {
453- let cD = cB
454- if ((base58'2W' == cD))
456+let cJ = {
457+ let cF = cD
458+ if ((base58'2W' == cF))
455459 then 10800000
456- else if ((base58'2T' == cD))
460+ else if ((base58'2T' == cF))
457461 then 900000
458462 else throw("Unknown chain")
459463 }
460464
461-let cI = "__"
462-
463-let cJ = 1000000
464-
465-let cK = 100000000
466-
467-let cL = 25
468-
469-let cM = 100
470-
471-let cN = 225
472-
473-let cO = 400
474-
475-let cP = 625
476-
477-let cQ = [0, 1, 2, 3, 4, 5]
478-
479-func cR (cS,cT) = valueOrErrorMessage(getString(cS, cT), makeString(["mandatory ", toString(cS), ".", cT, " is not defined"], ""))
480-
481-
482-let cU = 1
483-
484-let cV = 2
485-
486-let cW = 3
487-
488-let cX = 4
489-
490-let cY = 7
491-
492-let cZ = 8
493-
494-func da () = "%s__restConfig"
495-
496-
497-func db () = "%s__restAddr"
498-
499-
500-func dc (dd) = split_4C(cR(dd, da()), cI)
501-
502-
503-func de (df,dg) = valueOrErrorMessage(addressFromString(df[dg]), ("Rest cfg doesn't contain address at index " + toString(dg)))
504-
505-
506-let dh = addressFromStringValue(valueOrElse(getString(this, db()), cE))
507-
508-let df = dc(dh)
509-
510-let aq = de(df, cU)
511-
512-let di = de(df, cV)
513-
514-let dj = de(df, cW)
515-
516-let dk = de(df, cX)
517-
518-let dl = de(df, cY)
519-
520-let dm = de(df, cZ)
521-
522-let dn = 0
523-
524-let do = 1
525-
526-let dp = 2
527-
528-let dq = 3
529-
530-let dr = "wlg_assetId"
531-
532-let ds = valueOrErrorMessage(getBinary(dk, dr), "WLGOLD is not issued yet")
533-
534-let dt = "acresAssetId"
535-
536-let du = valueOrErrorMessage(getBinary(dm, dt), "ACRES is not issued yet")
537-
538-let dv = 2
539-
540-func dw (cS) = ("finishBlockForAddr_" + cS)
541-
542-
543-func dx () = "resTypesProportions"
544-
545-
546-func dy (dz) = ("resTypesByContinent_" + dz)
547-
548-
549-func dA (bB) = ("stakedLandsByOwner_" + bB)
550-
551-
552-func dB (bB) = ("stakedPiecesByOwner_" + bB)
553-
554-
555-func dC (dD) = {
556- let cD = dD
557- if ($isInstanceOf(cD, "String"))
465+let cK = "__"
466+
467+let cL = 1000000
468+
469+let cM = 100000000
470+
471+let cN = 25
472+
473+let cO = 100
474+
475+let cP = 225
476+
477+let cQ = 400
478+
479+let cR = 625
480+
481+let cS = [0, 1, 2, 3, 4, 5]
482+
483+func cT (cU,cV) = valueOrErrorMessage(getString(cU, cV), makeString(["mandatory ", toString(cU), ".", cV, " is not defined"], ""))
484+
485+
486+let cW = 1
487+
488+let cX = 2
489+
490+let cY = 3
491+
492+let cZ = 4
493+
494+let da = 7
495+
496+let db = 8
497+
498+func dc () = "%s__restConfig"
499+
500+
501+func dd () = "%s__restAddr"
502+
503+
504+func de (df) = split_4C(cT(df, dc()), cK)
505+
506+
507+func dg (dh,di) = valueOrErrorMessage(addressFromString(dh[di]), ("Rest cfg doesn't contain address at index " + toString(di)))
508+
509+
510+let dj = addressFromStringValue(valueOrElse(getString(this, dd()), cG))
511+
512+let dh = de(dj)
513+
514+let aq = dg(dh, cW)
515+
516+let dk = dg(dh, cX)
517+
518+let dl = dg(dh, cY)
519+
520+let dm = dg(dh, cZ)
521+
522+let dn = dg(dh, da)
523+
524+let do = dg(dh, db)
525+
526+let dp = 0
527+
528+let dq = 1
529+
530+let dr = 2
531+
532+let ds = 3
533+
534+let dt = "wlg_assetId"
535+
536+let du = valueOrErrorMessage(getBinary(dm, dt), "WLGOLD is not issued yet")
537+
538+let dv = "acresAssetId"
539+
540+let dw = valueOrErrorMessage(getBinary(do, dv), "ACRES is not issued yet")
541+
542+let dx = 2
543+
544+func dy (cU) = ("finishBlockForAddr_" + cU)
545+
546+
547+func dz () = "resTypesProportions"
548+
549+
550+func dA (dB) = ("resTypesByContinent_" + dB)
551+
552+
553+func dC (bC) = ("stakedLandsByOwner_" + bC)
554+
555+
556+func dD (bC) = ("stakedPiecesByOwner_" + bC)
557+
558+
559+func dE (dF) = {
560+ let cF = dF
561+ if ($isInstanceOf(cF, "String"))
558562 then {
559- let dE = cD
560- dE
563+ let dG = cF
564+ dG
561565 }
562566 else throw("fail to cast into String")
563567 }
564568
565569
566-func dF (dD) = {
567- let cD = dD
568- if ($isInstanceOf(cD, "Int"))
570+func dH (dF) = {
571+ let cF = dF
572+ if ($isInstanceOf(cF, "Int"))
569573 then {
570- let dG = cD
574+ let dI = cF
575+ dI
576+ }
577+ else throw("fail to cast into Int")
578+ }
579+
580+
581+func dJ (dF) = {
582+ let cF = dF
583+ if ($isInstanceOf(cF, "List[Any]"))
584+ then {
585+ let dK = cF
586+ dK
587+ }
588+ else throw("fail to cast into List[Any]")
589+ }
590+
591+
592+func dL (dF) = {
593+ let cF = dF
594+ if ($isInstanceOf(cF, "Boolean"))
595+ then {
596+ let dG = cF
571597 dG
572598 }
573- else throw("fail to cast into Int")
574- }
575-
576-
577-func dH (dD) = {
578- let cD = dD
579- if ($isInstanceOf(cD, "List[Any]"))
580- then {
581- let dI = cD
582- dI
583- }
584- else throw("fail to cast into List[Any]")
585- }
586-
587-
588-func dJ (dD) = {
589- let cD = dD
590- if ($isInstanceOf(cD, "Boolean"))
591- then {
592- let dE = cD
593- dE
594- }
595599 else throw("fail to cast into Boolean")
596600 }
597601
598602
599-func dK (dL) = {
600- let cD = dL
601- if (("S" == cD))
602- then cL
603- else if (("M" == cD))
604- then cM
605- else if (("L" == cD))
606- then cN
607- else if (("XL" == cD))
608- then cO
609- else if (("XXL" == cD))
610- then cP
603+func dM (dN) = {
604+ let cF = dN
605+ if (("S" == cF))
606+ then cN
607+ else if (("M" == cF))
608+ then cO
609+ else if (("L" == cF))
610+ then cP
611+ else if (("XL" == cF))
612+ then cQ
613+ else if (("XXL" == cF))
614+ then cR
611615 else throw("Unknown land size")
612616 }
613617
614618
615-func dM (dE) = isDefined(parseInt(dE))
616-
617-
618-func dN () = "contractsBlocked"
619-
620-
621-func dO (c) = ("lastTxIdByUser_" + c)
622-
623-
624-func dP (dQ,dR) = {
625- let dS = pow(10, 0, dR, 0, 0, DOWN)
626- let dT = toString((dQ % dS))
627- let dU = drop(toString(dS), (1 + size(dT)))
628- (((toString((dQ / dS)) + ".") + dU) + dT)
629- }
630-
631-
632-func dV (dW,dX,dY) = {
633- let dZ = sha256((dX + dY))
634- (toInt(dZ) % dW)
635- }
636-
637-
638-let ea = {
639- let cD = cB
640- if ((base58'2W' == cD))
619+func dO (dG) = isDefined(parseInt(dG))
620+
621+
622+func dP () = "contractsBlocked"
623+
624+
625+func dQ (c) = ("lastTxIdByUser_" + c)
626+
627+
628+func dR (dS,dT) = {
629+ let dU = pow(10, 0, dT, 0, 0, DOWN)
630+ let dV = toString((dS % dU))
631+ let dW = drop(toString(dU), (1 + size(dV)))
632+ (((toString((dS / dU)) + ".") + dW) + dV)
633+ }
634+
635+
636+func dX (dY,dZ,ea) = {
637+ let eb = sha256((dZ + ea))
638+ (toInt(eb) % dY)
639+ }
640+
641+
642+let ec = {
643+ let cF = cD
644+ if ((base58'2W' == cF))
641645 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
642- else if ((base58'2T' == cD))
646+ else if ((base58'2T' == cF))
643647 then this
644648 else throw("Unknown chain")
645649 }
646650
647-let eb = {
648- let cD = cB
649- if ((base58'2W' == cD))
651+let ed = {
652+ let cF = cD
653+ if ((base58'2W' == cF))
650654 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
651- else if ((base58'2T' == cD))
655+ else if ((base58'2T' == cF))
652656 then this
653657 else throw("Unknown chain")
654658 }
655659
656-let ec = {
657- let cD = cB
658- if ((base58'2W' == cD))
659- then if (cy)
660+let ee = {
661+ let cF = cD
662+ if ((base58'2W' == cF))
663+ then if (cz)
660664 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
661665 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
662- else if ((base58'2T' == cD))
666+ else if ((base58'2T' == cF))
663667 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
664668 else throw("Unknown chain")
665669 }
666670
667-let ed = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
668-
669-let ee = 300000
670-
671-let ef = 5000000
672-
673-let eg = 50
674-
675-let eh = 10000000
676-
677-let ei = {
678- let cD = cB
679- if ((base58'2W' == cD))
671+let ef = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
672+
673+let eg = 300000
674+
675+let eh = 5000000
676+
677+let ei = 50
678+
679+let ej = 10000000
680+
681+let ek = {
682+ let cF = cD
683+ if ((base58'2W' == cF))
680684 then 252289527462
681- else if ((base58'2T' == cD))
685+ else if ((base58'2T' == cF))
682686 then 2522895274
683687 else throw("Unknown chain")
684688 }
685689
686-let ej = {
687- let cD = cB
688- if ((base58'2W' == cD))
690+let el = {
691+ let cF = cD
692+ if ((base58'2W' == cF))
689693 then 250000000
690- else if ((base58'2T' == cD))
694+ else if ((base58'2T' == cF))
691695 then 250000000
692696 else throw("Unknown chain")
693697 }
694698
695-let ek = 2500000000
696-
697-let el = toBigInt(5)
698-
699-let em = toBigInt(20)
700-
701-let en = toBigInt((20 * 20))
702-
703-let eo = toBigInt(((20 * 20) * 20))
704-
705-let ep = toBigInt((((20 * 20) * 20) * 20))
706-
707-let eq = toBigInt(((((20 * 20) * 20) * 20) * 20))
708-
709-let er = 500
710-
711-func es () = "nextLandNum"
712-
713-
714-func et (eu) = ("lcn_" + eu)
715-
716-
717-func ev (ew) = ("la_" + ew)
718-
719-
720-func ex (bu,bB) = ((("ilao_" + bu) + "_") + bB)
721-
722-
723-func ey (ew) = ("lo_" + ew)
724-
725-
726-func ez (eu) = ("duckByCustomName_" + eu)
727-
728-
729-func eA (eu) = ("accountByCustomName_" + eu)
730-
731-
732-func eB () = "oldiesList"
733-
734-
735-let eC = 0
736-
737-let eD = 1
738-
739-let eE = 2
740-
741-let eF = 0
742-
743-let eG = 5
744-
745-let eH = 6
746-
747-let eI = 7
748-
749-func eJ (ew,dL) = ((aF + ew) + dL)
750-
751-
752-func eK (eL,eM) = {
753- let eN = if ((eL >= 0))
754- then (((eL + eM) - 1) / eM)
755- else -((((-(eL) + eM) - 1) / eM))
756- (eN * cK)
757- }
699+let em = 100000
700+
701+let en = 2500000000
702+
703+let eo = toBigInt(5)
704+
705+let ep = toBigInt(20)
706+
707+let eq = toBigInt((20 * 20))
708+
709+let er = toBigInt(((20 * 20) * 20))
710+
711+let es = toBigInt((((20 * 20) * 20) * 20))
712+
713+let et = toBigInt(((((20 * 20) * 20) * 20) * 20))
714+
715+let eu = 500
716+
717+func ev () = "nextLandNum"
718+
719+
720+func ew (ex) = ("lcn_" + ex)
721+
722+
723+func ey (ez) = ("la_" + ez)
724+
725+
726+func eA (bv,bC) = ((("ilao_" + bv) + "_") + bC)
727+
728+
729+func eB (ez) = ("lo_" + ez)
730+
731+
732+func eC (ex) = ("duckByCustomName_" + ex)
733+
734+
735+func eD (ex) = ("accountByCustomName_" + ex)
736+
737+
738+func eE () = "oldiesList"
739+
740+
741+func eF () = "nextRoboDuck"
742+
743+
744+let eG = 0
745+
746+let eH = 1
747+
748+let eI = 2
749+
750+let eJ = 0
751+
752+let eK = 5
753+
754+let eL = 6
755+
756+let eM = 7
757+
758+func eN (ez,dN) = ((aF + ez) + dN)
758759
759760
760761 func eO (eP,eQ) = {
761- let eR = (((((eQ[0] + eQ[1]) + eQ[2]) + eQ[3]) + eQ[4]) + eQ[5])
762- if ((0 >= eR))
762+ let eR = if ((eP >= 0))
763+ then (((eP + eQ) - 1) / eQ)
764+ else -((((-(eP) + eQ) - 1) / eQ))
765+ (eR * cM)
766+ }
767+
768+
769+func eS (eT,eU) = {
770+ let eV = (((((eU[0] + eU[1]) + eU[2]) + eU[3]) + eU[4]) + eU[5])
771+ if ((0 >= eV))
763772 then throw("Zero weights sum")
764773 else {
765- let eS = fraction(eP, cJ, eR)
766- func eT (eU,eV) = (eU :+ fraction(eV, eS, cJ))
767-
768- let eW = eQ
769- let eX = size(eW)
770- let eY = nil
771- func eZ (fa,fb) = if ((fb >= eX))
772- then fa
773- else eT(fa, eW[fb])
774-
775- func fc (fa,fb) = if ((fb >= eX))
776- then fa
774+ let eW = fraction(eT, cL, eV)
775+ func eX (eY,eZ) = (eY :+ fraction(eZ, eW, cL))
776+
777+ let fa = eU
778+ let fb = size(fa)
779+ let fc = nil
780+ func fd (fe,ff) = if ((ff >= fb))
781+ then fe
782+ else eX(fe, fa[ff])
783+
784+ func fg (fe,ff) = if ((ff >= fb))
785+ then fe
777786 else throw("List size exceeds 6")
778787
779- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
780- }
781- }
782-
783-
784-func fd (eP) = {
785- let fe = split(value(getString(dx())), "_")
786- if ((size(fe) != aI))
788+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
789+ }
790+ }
791+
792+
793+func fh (eT) = {
794+ let fi = split(value(getString(dz())), "_")
795+ if ((size(fi) != aJ))
787796 then throw("Wrong proportions data")
788797 else {
789- let ff = [parseIntValue(fe[0]), parseIntValue(fe[1]), parseIntValue(fe[2]), parseIntValue(fe[3]), parseIntValue(fe[4]), parseIntValue(fe[5])]
790- eO(eP, ff)
791- }
792- }
793-
794-
795-func fg (fh,fi,fj) = {
796- let fk = fd(fj)
797- func fl (eU,dg) = {
798- let fm = (parseIntValue(fi[dg]) - fk[dg])
799- if ((0 > fm))
800- then throw(((((("Not enough material idx=" + toString(dg)) + ", you have ") + fi[dg]) + ", but need ") + toString(fk[dg])))
801- else (eU :+ toString(fm))
798+ let fj = [parseIntValue(fi[0]), parseIntValue(fi[1]), parseIntValue(fi[2]), parseIntValue(fi[3]), parseIntValue(fi[4]), parseIntValue(fi[5])]
799+ eS(eT, fj)
800+ }
801+ }
802+
803+
804+func fk (fl,fm,fn) = {
805+ let fo = fh(fn)
806+ func fp (eY,di) = {
807+ let fq = (parseIntValue(fm[di]) - fo[di])
808+ if ((0 > fq))
809+ then throw(((((("Not enough material idx=" + toString(di)) + ", you have ") + fm[di]) + ", but need ") + toString(fo[di])))
810+ else (eY :+ toString(fq))
802811 }
803812
804- if (fh)
813+ if (fl)
805814 then {
806- let eW = cQ
807- let eX = size(eW)
808- let eY = nil
809- func eZ (fa,fb) = if ((fb >= eX))
810- then fa
811- else fl(fa, eW[fb])
812-
813- func fc (fa,fb) = if ((fb >= eX))
814- then fa
815+ let fa = cS
816+ let fb = size(fa)
817+ let fc = nil
818+ func fd (fe,ff) = if ((ff >= fb))
819+ then fe
820+ else fp(fe, fa[ff])
821+
822+ func fg (fe,ff) = if ((ff >= fb))
823+ then fe
815824 else throw("List size exceeds 6")
816825
817- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
818- }
819- else fi
820- }
821-
822-
823-func fn (fo,fp) = if ((fp == ""))
824- then $Tuple2(fo, false)
826+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
827+ }
828+ else fm
829+ }
830+
831+
832+func fr (fs,ft) = if ((ft == ""))
833+ then $Tuple2(fs, false)
825834 else {
826- func fq (eU,fr) = {
827- let fs = split(fr, ",")
828- if ((size(fs) != 2))
835+ func fu (eY,fv) = {
836+ let fw = split(fv, ",")
837+ if ((size(fw) != 2))
829838 then throw("Incorrect format, should be index,amount")
830839 else {
831- let dg = parseIntValue(fs[0])
832- if (if ((0 > dg))
840+ let di = parseIntValue(fw[0])
841+ if (if ((0 > di))
833842 then true
834- else (dg >= size(aX)))
843+ else (di >= size(aY)))
835844 then throw("Unknown product idx")
836845 else {
837- let ft = parseIntValue(fs[1])
838- let fu = split(eU._1, (fs[0] + ":"))
839- if ((size(fu) != 2))
840- then throw((("You don't have " + aT[dg]) + " equipped"))
846+ let fx = parseIntValue(fw[1])
847+ let fy = split(eY._1, (fw[0] + ":"))
848+ if ((size(fy) != 2))
849+ then throw((("You don't have " + aU[di]) + " equipped"))
841850 else {
842- let fv = fu[1]
843- let fw = if (dM(take(drop(fv, 1), 1)))
851+ let fz = fy[1]
852+ let fA = if (dO(take(drop(fz, 1), 1)))
844853 then 2
845854 else 1
846- let fx = parseIntValue(take(fv, fw))
847- let fy = drop(fv, fw)
848- let fz = if ((fx >= ft))
849- then (fx - ft)
850- else throw(((((("You equipped " + toString(fx)) + " of ") + aT[dg]) + ", but tried to use ") + toString(ft)))
851- $Tuple2(((((fu[0] + fs[0]) + ":") + toString(fz)) + fy), if (eU._2)
855+ let fB = parseIntValue(take(fz, fA))
856+ let fC = drop(fz, fA)
857+ let fD = if ((fB >= fx))
858+ then (fB - fx)
859+ else throw(((((("You equipped " + toString(fB)) + " of ") + aU[di]) + ", but tried to use ") + toString(fx)))
860+ $Tuple2(((((fy[0] + fw[0]) + ":") + toString(fD)) + fC), if (eY._2)
852861 then true
853- else if (if ((dg >= 6))
854- then (8 >= dg)
862+ else if (if ((di >= 6))
863+ then (8 >= di)
855864 else false)
856- then (fz == 0)
865+ then (fD == 0)
857866 else false)
858867 }
859868 }
860869 }
861870 }
862871
863- let eW = split(fp, "_")
864- let eX = size(eW)
865- let eY = $Tuple2(fo, false)
866- func eZ (fa,fb) = if ((fb >= eX))
867- then fa
868- else fq(fa, eW[fb])
869-
870- func fc (fa,fb) = if ((fb >= eX))
871- then fa
872+ let fa = split(ft, "_")
873+ let fb = size(fa)
874+ let fc = $Tuple2(fs, false)
875+ func fd (fe,ff) = if ((ff >= fb))
876+ then fe
877+ else fu(fe, fa[ff])
878+
879+ func fg (fe,ff) = if ((ff >= fb))
880+ then fe
872881 else throw("List size exceeds 10")
873882
874- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
883+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
875884 }
876885
877886
878-func fA (fB) = {
879- let fC = if ((fB == ""))
887+func fE (fF) = {
888+ let fG = if ((fF == ""))
880889 then nil
881- else split_4C(fB, "_")
882- func fD (eU,ct) = {
883- let fE = (size(eU) / 8)
884- let fx = if ((size(fC) > fE))
885- then parseIntValue(fC[fE])
890+ else split_4C(fF, "_")
891+ func fH (eY,cu) = {
892+ let fI = (size(eY) / 8)
893+ let fB = if ((size(fG) > fI))
894+ then parseIntValue(fG[fI])
886895 else 0
887- (eU + toBytes(fx))
896+ (eY + toBytes(fB))
888897 }
889898
890- let eW = aX
891- let eX = size(eW)
892- let eY = base58''
893- func eZ (fa,fb) = if ((fb >= eX))
894- then fa
895- else fD(fa, eW[fb])
896-
897- func fc (fa,fb) = if ((fb >= eX))
898- then fa
899+ let fa = aY
900+ let fb = size(fa)
901+ let fc = base58''
902+ func fd (fe,ff) = if ((ff >= fb))
903+ then fe
904+ else fH(fe, fa[ff])
905+
906+ func fg (fe,ff) = if ((ff >= fb))
907+ then fe
899908 else throw("List size exceeds 50")
900909
901- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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)
902- }
903-
904-
905-func fF (fG) = {
906- func fH (eU,ct) = {
907- let fE = size(eU)
908- let fI = take(drop(fG, (8 * fE)), 8)
909- (eU :+ toString(toInt(fI)))
910+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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)
911+ }
912+
913+
914+func fJ (fK) = {
915+ func fL (eY,cu) = {
916+ let fI = size(eY)
917+ let fM = take(drop(fK, (8 * fI)), 8)
918+ (eY :+ toString(toInt(fM)))
910919 }
911920
912921 makeString_2C({
913- let eW = aX
914- let eX = size(eW)
915- let eY = nil
916- func eZ (fa,fb) = if ((fb >= eX))
917- then fa
918- else fH(fa, eW[fb])
919-
920- func fc (fa,fb) = if ((fb >= eX))
921- then fa
922+ let fa = aY
923+ let fb = size(fa)
924+ let fc = nil
925+ func fd (fe,ff) = if ((ff >= fb))
926+ then fe
927+ else fL(fe, fa[ff])
928+
929+ func fg (fe,ff) = if ((ff >= fb))
930+ then fe
922931 else throw("List size exceeds 50")
923932
924- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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)
933+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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)
925934 }, "_")
926935 }
927936
928937
929-func fJ (fK,fL) = {
930- func fM (eU,fE) = {
931- let fN = if ((size(fK) > (7 + fE)))
932- then fK[(7 + fE)]
938+func fN (fO,fP) = {
939+ func fQ (eY,fI) = {
940+ let fR = if ((size(fO) > (7 + fI)))
941+ then fO[(7 + fI)]
933942 else 0
934- if ((parseIntValue(fL[fE]) > (fK[fE] + fN)))
935- then throw(("Requirement not satisfied: " + k[fE]))
943+ if ((parseIntValue(fP[fI]) > (fO[fI] + fR)))
944+ then throw(("Requirement not satisfied: " + k[fI]))
936945 else true
937946 }
938947
939- let eW = [0, 1, 2, 3, 4, 5, 6]
940- let eX = size(eW)
941- let eY = false
942- func eZ (fa,fb) = if ((fb >= eX))
943- then fa
944- else fM(fa, eW[fb])
945-
946- func fc (fa,fb) = if ((fb >= eX))
947- then fa
948+ let fa = [0, 1, 2, 3, 4, 5, 6]
949+ let fb = size(fa)
950+ let fc = false
951+ func fd (fe,ff) = if ((ff >= fb))
952+ then fe
953+ else fQ(fe, fa[ff])
954+
955+ func fg (fe,ff) = if ((ff >= fb))
956+ then fe
948957 else throw("List size exceeds 7")
949958
950- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7)
951- }
952-
953-
954-func fO (fP,fC,fQ,fK,fR,fS) = {
955- let fs = split(fP, ":")
956- if ((size(fs) != 2))
959+ fg(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7)
960+ }
961+
962+
963+func fS (fT,fG,fU,fO,fV,fW) = {
964+ let fw = split(fT, ":")
965+ if ((size(fw) != 2))
957966 then throw("Incorrect format, should be index:amount")
958- else if (if (!(fQ))
959- then (size(fs[0]) != 2)
967+ else if (if (!(fU))
968+ then (size(fw[0]) != 2)
960969 else false)
961970 then throw("Product idx should be 2 digits, zero padded")
962971 else {
963- let fT = parseIntValue(fs[0])
964- let fU = parseIntValue(fs[1])
965- if (!(containsElement(aW, fT)))
966- then throw((("Product '" + aT[fT]) + "' cannot be used for land defense"))
967- else if ((0 > fU))
972+ let fX = parseIntValue(fw[0])
973+ let fY = parseIntValue(fw[1])
974+ if (!(containsElement(aX, fX)))
975+ then throw((("Product '" + aU[fX]) + "' cannot be used for land defense"))
976+ else if ((0 > fY))
968977 then throw("Count can't be negative")
969- else if ((fU > u))
970- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT]))
971- else if ((fU == 0))
972- then $Tuple3(fC, fR, fS)
978+ else if ((fY > u))
979+ then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX]))
980+ else if ((fY == 0))
981+ then $Tuple3(fG, fV, fW)
973982 else {
974- let fV = take(fC, (8 * fT))
975- let fx = toInt(take(drop(fC, (8 * fT)), 8))
976- let fy = drop(fC, (8 * (fT + 1)))
977- let ct = split(aX[fT], "_")
978- if (if (!(fQ))
979- then (fU > fx)
983+ let fZ = take(fG, (8 * fX))
984+ let fB = toInt(take(drop(fG, (8 * fX)), 8))
985+ let fC = drop(fG, (8 * (fX + 1)))
986+ let cu = split(aY[fX], "_")
987+ if (if (!(fU))
988+ then (fY > fB)
980989 else false)
981- then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU)))
990+ then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY)))
982991 else {
983- let fz = if (if (!(fQ))
984- then fJ(fK, split(ct[ba], ","))
992+ let fD = if (if (!(fU))
993+ then fN(fO, split(cu[bb], ","))
985994 else false)
986- then (fx - fU)
987- else (fx + fU)
988- let fW = (eK(fz, bc) - eK(fx, bc))
989- $Tuple3(((fV + toBytes(fz)) + fy), (fR + fW), (fS - fW))
995+ then (fB - fY)
996+ else (fB + fY)
997+ let ga = (eO(fD, bd) - eO(fB, bd))
998+ $Tuple3(((fZ + toBytes(fD)) + fC), (fV + ga), (fW - ga))
990999 }
9911000 }
9921001 }
9931002 }
9941003
9951004
996-func fX (fP,fC,fQ,fY,fZ,ga,fK) = {
997- let fs = split(fP, ":")
998- if ((size(fs) != 2))
1005+func gb (fT,fG,fU,gc,gd,ge,fO) = {
1006+ let fw = split(fT, ":")
1007+ if ((size(fw) != 2))
9991008 then throw("Incorrect format, should be index:amount")
1000- else if (if (!(fQ))
1001- then (size(fs[0]) != 2)
1009+ else if (if (!(fU))
1010+ then (size(fw[0]) != 2)
10021011 else false)
10031012 then throw("Product idx should be 2 digits, zero padded")
10041013 else {
1005- let fT = parseIntValue(fs[0])
1006- let fU = parseIntValue(fs[1])
1007- if (if ((0 > fT))
1014+ let fX = parseIntValue(fw[0])
1015+ let fY = parseIntValue(fw[1])
1016+ if (if ((0 > fX))
10081017 then true
1009- else (fT >= size(aX)))
1018+ else (fX >= size(aY)))
10101019 then throw("Unknown product idx")
1011- else if ((0 > fU))
1020+ else if ((0 > fY))
10121021 then throw("Count can't be negative")
1013- else if ((fU > u))
1014- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT]))
1015- else if ((fU == 0))
1016- then $Tuple2(fC, false)
1022+ else if ((fY > u))
1023+ then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX]))
1024+ else if ((fY == 0))
1025+ then $Tuple2(fG, false)
10171026 else {
1018- let fV = take(fC, (8 * fT))
1019- let fx = toInt(take(drop(fC, (8 * fT)), 8))
1020- let fy = drop(fC, (8 * (fT + 1)))
1021- let ct = split(aX[fT], "_")
1022- if (if (!(fQ))
1023- then (fU > fx)
1027+ let fZ = take(fG, (8 * fX))
1028+ let fB = toInt(take(drop(fG, (8 * fX)), 8))
1029+ let fC = drop(fG, (8 * (fX + 1)))
1030+ let cu = split(aY[fX], "_")
1031+ if (if (!(fU))
1032+ then (fY > fB)
10241033 else false)
1025- then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU)))
1034+ then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY)))
10261035 else {
1027- let gb = if (if (!(fQ))
1028- then fJ(fK, split(ct[ba], ","))
1036+ let gf = if (if (!(fU))
1037+ then fN(fO, split(cu[bb], ","))
10291038 else false)
10301039 then {
1031- let gc = ct[bb]
1032- if ((gc == ""))
1040+ let gg = cu[bc]
1041+ if ((gg == ""))
10331042 then throw("Item cannot be equipped")
10341043 else {
1035- let gd = parseIntValue(gc)
1036- let ge = (gd / 100)
1037- if ((fY != ge))
1044+ let gh = parseIntValue(gg)
1045+ let gi = (gh / 100)
1046+ if ((gc != gi))
10381047 then throw("Segment incompatible")
10391048 else {
1040- let gf = ((gd % 100) / 10)
1041- if ((fZ != gf))
1049+ let gj = ((gh % 100) / 10)
1050+ if ((gd != gj))
10421051 then throw("Slot incompatible")
10431052 else {
1044- let gg = (gd % 10)
1045- if (if ((ga != 0))
1046- then (gg > 1)
1053+ let gk = (gh % 10)
1054+ if (if ((ge != 0))
1055+ then (gk > 1)
10471056 else false)
10481057 then throw("Big items should occupy slot 0")
1049- else (gg > 1)
1058+ else (gk > 1)
10501059 }
10511060 }
10521061 }
10531062 }
10541063 else false
1055- $Tuple2(((fV + toBytes((fx + (if (fQ)
1056- then fU
1057- else -(fU))))) + fy), gb)
1064+ $Tuple2(((fZ + toBytes((fB + (if (fU)
1065+ then fY
1066+ else -(fY))))) + fC), gf)
10581067 }
10591068 }
10601069 }
10611070 }
10621071
10631072
1064-func gh (gi,gj,fQ,fY,fZ,gk) = if ((gi != ""))
1073+func gl (gm,gn,fU,gc,gd,go) = if ((gm != ""))
10651074 then {
1066- let gl = split(gi, ",")
1067- if ((size(gl) > t))
1075+ let gp = split(gm, ",")
1076+ if ((size(gp) > t))
10681077 then throw("Wrong slots format")
10691078 else {
1070- let gm = gl[0]
1071- let gn = if ((size(gl) > 1))
1072- then gl[1]
1079+ let gq = gp[0]
1080+ let gr = if ((size(gp) > 1))
1081+ then gp[1]
10731082 else ""
1074- if (if ((gm == ""))
1075- then (gn == "")
1083+ if (if ((gq == ""))
1084+ then (gr == "")
10761085 else false)
1077- then gj
1086+ then gn
10781087 else {
1079- let go = if ((gm != ""))
1080- then fX(gm, gj, fQ, fY, fZ, 0, gk)
1081- else $Tuple2(gj, false)
1082- if ((gn != ""))
1083- then if (go._2)
1088+ let gs = if ((gq != ""))
1089+ then gb(gq, gn, fU, gc, gd, 0, go)
1090+ else $Tuple2(gn, false)
1091+ if ((gr != ""))
1092+ then if (gs._2)
10841093 then throw("Big item already occupies slot")
1085- else fX(gn, go._1, fQ, fY, fZ, 1, gk)._1
1086- else go._1
1094+ else gb(gr, gs._1, fU, gc, gd, 1, go)._1
1095+ else gs._1
10871096 }
10881097 }
10891098 }
1090- else gj
1091-
1092-
1093-func gp (gq,gr,fQ,gk) = {
1094- func fY (eU,gs) = {
1095- let fE = eU._1
1096- let fZ = split(gs, ";")
1097- if ((size(fZ) != s))
1099+ else gn
1100+
1101+
1102+func gt (gu,gv,fU,go) = {
1103+ func gc (eY,gw) = {
1104+ let fI = eY._1
1105+ let gd = split(gw, ";")
1106+ if ((size(gd) != s))
10981107 then throw("Wrong segment format")
10991108 else {
1100- let gt = fZ[0]
1101- let gu = fZ[1]
1102- if (if ((gt == ""))
1103- then (gu == "")
1109+ let gx = gd[0]
1110+ let gy = gd[1]
1111+ if (if ((gx == ""))
1112+ then (gy == "")
11041113 else false)
1105- then $Tuple2((fE + 1), eU._2)
1114+ then $Tuple2((fI + 1), eY._2)
11061115 else {
1107- let gv = gh(gt, eU._2, fQ, fE, 0, gk)
1108- $Tuple2((fE + 1), gh(gu, gv, fQ, fE, 1, gk))
1116+ let gz = gl(gx, eY._2, fU, fI, 0, go)
1117+ $Tuple2((fI + 1), gl(gy, gz, fU, fI, 1, go))
11091118 }
11101119 }
11111120 }
11121121
1113-( let eW = gq
1114- let eX = size(eW)
1115- let eY = $Tuple2(0, gr)
1116- func eZ (fa,fb) = if ((fb >= eX))
1117- then fa
1118- else fY(fa, eW[fb])
1119-
1120- func fc (fa,fb) = if ((fb >= eX))
1121- then fa
1122+( let fa = gu
1123+ let fb = size(fa)
1124+ let fc = $Tuple2(0, gv)
1125+ func fd (fe,ff) = if ((ff >= fb))
1126+ then fe
1127+ else gc(fe, fa[ff])
1128+
1129+ func fg (fe,ff) = if ((ff >= fb))
1130+ then fe
11221131 else throw("List size exceeds 6")
11231132
1124- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6))._2
1125- }
1126-
1127-
1128-func gw (gq,gr,fR,fS,fQ,fK) = if ((3 > size(gq)))
1133+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6))._2
1134+ }
1135+
1136+
1137+func gA (gu,gv,fV,fW,fU,fO) = if ((3 > size(gu)))
11291138 then throw("At least duck, mines and traps parts are required")
11301139 else {
1131- func fY (eU,gs) = {
1132- let fE = eU._1
1133- if ((fE == 0))
1134- then $Tuple4((fE + 1), eU._2, eU._3, eU._4)
1140+ func gc (eY,gw) = {
1141+ let fI = eY._1
1142+ if ((fI == 0))
1143+ then $Tuple4((fI + 1), eY._2, eY._3, eY._4)
11351144 else {
1136- let gx = fO(gs, eU._2, fQ, fK, eU._3, eU._4)
1137- $Tuple4((fE + 1), gx._1, gx._2, gx._3)
1145+ let gB = fS(gw, eY._2, fU, fO, eY._3, eY._4)
1146+ $Tuple4((fI + 1), gB._1, gB._2, gB._3)
11381147 }
11391148 }
11401149
1141- let gy = {
1142- let eW = gq
1143- let eX = size(eW)
1144- let eY = $Tuple4(0, gr, fR, fS)
1145- func eZ (fa,fb) = if ((fb >= eX))
1146- then fa
1147- else fY(fa, eW[fb])
1148-
1149- func fc (fa,fb) = if ((fb >= eX))
1150- then fa
1150+ let gC = {
1151+ let fa = gu
1152+ let fb = size(fa)
1153+ let fc = $Tuple4(0, gv, fV, fW)
1154+ func fd (fe,ff) = if ((ff >= fb))
1155+ then fe
1156+ else gc(fe, fa[ff])
1157+
1158+ func fg (fe,ff) = if ((ff >= fb))
1159+ then fe
11511160 else throw("List size exceeds 10")
11521161
1153- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1154- }
1155- $Tuple3(gy._2, gy._3, gy._4)
1162+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1163+ }
1164+ $Tuple3(gC._2, gC._3, gC._4)
11561165 }
11571166
11581167
1159-func gz (B) = {
1160- let gA = G(B)
1161- let gB = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1162- let gC = gp(gB, ed, true, nil)
1163- let gD = split(gB[q], ";")[1]
1164- let ar = if ((gD == ""))
1168+func gD (B) = {
1169+ let gE = G(B)
1170+ let gF = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1171+ let gG = gt(gF, ef, true, nil)
1172+ let gH = split(gF[q], ";")[1]
1173+ let ar = if ((gH == ""))
11651174 then 0
11661175 else {
1167- let gE = split(gD, ",")[0]
1168- if ((gE == ""))
1176+ let gI = split(gH, ",")[0]
1177+ if ((gI == ""))
11691178 then 0
11701179 else {
1171- let fP = split(gE, ":")
1172- let dg = fP[0]
1173- let gF = fP[1]
1174- if (if (if (if (if ((dg == "06"))
1180+ let fT = split(gI, ":")
1181+ let di = fT[0]
1182+ let gJ = fT[1]
1183+ if (if (if (if (if ((di == "06"))
11751184 then true
1176- else (dg == "07"))
1185+ else (di == "07"))
11771186 then true
1178- else (dg == "08"))
1179- then (gF != "")
1187+ else (di == "08"))
1188+ then (gJ != "")
11801189 else false)
1181- then (parseIntValue(gF) > 0)
1190+ then (parseIntValue(gJ) > 0)
11821191 else false)
1183- then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ])
1192+ then parseIntValue(split(aY[parseIntValue(di)], "_")[ba])
11841193 else 0
11851194 }
11861195 }
1187- let gk = ap(this, B, ar, true)
1188- let gG = gp(gB, gC, false, gk)
1189- (gG == gG)
1190- }
1191-
1192-
1193-func gH (gI,gJ,gK,gL) = if ((size(gI) != aI))
1196+ let go = ap(this, B, ar, true)
1197+ let gK = gt(gF, gG, false, go)
1198+ (gK == gK)
1199+ }
1200+
1201+
1202+func gL (gM,gN,gO,gP) = if ((size(gM) != aJ))
11941203 then throw("Wrong proportions data")
11951204 else {
1196- func gM (eU,gN) = {
1197- let fm = (parseIntValue(gI[gN]) + ((gL * gJ[gN]) * gK))
1198- if ((0 > fm))
1199- then throw(((((((("Panic! Pieces of type=" + toString(gN)) + ", sign=") + toString(gL)) + ", terrainCounts[i]=") + toString(gJ[gN])) + ", landSizeIndex=") + toString(gK)))
1200- else (eU :+ toString(fm))
1201- }
1202-
1203- let eW = cQ
1204- let eX = size(eW)
1205- let eY = nil
1206- func eZ (fa,fb) = if ((fb >= eX))
1207- then fa
1208- else gM(fa, eW[fb])
1209-
1210- func fc (fa,fb) = if ((fb >= eX))
1211- then fa
1205+ func gQ (eY,gR) = {
1206+ let fq = (parseIntValue(gM[gR]) + ((gP * gN[gR]) * gO))
1207+ if ((0 > fq))
1208+ then throw(((((((("Panic! Pieces of type=" + toString(gR)) + ", sign=") + toString(gP)) + ", terrainCounts[i]=") + toString(gN[gR])) + ", landSizeIndex=") + toString(gO)))
1209+ else (eY :+ toString(fq))
1210+ }
1211+
1212+ let fa = cS
1213+ let fb = size(fa)
1214+ let fc = nil
1215+ func fd (fe,ff) = if ((ff >= fb))
1216+ then fe
1217+ else gQ(fe, fa[ff])
1218+
1219+ func fg (fe,ff) = if ((ff >= fb))
1220+ then fe
12121221 else throw("List size exceeds 6")
12131222
1214- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1223+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
12151224 }
12161225
12171226
1218-func gO (gJ,gK,gL) = {
1219- let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
1220- makeString(gH(gI, gJ, gK, gL), "_")
1221- }
1222-
1223-
1224-func gP (gQ) = [(size(split(gQ, "A")) - 1), (size(split(gQ, "B")) - 1), (size(split(gQ, "C")) - 1), (size(split(gQ, "D")) - 1), (size(split(gQ, "E")) - 1), (size(split(gQ, "F")) - 1)]
1225-
1226-
1227-func gR (gS,gJ,gT,gK,gU) = {
1228- func gV (eU,gN) = {
1229- let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK)
1230- (eU :+ toString((parseIntValue(gS[gN]) + gW)))
1227+func gS (gN,gO,gP) = {
1228+ let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_")
1229+ makeString(gL(gM, gN, gO, gP), "_")
1230+ }
1231+
1232+
1233+func gT (gU) = [(size(split(gU, "A")) - 1), (size(split(gU, "B")) - 1), (size(split(gU, "C")) - 1), (size(split(gU, "D")) - 1), (size(split(gU, "E")) - 1), (size(split(gU, "F")) - 1)]
1234+
1235+
1236+func gV (gW,gN,gX,gO,gY) = {
1237+ func gZ (eY,gR) = {
1238+ let ha = ((fraction(gX, gY, a) * gN[gR]) * gO)
1239+ (eY :+ toString((parseIntValue(gW[gR]) + ha)))
12311240 }
12321241
1233- let ff = {
1234- let eW = cQ
1235- let eX = size(eW)
1236- let eY = nil
1237- func eZ (fa,fb) = if ((fb >= eX))
1238- then fa
1239- else gV(fa, eW[fb])
1240-
1241- func fc (fa,fb) = if ((fb >= eX))
1242- then fa
1242+ let fj = {
1243+ let fa = cS
1244+ let fb = size(fa)
1245+ let fc = nil
1246+ func fd (fe,ff) = if ((ff >= fb))
1247+ then fe
1248+ else gZ(fe, fa[ff])
1249+
1250+ func fg (fe,ff) = if ((ff >= fb))
1251+ then fe
12431252 else throw("List size exceeds 6")
12441253
1245- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1254+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
12461255 }
1247- makeString(ff, "_")
1248- }
1249-
1250-
1251-func gX (gJ,gT,gK,gU) = {
1252- func gV (eU,gN) = {
1253- let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK)
1254- $Tuple2((eU._1 :+ gW), (eU._2 + gW))
1256+ makeString(fj, "_")
1257+ }
1258+
1259+
1260+func hb (gN,gX,gO,gY) = {
1261+ func gZ (eY,gR) = {
1262+ let ha = ((fraction(gX, gY, a) * gN[gR]) * gO)
1263+ $Tuple2((eY._1 :+ ha), (eY._2 + ha))
12551264 }
12561265
1257- let eW = cQ
1258- let eX = size(eW)
1259- let eY = $Tuple2(nil, 0)
1260- func eZ (fa,fb) = if ((fb >= eX))
1261- then fa
1262- else gV(fa, eW[fb])
1263-
1264- func fc (fa,fb) = if ((fb >= eX))
1265- then fa
1266+ let fa = cS
1267+ let fb = size(fa)
1268+ let fc = $Tuple2(nil, 0)
1269+ func fd (fe,ff) = if ((ff >= fb))
1270+ then fe
1271+ else gZ(fe, fa[ff])
1272+
1273+ func fg (fe,ff) = if ((ff >= fb))
1274+ then fe
12661275 else throw("List size exceeds 6")
12671276
1268- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1269- }
1270-
1271-
1272-func gY (gZ,ha,hb,hc) = {
1273- let hd = hb._1
1274- let he = hb._2
1275- if ((he == 0))
1276- then $Tuple2(makeString(gZ, "_"), makeString(ha, "_"))
1277- else if ((hc >= he))
1277+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
1278+ }
1279+
1280+
1281+func hc (hd,he,hf,hg) = {
1282+ let hh = hf._1
1283+ let hi = hf._2
1284+ if ((hi == 0))
1285+ then $Tuple2(makeString(hd, "_"), makeString(he, "_"))
1286+ else if ((hg >= hi))
12781287 then {
1279- func hf (eU,gN) = (eU :+ toString((parseIntValue(gZ[gN]) + hd[gN])))
1280-
1281- let ff = {
1282- let eW = cQ
1283- let eX = size(eW)
1284- let eY = nil
1285- func eZ (fa,fb) = if ((fb >= eX))
1286- then fa
1287- else hf(fa, eW[fb])
1288-
1289- func fc (fa,fb) = if ((fb >= eX))
1290- then fa
1288+ func hj (eY,gR) = (eY :+ toString((parseIntValue(hd[gR]) + hh[gR])))
1289+
1290+ let fj = {
1291+ let fa = cS
1292+ let fb = size(fa)
1293+ let fc = nil
1294+ func fd (fe,ff) = if ((ff >= fb))
1295+ then fe
1296+ else hj(fe, fa[ff])
1297+
1298+ func fg (fe,ff) = if ((ff >= fb))
1299+ then fe
12911300 else throw("List size exceeds 6")
12921301
1293- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1302+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
12941303 }
1295- $Tuple2(makeString(ff, "_"), makeString(ha, "_"))
1304+ $Tuple2(makeString(fj, "_"), makeString(he, "_"))
12961305 }
12971306 else {
1298- func hg (eU,gN) = {
1299- let hh = fraction(hd[gN], hc, he)
1300- $Tuple2((eU._1 :+ toString((parseIntValue(gZ[gN]) + hh))), (eU._2 :+ toString(((parseIntValue(ha[gN]) + hd[gN]) - hh))))
1307+ func hk (eY,gR) = {
1308+ let hl = fraction(hh[gR], hg, hi)
1309+ $Tuple2((eY._1 :+ toString((parseIntValue(hd[gR]) + hl))), (eY._2 :+ toString(((parseIntValue(he[gR]) + hh[gR]) - hl))))
13011310 }
13021311
1303- let ff = {
1304- let eW = cQ
1305- let eX = size(eW)
1306- let eY = $Tuple2(nil, nil)
1307- func eZ (fa,fb) = if ((fb >= eX))
1308- then fa
1309- else hg(fa, eW[fb])
1310-
1311- func fc (fa,fb) = if ((fb >= eX))
1312- then fa
1312+ let fj = {
1313+ let fa = cS
1314+ let fb = size(fa)
1315+ let fc = $Tuple2(nil, nil)
1316+ func fd (fe,ff) = if ((ff >= fb))
1317+ then fe
1318+ else hk(fe, fa[ff])
1319+
1320+ func fg (fe,ff) = if ((ff >= fb))
1321+ then fe
13131322 else throw("List size exceeds 6")
13141323
1315- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1324+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
13161325 }
1317- $Tuple2(makeString(ff._1, "_"), makeString(ff._2, "_"))
1326+ $Tuple2(makeString(fj._1, "_"), makeString(fj._2, "_"))
13181327 }
13191328 }
13201329
13211330
1322-func hi (hj) = if ((hj >= toBigInt(0)))
1323- then hj
1324- else -(hj)
1325-
1326-
1327-let hk = [[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]]
1328-
1329-func hl (dG,hm) = {
1330- let hn = toInt((dG % em))
1331- let ho = if ((hm[0] > hn))
1331+func hm (hn) = if ((hn >= toBigInt(0)))
1332+ then hn
1333+ else -(hn)
1334+
1335+
1336+let ho = [[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]]
1337+
1338+func hp (dI,hq) = {
1339+ let hr = toInt((dI % ep))
1340+ let hs = if ((hq[0] > hr))
13321341 then "A"
1333- else if ((hm[1] > hn))
1342+ else if ((hq[1] > hr))
13341343 then "B"
1335- else if ((hm[2] > hn))
1344+ else if ((hq[2] > hr))
13361345 then "C"
1337- else if ((hm[3] > hn))
1346+ else if ((hq[3] > hr))
13381347 then "D"
1339- else if ((hm[4] > hn))
1348+ else if ((hq[4] > hr))
13401349 then "E"
13411350 else "F"
1342- ho
1343- }
1344-
1345-
1346-func hp (hq,hr) = {
1347- let hs = hk[hr]
1348- func ht (eU,eV) = $Tuple2((((((eU._1 + hl(eU._2, hs)) + hl((eU._2 / em), hs)) + hl((eU._2 / en), hs)) + hl((eU._2 / eo), hs)) + hl((eU._2 / ep), hs)), (eU._2 / eq))
1349-
1350- let gy = {
1351- let eW = [1, 2, 3, 4, 5]
1352- let eX = size(eW)
1353- let eY = $Tuple2("", (hq / el))
1354- func eZ (fa,fb) = if ((fb >= eX))
1355- then fa
1356- else ht(fa, eW[fb])
1357-
1358- func fc (fa,fb) = if ((fb >= eX))
1359- then fa
1351+ hs
1352+ }
1353+
1354+
1355+func ht (hu,hv) = {
1356+ let hw = ho[hv]
1357+ func hx (eY,eZ) = $Tuple2((((((eY._1 + hp(eY._2, hw)) + hp((eY._2 / ep), hw)) + hp((eY._2 / eq), hw)) + hp((eY._2 / er), hw)) + hp((eY._2 / es), hw)), (eY._2 / et))
1358+
1359+ let gC = {
1360+ let fa = [1, 2, 3, 4, 5]
1361+ let fb = size(fa)
1362+ let fc = $Tuple2("", (hu / eo))
1363+ func fd (fe,ff) = if ((ff >= fb))
1364+ then fe
1365+ else hx(fe, fa[ff])
1366+
1367+ func fg (fe,ff) = if ((ff >= fb))
1368+ then fe
13601369 else throw("List size exceeds 5")
13611370
1362- fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
1371+ fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5)
13631372 }
1364- gy._1
1365- }
1366-
1367-
1368-let hu = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1369-
1370-let hv = ["A", "B", "C", "D", "E", "F"]
1371-
1372-func hw (hx,gK) = {
1373- func hy (eU,dE) = {
1374- let fE = eU._2
1375- let hz = parseIntValue(dE)
1376- let hj = if ((hz == 0))
1373+ gC._1
1374+ }
1375+
1376+
1377+let hy = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1378+
1379+let hz = ["A", "B", "C", "D", "E", "F"]
1380+
1381+func hA (hB,gO) = {
1382+ func hC (eY,dG) = {
1383+ let fI = eY._2
1384+ let hD = parseIntValue(dG)
1385+ let hn = if ((hD == 0))
13771386 then 0
1378- else if ((hz >= (4 * gK)))
1379- then (hz / gK)
1380- else if ((hz > (3 * gK)))
1387+ else if ((hD >= (4 * gO)))
1388+ then (hD / gO)
1389+ else if ((hD > (3 * gO)))
13811390 then 3
1382- else (((hz - 1) / gK) + 1)
1383- $Tuple3((eU._1 :+ hj), (eU._2 + 1), (eU._3 + hj))
1391+ else (((hD - 1) / gO) + 1)
1392+ $Tuple3((eY._1 :+ hn), (eY._2 + 1), (eY._3 + hn))
13841393 }
13851394
1386- let gy = {
1387- let eW = hx
1388- let eX = size(eW)
1389- let eY = $Tuple3(nil, 0, 0)
1390- func eZ (fa,fb) = if ((fb >= eX))
1391- then fa
1392- else hy(fa, eW[fb])
1393-
1394- func fc (fa,fb) = if ((fb >= eX))
1395- then fa
1395+ let gC = {
1396+ let fa = hB
1397+ let fb = size(fa)
1398+ let fc = $Tuple3(nil, 0, 0)
1399+ func fd (fe,ff) = if ((ff >= fb))
1400+ then fe
1401+ else hC(fe, fa[ff])
1402+
1403+ func fg (fe,ff) = if ((ff >= fb))
1404+ then fe
13961405 else throw("List size exceeds 6")
13971406
1398- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1407+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
13991408 }
1400- let hA = gy._1
1401- let hB = value(indexOf(hA, max(hA)))
1402- let hC = (gy._3 - 25)
1403- func hD (eU,dg) = {
1404- let dQ = if ((dg == hB))
1405- then (hA[dg] - hC)
1406- else hA[dg]
1407- let dU = if ((dQ == 0))
1409+ let hE = gC._1
1410+ let hF = value(indexOf(hE, max(hE)))
1411+ let hG = (gC._3 - 25)
1412+ func hH (eY,di) = {
1413+ let dS = if ((di == hF))
1414+ then (hE[di] - hG)
1415+ else hE[di]
1416+ let dW = if ((dS == 0))
14081417 then nil
1409- else split(drop(toString(pow(10, 0, dQ, 0, 0, DOWN)), 1), "")
1410- let gd = hv[dg]
1411- func hE (hF,hG) = (hF :+ gd)
1412-
1413- let hH = {
1414- let eW = dU
1415- let eX = size(eW)
1416- let eY = nil
1417- func hI (fa,fb) = if ((fb >= eX))
1418- then fa
1419- else hE(fa, eW[fb])
1420-
1421- func hJ (fa,fb) = if ((fb >= eX))
1422- then fa
1418+ else split(drop(toString(pow(10, 0, dS, 0, 0, DOWN)), 1), "")
1419+ let gh = hz[di]
1420+ func hI (hJ,hK) = (hJ :+ gh)
1421+
1422+ let hL = {
1423+ let fa = dW
1424+ let fb = size(fa)
1425+ let fc = nil
1426+ func hM (fe,ff) = if ((ff >= fb))
1427+ then fe
1428+ else hI(fe, fa[ff])
1429+
1430+ func hN (fe,ff) = if ((ff >= fb))
1431+ then fe
14231432 else throw("List size exceeds 25")
14241433
1425- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eY, 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)
1426- }
1427- (eU ++ hH)
1434+ hN(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(fc, 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)
1435+ }
1436+ (eY ++ hL)
14281437 }
14291438
1430- let ff = {
1431- let eW = cQ
1432- let eX = size(eW)
1433- let eY = nil
1434- func hI (fa,fb) = if ((fb >= eX))
1435- then fa
1436- else hD(fa, eW[fb])
1437-
1438- func hJ (fa,fb) = if ((fb >= eX))
1439- then fa
1439+ let fj = {
1440+ let fa = cS
1441+ let fb = size(fa)
1442+ let fc = nil
1443+ func hM (fe,ff) = if ((ff >= fb))
1444+ then fe
1445+ else hH(fe, fa[ff])
1446+
1447+ func hN (fe,ff) = if ((ff >= fb))
1448+ then fe
14401449 else throw("List size exceeds 6")
14411450
1442- hJ(hI(hI(hI(hI(hI(hI(eY, 0), 1), 2), 3), 4), 5), 6)
1451+ hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6)
14431452 }
1444- func hK (eU,fE) = (eU + ff[fE])
1445-
1446- let eW = hu
1447- let eX = size(eW)
1448- let eY = ""
1449- func hL (fa,fb) = if ((fb >= eX))
1450- then fa
1451- else hK(fa, eW[fb])
1452-
1453- func hM (fa,fb) = if ((fb >= eX))
1454- then fa
1453+ func hO (eY,fI) = (eY + fj[fI])
1454+
1455+ let fa = hy
1456+ let fb = size(fa)
1457+ let fc = ""
1458+ func hP (fe,ff) = if ((ff >= fb))
1459+ then fe
1460+ else hO(fe, fa[ff])
1461+
1462+ func hQ (fe,ff) = if ((ff >= fb))
1463+ then fe
14551464 else throw("List size exceeds 25")
14561465
1457- hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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)
1458- }
1459-
1460-
1461-func hN (hO) = {
1462- let gx = split(valueOrElse(getString(hO), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1463-[toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI))
1464- then gx[bn]
1465- else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI))
1466- then gx[bo]
1467- else "0_0_0_0_0_0", gx[bp]]
1468- }
1469-
1470-
1471-func hP (hQ) = {
1472- let fs = split(hQ, "_")
1473- ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0]))
1466+ hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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)
14741467 }
14751468
14761469
14771470 func hR (hS) = {
1478- let hT = hS[bg]
1479- func hU (eU,hV) = (eU + parseIntValue(hV))
1480-
1481- func hW (eU,hV) = {
1482- let dg = eU._1
1483- let eN = (((parseIntValue(hV) + bc) - 1) / bc)
1484- $Tuple2((dg + 1), (eU._2 + (eN * cK)))
1471+ let gB = split(valueOrElse(getString(hS), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1472+[toString(valueOrElse(parseInt(gB[bn]), 0)), if ((size(split(gB[bo], "_")) == aJ))
1473+ then gB[bo]
1474+ else "0_0_0_0_0_0", if ((size(split(gB[bp], "_")) == aJ))
1475+ then gB[bp]
1476+ else "0_0_0_0_0_0", gB[bq]]
1477+ }
1478+
1479+
1480+func hT (hU) = {
1481+ let fw = split(hU, "_")
1482+ ((aM * (parseIntValue(fw[1]) + 1)) * parseIntValue(fw[0]))
1483+ }
1484+
1485+
1486+func hV (hW) = {
1487+ let hX = hW[bh]
1488+ func hY (eY,hZ) = (eY + parseIntValue(hZ))
1489+
1490+ func ia (eY,hZ) = {
1491+ let di = eY._1
1492+ let eR = (((parseIntValue(hZ) + bd) - 1) / bd)
1493+ $Tuple2((di + 1), (eY._2 + (eR * cM)))
14851494 }
14861495
1487- let hX = {
1488- let eW = split(hS[be], "_")
1489- let eX = size(eW)
1490- let eY = 0
1491- func eZ (fa,fb) = if ((fb >= eX))
1492- then fa
1493- else hU(fa, eW[fb])
1494-
1495- func fc (fa,fb) = if ((fb >= eX))
1496- then fa
1496+ let ib = {
1497+ let fa = split(hW[bf], "_")
1498+ let fb = size(fa)
1499+ let fc = 0
1500+ func fd (fe,ff) = if ((ff >= fb))
1501+ then fe
1502+ else hY(fe, fa[ff])
1503+
1504+ func fg (fe,ff) = if ((ff >= fb))
1505+ then fe
14971506 else throw("List size exceeds 6")
14981507
1499- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1508+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
15001509 }
1501- let hY = {
1502- let eW = split(hS[bf], "_")
1503- let eX = size(eW)
1504- let eY = 0
1505- func hI (fa,fb) = if ((fb >= eX))
1506- then fa
1507- else hU(fa, eW[fb])
1508-
1509- func hJ (fa,fb) = if ((fb >= eX))
1510- then fa
1510+ let ic = {
1511+ let fa = split(hW[bg], "_")
1512+ let fb = size(fa)
1513+ let fc = 0
1514+ func hM (fe,ff) = if ((ff >= fb))
1515+ then fe
1516+ else hY(fe, fa[ff])
1517+
1518+ func hN (fe,ff) = if ((ff >= fb))
1519+ then fe
15111520 else throw("List size exceeds 6")
15121521
1513- hJ(hI(hI(hI(hI(hI(hI(eY, 0), 1), 2), 3), 4), 5), 6)
1522+ hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6)
15141523 }
1515- let hZ = if ((hT == ""))
1524+ let id = if ((hX == ""))
15161525 then 0
1517- else ( let eW = split_4C(hT, "_")
1518- let eX = size(eW)
1519- let eY = $Tuple2(0, 0)
1520- func hL (fa,fb) = if ((fb >= eX))
1521- then fa
1522- else hW(fa, eW[fb])
1523-
1524- func hM (fa,fb) = if ((fb >= eX))
1525- then fa
1526+ else ( let fa = split_4C(hX, "_")
1527+ let fb = size(fa)
1528+ let fc = $Tuple2(0, 0)
1529+ func hP (fe,ff) = if ((ff >= fb))
1530+ then fe
1531+ else ia(fe, fa[ff])
1532+
1533+ func hQ (fe,ff) = if ((ff >= fb))
1534+ then fe
15261535 else throw("List size exceeds 50")
15271536
1528- hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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
1529- ((hX + hY) + hZ)
1530- }
1531-
1532-
1533-func ia (ib,ic,id) = {
1534- let hQ = ((toString(ic) + "_") + toString(id))
1535- let ie = hP(hQ)
1536- let if = valueOrElse(getString(ib), (hQ + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1537- let ig = split_4C(if, ":")
1538- let ih = hR(ig)
1539- let ii = if ((5 > size(ig)))
1540- then makeString(["0", toString(ih), toString((ie - ih)), toString(ie)], "_")
1537+ hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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
1538+ ((ib + ic) + id)
1539+ }
1540+
1541+
1542+func ie (if,ig,ih) = {
1543+ let hU = ((toString(ig) + "_") + toString(ih))
1544+ let ii = hT(hU)
1545+ let ij = valueOrElse(getString(if), (hU + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1546+ let ik = split_4C(ij, ":")
1547+ let il = hV(ik)
1548+ let im = if ((5 > size(ik)))
1549+ then makeString(["0", toString(il), toString((ii - il)), toString(ii)], "_")
15411550 else {
1542- let ij = split(ig[bh], "_")
1543- let ik = parseIntValue(ij[bi])
1544- let il = if ((size(ij) > 1))
1545- then parseIntValue(ij[bj])
1546- else ih
1547- makeString([toString(ik), toString(il), toString(((ie - ik) - il)), toString(ie)], "_")
1548- }
1549-[ig[bd], if ((size(split(ig[be], "_")) == aI))
1550- then ig[be]
1551- else "0_0_0_0_0_0", if ((size(split(ig[bf], "_")) == aI))
1552- then ig[bf]
1553- else "0_0_0_0_0_0", ig[bg], ii]
1554- }
1555-
1556-
1557-func im (hS) = {
1558- let in = hR(hS)
1559- let io = parseIntValue(split(hS[bh], "_")[bi])
1560- ((hP(hS[bd]) - in) - io)
1561- }
1562-
1563-
1564-func ip (iq,hS,ir) = if ((size(iq) != 3))
1551+ let in = split(ik[bi], "_")
1552+ let io = parseIntValue(in[bj])
1553+ let ip = if ((size(in) > 1))
1554+ then parseIntValue(in[bk])
1555+ else il
1556+ makeString([toString(io), toString(ip), toString(((ii - io) - ip)), toString(ii)], "_")
1557+ }
1558+[ik[be], if ((size(split(ik[bf], "_")) == aJ))
1559+ then ik[bf]
1560+ else "0_0_0_0_0_0", if ((size(split(ik[bg], "_")) == aJ))
1561+ then ik[bg]
1562+ else "0_0_0_0_0_0", ik[bh], im]
1563+ }
1564+
1565+
1566+func iq (hW) = {
1567+ let ir = hV(hW)
1568+ let is = parseIntValue(split(hW[bi], "_")[bj])
1569+ ((hT(hW[be]) - ir) - is)
1570+ }
1571+
1572+
1573+func it (iu,hW,iv) = if ((size(iu) != 3))
15651574 then throw("cargoListStr should contain exactly 2 ':' separators")
15661575 else {
1567- let is = split(iq[0], "_")
1568- let it = split(iq[1], "_")
1569- let iu = if ((iq[2] == ""))
1576+ let iw = split(iu[0], "_")
1577+ let ix = split(iu[1], "_")
1578+ let iy = if ((iu[2] == ""))
15701579 then nil
1571- else split_4C(iq[2], "_")
1572- if ((size(is) != aI))
1580+ else split_4C(iu[2], "_")
1581+ if ((size(iw) != aJ))
15731582 then throw("All 6 resources should be passed")
1574- else if ((size(it) != aI))
1583+ else if ((size(ix) != aJ))
15751584 then throw("All 6 materials should be passed")
15761585 else {
1577- let hc = im(hS)
1578- let iv = split(hS[be], "_")
1579- let iw = split(hS[bf], "_")
1580- let ix = if ((hS[bg] == ""))
1586+ let hg = iq(hW)
1587+ let iz = split(hW[bf], "_")
1588+ let iA = split(hW[bg], "_")
1589+ let iB = if ((hW[bh] == ""))
15811590 then nil
1582- else split_4C(hS[bg], "_")
1583- let ha = split(ir[bn], "_")
1584- let iy = split(ir[bo], "_")
1585- let iz = if ((ir[bp] == ""))
1591+ else split_4C(hW[bh], "_")
1592+ let he = split(iv[bo], "_")
1593+ let iC = split(iv[bp], "_")
1594+ let iD = if ((iv[bq] == ""))
15861595 then nil
1587- else split_4C(ir[bp], "_")
1588- func iA (eU,hV) = {
1589- let gN = eU._1
1590- let iB = parseIntValue(hV)
1591- let iC = parseIntValue(iv[gN])
1592- let iD = parseIntValue(ha[gN])
1593- if ((iB == 0))
1594- then $Tuple4((gN + 1), (eU._2 :+ iv[gN]), (eU._3 :+ ha[gN]), eU._4)
1595- else if ((iB > 0))
1596- then if ((iB > iD))
1597- then throw((((("Attempt to take " + hV) + " from backpack, but only ") + toString(iD)) + " available"))
1598- else $Tuple4((gN + 1), (eU._2 :+ toString((iC + iB))), (eU._3 :+ toString((iD - iB))), (eU._4 + iB))
1599- else if ((-(iB) > iC))
1600- then throw((((("Attempt to take " + toString(-(iB))) + " from warehouse, but only ") + toString(iC)) + " available"))
1601- else $Tuple4((gN + 1), (eU._2 :+ toString((iC + iB))), (eU._3 :+ toString((iD - iB))), (eU._4 + iB))
1596+ else split_4C(iv[bq], "_")
1597+ func iE (eY,hZ) = {
1598+ let gR = eY._1
1599+ let iF = parseIntValue(hZ)
1600+ let iG = parseIntValue(iz[gR])
1601+ let iH = parseIntValue(he[gR])
1602+ if ((iF == 0))
1603+ then $Tuple4((gR + 1), (eY._2 :+ iz[gR]), (eY._3 :+ he[gR]), eY._4)
1604+ else if ((iF > 0))
1605+ then if ((iF > iH))
1606+ then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iH)) + " available"))
1607+ else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF))
1608+ else if ((-(iF) > iG))
1609+ then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iG)) + " available"))
1610+ else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF))
16021611 }
16031612
1604- let ff = {
1605- let eW = is
1606- let eX = size(eW)
1607- let eY = $Tuple4(0, nil, nil, 0)
1608- func eZ (fa,fb) = if ((fb >= eX))
1609- then fa
1610- else iA(fa, eW[fb])
1611-
1612- func fc (fa,fb) = if ((fb >= eX))
1613- then fa
1613+ let fj = {
1614+ let fa = iw
1615+ let fb = size(fa)
1616+ let fc = $Tuple4(0, nil, nil, 0)
1617+ func fd (fe,ff) = if ((ff >= fb))
1618+ then fe
1619+ else iE(fe, fa[ff])
1620+
1621+ func fg (fe,ff) = if ((ff >= fb))
1622+ then fe
16141623 else throw("List size exceeds 6")
16151624
1616- fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
1625+ fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6)
16171626 }
1618- func iE (eU,hV) = {
1619- let gN = eU._1
1620- let iB = parseIntValue(hV)
1621- let iF = parseIntValue(iw[gN])
1622- let iG = parseIntValue(iy[gN])
1623- if ((iB == 0))
1624- then $Tuple4((gN + 1), (eU._2 :+ iw[gN]), (eU._3 :+ iy[gN]), eU._4)
1625- else if ((iB > 0))
1626- then if ((iB > iG))
1627- then throw((((("Attempt to take " + hV) + " from backpack, but only ") + toString(iG)) + " available"))
1628- else $Tuple4((gN + 1), (eU._2 :+ toString((iF + iB))), (eU._3 :+ toString((iG - iB))), (eU._4 + iB))
1629- else if ((-(iB) > iF))
1630- then throw((((("Attempt to take " + toString(-(iB))) + " from warehouse, but only ") + toString(iF)) + " available"))
1631- else $Tuple4((gN + 1), (eU._2 :+ toString((iF + iB))), (eU._3 :+ toString((iG - iB))), (eU._4 + iB))
1627+ func iI (eY,hZ) = {
1628+ let gR = eY._1
1629+ let iF = parseIntValue(hZ)
1630+ let iJ = parseIntValue(iA[gR])
1631+ let iK = parseIntValue(iC[gR])
1632+ if ((iF == 0))
1633+ then $Tuple4((gR + 1), (eY._2 :+ iA[gR]), (eY._3 :+ iC[gR]), eY._4)
1634+ else if ((iF > 0))
1635+ then if ((iF > iK))
1636+ then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iK)) + " available"))
1637+ else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF))
1638+ else if ((-(iF) > iJ))
1639+ then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iJ)) + " available"))
1640+ else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF))
16321641 }
16331642
1634- let gt = {
1635- let eW = it
1636- let eX = size(eW)
1637- let eY = $Tuple4(0, nil, nil, ff._4)
1638- func hI (fa,fb) = if ((fb >= eX))
1639- then fa
1640- else iE(fa, eW[fb])
1641-
1642- func hJ (fa,fb) = if ((fb >= eX))
1643- then fa
1643+ let gx = {
1644+ let fa = ix
1645+ let fb = size(fa)
1646+ let fc = $Tuple4(0, nil, nil, fj._4)
1647+ func hM (fe,ff) = if ((ff >= fb))
1648+ then fe
1649+ else iI(fe, fa[ff])
1650+
1651+ func hN (fe,ff) = if ((ff >= fb))
1652+ then fe
16441653 else throw("List size exceeds 6")
16451654
1646- hJ(hI(hI(hI(hI(hI(hI(eY, 0), 1), 2), 3), 4), 5), 6)
1655+ hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6)
16471656 }
1648- func iH (eU,hV) = {
1649- let gN = eU._1
1650- let iB = parseIntValue(hV)
1651- let iI = if ((size(ix) > gN))
1652- then parseIntValue(ix[gN])
1657+ func iL (eY,hZ) = {
1658+ let gR = eY._1
1659+ let iF = parseIntValue(hZ)
1660+ let iM = if ((size(iB) > gR))
1661+ then parseIntValue(iB[gR])
16531662 else 0
1654- let iJ = if ((size(iz) > gN))
1655- then parseIntValue(iz[gN])
1663+ let iN = if ((size(iD) > gR))
1664+ then parseIntValue(iD[gR])
16561665 else 0
1657- if ((iB == 0))
1658- then $Tuple4((gN + 1), (eU._2 :+ toString(iI)), (eU._3 :+ toString(iJ)), eU._4)
1659- else if ((iB > 0))
1660- then if ((iB > iJ))
1661- then throw((((("Attempt to take " + hV) + " from backpack, but only ") + toString(iJ)) + " available"))
1666+ if ((iF == 0))
1667+ then $Tuple4((gR + 1), (eY._2 :+ toString(iM)), (eY._3 :+ toString(iN)), eY._4)
1668+ else if ((iF > 0))
1669+ then if ((iF > iN))
1670+ then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iN)) + " available"))
16621671 else {
1663- let fW = (eK((iI + iB), bc) - eK(iI, bc))
1664- $Tuple4((gN + 1), (eU._2 :+ toString((iI + iB))), (eU._3 :+ toString((iJ - iB))), (eU._4 + fW))
1672+ let ga = (eO((iM + iF), bd) - eO(iM, bd))
1673+ $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga))
16651674 }
1666- else if ((-(iB) > iI))
1667- then throw((((("Attempt to take " + toString(-(iB))) + " from warehouse, but only ") + toString(iI)) + " available"))
1675+ else if ((-(iF) > iM))
1676+ then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iM)) + " available"))
16681677 else {
1669- let fW = (eK((iI + iB), bc) - eK(iI, bc))
1670- $Tuple4((gN + 1), (eU._2 :+ toString((iI + iB))), (eU._3 :+ toString((iJ - iB))), (eU._4 + fW))
1678+ let ga = (eO((iM + iF), bd) - eO(iM, bd))
1679+ $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga))
16711680 }
16721681 }
16731682
1674- let gx = if ((size(iu) != 0))
1683+ let gB = if ((size(iy) != 0))
16751684 then {
1676- let eW = iu
1677- let eX = size(eW)
1678- let eY = $Tuple4(0, nil, nil, gt._4)
1679- func hL (fa,fb) = if ((fb >= eX))
1680- then fa
1681- else iH(fa, eW[fb])
1682-
1683- func hM (fa,fb) = if ((fb >= eX))
1684- then fa
1685+ let fa = iy
1686+ let fb = size(fa)
1687+ let fc = $Tuple4(0, nil, nil, gx._4)
1688+ func hP (fe,ff) = if ((ff >= fb))
1689+ then fe
1690+ else iL(fe, fa[ff])
1691+
1692+ func hQ (fe,ff) = if ((ff >= fb))
1693+ then fe
16851694 else throw("List size exceeds 50")
16861695
1687- hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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)
1696+ hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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)
16881697 }
1689- else $Tuple4(0, ix, iz, gt._4)
1690- let iK = gx._4
1691- if ((iK > hc))
1692- then throw((((("Attempt to put total " + toString(iK)) + " stuff, but only ") + toString(hc)) + " warehouse space left"))
1693- else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), iK)
1698+ else $Tuple4(0, iB, iD, gx._4)
1699+ let iO = gB._4
1700+ if ((iO > hg))
1701+ then throw((((("Attempt to put total " + toString(iO)) + " stuff, but only ") + toString(hg)) + " warehouse space left"))
1702+ else $Tuple7(makeString(fj._2, "_"), makeString(gx._2, "_"), makeString_2C(gB._2, "_"), makeString(fj._3, "_"), makeString(gx._3, "_"), makeString_2C(gB._3, "_"), iO)
16941703 }
16951704 }
16961705
16971706
1698-func iL (iM,iN) = {
1699- let bQ = toString(iM)
1700- let iO = hi(toBigInt(iN))
1701- let iP = valueOrElse(getInteger(es()), (er + 1))
1702- let ew = toString(iP)
1703- let hr = toInt((iO % el))
1704- let gQ = hp(iO, hr)
1705- let dz = aU[hr]
1706- let iQ = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false)
1707- let bu = calculateAssetId(iQ)
1708- let iR = toBase58String(bu)
1709- $Tuple2([IntegerEntry(es(), (iP + 1)), iQ, StringEntry(ev(ew), iR), StringEntry(bt(iR), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(iR), 0), IntegerEntry(ex(iR, bQ), 0), ScriptTransfer(iM, 1, bu)], $Tuple2(iR, dz))
1710- }
1711-
1712-
1713-func iS (bQ,iT,iU) = if (!(sigVerify_8Kb(iT, iU, ec)))
1707+func iP (iQ,iR) = {
1708+ let bR = toString(iQ)
1709+ let iS = hm(toBigInt(iR))
1710+ let iT = valueOrElse(getInteger(ev()), (eu + 1))
1711+ let ez = toString(iT)
1712+ let hv = toInt((iS % eo))
1713+ let gU = ht(iS, hv)
1714+ let dB = aV[hv]
1715+ let iU = Issue(eN(ez, "S"), makeString([ez, "S", gU, dB], "_"), 1, 0, false)
1716+ let bv = calculateAssetId(iU)
1717+ let iV = toBase58String(bv)
1718+ $Tuple2([IntegerEntry(ev(), (iT + 1)), iU, StringEntry(ey(ez), iV), StringEntry(bu(iV), bR), StringEntry(eB(ez), bR), IntegerEntry(bE(iV), 0), IntegerEntry(eA(iV, bR), 0), ScriptTransfer(iQ, 1, bv)], $Tuple2(iV, dB))
1719+ }
1720+
1721+
1722+func iW (bR,iX,iY) = if (!(sigVerify_8Kb(iX, iY, ee)))
17141723 then throw("signature does not match")
17151724 else {
1716- let fs = split_4C(toUtf8String(iT), ";")
1717- let iV = split_4C(fs[0], "|")
1718- let iW = split(iV[eF], "_")
1719- let iX = parseIntValue(iW[0])
1720- let iY = parseIntValue(iW[1])
1721- let iZ = split(fs[1], ":")
1722- let ja = iZ[0]
1723- let jb = parseIntValue(iV[eG])
1724- if (if ((jb > (lastBlock.timestamp + ee)))
1725+ let fw = split_4C(toUtf8String(iX), ";")
1726+ let iZ = split_4C(fw[0], "|")
1727+ let ja = split(iZ[eJ], "_")
1728+ let jb = parseIntValue(ja[0])
1729+ let jc = parseIntValue(ja[1])
1730+ let jd = split(fw[1], ":")
1731+ let je = jd[0]
1732+ let jf = parseIntValue(iZ[eK])
1733+ if (if ((jf > (lastBlock.timestamp + eg)))
17251734 then true
1726- else ((lastBlock.timestamp - ee) > jb))
1727- then throw(((("signature outdated: logTime=" + toString(jb)) + ", bcTime=") + toString(lastBlock.timestamp)))
1735+ else ((lastBlock.timestamp - eg) > jf))
1736+ then throw(((("signature outdated: logTime=" + toString(jf)) + ", bcTime=") + toString(lastBlock.timestamp)))
17281737 else {
1729- let jc = iZ[1]
1730- let jd = valueOrElse(getString(dO(bQ)), "")
1731- if ((jd != jc))
1732- then throw(((("Tx ids don't match! In state: " + jd) + ", in msg: ") + jc))
1738+ let jg = jd[1]
1739+ let jh = valueOrElse(getString(dQ(bR)), "")
1740+ if ((jh != jg))
1741+ then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg))
17331742 else {
1734- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1735- let je = A(B)
1736- let jf = aj(valueOrElse(getInteger(E(B)), 0))
1737- let jg = valueOrElse(getInteger(je), jf)
1738- if ((jg != iX))
1739- then throw(((("oldHealth=" + toString(jg)) + " from state does not match one from flight log=") + toString(iX)))
1740- else if ((0 >= iX))
1743+ let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked")
1744+ let ji = A(B)
1745+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
1746+ let jk = valueOrElse(getInteger(ji), jj)
1747+ if ((jk != jb))
1748+ then throw(((("oldHealth=" + toString(jk)) + " from state does not match one from flight log=") + toString(jb)))
1749+ else if ((0 >= jb))
17411750 then throw("You can't fly with zero health")
1742- else if (!(gz(B)))
1751+ else if (!(gD(B)))
17431752 then throw("Equipment incompatible")
17441753 else {
1745- let jh = if ((size(iV) > eH))
1746- then iV[eH]
1754+ let jl = if ((size(iZ) > eL))
1755+ then iZ[eL]
17471756 else ""
1748- let ji = if ((size(iV) > eI))
1749- then iV[eI]
1757+ let jm = if ((size(iZ) > eM))
1758+ then iZ[eM]
17501759 else ""
1751- let jj = if (if ((iY > 0))
1752- then (jh == "$")
1760+ let jn = if (if ((jc > 0))
1761+ then (jl == "$")
17531762 else false)
1754- then dF(invoke(dh, "sendUsdtPrize", [bQ], nil))
1763+ then dH(invoke(dj, "sendUsdtPrize", [bR], nil))
17551764 else 0
1756- $Tuple5(iY, B, jj, ja, ji)
1765+ $Tuple5(jc, B, jn, je, jm)
17571766 }
17581767 }
17591768 }
17601769 }
17611770
17621771
1763-func jk (Q,jl) = {
1764- let id = valueOrElse(getInteger(bD(Q)), 0)
1765- let jm = valueOrElse(getInteger(bx(aH, Q)), 0)
1766- let jn = (id / 6)
1767- let jo = (id / 7)
1768- ((aK + fraction(aK, ((id + jn) + (2 * jo)), 5)) + fraction(aK, jm, (jl * 5)))
1769- }
1770-
1771-
1772-func jp (c,jq,jr) = {
1773- let js = if ((jq == eC))
1774- then $Tuple2(jr, valueOrElse(getString(bM(c)), ""))
1772+func jo (Q,jp) = {
1773+ let ih = valueOrElse(getInteger(bE(Q)), 0)
1774+ let jq = valueOrElse(getInteger(by(aI, Q)), 0)
1775+ let jr = (ih / 6)
1776+ let js = (ih / 7)
1777+ ((aL + fraction(aL, ((ih + jr) + (2 * js)), 5)) + fraction(aL, jq, (jp * 5)))
1778+ }
1779+
1780+
1781+func jt (c,ju,jv) = {
1782+ let jw = if ((ju == eG))
1783+ then $Tuple2(jv, valueOrElse(getString(bN(c)), ""))
17751784 else {
1776- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1777- let jt = valueOrElse(getString(bO(B)), aM)
1778- let ck = split(value(jt), "_")
1779- if ((ck[br] != "L"))
1780- then throw((("Duck location type is " + ck[br]) + ", but should be L"))
1781- else $Tuple2(ck[bs], B)
1782- }
1783- let Q = js._1
1784- let ju = js._2
1785- let jv = value(assetInfo(fromBase58String(Q)))
1786- let jw = bw(Q)
1787- let jx = valueOrErrorMessage(getInteger(jw), (("Land " + jv.name) + " is not staked"))
1788- let jy = valueOrErrorMessage(getString(bt(Q)), (("NFT " + jv.name) + " is orphaned"))
1789- if ((jy != c))
1785+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
1786+ let jx = valueOrElse(getString(bP(B)), aN)
1787+ let cl = split(value(jx), "_")
1788+ if ((cl[bs] != "L"))
1789+ then throw((("Duck location type is " + cl[bs]) + ", but should be L"))
1790+ else $Tuple2(cl[bt], B)
1791+ }
1792+ let Q = jw._1
1793+ let jy = jw._2
1794+ let jz = value(assetInfo(fromBase58String(Q)))
1795+ let jA = bx(Q)
1796+ let jB = valueOrErrorMessage(getInteger(jA), (("Land " + jz.name) + " is not staked"))
1797+ let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned"))
1798+ if ((jC != c))
17901799 then throw((aF + " is not yours"))
17911800 else {
1792- let jz = split(jv.description, "_")
1793- $Tuple4(ju, Q, jz, jx)
1794- }
1795- }
1796-
1797-
1798-func jA (c,eL,jq,jr) = if ((0 > eL))
1801+ let jD = split(jz.description, "_")
1802+ $Tuple4(jy, Q, jD, jB)
1803+ }
1804+ }
1805+
1806+
1807+func jE (c,eP,ju,jv) = if ((0 > eP))
17991808 then throw("Negative amount")
18001809 else {
1801- let gd = jp(c, jq, jr)
1802- let dL = gd._3[do]
1803- let gJ = gP(gd._3[dp])
1804- let gT = (lastBlock.timestamp - gd._4)
1805- if ((0 > gT))
1806- then throw(((("Saved timestamp is in future, saved = " + toString(gd._4)) + ", current = ") + toString(lastBlock.timestamp)))
1810+ let gh = jt(c, ju, jv)
1811+ let dN = gh._3[dq]
1812+ let gN = gT(gh._3[dr])
1813+ let gX = (lastBlock.timestamp - gh._4)
1814+ if ((0 > gX))
1815+ then throw(((("Saved timestamp is in future, saved = " + toString(gh._4)) + ", current = ") + toString(lastBlock.timestamp)))
18071816 else {
1808- let jl = dK(dL)
1809- let jB = jk(gd._2, jl)
1810- let jC = fraction(gT, (jB * jl), a)
1811- if ((eL > jC))
1812- then throw(((("Not enough resources, available = " + toString(jC)) + ", requested = ") + toString(eL)))
1817+ let jp = dM(dN)
1818+ let jF = jo(gh._2, jp)
1819+ let jG = fraction(gX, (jF * jp), a)
1820+ if ((eP > jG))
1821+ then throw(((("Not enough resources, available = " + toString(jG)) + ", requested = ") + toString(eP)))
18131822 else {
1814- let jD = fraction((jC - eL), a, (jB * jl))
1815- let jE = (lastBlock.timestamp - jD)
1816- let ic = (jl / cL)
1817- let hb = gX(gJ, (gT - jD), ic, jB)
1818- let ib = bC(gd._2)
1819- let id = valueOrElse(getInteger(bD(gd._2)), 0)
1820- let hS = ia(ib, ic, id)
1821- let ij = split(hS[bh], "_")
1822- let hc = parseIntValue(ij[bk])
1823- if (if ((jq == eC))
1824- then (eL > hc)
1823+ let jH = fraction((jG - eP), a, (jF * jp))
1824+ let jI = (lastBlock.timestamp - jH)
1825+ let ig = (jp / cN)
1826+ let hf = hb(gN, (gX - jH), ig, jF)
1827+ let if = bD(gh._2)
1828+ let ih = valueOrElse(getInteger(bE(gh._2)), 0)
1829+ let hW = ie(if, ig, ih)
1830+ let in = split(hW[bi], "_")
1831+ let hg = parseIntValue(in[bl])
1832+ if (if ((ju == eG))
1833+ then (eP > hg)
18251834 else false)
1826- then throw((("Only " + toString(hc)) + " space left in warehouse"))
1835+ then throw((("Only " + toString(hg)) + " space left in warehouse"))
18271836 else {
1828- let hO = bN(gd._1)
1829- let ir = hN(hO)
1830- let ha = split(ir[bn], "_")
1831- let gZ = split(hS[be], "_")
1832- let jF = if ((jq == eC))
1833- then $Tuple4(gR(gZ, gJ, (gT - jD), ic, jB), ir[bn], (parseIntValue(ij[bj]) + hb._2), (parseIntValue(ij[bk]) - hb._2))
1834- else if ((jq == eD))
1835- then $Tuple4(hS[be], gR(ha, gJ, (gT - jD), ic, jB), parseIntValue(ij[bj]), parseIntValue(ij[bk]))
1837+ let hS = bO(gh._1)
1838+ let iv = hR(hS)
1839+ let he = split(iv[bo], "_")
1840+ let hd = split(hW[bf], "_")
1841+ let jJ = if ((ju == eG))
1842+ then $Tuple4(gV(hd, gN, (gX - jH), ig, jF), iv[bo], (parseIntValue(in[bk]) + hf._2), (parseIntValue(in[bl]) - hf._2))
1843+ else if ((ju == eH))
1844+ then $Tuple4(hW[bf], gV(he, gN, (gX - jH), ig, jF), parseIntValue(in[bk]), parseIntValue(in[bl]))
18361845 else {
1837- let jG = gY(gZ, ha, hb, hc)
1838- let jH = min([parseIntValue(ij[bk]), hb._2])
1839- $Tuple4(jG._1, jG._2, (parseIntValue(ij[bj]) + jH), (parseIntValue(ij[bk]) - jH))
1846+ let jK = hc(hd, he, hf, hg)
1847+ let jL = min([parseIntValue(in[bl]), hf._2])
1848+ $Tuple4(jK._1, jK._2, (parseIntValue(in[bk]) + jL), (parseIntValue(in[bl]) - jL))
18401849 }
1841- let jI = jF._1
1842- let jJ = jF._2
1843- let jK = jF._3
1844- let jL = jF._4
1845- $Tuple5([IntegerEntry(bw(gd._2), jE), IntegerEntry(bz(aF, gd._2, c), jE)], hO, [ir[bm], jJ, ir[bo], ir[bp]], ib, [hS[bd], jI, hS[bf], hS[bg], makeString([ij[bi], toString(jK), toString(jL), ij[bl]], "_")])
1850+ let jM = jJ._1
1851+ let jN = jJ._2
1852+ let jO = jJ._3
1853+ let jP = jJ._4
1854+ $Tuple5([IntegerEntry(bx(gh._2), jI), IntegerEntry(bA(aF, gh._2, c), jI)], hS, [iv[bn], jN, iv[bp], iv[bq]], if, [hW[be], jM, hW[bg], hW[bh], makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")])
18461855 }
18471856 }
18481857 }
18491858 }
18501859
18511860
1852-func jM (c,Q,jl,jq) = {
1853- let jw = bw(Q)
1854- let jx = value(getInteger(jw))
1855- let jC = (fraction((lastBlock.timestamp - jx), jk(Q, jl), a) * jl)
1856- jA(c, jC, jq, Q)
1857- }
1858-
1859-
1860-func jN (fh,iM,jO,Q) = {
1861- let c = toString(iM)
1862- let gd = jp(c, eE, Q)
1863- let jl = dK(gd._3[do])
1864- let jP = bD(gd._2)
1865- let jQ = valueOrElse(getInteger(jP), 0)
1866- if (if (!(cz))
1867- then (jQ >= 3)
1861+func jQ (c,Q,jp,ju) = {
1862+ let jA = bx(Q)
1863+ let jB = value(getInteger(jA))
1864+ let jG = (fraction((lastBlock.timestamp - jB), jo(Q, jp), a) * jp)
1865+ jE(c, jG, ju, Q)
1866+ }
1867+
1868+
1869+func jR (fl,iQ,jS,Q) = {
1870+ let c = toString(iQ)
1871+ let gh = jt(c, eI, Q)
1872+ let jp = dM(gh._3[dq])
1873+ let jT = bE(gh._2)
1874+ let jU = valueOrElse(getInteger(jT), 0)
1875+ if (if (!(cA))
1876+ then (jU >= 3)
18681877 else false)
18691878 then throw("Currently max infrastructure level = 3")
18701879 else {
1871- let jR = ((sqrt(jl, 0, 0, DOWN) / 5) + 2)
1872- let ao = (jQ + 1)
1873- if (if (cz)
1874- then (ao > jR)
1880+ let jV = ((sqrt(jp, 0, 0, DOWN) / 5) + 2)
1881+ let ao = (jU + 1)
1882+ if (if (cA)
1883+ then (ao > jV)
18751884 else false)
1876- then throw(("Currently max infrastructure level = " + toString(jR)))
1885+ then throw(("Currently max infrastructure level = " + toString(jV)))
18771886 else {
1878- let jS = fraction(eh, (jl * ao), cL)
1879- if (if (!(fh))
1880- then (jO != jS)
1887+ let jW = fraction(ej, (jp * ao), cN)
1888+ if (if (!(fl))
1889+ then (jS != jW)
18811890 else false)
1882- then throw(("Payment attached should be " + toString(jS)))
1891+ then throw(("Payment attached should be " + toString(jW)))
18831892 else {
1884- let hO = bN(gd._1)
1885- let ir = hN(hO)
1886- let jT = split(ir[bo], "_")
1887- let jU = fraction(cF, (jl * ao), cL)
1888- let jV = makeString(fg(fh, jT, jU), "_")
1889- let jW = jM(c, gd._2, jl, eE)
1890- let jX = jW._5
1891- let jY = hP(jX[bd])
1892- let jZ = makeString([split(jX[bd], "_")[0], toString(ao)], "_")
1893- let ka = hP(jZ)
1894- let ij = split(jX[bh], "_")
1895- let kb = makeString([ij[bi], ij[bj], toString(((parseIntValue(ij[bk]) + ka) - jY)), toString(ka)], "_")
1896- $Tuple3(([IntegerEntry(jP, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(hO, makeString([ir[bm], jW._3[bn], jV, ir[bp]], ":")), StringEntry(jW._4, makeString([jZ, jX[be], jX[bf], jX[bg], kb], ":"))] ++ jW._1), ao, jU)
1893+ let hS = bO(gh._1)
1894+ let iv = hR(hS)
1895+ let jX = split(iv[bp], "_")
1896+ let jY = fraction(cH, (jp * ao), cN)
1897+ let jZ = makeString(fk(fl, jX, jY), "_")
1898+ let ka = jQ(c, gh._2, jp, eI)
1899+ let kb = ka._5
1900+ let kc = hT(kb[be])
1901+ let kd = makeString([split(kb[be], "_")[0], toString(ao)], "_")
1902+ let ke = hT(kd)
1903+ let in = split(kb[bi], "_")
1904+ let kf = makeString([in[bj], in[bk], toString(((parseIntValue(in[bl]) + ke) - kc)), toString(ke)], "_")
1905+ $Tuple3(([IntegerEntry(jT, ao), IntegerEntry(eA(gh._2, c), ao), StringEntry(hS, makeString([iv[bn], ka._3[bo], jZ, iv[bq]], ":")), StringEntry(ka._4, makeString([kd, kb[bf], kb[bg], kb[bh], kf], ":"))] ++ ka._1), ao, jY)
18971906 }
18981907 }
18991908 }
19001909 }
19011910
19021911
1903-func kc (kd,ke,kf,kg) = {
1904- let ai = valueOrElse(getInteger(ke), 0)
1905- let an = (ai + kg)
1906- let kh = al(valueOrElse(getInteger(kd), 0), an)
1907- $Tuple2([IntegerEntry(kd, kh[0]), IntegerEntry(ke, an), IntegerEntry(kf, (valueOrElse(getInteger(kf), 0) + kh[1]))], an)
1908- }
1909-
1910-
1911-func ki (B,kg) = kc(E(B), D(B), F(B), kg)
1912-
1913-
1914-func kj (c,kg) = kc(I(c), H(c), J(c), kg)
1915-
1916-
1917-func kk (c) = {
1918- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1919- let kl = bH(c)
1920- let km = getString(kl)
1921- if (!(isDefined(km)))
1912+func kg (kh,ki,kj,kk) = {
1913+ let ai = valueOrElse(getInteger(ki), 0)
1914+ let an = (ai + kk)
1915+ let kl = al(valueOrElse(getInteger(kh), 0), an)
1916+ $Tuple2([IntegerEntry(kh, kl[0]), IntegerEntry(ki, an), IntegerEntry(kj, (valueOrElse(getInteger(kj), 0) + kl[1]))], an)
1917+ }
1918+
1919+
1920+func km (B,kk) = {
1921+ let jz = value(assetInfo(fromBase58String(B)))
1922+ let c = valueOrErrorMessage(getString(bM(B)), (("NFT " + jz.name) + " is orphaned"))
1923+ if (if (if (cB)
1924+ then (jz.issuer == this)
1925+ else false)
1926+ then contains(jz.name, aH)
1927+ else false)
1928+ then kg(I(c), H(c), J(c), kk)
1929+ else kg(E(B), D(B), F(B), kk)
1930+ }
1931+
1932+
1933+func kn (c,kk) = kg(I(c), H(c), J(c), kk)
1934+
1935+
1936+func ko (c) = {
1937+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
1938+ let kp = bI(c)
1939+ let kq = getString(kp)
1940+ if (!(isDefined(kq)))
19221941 then throw("You are not eligible for ONBOARD artifact")
19231942 else {
1924- let kn = bJ(c)
1925- let ko = getString(kn)
1926- if (isDefined(ko))
1927- then throw(("You already used your ONBOARD artifact on duck " + value(ko)))
1943+ let kr = bK(c)
1944+ let ks = getString(kr)
1945+ if (isDefined(ks))
1946+ then throw(("You already used your ONBOARD artifact on duck " + value(ks)))
19281947 else {
1929- let kp = bI(B)
1930- let kq = getString(kp)
1931- if (isDefined(kq))
1932- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kq)))
1933- else ([StringEntry(kn, B), StringEntry(kp, c)] ++ ki(B, af)._1)
1948+ let kt = bJ(B)
1949+ let ku = getString(kt)
1950+ if (isDefined(ku))
1951+ then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ku)))
1952+ else ([StringEntry(kr, B), StringEntry(kt, c)] ++ km(B, af)._1)
19341953 }
19351954 }
19361955 }
19371956
19381957
1939-func kr (c,jr) = {
1940- let gd = jp(c, eE, jr)
1941- let Q = gd._2
1942- let jl = dK(gd._3[do])
1943- let ks = bx(aH, Q)
1944- if ((valueOrElse(getInteger(ks), 0) > 0))
1958+func kv (c,jv) = {
1959+ let gh = jt(c, eI, jv)
1960+ let Q = gh._2
1961+ let jp = dM(gh._3[dq])
1962+ let kw = by(aI, Q)
1963+ if ((valueOrElse(getInteger(kw), 0) > 0))
19451964 then throw("Presale artifact is already activated")
1946- else if ((parseIntValue(gd._3[dn]) > er))
1965+ else if ((parseIntValue(gh._3[dp]) > eu))
19471966 then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
19481967 else {
1949- let jW = jM(c, Q, jl, eE)
1950- (((jW._1 :+ IntegerEntry(ks, jl)) :+ StringEntry(jW._2, makeString(jW._3, ":"))) :+ StringEntry(jW._4, makeString(jW._5, ":")))
1968+ let ka = jQ(c, Q, jp, eI)
1969+ (((ka._1 :+ IntegerEntry(kw, jp)) :+ StringEntry(ka._2, makeString(ka._3, ":"))) :+ StringEntry(ka._4, makeString(ka._5, ":")))
19511970 }
19521971 }
19531972
19541973
1955-func kt (B) = {
1956- let cj = valueOrElse(getInteger(dl, bU), 0)
1957- let jt = split(valueOrElse(getString(bO(B)), aM), "_")
1974+func kx (B) = {
1975+ let ck = valueOrElse(getInteger(dn, bV), 0)
1976+ let jx = split(valueOrElse(getString(bP(B)), aN), "_")
19581977 let aA = lastBlock.timestamp
1959- let cl = cd(dl, cj)
1960- let cf = cl[bZ]
1961- let cg = cl[ca]
1962- if ((jt[br] != "T"))
1978+ let cm = ce(dn, ck)
1979+ let cg = cm[ca]
1980+ let ch = cm[cb]
1981+ if ((jx[bs] != "T"))
19631982 then false
1964- else if (if (if ((parseIntValue(jt[bq]) == cj))
1965- then (cg[cc] == "INPROGRESS")
1983+ else if (if (if ((parseIntValue(jx[br]) == ck))
1984+ then (ch[cd] == "INPROGRESS")
19661985 else false)
1967- then (parseIntValue(cf[cb]) > aA)
1986+ then (parseIntValue(cg[cc]) > aA)
19681987 else false)
19691988 then throw("Your duck is taking part in the tournament")
1970- else dJ(invoke(this, "exitTournamentInternal", [B], nil))
1971- }
1972-
1973-
1974-func ku (B) = {
1975- let jt = split(valueOrElse(getString(bO(B)), aM), "_")
1989+ else dL(invoke(this, "exitTournamentInternal", [B], nil))
1990+ }
1991+
1992+
1993+func ky (B) = {
1994+ let jx = split(valueOrElse(getString(bP(B)), aN), "_")
19761995 let aA = lastBlock.timestamp
1977- if ((jt[br] != "D"))
1996+ if ((jx[bs] != "D"))
19781997 then false
19791998 else {
1980- let cn = parseIntValue(jt[bq])
1981- let co = parseIntValue(jt[bs])
1982- if (if (((cn + aQ) > aA))
1983- then (1 > co)
1999+ let co = parseIntValue(jx[br])
2000+ let cp = parseIntValue(jx[bt])
2001+ if (if (((co + aR) > aA))
2002+ then (1 > cp)
19842003 else false)
19852004 then throw("Your duck is on delivery mission")
1986- else dJ(invoke(this, "exitDeliveryInternal", [B], nil))
1987- }
1988- }
1989-
1990-
1991-func kv (B,fM,iY,kw) = {
1992- let jt = split(valueOrElse(getString(bO(B)), aM), "_")
2005+ else dL(invoke(this, "exitDeliveryInternal", [B], nil))
2006+ }
2007+ }
2008+
2009+
2010+func kz (B,fQ,jc,kA) = {
2011+ let jx = split(valueOrElse(getString(bP(B)), aN), "_")
19932012 let aA = lastBlock.timestamp
1994- let cn = parseIntValue(jt[bq])
1995- let co = parseIntValue(jt[bs])
1996- let jy = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned")
1997- let kx = A(B)
1998- let ky = getIntegerValue(kx)
1999- let kz = if (if ((co > 0))
2013+ let co = parseIntValue(jx[br])
2014+ let cp = parseIntValue(jx[bt])
2015+ let jC = valueOrErrorMessage(getString(bM(B)), "NFT duck is orphaned")
2016+ let kB = A(B)
2017+ let kC = getIntegerValue(kB)
2018+ let kD = if (if ((cp > 0))
20002019 then true
2001- else if (if (fM)
2002- then (kw > 0)
2020+ else if (if (fQ)
2021+ then (kA > 0)
20032022 else false)
2004- then (iY > 0)
2023+ then (jc > 0)
20052024 else false)
20062025 then {
2007- let kA = invoke(di, "sendDeliveryReward", [jy], nil)
2008- if ((kA == kA))
2026+ let kE = invoke(dk, "sendDeliveryReward", [jC], nil)
2027+ if ((kE == kE))
20092028 then {
2010- let kB = V(jy)
2011-[IntegerEntry(kB, (valueOrElse(getInteger(kB), 0) + 1)), IntegerEntry(W(jy), (cn / a))]
2029+ let kF = V(jC)
2030+[IntegerEntry(kF, (valueOrElse(getInteger(kF), 0) + 1)), IntegerEntry(W(jC), (co / a))]
20122031 }
20132032 else throw("Strict value is not equal to itself.")
20142033 }
2015- else if (if (if (fM)
2016- then (iY > 0)
2034+ else if (if (if (fQ)
2035+ then (jc > 0)
20172036 else false)
2018- then ((cn + aQ) > aA)
2037+ then ((co + aR) > aA)
20192038 else false)
20202039 then throw("Your duck is still on delivery mission")
20212040 else {
2022- let kC = valueOrElse(getInteger(di, bT), 0)
2023- let kD = invoke(di, "updateDeliveryLocked", [(kC - aP)], nil)
2024- if ((kD == kD))
2025- then if (if (if (fM)
2026- then (0 >= iY)
2041+ let kG = valueOrElse(getInteger(dk, bU), 0)
2042+ let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil)
2043+ if ((kH == kH))
2044+ then if (if (if (fQ)
2045+ then (0 >= jc)
20272046 else false)
20282047 then true
2029- else (0 >= ky))
2048+ else (0 >= kC))
20302049 then nil
2031- else [IntegerEntry(U(B), (cn + cH))]
2050+ else [IntegerEntry(U(B), (co + cJ))]
20322051 else throw("Strict value is not equal to itself.")
20332052 }
2034- let kE = getStringValue(L(B))
2035- $Tuple3(kz, [StringEntry(bO(B), kE)], kE)
2036- }
2037-
2038-
2039-func kF (kG,ao,kH,c,kI,kJ) = {
2040- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2041- if (kt(B))
2053+ let kI = getStringValue(L(B))
2054+ $Tuple3(kD, [StringEntry(bP(B), kI)], kI)
2055+ }
2056+
2057+
2058+func kJ (kK,ao,kL,c,kM,kN) = {
2059+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
2060+ if (kx(B))
20422061 then throw("mergeInternal_checkTournament")
2043- else if (ku(B))
2062+ else if (ky(B))
20442063 then throw("mergeInternal_checkDelivery")
20452064 else {
2046- func kK (eU,Q) = {
2047- let jv = value(assetInfo(fromBase58String(Q)))
2048- let jw = bw(Q)
2049- let jx = valueOrErrorMessage(getInteger(jw), (("NFT " + jv.name) + " is not staked"))
2050- let jy = valueOrErrorMessage(getString(bt(Q)), (("NFT " + jv.name) + " is orphaned"))
2051- if ((jy != c))
2065+ func kO (eY,Q) = {
2066+ let jz = value(assetInfo(fromBase58String(Q)))
2067+ let jA = bx(Q)
2068+ let jB = valueOrErrorMessage(getInteger(jA), (("NFT " + jz.name) + " is not staked"))
2069+ let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned"))
2070+ if ((jC != c))
20522071 then throw((aF + " is not yours"))
20532072 else {
2054- let jz = split(jv.description, "_")
2055- let dz = jz[dq]
2056- if (if ((eU._3 != ""))
2057- then (eU._3 != dz)
2073+ let jD = split(jz.description, "_")
2074+ let dB = jD[ds]
2075+ if (if ((eY._3 != ""))
2076+ then (eY._3 != dB)
20582077 else false)
20592078 then throw("Lands should be on the same continent to merge")
20602079 else {
2061- let dL = jz[do]
2062- let kL = eU._1
2063- let gN = valueOrErrorMessage(indexOf(kL, dL), "You haven't passed all the lands needed")
2064- let kM = (take(kL, gN) + drop(kL, (gN + 1)))
2065- let jl = dK(dL)
2066- let kN = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0))
2067- let id = valueOrElse(getInteger(bD(Q)), 0)
2068- let kO = {
2069- let cD = dL
2070- if (("S" == cD))
2080+ let dN = jD[dq]
2081+ let kP = eY._1
2082+ let gR = valueOrErrorMessage(indexOf(kP, dN), "You haven't passed all the lands needed")
2083+ let kQ = (take(kP, gR) + drop(kP, (gR + 1)))
2084+ let jp = dM(dN)
2085+ let kR = (eY._2 + valueOrElse(getInteger(by(aI, Q)), 0))
2086+ let ih = valueOrElse(getInteger(bE(Q)), 0)
2087+ let kS = {
2088+ let cF = dN
2089+ if (("S" == cF))
20712090 then 3
2072- else if (("M" == cD))
2091+ else if (("M" == cF))
20732092 then 4
2074- else if (("L" == cD))
2093+ else if (("L" == cF))
20752094 then 5
2076- else if (("XL" == cD))
2095+ else if (("XL" == cF))
20772096 then 6
20782097 else throw("Only S, M, L, XL can merge")
20792098 }
2080- if ((id != kO))
2099+ if ((ih != kS))
20812100 then throw("All lands should be maxed to merge")
20822101 else {
2083- let ew = jz[dn]
2084- let gJ = gP(jz[dp])
2085- let gT = (lastBlock.timestamp - jx)
2086- if ((0 > gT))
2087- then throw(((("Saved timestamp is in future, saved = " + toString(jx)) + ", current = ") + toString(lastBlock.timestamp)))
2102+ let ez = jD[dp]
2103+ let gN = gT(jD[dr])
2104+ let gX = (lastBlock.timestamp - jB)
2105+ if ((0 > gX))
2106+ then throw(((("Saved timestamp is in future, saved = " + toString(jB)) + ", current = ") + toString(lastBlock.timestamp)))
20882107 else {
2089- let jB = jk(Q, jl)
2090- let ic = (jl / cL)
2091- let jJ = gR(split(eU._4, "_"), gJ, gT, ic, jB)
2092- let fe = gH(eU._6, gJ, ic, -1)
2093- let kP = gH(eU._10, gJ, ic, -1)
2094- let hx = gH(eU._9, gJ, ic, 1)
2095- let kQ = eU._7
2096- let dg = indexOf(kQ, Q)
2097- if (!(isDefined(dg)))
2108+ let jF = jo(Q, jp)
2109+ let ig = (jp / cN)
2110+ let jN = gV(split(eY._4, "_"), gN, gX, ig, jF)
2111+ let fi = gL(eY._6, gN, ig, -1)
2112+ let kT = gL(eY._10, gN, ig, -1)
2113+ let hB = gL(eY._9, gN, ig, 1)
2114+ let kU = eY._7
2115+ let di = indexOf(kU, Q)
2116+ if (!(isDefined(di)))
20982117 then throw(("Your staked lands don't contain " + Q))
20992118 else {
2100- let kR = bv(Q)
2101- let kS = valueOrElse(getString(kR), "")
2102- $Tuple10(kM, kN, dz, jJ, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kR)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kS != ""))
2103- then [DeleteEntry(et(kS))]
2104- else nil)), fe, removeByIndex(kQ, value(dg)), (eU._8 + jl), hx, kP)
2119+ let kV = bw(Q)
2120+ let kW = valueOrElse(getString(kV), "")
2121+ $Tuple10(kQ, kR, dB, jN, ((((((((((((eY._5 :+ DeleteEntry(bx(Q))) :+ DeleteEntry(bA(aF, Q, c))) :+ DeleteEntry(ey(ez))) :+ DeleteEntry(bu(Q))) :+ DeleteEntry(bE(Q))) :+ DeleteEntry(eA(Q, c))) :+ DeleteEntry(by(aI, Q))) :+ DeleteEntry(eB(ez))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(kV)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kW != ""))
2122+ then [DeleteEntry(ew(kW))]
2123+ else nil)), fi, removeByIndex(kU, value(di)), (eY._8 + jp), hB, kT)
21052124 }
21062125 }
21072126 }
21082127 }
21092128 }
21102129 }
21112130
2112- let hO = bN(B)
2113- let ir = hN(hO)
2114- let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
2115- let kT = dA(c)
2116- let kU = getString(kT)
2117- let kV = if (isDefined(kU))
2118- then split_51C(value(kU), "_")
2131+ let hS = bO(B)
2132+ let iv = hR(hS)
2133+ let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_")
2134+ let kX = dC(c)
2135+ let kY = getString(kX)
2136+ let kZ = if (isDefined(kY))
2137+ then split_51C(value(kY), "_")
21192138 else nil
2120- let kW = split(value(assetInfo(fromBase58String(kI[0]))).description, "_")[dq]
2121- let kX = split(valueOrElse(getString(dy(kW)), "0_0_0_0_0_0"), "_")
2122- let ff = {
2123- let eW = kI
2124- let eX = size(eW)
2125- let eY = $Tuple10(kH, 0, "", ir[bn], nil, gI, kV, 0, split("0_0_0_0_0_0", "_"), kX)
2126- func eZ (fa,fb) = if ((fb >= eX))
2127- then fa
2128- else kK(fa, eW[fb])
2129-
2130- func fc (fa,fb) = if ((fb >= eX))
2131- then fa
2139+ let la = split(value(assetInfo(fromBase58String(kM[0]))).description, "_")[ds]
2140+ let lb = split(valueOrElse(getString(dA(la)), "0_0_0_0_0_0"), "_")
2141+ let fj = {
2142+ let fa = kM
2143+ let fb = size(fa)
2144+ let fc = $Tuple10(kL, 0, "", iv[bo], nil, gM, kZ, 0, split("0_0_0_0_0_0", "_"), lb)
2145+ func fd (fe,ff) = if ((ff >= fb))
2146+ then fe
2147+ else kO(fe, fa[ff])
2148+
2149+ func fg (fe,ff) = if ((ff >= fb))
2150+ then fe
21322151 else throw("List size exceeds 5")
21332152
2134- fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
2153+ fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5)
21352154 }
2136- let dz = ff._3
2137- let hr = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz))
2138- let gQ = hw(ff._9, (dK(kG) / cL))
2139- let iP = valueOrElse(getInteger(es()), (er + 1))
2140- let kY = toString(iP)
2141- let iQ = Issue(eJ(kY, kG), makeString([kY, kG, gQ, dz], "_"), 1, 0, false)
2142- let bu = calculateAssetId(iQ)
2143- let kZ = toBase58String(bu)
2144- let jV = makeString(fg((kJ > 0), split(ir[bo], "_"), kJ), "_")
2145- let la = dB(c)
2146- let lb = valueOrElse(getInteger(la), 0)
2147- $Tuple2((((((((((((((((ff._5 :+ (if ((size(ff._7) > 0))
2148- then StringEntry(kT, makeString_11C(ff._7, "_"))
2149- else DeleteEntry(kT))) :+ IntegerEntry(la, if ((ff._8 > lb))
2155+ let dB = fj._3
2156+ let hv = valueOrErrorMessage(indexOf(aV, dB), ("Unknown continent: " + dB))
2157+ let gU = hA(fj._9, (dM(kK) / cN))
2158+ let iT = valueOrElse(getInteger(ev()), (eu + 1))
2159+ let lc = toString(iT)
2160+ let iU = Issue(eN(lc, kK), makeString([lc, kK, gU, dB], "_"), 1, 0, false)
2161+ let bv = calculateAssetId(iU)
2162+ let ld = toBase58String(bv)
2163+ let jZ = makeString(fk((kN > 0), split(iv[bp], "_"), kN), "_")
2164+ let le = dD(c)
2165+ let lf = valueOrElse(getInteger(le), 0)
2166+ $Tuple2((((((((((((((((fj._5 :+ (if ((size(fj._7) > 0))
2167+ then StringEntry(kX, makeString_11C(fj._7, "_"))
2168+ else DeleteEntry(kX))) :+ IntegerEntry(le, if ((fj._8 > lf))
21502169 then 0
2151- else (lb - ff._8))) :+ IntegerEntry(es(), (iP + 1))) :+ iQ) :+ StringEntry(ev(kY), kZ)) :+ StringEntry(bt(kZ), c)) :+ StringEntry(ey(kY), c)) :+ IntegerEntry(bx(aH, kZ), ff._2)) :+ IntegerEntry(bD(kZ), ao)) :+ IntegerEntry(ex(kZ, c), ao)) :+ StringEntry(hO, makeString([ir[bm], ff._4, jV, ir[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", kZ], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kZ)
2170+ else (lf - fj._8))) :+ IntegerEntry(ev(), (iT + 1))) :+ iU) :+ StringEntry(ey(lc), ld)) :+ StringEntry(bu(ld), c)) :+ StringEntry(eB(lc), c)) :+ IntegerEntry(by(aI, ld), fj._2)) :+ IntegerEntry(bE(ld), ao)) :+ IntegerEntry(eA(ld, c), ao)) :+ StringEntry(hS, makeString([iv[bn], fj._4, jZ, iv[bq]], ":"))) :+ StringEntry(dz(), makeString(fj._6, "_"))) :+ StringEntry(dA(dB), makeString(fj._10, "_"))) :+ StringEntry(bP(B), makeString([dB, "L", ld], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bv)), ld)
21522171 }
21532172 }
21542173
21552174
2156-func lc (c,kI) = kF("M", 3, "SSSS", c, kI, 0)
2157-
2158-
2159-func ld (c,kI) = kF("L", 4, "SMM", c, kI, (cF * 4))
2160-
2161-
2162-func le (c,kI) = kF("XL", 5, "SSSML", c, kI, (cF * 47))
2163-
2164-
2165-func lf (c,kI) = kF("XXL", 6, "LXL", c, kI, (cF * 54))
2166-
2167-
2168-func lg (c,kI) = {
2169- let cD = size(kI)
2170- if ((4 == cD))
2171- then lc(c, kI)
2172- else if ((3 == cD))
2173- then ld(c, kI)
2174- else if ((5 == cD))
2175- then le(c, kI)
2176- else if ((2 == cD))
2177- then lf(c, kI)
2175+func lg (c,kM) = kJ("M", 3, "SSSS", c, kM, 0)
2176+
2177+
2178+func lh (c,kM) = kJ("L", 4, "SMM", c, kM, (cH * 4))
2179+
2180+
2181+func li (c,kM) = kJ("XL", 5, "SSSML", c, kM, (cH * 47))
2182+
2183+
2184+func lj (c,kM) = kJ("XXL", 6, "LXL", c, kM, (cH * 54))
2185+
2186+
2187+func lk (c,kM) = {
2188+ let cF = size(kM)
2189+ if ((4 == cF))
2190+ then lg(c, kM)
2191+ else if ((3 == cF))
2192+ then lh(c, kM)
2193+ else if ((5 == cF))
2194+ then li(c, kM)
2195+ else if ((2 == cF))
2196+ then lj(c, kM)
21782197 else throw("Unknown merge")
21792198 }
21802199
21812200
2182-func lh (bQ) = {
2183- let li = getString(bM(bQ))
2184- if (isDefined(li))
2201+func ll (bR) = {
2202+ let lm = getString(bN(bR))
2203+ if (isDefined(lm))
21852204 then {
2186- let B = value(li)
2187- let lj = bO(B)
2188- let ck = split(valueOrElse(getString(lj), aM), "_")
2189- let cn = parseIntValue(ck[bq])
2190- if (if ((ck[br] != "D"))
2205+ let B = value(lm)
2206+ let ln = bP(B)
2207+ let cl = split(valueOrElse(getString(ln), aN), "_")
2208+ let co = parseIntValue(cl[br])
2209+ if (if ((cl[bs] != "D"))
21912210 then true
2192- else ((cn + aQ) > lastBlock.timestamp))
2211+ else ((co + aR) > lastBlock.timestamp))
21932212 then nil
21942213 else {
2195- let kx = A(B)
2196- if ((parseIntValue(ck[bs]) > 0))
2214+ let kB = A(B)
2215+ if ((parseIntValue(cl[bt]) > 0))
21972216 then {
2198- let kA = invoke(di, "sendDeliveryReward", [bQ], nil)
2199- if ((kA == kA))
2217+ let kE = invoke(dk, "sendDeliveryReward", [bR], nil)
2218+ if ((kE == kE))
22002219 then nil
22012220 else throw("Strict value is not equal to itself.")
22022221 }
22032222 else ({
2204- let kC = valueOrElse(getInteger(di, bT), 0)
2205- let kD = invoke(di, "updateDeliveryLocked", [(kC - aP)], nil)
2206- if ((kD == kD))
2207- then if ((0 >= getIntegerValue(kx)))
2223+ let kG = valueOrElse(getInteger(dk, bU), 0)
2224+ let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil)
2225+ if ((kH == kH))
2226+ then if ((0 >= getIntegerValue(kB)))
22082227 then nil
22092228 else {
2210- let lk = invoke(this, "saveInteger", [U(B), (cn + cH)], nil)
2211- if ((lk == lk))
2229+ let lo = invoke(this, "saveInteger", [U(B), (co + cJ)], nil)
2230+ if ((lo == lo))
22122231 then nil
22132232 else throw("Strict value is not equal to itself.")
22142233 }
22152234 else throw("Strict value is not equal to itself.")
2216- } :+ StringEntry(lj, getStringValue(L(B))))
2235+ } :+ StringEntry(ln, getStringValue(L(B))))
22172236 }
22182237 }
22192238 else nil
22202239 }
22212240
22222241
2223-func ll (gN) = if (if ((gN.originCaller != dh))
2224- then valueOrElse(getBoolean(dN()), false)
2242+func lp (gR) = if (if ((gR.originCaller != dj))
2243+ then valueOrElse(getBoolean(dP()), false)
22252244 else false)
22262245 then throw("Contracts are under maintenance")
22272246 else {
2228- let bQ = toString(gN.originCaller)
2229- (lh(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId)))
2247+ let bR = toString(gR.originCaller)
2248+ (ll(bR) :+ StringEntry(dQ(bR), toBase58String(gR.transactionId)))
22302249 }
22312250
22322251
2233-func lm (gN) = if (if ((gN.originCaller != dh))
2234- then valueOrElse(getBoolean(dN()), false)
2252+func lq (gR) = if (if ((gR.originCaller != dj))
2253+ then valueOrElse(getBoolean(dP()), false)
22352254 else false)
22362255 then throw("Contracts are under maintenance")
2237- else [StringEntry(dO(toString(gN.originCaller)), toBase58String(gN.transactionId))]
2238-
2239-
2240-@Callable(gN)
2241-func constructorV1 (ln) = if ((gN.caller != this))
2256+ else [StringEntry(dQ(toString(gR.originCaller)), toBase58String(gR.transactionId))]
2257+
2258+
2259+@Callable(gR)
2260+func constructorV1 (lr) = if ((gR.caller != this))
22422261 then throw("Permission denied")
2243- else [StringEntry(db(), ln)]
2244-
2245-
2246-
2247-@Callable(gN)
2248-func saveInteger (cT,eL) = if ((gN.caller != this))
2262+ else [StringEntry(dd(), lr)]
2263+
2264+
2265+
2266+@Callable(gR)
2267+func saveInteger (cV,eP) = if ((gR.caller != this))
22492268 then throw("saveInteger is not public method")
2250- else [IntegerEntry(cT, eL)]
2251-
2252-
2253-
2254-@Callable(gN)
2255-func setBlocked (lo) = if ((gN.caller != this))
2269+ else [IntegerEntry(cV, eP)]
2270+
2271+
2272+
2273+@Callable(gR)
2274+func setBlocked (ls) = if ((gR.caller != this))
22562275 then throw("permission denied")
2257- else [BooleanEntry(dN(), lo)]
2258-
2259-
2260-
2261-@Callable(gN)
2276+ else [BooleanEntry(dP(), ls)]
2277+
2278+
2279+
2280+@Callable(gR)
22622281 func stakeLand () = {
2263- let lp = ll(gN)
2264- if ((size(gN.payments) != 1))
2282+ let lt = lp(gR)
2283+ if ((size(gR.payments) != 1))
22652284 then throw("Exactly one payment required")
22662285 else {
2267- let lq = value(gN.payments[0])
2268- let bu = value(lq.assetId)
2269- let cS = toString(gN.caller)
2270- if ((lq.amount != 1))
2286+ let lu = value(gR.payments[0])
2287+ let bv = value(lu.assetId)
2288+ let cU = toString(gR.caller)
2289+ if ((lu.amount != 1))
22712290 then throw((("NFT " + aF) + " token should be attached as payment"))
22722291 else {
2273- let jv = value(assetInfo(bu))
2274- if ((jv.issuer != this))
2292+ let jz = value(assetInfo(bv))
2293+ if ((jz.issuer != this))
22752294 then throw("Unknown issuer of token")
2276- else if (!(contains(jv.name, aF)))
2295+ else if (!(contains(jz.name, aF)))
22772296 then throw((("Only NFT " + aF) + " tokens are accepted"))
22782297 else {
2279- let lr = drop(jv.name, 4)
2280- let ew = if (contains(lr, "XXL"))
2281- then dropRight(lr, 3)
2282- else if (contains(lr, "XL"))
2283- then dropRight(lr, 2)
2284- else dropRight(lr, 1)
2285- if (!(isDefined(parseInt(ew))))
2286- then throw(("Cannot parse land number from " + jv.name))
2298+ let lv = drop(jz.name, 4)
2299+ let ez = if (contains(lv, "XXL"))
2300+ then dropRight(lv, 3)
2301+ else if (contains(lv, "XL"))
2302+ then dropRight(lv, 2)
2303+ else dropRight(lv, 1)
2304+ if (!(isDefined(parseInt(ez))))
2305+ then throw(("Cannot parse land number from " + jz.name))
22872306 else {
2288- let Q = toBase58String(bu)
2289- let jw = bw(Q)
2290- if (isDefined(getInteger(jw)))
2291- then throw((("NFT " + jv.name) + " is already staked"))
2307+ let Q = toBase58String(bv)
2308+ let jA = bx(Q)
2309+ if (isDefined(getInteger(jA)))
2310+ then throw((("NFT " + jz.name) + " is already staked"))
22922311 else {
2293- let jz = split(jv.description, "_")
2294- let gJ = gP(jz[dp])
2295- let jl = dK(jz[do])
2296- let ic = (jl / cL)
2297- let fe = gO(gJ, ic, 1)
2298- let ls = dy(jz[dq])
2299- let kX = split(valueOrElse(getString(ls), "0_0_0_0_0_0"), "_")
2300- let lt = makeString(gH(kX, gJ, ic, 1), "_")
2301- let kT = dA(cS)
2302- let kU = getString(kT)
2303- let kQ = if (isDefined(kU))
2304- then split_51C(value(kU), "_")
2312+ let jD = split(jz.description, "_")
2313+ let gN = gT(jD[dr])
2314+ let jp = dM(jD[dq])
2315+ let ig = (jp / cN)
2316+ let fi = gS(gN, ig, 1)
2317+ let lw = dA(jD[ds])
2318+ let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_")
2319+ let lx = makeString(gL(lb, gN, ig, 1), "_")
2320+ let kX = dC(cU)
2321+ let kY = getString(kX)
2322+ let kU = if (isDefined(kY))
2323+ then split_51C(value(kY), "_")
23052324 else nil
2306- if (containsElement(kQ, Q))
2325+ if (containsElement(kU, Q))
23072326 then throw(("Your staked lands already contain " + Q))
2308- else if ((size(kQ) >= aJ))
2309- then throw((("Your already staked max (" + toString(aJ)) + ") lands"))
2327+ else if ((size(kU) >= aK))
2328+ then throw((("Your already staked max (" + toString(aK)) + ") lands"))
23102329 else {
2311- let id = valueOrElse(getInteger(bD(Q)), 0)
2312- let la = dB(cS)
2313- let lu = valueOrElse(getInteger(la), 0)
2314- let lv = invoke(dk, "onStakeUnstakeLand", [cS], nil)
2315- $Tuple2(([IntegerEntry(jw, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(kT, makeString_11C((kQ :+ Q), "_")), IntegerEntry(la, (lu + jl)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), id), StringEntry(dx(), fe), StringEntry(ls, lt)] ++ lp), lv)
2330+ let ih = valueOrElse(getInteger(bE(Q)), 0)
2331+ let le = dD(cU)
2332+ let ly = valueOrElse(getInteger(le), 0)
2333+ let lz = invoke(dm, "onStakeUnstakeLand", [cU], nil)
2334+ $Tuple2(([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aF, Q, cU), lastBlock.timestamp), StringEntry(kX, makeString_11C((kU :+ Q), "_")), IntegerEntry(le, (ly + jp)), StringEntry(bu(Q), cU), StringEntry(eB(ez), cU), IntegerEntry(eA(Q, cU), ih), StringEntry(dz(), fi), StringEntry(lw, lx)] ++ lt), lz)
23162335 }
23172336 }
23182337 }
23192338 }
23202339 }
23212340 }
23222341 }
23232342
23242343
23252344
2326-@Callable(gN)
2327-func unstakeLand (jr) = {
2328- let lp = ll(gN)
2329- if ((size(gN.payments) != 0))
2345+@Callable(gR)
2346+func unstakeLand (jv) = {
2347+ let lt = lp(gR)
2348+ if ((size(gR.payments) != 0))
23302349 then throw("No payments required")
23312350 else {
2332- let c = toString(gN.caller)
2333- let gd = jp(c, eD, jr)
2334- let Q = gd._2
2335- let jz = gd._3
2336- let kT = dA(c)
2337- let gJ = gP(jz[dp])
2338- let jl = dK(jz[do])
2339- let ic = (jl / cL)
2340- let fe = gO(gJ, ic, -1)
2341- let ls = dy(jz[dq])
2342- let kX = split(valueOrElse(getString(ls), "0_0_0_0_0_0"), "_")
2343- let lt = makeString(gH(kX, gJ, ic, -1), "_")
2344- let jW = jM(c, Q, jl, eD)
2345- let kQ = split_51C(valueOrElse(getString(kT), ""), "_")
2346- let dg = indexOf(kQ, Q)
2347- if (!(isDefined(dg)))
2351+ let c = toString(gR.caller)
2352+ let gh = jt(c, eH, jv)
2353+ let Q = gh._2
2354+ let jD = gh._3
2355+ let kX = dC(c)
2356+ let gN = gT(jD[dr])
2357+ let jp = dM(jD[dq])
2358+ let ig = (jp / cN)
2359+ let fi = gS(gN, ig, -1)
2360+ let lw = dA(jD[ds])
2361+ let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_")
2362+ let lx = makeString(gL(lb, gN, ig, -1), "_")
2363+ let ka = jQ(c, Q, jp, eH)
2364+ let kU = split_51C(valueOrElse(getString(kX), ""), "_")
2365+ let di = indexOf(kU, Q)
2366+ if (!(isDefined(di)))
23482367 then throw(("Your staked lands don't contain " + Q))
23492368 else {
23502369 let aA = lastBlock.timestamp
2351- let lw = valueOrElse(getInteger(dj, bP(c)), 0)
2352- if ((lw >= aA))
2353- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lw)))
2370+ let lA = valueOrElse(getInteger(dl, bQ(c)), 0)
2371+ if ((lA >= aA))
2372+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lA)))
23542373 else {
2355- let lx = (valueOrElse(getInteger(dk, b(c)), 0) + cG)
2356- if ((lx > aA))
2357- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lx)))
2374+ let lB = (valueOrElse(getInteger(dm, b(c)), 0) + cI)
2375+ if ((lB > aA))
2376+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lB)))
23582377 else {
2359- let la = dB(c)
2360- let lb = valueOrElse(getInteger(la), 0)
2361- let ly = if ((jl > lb))
2378+ let le = dD(c)
2379+ let lf = valueOrElse(getInteger(le), 0)
2380+ let lC = if ((jp > lf))
23622381 then 0
2363- else (lb - jl)
2364- let lv = invoke(dk, "onStakeUnstakeLand", [c], nil)
2365- $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(ls, lt), StringEntry(jW._2, makeString(jW._3, ":")), if ((size(kQ) > 1))
2366- then StringEntry(kT, makeString_11C(removeByIndex(kQ, value(dg)), "_"))
2367- else DeleteEntry(kT), IntegerEntry(la, ly)] ++ lp), lv)
2382+ else (lf - jp)
2383+ let lz = invoke(dm, "onStakeUnstakeLand", [c], nil)
2384+ $Tuple2(([ScriptTransfer(gR.caller, 1, fromBase58String(Q)), DeleteEntry(bx(Q)), DeleteEntry(bA(aF, Q, c)), StringEntry(dz(), fi), StringEntry(lw, lx), StringEntry(ka._2, makeString(ka._3, ":")), if ((size(kU) > 1))
2385+ then StringEntry(kX, makeString_11C(removeByIndex(kU, value(di)), "_"))
2386+ else DeleteEntry(kX), IntegerEntry(le, lC)] ++ lt), lz)
23682387 }
23692388 }
23702389 }
23712390 }
23722391 }
23732392
23742393
23752394
2376-@Callable(gN)
2395+@Callable(gR)
23772396 func stakeDuck () = {
2378- let lp = ll(gN)
2379- if ((size(gN.payments) != 1))
2397+ let lt = lp(gR)
2398+ if ((size(gR.payments) != 1))
23802399 then throw("Exactly one payment required")
23812400 else {
2382- let lq = value(gN.payments[0])
2383- let bu = value(lq.assetId)
2384- let cS = toString(gN.caller)
2385- if ((lq.amount != 1))
2401+ let lu = value(gR.payments[0])
2402+ let bv = value(lu.assetId)
2403+ let cU = toString(gR.caller)
2404+ if ((lu.amount != 1))
23862405 then throw((("NFT " + aG) + " token should be attached as payment"))
23872406 else {
2388- let jv = value(assetInfo(bu))
2389- if (if ((jv.issuer != ea))
2390- then (jv.issuer != eb)
2407+ let jz = value(assetInfo(bv))
2408+ let lD = if (if (cB)
2409+ then (jz.issuer == this)
23912410 else false)
2392- then throw((("Unknown issuer of " + aG) + " token"))
2393- else if (!(contains(jv.name, aG)))
2394- then throw((("Only NFT " + aG) + " tokens are accepted"))
2411+ then contains(jz.name, aH)
2412+ else false
2413+ if (if (if ((jz.issuer != ec))
2414+ then (jz.issuer != ed)
2415+ else false)
2416+ then !(lD)
2417+ else false)
2418+ then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token"))
2419+ else if (if (!(contains(jz.name, aG)))
2420+ then !(lD)
2421+ else false)
2422+ then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted"))
23952423 else {
2396- let lz = toBase58String(bu)
2397- let jw = bw(lz)
2398- if (isDefined(getInteger(jw)))
2399- then throw((("NFT " + jv.name) + " is already staked"))
2400- else if (isDefined(getString(bM(cS))))
2401- then throw(("You already staked one duck: " + jv.name))
2424+ let lE = toBase58String(bv)
2425+ let jA = bx(lE)
2426+ if (isDefined(getInteger(jA)))
2427+ then throw((("NFT " + jz.name) + " is already staked"))
2428+ else if (isDefined(getString(bN(cU))))
2429+ then throw(("You already staked one duck: " + jz.name))
24022430 else {
2403- let lj = bO(lz)
2404- let ci = getString(lj)
2405- let hO = bN(lz)
2406- let lA = getString(hO)
2407- let je = A(lz)
2408- let jf = aj(valueOrElse(getInteger(E(lz)), 0))
2409- let ky = valueOrElse(getInteger(je), jf)
2410- ([IntegerEntry(jw, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(lz), cS), StringEntry(bM(cS), lz)] ++ (if (isDefined(ci))
2431+ let ln = bP(lE)
2432+ let cj = getString(ln)
2433+ let hS = bO(lE)
2434+ let lF = getString(hS)
2435+ let ji = A(lE)
2436+ let jj = aj(valueOrElse(getInteger(E(lE)), 0))
2437+ let kC = valueOrElse(getInteger(ji), jj)
2438+ ([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aG, toBase58String(bv), cU), lastBlock.timestamp), StringEntry(bM(lE), cU), StringEntry(bN(cU), lE)] ++ (if (isDefined(cj))
24112439 then nil
2412- else ([StringEntry(lj, aM)] ++ (if (isDefined(lA))
2440+ else ([StringEntry(ln, aN)] ++ (if (isDefined(lF))
24132441 then nil
2414- else (([StringEntry(hO, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(je, ky)) ++ lp)))))
2442+ else (([StringEntry(hS, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ji, kC)) ++ lt)))))
24152443 }
24162444 }
24172445 }
24182446 }
24192447 }
24202448
24212449
24222450
2423-@Callable(gN)
2424-func unstakeDuck (lz) = {
2425- let lp = ll(gN)
2426- if ((size(gN.payments) != 0))
2451+@Callable(gR)
2452+func unstakeDuck (lE) = {
2453+ let lt = lp(gR)
2454+ if ((size(gR.payments) != 0))
24272455 then throw("No payments required")
24282456 else {
2429- let bu = fromBase58String(lz)
2430- let cS = toString(gN.caller)
2431- let jv = value(assetInfo(bu))
2432- let jw = bw(lz)
2433- if (!(isDefined(getInteger(jw))))
2434- then throw((("NFT " + jv.name) + " is not staked"))
2435- else if (!(isDefined(getString(bM(cS)))))
2436- then throw((("The duck " + jv.name) + " is not staked"))
2457+ let bv = fromBase58String(lE)
2458+ let cU = toString(gR.caller)
2459+ let jz = value(assetInfo(bv))
2460+ let jA = bx(lE)
2461+ if (!(isDefined(getInteger(jA))))
2462+ then throw((("NFT " + jz.name) + " is not staked"))
2463+ else if (!(isDefined(getString(bN(cU)))))
2464+ then throw((("The duck " + jz.name) + " is not staked"))
24372465 else {
2438- let jy = valueOrErrorMessage(getString(bL(lz)), (("NFT " + jv.name) + " is orphaned"))
2439- if ((jy != cS))
2466+ let jC = valueOrErrorMessage(getString(bM(lE)), (("NFT " + jz.name) + " is orphaned"))
2467+ if ((jC != cU))
24402468 then throw("Staked NFT is not yours")
2441- else if (kt(lz))
2469+ else if (kx(lE))
24422470 then throw("unstakeDuck_checkTournament")
2443- else if (ku(lz))
2471+ else if (ky(lE))
24442472 then throw("unstakeDuck_checkDelivery")
24452473 else {
2446- let je = A(lz)
2447- let jf = aj(valueOrElse(getInteger(E(lz)), 0))
2448- let av = valueOrElse(getInteger(je), jf)
2449- if ((jf > av))
2450- then throw((("Please heal your duck to " + toString(jf)) + "hp before unstaking"))
2451- else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(jw), DeleteEntry(je), DeleteEntry(bO(lz)), DeleteEntry(bL(lz)), DeleteEntry(bz(aG, lz, cS)), DeleteEntry(bM(cS))] ++ lp)
2474+ let ji = A(lE)
2475+ let jj = aj(valueOrElse(getInteger(E(lE)), 0))
2476+ let av = valueOrElse(getInteger(ji), jj)
2477+ if ((jj > av))
2478+ then throw((("Please heal your duck to " + toString(jj)) + "hp before unstaking"))
2479+ else ([ScriptTransfer(gR.caller, 1, bv), DeleteEntry(jA), DeleteEntry(ji), DeleteEntry(bP(lE)), DeleteEntry(bM(lE)), DeleteEntry(bA(aG, lE, cU)), DeleteEntry(bN(cU))] ++ lt)
24522480 }
24532481 }
24542482 }
24552483 }
24562484
24572485
24582486
2459-@Callable(gN)
2460-func claimRes (eL,lB) = {
2461- let lp = ll(gN)
2462- if ((size(gN.payments) != 0))
2487+@Callable(gR)
2488+func claimRes (eP,lG) = {
2489+ let lt = lp(gR)
2490+ if ((size(gR.payments) != 0))
24632491 then throw("No payments required")
24642492 else {
2465- let c = toString(gN.originCaller)
2466- let fm = jA(c, eL, eD, lB)
2467- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2468- $Tuple2(((((fm._1 ++ ki(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ lp), fm._3[bn])
2469- }
2470- }
2471-
2472-
2473-
2474-@Callable(gN)
2475-func claimResToWH (eL,lB) = {
2476- let lp = ll(gN)
2477- if ((size(gN.payments) != 0))
2493+ let c = toString(gR.originCaller)
2494+ let fq = jE(c, eP, eH, lG)
2495+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
2496+ $Tuple2(((((fq._1 ++ km(B, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._3[bo])
2497+ }
2498+ }
2499+
2500+
2501+
2502+@Callable(gR)
2503+func claimResToWH (eP,lG) = {
2504+ let lt = lp(gR)
2505+ if ((size(gR.payments) != 0))
24782506 then throw("No payments required")
24792507 else {
2480- let c = toString(gN.originCaller)
2481- let fm = jA(c, eL, eC, lB)
2482- $Tuple2(((((fm._1 ++ kj(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ lp), fm._5[be])
2483- }
2484- }
2485-
2486-
2487-
2488-@Callable(gN)
2489-func flight (iT,iU) = {
2490- let lp = lm(gN)
2491- if ((size(gN.payments) != 0))
2508+ let c = toString(gR.originCaller)
2509+ let fq = jE(c, eP, eG, lG)
2510+ $Tuple2(((((fq._1 ++ kn(c, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._5[bf])
2511+ }
2512+ }
2513+
2514+
2515+
2516+@Callable(gR)
2517+func flight (iX,iY) = {
2518+ let lt = lq(gR)
2519+ if ((size(gR.payments) != 0))
24922520 then throw("No payments required")
24932521 else {
2494- let bQ = toString(gN.caller)
2495- let hs = iS(bQ, iT, iU)
2496- let iY = hs._1
2497- let B = hs._2
2498- let lj = bO(B)
2499- let jt = valueOrElse(getString(lj), aM)
2500- let ja = hs._4
2501- if ((ja == jt))
2522+ let bR = toString(gR.caller)
2523+ let hw = iW(bR, iX, iY)
2524+ let jc = hw._1
2525+ let B = hw._2
2526+ let ln = bP(B)
2527+ let jx = valueOrElse(getString(ln), aN)
2528+ let je = hw._4
2529+ if ((je == jx))
25022530 then throw("You can't fly to the same location")
25032531 else {
2504- let cw = split(ja, "_")
2505- let lC = (cw[br] == "T")
2506- let lD = (cw[br] == "D")
2507- let gA = G(B)
2508- let lE = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2509- let lF = fn(lE, hs._5)
2510- let lG = lF._1
2511- let lH = lF._2
2512- let lI = if (!(cr(dl, jt)))
2513- then if (!(cp(ja)))
2514- then cu(jt, ja, 5)
2515- else if ((iY > 0))
2516- then $Tuple2(ja, iY)
2517- else $Tuple2(jt, 0)
2518- else if (ch(dl, jt))
2519- then if (!(ch(dl, ja)))
2532+ let cx = split(je, "_")
2533+ let lH = (cx[bs] == "T")
2534+ let lI = (cx[bs] == "D")
2535+ let gE = G(B)
2536+ let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,")
2537+ let lK = fr(lJ, hw._5)
2538+ let lL = lK._1
2539+ let lM = lK._2
2540+ let lN = if (!(cs(dn, jx)))
2541+ then if (!(cq(je)))
2542+ then cv(jx, je, 5)
2543+ else if ((jc > 0))
2544+ then $Tuple2(je, jc)
2545+ else $Tuple2(jx, 0)
2546+ else if (ci(dn, jx))
2547+ then if (!(ci(dn, je)))
25202548 then throw("Your duck is taking part in the tournament")
25212549 else {
2522- let kw = parseIntValue(cw[bs])
2523- let lJ = split(jt, "_")
2524- let cj = valueOrElse(getInteger(dl, bU), 0)
2525- if ((kw != (parseIntValue(lJ[bs]) + 1)))
2526- then cu(jt, ja, 7)
2527- else if ((iY > 0))
2550+ let kA = parseIntValue(cx[bt])
2551+ let lO = split(jx, "_")
2552+ let ck = valueOrElse(getInteger(dn, bV), 0)
2553+ if ((kA != (parseIntValue(lO[bt]) + 1)))
2554+ then cv(jx, je, 7)
2555+ else if ((jc > 0))
25282556 then {
2529- let lK = valueOrElse(getInteger(dl, bY(cj, B)), 0)
2530- let lL = if ((kw > lK))
2531- then invoke(dl, "saveDuckResult", [B, kw], nil)
2557+ let lP = valueOrElse(getInteger(dn, bZ(ck, B)), 0)
2558+ let lQ = if ((kA > lP))
2559+ then invoke(dn, "saveDuckResult", [B, kA], nil)
25322560 else unit
2533- if ((lL == lL))
2534- then $Tuple2(ja, iY)
2561+ if ((lQ == lQ))
2562+ then $Tuple2(je, jc)
25352563 else throw("Strict value is not equal to itself.")
25362564 }
2537- else $Tuple2(jt, 0)
2565+ else $Tuple2(jx, 0)
25382566 }
2539- else if (!(cm(jt)))
2567+ else if (!(cn(jx)))
25402568 then {
2541- let lM = dC(invoke(this, "autoExitDelivery", [B, iY, if (lD)
2569+ let lR = dE(invoke(this, "autoExitDelivery", [B, jc, if (lI)
25422570 then "10"
25432571 else "11", 0], nil))
2544- if ((lM == lM))
2545- then if (lD)
2546- then $Tuple2(lM, iY)
2547- else if ((iY > 0))
2548- then $Tuple2(ja, iY)
2549- else $Tuple2(lM, 0)
2572+ if ((lR == lR))
2573+ then if (lI)
2574+ then $Tuple2(lR, jc)
2575+ else if ((jc > 0))
2576+ then $Tuple2(je, jc)
2577+ else $Tuple2(lR, 0)
25502578 else throw("Strict value is not equal to itself.")
25512579 }
2552- else if (!(lD))
2580+ else if (!(lI))
25532581 then throw("Your duck is taking part in delivery")
2554- else if (!(cm(ja)))
2555- then cu(jt, ja, 13)
2582+ else if (!(cn(je)))
2583+ then cv(jx, je, 13)
25562584 else {
2557- let kw = parseIntValue(cw[bs])
2558- let lJ = split(jt, "_")
2559- if ((kw != (parseIntValue(lJ[bs]) + 1)))
2560- then cu(jt, ja, 14)
2561- else if (if ((iY > 0))
2562- then (1 > kw)
2585+ let kA = parseIntValue(cx[bt])
2586+ let lO = split(jx, "_")
2587+ if ((kA != (parseIntValue(lO[bt]) + 1)))
2588+ then cv(jx, je, 14)
2589+ else if (if ((jc > 0))
2590+ then (1 > kA)
25632591 else false)
2564- then $Tuple2(ja, iY)
2592+ then $Tuple2(je, jc)
25652593 else {
2566- let lM = dC(invoke(this, "autoExitDelivery", [B, iY, "15-17", kw], nil))
2567- if ((lM == lM))
2568- then $Tuple2(lM, iY)
2594+ let lR = dE(invoke(this, "autoExitDelivery", [B, jc, "15-17", kA], nil))
2595+ if ((lR == lR))
2596+ then $Tuple2(lR, jc)
25692597 else throw("Strict value is not equal to itself.")
25702598 }
25712599 }
2572- let lN = lI._1
2573- let lO = lI._2
2574- $Tuple2(((([StringEntry(lj, lN), StringEntry(gA, lG), IntegerEntry(A(B), lO)] ++ lp) ++ (if (lH)
2600+ let lS = lN._1
2601+ let lT = lN._2
2602+ $Tuple2(((([StringEntry(ln, lS), StringEntry(gE, lL), IntegerEntry(A(B), lT)] ++ lt) ++ (if (lM)
25752603 then [StringEntry(M(B), "0_0_0_0_0")]
2576- else nil)) ++ ki(B, if ((iY > 0))
2604+ else nil)) ++ km(B, if ((jc > 0))
25772605 then Y
2578- else Z)._1), hs._3)
2606+ else Z)._1), hw._3)
25792607 }
25802608 }
25812609 }
25822610
25832611
25842612
2585-@Callable(gN)
2586-func heal (lP,lQ,lR) = {
2587- let lp = ll(gN)
2588- if (if (if ((0 > lP))
2613+@Callable(gR)
2614+func heal (lU,lV,lW) = {
2615+ let lt = lp(gR)
2616+ if (if (if ((0 > lU))
25892617 then true
2590- else (0 > lQ))
2618+ else (0 > lV))
25912619 then true
2592- else (0 > lR))
2620+ else (0 > lW))
25932621 then throw("Quantity cannot be negative")
25942622 else {
2595- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2596- if (kt(B))
2623+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
2624+ if (kx(B))
25972625 then throw("heal_checkTournament")
2598- else if (ku(B))
2626+ else if (ky(B))
25992627 then throw("heal_checkDelivery")
26002628 else {
2601- let lS = [lP, lQ, lR]
2602- let je = A(B)
2603- let jf = aj(valueOrElse(getInteger(E(B)), 0))
2604- let lT = valueOrElse(getInteger(je), jf)
2605- if ((lT >= jf))
2606- then throw((("HP should be < " + toString(jf)) + " to heal"))
2629+ let lX = [lU, lV, lW]
2630+ let ji = A(B)
2631+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
2632+ let lY = valueOrElse(getInteger(ji), jj)
2633+ if ((lY >= jj))
2634+ then throw((("HP should be < " + toString(jj)) + " to heal"))
26072635 else {
2608- let hO = bN(B)
2609- let ir = hN(hO)
2610- let lU = if ((ir[bp] == ""))
2636+ let hS = bO(B)
2637+ let iv = hR(hS)
2638+ let lZ = if ((iv[bq] == ""))
26112639 then nil
2612- else split_4C(ir[bp], "_")
2613- func lV (eU,ct) = {
2614- let dG = eU._2
2615- let hj = if ((size(lU) > dG))
2616- then parseIntValue(lU[dG])
2640+ else split_4C(iv[bq], "_")
2641+ func ma (eY,cu) = {
2642+ let dI = eY._2
2643+ let hn = if ((size(lZ) > dI))
2644+ then parseIntValue(lZ[dI])
26172645 else 0
2618- if ((3 > dG))
2646+ if ((3 > dI))
26192647 then {
2620- let lW = lS[dG]
2621- if ((lW > hj))
2622- then throw(((("You have only " + toString(hj)) + " of ") + aT[dG]))
2623- else $Tuple3((eU._1 :+ toString((hj - lW))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * lW)))
2648+ let mb = lX[dI]
2649+ if ((mb > hn))
2650+ then throw(((("You have only " + toString(hn)) + " of ") + aU[dI]))
2651+ else $Tuple3((eY._1 :+ toString((hn - mb))), (dI + 1), (eY._3 + (parseIntValue(split(cu, "_")[ba]) * mb)))
26242652 }
2625- else $Tuple3((eU._1 :+ toString(hj)), (dG + 1), eU._3)
2653+ else $Tuple3((eY._1 :+ toString(hn)), (dI + 1), eY._3)
26262654 }
26272655
2628- let fm = {
2629- let eW = aX
2630- let eX = size(eW)
2631- let eY = $Tuple3(nil, 0, 0)
2632- func eZ (fa,fb) = if ((fb >= eX))
2633- then fa
2634- else lV(fa, eW[fb])
2635-
2636- func fc (fa,fb) = if ((fb >= eX))
2637- then fa
2656+ let fq = {
2657+ let fa = aY
2658+ let fb = size(fa)
2659+ let fc = $Tuple3(nil, 0, 0)
2660+ func fd (fe,ff) = if ((ff >= fb))
2661+ then fe
2662+ else ma(fe, fa[ff])
2663+
2664+ func fg (fe,ff) = if ((ff >= fb))
2665+ then fe
26382666 else throw("List size exceeds 50")
26392667
2640- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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)
2668+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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)
26412669 }
2642- let lX = min([jf, (lT + fm._3)])
2643- $Tuple2((([IntegerEntry(je, lX), StringEntry(hO, makeString_2C([ir[bm], ir[bn], ir[bo], makeString(fm._1, "_")], ":"))] ++ lp) ++ ki(B, (ag * ((lP + lQ) + lR)))._1), lX)
2670+ let mc = min([jj, (lY + fq._3)])
2671+ $Tuple2((([IntegerEntry(ji, mc), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], makeString(fq._1, "_")], ":"))] ++ lt) ++ km(B, (ag * ((lU + lV) + lW)))._1), mc)
26442672 }
26452673 }
26462674 }
26472675 }
26482676
26492677
26502678
2651-@Callable(gN)
2679+@Callable(gR)
26522680 func healES () = {
2653- let lp = ll(gN)
2654- if ((size(gN.payments) != 1))
2681+ let lt = lp(gR)
2682+ if ((size(gR.payments) != 1))
26552683 then throw("Exactly one payment required")
26562684 else {
2657- let lq = value(gN.payments[0])
2658- if ((lq.assetId != cC))
2685+ let lu = value(gR.payments[0])
2686+ if ((lu.assetId != cE))
26592687 then throw("Allowed USDT payment only!")
26602688 else {
2661- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2662- if (kt(B))
2689+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
2690+ if (kx(B))
26632691 then throw("healES_checkTournament")
2664- else if (ku(B))
2692+ else if (ky(B))
26652693 then throw("healES_checkDelivery")
26662694 else {
2667- let je = A(B)
2668- let jf = aj(valueOrElse(getInteger(E(B)), 0))
2669- let lT = valueOrElse(getInteger(je), jf)
2670- if ((lT > 0))
2695+ let ji = A(B)
2696+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
2697+ let lY = valueOrElse(getInteger(ji), jj)
2698+ if ((lY > 0))
26712699 then throw("HP should be 0 to call Emergency Service")
26722700 else {
2673- let hO = bN(B)
2674- let ir = hN(hO)
2675- let lU = if ((ir[bp] == ""))
2701+ let hS = bO(B)
2702+ let iv = hR(hS)
2703+ let lZ = if ((iv[bq] == ""))
26762704 then nil
2677- else split_4C(ir[bp], "_")
2678- let lY = if ((size(lU) > 0))
2679- then parseIntValue(lU[0])
2705+ else split_4C(iv[bq], "_")
2706+ let md = if ((size(lZ) > 0))
2707+ then parseIntValue(lZ[0])
26802708 else 0
2681- let lZ = if ((size(lU) > 1))
2682- then parseIntValue(lU[1])
2709+ let me = if ((size(lZ) > 1))
2710+ then parseIntValue(lZ[1])
26832711 else 0
2684- let ma = if ((size(lU) > 2))
2685- then parseIntValue(lU[2])
2712+ let mf = if ((size(lZ) > 2))
2713+ then parseIntValue(lZ[2])
26862714 else 0
2687- if (if (if ((lY > 0))
2715+ if (if (if ((md > 0))
26882716 then true
2689- else (lZ > 0))
2717+ else (me > 0))
26902718 then true
2691- else (ma > 0))
2719+ else (mf > 0))
26922720 then throw("You have to use own Medical Kit")
26932721 else {
2694- let mb = getString(di, bR())
2695- let mc = if (isDefined(mb))
2696- then split_4C(value(mb), "_")
2722+ let mg = getString(dk, bS())
2723+ let mh = if (isDefined(mg))
2724+ then split_4C(value(mg), "_")
26972725 else nil
2698- let md = if ((size(mc) > 0))
2699- then parseIntValue(mc[0])
2726+ let mi = if ((size(mh) > 0))
2727+ then parseIntValue(mh[0])
27002728 else 0
2701- if ((0 >= md))
2729+ if ((0 >= mi))
27022730 then throw("There are no Medical Kits L1 at Emergency Service storage")
27032731 else {
2704- let lX = (lT + parseIntValue(split(aX[0], "_")[aZ]))
2705- let me = makeString([toString((md - 1)), removeByIndex(mc, 0)], "_")
2706- let ct = split(aX[0], "_")
2707- let mf = cs(ct)
2708- let mg = fraction((mf * aO), aN, (cK * bc))
2709- if ((lq.amount != mg))
2710- then throw(("Payment attached should be " + toString(mg)))
2732+ let mc = (lY + parseIntValue(split(aY[0], "_")[ba]))
2733+ let mj = makeString([toString((mi - 1)), removeByIndex(mh, 0)], "_")
2734+ let cu = split(aY[0], "_")
2735+ let mk = ct(cu)
2736+ let ml = fraction((mk * aP), aO, (cM * bd))
2737+ if ((lu.amount != ml))
2738+ then throw(("Payment attached should be " + toString(ml)))
27112739 else {
2712- let fm = dC(invoke(di, "updateEsStorage", [me], [AttachedPayment(cC, mg)]))
2713- $Tuple2(((lp :+ IntegerEntry(je, lX)) ++ ki(B, aa)._1), fm)
2740+ let fq = dE(invoke(dk, "updateEsStorage", [mj], [AttachedPayment(cE, ml)]))
2741+ $Tuple2(((lt :+ IntegerEntry(ji, mc)) ++ km(B, aa)._1), fq)
27142742 }
27152743 }
27162744 }
27172745 }
27182746 }
27192747 }
27202748 }
27212749 }
27222750
27232751
27242752
2725-@Callable(gN)
2726-func updateBackpack (B,mh) = if ((gN.caller != di))
2753+@Callable(gR)
2754+func updateBackpack (B,mm) = if ((gR.caller != dk))
27272755 then throw("permission denied")
2728- else $Tuple2([StringEntry(bN(B), mh)], mh)
2729-
2730-
2731-
2732-@Callable(gN)
2756+ else $Tuple2([StringEntry(bO(B), mm)], mm)
2757+
2758+
2759+
2760+@Callable(gR)
27332761 func commitForRandom () = {
2734- let lp = ll(gN)
2735- let mi = (height + dv)
2736- let c = toString(gN.caller)
2737- $Tuple2(([IntegerEntry(dw(c), mi)] ++ lp), mi)
2738- }
2739-
2740-
2741-
2742-@Callable(gN)
2762+ let lt = lp(gR)
2763+ let mn = (height + dx)
2764+ let c = toString(gR.caller)
2765+ $Tuple2(([IntegerEntry(dy(c), mn)] ++ lt), mn)
2766+ }
2767+
2768+
2769+
2770+@Callable(gR)
27432771 func buySLand () = {
2744- let lp = ll(gN)
2745- if ((size(gN.payments) != 1))
2772+ let lt = lp(gR)
2773+ if ((size(gR.payments) != 1))
27462774 then throw("Exactly one payment required")
27472775 else {
2748- let lq = value(gN.payments[0])
2749- if ((lq.assetId != cC))
2776+ let lu = value(gR.payments[0])
2777+ if ((lu.assetId != cE))
27502778 then throw("Allowed USDT payment only!")
2751- else if ((lq.amount != ej))
2752- then throw(("Payment attached should be " + toString(ej)))
2779+ else if ((lu.amount != el))
2780+ then throw(("Payment attached should be " + toString(el)))
27532781 else {
2754- let fm = iL(gN.caller, gN.transactionId)
2755- let mj = dF(invoke(dm, "burnAcres", [ek], nil))
2756- $Tuple2((((fm._1 :+ ScriptTransfer(di, lq.amount, cC)) ++ kj(toString(gN.caller), ac)._1) ++ lp), $Tuple2(fm._2._1, mj))
2782+ let fq = iP(gR.caller, gR.transactionId)
2783+ let mo = dH(invoke(do, "burnAcres", [en], nil))
2784+ $Tuple2((((fq._1 :+ ScriptTransfer(dk, lu.amount, cE)) ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo))
27572785 }
27582786 }
27592787 }
27602788
27612789
27622790
2763-@Callable(gN)
2764-func expedition (iT,iU) = {
2765- let lp = ll(gN)
2766- if ((size(gN.payments) != 0))
2791+@Callable(gR)
2792+func expedition (iX,iY) = {
2793+ let lt = lp(gR)
2794+ if ((size(gR.payments) != 0))
27672795 then throw("No payments required")
27682796 else {
2769- let bQ = toString(gN.caller)
2770- let hs = iS(bQ, iT, iU)
2771- let B = hs._2
2772- let je = A(B)
2773- let hO = bN(B)
2774- let ir = hN(hO)
2775- let jT = split(ir[bo], "_")
2776- let jV = makeString(fg(true, jT, ei), "_")
2777- let gA = G(B)
2778- let lE = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2779- let mk = fn(lE, hs._5)
2780- let lG = mk._1
2781- let lH = mk._2
2782- let ml = iL(gN.caller, gN.transactionId)
2783- let iR = ml._2._1
2784- let fm = if ((0 >= hs._1))
2785- then $Tuple3([IntegerEntry(je, 0), StringEntry(gA, lG)], "", 0)
2786- else $Tuple3((ml._1 ++ (if (lH)
2797+ let bR = toString(gR.caller)
2798+ let hw = iW(bR, iX, iY)
2799+ let B = hw._2
2800+ let ji = A(B)
2801+ let hS = bO(B)
2802+ let iv = hR(hS)
2803+ let jX = split(iv[bp], "_")
2804+ let jZ = makeString(fk(true, jX, ek), "_")
2805+ let gE = G(B)
2806+ let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,")
2807+ let mp = fr(lJ, hw._5)
2808+ let lL = mp._1
2809+ let lM = mp._2
2810+ let mq = iP(gR.caller, gR.transactionId)
2811+ let iV = mq._2._1
2812+ let fq = if ((0 >= hw._1))
2813+ then $Tuple3([IntegerEntry(ji, 0), StringEntry(gE, lL)], "", 0)
2814+ else $Tuple3((mq._1 ++ (if (lM)
27872815 then [StringEntry(M(B), "0_0_0_0_0")]
2788- else ((((nil :+ StringEntry(bO(B), makeString([ml._2._2, "L", iR], "_"))) :+ IntegerEntry(je, hs._1)) :+ StringEntry(gA, lG)) :+ StringEntry(hO, makeString([ir[bm], ir[bn], jV, ir[bp]], ":"))))), iR, hs._3)
2789- if (kt(B))
2816+ else ((((nil :+ StringEntry(bP(B), makeString([mq._2._2, "L", iV], "_"))) :+ IntegerEntry(ji, hw._1)) :+ StringEntry(gE, lL)) :+ StringEntry(hS, makeString([iv[bn], iv[bo], jZ, iv[bq]], ":"))))), iV, hw._3)
2817+ if (kx(B))
27902818 then throw("expedition_checkTournament")
2791- else if (ku(B))
2819+ else if (ky(B))
27922820 then throw("expedition_checkDelivery")
27932821 else {
2794- let mj = dF(invoke(dm, "burnAcres", [ek], nil))
2795- $Tuple2(((fm._1 ++ ki(B, ac)._1) ++ lp), $Tuple3(fm._2, fm._3, mj))
2822+ let mo = dH(invoke(do, "burnAcres", [en], nil))
2823+ $Tuple2(((fq._1 ++ km(B, ac)._1) ++ lt), $Tuple3(fq._2, fq._3, mo))
27962824 }
27972825 }
27982826 }
27992827
28002828
28012829
2802-@Callable(gN)
2830+@Callable(gR)
28032831 func buySLandForAcres () = {
2804- let lp = ll(gN)
2805- if ((size(gN.payments) != 1))
2832+ let lt = lp(gR)
2833+ if ((size(gR.payments) != 1))
28062834 then throw("exactly 1 payment must be attached")
28072835 else {
2808- let lq = gN.payments[0]
2809- let ft = lq.amount
2810- if (if (!(isDefined(lq.assetId)))
2836+ let lu = gR.payments[0]
2837+ let fx = lu.amount
2838+ if (if (!(isDefined(lu.assetId)))
28112839 then true
2812- else (value(lq.assetId) != du))
2840+ else (value(lu.assetId) != dw))
28132841 then throw("ACRES payments only!")
2814- else if ((ft != ek))
2815- then throw(("Payment attached should be " + toString(ek)))
2842+ else if ((fx != en))
2843+ then throw(("Payment attached should be " + toString(en)))
28162844 else {
2817- let fm = iL(gN.caller, gN.transactionId)
2818- let mj = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)]))
2819- $Tuple2(((fm._1 ++ kj(toString(gN.caller), ac)._1) ++ lp), $Tuple2(fm._2._1, mj))
2845+ let fq = iP(gR.caller, gR.transactionId)
2846+ let mo = dH(invoke(do, "burnAcres", [en], [AttachedPayment(dw, fx)]))
2847+ $Tuple2(((fq._1 ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo))
28202848 }
28212849 }
28222850 }
28232851
28242852
28252853
2826-@Callable(gN)
2854+@Callable(gR)
28272855 func upgradeInfra (Q) = {
2828- let lp = ll(gN)
2829- if ((size(gN.payments) != 0))
2856+ let lt = lp(gR)
2857+ if ((size(gR.payments) != 0))
28302858 then throw("No payments required")
28312859 else {
2832- let fm = jN(true, gN.caller, 0, Q)
2833- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2834- $Tuple2(((fm._1 ++ lp) ++ ki(B, fraction(ad, fm._3, cK))._1), fm._2)
2835- }
2836- }
2837-
2838-
2839-
2840-@Callable(gN)
2841-func activateArtifact (mm,mn) = {
2842- let lp = ll(gN)
2843- if ((size(gN.payments) != 0))
2860+ let fq = jR(true, gR.caller, 0, Q)
2861+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
2862+ $Tuple2(((fq._1 ++ lt) ++ km(B, fraction(ad, fq._3, cM))._1), fq._2)
2863+ }
2864+ }
2865+
2866+
2867+
2868+@Callable(gR)
2869+func activateArtifact (mr,ms) = {
2870+ let lt = lp(gR)
2871+ if ((size(gR.payments) != 0))
28442872 then throw("No payments required")
28452873 else {
2846- let c = toString(gN.caller)
2847- let fm = {
2848- let cD = mm
2849- if (("PRESALE" == cD))
2850- then kr(c, mn)
2851- else if (("ONBOARD" == cD))
2852- then kk(c)
2874+ let c = toString(gR.caller)
2875+ let fq = {
2876+ let cF = mr
2877+ if (("PRESALE" == cF))
2878+ then kv(c, ms)
2879+ else if (("ONBOARD" == cF))
2880+ then ko(c)
28532881 else throw("Unknown artifact")
28542882 }
2855- (fm ++ lp)
2856- }
2857- }
2858-
2859-
2860-
2861-@Callable(gN)
2862-func mergeLands (kI) = {
2863- let lp = ll(gN)
2864- if ((size(gN.payments) != 0))
2883+ (fq ++ lt)
2884+ }
2885+ }
2886+
2887+
2888+
2889+@Callable(gR)
2890+func mergeLands (kM) = {
2891+ let lt = lp(gR)
2892+ if ((size(gR.payments) != 0))
28652893 then throw("No payments required")
28662894 else {
2867- let fm = lg(toString(gN.caller), kI)
2868- $Tuple2(((fm._1 ++ lp) ++ kj(toString(gN.caller), ae)._1), fm._2)
2869- }
2870- }
2871-
2872-
2873-
2874-@Callable(gN)
2875-func cargoExchange (mo,Q) = {
2876- let lp = ll(gN)
2877- if ((size(gN.payments) != 0))
2895+ let fq = lk(toString(gR.caller), kM)
2896+ $Tuple2(((fq._1 ++ lt) ++ kn(toString(gR.caller), ae)._1), fq._2)
2897+ }
2898+ }
2899+
2900+
2901+
2902+@Callable(gR)
2903+func cargoExchange (mt,Q) = {
2904+ let lt = lp(gR)
2905+ if ((size(gR.payments) != 0))
28782906 then throw("No payments required")
28792907 else {
2880- let iq = split_4C(mo, ":")
2881- let c = toString(gN.originCaller)
2882- let jv = value(assetInfo(fromBase58String(Q)))
2883- let jw = bw(Q)
2884- if (!(isDefined(getInteger(jw))))
2885- then throw((jv.name + " is not staked"))
2908+ let iu = split_4C(mt, ":")
2909+ let c = toString(gR.originCaller)
2910+ let jz = value(assetInfo(fromBase58String(Q)))
2911+ let jA = bx(Q)
2912+ if (!(isDefined(getInteger(jA))))
2913+ then throw((jz.name + " is not staked"))
28862914 else {
2887- let jy = valueOrErrorMessage(getString(bt(Q)), (("NFT " + jv.name) + " is orphaned"))
2888- if ((jy != c))
2915+ let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned"))
2916+ if ((jC != c))
28892917 then throw((aF + " is not yours"))
28902918 else {
2891- let ic = (dK(split(jv.description, "_")[do]) / cL)
2892- let id = valueOrElse(getInteger(bD(Q)), 0)
2893- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2894- let jt = valueOrElse(getString(bO(B)), aM)
2895- let ck = split(value(jt), "_")
2896- if ((ck[br] != "L"))
2897- then throw((("Duck location type is " + ck[br]) + ", but should be L"))
2898- else if ((ck[bs] != Q))
2919+ let ig = (dM(split(jz.description, "_")[dq]) / cN)
2920+ let ih = valueOrElse(getInteger(bE(Q)), 0)
2921+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
2922+ let jx = valueOrElse(getString(bP(B)), aN)
2923+ let cl = split(value(jx), "_")
2924+ if ((cl[bs] != "L"))
2925+ then throw((("Duck location type is " + cl[bs]) + ", but should be L"))
2926+ else if ((cl[bt] != Q))
28992927 then throw(("Duck should be on the land " + Q))
29002928 else {
2901- let ib = bC(Q)
2902- let hS = ia(ib, ic, id)
2903- let hO = bN(B)
2904- let ir = hN(hO)
2905- let fm = ip(iq, hS, ir)
2906- let ij = split(hS[bh], "_")
2907- let jK = (parseIntValue(ij[bj]) + fm._7)
2908- let jL = (parseIntValue(ij[bk]) - fm._7)
2909- ([StringEntry(hO, makeString_2C([ir[bm], fm._4, fm._5, fm._6], ":")), StringEntry(ib, makeString_2C([hS[bd], fm._1, fm._2, fm._3, makeString([ij[bi], toString(jK), toString(jL), ij[bl]], "_")], ":"))] ++ lp)
2929+ let if = bD(Q)
2930+ let hW = ie(if, ig, ih)
2931+ let hS = bO(B)
2932+ let iv = hR(hS)
2933+ let fq = it(iu, hW, iv)
2934+ let in = split(hW[bi], "_")
2935+ let jO = (parseIntValue(in[bk]) + fq._7)
2936+ let jP = (parseIntValue(in[bl]) - fq._7)
2937+ ([StringEntry(hS, makeString_2C([iv[bn], fq._4, fq._5, fq._6], ":")), StringEntry(if, makeString_2C([hW[be], fq._1, fq._2, fq._3, makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")], ":"))] ++ lt)
29102938 }
29112939 }
29122940 }
29132941 }
29142942 }
29152943
29162944
29172945
2918-@Callable(gN)
2919-func saveWarehouse (if,Q) = if ((gN.caller != di))
2946+@Callable(gR)
2947+func saveWarehouse (ij,Q) = if ((gR.caller != dk))
29202948 then throw("Access denied")
29212949 else {
2922- let ib = bC(Q)
2923- let ig = split_4C(if, ":")
2924- if ((size(ig) != 5))
2950+ let if = bD(Q)
2951+ let ik = split_4C(ij, ":")
2952+ if ((size(ik) != 5))
29252953 then throw("warehouse string should contain 4 ':' separators")
29262954 else {
2927- let mp = split(ig[bh], "_")[bi]
2928- let jK = hR(ig)
2929- let mq = hP(ig[bd])
2930- let jL = ((mq - parseIntValue(mp)) - jK)
2931- if ((0 > jL))
2955+ let mu = split(ik[bi], "_")[bj]
2956+ let jO = hV(ik)
2957+ let mv = hT(ik[be])
2958+ let jP = ((mv - parseIntValue(mu)) - jO)
2959+ if ((0 > jP))
29322960 then throw("Operation leads to negative free warehouse space")
29332961 else {
2934- let mr = makeString_2C([ig[bd], ig[be], ig[bf], ig[bg], makeString([mp, toString(jK), toString(jL), toString(mq)], "_")], ":")
2935- $Tuple2([StringEntry(ib, mr)], mr)
2962+ let mw = makeString_2C([ik[be], ik[bf], ik[bg], ik[bh], makeString([mu, toString(jO), toString(jP), toString(mv)], "_")], ":")
2963+ $Tuple2([StringEntry(if, mw)], mw)
29362964 }
29372965 }
29382966 }
29392967
29402968
29412969
2942-@Callable(gN)
2943-func setCustomName (bu,kS,by) = {
2944- let lp = ll(gN)
2945- if ((size(gN.payments) != 1))
2970+@Callable(gR)
2971+func setCustomName (bv,kW,bz) = {
2972+ let lt = lp(gR)
2973+ if ((size(gR.payments) != 1))
29462974 then throw("Exactly one payment required")
29472975 else {
2948- let lq = value(gN.payments[0])
2949- if ((lq.assetId != cC))
2976+ let lu = value(gR.payments[0])
2977+ if ((lu.assetId != cE))
29502978 then throw("Allowed USDT payment only!")
2951- else if ((lq.amount != ef))
2952- then throw(("Payment should be " + toString(ef)))
2953- else if (contains(kS, "__"))
2954- then throw(("Name should not contain '__': " + kS))
2955- else if ((size(kS) > eg))
2956- then throw(("Name too long, maxLength=" + toString(eg)))
2979+ else if ((lu.amount != eh))
2980+ then throw(("Payment should be " + toString(eh)))
2981+ else if (contains(kW, "__"))
2982+ then throw(("Name should not contain '__': " + kW))
2983+ else if ((size(kW) > ei))
2984+ then throw(("Name too long, maxLength=" + toString(ei)))
29572985 else {
2958- let c = toString(gN.originCaller)
2959- let ms = {
2960- let cD = by
2961- if (("ACCOUNT" == cD))
2986+ let c = toString(gR.originCaller)
2987+ let mx = {
2988+ let cF = bz
2989+ if (("ACCOUNT" == cF))
29622990 then {
2963- let mt = eA(kS)
2964- let mu = getString(mt)
2965- if (isDefined(mu))
2966- then throw(("Name already registered: " + kS))
2991+ let my = eD(kW)
2992+ let mz = getString(my)
2993+ if (isDefined(mz))
2994+ then throw(("Name already registered: " + kW))
29672995 else {
2968- let mv = bG(c)
2969- let mw = getString(mv)
2970- let mx = if (isDefined(mw))
2971- then [DeleteEntry(eA(value(mw)))]
2996+ let mA = bH(c)
2997+ let mB = getString(mA)
2998+ let mC = if (isDefined(mB))
2999+ then [DeleteEntry(eD(value(mB)))]
29723000 else nil
2973- (((mx :+ StringEntry(mv, kS)) :+ StringEntry(mt, c)) ++ kj(c, ab)._1)
3001+ (((mC :+ StringEntry(mA, kW)) :+ StringEntry(my, c)) ++ kn(c, ab)._1)
29743002 }
29753003 }
2976- else if (("LAND" == cD))
3004+ else if (("LAND" == cF))
29773005 then {
2978- let jv = value(assetInfo(fromBase58String(bu)))
2979- let jw = bw(bu)
2980- if (!(isDefined(getInteger(jw))))
2981- then throw((jv.name + " is not staked"))
3006+ let jz = value(assetInfo(fromBase58String(bv)))
3007+ let jA = bx(bv)
3008+ if (!(isDefined(getInteger(jA))))
3009+ then throw((jz.name + " is not staked"))
29823010 else {
2983- let jy = valueOrErrorMessage(getString(bt(bu)), (("NFT " + jv.name) + " is orphaned"))
2984- if ((jy != c))
3011+ let jC = valueOrErrorMessage(getString(bu(bv)), (("NFT " + jz.name) + " is orphaned"))
3012+ if ((jC != c))
29853013 then throw((aF + " is not yours"))
29863014 else {
2987- let mt = et(kS)
2988- let mu = getString(mt)
2989- if (isDefined(mu))
2990- then throw(("Name already registered: " + kS))
3015+ let my = ew(kW)
3016+ let mz = getString(my)
3017+ if (isDefined(mz))
3018+ then throw(("Name already registered: " + kW))
29913019 else {
2992- let my = bv(bu)
2993- let mw = getString(my)
2994- let mx = if (isDefined(mw))
2995- then [DeleteEntry(et(value(mw)))]
3020+ let mD = bw(bv)
3021+ let mB = getString(mD)
3022+ let mC = if (isDefined(mB))
3023+ then [DeleteEntry(ew(value(mB)))]
29963024 else nil
2997- (((mx :+ StringEntry(my, kS)) :+ StringEntry(mt, bu)) ++ kj(c, ab)._1)
3025+ (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ kn(c, ab)._1)
29983026 }
29993027 }
30003028 }
30013029 }
3002- else if (("DUCK" == cD))
3030+ else if (("DUCK" == cF))
30033031 then {
3004- let jv = value(assetInfo(fromBase58String(bu)))
3005- let jw = bw(bu)
3006- if (if (!(isDefined(getInteger(jw))))
3032+ let jz = value(assetInfo(fromBase58String(bv)))
3033+ let jA = bx(bv)
3034+ if (if (!(isDefined(getInteger(jA))))
30073035 then true
3008- else !(isDefined(getString(bM(c)))))
3009- then throw((jv.name + " is not staked"))
3036+ else !(isDefined(getString(bN(c)))))
3037+ then throw((jz.name + " is not staked"))
30103038 else {
3011- let jy = valueOrErrorMessage(getString(bL(bu)), (("NFT " + jv.name) + " is orphaned"))
3012- if ((jy != c))
3039+ let jC = valueOrErrorMessage(getString(bM(bv)), (("NFT " + jz.name) + " is orphaned"))
3040+ if ((jC != c))
30133041 then throw((aG + " is not yours"))
30143042 else {
3015- let mt = ez(kS)
3016- let mu = getString(mt)
3017- if (isDefined(mu))
3018- then throw(("Name already registered: " + kS))
3043+ let my = eC(kW)
3044+ let mz = getString(my)
3045+ if (isDefined(mz))
3046+ then throw(("Name already registered: " + kW))
30193047 else {
3020- let my = bF(bu)
3021- let mw = getString(my)
3022- let mx = if (isDefined(mw))
3023- then [DeleteEntry(ez(value(mw)))]
3048+ let mD = bG(bv)
3049+ let mB = getString(mD)
3050+ let mC = if (isDefined(mB))
3051+ then [DeleteEntry(eC(value(mB)))]
30243052 else nil
3025- (((mx :+ StringEntry(my, kS)) :+ StringEntry(mt, bu)) ++ ki(bu, ab)._1)
3053+ (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ km(bv, ab)._1)
30263054 }
30273055 }
30283056 }
30293057 }
30303058 else throw("Unknown entity type")
30313059 }
3032- $Tuple2(((ms :+ ScriptTransfer(di, lq.amount, cC)) ++ lp), 0)
3060+ $Tuple2(((mx :+ ScriptTransfer(dk, lu.amount, cE)) ++ lt), 0)
30333061 }
30343062 }
30353063 }
30363064
30373065
30383066
3039-@Callable(gN)
3040-func setReferrals (mz,mA) = if ((gN.callerPublicKey != ec))
3067+@Callable(gR)
3068+func setReferrals (mE,mF) = if ((gR.callerPublicKey != ee))
30413069 then throw("Permission denied")
30423070 else {
3043- let lp = ll(gN)
3044- if ((size(gN.payments) != 0))
3071+ let lt = lp(gR)
3072+ if ((size(gR.payments) != 0))
30453073 then throw("No payments required")
3046- else if (!(isDefined(addressFromString(mz))))
3047- then throw(("Invalid address: " + mz))
3048- else if (!(isDefined(addressFromString(mA))))
3049- then throw(("Invalid address: " + mA))
3074+ else if (!(isDefined(addressFromString(mE))))
3075+ then throw(("Invalid address: " + mE))
3076+ else if (!(isDefined(addressFromString(mF))))
3077+ then throw(("Invalid address: " + mF))
30503078 else {
3051- let mB = eB()
3052- let mC = getString(mB)
3053- let mD = if (isDefined(mC))
3054- then split_4C(value(mC), "_")
3079+ let mG = eE()
3080+ let mH = getString(mG)
3081+ let mI = if (isDefined(mH))
3082+ then split_4C(value(mH), "_")
30553083 else nil
3056- if (containsElement(mD, mA))
3057- then throw((mA + " is not newbie (already has referrals)"))
3084+ if (containsElement(mI, mF))
3085+ then throw((mF + " is not newbie (already has referrals)"))
30583086 else {
3059- let kl = bH(mA)
3060- let km = getString(kl)
3061- if (if (isDefined(km))
3062- then isDefined(addressFromString(value(km)))
3087+ let kp = bI(mF)
3088+ let kq = getString(kp)
3089+ if (if (isDefined(kq))
3090+ then isDefined(addressFromString(value(kq)))
30633091 else false)
3064- then throw(((mA + " already has refBy: ") + value(km)))
3092+ then throw(((mF + " already has refBy: ") + value(kq)))
30653093 else {
3066- let mE = bK(mz)
3067- let mF = getString(mE)
3068- let mG = if (isDefined(mF))
3069- then split_4C(value(mF), "_")
3094+ let mJ = bL(mE)
3095+ let mK = getString(mJ)
3096+ let mL = if (isDefined(mK))
3097+ then split_4C(value(mK), "_")
30703098 else nil
3071- if (containsElement(mG, mA))
3072- then throw((((mz + " already contains ") + mA) + " within referrals"))
3099+ if (containsElement(mL, mF))
3100+ then throw((((mE + " already contains ") + mF) + " within referrals"))
30733101 else {
3074- let mH = makeString_2C((mG :+ mA), "_")
3075- let mI = if (containsElement(mD, mz))
3076- then value(mC)
3077- else makeString_2C((mD :+ mz), "_")
3078- $Tuple2(([StringEntry(kl, mz), StringEntry(mE, mH), StringEntry(mB, mI)] ++ lp), 0)
3102+ let mM = makeString_2C((mL :+ mF), "_")
3103+ let mN = if (containsElement(mI, mE))
3104+ then value(mH)
3105+ else makeString_2C((mI :+ mE), "_")
3106+ $Tuple2(([StringEntry(kp, mE), StringEntry(mJ, mM), StringEntry(mG, mN)] ++ lt), 0)
30793107 }
30803108 }
30813109 }
30823110 }
30833111 }
30843112
30853113
30863114
3087-@Callable(gN)
3088-func distributePoints (mJ,mK,mL,mM,mN) = {
3089- let lp = ll(gN)
3090- if ((size(gN.payments) != 0))
3115+@Callable(gR)
3116+func distributePoints (mO,mP,mQ,mR,mS) = {
3117+ let lt = lp(gR)
3118+ if ((size(gR.payments) != 0))
30913119 then throw("No payments required")
30923120 else {
3093- let c = toString(gN.originCaller)
3094- let mO = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil))
3095- let mP = dF(mO[1])
3096- let mQ = if ((0 >= mP))
3121+ let c = toString(gR.originCaller)
3122+ let mT = dJ(invoke(dm, "checkWlgXpREADONLY", [c], nil))
3123+ let mU = dH(mT[1])
3124+ let mV = if ((0 >= mU))
30973125 then $Tuple2(0, nil)
30983126 else {
3099- let kg = dF(invoke(dk, "takeWlgXp", [c], nil))
3100- if ((kg == kg))
3101- then $Tuple2(mP, [IntegerEntry(I(c), dF(mO[0])), IntegerEntry(H(c), dF(mO[2]))])
3127+ let kk = dH(invoke(dm, "takeWlgXp", [c], nil))
3128+ if ((kk == kk))
3129+ then $Tuple2(mU, [IntegerEntry(I(c), dH(mT[0])), IntegerEntry(H(c), dH(mT[2]))])
31023130 else throw("Strict value is not equal to itself.")
31033131 }
3104- let mR = mQ._1
3105- let mS = mQ._2
3106- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3107- let mT = J(c)
3108- let mU = (valueOrElse(getInteger(mT), 0) + mR)
3109- let mV = F(B)
3110- let mW = valueOrElse(getInteger(mV), 0)
3111- let mX = (mU + mW)
3112- let mY = ((((mJ + mK) + mL) + mM) + mN)
3113- if ((mY > mX))
3114- then throw((("There are only " + toString(mX)) + " free points to distribute"))
3132+ let mW = mV._1
3133+ let mX = mV._2
3134+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
3135+ let mY = J(c)
3136+ let mZ = (valueOrElse(getInteger(mY), 0) + mW)
3137+ let na = F(B)
3138+ let nb = valueOrElse(getInteger(na), 0)
3139+ let nc = (mZ + nb)
3140+ let nd = ((((mO + mP) + mQ) + mR) + mS)
3141+ if ((nd > nc))
3142+ then throw((("There are only " + toString(nc)) + " free points to distribute"))
31153143 else {
3116- let mZ = C(B)
3117- let at = split(valueOrElse(getString(mZ), "0_0_0_0_0"), "_")
3118- let na = (mU - mY)
3119- $Tuple2((([IntegerEntry(mT, if ((0 > na))
3144+ let ne = C(B)
3145+ let at = split(valueOrElse(getString(ne), "0_0_0_0_0"), "_")
3146+ let nf = (mZ - nd)
3147+ $Tuple2((([IntegerEntry(mY, if ((0 > nf))
31203148 then 0
3121- else na), IntegerEntry(mV, if ((0 > na))
3122- then (mW + na)
3123- else mW), StringEntry(mZ, makeString([toString((parseIntValue(at[l]) + mJ)), toString((parseIntValue(at[m]) + mK)), toString((parseIntValue(at[n]) + mL)), toString((parseIntValue(at[o]) + mM)), toString((parseIntValue(at[p]) + mN))], "_"))] ++ lp) ++ mS), 0)
3149+ else nf), IntegerEntry(na, if ((0 > nf))
3150+ then (nb + nf)
3151+ else nb), StringEntry(ne, makeString([toString((parseIntValue(at[l]) + mO)), toString((parseIntValue(at[m]) + mP)), toString((parseIntValue(at[n]) + mQ)), toString((parseIntValue(at[o]) + mR)), toString((parseIntValue(at[p]) + mS))], "_"))] ++ lt) ++ mX), 0)
31243152 }
31253153 }
31263154 }
31273155
31283156
31293157
3130-@Callable(gN)
3131-func splitByGlobalWeightsREADONLY (eL) = $Tuple2(nil, fd(eL))
3132-
3133-
3134-
3135-@Callable(gN)
3136-func splitByGlobalAndLocalWeightsREADONLY (nb,nc,gQ) = {
3137- let gJ = gP(gQ)
3138- $Tuple2(nil, $Tuple2(fd(nb), eO(nc, gJ)))
3139- }
3140-
3141-
3142-
3143-@Callable(gN)
3144-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hN(bN(B)), ":"))
3145-
3146-
3147-
3148-@Callable(gN)
3158+@Callable(gR)
3159+func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, fh(eP))
3160+
3161+
3162+
3163+@Callable(gR)
3164+func splitByGlobalAndLocalWeightsREADONLY (ng,nh,gU) = {
3165+ let gN = gT(gU)
3166+ $Tuple2(nil, $Tuple2(fh(ng), eS(nh, gN)))
3167+ }
3168+
3169+
3170+
3171+@Callable(gR)
3172+func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hR(bO(B)), ":"))
3173+
3174+
3175+
3176+@Callable(gR)
31493177 func getWarehouseREADONLY (Q) = {
3150- let jv = value(assetInfo(fromBase58String(Q)))
3151- let ic = (dK(split(jv.description, "_")[do]) / cL)
3152- let id = valueOrElse(getInteger(bD(Q)), 0)
3153- $Tuple2(nil, makeString_2C(ia(bC(Q), ic, id), ":"))
3154- }
3155-
3156-
3157-
3158-@Callable(gN)
3159-func saveLastTx () = if (!(containsElement([dk, di, dl, dm], gN.caller)))
3178+ let jz = value(assetInfo(fromBase58String(Q)))
3179+ let ig = (dM(split(jz.description, "_")[dq]) / cN)
3180+ let ih = valueOrElse(getInteger(bE(Q)), 0)
3181+ $Tuple2(nil, makeString_2C(ie(bD(Q), ig, ih), ":"))
3182+ }
3183+
3184+
3185+
3186+@Callable(gR)
3187+func saveLastTx () = if (!(containsElement([dm, dk, dn, do], gR.caller)))
31603188 then throw("Access denied")
3161- else $Tuple2(ll(gN), 42)
3162-
3163-
3164-
3165-@Callable(gN)
3166-func updateDuckStats (B,kg) = if ((gN.caller != di))
3189+ else $Tuple2(lp(gR), 42)
3190+
3191+
3192+
3193+@Callable(gR)
3194+func updateDuckStats (B,kk) = if ((gR.caller != dk))
31673195 then throw("Access denied")
3168- else ki(B, kg)
3169-
3170-
3171-
3172-@Callable(gN)
3173-func updateAccStats (c,kg) = if (!(containsElement([dk, di, dm], gN.caller)))
3196+ else km(B, kk)
3197+
3198+
3199+
3200+@Callable(gR)
3201+func updateAccStats (c,kk) = if (!(containsElement([dm, dk, do], gR.caller)))
31743202 then throw("Access denied")
3175- else kj(c, kg)
3176-
3177-
3178-
3179-@Callable(gN)
3180-func equipDuck (nd) = {
3181- let lp = ll(gN)
3182- if ((size(gN.payments) != 0))
3203+ else kn(c, kk)
3204+
3205+
3206+
3207+@Callable(gR)
3208+func equipDuck (ni) = {
3209+ let lt = lp(gR)
3210+ if ((size(gR.payments) != 0))
31833211 then throw("No payments required")
31843212 else {
3185- let c = toString(gN.originCaller)
3186- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3187- if (kt(B))
3213+ let c = toString(gR.originCaller)
3214+ let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked")
3215+ if (kx(B))
31883216 then throw("equipDuck_checkTournament")
3189- else if (ku(B))
3217+ else if (ky(B))
31903218 then throw("equipDuck_checkDelivery")
31913219 else {
3192- let gA = G(B)
3193- let ne = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3194- let hO = bN(B)
3195- let ir = hN(hO)
3196- let lG = split(nd, "_")
3197- if ((size(lG) != r))
3220+ let gE = G(B)
3221+ let nj = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3222+ let hS = bO(B)
3223+ let iv = hR(hS)
3224+ let lL = split(ni, "_")
3225+ if ((size(lL) != r))
31983226 then throw("Wrong equipment string")
31993227 else {
3200- let gC = gp(ne, fA(ir[bp]), true, nil)
3201- let gD = split(lG[q], ";")[1]
3202- let ar = if ((gD == ""))
3228+ let gG = gt(nj, fE(iv[bq]), true, nil)
3229+ let gH = split(lL[q], ";")[1]
3230+ let ar = if ((gH == ""))
32033231 then 0
32043232 else {
3205- let gE = split(gD, ",")[0]
3206- if ((gE == ""))
3233+ let gI = split(gH, ",")[0]
3234+ if ((gI == ""))
32073235 then 0
32083236 else {
3209- let fP = split(gE, ":")
3210- let dg = fP[0]
3211- let gF = fP[1]
3212- if (if (if (if (if ((dg == "06"))
3237+ let fT = split(gI, ":")
3238+ let di = fT[0]
3239+ let gJ = fT[1]
3240+ if (if (if (if (if ((di == "06"))
32133241 then true
3214- else (dg == "07"))
3242+ else (di == "07"))
32153243 then true
3216- else (dg == "08"))
3217- then (gF != "")
3244+ else (di == "08"))
3245+ then (gJ != "")
32183246 else false)
3219- then (parseIntValue(gF) > 0)
3247+ then (parseIntValue(gJ) > 0)
32203248 else false)
3221- then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ])
3249+ then parseIntValue(split(aY[parseIntValue(di)], "_")[ba])
32223250 else 0
32233251 }
32243252 }
3225- let gk = ap(this, B, ar, true)
3226- let gG = gp(lG, gC, false, gk)
3227- let nf = fF(gG)
3228- $Tuple2(([StringEntry(gA, nd), StringEntry(hO, makeString_2C([ir[bm], ir[bn], ir[bo], nf], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ lp), 0)
3253+ let go = ap(this, B, ar, true)
3254+ let gK = gt(lL, gG, false, go)
3255+ let nk = fJ(gK)
3256+ $Tuple2(([StringEntry(gE, ni), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], nk], ":")), StringEntry(M(B), makeString([toString(go[7]), toString(go[8]), toString(go[9]), toString(go[10]), toString(go[11])], "_"))] ++ lt), 0)
32293257 }
32303258 }
32313259 }
32323260 }
32333261
32343262
32353263
3236-@Callable(gN)
3237-func fortificateLand (Q,ng) = {
3238- let lp = ll(gN)
3239- if ((size(gN.payments) != 0))
3264+@Callable(gR)
3265+func fortificateLand (Q,nl) = {
3266+ let lt = lp(gR)
3267+ if ((size(gR.payments) != 0))
32403268 then throw("No payments required")
32413269 else {
3242- let c = toString(gN.originCaller)
3243- let B = valueOrElse(getString(bM(c)), "")
3244- let fK = ap(this, B, 0, false)
3245- let nh = bE(Q)
3246- let ni = split(valueOrElse(getString(nh), ":0_15:0_18:0"), "_")
3247- let jv = value(assetInfo(fromBase58String(Q)))
3248- let ic = (dK(split(jv.description, "_")[do]) / cL)
3249- let id = valueOrElse(getInteger(bD(Q)), 0)
3250- let ib = bC(Q)
3251- let ig = ia(ib, ic, id)
3252- let nj = split(ig[bh], "_")
3253- let nk = parseIntValue(nj[bj])
3254- let nl = parseIntValue(nj[bk])
3255- let nm = split(ng, "_")
3256- let nn = gw(ni, fA(ig[bg]), nk, nl, true, nil)
3257- let gC = nn._1
3258- let no = nn._2
3259- let np = nn._3
3260- let nq = gw(nm, gC, no, np, false, fK)
3261- let gG = nq._1
3262- let nr = nq._2
3263- let ns = nq._3
3264- let nf = fF(gG)
3265- let kb = makeString([nj[bi], toString(nr), toString(ns), nj[bl]], "_")
3266- $Tuple2(([StringEntry(nh, ng), StringEntry(ib, makeString_2C([ig[bd], ig[be], ig[bf], nf, kb], ":"))] ++ lp), 0)
3267- }
3268- }
3269-
3270-
3271-
3272-@Callable(gN)
3273-func initDuckTourAttempt (B) = if ((gN.caller != dl))
3270+ let c = toString(gR.originCaller)
3271+ let B = valueOrElse(getString(bN(c)), "")
3272+ let fO = ap(this, B, 0, false)
3273+ let nm = bF(Q)
3274+ let nn = split(valueOrElse(getString(nm), ":0_15:0_18:0"), "_")
3275+ let jz = value(assetInfo(fromBase58String(Q)))
3276+ let ig = (dM(split(jz.description, "_")[dq]) / cN)
3277+ let ih = valueOrElse(getInteger(bE(Q)), 0)
3278+ let if = bD(Q)
3279+ let ik = ie(if, ig, ih)
3280+ let no = split(ik[bi], "_")
3281+ let np = parseIntValue(no[bk])
3282+ let nq = parseIntValue(no[bl])
3283+ let nr = split(nl, "_")
3284+ let ns = gA(nn, fE(ik[bh]), np, nq, true, nil)
3285+ let gG = ns._1
3286+ let nt = ns._2
3287+ let nu = ns._3
3288+ let nv = gA(nr, gG, nt, nu, false, fO)
3289+ let gK = nv._1
3290+ let nw = nv._2
3291+ let nx = nv._3
3292+ let nk = fJ(gK)
3293+ let kf = makeString([no[bj], toString(nw), toString(nx), no[bm]], "_")
3294+ $Tuple2(([StringEntry(nm, nl), StringEntry(if, makeString_2C([ik[be], ik[bf], ik[bg], nk, kf], ":"))] ++ lt), 0)
3295+ }
3296+ }
3297+
3298+
3299+
3300+@Callable(gR)
3301+func initDuckTourAttempt (B) = if ((gR.caller != dn))
32743302 then throw("Access denied")
32753303 else {
3276- let je = A(B)
3277- let jf = aj(valueOrElse(getInteger(E(B)), 0))
3278- let ky = valueOrElse(getInteger(je), jf)
3279- let nt = bO(B)
3280- let jt = valueOrElse(getString(nt), aM)
3281- let cj = valueOrElse(getInteger(dl, bU), 0)
3282- let nu = (toString(cj) + "_T_0")
3283- $Tuple2([IntegerEntry(K(B), ky), IntegerEntry(je, jf), StringEntry(L(B), jt), StringEntry(nt, nu)], nu)
3304+ let ji = A(B)
3305+ let jj = aj(valueOrElse(getInteger(E(B)), 0))
3306+ let kC = valueOrElse(getInteger(ji), jj)
3307+ let ny = bP(B)
3308+ let jx = valueOrElse(getString(ny), aN)
3309+ let ck = valueOrElse(getInteger(dn, bV), 0)
3310+ let nz = (toString(ck) + "_T_0")
3311+ $Tuple2([IntegerEntry(K(B), kC), IntegerEntry(ji, jj), StringEntry(L(B), jx), StringEntry(ny, nz)], nz)
32843312 }
32853313
32863314
32873315
3288-@Callable(gN)
3316+@Callable(gR)
32893317 func breakAttempt () = {
3290- let lp = ll(gN)
3291- let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
3292- let nt = bO(B)
3293- let jt = valueOrElse(getString(nt), aM)
3294- if ((split(jt, "_")[br] != "T"))
3318+ let lt = lp(gR)
3319+ let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked")
3320+ let ny = bP(B)
3321+ let jx = valueOrElse(getString(ny), aN)
3322+ if ((split(jx, "_")[bs] != "T"))
32953323 then throw("Your duck is not in the tournament")
32963324 else {
3297- let nv = getIntegerValue(K(B))
3298- let kE = getStringValue(L(B))
3299- $Tuple2(((lp :+ IntegerEntry(A(B), nv)) :+ StringEntry(nt, kE)), jt)
3300- }
3301- }
3302-
3303-
3304-
3305-@Callable(gN)
3306-func breakAttemptCallback () = if ((gN.caller != dl))
3325+ let nA = getIntegerValue(K(B))
3326+ let kI = getStringValue(L(B))
3327+ $Tuple2(((lt :+ IntegerEntry(A(B), nA)) :+ StringEntry(ny, kI)), jx)
3328+ }
3329+ }
3330+
3331+
3332+
3333+@Callable(gR)
3334+func breakAttemptCallback () = if ((gR.caller != dn))
33073335 then throw("Access denied")
33083336 else {
3309- let B = valueOrErrorMessage(getString(bM(toString(gN.originCaller))), "You don't have a duck staked")
3310- $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback")
3337+ let B = valueOrErrorMessage(getString(bN(toString(gR.originCaller))), "You don't have a duck staked")
3338+ $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bP(B), getStringValue(L(B)))], "breakAttemptCallback")
33113339 }
33123340
33133341
33143342
3315-@Callable(gN)
3316-func exitTournamentInternal (B) = if ((gN.caller != this))
3343+@Callable(gR)
3344+func exitTournamentInternal (B) = if ((gR.caller != this))
33173345 then throw("Access denied")
33183346 else {
3319- let nv = getIntegerValue(K(B))
3320- let kE = getStringValue(L(B))
3321- $Tuple2([IntegerEntry(A(B), nv), StringEntry(bO(B), kE)], false)
3347+ let nA = getIntegerValue(K(B))
3348+ let kI = getStringValue(L(B))
3349+ $Tuple2([IntegerEntry(A(B), nA), StringEntry(bP(B), kI)], false)
33223350 }
33233351
33243352
33253353
3326-@Callable(gN)
3327-func exitDeliveryInternal (B) = if ((gN.caller != this))
3354+@Callable(gR)
3355+func exitDeliveryInternal (B) = if ((gR.caller != this))
33283356 then throw("Access denied")
33293357 else {
3330- let ml = kv(B, false, 0, 0)
3331- $Tuple2((ml._1 ++ ml._2), false)
3358+ let mq = kz(B, false, 0, 0)
3359+ $Tuple2((mq._1 ++ mq._2), false)
33323360 }
33333361
33343362
33353363
3336-@Callable(gN)
3337-func autoExitDelivery (B,iY,nw,kw) = if ((gN.caller != this))
3364+@Callable(gR)
3365+func autoExitDelivery (B,jc,nB,kA) = if ((gR.caller != this))
33383366 then throw("Access denied")
33393367 else {
3340- let ml = kv(B, true, iY, kw)
3341- $Tuple2(ml._1, ml._3)
3368+ let mq = kz(B, true, jc, kA)
3369+ $Tuple2(mq._1, mq._3)
33423370 }
33433371
33443372
33453373
3346-@Callable(gN)
3347-func breakDelivery () = $Tuple2(ll(gN), "breakDelivery")
3348-
3349-
3350-
3351-@Callable(gN)
3352-func prepareRobbery (iT,iU) = {
3353- let lp = ll(gN)
3354- if (!(sigVerify_8Kb(iT, iU, ec)))
3374+@Callable(gR)
3375+func breakDelivery () = $Tuple2(lp(gR), "breakDelivery")
3376+
3377+
3378+
3379+@Callable(gR)
3380+func prepareRobbery (iX,iY) = {
3381+ let lt = lp(gR)
3382+ if (!(sigVerify_8Kb(iX, iY, ee)))
33553383 then throw("signature does not match")
3356- else if ((size(gN.payments) != 1))
3384+ else if ((size(gR.payments) != 1))
33573385 then throw("exactly 1 payment must be attached")
33583386 else {
3359- let lq = gN.payments[0]
3360- let nx = lq.amount
3361- if (if (!(isDefined(lq.assetId)))
3387+ let lu = gR.payments[0]
3388+ let nC = lu.amount
3389+ if (if (!(isDefined(lu.assetId)))
33623390 then true
3363- else (value(lq.assetId) != ds))
3391+ else (value(lu.assetId) != du))
33643392 then throw("WLGOLD payments only!")
33653393 else {
3366- let fs = split(toUtf8String(iT), "|")
3367- if ((2 > size(fs)))
3394+ let fw = split(toUtf8String(iX), "|")
3395+ if ((2 > size(fw)))
33683396 then throw("Wrong message format")
33693397 else {
3370- let jc = if ((size(fs) >= 2))
3371- then fs[2]
3398+ let jg = if ((size(fw) >= 2))
3399+ then fw[2]
33723400 else ""
3373- let bQ = toString(gN.caller)
3374- let jd = valueOrElse(getString(dO(bQ)), "")
3375- if ((jd != jc))
3376- then throw(((("Tx ids don't match! In state: " + jd) + ", in msg: ") + jc))
3401+ let bR = toString(gR.caller)
3402+ let jh = valueOrElse(getString(dQ(bR)), "")
3403+ if ((jh != jg))
3404+ then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg))
33773405 else {
3378- let B = fs[0]
3379- if (kt(B))
3406+ let B = fw[0]
3407+ if (kx(B))
33803408 then throw("prepareRobbery_checkTournament")
3381- else if (ku(B))
3409+ else if (ky(B))
33823410 then throw("prepareRobbery_checkDelivery")
33833411 else {
33843412 let aB = ax(this, B)._1
3385- if ((aB > nx))
3386- then throw(((("Payment " + toString(nx)) + " < required ") + toString(aB)))
3413+ if ((aB > nC))
3414+ then throw(((("Payment " + toString(nC)) + " < required ") + toString(aB)))
33873415 else {
3388- let ny = split(fs[1], "_")
3416+ let nD = split(fw[1], "_")
33893417 let aA = lastBlock.timestamp
33903418 let aC = valueOrElse(getInteger(S(B)), 0)
33913419 let aD = valueOrElse(getString(T(B)), "")
33923420 let aE = valueOrElse(getInteger(R(aD)), 0)
33933421 if (if ((aC != y))
33943422 then (aE > aA)
33953423 else false)
33963424 then throw(("You already started robbing, wait till " + toString(aE)))
33973425 else {
3398- func nz (eU,Q) = {
3399- let nA = valueOrElse(getInteger(P(Q)), 0)
3400- let nB = valueOrElse(getInteger(R(Q)), 0)
3401- if ((nA > size(v)))
3426+ func nE (eY,Q) = {
3427+ let nF = valueOrElse(getInteger(P(Q)), 0)
3428+ let nG = valueOrElse(getInteger(R(Q)), 0)
3429+ if ((nF > size(v)))
34023430 then throw("Invalid state")
3403- else if ((aA > nB))
3431+ else if ((aA > nG))
34043432 then {
3405- let nC = valueOrElse(getInteger(bw(Q)), 0)
3406- if ((0 >= nC))
3407- then eU
3433+ let nH = valueOrElse(getInteger(bx(Q)), 0)
3434+ if ((0 >= nH))
3435+ then eY
34083436 else {
3409- let gu = value(assetInfo(fromBase58String(Q)))
3410- let jz = split(gu.description, "_")
3411- let jl = dK(jz[do])
3412- let nD = jk(Q, jl)
3413- let gT = (aA - nC)
3414- let jC = fraction(gT, (nD * jl), a)
3415- if ((w > jC))
3416- then eU
3417- else (eU :+ Q)
3437+ let gy = value(assetInfo(fromBase58String(Q)))
3438+ let jD = split(gy.description, "_")
3439+ let jp = dM(jD[dq])
3440+ let nI = jo(Q, jp)
3441+ let gX = (aA - nH)
3442+ let jG = fraction(gX, (nI * jp), a)
3443+ if ((w > jG))
3444+ then eY
3445+ else (eY :+ Q)
34183446 }
34193447 }
3420- else eU
3448+ else eY
34213449 }
34223450
3423- let nE = {
3424- let eW = ny
3425- let eX = size(eW)
3426- let eY = nil
3427- func eZ (fa,fb) = if ((fb >= eX))
3428- then fa
3429- else nz(fa, eW[fb])
3430-
3431- func fc (fa,fb) = if ((fb >= eX))
3432- then fa
3451+ let nJ = {
3452+ let fa = nD
3453+ let fb = size(fa)
3454+ let fc = nil
3455+ func fd (fe,ff) = if ((ff >= fb))
3456+ then fe
3457+ else nE(fe, fa[ff])
3458+
3459+ func fg (fe,ff) = if ((ff >= fb))
3460+ then fe
34333461 else throw("List size exceeds 10")
34343462
3435- fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3463+ fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
34363464 }
3437- if ((size(nE) == 0))
3465+ if ((size(nJ) == 0))
34383466 then throw("No candidates for robbery")
34393467 else {
3440- let nF = dV(size(nE), iT, iU)
3441- let Q = nE[nF]
3442- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ lp), Q)
3468+ let nK = dX(size(nJ), iX, iY)
3469+ let Q = nJ[nK]
3470+ $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ lt), Q)
34433471 }
34443472 }
34453473 }
34463474 }
34473475 }
34483476 }
34493477 }
34503478 }
34513479 }
34523480
34533481
34543482
3455-@Callable(gN)
3456-func robLand (iT,iU) = {
3457- let lp = ll(gN)
3458- if (!(sigVerify_8Kb(iT, iU, ec)))
3483+@Callable(gR)
3484+func robLand (iX,iY) = {
3485+ let lt = lp(gR)
3486+ if (!(sigVerify_8Kb(iX, iY, ee)))
34593487 then throw("signature does not match")
34603488 else {
3461- let bQ = toString(gN.caller)
3462- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3489+ let bR = toString(gR.caller)
3490+ let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked")
34633491 let aA = lastBlock.timestamp
3464- $Tuple2((lp :+ IntegerEntry(N(B), aA)), 0)
3465- }
3466- }
3467-
3468-
3469-
3470-@Callable(gN)
3492+ $Tuple2((lt :+ IntegerEntry(N(B), aA)), 0)
3493+ }
3494+ }
3495+
3496+
3497+
3498+@Callable(gR)
34713499 func acceptDelivery () = {
3472- let lp = ll(gN)
3473- let bQ = toString(gN.caller)
3474- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3475- let nG = valueOrElse(getInteger(di, bS), 0)
3476- let kC = valueOrElse(getInteger(di, bT), 0)
3477- if ((aP > (nG - kC)))
3478- then throw(((("Delivery is not available, fund=" + dP(nG, 6)) + ", locked=") + dP(kC, 6)))
3500+ let lt = lp(gR)
3501+ let bR = toString(gR.caller)
3502+ let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked")
3503+ let nL = valueOrElse(getInteger(dk, bT), 0)
3504+ let kG = valueOrElse(getInteger(dk, bU), 0)
3505+ if ((aQ > (nL - kG)))
3506+ then throw(((("Delivery is not available, fund=" + dR(nL, 6)) + ", locked=") + dR(kG, 6)))
34793507 else {
34803508 let aA = lastBlock.timestamp
3481- let nH = valueOrElse(getInteger(U(B)), 0)
3482- if ((nH > aA))
3483- then throw(("Delivery is forbidden for your duck until " + toString(nH)))
3509+ let nM = valueOrElse(getInteger(U(B)), 0)
3510+ if ((nM > aA))
3511+ then throw(("Delivery is forbidden for your duck until " + toString(nM)))
34843512 else {
34853513 let av = getIntegerValue(A(B))
34863514 if ((0 >= av))
34873515 then throw("You cannot accept delivery with zero health")
34883516 else {
3489- let kB = V(bQ)
3490- let fU = valueOrElse(getInteger(kB), 0)
3491- let nI = valueOrElse(getInteger(W(bQ)), 0)
3492- let nJ = (aA / a)
3493- let nK = valueOrElse(getInteger(dm, d(bQ)), 0)
3494- let nL = (aR + (nK / aS))
3495- if (if ((fU >= nL))
3496- then (nI == nJ)
3517+ let kF = V(bR)
3518+ let fY = valueOrElse(getInteger(kF), 0)
3519+ let nN = valueOrElse(getInteger(W(bR)), 0)
3520+ let nO = (aA / a)
3521+ let nP = valueOrElse(getInteger(do, d(bR)), 0)
3522+ let nQ = (aS + (nP / aT))
3523+ if (if ((fY >= nQ))
3524+ then (nN == nO)
34973525 else false)
3498- then throw((("You already used " + toString(nL)) + " delivery attempts for today"))
3499- else if (kt(B))
3526+ then throw((("You already used " + toString(nQ)) + " delivery attempts for today"))
3527+ else if (kx(B))
35003528 then throw("acceptDelivery_checkTournament")
3501- else if (ku(B))
3529+ else if (ky(B))
35023530 then throw("acceptDelivery_checkDelivery")
35033531 else {
3504- let nM = dF(invoke(di, "updateDeliveryLocked", [(kC + aP)], nil))
3505- let nt = bO(B)
3506- let jt = valueOrElse(getString(nt), aM)
3507- let nN = (toString(aA) + "_D_0")
3508- $Tuple2(([StringEntry(L(B), jt), StringEntry(nt, nN), IntegerEntry(kB, if ((nI != nJ))
3532+ let nR = dH(invoke(dk, "updateDeliveryLocked", [(kG + aQ)], nil))
3533+ let ny = bP(B)
3534+ let jx = valueOrElse(getString(ny), aN)
3535+ let nS = (toString(aA) + "_D_0")
3536+ $Tuple2(([StringEntry(L(B), jx), StringEntry(ny, nS), IntegerEntry(kF, if ((nN != nO))
35093537 then 0
3510- else fU)] ++ lp), $Tuple2(nN, nM))
3538+ else fY)] ++ lt), $Tuple2(nS, nR))
35113539 }
35123540 }
35133541 }
35143542 }
35153543 }
35163544
35173545
35183546
3519-@Callable(gN)
3520-func checkDeliveryCallback (B) = if ((gN.caller != dl))
3547+@Callable(gR)
3548+func checkDeliveryCallback (B) = if ((gR.caller != dn))
35213549 then throw("Access denied")
3522- else $Tuple2(nil, ku(B))
3550+ else $Tuple2(nil, ky(B))
3551+
3552+
3553+
3554+@Callable(gR)
3555+func buyRoboDuck () = if (!(cB))
3556+ then throw("Feature is turned off")
3557+ else {
3558+ let lt = lp(gR)
3559+ if ((size(gR.payments) != 1))
3560+ then throw("Exactly one payment required")
3561+ else {
3562+ let lu = value(gR.payments[0])
3563+ if ((lu.assetId != cE))
3564+ then throw("Allowed USDT payment only!")
3565+ else if ((lu.amount != em))
3566+ then throw((("Payment attached should be " + dR(em, 6)) + " USDT"))
3567+ else {
3568+ let nT = valueOrElse(getInteger(eF()), 0)
3569+ let nU = toBytes(nT)
3570+ let ex = ((aH + "-") + takeRight(toBase16String(nU), 8))
3571+ let nV = takeRight(toBase16String(sha256_16Kb(nU)), 6)
3572+ let iU = Issue(ex, ("Robo Duck NFT for WavesLands game, background color = #" + nV), 1, 0, false)
3573+ let bv = calculateAssetId(iU)
3574+ $Tuple2(((((lt :+ IntegerEntry(eF(), (nT + 1))) :+ iU) :+ ScriptTransfer(gR.originCaller, 1, bv)) :+ ScriptTransfer(dk, lu.amount, cE)), $Tuple2(toBase58String(bv), nV))
3575+ }
3576+ }
3577+ }
35233578
35243579

github/deemru/w8io/026f985 
1435.58 ms