tx · CPrDm4obDHeYaAhoYQV7sKzGXtLmw8BGVVwLz4Dpga33

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03900000 Waves

2023.06.21 17:47 [2632547] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "CPrDm4obDHeYaAhoYQV7sKzGXtLmw8BGVVwLz4Dpga33", "fee": 3900000, "feeAssetId": null, "timestamp": 1687358914620, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "5tWRukYrfdrP1BJ7uHUJ9SVk1Mkq8RKSLT44dLtmz3pBTK4kRkFN64aKq5wjgz3e8pUKQH9RT4xPktWenR1wEdW2" ], "script": "base64:BgI7CAISBAoCCBgSAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICBIDCgEREgMKAQiHAQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ3AICt4gQABU1VTFQ4AIDC1y8ABk1VTFQxMACAyK+gJQAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIADUVTTUFYUEFDS0FHRVMAAwAJRVNCVVlDT0VGAAQACkVTU0VMTENPRUYACgAFTUFYSFAAZAAIcmVzVHlwZXMJAMwIAgIDT2lsCQDMCAICA09yZQkAzAgCAgRXb29kCQDMCAICBFNhbmQJAMwIAgIEQ2xheQkAzAgCAgdPcmdhbmljBQNuaWwACG1hdFR5cGVzCQDMCAICBEZ1ZWwJAMwIAgIFTWV0YWwJAMwIAgIFUGxhbmsJAMwIAgIFR2xhc3MJAMwIAgIHUGxhc3RpYwkAzAgCAgdQcm90ZWluBQNuaWwACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgISMV8xXzFfMl8yXzVfMV8xMF8wCQDMCAICEzJfMl8yXzRfNF8xMF8xXzEwXzAJAMwIAgITM18zXzNfNl82XzE1XzFfMTBfMAkAzAgCAhMyXzVfNV8yXzdfNV8yXzEwMF8xCQDMCAICFzRfMTBfMTBfNF8xNF8xMF8yXzEwMF8xCQDMCAICFzZfMTVfMTVfNl8yMV8xNV8yXzEwMF8xCQDMCAICEjFfMV8xXzFfMV84XzFfMTBfMgkAzAgCAhMyXzJfMl8yXzJfMTZfMV8xMF8yCQDMCAICEzNfM18zXzNfM18yNF8xXzEwXzIJAMwIAgITOV85XzFfNV81XzFfNV8xMDBfMwkAzAgCAhcxOF8xOF8yXzEwXzEwXzJfNV8xMDBfMwkAzAgCAhcyN18yN18zXzE1XzE1XzNfNV8xMDBfMwkAzAgCAhIyXzJfMV8yXzJfMl8xXzEwXzQJAMwIAgISNF80XzJfNF80XzRfMV8xMF80CQDMCAICEjZfNl8zXzZfNl82XzFfMTBfNAUDbmlsAA9jb250SWR4QW1lcmljYXMAAAANY29udElkeEV1cm9wZQABAAtjb250SWR4QXNpYQACAA1jb250SWR4QWZyaWNhAAMADmNvbnRJZHhPY2VhbmlhAAQADXJlY2lwZUlkeEZ1ZWwAAAAOcmVjaXBlSWR4TWV0YWwAAQAOcmVjaXBlSWR4UGxhbmsAAgAOcmVjaXBlSWR4R2xhc3MAAwAQcmVjaXBlSWR4UGxhc3RpYwAEABByZWNpcGVJZHhQcm90ZWluAAUAD3JlY2lwZUlkeFdlaWdodAAGABFyZWNpcGVJZHhQYWNrc2l6ZQAHABJyZWNpcGVJZHhDb250aW5lbnQACAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAQpnZXRQa2dTaXplAQdwcm9kSWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFB3Byb2RJZHgCAV8FEXJlY2lwZUlkeFBhY2tzaXplAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0FueUxpc3QBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAFsBQckbWF0Y2gwBQFsCQACAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUAC0lkeEVmZlRvdGFsAAAACklkeEVmZlVzZXIAAQEOZ2V0Vm90aW5nUG93ZXIBEnVzZXJBZGRyU3RyT3JFbXB0eQQFcHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCgEFYWRkZXICA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0ECnRvdGFsUG93ZXIKAAIkbAUFcHJvcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp1c2Vyc1Bvd2VyAwkAAAIFEnVzZXJBZGRyU3RyT3JFbXB0eQIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJ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QUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlAApNSU5QQVlNRU5UAJBOAA5TRUxMTVVMVElQTElFUgDIAQANQlVZTVVMVElQTElFUgCsAgAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIZ2V0T3JkZXIBBm9yZEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBm9yZEtleQIwMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6MEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6AgE6CQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4UmVzAhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeE1hdAIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgkAkQMCBQFwBQpvcmRJZHhQcm9kBQNuaWwBCHRvVm9sdW1lAwZhbW91bnQHcGtnU2l6ZQlpc1Byb2R1Y3QDBQlpc1Byb2R1Y3QEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAUGYW1vdW50AQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkdFJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZHRSZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2R0UmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2R0UmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQJ3MAkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEJc2V0Q29tbW9uAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQGaXNQcm9kCAUDYWNjAl84BAdwa2dTaXplAwUGaXNQcm9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FEXJlY2lwZUlkeFBhY2tzaXplAAAECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FB3BrZ1NpemUFBmlzUHJvZAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfNgUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzYFAWoAAAQLY3VyT3JkUGFydHMJALUJAgMJAGYCCQCQAwEIBQNhY2MCXzcFAWoJAJEDAggFA2FjYwJfNwUBagIDMEAwAgFABAhjdXJPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAAECGN1ck9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAQMDCQBmAgAABQhjdXJPcmRQcgYJAGYCAAAFCG5ld09yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECWN1ck9yZFVzZAkAawMFCGN1ck9yZEFtBQhjdXJPcmRQcgUFTVVMVDgECWN1ck9yZFZvbAkBCHRvVm9sdW1lAwUIY3VyT3JkQW0FB3BrZ1NpemUFBmlzUHJvZAMJAAACBQhuZXdPcmRBbQAAAwkAZgIFCGN1ck9yZEFtAAAJAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAgFA2FjYwJfMwgFA2FjYwJfNAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBlAgkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QDCQBmAgAABQhjdXJPcmRBbQQGYW1EaWZmCQBlAgUIY3VyT3JkQW0FCG5ld09yZEFtAwkAZgIAAAkAZQIFBndoSW5pdAUGYW1EaWZmCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEFBmFtRGlmZgIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQZhbURpZmYIBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAMJAGYCAAAJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFBndoSW5pdAUIbmV3T3JkQW0IBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAELc2V0SW50ZXJuYWwDCWN1cnJlbnRXaApjdXJyZW50T3JkBm5ld09yZAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA1jdXJyZW50T3JkUmVzCQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4UmVzAgFfBA1jdXJyZW50T3JkTWF0CQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4TWF0AgFfBA5jdXJyZW50T3JkUHJvZAMJAAACCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIBXwMJAQIhPQIJAJADAQUGbmV3T3JkAAMJAAIBAjNuZXdPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFBm5ld09yZAACAgAFA25pbAkAtQkCCQCRAwIFBm5ld09yZAACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3Vy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IT0CCQCQAwEFCmJwT3JkUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UEB2JwT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAEDCQBmAgAABQdicE9yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECGJwT3JkVXNkCQBrAwUHYnBPcmRBbQUHYnBPcmRQcgUFTVVMVDgEBmJwSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzgFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqAAAEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzkFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqAAAECXdoT3JkSW5pdAMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAECndoT3JkUGFydHMJALUJAgUJd2hPcmRJbml0AgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kAwkAAAIFB2JwT3JkQW0AAAkAngoMCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIFCXdoT3JkSW5pdAkAzQgCCAUDYWNjAl8zCQCkAwEFBmJwSW5pdAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QDCQBmAgUHYnBPcmRBbQAAAwkAZgIAAAUHd2hPcmRBbQMJAGYCBQdicE9yZEFtCQEBLQEFB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCkAwEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGywgYnV0IHdhcmVob3VzZSBvbmx5IHNlbGxzIAkApAMBCQEBLQEFB3doT3JkQW0JAJ4KDAkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sCAUDYWNjAl81CQBkAggFA2FjYwJfNgUIYnBPcmRVc2QJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCeCgwJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAAIBCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkAkQMCCAUDYWNjA18xMQUBagIfIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IGJ1eSBpdAoBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCCQDNCAIIBQZtZXJnZWQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIIBQZtZXJnZWQCXzEFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQlleGNoYW5nZXICA2FjYwFqBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQFqBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQDNCAIIBQNhY2MCXzQJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQUCdzAJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80BAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAggFBm1lcmdlZAJfMwBkCQCUCgIJAM0IAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEnJlY2lwZUlkeENvbnRpbmVudAMJAQIhPQIJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgFBGNvbnQJAAIBCQCsAgIJAKwCAgkArAICAh1UaGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIAkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAIRLCBidXQgeW91IGFyZSBpbiAFBGNvbnQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEGZmlsbGVyAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAnhzAwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAJEDAgUIcHJvZExpc3QFAW4CATAEAXgJAQ1wYXJzZUludFZhbHVlAQUC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bmV3UGFjawUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAp3aE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQEB3doVG90YWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQh2b2xUb3RhbAQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQKY3VycmVudE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAF6CQELc2V0SW50ZXJuYWwDBQljdXJyZW50V2gFCmN1cnJlbnRPcmQFCG5ld09yZGVyBAtidXlWb2xTYWxkbwgFAXoCXzQEDHNlbGxWb2xTYWxkbwgFAXoCXzUECHdoTG9ja2VkCQBkAgULYnV5Vm9sU2FsZG8FDHNlbGxWb2xTYWxkbwQGd2hGcmVlCQBlAgkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQFCHdoTG9ja2VkAwkAZgIAAAUGd2hGcmVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITQXR0ZW1wdCB0byByZXNlcnZlIAkApAMBBQtidXlWb2xTYWxkbwIbIHNwYWNlIGZvciBidXkgb3JkZXJzLCBhbmQgCQCkAwEFDHNlbGxWb2xTYWxkbwIlIHNwYWNlIGZvciBzZWxsIG9yZGVycyAoYW5kIG9jY3VwaWVkPQkApAMBBQp3aE9jY3VwaWVkAh8pLCBsZWFkcyB0byBuZWdhdGl2ZSBmcmVlIHNwYWNlBAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIIBQF6Al8xAgFfCQDMCAIJALkJAggFAXoCXzICAV8JAMwIAgkAuQkCCAUBegJfMwIBXwkAzAgCCQCkAwEFCHdoTG9ja2VkBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAh1c2RTYWxkbwgFAXoCXzYEB2FjdGlvbnMDCQBmAgUIdXNkU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQh1c2RTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFCHVzZFNhbGRvCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3T3JkZXJTdHIFA25pbAMJAAACBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3T3JkZXJTdHIFA25pbAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQVvd25lcgkBAS0BBQh1c2RTYWxkbwULdXNkdEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsCQCUCgIFB2FjdGlvbnMJAJQKAgUGcmVzdWx0BQZ3aFNhdmUBaQEUYWNjZXB0V2FyZWhvdXNlT3JkZXIDCmJwT3JkZXJTdHILbGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEEXN0YWtlZER1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBRFzdGFrZWREdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CBRFzdGFrZWREdWNrQXNzZXRJZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhRZb3VyIHN0YWtlZCBkdWNrIGlzIAURc3Rha2VkRHVja0Fzc2V0SWQCDSwgYnV0IHBhc3NlZCAFC2R1Y2tBc3NldElkBAlsYW5kQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQECWxhbmRPd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUJbGFuZE93bmVyBQpjYWxsZXJBZGRyCQACAQIeWW91IGNhbm5vdCB0cmFkZSB3aXRoIHlvdXJzZWxmBAxicE9yZGVyUGFydHMJALwJAgUKYnBPcmRlclN0cgIBOgMJAQIhPQIJAJADAQUMYnBPcmRlclBhcnRzAAMJAAIBAjJicE9yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIYnBPcmRSZXMJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAAIBXwQIYnBPcmRNYXQJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAQIBXwQJYnBPcmRQcm9kAwkAAAIJAJEDAgUMYnBPcmRlclBhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAICAV8DCQECIT0CCQCQAwEFCGJwT3JkUmVzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIYnBPcmRNYXQFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8ED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQEBXdoT3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkECHdoT3JkUmVzCQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeFJlcwIBXwQId2hPcmRNYXQJALUJ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ZFZvbAUIdm9sU2FsZG8EBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXICXzECAV8JAMwIAgkAuQkCCAUBbQJfMQIBXwkAzAgCCQC5CQIIBQFwAl8xAgFfCQDMCAIJAKQDAQUMbmV3TG9ja2VkVm9sBQNuaWwCAToEC25ld1doT3JkU3RyCQC6CQIJAMwIAgkAuQkCCAUBcgJfMgIBXwkAzAgCCQC5CQIIBQFtAl8yAgFfCQDMCAIJALkJAggFAXACXzICAV8FA25pbAIBOgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAggFAXICXzMCAV8JAMwIAgkAuQkCCAUBbQJfMwIBXwkAzAgCCQC5CQIIBQFwAl8zAgFfBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwEB2FjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cgUDbmlsBA11c2RXaDJCcFNhbGRvCAUBcAJfNQQIYWN0aW9uczEDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMIBQFwAl81BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCAUBcAJfNQkAaAIAAwULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIIBQFwAl81CQBoAgADBQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQdhY3Rpb25zBA11c2RCcDJXaFNhbGRvCAUBcAJfNgQIYWN0aW9uczIDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICElBheW1lbnQgbmVlZGVkIGlzIAkApAMBBQ11c2RCcDJXaFNhbGRvAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQNhbXQJAAIBCQCsAgICG1BheW1lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IAkApAMBBQ5NSU5TSE9QUEFZTUVOVAQLdXNkQnAyV2hGZWUJAGsDCAUBcAJfNgUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbGFuZE93bmVyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQFCGFjdGlvbnMxCQCUCgIFCGFjdGlvbnMyCQCVCgMFB2Jsb2NrZWQFBndoU2F2ZQUGYnBTYXZlAWkBEHNlbGxQcm9kdWN0c1RvRVMBB2Ftb3VudHMEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBQQkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBBaXJwb3J0LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBAVlc0tleQkBDmtleUVzV2FyZWhvdXNlAAQIZXhpc3RTdHIJAKIIAQUFZXNLZXkEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsCgEIbW92ZVByb2QCA2FjYwlyZWNpcGVTdHIEAWoIBQNhY2MCXzEECHF1YW50aXR5AwkAZgIJAJADAQUHYW1vdW50cwUBagkAkQMCBQdhbW91bnRzBQFqAAADCQBmAgAABQhxdWFudGl0eQkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQGcmVjaXBlCQC1CQIFCXJlY2lwZVN0cgIBXwMJAQIhPQIJAJADAQUGcmVjaXBlCQBkAgUGTlVNUkVTAAMJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogBQlyZWNpcGVTdHIECHBhY2tTaXplCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBRFyZWNpcGVJZHhQYWNrc2l6ZQQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUIcGFja1NpemUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIACgUIcGFja1NpemUEDGJwUHJvZEFtb3VudAMJAGYCCQCQAwEFCHByb2RMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAWoAAAMJAGYCBQhxdWFudGl0eQUMYnBQcm9kQW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUMYnBQcm9kQW1vdW50AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagkAlgoECQBkAgUBagABCQBkAggFA2FjYwJfMgkAaAIFCXVuaXRQcmljZQUIcXVhbnRpdHkJAM0IAggFA2FjYwJfMwkApAMBCQBlAgUMYnBQcm9kQW1vdW50BQhxdWFudGl0eQkAzQgCCAUDYWNjAl80CQCkAwEJAGQCBQtleGlzdEFtb3VudAUIcXVhbnRpdHkEBm1lcmdlZAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCG1vdmVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZtZXJnZWQCXzMCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXNLZXkJALkJAggFBm1lcmdlZAJfNAIBXwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIIBQZtZXJnZWQCXzIFC3VzZHRBc3NldElkBQNuaWwFBmJwU2F2ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ91cGRhdGVFc1N0b3JhZ2UBCm5ld1N0b3JhZ2UDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUVzV2FyZWhvdXNlAAUKbmV3U3RvcmFnZQUDbmlsBQpuZXdTdG9yYWdlAL+D+Bs=", "height": 2632547, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6HvfrK4zKzbeDbUs2YWW3UUbLkNvk119UBkwhsfdi6HM Next: BakS7xjhzDmNs3dopYyU59GWDFEnnYSRHkJTQmttissc Diff:
OldNewDifferences
2121 else throw("Unknown chain")
2222 }
2323
24-let e = "__"
24+let e = {
25+ let c = a
26+ if ((base58'2W' == c))
27+ then 10000000000
28+ else if ((base58'2T' == c))
29+ then 100000000
30+ else throw("Unknown chain")
31+ }
2532
26-let f = 1000000
33+let f = "__"
2734
28-let g = 10000000
35+let g = 1000000
2936
30-let h = 100000000
37+let h = 10000000
3138
32-let i = 10000000000
39+let i = 100000000
3340
34-let j = "LAND"
41+let j = 10000000000
3542
36-let k = 6
43+let k = "LAND"
3744
38-let l = "Africa_F_Africa"
45+let l = "DUCK"
3946
40-let m = 39637
47+let m = "PRESALE"
4148
42-let n = 3
49+let n = 6
4350
44-let o = 4
51+let o = 25
4552
46-let p = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
53+let p = 100
4754
48-let q = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
55+let q = 225
4956
50-let r = ["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"]
57+let r = 400
5158
52-let s = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
59+let s = 625
5360
54-let t = ["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"]
61+let t = 3456000
5562
56-let u = 7
63+let u = 86400000
5764
58-let v = 8
65+let v = 10000000000
5966
60-let w = 0
67+let w = "Africa_F_Africa"
6168
62-let x = 1
69+let x = 39637
6370
64-let y = 2
71+let y = 3
6572
66-let z = 3
73+let z = 4
6774
68-let A = 4
75+let A = 10
6976
70-let B = 0
77+let B = 100
7178
72-let C = 1
79+let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
7380
74-let D = 3
81+let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
7582
76-let E = 0
83+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"]
7784
78-let F = 1
85+let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
7986
80-let G = 2
87+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"]
8188
82-let H = 3
89+let H = 0
8390
84-func I (J,K) = valueOrErrorMessage(getString(J, K), makeString(["mandatory ", toString(J), ".", K, " is not defined"], ""))
91+let I = 1
92+
93+let J = 2
94+
95+let K = 3
96+
97+let L = 4
98+
99+let M = 0
100+
101+let N = 1
102+
103+let O = 2
104+
105+let P = 3
106+
107+let Q = 4
108+
109+let R = 5
110+
111+let S = 6
112+
113+let T = 7
114+
115+let U = 8
116+
117+let V = 0
118+
119+let W = 1
120+
121+let X = 2
122+
123+let Y = 3
124+
125+let Z = 0
126+
127+let aa = 1
128+
129+let ab = 2
130+
131+let ac = 3
132+
133+let ad = 4
134+
135+let ae = 0
136+
137+let af = 1
138+
139+let ag = 2
140+
141+let ah = 3
142+
143+let ai = 0
144+
145+let aj = 1
146+
147+let ak = 2
148+
149+let al = 3
150+
151+func am (an) = parseIntValue(split(G[an], "_")[T])
85152
86153
87-let L = 1
88-
89-func M () = "%s__restConfig"
154+func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
90155
91156
92-func N () = "%s__restAddr"
157+func ar (aq,as) = valueOrElse(getInteger(this, aq), as)
93158
94159
95-func O (P) = split_4C(I(P, M()), e)
160+let at = 1
161+
162+let au = 2
163+
164+let av = 3
165+
166+let aw = 4
167+
168+func ax () = "%s__restConfig"
96169
97170
98-func Q (R,S) = valueOrErrorMessage(addressFromString(R[S]), ("Rest cfg doesn't contain address at index " + toString(S)))
171+func ay () = "%s__restAddr"
99172
100173
101-let T = addressFromStringValue(valueOrElse(getString(this, N()), d))
102-
103-let R = O(T)
104-
105-let U = Q(R, L)
106-
107-func V (W) = ("nftOwner_" + W)
174+func az (aA) = split_4C(ao(aA, ax()), f)
108175
109176
110-func X (W) = ("stakedTime_" + W)
177+func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD)))
111178
112179
113-func Y (Z) = ("accRefBy_" + Z)
180+let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d))
181+
182+let aC = az(aE)
183+
184+let aF = aB(aC, at)
185+
186+let aG = aB(aC, au)
187+
188+let aH = aB(aC, av)
189+
190+let aI = aB(aC, aw)
191+
192+func aJ (aK) = ("lastTxIdByUser_" + aK)
114193
115194
116-func aa (ab) = ("stakedDuckByOwner_" + ab)
195+func aL (aM) = ("nftOwner_" + aM)
117196
118197
119-func ac (ad) = ("backPack_" + ad)
198+func aN (aM) = ("landCustomNameByAssetId_" + aM)
120199
121200
122-func ae (ad) = ("duckLocation_" + ad)
201+func aO (aM) = ("stakedTime_" + aM)
123202
124203
125-func af () = "contractsBlocked"
204+func aP (aM) = ("infraLevel_" + aM)
126205
127206
128-func ag (ah) = ("landOrder_" + ah)
207+func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_")
129208
130209
131-func ai () = "emergencyWarehouseProducts"
210+func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU)
132211
133212
134-let aj = 0
213+func aV (aW) = ("wareHouse_" + aW)
135214
136-let ak = 1
137215
138-let al = 2
216+func aX (aU) = ("stakedLandsByOwner_" + aU)
139217
140-func am (an) = {
141- let c = an
218+
219+func aY (aU) = ("stakedPiecesByOwner_" + aU)
220+
221+
222+func aZ (aM) = ("duckCustomNameByAssetId_" + aM)
223+
224+
225+func ba (aK) = ("accountCustomNameByAddr_" + aK)
226+
227+
228+func bb (aK) = ("accRefBy_" + aK)
229+
230+
231+func bc (aK) = ("accReferrals_" + aK)
232+
233+
234+func bd (aM) = ("duckOwner_" + aM)
235+
236+
237+func be (aU) = ("stakedDuckByOwner_" + aU)
238+
239+
240+func bf (bg) = ("backPack_" + bg)
241+
242+
243+func bh (bg) = ("duckLocation_" + bg)
244+
245+
246+func bi (bg) = ("duckHealth_" + bg)
247+
248+
249+func bj () = "resTypesProportions"
250+
251+
252+func bk () = "contractsBlocked"
253+
254+
255+func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm)
256+
257+
258+func bn (aW) = ("landOrder_" + aW)
259+
260+
261+func bo () = "emergencyWarehouseProducts"
262+
263+
264+let bp = 0
265+
266+let bq = 1
267+
268+let br = 2
269+
270+func bs (bt) = {
271+ let c = bt
142272 if ($isInstanceOf(c, "String"))
143273 then {
144- let ao = c
145- ao
274+ let bu = c
275+ bu
146276 }
147277 else throw("fail to cast into String")
148278 }
149279
150280
151-func ap (aq) = {
152- func ar (as,at) = (as + parseIntValue(aq[at]))
153-
154- let au = [0, 1, 2, 3, 4, 5]
155- let av = size(au)
156- let aw = 0
157- func ax (ay,az) = if ((az >= av))
158- then ay
159- else ar(ay, au[az])
160-
161- func aA (ay,az) = if ((az >= av))
162- then ay
163- else throw("List size exceeds 6")
164-
165- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
281+func bv (bt) = {
282+ let c = bt
283+ if ($isInstanceOf(c, "Int"))
284+ then {
285+ let bw = c
286+ bw
287+ }
288+ else throw("fail to cast into Int")
166289 }
167290
168291
169-let aB = 10000000000
170-
171-let aC = 200
172-
173-let aD = 300
174-
175-let aE = 10000
176-
177-let aF = 100000
178-
179-func aG (aH,aI) = ((("factoryWhByContinentAndRes_" + aH) + "_") + toString(aI))
180-
181-
182-let aJ = 0
183-
184-let aK = 1
185-
186-let aL = 2
187-
188-func aM (aN) = {
189- let aO = split(valueOrElse(getString(aN), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
190-[if ((size(split(aO[aJ], "_")) == k))
191- then aO[aJ]
192- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aO[aK], "_")) == k))
193- then aO[aK]
194- else "0@0_0@0_0@0_0@0_0@0_0@0", aO[aL]]
292+func bx (bt) = {
293+ let c = bt
294+ if ($isInstanceOf(c, "List[Any]"))
295+ then {
296+ let by = c
297+ by
298+ }
299+ else throw("fail to cast into List[Any]")
195300 }
196301
197302
198-func aP (aQ,aR,aS) = if (aS)
199- then {
200- let aT = if ((aQ >= 0))
201- then (((aQ + aR) - 1) / aR)
202- else -((((-(aQ) + aR) - 1) / aR))
203- (aT * h)
204- }
205- else aQ
206-
207-
208-func aU (aV,aI,aQ,aW) = {
209- let aX = aG(aV, aI)
210- let aY = valueOrElse(getInteger(aX), 0)
211- let aZ = if ((aY > aB))
212- then 0
213- else if (((aY + aQ) > aB))
214- then (aB - aY)
215- else aQ
216- let ba = (fraction(aZ, ((aC * m) - fraction(((100 * aY) + (50 * aZ)), m, aB)), i) + fraction((aQ - aZ), m, h))
217- let bb = (aW - (aW / 100))
218- if (((bb * aQ) > (ba * h)))
219- then throw((((((((((("Actual price = " + toString(ba)) + " / ") + toString(aQ)) + " < minPrice = ") + toString(aW)) + ", (") + aV) + ", ") + p[aI]) + ")"))
220- else $Tuple2(IntegerEntry(aX, (aY + aQ)), ba)
303+func bz (bt) = {
304+ let c = bt
305+ if ($isInstanceOf(c, "Boolean"))
306+ then {
307+ let bu = c
308+ bu
309+ }
310+ else throw("fail to cast into Boolean")
221311 }
222312
223313
224-func bc (aV,bd,aQ,be) = {
225- let aX = aG(aV, bd)
226- let aY = valueOrElse(getInteger(aX), 0)
227- let bf = if ((aY > aB))
228- then min([aQ, (aY - aB)])
229- else 0
230- let bg = min([aY, (aQ - bf)])
231- let bh = (bg + bf)
232- let bi = (fraction(bg, ((aD * m) - fraction(((100 * aY) - (50 * bg)), m, aB)), i) + fraction(bf, (2 * m), h))
233- let bj = (be + (be / 100))
234- if (((bi * h) > (bj * bh)))
235- then throw((((((((((("Actual price = " + toString(bi)) + " / ") + toString(bh)) + " > maxPrice = ") + toString(be)) + ", (") + aV) + ", ") + q[bd]) + ")"))
236- else $Tuple3(IntegerEntry(aX, (aY - bh)), bi, bh)
314+func bA (bB) = {
315+ let c = bB
316+ if (("S" == c))
317+ then o
318+ else if (("M" == c))
319+ then p
320+ else if (("L" == c))
321+ then q
322+ else if (("XL" == c))
323+ then r
324+ else if (("XXL" == c))
325+ then s
326+ else throw("Unknown land size")
237327 }
238328
239329
240-func bk (bl) = {
241- let aO = split(valueOrElse(getString(U, bl), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
242-[toString(valueOrElse(parseInt(aO[E]), 0)), if ((size(split(aO[F], "_")) == k))
243- then aO[F]
244- else "0_0_0_0_0_0", if ((size(split(aO[G], "_")) == k))
245- then aO[G]
246- else "0_0_0_0_0_0", aO[H]]
330+let bC = 0
331+
332+let bD = 1
333+
334+func bE (bF) = {
335+ let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_")
336+ func bH (bI,bJ) = (bI + parseIntValue(bJ))
337+
338+ let bK = {
339+ let bL = bG
340+ let bM = size(bL)
341+ let bN = 0
342+ func bO (bP,bQ) = if ((bQ >= bM))
343+ then bP
344+ else bH(bP, bL[bQ])
345+
346+ func bR (bP,bQ) = if ((bQ >= bM))
347+ then bP
348+ else throw("List size exceeds 6")
349+
350+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
351+ }
352+ let bS = if ((bF == ""))
353+ then 0
354+ else {
355+ let bT = getString(aF, aX(bF))
356+ let bU = if (isDefined(bT))
357+ then split_51C(value(bT), "_")
358+ else nil
359+ func bV (bI,aW) = {
360+ let bW = value(assetInfo(fromBase58String(aW)))
361+ let bB = split(bW.description, "_")[W]
362+ (bI + bA(bB))
363+ }
364+
365+ let bL = bU
366+ let bM = size(bL)
367+ let bN = 0
368+ func bX (bP,bQ) = if ((bQ >= bM))
369+ then bP
370+ else bV(bP, bL[bQ])
371+
372+ func bY (bP,bQ) = if ((bQ >= bM))
373+ then bP
374+ else throw("List size exceeds 100")
375+
376+ 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)
377+ }
378+[bK, bS]
247379 }
248380
249381
250-func bm () = if (valueOrElse(getBoolean(U, af()), false))
382+func bZ (ca) = {
383+ func cb (cc,cd) = (cc + parseIntValue(ca[cd]))
384+
385+ let bL = [0, 1, 2, 3, 4, 5]
386+ let bM = size(bL)
387+ let bN = 0
388+ func bO (bP,bQ) = if ((bQ >= bM))
389+ then bP
390+ else cb(bP, bL[bQ])
391+
392+ func bR (bP,bQ) = if ((bQ >= bM))
393+ then bP
394+ else throw("List size exceeds 6")
395+
396+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397+ }
398+
399+
400+let ce = 10000000000
401+
402+let cf = 10000
403+
404+let cg = 200
405+
406+let ch = 300
407+
408+let ci = 10000
409+
410+let cj = 100000
411+
412+func ck (cl,cm) = ((("factoryWhByContinentAndRes_" + cl) + "_") + toString(cm))
413+
414+
415+let cn = 0
416+
417+let co = 1
418+
419+let cp = 2
420+
421+func cq (cr) = {
422+ 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:"), ":")
423+[if ((size(split(cs[cn], "_")) == n))
424+ then cs[cn]
425+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(cs[co], "_")) == n))
426+ then cs[co]
427+ else "0@0_0@0_0@0_0@0_0@0_0@0", cs[cp]]
428+ }
429+
430+
431+func ct (cu,cv,cw) = if (cw)
432+ then {
433+ let cx = if ((cu >= 0))
434+ then (((cu + cv) - 1) / cv)
435+ else -((((-(cu) + cv) - 1) / cv))
436+ (cx * i)
437+ }
438+ else cu
439+
440+
441+func cy (cz,cm,cu,cA) = {
442+ let cB = ck(cz, cm)
443+ let cC = valueOrElse(getInteger(cB), 0)
444+ let cD = if ((cC > ce))
445+ then 0
446+ else if (((cC + cu) > ce))
447+ then (ce - cC)
448+ else cu
449+ let cE = (fraction(cD, ((cg * x) - fraction(((100 * cC) + (50 * cD)), x, ce)), j) + fraction((cu - cD), x, i))
450+ let cF = (cA - (cA / 100))
451+ if (((cF * cu) > (cE * i)))
452+ then throw((((((((((("Actual price = " + toString(cE)) + " / ") + toString(cu)) + " < minPrice = ") + toString(cA)) + ", (") + cz) + ", ") + C[cm]) + ")"))
453+ else $Tuple2(IntegerEntry(cB, (cC + cu)), cE)
454+ }
455+
456+
457+func cG (cz,cH,cu,cI) = {
458+ let cB = ck(cz, cH)
459+ let cC = valueOrElse(getInteger(cB), 0)
460+ let cJ = if ((cC > ce))
461+ then min([cu, (cC - ce)])
462+ else 0
463+ let cK = min([cC, (cu - cJ)])
464+ let cL = (cK + cJ)
465+ let cM = (fraction(cK, ((ch * x) - fraction(((100 * cC) - (50 * cK)), x, ce)), j) + fraction(cJ, (2 * x), i))
466+ let cN = (cI + (cI / 100))
467+ if (((cM * i) > (cN * cL)))
468+ then throw((((((((((("Actual price = " + toString(cM)) + " / ") + toString(cL)) + " > maxPrice = ") + toString(cI)) + ", (") + cz) + ", ") + D[cH]) + ")"))
469+ else $Tuple3(IntegerEntry(cB, (cC - cL)), cM, cL)
470+ }
471+
472+
473+func cO (cP) = {
474+ let cs = split(valueOrElse(getString(aF, cP), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
475+[toString(valueOrElse(parseInt(cs[ai]), 0)), if ((size(split(cs[aj], "_")) == n))
476+ then cs[aj]
477+ else "0_0_0_0_0_0", if ((size(split(cs[ak], "_")) == n))
478+ then cs[ak]
479+ else "0_0_0_0_0_0", cs[al]]
480+ }
481+
482+
483+func cQ () = if (valueOrElse(getBoolean(aF, bk()), false))
251484 then throw("Contracts are under maintenance")
252485 else unit
253486
254487
255-func bn (bo,bp) = {
256- let at = bo._1
257- let bq = bo._8
258- let aR = if (bq)
259- then parseIntValue(split(t[at], "_")[u])
488+func cR (bI,bJ) = {
489+ let cd = bI._1
490+ let cS = bI._8
491+ let cv = if (cS)
492+ then parseIntValue(split(G[cd], "_")[T])
260493 else 0
261- let br = split(bp, "@")
262- if ((size(br) != 2))
494+ let cT = split(bJ, "@")
495+ if ((size(cT) != 2))
263496 then throw("Incorrect order format, should be amount@price")
264497 else {
265- let bs = parseIntValue(br[0])
266- let bt = parseIntValue(br[1])
267- let bu = fraction(bs, bt, h)
268- let bv = aP(bs, aR, bq)
269- let bw = if ((size(bo._6) > at))
270- then parseIntValue(bo._6[at])
498+ let cU = parseIntValue(cT[0])
499+ let cV = parseIntValue(cT[1])
500+ let cW = fraction(cU, cV, i)
501+ let cX = ct(cU, cv, cS)
502+ let cY = if ((size(bI._6) > cd))
503+ then parseIntValue(bI._6[cd])
271504 else 0
272- let bx = split(if ((size(bo._7) > at))
273- then bo._7[at]
505+ let cZ = split(if ((size(bI._7) > cd))
506+ then bI._7[cd]
274507 else "0@0", "@")
275- let by = parseIntValue(bx[0])
276- let bz = parseIntValue(bx[1])
277- if (if ((0 > bz))
508+ let da = parseIntValue(cZ[0])
509+ let db = parseIntValue(cZ[1])
510+ if (if ((0 > db))
278511 then true
279- else (0 > bt))
512+ else (0 > cV))
280513 then throw("Price can't be negative")
281514 else {
282- let bA = fraction(by, bz, h)
283- let bB = aP(by, aR, bq)
284- if ((bs == 0))
285- then if ((by > 0))
286- then $Tuple8((at + 1), (bo._2 :+ toString(bw)), bo._3, bo._4, (bo._5 - bA), bo._6, bo._7, bq)
287- else $Tuple8((at + 1), (bo._2 :+ toString((bw - by))), bo._3, bo._4, bo._5, bo._6, bo._7, bq)
288- else if ((bs > 0))
289- then if ((0 > by))
290- then $Tuple8((at + 1), (bo._2 :+ toString((bw - by))), (bo._3 + bv), bo._4, (bo._5 + bu), bo._6, bo._7, bq)
291- else $Tuple8((at + 1), (bo._2 :+ toString(bw)), (bo._3 + bv), bo._4, ((bo._5 + bu) - bA), bo._6, bo._7, bq)
292- else if ((0 > by))
515+ let dc = fraction(da, db, i)
516+ let dd = ct(da, cv, cS)
517+ if ((cU == 0))
518+ 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)
521+ else if ((cU > 0))
522+ 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)
525+ else if ((0 > da))
293526 then {
294- let bC = (by - bs)
295- if ((0 > (bw - bC)))
296- then throw((((("Attempt to take " + toString(bC)) + " from warehouse, but only ") + toString(bw)) + " available"))
297- else $Tuple8((at + 1), (bo._2 :+ toString((bw - bC))), bo._3, (bo._4 - bv), bo._5, bo._6, bo._7, bq)
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)
298531 }
299- else if ((0 > (bw + bs)))
300- then throw((((("Attempt to take " + toString(-(bs))) + " from warehouse, but only ") + toString(bw)) + " available"))
301- else $Tuple8((at + 1), (bo._2 :+ toString((bw + bs))), bo._3, (bo._4 - bv), (bo._5 - bA), bo._6, bo._7, bq)
532+ else if ((0 > (cY + cU)))
533+ 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)
302535 }
303536 }
304537 }
305538
306539
307-func bD (bE,bF,bG) = {
308- let bH = split(bE[x], "_")
309- let bI = split(bE[y], "_")
310- let bJ = if ((bE[z] == ""))
540+func df (dg,dh,di) = {
541+ let dj = split(dg[aa], "_")
542+ let dk = split(dg[ab], "_")
543+ let dl = if ((dg[ac] == ""))
311544 then nil
312- else split(bE[z], "_")
313- let bK = split(bF[aJ], "_")
314- let bL = split(bF[aK], "_")
315- let bM = if ((bF[aL] == ""))
545+ else split(dg[ac], "_")
546+ let dm = split(dh[cn], "_")
547+ let dn = split(dh[co], "_")
548+ let do = if ((dh[cp] == ""))
316549 then nil
317- else split(bF[aL], "_")
318- if ((size(bG) != 3))
550+ else split(dh[cp], "_")
551+ if ((size(di) != 3))
319552 then throw("newOrderStr should contain exactly 2 ':' separators")
320553 else {
321- let bN = split(bG[0], "_")
322- let bO = split(bG[1], "_")
323- let bP = if ((bG[2] == ""))
554+ let dp = split(di[0], "_")
555+ let dq = split(di[1], "_")
556+ let dr = if ((di[2] == ""))
324557 then nil
325- else split(bG[2], "_")
326- if ((size(bN) != k))
558+ else split(di[2], "_")
559+ if ((size(dp) != n))
327560 then throw("All 6 resources should be passed")
328- else if ((size(bO) != k))
561+ else if ((size(dq) != n))
329562 then throw("All 6 materials should be passed")
330563 else {
331- let bQ = {
332- let au = bN
333- let av = size(au)
334- let aw = $Tuple8(0, nil, 0, 0, 0, bH, bK, false)
335- func ax (ay,az) = if ((az >= av))
336- then ay
337- else bn(ay, au[az])
564+ let ds = {
565+ let bL = dp
566+ let bM = size(bL)
567+ let bN = $Tuple8(0, nil, 0, 0, 0, dj, dm, false)
568+ func bO (bP,bQ) = if ((bQ >= bM))
569+ then bP
570+ else cR(bP, bL[bQ])
338571
339- func aA (ay,az) = if ((az >= av))
340- then ay
572+ func bR (bP,bQ) = if ((bQ >= bM))
573+ then bP
341574 else throw("List size exceeds 6")
342575
343- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
576+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
344577 }
345- let bh = {
346- let au = bO
347- let av = size(au)
348- let aw = $Tuple8(0, nil, bQ._3, bQ._4, bQ._5, bI, bL, false)
349- func bR (ay,az) = if ((az >= av))
350- then ay
351- else bn(ay, au[az])
578+ let cL = {
579+ let bL = dq
580+ let bM = size(bL)
581+ let bN = $Tuple8(0, nil, ds._3, ds._4, ds._5, dk, dn, false)
582+ func bX (bP,bQ) = if ((bQ >= bM))
583+ then bP
584+ else cR(bP, bL[bQ])
352585
353- func bS (ay,az) = if ((az >= av))
354- then ay
586+ func bY (bP,bQ) = if ((bQ >= bM))
587+ then bP
355588 else throw("List size exceeds 6")
356589
357- bS(bR(bR(bR(bR(bR(bR(aw, 0), 1), 2), 3), 4), 5), 6)
590+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
358591 }
359- let aO = if ((size(bP) != 0))
592+ let cs = if ((size(dr) != 0))
360593 then {
361- let au = bP
362- let av = size(au)
363- let aw = $Tuple8(0, nil, bh._3, bh._4, bh._5, bJ, bM, true)
364- func bT (ay,az) = if ((az >= av))
365- then ay
366- else bn(ay, au[az])
594+ let bL = dr
595+ 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))
598+ then bP
599+ else cR(bP, bL[bQ])
367600
368- func bU (ay,az) = if ((az >= av))
369- then ay
601+ func du (bP,bQ) = if ((bQ >= bM))
602+ then bP
370603 else throw("List size exceeds 50")
371604
372- bU(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(aw, 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)
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)
373606 }
374- else $Tuple8(0, bJ, bh._3, bh._4, bh._5, bJ, bM, true)
375- $Tuple6(bQ._2, bh._2, aO._2, aO._3, aO._4, aO._5)
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)
376609 }
377610 }
378611 }
379612
380613
381-func bV (bo,bW) = {
382- let at = bo._7
383- let bq = bo._12
384- let aR = if (bq)
385- then parseIntValue(split(t[at], "_")[u])
614+func dv (bI,dw) = {
615+ let cd = bI._7
616+ let cS = bI._12
617+ let cv = if (cS)
618+ then parseIntValue(split(G[cd], "_")[T])
386619 else 0
387- let bX = split(bW, "@")
388- if ((size(bX) != 2))
620+ let dx = split(dw, "@")
621+ if ((size(dx) != 2))
389622 then throw("Incorrect order format, should be amount@price")
390623 else {
391- let bY = parseIntValue(bX[0])
392- let bZ = parseIntValue(bX[1])
393- if ((0 > bZ))
624+ let dy = parseIntValue(dx[0])
625+ let dz = parseIntValue(dx[1])
626+ if ((0 > dz))
394627 then throw("Price can't be negative")
395628 else {
396- let ca = fraction(bY, bZ, h)
397- let cb = if ((size(bo._8) > at))
398- then parseIntValue(bo._8[at])
629+ let dA = fraction(dy, dz, i)
630+ let dB = if ((size(bI._8) > cd))
631+ then parseIntValue(bI._8[cd])
399632 else 0
400- let bw = if ((size(bo._9) > at))
401- then parseIntValue(bo._9[at])
633+ let cY = if ((size(bI._9) > cd))
634+ then parseIntValue(bI._9[cd])
402635 else 0
403- let cc = if ((size(bo._10) > at))
404- then bo._10[at]
636+ let dC = if ((size(bI._10) > cd))
637+ then bI._10[cd]
405638 else "0@0"
406- let cd = split(cc, "@")
407- let ce = parseIntValue(cd[0])
408- let cf = parseIntValue(cd[1])
409- if (if ((bY != 0))
410- then (bZ != cf)
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)
411644 else false)
412- then throw(((((("Prices of " + bo._11[at]) + " don't match! WH price=") + toString(cf)) + ", your price=") + toString(bZ)))
645+ then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dF)) + ", your price=") + toString(dz)))
413646 else {
414- let cg = fraction(ce, cf, h)
415- let ch = aP(bY, aR, bq)
416- if ((bY == 0))
417- then $Tuple12((bo._1 :+ toString(bw)), (bo._2 :+ cc), (bo._3 :+ toString(cb)), bo._4, bo._5, bo._6, (bo._7 + 1), bo._8, bo._9, bo._10, bo._11, bq)
418- else if ((bY > 0))
419- then if ((0 > ce))
420- then if ((bY > -(ce)))
421- then throw(((((("Attempt to buy " + toString(bY)) + " of ") + bo._11[at]) + ", but warehouse only sells ") + toString(-(ce))))
422- else $Tuple12((bo._1 :+ toString(bw)), (bo._2 :+ ((toString((ce + bY)) + "@") + toString(cf))), (bo._3 :+ toString((cb + bY))), (bo._4 + ch), bo._5, (bo._6 + ca), (bo._7 + 1), bo._8, bo._9, bo._10, bo._11, bq)
423- else throw((("Attempt to buy " + bo._11[at]) + " while warehouse doesn't sell it"))
424- else if ((ce > 0))
425- then if ((-(bY) > ce))
426- then throw(((((("Attempt to sell " + toString(-(bY))) + " of ") + bo._11[at]) + ", but warehouse only buys ") + toString(ce)))
427- else if ((-(bY) > cb))
428- then throw(((((("Attempt to sell " + toString(-(bY))) + ", but you only have ") + toString(cb)) + " of ") + bo._11[at]))
429- else $Tuple12((bo._1 :+ toString((bw - bY))), (bo._2 :+ ((toString((ce + bY)) + "@") + toString(cf))), (bo._3 :+ toString((cb + bY))), (bo._4 - ch), (bo._5 - ca), bo._6, (bo._7 + 1), bo._8, bo._9, bo._10, bo._11, bq)
430- else throw((("Attempt to sell " + bo._11[at]) + " while warehouse doesn't buy it"))
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)
656+ 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)
663+ else throw((("Attempt to sell " + bI._11[cd]) + " while warehouse doesn't buy it"))
431664 }
432665 }
433666 }
434667 }
435668
436669
437-@Callable(ci)
438-func recalcLockedVolumeREADONLY (ah,cj) = {
439- let bF = aM(ag(ah))
440- let ck = bD(cj, bF, bF)
441- $Tuple2(nil, (ck._4 + ck._5))
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))
442675 }
443676
444677
445678
446-@Callable(ci)
447-func constructorV1 (cl) = if ((ci.caller != this))
679+@Callable(dI)
680+func constructorV1 (dL) = if ((dI.caller != this))
448681 then throw("Permission denied")
449- else [StringEntry(N(), cl)]
682+ else [StringEntry(ay(), dL)]
450683
451684
452685
453-@Callable(ci)
454-func sellResources (cm,cn) = {
455- let co = bm()
456- if ((co == co))
686+@Callable(dI)
687+func sellResources (dM,dN) = {
688+ let dO = cQ()
689+ if ((dO == dO))
457690 then {
458- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
459- if ((size(ci.payments) != 0))
691+ let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
692+ if ((size(dI.payments) != 0))
460693 then throw("sellResources doesn't require any payments")
461694 else {
462- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
463- if ((cp[ak] != "F"))
464- then throw(("Duck location type should be Factory, but is " + cp[ak]))
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]))
465698 else {
466- let aV = cp[al]
467- let cq = bk(ac(ad))
468- let cr = split(cq[F], "_")
469- func cs (bo,at) = if ((cm[at] > parseIntValue(cr[at])))
470- then throw(((((("You have " + cr[at]) + " of ") + p[at]) + ", but tried to sell ") + toString(cm[at])))
471- else if ((0 > cm[at]))
472- then throw(((("You tried to sell negative amount of " + p[at]) + ": ") + toString(cm[at])))
473- else if ((cm[at] > 0))
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))
474707 then {
475- let ct = aU(aV, at, cm[at], cn[at])
476- $Tuple3((bo._1 :+ ct._1), (bo._2 :+ toString((parseIntValue(cr[at]) - cm[at]))), (bo._3 + ct._2))
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))
477710 }
478- else $Tuple3(bo._1, (bo._2 :+ cr[at]), bo._3)
711+ else $Tuple3(bI._1, (bI._2 :+ dR[cd]), bI._3)
479712
480- let cu = {
481- let au = [0, 1, 2, 3, 4, 5]
482- let av = size(au)
483- let aw = $Tuple3(nil, nil, 0)
484- func ax (ay,az) = if ((az >= av))
485- then ay
486- else cs(ay, au[az])
713+ let dT = {
714+ let bL = [0, 1, 2, 3, 4, 5]
715+ let bM = size(bL)
716+ let bN = $Tuple3(nil, nil, 0)
717+ func bO (bP,bQ) = if ((bQ >= bM))
718+ then bP
719+ else bH(bP, bL[bQ])
487720
488- func aA (ay,az) = if ((az >= av))
489- then ay
721+ func bR (bP,bQ) = if ((bQ >= bM))
722+ then bP
490723 else throw("List size exceeds 6")
491724
492- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
725+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
493726 }
494- let cv = makeString([cq[E], makeString(cu._2, "_"), cq[G], cq[H]], ":")
495- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
496- $Tuple2((cu._1 :+ ScriptTransfer(ci.caller, cu._3, b)), cw)
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)
497730 }
498731 }
499732 }
502735
503736
504737
505-@Callable(ci)
506-func buyMaterials (cm,cx) = {
507- let co = bm()
508- if ((co == co))
738+@Callable(dI)
739+func buyMaterials (dM,dW) = {
740+ let dO = cQ()
741+ if ((dO == dO))
509742 then {
510- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
511- if ((size(ci.payments) != 1))
743+ let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
744+ if ((size(dI.payments) != 1))
512745 then throw("exactly 1 payment must be attached")
513746 else {
514- let cy = ci.payments[0]
515- let cz = cy.amount
516- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
517- if ((cA != b))
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))
518751 then throw("USDT payments only!")
519752 else {
520- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
521- if ((cp[ak] != "F"))
522- then throw(("Duck location type should be Factory, but is " + cp[ak]))
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]))
523756 else {
524- let aV = cp[al]
525- let cq = bk(ac(ad))
526- let cB = split(cq[G], "_")
527- func cC (bo,at) = if ((0 > cm[at]))
528- then throw(((("You tried to buy negative amount of " + q[at]) + ": ") + toString(cm[at])))
529- else if ((cm[at] > 0))
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))
530763 then {
531- let ct = bc(aV, at, cm[at], cx[at])
532- $Tuple3((bo._1 :+ ct._1), (bo._2 :+ toString((parseIntValue(cB[at]) + ct._3))), (bo._3 + ct._2))
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))
533766 }
534- else $Tuple3(bo._1, (bo._2 :+ cB[at]), bo._3)
767+ else $Tuple3(bI._1, (bI._2 :+ ea[cd]), bI._3)
535768
536- let cu = {
537- let au = [0, 1, 2, 3, 4, 5]
538- let av = size(au)
539- let aw = $Tuple3(nil, nil, 0)
540- func ax (ay,az) = if ((az >= av))
541- then ay
542- else cC(ay, au[az])
769+ let dT = {
770+ let bL = [0, 1, 2, 3, 4, 5]
771+ let bM = size(bL)
772+ let bN = $Tuple3(nil, nil, 0)
773+ func bO (bP,bQ) = if ((bQ >= bM))
774+ then bP
775+ else eb(bP, bL[bQ])
543776
544- func aA (ay,az) = if ((az >= av))
545- then ay
777+ func bR (bP,bQ) = if ((bQ >= bM))
778+ then bP
546779 else throw("List size exceeds 6")
547780
548- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
781+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
549782 }
550- if ((cu._3 > cz))
551- then throw(((("Insufficient payment! Attached=" + toString(cz)) + ", required=") + toString(cu._3)))
783+ if ((dT._3 > dY))
784+ then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
552785 else {
553- let cv = makeString([cq[E], cq[F], makeString(cu._2, "_"), cq[H]], ":")
554- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
555- let P = if (((cz - cu._3) > 0))
556- then [ScriptTransfer(ci.caller, (cz - cu._3), b)]
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)]
557790 else nil
558- let cD = (cu._3 / 100)
559- $Tuple2(((cu._1 ++ P) :+ ScriptTransfer(T, cD, b)), cw)
791+ let ec = (dT._3 / 100)
792+ $Tuple2(((dT._1 ++ aA) :+ ScriptTransfer(aE, ec, b)), dV)
560793 }
561794 }
562795 }
567800
568801
569802
570-@Callable(ci)
571-func exchangeResources (cm) = {
572- let co = bm()
573- if ((co == co))
803+@Callable(dI)
804+func exchangeResources (dM) = {
805+ let dO = cQ()
806+ if ((dO == dO))
574807 then {
575- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
576- if ((size(ci.payments) != 1))
808+ let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
809+ if ((size(dI.payments) != 1))
577810 then throw("exactly 1 payment must be attached")
578811 else {
579- let cy = ci.payments[0]
580- let cz = cy.amount
581- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
582- if ((cA != b))
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))
583816 then throw("USDT payments only!")
584817 else {
585- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
586- if ((cp[ak] != "F"))
587- then throw(("Duck location type should be Factory, but is " + cp[ak]))
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]))
588821 else {
589- let aV = cp[al]
590- let cq = bk(ac(ad))
591- let cr = split(cq[F], "_")
592- let cB = split(cq[G], "_")
593- func cE (bo,at) = {
594- let aX = aG(aV, at)
595- let aY = valueOrElse(getInteger(aX), 0)
596- let cF = cm[at]
597- if ((cF > parseIntValue(cr[at])))
598- then throw(((((("You have " + cr[at]) + " of ") + p[at]) + ", but tried to exchange ") + toString(cF)))
599- else if ((0 > cF))
600- then throw(((("You tried to exchange negative amount of " + p[at]) + ": ") + toString(cF)))
601- else if ((cF > 0))
602- then $Tuple4((bo._1 :+ toString((parseIntValue(cr[at]) - cF))), (bo._2 :+ toString((parseIntValue(cB[at]) + cF))), (bo._3 + fraction(cF, m, h)), (bo._4 :+ IntegerEntry(aX, aY)))
603- else $Tuple4((bo._1 :+ cr[at]), (bo._2 :+ cB[at]), bo._3, bo._4)
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) = {
827+ let cB = ck(cz, cd)
828+ 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)
604837 }
605838
606- let cu = {
607- let au = [0, 1, 2, 3, 4, 5]
608- let av = size(au)
609- let aw = $Tuple4(nil, nil, 0, nil)
610- func ax (ay,az) = if ((az >= av))
611- then ay
612- else cE(ay, au[az])
839+ let dT = {
840+ let bL = [0, 1, 2, 3, 4, 5]
841+ let bM = size(bL)
842+ let bN = $Tuple4(nil, nil, 0, nil)
843+ func bO (bP,bQ) = if ((bQ >= bM))
844+ then bP
845+ else ed(bP, bL[bQ])
613846
614- func aA (ay,az) = if ((az >= av))
615- then ay
847+ func bR (bP,bQ) = if ((bQ >= bM))
848+ then bP
616849 else throw("List size exceeds 6")
617850
618- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
851+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
619852 }
620- if ((cu._3 > cz))
621- then throw(((("Insufficient payment! Attached=" + toString(cz)) + ", required=") + toString(cu._3)))
853+ if ((dT._3 > dY))
854+ then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
622855 else {
623- let cv = makeString([cq[E], makeString(cu._1, "_"), makeString(cu._2, "_"), cq[H]], ":")
624- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
625- let P = if (((cz - cu._3) > 0))
626- then [ScriptTransfer(ci.caller, (cz - cu._3), b)]
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)]
627860 else nil
628- let cD = (cu._3 / 100)
629- $Tuple2(((P ++ cu._4) :+ ScriptTransfer(T, cD, b)), cw)
861+ let ec = (dT._3 / 100)
862+ $Tuple2(((aA ++ dT._4) :+ ScriptTransfer(aE, ec, b)), dV)
630863 }
631864 }
632865 }
637870
638871
639872
640-@Callable(ci)
641-func craftGoods (cG,cH) = {
642- let co = bm()
643- if ((co == co))
644- then if ((size(ci.payments) != 1))
873+@Callable(dI)
874+func craftGoods (ef,eg) = {
875+ let dO = cQ()
876+ if ((dO == dO))
877+ then if ((size(dI.payments) != 1))
645878 then throw("exactly 1 payment must be attached")
646879 else {
647- let cy = ci.payments[0]
648- let cz = cy.amount
649- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
650- if ((cA != b))
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))
651884 then throw("USDT payments only!")
652- else if ((cz != f))
885+ else if ((dY != g))
653886 then throw("exactly 1 USDT must be attached as payment")
654- else if ((0 >= cH))
887+ else if ((0 >= eg))
655888 then throw("Quantity should be positive")
656889 else {
657- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
658- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
659- if ((cp[ak] != "M"))
660- then throw(("Duck location type should be Manufactory, but is " + cp[ak]))
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]))
661894 else {
662- let cI = cp[aj]
663- let cq = bk(ac(ad))
664- let cB = split(cq[G], "_")
665- if (if ((0 > cG))
895+ let eh = dP[bp]
896+ let dQ = cO(bf(bg))
897+ let ea = split(dQ[ak], "_")
898+ if (if ((0 > ef))
666899 then true
667- else (cG >= size(t)))
668- then throw(("Unknown product idx=" + toString(cG)))
900+ else (ef >= size(G)))
901+ then throw(("Unknown product idx=" + toString(ef)))
669902 else {
670- let aq = split(t[cG], "_")
671- if ((size(aq) != (k + 3)))
672- then throw(("Fatal: unknown recipe: " + t[cG]))
903+ let ca = split(G[ef], "_")
904+ if ((size(ca) != (n + 3)))
905+ then throw(("Fatal: unknown recipe: " + G[ef]))
673906 else {
674- let cJ = parseIntValue(aq[v])
675- if ((s[cJ] != cI))
676- then throw(((("This product is available in " + s[cJ]) + ", but you are in ") + cI))
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))
677910 else {
678- let cK = if ((cq[H] == ""))
911+ let ej = if ((dQ[al] == ""))
679912 then nil
680- else split(cq[H], "_")
681- func cL (bo,cM) = {
682- let cN = bo._2
683- let cO = if ((size(cK) > cN))
684- then cK[cN]
913+ else split(dQ[al], "_")
914+ func ek (bI,el) = {
915+ let bw = bI._2
916+ let em = if ((size(ej) > bw))
917+ then ej[bw]
685918 else "0"
686- let cP = parseIntValue(cO)
687- let aQ = (cH * parseIntValue(aq[u]))
688- let cQ = if ((cN == cG))
689- then toString((cP + aQ))
690- else cO
691- $Tuple2((bo._1 :+ cQ), (cN + 1))
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))
692925 }
693926
694- let cR = ( let au = t
695- let av = size(au)
696- let aw = $Tuple2(nil, 0)
697- func ax (ay,az) = if ((az >= av))
698- then ay
699- else cL(ay, au[az])
927+ let ep = ( let bL = G
928+ let bM = size(bL)
929+ let bN = $Tuple2(nil, 0)
930+ func bO (bP,bQ) = if ((bQ >= bM))
931+ then bP
932+ else ek(bP, bL[bQ])
700933
701- func aA (ay,az) = if ((az >= av))
702- then ay
934+ func bR (bP,bQ) = if ((bQ >= bM))
935+ then bP
703936 else throw("List size exceeds 50")
704937
705- aA(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(aw, 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
706- func cS (bo,at) = {
707- let cT = ((parseIntValue(aq[at]) * g) * cH)
708- let cU = parseIntValue(cB[at])
709- if ((cT > cU))
710- then throw(((((((("You have " + cB[at]) + " of ") + q[at]) + ", but recipe requires ") + toString(cT)) + " for quantity ") + toString(cH)))
711- else if ((cT > 0))
712- then (bo :+ toString((cU - cT)))
713- else (bo :+ cB[at])
938+ 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])
714947 }
715948
716- let cu = {
717- let au = [0, 1, 2, 3, 4, 5]
718- let av = size(au)
719- let aw = nil
720- func bR (ay,az) = if ((az >= av))
721- then ay
722- else cS(ay, au[az])
949+ let dT = {
950+ let bL = [0, 1, 2, 3, 4, 5]
951+ let bM = size(bL)
952+ let bN = nil
953+ func bX (bP,bQ) = if ((bQ >= bM))
954+ then bP
955+ else eq(bP, bL[bQ])
723956
724- func bS (ay,az) = if ((az >= av))
725- then ay
957+ func bY (bP,bQ) = if ((bQ >= bM))
958+ then bP
726959 else throw("List size exceeds 6")
727960
728- bS(bR(bR(bR(bR(bR(bR(aw, 0), 1), 2), 3), 4), 5), 6)
961+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
729962 }
730- let cv = makeString([cq[E], cq[F], makeString(cu, "_"), makeString(cR, "_")], ":")
731- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
732- $Tuple2(nil, cw)
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)
733966 }
734967 }
735968 }
741974
742975
743976
744-@Callable(ci)
745-func setWarehouseOrder (cV,ah) = {
746- let cW = ci.originCaller
747- let Z = toString(cW)
748- let cw = if ((cW != T))
749- then bm()
977+@Callable(dI)
978+func setWarehouseOrder (et,aW) = {
979+ let eu = dI.originCaller
980+ let aK = toString(eu)
981+ let dV = if ((eu != aE))
982+ then cQ()
750983 else false
751- let cX = value(assetInfo(fromBase58String(ah)))
752- if (!(isDefined(getInteger(U, X(ah)))))
753- then throw((("NFT " + cX.name) + " is not staked"))
984+ let bW = value(assetInfo(fromBase58String(aW)))
985+ if (!(isDefined(getInteger(aF, aO(aW)))))
986+ then throw((("NFT " + bW.name) + " is not staked"))
754987 else {
755- let cY = valueOrErrorMessage(getString(U, V(ah)), (("NFT " + cX.name) + " is orphaned"))
756- if (if ((cW != T))
757- then (cY != Z)
988+ let ev = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned"))
989+ if (if ((eu != aE))
990+ then (ev != aK)
758991 else false)
759- then throw((j + " is not yours"))
992+ then throw((k + " is not yours"))
760993 else {
761- let cZ = split_4C(cV, ":")
762- let cj = am(invoke(U, "getWarehouseREADONLY", [ah], nil))
763- let bE = split_4C(cj, ":")
764- let da = split(bE[A], "_")
765- let db = parseIntValue(da[C])
766- let dc = parseIntValue(da[D])
767- let aN = ag(ah)
768- let bF = aM(aN)
769- let ck = bD(bE, bF, cZ)
770- let dd = ck._4
771- let de = ck._5
772- let df = (dd + de)
773- let dg = ((dc - db) - df)
774- if ((0 > dg))
775- then throw((((("Attempt to reserve " + toString(dd)) + " space for buy orders, and ") + toString(de)) + " space for sell orders, leads to negative free space"))
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])
1000+ 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"))
7761009 else {
777- let dh = makeString_2C([bE[w], makeString(ck._1, "_"), makeString(ck._2, "_"), makeString(ck._3, "_"), toString(df)], ":")
778- let di = am(invoke(U, "saveWarehouse", [dh, ah], nil))
779- let dj = ck._6
780- let dk = if ((dj > 0))
781- then if ((size(ci.payments) != 1))
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))
7821015 then throw("exactly 1 payment must be attached")
7831016 else {
784- let cy = ci.payments[0]
785- let cz = cy.amount
786- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
787- if ((cA != b))
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))
7881021 then throw("USDT payments only!")
789- else if ((cz != dj))
790- then throw(("Payment needed is " + toString(dj)))
791- else [StringEntry(aN, cV)]
1022+ else if ((dY != eG))
1023+ then throw(("Payment needed is " + toString(eG)))
1024+ else [StringEntry(cr, et)]
7921025 }
793- else if ((dj == 0))
794- then if ((size(ci.payments) != 0))
1026+ else if ((eG == 0))
1027+ then if ((size(dI.payments) != 0))
7951028 then throw("No payments needed")
796- else [StringEntry(aN, cV)]
797- else if ((size(ci.payments) != 0))
1029+ else [StringEntry(cr, et)]
1030+ else if ((size(dI.payments) != 0))
7981031 then throw("No payments needed")
799- else [ScriptTransfer(addressFromStringValue(cY), -(dj), b), StringEntry(aN, cV)]
800- $Tuple2(dk, $Tuple2(cw, di))
1032+ else [ScriptTransfer(addressFromStringValue(ev), -(eG), b), StringEntry(cr, et)]
1033+ $Tuple2(eH, $Tuple2(dV, eF))
8011034 }
8021035 }
8031036 }
8051038
8061039
8071040
808-@Callable(ci)
809-func acceptWarehouseOrder (dl,ah,ad) = {
810- let co = bm()
811- let dm = ci.originCaller
812- let dn = toString(dm)
813- let do = valueOrErrorMessage(getString(U, aa(dn)), "You don't have a duck staked")
814- let cp = valueOrElse(getString(U, ae(do)), l)
815- let dp = split(value(cp), "_")
816- if ((dp[ak] != "L"))
817- then throw((("Duck location type is " + dp[ak]) + ", but should be L"))
818- else if ((do != ad))
819- then throw(((("Your staked duck is " + do) + ", but passed ") + ad))
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))
8201053 else {
821- let dq = value(assetInfo(fromBase58String(ah)))
822- if (!(isDefined(getInteger(U, X(ah)))))
823- then throw((("NFT " + dq.name) + " is not staked"))
1054+ let eN = value(assetInfo(fromBase58String(aW)))
1055+ if (!(isDefined(getInteger(aF, aO(aW)))))
1056+ then throw((("NFT " + eN.name) + " is not staked"))
8241057 else {
825- let dr = valueOrErrorMessage(getString(U, V(ah)), (("NFT " + dq.name) + " is orphaned"))
826- if ((dr == dn))
1058+ let eO = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eN.name) + " is orphaned"))
1059+ if ((eO == eK))
8271060 then throw("You cannot trade with yourself")
8281061 else {
829- let ds = split_4C(dl, ":")
830- if ((size(ds) != 3))
1062+ let eP = split_4C(eI, ":")
1063+ if ((size(eP) != 3))
8311064 then throw("bpOrderStr should contain exactly 2 ':' separators")
8321065 else {
833- let dt = split(ds[0], "_")
834- let du = split(ds[1], "_")
835- let dv = if ((ds[2] == ""))
1066+ let eQ = split(eP[0], "_")
1067+ let eR = split(eP[1], "_")
1068+ let eS = if ((eP[2] == ""))
8361069 then nil
837- else split(ds[2], "_")
838- if ((size(dt) != k))
1070+ else split(eP[2], "_")
1071+ if ((size(eQ) != n))
8391072 then throw("All 6 resources should be passed")
840- else if ((size(du) != k))
1073+ else if ((size(eR) != n))
8411074 then throw("All 6 materials should be passed")
8421075 else {
843- let cj = am(invoke(U, "getWarehouseREADONLY", [ah], nil))
844- let bE = split_4C(cj, ":")
845- let bH = split(bE[x], "_")
846- let bI = split(bE[y], "_")
847- let bJ = if ((bE[z] == ""))
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] == ""))
8481081 then nil
849- else split(bE[z], "_")
850- let dw = parseIntValue(split(bE[A], "_")[B])
851- let bl = ac(ad)
852- let cq = bk(bl)
853- let dx = split(cq[F], "_")
854- let dy = split(cq[G], "_")
855- let dz = if ((cq[H] == ""))
1082+ else split(dg[ac], "_")
1083+ let eT = parseIntValue(split(dg[ad], "_")[ae])
1084+ 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] == ""))
8561089 then nil
857- else split(cq[H], "_")
858- let aN = ag(ah)
859- let dA = aM(aN)
860- let dB = split(dA[aJ], "_")
861- let dC = split(dA[aK], "_")
862- let dD = if ((dA[aL] == ""))
1090+ else split(dQ[al], "_")
1091+ 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] == ""))
8631096 then nil
864- else split(dA[aL], "_")
865- let bQ = {
866- let au = dt
867- let av = size(au)
868- let aw = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dx, bH, dB, p, false)
869- func ax (ay,az) = if ((az >= av))
870- then ay
871- else bV(ay, au[az])
1097+ else split(eX[cp], "_")
1098+ let ds = {
1099+ let bL = eQ
1100+ let bM = size(bL)
1101+ let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eU, dj, eY, C, false)
1102+ func bO (bP,bQ) = if ((bQ >= bM))
1103+ then bP
1104+ else dv(bP, bL[bQ])
8721105
873- func aA (ay,az) = if ((az >= av))
874- then ay
1106+ func bR (bP,bQ) = if ((bQ >= bM))
1107+ then bP
8751108 else throw("List size exceeds 6")
8761109
877- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
1110+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
8781111 }
879- let bh = {
880- let au = du
881- let av = size(au)
882- let aw = $Tuple12(nil, nil, nil, bQ._4, bQ._5, bQ._6, 0, dy, bI, dC, q, false)
883- func bR (ay,az) = if ((az >= av))
884- then ay
885- else bV(ay, au[az])
1112+ let cL = {
1113+ let bL = eR
1114+ let bM = size(bL)
1115+ let bN = $Tuple12(nil, nil, nil, ds._4, ds._5, ds._6, 0, eV, dk, eZ, D, false)
1116+ func bX (bP,bQ) = if ((bQ >= bM))
1117+ then bP
1118+ else dv(bP, bL[bQ])
8861119
887- func bS (ay,az) = if ((az >= av))
888- then ay
1120+ func bY (bP,bQ) = if ((bQ >= bM))
1121+ then bP
8891122 else throw("List size exceeds 6")
8901123
891- bS(bR(bR(bR(bR(bR(bR(aw, 0), 1), 2), 3), 4), 5), 6)
1124+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
8921125 }
893- let aO = if ((size(dv) != 0))
1126+ let cs = if ((size(eS) != 0))
8941127 then {
895- let au = dv
896- let av = size(au)
897- let aw = $Tuple12(nil, nil, nil, bh._4, bh._5, bh._6, 0, dz, bJ, dD, r, true)
898- func bT (ay,az) = if ((az >= av))
899- then ay
900- else bV(ay, au[az])
1128+ let bL = eS
1129+ let bM = size(bL)
1130+ let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true)
1131+ func dt (bP,bQ) = if ((bQ >= bM))
1132+ then bP
1133+ else dv(bP, bL[bQ])
9011134
902- func bU (ay,az) = if ((az >= av))
903- then ay
1135+ func du (bP,bQ) = if ((bQ >= bM))
1136+ then bP
9041137 else throw("List size exceeds 50")
9051138
906- bU(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(aw, 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)
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)
9071140 }
908- else $Tuple12(bJ, dD, dz, bh._4, bh._5, bh._6, 0, dz, bJ, dD, r, true)
909- let dE = aO._4
910- let dF = if ((0 > (dw - dE)))
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)))
9111144 then 0
912- else (dw - dE)
913- let dh = makeString_2C([bE[w], makeString(bQ._1, "_"), makeString(bh._1, "_"), makeString(aO._1, "_"), toString(dF)], ":")
914- let dG = makeString_2C([makeString(bQ._2, "_"), makeString(bh._2, "_"), makeString(aO._2, "_")], ":")
915- let dH = makeString_2C([cq[E], makeString(bQ._3, "_"), makeString(bh._3, "_"), makeString(aO._3, "_")], ":")
916- let di = am(invoke(U, "saveWarehouse", [dh, ah], nil))
917- let dI = am(invoke(U, "updateBackpack", [ad, dH], nil))
918- let dk = [StringEntry(aN, dG)]
919- let dJ = aO._5
920- let dK = if ((dJ > 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))
9211154 then {
922- let dL = fraction(aO._5, aE, f)
923- let dM = Y(dn)
924- let dN = getString(U, dM)
925- if (isDefined(dN))
926- then (((dk :+ ScriptTransfer(dm, (aO._5 - (3 * dL)), b)) :+ ScriptTransfer(T, dL, b)) :+ ScriptTransfer(addressFromStringValue(value(dN)), dL, b))
927- else ((dk :+ ScriptTransfer(dm, (aO._5 - (3 * dL)), b)) :+ ScriptTransfer(T, dL, b))
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))
9281161 }
929- else dk
930- let dO = aO._6
931- let dP = if ((dO > 0))
932- then if ((size(ci.payments) != 1))
1162+ else eH
1163+ let fl = cs._6
1164+ let fm = if ((fl > 0))
1165+ then if ((size(dI.payments) != 1))
9331166 then throw("exactly 1 payment must be attached")
9341167 else {
935- let cy = ci.payments[0]
936- let cz = cy.amount
937- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
938- if ((cA != b))
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))
9391172 then throw("USDT payments only!")
940- else if ((cz != dO))
941- then throw(("Payment needed is " + toString(dO)))
942- else if ((aF > cz))
943- then throw(("Payment should be at least " + toString(aF)))
1173+ else if ((dY != fl))
1174+ then throw(("Payment needed is " + toString(fl)))
1175+ else if ((cj > dY))
1176+ then throw(("Payment should be at least " + toString(cj)))
9441177 else {
945- let dQ = fraction(aO._6, aE, f)
946- let dM = Y(dr)
947- let dN = getString(U, dM)
948- if (isDefined(dN))
949- then (((dK :+ ScriptTransfer(addressFromStringValue(dr), (aO._6 - (3 * dQ)), b)) :+ ScriptTransfer(T, dQ, b)) :+ ScriptTransfer(addressFromStringValue(value(dN)), dQ, b))
950- else ((dK :+ ScriptTransfer(addressFromStringValue(dr), (aO._6 - (3 * dQ)), b)) :+ ScriptTransfer(T, dQ, b))
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))
9511184 }
9521185 }
953- else if ((size(ci.payments) != 0))
1186+ else if ((size(dI.payments) != 0))
9541187 then throw("No payments needed")
955- else dK
956- $Tuple2(dP, $Tuple3(co, di, dI))
1188+ else fh
1189+ $Tuple2(fm, $Tuple3(dO, eF, ff))
9571190 }
9581191 }
9591192 }
9631196
9641197
9651198
966-@Callable(ci)
967-func sellProductsToES (cm) = {
968- let co = bm()
969- if ((co == co))
970- then if ((size(ci.payments) != 0))
1199+@Callable(dI)
1200+func sellProductsToES (dM) = {
1201+ let dO = cQ()
1202+ if ((dO == dO))
1203+ then if ((size(dI.payments) != 0))
9711204 then throw("No payments needed")
9721205 else {
973- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
974- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
975- if ((cp[ak] != "A"))
976- then throw(("Duck location type should be Airport, but is " + cp[ak]))
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]))
9771210 else {
978- let cq = bk(ac(ad))
979- let cK = if ((cq[H] == ""))
1211+ let dQ = cO(bf(bg))
1212+ let ej = if ((dQ[al] == ""))
9801213 then nil
981- else split(cq[H], "_")
982- let dR = ai()
983- let dS = getString(dR)
984- let dT = if (isDefined(dS))
985- then split(value(dS), "_")
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), "_")
9861219 else nil
987- func dU (bo,dV) = {
988- let at = bo._1
989- let cH = if ((size(cm) > at))
990- then cm[at]
1220+ func fr (bI,fs) = {
1221+ let cd = bI._1
1222+ let eg = if ((size(dM) > cd))
1223+ then dM[cd]
9911224 else 0
992- if ((0 > cH))
1225+ if ((0 > eg))
9931226 then throw("Quantity cannot be negative")
9941227 else {
995- let aq = split(dV, "_")
996- if ((size(aq) != (k + 3)))
997- then throw(("Fatal: unknown recipe: " + dV))
1228+ let ca = split(fs, "_")
1229+ if ((size(ca) != (n + 3)))
1230+ then throw(("Fatal: unknown recipe: " + fs))
9981231 else {
999- let dW = parseIntValue(aq[u])
1000- let dX = (n * dW)
1001- let dY = if ((size(dT) > at))
1002- then parseIntValue(dT[at])
1232+ let ft = parseIntValue(ca[T])
1233+ let fu = (y * ft)
1234+ let fv = if ((size(fq) > cd))
1235+ then parseIntValue(fq[cd])
10031236 else 0
1004- let dZ = (dX - dY)
1005- if ((cH > dZ))
1006- then throw(((("Warehouse can buy only " + toString(dZ)) + " of ") + r[at]))
1237+ let fw = (fu - fv)
1238+ if ((eg > fw))
1239+ then throw(((("Warehouse can buy only " + toString(fw)) + " of ") + E[cd]))
10071240 else {
1008- let ea = ap(aq)
1009- let eb = fraction((ea * o), m, (10 * dW))
1010- let ec = if ((size(cK) > at))
1011- then parseIntValue(cK[at])
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])
10121245 else 0
1013- if ((cH > ec))
1014- then throw(((("You have only " + toString(ec)) + " of ") + r[at]))
1015- else $Tuple4((at + 1), (bo._2 + (eb * cH)), (bo._3 :+ toString((ec - cH))), (bo._4 :+ toString((dY + cH))))
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))))
10161249 }
10171250 }
10181251 }
10191252 }
10201253
1021- let cu = {
1022- let au = t
1023- let av = size(au)
1024- let aw = $Tuple4(0, 0, nil, nil)
1025- func ax (ay,az) = if ((az >= av))
1026- then ay
1027- else dU(ay, au[az])
1254+ let dT = {
1255+ let bL = G
1256+ let bM = size(bL)
1257+ let bN = $Tuple4(0, 0, nil, nil)
1258+ func bO (bP,bQ) = if ((bQ >= bM))
1259+ then bP
1260+ else fr(bP, bL[bQ])
10281261
1029- func aA (ay,az) = if ((az >= av))
1030- then ay
1262+ func bR (bP,bQ) = if ((bQ >= bM))
1263+ then bP
10311264 else throw("List size exceeds 50")
10321265
1033- aA(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(aw, 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)
1266+ 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)
10341267 }
1035- let dH = makeString_2C([cq[E], cq[F], cq[G], makeString(cu._3, "_")], ":")
1036- let dI = am(invoke(U, "updateBackpack", [ad, dH], nil))
1037- $Tuple2([StringEntry(dR, makeString(cu._4, "_")), ScriptTransfer(ci.caller, cu._2, b)], dI)
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)
10381271 }
10391272 }
10401273 else throw("Strict value is not equal to itself.")
10421275
10431276
10441277
1045-@Callable(ci)
1046-func updateEsStorage (ed) = if ((ci.caller != U))
1278+@Callable(dI)
1279+func updateEsStorage (fA) = if ((dI.caller != aF))
10471280 then throw("Permission denied")
1048- else $Tuple2([StringEntry(ai(), ed)], ed)
1281+ else $Tuple2([StringEntry(bo(), fA)], fA)
10491282
10501283
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
24-let e = "__"
24+let e = {
25+ let c = a
26+ if ((base58'2W' == c))
27+ then 10000000000
28+ else if ((base58'2T' == c))
29+ then 100000000
30+ else throw("Unknown chain")
31+ }
2532
26-let f = 1000000
33+let f = "__"
2734
28-let g = 10000000
35+let g = 1000000
2936
30-let h = 100000000
37+let h = 10000000
3138
32-let i = 10000000000
39+let i = 100000000
3340
34-let j = "LAND"
41+let j = 10000000000
3542
36-let k = 6
43+let k = "LAND"
3744
38-let l = "Africa_F_Africa"
45+let l = "DUCK"
3946
40-let m = 39637
47+let m = "PRESALE"
4148
42-let n = 3
49+let n = 6
4350
44-let o = 4
51+let o = 25
4552
46-let p = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
53+let p = 100
4754
48-let q = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
55+let q = 225
4956
50-let r = ["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"]
57+let r = 400
5158
52-let s = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
59+let s = 625
5360
54-let t = ["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"]
61+let t = 3456000
5562
56-let u = 7
63+let u = 86400000
5764
58-let v = 8
65+let v = 10000000000
5966
60-let w = 0
67+let w = "Africa_F_Africa"
6168
62-let x = 1
69+let x = 39637
6370
64-let y = 2
71+let y = 3
6572
66-let z = 3
73+let z = 4
6774
68-let A = 4
75+let A = 10
6976
70-let B = 0
77+let B = 100
7178
72-let C = 1
79+let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
7380
74-let D = 3
81+let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
7582
76-let E = 0
83+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"]
7784
78-let F = 1
85+let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
7986
80-let G = 2
87+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"]
8188
82-let H = 3
89+let H = 0
8390
84-func I (J,K) = valueOrErrorMessage(getString(J, K), makeString(["mandatory ", toString(J), ".", K, " is not defined"], ""))
91+let I = 1
92+
93+let J = 2
94+
95+let K = 3
96+
97+let L = 4
98+
99+let M = 0
100+
101+let N = 1
102+
103+let O = 2
104+
105+let P = 3
106+
107+let Q = 4
108+
109+let R = 5
110+
111+let S = 6
112+
113+let T = 7
114+
115+let U = 8
116+
117+let V = 0
118+
119+let W = 1
120+
121+let X = 2
122+
123+let Y = 3
124+
125+let Z = 0
126+
127+let aa = 1
128+
129+let ab = 2
130+
131+let ac = 3
132+
133+let ad = 4
134+
135+let ae = 0
136+
137+let af = 1
138+
139+let ag = 2
140+
141+let ah = 3
142+
143+let ai = 0
144+
145+let aj = 1
146+
147+let ak = 2
148+
149+let al = 3
150+
151+func am (an) = parseIntValue(split(G[an], "_")[T])
85152
86153
87-let L = 1
88-
89-func M () = "%s__restConfig"
154+func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
90155
91156
92-func N () = "%s__restAddr"
157+func ar (aq,as) = valueOrElse(getInteger(this, aq), as)
93158
94159
95-func O (P) = split_4C(I(P, M()), e)
160+let at = 1
161+
162+let au = 2
163+
164+let av = 3
165+
166+let aw = 4
167+
168+func ax () = "%s__restConfig"
96169
97170
98-func Q (R,S) = valueOrErrorMessage(addressFromString(R[S]), ("Rest cfg doesn't contain address at index " + toString(S)))
171+func ay () = "%s__restAddr"
99172
100173
101-let T = addressFromStringValue(valueOrElse(getString(this, N()), d))
102-
103-let R = O(T)
104-
105-let U = Q(R, L)
106-
107-func V (W) = ("nftOwner_" + W)
174+func az (aA) = split_4C(ao(aA, ax()), f)
108175
109176
110-func X (W) = ("stakedTime_" + W)
177+func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD)))
111178
112179
113-func Y (Z) = ("accRefBy_" + Z)
180+let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d))
181+
182+let aC = az(aE)
183+
184+let aF = aB(aC, at)
185+
186+let aG = aB(aC, au)
187+
188+let aH = aB(aC, av)
189+
190+let aI = aB(aC, aw)
191+
192+func aJ (aK) = ("lastTxIdByUser_" + aK)
114193
115194
116-func aa (ab) = ("stakedDuckByOwner_" + ab)
195+func aL (aM) = ("nftOwner_" + aM)
117196
118197
119-func ac (ad) = ("backPack_" + ad)
198+func aN (aM) = ("landCustomNameByAssetId_" + aM)
120199
121200
122-func ae (ad) = ("duckLocation_" + ad)
201+func aO (aM) = ("stakedTime_" + aM)
123202
124203
125-func af () = "contractsBlocked"
204+func aP (aM) = ("infraLevel_" + aM)
126205
127206
128-func ag (ah) = ("landOrder_" + ah)
207+func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_")
129208
130209
131-func ai () = "emergencyWarehouseProducts"
210+func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU)
132211
133212
134-let aj = 0
213+func aV (aW) = ("wareHouse_" + aW)
135214
136-let ak = 1
137215
138-let al = 2
216+func aX (aU) = ("stakedLandsByOwner_" + aU)
139217
140-func am (an) = {
141- let c = an
218+
219+func aY (aU) = ("stakedPiecesByOwner_" + aU)
220+
221+
222+func aZ (aM) = ("duckCustomNameByAssetId_" + aM)
223+
224+
225+func ba (aK) = ("accountCustomNameByAddr_" + aK)
226+
227+
228+func bb (aK) = ("accRefBy_" + aK)
229+
230+
231+func bc (aK) = ("accReferrals_" + aK)
232+
233+
234+func bd (aM) = ("duckOwner_" + aM)
235+
236+
237+func be (aU) = ("stakedDuckByOwner_" + aU)
238+
239+
240+func bf (bg) = ("backPack_" + bg)
241+
242+
243+func bh (bg) = ("duckLocation_" + bg)
244+
245+
246+func bi (bg) = ("duckHealth_" + bg)
247+
248+
249+func bj () = "resTypesProportions"
250+
251+
252+func bk () = "contractsBlocked"
253+
254+
255+func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm)
256+
257+
258+func bn (aW) = ("landOrder_" + aW)
259+
260+
261+func bo () = "emergencyWarehouseProducts"
262+
263+
264+let bp = 0
265+
266+let bq = 1
267+
268+let br = 2
269+
270+func bs (bt) = {
271+ let c = bt
142272 if ($isInstanceOf(c, "String"))
143273 then {
144- let ao = c
145- ao
274+ let bu = c
275+ bu
146276 }
147277 else throw("fail to cast into String")
148278 }
149279
150280
151-func ap (aq) = {
152- func ar (as,at) = (as + parseIntValue(aq[at]))
153-
154- let au = [0, 1, 2, 3, 4, 5]
155- let av = size(au)
156- let aw = 0
157- func ax (ay,az) = if ((az >= av))
158- then ay
159- else ar(ay, au[az])
160-
161- func aA (ay,az) = if ((az >= av))
162- then ay
163- else throw("List size exceeds 6")
164-
165- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
281+func bv (bt) = {
282+ let c = bt
283+ if ($isInstanceOf(c, "Int"))
284+ then {
285+ let bw = c
286+ bw
287+ }
288+ else throw("fail to cast into Int")
166289 }
167290
168291
169-let aB = 10000000000
170-
171-let aC = 200
172-
173-let aD = 300
174-
175-let aE = 10000
176-
177-let aF = 100000
178-
179-func aG (aH,aI) = ((("factoryWhByContinentAndRes_" + aH) + "_") + toString(aI))
180-
181-
182-let aJ = 0
183-
184-let aK = 1
185-
186-let aL = 2
187-
188-func aM (aN) = {
189- let aO = split(valueOrElse(getString(aN), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
190-[if ((size(split(aO[aJ], "_")) == k))
191- then aO[aJ]
192- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aO[aK], "_")) == k))
193- then aO[aK]
194- else "0@0_0@0_0@0_0@0_0@0_0@0", aO[aL]]
292+func bx (bt) = {
293+ let c = bt
294+ if ($isInstanceOf(c, "List[Any]"))
295+ then {
296+ let by = c
297+ by
298+ }
299+ else throw("fail to cast into List[Any]")
195300 }
196301
197302
198-func aP (aQ,aR,aS) = if (aS)
199- then {
200- let aT = if ((aQ >= 0))
201- then (((aQ + aR) - 1) / aR)
202- else -((((-(aQ) + aR) - 1) / aR))
203- (aT * h)
204- }
205- else aQ
206-
207-
208-func aU (aV,aI,aQ,aW) = {
209- let aX = aG(aV, aI)
210- let aY = valueOrElse(getInteger(aX), 0)
211- let aZ = if ((aY > aB))
212- then 0
213- else if (((aY + aQ) > aB))
214- then (aB - aY)
215- else aQ
216- let ba = (fraction(aZ, ((aC * m) - fraction(((100 * aY) + (50 * aZ)), m, aB)), i) + fraction((aQ - aZ), m, h))
217- let bb = (aW - (aW / 100))
218- if (((bb * aQ) > (ba * h)))
219- then throw((((((((((("Actual price = " + toString(ba)) + " / ") + toString(aQ)) + " < minPrice = ") + toString(aW)) + ", (") + aV) + ", ") + p[aI]) + ")"))
220- else $Tuple2(IntegerEntry(aX, (aY + aQ)), ba)
303+func bz (bt) = {
304+ let c = bt
305+ if ($isInstanceOf(c, "Boolean"))
306+ then {
307+ let bu = c
308+ bu
309+ }
310+ else throw("fail to cast into Boolean")
221311 }
222312
223313
224-func bc (aV,bd,aQ,be) = {
225- let aX = aG(aV, bd)
226- let aY = valueOrElse(getInteger(aX), 0)
227- let bf = if ((aY > aB))
228- then min([aQ, (aY - aB)])
229- else 0
230- let bg = min([aY, (aQ - bf)])
231- let bh = (bg + bf)
232- let bi = (fraction(bg, ((aD * m) - fraction(((100 * aY) - (50 * bg)), m, aB)), i) + fraction(bf, (2 * m), h))
233- let bj = (be + (be / 100))
234- if (((bi * h) > (bj * bh)))
235- then throw((((((((((("Actual price = " + toString(bi)) + " / ") + toString(bh)) + " > maxPrice = ") + toString(be)) + ", (") + aV) + ", ") + q[bd]) + ")"))
236- else $Tuple3(IntegerEntry(aX, (aY - bh)), bi, bh)
314+func bA (bB) = {
315+ let c = bB
316+ if (("S" == c))
317+ then o
318+ else if (("M" == c))
319+ then p
320+ else if (("L" == c))
321+ then q
322+ else if (("XL" == c))
323+ then r
324+ else if (("XXL" == c))
325+ then s
326+ else throw("Unknown land size")
237327 }
238328
239329
240-func bk (bl) = {
241- let aO = split(valueOrElse(getString(U, bl), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
242-[toString(valueOrElse(parseInt(aO[E]), 0)), if ((size(split(aO[F], "_")) == k))
243- then aO[F]
244- else "0_0_0_0_0_0", if ((size(split(aO[G], "_")) == k))
245- then aO[G]
246- else "0_0_0_0_0_0", aO[H]]
330+let bC = 0
331+
332+let bD = 1
333+
334+func bE (bF) = {
335+ let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_")
336+ func bH (bI,bJ) = (bI + parseIntValue(bJ))
337+
338+ let bK = {
339+ let bL = bG
340+ let bM = size(bL)
341+ let bN = 0
342+ func bO (bP,bQ) = if ((bQ >= bM))
343+ then bP
344+ else bH(bP, bL[bQ])
345+
346+ func bR (bP,bQ) = if ((bQ >= bM))
347+ then bP
348+ else throw("List size exceeds 6")
349+
350+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
351+ }
352+ let bS = if ((bF == ""))
353+ then 0
354+ else {
355+ let bT = getString(aF, aX(bF))
356+ let bU = if (isDefined(bT))
357+ then split_51C(value(bT), "_")
358+ else nil
359+ func bV (bI,aW) = {
360+ let bW = value(assetInfo(fromBase58String(aW)))
361+ let bB = split(bW.description, "_")[W]
362+ (bI + bA(bB))
363+ }
364+
365+ let bL = bU
366+ let bM = size(bL)
367+ let bN = 0
368+ func bX (bP,bQ) = if ((bQ >= bM))
369+ then bP
370+ else bV(bP, bL[bQ])
371+
372+ func bY (bP,bQ) = if ((bQ >= bM))
373+ then bP
374+ else throw("List size exceeds 100")
375+
376+ 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)
377+ }
378+[bK, bS]
247379 }
248380
249381
250-func bm () = if (valueOrElse(getBoolean(U, af()), false))
382+func bZ (ca) = {
383+ func cb (cc,cd) = (cc + parseIntValue(ca[cd]))
384+
385+ let bL = [0, 1, 2, 3, 4, 5]
386+ let bM = size(bL)
387+ let bN = 0
388+ func bO (bP,bQ) = if ((bQ >= bM))
389+ then bP
390+ else cb(bP, bL[bQ])
391+
392+ func bR (bP,bQ) = if ((bQ >= bM))
393+ then bP
394+ else throw("List size exceeds 6")
395+
396+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397+ }
398+
399+
400+let ce = 10000000000
401+
402+let cf = 10000
403+
404+let cg = 200
405+
406+let ch = 300
407+
408+let ci = 10000
409+
410+let cj = 100000
411+
412+func ck (cl,cm) = ((("factoryWhByContinentAndRes_" + cl) + "_") + toString(cm))
413+
414+
415+let cn = 0
416+
417+let co = 1
418+
419+let cp = 2
420+
421+func cq (cr) = {
422+ 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:"), ":")
423+[if ((size(split(cs[cn], "_")) == n))
424+ then cs[cn]
425+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(cs[co], "_")) == n))
426+ then cs[co]
427+ else "0@0_0@0_0@0_0@0_0@0_0@0", cs[cp]]
428+ }
429+
430+
431+func ct (cu,cv,cw) = if (cw)
432+ then {
433+ let cx = if ((cu >= 0))
434+ then (((cu + cv) - 1) / cv)
435+ else -((((-(cu) + cv) - 1) / cv))
436+ (cx * i)
437+ }
438+ else cu
439+
440+
441+func cy (cz,cm,cu,cA) = {
442+ let cB = ck(cz, cm)
443+ let cC = valueOrElse(getInteger(cB), 0)
444+ let cD = if ((cC > ce))
445+ then 0
446+ else if (((cC + cu) > ce))
447+ then (ce - cC)
448+ else cu
449+ let cE = (fraction(cD, ((cg * x) - fraction(((100 * cC) + (50 * cD)), x, ce)), j) + fraction((cu - cD), x, i))
450+ let cF = (cA - (cA / 100))
451+ if (((cF * cu) > (cE * i)))
452+ then throw((((((((((("Actual price = " + toString(cE)) + " / ") + toString(cu)) + " < minPrice = ") + toString(cA)) + ", (") + cz) + ", ") + C[cm]) + ")"))
453+ else $Tuple2(IntegerEntry(cB, (cC + cu)), cE)
454+ }
455+
456+
457+func cG (cz,cH,cu,cI) = {
458+ let cB = ck(cz, cH)
459+ let cC = valueOrElse(getInteger(cB), 0)
460+ let cJ = if ((cC > ce))
461+ then min([cu, (cC - ce)])
462+ else 0
463+ let cK = min([cC, (cu - cJ)])
464+ let cL = (cK + cJ)
465+ let cM = (fraction(cK, ((ch * x) - fraction(((100 * cC) - (50 * cK)), x, ce)), j) + fraction(cJ, (2 * x), i))
466+ let cN = (cI + (cI / 100))
467+ if (((cM * i) > (cN * cL)))
468+ then throw((((((((((("Actual price = " + toString(cM)) + " / ") + toString(cL)) + " > maxPrice = ") + toString(cI)) + ", (") + cz) + ", ") + D[cH]) + ")"))
469+ else $Tuple3(IntegerEntry(cB, (cC - cL)), cM, cL)
470+ }
471+
472+
473+func cO (cP) = {
474+ let cs = split(valueOrElse(getString(aF, cP), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
475+[toString(valueOrElse(parseInt(cs[ai]), 0)), if ((size(split(cs[aj], "_")) == n))
476+ then cs[aj]
477+ else "0_0_0_0_0_0", if ((size(split(cs[ak], "_")) == n))
478+ then cs[ak]
479+ else "0_0_0_0_0_0", cs[al]]
480+ }
481+
482+
483+func cQ () = if (valueOrElse(getBoolean(aF, bk()), false))
251484 then throw("Contracts are under maintenance")
252485 else unit
253486
254487
255-func bn (bo,bp) = {
256- let at = bo._1
257- let bq = bo._8
258- let aR = if (bq)
259- then parseIntValue(split(t[at], "_")[u])
488+func cR (bI,bJ) = {
489+ let cd = bI._1
490+ let cS = bI._8
491+ let cv = if (cS)
492+ then parseIntValue(split(G[cd], "_")[T])
260493 else 0
261- let br = split(bp, "@")
262- if ((size(br) != 2))
494+ let cT = split(bJ, "@")
495+ if ((size(cT) != 2))
263496 then throw("Incorrect order format, should be amount@price")
264497 else {
265- let bs = parseIntValue(br[0])
266- let bt = parseIntValue(br[1])
267- let bu = fraction(bs, bt, h)
268- let bv = aP(bs, aR, bq)
269- let bw = if ((size(bo._6) > at))
270- then parseIntValue(bo._6[at])
498+ let cU = parseIntValue(cT[0])
499+ let cV = parseIntValue(cT[1])
500+ let cW = fraction(cU, cV, i)
501+ let cX = ct(cU, cv, cS)
502+ let cY = if ((size(bI._6) > cd))
503+ then parseIntValue(bI._6[cd])
271504 else 0
272- let bx = split(if ((size(bo._7) > at))
273- then bo._7[at]
505+ let cZ = split(if ((size(bI._7) > cd))
506+ then bI._7[cd]
274507 else "0@0", "@")
275- let by = parseIntValue(bx[0])
276- let bz = parseIntValue(bx[1])
277- if (if ((0 > bz))
508+ let da = parseIntValue(cZ[0])
509+ let db = parseIntValue(cZ[1])
510+ if (if ((0 > db))
278511 then true
279- else (0 > bt))
512+ else (0 > cV))
280513 then throw("Price can't be negative")
281514 else {
282- let bA = fraction(by, bz, h)
283- let bB = aP(by, aR, bq)
284- if ((bs == 0))
285- then if ((by > 0))
286- then $Tuple8((at + 1), (bo._2 :+ toString(bw)), bo._3, bo._4, (bo._5 - bA), bo._6, bo._7, bq)
287- else $Tuple8((at + 1), (bo._2 :+ toString((bw - by))), bo._3, bo._4, bo._5, bo._6, bo._7, bq)
288- else if ((bs > 0))
289- then if ((0 > by))
290- then $Tuple8((at + 1), (bo._2 :+ toString((bw - by))), (bo._3 + bv), bo._4, (bo._5 + bu), bo._6, bo._7, bq)
291- else $Tuple8((at + 1), (bo._2 :+ toString(bw)), (bo._3 + bv), bo._4, ((bo._5 + bu) - bA), bo._6, bo._7, bq)
292- else if ((0 > by))
515+ let dc = fraction(da, db, i)
516+ let dd = ct(da, cv, cS)
517+ if ((cU == 0))
518+ 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)
521+ else if ((cU > 0))
522+ 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)
525+ else if ((0 > da))
293526 then {
294- let bC = (by - bs)
295- if ((0 > (bw - bC)))
296- then throw((((("Attempt to take " + toString(bC)) + " from warehouse, but only ") + toString(bw)) + " available"))
297- else $Tuple8((at + 1), (bo._2 :+ toString((bw - bC))), bo._3, (bo._4 - bv), bo._5, bo._6, bo._7, bq)
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)
298531 }
299- else if ((0 > (bw + bs)))
300- then throw((((("Attempt to take " + toString(-(bs))) + " from warehouse, but only ") + toString(bw)) + " available"))
301- else $Tuple8((at + 1), (bo._2 :+ toString((bw + bs))), bo._3, (bo._4 - bv), (bo._5 - bA), bo._6, bo._7, bq)
532+ else if ((0 > (cY + cU)))
533+ 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)
302535 }
303536 }
304537 }
305538
306539
307-func bD (bE,bF,bG) = {
308- let bH = split(bE[x], "_")
309- let bI = split(bE[y], "_")
310- let bJ = if ((bE[z] == ""))
540+func df (dg,dh,di) = {
541+ let dj = split(dg[aa], "_")
542+ let dk = split(dg[ab], "_")
543+ let dl = if ((dg[ac] == ""))
311544 then nil
312- else split(bE[z], "_")
313- let bK = split(bF[aJ], "_")
314- let bL = split(bF[aK], "_")
315- let bM = if ((bF[aL] == ""))
545+ else split(dg[ac], "_")
546+ let dm = split(dh[cn], "_")
547+ let dn = split(dh[co], "_")
548+ let do = if ((dh[cp] == ""))
316549 then nil
317- else split(bF[aL], "_")
318- if ((size(bG) != 3))
550+ else split(dh[cp], "_")
551+ if ((size(di) != 3))
319552 then throw("newOrderStr should contain exactly 2 ':' separators")
320553 else {
321- let bN = split(bG[0], "_")
322- let bO = split(bG[1], "_")
323- let bP = if ((bG[2] == ""))
554+ let dp = split(di[0], "_")
555+ let dq = split(di[1], "_")
556+ let dr = if ((di[2] == ""))
324557 then nil
325- else split(bG[2], "_")
326- if ((size(bN) != k))
558+ else split(di[2], "_")
559+ if ((size(dp) != n))
327560 then throw("All 6 resources should be passed")
328- else if ((size(bO) != k))
561+ else if ((size(dq) != n))
329562 then throw("All 6 materials should be passed")
330563 else {
331- let bQ = {
332- let au = bN
333- let av = size(au)
334- let aw = $Tuple8(0, nil, 0, 0, 0, bH, bK, false)
335- func ax (ay,az) = if ((az >= av))
336- then ay
337- else bn(ay, au[az])
564+ let ds = {
565+ let bL = dp
566+ let bM = size(bL)
567+ let bN = $Tuple8(0, nil, 0, 0, 0, dj, dm, false)
568+ func bO (bP,bQ) = if ((bQ >= bM))
569+ then bP
570+ else cR(bP, bL[bQ])
338571
339- func aA (ay,az) = if ((az >= av))
340- then ay
572+ func bR (bP,bQ) = if ((bQ >= bM))
573+ then bP
341574 else throw("List size exceeds 6")
342575
343- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
576+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
344577 }
345- let bh = {
346- let au = bO
347- let av = size(au)
348- let aw = $Tuple8(0, nil, bQ._3, bQ._4, bQ._5, bI, bL, false)
349- func bR (ay,az) = if ((az >= av))
350- then ay
351- else bn(ay, au[az])
578+ let cL = {
579+ let bL = dq
580+ let bM = size(bL)
581+ let bN = $Tuple8(0, nil, ds._3, ds._4, ds._5, dk, dn, false)
582+ func bX (bP,bQ) = if ((bQ >= bM))
583+ then bP
584+ else cR(bP, bL[bQ])
352585
353- func bS (ay,az) = if ((az >= av))
354- then ay
586+ func bY (bP,bQ) = if ((bQ >= bM))
587+ then bP
355588 else throw("List size exceeds 6")
356589
357- bS(bR(bR(bR(bR(bR(bR(aw, 0), 1), 2), 3), 4), 5), 6)
590+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
358591 }
359- let aO = if ((size(bP) != 0))
592+ let cs = if ((size(dr) != 0))
360593 then {
361- let au = bP
362- let av = size(au)
363- let aw = $Tuple8(0, nil, bh._3, bh._4, bh._5, bJ, bM, true)
364- func bT (ay,az) = if ((az >= av))
365- then ay
366- else bn(ay, au[az])
594+ let bL = dr
595+ 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))
598+ then bP
599+ else cR(bP, bL[bQ])
367600
368- func bU (ay,az) = if ((az >= av))
369- then ay
601+ func du (bP,bQ) = if ((bQ >= bM))
602+ then bP
370603 else throw("List size exceeds 50")
371604
372- bU(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(aw, 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)
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)
373606 }
374- else $Tuple8(0, bJ, bh._3, bh._4, bh._5, bJ, bM, true)
375- $Tuple6(bQ._2, bh._2, aO._2, aO._3, aO._4, aO._5)
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)
376609 }
377610 }
378611 }
379612
380613
381-func bV (bo,bW) = {
382- let at = bo._7
383- let bq = bo._12
384- let aR = if (bq)
385- then parseIntValue(split(t[at], "_")[u])
614+func dv (bI,dw) = {
615+ let cd = bI._7
616+ let cS = bI._12
617+ let cv = if (cS)
618+ then parseIntValue(split(G[cd], "_")[T])
386619 else 0
387- let bX = split(bW, "@")
388- if ((size(bX) != 2))
620+ let dx = split(dw, "@")
621+ if ((size(dx) != 2))
389622 then throw("Incorrect order format, should be amount@price")
390623 else {
391- let bY = parseIntValue(bX[0])
392- let bZ = parseIntValue(bX[1])
393- if ((0 > bZ))
624+ let dy = parseIntValue(dx[0])
625+ let dz = parseIntValue(dx[1])
626+ if ((0 > dz))
394627 then throw("Price can't be negative")
395628 else {
396- let ca = fraction(bY, bZ, h)
397- let cb = if ((size(bo._8) > at))
398- then parseIntValue(bo._8[at])
629+ let dA = fraction(dy, dz, i)
630+ let dB = if ((size(bI._8) > cd))
631+ then parseIntValue(bI._8[cd])
399632 else 0
400- let bw = if ((size(bo._9) > at))
401- then parseIntValue(bo._9[at])
633+ let cY = if ((size(bI._9) > cd))
634+ then parseIntValue(bI._9[cd])
402635 else 0
403- let cc = if ((size(bo._10) > at))
404- then bo._10[at]
636+ let dC = if ((size(bI._10) > cd))
637+ then bI._10[cd]
405638 else "0@0"
406- let cd = split(cc, "@")
407- let ce = parseIntValue(cd[0])
408- let cf = parseIntValue(cd[1])
409- if (if ((bY != 0))
410- then (bZ != cf)
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)
411644 else false)
412- then throw(((((("Prices of " + bo._11[at]) + " don't match! WH price=") + toString(cf)) + ", your price=") + toString(bZ)))
645+ then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dF)) + ", your price=") + toString(dz)))
413646 else {
414- let cg = fraction(ce, cf, h)
415- let ch = aP(bY, aR, bq)
416- if ((bY == 0))
417- then $Tuple12((bo._1 :+ toString(bw)), (bo._2 :+ cc), (bo._3 :+ toString(cb)), bo._4, bo._5, bo._6, (bo._7 + 1), bo._8, bo._9, bo._10, bo._11, bq)
418- else if ((bY > 0))
419- then if ((0 > ce))
420- then if ((bY > -(ce)))
421- then throw(((((("Attempt to buy " + toString(bY)) + " of ") + bo._11[at]) + ", but warehouse only sells ") + toString(-(ce))))
422- else $Tuple12((bo._1 :+ toString(bw)), (bo._2 :+ ((toString((ce + bY)) + "@") + toString(cf))), (bo._3 :+ toString((cb + bY))), (bo._4 + ch), bo._5, (bo._6 + ca), (bo._7 + 1), bo._8, bo._9, bo._10, bo._11, bq)
423- else throw((("Attempt to buy " + bo._11[at]) + " while warehouse doesn't sell it"))
424- else if ((ce > 0))
425- then if ((-(bY) > ce))
426- then throw(((((("Attempt to sell " + toString(-(bY))) + " of ") + bo._11[at]) + ", but warehouse only buys ") + toString(ce)))
427- else if ((-(bY) > cb))
428- then throw(((((("Attempt to sell " + toString(-(bY))) + ", but you only have ") + toString(cb)) + " of ") + bo._11[at]))
429- else $Tuple12((bo._1 :+ toString((bw - bY))), (bo._2 :+ ((toString((ce + bY)) + "@") + toString(cf))), (bo._3 :+ toString((cb + bY))), (bo._4 - ch), (bo._5 - ca), bo._6, (bo._7 + 1), bo._8, bo._9, bo._10, bo._11, bq)
430- else throw((("Attempt to sell " + bo._11[at]) + " while warehouse doesn't buy it"))
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)
656+ 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)
663+ else throw((("Attempt to sell " + bI._11[cd]) + " while warehouse doesn't buy it"))
431664 }
432665 }
433666 }
434667 }
435668
436669
437-@Callable(ci)
438-func recalcLockedVolumeREADONLY (ah,cj) = {
439- let bF = aM(ag(ah))
440- let ck = bD(cj, bF, bF)
441- $Tuple2(nil, (ck._4 + ck._5))
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))
442675 }
443676
444677
445678
446-@Callable(ci)
447-func constructorV1 (cl) = if ((ci.caller != this))
679+@Callable(dI)
680+func constructorV1 (dL) = if ((dI.caller != this))
448681 then throw("Permission denied")
449- else [StringEntry(N(), cl)]
682+ else [StringEntry(ay(), dL)]
450683
451684
452685
453-@Callable(ci)
454-func sellResources (cm,cn) = {
455- let co = bm()
456- if ((co == co))
686+@Callable(dI)
687+func sellResources (dM,dN) = {
688+ let dO = cQ()
689+ if ((dO == dO))
457690 then {
458- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
459- if ((size(ci.payments) != 0))
691+ let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
692+ if ((size(dI.payments) != 0))
460693 then throw("sellResources doesn't require any payments")
461694 else {
462- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
463- if ((cp[ak] != "F"))
464- then throw(("Duck location type should be Factory, but is " + cp[ak]))
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]))
465698 else {
466- let aV = cp[al]
467- let cq = bk(ac(ad))
468- let cr = split(cq[F], "_")
469- func cs (bo,at) = if ((cm[at] > parseIntValue(cr[at])))
470- then throw(((((("You have " + cr[at]) + " of ") + p[at]) + ", but tried to sell ") + toString(cm[at])))
471- else if ((0 > cm[at]))
472- then throw(((("You tried to sell negative amount of " + p[at]) + ": ") + toString(cm[at])))
473- else if ((cm[at] > 0))
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))
474707 then {
475- let ct = aU(aV, at, cm[at], cn[at])
476- $Tuple3((bo._1 :+ ct._1), (bo._2 :+ toString((parseIntValue(cr[at]) - cm[at]))), (bo._3 + ct._2))
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))
477710 }
478- else $Tuple3(bo._1, (bo._2 :+ cr[at]), bo._3)
711+ else $Tuple3(bI._1, (bI._2 :+ dR[cd]), bI._3)
479712
480- let cu = {
481- let au = [0, 1, 2, 3, 4, 5]
482- let av = size(au)
483- let aw = $Tuple3(nil, nil, 0)
484- func ax (ay,az) = if ((az >= av))
485- then ay
486- else cs(ay, au[az])
713+ let dT = {
714+ let bL = [0, 1, 2, 3, 4, 5]
715+ let bM = size(bL)
716+ let bN = $Tuple3(nil, nil, 0)
717+ func bO (bP,bQ) = if ((bQ >= bM))
718+ then bP
719+ else bH(bP, bL[bQ])
487720
488- func aA (ay,az) = if ((az >= av))
489- then ay
721+ func bR (bP,bQ) = if ((bQ >= bM))
722+ then bP
490723 else throw("List size exceeds 6")
491724
492- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
725+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
493726 }
494- let cv = makeString([cq[E], makeString(cu._2, "_"), cq[G], cq[H]], ":")
495- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
496- $Tuple2((cu._1 :+ ScriptTransfer(ci.caller, cu._3, b)), cw)
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)
497730 }
498731 }
499732 }
500733 else throw("Strict value is not equal to itself.")
501734 }
502735
503736
504737
505-@Callable(ci)
506-func buyMaterials (cm,cx) = {
507- let co = bm()
508- if ((co == co))
738+@Callable(dI)
739+func buyMaterials (dM,dW) = {
740+ let dO = cQ()
741+ if ((dO == dO))
509742 then {
510- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
511- if ((size(ci.payments) != 1))
743+ let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
744+ if ((size(dI.payments) != 1))
512745 then throw("exactly 1 payment must be attached")
513746 else {
514- let cy = ci.payments[0]
515- let cz = cy.amount
516- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
517- if ((cA != b))
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))
518751 then throw("USDT payments only!")
519752 else {
520- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
521- if ((cp[ak] != "F"))
522- then throw(("Duck location type should be Factory, but is " + cp[ak]))
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]))
523756 else {
524- let aV = cp[al]
525- let cq = bk(ac(ad))
526- let cB = split(cq[G], "_")
527- func cC (bo,at) = if ((0 > cm[at]))
528- then throw(((("You tried to buy negative amount of " + q[at]) + ": ") + toString(cm[at])))
529- else if ((cm[at] > 0))
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))
530763 then {
531- let ct = bc(aV, at, cm[at], cx[at])
532- $Tuple3((bo._1 :+ ct._1), (bo._2 :+ toString((parseIntValue(cB[at]) + ct._3))), (bo._3 + ct._2))
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))
533766 }
534- else $Tuple3(bo._1, (bo._2 :+ cB[at]), bo._3)
767+ else $Tuple3(bI._1, (bI._2 :+ ea[cd]), bI._3)
535768
536- let cu = {
537- let au = [0, 1, 2, 3, 4, 5]
538- let av = size(au)
539- let aw = $Tuple3(nil, nil, 0)
540- func ax (ay,az) = if ((az >= av))
541- then ay
542- else cC(ay, au[az])
769+ let dT = {
770+ let bL = [0, 1, 2, 3, 4, 5]
771+ let bM = size(bL)
772+ let bN = $Tuple3(nil, nil, 0)
773+ func bO (bP,bQ) = if ((bQ >= bM))
774+ then bP
775+ else eb(bP, bL[bQ])
543776
544- func aA (ay,az) = if ((az >= av))
545- then ay
777+ func bR (bP,bQ) = if ((bQ >= bM))
778+ then bP
546779 else throw("List size exceeds 6")
547780
548- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
781+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
549782 }
550- if ((cu._3 > cz))
551- then throw(((("Insufficient payment! Attached=" + toString(cz)) + ", required=") + toString(cu._3)))
783+ if ((dT._3 > dY))
784+ then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
552785 else {
553- let cv = makeString([cq[E], cq[F], makeString(cu._2, "_"), cq[H]], ":")
554- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
555- let P = if (((cz - cu._3) > 0))
556- then [ScriptTransfer(ci.caller, (cz - cu._3), b)]
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)]
557790 else nil
558- let cD = (cu._3 / 100)
559- $Tuple2(((cu._1 ++ P) :+ ScriptTransfer(T, cD, b)), cw)
791+ let ec = (dT._3 / 100)
792+ $Tuple2(((dT._1 ++ aA) :+ ScriptTransfer(aE, ec, b)), dV)
560793 }
561794 }
562795 }
563796 }
564797 }
565798 else throw("Strict value is not equal to itself.")
566799 }
567800
568801
569802
570-@Callable(ci)
571-func exchangeResources (cm) = {
572- let co = bm()
573- if ((co == co))
803+@Callable(dI)
804+func exchangeResources (dM) = {
805+ let dO = cQ()
806+ if ((dO == dO))
574807 then {
575- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
576- if ((size(ci.payments) != 1))
808+ let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked")
809+ if ((size(dI.payments) != 1))
577810 then throw("exactly 1 payment must be attached")
578811 else {
579- let cy = ci.payments[0]
580- let cz = cy.amount
581- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
582- if ((cA != b))
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))
583816 then throw("USDT payments only!")
584817 else {
585- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
586- if ((cp[ak] != "F"))
587- then throw(("Duck location type should be Factory, but is " + cp[ak]))
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]))
588821 else {
589- let aV = cp[al]
590- let cq = bk(ac(ad))
591- let cr = split(cq[F], "_")
592- let cB = split(cq[G], "_")
593- func cE (bo,at) = {
594- let aX = aG(aV, at)
595- let aY = valueOrElse(getInteger(aX), 0)
596- let cF = cm[at]
597- if ((cF > parseIntValue(cr[at])))
598- then throw(((((("You have " + cr[at]) + " of ") + p[at]) + ", but tried to exchange ") + toString(cF)))
599- else if ((0 > cF))
600- then throw(((("You tried to exchange negative amount of " + p[at]) + ": ") + toString(cF)))
601- else if ((cF > 0))
602- then $Tuple4((bo._1 :+ toString((parseIntValue(cr[at]) - cF))), (bo._2 :+ toString((parseIntValue(cB[at]) + cF))), (bo._3 + fraction(cF, m, h)), (bo._4 :+ IntegerEntry(aX, aY)))
603- else $Tuple4((bo._1 :+ cr[at]), (bo._2 :+ cB[at]), bo._3, bo._4)
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) = {
827+ let cB = ck(cz, cd)
828+ 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)
604837 }
605838
606- let cu = {
607- let au = [0, 1, 2, 3, 4, 5]
608- let av = size(au)
609- let aw = $Tuple4(nil, nil, 0, nil)
610- func ax (ay,az) = if ((az >= av))
611- then ay
612- else cE(ay, au[az])
839+ let dT = {
840+ let bL = [0, 1, 2, 3, 4, 5]
841+ let bM = size(bL)
842+ let bN = $Tuple4(nil, nil, 0, nil)
843+ func bO (bP,bQ) = if ((bQ >= bM))
844+ then bP
845+ else ed(bP, bL[bQ])
613846
614- func aA (ay,az) = if ((az >= av))
615- then ay
847+ func bR (bP,bQ) = if ((bQ >= bM))
848+ then bP
616849 else throw("List size exceeds 6")
617850
618- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
851+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
619852 }
620- if ((cu._3 > cz))
621- then throw(((("Insufficient payment! Attached=" + toString(cz)) + ", required=") + toString(cu._3)))
853+ if ((dT._3 > dY))
854+ then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3)))
622855 else {
623- let cv = makeString([cq[E], makeString(cu._1, "_"), makeString(cu._2, "_"), cq[H]], ":")
624- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
625- let P = if (((cz - cu._3) > 0))
626- then [ScriptTransfer(ci.caller, (cz - cu._3), b)]
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)]
627860 else nil
628- let cD = (cu._3 / 100)
629- $Tuple2(((P ++ cu._4) :+ ScriptTransfer(T, cD, b)), cw)
861+ let ec = (dT._3 / 100)
862+ $Tuple2(((aA ++ dT._4) :+ ScriptTransfer(aE, ec, b)), dV)
630863 }
631864 }
632865 }
633866 }
634867 }
635868 else throw("Strict value is not equal to itself.")
636869 }
637870
638871
639872
640-@Callable(ci)
641-func craftGoods (cG,cH) = {
642- let co = bm()
643- if ((co == co))
644- then if ((size(ci.payments) != 1))
873+@Callable(dI)
874+func craftGoods (ef,eg) = {
875+ let dO = cQ()
876+ if ((dO == dO))
877+ then if ((size(dI.payments) != 1))
645878 then throw("exactly 1 payment must be attached")
646879 else {
647- let cy = ci.payments[0]
648- let cz = cy.amount
649- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
650- if ((cA != b))
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))
651884 then throw("USDT payments only!")
652- else if ((cz != f))
885+ else if ((dY != g))
653886 then throw("exactly 1 USDT must be attached as payment")
654- else if ((0 >= cH))
887+ else if ((0 >= eg))
655888 then throw("Quantity should be positive")
656889 else {
657- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
658- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
659- if ((cp[ak] != "M"))
660- then throw(("Duck location type should be Manufactory, but is " + cp[ak]))
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]))
661894 else {
662- let cI = cp[aj]
663- let cq = bk(ac(ad))
664- let cB = split(cq[G], "_")
665- if (if ((0 > cG))
895+ let eh = dP[bp]
896+ let dQ = cO(bf(bg))
897+ let ea = split(dQ[ak], "_")
898+ if (if ((0 > ef))
666899 then true
667- else (cG >= size(t)))
668- then throw(("Unknown product idx=" + toString(cG)))
900+ else (ef >= size(G)))
901+ then throw(("Unknown product idx=" + toString(ef)))
669902 else {
670- let aq = split(t[cG], "_")
671- if ((size(aq) != (k + 3)))
672- then throw(("Fatal: unknown recipe: " + t[cG]))
903+ let ca = split(G[ef], "_")
904+ if ((size(ca) != (n + 3)))
905+ then throw(("Fatal: unknown recipe: " + G[ef]))
673906 else {
674- let cJ = parseIntValue(aq[v])
675- if ((s[cJ] != cI))
676- then throw(((("This product is available in " + s[cJ]) + ", but you are in ") + cI))
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))
677910 else {
678- let cK = if ((cq[H] == ""))
911+ let ej = if ((dQ[al] == ""))
679912 then nil
680- else split(cq[H], "_")
681- func cL (bo,cM) = {
682- let cN = bo._2
683- let cO = if ((size(cK) > cN))
684- then cK[cN]
913+ else split(dQ[al], "_")
914+ func ek (bI,el) = {
915+ let bw = bI._2
916+ let em = if ((size(ej) > bw))
917+ then ej[bw]
685918 else "0"
686- let cP = parseIntValue(cO)
687- let aQ = (cH * parseIntValue(aq[u]))
688- let cQ = if ((cN == cG))
689- then toString((cP + aQ))
690- else cO
691- $Tuple2((bo._1 :+ cQ), (cN + 1))
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))
692925 }
693926
694- let cR = ( let au = t
695- let av = size(au)
696- let aw = $Tuple2(nil, 0)
697- func ax (ay,az) = if ((az >= av))
698- then ay
699- else cL(ay, au[az])
927+ let ep = ( let bL = G
928+ let bM = size(bL)
929+ let bN = $Tuple2(nil, 0)
930+ func bO (bP,bQ) = if ((bQ >= bM))
931+ then bP
932+ else ek(bP, bL[bQ])
700933
701- func aA (ay,az) = if ((az >= av))
702- then ay
934+ func bR (bP,bQ) = if ((bQ >= bM))
935+ then bP
703936 else throw("List size exceeds 50")
704937
705- aA(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(aw, 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
706- func cS (bo,at) = {
707- let cT = ((parseIntValue(aq[at]) * g) * cH)
708- let cU = parseIntValue(cB[at])
709- if ((cT > cU))
710- then throw(((((((("You have " + cB[at]) + " of ") + q[at]) + ", but recipe requires ") + toString(cT)) + " for quantity ") + toString(cH)))
711- else if ((cT > 0))
712- then (bo :+ toString((cU - cT)))
713- else (bo :+ cB[at])
938+ 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])
714947 }
715948
716- let cu = {
717- let au = [0, 1, 2, 3, 4, 5]
718- let av = size(au)
719- let aw = nil
720- func bR (ay,az) = if ((az >= av))
721- then ay
722- else cS(ay, au[az])
949+ let dT = {
950+ let bL = [0, 1, 2, 3, 4, 5]
951+ let bM = size(bL)
952+ let bN = nil
953+ func bX (bP,bQ) = if ((bQ >= bM))
954+ then bP
955+ else eq(bP, bL[bQ])
723956
724- func bS (ay,az) = if ((az >= av))
725- then ay
957+ func bY (bP,bQ) = if ((bQ >= bM))
958+ then bP
726959 else throw("List size exceeds 6")
727960
728- bS(bR(bR(bR(bR(bR(bR(aw, 0), 1), 2), 3), 4), 5), 6)
961+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
729962 }
730- let cv = makeString([cq[E], cq[F], makeString(cu, "_"), makeString(cR, "_")], ":")
731- let cw = am(invoke(U, "updateBackpack", [ad, cv], nil))
732- $Tuple2(nil, cw)
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)
733966 }
734967 }
735968 }
736969 }
737970 }
738971 }
739972 else throw("Strict value is not equal to itself.")
740973 }
741974
742975
743976
744-@Callable(ci)
745-func setWarehouseOrder (cV,ah) = {
746- let cW = ci.originCaller
747- let Z = toString(cW)
748- let cw = if ((cW != T))
749- then bm()
977+@Callable(dI)
978+func setWarehouseOrder (et,aW) = {
979+ let eu = dI.originCaller
980+ let aK = toString(eu)
981+ let dV = if ((eu != aE))
982+ then cQ()
750983 else false
751- let cX = value(assetInfo(fromBase58String(ah)))
752- if (!(isDefined(getInteger(U, X(ah)))))
753- then throw((("NFT " + cX.name) + " is not staked"))
984+ let bW = value(assetInfo(fromBase58String(aW)))
985+ if (!(isDefined(getInteger(aF, aO(aW)))))
986+ then throw((("NFT " + bW.name) + " is not staked"))
754987 else {
755- let cY = valueOrErrorMessage(getString(U, V(ah)), (("NFT " + cX.name) + " is orphaned"))
756- if (if ((cW != T))
757- then (cY != Z)
988+ let ev = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned"))
989+ if (if ((eu != aE))
990+ then (ev != aK)
758991 else false)
759- then throw((j + " is not yours"))
992+ then throw((k + " is not yours"))
760993 else {
761- let cZ = split_4C(cV, ":")
762- let cj = am(invoke(U, "getWarehouseREADONLY", [ah], nil))
763- let bE = split_4C(cj, ":")
764- let da = split(bE[A], "_")
765- let db = parseIntValue(da[C])
766- let dc = parseIntValue(da[D])
767- let aN = ag(ah)
768- let bF = aM(aN)
769- let ck = bD(bE, bF, cZ)
770- let dd = ck._4
771- let de = ck._5
772- let df = (dd + de)
773- let dg = ((dc - db) - df)
774- if ((0 > dg))
775- then throw((((("Attempt to reserve " + toString(dd)) + " space for buy orders, and ") + toString(de)) + " space for sell orders, leads to negative free space"))
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])
1000+ 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"))
7761009 else {
777- let dh = makeString_2C([bE[w], makeString(ck._1, "_"), makeString(ck._2, "_"), makeString(ck._3, "_"), toString(df)], ":")
778- let di = am(invoke(U, "saveWarehouse", [dh, ah], nil))
779- let dj = ck._6
780- let dk = if ((dj > 0))
781- then if ((size(ci.payments) != 1))
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))
7821015 then throw("exactly 1 payment must be attached")
7831016 else {
784- let cy = ci.payments[0]
785- let cz = cy.amount
786- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
787- if ((cA != b))
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))
7881021 then throw("USDT payments only!")
789- else if ((cz != dj))
790- then throw(("Payment needed is " + toString(dj)))
791- else [StringEntry(aN, cV)]
1022+ else if ((dY != eG))
1023+ then throw(("Payment needed is " + toString(eG)))
1024+ else [StringEntry(cr, et)]
7921025 }
793- else if ((dj == 0))
794- then if ((size(ci.payments) != 0))
1026+ else if ((eG == 0))
1027+ then if ((size(dI.payments) != 0))
7951028 then throw("No payments needed")
796- else [StringEntry(aN, cV)]
797- else if ((size(ci.payments) != 0))
1029+ else [StringEntry(cr, et)]
1030+ else if ((size(dI.payments) != 0))
7981031 then throw("No payments needed")
799- else [ScriptTransfer(addressFromStringValue(cY), -(dj), b), StringEntry(aN, cV)]
800- $Tuple2(dk, $Tuple2(cw, di))
1032+ else [ScriptTransfer(addressFromStringValue(ev), -(eG), b), StringEntry(cr, et)]
1033+ $Tuple2(eH, $Tuple2(dV, eF))
8011034 }
8021035 }
8031036 }
8041037 }
8051038
8061039
8071040
808-@Callable(ci)
809-func acceptWarehouseOrder (dl,ah,ad) = {
810- let co = bm()
811- let dm = ci.originCaller
812- let dn = toString(dm)
813- let do = valueOrErrorMessage(getString(U, aa(dn)), "You don't have a duck staked")
814- let cp = valueOrElse(getString(U, ae(do)), l)
815- let dp = split(value(cp), "_")
816- if ((dp[ak] != "L"))
817- then throw((("Duck location type is " + dp[ak]) + ", but should be L"))
818- else if ((do != ad))
819- then throw(((("Your staked duck is " + do) + ", but passed ") + ad))
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))
8201053 else {
821- let dq = value(assetInfo(fromBase58String(ah)))
822- if (!(isDefined(getInteger(U, X(ah)))))
823- then throw((("NFT " + dq.name) + " is not staked"))
1054+ let eN = value(assetInfo(fromBase58String(aW)))
1055+ if (!(isDefined(getInteger(aF, aO(aW)))))
1056+ then throw((("NFT " + eN.name) + " is not staked"))
8241057 else {
825- let dr = valueOrErrorMessage(getString(U, V(ah)), (("NFT " + dq.name) + " is orphaned"))
826- if ((dr == dn))
1058+ let eO = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eN.name) + " is orphaned"))
1059+ if ((eO == eK))
8271060 then throw("You cannot trade with yourself")
8281061 else {
829- let ds = split_4C(dl, ":")
830- if ((size(ds) != 3))
1062+ let eP = split_4C(eI, ":")
1063+ if ((size(eP) != 3))
8311064 then throw("bpOrderStr should contain exactly 2 ':' separators")
8321065 else {
833- let dt = split(ds[0], "_")
834- let du = split(ds[1], "_")
835- let dv = if ((ds[2] == ""))
1066+ let eQ = split(eP[0], "_")
1067+ let eR = split(eP[1], "_")
1068+ let eS = if ((eP[2] == ""))
8361069 then nil
837- else split(ds[2], "_")
838- if ((size(dt) != k))
1070+ else split(eP[2], "_")
1071+ if ((size(eQ) != n))
8391072 then throw("All 6 resources should be passed")
840- else if ((size(du) != k))
1073+ else if ((size(eR) != n))
8411074 then throw("All 6 materials should be passed")
8421075 else {
843- let cj = am(invoke(U, "getWarehouseREADONLY", [ah], nil))
844- let bE = split_4C(cj, ":")
845- let bH = split(bE[x], "_")
846- let bI = split(bE[y], "_")
847- let bJ = if ((bE[z] == ""))
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] == ""))
8481081 then nil
849- else split(bE[z], "_")
850- let dw = parseIntValue(split(bE[A], "_")[B])
851- let bl = ac(ad)
852- let cq = bk(bl)
853- let dx = split(cq[F], "_")
854- let dy = split(cq[G], "_")
855- let dz = if ((cq[H] == ""))
1082+ else split(dg[ac], "_")
1083+ let eT = parseIntValue(split(dg[ad], "_")[ae])
1084+ 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] == ""))
8561089 then nil
857- else split(cq[H], "_")
858- let aN = ag(ah)
859- let dA = aM(aN)
860- let dB = split(dA[aJ], "_")
861- let dC = split(dA[aK], "_")
862- let dD = if ((dA[aL] == ""))
1090+ else split(dQ[al], "_")
1091+ 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] == ""))
8631096 then nil
864- else split(dA[aL], "_")
865- let bQ = {
866- let au = dt
867- let av = size(au)
868- let aw = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dx, bH, dB, p, false)
869- func ax (ay,az) = if ((az >= av))
870- then ay
871- else bV(ay, au[az])
1097+ else split(eX[cp], "_")
1098+ let ds = {
1099+ let bL = eQ
1100+ let bM = size(bL)
1101+ let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eU, dj, eY, C, false)
1102+ func bO (bP,bQ) = if ((bQ >= bM))
1103+ then bP
1104+ else dv(bP, bL[bQ])
8721105
873- func aA (ay,az) = if ((az >= av))
874- then ay
1106+ func bR (bP,bQ) = if ((bQ >= bM))
1107+ then bP
8751108 else throw("List size exceeds 6")
8761109
877- aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6)
1110+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
8781111 }
879- let bh = {
880- let au = du
881- let av = size(au)
882- let aw = $Tuple12(nil, nil, nil, bQ._4, bQ._5, bQ._6, 0, dy, bI, dC, q, false)
883- func bR (ay,az) = if ((az >= av))
884- then ay
885- else bV(ay, au[az])
1112+ let cL = {
1113+ let bL = eR
1114+ let bM = size(bL)
1115+ let bN = $Tuple12(nil, nil, nil, ds._4, ds._5, ds._6, 0, eV, dk, eZ, D, false)
1116+ func bX (bP,bQ) = if ((bQ >= bM))
1117+ then bP
1118+ else dv(bP, bL[bQ])
8861119
887- func bS (ay,az) = if ((az >= av))
888- then ay
1120+ func bY (bP,bQ) = if ((bQ >= bM))
1121+ then bP
8891122 else throw("List size exceeds 6")
8901123
891- bS(bR(bR(bR(bR(bR(bR(aw, 0), 1), 2), 3), 4), 5), 6)
1124+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
8921125 }
893- let aO = if ((size(dv) != 0))
1126+ let cs = if ((size(eS) != 0))
8941127 then {
895- let au = dv
896- let av = size(au)
897- let aw = $Tuple12(nil, nil, nil, bh._4, bh._5, bh._6, 0, dz, bJ, dD, r, true)
898- func bT (ay,az) = if ((az >= av))
899- then ay
900- else bV(ay, au[az])
1128+ let bL = eS
1129+ let bM = size(bL)
1130+ let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true)
1131+ func dt (bP,bQ) = if ((bQ >= bM))
1132+ then bP
1133+ else dv(bP, bL[bQ])
9011134
902- func bU (ay,az) = if ((az >= av))
903- then ay
1135+ func du (bP,bQ) = if ((bQ >= bM))
1136+ then bP
9041137 else throw("List size exceeds 50")
9051138
906- bU(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(bT(aw, 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)
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)
9071140 }
908- else $Tuple12(bJ, dD, dz, bh._4, bh._5, bh._6, 0, dz, bJ, dD, r, true)
909- let dE = aO._4
910- let dF = if ((0 > (dw - dE)))
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)))
9111144 then 0
912- else (dw - dE)
913- let dh = makeString_2C([bE[w], makeString(bQ._1, "_"), makeString(bh._1, "_"), makeString(aO._1, "_"), toString(dF)], ":")
914- let dG = makeString_2C([makeString(bQ._2, "_"), makeString(bh._2, "_"), makeString(aO._2, "_")], ":")
915- let dH = makeString_2C([cq[E], makeString(bQ._3, "_"), makeString(bh._3, "_"), makeString(aO._3, "_")], ":")
916- let di = am(invoke(U, "saveWarehouse", [dh, ah], nil))
917- let dI = am(invoke(U, "updateBackpack", [ad, dH], nil))
918- let dk = [StringEntry(aN, dG)]
919- let dJ = aO._5
920- let dK = if ((dJ > 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))
9211154 then {
922- let dL = fraction(aO._5, aE, f)
923- let dM = Y(dn)
924- let dN = getString(U, dM)
925- if (isDefined(dN))
926- then (((dk :+ ScriptTransfer(dm, (aO._5 - (3 * dL)), b)) :+ ScriptTransfer(T, dL, b)) :+ ScriptTransfer(addressFromStringValue(value(dN)), dL, b))
927- else ((dk :+ ScriptTransfer(dm, (aO._5 - (3 * dL)), b)) :+ ScriptTransfer(T, dL, b))
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))
9281161 }
929- else dk
930- let dO = aO._6
931- let dP = if ((dO > 0))
932- then if ((size(ci.payments) != 1))
1162+ else eH
1163+ let fl = cs._6
1164+ let fm = if ((fl > 0))
1165+ then if ((size(dI.payments) != 1))
9331166 then throw("exactly 1 payment must be attached")
9341167 else {
935- let cy = ci.payments[0]
936- let cz = cy.amount
937- let cA = valueOrErrorMessage(cy.assetId, "WAVES can't be used as payment")
938- if ((cA != b))
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))
9391172 then throw("USDT payments only!")
940- else if ((cz != dO))
941- then throw(("Payment needed is " + toString(dO)))
942- else if ((aF > cz))
943- then throw(("Payment should be at least " + toString(aF)))
1173+ else if ((dY != fl))
1174+ then throw(("Payment needed is " + toString(fl)))
1175+ else if ((cj > dY))
1176+ then throw(("Payment should be at least " + toString(cj)))
9441177 else {
945- let dQ = fraction(aO._6, aE, f)
946- let dM = Y(dr)
947- let dN = getString(U, dM)
948- if (isDefined(dN))
949- then (((dK :+ ScriptTransfer(addressFromStringValue(dr), (aO._6 - (3 * dQ)), b)) :+ ScriptTransfer(T, dQ, b)) :+ ScriptTransfer(addressFromStringValue(value(dN)), dQ, b))
950- else ((dK :+ ScriptTransfer(addressFromStringValue(dr), (aO._6 - (3 * dQ)), b)) :+ ScriptTransfer(T, dQ, b))
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))
9511184 }
9521185 }
953- else if ((size(ci.payments) != 0))
1186+ else if ((size(dI.payments) != 0))
9541187 then throw("No payments needed")
955- else dK
956- $Tuple2(dP, $Tuple3(co, di, dI))
1188+ else fh
1189+ $Tuple2(fm, $Tuple3(dO, eF, ff))
9571190 }
9581191 }
9591192 }
9601193 }
9611194 }
9621195 }
9631196
9641197
9651198
966-@Callable(ci)
967-func sellProductsToES (cm) = {
968- let co = bm()
969- if ((co == co))
970- then if ((size(ci.payments) != 0))
1199+@Callable(dI)
1200+func sellProductsToES (dM) = {
1201+ let dO = cQ()
1202+ if ((dO == dO))
1203+ then if ((size(dI.payments) != 0))
9711204 then throw("No payments needed")
9721205 else {
973- let ad = valueOrErrorMessage(getString(U, aa(toString(ci.caller))), "You don't have a duck staked")
974- let cp = split(valueOrElse(getString(U, ae(ad)), l), "_")
975- if ((cp[ak] != "A"))
976- then throw(("Duck location type should be Airport, but is " + cp[ak]))
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]))
9771210 else {
978- let cq = bk(ac(ad))
979- let cK = if ((cq[H] == ""))
1211+ let dQ = cO(bf(bg))
1212+ let ej = if ((dQ[al] == ""))
9801213 then nil
981- else split(cq[H], "_")
982- let dR = ai()
983- let dS = getString(dR)
984- let dT = if (isDefined(dS))
985- then split(value(dS), "_")
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), "_")
9861219 else nil
987- func dU (bo,dV) = {
988- let at = bo._1
989- let cH = if ((size(cm) > at))
990- then cm[at]
1220+ func fr (bI,fs) = {
1221+ let cd = bI._1
1222+ let eg = if ((size(dM) > cd))
1223+ then dM[cd]
9911224 else 0
992- if ((0 > cH))
1225+ if ((0 > eg))
9931226 then throw("Quantity cannot be negative")
9941227 else {
995- let aq = split(dV, "_")
996- if ((size(aq) != (k + 3)))
997- then throw(("Fatal: unknown recipe: " + dV))
1228+ let ca = split(fs, "_")
1229+ if ((size(ca) != (n + 3)))
1230+ then throw(("Fatal: unknown recipe: " + fs))
9981231 else {
999- let dW = parseIntValue(aq[u])
1000- let dX = (n * dW)
1001- let dY = if ((size(dT) > at))
1002- then parseIntValue(dT[at])
1232+ let ft = parseIntValue(ca[T])
1233+ let fu = (y * ft)
1234+ let fv = if ((size(fq) > cd))
1235+ then parseIntValue(fq[cd])
10031236 else 0
1004- let dZ = (dX - dY)
1005- if ((cH > dZ))
1006- then throw(((("Warehouse can buy only " + toString(dZ)) + " of ") + r[at]))
1237+ let fw = (fu - fv)
1238+ if ((eg > fw))
1239+ then throw(((("Warehouse can buy only " + toString(fw)) + " of ") + E[cd]))
10071240 else {
1008- let ea = ap(aq)
1009- let eb = fraction((ea * o), m, (10 * dW))
1010- let ec = if ((size(cK) > at))
1011- then parseIntValue(cK[at])
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])
10121245 else 0
1013- if ((cH > ec))
1014- then throw(((("You have only " + toString(ec)) + " of ") + r[at]))
1015- else $Tuple4((at + 1), (bo._2 + (eb * cH)), (bo._3 :+ toString((ec - cH))), (bo._4 :+ toString((dY + cH))))
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))))
10161249 }
10171250 }
10181251 }
10191252 }
10201253
1021- let cu = {
1022- let au = t
1023- let av = size(au)
1024- let aw = $Tuple4(0, 0, nil, nil)
1025- func ax (ay,az) = if ((az >= av))
1026- then ay
1027- else dU(ay, au[az])
1254+ let dT = {
1255+ let bL = G
1256+ let bM = size(bL)
1257+ let bN = $Tuple4(0, 0, nil, nil)
1258+ func bO (bP,bQ) = if ((bQ >= bM))
1259+ then bP
1260+ else fr(bP, bL[bQ])
10281261
1029- func aA (ay,az) = if ((az >= av))
1030- then ay
1262+ func bR (bP,bQ) = if ((bQ >= bM))
1263+ then bP
10311264 else throw("List size exceeds 50")
10321265
1033- aA(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(ax(aw, 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)
1266+ 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)
10341267 }
1035- let dH = makeString_2C([cq[E], cq[F], cq[G], makeString(cu._3, "_")], ":")
1036- let dI = am(invoke(U, "updateBackpack", [ad, dH], nil))
1037- $Tuple2([StringEntry(dR, makeString(cu._4, "_")), ScriptTransfer(ci.caller, cu._2, b)], dI)
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)
10381271 }
10391272 }
10401273 else throw("Strict value is not equal to itself.")
10411274 }
10421275
10431276
10441277
1045-@Callable(ci)
1046-func updateEsStorage (ed) = if ((ci.caller != U))
1278+@Callable(dI)
1279+func updateEsStorage (fA) = if ((dI.caller != aF))
10471280 then throw("Permission denied")
1048- else $Tuple2([StringEntry(ai(), ed)], ed)
1281+ else $Tuple2([StringEntry(bo(), fA)], fA)
10491282
10501283

github/deemru/w8io/169f3d6 
827.54 ms