tx · BakS7xjhzDmNs3dopYyU59GWDFEnnYSRHkJTQmttissc

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03900000 Waves

2023.06.21 20:49 [2632732] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "BakS7xjhzDmNs3dopYyU59GWDFEnnYSRHkJTQmttissc", "fee": 3900000, "feeAssetId": null, "timestamp": 1687369815829, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "4B8iJ7emQyQafW4wzPwzWWc9kvaXcgWEfzidu7vbUKJNEYNA6ZeLFCWDZXyXWgAu4fpifTEhUxiuwmqTAnyGhgmc" ], "script": "base64:BgI7CAISBAoCCBgSAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICBIDCgEREgMKAQiHAQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ3AICt4gQABU1VTFQ4AIDC1y8ABk1VTFQxMACAyK+gJQAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIADUVTTUFYUEFDS0FHRVMAAwAJRVNCVVlDT0VGAAQACkVTU0VMTENPRUYACgAFTUFYSFAAZAAIcmVzVHlwZXMJAMwIAgIDT2lsCQDMCAICA09yZQkAzAgCAgRXb29kCQDMCAICBFNhbmQJAMwIAgIEQ2xheQkAzAgCAgdPcmdhbmljBQNuaWwACG1hdFR5cGVzCQDMCAICBEZ1ZWwJAMwIAgIFTWV0YWwJAMwIAgIFUGxhbmsJAMwIAgIFR2xhc3MJAMwIAgIHUGxhc3RpYwkAzAgCAgdQcm90ZWluBQNuaWwACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgISMV8xXzFfMl8yXzVfMV8xMF8wCQDMCAICEzJfMl8yXzRfNF8xMF8xXzEwXzAJAMwIAgITM18zXzNfNl82XzE1XzFfMTBfMAkAzAgCAhMyXzVfNV8yXzdfNV8yXzEwMF8xCQDMCAICFzRfMTBfMTBfNF8xNF8xMF8yXzEwMF8xCQDMCAICFzZfMTVfMTVfNl8yMV8xNV8yXzEwMF8xCQDMCAICEjFfMV8xXzFfMV84XzFfMTBfMgkAzAgCAhMyXzJfMl8yXzJfMTZfMV8xMF8yCQDMCAICEzNfM18zXzNfM18yNF8xXzEwXzIJAMwIAgITOV85XzFfNV81XzFfNV8xMDBfMwkAzAgCAhcxOF8xOF8yXzEwXzEwXzJfNV8xMDBfMwkAzAgCAhcyN18yN18zXzE1XzE1XzNfNV8xMDBfMwkAzAgCAhIyXzJfMV8yXzJfMl8xXzEwXzQJAMwIAgISNF80XzJfNF80XzRfMV8xMF80CQDMCAICEjZfNl8zXzZfNl82XzFfMTBfNAUDbmlsAA9jb250SWR4QW1lcmljYXMAAAANY29udElkeEV1cm9wZQABAAtjb250SWR4QXNpYQACAA1jb250SWR4QWZyaWNhAAMADmNvbnRJZHhPY2VhbmlhAAQADXJlY2lwZUlkeEZ1ZWwAAAAOcmVjaXBlSWR4TWV0YWwAAQAOcmVjaXBlSWR4UGxhbmsAAgAOcmVjaXBlSWR4R2xhc3MAAwAQcmVjaXBlSWR4UGxhc3RpYwAEABByZWNpcGVJZHhQcm90ZWluAAUAD3JlY2lwZUlkeFdlaWdodAAGABFyZWNpcGVJZHhQYWNrc2l6ZQAHABJyZWNpcGVJZHhDb250aW5lbnQACAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAQpnZXRQa2dTaXplAQdwcm9kSWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFB3Byb2RJZHgCAV8FEXJlY2lwZUlkeFBhY2tzaXplAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0FueUxpc3QBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAFsBQckbWF0Y2gwBQFsCQACAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUAC0lkeEVmZlRvdGFsAAAACklkeEVmZlVzZXIAAQEOZ2V0Vm90aW5nUG93ZXIBEnVzZXJBZGRyU3RyT3JFbXB0eQQFcHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCgEFYWRkZXICA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0ECnRvdGFsUG93ZXIKAAIkbAUFcHJvcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp1c2Vyc1Bvd2VyAwkAAAIFEnVzZXJBZGRyU3RyT3JFbXB0eQIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJ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QUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlAApNSU5QQVlNRU5UAJBOAA5TRUxMTVVMVElQTElFUgDIAQANQlVZTVVMVElQTElFUgCsAgAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIZ2V0T3JkZXIBBm9yZEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBm9yZEtleQIwMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6MEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6AgE6CQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4UmVzAhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeE1hdAIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgkAkQMCBQFwBQpvcmRJZHhQcm9kBQNuaWwBCHRvVm9sdW1lAwZhbW91bnQHcGtnU2l6ZQlpc1Byb2R1Y3QDBQlpc1Byb2R1Y3QEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAUGYW1vdW50AQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkdFJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZHRSZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2R0UmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2R0UmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQJ3MAkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEJc2V0Q29tbW9uAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQGaXNQcm9kCAUDYWNjAl84BAdwa2dTaXplAwUGaXNQcm9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FEXJlY2lwZUlkeFBhY2tzaXplAAAECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FB3BrZ1NpemUFBmlzUHJvZAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfNgUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzYFAWoAAAQLY3VyT3JkUGFydHMJALUJAgMJAGYCCQCQAwEIBQNhY2MCXzcFAWoJAJEDAggFA2FjYwJfNwUBagIDMEAwAgFABAhjdXJPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAAECGN1ck9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAQMDCQBmAgAABQhjdXJPcmRQcgYJAGYCAAAFCG5ld09yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECWN1ck9yZFVzZAkAawMFCGN1ck9yZEFtBQhjdXJPcmRQcgUFTVVMVDgDCQAAAgUIbmV3T3JkQW0AAAMJAGYCBQhjdXJPcmRBbQAACQCbCgkJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQIBQNhY2MCXzMIBQNhY2MCXzQJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAZAIIBQNhY2MCXzkJAQh0b1ZvbHVtZQMFBndoSW5pdAUHcGtnU2l6ZQUGaXNQcm9kCQCbCgkJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FB3BrZ1NpemUFBmlzUHJvZAMJAGYCBQhuZXdPcmRBbQAAAwkAZgIAAAUIY3VyT3JkQW0JAJsKCQkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFCGN1ck9yZEFtBQdwa2dTaXplBQZpc1Byb2QJAJsKCQkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZQIJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDBQZ3aEluaXQFB3BrZ1NpemUFBmlzUHJvZAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJsKCQkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQZhbURpZmYFB3BrZ1NpemUFBmlzUHJvZAMJAGYCAAAJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAmwoJCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFBndoSW5pdAUIbmV3T3JkQW0IBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZAIFBndoSW5pdAUIbmV3T3JkQW0FB3BrZ1NpemUFBmlzUHJvZAELc2V0SW50ZXJuYWwDCWN1cnJlbnRXaApjdXJyZW50T3JkBm5ld09yZAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA1jdXJyZW50T3JkUmVzCQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4UmVzAgFfBA1jdXJyZW50T3JkTWF0CQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4TWF0AgFfBA5jdXJyZW50T3JkUHJvZAMJAAACCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIBXwMJ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Al81BQpjdXJyV2hQcm9kBQ5jdXJyZW50T3JkUHJvZAYIBQFtAl85CQCZCgcIBQFyAl8yCAUBbQJfMggFAXACXzIIBQFwAl8zCAUBcAJfNAgFAXACXzUIBQFwAl85AQxhY2NlcHRDb21tb24CA2FjYwlicE9yZEl0ZW0EAWoIBQNhY2MCXzcEBmlzUHJvZAgFA2FjYwNfMTIEB3BrZ1NpemUDBQZpc1Byb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUBagIBXwURcmVjaXBlSWR4UGFja3NpemUAAAQKYnBPcmRQYXJ0cwkAtQkCBQlicE9yZEl0ZW0CAUADCQECIT0CCQCQAwEFCmJwT3JkUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UEB2JwT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAEDCQBmAgAABQdicE9yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECGJwT3JkVXNkCQBrAwUHYnBPcmRBbQUHYnBPcmRQcgUFTVVMVDgEBmJwSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzgFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqAAAEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzkFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqAAAECXdoT3JkSW5pdAMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAECndoT3JkUGFydHMJALUJAgUJd2hPcmRJbml0AgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kAwkAAAIFB2JwT3JkQW0AAAkAngoMCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIFCXdoT3JkSW5pdAkAzQgCCAUDYWNjAl8zCQCkAwEFBmJwSW5pdAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QDCQBmAgUHYnBPcmRBbQAAAwkAZgIAAAUHd2hPcmRBbQMJAGYCBQdicE9yZEFtCQEBLQEFB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCkAwEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGywgYnV0IHdhcmVob3VzZSBvbmx5IHNlbGxzIAkApAMBCQEBLQEFB3doT3JkQW0JAJ4KDAkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sCAUDYWNjAl81CQBkAggFA2FjYwJfNgUIYnBPcmRVc2QJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCeCgwJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAAIBCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkAkQMCCAUDYWNjA18xMQUBagIfIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IGJ1eSBpdAoBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCCQDNCAIIBQZtZXJnZWQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIIBQZtZXJnZWQCXzEFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQlleGNoYW5nZXICA2FjYwFqBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQFqBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQDNCAIIBQNhY2MCXzQJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQUCdzAJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80BAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAggFBm1lcmdlZAJfMwBkCQCUCgIJAM0IAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEnJlY2lwZUlkeENvbnRpbmVudAMJAQIhPQIJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgFBGNvbnQJAAIBCQCsAgIJAKwCAgkArAICAh1U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AgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZtZXJnZWQCAV8JAMwIAgkAuQkCBQZicFByb2QCAV8FA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC5CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cgtsYW5kQXNzZXRJZAtkdWNrQXNzZXRJZAQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAAEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQJbGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAAACBQlsYW5kT3duZXIFCmNhbGxlckFkZHIJAAIBAh5Zb3UgY2Fubm90IHRyYWRlIHdpdGggeW91cnNlbGYEDGJwT3JkZXJQYXJ0cwkAvAkCBQpicE9yZGVyU3RyAgE6AwkBAiE9AgkAkAMBBQxicE9yZGVyUGFydHMAAwkAAgECMmJwT3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhicE9yZFJlcwkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwAAAgFfBAhicE9yZE1hdAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwABAgFfBAlicE9yZFByb2QDCQAAAgkAkQMCBQxicE9yZGVyUGFydHMAAgIABQNuaWwJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIYnBPcmRSZXMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhicE9yZE1hdAUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlz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ABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJ4KDAUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQpicFByb2RMaXN0CAUBbQJfNAgFAW0CXzUIBQFtAl82AAAFCmJwUHJvZExpc3QFCmN1cnJXaFByb2QFCXdoT3JkUHJvZAUJcHJvZFR5cGVzBgQIdm9sU2FsZG8IBQFwAl80BAxuZXdMb2NrZWRWb2wDCQBmAgAACQBlAgUPY3VycldoTG9ja2VkVm9sBQh2b2xTYWxkbwAACQBlAgUPY3VycldoTG9ja2VkVm9sBQh2b2xTYWxkbwQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCCAUBcgJfMQIBXwkAzAgCCQC5CQIIBQFtAl8xAgFfCQDMCAIJALkJAggFAXACXzECAV8JAMwIAgkApAMBBQxuZXdMb2NrZWRWb2wFA25pbAIBOgQLbmV3V2hPcmRTdHIJALoJAgkAzAgCCQC5CQIIBQFyAl8yAgFfCQDMCAIJALkJAggFAW0CXzICAV8JAMwIAgkAuQkCCAUBcAJfMgIBXwUDbmlsAgE6BAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUBcgJfMwIBXwkAzAgCCQC5CQIIBQFtAl8zAgFfCQDMCAIJALkJAggFAXACXzMCAV8FA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQHYWN0aW9ucwkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld1doT3JkU3RyBQNuaWwEDXVzZFdoMkJwU2FsZG8IBQFwAl81BAhhY3Rpb25zMQMJAGYCBQ11c2RXaDJCcFNhbGRvAAAEC3VzZFdoMkJwRmVlCQBrAwgFAXACXzUFCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCmNhbGxlckFkZHIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAM0IAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIIBQFwAl81CQBoAgADBQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAggFAXACXzUJAGgCAAMFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFB2FjdGlvbnMEDXVzZEJwMldoU2FsZG8IBQFwAl82BAhhY3Rpb25zMgMJAGYCBQ11c2RCcDJXaFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUNdXNkQnAyV2hTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFDXVzZEJwMldoU2FsZG8DCQBmAgUOTUlOU0hPUFBBWU1FTlQFA2FtdAkAAgEJAKwCAgIbUGF5bWVudCBzaG91bGQgYmUgYXQgbGVhc3QgCQCkAwEFDk1JTlNIT1BQQVlNRU5UBAt1c2RCcDJXaEZlZQkAawMIBQFwAl82BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQlsYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAM0IAgkAzQgCCQDNCAIFCGFjdGlvbnMxCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlsYW5kT3duZXIJAGUCCAUBcAJfNgkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFCGFjdGlvbnMxCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlsYW5kT3duZXIJAGUCCAUBcAJfNgkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAUIYWN0aW9uczEJAJQKAgUIYWN0aW9uczIJAJUKAwUHYmxvY2tlZAUGd2hTYXZlBQZicFNhdmUBaQEQc2VsbFByb2R1Y3RzVG9FUwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFBCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEFpcnBvcnQsIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBWVzS2V5CQEOa2V5RXNXYXJlaG91c2UABAhleGlzdFN0cgkAoggBBQVlc0tleQQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwKAQhtb3ZlUHJvZAIDYWNjCXJlY2lwZVN0cgQBaggFA2FjYwJfMQQIcXVhbnRpdHkDCQBmAgkAkAMBBQdhbW91bnRzBQFqCQCRAwIFB2Ftb3VudHMFAWoAAAMJAGYCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAZyZWNpcGUJALUJAgUJcmVjaXBlU3RyAgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQIcGFja1NpemUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEXJlY2lwZUlkeFBhY2tzaXplBAltYXhBbW91bnQJAGgCBQ1FU01BWFBBQ0tBR0VTBQhwYWNrU2l6ZQQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMFAWoAAAQGY2FuQnV5CQBlAgUJbWF4QW1vdW50BQtleGlzdEFtb3VudAMJAGYCBQhxdWFudGl0eQUGY2FuQnV5CQACAQkArAICCQCsAgIJAKwCAgIXV2FyZWhvdXNlIGNhbiBidXkgb25seSAJAKQDAQUGY2FuQnV5AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXVuaXRQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUJRVNCVVlDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQhwYWNrU2l6ZQQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBagAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqCQCWCgQJAGQCBQFqAAEJAGQCCAUDYWNjAl8yCQBoAgUJdW5pdFByaWNlBQhxdWFudGl0eQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQxicFByb2RBbW91bnQFCHF1YW50aXR5CQDNCAIIBQNhY2MCXzQJAKQDAQkAZAIFC2V4aXN0QW1vdW50BQhxdWFudGl0eQQGbWVyZ2VkCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAAABQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbW92ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBm1lcmdlZAJfMwIBXwUDbmlsAgE6BAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlc0tleQkAuQkCCAUGbWVyZ2VkAl80AgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMgULdXNkdEFzc2V0SWQFA25pbAUGYnBTYXZlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3VwZGF0ZUVzU3RvcmFnZQEKbmV3U3RvcmFnZQMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5RXNXYXJlaG91c2UABQpuZXdTdG9yYWdlBQNuaWwFCm5ld1N0b3JhZ2UAbvZS0w==", "height": 2632732, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CPrDm4obDHeYaAhoYQV7sKzGXtLmw8BGVVwLz4Dpga33 Next: AC8LbUgwotjCytKGfaMfD3wqnY679LLjTUeCFTCRaVNq Diff:
OldNewDifferences
513513 then throw("Price can't be negative")
514514 else {
515515 let dc = fraction(da, db, i)
516- let dd = ct(da, cv, cS)
517516 if ((cU == 0))
518517 then if ((da > 0))
519- then $Tuple8((cd + 1), (bI._2 :+ toString(cY)), bI._3, bI._4, (bI._5 - dc), bI._6, bI._7, cS)
520- else $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), bI._3, bI._4, bI._5, bI._6, bI._7, cS)
518+ then $Tuple9((cd + 1), (bI._2 :+ toString(cY)), bI._3, bI._4, (bI._5 - dc), bI._6, bI._7, cS, (bI._9 + ct(cY, cv, cS)))
519+ else $Tuple9((cd + 1), (bI._2 :+ toString((cY - da))), bI._3, bI._4, bI._5, bI._6, bI._7, cS, (bI._9 + ct((cY - da), cv, cS)))
521520 else if ((cU > 0))
522521 then if ((0 > da))
523- then $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), (bI._3 + cX), bI._4, (bI._5 + cW), bI._6, bI._7, cS)
524- else $Tuple8((cd + 1), (bI._2 :+ toString(cY)), (bI._3 + cX), bI._4, ((bI._5 + cW) - dc), bI._6, bI._7, cS)
522+ then $Tuple9((cd + 1), (bI._2 :+ toString((cY - da))), (bI._3 + cX), bI._4, (bI._5 + cW), bI._6, bI._7, cS, ct((cY - da), cv, cS))
523+ else $Tuple9((cd + 1), (bI._2 :+ toString(cY)), (bI._3 + cX), bI._4, ((bI._5 + cW) - dc), bI._6, bI._7, cS, ct(cY, cv, cS))
525524 else if ((0 > da))
526525 then {
527- let de = (da - cU)
528- if ((0 > (cY - de)))
529- then throw((((("Attempt to take " + toString(de)) + " from warehouse, but only ") + toString(cY)) + " available"))
530- else $Tuple8((cd + 1), (bI._2 :+ toString((cY - de))), bI._3, (bI._4 - cX), bI._5, bI._6, bI._7, cS)
526+ let dd = (da - cU)
527+ if ((0 > (cY - dd)))
528+ then throw((((("Attempt to take " + toString(dd)) + " from warehouse, but only ") + toString(cY)) + " available"))
529+ else $Tuple9((cd + 1), (bI._2 :+ toString((cY - dd))), bI._3, (bI._4 - cX), bI._5, bI._6, bI._7, cS, ct((cY - dd), cv, cS))
531530 }
532531 else if ((0 > (cY + cU)))
533532 then throw((((("Attempt to take " + toString(-(cU))) + " from warehouse, but only ") + toString(cY)) + " available"))
534- else $Tuple8((cd + 1), (bI._2 :+ toString((cY + cU))), bI._3, (bI._4 - cX), (bI._5 - dc), bI._6, bI._7, cS)
533+ else $Tuple9((cd + 1), (bI._2 :+ toString((cY + cU))), bI._3, (bI._4 - cX), (bI._5 - dc), bI._6, bI._7, cS, ct((cY + cU), cv, cS))
535534 }
536535 }
537536 }
538537
539538
540-func df (dg,dh,di) = {
541- let dj = split(dg[aa], "_")
542- let dk = split(dg[ab], "_")
543- let dl = if ((dg[ac] == ""))
539+func de (df,dg,dh) = {
540+ let di = split(df[aa], "_")
541+ let dj = split(df[ab], "_")
542+ let dk = if ((df[ac] == ""))
544543 then nil
545- else split(dg[ac], "_")
546- let dm = split(dh[cn], "_")
547- let dn = split(dh[co], "_")
548- let do = if ((dh[cp] == ""))
544+ else split(df[ac], "_")
545+ let dl = split(dg[cn], "_")
546+ let dm = split(dg[co], "_")
547+ let dn = if ((dg[cp] == ""))
549548 then nil
550- else split(dh[cp], "_")
551- if ((size(di) != 3))
549+ else split(dg[cp], "_")
550+ if ((size(dh) != 3))
552551 then throw("newOrderStr should contain exactly 2 ':' separators")
553552 else {
554- let dp = split(di[0], "_")
555- let dq = split(di[1], "_")
556- let dr = if ((di[2] == ""))
553+ let do = split(dh[0], "_")
554+ let dp = split(dh[1], "_")
555+ let dq = if ((dh[2] == ""))
557556 then nil
558- else split(di[2], "_")
559- if ((size(dp) != n))
557+ else split(dh[2], "_")
558+ if ((size(do) != n))
560559 then throw("All 6 resources should be passed")
561- else if ((size(dq) != n))
560+ else if ((size(dp) != n))
562561 then throw("All 6 materials should be passed")
563562 else {
564- let ds = {
565- let bL = dp
563+ let dr = {
564+ let bL = do
566565 let bM = size(bL)
567- let bN = $Tuple8(0, nil, 0, 0, 0, dj, dm, false)
566+ let bN = $Tuple9(0, nil, 0, 0, 0, di, dl, false, 0)
568567 func bO (bP,bQ) = if ((bQ >= bM))
569568 then bP
570569 else cR(bP, bL[bQ])
576575 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
577576 }
578577 let cL = {
579- let bL = dq
578+ let bL = dp
580579 let bM = size(bL)
581- let bN = $Tuple8(0, nil, ds._3, ds._4, ds._5, dk, dn, false)
580+ let bN = $Tuple9(0, nil, dr._3, dr._4, dr._5, dj, dm, false, dr._9)
582581 func bX (bP,bQ) = if ((bQ >= bM))
583582 then bP
584583 else cR(bP, bL[bQ])
589588
590589 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
591590 }
592- let cs = if ((size(dr) != 0))
591+ let cs = if ((size(dq) != 0))
593592 then {
594- let bL = dr
593+ let bL = dq
595594 let bM = size(bL)
596- let bN = $Tuple8(0, nil, cL._3, cL._4, cL._5, dl, do, true)
597- func dt (bP,bQ) = if ((bQ >= bM))
595+ let bN = $Tuple9(0, nil, cL._3, cL._4, cL._5, dk, dn, true, cL._9)
596+ func ds (bP,bQ) = if ((bQ >= bM))
598597 then bP
599598 else cR(bP, bL[bQ])
600599
601- func du (bP,bQ) = if ((bQ >= bM))
600+ func dt (bP,bQ) = if ((bQ >= bM))
602601 then bP
603602 else throw("List size exceeds 50")
604603
605- du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
604+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
606605 }
607- else $Tuple8(0, dl, cL._3, cL._4, cL._5, dl, do, true)
608- $Tuple6(ds._2, cL._2, cs._2, cs._3, cs._4, cs._5)
606+ else $Tuple9(0, dk, cL._3, cL._4, cL._5, dk, dn, true, cL._9)
607+ $Tuple7(dr._2, cL._2, cs._2, cs._3, cs._4, cs._5, cs._9)
609608 }
610609 }
611610 }
612611
613612
614-func dv (bI,dw) = {
613+func du (bI,dv) = {
615614 let cd = bI._7
616615 let cS = bI._12
617616 let cv = if (cS)
618617 then parseIntValue(split(G[cd], "_")[T])
619618 else 0
620- let dx = split(dw, "@")
621- if ((size(dx) != 2))
619+ let dw = split(dv, "@")
620+ if ((size(dw) != 2))
622621 then throw("Incorrect order format, should be amount@price")
623622 else {
624- let dy = parseIntValue(dx[0])
625- let dz = parseIntValue(dx[1])
626- if ((0 > dz))
623+ let dx = parseIntValue(dw[0])
624+ let dy = parseIntValue(dw[1])
625+ if ((0 > dy))
627626 then throw("Price can't be negative")
628627 else {
629- let dA = fraction(dy, dz, i)
630- let dB = if ((size(bI._8) > cd))
628+ let dz = fraction(dx, dy, i)
629+ let dA = if ((size(bI._8) > cd))
631630 then parseIntValue(bI._8[cd])
632631 else 0
633632 let cY = if ((size(bI._9) > cd))
634633 then parseIntValue(bI._9[cd])
635634 else 0
636- let dC = if ((size(bI._10) > cd))
635+ let dB = if ((size(bI._10) > cd))
637636 then bI._10[cd]
638637 else "0@0"
639- let dD = split(dC, "@")
640- let dE = parseIntValue(dD[0])
641- let dF = parseIntValue(dD[1])
642- if (if ((dy != 0))
643- then (dz != dF)
638+ let dC = split(dB, "@")
639+ let dD = parseIntValue(dC[0])
640+ let dE = parseIntValue(dC[1])
641+ if (if ((dx != 0))
642+ then (dy != dE)
644643 else false)
645- then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dF)) + ", your price=") + toString(dz)))
644+ then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dE)) + ", your price=") + toString(dy)))
646645 else {
647- let dG = fraction(dE, dF, i)
648- let dH = ct(dy, cv, cS)
649- if ((dy == 0))
650- then $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ dC), (bI._3 :+ toString(dB)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
651- else if ((dy > 0))
652- then if ((0 > dE))
653- then if ((dy > -(dE)))
654- then throw(((((("Attempt to buy " + toString(dy)) + " of ") + bI._11[cd]) + ", but warehouse only sells ") + toString(-(dE))))
655- else $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 + dH), bI._5, (bI._6 + dA), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
646+ let dF = fraction(dD, dE, i)
647+ let dG = ct(dx, cv, cS)
648+ if ((dx == 0))
649+ then $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ dB), (bI._3 :+ toString(dA)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
650+ else if ((dx > 0))
651+ then if ((0 > dD))
652+ then if ((dx > -(dD)))
653+ then throw(((((("Attempt to buy " + toString(dx)) + " of ") + bI._11[cd]) + ", but warehouse only sells ") + toString(-(dD))))
654+ else $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ ((toString((dD + dx)) + "@") + toString(dE))), (bI._3 :+ toString((dA + dx))), (bI._4 + dG), bI._5, (bI._6 + dz), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
656655 else throw((("Attempt to buy " + bI._11[cd]) + " while warehouse doesn't sell it"))
657- else if ((dE > 0))
658- then if ((-(dy) > dE))
659- then throw(((((("Attempt to sell " + toString(-(dy))) + " of ") + bI._11[cd]) + ", but warehouse only buys ") + toString(dE)))
660- else if ((-(dy) > dB))
661- then throw(((((("Attempt to sell " + toString(-(dy))) + ", but you only have ") + toString(dB)) + " of ") + bI._11[cd]))
662- else $Tuple12((bI._1 :+ toString((cY - dy))), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 - dH), (bI._5 - dA), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
656+ else if ((dD > 0))
657+ then if ((-(dx) > dD))
658+ then throw(((((("Attempt to sell " + toString(-(dx))) + " of ") + bI._11[cd]) + ", but warehouse only buys ") + toString(dD)))
659+ else if ((-(dx) > dA))
660+ then throw(((((("Attempt to sell " + toString(-(dx))) + ", but you only have ") + toString(dA)) + " of ") + bI._11[cd]))
661+ else $Tuple12((bI._1 :+ toString((cY - dx))), (bI._2 :+ ((toString((dD + dx)) + "@") + toString(dE))), (bI._3 :+ toString((dA + dx))), (bI._4 - dG), (bI._5 - dz), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
663662 else throw((("Attempt to sell " + bI._11[cd]) + " while warehouse doesn't buy it"))
664663 }
665664 }
667666 }
668667
669668
670-@Callable(dI)
671-func recalcLockedVolumeREADONLY (aW,dJ) = {
672- let dh = cq(bn(aW))
673- let dK = df(dJ, dh, dh)
674- $Tuple2(nil, (dK._4 + dK._5))
669+@Callable(dH)
670+func recalcLockedVolumeREADONLY (aW,dI) = {
671+ let dg = cq(bn(aW))
672+ let dJ = de(dI, dg, dg)
673+ $Tuple2(nil, (dJ._4 + dJ._5))
675674 }
676675
677676
678677
679-@Callable(dI)
680-func constructorV1 (dL) = if ((dI.caller != this))
678+@Callable(dH)
679+func constructorV1 (dK) = if ((dH.caller != this))
681680 then throw("Permission denied")
682- else [StringEntry(ay(), dL)]
681+ else [StringEntry(ay(), dK)]
683682
684683
685684
686-@Callable(dI)
687-func sellResources (dM,dN) = {
688- let dO = cQ()
689- if ((dO == dO))
685+@Callable(dH)
686+func sellResources (dL,dM) = {
687+ let dN = cQ()
688+ if ((dN == dN))
690689 then {
691- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
692- if ((size(dI.payments) != 0))
690+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
691+ if ((size(dH.payments) != 0))
693692 then throw("sellResources doesn't require any payments")
694693 else {
695- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
696- if ((dP[bq] != "F"))
697- then throw(("Duck location type should be Factory, but is " + dP[bq]))
694+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
695+ if ((dO[bq] != "F"))
696+ then throw(("Duck location type should be Factory, but is " + dO[bq]))
698697 else {
699- let cz = dP[br]
700- let dQ = cO(bf(bg))
701- let dR = split(dQ[aj], "_")
702- func bH (bI,cd) = if ((dM[cd] > parseIntValue(dR[cd])))
703- then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to sell ") + toString(dM[cd])))
704- else if ((0 > dM[cd]))
705- then throw(((("You tried to sell negative amount of " + C[cd]) + ": ") + toString(dM[cd])))
706- else if ((dM[cd] > 0))
698+ let cz = dO[br]
699+ let dP = cO(bf(bg))
700+ let dQ = split(dP[aj], "_")
701+ func bH (bI,cd) = if ((dL[cd] > parseIntValue(dQ[cd])))
702+ then throw(((((("You have " + dQ[cd]) + " of ") + C[cd]) + ", but tried to sell ") + toString(dL[cd])))
703+ else if ((0 > dL[cd]))
704+ then throw(((("You tried to sell negative amount of " + C[cd]) + ": ") + toString(dL[cd])))
705+ else if ((dL[cd] > 0))
707706 then {
708- let dS = cy(cz, cd, dM[cd], dN[cd])
709- $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(dR[cd]) - dM[cd]))), (bI._3 + dS._2))
707+ let dR = cy(cz, cd, dL[cd], dM[cd])
708+ $Tuple3((bI._1 :+ dR._1), (bI._2 :+ toString((parseIntValue(dQ[cd]) - dL[cd]))), (bI._3 + dR._2))
710709 }
711- else $Tuple3(bI._1, (bI._2 :+ dR[cd]), bI._3)
710+ else $Tuple3(bI._1, (bI._2 :+ dQ[cd]), bI._3)
712711
713- let dT = {
712+ let dS = {
714713 let bL = [0, 1, 2, 3, 4, 5]
715714 let bM = size(bL)
716715 let bN = $Tuple3(nil, nil, 0)
724723
725724 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
726725 }
727- let dU = makeString([dQ[ai], makeString(dT._2, "_"), dQ[ak], dQ[al]], ":")
728- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
729- $Tuple2((dT._1 :+ ScriptTransfer(dI.caller, dT._3, b)), dV)
726+ let dT = makeString([dP[ai], makeString(dS._2, "_"), dP[ak], dP[al]], ":")
727+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
728+ $Tuple2((dS._1 :+ ScriptTransfer(dH.caller, dS._3, b)), dU)
730729 }
731730 }
732731 }
735734
736735
737736
738-@Callable(dI)
739-func buyMaterials (dM,dW) = {
740- let dO = cQ()
741- if ((dO == dO))
737+@Callable(dH)
738+func buyMaterials (dL,dV) = {
739+ let dN = cQ()
740+ if ((dN == dN))
742741 then {
743- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
744- if ((size(dI.payments) != 1))
742+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
743+ if ((size(dH.payments) != 1))
745744 then throw("exactly 1 payment must be attached")
746745 else {
747- let dX = dI.payments[0]
748- let dY = dX.amount
749- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
750- if ((dZ != b))
746+ let dW = dH.payments[0]
747+ let dX = dW.amount
748+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
749+ if ((dY != b))
751750 then throw("USDT payments only!")
752751 else {
753- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
754- if ((dP[bq] != "F"))
755- then throw(("Duck location type should be Factory, but is " + dP[bq]))
752+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
753+ if ((dO[bq] != "F"))
754+ then throw(("Duck location type should be Factory, but is " + dO[bq]))
756755 else {
757- let cz = dP[br]
758- let dQ = cO(bf(bg))
759- let ea = split(dQ[ak], "_")
760- func eb (bI,cd) = if ((0 > dM[cd]))
761- then throw(((("You tried to buy negative amount of " + D[cd]) + ": ") + toString(dM[cd])))
762- else if ((dM[cd] > 0))
756+ let cz = dO[br]
757+ let dP = cO(bf(bg))
758+ let dZ = split(dP[ak], "_")
759+ func ea (bI,cd) = if ((0 > dL[cd]))
760+ then throw(((("You tried to buy negative amount of " + D[cd]) + ": ") + toString(dL[cd])))
761+ else if ((dL[cd] > 0))
763762 then {
764- let dS = cG(cz, cd, dM[cd], dW[cd])
765- $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(ea[cd]) + dS._3))), (bI._3 + dS._2))
763+ let dR = cG(cz, cd, dL[cd], dV[cd])
764+ $Tuple3((bI._1 :+ dR._1), (bI._2 :+ toString((parseIntValue(dZ[cd]) + dR._3))), (bI._3 + dR._2))
766765 }
767- else $Tuple3(bI._1, (bI._2 :+ ea[cd]), bI._3)
766+ else $Tuple3(bI._1, (bI._2 :+ dZ[cd]), bI._3)
768767
769- let dT = {
768+ let dS = {
770769 let bL = [0, 1, 2, 3, 4, 5]
771770 let bM = size(bL)
772771 let bN = $Tuple3(nil, nil, 0)
773772 func bO (bP,bQ) = if ((bQ >= bM))
774773 then bP
775- else eb(bP, bL[bQ])
774+ else ea(bP, bL[bQ])
776775
777776 func bR (bP,bQ) = if ((bQ >= bM))
778777 then bP
780779
781780 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
782781 }
783- if ((dT._3 > dY))
784- then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
782+ if ((dS._3 > dX))
783+ then throw(((("Insufficient payment! Attached=" + toString(dX)) + ", required=") + toString(dS._3)))
785784 else {
786- let dU = makeString([dQ[ai], dQ[aj], makeString(dT._2, "_"), dQ[al]], ":")
787- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
788- let aA = if (((dY - dT._3) > 0))
789- then [ScriptTransfer(dI.caller, (dY - dT._3), b)]
785+ let dT = makeString([dP[ai], dP[aj], makeString(dS._2, "_"), dP[al]], ":")
786+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
787+ let aA = if (((dX - dS._3) > 0))
788+ then [ScriptTransfer(dH.caller, (dX - dS._3), b)]
790789 else nil
791- let ec = (dT._3 / 100)
792- $Tuple2(((dT._1 ++ aA) :+ ScriptTransfer(aE, ec, b)), dV)
790+ let eb = (dS._3 / 100)
791+ $Tuple2(((dS._1 ++ aA) :+ ScriptTransfer(aE, eb, b)), dU)
793792 }
794793 }
795794 }
800799
801800
802801
803-@Callable(dI)
804-func exchangeResources (dM) = {
805- let dO = cQ()
806- if ((dO == dO))
802+@Callable(dH)
803+func exchangeResources (dL) = {
804+ let dN = cQ()
805+ if ((dN == dN))
807806 then {
808- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
809- if ((size(dI.payments) != 1))
807+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
808+ if ((size(dH.payments) != 1))
810809 then throw("exactly 1 payment must be attached")
811810 else {
812- let dX = dI.payments[0]
813- let dY = dX.amount
814- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
815- if ((dZ != b))
811+ let dW = dH.payments[0]
812+ let dX = dW.amount
813+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
814+ if ((dY != b))
816815 then throw("USDT payments only!")
817816 else {
818- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
819- if ((dP[bq] != "F"))
820- then throw(("Duck location type should be Factory, but is " + dP[bq]))
817+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
818+ if ((dO[bq] != "F"))
819+ then throw(("Duck location type should be Factory, but is " + dO[bq]))
821820 else {
822- let cz = dP[br]
823- let dQ = cO(bf(bg))
824- let dR = split(dQ[aj], "_")
825- let ea = split(dQ[ak], "_")
826- func ed (bI,cd) = {
821+ let cz = dO[br]
822+ let dP = cO(bf(bg))
823+ let dQ = split(dP[aj], "_")
824+ let dZ = split(dP[ak], "_")
825+ func ec (bI,cd) = {
827826 let cB = ck(cz, cd)
828827 let cC = valueOrElse(getInteger(cB), 0)
829- let ee = dM[cd]
830- if ((ee > parseIntValue(dR[cd])))
831- then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to exchange ") + toString(ee)))
832- else if ((0 > ee))
833- then throw(((("You tried to exchange negative amount of " + C[cd]) + ": ") + toString(ee)))
834- else if ((ee > 0))
835- then $Tuple4((bI._1 :+ toString((parseIntValue(dR[cd]) - ee))), (bI._2 :+ toString((parseIntValue(ea[cd]) + ee))), (bI._3 + fraction(ee, x, i)), (bI._4 :+ IntegerEntry(cB, cC)))
836- else $Tuple4((bI._1 :+ dR[cd]), (bI._2 :+ ea[cd]), bI._3, bI._4)
828+ let ed = dL[cd]
829+ if ((ed > parseIntValue(dQ[cd])))
830+ then throw(((((("You have " + dQ[cd]) + " of ") + C[cd]) + ", but tried to exchange ") + toString(ed)))
831+ else if ((0 > ed))
832+ then throw(((("You tried to exchange negative amount of " + C[cd]) + ": ") + toString(ed)))
833+ else if ((ed > 0))
834+ then $Tuple4((bI._1 :+ toString((parseIntValue(dQ[cd]) - ed))), (bI._2 :+ toString((parseIntValue(dZ[cd]) + ed))), (bI._3 + fraction(ed, x, i)), (bI._4 :+ IntegerEntry(cB, cC)))
835+ else $Tuple4((bI._1 :+ dQ[cd]), (bI._2 :+ dZ[cd]), bI._3, bI._4)
837836 }
838837
839- let dT = {
838+ let dS = {
840839 let bL = [0, 1, 2, 3, 4, 5]
841840 let bM = size(bL)
842841 let bN = $Tuple4(nil, nil, 0, nil)
843842 func bO (bP,bQ) = if ((bQ >= bM))
844843 then bP
845- else ed(bP, bL[bQ])
844+ else ec(bP, bL[bQ])
846845
847846 func bR (bP,bQ) = if ((bQ >= bM))
848847 then bP
850849
851850 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
852851 }
853- if ((dT._3 > dY))
854- then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
852+ if ((dS._3 > dX))
853+ then throw(((("Insufficient payment! Attached=" + toString(dX)) + ", required=") + toString(dS._3)))
855854 else {
856- let dU = makeString([dQ[ai], makeString(dT._1, "_"), makeString(dT._2, "_"), dQ[al]], ":")
857- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
858- let aA = if (((dY - dT._3) > 0))
859- then [ScriptTransfer(dI.caller, (dY - dT._3), b)]
855+ let dT = makeString([dP[ai], makeString(dS._1, "_"), makeString(dS._2, "_"), dP[al]], ":")
856+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
857+ let aA = if (((dX - dS._3) > 0))
858+ then [ScriptTransfer(dH.caller, (dX - dS._3), b)]
860859 else nil
861- let ec = (dT._3 / 100)
862- $Tuple2(((aA ++ dT._4) :+ ScriptTransfer(aE, ec, b)), dV)
860+ let eb = (dS._3 / 100)
861+ $Tuple2(((aA ++ dS._4) :+ ScriptTransfer(aE, eb, b)), dU)
863862 }
864863 }
865864 }
870869
871870
872871
873-@Callable(dI)
874-func craftGoods (ef,eg) = {
875- let dO = cQ()
876- if ((dO == dO))
877- then if ((size(dI.payments) != 1))
872+@Callable(dH)
873+func craftGoods (ee,ef) = {
874+ let dN = cQ()
875+ if ((dN == dN))
876+ then if ((size(dH.payments) != 1))
878877 then throw("exactly 1 payment must be attached")
879878 else {
880- let dX = dI.payments[0]
881- let dY = dX.amount
882- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
883- if ((dZ != b))
879+ let dW = dH.payments[0]
880+ let dX = dW.amount
881+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
882+ if ((dY != b))
884883 then throw("USDT payments only!")
885- else if ((dY != g))
884+ else if ((dX != g))
886885 then throw("exactly 1 USDT must be attached as payment")
887- else if ((0 >= eg))
886+ else if ((0 >= ef))
888887 then throw("Quantity should be positive")
889888 else {
890- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
891- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
892- if ((dP[bq] != "M"))
893- then throw(("Duck location type should be Manufactory, but is " + dP[bq]))
889+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
890+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
891+ if ((dO[bq] != "M"))
892+ then throw(("Duck location type should be Manufactory, but is " + dO[bq]))
894893 else {
895- let eh = dP[bp]
896- let dQ = cO(bf(bg))
897- let ea = split(dQ[ak], "_")
898- if (if ((0 > ef))
894+ let eg = dO[bp]
895+ let dP = cO(bf(bg))
896+ let dZ = split(dP[ak], "_")
897+ if (if ((0 > ee))
899898 then true
900- else (ef >= size(G)))
901- then throw(("Unknown product idx=" + toString(ef)))
899+ else (ee >= size(G)))
900+ then throw(("Unknown product idx=" + toString(ee)))
902901 else {
903- let ca = split(G[ef], "_")
902+ let ca = split(G[ee], "_")
904903 if ((size(ca) != (n + 3)))
905- then throw(("Fatal: unknown recipe: " + G[ef]))
904+ then throw(("Fatal: unknown recipe: " + G[ee]))
906905 else {
907- let ei = parseIntValue(ca[U])
908- if ((F[ei] != eh))
909- then throw(((("This product is available in " + F[ei]) + ", but you are in ") + eh))
906+ let eh = parseIntValue(ca[U])
907+ if ((F[eh] != eg))
908+ then throw(((("This product is available in " + F[eh]) + ", but you are in ") + eg))
910909 else {
911- let ej = if ((dQ[al] == ""))
910+ let ei = if ((dP[al] == ""))
912911 then nil
913- else split(dQ[al], "_")
914- func ek (bI,el) = {
912+ else split(dP[al], "_")
913+ func ej (bI,ek) = {
915914 let bw = bI._2
916- let em = if ((size(ej) > bw))
917- then ej[bw]
915+ let el = if ((size(ei) > bw))
916+ then ei[bw]
918917 else "0"
919- let en = parseIntValue(em)
920- let cu = (eg * parseIntValue(ca[T]))
921- let eo = if ((bw == ef))
922- then toString((en + cu))
923- else em
924- $Tuple2((bI._1 :+ eo), (bw + 1))
918+ let em = parseIntValue(el)
919+ let cu = (ef * parseIntValue(ca[T]))
920+ let en = if ((bw == ee))
921+ then toString((em + cu))
922+ else el
923+ $Tuple2((bI._1 :+ en), (bw + 1))
925924 }
926925
927- let ep = ( let bL = G
926+ let eo = ( let bL = G
928927 let bM = size(bL)
929928 let bN = $Tuple2(nil, 0)
930929 func bO (bP,bQ) = if ((bQ >= bM))
931930 then bP
932- else ek(bP, bL[bQ])
931+ else ej(bP, bL[bQ])
933932
934933 func bR (bP,bQ) = if ((bQ >= bM))
935934 then bP
936935 else throw("List size exceeds 50")
937936
938937 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._1
939- func eq (bI,cd) = {
940- let er = ((parseIntValue(ca[cd]) * h) * eg)
941- let es = parseIntValue(ea[cd])
942- if ((er > es))
943- then throw(((((((("You have " + ea[cd]) + " of ") + D[cd]) + ", but recipe requires ") + toString(er)) + " for quantity ") + toString(eg)))
944- else if ((er > 0))
945- then (bI :+ toString((es - er)))
946- else (bI :+ ea[cd])
938+ func ep (bI,cd) = {
939+ let eq = ((parseIntValue(ca[cd]) * h) * ef)
940+ let er = parseIntValue(dZ[cd])
941+ if ((eq > er))
942+ then throw(((((((("You have " + dZ[cd]) + " of ") + D[cd]) + ", but recipe requires ") + toString(eq)) + " for quantity ") + toString(ef)))
943+ else if ((eq > 0))
944+ then (bI :+ toString((er - eq)))
945+ else (bI :+ dZ[cd])
947946 }
948947
949- let dT = {
948+ let dS = {
950949 let bL = [0, 1, 2, 3, 4, 5]
951950 let bM = size(bL)
952951 let bN = nil
953952 func bX (bP,bQ) = if ((bQ >= bM))
954953 then bP
955- else eq(bP, bL[bQ])
954+ else ep(bP, bL[bQ])
956955
957956 func bY (bP,bQ) = if ((bQ >= bM))
958957 then bP
960959
961960 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
962961 }
963- let dU = makeString([dQ[ai], dQ[aj], makeString(dT, "_"), makeString(ep, "_")], ":")
964- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
965- $Tuple2(nil, dV)
962+ let dT = makeString([dP[ai], dP[aj], makeString(dS, "_"), makeString(eo, "_")], ":")
963+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
964+ $Tuple2(nil, dU)
966965 }
967966 }
968967 }
974973
975974
976975
977-@Callable(dI)
978-func setWarehouseOrder (et,aW) = {
979- let eu = dI.originCaller
980- let aK = toString(eu)
981- let dV = if ((eu != aE))
976+@Callable(dH)
977+func setWarehouseOrder (es,aW) = {
978+ let et = dH.originCaller
979+ let aK = toString(et)
980+ let dU = if ((et != aE))
982981 then cQ()
983982 else false
984983 let bW = value(assetInfo(fromBase58String(aW)))
985984 if (!(isDefined(getInteger(aF, aO(aW)))))
986985 then throw((("NFT " + bW.name) + " is not staked"))
987986 else {
988- let ev = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned"))
989- if (if ((eu != aE))
990- then (ev != aK)
987+ let eu = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned"))
988+ if (if ((et != aE))
989+ then (eu != aK)
991990 else false)
992991 then throw((k + " is not yours"))
993992 else {
994- let ew = split_4C(et, ":")
995- let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
996- let dg = split_4C(dJ, ":")
997- let ex = split(dg[ad], "_")
998- let ey = parseIntValue(ex[af])
999- let ez = parseIntValue(ex[ah])
993+ let ev = split_4C(es, ":")
994+ let dI = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
995+ let df = split_4C(dI, ":")
996+ let ew = split(df[ad], "_")
997+ let ex = parseIntValue(ew[ah])
1000998 let cr = bn(aW)
1001- let dh = cq(cr)
1002- let dK = df(dg, dh, ew)
1003- let eA = dK._4
1004- let eB = dK._5
1005- let eC = (eA + eB)
1006- let eD = ((ez - ey) - eC)
1007- if ((0 > eD))
1008- then throw((((((("Attempt to reserve " + toString(eA)) + " space for buy orders, and ") + toString(eB)) + " space for sell orders (and occupied=") + toString(ey)) + "), leads to negative free space"))
999+ let dg = cq(cr)
1000+ let dJ = de(df, dg, ev)
1001+ let ey = dJ._4
1002+ let ez = dJ._5
1003+ let eA = dJ._7
1004+ let eB = (ey + ez)
1005+ let eC = ((ex - eA) - eB)
1006+ if ((0 > eC))
1007+ then throw((((((("Attempt to reserve " + toString(ey)) + " space for buy orders, and ") + toString(ez)) + " space for sell orders (and occupied=") + toString(eA)) + "), leads to negative free space"))
10091008 else {
1010- let eE = makeString_2C([dg[Z], makeString(dK._1, "_"), makeString(dK._2, "_"), makeString(dK._3, "_"), toString(eC)], ":")
1011- let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil))
1012- let eG = dK._6
1013- let eH = if ((eG > 0))
1014- then if ((size(dI.payments) != 1))
1009+ let eD = makeString_2C([df[Z], makeString(dJ._1, "_"), makeString(dJ._2, "_"), makeString(dJ._3, "_"), toString(eB)], ":")
1010+ let eE = bs(invoke(aF, "saveWarehouse", [eD, aW], nil))
1011+ let eF = dJ._6
1012+ let eG = if ((eF > 0))
1013+ then if ((size(dH.payments) != 1))
10151014 then throw("exactly 1 payment must be attached")
10161015 else {
1017- let dX = dI.payments[0]
1018- let dY = dX.amount
1019- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
1020- if ((dZ != b))
1016+ let dW = dH.payments[0]
1017+ let dX = dW.amount
1018+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
1019+ if ((dY != b))
10211020 then throw("USDT payments only!")
1022- else if ((dY != eG))
1023- then throw(("Payment needed is " + toString(eG)))
1024- else [StringEntry(cr, et)]
1021+ else if ((dX != eF))
1022+ then throw(("Payment needed is " + toString(eF)))
1023+ else [StringEntry(cr, es)]
10251024 }
1026- else if ((eG == 0))
1027- then if ((size(dI.payments) != 0))
1025+ else if ((eF == 0))
1026+ then if ((size(dH.payments) != 0))
10281027 then throw("No payments needed")
1029- else [StringEntry(cr, et)]
1030- else if ((size(dI.payments) != 0))
1028+ else [StringEntry(cr, es)]
1029+ else if ((size(dH.payments) != 0))
10311030 then throw("No payments needed")
1032- else [ScriptTransfer(addressFromStringValue(ev), -(eG), b), StringEntry(cr, et)]
1033- $Tuple2(eH, $Tuple2(dV, eF))
1031+ else [ScriptTransfer(addressFromStringValue(eu), -(eF), b), StringEntry(cr, es)]
1032+ $Tuple2(eG, $Tuple2(dU, eE))
10341033 }
10351034 }
10361035 }
10381037
10391038
10401039
1041-@Callable(dI)
1042-func acceptWarehouseOrder (eI,aW,bg) = {
1043- let dO = cQ()
1044- let eJ = dI.originCaller
1045- let eK = toString(eJ)
1046- let eL = valueOrErrorMessage(getString(aF, be(eK)), "You don't have a duck staked")
1047- let dP = valueOrElse(getString(aF, bh(eL)), w)
1048- let eM = split(value(dP), "_")
1049- if ((eM[bq] != "L"))
1050- then throw((("Duck location type is " + eM[bq]) + ", but should be L"))
1051- else if ((eL != bg))
1052- then throw(((("Your staked duck is " + eL) + ", but passed ") + bg))
1040+@Callable(dH)
1041+func acceptWarehouseOrder (eH,aW,bg) = {
1042+ let dN = cQ()
1043+ let eI = dH.originCaller
1044+ let eJ = toString(eI)
1045+ let eK = valueOrErrorMessage(getString(aF, be(eJ)), "You don't have a duck staked")
1046+ let dO = valueOrElse(getString(aF, bh(eK)), w)
1047+ let eL = split(value(dO), "_")
1048+ if ((eL[bq] != "L"))
1049+ then throw((("Duck location type is " + eL[bq]) + ", but should be L"))
1050+ else if ((eK != bg))
1051+ then throw(((("Your staked duck is " + eK) + ", but passed ") + bg))
10531052 else {
1054- let eN = value(assetInfo(fromBase58String(aW)))
1053+ let eM = value(assetInfo(fromBase58String(aW)))
10551054 if (!(isDefined(getInteger(aF, aO(aW)))))
1056- then throw((("NFT " + eN.name) + " is not staked"))
1055+ then throw((("NFT " + eM.name) + " is not staked"))
10571056 else {
1058- let eO = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eN.name) + " is orphaned"))
1059- if ((eO == eK))
1057+ let eN = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eM.name) + " is orphaned"))
1058+ if ((eN == eJ))
10601059 then throw("You cannot trade with yourself")
10611060 else {
1062- let eP = split_4C(eI, ":")
1063- if ((size(eP) != 3))
1061+ let eO = split_4C(eH, ":")
1062+ if ((size(eO) != 3))
10641063 then throw("bpOrderStr should contain exactly 2 ':' separators")
10651064 else {
1066- let eQ = split(eP[0], "_")
1067- let eR = split(eP[1], "_")
1068- let eS = if ((eP[2] == ""))
1065+ let eP = split(eO[0], "_")
1066+ let eQ = split(eO[1], "_")
1067+ let eR = if ((eO[2] == ""))
10691068 then nil
1070- else split(eP[2], "_")
1071- if ((size(eQ) != n))
1069+ else split(eO[2], "_")
1070+ if ((size(eP) != n))
10721071 then throw("All 6 resources should be passed")
1073- else if ((size(eR) != n))
1072+ else if ((size(eQ) != n))
10741073 then throw("All 6 materials should be passed")
10751074 else {
1076- let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
1077- let dg = split_4C(dJ, ":")
1078- let dj = split(dg[aa], "_")
1079- let dk = split(dg[ab], "_")
1080- let dl = if ((dg[ac] == ""))
1075+ let dI = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
1076+ let df = split_4C(dI, ":")
1077+ let di = split(df[aa], "_")
1078+ let dj = split(df[ab], "_")
1079+ let dk = if ((df[ac] == ""))
10811080 then nil
1082- else split(dg[ac], "_")
1083- let eT = parseIntValue(split(dg[ad], "_")[ae])
1081+ else split(df[ac], "_")
1082+ let eS = parseIntValue(split(df[ad], "_")[ae])
10841083 let cP = bf(bg)
1085- let dQ = cO(cP)
1086- let eU = split(dQ[aj], "_")
1087- let eV = split(dQ[ak], "_")
1088- let eW = if ((dQ[al] == ""))
1084+ let dP = cO(cP)
1085+ let eT = split(dP[aj], "_")
1086+ let eU = split(dP[ak], "_")
1087+ let eV = if ((dP[al] == ""))
10891088 then nil
1090- else split(dQ[al], "_")
1089+ else split(dP[al], "_")
10911090 let cr = bn(aW)
1092- let eX = cq(cr)
1093- let eY = split(eX[cn], "_")
1094- let eZ = split(eX[co], "_")
1095- let fa = if ((eX[cp] == ""))
1091+ let eW = cq(cr)
1092+ let eX = split(eW[cn], "_")
1093+ let eY = split(eW[co], "_")
1094+ let eZ = if ((eW[cp] == ""))
10961095 then nil
1097- else split(eX[cp], "_")
1098- let ds = {
1099- let bL = eQ
1096+ else split(eW[cp], "_")
1097+ let dr = {
1098+ let bL = eP
11001099 let bM = size(bL)
1101- let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eU, dj, eY, C, false)
1100+ let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eT, di, eX, C, false)
11021101 func bO (bP,bQ) = if ((bQ >= bM))
11031102 then bP
1104- else dv(bP, bL[bQ])
1103+ else du(bP, bL[bQ])
11051104
11061105 func bR (bP,bQ) = if ((bQ >= bM))
11071106 then bP
11101109 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
11111110 }
11121111 let cL = {
1113- let bL = eR
1112+ let bL = eQ
11141113 let bM = size(bL)
1115- let bN = $Tuple12(nil, nil, nil, ds._4, ds._5, ds._6, 0, eV, dk, eZ, D, false)
1114+ let bN = $Tuple12(nil, nil, nil, dr._4, dr._5, dr._6, 0, eU, dj, eY, D, false)
11161115 func bX (bP,bQ) = if ((bQ >= bM))
11171116 then bP
1118- else dv(bP, bL[bQ])
1117+ else du(bP, bL[bQ])
11191118
11201119 func bY (bP,bQ) = if ((bQ >= bM))
11211120 then bP
11231122
11241123 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
11251124 }
1126- let cs = if ((size(eS) != 0))
1125+ let cs = if ((size(eR) != 0))
11271126 then {
1128- let bL = eS
1127+ let bL = eR
11291128 let bM = size(bL)
1130- let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true)
1129+ let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eV, dk, eZ, E, true)
1130+ func ds (bP,bQ) = if ((bQ >= bM))
1131+ then bP
1132+ else du(bP, bL[bQ])
1133+
11311134 func dt (bP,bQ) = if ((bQ >= bM))
1132- then bP
1133- else dv(bP, bL[bQ])
1134-
1135- func du (bP,bQ) = if ((bQ >= bM))
11361135 then bP
11371136 else throw("List size exceeds 50")
11381137
1139- du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1138+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
11401139 }
1141- else $Tuple12(dl, fa, eW, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true)
1142- let fb = cs._4
1143- let fc = if ((0 > (eT - fb)))
1140+ else $Tuple12(dk, eZ, eV, cL._4, cL._5, cL._6, 0, eV, dk, eZ, E, true)
1141+ let fa = cs._4
1142+ let fb = if ((0 > (eS - fa)))
11441143 then 0
1145- else (eT - fb)
1146- let eE = makeString_2C([dg[Z], makeString(ds._1, "_"), makeString(cL._1, "_"), makeString(cs._1, "_"), toString(fc)], ":")
1147- let fd = makeString_2C([makeString(ds._2, "_"), makeString(cL._2, "_"), makeString(cs._2, "_")], ":")
1148- let fe = makeString_2C([dQ[ai], makeString(ds._3, "_"), makeString(cL._3, "_"), makeString(cs._3, "_")], ":")
1149- let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil))
1150- let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil))
1151- let eH = [StringEntry(cr, fd)]
1152- let fg = cs._5
1153- let fh = if ((fg > 0))
1144+ else (eS - fa)
1145+ let eD = makeString_2C([df[Z], makeString(dr._1, "_"), makeString(cL._1, "_"), makeString(cs._1, "_"), toString(fb)], ":")
1146+ let fc = makeString_2C([makeString(dr._2, "_"), makeString(cL._2, "_"), makeString(cs._2, "_")], ":")
1147+ let fd = makeString_2C([dP[ai], makeString(dr._3, "_"), makeString(cL._3, "_"), makeString(cs._3, "_")], ":")
1148+ let eE = bs(invoke(aF, "saveWarehouse", [eD, aW], nil))
1149+ let fe = bs(invoke(aF, "updateBackpack", [bg, fd], nil))
1150+ let eG = [StringEntry(cr, fc)]
1151+ let ff = cs._5
1152+ let fg = if ((ff > 0))
11541153 then {
1155- let fi = fraction(cs._5, ci, g)
1156- let fj = bb(eK)
1157- let fk = getString(aF, fj)
1158- if (isDefined(fk))
1159- then (((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fi, b))
1160- else ((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b))
1154+ let fh = fraction(cs._5, ci, g)
1155+ let fi = bb(eJ)
1156+ let fj = getString(aF, fi)
1157+ if (isDefined(fj))
1158+ then (((eG :+ ScriptTransfer(eI, (cs._5 - (3 * fh)), b)) :+ ScriptTransfer(aE, fh, b)) :+ ScriptTransfer(addressFromStringValue(value(fj)), fh, b))
1159+ else ((eG :+ ScriptTransfer(eI, (cs._5 - (3 * fh)), b)) :+ ScriptTransfer(aE, fh, b))
11611160 }
1162- else eH
1163- let fl = cs._6
1164- let fm = if ((fl > 0))
1165- then if ((size(dI.payments) != 1))
1161+ else eG
1162+ let fk = cs._6
1163+ let fl = if ((fk > 0))
1164+ then if ((size(dH.payments) != 1))
11661165 then throw("exactly 1 payment must be attached")
11671166 else {
1168- let dX = dI.payments[0]
1169- let dY = dX.amount
1170- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
1171- if ((dZ != b))
1167+ let dW = dH.payments[0]
1168+ let dX = dW.amount
1169+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
1170+ if ((dY != b))
11721171 then throw("USDT payments only!")
1173- else if ((dY != fl))
1174- then throw(("Payment needed is " + toString(fl)))
1175- else if ((cj > dY))
1172+ else if ((dX != fk))
1173+ then throw(("Payment needed is " + toString(fk)))
1174+ else if ((cj > dX))
11761175 then throw(("Payment should be at least " + toString(cj)))
11771176 else {
1178- let fn = fraction(cs._6, ci, g)
1179- let fj = bb(eO)
1180- let fk = getString(aF, fj)
1181- if (isDefined(fk))
1182- then (((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fn, b))
1183- else ((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b))
1177+ let fm = fraction(cs._6, ci, g)
1178+ let fi = bb(eN)
1179+ let fj = getString(aF, fi)
1180+ if (isDefined(fj))
1181+ then (((fg :+ ScriptTransfer(addressFromStringValue(eN), (cs._6 - (3 * fm)), b)) :+ ScriptTransfer(aE, fm, b)) :+ ScriptTransfer(addressFromStringValue(value(fj)), fm, b))
1182+ else ((fg :+ ScriptTransfer(addressFromStringValue(eN), (cs._6 - (3 * fm)), b)) :+ ScriptTransfer(aE, fm, b))
11841183 }
11851184 }
1186- else if ((size(dI.payments) != 0))
1185+ else if ((size(dH.payments) != 0))
11871186 then throw("No payments needed")
1188- else fh
1189- $Tuple2(fm, $Tuple3(dO, eF, ff))
1187+ else fg
1188+ $Tuple2(fl, $Tuple3(dN, eE, fe))
11901189 }
11911190 }
11921191 }
11961195
11971196
11981197
1199-@Callable(dI)
1200-func sellProductsToES (dM) = {
1201- let dO = cQ()
1202- if ((dO == dO))
1203- then if ((size(dI.payments) != 0))
1198+@Callable(dH)
1199+func sellProductsToES (dL) = {
1200+ let dN = cQ()
1201+ if ((dN == dN))
1202+ then if ((size(dH.payments) != 0))
12041203 then throw("No payments needed")
12051204 else {
1206- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
1207- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
1208- if ((dP[bq] != "A"))
1209- then throw(("Duck location type should be Airport, but is " + dP[bq]))
1205+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
1206+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
1207+ if ((dO[bq] != "A"))
1208+ then throw(("Duck location type should be Airport, but is " + dO[bq]))
12101209 else {
1211- let dQ = cO(bf(bg))
1212- let ej = if ((dQ[al] == ""))
1210+ let dP = cO(bf(bg))
1211+ let ei = if ((dP[al] == ""))
12131212 then nil
1214- else split(dQ[al], "_")
1215- let fo = bo()
1216- let fp = getString(fo)
1217- let fq = if (isDefined(fp))
1218- then split(value(fp), "_")
1213+ else split(dP[al], "_")
1214+ let fn = bo()
1215+ let fo = getString(fn)
1216+ let fp = if (isDefined(fo))
1217+ then split(value(fo), "_")
12191218 else nil
1220- func fr (bI,fs) = {
1219+ func fq (bI,fr) = {
12211220 let cd = bI._1
1222- let eg = if ((size(dM) > cd))
1223- then dM[cd]
1221+ let ef = if ((size(dL) > cd))
1222+ then dL[cd]
12241223 else 0
1225- if ((0 > eg))
1224+ if ((0 > ef))
12261225 then throw("Quantity cannot be negative")
12271226 else {
1228- let ca = split(fs, "_")
1227+ let ca = split(fr, "_")
12291228 if ((size(ca) != (n + 3)))
1230- then throw(("Fatal: unknown recipe: " + fs))
1229+ then throw(("Fatal: unknown recipe: " + fr))
12311230 else {
1232- let ft = parseIntValue(ca[T])
1233- let fu = (y * ft)
1234- let fv = if ((size(fq) > cd))
1235- then parseIntValue(fq[cd])
1231+ let fs = parseIntValue(ca[T])
1232+ let ft = (y * fs)
1233+ let fu = if ((size(fp) > cd))
1234+ then parseIntValue(fp[cd])
12361235 else 0
1237- let fw = (fu - fv)
1238- if ((eg > fw))
1239- then throw(((("Warehouse can buy only " + toString(fw)) + " of ") + E[cd]))
1236+ let fv = (ft - fu)
1237+ if ((ef > fv))
1238+ then throw(((("Warehouse can buy only " + toString(fv)) + " of ") + E[cd]))
12401239 else {
1241- let fx = bZ(ca)
1242- let fy = fraction((fx * z), x, (10 * ft))
1243- let fz = if ((size(ej) > cd))
1244- then parseIntValue(ej[cd])
1240+ let fw = bZ(ca)
1241+ let fx = fraction((fw * z), x, (10 * fs))
1242+ let fy = if ((size(ei) > cd))
1243+ then parseIntValue(ei[cd])
12451244 else 0
1246- if ((eg > fz))
1247- then throw(((("You have only " + toString(fz)) + " of ") + E[cd]))
1248- else $Tuple4((cd + 1), (bI._2 + (fy * eg)), (bI._3 :+ toString((fz - eg))), (bI._4 :+ toString((fv + eg))))
1245+ if ((ef > fy))
1246+ then throw(((("You have only " + toString(fy)) + " of ") + E[cd]))
1247+ else $Tuple4((cd + 1), (bI._2 + (fx * ef)), (bI._3 :+ toString((fy - ef))), (bI._4 :+ toString((fu + ef))))
12491248 }
12501249 }
12511250 }
12521251 }
12531252
1254- let dT = {
1253+ let dS = {
12551254 let bL = G
12561255 let bM = size(bL)
12571256 let bN = $Tuple4(0, 0, nil, nil)
12581257 func bO (bP,bQ) = if ((bQ >= bM))
12591258 then bP
1260- else fr(bP, bL[bQ])
1259+ else fq(bP, bL[bQ])
12611260
12621261 func bR (bP,bQ) = if ((bQ >= bM))
12631262 then bP
12651264
12661265 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
12671266 }
1268- let fe = makeString_2C([dQ[ai], dQ[aj], dQ[ak], makeString(dT._3, "_")], ":")
1269- let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil))
1270- $Tuple2([StringEntry(fo, makeString(dT._4, "_")), ScriptTransfer(dI.caller, dT._2, b)], ff)
1267+ let fd = makeString_2C([dP[ai], dP[aj], dP[ak], makeString(dS._3, "_")], ":")
1268+ let fe = bs(invoke(aF, "updateBackpack", [bg, fd], nil))
1269+ $Tuple2([StringEntry(fn, makeString(dS._4, "_")), ScriptTransfer(dH.caller, dS._2, b)], fe)
12711270 }
12721271 }
12731272 else throw("Strict value is not equal to itself.")
12751274
12761275
12771276
1278-@Callable(dI)
1279-func updateEsStorage (fA) = if ((dI.caller != aF))
1277+@Callable(dH)
1278+func updateEsStorage (fz) = if ((dH.caller != aF))
12801279 then throw("Permission denied")
1281- else $Tuple2([StringEntry(bo(), fA)], fA)
1280+ else $Tuple2([StringEntry(bo(), fz)], fz)
12821281
12831282
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = take(drop(this.bytes, 1), 1)
55
66 let b = {
77 let c = a
88 if ((base58'2W' == c))
99 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1010 else if ((base58'2T' == c))
1111 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if ((base58'2W' == c))
1818 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
1919 else if ((base58'2T' == c))
2020 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if ((base58'2W' == c))
2727 then 10000000000
2828 else if ((base58'2T' == c))
2929 then 100000000
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = "__"
3434
3535 let g = 1000000
3636
3737 let h = 10000000
3838
3939 let i = 100000000
4040
4141 let j = 10000000000
4242
4343 let k = "LAND"
4444
4545 let l = "DUCK"
4646
4747 let m = "PRESALE"
4848
4949 let n = 6
5050
5151 let o = 25
5252
5353 let p = 100
5454
5555 let q = 225
5656
5757 let r = 400
5858
5959 let s = 625
6060
6161 let t = 3456000
6262
6363 let u = 86400000
6464
6565 let v = 10000000000
6666
6767 let w = "Africa_F_Africa"
6868
6969 let x = 39637
7070
7171 let y = 3
7272
7373 let z = 4
7474
7575 let A = 10
7676
7777 let B = 100
7878
7979 let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8080
8181 let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
8282
8383 let E = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
8484
8585 let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
8686
8787 let G = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
8888
8989 let H = 0
9090
9191 let I = 1
9292
9393 let J = 2
9494
9595 let K = 3
9696
9797 let L = 4
9898
9999 let M = 0
100100
101101 let N = 1
102102
103103 let O = 2
104104
105105 let P = 3
106106
107107 let Q = 4
108108
109109 let R = 5
110110
111111 let S = 6
112112
113113 let T = 7
114114
115115 let U = 8
116116
117117 let V = 0
118118
119119 let W = 1
120120
121121 let X = 2
122122
123123 let Y = 3
124124
125125 let Z = 0
126126
127127 let aa = 1
128128
129129 let ab = 2
130130
131131 let ac = 3
132132
133133 let ad = 4
134134
135135 let ae = 0
136136
137137 let af = 1
138138
139139 let ag = 2
140140
141141 let ah = 3
142142
143143 let ai = 0
144144
145145 let aj = 1
146146
147147 let ak = 2
148148
149149 let al = 3
150150
151151 func am (an) = parseIntValue(split(G[an], "_")[T])
152152
153153
154154 func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
155155
156156
157157 func ar (aq,as) = valueOrElse(getInteger(this, aq), as)
158158
159159
160160 let at = 1
161161
162162 let au = 2
163163
164164 let av = 3
165165
166166 let aw = 4
167167
168168 func ax () = "%s__restConfig"
169169
170170
171171 func ay () = "%s__restAddr"
172172
173173
174174 func az (aA) = split_4C(ao(aA, ax()), f)
175175
176176
177177 func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD)))
178178
179179
180180 let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d))
181181
182182 let aC = az(aE)
183183
184184 let aF = aB(aC, at)
185185
186186 let aG = aB(aC, au)
187187
188188 let aH = aB(aC, av)
189189
190190 let aI = aB(aC, aw)
191191
192192 func aJ (aK) = ("lastTxIdByUser_" + aK)
193193
194194
195195 func aL (aM) = ("nftOwner_" + aM)
196196
197197
198198 func aN (aM) = ("landCustomNameByAssetId_" + aM)
199199
200200
201201 func aO (aM) = ("stakedTime_" + aM)
202202
203203
204204 func aP (aM) = ("infraLevel_" + aM)
205205
206206
207207 func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_")
208208
209209
210210 func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU)
211211
212212
213213 func aV (aW) = ("wareHouse_" + aW)
214214
215215
216216 func aX (aU) = ("stakedLandsByOwner_" + aU)
217217
218218
219219 func aY (aU) = ("stakedPiecesByOwner_" + aU)
220220
221221
222222 func aZ (aM) = ("duckCustomNameByAssetId_" + aM)
223223
224224
225225 func ba (aK) = ("accountCustomNameByAddr_" + aK)
226226
227227
228228 func bb (aK) = ("accRefBy_" + aK)
229229
230230
231231 func bc (aK) = ("accReferrals_" + aK)
232232
233233
234234 func bd (aM) = ("duckOwner_" + aM)
235235
236236
237237 func be (aU) = ("stakedDuckByOwner_" + aU)
238238
239239
240240 func bf (bg) = ("backPack_" + bg)
241241
242242
243243 func bh (bg) = ("duckLocation_" + bg)
244244
245245
246246 func bi (bg) = ("duckHealth_" + bg)
247247
248248
249249 func bj () = "resTypesProportions"
250250
251251
252252 func bk () = "contractsBlocked"
253253
254254
255255 func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm)
256256
257257
258258 func bn (aW) = ("landOrder_" + aW)
259259
260260
261261 func bo () = "emergencyWarehouseProducts"
262262
263263
264264 let bp = 0
265265
266266 let bq = 1
267267
268268 let br = 2
269269
270270 func bs (bt) = {
271271 let c = bt
272272 if ($isInstanceOf(c, "String"))
273273 then {
274274 let bu = c
275275 bu
276276 }
277277 else throw("fail to cast into String")
278278 }
279279
280280
281281 func bv (bt) = {
282282 let c = bt
283283 if ($isInstanceOf(c, "Int"))
284284 then {
285285 let bw = c
286286 bw
287287 }
288288 else throw("fail to cast into Int")
289289 }
290290
291291
292292 func bx (bt) = {
293293 let c = bt
294294 if ($isInstanceOf(c, "List[Any]"))
295295 then {
296296 let by = c
297297 by
298298 }
299299 else throw("fail to cast into List[Any]")
300300 }
301301
302302
303303 func bz (bt) = {
304304 let c = bt
305305 if ($isInstanceOf(c, "Boolean"))
306306 then {
307307 let bu = c
308308 bu
309309 }
310310 else throw("fail to cast into Boolean")
311311 }
312312
313313
314314 func bA (bB) = {
315315 let c = bB
316316 if (("S" == c))
317317 then o
318318 else if (("M" == c))
319319 then p
320320 else if (("L" == c))
321321 then q
322322 else if (("XL" == c))
323323 then r
324324 else if (("XXL" == c))
325325 then s
326326 else throw("Unknown land size")
327327 }
328328
329329
330330 let bC = 0
331331
332332 let bD = 1
333333
334334 func bE (bF) = {
335335 let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_")
336336 func bH (bI,bJ) = (bI + parseIntValue(bJ))
337337
338338 let bK = {
339339 let bL = bG
340340 let bM = size(bL)
341341 let bN = 0
342342 func bO (bP,bQ) = if ((bQ >= bM))
343343 then bP
344344 else bH(bP, bL[bQ])
345345
346346 func bR (bP,bQ) = if ((bQ >= bM))
347347 then bP
348348 else throw("List size exceeds 6")
349349
350350 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
351351 }
352352 let bS = if ((bF == ""))
353353 then 0
354354 else {
355355 let bT = getString(aF, aX(bF))
356356 let bU = if (isDefined(bT))
357357 then split_51C(value(bT), "_")
358358 else nil
359359 func bV (bI,aW) = {
360360 let bW = value(assetInfo(fromBase58String(aW)))
361361 let bB = split(bW.description, "_")[W]
362362 (bI + bA(bB))
363363 }
364364
365365 let bL = bU
366366 let bM = size(bL)
367367 let bN = 0
368368 func bX (bP,bQ) = if ((bQ >= bM))
369369 then bP
370370 else bV(bP, bL[bQ])
371371
372372 func bY (bP,bQ) = if ((bQ >= bM))
373373 then bP
374374 else throw("List size exceeds 100")
375375
376376 bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
377377 }
378378 [bK, bS]
379379 }
380380
381381
382382 func bZ (ca) = {
383383 func cb (cc,cd) = (cc + parseIntValue(ca[cd]))
384384
385385 let bL = [0, 1, 2, 3, 4, 5]
386386 let bM = size(bL)
387387 let bN = 0
388388 func bO (bP,bQ) = if ((bQ >= bM))
389389 then bP
390390 else cb(bP, bL[bQ])
391391
392392 func bR (bP,bQ) = if ((bQ >= bM))
393393 then bP
394394 else throw("List size exceeds 6")
395395
396396 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397397 }
398398
399399
400400 let ce = 10000000000
401401
402402 let cf = 10000
403403
404404 let cg = 200
405405
406406 let ch = 300
407407
408408 let ci = 10000
409409
410410 let cj = 100000
411411
412412 func ck (cl,cm) = ((("factoryWhByContinentAndRes_" + cl) + "_") + toString(cm))
413413
414414
415415 let cn = 0
416416
417417 let co = 1
418418
419419 let cp = 2
420420
421421 func cq (cr) = {
422422 let cs = split(valueOrElse(getString(cr), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
423423 [if ((size(split(cs[cn], "_")) == n))
424424 then cs[cn]
425425 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(cs[co], "_")) == n))
426426 then cs[co]
427427 else "0@0_0@0_0@0_0@0_0@0_0@0", cs[cp]]
428428 }
429429
430430
431431 func ct (cu,cv,cw) = if (cw)
432432 then {
433433 let cx = if ((cu >= 0))
434434 then (((cu + cv) - 1) / cv)
435435 else -((((-(cu) + cv) - 1) / cv))
436436 (cx * i)
437437 }
438438 else cu
439439
440440
441441 func cy (cz,cm,cu,cA) = {
442442 let cB = ck(cz, cm)
443443 let cC = valueOrElse(getInteger(cB), 0)
444444 let cD = if ((cC > ce))
445445 then 0
446446 else if (((cC + cu) > ce))
447447 then (ce - cC)
448448 else cu
449449 let cE = (fraction(cD, ((cg * x) - fraction(((100 * cC) + (50 * cD)), x, ce)), j) + fraction((cu - cD), x, i))
450450 let cF = (cA - (cA / 100))
451451 if (((cF * cu) > (cE * i)))
452452 then throw((((((((((("Actual price = " + toString(cE)) + " / ") + toString(cu)) + " < minPrice = ") + toString(cA)) + ", (") + cz) + ", ") + C[cm]) + ")"))
453453 else $Tuple2(IntegerEntry(cB, (cC + cu)), cE)
454454 }
455455
456456
457457 func cG (cz,cH,cu,cI) = {
458458 let cB = ck(cz, cH)
459459 let cC = valueOrElse(getInteger(cB), 0)
460460 let cJ = if ((cC > ce))
461461 then min([cu, (cC - ce)])
462462 else 0
463463 let cK = min([cC, (cu - cJ)])
464464 let cL = (cK + cJ)
465465 let cM = (fraction(cK, ((ch * x) - fraction(((100 * cC) - (50 * cK)), x, ce)), j) + fraction(cJ, (2 * x), i))
466466 let cN = (cI + (cI / 100))
467467 if (((cM * i) > (cN * cL)))
468468 then throw((((((((((("Actual price = " + toString(cM)) + " / ") + toString(cL)) + " > maxPrice = ") + toString(cI)) + ", (") + cz) + ", ") + D[cH]) + ")"))
469469 else $Tuple3(IntegerEntry(cB, (cC - cL)), cM, cL)
470470 }
471471
472472
473473 func cO (cP) = {
474474 let cs = split(valueOrElse(getString(aF, cP), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
475475 [toString(valueOrElse(parseInt(cs[ai]), 0)), if ((size(split(cs[aj], "_")) == n))
476476 then cs[aj]
477477 else "0_0_0_0_0_0", if ((size(split(cs[ak], "_")) == n))
478478 then cs[ak]
479479 else "0_0_0_0_0_0", cs[al]]
480480 }
481481
482482
483483 func cQ () = if (valueOrElse(getBoolean(aF, bk()), false))
484484 then throw("Contracts are under maintenance")
485485 else unit
486486
487487
488488 func cR (bI,bJ) = {
489489 let cd = bI._1
490490 let cS = bI._8
491491 let cv = if (cS)
492492 then parseIntValue(split(G[cd], "_")[T])
493493 else 0
494494 let cT = split(bJ, "@")
495495 if ((size(cT) != 2))
496496 then throw("Incorrect order format, should be amount@price")
497497 else {
498498 let cU = parseIntValue(cT[0])
499499 let cV = parseIntValue(cT[1])
500500 let cW = fraction(cU, cV, i)
501501 let cX = ct(cU, cv, cS)
502502 let cY = if ((size(bI._6) > cd))
503503 then parseIntValue(bI._6[cd])
504504 else 0
505505 let cZ = split(if ((size(bI._7) > cd))
506506 then bI._7[cd]
507507 else "0@0", "@")
508508 let da = parseIntValue(cZ[0])
509509 let db = parseIntValue(cZ[1])
510510 if (if ((0 > db))
511511 then true
512512 else (0 > cV))
513513 then throw("Price can't be negative")
514514 else {
515515 let dc = fraction(da, db, i)
516- let dd = ct(da, cv, cS)
517516 if ((cU == 0))
518517 then if ((da > 0))
519- then $Tuple8((cd + 1), (bI._2 :+ toString(cY)), bI._3, bI._4, (bI._5 - dc), bI._6, bI._7, cS)
520- else $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), bI._3, bI._4, bI._5, bI._6, bI._7, cS)
518+ then $Tuple9((cd + 1), (bI._2 :+ toString(cY)), bI._3, bI._4, (bI._5 - dc), bI._6, bI._7, cS, (bI._9 + ct(cY, cv, cS)))
519+ else $Tuple9((cd + 1), (bI._2 :+ toString((cY - da))), bI._3, bI._4, bI._5, bI._6, bI._7, cS, (bI._9 + ct((cY - da), cv, cS)))
521520 else if ((cU > 0))
522521 then if ((0 > da))
523- then $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), (bI._3 + cX), bI._4, (bI._5 + cW), bI._6, bI._7, cS)
524- else $Tuple8((cd + 1), (bI._2 :+ toString(cY)), (bI._3 + cX), bI._4, ((bI._5 + cW) - dc), bI._6, bI._7, cS)
522+ then $Tuple9((cd + 1), (bI._2 :+ toString((cY - da))), (bI._3 + cX), bI._4, (bI._5 + cW), bI._6, bI._7, cS, ct((cY - da), cv, cS))
523+ else $Tuple9((cd + 1), (bI._2 :+ toString(cY)), (bI._3 + cX), bI._4, ((bI._5 + cW) - dc), bI._6, bI._7, cS, ct(cY, cv, cS))
525524 else if ((0 > da))
526525 then {
527- let de = (da - cU)
528- if ((0 > (cY - de)))
529- then throw((((("Attempt to take " + toString(de)) + " from warehouse, but only ") + toString(cY)) + " available"))
530- else $Tuple8((cd + 1), (bI._2 :+ toString((cY - de))), bI._3, (bI._4 - cX), bI._5, bI._6, bI._7, cS)
526+ let dd = (da - cU)
527+ if ((0 > (cY - dd)))
528+ then throw((((("Attempt to take " + toString(dd)) + " from warehouse, but only ") + toString(cY)) + " available"))
529+ else $Tuple9((cd + 1), (bI._2 :+ toString((cY - dd))), bI._3, (bI._4 - cX), bI._5, bI._6, bI._7, cS, ct((cY - dd), cv, cS))
531530 }
532531 else if ((0 > (cY + cU)))
533532 then throw((((("Attempt to take " + toString(-(cU))) + " from warehouse, but only ") + toString(cY)) + " available"))
534- else $Tuple8((cd + 1), (bI._2 :+ toString((cY + cU))), bI._3, (bI._4 - cX), (bI._5 - dc), bI._6, bI._7, cS)
533+ else $Tuple9((cd + 1), (bI._2 :+ toString((cY + cU))), bI._3, (bI._4 - cX), (bI._5 - dc), bI._6, bI._7, cS, ct((cY + cU), cv, cS))
535534 }
536535 }
537536 }
538537
539538
540-func df (dg,dh,di) = {
541- let dj = split(dg[aa], "_")
542- let dk = split(dg[ab], "_")
543- let dl = if ((dg[ac] == ""))
539+func de (df,dg,dh) = {
540+ let di = split(df[aa], "_")
541+ let dj = split(df[ab], "_")
542+ let dk = if ((df[ac] == ""))
544543 then nil
545- else split(dg[ac], "_")
546- let dm = split(dh[cn], "_")
547- let dn = split(dh[co], "_")
548- let do = if ((dh[cp] == ""))
544+ else split(df[ac], "_")
545+ let dl = split(dg[cn], "_")
546+ let dm = split(dg[co], "_")
547+ let dn = if ((dg[cp] == ""))
549548 then nil
550- else split(dh[cp], "_")
551- if ((size(di) != 3))
549+ else split(dg[cp], "_")
550+ if ((size(dh) != 3))
552551 then throw("newOrderStr should contain exactly 2 ':' separators")
553552 else {
554- let dp = split(di[0], "_")
555- let dq = split(di[1], "_")
556- let dr = if ((di[2] == ""))
553+ let do = split(dh[0], "_")
554+ let dp = split(dh[1], "_")
555+ let dq = if ((dh[2] == ""))
557556 then nil
558- else split(di[2], "_")
559- if ((size(dp) != n))
557+ else split(dh[2], "_")
558+ if ((size(do) != n))
560559 then throw("All 6 resources should be passed")
561- else if ((size(dq) != n))
560+ else if ((size(dp) != n))
562561 then throw("All 6 materials should be passed")
563562 else {
564- let ds = {
565- let bL = dp
563+ let dr = {
564+ let bL = do
566565 let bM = size(bL)
567- let bN = $Tuple8(0, nil, 0, 0, 0, dj, dm, false)
566+ let bN = $Tuple9(0, nil, 0, 0, 0, di, dl, false, 0)
568567 func bO (bP,bQ) = if ((bQ >= bM))
569568 then bP
570569 else cR(bP, bL[bQ])
571570
572571 func bR (bP,bQ) = if ((bQ >= bM))
573572 then bP
574573 else throw("List size exceeds 6")
575574
576575 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
577576 }
578577 let cL = {
579- let bL = dq
578+ let bL = dp
580579 let bM = size(bL)
581- let bN = $Tuple8(0, nil, ds._3, ds._4, ds._5, dk, dn, false)
580+ let bN = $Tuple9(0, nil, dr._3, dr._4, dr._5, dj, dm, false, dr._9)
582581 func bX (bP,bQ) = if ((bQ >= bM))
583582 then bP
584583 else cR(bP, bL[bQ])
585584
586585 func bY (bP,bQ) = if ((bQ >= bM))
587586 then bP
588587 else throw("List size exceeds 6")
589588
590589 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
591590 }
592- let cs = if ((size(dr) != 0))
591+ let cs = if ((size(dq) != 0))
593592 then {
594- let bL = dr
593+ let bL = dq
595594 let bM = size(bL)
596- let bN = $Tuple8(0, nil, cL._3, cL._4, cL._5, dl, do, true)
597- func dt (bP,bQ) = if ((bQ >= bM))
595+ let bN = $Tuple9(0, nil, cL._3, cL._4, cL._5, dk, dn, true, cL._9)
596+ func ds (bP,bQ) = if ((bQ >= bM))
598597 then bP
599598 else cR(bP, bL[bQ])
600599
601- func du (bP,bQ) = if ((bQ >= bM))
600+ func dt (bP,bQ) = if ((bQ >= bM))
602601 then bP
603602 else throw("List size exceeds 50")
604603
605- du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
604+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
606605 }
607- else $Tuple8(0, dl, cL._3, cL._4, cL._5, dl, do, true)
608- $Tuple6(ds._2, cL._2, cs._2, cs._3, cs._4, cs._5)
606+ else $Tuple9(0, dk, cL._3, cL._4, cL._5, dk, dn, true, cL._9)
607+ $Tuple7(dr._2, cL._2, cs._2, cs._3, cs._4, cs._5, cs._9)
609608 }
610609 }
611610 }
612611
613612
614-func dv (bI,dw) = {
613+func du (bI,dv) = {
615614 let cd = bI._7
616615 let cS = bI._12
617616 let cv = if (cS)
618617 then parseIntValue(split(G[cd], "_")[T])
619618 else 0
620- let dx = split(dw, "@")
621- if ((size(dx) != 2))
619+ let dw = split(dv, "@")
620+ if ((size(dw) != 2))
622621 then throw("Incorrect order format, should be amount@price")
623622 else {
624- let dy = parseIntValue(dx[0])
625- let dz = parseIntValue(dx[1])
626- if ((0 > dz))
623+ let dx = parseIntValue(dw[0])
624+ let dy = parseIntValue(dw[1])
625+ if ((0 > dy))
627626 then throw("Price can't be negative")
628627 else {
629- let dA = fraction(dy, dz, i)
630- let dB = if ((size(bI._8) > cd))
628+ let dz = fraction(dx, dy, i)
629+ let dA = if ((size(bI._8) > cd))
631630 then parseIntValue(bI._8[cd])
632631 else 0
633632 let cY = if ((size(bI._9) > cd))
634633 then parseIntValue(bI._9[cd])
635634 else 0
636- let dC = if ((size(bI._10) > cd))
635+ let dB = if ((size(bI._10) > cd))
637636 then bI._10[cd]
638637 else "0@0"
639- let dD = split(dC, "@")
640- let dE = parseIntValue(dD[0])
641- let dF = parseIntValue(dD[1])
642- if (if ((dy != 0))
643- then (dz != dF)
638+ let dC = split(dB, "@")
639+ let dD = parseIntValue(dC[0])
640+ let dE = parseIntValue(dC[1])
641+ if (if ((dx != 0))
642+ then (dy != dE)
644643 else false)
645- then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dF)) + ", your price=") + toString(dz)))
644+ then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dE)) + ", your price=") + toString(dy)))
646645 else {
647- let dG = fraction(dE, dF, i)
648- let dH = ct(dy, cv, cS)
649- if ((dy == 0))
650- then $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ dC), (bI._3 :+ toString(dB)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
651- else if ((dy > 0))
652- then if ((0 > dE))
653- then if ((dy > -(dE)))
654- then throw(((((("Attempt to buy " + toString(dy)) + " of ") + bI._11[cd]) + ", but warehouse only sells ") + toString(-(dE))))
655- else $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 + dH), bI._5, (bI._6 + dA), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
646+ let dF = fraction(dD, dE, i)
647+ let dG = ct(dx, cv, cS)
648+ if ((dx == 0))
649+ then $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ dB), (bI._3 :+ toString(dA)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
650+ else if ((dx > 0))
651+ then if ((0 > dD))
652+ then if ((dx > -(dD)))
653+ then throw(((((("Attempt to buy " + toString(dx)) + " of ") + bI._11[cd]) + ", but warehouse only sells ") + toString(-(dD))))
654+ else $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ ((toString((dD + dx)) + "@") + toString(dE))), (bI._3 :+ toString((dA + dx))), (bI._4 + dG), bI._5, (bI._6 + dz), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
656655 else throw((("Attempt to buy " + bI._11[cd]) + " while warehouse doesn't sell it"))
657- else if ((dE > 0))
658- then if ((-(dy) > dE))
659- then throw(((((("Attempt to sell " + toString(-(dy))) + " of ") + bI._11[cd]) + ", but warehouse only buys ") + toString(dE)))
660- else if ((-(dy) > dB))
661- then throw(((((("Attempt to sell " + toString(-(dy))) + ", but you only have ") + toString(dB)) + " of ") + bI._11[cd]))
662- else $Tuple12((bI._1 :+ toString((cY - dy))), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 - dH), (bI._5 - dA), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
656+ else if ((dD > 0))
657+ then if ((-(dx) > dD))
658+ then throw(((((("Attempt to sell " + toString(-(dx))) + " of ") + bI._11[cd]) + ", but warehouse only buys ") + toString(dD)))
659+ else if ((-(dx) > dA))
660+ then throw(((((("Attempt to sell " + toString(-(dx))) + ", but you only have ") + toString(dA)) + " of ") + bI._11[cd]))
661+ else $Tuple12((bI._1 :+ toString((cY - dx))), (bI._2 :+ ((toString((dD + dx)) + "@") + toString(dE))), (bI._3 :+ toString((dA + dx))), (bI._4 - dG), (bI._5 - dz), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS)
663662 else throw((("Attempt to sell " + bI._11[cd]) + " while warehouse doesn't buy it"))
664663 }
665664 }
666665 }
667666 }
668667
669668
670-@Callable(dI)
671-func recalcLockedVolumeREADONLY (aW,dJ) = {
672- let dh = cq(bn(aW))
673- let dK = df(dJ, dh, dh)
674- $Tuple2(nil, (dK._4 + dK._5))
669+@Callable(dH)
670+func recalcLockedVolumeREADONLY (aW,dI) = {
671+ let dg = cq(bn(aW))
672+ let dJ = de(dI, dg, dg)
673+ $Tuple2(nil, (dJ._4 + dJ._5))
675674 }
676675
677676
678677
679-@Callable(dI)
680-func constructorV1 (dL) = if ((dI.caller != this))
678+@Callable(dH)
679+func constructorV1 (dK) = if ((dH.caller != this))
681680 then throw("Permission denied")
682- else [StringEntry(ay(), dL)]
681+ else [StringEntry(ay(), dK)]
683682
684683
685684
686-@Callable(dI)
687-func sellResources (dM,dN) = {
688- let dO = cQ()
689- if ((dO == dO))
685+@Callable(dH)
686+func sellResources (dL,dM) = {
687+ let dN = cQ()
688+ if ((dN == dN))
690689 then {
691- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
692- if ((size(dI.payments) != 0))
690+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
691+ if ((size(dH.payments) != 0))
693692 then throw("sellResources doesn't require any payments")
694693 else {
695- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
696- if ((dP[bq] != "F"))
697- then throw(("Duck location type should be Factory, but is " + dP[bq]))
694+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
695+ if ((dO[bq] != "F"))
696+ then throw(("Duck location type should be Factory, but is " + dO[bq]))
698697 else {
699- let cz = dP[br]
700- let dQ = cO(bf(bg))
701- let dR = split(dQ[aj], "_")
702- func bH (bI,cd) = if ((dM[cd] > parseIntValue(dR[cd])))
703- then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to sell ") + toString(dM[cd])))
704- else if ((0 > dM[cd]))
705- then throw(((("You tried to sell negative amount of " + C[cd]) + ": ") + toString(dM[cd])))
706- else if ((dM[cd] > 0))
698+ let cz = dO[br]
699+ let dP = cO(bf(bg))
700+ let dQ = split(dP[aj], "_")
701+ func bH (bI,cd) = if ((dL[cd] > parseIntValue(dQ[cd])))
702+ then throw(((((("You have " + dQ[cd]) + " of ") + C[cd]) + ", but tried to sell ") + toString(dL[cd])))
703+ else if ((0 > dL[cd]))
704+ then throw(((("You tried to sell negative amount of " + C[cd]) + ": ") + toString(dL[cd])))
705+ else if ((dL[cd] > 0))
707706 then {
708- let dS = cy(cz, cd, dM[cd], dN[cd])
709- $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(dR[cd]) - dM[cd]))), (bI._3 + dS._2))
707+ let dR = cy(cz, cd, dL[cd], dM[cd])
708+ $Tuple3((bI._1 :+ dR._1), (bI._2 :+ toString((parseIntValue(dQ[cd]) - dL[cd]))), (bI._3 + dR._2))
710709 }
711- else $Tuple3(bI._1, (bI._2 :+ dR[cd]), bI._3)
710+ else $Tuple3(bI._1, (bI._2 :+ dQ[cd]), bI._3)
712711
713- let dT = {
712+ let dS = {
714713 let bL = [0, 1, 2, 3, 4, 5]
715714 let bM = size(bL)
716715 let bN = $Tuple3(nil, nil, 0)
717716 func bO (bP,bQ) = if ((bQ >= bM))
718717 then bP
719718 else bH(bP, bL[bQ])
720719
721720 func bR (bP,bQ) = if ((bQ >= bM))
722721 then bP
723722 else throw("List size exceeds 6")
724723
725724 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
726725 }
727- let dU = makeString([dQ[ai], makeString(dT._2, "_"), dQ[ak], dQ[al]], ":")
728- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
729- $Tuple2((dT._1 :+ ScriptTransfer(dI.caller, dT._3, b)), dV)
726+ let dT = makeString([dP[ai], makeString(dS._2, "_"), dP[ak], dP[al]], ":")
727+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
728+ $Tuple2((dS._1 :+ ScriptTransfer(dH.caller, dS._3, b)), dU)
730729 }
731730 }
732731 }
733732 else throw("Strict value is not equal to itself.")
734733 }
735734
736735
737736
738-@Callable(dI)
739-func buyMaterials (dM,dW) = {
740- let dO = cQ()
741- if ((dO == dO))
737+@Callable(dH)
738+func buyMaterials (dL,dV) = {
739+ let dN = cQ()
740+ if ((dN == dN))
742741 then {
743- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
744- if ((size(dI.payments) != 1))
742+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
743+ if ((size(dH.payments) != 1))
745744 then throw("exactly 1 payment must be attached")
746745 else {
747- let dX = dI.payments[0]
748- let dY = dX.amount
749- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
750- if ((dZ != b))
746+ let dW = dH.payments[0]
747+ let dX = dW.amount
748+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
749+ if ((dY != b))
751750 then throw("USDT payments only!")
752751 else {
753- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
754- if ((dP[bq] != "F"))
755- then throw(("Duck location type should be Factory, but is " + dP[bq]))
752+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
753+ if ((dO[bq] != "F"))
754+ then throw(("Duck location type should be Factory, but is " + dO[bq]))
756755 else {
757- let cz = dP[br]
758- let dQ = cO(bf(bg))
759- let ea = split(dQ[ak], "_")
760- func eb (bI,cd) = if ((0 > dM[cd]))
761- then throw(((("You tried to buy negative amount of " + D[cd]) + ": ") + toString(dM[cd])))
762- else if ((dM[cd] > 0))
756+ let cz = dO[br]
757+ let dP = cO(bf(bg))
758+ let dZ = split(dP[ak], "_")
759+ func ea (bI,cd) = if ((0 > dL[cd]))
760+ then throw(((("You tried to buy negative amount of " + D[cd]) + ": ") + toString(dL[cd])))
761+ else if ((dL[cd] > 0))
763762 then {
764- let dS = cG(cz, cd, dM[cd], dW[cd])
765- $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(ea[cd]) + dS._3))), (bI._3 + dS._2))
763+ let dR = cG(cz, cd, dL[cd], dV[cd])
764+ $Tuple3((bI._1 :+ dR._1), (bI._2 :+ toString((parseIntValue(dZ[cd]) + dR._3))), (bI._3 + dR._2))
766765 }
767- else $Tuple3(bI._1, (bI._2 :+ ea[cd]), bI._3)
766+ else $Tuple3(bI._1, (bI._2 :+ dZ[cd]), bI._3)
768767
769- let dT = {
768+ let dS = {
770769 let bL = [0, 1, 2, 3, 4, 5]
771770 let bM = size(bL)
772771 let bN = $Tuple3(nil, nil, 0)
773772 func bO (bP,bQ) = if ((bQ >= bM))
774773 then bP
775- else eb(bP, bL[bQ])
774+ else ea(bP, bL[bQ])
776775
777776 func bR (bP,bQ) = if ((bQ >= bM))
778777 then bP
779778 else throw("List size exceeds 6")
780779
781780 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
782781 }
783- if ((dT._3 > dY))
784- then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
782+ if ((dS._3 > dX))
783+ then throw(((("Insufficient payment! Attached=" + toString(dX)) + ", required=") + toString(dS._3)))
785784 else {
786- let dU = makeString([dQ[ai], dQ[aj], makeString(dT._2, "_"), dQ[al]], ":")
787- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
788- let aA = if (((dY - dT._3) > 0))
789- then [ScriptTransfer(dI.caller, (dY - dT._3), b)]
785+ let dT = makeString([dP[ai], dP[aj], makeString(dS._2, "_"), dP[al]], ":")
786+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
787+ let aA = if (((dX - dS._3) > 0))
788+ then [ScriptTransfer(dH.caller, (dX - dS._3), b)]
790789 else nil
791- let ec = (dT._3 / 100)
792- $Tuple2(((dT._1 ++ aA) :+ ScriptTransfer(aE, ec, b)), dV)
790+ let eb = (dS._3 / 100)
791+ $Tuple2(((dS._1 ++ aA) :+ ScriptTransfer(aE, eb, b)), dU)
793792 }
794793 }
795794 }
796795 }
797796 }
798797 else throw("Strict value is not equal to itself.")
799798 }
800799
801800
802801
803-@Callable(dI)
804-func exchangeResources (dM) = {
805- let dO = cQ()
806- if ((dO == dO))
802+@Callable(dH)
803+func exchangeResources (dL) = {
804+ let dN = cQ()
805+ if ((dN == dN))
807806 then {
808- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
809- if ((size(dI.payments) != 1))
807+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
808+ if ((size(dH.payments) != 1))
810809 then throw("exactly 1 payment must be attached")
811810 else {
812- let dX = dI.payments[0]
813- let dY = dX.amount
814- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
815- if ((dZ != b))
811+ let dW = dH.payments[0]
812+ let dX = dW.amount
813+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
814+ if ((dY != b))
816815 then throw("USDT payments only!")
817816 else {
818- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
819- if ((dP[bq] != "F"))
820- then throw(("Duck location type should be Factory, but is " + dP[bq]))
817+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
818+ if ((dO[bq] != "F"))
819+ then throw(("Duck location type should be Factory, but is " + dO[bq]))
821820 else {
822- let cz = dP[br]
823- let dQ = cO(bf(bg))
824- let dR = split(dQ[aj], "_")
825- let ea = split(dQ[ak], "_")
826- func ed (bI,cd) = {
821+ let cz = dO[br]
822+ let dP = cO(bf(bg))
823+ let dQ = split(dP[aj], "_")
824+ let dZ = split(dP[ak], "_")
825+ func ec (bI,cd) = {
827826 let cB = ck(cz, cd)
828827 let cC = valueOrElse(getInteger(cB), 0)
829- let ee = dM[cd]
830- if ((ee > parseIntValue(dR[cd])))
831- then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to exchange ") + toString(ee)))
832- else if ((0 > ee))
833- then throw(((("You tried to exchange negative amount of " + C[cd]) + ": ") + toString(ee)))
834- else if ((ee > 0))
835- then $Tuple4((bI._1 :+ toString((parseIntValue(dR[cd]) - ee))), (bI._2 :+ toString((parseIntValue(ea[cd]) + ee))), (bI._3 + fraction(ee, x, i)), (bI._4 :+ IntegerEntry(cB, cC)))
836- else $Tuple4((bI._1 :+ dR[cd]), (bI._2 :+ ea[cd]), bI._3, bI._4)
828+ let ed = dL[cd]
829+ if ((ed > parseIntValue(dQ[cd])))
830+ then throw(((((("You have " + dQ[cd]) + " of ") + C[cd]) + ", but tried to exchange ") + toString(ed)))
831+ else if ((0 > ed))
832+ then throw(((("You tried to exchange negative amount of " + C[cd]) + ": ") + toString(ed)))
833+ else if ((ed > 0))
834+ then $Tuple4((bI._1 :+ toString((parseIntValue(dQ[cd]) - ed))), (bI._2 :+ toString((parseIntValue(dZ[cd]) + ed))), (bI._3 + fraction(ed, x, i)), (bI._4 :+ IntegerEntry(cB, cC)))
835+ else $Tuple4((bI._1 :+ dQ[cd]), (bI._2 :+ dZ[cd]), bI._3, bI._4)
837836 }
838837
839- let dT = {
838+ let dS = {
840839 let bL = [0, 1, 2, 3, 4, 5]
841840 let bM = size(bL)
842841 let bN = $Tuple4(nil, nil, 0, nil)
843842 func bO (bP,bQ) = if ((bQ >= bM))
844843 then bP
845- else ed(bP, bL[bQ])
844+ else ec(bP, bL[bQ])
846845
847846 func bR (bP,bQ) = if ((bQ >= bM))
848847 then bP
849848 else throw("List size exceeds 6")
850849
851850 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
852851 }
853- if ((dT._3 > dY))
854- then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
852+ if ((dS._3 > dX))
853+ then throw(((("Insufficient payment! Attached=" + toString(dX)) + ", required=") + toString(dS._3)))
855854 else {
856- let dU = makeString([dQ[ai], makeString(dT._1, "_"), makeString(dT._2, "_"), dQ[al]], ":")
857- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
858- let aA = if (((dY - dT._3) > 0))
859- then [ScriptTransfer(dI.caller, (dY - dT._3), b)]
855+ let dT = makeString([dP[ai], makeString(dS._1, "_"), makeString(dS._2, "_"), dP[al]], ":")
856+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
857+ let aA = if (((dX - dS._3) > 0))
858+ then [ScriptTransfer(dH.caller, (dX - dS._3), b)]
860859 else nil
861- let ec = (dT._3 / 100)
862- $Tuple2(((aA ++ dT._4) :+ ScriptTransfer(aE, ec, b)), dV)
860+ let eb = (dS._3 / 100)
861+ $Tuple2(((aA ++ dS._4) :+ ScriptTransfer(aE, eb, b)), dU)
863862 }
864863 }
865864 }
866865 }
867866 }
868867 else throw("Strict value is not equal to itself.")
869868 }
870869
871870
872871
873-@Callable(dI)
874-func craftGoods (ef,eg) = {
875- let dO = cQ()
876- if ((dO == dO))
877- then if ((size(dI.payments) != 1))
872+@Callable(dH)
873+func craftGoods (ee,ef) = {
874+ let dN = cQ()
875+ if ((dN == dN))
876+ then if ((size(dH.payments) != 1))
878877 then throw("exactly 1 payment must be attached")
879878 else {
880- let dX = dI.payments[0]
881- let dY = dX.amount
882- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
883- if ((dZ != b))
879+ let dW = dH.payments[0]
880+ let dX = dW.amount
881+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
882+ if ((dY != b))
884883 then throw("USDT payments only!")
885- else if ((dY != g))
884+ else if ((dX != g))
886885 then throw("exactly 1 USDT must be attached as payment")
887- else if ((0 >= eg))
886+ else if ((0 >= ef))
888887 then throw("Quantity should be positive")
889888 else {
890- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
891- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
892- if ((dP[bq] != "M"))
893- then throw(("Duck location type should be Manufactory, but is " + dP[bq]))
889+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
890+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
891+ if ((dO[bq] != "M"))
892+ then throw(("Duck location type should be Manufactory, but is " + dO[bq]))
894893 else {
895- let eh = dP[bp]
896- let dQ = cO(bf(bg))
897- let ea = split(dQ[ak], "_")
898- if (if ((0 > ef))
894+ let eg = dO[bp]
895+ let dP = cO(bf(bg))
896+ let dZ = split(dP[ak], "_")
897+ if (if ((0 > ee))
899898 then true
900- else (ef >= size(G)))
901- then throw(("Unknown product idx=" + toString(ef)))
899+ else (ee >= size(G)))
900+ then throw(("Unknown product idx=" + toString(ee)))
902901 else {
903- let ca = split(G[ef], "_")
902+ let ca = split(G[ee], "_")
904903 if ((size(ca) != (n + 3)))
905- then throw(("Fatal: unknown recipe: " + G[ef]))
904+ then throw(("Fatal: unknown recipe: " + G[ee]))
906905 else {
907- let ei = parseIntValue(ca[U])
908- if ((F[ei] != eh))
909- then throw(((("This product is available in " + F[ei]) + ", but you are in ") + eh))
906+ let eh = parseIntValue(ca[U])
907+ if ((F[eh] != eg))
908+ then throw(((("This product is available in " + F[eh]) + ", but you are in ") + eg))
910909 else {
911- let ej = if ((dQ[al] == ""))
910+ let ei = if ((dP[al] == ""))
912911 then nil
913- else split(dQ[al], "_")
914- func ek (bI,el) = {
912+ else split(dP[al], "_")
913+ func ej (bI,ek) = {
915914 let bw = bI._2
916- let em = if ((size(ej) > bw))
917- then ej[bw]
915+ let el = if ((size(ei) > bw))
916+ then ei[bw]
918917 else "0"
919- let en = parseIntValue(em)
920- let cu = (eg * parseIntValue(ca[T]))
921- let eo = if ((bw == ef))
922- then toString((en + cu))
923- else em
924- $Tuple2((bI._1 :+ eo), (bw + 1))
918+ let em = parseIntValue(el)
919+ let cu = (ef * parseIntValue(ca[T]))
920+ let en = if ((bw == ee))
921+ then toString((em + cu))
922+ else el
923+ $Tuple2((bI._1 :+ en), (bw + 1))
925924 }
926925
927- let ep = ( let bL = G
926+ let eo = ( let bL = G
928927 let bM = size(bL)
929928 let bN = $Tuple2(nil, 0)
930929 func bO (bP,bQ) = if ((bQ >= bM))
931930 then bP
932- else ek(bP, bL[bQ])
931+ else ej(bP, bL[bQ])
933932
934933 func bR (bP,bQ) = if ((bQ >= bM))
935934 then bP
936935 else throw("List size exceeds 50")
937936
938937 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._1
939- func eq (bI,cd) = {
940- let er = ((parseIntValue(ca[cd]) * h) * eg)
941- let es = parseIntValue(ea[cd])
942- if ((er > es))
943- then throw(((((((("You have " + ea[cd]) + " of ") + D[cd]) + ", but recipe requires ") + toString(er)) + " for quantity ") + toString(eg)))
944- else if ((er > 0))
945- then (bI :+ toString((es - er)))
946- else (bI :+ ea[cd])
938+ func ep (bI,cd) = {
939+ let eq = ((parseIntValue(ca[cd]) * h) * ef)
940+ let er = parseIntValue(dZ[cd])
941+ if ((eq > er))
942+ then throw(((((((("You have " + dZ[cd]) + " of ") + D[cd]) + ", but recipe requires ") + toString(eq)) + " for quantity ") + toString(ef)))
943+ else if ((eq > 0))
944+ then (bI :+ toString((er - eq)))
945+ else (bI :+ dZ[cd])
947946 }
948947
949- let dT = {
948+ let dS = {
950949 let bL = [0, 1, 2, 3, 4, 5]
951950 let bM = size(bL)
952951 let bN = nil
953952 func bX (bP,bQ) = if ((bQ >= bM))
954953 then bP
955- else eq(bP, bL[bQ])
954+ else ep(bP, bL[bQ])
956955
957956 func bY (bP,bQ) = if ((bQ >= bM))
958957 then bP
959958 else throw("List size exceeds 6")
960959
961960 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
962961 }
963- let dU = makeString([dQ[ai], dQ[aj], makeString(dT, "_"), makeString(ep, "_")], ":")
964- let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil))
965- $Tuple2(nil, dV)
962+ let dT = makeString([dP[ai], dP[aj], makeString(dS, "_"), makeString(eo, "_")], ":")
963+ let dU = bs(invoke(aF, "updateBackpack", [bg, dT], nil))
964+ $Tuple2(nil, dU)
966965 }
967966 }
968967 }
969968 }
970969 }
971970 }
972971 else throw("Strict value is not equal to itself.")
973972 }
974973
975974
976975
977-@Callable(dI)
978-func setWarehouseOrder (et,aW) = {
979- let eu = dI.originCaller
980- let aK = toString(eu)
981- let dV = if ((eu != aE))
976+@Callable(dH)
977+func setWarehouseOrder (es,aW) = {
978+ let et = dH.originCaller
979+ let aK = toString(et)
980+ let dU = if ((et != aE))
982981 then cQ()
983982 else false
984983 let bW = value(assetInfo(fromBase58String(aW)))
985984 if (!(isDefined(getInteger(aF, aO(aW)))))
986985 then throw((("NFT " + bW.name) + " is not staked"))
987986 else {
988- let ev = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned"))
989- if (if ((eu != aE))
990- then (ev != aK)
987+ let eu = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned"))
988+ if (if ((et != aE))
989+ then (eu != aK)
991990 else false)
992991 then throw((k + " is not yours"))
993992 else {
994- let ew = split_4C(et, ":")
995- let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
996- let dg = split_4C(dJ, ":")
997- let ex = split(dg[ad], "_")
998- let ey = parseIntValue(ex[af])
999- let ez = parseIntValue(ex[ah])
993+ let ev = split_4C(es, ":")
994+ let dI = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
995+ let df = split_4C(dI, ":")
996+ let ew = split(df[ad], "_")
997+ let ex = parseIntValue(ew[ah])
1000998 let cr = bn(aW)
1001- let dh = cq(cr)
1002- let dK = df(dg, dh, ew)
1003- let eA = dK._4
1004- let eB = dK._5
1005- let eC = (eA + eB)
1006- let eD = ((ez - ey) - eC)
1007- if ((0 > eD))
1008- then throw((((((("Attempt to reserve " + toString(eA)) + " space for buy orders, and ") + toString(eB)) + " space for sell orders (and occupied=") + toString(ey)) + "), leads to negative free space"))
999+ let dg = cq(cr)
1000+ let dJ = de(df, dg, ev)
1001+ let ey = dJ._4
1002+ let ez = dJ._5
1003+ let eA = dJ._7
1004+ let eB = (ey + ez)
1005+ let eC = ((ex - eA) - eB)
1006+ if ((0 > eC))
1007+ then throw((((((("Attempt to reserve " + toString(ey)) + " space for buy orders, and ") + toString(ez)) + " space for sell orders (and occupied=") + toString(eA)) + "), leads to negative free space"))
10091008 else {
1010- let eE = makeString_2C([dg[Z], makeString(dK._1, "_"), makeString(dK._2, "_"), makeString(dK._3, "_"), toString(eC)], ":")
1011- let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil))
1012- let eG = dK._6
1013- let eH = if ((eG > 0))
1014- then if ((size(dI.payments) != 1))
1009+ let eD = makeString_2C([df[Z], makeString(dJ._1, "_"), makeString(dJ._2, "_"), makeString(dJ._3, "_"), toString(eB)], ":")
1010+ let eE = bs(invoke(aF, "saveWarehouse", [eD, aW], nil))
1011+ let eF = dJ._6
1012+ let eG = if ((eF > 0))
1013+ then if ((size(dH.payments) != 1))
10151014 then throw("exactly 1 payment must be attached")
10161015 else {
1017- let dX = dI.payments[0]
1018- let dY = dX.amount
1019- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
1020- if ((dZ != b))
1016+ let dW = dH.payments[0]
1017+ let dX = dW.amount
1018+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
1019+ if ((dY != b))
10211020 then throw("USDT payments only!")
1022- else if ((dY != eG))
1023- then throw(("Payment needed is " + toString(eG)))
1024- else [StringEntry(cr, et)]
1021+ else if ((dX != eF))
1022+ then throw(("Payment needed is " + toString(eF)))
1023+ else [StringEntry(cr, es)]
10251024 }
1026- else if ((eG == 0))
1027- then if ((size(dI.payments) != 0))
1025+ else if ((eF == 0))
1026+ then if ((size(dH.payments) != 0))
10281027 then throw("No payments needed")
1029- else [StringEntry(cr, et)]
1030- else if ((size(dI.payments) != 0))
1028+ else [StringEntry(cr, es)]
1029+ else if ((size(dH.payments) != 0))
10311030 then throw("No payments needed")
1032- else [ScriptTransfer(addressFromStringValue(ev), -(eG), b), StringEntry(cr, et)]
1033- $Tuple2(eH, $Tuple2(dV, eF))
1031+ else [ScriptTransfer(addressFromStringValue(eu), -(eF), b), StringEntry(cr, es)]
1032+ $Tuple2(eG, $Tuple2(dU, eE))
10341033 }
10351034 }
10361035 }
10371036 }
10381037
10391038
10401039
1041-@Callable(dI)
1042-func acceptWarehouseOrder (eI,aW,bg) = {
1043- let dO = cQ()
1044- let eJ = dI.originCaller
1045- let eK = toString(eJ)
1046- let eL = valueOrErrorMessage(getString(aF, be(eK)), "You don't have a duck staked")
1047- let dP = valueOrElse(getString(aF, bh(eL)), w)
1048- let eM = split(value(dP), "_")
1049- if ((eM[bq] != "L"))
1050- then throw((("Duck location type is " + eM[bq]) + ", but should be L"))
1051- else if ((eL != bg))
1052- then throw(((("Your staked duck is " + eL) + ", but passed ") + bg))
1040+@Callable(dH)
1041+func acceptWarehouseOrder (eH,aW,bg) = {
1042+ let dN = cQ()
1043+ let eI = dH.originCaller
1044+ let eJ = toString(eI)
1045+ let eK = valueOrErrorMessage(getString(aF, be(eJ)), "You don't have a duck staked")
1046+ let dO = valueOrElse(getString(aF, bh(eK)), w)
1047+ let eL = split(value(dO), "_")
1048+ if ((eL[bq] != "L"))
1049+ then throw((("Duck location type is " + eL[bq]) + ", but should be L"))
1050+ else if ((eK != bg))
1051+ then throw(((("Your staked duck is " + eK) + ", but passed ") + bg))
10531052 else {
1054- let eN = value(assetInfo(fromBase58String(aW)))
1053+ let eM = value(assetInfo(fromBase58String(aW)))
10551054 if (!(isDefined(getInteger(aF, aO(aW)))))
1056- then throw((("NFT " + eN.name) + " is not staked"))
1055+ then throw((("NFT " + eM.name) + " is not staked"))
10571056 else {
1058- let eO = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eN.name) + " is orphaned"))
1059- if ((eO == eK))
1057+ let eN = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eM.name) + " is orphaned"))
1058+ if ((eN == eJ))
10601059 then throw("You cannot trade with yourself")
10611060 else {
1062- let eP = split_4C(eI, ":")
1063- if ((size(eP) != 3))
1061+ let eO = split_4C(eH, ":")
1062+ if ((size(eO) != 3))
10641063 then throw("bpOrderStr should contain exactly 2 ':' separators")
10651064 else {
1066- let eQ = split(eP[0], "_")
1067- let eR = split(eP[1], "_")
1068- let eS = if ((eP[2] == ""))
1065+ let eP = split(eO[0], "_")
1066+ let eQ = split(eO[1], "_")
1067+ let eR = if ((eO[2] == ""))
10691068 then nil
1070- else split(eP[2], "_")
1071- if ((size(eQ) != n))
1069+ else split(eO[2], "_")
1070+ if ((size(eP) != n))
10721071 then throw("All 6 resources should be passed")
1073- else if ((size(eR) != n))
1072+ else if ((size(eQ) != n))
10741073 then throw("All 6 materials should be passed")
10751074 else {
1076- let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
1077- let dg = split_4C(dJ, ":")
1078- let dj = split(dg[aa], "_")
1079- let dk = split(dg[ab], "_")
1080- let dl = if ((dg[ac] == ""))
1075+ let dI = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil))
1076+ let df = split_4C(dI, ":")
1077+ let di = split(df[aa], "_")
1078+ let dj = split(df[ab], "_")
1079+ let dk = if ((df[ac] == ""))
10811080 then nil
1082- else split(dg[ac], "_")
1083- let eT = parseIntValue(split(dg[ad], "_")[ae])
1081+ else split(df[ac], "_")
1082+ let eS = parseIntValue(split(df[ad], "_")[ae])
10841083 let cP = bf(bg)
1085- let dQ = cO(cP)
1086- let eU = split(dQ[aj], "_")
1087- let eV = split(dQ[ak], "_")
1088- let eW = if ((dQ[al] == ""))
1084+ let dP = cO(cP)
1085+ let eT = split(dP[aj], "_")
1086+ let eU = split(dP[ak], "_")
1087+ let eV = if ((dP[al] == ""))
10891088 then nil
1090- else split(dQ[al], "_")
1089+ else split(dP[al], "_")
10911090 let cr = bn(aW)
1092- let eX = cq(cr)
1093- let eY = split(eX[cn], "_")
1094- let eZ = split(eX[co], "_")
1095- let fa = if ((eX[cp] == ""))
1091+ let eW = cq(cr)
1092+ let eX = split(eW[cn], "_")
1093+ let eY = split(eW[co], "_")
1094+ let eZ = if ((eW[cp] == ""))
10961095 then nil
1097- else split(eX[cp], "_")
1098- let ds = {
1099- let bL = eQ
1096+ else split(eW[cp], "_")
1097+ let dr = {
1098+ let bL = eP
11001099 let bM = size(bL)
1101- let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eU, dj, eY, C, false)
1100+ let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eT, di, eX, C, false)
11021101 func bO (bP,bQ) = if ((bQ >= bM))
11031102 then bP
1104- else dv(bP, bL[bQ])
1103+ else du(bP, bL[bQ])
11051104
11061105 func bR (bP,bQ) = if ((bQ >= bM))
11071106 then bP
11081107 else throw("List size exceeds 6")
11091108
11101109 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
11111110 }
11121111 let cL = {
1113- let bL = eR
1112+ let bL = eQ
11141113 let bM = size(bL)
1115- let bN = $Tuple12(nil, nil, nil, ds._4, ds._5, ds._6, 0, eV, dk, eZ, D, false)
1114+ let bN = $Tuple12(nil, nil, nil, dr._4, dr._5, dr._6, 0, eU, dj, eY, D, false)
11161115 func bX (bP,bQ) = if ((bQ >= bM))
11171116 then bP
1118- else dv(bP, bL[bQ])
1117+ else du(bP, bL[bQ])
11191118
11201119 func bY (bP,bQ) = if ((bQ >= bM))
11211120 then bP
11221121 else throw("List size exceeds 6")
11231122
11241123 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
11251124 }
1126- let cs = if ((size(eS) != 0))
1125+ let cs = if ((size(eR) != 0))
11271126 then {
1128- let bL = eS
1127+ let bL = eR
11291128 let bM = size(bL)
1130- let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true)
1129+ let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eV, dk, eZ, E, true)
1130+ func ds (bP,bQ) = if ((bQ >= bM))
1131+ then bP
1132+ else du(bP, bL[bQ])
1133+
11311134 func dt (bP,bQ) = if ((bQ >= bM))
1132- then bP
1133- else dv(bP, bL[bQ])
1134-
1135- func du (bP,bQ) = if ((bQ >= bM))
11361135 then bP
11371136 else throw("List size exceeds 50")
11381137
1139- du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1138+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
11401139 }
1141- else $Tuple12(dl, fa, eW, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true)
1142- let fb = cs._4
1143- let fc = if ((0 > (eT - fb)))
1140+ else $Tuple12(dk, eZ, eV, cL._4, cL._5, cL._6, 0, eV, dk, eZ, E, true)
1141+ let fa = cs._4
1142+ let fb = if ((0 > (eS - fa)))
11441143 then 0
1145- else (eT - fb)
1146- let eE = makeString_2C([dg[Z], makeString(ds._1, "_"), makeString(cL._1, "_"), makeString(cs._1, "_"), toString(fc)], ":")
1147- let fd = makeString_2C([makeString(ds._2, "_"), makeString(cL._2, "_"), makeString(cs._2, "_")], ":")
1148- let fe = makeString_2C([dQ[ai], makeString(ds._3, "_"), makeString(cL._3, "_"), makeString(cs._3, "_")], ":")
1149- let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil))
1150- let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil))
1151- let eH = [StringEntry(cr, fd)]
1152- let fg = cs._5
1153- let fh = if ((fg > 0))
1144+ else (eS - fa)
1145+ let eD = makeString_2C([df[Z], makeString(dr._1, "_"), makeString(cL._1, "_"), makeString(cs._1, "_"), toString(fb)], ":")
1146+ let fc = makeString_2C([makeString(dr._2, "_"), makeString(cL._2, "_"), makeString(cs._2, "_")], ":")
1147+ let fd = makeString_2C([dP[ai], makeString(dr._3, "_"), makeString(cL._3, "_"), makeString(cs._3, "_")], ":")
1148+ let eE = bs(invoke(aF, "saveWarehouse", [eD, aW], nil))
1149+ let fe = bs(invoke(aF, "updateBackpack", [bg, fd], nil))
1150+ let eG = [StringEntry(cr, fc)]
1151+ let ff = cs._5
1152+ let fg = if ((ff > 0))
11541153 then {
1155- let fi = fraction(cs._5, ci, g)
1156- let fj = bb(eK)
1157- let fk = getString(aF, fj)
1158- if (isDefined(fk))
1159- then (((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fi, b))
1160- else ((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b))
1154+ let fh = fraction(cs._5, ci, g)
1155+ let fi = bb(eJ)
1156+ let fj = getString(aF, fi)
1157+ if (isDefined(fj))
1158+ then (((eG :+ ScriptTransfer(eI, (cs._5 - (3 * fh)), b)) :+ ScriptTransfer(aE, fh, b)) :+ ScriptTransfer(addressFromStringValue(value(fj)), fh, b))
1159+ else ((eG :+ ScriptTransfer(eI, (cs._5 - (3 * fh)), b)) :+ ScriptTransfer(aE, fh, b))
11611160 }
1162- else eH
1163- let fl = cs._6
1164- let fm = if ((fl > 0))
1165- then if ((size(dI.payments) != 1))
1161+ else eG
1162+ let fk = cs._6
1163+ let fl = if ((fk > 0))
1164+ then if ((size(dH.payments) != 1))
11661165 then throw("exactly 1 payment must be attached")
11671166 else {
1168- let dX = dI.payments[0]
1169- let dY = dX.amount
1170- let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment")
1171- if ((dZ != b))
1167+ let dW = dH.payments[0]
1168+ let dX = dW.amount
1169+ let dY = valueOrErrorMessage(dW.assetId, "WAVES can't be used as payment")
1170+ if ((dY != b))
11721171 then throw("USDT payments only!")
1173- else if ((dY != fl))
1174- then throw(("Payment needed is " + toString(fl)))
1175- else if ((cj > dY))
1172+ else if ((dX != fk))
1173+ then throw(("Payment needed is " + toString(fk)))
1174+ else if ((cj > dX))
11761175 then throw(("Payment should be at least " + toString(cj)))
11771176 else {
1178- let fn = fraction(cs._6, ci, g)
1179- let fj = bb(eO)
1180- let fk = getString(aF, fj)
1181- if (isDefined(fk))
1182- then (((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fn, b))
1183- else ((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b))
1177+ let fm = fraction(cs._6, ci, g)
1178+ let fi = bb(eN)
1179+ let fj = getString(aF, fi)
1180+ if (isDefined(fj))
1181+ then (((fg :+ ScriptTransfer(addressFromStringValue(eN), (cs._6 - (3 * fm)), b)) :+ ScriptTransfer(aE, fm, b)) :+ ScriptTransfer(addressFromStringValue(value(fj)), fm, b))
1182+ else ((fg :+ ScriptTransfer(addressFromStringValue(eN), (cs._6 - (3 * fm)), b)) :+ ScriptTransfer(aE, fm, b))
11841183 }
11851184 }
1186- else if ((size(dI.payments) != 0))
1185+ else if ((size(dH.payments) != 0))
11871186 then throw("No payments needed")
1188- else fh
1189- $Tuple2(fm, $Tuple3(dO, eF, ff))
1187+ else fg
1188+ $Tuple2(fl, $Tuple3(dN, eE, fe))
11901189 }
11911190 }
11921191 }
11931192 }
11941193 }
11951194 }
11961195
11971196
11981197
1199-@Callable(dI)
1200-func sellProductsToES (dM) = {
1201- let dO = cQ()
1202- if ((dO == dO))
1203- then if ((size(dI.payments) != 0))
1198+@Callable(dH)
1199+func sellProductsToES (dL) = {
1200+ let dN = cQ()
1201+ if ((dN == dN))
1202+ then if ((size(dH.payments) != 0))
12041203 then throw("No payments needed")
12051204 else {
1206- let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
1207- let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_")
1208- if ((dP[bq] != "A"))
1209- then throw(("Duck location type should be Airport, but is " + dP[bq]))
1205+ let bg = valueOrErrorMessage(getString(aF, be(toString(dH.caller))), "You don't have a duck staked")
1206+ let dO = split(valueOrElse(getString(aF, bh(bg)), w), "_")
1207+ if ((dO[bq] != "A"))
1208+ then throw(("Duck location type should be Airport, but is " + dO[bq]))
12101209 else {
1211- let dQ = cO(bf(bg))
1212- let ej = if ((dQ[al] == ""))
1210+ let dP = cO(bf(bg))
1211+ let ei = if ((dP[al] == ""))
12131212 then nil
1214- else split(dQ[al], "_")
1215- let fo = bo()
1216- let fp = getString(fo)
1217- let fq = if (isDefined(fp))
1218- then split(value(fp), "_")
1213+ else split(dP[al], "_")
1214+ let fn = bo()
1215+ let fo = getString(fn)
1216+ let fp = if (isDefined(fo))
1217+ then split(value(fo), "_")
12191218 else nil
1220- func fr (bI,fs) = {
1219+ func fq (bI,fr) = {
12211220 let cd = bI._1
1222- let eg = if ((size(dM) > cd))
1223- then dM[cd]
1221+ let ef = if ((size(dL) > cd))
1222+ then dL[cd]
12241223 else 0
1225- if ((0 > eg))
1224+ if ((0 > ef))
12261225 then throw("Quantity cannot be negative")
12271226 else {
1228- let ca = split(fs, "_")
1227+ let ca = split(fr, "_")
12291228 if ((size(ca) != (n + 3)))
1230- then throw(("Fatal: unknown recipe: " + fs))
1229+ then throw(("Fatal: unknown recipe: " + fr))
12311230 else {
1232- let ft = parseIntValue(ca[T])
1233- let fu = (y * ft)
1234- let fv = if ((size(fq) > cd))
1235- then parseIntValue(fq[cd])
1231+ let fs = parseIntValue(ca[T])
1232+ let ft = (y * fs)
1233+ let fu = if ((size(fp) > cd))
1234+ then parseIntValue(fp[cd])
12361235 else 0
1237- let fw = (fu - fv)
1238- if ((eg > fw))
1239- then throw(((("Warehouse can buy only " + toString(fw)) + " of ") + E[cd]))
1236+ let fv = (ft - fu)
1237+ if ((ef > fv))
1238+ then throw(((("Warehouse can buy only " + toString(fv)) + " of ") + E[cd]))
12401239 else {
1241- let fx = bZ(ca)
1242- let fy = fraction((fx * z), x, (10 * ft))
1243- let fz = if ((size(ej) > cd))
1244- then parseIntValue(ej[cd])
1240+ let fw = bZ(ca)
1241+ let fx = fraction((fw * z), x, (10 * fs))
1242+ let fy = if ((size(ei) > cd))
1243+ then parseIntValue(ei[cd])
12451244 else 0
1246- if ((eg > fz))
1247- then throw(((("You have only " + toString(fz)) + " of ") + E[cd]))
1248- else $Tuple4((cd + 1), (bI._2 + (fy * eg)), (bI._3 :+ toString((fz - eg))), (bI._4 :+ toString((fv + eg))))
1245+ if ((ef > fy))
1246+ then throw(((("You have only " + toString(fy)) + " of ") + E[cd]))
1247+ else $Tuple4((cd + 1), (bI._2 + (fx * ef)), (bI._3 :+ toString((fy - ef))), (bI._4 :+ toString((fu + ef))))
12491248 }
12501249 }
12511250 }
12521251 }
12531252
1254- let dT = {
1253+ let dS = {
12551254 let bL = G
12561255 let bM = size(bL)
12571256 let bN = $Tuple4(0, 0, nil, nil)
12581257 func bO (bP,bQ) = if ((bQ >= bM))
12591258 then bP
1260- else fr(bP, bL[bQ])
1259+ else fq(bP, bL[bQ])
12611260
12621261 func bR (bP,bQ) = if ((bQ >= bM))
12631262 then bP
12641263 else throw("List size exceeds 50")
12651264
12661265 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
12671266 }
1268- let fe = makeString_2C([dQ[ai], dQ[aj], dQ[ak], makeString(dT._3, "_")], ":")
1269- let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil))
1270- $Tuple2([StringEntry(fo, makeString(dT._4, "_")), ScriptTransfer(dI.caller, dT._2, b)], ff)
1267+ let fd = makeString_2C([dP[ai], dP[aj], dP[ak], makeString(dS._3, "_")], ":")
1268+ let fe = bs(invoke(aF, "updateBackpack", [bg, fd], nil))
1269+ $Tuple2([StringEntry(fn, makeString(dS._4, "_")), ScriptTransfer(dH.caller, dS._2, b)], fe)
12711270 }
12721271 }
12731272 else throw("Strict value is not equal to itself.")
12741273 }
12751274
12761275
12771276
1278-@Callable(dI)
1279-func updateEsStorage (fA) = if ((dI.caller != aF))
1277+@Callable(dH)
1278+func updateEsStorage (fz) = if ((dH.caller != aF))
12801279 then throw("Permission denied")
1281- else $Tuple2([StringEntry(bo(), fA)], fA)
1280+ else $Tuple2([StringEntry(bo(), fz)], fz)
12821281
12831282

github/deemru/w8io/169f3d6 
527.44 ms