tx · 7NTTQCfnBmQKCJiP3BUzhDrR6LrYJZTn3JXUd55edVw6

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.03500000 Waves

2023.02.05 16:48 [2436403] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "7NTTQCfnBmQKCJiP3BUzhDrR6LrYJZTn3JXUd55edVw6", "fee": 3500000, "feeAssetId": null, "timestamp": 1675604948491, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "fBzZC52yQe5MHJ3VNMzPvzaNU77ueXeN2EJofXEvaSgg4hRtZBXdqRzqNTMUwkZFvkUJamshMJG8bTxKaw84ADh" ], "script": "base64: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APQDARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEKa2V5TmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEfa2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAhRwcmVzYWxlQXJ0QWN0aXZhdGVkXwUHYXNzZXRJZAEna2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgIlcHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZEFuZE93bmVyXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgIULCAgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAQBcgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQxzdWJPbmVJbkxpc3QDBWFMaXN0A2lkeAZhbW91bnQKAQZzdWJiZXICA2FjYwFpCQDNCAIFA2FjYwMJAAACBQFpBQNpZHgJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVhTGlzdAUBaQUGYW1vdW50CQCRAwIFBWFMaXN0BQFpBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGc3ViYmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBp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eE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAESZXhwZWRpdGlvbkludGVybmFsAgZjYWxsZXIEdHhJZAQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQprZXlOZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50ARBleHBlZGl0aW9uQ29tbW9uBQxzaG91bGRVc2VNYXQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQCaHAJALUJAgkAkQMCCQC1CQIJAJEDAgUFcGFydHMAAAIBfAAAAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQKbG9jQW5kVGltZQkAtQkCCQCRAwIFBXBhcnRzAAECAToEDnRhcmdldExvY2F0aW9uCQC1CQIJAJEDAgUKbG9jQW5kVGltZQAAAgFfAwkBAiE9AgkAkQMCBQ50YXJnZXRMb2NhdGlvbgABAgFFCQACAQIrZXhwZWRpdGlvbiB0YXJnZXQgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRQQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY0FuZFRpbWUAAQMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAGcCAAAFBW5ld0hQCQCUCgIJAM0IAgMJAQEhAQUMc2hvdWxkVXNlTWF0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUHRVhQVVNETgULdXNkbkFzc2V0SWQFA25pbAUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAACAAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCUCgIJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEfa2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBwUGcGllY2VzAAAJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQppbmZyYUxldmVsAAQJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGgCBQlhcnRQaWVjZXMAAwkAaAIFBnBpZWNlcwAUARRjaGVja0NsYWltQ29uZGl0aW9ucwEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMBAtsYW5kQXNzZXRJZAkAkQMCBQNsb2MFCGxvY0lkeElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIQWW91ciBkdWNrIGlzIG9uIAgFBWFzc2V0BG5hbWUCFSwgd2hpY2ggaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFC2R1Y2tBc3NldElkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsAgRhZGRyBmFtb3VudAMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAQUEYWRkcgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECmN1cnJlbnRSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EBWJwUmVzCQEGYWRkUmVzBQUKY3VycmVudFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lCQBpAgUGcGllY2VzBQVTU0laRQUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAQhjbGFpbUFsbAMEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAIFBGFkZHIFCGF2YWlsUmVzAQ11cEluZnJhQ29tbW9uAwxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMBBQRhZGRyBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADCQBnAgUIY3VyTGV2ZWwAAwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZG4JAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0CQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAMFBGFkZHIIBQFjAl8yBQZwaWVjZXMJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAESYWN0aXZhdGVQcmVzYWxlQXJ0AQRhZGRyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMBBQRhZGRyBAtsYW5kQXNzZXRJZAgFAWMCXzIEDWFjdGl2YXRpb25LZXkJAR9rZXlQcmVzYWxlQXJ0QWN0aXZhdGVkQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQELdmFsdWVPckVsc2UCCQCgCAEFDWFjdGl2YXRpb25LZXkHCQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAMFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAULY2xhaW1SZXN1bHQCXzEJAQxCb29sZWFuRW50cnkCBQ1hY3RpdmF0aW9uS2V5BgkBDEJvb2xlYW5FbnRyeQIJASdrZXlQcmVzYWxlQXJ0QWN0aXZhdGVkQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUEYWRkcgYJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEfa2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBwUGcGllY2VzAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQkAaQIFBnBpZWNlcwUFU1NJWkUFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQJALUJAggFA2FjYwJfNgIBXwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAkAmQoHBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJAQprZXlOZnROYW1lAgUHbGFuZE51bQUIbGFuZFNpemUJAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEfa2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEna2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQUFcHJvcHMJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB3Byb3BTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzAECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCZCgcFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQdwcm9wU3RyBQdsYW5kc0luCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIJAQNhYnMBCQCeAwEFBHR4SWQFDGNvbnRpbmVudElkeAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQprZXlOZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcggFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAIBQFyAl82CQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0DBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQJAQ1tZXJnZUludGVybmFsBwIBTQADAgRTU1NTBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQAAAEDbTJsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2RuAAQDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgFMAAQCA1NNTQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMABAEEbDJ4bAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkbgAvAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwICWEwABQIFU1NTTUwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAC8BBnhsMnh4bAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkbgA2AwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIDWFhMAAYCA0xYTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMANgELbWVyZ2VDb21tb24FDHNob3VsZFVzZU1hdARhZGRyDXBheW1lbnRBbW91bnQMbGFuZEFzc2V0SWRzBHR4SWQEC21lcmdlUmVzdWx0BAckbWF0Y2gwCQCQAwEFDGxhbmRBc3NldElkcwMJAAACAAQFByRtYXRjaDAJAQNzMm0DBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQDCQAAAgADBQckbWF0Y2gwCQEDbTJsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgAFBQckbWF0Y2gwCQEEbDJ4bAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50CQACAQINVW5rbm93biBtZXJnZQULbWVyZ2VSZXN1bHQBBnByb2xvZwEBaQMJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UJAQtTdHJpbmdFbnRyeQIJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQVAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQUFU1NJWkUAAQQIbGFuZHNTdHIJAKIIAQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzCQC7CQIJAM0IAgUFbGFuZHMFC2xhbmRBc3NldElkAgFfCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBC3Vuc3Rha2VMYW5kARJsYW5kQXNzZXRJZElnbm9yZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAiR1bnN0YWtlIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMBBQRhZGRyBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsAwUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEJc3Rha2VEdWNrAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM0IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyAGQFDHByb2xvZ0FjdGlvbgFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECJHVuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCQDYBAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBCQDYBAEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAQIhPQIFBmhlYWx0aABkCQACAQImUGxlYXNlIGhlYWwgeW91ciBkdWNrIGJlZm9yZSB1bnN0YWtpbmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBBQlrZXlIZWFsdGgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAiVjbGFpbVJlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAIFBGFkZHIFBmFtb3VudAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECI2ZsaWdodCBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCATsEAmhwCQC1CQIJAJEDAgkAtQkCCQCRAwIFBXBhcnRzAAACAXwAAAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEDW5ld0xvY0FuZFRpbWUJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQ1uZXdMb2NBbmRUaW1lAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1uZXdMb2NBbmRUaW1lAAEDAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgECEnNpZ25hdHVyZSBvdXRkYXRlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQMJAGYCBQVuZXdIUAAABQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbmV3SFAJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFBHVuaXQBaQEJc2V0SGVhbHRoAgZoZWFsdGgLZHVja0Fzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwkAZgIAAAUGaGVhbHRoBgkAZgIFBmhlYWx0aABkCQACAQIaSFAgc2hvdWxkIGJlIHdpdGhpbiAwLi4xMDAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFBmhlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQRoZWFsAgdtYXRUeXBlBmFtb3VudAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDCQBmAgAABQdtYXRUeXBlBgkAZwIFB21hdFR5cGUFBk5VTVJFUwkAAgEJAKwCAgISVW5rbm93biBtYXRlcmlhbDogCQCkAwEFB21hdFR5cGUDCQBnAgAABQZhbW91bnQJAAIBCQCsAgICG0Ftb3VudCBzaG91bGQgYmUgcG9zaXRpdmUhIAkApAMBBQZhbW91bnQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZwIFCW9sZEhlYWx0aABkCQACAQIaSFAgc2hvdWxkIGJlIDwgMTAwIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNY3VycmVudEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBW1MaXN0BQdtYXRUeXBlBAtkZWx0YUhlYWx0aAkAlwMBCQDMCAIJAGkCBQZhbW91bnQFCEhFQUxDT1NUCQDMCAIJAGUCAGQFCW9sZEhlYWx0aAUDbmlsBAtzcGVuZEFtb3VudAkAaAIFC2RlbHRhSGVhbHRoBQhIRUFMQ09TVAMJAGYCBQtzcGVuZEFtb3VudAUNY3VycmVudEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgbmVlZCAJAKQDAQULc3BlbmRBbW91bnQCBCBvZiAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCJCB0byBoZWFsLCBidXQgeW91IGJhY2twYWNrIGNvbnRhaW5zIAkApAMBBQ1jdXJyZW50QW1vdW50BAZuZXdNYXQJAQxzdWJPbmVJbkxpc3QDBQVtTGlzdAUHbWF0VHlwZQULc3BlbmRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAkAZAIFCW9sZEhlYWx0aAULZGVsdGFIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkbkFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRE4gcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0ROCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNETgQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2RuQXNzZXRJZAUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQ1leHBlZGl0aW9uQnV5AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2RuQXNzZXRJZAkAAgECGkFsbG93ZWQgVVNETiBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRE4JAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0ROBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBQcIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnAwkAAAIIBQZyZXN1bHQCXzICAAUGcmVzdWx0CQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2RuQXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQInZXhwZWRpdGlvbiBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBQYIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDHVwZ3JhZGVJbmZyYQESbGFuZEFzc2V0SWRJZ25vcmVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIzSW5mcmFzdHJ1Y3R1cmUgdXBncmFkZSBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uAwYIBQFpBmNhbGxlcgAACQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZG4BEmxhbmRBc3NldElkSWdub3JlZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2RuQXNzZXRJZAkAAgECGkFsbG93ZWQgVVNETiBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uAwcIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZG5Bc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAEHYXJ0TmFtZQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECMEFydGlmYWN0IGFjdGl2YXRpb24gZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQBCQClCAEIBQFpBmNhbGxlcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqTGFuZHMgbWVyZ2luZyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUGCQClCAEIBQFpBmNhbGxlcgAABQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEObWVyZ2VMYW5kc1VzZG4BDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2RuQXNzZXRJZAkAAgECGkFsbG93ZWQgVVNETiBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUHCQClCAEIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkbkFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBG3NwbGl0QnlMb2NhbFdlaWdodHNSRUFET05MWQIGYW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQZhbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AIhEa6g=", "height": 2436403, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FT9STTtLz9fyg8kvivoEYECcpvzbtDXdNrMe4k6eGgeD Next: 9i8T6oGV8Sx59FfcJBrLim1pssXxQKvyqtn4hpuvC6FC Diff:
OldNewDifferences
679679 let cj = bL(bM)
680680 let dc = valueOrElse(getString(al()), "0_0_0_0_0_0")
681681 let dd = am(L)
682- let de = split_51C(valueOrElse(getString(dd), ""), "_")
682+ let de = getString(dd)
683+ let df = if (isDefined(de))
684+ then split_51C(value(de), "_")
685+ else nil
683686 let aT = {
684687 let aK = cU
685688 let aL = size(aK)
686- let aM = $Tuple7(cT, 0, "", cj[aw], nil, dc, de)
689+ let aM = $Tuple7(cT, 0, "", cj[aw], nil, dc, df)
687690 func aN (aO,aP) = if ((aP >= aL))
688691 then aO
689692 else cW(aO, aK[aP])
698701 let bH = valueOrErrorMessage(indexOf(H, bU), ("Unknown continent: " + bU))
699702 let bl = bF(bx(toBigInt(bQ)), bH)
700703 let bT = valueOrElse(getInteger(M()), (J + 1))
701- let df = toString(bT)
702- let bV = Issue(P(df, cS), makeString([df, cS, bl, bU], "_"), 1, 0, false)
704+ let dg = toString(bT)
705+ let bV = Issue(P(dg, cS), makeString([dg, cS, bl, bU], "_"), 1, 0, false)
703706 let S = calculateAssetId(bV)
704- let dg = toBase58String(S)
707+ let dh = toBase58String(S)
705708 let cl = makeString(aU((cV > 0), split(cj[ax], "_"), cV), "_")
706709 $Tuple2(((((((((((((((aT._5 :+ (if ((size(aT._7) > 0))
707710 then StringEntry(dd, makeString_11C(aT._7, "_"))
708- else DeleteEntry(dd))) :+ IntegerEntry(M(), (bT + 1))) :+ bV) :+ StringEntry(N(df), dg)) :+ StringEntry(R(dg), L)) :+ StringEntry(ag(df), L)) :+ IntegerEntry(aa(I, dg), aT._2)) :+ IntegerEntry(ac(I, dg, L), aT._2)) :+ IntegerEntry(V(dg), cM)) :+ IntegerEntry(W(dg, L), cM)) :+ StringEntry(bM, makeString([cj[av], aT._4, cl, cj[ay]], ":"))) :+ StringEntry(al(), aT._6)) :+ StringEntry(aj(ai), makeString([bU, "L", dg], "_"))) :+ ScriptTransfer(addressFromStringValue(L), 1, S)), dg)
711+ else DeleteEntry(dd))) :+ IntegerEntry(M(), (bT + 1))) :+ bV) :+ StringEntry(N(dg), dh)) :+ StringEntry(R(dh), L)) :+ StringEntry(ag(dg), L)) :+ IntegerEntry(aa(I, dh), aT._2)) :+ IntegerEntry(ac(I, dh, L), aT._2)) :+ IntegerEntry(V(dh), cM)) :+ IntegerEntry(W(dh, L), cM)) :+ StringEntry(bM, makeString([cj[av], aT._4, cl, cj[ay]], ":"))) :+ StringEntry(al(), aT._6)) :+ StringEntry(aj(ai), makeString([bU, "L", dh], "_"))) :+ ScriptTransfer(addressFromStringValue(L), 1, S)), dh)
709712 }
710713
711714
712-func dh (L,cU,bQ) = cR("M", 3, "SSSS", L, cU, bQ, 0)
715+func di (L,cU,bQ) = cR("M", 3, "SSSS", L, cU, bQ, 0)
713716
714717
715-func di (L,cU,bQ,aV,cJ) = {
718+func dj (L,cU,bQ,aV,cJ) = {
716719 let cN = (w * 4)
717720 if (if (!(aV))
718721 then (cJ != cN)
722725 }
723726
724727
725-func dj (L,cU,bQ,aV,cJ) = {
728+func dk (L,cU,bQ,aV,cJ) = {
726729 let cN = (w * 47)
727730 if (if (!(aV))
728731 then (cJ != cN)
732735 }
733736
734737
735-func dk (L,cU,bQ,aV,cJ) = {
738+func dl (L,cU,bQ,aV,cJ) = {
736739 let cN = (w * 54)
737740 if (if (!(aV))
738741 then (cJ != cN)
742745 }
743746
744747
745-func dl (aV,L,cJ,cU,bQ) = {
746- let dm = {
748+func dm (aV,L,cJ,cU,bQ) = {
749+ let dn = {
747750 let c = size(cU)
748751 if ((4 == c))
749- then dh(L, cU, bQ)
752+ then di(L, cU, bQ)
750753 else if ((3 == c))
751- then di(L, cU, bQ, aV, cJ)
754+ then dj(L, cU, bQ, aV, cJ)
752755 else if ((5 == c))
753- then dj(L, cU, bQ, aV, cJ)
756+ then dk(L, cU, bQ, aV, cJ)
754757 else if ((2 == c))
755- then dk(L, cU, bQ, aV, cJ)
758+ then dl(L, cU, bQ, aV, cJ)
756759 else throw("Unknown merge")
757760 }
758- dm
761+ dn
759762 }
760763
761764
762-func dn (bi) = if (valueOrElse(getBoolean(an()), false))
765+func do (bi) = if (valueOrElse(getBoolean(an()), false))
763766 then throw("Contracts are under maintenance")
764767 else StringEntry(K(toString(bi.originCaller)), toBase58String(bi.transactionId))
765768
766769
767770 @Callable(bi)
768-func setBlocked (do) = if ((bi.caller != this))
771+func setBlocked (dp) = if ((bi.caller != this))
769772 then throw("permission denied")
770- else [BooleanEntry(an(), do)]
773+ else [BooleanEntry(an(), dp)]
771774
772775
773776
774777 @Callable(bi)
775778 func stakeLand () = {
776- let dp = dn(bi)
779+ let dq = do(bi)
777780 if ((size(bi.payments) != 1))
778781 then throw("Exactly one payment required")
779782 else {
780- let dq = value(bi.payments[0])
781- let S = value(dq.assetId)
782- let dr = toString(bi.caller)
783- if ((dq.amount != 1))
783+ let dr = value(bi.payments[0])
784+ let S = value(dr.assetId)
785+ let ds = toString(bi.caller)
786+ if ((dr.amount != 1))
784787 then throw((("NFT " + i) + " token should be attached as payment"))
785788 else {
786789 let cv = value(assetInfo(S))
789792 else if (!(contains(cv.name, i)))
790793 then throw((("Only NFT " + i) + " tokens are accepted"))
791794 else {
792- let ds = drop(cv.name, 4)
793- let O = if (contains(ds, "XXL"))
794- then dropRight(ds, 3)
795- else if (contains(ds, "XL"))
796- then dropRight(ds, 2)
797- else dropRight(ds, 1)
795+ let dt = drop(cv.name, 4)
796+ let O = if (contains(dt, "XXL"))
797+ then dropRight(dt, 3)
798+ else if (contains(dt, "XL"))
799+ then dropRight(dt, 2)
800+ else dropRight(dt, 1)
798801 if (!(isDefined(parseInt(O))))
799802 then throw(("Cannot parse land number from " + cv.name))
800803 else {
806809 let cz = split(cv.description, "_")
807810 let be = bk(cz[aq])
808811 let aS = bj(be, (bm(cz[ap]) / m), 1)
809- let db = split_51C(valueOrElse(getString(am(dr)), ""), "_")
812+ let de = getString(am(ds))
813+ let db = if (isDefined(de))
814+ then split_51C(value(de), "_")
815+ else nil
810816 if (containsElement(db, co))
811817 then throw(("Your staked lands already contain " + co))
812- else [IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(i, co, dr), lastBlock.timestamp), StringEntry(am(dr), makeString_11C((db :+ co), "_")), StringEntry(R(co), dr), StringEntry(ag(O), dr), StringEntry(al(), aS), dp]
818+ else [IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(i, co, ds), lastBlock.timestamp), StringEntry(am(ds), makeString_11C((db :+ co), "_")), StringEntry(R(co), ds), StringEntry(ag(O), ds), StringEntry(al(), aS), dq]
813819 }
814820 }
815821 }
820826
821827
822828 @Callable(bi)
823-func unstakeLand (dt) = {
824- let dp = dn(bi)
829+func unstakeLand (du) = {
830+ let dq = do(bi)
825831 if ((size(bi.payments) != 0))
826832 then throw("unstake doesn't require any payments")
827833 else {
839845 then throw(("Your staked lands don't contain " + co))
840846 else [ScriptTransfer(bi.caller, 1, fromBase58String(co)), DeleteEntry(U(co)), DeleteEntry(ae(i, co, L)), StringEntry(al(), aS), StringEntry(cO._2, makeString(cO._3, ":")), if ((size(db) > 1))
841847 then StringEntry(dd, makeString_11C(removeByIndex(db, value(ba)), "_"))
842- else DeleteEntry(dd), dp]
848+ else DeleteEntry(dd), dq]
843849 }
844850 }
845851
847853
848854 @Callable(bi)
849855 func stakeDuck () = {
850- let dp = dn(bi)
856+ let dq = do(bi)
851857 if ((size(bi.payments) != 1))
852858 then throw("Exactly one payment required")
853859 else {
854- let dq = value(bi.payments[0])
855- let S = value(dq.assetId)
856- let dr = toString(bi.caller)
857- if ((dq.amount != 1))
860+ let dr = value(bi.payments[0])
861+ let S = value(dr.assetId)
862+ let ds = toString(bi.caller)
863+ if ((dr.amount != 1))
858864 then throw((("NFT " + j) + " token should be attached as payment"))
859865 else {
860866 let cv = value(assetInfo(S))
865871 else if (!(contains(cv.name, j)))
866872 then throw((("Only NFT " + j) + " tokens are accepted"))
867873 else {
868- let du = toBase58String(S)
869- let cw = U(du)
874+ let dv = toBase58String(S)
875+ let cw = U(dv)
870876 if (isDefined(getInteger(cw)))
871877 then throw((("NFT " + cv.name) + " is already staked"))
872- else if (isDefined(getString(ad(dr))))
878+ else if (isDefined(getString(ad(ds))))
873879 then throw(("You already staked one duck: " + cv.name))
874880 else {
875- let dv = aj(du)
876- let dw = getString(dv)
877- let bM = ah(du)
878- let dx = getString(bM)
879- ([IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(j, toBase58String(S), dr), lastBlock.timestamp), StringEntry(T(du), dr), StringEntry(ad(dr), du)] ++ (if (isDefined(dw))
881+ let dw = aj(dv)
882+ let dx = getString(dw)
883+ let bM = ah(dv)
884+ let dy = getString(bM)
885+ ([IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(j, toBase58String(S), ds), lastBlock.timestamp), StringEntry(T(dv), ds), StringEntry(ad(ds), dv)] ++ (if (isDefined(dx))
880886 then nil
881- else ([StringEntry(dv, k)] ++ (if (isDefined(dx))
887+ else ([StringEntry(dw, k)] ++ (if (isDefined(dy))
882888 then nil
883- else (([StringEntry(bM, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ak(du), 100)) :+ dp)))))
889+ else (([StringEntry(bM, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ak(dv), 100)) :+ dq)))))
884890 }
885891 }
886892 }
890896
891897
892898 @Callable(bi)
893-func unstakeDuck (du) = {
894- let dp = dn(bi)
899+func unstakeDuck (dv) = {
900+ let dq = do(bi)
895901 if ((size(bi.payments) != 0))
896902 then throw("unstake doesn't require any payments")
897903 else {
898- let S = fromBase58String(du)
899- let dr = toString(bi.caller)
904+ let S = fromBase58String(dv)
905+ let ds = toString(bi.caller)
900906 let cv = value(assetInfo(S))
901907 let cw = U(toBase58String(S))
902908 if (!(isDefined(cw)))
903909 then throw((("NFT " + cv.name) + " is not staked"))
904- else if (!(isDefined(ad(dr))))
910+ else if (!(isDefined(ad(ds))))
905911 then throw((("The duck " + cv.name) + " is not staked"))
906912 else {
907913 let cy = valueOrErrorMessage(getString(T(toBase58String(S))), (("NFT " + cv.name) + " is orphaned"))
908- if ((cy != dr))
914+ if ((cy != ds))
909915 then throw("Staked NFT is not yours")
910916 else {
911- let ch = ak(du)
912- let dy = valueOrElse(getInteger(ch), 100)
913- if ((dy != 100))
917+ let ch = ak(dv)
918+ let dz = valueOrElse(getInteger(ch), 100)
919+ if ((dz != 100))
914920 then throw("Please heal your duck before unstaking")
915- else [ScriptTransfer(bi.caller, 1, S), DeleteEntry(cw), DeleteEntry(ch), DeleteEntry(aj(du)), DeleteEntry(T(du)), DeleteEntry(ae(j, du, dr)), DeleteEntry(ad(dr)), dp]
921+ else [ScriptTransfer(bi.caller, 1, S), DeleteEntry(cw), DeleteEntry(ch), DeleteEntry(aj(dv)), DeleteEntry(T(dv)), DeleteEntry(ae(j, dv, ds)), DeleteEntry(ad(ds)), dq]
916922 }
917923 }
918924 }
921927
922928
923929 @Callable(bi)
924-func claimRes (bp,dz) = {
925- let dp = dn(bi)
930+func claimRes (bp,dA) = {
931+ let dq = do(bi)
926932 if ((size(bi.payments) != 0))
927933 then throw("claimRes doesn't require any payments")
928934 else {
929935 let L = toString(bi.originCaller)
930936 let bb = cA(L, bp)
931- $Tuple2(((bb._1 :+ StringEntry(bb._2, makeString(bb._3, ":"))) :+ dp), bb._3[aw])
937+ $Tuple2(((bb._1 :+ StringEntry(bb._2, makeString(bb._3, ":"))) :+ dq), bb._3[aw])
932938 }
933939 }
934940
936942
937943 @Callable(bi)
938944 func flight (bY,bZ) = {
939- let dp = dn(bi)
945+ let dq = do(bi)
940946 if (!(sigVerify_8Kb(bY, bZ, g)))
941947 then throw("signature does not match")
942948 else if ((size(bi.payments) != 0))
946952 let cb = split(split(ca[0], "|")[0], "_")
947953 let cc = parseIntValue(cb[0])
948954 let cd = parseIntValue(cb[1])
949- let dA = split(ca[1], ":")
950- let dB = dA[0]
951- let cg = parseIntValue(dA[1])
955+ let dB = split(ca[1], ":")
956+ let dC = dB[0]
957+ let cg = parseIntValue(dB[1])
952958 if (if ((cg > (lastBlock.timestamp + t)))
953959 then true
954960 else ((lastBlock.timestamp - t) > cg))
962968 else if ((0 >= cc))
963969 then throw("You can't fly with zero health")
964970 else {
965- let dv = aj(ai)
966- let ct = valueOrElse(getString(dv), k)
967- if ((dB == ct))
971+ let dw = aj(ai)
972+ let ct = valueOrElse(getString(dw), k)
973+ if ((dC == ct))
968974 then throw("You can't fly to the same location")
969- else $Tuple2([StringEntry(dv, if ((cd > 0))
970- then dB
971- else ct), IntegerEntry(ch, cd), dp], unit)
975+ else $Tuple2([StringEntry(dw, if ((cd > 0))
976+ then dC
977+ else ct), IntegerEntry(ch, cd), dq], unit)
972978 }
973979 }
974980 }
977983
978984
979985 @Callable(bi)
980-func setHealth (dy,ai) = {
981- let dp = dn(bi)
982- if (if ((0 > dy))
986+func setHealth (dz,ai) = {
987+ let dq = do(bi)
988+ if (if ((0 > dz))
983989 then true
984- else (dy > 100))
990+ else (dz > 100))
985991 then throw("HP should be within 0..100")
986- else [IntegerEntry(ak(ai), dy), dp]
992+ else [IntegerEntry(ak(ai), dz), dq]
987993 }
988994
989995
990996
991997 @Callable(bi)
992-func heal (dC,bp) = {
993- let dp = dn(bi)
994- if (if ((0 > dC))
998+func heal (dD,bp) = {
999+ let dq = do(bi)
1000+ if (if ((0 > dD))
9951001 then true
996- else (dC >= l))
997- then throw(("Unknown material: " + toString(dC)))
1002+ else (dD >= l))
1003+ then throw(("Unknown material: " + toString(dD)))
9981004 else if ((0 >= bp))
9991005 then throw(("Amount should be positive! " + toString(bp)))
10001006 else {
10011007 let ai = valueOrErrorMessage(getString(ad(toString(bi.caller))), "You don't have a duck staked")
10021008 let ch = ak(ai)
1003- let dD = valueOrElse(getInteger(ch), 100)
1004- if ((dD >= 100))
1009+ let dE = valueOrElse(getInteger(ch), 100)
1010+ if ((dE >= 100))
10051011 then throw("HP should be < 100 to heal")
10061012 else {
10071013 let bM = ah(ai)
10081014 let cj = bL(bM)
10091015 let ck = split(cj[ax], "_")
1010- let dE = parseIntValue(ck[dC])
1011- let dF = min([(bp / h), (100 - dD)])
1012- let dG = (dF * h)
1013- if ((dG > dE))
1014- then throw(((((("You need " + toString(dG)) + " of ") + G[dC]) + " to heal, but you backpack contains ") + toString(dE)))
1016+ let dF = parseIntValue(ck[dD])
1017+ let dG = min([(bp / h), (100 - dE)])
1018+ let dH = (dG * h)
1019+ if ((dH > dF))
1020+ then throw(((((("You need " + toString(dH)) + " of ") + G[dD]) + " to heal, but you backpack contains ") + toString(dF)))
10151021 else {
1016- let cl = bn(ck, dC, dG)
1017-[IntegerEntry(ch, (dD + dF)), StringEntry(bM, makeString([cj[av], cj[aw], cl, cj[ay]], ":")), dp]
1022+ let cl = bn(ck, dD, dH)
1023+[IntegerEntry(ch, (dE + dG)), StringEntry(bM, makeString([cj[av], cj[aw], cl, cj[ay]], ":")), dq]
10181024 }
10191025 }
10201026 }
10231029
10241030
10251031 @Callable(bi)
1026-func updateBackpack (ai,dH) = {
1027- let dp = dn(bi)
1032+func updateBackpack (ai,dI) = {
1033+ let dq = do(bi)
10281034 if ((bi.caller != f))
10291035 then throw("permission denied")
1030- else $Tuple2([StringEntry(ah(ai), dH), dp], dH)
1036+ else $Tuple2([StringEntry(ah(ai), dI), dq], dI)
10311037 }
10321038
10331039
10341040
10351041 @Callable(bi)
10361042 func buySLand () = {
1037- let dp = dn(bi)
1043+ let dq = do(bi)
10381044 if ((size(bi.payments) != 1))
10391045 then throw("Exactly one payment required")
10401046 else {
1041- let dq = value(bi.payments[0])
1042- if ((dq.assetId != b))
1047+ let dr = value(bi.payments[0])
1048+ if ((dr.assetId != b))
10431049 then throw("Allowed USDN payment only!")
1044- else if ((dq.amount != y))
1050+ else if ((dr.amount != y))
10451051 then throw(("Payment attached should be " + toString(y)))
10461052 else {
10471053 let bb = bO(bi.caller, bi.transactionId)
1048- $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2._1)
1054+ $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2._1)
10491055 }
10501056 }
10511057 }
10541060
10551061 @Callable(bi)
10561062 func expeditionBuy (bY,bZ) = {
1057- let dp = dn(bi)
1063+ let dq = do(bi)
10581064 if ((size(bi.payments) != 1))
10591065 then throw("Exactly one payment required")
10601066 else {
1061- let dq = value(bi.payments[0])
1062- if ((dq.assetId != b))
1067+ let dr = value(bi.payments[0])
1068+ if ((dr.assetId != b))
10631069 then throw("Allowed USDN payment only!")
1064- else if ((dq.amount != y))
1070+ else if ((dr.amount != y))
10651071 then throw(("Payment attached should be " + toString(y)))
10661072 else {
10671073 let bb = bX(false, bi.caller, bi.transactionId, bY, bZ)
10681074 if ((bb._2 == ""))
10691075 then bb
1070- else $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2)
1076+ else $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2)
10711077 }
10721078 }
10731079 }
10761082
10771083 @Callable(bi)
10781084 func expedition (bY,bZ) = {
1079- let dp = dn(bi)
1085+ let dq = do(bi)
10801086 if ((size(bi.payments) != 0))
10811087 then throw("expedition doesn't require any payments")
10821088 else {
10831089 let bb = bX(true, bi.caller, bi.transactionId, bY, bZ)
1084- $Tuple2((bb._1 :+ dp), bb._2)
1090+ $Tuple2((bb._1 :+ dq), bb._2)
10851091 }
10861092 }
10871093
10881094
10891095
10901096 @Callable(bi)
1091-func upgradeInfra (dt) = {
1092- let dp = dn(bi)
1097+func upgradeInfra (du) = {
1098+ let dq = do(bi)
10931099 if ((size(bi.payments) != 0))
10941100 then throw("Infrastructure upgrade doesn't require any payments")
10951101 else {
10961102 let bb = cI(true, bi.caller, 0)
1097- $Tuple2((bb._1 :+ dp), bb._2)
1103+ $Tuple2((bb._1 :+ dq), bb._2)
10981104 }
10991105 }
11001106
11011107
11021108
11031109 @Callable(bi)
1104-func upgradeInfraUsdn (dt) = {
1105- let dp = dn(bi)
1110+func upgradeInfraUsdn (du) = {
1111+ let dq = do(bi)
11061112 if ((size(bi.payments) != 1))
11071113 then throw("Exactly one payment required")
11081114 else {
1109- let dq = value(bi.payments[0])
1110- if ((dq.assetId != b))
1115+ let dr = value(bi.payments[0])
1116+ if ((dr.assetId != b))
11111117 then throw("Allowed USDN payment only!")
11121118 else {
1113- let bb = cI(false, bi.caller, dq.amount)
1114- $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2)
1119+ let bb = cI(false, bi.caller, dr.amount)
1120+ $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2)
11151121 }
11161122 }
11171123 }
11191125
11201126
11211127 @Callable(bi)
1122-func activateArtifact (dI) = {
1123- let dp = dn(bi)
1128+func activateArtifact (dJ) = {
1129+ let dq = do(bi)
11241130 if ((size(bi.payments) != 0))
11251131 then throw("Artifact activation doesn't require any payments")
11261132 else {
11271133 let bb = {
1128- let c = dI
1134+ let c = dJ
11291135 if (("PRESALE" == c))
11301136 then cP(toString(bi.caller))
11311137 else throw("Unknown artifact")
11321138 }
1133- (bb :+ dp)
1139+ (bb :+ dq)
11341140 }
11351141 }
11361142
11381144
11391145 @Callable(bi)
11401146 func mergeLands (cU) = {
1141- let dp = dn(bi)
1147+ let dq = do(bi)
11421148 if ((size(bi.payments) != 0))
11431149 then throw("Lands merging doesn't require any payments")
11441150 else {
1145- let bb = dl(true, toString(bi.caller), 0, cU, bi.transactionId)
1146- $Tuple2((bb._1 :+ dp), bb._2)
1151+ let bb = dm(true, toString(bi.caller), 0, cU, bi.transactionId)
1152+ $Tuple2((bb._1 :+ dq), bb._2)
11471153 }
11481154 }
11491155
11511157
11521158 @Callable(bi)
11531159 func mergeLandsUsdn (cU) = {
1154- let dp = dn(bi)
1160+ let dq = do(bi)
11551161 if ((size(bi.payments) != 1))
11561162 then throw("Exactly one payment required")
11571163 else {
1158- let dq = value(bi.payments[0])
1159- if ((dq.assetId != b))
1164+ let dr = value(bi.payments[0])
1165+ if ((dr.assetId != b))
11601166 then throw("Allowed USDN payment only!")
11611167 else {
1162- let bb = dl(false, toString(bi.caller), dq.amount, cU, bi.transactionId)
1163- $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2)
1168+ let bb = dm(false, toString(bi.caller), dr.amount, cU, bi.transactionId)
1169+ $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2)
11641170 }
11651171 }
11661172 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = take(drop(this.bytes, 1), 1)
55
66 let b = {
77 let c = a
88 if ((base58'2W' == c))
99 then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1010 else if ((base58'2T' == c))
1111 then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if ((base58'2W' == c))
1818 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
1919 else if ((base58'2T' == c))
2020 then this
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if ((base58'2W' == c))
2727 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
2828 else if ((base58'2T' == c))
2929 then this
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = addressFromStringValue({
3434 let c = a
3535 if ((base58'2W' == c))
3636 then "3P2sk1KncSxRaZs8b4CWGPw2jkvvav74u4D"
3737 else if ((base58'2T' == c))
3838 then "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep"
3939 else throw("Unknown chain")
4040 })
4141
4242 let g = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
4343
4444 let h = 10000
4545
4646 let i = "LAND"
4747
4848 let j = "DUCK"
4949
5050 let k = "Africa_F_Africa"
5151
5252 let l = 6
5353
5454 let m = 25
5555
5656 let n = 100
5757
5858 let o = 225
5959
6060 let p = 400
6161
6262 let q = 625
6363
6464 let r = 3456000
6565
6666 let s = 86400000
6767
6868 let t = 300000
6969
7070 let u = 158549
7171
7272 let v = {
7373 let c = a
7474 if ((base58'2W' == c))
7575 then 6307198406
7676 else if ((base58'2T' == c))
7777 then 63071984
7878 else throw("Unknown chain")
7979 }
8080
8181 let w = {
8282 let c = a
8383 if ((base58'2W' == c))
8484 then 40000000
8585 else if ((base58'2T' == c))
8686 then 400000
8787 else throw("Unknown chain")
8888 }
8989
9090 let x = {
9191 let c = a
9292 if ((base58'2W' == c))
9393 then 157679960139
9494 else if ((base58'2T' == c))
9595 then 1576799601
9696 else throw("Unknown chain")
9797 }
9898
9999 let y = {
100100 let c = a
101101 if ((base58'2W' == c))
102102 then 1000000000
103103 else if ((base58'2T' == c))
104104 then 10000000
105105 else throw("Unknown chain")
106106 }
107107
108108 let z = 1000000
109109
110110 let A = toBigInt(5)
111111
112112 let B = toBigInt(20)
113113
114114 let C = toBigInt((20 * 20))
115115
116116 let D = toBigInt(((20 * 20) * 20))
117117
118118 let E = toBigInt((((20 * 20) * 20) * 20))
119119
120120 let F = toBigInt(((((20 * 20) * 20) * 20) * 20))
121121
122122 let G = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
123123
124124 let H = ["Asia", "Europe", "Americas", "Oceania", "Africa"]
125125
126126 let I = "PRESALE"
127127
128128 let J = 500
129129
130130 func K (L) = ("lastTxIdByUser_" + L)
131131
132132
133133 func M () = "nextLandNum"
134134
135135
136136 func N (O) = ("landToAsset_" + O)
137137
138138
139139 func P (O,Q) = ((i + O) + Q)
140140
141141
142142 func R (S) = ("nftOwner_" + S)
143143
144144
145145 func T (S) = ("duckOwner_" + S)
146146
147147
148148 func U (S) = ("stakedTime_" + S)
149149
150150
151151 func V (S) = ("infraLevel_" + S)
152152
153153
154154 func W (S,X) = ((("infraLevelByAssetIdAndOwner_" + S) + "_") + X)
155155
156156
157157 func Y (S) = ("presaleArtActivated_" + S)
158158
159159
160160 func Z (S,X) = ((("presaleArtActivatedByAssetIdAndOwner_" + S) + "_") + X)
161161
162162
163163 func aa (ab,S) = makeString(["landArtStatus", ab, S], "_")
164164
165165
166166 func ac (ab,S,X) = makeString(["landArtStatusByTypeAssetIdAndOwner", ab, S, X], "_")
167167
168168
169169 func ad (X) = ("stakedDuckByOwner_" + X)
170170
171171
172172 func ae (af,S,X) = ((((("stakedTimeByTypeAssetIdAndOwner_" + af) + "_") + S) + "_") + X)
173173
174174
175175 func ag (O) = ("landOwner_" + O)
176176
177177
178178 func ah (ai) = ("backPack_" + ai)
179179
180180
181181 func aj (ai) = ("duckLocation_" + ai)
182182
183183
184184 func ak (ai) = ("duckHealth_" + ai)
185185
186186
187187 func al () = "resTypesProportions"
188188
189189
190190 func am (X) = ("stakedLandsByOwner_" + X)
191191
192192
193193 func an () = "contractsBlocked"
194194
195195
196196 let ao = 0
197197
198198 let ap = 1
199199
200200 let aq = 2
201201
202202 let ar = 3
203203
204204 let as = 0
205205
206206 let at = 1
207207
208208 let au = 2
209209
210210 let av = 0
211211
212212 let aw = 1
213213
214214 let ax = 2
215215
216216 let ay = 3
217217
218218 func az (aA) = {
219219 let c = aA
220220 if ($isInstanceOf(c, "String"))
221221 then {
222222 let aB = c
223223 aB
224224 }
225225 else throw("fail to cast into String")
226226 }
227227
228228
229229 func aC (aD,aE) = {
230230 let aF = (((((aE[0] + aE[1]) + aE[2]) + aE[3]) + aE[4]) + aE[5])
231231 if ((0 >= aF))
232232 then throw("Zero weights sum")
233233 else {
234234 let aG = fraction(aD, z, aF)
235235 func aH (aI,aJ) = (aI :+ fraction(aJ, aG, z))
236236
237237 let aK = aE
238238 let aL = size(aK)
239239 let aM = nil
240240 func aN (aO,aP) = if ((aP >= aL))
241241 then aO
242242 else aH(aO, aK[aP])
243243
244244 func aQ (aO,aP) = if ((aP >= aL))
245245 then aO
246246 else throw("List size exceeds 6")
247247
248248 aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
249249 }
250250 }
251251
252252
253253 func aR (aD) = {
254254 let aS = split(value(getString(al())), "_")
255255 if ((size(aS) != l))
256256 then throw("Wrong proportions data")
257257 else {
258258 let aT = [parseIntValue(aS[0]), parseIntValue(aS[1]), parseIntValue(aS[2]), parseIntValue(aS[3]), parseIntValue(aS[4]), parseIntValue(aS[5])]
259259 aC(aD, aT)
260260 }
261261 }
262262
263263
264264 func aU (aV,aW,aX) = {
265265 let aY = aR(aX)
266266 func aZ (aI,ba) = {
267267 let bb = (parseIntValue(aW[ba]) - aY[ba])
268268 if ((0 > bb))
269269 then throw(((((("Not enough material idx=" + toString(ba)) + ", you have ") + aW[ba]) + ", but need ") + toString(aY[ba])))
270270 else (aI :+ toString(bb))
271271 }
272272
273273 if (aV)
274274 then {
275275 let aK = [0, 1, 2, 3, 4, 5]
276276 let aL = size(aK)
277277 let aM = nil
278278 func aN (aO,aP) = if ((aP >= aL))
279279 then aO
280280 else aZ(aO, aK[aP])
281281
282282 func aQ (aO,aP) = if ((aP >= aL))
283283 then aO
284284 else throw("List size exceeds 6")
285285
286286 aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
287287 }
288288 else aW
289289 }
290290
291291
292292 func bc (bd,be,bf,bg) = if ((size(bd) != l))
293293 then throw("Wrong proportions data")
294294 else {
295295 func bh (aI,bi) = {
296296 let bb = (parseIntValue(bd[bi]) + ((bg * be[bi]) * bf))
297297 if ((0 > bb))
298298 then throw(((((((("Panic! Pieces of type=" + toString(bi)) + ", sign=") + toString(bg)) + ", terrainCounts[i]=") + toString(be[bi])) + ", landSizeIndex=") + toString(bf)))
299299 else (aI :+ toString(bb))
300300 }
301301
302302 let aT = {
303303 let aK = [0, 1, 2, 3, 4, 5]
304304 let aL = size(aK)
305305 let aM = nil
306306 func aN (aO,aP) = if ((aP >= aL))
307307 then aO
308308 else bh(aO, aK[aP])
309309
310310 func aQ (aO,aP) = if ((aP >= aL))
311311 then aO
312312 else throw("List size exceeds 6")
313313
314314 aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
315315 }
316316 makeString(aT, "_")
317317 }
318318
319319
320320 func bj (be,bf,bg) = {
321321 let bd = split(valueOrElse(getString(al()), "0_0_0_0_0_0"), "_")
322322 bc(bd, be, bf, bg)
323323 }
324324
325325
326326 func bk (bl) = [(size(split(bl, "A")) - 1), (size(split(bl, "B")) - 1), (size(split(bl, "C")) - 1), (size(split(bl, "D")) - 1), (size(split(bl, "E")) - 1), (size(split(bl, "F")) - 1)]
327327
328328
329329 func bm (Q) = {
330330 let c = Q
331331 if (("S" == c))
332332 then m
333333 else if (("M" == c))
334334 then n
335335 else if (("L" == c))
336336 then o
337337 else if (("XL" == c))
338338 then p
339339 else if (("XXL" == c))
340340 then q
341341 else throw("Unknown land size")
342342 }
343343
344344
345345 func bn (bo,ba,bp) = {
346346 func bq (aI,bi) = (aI :+ (if ((bi == ba))
347347 then toString((parseIntValue(bo[bi]) - bp))
348348 else bo[bi]))
349349
350350 let aT = {
351351 let aK = [0, 1, 2, 3, 4, 5]
352352 let aL = size(aK)
353353 let aM = nil
354354 func aN (aO,aP) = if ((aP >= aL))
355355 then aO
356356 else bq(aO, aK[aP])
357357
358358 func aQ (aO,aP) = if ((aP >= aL))
359359 then aO
360360 else throw("List size exceeds 6")
361361
362362 aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
363363 }
364364 makeString(aT, "_")
365365 }
366366
367367
368368 func br (bs,be,bt,bf,bu) = {
369369 func bv (aI,bi) = {
370370 let bw = ((fraction(bt, bu, s) * be[bi]) * bf)
371371 (aI :+ toString((parseIntValue(bs[bi]) + bw)))
372372 }
373373
374374 let aT = {
375375 let aK = [0, 1, 2, 3, 4, 5]
376376 let aL = size(aK)
377377 let aM = nil
378378 func aN (aO,aP) = if ((aP >= aL))
379379 then aO
380380 else bv(aO, aK[aP])
381381
382382 func aQ (aO,aP) = if ((aP >= aL))
383383 then aO
384384 else throw("List size exceeds 6")
385385
386386 aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
387387 }
388388 makeString(aT, "_")
389389 }
390390
391391
392392 func bx (by) = if ((by >= toBigInt(0)))
393393 then by
394394 else -(by)
395395
396396
397397 let bz = [[1, 4, 9, 10, 15], [5, 8, 13, 14, 15], [6, 9, 14, 15, 16], [4, 7, 8, 13, 18], [1, 6, 7, 15, 19]]
398398
399399 func bA (bB,bC) = {
400400 let bD = toInt((bB % B))
401401 let bE = if ((bC[0] > bD))
402402 then "A"
403403 else if ((bC[1] > bD))
404404 then "B"
405405 else if ((bC[2] > bD))
406406 then "C"
407407 else if ((bC[3] > bD))
408408 then "D"
409409 else if ((bC[4] > bD))
410410 then "E"
411411 else "F"
412412 bE
413413 }
414414
415415
416416 func bF (bG,bH) = {
417417 let bI = bz[bH]
418418 func bJ (aI,aJ) = $Tuple2((((((aI._1 + bA(aI._2, bI)) + bA((aI._2 / B), bI)) + bA((aI._2 / C), bI)) + bA((aI._2 / D), bI)) + bA((aI._2 / E), bI)), (aI._2 / F))
419419
420420 let bK = {
421421 let aK = [1, 2, 3, 4, 5]
422422 let aL = size(aK)
423423 let aM = $Tuple2("", (bG / A))
424424 func aN (aO,aP) = if ((aP >= aL))
425425 then aO
426426 else bJ(aO, aK[aP])
427427
428428 func aQ (aO,aP) = if ((aP >= aL))
429429 then aO
430430 else throw("List size exceeds 5")
431431
432432 aQ(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5)
433433 }
434434 bK._1
435435 }
436436
437437
438438 func bL (bM) = {
439439 let bN = split(valueOrElse(getString(bM), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
440440 [toString(valueOrElse(parseInt(bN[av]), 0)), if ((size(split(bN[aw], "_")) == l))
441441 then bN[aw]
442442 else "0_0_0_0_0_0", if ((size(split(bN[ax], "_")) == l))
443443 then bN[ax]
444444 else "0_0_0_0_0_0", bN[ay]]
445445 }
446446
447447
448448 func bO (bP,bQ) = {
449449 let bR = toString(bP)
450450 let bS = bx(toBigInt(bQ))
451451 let bT = valueOrElse(getInteger(M()), (J + 1))
452452 let O = toString(bT)
453453 let bH = toInt((bS % A))
454454 let bl = bF(bS, bH)
455455 let bU = H[bH]
456456 let bV = Issue(P(O, "S"), makeString([O, "S", bl, bU], "_"), 1, 0, false)
457457 let S = calculateAssetId(bV)
458458 let bW = toBase58String(S)
459459 $Tuple2([IntegerEntry(M(), (bT + 1)), bV, StringEntry(N(O), bW), StringEntry(R(bW), bR), StringEntry(ag(O), bR), IntegerEntry(V(bW), 0), IntegerEntry(W(bW, bR), 0), ScriptTransfer(bP, 1, S)], $Tuple2(bW, bU))
460460 }
461461
462462
463463 func bX (aV,bP,bQ,bY,bZ) = if (!(sigVerify_8Kb(bY, bZ, g)))
464464 then throw("signature does not match")
465465 else {
466466 let ca = split(toUtf8String(bY), ";")
467467 let cb = split(split(ca[0], "|")[0], "_")
468468 let cc = parseIntValue(cb[0])
469469 let cd = parseIntValue(cb[1])
470470 let ce = split(ca[1], ":")
471471 let cf = split(ce[0], "_")
472472 if ((cf[1] != "E"))
473473 then throw("expedition target location type should be E")
474474 else {
475475 let cg = parseIntValue(ce[1])
476476 if (if ((cg > (lastBlock.timestamp + t)))
477477 then true
478478 else ((lastBlock.timestamp - t) > cg))
479479 then throw("signature outdated")
480480 else {
481481 let bR = toString(bP)
482482 let ai = valueOrErrorMessage(getString(ad(bR)), "You don't have a duck staked")
483483 let ch = ak(ai)
484484 let ci = valueOrElse(getInteger(ch), 100)
485485 if ((ci != cc))
486486 then throw(((("oldHealth=" + toString(valueOrElse(getInteger(ch), 100))) + " from state does not match one from flight log=") + toString(cc)))
487487 else if ((0 >= cc))
488488 then throw("You can't fly with zero health")
489489 else if ((0 >= cd))
490490 then $Tuple2(((if (!(aV))
491491 then [ScriptTransfer(bP, y, b)]
492492 else nil) :+ IntegerEntry(ch, 0)), "")
493493 else {
494494 let bM = ah(ai)
495495 let cj = bL(bM)
496496 let ck = split(cj[ax], "_")
497497 let cl = makeString(aU(aV, ck, x), "_")
498498 let cm = bO(bP, bQ)
499499 let bW = cm._2._1
500500 $Tuple2((((cm._1 :+ StringEntry(aj(ai), makeString([cm._2._2, "L", bW], "_"))) :+ IntegerEntry(ch, cd)) :+ StringEntry(bM, makeString([cj[av], cj[aw], cl, cj[ay]], ":"))), bW)
501501 }
502502 }
503503 }
504504 }
505505
506506
507507 func cn (co,cp) = {
508508 let cq = valueOrElse(getInteger(V(co)), 0)
509509 let cr = valueOrElse(getInteger(aa(I, co)), if (valueOrElse(getBoolean(Y(co)), false))
510510 then cp
511511 else 0)
512512 ((r + fraction(r, cq, 4)) + fraction(r, (cr * 3), (cp * 20)))
513513 }
514514
515515
516516 func cs (L) = {
517517 let ai = valueOrErrorMessage(getString(ad(L)), "You don't have a duck staked")
518518 let ct = valueOrElse(getString(aj(ai)), k)
519519 let cu = split(value(ct), "_")
520520 if ((cu[at] != "L"))
521521 then throw((("Duck location type is " + cu[at]) + ", but should be L"))
522522 else {
523523 let co = cu[au]
524524 let cv = value(assetInfo(fromBase58String(co)))
525525 let cw = U(co)
526526 let cx = valueOrErrorMessage(getInteger(cw), (("Your duck is on " + cv.name) + ", which is not staked"))
527527 let cy = valueOrErrorMessage(getString(R(co)), (("NFT " + cv.name) + " is orphaned"))
528528 if ((cy != L))
529529 then throw((i + " is not yours"))
530530 else {
531531 let cz = split(cv.description, "_")
532532 $Tuple4(ai, co, cz, cx)
533533 }
534534 }
535535 }
536536
537537
538538 func cA (L,bp) = if ((0 > bp))
539539 then throw("Negative amount")
540540 else {
541541 let cB = cs(L)
542542 let Q = cB._3[ap]
543543 let be = bk(cB._3[aq])
544544 let bt = (lastBlock.timestamp - cB._4)
545545 if ((0 > bt))
546546 then throw(((("Saved timestamp is in future, saved = " + toString(cB._4)) + ", current = ") + toString(lastBlock.timestamp)))
547547 else {
548548 let cp = bm(Q)
549549 let cC = cn(cB._2, cp)
550550 let cD = fraction(bt, (cC * cp), s)
551551 if ((bp > cD))
552552 then throw(((("Not enough resources, available = " + toString(cD)) + ", requested = ") + toString(bp)))
553553 else {
554554 let cE = fraction((cD - bp), s, (cC * cp))
555555 let cF = (lastBlock.timestamp - cE)
556556 let bM = ah(cB._1)
557557 let cj = bL(bM)
558558 let bs = split(cj[aw], "_")
559559 let cG = br(bs, be, (bt - cE), (cp / m), cC)
560560 $Tuple3([IntegerEntry(U(cB._2), cF), IntegerEntry(ae(i, cB._2, L), cF)], bM, [cj[av], cG, cj[ax], cj[ay]])
561561 }
562562 }
563563 }
564564
565565
566566 func cH (L,co,cp) = {
567567 let cw = U(co)
568568 let cx = value(getInteger(cw))
569569 let cD = (fraction((lastBlock.timestamp - cx), cn(co, cp), s) * cp)
570570 cA(L, cD)
571571 }
572572
573573
574574 func cI (aV,bP,cJ) = {
575575 let L = toString(bP)
576576 let cB = cs(L)
577577 let cp = bm(cB._3[ap])
578578 let cK = V(cB._2)
579579 let cL = valueOrElse(getInteger(cK), 0)
580580 if ((cL >= 3))
581581 then throw("Currently max infrastructure level = 3")
582582 else {
583583 let cM = (cL + 1)
584584 let cN = fraction(w, (cp * cM), m)
585585 if (if (!(aV))
586586 then (cJ != cN)
587587 else false)
588588 then throw(("Payment attached should be " + toString(cN)))
589589 else {
590590 let bM = ah(cB._1)
591591 let cj = bL(bM)
592592 let ck = split(cj[ax], "_")
593593 let cl = makeString(aU(aV, ck, fraction(v, (cp * cM), m)), "_")
594594 let cO = cH(L, cB._2, cp)
595595 $Tuple2(([IntegerEntry(cK, cM), IntegerEntry(W(cB._2, L), cM), StringEntry(bM, makeString([cj[av], cO._3[aw], cl, cj[ay]], ":"))] ++ cO._1), cM)
596596 }
597597 }
598598 }
599599
600600
601601 func cP (L) = {
602602 let cB = cs(L)
603603 let co = cB._2
604604 let cQ = Y(co)
605605 if (valueOrElse(getBoolean(cQ), false))
606606 then throw("Presale artifact is already activated")
607607 else if ((parseIntValue(cB._3[ao]) > J))
608608 then throw((((i + " ") + co) + " is not eligible for presale artifact"))
609609 else {
610610 let cp = bm(cB._3[ap])
611611 let cO = cH(L, co, cp)
612612 (((((cO._1 :+ BooleanEntry(cQ, true)) :+ BooleanEntry(Z(co, L), true)) :+ IntegerEntry(aa(I, co), cp)) :+ IntegerEntry(ac(I, co, L), cp)) :+ StringEntry(cO._2, makeString(cO._3, ":")))
613613 }
614614 }
615615
616616
617617 func cR (cS,cM,cT,L,cU,bQ,cV) = {
618618 let ai = valueOrErrorMessage(getString(ad(L)), "You don't have a duck staked")
619619 func cW (aI,co) = {
620620 let cv = value(assetInfo(fromBase58String(co)))
621621 let cw = U(co)
622622 let cx = valueOrErrorMessage(getInteger(cw), (("NFT " + cv.name) + " is not staked"))
623623 let cy = valueOrErrorMessage(getString(R(co)), (("NFT " + cv.name) + " is orphaned"))
624624 if ((cy != L))
625625 then throw((i + " is not yours"))
626626 else {
627627 let cz = split(cv.description, "_")
628628 let bU = cz[ar]
629629 if (if ((aI._3 != ""))
630630 then (aI._3 != bU)
631631 else false)
632632 then throw("Lands should be on the same continent to merge")
633633 else {
634634 let Q = cz[ap]
635635 let cX = aI._1
636636 let bi = valueOrErrorMessage(indexOf(cX, Q), "You haven't passed all the lands needed")
637637 let cY = (take(cX, bi) + drop(cX, (bi + 1)))
638638 let cp = bm(Q)
639639 let cZ = (aI._2 + valueOrElse(getInteger(aa(I, co)), if (valueOrElse(getBoolean(Y(co)), false))
640640 then cp
641641 else 0))
642642 let cq = valueOrElse(getInteger(V(co)), 0)
643643 let da = {
644644 let c = Q
645645 if (("S" == c))
646646 then 3
647647 else if (("M" == c))
648648 then 4
649649 else if (("L" == c))
650650 then 5
651651 else if (("XL" == c))
652652 then 6
653653 else throw("Only S, M, L, XL can merge")
654654 }
655655 if ((cq != da))
656656 then throw("All lands should be maxed to merge")
657657 else {
658658 let O = cz[ao]
659659 let be = bk(cz[aq])
660660 let bt = (lastBlock.timestamp - cx)
661661 if ((0 > bt))
662662 then throw(((("Saved timestamp is in future, saved = " + toString(cx)) + ", current = ") + toString(lastBlock.timestamp)))
663663 else {
664664 let cC = cn(co, cp)
665665 let cG = br(split(aI._4, "_"), be, bt, (cp / m), cC)
666666 let aS = bc(split(aI._6, "_"), be, (cp / m), -1)
667667 let db = aI._7
668668 let ba = indexOf(db, co)
669669 if (!(isDefined(ba)))
670670 then throw(("Your staked lands don't contain " + co))
671671 else $Tuple7(cY, cZ, bU, cG, (((((((((((((aI._5 :+ DeleteEntry(U(co))) :+ DeleteEntry(ae(i, co, L))) :+ DeleteEntry(N(O))) :+ DeleteEntry(P(O, Q))) :+ DeleteEntry(R(co))) :+ DeleteEntry(V(co))) :+ DeleteEntry(W(co, L))) :+ DeleteEntry(Y(co))) :+ DeleteEntry(Z(co, L))) :+ DeleteEntry(aa(I, co))) :+ DeleteEntry(ac(I, co, L))) :+ DeleteEntry(ag(O))) :+ Burn(fromBase58String(co), 1)), aS, removeByIndex(db, value(ba)))
672672 }
673673 }
674674 }
675675 }
676676 }
677677
678678 let bM = ah(ai)
679679 let cj = bL(bM)
680680 let dc = valueOrElse(getString(al()), "0_0_0_0_0_0")
681681 let dd = am(L)
682- let de = split_51C(valueOrElse(getString(dd), ""), "_")
682+ let de = getString(dd)
683+ let df = if (isDefined(de))
684+ then split_51C(value(de), "_")
685+ else nil
683686 let aT = {
684687 let aK = cU
685688 let aL = size(aK)
686- let aM = $Tuple7(cT, 0, "", cj[aw], nil, dc, de)
689+ let aM = $Tuple7(cT, 0, "", cj[aw], nil, dc, df)
687690 func aN (aO,aP) = if ((aP >= aL))
688691 then aO
689692 else cW(aO, aK[aP])
690693
691694 func aQ (aO,aP) = if ((aP >= aL))
692695 then aO
693696 else throw("List size exceeds 5")
694697
695698 aQ(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5)
696699 }
697700 let bU = aT._3
698701 let bH = valueOrErrorMessage(indexOf(H, bU), ("Unknown continent: " + bU))
699702 let bl = bF(bx(toBigInt(bQ)), bH)
700703 let bT = valueOrElse(getInteger(M()), (J + 1))
701- let df = toString(bT)
702- let bV = Issue(P(df, cS), makeString([df, cS, bl, bU], "_"), 1, 0, false)
704+ let dg = toString(bT)
705+ let bV = Issue(P(dg, cS), makeString([dg, cS, bl, bU], "_"), 1, 0, false)
703706 let S = calculateAssetId(bV)
704- let dg = toBase58String(S)
707+ let dh = toBase58String(S)
705708 let cl = makeString(aU((cV > 0), split(cj[ax], "_"), cV), "_")
706709 $Tuple2(((((((((((((((aT._5 :+ (if ((size(aT._7) > 0))
707710 then StringEntry(dd, makeString_11C(aT._7, "_"))
708- else DeleteEntry(dd))) :+ IntegerEntry(M(), (bT + 1))) :+ bV) :+ StringEntry(N(df), dg)) :+ StringEntry(R(dg), L)) :+ StringEntry(ag(df), L)) :+ IntegerEntry(aa(I, dg), aT._2)) :+ IntegerEntry(ac(I, dg, L), aT._2)) :+ IntegerEntry(V(dg), cM)) :+ IntegerEntry(W(dg, L), cM)) :+ StringEntry(bM, makeString([cj[av], aT._4, cl, cj[ay]], ":"))) :+ StringEntry(al(), aT._6)) :+ StringEntry(aj(ai), makeString([bU, "L", dg], "_"))) :+ ScriptTransfer(addressFromStringValue(L), 1, S)), dg)
711+ else DeleteEntry(dd))) :+ IntegerEntry(M(), (bT + 1))) :+ bV) :+ StringEntry(N(dg), dh)) :+ StringEntry(R(dh), L)) :+ StringEntry(ag(dg), L)) :+ IntegerEntry(aa(I, dh), aT._2)) :+ IntegerEntry(ac(I, dh, L), aT._2)) :+ IntegerEntry(V(dh), cM)) :+ IntegerEntry(W(dh, L), cM)) :+ StringEntry(bM, makeString([cj[av], aT._4, cl, cj[ay]], ":"))) :+ StringEntry(al(), aT._6)) :+ StringEntry(aj(ai), makeString([bU, "L", dh], "_"))) :+ ScriptTransfer(addressFromStringValue(L), 1, S)), dh)
709712 }
710713
711714
712-func dh (L,cU,bQ) = cR("M", 3, "SSSS", L, cU, bQ, 0)
715+func di (L,cU,bQ) = cR("M", 3, "SSSS", L, cU, bQ, 0)
713716
714717
715-func di (L,cU,bQ,aV,cJ) = {
718+func dj (L,cU,bQ,aV,cJ) = {
716719 let cN = (w * 4)
717720 if (if (!(aV))
718721 then (cJ != cN)
719722 else false)
720723 then throw(("Payment attached should be " + toString(cN)))
721724 else cR("L", 4, "SMM", L, cU, bQ, (v * 4))
722725 }
723726
724727
725-func dj (L,cU,bQ,aV,cJ) = {
728+func dk (L,cU,bQ,aV,cJ) = {
726729 let cN = (w * 47)
727730 if (if (!(aV))
728731 then (cJ != cN)
729732 else false)
730733 then throw(("Payment attached should be " + toString(cN)))
731734 else cR("XL", 5, "SSSML", L, cU, bQ, (v * 47))
732735 }
733736
734737
735-func dk (L,cU,bQ,aV,cJ) = {
738+func dl (L,cU,bQ,aV,cJ) = {
736739 let cN = (w * 54)
737740 if (if (!(aV))
738741 then (cJ != cN)
739742 else false)
740743 then throw(("Payment attached should be " + toString(cN)))
741744 else cR("XXL", 6, "LXL", L, cU, bQ, (v * 54))
742745 }
743746
744747
745-func dl (aV,L,cJ,cU,bQ) = {
746- let dm = {
748+func dm (aV,L,cJ,cU,bQ) = {
749+ let dn = {
747750 let c = size(cU)
748751 if ((4 == c))
749- then dh(L, cU, bQ)
752+ then di(L, cU, bQ)
750753 else if ((3 == c))
751- then di(L, cU, bQ, aV, cJ)
754+ then dj(L, cU, bQ, aV, cJ)
752755 else if ((5 == c))
753- then dj(L, cU, bQ, aV, cJ)
756+ then dk(L, cU, bQ, aV, cJ)
754757 else if ((2 == c))
755- then dk(L, cU, bQ, aV, cJ)
758+ then dl(L, cU, bQ, aV, cJ)
756759 else throw("Unknown merge")
757760 }
758- dm
761+ dn
759762 }
760763
761764
762-func dn (bi) = if (valueOrElse(getBoolean(an()), false))
765+func do (bi) = if (valueOrElse(getBoolean(an()), false))
763766 then throw("Contracts are under maintenance")
764767 else StringEntry(K(toString(bi.originCaller)), toBase58String(bi.transactionId))
765768
766769
767770 @Callable(bi)
768-func setBlocked (do) = if ((bi.caller != this))
771+func setBlocked (dp) = if ((bi.caller != this))
769772 then throw("permission denied")
770- else [BooleanEntry(an(), do)]
773+ else [BooleanEntry(an(), dp)]
771774
772775
773776
774777 @Callable(bi)
775778 func stakeLand () = {
776- let dp = dn(bi)
779+ let dq = do(bi)
777780 if ((size(bi.payments) != 1))
778781 then throw("Exactly one payment required")
779782 else {
780- let dq = value(bi.payments[0])
781- let S = value(dq.assetId)
782- let dr = toString(bi.caller)
783- if ((dq.amount != 1))
783+ let dr = value(bi.payments[0])
784+ let S = value(dr.assetId)
785+ let ds = toString(bi.caller)
786+ if ((dr.amount != 1))
784787 then throw((("NFT " + i) + " token should be attached as payment"))
785788 else {
786789 let cv = value(assetInfo(S))
787790 if ((cv.issuer != this))
788791 then throw("Unknown issuer of token")
789792 else if (!(contains(cv.name, i)))
790793 then throw((("Only NFT " + i) + " tokens are accepted"))
791794 else {
792- let ds = drop(cv.name, 4)
793- let O = if (contains(ds, "XXL"))
794- then dropRight(ds, 3)
795- else if (contains(ds, "XL"))
796- then dropRight(ds, 2)
797- else dropRight(ds, 1)
795+ let dt = drop(cv.name, 4)
796+ let O = if (contains(dt, "XXL"))
797+ then dropRight(dt, 3)
798+ else if (contains(dt, "XL"))
799+ then dropRight(dt, 2)
800+ else dropRight(dt, 1)
798801 if (!(isDefined(parseInt(O))))
799802 then throw(("Cannot parse land number from " + cv.name))
800803 else {
801804 let co = toBase58String(S)
802805 let cw = U(co)
803806 if (isDefined(getInteger(cw)))
804807 then throw((("NFT " + cv.name) + " is already staked"))
805808 else {
806809 let cz = split(cv.description, "_")
807810 let be = bk(cz[aq])
808811 let aS = bj(be, (bm(cz[ap]) / m), 1)
809- let db = split_51C(valueOrElse(getString(am(dr)), ""), "_")
812+ let de = getString(am(ds))
813+ let db = if (isDefined(de))
814+ then split_51C(value(de), "_")
815+ else nil
810816 if (containsElement(db, co))
811817 then throw(("Your staked lands already contain " + co))
812- else [IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(i, co, dr), lastBlock.timestamp), StringEntry(am(dr), makeString_11C((db :+ co), "_")), StringEntry(R(co), dr), StringEntry(ag(O), dr), StringEntry(al(), aS), dp]
818+ else [IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(i, co, ds), lastBlock.timestamp), StringEntry(am(ds), makeString_11C((db :+ co), "_")), StringEntry(R(co), ds), StringEntry(ag(O), ds), StringEntry(al(), aS), dq]
813819 }
814820 }
815821 }
816822 }
817823 }
818824 }
819825
820826
821827
822828 @Callable(bi)
823-func unstakeLand (dt) = {
824- let dp = dn(bi)
829+func unstakeLand (du) = {
830+ let dq = do(bi)
825831 if ((size(bi.payments) != 0))
826832 then throw("unstake doesn't require any payments")
827833 else {
828834 let L = toString(bi.caller)
829835 let cB = cs(L)
830836 let co = cB._2
831837 let dd = am(L)
832838 let be = bk(cB._3[aq])
833839 let cp = bm(cB._3[ap])
834840 let aS = bj(be, (cp / m), -1)
835841 let cO = cH(L, co, cp)
836842 let db = split_51C(valueOrElse(getString(dd), ""), "_")
837843 let ba = indexOf(db, co)
838844 if (!(isDefined(ba)))
839845 then throw(("Your staked lands don't contain " + co))
840846 else [ScriptTransfer(bi.caller, 1, fromBase58String(co)), DeleteEntry(U(co)), DeleteEntry(ae(i, co, L)), StringEntry(al(), aS), StringEntry(cO._2, makeString(cO._3, ":")), if ((size(db) > 1))
841847 then StringEntry(dd, makeString_11C(removeByIndex(db, value(ba)), "_"))
842- else DeleteEntry(dd), dp]
848+ else DeleteEntry(dd), dq]
843849 }
844850 }
845851
846852
847853
848854 @Callable(bi)
849855 func stakeDuck () = {
850- let dp = dn(bi)
856+ let dq = do(bi)
851857 if ((size(bi.payments) != 1))
852858 then throw("Exactly one payment required")
853859 else {
854- let dq = value(bi.payments[0])
855- let S = value(dq.assetId)
856- let dr = toString(bi.caller)
857- if ((dq.amount != 1))
860+ let dr = value(bi.payments[0])
861+ let S = value(dr.assetId)
862+ let ds = toString(bi.caller)
863+ if ((dr.amount != 1))
858864 then throw((("NFT " + j) + " token should be attached as payment"))
859865 else {
860866 let cv = value(assetInfo(S))
861867 if (if ((cv.issuer != d))
862868 then (cv.issuer != e)
863869 else false)
864870 then throw((("Unknown issuer of " + j) + " token"))
865871 else if (!(contains(cv.name, j)))
866872 then throw((("Only NFT " + j) + " tokens are accepted"))
867873 else {
868- let du = toBase58String(S)
869- let cw = U(du)
874+ let dv = toBase58String(S)
875+ let cw = U(dv)
870876 if (isDefined(getInteger(cw)))
871877 then throw((("NFT " + cv.name) + " is already staked"))
872- else if (isDefined(getString(ad(dr))))
878+ else if (isDefined(getString(ad(ds))))
873879 then throw(("You already staked one duck: " + cv.name))
874880 else {
875- let dv = aj(du)
876- let dw = getString(dv)
877- let bM = ah(du)
878- let dx = getString(bM)
879- ([IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(j, toBase58String(S), dr), lastBlock.timestamp), StringEntry(T(du), dr), StringEntry(ad(dr), du)] ++ (if (isDefined(dw))
881+ let dw = aj(dv)
882+ let dx = getString(dw)
883+ let bM = ah(dv)
884+ let dy = getString(bM)
885+ ([IntegerEntry(cw, lastBlock.timestamp), IntegerEntry(ae(j, toBase58String(S), ds), lastBlock.timestamp), StringEntry(T(dv), ds), StringEntry(ad(ds), dv)] ++ (if (isDefined(dx))
880886 then nil
881- else ([StringEntry(dv, k)] ++ (if (isDefined(dx))
887+ else ([StringEntry(dw, k)] ++ (if (isDefined(dy))
882888 then nil
883- else (([StringEntry(bM, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ak(du), 100)) :+ dp)))))
889+ else (([StringEntry(bM, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ak(dv), 100)) :+ dq)))))
884890 }
885891 }
886892 }
887893 }
888894 }
889895
890896
891897
892898 @Callable(bi)
893-func unstakeDuck (du) = {
894- let dp = dn(bi)
899+func unstakeDuck (dv) = {
900+ let dq = do(bi)
895901 if ((size(bi.payments) != 0))
896902 then throw("unstake doesn't require any payments")
897903 else {
898- let S = fromBase58String(du)
899- let dr = toString(bi.caller)
904+ let S = fromBase58String(dv)
905+ let ds = toString(bi.caller)
900906 let cv = value(assetInfo(S))
901907 let cw = U(toBase58String(S))
902908 if (!(isDefined(cw)))
903909 then throw((("NFT " + cv.name) + " is not staked"))
904- else if (!(isDefined(ad(dr))))
910+ else if (!(isDefined(ad(ds))))
905911 then throw((("The duck " + cv.name) + " is not staked"))
906912 else {
907913 let cy = valueOrErrorMessage(getString(T(toBase58String(S))), (("NFT " + cv.name) + " is orphaned"))
908- if ((cy != dr))
914+ if ((cy != ds))
909915 then throw("Staked NFT is not yours")
910916 else {
911- let ch = ak(du)
912- let dy = valueOrElse(getInteger(ch), 100)
913- if ((dy != 100))
917+ let ch = ak(dv)
918+ let dz = valueOrElse(getInteger(ch), 100)
919+ if ((dz != 100))
914920 then throw("Please heal your duck before unstaking")
915- else [ScriptTransfer(bi.caller, 1, S), DeleteEntry(cw), DeleteEntry(ch), DeleteEntry(aj(du)), DeleteEntry(T(du)), DeleteEntry(ae(j, du, dr)), DeleteEntry(ad(dr)), dp]
921+ else [ScriptTransfer(bi.caller, 1, S), DeleteEntry(cw), DeleteEntry(ch), DeleteEntry(aj(dv)), DeleteEntry(T(dv)), DeleteEntry(ae(j, dv, ds)), DeleteEntry(ad(ds)), dq]
916922 }
917923 }
918924 }
919925 }
920926
921927
922928
923929 @Callable(bi)
924-func claimRes (bp,dz) = {
925- let dp = dn(bi)
930+func claimRes (bp,dA) = {
931+ let dq = do(bi)
926932 if ((size(bi.payments) != 0))
927933 then throw("claimRes doesn't require any payments")
928934 else {
929935 let L = toString(bi.originCaller)
930936 let bb = cA(L, bp)
931- $Tuple2(((bb._1 :+ StringEntry(bb._2, makeString(bb._3, ":"))) :+ dp), bb._3[aw])
937+ $Tuple2(((bb._1 :+ StringEntry(bb._2, makeString(bb._3, ":"))) :+ dq), bb._3[aw])
932938 }
933939 }
934940
935941
936942
937943 @Callable(bi)
938944 func flight (bY,bZ) = {
939- let dp = dn(bi)
945+ let dq = do(bi)
940946 if (!(sigVerify_8Kb(bY, bZ, g)))
941947 then throw("signature does not match")
942948 else if ((size(bi.payments) != 0))
943949 then throw("flight doesn't require any payments")
944950 else {
945951 let ca = split(toUtf8String(bY), ";")
946952 let cb = split(split(ca[0], "|")[0], "_")
947953 let cc = parseIntValue(cb[0])
948954 let cd = parseIntValue(cb[1])
949- let dA = split(ca[1], ":")
950- let dB = dA[0]
951- let cg = parseIntValue(dA[1])
955+ let dB = split(ca[1], ":")
956+ let dC = dB[0]
957+ let cg = parseIntValue(dB[1])
952958 if (if ((cg > (lastBlock.timestamp + t)))
953959 then true
954960 else ((lastBlock.timestamp - t) > cg))
955961 then throw("signature outdated")
956962 else {
957963 let ai = valueOrErrorMessage(getString(ad(toString(bi.caller))), "You don't have a duck staked")
958964 let ch = ak(ai)
959965 let ci = valueOrElse(getInteger(ch), 100)
960966 if ((ci != cc))
961967 then throw(((("oldHealth=" + toString(valueOrElse(getInteger(ch), 100))) + " from state does not match one from flight log=") + toString(cc)))
962968 else if ((0 >= cc))
963969 then throw("You can't fly with zero health")
964970 else {
965- let dv = aj(ai)
966- let ct = valueOrElse(getString(dv), k)
967- if ((dB == ct))
971+ let dw = aj(ai)
972+ let ct = valueOrElse(getString(dw), k)
973+ if ((dC == ct))
968974 then throw("You can't fly to the same location")
969- else $Tuple2([StringEntry(dv, if ((cd > 0))
970- then dB
971- else ct), IntegerEntry(ch, cd), dp], unit)
975+ else $Tuple2([StringEntry(dw, if ((cd > 0))
976+ then dC
977+ else ct), IntegerEntry(ch, cd), dq], unit)
972978 }
973979 }
974980 }
975981 }
976982
977983
978984
979985 @Callable(bi)
980-func setHealth (dy,ai) = {
981- let dp = dn(bi)
982- if (if ((0 > dy))
986+func setHealth (dz,ai) = {
987+ let dq = do(bi)
988+ if (if ((0 > dz))
983989 then true
984- else (dy > 100))
990+ else (dz > 100))
985991 then throw("HP should be within 0..100")
986- else [IntegerEntry(ak(ai), dy), dp]
992+ else [IntegerEntry(ak(ai), dz), dq]
987993 }
988994
989995
990996
991997 @Callable(bi)
992-func heal (dC,bp) = {
993- let dp = dn(bi)
994- if (if ((0 > dC))
998+func heal (dD,bp) = {
999+ let dq = do(bi)
1000+ if (if ((0 > dD))
9951001 then true
996- else (dC >= l))
997- then throw(("Unknown material: " + toString(dC)))
1002+ else (dD >= l))
1003+ then throw(("Unknown material: " + toString(dD)))
9981004 else if ((0 >= bp))
9991005 then throw(("Amount should be positive! " + toString(bp)))
10001006 else {
10011007 let ai = valueOrErrorMessage(getString(ad(toString(bi.caller))), "You don't have a duck staked")
10021008 let ch = ak(ai)
1003- let dD = valueOrElse(getInteger(ch), 100)
1004- if ((dD >= 100))
1009+ let dE = valueOrElse(getInteger(ch), 100)
1010+ if ((dE >= 100))
10051011 then throw("HP should be < 100 to heal")
10061012 else {
10071013 let bM = ah(ai)
10081014 let cj = bL(bM)
10091015 let ck = split(cj[ax], "_")
1010- let dE = parseIntValue(ck[dC])
1011- let dF = min([(bp / h), (100 - dD)])
1012- let dG = (dF * h)
1013- if ((dG > dE))
1014- then throw(((((("You need " + toString(dG)) + " of ") + G[dC]) + " to heal, but you backpack contains ") + toString(dE)))
1016+ let dF = parseIntValue(ck[dD])
1017+ let dG = min([(bp / h), (100 - dE)])
1018+ let dH = (dG * h)
1019+ if ((dH > dF))
1020+ then throw(((((("You need " + toString(dH)) + " of ") + G[dD]) + " to heal, but you backpack contains ") + toString(dF)))
10151021 else {
1016- let cl = bn(ck, dC, dG)
1017-[IntegerEntry(ch, (dD + dF)), StringEntry(bM, makeString([cj[av], cj[aw], cl, cj[ay]], ":")), dp]
1022+ let cl = bn(ck, dD, dH)
1023+[IntegerEntry(ch, (dE + dG)), StringEntry(bM, makeString([cj[av], cj[aw], cl, cj[ay]], ":")), dq]
10181024 }
10191025 }
10201026 }
10211027 }
10221028
10231029
10241030
10251031 @Callable(bi)
1026-func updateBackpack (ai,dH) = {
1027- let dp = dn(bi)
1032+func updateBackpack (ai,dI) = {
1033+ let dq = do(bi)
10281034 if ((bi.caller != f))
10291035 then throw("permission denied")
1030- else $Tuple2([StringEntry(ah(ai), dH), dp], dH)
1036+ else $Tuple2([StringEntry(ah(ai), dI), dq], dI)
10311037 }
10321038
10331039
10341040
10351041 @Callable(bi)
10361042 func buySLand () = {
1037- let dp = dn(bi)
1043+ let dq = do(bi)
10381044 if ((size(bi.payments) != 1))
10391045 then throw("Exactly one payment required")
10401046 else {
1041- let dq = value(bi.payments[0])
1042- if ((dq.assetId != b))
1047+ let dr = value(bi.payments[0])
1048+ if ((dr.assetId != b))
10431049 then throw("Allowed USDN payment only!")
1044- else if ((dq.amount != y))
1050+ else if ((dr.amount != y))
10451051 then throw(("Payment attached should be " + toString(y)))
10461052 else {
10471053 let bb = bO(bi.caller, bi.transactionId)
1048- $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2._1)
1054+ $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2._1)
10491055 }
10501056 }
10511057 }
10521058
10531059
10541060
10551061 @Callable(bi)
10561062 func expeditionBuy (bY,bZ) = {
1057- let dp = dn(bi)
1063+ let dq = do(bi)
10581064 if ((size(bi.payments) != 1))
10591065 then throw("Exactly one payment required")
10601066 else {
1061- let dq = value(bi.payments[0])
1062- if ((dq.assetId != b))
1067+ let dr = value(bi.payments[0])
1068+ if ((dr.assetId != b))
10631069 then throw("Allowed USDN payment only!")
1064- else if ((dq.amount != y))
1070+ else if ((dr.amount != y))
10651071 then throw(("Payment attached should be " + toString(y)))
10661072 else {
10671073 let bb = bX(false, bi.caller, bi.transactionId, bY, bZ)
10681074 if ((bb._2 == ""))
10691075 then bb
1070- else $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2)
1076+ else $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2)
10711077 }
10721078 }
10731079 }
10741080
10751081
10761082
10771083 @Callable(bi)
10781084 func expedition (bY,bZ) = {
1079- let dp = dn(bi)
1085+ let dq = do(bi)
10801086 if ((size(bi.payments) != 0))
10811087 then throw("expedition doesn't require any payments")
10821088 else {
10831089 let bb = bX(true, bi.caller, bi.transactionId, bY, bZ)
1084- $Tuple2((bb._1 :+ dp), bb._2)
1090+ $Tuple2((bb._1 :+ dq), bb._2)
10851091 }
10861092 }
10871093
10881094
10891095
10901096 @Callable(bi)
1091-func upgradeInfra (dt) = {
1092- let dp = dn(bi)
1097+func upgradeInfra (du) = {
1098+ let dq = do(bi)
10931099 if ((size(bi.payments) != 0))
10941100 then throw("Infrastructure upgrade doesn't require any payments")
10951101 else {
10961102 let bb = cI(true, bi.caller, 0)
1097- $Tuple2((bb._1 :+ dp), bb._2)
1103+ $Tuple2((bb._1 :+ dq), bb._2)
10981104 }
10991105 }
11001106
11011107
11021108
11031109 @Callable(bi)
1104-func upgradeInfraUsdn (dt) = {
1105- let dp = dn(bi)
1110+func upgradeInfraUsdn (du) = {
1111+ let dq = do(bi)
11061112 if ((size(bi.payments) != 1))
11071113 then throw("Exactly one payment required")
11081114 else {
1109- let dq = value(bi.payments[0])
1110- if ((dq.assetId != b))
1115+ let dr = value(bi.payments[0])
1116+ if ((dr.assetId != b))
11111117 then throw("Allowed USDN payment only!")
11121118 else {
1113- let bb = cI(false, bi.caller, dq.amount)
1114- $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2)
1119+ let bb = cI(false, bi.caller, dr.amount)
1120+ $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2)
11151121 }
11161122 }
11171123 }
11181124
11191125
11201126
11211127 @Callable(bi)
1122-func activateArtifact (dI) = {
1123- let dp = dn(bi)
1128+func activateArtifact (dJ) = {
1129+ let dq = do(bi)
11241130 if ((size(bi.payments) != 0))
11251131 then throw("Artifact activation doesn't require any payments")
11261132 else {
11271133 let bb = {
1128- let c = dI
1134+ let c = dJ
11291135 if (("PRESALE" == c))
11301136 then cP(toString(bi.caller))
11311137 else throw("Unknown artifact")
11321138 }
1133- (bb :+ dp)
1139+ (bb :+ dq)
11341140 }
11351141 }
11361142
11371143
11381144
11391145 @Callable(bi)
11401146 func mergeLands (cU) = {
1141- let dp = dn(bi)
1147+ let dq = do(bi)
11421148 if ((size(bi.payments) != 0))
11431149 then throw("Lands merging doesn't require any payments")
11441150 else {
1145- let bb = dl(true, toString(bi.caller), 0, cU, bi.transactionId)
1146- $Tuple2((bb._1 :+ dp), bb._2)
1151+ let bb = dm(true, toString(bi.caller), 0, cU, bi.transactionId)
1152+ $Tuple2((bb._1 :+ dq), bb._2)
11471153 }
11481154 }
11491155
11501156
11511157
11521158 @Callable(bi)
11531159 func mergeLandsUsdn (cU) = {
1154- let dp = dn(bi)
1160+ let dq = do(bi)
11551161 if ((size(bi.payments) != 1))
11561162 then throw("Exactly one payment required")
11571163 else {
1158- let dq = value(bi.payments[0])
1159- if ((dq.assetId != b))
1164+ let dr = value(bi.payments[0])
1165+ if ((dr.assetId != b))
11601166 then throw("Allowed USDN payment only!")
11611167 else {
1162- let bb = dl(false, toString(bi.caller), dq.amount, cU, bi.transactionId)
1163- $Tuple2(((bb._1 :+ ScriptTransfer(f, dq.amount, b)) :+ dp), bb._2)
1168+ let bb = dm(false, toString(bi.caller), dr.amount, cU, bi.transactionId)
1169+ $Tuple2(((bb._1 :+ ScriptTransfer(f, dr.amount, b)) :+ dq), bb._2)
11641170 }
11651171 }
11661172 }
11671173
11681174
11691175
11701176 @Callable(bi)
11711177 func splitByGlobalWeightsREADONLY (bp) = $Tuple2(nil, aR(bp))
11721178
11731179
11741180
11751181 @Callable(bi)
11761182 func splitByLocalWeightsREADONLY (bp,bl) = {
11771183 let be = bk(bl)
11781184 $Tuple2(nil, aC(bp, be))
11791185 }
11801186
11811187
11821188
11831189 @Callable(bi)
11841190 func getBackpackREADONLY (ai) = $Tuple2(nil, makeString(bL(ah(ai)), ":"))
11851191
11861192

github/deemru/w8io/03bedc9 
185.81 ms