tx · BFw3GrsqHpjMPjbPA57ur63We2yEsy1UiRaAmeg1vjW2

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03200000 Waves

2023.05.28 15:42 [2597837] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "BFw3GrsqHpjMPjbPA57ur63We2yEsy1UiRaAmeg1vjW2", "fee": 3200000, "feeAssetId": null, "timestamp": 1685277779525, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "pGe1mbZukpHxBWHSxnF23E7XWNPo3AozP7WPUVDDEQxBkpt4aLUtmSALQMkkhj7HRqAjmcnPtTftX7MkSAixGgF" ], "script": "base64:BgIrCAISAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICFYAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKTUlOUEFZTUVOVACQTgAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sADFdITVVMVElQTElFUgCAyK+gJQAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICDUZpcnN0IEFpZCBLaXQJAMwIAgIIQmFja3BhY2sJAMwIAgILRm9vZCBSYXRpb24JAMwIAgIISmV0IFBhY2sJAMwIAgIGU2hpZWxkBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAD2NvbnRJZHhBbWVyaWNhcwAAAA1jb250SWR4RXVyb3BlAAEAC2NvbnRJZHhBc2lhAAIADWNvbnRJZHhBZnJpY2EAAwAOY29udElkeE9jZWFuaWEABAANcmVjaXBlSWR4RnVlbAAAAA5yZWNpcGVJZHhNZXRhbAABAA5yZWNpcGVJZHhQbGFuawACAA5yZWNpcGVJZHhHbGFzcwADABByZWNpcGVJZHhQbGFzdGljAAQAEHJlY2lwZUlkeFByb3RlaW4ABQAPcmVjaXBlSWR4V2VpZ2h0AAYAEXJlY2lwZUlkeFBhY2tzaXplAAcAEnJlY2lwZUlkeENvbnRpbmVudAAIAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAId2hJZHhWb2wAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMADndoSWR4TG9ja2VkVm9sAAQACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBCGdldE9yZGVyAQZvcmRLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZvcmRLZXkCMDBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOjBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOgIBOgkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeFJlcwIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhNYXQCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIJAJEDAgUBcAUKb3JkSWR4UHJvZAUDbmlsAQh0b1ZvbHVtZQMGYW1vdW50B3BrZ1NpemUJaXNQcm9kdWN0AwUJaXNQcm9kdWN0BARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgFBmFtb3VudAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARtnZXRXYXJlaG91c2VDdXJyR29vZHNWb2x1bWUBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QDCQAAAgUFZ29vZHMCAAAACgEDc3VtAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBAdwa2dTaXplCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFA2lkeAIBXwURcmVjaXBlSWR4UGFja3NpemUJAJQKAgkAZAIFA2lkeAABCQBkAggFA2FjYwJfMgkBCHRvVm9sdW1lAwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQdwa2dTaXplBggKAAIkbAkAvAkCBQVnb29kcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA3N1bQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yAQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkdFJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZHRSZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2R0UmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2R0UmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQJ3MAkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEJc2V0Q29tbW9uAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQGaXNQcm9kCAUDYWNjAl83BAdwa2dTaXplAwUGaXNQcm9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FEXJlY2lwZUlkeFBhY2tzaXplAAAECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FB3BrZ1NpemUFBmlzUHJvZAQGd2hJbml0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfNQUBagQLY3VyT3JkUGFydHMJALUJAgkAkQMCCAUDYWNjAl82BQFqAgFABAhjdXJPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAAECGN1ck9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAQMDCQBmAgAABQhjdXJPcmRQcgYJAGYCAAAFCG5ld09yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECWN1ck9yZFVzZAkAawMFCGN1ck9yZEFtBQhjdXJPcmRQcgUFTVVMVDgECWN1ck9yZFZvbAkBCHRvVm9sdW1lAwUIY3VyT3JkQW0FB3BrZ1NpemUFBmlzUHJvZAMJAAACBQhuZXdPcmRBbQAAAwkAZgIFCGN1ck9yZEFtAAAJAJkKBwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAkAZQIIBQNhY2MCXzMFCWN1ck9yZFZvbAkAZQIIBQNhY2MCXzQFCWN1ck9yZFVzZAgFA2FjYwJfNQgFA2FjYwJfNgUGaXNQcm9kCQCZCgcJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQkAZAIIBQNhY2MCXzMFCWN1ck9yZFZvbAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgUGaXNQcm9kAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAmQoHCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sBQljdXJPcmRWb2wJAGQCCAUDYWNjAl80BQluZXdPcmRVc2QIBQNhY2MCXzUIBQNhY2MCXzYFBmlzUHJvZAkAmQoHCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CQBlAgkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAUJY3VyT3JkVm9sCQBlAgkAZAIIBQNhY2MCXzQFCW5ld09yZFVzZAUJY3VyT3JkVXNkCAUDYWNjAl81CAUDYWNjAl82BQZpc1Byb2QDCQBmAgAABQhjdXJPcmRBbQQGYW1EaWZmCQBlAgUIY3VyT3JkQW0FCG5ld09yZEFtAwkAZgIAAAkAZQIFBndoSW5pdAUGYW1EaWZmCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEFBmFtRGlmZgIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCZCgcJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQZhbURpZmYJAGUCCQBkAggFA2FjYwJfMwUJY3VyT3JkVm9sBQluZXdPcmRWb2wIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYFBmlzUHJvZAMJAGYCAAAJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAmQoHCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAGUCCQBlAggFA2FjYwJfMwUJbmV3T3JkVm9sBQljdXJPcmRWb2wJAGUCCAUDYWNjAl80BQljdXJPcmRVc2QIBQNhY2MCXzUIBQNhY2MCXzYFBmlzUHJvZAEMYWNjZXB0Q29tbW9uAgNhY2MJYnBPcmRJdGVtBAFqCAUDYWNjAl83BAZpc1Byb2QIBQNhY2MDXzEyBAdwa2dTaXplAwUGaXNQcm9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FEXJlY2lwZUlkeFBhY2tzaXplAAAECmJwT3JkUGFydHMJALUJAgUJYnBPcmRJdGVtAgFAAwkBAiE9AgkAkAMBBQpicE9yZFBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAdicE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYnBPcmRQYXJ0cwAABAdicE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYnBPcmRQYXJ0cwABAwkAZgIAAAUHYnBPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAhicE9yZFVzZAkAawMFB2JwT3JkQW0FB2JwT3JkUHIFBU1VTFQ4BAZicEluaXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqBAZ3aEluaXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqBAp3aE9yZFBhcnRzCQC1CQIJAJEDAggFA2FjYwNfMTAFAWoCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkCQBrAwUHd2hPcmRBbQUHd2hPcmRQcgUFTVVMVDgECGRlbHRhVm9sCQEIdG9Wb2x1bWUDBQdicE9yZEFtBQdwa2dTaXplBQZpc1Byb2QDCQAAAgUHYnBPcmRBbQAACQCdCgsJAM0IAggFA2FjYwJfMQkApAMBBQZ3aEluaXQJAM0IAggFA2FjYwJfMgkAkQMCCAUDYWNjA18xMAUBagkAzQgCCAUDYWNjAl8zCQCkAwEFBmJwSW5pdAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExAwkAZgIFB2JwT3JkQW0AAAMJAGYCAAAFB3doT3JkQW0DCQBmAgUHYnBPcmRBbQkBAS0BBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkApAMBBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhssIGJ1dCB3YXJlaG91c2Ugb25seSBzZWxscyAJAKQDAQkBAS0BBQd3aE9yZEFtCQCdCgsJAM0IAggFA2FjYwJfMQkApAMBBQZ3aEluaXQJAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAgFA2FjYwJfNQkAZAIIBQNhY2MCXzYFCGJwT3JkVXNkCQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEJAAIBCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCRAwIIBQNhY2MDXzExBQFqAiAgd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3Qgc2VsbCBpdAMJAGYCBQd3aE9yZEFtAAADCQBmAgkBAS0BBQdicE9yZEFtBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhosIGJ1dCB3YXJlaG91c2Ugb25seSBidXlzIAkApAMBBQd3aE9yZEFtAwkAZgIJAQEtAQUHYnBPcmRBbQUGYnBJbml0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAhQsIGJ1dCB5b3Ugb25seSBoYXZlIAkApAMBBQZicEluaXQCBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoJAJ0KCwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQZ3aEluaXQFB2JwT3JkQW0JAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGUCCAUDYWNjAl80BQhkZWx0YVZvbAkAZQIIBQNhY2MCXzUFCGJwT3JkVXNkCAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEJAAIBCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkAkQMCCAUDYWNjA18xMQUBagIfIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IGJ1eSBpdAcBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBDXNlbGxSZXNvdXJjZXMCB2Ftb3VudHMJbWluUHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8KAQVhZGRlcgIDYWNjAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAJEDAgUHcmVzTGlzdAUBagIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIULCBidXQgdHJpZWQgdG8gc2VsbCAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIlWW91IHRyaWVkIHRvIHNlbGwgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQEMc2VsbEludGVybmFsBAUFbG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltaW5QcmljZXMFAWoJAJUKAwkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAkQMCBQdhbW91bnRzBQFqCQBkAggFA2FjYwJfMwgFAWICXzIJAJUKAwgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yCQCRAwIFB3Jlc0xpc3QFAWoIBQNhY2MCXzMEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQZtZXJnZWQCXzICAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsCQCUCgIJAM0IAggFBm1lcmdlZAJfMQkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGJ1eU1hdGVyaWFscwIHYW1vdW50cwltYXhQcmljZXMEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfCgEIbVVwZGF0ZXICA2FjYwFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIkWW91IHRyaWVkIHRvIGJ1eSBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCG1hdFR5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQtidXlJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWF4UHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoIBQFiAl8zCQBkAggFA2FjYwJfMwgFAWICXzIJAJUKAwgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCG1VcGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwkAZgIIBQZtZXJnZWQCXzMFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAKQDAQUDYW10AgssIHJlcXVpcmVkPQkApAMBCAUGbWVyZ2VkAl8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIIBQZtZXJnZWQCXzICAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQIBQZtZXJnZWQCXzMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQIBQZtZXJnZWQCXzMFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIIBQZtZXJnZWQCXzMAZAkAlAoCCQDNCAIJAM4IAggFBm1lcmdlZAJfMQUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWV4Y2hhbmdlUmVzb3VyY2VzAQdhbW91bnRzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCWV4Y2hhbmdlcgIDYWNjAWoEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFAWoEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEA2FtagkAkQMCBQdhbW91bnRzBQFqAwkAZgIFA2FtagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCGCwgYnV0IHRyaWVkIHRvIGV4Y2hhbmdlIAkApAMBBQNhbWoDCQBmAgAABQNhbWoJAAIBCQCsAgIJAKwCAgkArAICAilZb3UgdHJpZWQgdG8gZXhjaGFuZ2UgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQUDYW1qAwkAZgIFA2FtagAACQCWCgQJAM0IAggFA2FjYwJfMQkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoFA2FtagkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBagUDYW1qCQBkAggFA2FjYwJfMwkAawMFA2FtagUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgJAM0IAggFA2FjYwJfNAkBDEludGVnZXJFbnRyeQIFBXdoS2V5BQJ3MAkAlgoECQDNCAIIBQNhY2MCXzEJAJEDAgUHcmVzTGlzdAUBagkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMIBQNhY2MCXzQEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZXhjaGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwkAZgIIBQZtZXJnZWQCXzMFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAKQDAQUDYW10AgssIHJlcXVpcmVkPQkApAMBCAUGbWVyZ2VkAl8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQZtZXJnZWQCXzECAV8JAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIFBHJlc3QIBQZtZXJnZWQCXzQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQkAZAIFBk5VTVJFUwADCQACAQkArAICAhdGYXRhbDogdW5rbm93biByZWNpcGU6IAkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4BA5wcm9kdWN0Q29udElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUScmVjaXBlSWR4Q29udGluZW50AwkBAiE9AgkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAUEY29udAkAAgEJAKwCAgkArAICCQCsAgICHVRoaXMgcHJvZHVjdCBpcyBhdmFpbGFibGUgaW4gCQCRAwIFCmNvbnRpbmVudHMFDnByb2R1Y3RDb250SWR4AhEsIGJ1dCB5b3UgYXJlIGluIAUEY29udAQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQZmaWxsZXICA2FjYwtpZ25vcmVkSXRlbQQBbggFA2FjYwJfMgQCeHMDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkAkQMCBQhwcm9kTGlzdAUBbgIBMAQBeAkBDXBhcnNlSW50VmFsdWUBBQJ4cwQGYW1vdW50CQBoAgUIcXVhbnRpdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEXJlY2lwZUlkeFBhY2tzaXplBAF5AwkAAAIFAW4FCnByb2R1Y3RJZHgJAKQDAQkA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Z29MaXN0U3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBAV3aFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFCHdoSWR4Vm9sBAZvcmRLZXkJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkEDWN1cnJlbnRPcmRSZXMJALUJAgkAkQMCBQpjdXJyZW50T3JkBQlvcmRJZHhSZXMCAV8EDWN1cnJlbnRPcmRNYXQJALUJAgkAkQMCBQpjdXJyZW50T3JkBQlvcmRJZHhNYXQCAV8EDmN1cnJlbnRPcmRQcm9kAwkAAAIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgFfBA11c2R0TmVlZDJMb2NrAAAEAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCZCgcAAAUDbmlsAAAAAAUJY3VycldoUmVzBQ1jdXJyZW50T3JkUmVzBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc2V0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAA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ZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQh1c2RTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFCHVzZFNhbGRvCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwDCQAAAgUIdXNkU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFDGNhcmdvTGlzdFN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFDGNhcmdvTGlzdFN0cgUDbmlsCQCUCgIFB2FjdGlvbnMFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cgtsYW5kQXNzZXRJZAtkdWNrQXNzZXRJZAQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBBFzdGFrZWREdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUKY2FsbGVyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQURc3Rha2VkRHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgURc3Rha2VkRHVja0Fzc2V0SWQFC2R1Y2tBc3NldElkCQACAQkArAICCQCsAgIJAKwCAgIUWW91ciBzdGFrZWQgZHVjayBpcyAFEXN0YWtlZER1Y2tBc3NldElkAg0sIGJ1dCBwYXNzZWQgBQtkdWNrQXNzZXRJZAQJbGFuZEFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAlsYW5kT3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkAAAIFCWxhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyZW50V2gFDndoSWR4TG9ja2VkVm9sBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQEBXdoT3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkECHdoT3JkUmVzCQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeFJlcwIB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Vm9sBQh2b2xTYWxkbwAACQBlAgUPY3VycldoTG9ja2VkVm9sBQh2b2xTYWxkbwQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhWb2wJAMwIAgkAuQkCCAUBcgJfMQIBXwkAzAgCCQC5CQIIBQFtAl8xAgFfCQDMCAIJALkJAggFAXACXzECAV8JAMwIAgkApAMBBQxuZXdMb2NrZWRWb2wFA25pbAIBOgQLbmV3V2hPcmRTdHIJALoJAgkAzAgCCQC5CQIIBQFyAl8yAgFfCQDMCAIJALkJAggFAW0CXzICAV8JAMwIAgkAuQkCCAUBcAJfMgIBXwUDbmlsAgE6BAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUBcgJfMwIBXwkAzAgCCQC5CQIIBQFtAl8zAgFfCQDMCAIJALkJAggFAXACXzMCAV8FA25pbAIBOgQGd2hTYXZlCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUGd2hTYXZlBQZ3aFNhdmUEBmJwU2F2ZQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAMJAAACBQZicFNhdmUFBmJwU2F2ZQQHYWN0aW9ucwkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld1doT3JkU3RyBQNuaWwEDXVzZFdoMkJwU2FsZG8IBQFwAl81BAhhY3Rpb25zMQMJAGYCBQ11c2RXaDJCcFNhbGRvAAAEC3VzZFdoMkJwRmVlCQBrAwgFAXACXzUFCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCmNhbGxlckFkZHIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAM0IAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIIBQFwAl81CQBoAgADBQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAggFAXACXzUJAGgCAAMFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFB2FjdGlvbnMEDXVzZEJwMldoU2FsZG8IBQFwAl82AwkAZgIFDXVzZEJwMldoU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQ11c2RCcDJXaFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUNdXNkQnAyV2hTYWxkbwMJAGYCBQ5NSU5TSE9QUEFZTUVOVAUDYW10CQACAQkArAICAhtQYXltZW50IHNob3VsZCBiZSBhdCBsZWFzdCAJAKQDAQUOTUlOU0hPUFBBWU1FTlQEC3VzZEJwMldoRmVlCQBrAwgFAXACXzYFCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCWxhbmRPd25lcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzQgCCQDNCAIJAM0IAgUIYWN0aW9uczEJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWxhbmRPd25lcgkAZQIIBQFwAl82CQBoAgADBQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQDNCAIJAM0IAgUIYWN0aW9uczEJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWxhbmRPd25lcgkAZQIIBQFwAl82CQBoAgADBQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBQhhY3Rpb25zMQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAmJo4a", "height": 2597837, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GFTGUCahAmALQBRV8K1MaokuD6f2jUHs51CXC35oECyD Next: FNoUAhR4Jd6Cws7YJJBDr7LWhpyYMhcU75PUQFudZJ6X Diff:
OldNewDifferences
201201 }
202202
203203
204-func aQ (aR) = {
205- let aS = split(aR, "_")
206- ((J * (parseIntValue(aS[1]) + 1)) * parseIntValue(aS[0]))
204+func aQ (aR,aS,aT) = if (aT)
205+ then {
206+ let aU = if ((aR >= 0))
207+ then (((aR + aS) - 1) / aS)
208+ else -((((-(aR) + aS) - 1) / aS))
209+ (aU * d)
210+ }
211+ else aR
212+
213+
214+func aV (aW) = {
215+ let aX = split(aW, "_")
216+ ((J * (parseIntValue(aX[1]) + 1)) * parseIntValue(aX[0]))
207217 }
208218
209219
210-func aT (aU) = {
211- func aV (aW,aX) = (aW + parseIntValue(aX))
212-
213- let aY = split(aU[aD], "_")
214- let aZ = size(aY)
215- let ba = 0
216- func bb (bc,bd) = if ((bd >= aZ))
217- then bc
218- else aV(bc, aY[bd])
219-
220- func be (bc,bd) = if ((bd >= aZ))
221- then bc
222- else throw("List size exceeds 6")
223-
224- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
225- }
226-
227-
228-func bf (aU) = {
229- func aV (aW,aX) = (aW + parseIntValue(aX))
230-
231- let aY = split(aU[aE], "_")
232- let aZ = size(aY)
233- let ba = 0
234- func bb (bc,bd) = if ((bd >= aZ))
235- then bc
236- else aV(bc, aY[bd])
237-
238- func be (bc,bd) = if ((bd >= aZ))
239- then bc
240- else throw("List size exceeds 6")
241-
242- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
243- }
244-
245-
246-func bg (aU) = {
247- let bh = aU[aF]
248- if ((bh == ""))
220+func aY (aZ) = {
221+ let ba = aZ[aF]
222+ if ((ba == ""))
249223 then 0
250224 else {
251- func aV (aW,aX) = (aW + parseIntValue(aX))
225+ func bb (bc,bd) = {
226+ let x = bc._1
227+ let aS = parseIntValue(split(Q[x], "_")[ad])
228+ $Tuple2((x + 1), (bc._2 + aQ(parseIntValue(bd), aS, true)))
229+ }
252230
253- let aY = split_4C(bh, "_")
254- let aZ = size(aY)
255- let ba = 0
256- func bb (bc,bd) = if ((bd >= aZ))
257- then bc
258- else aV(bc, aY[bd])
231+( let be = split_4C(ba, "_")
232+ let bf = size(be)
233+ let bg = $Tuple2(0, 0)
234+ func bh (bi,bj) = if ((bj >= bf))
235+ then bi
236+ else bb(bi, be[bj])
259237
260- func be (bc,bd) = if ((bd >= aZ))
261- then bc
238+ func bk (bi,bj) = if ((bj >= bf))
239+ then bi
262240 else throw("List size exceeds 50")
263241
264- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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)
242+ bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
265243 }
266244 }
267245
268246
269-func bi (bj,ah,bk,bl) = {
270- let bm = af(bj, ah)
271- let bn = valueOrElse(getInteger(bm), 0)
272- let bo = if ((bn > C))
247+func bl (bm,ah,aR,bn) = {
248+ let bo = af(bm, ah)
249+ let bp = valueOrElse(getInteger(bo), 0)
250+ let bq = if ((bp > C))
273251 then 0
274- else if (((bn + bk) > C))
275- then (C - bn)
276- else bk
277- let bp = (fraction(bo, ((F * D) - fraction(((100 * bn) + (50 * bo)), D, C)), e) + fraction((bk - bo), D, d))
278- let bq = (bl - (bl / 100))
279- if (((bq * bk) > (bp * d)))
280- then throw((((((((((("Actual price = " + toString(bp)) + " / ") + toString(bk)) + " < minPrice = ") + toString(bl)) + ", (") + bj) + ", ") + M[ah]) + ")"))
281- else $Tuple2(IntegerEntry(bm, (bn + bk)), bp)
252+ else if (((bp + aR) > C))
253+ then (C - bp)
254+ else aR
255+ let br = (fraction(bq, ((F * D) - fraction(((100 * bp) + (50 * bq)), D, C)), e) + fraction((aR - bq), D, d))
256+ let bs = (bn - (bn / 100))
257+ if (((bs * aR) > (br * d)))
258+ then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(aR)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + M[ah]) + ")"))
259+ else $Tuple2(IntegerEntry(bo, (bp + aR)), br)
282260 }
283261
284262
285-func br (bj,bs,bk,bt) = {
286- let bm = af(bj, bs)
287- let bn = valueOrElse(getInteger(bm), 0)
288- let bu = if ((bn > C))
289- then min([bk, (bn - C)])
263+func bt (bm,bu,aR,bv) = {
264+ let bo = af(bm, bu)
265+ let bp = valueOrElse(getInteger(bo), 0)
266+ let bw = if ((bp > C))
267+ then min([aR, (bp - C)])
290268 else 0
291- let bv = min([bn, (bk - bu)])
292- let bw = (bv + bu)
293- let bx = (fraction(bv, ((G * D) - fraction(((100 * bn) - (50 * bv)), D, C)), e) + fraction(bu, (2 * D), d))
294- let by = (bt + (bt / 100))
295- if (((bx * d) > (by * bw)))
296- then throw((((((((((("Actual price = " + toString(bx)) + " / ") + toString(bw)) + " > maxPrice = ") + toString(bt)) + ", (") + bj) + ", ") + N[bs]) + ")"))
297- else $Tuple3(IntegerEntry(bm, (bn - bw)), bx, bw)
269+ let bx = min([bp, (aR - bw)])
270+ let by = (bx + bw)
271+ let bz = (fraction(bx, ((G * D) - fraction(((100 * bp) - (50 * bx)), D, C)), e) + fraction(bw, (2 * D), d))
272+ let bA = (bv + (bv / 100))
273+ if (((bz * d) > (bA * by)))
274+ then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + N[bu]) + ")"))
275+ else $Tuple3(IntegerEntry(bo, (bp - by)), bz, by)
298276 }
299277
300278
301-func bz (bA) = {
302- let aP = split(valueOrElse(getString(z, bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
279+func bB (bC) = {
280+ let aP = split(valueOrElse(getString(z, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
303281 [toString(valueOrElse(parseInt(aP[ay]), 0)), if ((size(split(aP[az], "_")) == B))
304282 then aP[az]
305283 else "0_0_0_0_0_0", if ((size(split(aP[aA], "_")) == B))
308286 }
309287
310288
311-func bB () = if (valueOrElse(getBoolean(z, ap()), false))
289+func bD () = if (valueOrElse(getBoolean(z, ap()), false))
312290 then throw("Contracts are under maintenance")
313291 else unit
314292
315293
316-func bC (aW,aX) = {
317- let bD = aW._1
318- let bE = split(aX, "@")
319- if ((size(bE) != 2))
294+func bE (bc,bd) = {
295+ let bF = bc._1
296+ let bG = bc._7
297+ let aS = if (bG)
298+ then parseIntValue(split(Q[bF], "_")[ad])
299+ else 0
300+ let bH = split(bd, "@")
301+ if ((size(bH) != 2))
320302 then throw("Incorrect order format, should be amount@price")
321303 else {
322- let bF = parseIntValue(bE[0])
323- let bG = parseIntValue(bE[1])
324- let bH = fraction(bF, bG, d)
325- let bI = parseIntValue(aW._5[bD])
326- let bJ = split(aW._6[bD], "@")
327- let bK = parseIntValue(bJ[0])
328- let bL = parseIntValue(bJ[1])
329- if ((0 > bL))
304+ let bI = parseIntValue(bH[0])
305+ let bJ = parseIntValue(bH[1])
306+ let bK = fraction(bI, bJ, d)
307+ let bL = aQ(bI, aS, bG)
308+ let bM = parseIntValue(bc._5[bF])
309+ let bN = split(bc._6[bF], "@")
310+ let bO = parseIntValue(bN[0])
311+ let bP = parseIntValue(bN[1])
312+ if (if ((0 > bP))
313+ then true
314+ else (0 > bJ))
330315 then throw("Price can't be negative")
331316 else {
332- let bM = fraction(bK, bL, d)
333- if ((bF == 0))
334- then if ((bK > 0))
335- then $Tuple6((bD + 1), (aW._2 :+ toString(bI)), (aW._3 - bK), (aW._4 - bM), aW._5, aW._6)
336- else $Tuple6((bD + 1), (aW._2 :+ toString((bI - bK))), (aW._3 + bK), aW._4, aW._5, aW._6)
337- else if ((bF > 0))
338- then if ((0 > bK))
317+ let bQ = fraction(bO, bP, d)
318+ let bR = aQ(bO, aS, bG)
319+ if ((bI == 0))
320+ then if ((bO > 0))
321+ then $Tuple7((bF + 1), (bc._2 :+ toString(bM)), (bc._3 - bR), (bc._4 - bQ), bc._5, bc._6, bG)
322+ else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), (bc._3 + bR), bc._4, bc._5, bc._6, bG)
323+ else if ((bI > 0))
324+ then if ((0 > bO))
325+ then $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), ((bc._3 + bL) + bR), (bc._4 + bK), bc._5, bc._6, bG)
326+ else $Tuple7((bF + 1), (bc._2 :+ toString(bM)), ((bc._3 + bL) - bR), ((bc._4 + bK) - bQ), bc._5, bc._6, bG)
327+ else if ((0 > bO))
339328 then {
340- let bN = (bF + bK)
341- $Tuple6((bD + 1), (aW._2 :+ toString((bI - bK))), (aW._3 + bN), (aW._4 + bH), aW._5, aW._6)
329+ let bS = (bO - bI)
330+ if ((0 > (bM - bS)))
331+ then throw((((("Attempt to take " + toString(bS)) + " from warehouse, but only ") + toString(bM)) + " available"))
332+ else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bS))), ((bc._3 + bR) - bL), bc._4, bc._5, bc._6, bG)
342333 }
343- else $Tuple6((bD + 1), (aW._2 :+ toString(bI)), ((aW._3 + bF) - bK), ((aW._4 + bH) - bM), aW._5, aW._6)
344- else if ((0 > bK))
345- then {
346- let bN = (bK - bF)
347- if ((0 > (bI - bN)))
348- then throw((((("Attempt to take " + toString(bN)) + " from warehouse, but only ") + toString(bI)) + " available"))
349- else $Tuple6((bD + 1), (aW._2 :+ toString((bI - bN))), (aW._3 + bN), aW._4, aW._5, aW._6)
350- }
351- else if ((0 > (bI + bF)))
352- then throw((((("Attempt to take " + toString(-(bF))) + " from warehouse, but only ") + toString(bI)) + " available"))
353- else $Tuple6((bD + 1), (aW._2 :+ toString((bI + bF))), ((aW._3 - bF) - bK), (aW._4 - bM), aW._5, aW._6)
334+ else if ((0 > (bM + bI)))
335+ then throw((((("Attempt to take " + toString(-(bI))) + " from warehouse, but only ") + toString(bM)) + " available"))
336+ else $Tuple7((bF + 1), (bc._2 :+ toString((bM + bI))), ((bc._3 - bL) - bR), (bc._4 - bQ), bc._5, bc._6, bG)
354337 }
355338 }
356339 }
357340
358341
359-func bO (aW,bP) = {
360- let bD = aW._7
361- let bQ = split(bP, "@")
362- if ((size(bQ) != 2))
342+func bT (bc,bU) = {
343+ let bF = bc._7
344+ let bG = bc._12
345+ let aS = if (bG)
346+ then parseIntValue(split(Q[bF], "_")[ad])
347+ else 0
348+ let bV = split(bU, "@")
349+ if ((size(bV) != 2))
363350 then throw("Incorrect order format, should be amount@price")
364351 else {
365- let bR = parseIntValue(bQ[0])
366- let bS = parseIntValue(bQ[1])
367- if ((0 > bS))
352+ let bW = parseIntValue(bV[0])
353+ let bX = parseIntValue(bV[1])
354+ if ((0 > bX))
368355 then throw("Price can't be negative")
369356 else {
370- let bT = fraction(bR, bS, d)
371- let bU = parseIntValue(aW._8[bD])
372- let bI = parseIntValue(aW._9[bD])
373- let bV = split(aW._10[bD], "@")
374- let bW = parseIntValue(bV[0])
375- let bX = parseIntValue(bV[1])
376- if (if ((bR != 0))
377- then (bS != bX)
357+ let bY = fraction(bW, bX, d)
358+ let bZ = parseIntValue(bc._8[bF])
359+ let bM = parseIntValue(bc._9[bF])
360+ let ca = split(bc._10[bF], "@")
361+ let cb = parseIntValue(ca[0])
362+ let cc = parseIntValue(ca[1])
363+ if (if ((bW != 0))
364+ then (bX != cc)
378365 else false)
379- then throw(((((("Prices of " + aW._11[bD]) + " don't match! WH price=") + toString(bX)) + ", your price=") + toString(bS)))
366+ then throw(((((("Prices of " + bc._11[bF]) + " don't match! WH price=") + toString(cc)) + ", your price=") + toString(bX)))
380367 else {
381- let bY = fraction(bW, bX, d)
382- if ((bR == 0))
383- then $Tuple11((aW._1 :+ toString(bI)), (aW._2 :+ aW._10[bD]), (aW._3 :+ toString(bU)), aW._4, aW._5, aW._6, (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
384- else if ((bR > 0))
385- then if ((0 > bW))
386- then if ((bR > -(bW)))
387- then throw(((((("Attempt to buy " + toString(bR)) + " of ") + aW._11[bD]) + ", but warehouse only sells ") + toString(-(bW))))
388- else $Tuple11((aW._1 :+ toString(bI)), (aW._2 :+ ((toString((bW + bR)) + "@") + toString(bX))), (aW._3 :+ toString((bU + bR))), (aW._4 + bR), aW._5, (aW._6 + bT), (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
389- else throw((("Attempt to buy " + aW._11[bD]) + " while warehouse doesn't sell it"))
390- else if ((bW > 0))
391- then if ((-(bR) > bW))
392- then throw(((((("Attempt to sell " + toString(-(bR))) + " of ") + aW._11[bD]) + ", but warehouse only buys ") + toString(bW)))
393- else if ((-(bR) > bU))
394- then throw(((((("Attempt to sell " + toString(-(bR))) + ", but you only have ") + toString(bU)) + " of ") + aW._11[bD]))
395- else $Tuple11((aW._1 :+ toString((bI - bR))), (aW._2 :+ ((toString((bW + bR)) + "@") + toString(bX))), (aW._3 :+ toString((bU + bR))), (aW._4 - bR), (aW._5 - bT), aW._6, (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
396- else throw((("Attempt to sell " + aW._11[bD]) + " while warehouse doesn't buy it"))
368+ let cd = fraction(cb, cc, d)
369+ let ce = aQ(bW, aS, bG)
370+ if ((bW == 0))
371+ then $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ bc._10[bF]), (bc._3 :+ toString(bZ)), bc._4, bc._5, bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
372+ else if ((bW > 0))
373+ then if ((0 > cb))
374+ then if ((bW > -(cb)))
375+ then throw(((((("Attempt to buy " + toString(bW)) + " of ") + bc._11[bF]) + ", but warehouse only sells ") + toString(-(cb))))
376+ else $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 + ce), bc._5, (bc._6 + bY), (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
377+ else throw((("Attempt to buy " + bc._11[bF]) + " while warehouse doesn't sell it"))
378+ else if ((cb > 0))
379+ then if ((-(bW) > cb))
380+ then throw(((((("Attempt to sell " + toString(-(bW))) + " of ") + bc._11[bF]) + ", but warehouse only buys ") + toString(cb)))
381+ else if ((-(bW) > bZ))
382+ then throw(((((("Attempt to sell " + toString(-(bW))) + ", but you only have ") + toString(bZ)) + " of ") + bc._11[bF]))
383+ else $Tuple11((bc._1 :+ toString((bM - bW))), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 - ce), (bc._5 - bY), bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
384+ else throw((("Attempt to sell " + bc._11[bF]) + " while warehouse doesn't buy it"))
397385 }
398386 }
399387 }
400388 }
401389
402390
403-@Callable(bZ)
404-func constructorV1 (ca) = if ((bZ.caller != this))
391+@Callable(cf)
392+func constructorV1 (cg) = if ((cf.caller != this))
405393 then throw("Permission denied")
406- else [StringEntry(s(), ca)]
394+ else [StringEntry(s(), cg)]
407395
408396
409397
410-@Callable(bZ)
411-func sellResources (cb,cc) = {
412- let cd = bB()
413- if ((cd == cd))
398+@Callable(cf)
399+func sellResources (ch,ci) = {
400+ let cj = bD()
401+ if ((cj == cj))
414402 then {
415- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
416- if ((size(bZ.payments) != 0))
403+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
404+ if ((size(cf.payments) != 0))
417405 then throw("sellResources doesn't require any payments")
418406 else {
419- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
420- if ((ce[aw] != "F"))
421- then throw(("Duck location type should be Factory, but is " + ce[aw]))
407+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
408+ if ((ck[aw] != "F"))
409+ then throw(("Duck location type should be Factory, but is " + ck[aw]))
422410 else {
423- let bj = ce[ax]
424- let cf = bz(am(an))
425- let cg = split(cf[az], "_")
426- func ch (aW,bD) = if ((cb[bD] > parseIntValue(cg[bD])))
427- then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to sell ") + toString(cb[bD])))
428- else if ((0 > cb[bD]))
429- then throw(((("You tried to sell negative amount of " + M[bD]) + ": ") + toString(cb[bD])))
430- else if ((cb[bD] > 0))
411+ let bm = ck[ax]
412+ let cl = bB(am(an))
413+ let cm = split(cl[az], "_")
414+ func cn (bc,bF) = if ((ch[bF] > parseIntValue(cm[bF])))
415+ then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to sell ") + toString(ch[bF])))
416+ else if ((0 > ch[bF]))
417+ then throw(((("You tried to sell negative amount of " + M[bF]) + ": ") + toString(ch[bF])))
418+ else if ((ch[bF] > 0))
431419 then {
432- let ci = bi(bj, bD, cb[bD], cc[bD])
433- $Tuple3((aW._1 :+ ci._1), (aW._2 :+ toString((parseIntValue(cg[bD]) - cb[bD]))), (aW._3 + ci._2))
420+ let co = bl(bm, bF, ch[bF], ci[bF])
421+ $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cm[bF]) - ch[bF]))), (bc._3 + co._2))
434422 }
435- else $Tuple3(aW._1, (aW._2 :+ cg[bD]), aW._3)
423+ else $Tuple3(bc._1, (bc._2 :+ cm[bF]), bc._3)
436424
437- let cj = {
438- let aY = [0, 1, 2, 3, 4, 5]
439- let aZ = size(aY)
440- let ba = $Tuple3(nil, nil, 0)
441- func bb (bc,bd) = if ((bd >= aZ))
442- then bc
443- else ch(bc, aY[bd])
425+ let cp = {
426+ let be = [0, 1, 2, 3, 4, 5]
427+ let bf = size(be)
428+ let bg = $Tuple3(nil, nil, 0)
429+ func bh (bi,bj) = if ((bj >= bf))
430+ then bi
431+ else cn(bi, be[bj])
444432
445- func be (bc,bd) = if ((bd >= aZ))
446- then bc
433+ func bk (bi,bj) = if ((bj >= bf))
434+ then bi
447435 else throw("List size exceeds 6")
448436
449- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
437+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
450438 }
451- let ck = makeString([cf[ay], makeString(cj._2, "_"), cf[aA], cf[aB]], ":")
452- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
453- $Tuple2((cj._1 :+ ScriptTransfer(bZ.caller, cj._3, g)), cl)
439+ let cq = makeString([cl[ay], makeString(cp._2, "_"), cl[aA], cl[aB]], ":")
440+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
441+ $Tuple2((cp._1 :+ ScriptTransfer(cf.caller, cp._3, g)), cr)
454442 }
455443 }
456444 }
459447
460448
461449
462-@Callable(bZ)
463-func buyMaterials (cb,cm) = {
464- let cd = bB()
465- if ((cd == cd))
450+@Callable(cf)
451+func buyMaterials (ch,cs) = {
452+ let cj = bD()
453+ if ((cj == cj))
466454 then {
467- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
468- if ((size(bZ.payments) != 1))
455+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
456+ if ((size(cf.payments) != 1))
469457 then throw("exactly 1 payment must be attached")
470458 else {
471- let cn = bZ.payments[0]
472- let co = cn.amount
473- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
474- if ((cp != g))
459+ let ct = cf.payments[0]
460+ let cu = ct.amount
461+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
462+ if ((cv != g))
475463 then throw("USDT payments only!")
476464 else {
477- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
478- if ((ce[aw] != "F"))
479- then throw(("Duck location type should be Factory, but is " + ce[aw]))
465+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
466+ if ((ck[aw] != "F"))
467+ then throw(("Duck location type should be Factory, but is " + ck[aw]))
480468 else {
481- let bj = ce[ax]
482- let cf = bz(am(an))
483- let cq = split(cf[aA], "_")
484- func cr (aW,bD) = if ((0 > cb[bD]))
485- then throw(((("You tried to buy negative amount of " + N[bD]) + ": ") + toString(cb[bD])))
486- else if ((cb[bD] > 0))
469+ let bm = ck[ax]
470+ let cl = bB(am(an))
471+ let cw = split(cl[aA], "_")
472+ func cx (bc,bF) = if ((0 > ch[bF]))
473+ then throw(((("You tried to buy negative amount of " + N[bF]) + ": ") + toString(ch[bF])))
474+ else if ((ch[bF] > 0))
487475 then {
488- let ci = br(bj, bD, cb[bD], cm[bD])
489- $Tuple3((aW._1 :+ ci._1), (aW._2 :+ toString((parseIntValue(cq[bD]) + ci._3))), (aW._3 + ci._2))
476+ let co = bt(bm, bF, ch[bF], cs[bF])
477+ $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cw[bF]) + co._3))), (bc._3 + co._2))
490478 }
491- else $Tuple3(aW._1, (aW._2 :+ cq[bD]), aW._3)
479+ else $Tuple3(bc._1, (bc._2 :+ cw[bF]), bc._3)
492480
493- let cj = {
494- let aY = [0, 1, 2, 3, 4, 5]
495- let aZ = size(aY)
496- let ba = $Tuple3(nil, nil, 0)
497- func bb (bc,bd) = if ((bd >= aZ))
498- then bc
499- else cr(bc, aY[bd])
481+ let cp = {
482+ let be = [0, 1, 2, 3, 4, 5]
483+ let bf = size(be)
484+ let bg = $Tuple3(nil, nil, 0)
485+ func bh (bi,bj) = if ((bj >= bf))
486+ then bi
487+ else cx(bi, be[bj])
500488
501- func be (bc,bd) = if ((bd >= aZ))
502- then bc
489+ func bk (bi,bj) = if ((bj >= bf))
490+ then bi
503491 else throw("List size exceeds 6")
504492
505- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
493+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
506494 }
507- if ((cj._3 > co))
508- then throw(((("Insufficient payment! Attached=" + toString(co)) + ", required=") + toString(cj._3)))
495+ if ((cp._3 > cu))
496+ then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
509497 else {
510- let ck = makeString([cf[ay], cf[az], makeString(cj._2, "_"), cf[aB]], ":")
511- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
512- let u = if (((co - cj._3) > 0))
513- then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
498+ let cq = makeString([cl[ay], cl[az], makeString(cp._2, "_"), cl[aB]], ":")
499+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
500+ let u = if (((cu - cp._3) > 0))
501+ then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
514502 else nil
515- let cs = (cj._3 / 100)
516- $Tuple2(((cj._1 ++ u) :+ ScriptTransfer(y, cs, g)), cl)
503+ let cy = (cp._3 / 100)
504+ $Tuple2(((cp._1 ++ u) :+ ScriptTransfer(y, cy, g)), cr)
517505 }
518506 }
519507 }
524512
525513
526514
527-@Callable(bZ)
528-func exchangeResources (cb) = {
529- let cd = bB()
530- if ((cd == cd))
515+@Callable(cf)
516+func exchangeResources (ch) = {
517+ let cj = bD()
518+ if ((cj == cj))
531519 then {
532- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
533- if ((size(bZ.payments) != 1))
520+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
521+ if ((size(cf.payments) != 1))
534522 then throw("exactly 1 payment must be attached")
535523 else {
536- let cn = bZ.payments[0]
537- let co = cn.amount
538- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
539- if ((cp != g))
524+ let ct = cf.payments[0]
525+ let cu = ct.amount
526+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
527+ if ((cv != g))
540528 then throw("USDT payments only!")
541529 else {
542- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
543- if ((ce[aw] != "F"))
544- then throw(("Duck location type should be Factory, but is " + ce[aw]))
530+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
531+ if ((ck[aw] != "F"))
532+ then throw(("Duck location type should be Factory, but is " + ck[aw]))
545533 else {
546- let bj = ce[ax]
547- let cf = bz(am(an))
548- let cg = split(cf[az], "_")
549- let cq = split(cf[aA], "_")
550- func ct (aW,bD) = {
551- let bm = af(bj, bD)
552- let bn = valueOrElse(getInteger(bm), 0)
553- let cu = cb[bD]
554- if ((cu > parseIntValue(cg[bD])))
555- then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to exchange ") + toString(cu)))
556- else if ((0 > cu))
557- then throw(((("You tried to exchange negative amount of " + M[bD]) + ": ") + toString(cu)))
558- else if ((cu > 0))
559- then $Tuple4((aW._1 :+ toString((parseIntValue(cg[bD]) - cu))), (aW._2 :+ toString((parseIntValue(cq[bD]) + cu))), (aW._3 + fraction(cu, D, d)), (aW._4 :+ IntegerEntry(bm, bn)))
560- else $Tuple4((aW._1 :+ cg[bD]), (aW._2 :+ cq[bD]), aW._3, aW._4)
534+ let bm = ck[ax]
535+ let cl = bB(am(an))
536+ let cm = split(cl[az], "_")
537+ let cw = split(cl[aA], "_")
538+ func cz (bc,bF) = {
539+ let bo = af(bm, bF)
540+ let bp = valueOrElse(getInteger(bo), 0)
541+ let cA = ch[bF]
542+ if ((cA > parseIntValue(cm[bF])))
543+ then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to exchange ") + toString(cA)))
544+ else if ((0 > cA))
545+ then throw(((("You tried to exchange negative amount of " + M[bF]) + ": ") + toString(cA)))
546+ else if ((cA > 0))
547+ then $Tuple4((bc._1 :+ toString((parseIntValue(cm[bF]) - cA))), (bc._2 :+ toString((parseIntValue(cw[bF]) + cA))), (bc._3 + fraction(cA, D, d)), (bc._4 :+ IntegerEntry(bo, bp)))
548+ else $Tuple4((bc._1 :+ cm[bF]), (bc._2 :+ cw[bF]), bc._3, bc._4)
561549 }
562550
563- let cj = {
564- let aY = [0, 1, 2, 3, 4, 5]
565- let aZ = size(aY)
566- let ba = $Tuple4(nil, nil, 0, nil)
567- func bb (bc,bd) = if ((bd >= aZ))
568- then bc
569- else ct(bc, aY[bd])
551+ let cp = {
552+ let be = [0, 1, 2, 3, 4, 5]
553+ let bf = size(be)
554+ let bg = $Tuple4(nil, nil, 0, nil)
555+ func bh (bi,bj) = if ((bj >= bf))
556+ then bi
557+ else cz(bi, be[bj])
570558
571- func be (bc,bd) = if ((bd >= aZ))
572- then bc
559+ func bk (bi,bj) = if ((bj >= bf))
560+ then bi
573561 else throw("List size exceeds 6")
574562
575- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
563+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
576564 }
577- if ((cj._3 > co))
578- then throw(((("Insufficient payment! Attached=" + toString(co)) + ", required=") + toString(cj._3)))
565+ if ((cp._3 > cu))
566+ then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
579567 else {
580- let ck = makeString([cf[ay], makeString(cj._1, "_"), makeString(cj._2, "_"), cf[aB]], ":")
581- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
582- let u = if (((co - cj._3) > 0))
583- then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
568+ let cq = makeString([cl[ay], makeString(cp._1, "_"), makeString(cp._2, "_"), cl[aB]], ":")
569+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
570+ let u = if (((cu - cp._3) > 0))
571+ then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
584572 else nil
585- let cs = (cj._3 / 100)
586- $Tuple2(((u ++ cj._4) :+ ScriptTransfer(y, cs, g)), cl)
573+ let cy = (cp._3 / 100)
574+ $Tuple2(((u ++ cp._4) :+ ScriptTransfer(y, cy, g)), cr)
587575 }
588576 }
589577 }
594582
595583
596584
597-@Callable(bZ)
598-func craftGoods (cv,cw) = {
599- let cd = bB()
600- if ((cd == cd))
601- then if ((size(bZ.payments) != 1))
585+@Callable(cf)
586+func craftGoods (cB,cC) = {
587+ let cj = bD()
588+ if ((cj == cj))
589+ then if ((size(cf.payments) != 1))
602590 then throw("exactly 1 payment must be attached")
603591 else {
604- let cn = bZ.payments[0]
605- let co = cn.amount
606- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
607- if ((cp != g))
592+ let ct = cf.payments[0]
593+ let cu = ct.amount
594+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
595+ if ((cv != g))
608596 then throw("USDT payments only!")
609- else if ((co != b))
597+ else if ((cu != b))
610598 then throw("exactly 1 USDT must be attached as payment")
611- else if ((0 >= cw))
599+ else if ((0 >= cC))
612600 then throw("Quantity should be positive")
613601 else {
614- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
615- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
616- if ((ce[aw] != "M"))
617- then throw(("Duck location type should be Manufactory, but is " + ce[aw]))
602+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
603+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
604+ if ((ck[aw] != "M"))
605+ then throw(("Duck location type should be Manufactory, but is " + ck[aw]))
618606 else {
619- let cx = ce[av]
620- let cf = bz(am(an))
621- let cq = split(cf[aA], "_")
622- if (if ((0 > cv))
607+ let cD = ck[av]
608+ let cl = bB(am(an))
609+ let cw = split(cl[aA], "_")
610+ if (if ((0 > cB))
623611 then true
624- else (cv >= size(Q)))
625- then throw(("Unknown product idx=" + toString(cv)))
612+ else (cB >= size(Q)))
613+ then throw(("Unknown product idx=" + toString(cB)))
626614 else {
627- let cy = split(Q[cv], "_")
628- if ((size(cy) != (B + 3)))
629- then throw(("Fatal: unknown recipe: " + Q[cv]))
615+ let cE = split(Q[cB], "_")
616+ if ((size(cE) != (B + 3)))
617+ then throw(("Fatal: unknown recipe: " + Q[cB]))
630618 else {
631- let cz = parseIntValue(cy[ae])
632- if ((P[cz] != cx))
633- then throw(((("This product is available in " + P[cz]) + ", but you are in ") + cx))
619+ let cF = parseIntValue(cE[ae])
620+ if ((P[cF] != cD))
621+ then throw(((("This product is available in " + P[cF]) + ", but you are in ") + cD))
634622 else {
635- let cA = if ((cf[aB] == ""))
623+ let cG = if ((cl[aB] == ""))
636624 then nil
637- else split(cf[aB], "_")
638- func cB (aW,cC) = {
639- let cD = aW._2
640- let cE = if ((size(cA) > cD))
641- then cA[cD]
625+ else split(cl[aB], "_")
626+ func cH (bc,cI) = {
627+ let cJ = bc._2
628+ let cK = if ((size(cG) > cJ))
629+ then cG[cJ]
642630 else "0"
643- let cF = parseIntValue(cE)
644- let bk = (cw * parseIntValue(cy[ad]))
645- let cG = if ((cD == cv))
646- then toString((cF + bk))
647- else cE
648- $Tuple2((aW._1 :+ cG), (cD + 1))
631+ let cL = parseIntValue(cK)
632+ let aR = (cC * parseIntValue(cE[ad]))
633+ let cM = if ((cJ == cB))
634+ then toString((cL + aR))
635+ else cK
636+ $Tuple2((bc._1 :+ cM), (cJ + 1))
649637 }
650638
651- let cH = ( let aY = Q
652- let aZ = size(aY)
653- let ba = $Tuple2(nil, 0)
654- func bb (bc,bd) = if ((bd >= aZ))
655- then bc
656- else cB(bc, aY[bd])
639+ let cN = ( let be = Q
640+ let bf = size(be)
641+ let bg = $Tuple2(nil, 0)
642+ func bh (bi,bj) = if ((bj >= bf))
643+ then bi
644+ else cH(bi, be[bj])
657645
658- func be (bc,bd) = if ((bd >= aZ))
659- then bc
646+ func bk (bi,bj) = if ((bj >= bf))
647+ then bi
660648 else throw("List size exceeds 50")
661649
662- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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
663- func cI (aW,bD) = {
664- let cJ = ((parseIntValue(cy[bD]) * c) * cw)
665- let cK = parseIntValue(cq[bD])
666- if ((cJ > cK))
667- then throw(((((((("You have " + cq[bD]) + " of ") + N[bD]) + ", but recipe requires ") + toString(cJ)) + " for quantity ") + toString(cw)))
668- else if ((cJ > 0))
669- then (aW :+ toString((cK - cJ)))
670- else (aW :+ cq[bD])
650+ bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 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
651+ func cO (bc,bF) = {
652+ let cP = ((parseIntValue(cE[bF]) * c) * cC)
653+ let cQ = parseIntValue(cw[bF])
654+ if ((cP > cQ))
655+ then throw(((((((("You have " + cw[bF]) + " of ") + N[bF]) + ", but recipe requires ") + toString(cP)) + " for quantity ") + toString(cC)))
656+ else if ((cP > 0))
657+ then (bc :+ toString((cQ - cP)))
658+ else (bc :+ cw[bF])
671659 }
672660
673- let cj = {
674- let aY = [0, 1, 2, 3, 4, 5]
675- let aZ = size(aY)
676- let ba = nil
677- func cL (bc,bd) = if ((bd >= aZ))
678- then bc
679- else cI(bc, aY[bd])
661+ let cp = {
662+ let be = [0, 1, 2, 3, 4, 5]
663+ let bf = size(be)
664+ let bg = nil
665+ func cR (bi,bj) = if ((bj >= bf))
666+ then bi
667+ else cO(bi, be[bj])
680668
681- func cM (bc,bd) = if ((bd >= aZ))
682- then bc
669+ func cS (bi,bj) = if ((bj >= bf))
670+ then bi
683671 else throw("List size exceeds 6")
684672
685- cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
673+ cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
686674 }
687- let ck = makeString([cf[ay], cf[az], makeString(cj, "_"), makeString(cH, "_")], ":")
688- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
689- $Tuple2(nil, cl)
675+ let cq = makeString([cl[ay], cl[az], makeString(cp, "_"), makeString(cN, "_")], ":")
676+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
677+ $Tuple2(nil, cr)
690678 }
691679 }
692680 }
698686
699687
700688
701-@Callable(bZ)
702-func setWarehouseOrder (cN,aj) = {
703- let cO = bZ.originCaller
704- let au = toString(cO)
705- let cl = if ((cO != y))
706- then bB()
689+@Callable(cf)
690+func setWarehouseOrder (cT,aj) = {
691+ let cU = cf.originCaller
692+ let au = toString(cU)
693+ let cr = if ((cU != y))
694+ then bD()
707695 else false
708- let cP = value(assetInfo(fromBase58String(aj)))
696+ let cV = value(assetInfo(fromBase58String(aj)))
709697 if (!(isDefined(getInteger(z, as(aj)))))
710- then throw((("NFT " + cP.name) + " is not staked"))
698+ then throw((("NFT " + cV.name) + " is not staked"))
711699 else {
712- let cQ = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cP.name) + " is orphaned"))
713- if (if ((cO != y))
714- then (cQ != au)
700+ let cW = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cV.name) + " is orphaned"))
701+ if (if ((cU != y))
702+ then (cW != au)
715703 else false)
716704 then throw((H + " is not yours"))
717705 else {
718- let cR = split_4C(cN, ":")
719- if ((size(cR) != 3))
706+ let cX = split_4C(cT, ":")
707+ if ((size(cX) != 3))
720708 then throw("cargoListStr should contain exactly 2 ':' separators")
721709 else {
722- let cS = split(cR[0], "_")
723- let cT = split(cR[1], "_")
724- let cU = if ((cR[2] == ""))
710+ let cY = split(cX[0], "_")
711+ let cZ = split(cX[1], "_")
712+ let da = if ((cX[2] == ""))
725713 then nil
726- else split(cR[2], "_")
727- if ((size(cS) != B))
714+ else split(cX[2], "_")
715+ if ((size(cY) != B))
728716 then throw("All 6 resources should be passed")
729- else if ((size(cT) != B))
717+ else if ((size(cZ) != B))
730718 then throw("All 6 materials should be passed")
731719 else {
732- let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
733- let aU = split_4C(cV, ":")
734- let cW = split(aU[aD], "_")
735- let cX = split(aU[aE], "_")
736- let cY = if ((aU[aF] == ""))
720+ let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
721+ let aZ = split_4C(db, ":")
722+ let dc = split(aZ[aD], "_")
723+ let dd = split(aZ[aE], "_")
724+ let de = if ((aZ[aF] == ""))
737725 then nil
738- else split(aU[aF], "_")
739- let cZ = aQ(aU[aC])
726+ else split(aZ[aF], "_")
727+ let df = aV(aZ[aC])
740728 let aO = ai(aj)
741- let da = aN(aO)
742- let db = split(da[aH], "_")
743- let dc = split(da[aI], "_")
744- let dd = if ((da[aJ] == ""))
729+ let dg = aN(aO)
730+ let dh = split(dg[aH], "_")
731+ let di = split(dg[aI], "_")
732+ let dj = if ((dg[aJ] == ""))
745733 then nil
746- else split(da[aJ], "_")
747- let de = 0
748- let df = {
749- let aY = cS
750- let aZ = size(aY)
751- let ba = $Tuple6(0, nil, 0, 0, cW, db)
752- func bb (bc,bd) = if ((bd >= aZ))
753- then bc
754- else bC(bc, aY[bd])
734+ else split(dg[aJ], "_")
735+ let dk = 0
736+ let dl = {
737+ let be = cY
738+ let bf = size(be)
739+ let bg = $Tuple7(0, nil, 0, 0, dc, dh, false)
740+ func bh (bi,bj) = if ((bj >= bf))
741+ then bi
742+ else bE(bi, be[bj])
755743
756- func be (bc,bd) = if ((bd >= aZ))
757- then bc
744+ func bk (bi,bj) = if ((bj >= bf))
745+ then bi
758746 else throw("List size exceeds 6")
759747
760- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
748+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
761749 }
762- let bw = {
763- let aY = cT
764- let aZ = size(aY)
765- let ba = $Tuple6(0, nil, df._3, df._4, cX, dc)
766- func cL (bc,bd) = if ((bd >= aZ))
767- then bc
768- else bC(bc, aY[bd])
750+ let by = {
751+ let be = cZ
752+ let bf = size(be)
753+ let bg = $Tuple7(0, nil, dl._3, dl._4, dd, di, false)
754+ func cR (bi,bj) = if ((bj >= bf))
755+ then bi
756+ else bE(bi, be[bj])
769757
770- func cM (bc,bd) = if ((bd >= aZ))
771- then bc
758+ func cS (bi,bj) = if ((bj >= bf))
759+ then bi
772760 else throw("List size exceeds 6")
773761
774- cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
762+ cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
775763 }
776- let aP = {
777- let aY = cU
778- let aZ = size(aY)
779- let ba = $Tuple6(0, nil, bw._3, bw._4, cY, dd)
780- func dg (bc,bd) = if ((bd >= aZ))
781- then bc
782- else bC(bc, aY[bd])
764+ let aP = if ((size(da) != 0))
765+ then {
766+ let be = da
767+ let bf = size(be)
768+ let bg = $Tuple7(0, nil, by._3, by._4, de, dj, true)
769+ func dm (bi,bj) = if ((bj >= bf))
770+ then bi
771+ else bE(bi, be[bj])
783772
784- func dh (bc,bd) = if ((bd >= aZ))
785- then bc
786- else throw("List size exceeds 50")
773+ func dn (bi,bj) = if ((bj >= bf))
774+ then bi
775+ else throw("List size exceeds 50")
787776
788- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
789- }
790- let di = aP._3
791- if ((di > cZ))
792- then throw((((("Attempt to reserve " + toString(di)) + " space, but only ") + toString(cZ)) + " warehouse space left"))
777+ dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
778+ }
779+ else $Tuple7(0, de, by._3, by._4, de, dj, true)
780+ let do = aP._3
781+ if ((do > df))
782+ then throw((((("Attempt to reserve " + toString(do)) + " space, but only ") + toString(df)) + " warehouse space left"))
793783 else {
794- let dj = makeString_2C([aU[aC], makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_"), toString(di)], ":")
795- let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
796- if ((dk == dk))
784+ let dp = makeString_2C([aZ[aC], makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_"), toString(do)], ":")
785+ let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
786+ if ((dq == dq))
797787 then {
798- let dl = aP._4
799- let dm = if ((dl > 0))
800- then if ((size(bZ.payments) != 1))
788+ let dr = aP._4
789+ let ds = if ((dr > 0))
790+ then if ((size(cf.payments) != 1))
801791 then throw("exactly 1 payment must be attached")
802792 else {
803- let cn = bZ.payments[0]
804- let co = cn.amount
805- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
806- if ((cp != g))
793+ let ct = cf.payments[0]
794+ let cu = ct.amount
795+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
796+ if ((cv != g))
807797 then throw("USDT payments only!")
808- else if ((co != dl))
809- then throw(("Payment needed is " + toString(dl)))
810- else [StringEntry(aO, cN)]
798+ else if ((cu != dr))
799+ then throw(("Payment needed is " + toString(dr)))
800+ else [StringEntry(aO, cT)]
811801 }
812- else if ((dl == 0))
813- then if ((size(bZ.payments) != 0))
802+ else if ((dr == 0))
803+ then if ((size(cf.payments) != 0))
814804 then throw("No payments needed")
815- else [StringEntry(aO, cN)]
816- else if ((size(bZ.payments) != 0))
805+ else [StringEntry(aO, cT)]
806+ else if ((size(cf.payments) != 0))
817807 then throw("No payments needed")
818- else [ScriptTransfer(addressFromStringValue(cQ), -(dl), g), StringEntry(aO, cN)]
819- $Tuple2(dm, cl)
808+ else [ScriptTransfer(addressFromStringValue(cW), -(dr), g), StringEntry(aO, cT)]
809+ $Tuple2(ds, cr)
820810 }
821811 else throw("Strict value is not equal to itself.")
822812 }
828818
829819
830820
831-@Callable(bZ)
832-func acceptWarehouseOrder (dn,aj,an) = {
833- let cd = bB()
834- if ((cd == cd))
821+@Callable(cf)
822+func acceptWarehouseOrder (dt,aj,an) = {
823+ let cj = bD()
824+ if ((cj == cj))
835825 then {
836- let do = bZ.originCaller
837- let dp = toString(do)
838- let dq = valueOrErrorMessage(getString(z, ak(dp)), "You don't have a duck staked")
839- let ce = valueOrElse(getString(z, ao(dq)), A)
840- let dr = split(value(ce), "_")
841- if ((dr[aw] != "L"))
842- then throw((("Duck location type is " + dr[aw]) + ", but should be L"))
843- else if ((dq != an))
844- then throw(((("Your staked duck is " + dq) + ", but passed ") + an))
826+ let du = cf.originCaller
827+ let dv = toString(du)
828+ let dw = valueOrErrorMessage(getString(z, ak(dv)), "You don't have a duck staked")
829+ let ck = valueOrElse(getString(z, ao(dw)), A)
830+ let dx = split(value(ck), "_")
831+ if ((dx[aw] != "L"))
832+ then throw((("Duck location type is " + dx[aw]) + ", but should be L"))
833+ else if ((dw != an))
834+ then throw(((("Your staked duck is " + dw) + ", but passed ") + an))
845835 else {
846- let ds = value(assetInfo(fromBase58String(aj)))
836+ let dy = value(assetInfo(fromBase58String(aj)))
847837 if (!(isDefined(getInteger(z, as(aj)))))
848- then throw((("NFT " + ds.name) + " is not staked"))
838+ then throw((("NFT " + dy.name) + " is not staked"))
849839 else {
850- let dt = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + ds.name) + " is orphaned"))
851- if ((dt == dp))
840+ let dz = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dy.name) + " is orphaned"))
841+ if ((dz == dv))
852842 then throw("You cannot trade with yourself")
853843 else {
854- let du = split_4C(dn, ":")
855- if ((size(du) != 3))
844+ let dA = split_4C(dt, ":")
845+ if ((size(dA) != 3))
856846 then throw("bpOrderStr should contain exactly 2 ':' separators")
857847 else {
858- let dv = split(du[0], "_")
859- let dw = split(du[1], "_")
860- let dx = if ((du[2] == ""))
848+ let dB = split(dA[0], "_")
849+ let dC = split(dA[1], "_")
850+ let dD = if ((dA[2] == ""))
861851 then nil
862- else split(du[2], "_")
863- if ((size(dv) != B))
852+ else split(dA[2], "_")
853+ if ((size(dB) != B))
864854 then throw("All 6 resources should be passed")
865- else if ((size(dw) != B))
855+ else if ((size(dC) != B))
866856 then throw("All 6 materials should be passed")
867857 else {
868- let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
869- let aU = split_4C(cV, ":")
870- let cW = split(aU[aD], "_")
871- let cX = split(aU[aE], "_")
872- let cY = if ((aU[aF] == ""))
858+ let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
859+ let aZ = split_4C(db, ":")
860+ let dc = split(aZ[aD], "_")
861+ let dd = split(aZ[aE], "_")
862+ let de = if ((aZ[aF] == ""))
873863 then nil
874- else split(aU[aF], "_")
875- let dy = aT(aU)
876- let dz = bf(aU)
877- let dA = bg(aU)
878- let dB = parseIntValue(aU[aG])
879- let dC = ((((aQ(aU[aC]) - dy) - dz) - dA) - dB)
880- let bA = am(an)
881- let cf = bz(bA)
882- let dD = split(cf[az], "_")
883- let dE = split(cf[aA], "_")
884- let dF = if ((cf[aB] == ""))
864+ else split(aZ[aF], "_")
865+ let dE = parseIntValue(aZ[aG])
866+ let bC = am(an)
867+ let cl = bB(bC)
868+ let dF = split(cl[az], "_")
869+ let dG = split(cl[aA], "_")
870+ let dH = if ((cl[aB] == ""))
885871 then nil
886- else split(cf[aB], "_")
872+ else split(cl[aB], "_")
887873 let aO = ai(aj)
888- let dG = aN(aO)
889- let dH = split(dG[aH], "_")
890- let dI = split(dG[aI], "_")
891- let dJ = if ((dG[aJ] == ""))
874+ let dI = aN(aO)
875+ let dJ = split(dI[aH], "_")
876+ let dK = split(dI[aI], "_")
877+ let dL = if ((dI[aJ] == ""))
892878 then nil
893- else split(dG[aJ], "_")
894- let de = 0
895- let df = {
896- let aY = dv
897- let aZ = size(aY)
898- let ba = $Tuple11(nil, nil, nil, 0, 0, 0, 0, dD, cW, dH, M)
899- func bb (bc,bd) = if ((bd >= aZ))
900- then bc
901- else bO(bc, aY[bd])
879+ else split(dI[aJ], "_")
880+ let dk = 0
881+ let dl = {
882+ let be = dB
883+ let bf = size(be)
884+ let bg = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dF, dc, dJ, M, false)
885+ func bh (bi,bj) = if ((bj >= bf))
886+ then bi
887+ else bT(bi, be[bj])
902888
903- func be (bc,bd) = if ((bd >= aZ))
904- then bc
889+ func bk (bi,bj) = if ((bj >= bf))
890+ then bi
905891 else throw("List size exceeds 6")
906892
907- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
893+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
908894 }
909- let bw = {
910- let aY = dw
911- let aZ = size(aY)
912- let ba = $Tuple11(nil, nil, nil, df._4, df._5, df._6, 0, dE, cX, dI, N)
913- func cL (bc,bd) = if ((bd >= aZ))
914- then bc
915- else bO(bc, aY[bd])
895+ let by = {
896+ let be = dC
897+ let bf = size(be)
898+ let bg = $Tuple12(nil, nil, nil, dl._4, dl._5, dl._6, 0, dG, dd, dK, N, false)
899+ func cR (bi,bj) = if ((bj >= bf))
900+ then bi
901+ else bT(bi, be[bj])
916902
917- func cM (bc,bd) = if ((bd >= aZ))
918- then bc
903+ func cS (bi,bj) = if ((bj >= bf))
904+ then bi
919905 else throw("List size exceeds 6")
920906
921- cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
907+ cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
922908 }
923- let aP = if ((size(dx) != 0))
909+ let aP = if ((size(dD) != 0))
924910 then {
925- let aY = dx
926- let aZ = size(aY)
927- let ba = $Tuple11(nil, nil, nil, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
928- func dg (bc,bd) = if ((bd >= aZ))
929- then bc
930- else bO(bc, aY[bd])
911+ let be = dD
912+ let bf = size(be)
913+ let bg = $Tuple12(nil, nil, nil, by._4, by._5, by._6, 0, dH, de, dL, O, true)
914+ func dm (bi,bj) = if ((bj >= bf))
915+ then bi
916+ else bT(bi, be[bj])
931917
932- func dh (bc,bd) = if ((bd >= aZ))
933- then bc
918+ func dn (bi,bj) = if ((bj >= bf))
919+ then bi
934920 else throw("List size exceeds 50")
935921
936- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
922+ dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
937923 }
938- else $Tuple11(cY, dJ, dF, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
939- let di = aP._4
940- let dK = if ((0 > (dB - di)))
924+ else $Tuple12(de, dL, dH, by._4, by._5, by._6, 0, dH, de, dL, O, true)
925+ let do = aP._4
926+ let dM = if ((0 > (dE - do)))
941927 then 0
942- else (dB - di)
943- let dj = makeString_2C([aU[aC], makeString(df._1, "_"), makeString(bw._1, "_"), makeString(aP._1, "_"), toString(dK)], ":")
944- let dL = makeString_2C([makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_")], ":")
945- let dM = makeString_2C([cf[ay], makeString(df._3, "_"), makeString(bw._3, "_"), makeString(aP._3, "_")], ":")
946- let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
947- if ((dk == dk))
928+ else (dE - do)
929+ let dp = makeString_2C([aZ[aC], makeString(dl._1, "_"), makeString(by._1, "_"), makeString(aP._1, "_"), toString(dM)], ":")
930+ let dN = makeString_2C([makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_")], ":")
931+ let dO = makeString_2C([cl[ay], makeString(dl._3, "_"), makeString(by._3, "_"), makeString(aP._3, "_")], ":")
932+ let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
933+ if ((dq == dq))
948934 then {
949- let dN = invoke(z, "updateBackpack", [an, dM], nil)
950- if ((dN == dN))
935+ let dP = invoke(z, "updateBackpack", [an, dO], nil)
936+ if ((dP == dP))
951937 then {
952- let dm = [StringEntry(aO, dL)]
953- let dO = aP._5
954- let dP = if ((dO > 0))
938+ let ds = [StringEntry(aO, dN)]
939+ let dQ = aP._5
940+ let dR = if ((dQ > 0))
955941 then {
956- let dQ = fraction(aP._5, K, b)
957- let dR = at(dp)
958- let dS = getString(z, dR)
959- if (isDefined(dS))
960- then (((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dQ, g))
961- else ((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g))
942+ let dS = fraction(aP._5, K, b)
943+ let dT = at(dv)
944+ let dU = getString(z, dT)
945+ if (isDefined(dU))
946+ then (((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dS, g))
947+ else ((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g))
962948 }
963- else dm
964- let dT = aP._6
965- if ((dT > 0))
966- then if ((size(bZ.payments) != 1))
949+ else ds
950+ let dV = aP._6
951+ if ((dV > 0))
952+ then if ((size(cf.payments) != 1))
967953 then throw("exactly 1 payment must be attached")
968954 else {
969- let cn = bZ.payments[0]
970- let co = cn.amount
971- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
972- if ((cp != g))
955+ let ct = cf.payments[0]
956+ let cu = ct.amount
957+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
958+ if ((cv != g))
973959 then throw("USDT payments only!")
974- else if ((co != dT))
975- then throw(("Payment needed is " + toString(dT)))
976- else if ((L > co))
960+ else if ((cu != dV))
961+ then throw(("Payment needed is " + toString(dV)))
962+ else if ((L > cu))
977963 then throw(("Payment should be at least " + toString(L)))
978964 else {
979- let dU = fraction(aP._6, K, b)
980- let dR = at(dt)
981- let dS = getString(z, dR)
982- if (isDefined(dS))
983- then (((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dU, g))
984- else ((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g))
965+ let dW = fraction(aP._6, K, b)
966+ let dT = at(dz)
967+ let dU = getString(z, dT)
968+ if (isDefined(dU))
969+ then (((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dW, g))
970+ else ((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
985971 }
986972 }
987- else if ((size(bZ.payments) != 0))
973+ else if ((size(cf.payments) != 0))
988974 then throw("No payments needed")
989- else dP
975+ else dR
990976 }
991977 else throw("Strict value is not equal to itself.")
992978 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 1000000
77
88 let c = 10000000
99
1010 let d = 100000000
1111
1212 let e = 10000000000
1313
1414 let f = take(drop(this.bytes, 1), 1)
1515
1616 let g = {
1717 let h = f
1818 if ((base58'2W' == h))
1919 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2020 else if ((base58'2T' == h))
2121 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
2222 else throw("Unknown chain")
2323 }
2424
2525 let i = {
2626 let h = f
2727 if ((base58'2W' == h))
2828 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2929 else if ((base58'2T' == h))
3030 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
3131 else throw("Unknown chain")
3232 }
3333
3434 func j (k,l) = valueOrErrorMessage(getString(k, l), makeString(["mandatory ", toString(k), ".", l, " is not defined"], ""))
3535
3636
3737 func m (l,n) = valueOrElse(getInteger(this, l), n)
3838
3939
4040 let o = 1
4141
4242 let p = 2
4343
4444 let q = 3
4545
4646 func r () = "%s__restConfig"
4747
4848
4949 func s () = "%s__restAddr"
5050
5151
5252 func t (u) = split_4C(j(u, r()), a)
5353
5454
5555 func v (w,x) = valueOrErrorMessage(addressFromString(w[x]), ("Rest cfg doesn't contain address at index " + toString(x)))
5656
5757
5858 let y = addressFromStringValue(valueOrElse(getString(this, s()), i))
5959
6060 let w = t(y)
6161
6262 let z = v(w, o)
6363
6464 let A = "Africa_F_Africa"
6565
6666 let B = 6
6767
6868 let C = 10000000000
6969
7070 let D = 39637
7171
7272 let E = 10000
7373
7474 let F = 200
7575
7676 let G = 300
7777
7878 let H = "LAND"
7979
8080 let I = "DUCK"
8181
8282 let J = 10000000000
8383
8484 let K = 10000
8585
8686 let L = 100000
8787
8888 let M = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8989
9090 let N = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
9191
9292 let O = ["First Aid Kit", "Backpack", "Food Ration", "Jet Pack", "Shield"]
9393
9494 let P = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
9595
9696 let Q = ["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"]
9797
9898 let R = 0
9999
100100 let S = 1
101101
102102 let T = 2
103103
104104 let U = 3
105105
106106 let V = 4
107107
108108 let W = 0
109109
110110 let X = 1
111111
112112 let Y = 2
113113
114114 let Z = 3
115115
116116 let aa = 4
117117
118118 let ab = 5
119119
120120 let ac = 6
121121
122122 let ad = 7
123123
124124 let ae = 8
125125
126126 func af (ag,ah) = ((("factoryWhByContinentAndRes_" + ag) + "_") + toString(ah))
127127
128128
129129 func ai (aj) = ("landOrder_" + aj)
130130
131131
132132 func ak (al) = ("stakedDuckByOwner_" + al)
133133
134134
135135 func am (an) = ("backPack_" + an)
136136
137137
138138 func ao (an) = ("duckLocation_" + an)
139139
140140
141141 func ap () = "contractsBlocked"
142142
143143
144144 func aq (ar) = ("nftOwner_" + ar)
145145
146146
147147 func as (ar) = ("stakedTime_" + ar)
148148
149149
150150 func at (au) = ("accRefBy_" + au)
151151
152152
153153 let av = 0
154154
155155 let aw = 1
156156
157157 let ax = 2
158158
159159 let ay = 0
160160
161161 let az = 1
162162
163163 let aA = 2
164164
165165 let aB = 3
166166
167167 let aC = 0
168168
169169 let aD = 1
170170
171171 let aE = 2
172172
173173 let aF = 3
174174
175175 let aG = 4
176176
177177 let aH = 0
178178
179179 let aI = 1
180180
181181 let aJ = 2
182182
183183 func aK (aL) = {
184184 let h = aL
185185 if ($isInstanceOf(h, "String"))
186186 then {
187187 let aM = h
188188 aM
189189 }
190190 else throw("fail to cast into String")
191191 }
192192
193193
194194 func aN (aO) = {
195195 let aP = split(valueOrElse(getString(aO), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
196196 [if ((size(split(aP[aH], "_")) == B))
197197 then aP[aH]
198198 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aP[aI], "_")) == B))
199199 then aP[aI]
200200 else "0@0_0@0_0@0_0@0_0@0_0@0", aP[aJ]]
201201 }
202202
203203
204-func aQ (aR) = {
205- let aS = split(aR, "_")
206- ((J * (parseIntValue(aS[1]) + 1)) * parseIntValue(aS[0]))
204+func aQ (aR,aS,aT) = if (aT)
205+ then {
206+ let aU = if ((aR >= 0))
207+ then (((aR + aS) - 1) / aS)
208+ else -((((-(aR) + aS) - 1) / aS))
209+ (aU * d)
210+ }
211+ else aR
212+
213+
214+func aV (aW) = {
215+ let aX = split(aW, "_")
216+ ((J * (parseIntValue(aX[1]) + 1)) * parseIntValue(aX[0]))
207217 }
208218
209219
210-func aT (aU) = {
211- func aV (aW,aX) = (aW + parseIntValue(aX))
212-
213- let aY = split(aU[aD], "_")
214- let aZ = size(aY)
215- let ba = 0
216- func bb (bc,bd) = if ((bd >= aZ))
217- then bc
218- else aV(bc, aY[bd])
219-
220- func be (bc,bd) = if ((bd >= aZ))
221- then bc
222- else throw("List size exceeds 6")
223-
224- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
225- }
226-
227-
228-func bf (aU) = {
229- func aV (aW,aX) = (aW + parseIntValue(aX))
230-
231- let aY = split(aU[aE], "_")
232- let aZ = size(aY)
233- let ba = 0
234- func bb (bc,bd) = if ((bd >= aZ))
235- then bc
236- else aV(bc, aY[bd])
237-
238- func be (bc,bd) = if ((bd >= aZ))
239- then bc
240- else throw("List size exceeds 6")
241-
242- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
243- }
244-
245-
246-func bg (aU) = {
247- let bh = aU[aF]
248- if ((bh == ""))
220+func aY (aZ) = {
221+ let ba = aZ[aF]
222+ if ((ba == ""))
249223 then 0
250224 else {
251- func aV (aW,aX) = (aW + parseIntValue(aX))
225+ func bb (bc,bd) = {
226+ let x = bc._1
227+ let aS = parseIntValue(split(Q[x], "_")[ad])
228+ $Tuple2((x + 1), (bc._2 + aQ(parseIntValue(bd), aS, true)))
229+ }
252230
253- let aY = split_4C(bh, "_")
254- let aZ = size(aY)
255- let ba = 0
256- func bb (bc,bd) = if ((bd >= aZ))
257- then bc
258- else aV(bc, aY[bd])
231+( let be = split_4C(ba, "_")
232+ let bf = size(be)
233+ let bg = $Tuple2(0, 0)
234+ func bh (bi,bj) = if ((bj >= bf))
235+ then bi
236+ else bb(bi, be[bj])
259237
260- func be (bc,bd) = if ((bd >= aZ))
261- then bc
238+ func bk (bi,bj) = if ((bj >= bf))
239+ then bi
262240 else throw("List size exceeds 50")
263241
264- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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)
242+ bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
265243 }
266244 }
267245
268246
269-func bi (bj,ah,bk,bl) = {
270- let bm = af(bj, ah)
271- let bn = valueOrElse(getInteger(bm), 0)
272- let bo = if ((bn > C))
247+func bl (bm,ah,aR,bn) = {
248+ let bo = af(bm, ah)
249+ let bp = valueOrElse(getInteger(bo), 0)
250+ let bq = if ((bp > C))
273251 then 0
274- else if (((bn + bk) > C))
275- then (C - bn)
276- else bk
277- let bp = (fraction(bo, ((F * D) - fraction(((100 * bn) + (50 * bo)), D, C)), e) + fraction((bk - bo), D, d))
278- let bq = (bl - (bl / 100))
279- if (((bq * bk) > (bp * d)))
280- then throw((((((((((("Actual price = " + toString(bp)) + " / ") + toString(bk)) + " < minPrice = ") + toString(bl)) + ", (") + bj) + ", ") + M[ah]) + ")"))
281- else $Tuple2(IntegerEntry(bm, (bn + bk)), bp)
252+ else if (((bp + aR) > C))
253+ then (C - bp)
254+ else aR
255+ let br = (fraction(bq, ((F * D) - fraction(((100 * bp) + (50 * bq)), D, C)), e) + fraction((aR - bq), D, d))
256+ let bs = (bn - (bn / 100))
257+ if (((bs * aR) > (br * d)))
258+ then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(aR)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + M[ah]) + ")"))
259+ else $Tuple2(IntegerEntry(bo, (bp + aR)), br)
282260 }
283261
284262
285-func br (bj,bs,bk,bt) = {
286- let bm = af(bj, bs)
287- let bn = valueOrElse(getInteger(bm), 0)
288- let bu = if ((bn > C))
289- then min([bk, (bn - C)])
263+func bt (bm,bu,aR,bv) = {
264+ let bo = af(bm, bu)
265+ let bp = valueOrElse(getInteger(bo), 0)
266+ let bw = if ((bp > C))
267+ then min([aR, (bp - C)])
290268 else 0
291- let bv = min([bn, (bk - bu)])
292- let bw = (bv + bu)
293- let bx = (fraction(bv, ((G * D) - fraction(((100 * bn) - (50 * bv)), D, C)), e) + fraction(bu, (2 * D), d))
294- let by = (bt + (bt / 100))
295- if (((bx * d) > (by * bw)))
296- then throw((((((((((("Actual price = " + toString(bx)) + " / ") + toString(bw)) + " > maxPrice = ") + toString(bt)) + ", (") + bj) + ", ") + N[bs]) + ")"))
297- else $Tuple3(IntegerEntry(bm, (bn - bw)), bx, bw)
269+ let bx = min([bp, (aR - bw)])
270+ let by = (bx + bw)
271+ let bz = (fraction(bx, ((G * D) - fraction(((100 * bp) - (50 * bx)), D, C)), e) + fraction(bw, (2 * D), d))
272+ let bA = (bv + (bv / 100))
273+ if (((bz * d) > (bA * by)))
274+ then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + N[bu]) + ")"))
275+ else $Tuple3(IntegerEntry(bo, (bp - by)), bz, by)
298276 }
299277
300278
301-func bz (bA) = {
302- let aP = split(valueOrElse(getString(z, bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
279+func bB (bC) = {
280+ let aP = split(valueOrElse(getString(z, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
303281 [toString(valueOrElse(parseInt(aP[ay]), 0)), if ((size(split(aP[az], "_")) == B))
304282 then aP[az]
305283 else "0_0_0_0_0_0", if ((size(split(aP[aA], "_")) == B))
306284 then aP[aA]
307285 else "0_0_0_0_0_0", aP[aB]]
308286 }
309287
310288
311-func bB () = if (valueOrElse(getBoolean(z, ap()), false))
289+func bD () = if (valueOrElse(getBoolean(z, ap()), false))
312290 then throw("Contracts are under maintenance")
313291 else unit
314292
315293
316-func bC (aW,aX) = {
317- let bD = aW._1
318- let bE = split(aX, "@")
319- if ((size(bE) != 2))
294+func bE (bc,bd) = {
295+ let bF = bc._1
296+ let bG = bc._7
297+ let aS = if (bG)
298+ then parseIntValue(split(Q[bF], "_")[ad])
299+ else 0
300+ let bH = split(bd, "@")
301+ if ((size(bH) != 2))
320302 then throw("Incorrect order format, should be amount@price")
321303 else {
322- let bF = parseIntValue(bE[0])
323- let bG = parseIntValue(bE[1])
324- let bH = fraction(bF, bG, d)
325- let bI = parseIntValue(aW._5[bD])
326- let bJ = split(aW._6[bD], "@")
327- let bK = parseIntValue(bJ[0])
328- let bL = parseIntValue(bJ[1])
329- if ((0 > bL))
304+ let bI = parseIntValue(bH[0])
305+ let bJ = parseIntValue(bH[1])
306+ let bK = fraction(bI, bJ, d)
307+ let bL = aQ(bI, aS, bG)
308+ let bM = parseIntValue(bc._5[bF])
309+ let bN = split(bc._6[bF], "@")
310+ let bO = parseIntValue(bN[0])
311+ let bP = parseIntValue(bN[1])
312+ if (if ((0 > bP))
313+ then true
314+ else (0 > bJ))
330315 then throw("Price can't be negative")
331316 else {
332- let bM = fraction(bK, bL, d)
333- if ((bF == 0))
334- then if ((bK > 0))
335- then $Tuple6((bD + 1), (aW._2 :+ toString(bI)), (aW._3 - bK), (aW._4 - bM), aW._5, aW._6)
336- else $Tuple6((bD + 1), (aW._2 :+ toString((bI - bK))), (aW._3 + bK), aW._4, aW._5, aW._6)
337- else if ((bF > 0))
338- then if ((0 > bK))
317+ let bQ = fraction(bO, bP, d)
318+ let bR = aQ(bO, aS, bG)
319+ if ((bI == 0))
320+ then if ((bO > 0))
321+ then $Tuple7((bF + 1), (bc._2 :+ toString(bM)), (bc._3 - bR), (bc._4 - bQ), bc._5, bc._6, bG)
322+ else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), (bc._3 + bR), bc._4, bc._5, bc._6, bG)
323+ else if ((bI > 0))
324+ then if ((0 > bO))
325+ then $Tuple7((bF + 1), (bc._2 :+ toString((bM - bO))), ((bc._3 + bL) + bR), (bc._4 + bK), bc._5, bc._6, bG)
326+ else $Tuple7((bF + 1), (bc._2 :+ toString(bM)), ((bc._3 + bL) - bR), ((bc._4 + bK) - bQ), bc._5, bc._6, bG)
327+ else if ((0 > bO))
339328 then {
340- let bN = (bF + bK)
341- $Tuple6((bD + 1), (aW._2 :+ toString((bI - bK))), (aW._3 + bN), (aW._4 + bH), aW._5, aW._6)
329+ let bS = (bO - bI)
330+ if ((0 > (bM - bS)))
331+ then throw((((("Attempt to take " + toString(bS)) + " from warehouse, but only ") + toString(bM)) + " available"))
332+ else $Tuple7((bF + 1), (bc._2 :+ toString((bM - bS))), ((bc._3 + bR) - bL), bc._4, bc._5, bc._6, bG)
342333 }
343- else $Tuple6((bD + 1), (aW._2 :+ toString(bI)), ((aW._3 + bF) - bK), ((aW._4 + bH) - bM), aW._5, aW._6)
344- else if ((0 > bK))
345- then {
346- let bN = (bK - bF)
347- if ((0 > (bI - bN)))
348- then throw((((("Attempt to take " + toString(bN)) + " from warehouse, but only ") + toString(bI)) + " available"))
349- else $Tuple6((bD + 1), (aW._2 :+ toString((bI - bN))), (aW._3 + bN), aW._4, aW._5, aW._6)
350- }
351- else if ((0 > (bI + bF)))
352- then throw((((("Attempt to take " + toString(-(bF))) + " from warehouse, but only ") + toString(bI)) + " available"))
353- else $Tuple6((bD + 1), (aW._2 :+ toString((bI + bF))), ((aW._3 - bF) - bK), (aW._4 - bM), aW._5, aW._6)
334+ else if ((0 > (bM + bI)))
335+ then throw((((("Attempt to take " + toString(-(bI))) + " from warehouse, but only ") + toString(bM)) + " available"))
336+ else $Tuple7((bF + 1), (bc._2 :+ toString((bM + bI))), ((bc._3 - bL) - bR), (bc._4 - bQ), bc._5, bc._6, bG)
354337 }
355338 }
356339 }
357340
358341
359-func bO (aW,bP) = {
360- let bD = aW._7
361- let bQ = split(bP, "@")
362- if ((size(bQ) != 2))
342+func bT (bc,bU) = {
343+ let bF = bc._7
344+ let bG = bc._12
345+ let aS = if (bG)
346+ then parseIntValue(split(Q[bF], "_")[ad])
347+ else 0
348+ let bV = split(bU, "@")
349+ if ((size(bV) != 2))
363350 then throw("Incorrect order format, should be amount@price")
364351 else {
365- let bR = parseIntValue(bQ[0])
366- let bS = parseIntValue(bQ[1])
367- if ((0 > bS))
352+ let bW = parseIntValue(bV[0])
353+ let bX = parseIntValue(bV[1])
354+ if ((0 > bX))
368355 then throw("Price can't be negative")
369356 else {
370- let bT = fraction(bR, bS, d)
371- let bU = parseIntValue(aW._8[bD])
372- let bI = parseIntValue(aW._9[bD])
373- let bV = split(aW._10[bD], "@")
374- let bW = parseIntValue(bV[0])
375- let bX = parseIntValue(bV[1])
376- if (if ((bR != 0))
377- then (bS != bX)
357+ let bY = fraction(bW, bX, d)
358+ let bZ = parseIntValue(bc._8[bF])
359+ let bM = parseIntValue(bc._9[bF])
360+ let ca = split(bc._10[bF], "@")
361+ let cb = parseIntValue(ca[0])
362+ let cc = parseIntValue(ca[1])
363+ if (if ((bW != 0))
364+ then (bX != cc)
378365 else false)
379- then throw(((((("Prices of " + aW._11[bD]) + " don't match! WH price=") + toString(bX)) + ", your price=") + toString(bS)))
366+ then throw(((((("Prices of " + bc._11[bF]) + " don't match! WH price=") + toString(cc)) + ", your price=") + toString(bX)))
380367 else {
381- let bY = fraction(bW, bX, d)
382- if ((bR == 0))
383- then $Tuple11((aW._1 :+ toString(bI)), (aW._2 :+ aW._10[bD]), (aW._3 :+ toString(bU)), aW._4, aW._5, aW._6, (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
384- else if ((bR > 0))
385- then if ((0 > bW))
386- then if ((bR > -(bW)))
387- then throw(((((("Attempt to buy " + toString(bR)) + " of ") + aW._11[bD]) + ", but warehouse only sells ") + toString(-(bW))))
388- else $Tuple11((aW._1 :+ toString(bI)), (aW._2 :+ ((toString((bW + bR)) + "@") + toString(bX))), (aW._3 :+ toString((bU + bR))), (aW._4 + bR), aW._5, (aW._6 + bT), (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
389- else throw((("Attempt to buy " + aW._11[bD]) + " while warehouse doesn't sell it"))
390- else if ((bW > 0))
391- then if ((-(bR) > bW))
392- then throw(((((("Attempt to sell " + toString(-(bR))) + " of ") + aW._11[bD]) + ", but warehouse only buys ") + toString(bW)))
393- else if ((-(bR) > bU))
394- then throw(((((("Attempt to sell " + toString(-(bR))) + ", but you only have ") + toString(bU)) + " of ") + aW._11[bD]))
395- else $Tuple11((aW._1 :+ toString((bI - bR))), (aW._2 :+ ((toString((bW + bR)) + "@") + toString(bX))), (aW._3 :+ toString((bU + bR))), (aW._4 - bR), (aW._5 - bT), aW._6, (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
396- else throw((("Attempt to sell " + aW._11[bD]) + " while warehouse doesn't buy it"))
368+ let cd = fraction(cb, cc, d)
369+ let ce = aQ(bW, aS, bG)
370+ if ((bW == 0))
371+ then $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ bc._10[bF]), (bc._3 :+ toString(bZ)), bc._4, bc._5, bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
372+ else if ((bW > 0))
373+ then if ((0 > cb))
374+ then if ((bW > -(cb)))
375+ then throw(((((("Attempt to buy " + toString(bW)) + " of ") + bc._11[bF]) + ", but warehouse only sells ") + toString(-(cb))))
376+ else $Tuple11((bc._1 :+ toString(bM)), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 + ce), bc._5, (bc._6 + bY), (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
377+ else throw((("Attempt to buy " + bc._11[bF]) + " while warehouse doesn't sell it"))
378+ else if ((cb > 0))
379+ then if ((-(bW) > cb))
380+ then throw(((((("Attempt to sell " + toString(-(bW))) + " of ") + bc._11[bF]) + ", but warehouse only buys ") + toString(cb)))
381+ else if ((-(bW) > bZ))
382+ then throw(((((("Attempt to sell " + toString(-(bW))) + ", but you only have ") + toString(bZ)) + " of ") + bc._11[bF]))
383+ else $Tuple11((bc._1 :+ toString((bM - bW))), (bc._2 :+ ((toString((cb + bW)) + "@") + toString(cc))), (bc._3 :+ toString((bZ + bW))), (bc._4 - ce), (bc._5 - bY), bc._6, (bc._7 + 1), bc._8, bc._9, bc._10, bc._11)
384+ else throw((("Attempt to sell " + bc._11[bF]) + " while warehouse doesn't buy it"))
397385 }
398386 }
399387 }
400388 }
401389
402390
403-@Callable(bZ)
404-func constructorV1 (ca) = if ((bZ.caller != this))
391+@Callable(cf)
392+func constructorV1 (cg) = if ((cf.caller != this))
405393 then throw("Permission denied")
406- else [StringEntry(s(), ca)]
394+ else [StringEntry(s(), cg)]
407395
408396
409397
410-@Callable(bZ)
411-func sellResources (cb,cc) = {
412- let cd = bB()
413- if ((cd == cd))
398+@Callable(cf)
399+func sellResources (ch,ci) = {
400+ let cj = bD()
401+ if ((cj == cj))
414402 then {
415- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
416- if ((size(bZ.payments) != 0))
403+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
404+ if ((size(cf.payments) != 0))
417405 then throw("sellResources doesn't require any payments")
418406 else {
419- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
420- if ((ce[aw] != "F"))
421- then throw(("Duck location type should be Factory, but is " + ce[aw]))
407+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
408+ if ((ck[aw] != "F"))
409+ then throw(("Duck location type should be Factory, but is " + ck[aw]))
422410 else {
423- let bj = ce[ax]
424- let cf = bz(am(an))
425- let cg = split(cf[az], "_")
426- func ch (aW,bD) = if ((cb[bD] > parseIntValue(cg[bD])))
427- then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to sell ") + toString(cb[bD])))
428- else if ((0 > cb[bD]))
429- then throw(((("You tried to sell negative amount of " + M[bD]) + ": ") + toString(cb[bD])))
430- else if ((cb[bD] > 0))
411+ let bm = ck[ax]
412+ let cl = bB(am(an))
413+ let cm = split(cl[az], "_")
414+ func cn (bc,bF) = if ((ch[bF] > parseIntValue(cm[bF])))
415+ then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to sell ") + toString(ch[bF])))
416+ else if ((0 > ch[bF]))
417+ then throw(((("You tried to sell negative amount of " + M[bF]) + ": ") + toString(ch[bF])))
418+ else if ((ch[bF] > 0))
431419 then {
432- let ci = bi(bj, bD, cb[bD], cc[bD])
433- $Tuple3((aW._1 :+ ci._1), (aW._2 :+ toString((parseIntValue(cg[bD]) - cb[bD]))), (aW._3 + ci._2))
420+ let co = bl(bm, bF, ch[bF], ci[bF])
421+ $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cm[bF]) - ch[bF]))), (bc._3 + co._2))
434422 }
435- else $Tuple3(aW._1, (aW._2 :+ cg[bD]), aW._3)
423+ else $Tuple3(bc._1, (bc._2 :+ cm[bF]), bc._3)
436424
437- let cj = {
438- let aY = [0, 1, 2, 3, 4, 5]
439- let aZ = size(aY)
440- let ba = $Tuple3(nil, nil, 0)
441- func bb (bc,bd) = if ((bd >= aZ))
442- then bc
443- else ch(bc, aY[bd])
425+ let cp = {
426+ let be = [0, 1, 2, 3, 4, 5]
427+ let bf = size(be)
428+ let bg = $Tuple3(nil, nil, 0)
429+ func bh (bi,bj) = if ((bj >= bf))
430+ then bi
431+ else cn(bi, be[bj])
444432
445- func be (bc,bd) = if ((bd >= aZ))
446- then bc
433+ func bk (bi,bj) = if ((bj >= bf))
434+ then bi
447435 else throw("List size exceeds 6")
448436
449- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
437+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
450438 }
451- let ck = makeString([cf[ay], makeString(cj._2, "_"), cf[aA], cf[aB]], ":")
452- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
453- $Tuple2((cj._1 :+ ScriptTransfer(bZ.caller, cj._3, g)), cl)
439+ let cq = makeString([cl[ay], makeString(cp._2, "_"), cl[aA], cl[aB]], ":")
440+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
441+ $Tuple2((cp._1 :+ ScriptTransfer(cf.caller, cp._3, g)), cr)
454442 }
455443 }
456444 }
457445 else throw("Strict value is not equal to itself.")
458446 }
459447
460448
461449
462-@Callable(bZ)
463-func buyMaterials (cb,cm) = {
464- let cd = bB()
465- if ((cd == cd))
450+@Callable(cf)
451+func buyMaterials (ch,cs) = {
452+ let cj = bD()
453+ if ((cj == cj))
466454 then {
467- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
468- if ((size(bZ.payments) != 1))
455+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
456+ if ((size(cf.payments) != 1))
469457 then throw("exactly 1 payment must be attached")
470458 else {
471- let cn = bZ.payments[0]
472- let co = cn.amount
473- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
474- if ((cp != g))
459+ let ct = cf.payments[0]
460+ let cu = ct.amount
461+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
462+ if ((cv != g))
475463 then throw("USDT payments only!")
476464 else {
477- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
478- if ((ce[aw] != "F"))
479- then throw(("Duck location type should be Factory, but is " + ce[aw]))
465+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
466+ if ((ck[aw] != "F"))
467+ then throw(("Duck location type should be Factory, but is " + ck[aw]))
480468 else {
481- let bj = ce[ax]
482- let cf = bz(am(an))
483- let cq = split(cf[aA], "_")
484- func cr (aW,bD) = if ((0 > cb[bD]))
485- then throw(((("You tried to buy negative amount of " + N[bD]) + ": ") + toString(cb[bD])))
486- else if ((cb[bD] > 0))
469+ let bm = ck[ax]
470+ let cl = bB(am(an))
471+ let cw = split(cl[aA], "_")
472+ func cx (bc,bF) = if ((0 > ch[bF]))
473+ then throw(((("You tried to buy negative amount of " + N[bF]) + ": ") + toString(ch[bF])))
474+ else if ((ch[bF] > 0))
487475 then {
488- let ci = br(bj, bD, cb[bD], cm[bD])
489- $Tuple3((aW._1 :+ ci._1), (aW._2 :+ toString((parseIntValue(cq[bD]) + ci._3))), (aW._3 + ci._2))
476+ let co = bt(bm, bF, ch[bF], cs[bF])
477+ $Tuple3((bc._1 :+ co._1), (bc._2 :+ toString((parseIntValue(cw[bF]) + co._3))), (bc._3 + co._2))
490478 }
491- else $Tuple3(aW._1, (aW._2 :+ cq[bD]), aW._3)
479+ else $Tuple3(bc._1, (bc._2 :+ cw[bF]), bc._3)
492480
493- let cj = {
494- let aY = [0, 1, 2, 3, 4, 5]
495- let aZ = size(aY)
496- let ba = $Tuple3(nil, nil, 0)
497- func bb (bc,bd) = if ((bd >= aZ))
498- then bc
499- else cr(bc, aY[bd])
481+ let cp = {
482+ let be = [0, 1, 2, 3, 4, 5]
483+ let bf = size(be)
484+ let bg = $Tuple3(nil, nil, 0)
485+ func bh (bi,bj) = if ((bj >= bf))
486+ then bi
487+ else cx(bi, be[bj])
500488
501- func be (bc,bd) = if ((bd >= aZ))
502- then bc
489+ func bk (bi,bj) = if ((bj >= bf))
490+ then bi
503491 else throw("List size exceeds 6")
504492
505- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
493+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
506494 }
507- if ((cj._3 > co))
508- then throw(((("Insufficient payment! Attached=" + toString(co)) + ", required=") + toString(cj._3)))
495+ if ((cp._3 > cu))
496+ then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
509497 else {
510- let ck = makeString([cf[ay], cf[az], makeString(cj._2, "_"), cf[aB]], ":")
511- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
512- let u = if (((co - cj._3) > 0))
513- then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
498+ let cq = makeString([cl[ay], cl[az], makeString(cp._2, "_"), cl[aB]], ":")
499+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
500+ let u = if (((cu - cp._3) > 0))
501+ then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
514502 else nil
515- let cs = (cj._3 / 100)
516- $Tuple2(((cj._1 ++ u) :+ ScriptTransfer(y, cs, g)), cl)
503+ let cy = (cp._3 / 100)
504+ $Tuple2(((cp._1 ++ u) :+ ScriptTransfer(y, cy, g)), cr)
517505 }
518506 }
519507 }
520508 }
521509 }
522510 else throw("Strict value is not equal to itself.")
523511 }
524512
525513
526514
527-@Callable(bZ)
528-func exchangeResources (cb) = {
529- let cd = bB()
530- if ((cd == cd))
515+@Callable(cf)
516+func exchangeResources (ch) = {
517+ let cj = bD()
518+ if ((cj == cj))
531519 then {
532- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
533- if ((size(bZ.payments) != 1))
520+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
521+ if ((size(cf.payments) != 1))
534522 then throw("exactly 1 payment must be attached")
535523 else {
536- let cn = bZ.payments[0]
537- let co = cn.amount
538- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
539- if ((cp != g))
524+ let ct = cf.payments[0]
525+ let cu = ct.amount
526+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
527+ if ((cv != g))
540528 then throw("USDT payments only!")
541529 else {
542- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
543- if ((ce[aw] != "F"))
544- then throw(("Duck location type should be Factory, but is " + ce[aw]))
530+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
531+ if ((ck[aw] != "F"))
532+ then throw(("Duck location type should be Factory, but is " + ck[aw]))
545533 else {
546- let bj = ce[ax]
547- let cf = bz(am(an))
548- let cg = split(cf[az], "_")
549- let cq = split(cf[aA], "_")
550- func ct (aW,bD) = {
551- let bm = af(bj, bD)
552- let bn = valueOrElse(getInteger(bm), 0)
553- let cu = cb[bD]
554- if ((cu > parseIntValue(cg[bD])))
555- then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to exchange ") + toString(cu)))
556- else if ((0 > cu))
557- then throw(((("You tried to exchange negative amount of " + M[bD]) + ": ") + toString(cu)))
558- else if ((cu > 0))
559- then $Tuple4((aW._1 :+ toString((parseIntValue(cg[bD]) - cu))), (aW._2 :+ toString((parseIntValue(cq[bD]) + cu))), (aW._3 + fraction(cu, D, d)), (aW._4 :+ IntegerEntry(bm, bn)))
560- else $Tuple4((aW._1 :+ cg[bD]), (aW._2 :+ cq[bD]), aW._3, aW._4)
534+ let bm = ck[ax]
535+ let cl = bB(am(an))
536+ let cm = split(cl[az], "_")
537+ let cw = split(cl[aA], "_")
538+ func cz (bc,bF) = {
539+ let bo = af(bm, bF)
540+ let bp = valueOrElse(getInteger(bo), 0)
541+ let cA = ch[bF]
542+ if ((cA > parseIntValue(cm[bF])))
543+ then throw(((((("You have " + cm[bF]) + " of ") + M[bF]) + ", but tried to exchange ") + toString(cA)))
544+ else if ((0 > cA))
545+ then throw(((("You tried to exchange negative amount of " + M[bF]) + ": ") + toString(cA)))
546+ else if ((cA > 0))
547+ then $Tuple4((bc._1 :+ toString((parseIntValue(cm[bF]) - cA))), (bc._2 :+ toString((parseIntValue(cw[bF]) + cA))), (bc._3 + fraction(cA, D, d)), (bc._4 :+ IntegerEntry(bo, bp)))
548+ else $Tuple4((bc._1 :+ cm[bF]), (bc._2 :+ cw[bF]), bc._3, bc._4)
561549 }
562550
563- let cj = {
564- let aY = [0, 1, 2, 3, 4, 5]
565- let aZ = size(aY)
566- let ba = $Tuple4(nil, nil, 0, nil)
567- func bb (bc,bd) = if ((bd >= aZ))
568- then bc
569- else ct(bc, aY[bd])
551+ let cp = {
552+ let be = [0, 1, 2, 3, 4, 5]
553+ let bf = size(be)
554+ let bg = $Tuple4(nil, nil, 0, nil)
555+ func bh (bi,bj) = if ((bj >= bf))
556+ then bi
557+ else cz(bi, be[bj])
570558
571- func be (bc,bd) = if ((bd >= aZ))
572- then bc
559+ func bk (bi,bj) = if ((bj >= bf))
560+ then bi
573561 else throw("List size exceeds 6")
574562
575- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
563+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
576564 }
577- if ((cj._3 > co))
578- then throw(((("Insufficient payment! Attached=" + toString(co)) + ", required=") + toString(cj._3)))
565+ if ((cp._3 > cu))
566+ then throw(((("Insufficient payment! Attached=" + toString(cu)) + ", required=") + toString(cp._3)))
579567 else {
580- let ck = makeString([cf[ay], makeString(cj._1, "_"), makeString(cj._2, "_"), cf[aB]], ":")
581- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
582- let u = if (((co - cj._3) > 0))
583- then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
568+ let cq = makeString([cl[ay], makeString(cp._1, "_"), makeString(cp._2, "_"), cl[aB]], ":")
569+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
570+ let u = if (((cu - cp._3) > 0))
571+ then [ScriptTransfer(cf.caller, (cu - cp._3), g)]
584572 else nil
585- let cs = (cj._3 / 100)
586- $Tuple2(((u ++ cj._4) :+ ScriptTransfer(y, cs, g)), cl)
573+ let cy = (cp._3 / 100)
574+ $Tuple2(((u ++ cp._4) :+ ScriptTransfer(y, cy, g)), cr)
587575 }
588576 }
589577 }
590578 }
591579 }
592580 else throw("Strict value is not equal to itself.")
593581 }
594582
595583
596584
597-@Callable(bZ)
598-func craftGoods (cv,cw) = {
599- let cd = bB()
600- if ((cd == cd))
601- then if ((size(bZ.payments) != 1))
585+@Callable(cf)
586+func craftGoods (cB,cC) = {
587+ let cj = bD()
588+ if ((cj == cj))
589+ then if ((size(cf.payments) != 1))
602590 then throw("exactly 1 payment must be attached")
603591 else {
604- let cn = bZ.payments[0]
605- let co = cn.amount
606- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
607- if ((cp != g))
592+ let ct = cf.payments[0]
593+ let cu = ct.amount
594+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
595+ if ((cv != g))
608596 then throw("USDT payments only!")
609- else if ((co != b))
597+ else if ((cu != b))
610598 then throw("exactly 1 USDT must be attached as payment")
611- else if ((0 >= cw))
599+ else if ((0 >= cC))
612600 then throw("Quantity should be positive")
613601 else {
614- let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
615- let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
616- if ((ce[aw] != "M"))
617- then throw(("Duck location type should be Manufactory, but is " + ce[aw]))
602+ let an = valueOrErrorMessage(getString(z, ak(toString(cf.caller))), "You don't have a duck staked")
603+ let ck = split(valueOrElse(getString(z, ao(an)), A), "_")
604+ if ((ck[aw] != "M"))
605+ then throw(("Duck location type should be Manufactory, but is " + ck[aw]))
618606 else {
619- let cx = ce[av]
620- let cf = bz(am(an))
621- let cq = split(cf[aA], "_")
622- if (if ((0 > cv))
607+ let cD = ck[av]
608+ let cl = bB(am(an))
609+ let cw = split(cl[aA], "_")
610+ if (if ((0 > cB))
623611 then true
624- else (cv >= size(Q)))
625- then throw(("Unknown product idx=" + toString(cv)))
612+ else (cB >= size(Q)))
613+ then throw(("Unknown product idx=" + toString(cB)))
626614 else {
627- let cy = split(Q[cv], "_")
628- if ((size(cy) != (B + 3)))
629- then throw(("Fatal: unknown recipe: " + Q[cv]))
615+ let cE = split(Q[cB], "_")
616+ if ((size(cE) != (B + 3)))
617+ then throw(("Fatal: unknown recipe: " + Q[cB]))
630618 else {
631- let cz = parseIntValue(cy[ae])
632- if ((P[cz] != cx))
633- then throw(((("This product is available in " + P[cz]) + ", but you are in ") + cx))
619+ let cF = parseIntValue(cE[ae])
620+ if ((P[cF] != cD))
621+ then throw(((("This product is available in " + P[cF]) + ", but you are in ") + cD))
634622 else {
635- let cA = if ((cf[aB] == ""))
623+ let cG = if ((cl[aB] == ""))
636624 then nil
637- else split(cf[aB], "_")
638- func cB (aW,cC) = {
639- let cD = aW._2
640- let cE = if ((size(cA) > cD))
641- then cA[cD]
625+ else split(cl[aB], "_")
626+ func cH (bc,cI) = {
627+ let cJ = bc._2
628+ let cK = if ((size(cG) > cJ))
629+ then cG[cJ]
642630 else "0"
643- let cF = parseIntValue(cE)
644- let bk = (cw * parseIntValue(cy[ad]))
645- let cG = if ((cD == cv))
646- then toString((cF + bk))
647- else cE
648- $Tuple2((aW._1 :+ cG), (cD + 1))
631+ let cL = parseIntValue(cK)
632+ let aR = (cC * parseIntValue(cE[ad]))
633+ let cM = if ((cJ == cB))
634+ then toString((cL + aR))
635+ else cK
636+ $Tuple2((bc._1 :+ cM), (cJ + 1))
649637 }
650638
651- let cH = ( let aY = Q
652- let aZ = size(aY)
653- let ba = $Tuple2(nil, 0)
654- func bb (bc,bd) = if ((bd >= aZ))
655- then bc
656- else cB(bc, aY[bd])
639+ let cN = ( let be = Q
640+ let bf = size(be)
641+ let bg = $Tuple2(nil, 0)
642+ func bh (bi,bj) = if ((bj >= bf))
643+ then bi
644+ else cH(bi, be[bj])
657645
658- func be (bc,bd) = if ((bd >= aZ))
659- then bc
646+ func bk (bi,bj) = if ((bj >= bf))
647+ then bi
660648 else throw("List size exceeds 50")
661649
662- be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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
663- func cI (aW,bD) = {
664- let cJ = ((parseIntValue(cy[bD]) * c) * cw)
665- let cK = parseIntValue(cq[bD])
666- if ((cJ > cK))
667- then throw(((((((("You have " + cq[bD]) + " of ") + N[bD]) + ", but recipe requires ") + toString(cJ)) + " for quantity ") + toString(cw)))
668- else if ((cJ > 0))
669- then (aW :+ toString((cK - cJ)))
670- else (aW :+ cq[bD])
650+ bk(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bh(bg, 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
651+ func cO (bc,bF) = {
652+ let cP = ((parseIntValue(cE[bF]) * c) * cC)
653+ let cQ = parseIntValue(cw[bF])
654+ if ((cP > cQ))
655+ then throw(((((((("You have " + cw[bF]) + " of ") + N[bF]) + ", but recipe requires ") + toString(cP)) + " for quantity ") + toString(cC)))
656+ else if ((cP > 0))
657+ then (bc :+ toString((cQ - cP)))
658+ else (bc :+ cw[bF])
671659 }
672660
673- let cj = {
674- let aY = [0, 1, 2, 3, 4, 5]
675- let aZ = size(aY)
676- let ba = nil
677- func cL (bc,bd) = if ((bd >= aZ))
678- then bc
679- else cI(bc, aY[bd])
661+ let cp = {
662+ let be = [0, 1, 2, 3, 4, 5]
663+ let bf = size(be)
664+ let bg = nil
665+ func cR (bi,bj) = if ((bj >= bf))
666+ then bi
667+ else cO(bi, be[bj])
680668
681- func cM (bc,bd) = if ((bd >= aZ))
682- then bc
669+ func cS (bi,bj) = if ((bj >= bf))
670+ then bi
683671 else throw("List size exceeds 6")
684672
685- cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
673+ cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
686674 }
687- let ck = makeString([cf[ay], cf[az], makeString(cj, "_"), makeString(cH, "_")], ":")
688- let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
689- $Tuple2(nil, cl)
675+ let cq = makeString([cl[ay], cl[az], makeString(cp, "_"), makeString(cN, "_")], ":")
676+ let cr = aK(invoke(z, "updateBackpack", [an, cq], nil))
677+ $Tuple2(nil, cr)
690678 }
691679 }
692680 }
693681 }
694682 }
695683 }
696684 else throw("Strict value is not equal to itself.")
697685 }
698686
699687
700688
701-@Callable(bZ)
702-func setWarehouseOrder (cN,aj) = {
703- let cO = bZ.originCaller
704- let au = toString(cO)
705- let cl = if ((cO != y))
706- then bB()
689+@Callable(cf)
690+func setWarehouseOrder (cT,aj) = {
691+ let cU = cf.originCaller
692+ let au = toString(cU)
693+ let cr = if ((cU != y))
694+ then bD()
707695 else false
708- let cP = value(assetInfo(fromBase58String(aj)))
696+ let cV = value(assetInfo(fromBase58String(aj)))
709697 if (!(isDefined(getInteger(z, as(aj)))))
710- then throw((("NFT " + cP.name) + " is not staked"))
698+ then throw((("NFT " + cV.name) + " is not staked"))
711699 else {
712- let cQ = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cP.name) + " is orphaned"))
713- if (if ((cO != y))
714- then (cQ != au)
700+ let cW = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cV.name) + " is orphaned"))
701+ if (if ((cU != y))
702+ then (cW != au)
715703 else false)
716704 then throw((H + " is not yours"))
717705 else {
718- let cR = split_4C(cN, ":")
719- if ((size(cR) != 3))
706+ let cX = split_4C(cT, ":")
707+ if ((size(cX) != 3))
720708 then throw("cargoListStr should contain exactly 2 ':' separators")
721709 else {
722- let cS = split(cR[0], "_")
723- let cT = split(cR[1], "_")
724- let cU = if ((cR[2] == ""))
710+ let cY = split(cX[0], "_")
711+ let cZ = split(cX[1], "_")
712+ let da = if ((cX[2] == ""))
725713 then nil
726- else split(cR[2], "_")
727- if ((size(cS) != B))
714+ else split(cX[2], "_")
715+ if ((size(cY) != B))
728716 then throw("All 6 resources should be passed")
729- else if ((size(cT) != B))
717+ else if ((size(cZ) != B))
730718 then throw("All 6 materials should be passed")
731719 else {
732- let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
733- let aU = split_4C(cV, ":")
734- let cW = split(aU[aD], "_")
735- let cX = split(aU[aE], "_")
736- let cY = if ((aU[aF] == ""))
720+ let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
721+ let aZ = split_4C(db, ":")
722+ let dc = split(aZ[aD], "_")
723+ let dd = split(aZ[aE], "_")
724+ let de = if ((aZ[aF] == ""))
737725 then nil
738- else split(aU[aF], "_")
739- let cZ = aQ(aU[aC])
726+ else split(aZ[aF], "_")
727+ let df = aV(aZ[aC])
740728 let aO = ai(aj)
741- let da = aN(aO)
742- let db = split(da[aH], "_")
743- let dc = split(da[aI], "_")
744- let dd = if ((da[aJ] == ""))
729+ let dg = aN(aO)
730+ let dh = split(dg[aH], "_")
731+ let di = split(dg[aI], "_")
732+ let dj = if ((dg[aJ] == ""))
745733 then nil
746- else split(da[aJ], "_")
747- let de = 0
748- let df = {
749- let aY = cS
750- let aZ = size(aY)
751- let ba = $Tuple6(0, nil, 0, 0, cW, db)
752- func bb (bc,bd) = if ((bd >= aZ))
753- then bc
754- else bC(bc, aY[bd])
734+ else split(dg[aJ], "_")
735+ let dk = 0
736+ let dl = {
737+ let be = cY
738+ let bf = size(be)
739+ let bg = $Tuple7(0, nil, 0, 0, dc, dh, false)
740+ func bh (bi,bj) = if ((bj >= bf))
741+ then bi
742+ else bE(bi, be[bj])
755743
756- func be (bc,bd) = if ((bd >= aZ))
757- then bc
744+ func bk (bi,bj) = if ((bj >= bf))
745+ then bi
758746 else throw("List size exceeds 6")
759747
760- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
748+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
761749 }
762- let bw = {
763- let aY = cT
764- let aZ = size(aY)
765- let ba = $Tuple6(0, nil, df._3, df._4, cX, dc)
766- func cL (bc,bd) = if ((bd >= aZ))
767- then bc
768- else bC(bc, aY[bd])
750+ let by = {
751+ let be = cZ
752+ let bf = size(be)
753+ let bg = $Tuple7(0, nil, dl._3, dl._4, dd, di, false)
754+ func cR (bi,bj) = if ((bj >= bf))
755+ then bi
756+ else bE(bi, be[bj])
769757
770- func cM (bc,bd) = if ((bd >= aZ))
771- then bc
758+ func cS (bi,bj) = if ((bj >= bf))
759+ then bi
772760 else throw("List size exceeds 6")
773761
774- cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
762+ cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
775763 }
776- let aP = {
777- let aY = cU
778- let aZ = size(aY)
779- let ba = $Tuple6(0, nil, bw._3, bw._4, cY, dd)
780- func dg (bc,bd) = if ((bd >= aZ))
781- then bc
782- else bC(bc, aY[bd])
764+ let aP = if ((size(da) != 0))
765+ then {
766+ let be = da
767+ let bf = size(be)
768+ let bg = $Tuple7(0, nil, by._3, by._4, de, dj, true)
769+ func dm (bi,bj) = if ((bj >= bf))
770+ then bi
771+ else bE(bi, be[bj])
783772
784- func dh (bc,bd) = if ((bd >= aZ))
785- then bc
786- else throw("List size exceeds 50")
773+ func dn (bi,bj) = if ((bj >= bf))
774+ then bi
775+ else throw("List size exceeds 50")
787776
788- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
789- }
790- let di = aP._3
791- if ((di > cZ))
792- then throw((((("Attempt to reserve " + toString(di)) + " space, but only ") + toString(cZ)) + " warehouse space left"))
777+ dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
778+ }
779+ else $Tuple7(0, de, by._3, by._4, de, dj, true)
780+ let do = aP._3
781+ if ((do > df))
782+ then throw((((("Attempt to reserve " + toString(do)) + " space, but only ") + toString(df)) + " warehouse space left"))
793783 else {
794- let dj = makeString_2C([aU[aC], makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_"), toString(di)], ":")
795- let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
796- if ((dk == dk))
784+ let dp = makeString_2C([aZ[aC], makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_"), toString(do)], ":")
785+ let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
786+ if ((dq == dq))
797787 then {
798- let dl = aP._4
799- let dm = if ((dl > 0))
800- then if ((size(bZ.payments) != 1))
788+ let dr = aP._4
789+ let ds = if ((dr > 0))
790+ then if ((size(cf.payments) != 1))
801791 then throw("exactly 1 payment must be attached")
802792 else {
803- let cn = bZ.payments[0]
804- let co = cn.amount
805- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
806- if ((cp != g))
793+ let ct = cf.payments[0]
794+ let cu = ct.amount
795+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
796+ if ((cv != g))
807797 then throw("USDT payments only!")
808- else if ((co != dl))
809- then throw(("Payment needed is " + toString(dl)))
810- else [StringEntry(aO, cN)]
798+ else if ((cu != dr))
799+ then throw(("Payment needed is " + toString(dr)))
800+ else [StringEntry(aO, cT)]
811801 }
812- else if ((dl == 0))
813- then if ((size(bZ.payments) != 0))
802+ else if ((dr == 0))
803+ then if ((size(cf.payments) != 0))
814804 then throw("No payments needed")
815- else [StringEntry(aO, cN)]
816- else if ((size(bZ.payments) != 0))
805+ else [StringEntry(aO, cT)]
806+ else if ((size(cf.payments) != 0))
817807 then throw("No payments needed")
818- else [ScriptTransfer(addressFromStringValue(cQ), -(dl), g), StringEntry(aO, cN)]
819- $Tuple2(dm, cl)
808+ else [ScriptTransfer(addressFromStringValue(cW), -(dr), g), StringEntry(aO, cT)]
809+ $Tuple2(ds, cr)
820810 }
821811 else throw("Strict value is not equal to itself.")
822812 }
823813 }
824814 }
825815 }
826816 }
827817 }
828818
829819
830820
831-@Callable(bZ)
832-func acceptWarehouseOrder (dn,aj,an) = {
833- let cd = bB()
834- if ((cd == cd))
821+@Callable(cf)
822+func acceptWarehouseOrder (dt,aj,an) = {
823+ let cj = bD()
824+ if ((cj == cj))
835825 then {
836- let do = bZ.originCaller
837- let dp = toString(do)
838- let dq = valueOrErrorMessage(getString(z, ak(dp)), "You don't have a duck staked")
839- let ce = valueOrElse(getString(z, ao(dq)), A)
840- let dr = split(value(ce), "_")
841- if ((dr[aw] != "L"))
842- then throw((("Duck location type is " + dr[aw]) + ", but should be L"))
843- else if ((dq != an))
844- then throw(((("Your staked duck is " + dq) + ", but passed ") + an))
826+ let du = cf.originCaller
827+ let dv = toString(du)
828+ let dw = valueOrErrorMessage(getString(z, ak(dv)), "You don't have a duck staked")
829+ let ck = valueOrElse(getString(z, ao(dw)), A)
830+ let dx = split(value(ck), "_")
831+ if ((dx[aw] != "L"))
832+ then throw((("Duck location type is " + dx[aw]) + ", but should be L"))
833+ else if ((dw != an))
834+ then throw(((("Your staked duck is " + dw) + ", but passed ") + an))
845835 else {
846- let ds = value(assetInfo(fromBase58String(aj)))
836+ let dy = value(assetInfo(fromBase58String(aj)))
847837 if (!(isDefined(getInteger(z, as(aj)))))
848- then throw((("NFT " + ds.name) + " is not staked"))
838+ then throw((("NFT " + dy.name) + " is not staked"))
849839 else {
850- let dt = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + ds.name) + " is orphaned"))
851- if ((dt == dp))
840+ let dz = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dy.name) + " is orphaned"))
841+ if ((dz == dv))
852842 then throw("You cannot trade with yourself")
853843 else {
854- let du = split_4C(dn, ":")
855- if ((size(du) != 3))
844+ let dA = split_4C(dt, ":")
845+ if ((size(dA) != 3))
856846 then throw("bpOrderStr should contain exactly 2 ':' separators")
857847 else {
858- let dv = split(du[0], "_")
859- let dw = split(du[1], "_")
860- let dx = if ((du[2] == ""))
848+ let dB = split(dA[0], "_")
849+ let dC = split(dA[1], "_")
850+ let dD = if ((dA[2] == ""))
861851 then nil
862- else split(du[2], "_")
863- if ((size(dv) != B))
852+ else split(dA[2], "_")
853+ if ((size(dB) != B))
864854 then throw("All 6 resources should be passed")
865- else if ((size(dw) != B))
855+ else if ((size(dC) != B))
866856 then throw("All 6 materials should be passed")
867857 else {
868- let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
869- let aU = split_4C(cV, ":")
870- let cW = split(aU[aD], "_")
871- let cX = split(aU[aE], "_")
872- let cY = if ((aU[aF] == ""))
858+ let db = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
859+ let aZ = split_4C(db, ":")
860+ let dc = split(aZ[aD], "_")
861+ let dd = split(aZ[aE], "_")
862+ let de = if ((aZ[aF] == ""))
873863 then nil
874- else split(aU[aF], "_")
875- let dy = aT(aU)
876- let dz = bf(aU)
877- let dA = bg(aU)
878- let dB = parseIntValue(aU[aG])
879- let dC = ((((aQ(aU[aC]) - dy) - dz) - dA) - dB)
880- let bA = am(an)
881- let cf = bz(bA)
882- let dD = split(cf[az], "_")
883- let dE = split(cf[aA], "_")
884- let dF = if ((cf[aB] == ""))
864+ else split(aZ[aF], "_")
865+ let dE = parseIntValue(aZ[aG])
866+ let bC = am(an)
867+ let cl = bB(bC)
868+ let dF = split(cl[az], "_")
869+ let dG = split(cl[aA], "_")
870+ let dH = if ((cl[aB] == ""))
885871 then nil
886- else split(cf[aB], "_")
872+ else split(cl[aB], "_")
887873 let aO = ai(aj)
888- let dG = aN(aO)
889- let dH = split(dG[aH], "_")
890- let dI = split(dG[aI], "_")
891- let dJ = if ((dG[aJ] == ""))
874+ let dI = aN(aO)
875+ let dJ = split(dI[aH], "_")
876+ let dK = split(dI[aI], "_")
877+ let dL = if ((dI[aJ] == ""))
892878 then nil
893- else split(dG[aJ], "_")
894- let de = 0
895- let df = {
896- let aY = dv
897- let aZ = size(aY)
898- let ba = $Tuple11(nil, nil, nil, 0, 0, 0, 0, dD, cW, dH, M)
899- func bb (bc,bd) = if ((bd >= aZ))
900- then bc
901- else bO(bc, aY[bd])
879+ else split(dI[aJ], "_")
880+ let dk = 0
881+ let dl = {
882+ let be = dB
883+ let bf = size(be)
884+ let bg = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dF, dc, dJ, M, false)
885+ func bh (bi,bj) = if ((bj >= bf))
886+ then bi
887+ else bT(bi, be[bj])
902888
903- func be (bc,bd) = if ((bd >= aZ))
904- then bc
889+ func bk (bi,bj) = if ((bj >= bf))
890+ then bi
905891 else throw("List size exceeds 6")
906892
907- be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
893+ bk(bh(bh(bh(bh(bh(bh(bg, 0), 1), 2), 3), 4), 5), 6)
908894 }
909- let bw = {
910- let aY = dw
911- let aZ = size(aY)
912- let ba = $Tuple11(nil, nil, nil, df._4, df._5, df._6, 0, dE, cX, dI, N)
913- func cL (bc,bd) = if ((bd >= aZ))
914- then bc
915- else bO(bc, aY[bd])
895+ let by = {
896+ let be = dC
897+ let bf = size(be)
898+ let bg = $Tuple12(nil, nil, nil, dl._4, dl._5, dl._6, 0, dG, dd, dK, N, false)
899+ func cR (bi,bj) = if ((bj >= bf))
900+ then bi
901+ else bT(bi, be[bj])
916902
917- func cM (bc,bd) = if ((bd >= aZ))
918- then bc
903+ func cS (bi,bj) = if ((bj >= bf))
904+ then bi
919905 else throw("List size exceeds 6")
920906
921- cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
907+ cS(cR(cR(cR(cR(cR(cR(bg, 0), 1), 2), 3), 4), 5), 6)
922908 }
923- let aP = if ((size(dx) != 0))
909+ let aP = if ((size(dD) != 0))
924910 then {
925- let aY = dx
926- let aZ = size(aY)
927- let ba = $Tuple11(nil, nil, nil, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
928- func dg (bc,bd) = if ((bd >= aZ))
929- then bc
930- else bO(bc, aY[bd])
911+ let be = dD
912+ let bf = size(be)
913+ let bg = $Tuple12(nil, nil, nil, by._4, by._5, by._6, 0, dH, de, dL, O, true)
914+ func dm (bi,bj) = if ((bj >= bf))
915+ then bi
916+ else bT(bi, be[bj])
931917
932- func dh (bc,bd) = if ((bd >= aZ))
933- then bc
918+ func dn (bi,bj) = if ((bj >= bf))
919+ then bi
934920 else throw("List size exceeds 50")
935921
936- dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
922+ dn(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(dm(bg, 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)
937923 }
938- else $Tuple11(cY, dJ, dF, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
939- let di = aP._4
940- let dK = if ((0 > (dB - di)))
924+ else $Tuple12(de, dL, dH, by._4, by._5, by._6, 0, dH, de, dL, O, true)
925+ let do = aP._4
926+ let dM = if ((0 > (dE - do)))
941927 then 0
942- else (dB - di)
943- let dj = makeString_2C([aU[aC], makeString(df._1, "_"), makeString(bw._1, "_"), makeString(aP._1, "_"), toString(dK)], ":")
944- let dL = makeString_2C([makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_")], ":")
945- let dM = makeString_2C([cf[ay], makeString(df._3, "_"), makeString(bw._3, "_"), makeString(aP._3, "_")], ":")
946- let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
947- if ((dk == dk))
928+ else (dE - do)
929+ let dp = makeString_2C([aZ[aC], makeString(dl._1, "_"), makeString(by._1, "_"), makeString(aP._1, "_"), toString(dM)], ":")
930+ let dN = makeString_2C([makeString(dl._2, "_"), makeString(by._2, "_"), makeString(aP._2, "_")], ":")
931+ let dO = makeString_2C([cl[ay], makeString(dl._3, "_"), makeString(by._3, "_"), makeString(aP._3, "_")], ":")
932+ let dq = invoke(z, "saveWarehouse", [dp, aj], nil)
933+ if ((dq == dq))
948934 then {
949- let dN = invoke(z, "updateBackpack", [an, dM], nil)
950- if ((dN == dN))
935+ let dP = invoke(z, "updateBackpack", [an, dO], nil)
936+ if ((dP == dP))
951937 then {
952- let dm = [StringEntry(aO, dL)]
953- let dO = aP._5
954- let dP = if ((dO > 0))
938+ let ds = [StringEntry(aO, dN)]
939+ let dQ = aP._5
940+ let dR = if ((dQ > 0))
955941 then {
956- let dQ = fraction(aP._5, K, b)
957- let dR = at(dp)
958- let dS = getString(z, dR)
959- if (isDefined(dS))
960- then (((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dQ, g))
961- else ((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g))
942+ let dS = fraction(aP._5, K, b)
943+ let dT = at(dv)
944+ let dU = getString(z, dT)
945+ if (isDefined(dU))
946+ then (((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dS, g))
947+ else ((ds :+ ScriptTransfer(du, (aP._5 - (3 * dS)), g)) :+ ScriptTransfer(y, dS, g))
962948 }
963- else dm
964- let dT = aP._6
965- if ((dT > 0))
966- then if ((size(bZ.payments) != 1))
949+ else ds
950+ let dV = aP._6
951+ if ((dV > 0))
952+ then if ((size(cf.payments) != 1))
967953 then throw("exactly 1 payment must be attached")
968954 else {
969- let cn = bZ.payments[0]
970- let co = cn.amount
971- let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
972- if ((cp != g))
955+ let ct = cf.payments[0]
956+ let cu = ct.amount
957+ let cv = valueOrErrorMessage(ct.assetId, "WAVES can't be used as payment")
958+ if ((cv != g))
973959 then throw("USDT payments only!")
974- else if ((co != dT))
975- then throw(("Payment needed is " + toString(dT)))
976- else if ((L > co))
960+ else if ((cu != dV))
961+ then throw(("Payment needed is " + toString(dV)))
962+ else if ((L > cu))
977963 then throw(("Payment should be at least " + toString(L)))
978964 else {
979- let dU = fraction(aP._6, K, b)
980- let dR = at(dt)
981- let dS = getString(z, dR)
982- if (isDefined(dS))
983- then (((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dU, g))
984- else ((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g))
965+ let dW = fraction(aP._6, K, b)
966+ let dT = at(dz)
967+ let dU = getString(z, dT)
968+ if (isDefined(dU))
969+ then (((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dU)), dW, g))
970+ else ((dR :+ ScriptTransfer(addressFromStringValue(dz), (aP._6 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
985971 }
986972 }
987- else if ((size(bZ.payments) != 0))
973+ else if ((size(cf.payments) != 0))
988974 then throw("No payments needed")
989- else dP
975+ else dR
990976 }
991977 else throw("Strict value is not equal to itself.")
992978 }
993979 else throw("Strict value is not equal to itself.")
994980 }
995981 }
996982 }
997983 }
998984 }
999985 }
1000986 else throw("Strict value is not equal to itself.")
1001987 }
1002988
1003989

github/deemru/w8io/c3f4982 
644.25 ms