tx · 7ALzi2wC8GDNAAek1dKHzwo6FJH5MbWWw29m4W4GqJKg

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.06300000 Waves

2023.10.18 15:03 [2804014] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "7ALzi2wC8GDNAAek1dKHzwo6FJH5MbWWw29m4W4GqJKg", "fee": 6300000, "feeAssetId": null, "timestamp": 1697630599159, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "3nxZMiwPaRF3JWxdD45VufmNVd1d3yJNxPc5iDs3KA6Kk5Eig78KLCLSWTZidmFfjnzs3F2U3TYSQQPYvYccCGV5" ], "script": "base64:BgKVAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBQoDAQEIEgYKBAEBCAgSBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIagAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAD0NSQUZUX1VTRFRfQ09TVADAhD0AFENSQUZUX0RFTElWRVJZX0NPRUZGAAoAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ1AKCNBgAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUADk1JTlNIT1BQQVlNRU5UAKCNBgAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkFVQ1RJT05GRUUAkE4ADERFTElWRVJZX0ZFRQCQTgAOREVMSVZFUllfRkVFMTUAmHUBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIJZmFjdG9yeUlkB3Jlc1R5cGUJAKwCAgkArAICCQCsAgICG2ZhY3RvcnlXaEJ5Q29udGluZW50QW5kUmVzXwUJZmFjdG9yeUlkAgFfCQCkAwEFB3Jlc1R5cGUACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEEBXcwbWluCQCXAwEJAMwIAgUCdzAJAMwIAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQV3MG1pbgkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAvAkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEGcHJvbG9nAAkBBWFzSW50AQkA/QcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQlzZXRDb21tb24CA2FjYw9pZ25vcmVkSXRlcmF0b3IEAWoIBQNhY2MCXzEEBGl0ZW0DCQBmAgkAkAMBCAUDYWNjA18xMAUBagkAkQMCCAUDYWNjA18xMAUBagIDMEAwBAZpc1Byb2QIBQNhY2MCXzgECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAMFBmlzUHJvZAkAaAIFCG5ld09yZEFtBQhuZXdPcmRQcgkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzYFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl82BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl83BQFqCQCRAwIIBQNhY2MCXzcFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QDBQZpc1Byb2QJAGgCBQhjdXJPcmRBbQUIY3VyT3JkUHIJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CAUDYWNjAl8zCAUDYWNjAl80CQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGUCCQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkBQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQZhbURpZmYFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUGd2hJbml0BQhuZXdPcmRBbQgFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBkAgUGd2hJbml0BQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTABC3NldEludGVybmFsAwljdXJyZW50V2gKY3VycmVudE9yZAZuZXdPcmQECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8DCQECIT0CCQCQAwEFBm5ld09yZAADCQACAQIzbmV3T3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQZuZXdPcmQAAgIABQNuaWwJALwJAgkAkQMCBQZuZXdPcmQAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAXIKAAIkbAUIcmVzVHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsAAAA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OAQGYnBJbml0AwkAZgIJAJADAQgFA2FjYwJfOAUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzgFAWoAAAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfOQUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzkFAWoAAAQJd2hPcmRJbml0AwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQKd2hPcmRQYXJ0cwkAtQkCBQl3aE9yZEluaXQCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkAwUGaXNQcm9kCQBoAgUHd2hPcmRBbQUHd2hPcmRQcgkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAMJAAACBQdicE9yZEFtAAAJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yBQl3aE9yZEluaXQJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCAUDYWNjA18xMwMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGQCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGUCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQBE3NlbGxSZXNvdXJjZXNDb21tb24EB3Jlc0xpc3QMZmFjdG9yeUxvY0lkB2Ftb3VudHMJbWluUHJpY2VzCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFDGZhY3RvcnlMb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlgoECQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJ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Y2MwCQCWCgQFA25pbAUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZXhjaGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARBzaG9wMnVzZXJBY3Rpb25zAw11c2RXaDJCcFNhbGRvCmNhbGxlckFkZHILcmVjZWl2ZWRGZWUDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMFDXVzZFdoMkJwU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2AwkAZwIFC3JlY2VpdmVkRmVlCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgULcmVjZWl2ZWRGZWUABgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5BAZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmNhbGxlckFkZHIJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUFC3JlY2VpdmVkRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAEQdXNlcjJzaG9wQWN0aW9ucwQNdXNkQnAyV2hTYWxkbwRwbXRzDXNob3BMYW5kT3duZXIIc3BlbnRGZWUDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBBQRwbXRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAgUEcG10cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUNdXNkQnAyV2hTYWxkbwUIc3BlbnRGZWUDCQECIT0CBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ11c2RCcDJXaFNhbGRvAAYCASsJAQpmaXhlZFBvaW50AgUIc3BlbnRGZWUABgIOKGRlbGl2ZXJ5IGZlZSkDCQBmAgUOTUlOU0hPUFBBWU1FTlQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICEk1pbiBzaG9wIHRyYWRlIGlzIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGBAt1c2RCcDJXaEZlZQkAawMFDXVzZEJwMldoU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDXNob3BMYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1zaG9wTGFuZE93bmVyCQBlAgUNdXNkQnAyV2hTYWxkbwkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQUEcG10cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBQNuaWwBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYPc2hvcExhbmRBc3NldElkCmNhbGxlckFkZHIKYnBPcmRlclN0cglicFJlc0xpc3QJYnBNYXRMaXN0CmJwUHJvZExpc3QECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFD3Nob3BMYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBA1zaG9wTGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUPc2hvcExhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUNc2hvcExhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQUPc2hvcExhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EAXIKAAIkbAUIYnBPcmRSZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwAAAAAAAAAAAUJYnBSZXNMaXN0BQljdXJyV2hSZXMF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AMwIAgkAuQkCCAUBcgJfMgIBXwkAzAgCCQC5CQIIBQFtAl8yAgFfCQDMCAIJALoJAggFAXACXzICAV8FA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBA5hY2NTdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFDXNob3BMYW5kT3duZXIJAMwIAgkAawMFBnhwU2hvcAgFAXADXzEzBQVNVUxUOAUDbmlsBQNuaWwJAJwKCgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cggFAXICXzMIBQFtAl8zCAUBcAJfMwgFAXACXzUIBQFwAl82CAUBcANfMTMFDXNob3BMYW5kT3duZXIFBndoU2F2ZQUOYWNjU3RhdHNSZXN1bHQBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQZhbW91bnQEBm9uZVJlcwkAaQIFBmFtb3VudAAeBBFvbmVGYWN0b3J5QW1vdW50cwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwUDbmlsBAFzCQCkAwEFBm9uZVJlcwQHcmVzTGlzdAkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwUDbmlsBAltaW5QcmljZXMJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAFA25pbAoBCm9uZUZhY3RvcnkCA2FjYwljb250aW5lbnQEAXgJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUJY29udGluZW50BRFvbmVGYWN0b3J5QW1vdW50cwUJbWluUHJpY2VzCQCVCgMJAM4IAggFA2FjYwJfMQgFAXgCXzEJAGQCCAUDYWNjAl8yCAUBeAJfMwkAZAIIBQNhY2MCXzMIBQF4Al80BA0kdDAyNTI3MDI1MzYwCgACJGwFCmNvbnRpbmVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm9uZUZhY3RvcnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI1MjcwMjUzNjACXzEEDHVzZHRSZWNlaXZlZAgFDSR0MDI1MjcwMjUzNjACXzIECHRvdGFsUmVzCAUNJHQwMjUyNzAyNTM2MAJfMwQDZmVlCQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQECHVzZHRMZWZ0CQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlCQCXCgUFDmZhY3RvcnlBY3Rpb25zBQh1c2R0TGVmdAUDZmVlBRBhY3Rpdml0aWVzQW1vdW50BQh0b3RhbFJlcwEQY3JhZnRHb29kc0NvbW1vbgUHbWF0TGlzdAhwcm9kTGlzdBRtYW51ZmFjdG9yeUNvbnRpbmVudApwcm9kdWN0SWR4CHF1YW50aXR5AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQ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A25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhwcm9kdWNlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlQoDCAUGbWVyZ2VkAl8xBQduZXdQcm9kCAUGbWVyZ2VkAl8yGAFpARpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQILbGFuZEFzc2V0SWQCd2gECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBAF6CQELc2V0SW50ZXJuYWwDBQJ3aAUKY3VycmVudE9yZAUKY3VycmVudE9yZAkAlAoCBQNuaWwJAGQCCAUBegJfNAgFAXoCXzUBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBDXNlbGxSZXNvdXJjZXMCB2Ftb3VudHMJbWluUHJpY2VzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA0kdDAyODg5MzI5MDE5CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBQdhbW91bnRzBQltaW5QcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjg4OTMyOTAxOQJfMQQGbmV3UmVzCAUNJHQwMjg4OTMyOTAxOQJfMgQMdXNkdFJlY2VpdmVkCAUNJHQwMjg4OTMyOTAxOQJfMwQIdG90YWxSZXMIBQ0kdDAyODg5MzI5MDE5Al80BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQEB25ld1BhY2sJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESc2VsbFJlc291cmNlc1dvcmxkAgRhZGRyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUNYWNyZXNDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA0kdDAyOTgxMTI5OTY4CQEac2VsbFJlc291cmNlc1dvcmxkSW50ZXJuYWwBBQZhbW91bnQEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjk4MTEyOTk2OAJfMQQIdXNkdExlZnQIBQ0kdDAyOTgxMTI5OTY4Al8yBANmZWUIBQ0kdDAyOTgxMTI5OTY4Al8zBBBhY3Rpdml0aWVzQW1vdW50CAUNJHQwMjk4MTEyOTk2OAJfNAQIdG90YWxSZXMIBQ0kdDAyOTgxMTI5OTY4Al81AwkAZwIAAAUIdXNkdExlZnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUSaW52ZXN0RnVuZENvbnRyYWN0BQh1c2R0TGVmdAULdXNkdEFzc2V0SWQJAJQKAgUIdXNkdExlZnQFC3N0YXRzUmVzdWx0AWkBGnNlbGxSZXNvdXJjZXNXb3JsZFJFQURPTkxZAQZhbW91bnQECHVzZHRMZWZ0CAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50Al8yCQCUCgIFA25pbAUIdXNkdExlZnQBaQEZc2VsbFJlc291cmNlc0R1Y2tEZWxpdmVyeQMHYW1vdW50cwltaW5QcmljZXMQZmFjdG9yeUNvbnRpbmVudAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMzEyMDQzMTMyNQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltaW5QcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzEyMDQzMTMyNQJfMQQGbmV3UmVzCAUNJHQwMzEyMDQzMTMyNQJfMgQMdXNkdFJlY2VpdmVkCAUNJHQwMzEyMDQzMTMyNQJfMwQIdG90YWxSZXMIBQ0kdDAzMTIwNDMxMzI1Al80BAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQx1c2R0UmVjZWl2ZWQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAMJAGcCBQNmZWUJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlBQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXNlbGxSZXNvdXJjZXNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWluUHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMzMxNjMzNDM3CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzMxNjMzNDM3Al8xBAZuZXdSZXMIBQ0kdDAzMzMxNjMzNDM3Al8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMzMxNjMzNDM3Al8zBAh0b3RhbFJlcwgFDSR0MDMzMzE2MzM0MzcCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGJ1eU1hdGVyaWFscwIHYW1vdW50cwltYXhQcmljZXMEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzUyNjEzNTM4MwkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzUyNjEzNTM4MwJfMQQGbmV3TWF0CAUNJHQwMzUyNjEzNTM4MwJfMgQJdXNkdFNwZW50CAUNJHQwMzUyNjEzNTM4MwJfMwQIdG90YWxNYXQIBQ0kdDAzNTI2MTM1MzgzAl80AwkAZgIFCXVzZHRTcGVudAUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFCXVzZHRTcGVudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUJdXNkdFNwZW50BQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGGJ1eU1hdGVyaWFsc0R1Y2tEZWxpdmVyeQMHYW1vdW50cwltYXhQcmljZXMQZmFjdG9yeUNvbnRpbmVudAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzNjkwNDM3MDIxCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDM2OTA0MzcwMjECXzEEBm5ld01hdAgFDSR0MDM2OTA0MzcwMjECXzIECXVzZHRTcGVudAgFDSR0MDM2OTA0MzcwMjECXzMECHRvdGFsTWF0CAUNJHQwMzY5MDQzNzAyMQJfNAQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUJAJYDAQkAzAgCBQdmZWVQYXJ0CQDMCAIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUJdXNkdFNwZW50BQNmZWUDCQBmAgUQdXNkdFNwZW50V2l0aEZlZQUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYCASsJAQpmaXhlZFBvaW50AgUDZmVlAAYCDihkZWxpdmVyeSBmZWUpBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARhidXlNYXRlcmlhbHNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWF4UHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8EDSR0MDM5MjYzMzkzODAJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzkyNjMzOTM4MAJfMQQGbmV3TWF0CAUNJHQwMzkyNjMzOTM4MAJfMgQJdXNkdFNwZW50CAUNJHQwMzkyNjMzOTM4MAJfMwQIdG90YWxNYXQIBQ0kdDAzOTI2MzM5MzgwAl80BAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDA0MTQ1ODQxNTY0CQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MTQ1ODQxNTY0Al8xBAZuZXdNYXQIBQ0kdDA0MTQ1ODQxNTY0Al8yBAl1c2R0U3BlbnQIBQ0kdDA0MTQ1ODQxNTY0Al8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQxNDU4NDE1NjQCXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEdZXhjaGFuZ2VSZXNvdXJjZXNEdWNrRGVsaXZlcnkBB2Ftb3VudHMDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDMwNzk0MzE4NQkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDMwNzk0MzE4NQJfMQQGbmV3TWF0CAUNJHQwNDMwNzk0MzE4NQJfMgQJdXNkdFNwZW50CAUNJHQwNDMwNzk0MzE4NQJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MzA3OTQzMTg1Al80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR1leGNoYW5nZVJlc291cmNlc0xhbmREZWxpdmVyeQIHYW1vdW50cwtsYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEBHVzZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQR1c2VyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAdyZXNMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8EDSR0MDQ1NDQ3NDU1NTMJARdleGNoYW5nZVJlc291cmNlc0NvbW1vbgMFB3Jlc0xpc3QFB21hdExpc3QFB2Ftb3VudHMEBm5ld1JlcwgFDSR0MDQ1NDQ3NDU1NTMCXzEEBm5ld01hdAgFDSR0MDQ1NDQ3NDU1NTMCXzIECXVzZHRTcGVudAgFDSR0MDQ1NDQ3NDU1NTMCXzMEFHRvdGFsQW1vdW50Q29udmVydGVkCAUNJHQwNDU0NDc0NTU1MwJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFFHRvdGFsQW1vdW50Q29udmVydGVkBQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDkRFTElWRVJZX0ZFRTE1BQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUDbmlsBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUJdXNkdFNwZW50BQNmZWUDCQBmAgUQdXNkdFNwZW50V2l0aEZlZQUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYCASsJAQpmaXhlZFBvaW50AgUDZmVlAAYCDihkZWxpdmVyeSBmZWUpBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgEJAKwCAgkArAICAghleGFjdGx5IAkBCmZpeGVkUG9pbnQCBQ9DUkFGVF9VU0RUX0NPU1QABgIhIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNDc4Nzg0Nzk3NQkBEGNyYWZ0R29vZHNDb21tb24FBQdtYXRMaXN0BQhwcm9kTGlzdAUEY29udAUKcHJvZHVjdElkeAUIcXVhbnRpdHkEBm5ld01hdAgFDSR0MDQ3ODc4NDc5NzUCXzEEB25ld1Byb2QIBQ0kdDA0Nzg3ODQ3OTc1Al8yBAhtYXRTcGVudAgFDSR0MDQ3ODc4NDc5NzUCXzMEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJALoJAgUHbmV3UHJvZAIBXwUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwQ3JhZnQFCG1hdFNwZW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgUDbmlsCQCVCgMFBnJlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARZjcmFmdEdvb2RzRHVja0RlbGl2ZXJ5Awpwcm9kdWN0SWR4CHF1YW50aXR5FG1hbnVmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA0kdDA0OTIwMDQ5MzEzCQEQY3JhZnRHb29kc0NvbW1vbgUFB21hdExpc3QFCHByb2RMaXN0BRRtYW51ZmFjdG9yeUNvbnRpbmVudAUKcHJvZHVjdElkeAUIcXVhbnRpdHkEBm5ld01hdAgFDSR0MDQ5MjAwNDkzMTMCXzEEB25ld1Byb2QIBQ0kdDA0OTIwMDQ5MzEzAl8yBAhtYXRTcGVudAgFDSR0MDQ5MjAwNDkzMTMCXzMEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJALoJAgUHbmV3UHJvZAIBXwUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBDcmFmdAUIbWF0U3BlbnQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCHF1YW50aXR5BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFFENSQUZUX0RFTElWRVJZX0NPRUZGBANmZWUJAJYDAQkAzAgCBQdmZWVQYXJ0CQDMCAIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUPQ1JBRlRfVVNEVF9DT1NUBQNmZWUDCQBmAgUQdXNkdFNwZW50V2l0aEZlZQUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUPQ1JBRlRfVVNEVF9DT1NUAAYCASsJAQpmaXhlZFBvaW50AgUDZmVlAAYCDihkZWxpdmVyeSBmZWUpBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgUEcmVzdAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmNyYWZ0R29vZHNMYW5kRGVsaXZlcnkECnByb2R1Y3RJZHgIcXVhbnRpdHkLbGFuZEFzc2V0SWQUbWFudWZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECHByb2RMaXN0AwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDSR0MDUxNTU2NTE2NjkJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFFG1hbnVmYWN0b3J5Q29udGluZW50BQpwcm9kdWN0SWR4BQhxdWFudGl0eQQGbmV3TWF0CAUNJHQwNTE1NTY1MTY2OQJfMQQHbmV3UHJvZAgFDSR0MDUxNTU2NTE2NjkCXzIECG1hdFNwZW50CAUNJHQwNTE1NTY1MTY2OQJfMwQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJALoJAgUHbmV3UHJvZAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwQ3JhZnQFCG1hdFNwZW50BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQhxdWFudGl0eQUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRRDUkFGVF9ERUxJVkVSWV9DT0VGRgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFD0NSQUZUX1VTRFRfQ09TVAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFD0NSQUZUX1VTRFRfQ09TVAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIFBHJlc3QJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTc1ODI1NzgyMgkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NzU4MjU3ODIyAl8xBApuZXdVc2VyUmVzCAUNJHQwNTc1ODI1NzgyMgJfMgQKbmV3VXNlck1hdAgFDSR0MDU3NTgyNTc4MjICXzMEC25ld1VzZXJQcm9kCAUNJHQwNTc1ODI1NzgyMgJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU3NTgyNTc4MjICXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NzU4MjU3ODIyAl82BAh4cEFtb3VudAgFDSR0MDU3NTgyNTc4MjICXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NzU4MjU3ODIyAl84BApzaG9wV2hTYXZlCAUNJHQwNTc1ODI1NzgyMgJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NzU4MjU3ODIyA18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDU5MjY0NTk1MDIJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQlicFJlc0xpc3QFCWJwTWF0TGlzdAUKYnBQcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDU5MjY0NTk1MDICXzEECm5ld1VzZXJSZXMIBQ0kdDA1OTI2NDU5NTAyAl8yBApuZXdVc2VyTWF0CAUNJHQwNTkyNjQ1OTUwMgJfMwQLbmV3VXNlclByb2QIBQ0kdDA1OTI2NDU5NTAyAl80BA11c2RXaDJCcFNhbGRvCAUNJHQwNTkyNjQ1OTUwMgJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDU5MjY0NTk1MDICXzYECHhwQW1vdW50CAUNJHQwNTkyNjQ1OTUwMgJfNwQNc2hvcExhbmRPd25lcggFDSR0MDU5MjY0NTk1MDICXzgECnNob3BXaFNhdmUIBQ0kdDA1OTI2NDU5NTAyAl85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDU5MjY0NTk1MDIDXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUJAJYDAQkAzAgCBQ9kZWxpdmVyeUZlZVBhcnQJAMwIAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwECHNwZW50RmVlCQBrAwULZGVsaXZlcnlGZWUFDXVzZEJwMldoU2FsZG8JAGQCBQ11c2RCcDJXaFNhbGRvBQ11c2RXaDJCcFNhbGRvBAtyZWNlaXZlZEZlZQkAZQIFC2RlbGl2ZXJ5RmVlBQhzcGVudEZlZQQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABAhhY3Rpb25zMQkAzAgCBQpzaG9wQWN0aW9uCQEQc2hvcDJ1c2VyQWN0aW9ucwMFDXVzZFdoMkJwU2FsZG8FCmNhbGxlckFkZHIFC3JlY2VpdmVkRmVlBAhhY3Rpb25zMgkBEHVzZXIyc2hvcEFjdGlvbnMEBQ11c2RCcDJXaFNhbGRvCAUBaQhwYXltZW50cwUNc2hvcExhbmRPd25lcgUIc3BlbnRGZWUECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM4IAgUIYWN0aW9uczEFCGFjdGlvbnMyCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQtkZWxpdmVyeUZlZQkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARthY2NlcHRTaG9wT3JkZXJMYW5kRGVsaXZlcnkDCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZA1teUxhbmRBc3NldElkAwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQ1teUxhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUNbXlMYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUNbXlMYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUKY2FsbGVyQWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAdyZXNMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECHByb2RMaXN0AwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDSR0MDYxNzAwNjE5MzIJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQdyZXNMaXN0BQdtYXRMaXN0BQhwcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDYxNzAwNjE5MzICXzEECm5ld1VzZXJSZXMIBQ0kdDA2MTcwMDYxOTMyAl8yBApuZXdVc2VyTWF0CAUNJHQwNjE3MDA2MTkzMgJfMwQLbmV3VXNlclByb2QIBQ0kdDA2MTcwMDYxOTMyAl80BA11c2RXaDJCcFNhbGRvCAUNJHQwNjE3MDA2MTkzMgJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDYxNzAwNjE5MzICXzYECHhwQW1vdW50CAUNJHQwNjE3MDA2MTkzMgJfNwQNc2hvcExhbmRPd25lcggFDSR0MDYxNzAwNjE5MzICXzgECnNob3BXaFNhdmUIBQ0kdDA2MTcwMDYxOTMyAl85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDYxNzAwNjE5MzIDXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUJAJYDAQkAzAgCBQ9kZWxpdmVyeUZlZVBhcnQJAMwIAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwECHNwZW50RmVlCQBrAwULZGVsaXZlcnlGZWUFDXVzZEJwMldoU2FsZG8JAGQCBQ11c2RCcDJXaFNhbGRvBQ11c2RXaDJCcFNhbGRvBAtyZWNlaXZlZEZlZQkAZQIFC2RlbGl2ZXJ5RmVlBQhzcGVudEZlZQQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABAhhY3Rpb25zMQkAzAgCBQpzaG9wQWN0aW9uCQEQc2hvcDJ1c2VyQWN0aW9ucwMFDXVzZFdoMkJwU2FsZG8FCmNhbGxlckFkZHIFC3JlY2VpdmVkRmVlBAhhY3Rpb25zMgkBEHVzZXIyc2hvcEFjdGlvbnMEBQ11c2RCcDJXaFNhbGRvCAUBaQhwYXltZW50cwUNc2hvcExhbmRPd25lcgUIc3BlbnRGZWUEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUKbmV3VXNlclJlcwIBXwkAzAgCCQC5CQIFCm5ld1VzZXJNYXQCAV8JAMwIAgkAuQkCBQtuZXdVc2VyUHJvZAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUKY2FsbGVyQWRkcgkAzAgCCQBrAwUGeHBTaG9wBQh4cEFtb3VudAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgkAzggCBQhhY3Rpb25zMQUIYWN0aW9uczIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFC2RlbGl2ZXJ5RmVlCQCXCgUFDHByb2xvZ1Jlc3VsdAUKc2hvcFdoU2F2ZQUGd2hTYXZlBQtzdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQc2VsbFByb2R1Y3RzVG9FUwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFBCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEFpcnBvcnQsIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBWVzS2V5CQEOa2V5RXNXYXJlaG91c2UABAhleGlzdFN0cgkAoggBBQVlc0tleQQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwKAQhtb3ZlUHJvZAIDYWNjCXJlY2lwZVN0cgQBaggFA2FjYwJfMQQIcXVhbnRpdHkDCQBmAgkAkAMBBQdhbW91bnRzBQFqCQCRAwIFB2Ftb3VudHMFAWoAAAMJAGYCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAZyZWNpcGUJALUJAgUJcmVjaXBlU3RyAgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUFClJFQ0lQRVNJWkUJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogBQlyZWNpcGVTdHIECW1heEFtb3VudAkAaAIFDUVTTUFYUEFDS0FHRVMFDlBST0RVQ1RQS0dTSVpFBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwUBagAABAZjYW5CdXkJAGUCBQltYXhBbW91bnQFC2V4aXN0QW1vdW50AwkAZgIFCHF1YW50aXR5BQZjYW5CdXkJAAIBCQCsAgIJAKwCAgkArAICAhdXYXJlaG91c2UgY2FuIGJ1eSBvbmx5IAkApAMBBQZjYW5CdXkCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJdW5pdFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQlFU0JVWUNPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCBQVNVUxUOAUOUFJPRFVDVFBLR1NJWkUEDGJwUHJvZEFtb3VudAMJAGYC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cnkCCQEOa2V5RXNXYXJlaG91c2UABQpuZXdTdG9yYWdlBQNuaWwFCm5ld1N0b3JhZ2UBaQEUdXBkYXRlRGVsaXZlcnlMb2NrZWQBCW5ld0Ftb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkFCW5ld0Ftb3VudAUDbmlsBQluZXdBbW91bnQBaQESc2VuZERlbGl2ZXJ5UmV3YXJkAQRhZGRyAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRFkZWxpdmVyeUxvY2tlZEtleQAABAthY3Jlc0Ftb3VudAkAaAIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAthY3Jlc1Jlc3VsdAkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglzZW5kQWNyZXMJAMwIAgUEYWRkcgkAzAgCBQthY3Jlc0Ftb3VudAUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBlAgUJZnVuZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkJAMwIAgkBDEludGVnZXJFbnRyeQIFEWRlbGl2ZXJ5TG9ja2VkS2V5CQBlAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQthY3Jlc1Jlc3VsdADccras", "height": 2804014, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy Next: 3kdaZ5sHGDHH1LJEs8F2ULn5UyAp38iW61jJoZBE9ybX Diff:
OldNewDifferences
2525
2626 let l = 75000
2727
28-let m = 10
28+let m = 1000000
2929
30-let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
30+let n = 10
3131
32-let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
32+let o = 10
3333
34-let p = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
34+let p = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
3535
36-let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
36+let q = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3737
38-let r = 10000000
38+let r = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
3939
40-let s = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
40+let s = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
4141
42-let t = 6
42+let t = 10000000
4343
44-let u = 7
44+let u = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
4545
46-let v = 11
46+let v = 6
4747
48-let w = 10
48+let w = 7
4949
50-let x = 0
50+let x = 11
5151
52-let y = 1
52+let y = 10
5353
54-let z = 2
54+let z = 0
5555
56-let A = 3
56+let A = 1
5757
58-let B = 4
58+let B = 2
5959
60-let C = 0
60+let C = 3
6161
62-let D = 3
62+let D = 4
6363
6464 let E = 0
6565
66-let F = 1
66+let F = 3
6767
68-let G = 2
68+let G = 0
6969
70-let H = 3
70+let H = 1
7171
72-let I = 0
72+let I = 2
7373
74-let J = 1
74+let J = 3
7575
76-let K = 2
76+let K = 0
7777
78-func L (M) = ("no_" + M)
78+let L = 1
79+
80+let M = 2
81+
82+func N (O) = ("no_" + O)
7983
8084
81-func N (M) = ("st_" + M)
85+func P (O) = ("st_" + O)
8286
8387
84-func O (P) = ("accRefBy_" + P)
88+func Q (R) = ("accRefBy_" + R)
8589
8690
87-func Q (R) = ("stakedDuckByOwner_" + R)
91+func S (T) = ("stakedDuckByOwner_" + T)
8892
8993
90-func S (T) = ("backPack_" + T)
94+func U (V) = ("backPack_" + V)
9195
9296
93-func U (T) = ("duckLocation_" + T)
97+func W (V) = ("duckLocation_" + V)
9498
9599
96-func V (W) = ("landOrder_" + W)
100+func X (Y) = ("landOrder_" + Y)
97101
98102
99-func X () = "emergencyWarehouseProducts"
103+func Z () = "emergencyWarehouseProducts"
100104
101105
102-let Y = "deliveryFund"
106+let aa = "deliveryFund"
103107
104-let Z = "deliveryLocked"
108+let ab = "deliveryLocked"
105109
106-func aa (ab) = (parseIntValue(ab[t]) * r)
110+func ac (ad) = (parseIntValue(ad[v]) * t)
107111
108112
109-let ac = true
113+let ae = true
110114
111-let ad = take(drop(this.bytes, 1), 1)
115+let af = take(drop(this.bytes, 1), 1)
112116
113-let ae = {
114- let af = ad
115- if ((base58'2W' == af))
117+let ag = {
118+ let ah = af
119+ if ((base58'2W' == ah))
116120 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
117- else if ((base58'2T' == af))
121+ else if ((base58'2T' == ah))
118122 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
119123 else throw("Unknown chain")
120124 }
121125
122-let ag = {
123- let af = ad
124- if ((base58'2W' == af))
126+let ai = {
127+ let ah = af
128+ if ((base58'2W' == ah))
125129 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
126- else if ((base58'2T' == af))
130+ else if ((base58'2T' == ah))
127131 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
128132 else throw("Unknown chain")
129133 }
130134
131-let ah = "__"
135+let aj = "__"
132136
133-let ai = 100000
137+let ak = 100000
134138
135-let aj = 1000000
139+let al = 1000000
136140
137-let ak = 100000000
141+let am = 100000000
138142
139-let al = 10000000000
143+let an = 10000000000
140144
141-let am = 100000
145+let ao = 100000
142146
143-let an = [0, 1, 2, 3, 4, 5]
147+let ap = [0, 1, 2, 3, 4, 5]
144148
145-func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
149+func aq (ar,as) = valueOrErrorMessage(getString(ar, as), makeString(["mandatory ", toString(ar), ".", as, " is not defined"], ""))
146150
147151
148-let ar = 1
152+let at = 1
149153
150-let as = 6
154+let au = 6
151155
152-let at = 8
156+let av = 8
153157
154-func au () = "%s__restConfig"
158+func aw () = "%s__restConfig"
155159
156160
157-func av () = "%s__restAddr"
161+func ax () = "%s__restAddr"
158162
159163
160-func aw (ax) = split_4C(ao(ax, au()), ah)
164+func ay (az) = split_4C(aq(az, aw()), aj)
161165
162166
163-func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA)))
167+func aA (aB,aC) = valueOrErrorMessage(addressFromString(aB[aC]), ("Rest cfg doesn't contain address at index " + toString(aC)))
164168
165169
166-let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag))
170+let aD = addressFromStringValue(valueOrElse(getString(this, ax()), ai))
167171
168-let az = aw(aB)
172+let aB = ay(aD)
169173
170-let aC = ay(az, ar)
174+let aE = aA(aB, at)
171175
172-let aD = ay(az, as)
176+let aF = aA(aB, au)
173177
174-let aE = ay(az, at)
178+let aG = aA(aB, av)
175179
176-func aF (aG) = {
177- let af = aG
178- if ($isInstanceOf(af, "String"))
180+func aH (aI) = {
181+ let ah = aI
182+ if ($isInstanceOf(ah, "String"))
179183 then {
180- let aH = af
181- aH
184+ let aJ = ah
185+ aJ
182186 }
183187 else throw("fail to cast into String")
184188 }
185189
186190
187-func aI (aG) = {
188- let af = aG
189- if ($isInstanceOf(af, "Int"))
191+func aK (aI) = {
192+ let ah = aI
193+ if ($isInstanceOf(ah, "Int"))
190194 then {
191- let aJ = af
192- aJ
195+ let aL = ah
196+ aL
193197 }
194198 else throw("fail to cast into Int")
195199 }
196200
197201
198-func aK () = "contractsBlocked"
202+func aM () = "contractsBlocked"
199203
200204
201-func aL (aM,aN) = {
202- let aO = pow(10, 0, aN, 0, 0, DOWN)
203- let aP = toString((aM % aO))
204- let aQ = drop(toString(aO), (1 + size(aP)))
205- (((toString((aM / aO)) + ".") + aQ) + aP)
205+func aN (aO,aP) = {
206+ let aQ = pow(10, 0, aP, 0, 0, DOWN)
207+ let aR = toString((aO % aQ))
208+ let aS = drop(toString(aQ), (1 + size(aR)))
209+ (((toString((aO / aQ)) + ".") + aS) + aR)
206210 }
207211
208212
209-let aR = 10000000000
213+let aT = 10000000000
210214
211-let aS = 200
215+let aU = 200
212216
213-let aT = 300
217+let aV = 300
214218
215-let aU = 10000
219+let aW = 10000
216220
217-let aV = 10000
221+let aX = 10000
218222
219-let aW = 15000
223+let aY = 15000
220224
221-func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ))
225+func aZ (ba,bb) = ((("factoryWhByContinentAndRes_" + ba) + "_") + toString(bb))
222226
223227
224-let ba = 0
228+let bc = 0
225229
226-let bb = 1
230+let bd = 1
227231
228-let bc = 2
232+let be = 2
229233
230-func bd (be) = {
231- let bf = split(valueOrElse(getString(be), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
232-[if ((size(split(bf[ba], "_")) == f))
233- then bf[ba]
234- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f))
235- then bf[bb]
236- else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]]
234+func bf (bg) = {
235+ let bh = split(valueOrElse(getString(bg), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
236+[if ((size(split(bh[bc], "_")) == f))
237+ then bh[bc]
238+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bh[bd], "_")) == f))
239+ then bh[bd]
240+ else "0@0_0@0_0@0_0@0_0@0_0@0", bh[be]]
237241 }
238242
239243
240-func bg (bh,bi,bj) = if (bj)
244+func bi (bj,bk,bl) = if (bl)
241245 then {
242- let bk = if ((bh >= 0))
243- then (((bh + bi) - 1) / bi)
244- else -((((-(bh) + bi) - 1) / bi))
245- (bk * ak)
246+ let bm = if ((bj >= 0))
247+ then (((bj + bk) - 1) / bk)
248+ else -((((-(bj) + bk) - 1) / bk))
249+ (bm * am)
246250 }
247- else bh
251+ else bj
248252
249253
250-func bl (bm,aZ,bh,bn) = {
251- let bo = aX(bm, aZ)
252- let bp = valueOrElse(getInteger(bo), 0)
253- let bq = if ((bp > aR))
254+func bn (bo,bb,bj,bp) = {
255+ let bq = aZ(bo, bb)
256+ let br = valueOrElse(getInteger(bq), 0)
257+ let bs = if ((br > aT))
254258 then 0
255- else if (((bp + bh) > aR))
256- then (aR - bp)
257- else bh
258- let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak))
259- let bs = (bn - (bn / 100))
260- if (((bs * bh) > (br * ak)))
261- then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")"))
262- else $Tuple2(IntegerEntry(bo, (bp + bh)), br)
259+ else if (((br + bj) > aT))
260+ then (aT - br)
261+ else bj
262+ let bt = (fraction(bs, ((aU * h) - fraction(((100 * br) + (50 * bs)), h, aT)), an) + fraction((bj - bs), h, am))
263+ let bu = (bp - (bp / 100))
264+ if (((bu * bj) > (bt * am)))
265+ then throw((((((((((("Actual price = " + toString(bt)) + " / ") + toString(bj)) + " < minPrice = ") + toString(bp)) + ", (") + bo) + ", ") + p[bb]) + ")"))
266+ else $Tuple2(IntegerEntry(bq, (br + bj)), bt)
263267 }
264268
265269
266-func bt (bm,bu,bh,bv) = {
267- let bo = aX(bm, bu)
268- let bp = valueOrElse(getInteger(bo), 0)
269- let bw = if ((bp > aR))
270- then min([bh, (bp - aR)])
270+func bv (bo,bw,bj,bx) = {
271+ let bq = aZ(bo, bw)
272+ let br = valueOrElse(getInteger(bq), 0)
273+ let by = if ((br > aT))
274+ then min([bj, (br - aT)])
271275 else 0
272- let bx = min([bp, (bh - bw)])
273- let by = (bx + bw)
274- let bz = min([bp, aR])
275- let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak))
276- let bB = (bv + (bv / 100))
277- if (((bA * ak) > (bB * by)))
278- then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")"))
279- else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by)
276+ let bz = min([br, (bj - by)])
277+ let bA = (bz + by)
278+ let bB = min([br, aT])
279+ let bC = (fraction(bz, ((aV * h) - fraction(((100 * bB) - (50 * bz)), h, aT)), an) + fraction(by, (2 * h), am))
280+ let bD = (bx + (bx / 100))
281+ if (((bC * am) > (bD * bA)))
282+ then throw((((((((((("Actual price = " + toString(bC)) + " / ") + toString(bA)) + " > maxPrice = ") + toString(bx)) + ", (") + bo) + ", ") + q[bw]) + ")"))
283+ else $Tuple3(IntegerEntry(bq, (br - bA)), bC, bA)
280284 }
281285
282286
283-func bC (bD) = {
284- let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
285-[toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f))
286- then bf[F]
287- else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f))
288- then bf[G]
289- else "0_0_0_0_0_0", bf[H]]
287+func bE (bF) = {
288+ let bh = split_4C(valueOrElse(getString(aE, bF), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289+[toString(valueOrElse(parseInt(bh[G]), 0)), if ((size(split(bh[H], "_")) == f))
290+ then bh[H]
291+ else "0_0_0_0_0_0", if ((size(split(bh[I], "_")) == f))
292+ then bh[I]
293+ else "0_0_0_0_0_0", bh[J]]
290294 }
291295
292296
293-func bE () = if (valueOrElse(getBoolean(aC, aK()), false))
297+func bG () = if (valueOrElse(getBoolean(aE, aM()), false))
294298 then throw("Contracts are under maintenance")
295299 else unit
296300
297301
298-func bF () = aI(reentrantInvoke(aC, "saveLastTx", nil, nil))
302+func bH () = aK(reentrantInvoke(aE, "saveLastTx", nil, nil))
299303
300304
301-func bG (bH,bI) = {
302- let bJ = bH._1
303- let bK = if ((size(bH._10) > bJ))
304- then bH._10[bJ]
305+func bI (bJ,bK) = {
306+ let bL = bJ._1
307+ let bM = if ((size(bJ._10) > bL))
308+ then bJ._10[bL]
305309 else "0@0"
306- let bL = bH._8
307- let bM = split(bK, "@")
308- if ((size(bM) != 2))
310+ let bN = bJ._8
311+ let bO = split(bM, "@")
312+ if ((size(bO) != 2))
309313 then throw("Incorrect order format, should be amount@price")
310314 else {
311- let bN = parseIntValue(bM[0])
312- let bO = parseIntValue(bM[1])
313- let bP = if (bL)
314- then (bN * bO)
315- else fraction(bN, bO, ak)
316- let bQ = bg(bN, w, bL)
317- let bR = if ((size(bH._6) > bJ))
318- then parseIntValue(bH._6[bJ])
315+ let bP = parseIntValue(bO[0])
316+ let bQ = parseIntValue(bO[1])
317+ let bR = if (bN)
318+ then (bP * bQ)
319+ else fraction(bP, bQ, am)
320+ let bS = bi(bP, y, bN)
321+ let bT = if ((size(bJ._6) > bL))
322+ then parseIntValue(bJ._6[bL])
319323 else 0
320- let bS = split(if ((size(bH._7) > bJ))
321- then bH._7[bJ]
324+ let bU = split(if ((size(bJ._7) > bL))
325+ then bJ._7[bL]
322326 else "0@0", "@")
323- let bT = parseIntValue(bS[0])
324- let bU = parseIntValue(bS[1])
325- if (if ((0 > bU))
327+ let bV = parseIntValue(bU[0])
328+ let bW = parseIntValue(bU[1])
329+ if (if ((0 > bW))
326330 then true
327- else (0 > bO))
331+ else (0 > bQ))
328332 then throw("Price can't be negative")
329333 else {
330- let bV = if (bL)
331- then (bT * bU)
332- else fraction(bT, bU, ak)
333- if ((bN == 0))
334- then if ((bT > 0))
335- then $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), bH._3, bH._4, (bH._5 - bV), bH._6, bH._7, bL, (bH._9 + bg(bR, w, bL)), bH._10)
336- else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), bH._3, bH._4, bH._5, bH._6, bH._7, bL, (bH._9 + bg((bR - bT), w, bL)), bH._10)
337- else if ((bN > 0))
338- then if ((0 > bT))
339- then $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), (bH._3 + bQ), bH._4, (bH._5 + bP), bH._6, bH._7, bL, bg((bR - bT), w, bL), bH._10)
340- else $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), (bH._3 + bQ), bH._4, ((bH._5 + bP) - bV), bH._6, bH._7, bL, bg(bR, w, bL), bH._10)
341- else if ((0 > bT))
334+ let bX = if (bN)
335+ then (bV * bW)
336+ else fraction(bV, bW, am)
337+ if ((bP == 0))
338+ then if ((bV > 0))
339+ then $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), bJ._3, bJ._4, (bJ._5 - bX), bJ._6, bJ._7, bN, (bJ._9 + bi(bT, y, bN)), bJ._10)
340+ else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), bJ._3, bJ._4, bJ._5, bJ._6, bJ._7, bN, (bJ._9 + bi((bT - bV), y, bN)), bJ._10)
341+ else if ((bP > 0))
342+ then if ((0 > bV))
343+ then $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), (bJ._3 + bS), bJ._4, (bJ._5 + bR), bJ._6, bJ._7, bN, bi((bT - bV), y, bN), bJ._10)
344+ else $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), (bJ._3 + bS), bJ._4, ((bJ._5 + bR) - bX), bJ._6, bJ._7, bN, bi(bT, y, bN), bJ._10)
345+ else if ((0 > bV))
342346 then {
343- let bW = (bT - bN)
344- if ((0 > (bR - bW)))
345- then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available"))
346- else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bW))), bH._3, (bH._4 - bQ), bH._5, bH._6, bH._7, bL, bg((bR - bW), w, bL), bH._10)
347+ let bY = (bV - bP)
348+ if ((0 > (bT - bY)))
349+ then throw((((("Attempt to take " + toString(bY)) + " from warehouse, but only ") + toString(bT)) + " available"))
350+ else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bY))), bJ._3, (bJ._4 - bS), bJ._5, bJ._6, bJ._7, bN, bi((bT - bY), y, bN), bJ._10)
347351 }
348- else if ((0 > (bR + bN)))
349- then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available"))
350- else $Tuple10((bJ + 1), (bH._2 :+ toString((bR + bN))), bH._3, (bH._4 - bQ), (bH._5 - bV), bH._6, bH._7, bL, bg((bR + bN), w, bL), bH._10)
352+ else if ((0 > (bT + bP)))
353+ then throw((((("Attempt to take " + toString(-(bP))) + " from warehouse, but only ") + toString(bT)) + " available"))
354+ else $Tuple10((bL + 1), (bJ._2 :+ toString((bT + bP))), bJ._3, (bJ._4 - bS), (bJ._5 - bX), bJ._6, bJ._7, bN, bi((bT + bP), y, bN), bJ._10)
351355 }
352356 }
353357 }
354358
355359
356-func bX (bY,bZ,ca) = {
357- let cb = split(bY[y], "_")
358- let cc = split(bY[z], "_")
359- let cd = if ((bY[A] == ""))
360+func bZ (ca,cb,cc) = {
361+ let cd = split(ca[A], "_")
362+ let ce = split(ca[B], "_")
363+ let cf = if ((ca[C] == ""))
360364 then nil
361- else split_4C(bY[A], "_")
362- let ce = split(bZ[ba], "_")
363- let cf = split(bZ[bb], "_")
364- let cg = if ((bZ[bc] == ""))
365+ else split_4C(ca[C], "_")
366+ let cg = split(cb[bc], "_")
367+ let ch = split(cb[bd], "_")
368+ let ci = if ((cb[be] == ""))
365369 then nil
366- else split_4C(bZ[bc], "_")
367- if ((size(ca) != 3))
370+ else split_4C(cb[be], "_")
371+ if ((size(cc) != 3))
368372 then throw("newOrderStr should contain exactly 2 ':' separators")
369373 else {
370- let ch = split(ca[0], "_")
371- let ci = split(ca[1], "_")
372- let cj = if ((ca[2] == ""))
374+ let cj = split(cc[0], "_")
375+ let ck = split(cc[1], "_")
376+ let cl = if ((cc[2] == ""))
373377 then nil
374- else split_4C(ca[2], "_")
375- if ((size(ch) != f))
378+ else split_4C(cc[2], "_")
379+ if ((size(cj) != f))
376380 then throw("All 6 resources should be passed")
377- else if ((size(ci) != f))
381+ else if ((size(ck) != f))
378382 then throw("All 6 materials should be passed")
379383 else {
380- let ck = {
381- let cl = n
382- let cm = size(cl)
383- let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch)
384- func co (cp,cq) = if ((cq >= cm))
385- then cp
386- else bG(cp, cl[cq])
384+ let cm = {
385+ let cn = p
386+ let co = size(cn)
387+ let cp = $Tuple10(0, nil, 0, 0, 0, cd, cg, false, 0, cj)
388+ func cq (cr,cs) = if ((cs >= co))
389+ then cr
390+ else bI(cr, cn[cs])
387391
388- func cr (cp,cq) = if ((cq >= cm))
389- then cp
392+ func ct (cr,cs) = if ((cs >= co))
393+ then cr
390394 else throw("List size exceeds 6")
391395
392- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
396+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
393397 }
394- let by = {
395- let cl = o
396- let cm = size(cl)
397- let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci)
398- func cs (cp,cq) = if ((cq >= cm))
399- then cp
400- else bG(cp, cl[cq])
398+ let bA = {
399+ let cn = q
400+ let co = size(cn)
401+ let cp = $Tuple10(0, nil, cm._3, cm._4, cm._5, ce, ch, false, cm._9, ck)
402+ func cu (cr,cs) = if ((cs >= co))
403+ then cr
404+ else bI(cr, cn[cs])
401405
402- func ct (cp,cq) = if ((cq >= cm))
403- then cp
406+ func cv (cr,cs) = if ((cs >= co))
407+ then cr
404408 else throw("List size exceeds 6")
405409
406- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
410+ cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
407411 }
408- let bf = {
409- let cl = p
410- let cm = size(cl)
411- let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj)
412- func cu (cp,cq) = if ((cq >= cm))
413- then cp
414- else bG(cp, cl[cq])
412+ let bh = {
413+ let cn = r
414+ let co = size(cn)
415+ let cp = $Tuple10(0, nil, bA._3, bA._4, bA._5, cf, ci, true, bA._9, cl)
416+ func cw (cr,cs) = if ((cs >= co))
417+ then cr
418+ else bI(cr, cn[cs])
415419
416- func cv (cp,cq) = if ((cq >= cm))
417- then cp
420+ func cx (cr,cs) = if ((cs >= co))
421+ then cr
418422 else throw("List size exceeds 50")
419423
420- cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
424+ cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 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)
421425 }
422- $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9)
426+ $Tuple7(cm._2, bA._2, bh._2, bh._3, bh._4, bh._5, bh._9)
423427 }
424428 }
425429 }
426430
427431
428-func cw (bH,cx) = {
429- let bJ = bH._7
430- let bL = bH._12
431- let cy = split(cx, "@")
432- if ((size(cy) != 2))
432+func cy (bJ,cz) = {
433+ let bL = bJ._7
434+ let bN = bJ._12
435+ let cA = split(cz, "@")
436+ if ((size(cA) != 2))
433437 then throw("Incorrect order format, should be amount@price")
434438 else {
435- let cz = parseIntValue(cy[0])
436- let cA = parseIntValue(cy[1])
437- if ((0 > cA))
439+ let cB = parseIntValue(cA[0])
440+ let cC = parseIntValue(cA[1])
441+ if ((0 > cC))
438442 then throw("Price can't be negative")
439443 else {
440- let cB = if (bL)
441- then (cz * cA)
442- else fraction(cz, cA, ak)
443- let cC = if ((size(bH._8) > bJ))
444- then parseIntValue(bH._8[bJ])
444+ let cD = if (bN)
445+ then (cB * cC)
446+ else fraction(cB, cC, am)
447+ let cE = if ((size(bJ._8) > bL))
448+ then parseIntValue(bJ._8[bL])
445449 else 0
446- let bR = if ((size(bH._9) > bJ))
447- then parseIntValue(bH._9[bJ])
450+ let bT = if ((size(bJ._9) > bL))
451+ then parseIntValue(bJ._9[bL])
448452 else 0
449- let cD = if ((size(bH._10) > bJ))
450- then bH._10[bJ]
453+ let cF = if ((size(bJ._10) > bL))
454+ then bJ._10[bL]
451455 else "0@0"
452- let cE = split(cD, "@")
453- let cF = parseIntValue(cE[0])
454- let cG = parseIntValue(cE[1])
455- if (if ((cz != 0))
456- then (cA != cG)
456+ let cG = split(cF, "@")
457+ let cH = parseIntValue(cG[0])
458+ let cI = parseIntValue(cG[1])
459+ if (if ((cB != 0))
460+ then (cC != cI)
457461 else false)
458- then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA)))
462+ then throw(((((("Prices of " + bJ._11[bL]) + " don't match! WH price=") + toString(cI)) + ", your price=") + toString(cC)))
459463 else {
460- let cH = if (bL)
461- then (cF * cG)
462- else fraction(cF, cG, ak)
463- let cI = bg(cz, w, bL)
464- if ((cz == 0))
465- then $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ cD), (bH._3 :+ toString(cC)), bH._4, bH._5, bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, bH._13)
466- else if ((cz > 0))
467- then if ((0 > cF))
468- then if ((cz > -(cF)))
469- then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF))))
470- else $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 + cI), bH._5, (bH._6 + cB), (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 + (if (bL)
471- then (cz * ak)
472- else cz)))
473- else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it"))
474- else if ((cF > 0))
475- then if ((-(cz) > cF))
476- then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF)))
477- else if ((-(cz) > cC))
478- then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ]))
479- else $Tuple13((bH._1 :+ toString((bR - cz))), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 - cI), (bH._5 - cB), bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 - (if (bL)
480- then (cz * ak)
481- else cz)))
482- else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it"))
464+ let cJ = if (bN)
465+ then (cH * cI)
466+ else fraction(cH, cI, am)
467+ let cK = bi(cB, y, bN)
468+ if ((cB == 0))
469+ then $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ cF), (bJ._3 :+ toString(cE)), bJ._4, bJ._5, bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, bJ._13)
470+ else if ((cB > 0))
471+ then if ((0 > cH))
472+ then if ((cB > -(cH)))
473+ then throw(((((("Attempt to buy " + toString(cB)) + " of ") + bJ._11[bL]) + ", but warehouse only sells ") + toString(-(cH))))
474+ else $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 + cK), bJ._5, (bJ._6 + cD), (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 + (if (bN)
475+ then (cB * am)
476+ else cB)))
477+ else throw((("Attempt to buy " + bJ._11[bL]) + " while warehouse doesn't sell it"))
478+ else if ((cH > 0))
479+ then if ((-(cB) > cH))
480+ then throw(((((("Attempt to sell " + toString(-(cB))) + " of ") + bJ._11[bL]) + ", but warehouse only buys ") + toString(cH)))
481+ else if ((-(cB) > cE))
482+ then throw(((((("Attempt to sell " + toString(-(cB))) + ", but you only have ") + toString(cE)) + " of ") + bJ._11[bL]))
483+ else $Tuple13((bJ._1 :+ toString((bT - cB))), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 - cK), (bJ._5 - cD), bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 - (if (bN)
484+ then (cB * am)
485+ else cB)))
486+ else throw((("Attempt to sell " + bJ._11[bL]) + " while warehouse doesn't buy it"))
483487 }
484488 }
485489 }
486490 }
487491
488492
489-func cJ (cK,cL,cM,cN) = {
490- func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ])))
491- then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ])))
492- else if ((0 > cM[bJ]))
493- then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ])))
494- else if ((cM[bJ] > 0))
493+func cL (cM,cN,cO,cP) = {
494+ func cQ (bJ,bL) = if ((cO[bL] > parseIntValue(cM[bL])))
495+ then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to sell ") + toString(cO[bL])))
496+ else if ((0 > cO[bL]))
497+ then throw(((("You tried to sell negative amount of " + p[bL]) + ": ") + toString(cO[bL])))
498+ else if ((cO[bL] > 0))
495499 then {
496- let cP = bl(cL, bJ, cM[bJ], cN[bJ])
497- $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
500+ let cR = bn(cN, bL, cO[bL], cP[bL])
501+ $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cM[bL]) - cO[bL]))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
498502 }
499- else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4)
503+ else $Tuple4(bJ._1, (bJ._2 :+ cM[bL]), bJ._3, bJ._4)
500504
501- let cl = an
502- let cm = size(cl)
503- let cn = $Tuple4(nil, nil, 0, 0)
504- func co (cp,cq) = if ((cq >= cm))
505- then cp
506- else cO(cp, cl[cq])
505+ let cn = ap
506+ let co = size(cn)
507+ let cp = $Tuple4(nil, nil, 0, 0)
508+ func cq (cr,cs) = if ((cs >= co))
509+ then cr
510+ else cQ(cr, cn[cs])
507511
508- func cr (cp,cq) = if ((cq >= cm))
509- then cp
512+ func ct (cr,cs) = if ((cs >= co))
513+ then cr
510514 else throw("List size exceeds 6")
511515
512- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
516+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
513517 }
514518
515519
516-func cQ (cR,cL,cM,cS) = {
517- func cT (bH,bJ) = if ((0 > cM[bJ]))
518- then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ])))
519- else if ((cM[bJ] > 0))
520+func cS (cT,cN,cO,cU) = {
521+ func cV (bJ,bL) = if ((0 > cO[bL]))
522+ then throw(((("You tried to buy negative amount of " + q[bL]) + ": ") + toString(cO[bL])))
523+ else if ((cO[bL] > 0))
520524 then {
521- let cP = bt(cL, bJ, cM[bJ], cS[bJ])
522- $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
525+ let cR = bv(cN, bL, cO[bL], cU[bL])
526+ $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cR._3))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
523527 }
524- else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4)
528+ else $Tuple4(bJ._1, (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
525529
526- let cl = an
527- let cm = size(cl)
528- let cn = $Tuple4(nil, nil, 0, 0)
529- func co (cp,cq) = if ((cq >= cm))
530- then cp
531- else cT(cp, cl[cq])
530+ let cn = ap
531+ let co = size(cn)
532+ let cp = $Tuple4(nil, nil, 0, 0)
533+ func cq (cr,cs) = if ((cs >= co))
534+ then cr
535+ else cV(cr, cn[cs])
532536
533- func cr (cp,cq) = if ((cq >= cm))
534- then cp
537+ func ct (cr,cs) = if ((cs >= co))
538+ then cr
535539 else throw("List size exceeds 6")
536540
537- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
541+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
538542 }
539543
540544
541-func cU (cK,cR,cM) = {
542- func cV (bH,bJ) = {
543- let cW = cM[bJ]
544- if ((cW > parseIntValue(cK[bJ])))
545- then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW)))
546- else if ((0 > cW))
547- then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW)))
548- else if ((cW > 0))
549- then $Tuple4((bH._1 :+ toString((parseIntValue(cK[bJ]) - cW))), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cW))), (bH._3 + fraction(cW, h, ak)), (bH._4 + cW))
550- else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4)
545+func cW (cM,cT,cO) = {
546+ func cX (bJ,bL) = {
547+ let cY = cO[bL]
548+ if ((cY > parseIntValue(cM[bL])))
549+ then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to exchange ") + toString(cY)))
550+ else if ((0 > cY))
551+ then throw(((("You tried to exchange negative amount of " + p[bL]) + ": ") + toString(cY)))
552+ else if ((cY > 0))
553+ then $Tuple4((bJ._1 :+ toString((parseIntValue(cM[bL]) - cY))), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cY))), (bJ._3 + fraction(cY, h, am)), (bJ._4 + cY))
554+ else $Tuple4((bJ._1 :+ cM[bL]), (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
551555 }
552556
553- let cl = an
554- let cm = size(cl)
555- let cn = $Tuple4(nil, nil, 0, 0)
556- func co (cp,cq) = if ((cq >= cm))
557- then cp
558- else cV(cp, cl[cq])
557+ let cn = ap
558+ let co = size(cn)
559+ let cp = $Tuple4(nil, nil, 0, 0)
560+ func cq (cr,cs) = if ((cs >= co))
561+ then cr
562+ else cX(cr, cn[cs])
559563
560- func cr (cp,cq) = if ((cq >= cm))
561- then cp
564+ func ct (cr,cs) = if ((cs >= co))
565+ then cr
562566 else throw("List size exceeds 6")
563567
564- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
568+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
565569 }
566570
567571
568-func cX (cY,cZ,da) = if ((cY > 0))
572+func cZ (da,db,dc) = if ((da > 0))
569573 then {
570- let db = fraction(cY, aU, aj)
571- if ((da >= (cY - (3 * db))))
572- then throw(("This trade does not cover delivery cost of " + aL(da, 6)))
574+ let dd = fraction(da, aW, al)
575+ if ((dc >= (da - (3 * dd))))
576+ then throw(("This trade does not cover delivery cost of " + aN(dc, 6)))
573577 else {
574- let dc = O(cZ)
575- let dd = getString(aC, dc)
576- let de = addressFromStringValue(cZ)
577- (((if (isDefined(dd))
578- then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)]
579- else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae))
578+ let de = Q(db)
579+ let df = getString(aE, de)
580+ let dg = addressFromStringValue(db)
581+ (((if (isDefined(df))
582+ then [ScriptTransfer(addressFromStringValue(value(df)), dd, ag)]
583+ else nil) :+ ScriptTransfer(dg, ((da - (3 * dd)) - dc), ag)) :+ ScriptTransfer(aD, dd, ag))
580584 }
581585 }
582586 else nil
583587
584588
585-func df (dg,dh,di,dj) = if ((dg > 0))
586- then if ((size(dh) != 1))
589+func dh (di,dj,dk,dl) = if ((di > 0))
590+ then if ((size(dj) != 1))
587591 then throw("exactly 1 payment must be attached")
588592 else {
589- let dk = dh[0]
590- let dl = dk.amount
591- if (if (!(isDefined(dk.assetId)))
593+ let dm = dj[0]
594+ let dn = dm.amount
595+ if (if (!(isDefined(dm.assetId)))
592596 then true
593- else (value(dk.assetId) != ae))
597+ else (value(dm.assetId) != ag))
594598 then throw("USDT payments only!")
595599 else {
596- let dm = (dg + dj)
597- if ((dl != dm))
598- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)"))
599- else if ((am > dg))
600- then throw(("Min shop trade is " + aL(am, 6)))
600+ let do = (di + dl)
601+ if ((dn != do))
602+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(di, 6)) + "+") + aN(dl, 6)) + "(delivery fee)"))
603+ else if ((ao > di))
604+ then throw(("Min shop trade is " + aN(ao, 6)))
601605 else {
602- let dn = fraction(dg, aU, aj)
603- let dc = O(di)
604- let dd = getString(aC, dc)
605- (((if (isDefined(dd))
606- then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)]
607- else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae))
606+ let dp = fraction(di, aW, al)
607+ let de = Q(dk)
608+ let df = getString(aE, de)
609+ (((if (isDefined(df))
610+ then [ScriptTransfer(addressFromStringValue(value(df)), dp, ag)]
611+ else nil) :+ ScriptTransfer(addressFromStringValue(dk), (di - (3 * dp)), ag)) :+ ScriptTransfer(aD, dp, ag))
608612 }
609613 }
610614 }
611- else if ((size(dh) != 0))
615+ else if ((size(dj) != 0))
612616 then throw("No payments needed")
613617 else nil
614618
615619
616-func do (dp,cZ,dq,dr,ds,dt) = {
617- let du = value(assetInfo(fromBase58String(dp)))
618- if (!(isDefined(getInteger(aC, N(dp)))))
619- then throw((("NFT " + du.name) + " is not staked"))
620+func dq (dr,db,ds,dt,du,dv) = {
621+ let dw = value(assetInfo(fromBase58String(dr)))
622+ if (!(isDefined(getInteger(aE, P(dr)))))
623+ then throw((("NFT " + dw.name) + " is not staked"))
620624 else {
621- let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned"))
622- if ((di == cZ))
625+ let dk = valueOrErrorMessage(getString(aE, N(dr)), (("NFT " + dw.name) + " is orphaned"))
626+ if ((dk == db))
623627 then throw("You cannot trade with yourself")
624628 else {
625- let dv = split_4C(dq, ":")
626- if ((size(dv) != 3))
629+ let dx = split_4C(ds, ":")
630+ if ((size(dx) != 3))
627631 then throw("bpOrderStr should contain exactly 2 ':' separators")
628632 else {
629- let dw = split(dv[0], "_")
630- let dx = split(dv[1], "_")
631- let dy = if ((dv[2] == ""))
633+ let dy = split(dx[0], "_")
634+ let dz = split(dx[1], "_")
635+ let dA = if ((dx[2] == ""))
632636 then nil
633- else split_4C(dv[2], "_")
634- if ((size(dw) != f))
637+ else split_4C(dx[2], "_")
638+ if ((size(dy) != f))
635639 then throw("All 6 resources should be passed")
636- else if ((size(dx) != f))
640+ else if ((size(dz) != f))
637641 then throw("All 6 materials should be passed")
638642 else {
639- let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil))
640- let bY = split_4C(dz, ":")
641- let cb = split(bY[y], "_")
642- let cc = split(bY[z], "_")
643- let cd = if ((bY[A] == ""))
643+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [dr], nil))
644+ let ca = split_4C(dB, ":")
645+ let cd = split(ca[A], "_")
646+ let ce = split(ca[B], "_")
647+ let cf = if ((ca[C] == ""))
644648 then nil
645- else split_4C(bY[A], "_")
646- let dA = parseIntValue(split(bY[B], "_")[C])
647- let be = V(dp)
648- let dB = bd(be)
649- let dC = split(dB[ba], "_")
650- let dD = split(dB[bb], "_")
651- let dE = if ((dB[bc] == ""))
649+ else split_4C(ca[C], "_")
650+ let dC = parseIntValue(split(ca[D], "_")[E])
651+ let bg = X(dr)
652+ let dD = bf(bg)
653+ let dE = split(dD[bc], "_")
654+ let dF = split(dD[bd], "_")
655+ let dG = if ((dD[be] == ""))
652656 then nil
653- else split_4C(dB[bc], "_")
654- let ck = {
655- let cl = dw
656- let cm = size(cl)
657- let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0)
658- func co (cp,cq) = if ((cq >= cm))
659- then cp
660- else cw(cp, cl[cq])
657+ else split_4C(dD[be], "_")
658+ let cm = {
659+ let cn = dy
660+ let co = size(cn)
661+ let cp = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dt, cd, dE, p, false, 0)
662+ func cq (cr,cs) = if ((cs >= co))
663+ then cr
664+ else cy(cr, cn[cs])
661665
662- func cr (cp,cq) = if ((cq >= cm))
663- then cp
666+ func ct (cr,cs) = if ((cs >= co))
667+ then cr
664668 else throw("List size exceeds 6")
665669
666- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
670+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
667671 }
668- let by = {
669- let cl = dx
670- let cm = size(cl)
671- let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13)
672- func cs (cp,cq) = if ((cq >= cm))
673- then cp
674- else cw(cp, cl[cq])
672+ let bA = {
673+ let cn = dz
674+ let co = size(cn)
675+ let cp = $Tuple13(nil, nil, nil, cm._4, cm._5, cm._6, 0, du, ce, dF, q, false, cm._13)
676+ func cu (cr,cs) = if ((cs >= co))
677+ then cr
678+ else cy(cr, cn[cs])
675679
676- func ct (cp,cq) = if ((cq >= cm))
677- then cp
680+ func cv (cr,cs) = if ((cs >= co))
681+ then cr
678682 else throw("List size exceeds 6")
679683
680- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
684+ cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
681685 }
682- let bf = if ((size(dy) != 0))
686+ let bh = if ((size(dA) != 0))
683687 then {
684- let cl = dy
685- let cm = size(cl)
686- let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
687- func cu (cp,cq) = if ((cq >= cm))
688- then cp
689- else cw(cp, cl[cq])
688+ let cn = dA
689+ let co = size(cn)
690+ let cp = $Tuple13(nil, nil, nil, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
691+ func cw (cr,cs) = if ((cs >= co))
692+ then cr
693+ else cy(cr, cn[cs])
690694
691- func cv (cp,cq) = if ((cq >= cm))
692- then cp
695+ func cx (cr,cs) = if ((cs >= co))
696+ then cr
693697 else throw("List size exceeds 50")
694698
695- cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
699+ cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 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)
696700 }
697- else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
698- let dF = bf._4
699- let dG = if ((0 > (dA - dF)))
701+ else $Tuple13(cf, dG, dv, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
702+ let dH = bh._4
703+ let dI = if ((0 > (dC - dH)))
700704 then 0
701- else (dA - dF)
702- let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":")
703- let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":")
704- let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil))
705- let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil))
706- $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK)
705+ else (dC - dH)
706+ let dJ = makeString_2C([ca[z], makeString(cm._1, "_"), makeString(bA._1, "_"), makeString_2C(bh._1, "_"), toString(dI)], ":")
707+ let dK = makeString_2C([makeString(cm._2, "_"), makeString(bA._2, "_"), makeString_2C(bh._2, "_")], ":")
708+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, dr], nil))
709+ let dM = aK(invoke(aE, "updateAccStats", [dk, fraction(d, bh._13, am)], nil))
710+ $Tuple10(StringEntry(bg, dK), cm._3, bA._3, bh._3, bh._5, bh._6, bh._13, dk, dL, dM)
707711 }
708712 }
709713 }
711715 }
712716
713717
714-func dL (bh) = {
715- let dM = (bh / 30)
716- let dN = [dM, dM, dM, dM, dM, dM]
717- let aH = toString(dM)
718- let cK = [aH, aH, aH, aH, aH, aH]
719- let cN = [0, 0, 0, 0, 0, 0]
720- func dO (bH,dP) = {
721- let dQ = cJ(cK, dP, dN, cN)
722- $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4))
718+func dN (bj) = {
719+ let dO = (bj / 30)
720+ let dP = [dO, dO, dO, dO, dO, dO]
721+ let aJ = toString(dO)
722+ let cM = [aJ, aJ, aJ, aJ, aJ, aJ]
723+ let cP = [0, 0, 0, 0, 0, 0]
724+ func dQ (bJ,dR) = {
725+ let dS = cL(cM, dR, dP, cP)
726+ $Tuple3((bJ._1 ++ dS._1), (bJ._2 + dS._3), (bJ._3 + dS._4))
723727 }
724728
725- let dR = {
726- let cl = q
727- let cm = size(cl)
728- let cn = $Tuple3(nil, 0, 0)
729- func co (cp,cq) = if ((cq >= cm))
730- then cp
731- else dO(cp, cl[cq])
729+ let dT = {
730+ let cn = s
731+ let co = size(cn)
732+ let cp = $Tuple3(nil, 0, 0)
733+ func cq (cr,cs) = if ((cs >= co))
734+ then cr
735+ else dQ(cr, cn[cs])
732736
733- func cr (cp,cq) = if ((cq >= cm))
734- then cp
737+ func ct (cr,cs) = if ((cs >= co))
738+ then cr
735739 else throw("List size exceeds 5")
736740
737- cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5)
741+ ct(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5)
738742 }
739- let dS = dR._1
740- let br = dR._2
741- let dT = dR._3
742- let dU = fraction(br, aV, aj)
743- let dV = (br / 100)
744- let dW = ((br - dV) - dU)
745- $Tuple5(dS, dW, dU, dV, dT)
743+ let dU = dT._1
744+ let bt = dT._2
745+ let dV = dT._3
746+ let dW = fraction(bt, aX, al)
747+ let dX = (bt / 100)
748+ let dY = ((bt - dX) - dW)
749+ $Tuple5(dU, dY, dW, dX, dV)
746750 }
747751
748752
749-@Callable(dX)
750-func recalcLockedVolumeREADONLY (W,dz) = {
751- let bZ = bd(V(W))
752- let dY = bX(dz, bZ, bZ)
753- $Tuple2(nil, (dY._4 + dY._5))
753+func dZ (cT,ea,eb,ec,ed) = if ((0 >= ed))
754+ then throw("Quantity should be positive")
755+ else if (if ((0 > ec))
756+ then true
757+ else (ec >= size(u)))
758+ then throw(("Unknown product idx=" + toString(ec)))
759+ else {
760+ let ad = split(u[ec], "_")
761+ if ((size(ad) != x))
762+ then throw(("Fatal: unknown recipe: " + u[ec]))
763+ else {
764+ let ee = parseIntValue(ad[w])
765+ if ((s[ee] != eb))
766+ then throw(((("This product is available in " + s[ee]) + ", not in ") + eb))
767+ else {
768+ func ef (bJ,eg) = {
769+ let aL = bJ._2
770+ let eh = if ((size(ea) > aL))
771+ then ea[aL]
772+ else "0"
773+ let dS = parseIntValue(eh)
774+ let bj = (ed * y)
775+ let ei = if ((aL == ec))
776+ then toString((dS + bj))
777+ else eh
778+ $Tuple2((bJ._1 :+ ei), (aL + 1))
779+ }
780+
781+ let ej = ( let cn = u
782+ let co = size(cn)
783+ let cp = $Tuple2(nil, 0)
784+ func cq (cr,cs) = if ((cs >= co))
785+ then cr
786+ else ef(cr, cn[cs])
787+
788+ func ct (cr,cs) = if ((cs >= co))
789+ then cr
790+ else throw("List size exceeds 50")
791+
792+ ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 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
793+ func ek (bJ,bL) = {
794+ let el = (((parseIntValue(ad[bL]) * ak) * ed) * parseIntValue(ad[v]))
795+ let em = parseIntValue(cT[bL])
796+ if ((el > em))
797+ then throw(((((((("You have " + aN(em, 8)) + " of ") + q[bL]) + ", but recipe requires ") + aN(el, 8)) + " for quantity ") + toString(ed)))
798+ else if ((el > 0))
799+ then $Tuple2((bJ._1 :+ toString((em - el))), (bJ._2 + el))
800+ else $Tuple2((bJ._1 :+ cT[bL]), bJ._2)
801+ }
802+
803+ let en = {
804+ let cn = ap
805+ let co = size(cn)
806+ let cp = $Tuple2(nil, 0)
807+ func cu (cr,cs) = if ((cs >= co))
808+ then cr
809+ else ek(cr, cn[cs])
810+
811+ func cv (cr,cs) = if ((cs >= co))
812+ then cr
813+ else throw("List size exceeds 6")
814+
815+ cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
816+ }
817+ $Tuple3(en._1, ej, en._2)
818+ }
819+ }
820+ }
821+
822+
823+@Callable(eo)
824+func recalcLockedVolumeREADONLY (Y,dB) = {
825+ let cb = bf(X(Y))
826+ let ep = bZ(dB, cb, cb)
827+ $Tuple2(nil, (ep._4 + ep._5))
754828 }
755829
756830
757831
758-@Callable(dX)
759-func constructorV1 (dZ) = if ((dX.caller != this))
832+@Callable(eo)
833+func constructorV1 (eq) = if ((eo.caller != this))
760834 then throw("Permission denied")
761- else [StringEntry(av(), dZ)]
835+ else [StringEntry(ax(), eq)]
762836
763837
764838
765-@Callable(dX)
766-func sellResources (cM,cN) = {
767- let ea = bF()
768- if ((ea == ea))
839+@Callable(eo)
840+func sellResources (cO,cP) = {
841+ let er = bH()
842+ if ((er == er))
769843 then {
770- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
771- if ((size(dX.payments) != 0))
844+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
845+ if ((size(eo.payments) != 0))
772846 then throw("sellResources doesn't require any payments")
773847 else {
774- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
775- if ((eb[J] != "F"))
776- then throw(("Duck location type should be Factory, but is " + eb[J]))
848+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
849+ if ((es[L] != "F"))
850+ then throw(("Duck location type should be Factory, but is " + es[L]))
777851 else {
778- let ec = bC(S(T))
779- let cK = split(ec[F], "_")
780- let ed = cJ(cK, eb[K], cM, cN)
781- let dS = ed._1
782- let ee = ed._2
783- let br = ed._3
784- let dT = ed._4
785- let dV = (br / 100)
786- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
787- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
788- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
789- $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
852+ let et = bE(U(V))
853+ let cM = split(et[H], "_")
854+ let eu = cL(cM, es[M], cO, cP)
855+ let dU = eu._1
856+ let ev = eu._2
857+ let bt = eu._3
858+ let dV = eu._4
859+ let dX = (bt / 100)
860+ let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
861+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
862+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
863+ $Tuple2(((dU :+ ScriptTransfer(eo.caller, (bt - dX), ag)) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
790864 }
791865 }
792866 }
795869
796870
797871
798-@Callable(dX)
799-func sellResourcesWorld (P,bh) = if ((dX.caller != aE))
872+@Callable(eo)
873+func sellResourcesWorld (R,bj) = if ((eo.caller != aG))
800874 then throw("Permission denied")
801875 else {
802- let ei = dL(bh)
803- let dS = ei._1
804- let dW = ei._2
805- let dU = ei._3
806- let dV = ei._4
807- let dT = ei._5
808- if ((0 >= dW))
809- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
876+ let ez = dN(bj)
877+ let dU = ez._1
878+ let dY = ez._2
879+ let dW = ez._3
880+ let dX = ez._4
881+ let dV = ez._5
882+ if ((0 >= dY))
883+ then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
810884 else {
811- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
812- $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh))
885+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
886+ $Tuple2((((dU :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dW))) :+ ScriptTransfer(aD, dX, ag)) :+ ScriptTransfer(aF, dY, ag)), $Tuple2(dY, ey))
813887 }
814888 }
815889
816890
817891
818-@Callable(dX)
819-func sellResourcesWorldREADONLY (bh) = {
820- let dW = dL(bh)._2
821- $Tuple2(nil, dW)
892+@Callable(eo)
893+func sellResourcesWorldREADONLY (bj) = {
894+ let dY = dN(bj)._2
895+ $Tuple2(nil, dY)
822896 }
823897
824898
825899
826-@Callable(dX)
827-func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac))
900+@Callable(eo)
901+func sellResourcesDuckDelivery (cO,cP,eA) = if (!(ae))
828902 then throw("Delivery feature is turned off!")
829903 else {
830- let ea = bF()
831- if ((ea == ea))
904+ let er = bH()
905+ if ((er == er))
832906 then {
833- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
834- if ((size(dX.payments) != 0))
907+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
908+ if ((size(eo.payments) != 0))
835909 then throw("sellResources doesn't require any payments")
836910 else {
837- let ec = bC(S(T))
838- let cK = split(ec[F], "_")
839- let ek = cJ(cK, ej, cM, cN)
840- let dS = ek._1
841- let ee = ek._2
842- let br = ek._3
843- let dT = ek._4
844- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
845- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
846- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
847- let el = fraction(br, aV, aj)
848- let dU = if ((k > el))
849- then k
850- else el
851- let dV = (br / 100)
852- if ((dU >= (br - dV)))
853- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
911+ let et = bE(U(V))
912+ let cM = split(et[H], "_")
913+ let eB = cL(cM, eA, cO, cP)
914+ let dU = eB._1
915+ let ev = eB._2
916+ let bt = eB._3
917+ let dV = eB._4
918+ let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
919+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
920+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
921+ let eC = fraction(bt, aX, al)
922+ let dW = max([eC, k])
923+ let dX = (bt / 100)
924+ if ((dW >= (bt - dX)))
925+ then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
854926 else {
855- let em = valueOrElse(getInteger(Y), 0)
856- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
927+ let eD = valueOrElse(getInteger(aa), 0)
928+ $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
857929 }
858930 }
859931 }
862934
863935
864936
865-@Callable(dX)
866-func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac))
937+@Callable(eo)
938+func sellResourcesLandDelivery (cO,cP,Y,eA) = if (!(ae))
867939 then throw("Delivery feature is turned off!")
868940 else {
869- let ea = bF()
870- if ((ea == ea))
871- then if ((size(dX.payments) != 0))
941+ let er = bH()
942+ if ((er == er))
943+ then if ((size(eo.payments) != 0))
872944 then throw("sellResources doesn't require any payments")
873945 else {
874- let en = dX.caller
875- let P = toString(en)
876- let eo = value(assetInfo(fromBase58String(W)))
877- if (!(isDefined(getInteger(aC, N(W)))))
878- then throw((("NFT " + eo.name) + " is not staked"))
946+ let eE = eo.caller
947+ let R = toString(eE)
948+ let eF = value(assetInfo(fromBase58String(Y)))
949+ if (!(isDefined(getInteger(aE, P(Y)))))
950+ then throw((("NFT " + eF.name) + " is not staked"))
879951 else {
880- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
881- if ((ep != P))
952+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
953+ if ((eG != R))
882954 then throw((e + " is not yours"))
883955 else {
884- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
885- let bY = split_4C(dz, ":")
886- let cK = split(bY[y], "_")
887- let eq = cJ(cK, ej, cM, cN)
888- let dS = eq._1
889- let ee = eq._2
890- let br = eq._3
891- let dT = eq._4
892- let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
893- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
894- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
895- let el = fraction(br, aV, aj)
896- let dU = if ((k > el))
897- then k
898- else el
899- let dV = (br / 100)
900- if ((dU >= (br - dV)))
901- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
956+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
957+ let ca = split_4C(dB, ":")
958+ let cM = split(ca[A], "_")
959+ let eH = cL(cM, eA, cO, cP)
960+ let dU = eH._1
961+ let ev = eH._2
962+ let bt = eH._3
963+ let dV = eH._4
964+ let dJ = makeString_2C([ca[z], makeString(ev, "_"), ca[B], ca[C], ca[D]], ":")
965+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
966+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
967+ let eC = fraction(bt, aX, al)
968+ let dW = max([eC, k])
969+ let dX = (bt / 100)
970+ if ((dW >= (bt - dX)))
971+ then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
902972 else {
903- let em = valueOrElse(getInteger(Y), 0)
904- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
973+ let eD = valueOrElse(getInteger(aa), 0)
974+ $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(dL, er, ey))
905975 }
906976 }
907977 }
911981
912982
913983
914-@Callable(dX)
915-func buyMaterials (cM,cS) = {
916- let ea = bF()
917- if ((ea == ea))
984+@Callable(eo)
985+func buyMaterials (cO,cU) = {
986+ let er = bH()
987+ if ((er == er))
918988 then {
919- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
920- if ((size(dX.payments) != 1))
989+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
990+ if ((size(eo.payments) != 1))
921991 then throw("exactly 1 payment must be attached")
922992 else {
923- let dk = dX.payments[0]
924- let dl = dk.amount
925- if (if (!(isDefined(dk.assetId)))
993+ let dm = eo.payments[0]
994+ let dn = dm.amount
995+ if (if (!(isDefined(dm.assetId)))
926996 then true
927- else (value(dk.assetId) != ae))
997+ else (value(dm.assetId) != ag))
928998 then throw("USDT payments only!")
929999 else {
930- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
931- if ((eb[J] != "F"))
932- then throw(("Duck location type should be Factory, but is " + eb[J]))
1000+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1001+ if ((es[L] != "F"))
1002+ then throw(("Duck location type should be Factory, but is " + es[L]))
9331003 else {
934- let ec = bC(S(T))
935- let cR = split(ec[G], "_")
936- let er = cQ(cR, eb[K], cM, cS)
937- let dS = er._1
938- let es = er._2
939- let bA = er._3
940- let et = er._4
941- if ((bA > dl))
942- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1004+ let et = bE(U(V))
1005+ let cT = split(et[I], "_")
1006+ let eI = cS(cT, es[M], cO, cU)
1007+ let dU = eI._1
1008+ let eJ = eI._2
1009+ let bC = eI._3
1010+ let eK = eI._4
1011+ if ((bC > dn))
1012+ then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
9431013 else {
944- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
945- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
946- let ax = if (((dl - bA) > 0))
947- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1014+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1015+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1016+ let az = if (((dn - bC) > 0))
1017+ then [ScriptTransfer(eo.caller, (dn - bC), ag)]
9481018 else nil
949- let dV = (bA / 100)
950- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
951- $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1019+ let dX = (bC / 100)
1020+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1021+ $Tuple2(((dU ++ az) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
9521022 }
9531023 }
9541024 }
9591029
9601030
9611031
962-@Callable(dX)
963-func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac))
1032+@Callable(eo)
1033+func buyMaterialsDuckDelivery (cO,cU,eA) = if (!(ae))
9641034 then throw("Delivery feature is turned off!")
9651035 else {
966- let ea = bF()
967- if ((ea == ea))
1036+ let er = bH()
1037+ if ((er == er))
9681038 then {
969- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
970- if ((size(dX.payments) != 1))
1039+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1040+ if ((size(eo.payments) != 1))
9711041 then throw("exactly 1 payment must be attached")
9721042 else {
973- let dk = dX.payments[0]
974- let dl = dk.amount
975- if (if (!(isDefined(dk.assetId)))
1043+ let dm = eo.payments[0]
1044+ let dn = dm.amount
1045+ if (if (!(isDefined(dm.assetId)))
9761046 then true
977- else (value(dk.assetId) != ae))
1047+ else (value(dm.assetId) != ag))
9781048 then throw("USDT payments only!")
9791049 else {
980- let ec = bC(S(T))
981- let cR = split(ec[G], "_")
982- let eu = cQ(cR, ej, cM, cS)
983- let dS = eu._1
984- let es = eu._2
985- let bA = eu._3
986- let et = eu._4
987- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
988- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
989- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
990- let el = fraction(bA, aV, aj)
991- let dU = if ((k > el))
992- then k
993- else el
994- let dm = (bA + dU)
995- if ((dm > dl))
996- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1050+ let et = bE(U(V))
1051+ let cT = split(et[I], "_")
1052+ let eL = cS(cT, eA, cO, cU)
1053+ let dU = eL._1
1054+ let eJ = eL._2
1055+ let bC = eL._3
1056+ let eK = eL._4
1057+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1058+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1059+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1060+ let eC = fraction(bC, aX, al)
1061+ let dW = max([eC, k])
1062+ let do = (bC + dW)
1063+ if ((do > dn))
1064+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
9971065 else {
998- let ax = if (((dl - dm) > 0))
999- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1066+ let az = if (((dn - do) > 0))
1067+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
10001068 else nil
1001- let dV = (bA / 100)
1002- let em = valueOrElse(getInteger(Y), 0)
1003- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1069+ let dX = (bC / 100)
1070+ let eD = valueOrElse(getInteger(aa), 0)
1071+ $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
10041072 }
10051073 }
10061074 }
10101078
10111079
10121080
1013-@Callable(dX)
1014-func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac))
1081+@Callable(eo)
1082+func buyMaterialsLandDelivery (cO,cU,Y,eA) = if (!(ae))
10151083 then throw("Delivery feature is turned off!")
10161084 else {
1017- let ea = bF()
1018- if ((ea == ea))
1019- then if ((size(dX.payments) != 1))
1085+ let er = bH()
1086+ if ((er == er))
1087+ then if ((size(eo.payments) != 1))
10201088 then throw("exactly 1 payment must be attached")
10211089 else {
1022- let dk = dX.payments[0]
1023- let dl = dk.amount
1024- if (if (!(isDefined(dk.assetId)))
1090+ let dm = eo.payments[0]
1091+ let dn = dm.amount
1092+ if (if (!(isDefined(dm.assetId)))
10251093 then true
1026- else (value(dk.assetId) != ae))
1094+ else (value(dm.assetId) != ag))
10271095 then throw("USDT payments only!")
10281096 else {
1029- let en = dX.caller
1030- let P = toString(en)
1031- let eo = value(assetInfo(fromBase58String(W)))
1032- if (!(isDefined(getInteger(aC, N(W)))))
1033- then throw((("NFT " + eo.name) + " is not staked"))
1097+ let eE = eo.caller
1098+ let R = toString(eE)
1099+ let eF = value(assetInfo(fromBase58String(Y)))
1100+ if (!(isDefined(getInteger(aE, P(Y)))))
1101+ then throw((("NFT " + eF.name) + " is not staked"))
10341102 else {
1035- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1036- if ((ep != P))
1103+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1104+ if ((eG != R))
10371105 then throw((e + " is not yours"))
10381106 else {
1039- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1040- let bY = split_4C(dz, ":")
1041- let cR = split(bY[z], "_")
1042- let ev = cQ(cR, ej, cM, cS)
1043- let dS = ev._1
1044- let es = ev._2
1045- let bA = ev._3
1046- let et = ev._4
1047- let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1048- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1049- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1050- let el = fraction(bA, aV, aj)
1051- let dU = if ((k > el))
1052- then k
1053- else el
1054- let dm = (bA + dU)
1055- if ((dm > dl))
1056- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1107+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1108+ let ca = split_4C(dB, ":")
1109+ let cT = split(ca[B], "_")
1110+ let eM = cS(cT, eA, cO, cU)
1111+ let dU = eM._1
1112+ let eJ = eM._2
1113+ let bC = eM._3
1114+ let eK = eM._4
1115+ let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), ca[C], ca[D]], ":")
1116+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1117+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eK, am)], nil))
1118+ let eC = fraction(bC, aX, al)
1119+ let dW = max([eC, k])
1120+ let do = (bC + dW)
1121+ if ((do > dn))
1122+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
10571123 else {
1058- let ax = if (((dl - dm) > 0))
1059- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1124+ let az = if (((dn - do) > 0))
1125+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
10601126 else nil
1061- let dV = (bA / 100)
1062- let em = valueOrElse(getInteger(Y), 0)
1063- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1127+ let dX = (bC / 100)
1128+ let eD = valueOrElse(getInteger(aa), 0)
1129+ $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
10641130 }
10651131 }
10661132 }
10711137
10721138
10731139
1074-@Callable(dX)
1075-func exchangeResources (cM) = {
1076- let ea = bF()
1077- if ((ea == ea))
1140+@Callable(eo)
1141+func exchangeResources (cO) = {
1142+ let er = bH()
1143+ if ((er == er))
10781144 then {
1079- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1080- if ((size(dX.payments) != 1))
1145+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1146+ if ((size(eo.payments) != 1))
10811147 then throw("exactly 1 payment must be attached")
10821148 else {
1083- let dk = dX.payments[0]
1084- let dl = dk.amount
1085- if (if (!(isDefined(dk.assetId)))
1149+ let dm = eo.payments[0]
1150+ let dn = dm.amount
1151+ if (if (!(isDefined(dm.assetId)))
10861152 then true
1087- else (value(dk.assetId) != ae))
1153+ else (value(dm.assetId) != ag))
10881154 then throw("USDT payments only!")
10891155 else {
1090- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1091- if ((eb[J] != "F"))
1092- then throw(("Duck location type should be Factory, but is " + eb[J]))
1156+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1157+ if ((es[L] != "F"))
1158+ then throw(("Duck location type should be Factory, but is " + es[L]))
10931159 else {
1094- let ec = bC(S(T))
1095- let cK = split(ec[F], "_")
1096- let cR = split(ec[G], "_")
1097- let ew = cU(cK, cR, cM)
1098- let ee = ew._1
1099- let es = ew._2
1100- let bA = ew._3
1101- let ex = ew._4
1102- if ((bA > dl))
1103- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1160+ let et = bE(U(V))
1161+ let cM = split(et[H], "_")
1162+ let cT = split(et[I], "_")
1163+ let eN = cW(cM, cT, cO)
1164+ let ev = eN._1
1165+ let eJ = eN._2
1166+ let bC = eN._3
1167+ let eO = eN._4
1168+ if ((bC > dn))
1169+ then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
11041170 else {
1105- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1106- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1107- let ax = if (((dl - bA) > 0))
1108- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1171+ let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1172+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1173+ let az = if (((dn - bC) > 0))
1174+ then [ScriptTransfer(eo.caller, (dn - bC), ag)]
11091175 else nil
1110- let dV = (bA / 100)
1111- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1112- $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1176+ let dX = (bC / 100)
1177+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1178+ $Tuple2((az :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
11131179 }
11141180 }
11151181 }
11201186
11211187
11221188
1123-@Callable(dX)
1124-func exchangeResourcesDuckDelivery (cM) = if (!(ac))
1189+@Callable(eo)
1190+func exchangeResourcesDuckDelivery (cO) = if (!(ae))
11251191 then throw("Delivery feature is turned off!")
11261192 else {
1127- let ea = bF()
1128- if ((ea == ea))
1193+ let er = bH()
1194+ if ((er == er))
11291195 then {
1130- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1131- if ((size(dX.payments) != 1))
1196+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1197+ if ((size(eo.payments) != 1))
11321198 then throw("exactly 1 payment must be attached")
11331199 else {
1134- let dk = dX.payments[0]
1135- let dl = dk.amount
1136- if (if (!(isDefined(dk.assetId)))
1200+ let dm = eo.payments[0]
1201+ let dn = dm.amount
1202+ if (if (!(isDefined(dm.assetId)))
11371203 then true
1138- else (value(dk.assetId) != ae))
1204+ else (value(dm.assetId) != ag))
11391205 then throw("USDT payments only!")
11401206 else {
1141- let ec = bC(S(T))
1142- let cK = split(ec[F], "_")
1143- let cR = split(ec[G], "_")
1144- let ey = cU(cK, cR, cM)
1145- let ee = ey._1
1146- let es = ey._2
1147- let bA = ey._3
1148- let ex = ey._4
1149- let el = fraction(bA, aW, aj)
1150- let dU = if ((l > el))
1151- then l
1152- else el
1153- let dm = (bA + dU)
1154- if ((dm > dl))
1155- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1207+ let et = bE(U(V))
1208+ let cM = split(et[H], "_")
1209+ let cT = split(et[I], "_")
1210+ let eP = cW(cM, cT, cO)
1211+ let ev = eP._1
1212+ let eJ = eP._2
1213+ let bC = eP._3
1214+ let eO = eP._4
1215+ let eC = fraction(bC, aY, al)
1216+ let dW = max([eC, l])
1217+ let do = (bC + dW)
1218+ if ((do > dn))
1219+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
11561220 else {
1157- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1158- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1159- let ax = if (((dl - dm) > 0))
1160- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1221+ let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1222+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1223+ let az = if (((dn - do) > 0))
1224+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
11611225 else nil
1162- let dV = (bA / 100)
1163- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1164- let em = valueOrElse(getInteger(Y), 0)
1165- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1226+ let dX = (bC / 100)
1227+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1228+ let eD = valueOrElse(getInteger(aa), 0)
1229+ $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
11661230 }
11671231 }
11681232 }
11721236
11731237
11741238
1175-@Callable(dX)
1176-func exchangeResourcesLandDelivery (cM,W) = if (!(ac))
1239+@Callable(eo)
1240+func exchangeResourcesLandDelivery (cO,Y) = if (!(ae))
11771241 then throw("Delivery feature is turned off!")
11781242 else {
1179- let ea = bF()
1180- if ((ea == ea))
1181- then if ((size(dX.payments) != 1))
1243+ let er = bH()
1244+ if ((er == er))
1245+ then if ((size(eo.payments) != 1))
11821246 then throw("exactly 1 payment must be attached")
11831247 else {
1184- let dk = dX.payments[0]
1185- let dl = dk.amount
1186- if (if (!(isDefined(dk.assetId)))
1248+ let dm = eo.payments[0]
1249+ let dn = dm.amount
1250+ if (if (!(isDefined(dm.assetId)))
11871251 then true
1188- else (value(dk.assetId) != ae))
1252+ else (value(dm.assetId) != ag))
11891253 then throw("USDT payments only!")
11901254 else {
1191- let en = dX.caller
1192- let P = toString(en)
1193- let eo = value(assetInfo(fromBase58String(W)))
1194- if (!(isDefined(getInteger(aC, N(W)))))
1195- then throw((("NFT " + eo.name) + " is not staked"))
1255+ let eE = eo.caller
1256+ let R = toString(eE)
1257+ let eF = value(assetInfo(fromBase58String(Y)))
1258+ if (!(isDefined(getInteger(aE, P(Y)))))
1259+ then throw((("NFT " + eF.name) + " is not staked"))
11961260 else {
1197- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1198- if ((ep != P))
1261+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1262+ if ((eG != R))
11991263 then throw((e + " is not yours"))
12001264 else {
1201- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1202- let bY = split_4C(dz, ":")
1203- let cK = split(bY[y], "_")
1204- let cR = split(bY[z], "_")
1205- let ez = cU(cK, cR, cM)
1206- let ee = ez._1
1207- let es = ez._2
1208- let bA = ez._3
1209- let ex = ez._4
1210- let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1211- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1212- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1213- let el = fraction(bA, aW, aj)
1214- let dU = if ((l > el))
1215- then l
1216- else el
1217- let dm = (bA + dU)
1218- if ((dm > dl))
1219- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1265+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1266+ let ca = split_4C(dB, ":")
1267+ let cM = split(ca[A], "_")
1268+ let cT = split(ca[B], "_")
1269+ let eQ = cW(cM, cT, cO)
1270+ let ev = eQ._1
1271+ let eJ = eQ._2
1272+ let bC = eQ._3
1273+ let eO = eQ._4
1274+ let dJ = makeString_2C([ca[z], makeString(ev, "_"), makeString(eJ, "_"), ca[C], ca[D]], ":")
1275+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1276+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eO, am)], nil))
1277+ let eC = fraction(bC, aY, al)
1278+ let dW = max([eC, l])
1279+ let do = (bC + dW)
1280+ if ((do > dn))
1281+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
12201282 else {
1221- let ax = if (((dl - dm) > 0))
1222- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1283+ let az = if (((dn - do) > 0))
1284+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
12231285 else nil
1224- let dV = (bA / 100)
1225- let em = valueOrElse(getInteger(Y), 0)
1226- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1286+ let dX = (bC / 100)
1287+ let eD = valueOrElse(getInteger(aa), 0)
1288+ $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
12271289 }
12281290 }
12291291 }
12341296
12351297
12361298
1237-@Callable(dX)
1238-func craftGoods (eA,eB) = {
1239- let ea = bF()
1240- if ((ea == ea))
1241- then if ((size(dX.payments) != 1))
1299+@Callable(eo)
1300+func craftGoods (ec,ed) = {
1301+ let er = bH()
1302+ if ((er == er))
1303+ then if ((size(eo.payments) != 1))
12421304 then throw("exactly 1 payment must be attached")
12431305 else {
1244- let dk = dX.payments[0]
1245- let dl = dk.amount
1246- let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1247- if ((eC != ae))
1306+ let dm = eo.payments[0]
1307+ let dn = dm.amount
1308+ if (if (!(isDefined(dm.assetId)))
1309+ then true
1310+ else (value(dm.assetId) != ag))
12481311 then throw("USDT payments only!")
1249- else if ((dl != aj))
1250- then throw("exactly 1 USDT must be attached as payment")
1251- else if ((0 >= eB))
1252- then throw("Quantity should be positive")
1253- else {
1254- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1255- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1256- if ((eb[J] != "M"))
1257- then throw(("Duck location type should be Manufactory, but is " + eb[J]))
1258- else {
1259- let eD = eb[I]
1260- let ec = bC(S(T))
1261- let cR = split(ec[G], "_")
1262- if (if ((0 > eA))
1263- then true
1264- else (eA >= size(s)))
1265- then throw(("Unknown product idx=" + toString(eA)))
1266- else {
1267- let ab = split(s[eA], "_")
1268- if ((size(ab) != v))
1269- then throw(("Fatal: unknown recipe: " + s[eA]))
1270- else {
1271- let eE = parseIntValue(ab[u])
1272- if ((q[eE] != eD))
1273- then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
1274- else {
1275- let eF = if ((ec[H] == ""))
1276- then nil
1277- else split_4C(ec[H], "_")
1278- func eG (bH,eH) = {
1279- let aJ = bH._2
1280- let eI = if ((size(eF) > aJ))
1281- then eF[aJ]
1282- else "0"
1283- let dQ = parseIntValue(eI)
1284- let bh = (eB * w)
1285- let eJ = if ((aJ == eA))
1286- then toString((dQ + bh))
1287- else eI
1288- $Tuple2((bH._1 :+ eJ), (aJ + 1))
1289- }
1290-
1291- let eK = ( let cl = s
1292- let cm = size(cl)
1293- let cn = $Tuple2(nil, 0)
1294- func co (cp,cq) = if ((cq >= cm))
1295- then cp
1296- else eG(cp, cl[cq])
1297-
1298- func cr (cp,cq) = if ((cq >= cm))
1299- then cp
1300- else throw("List size exceeds 50")
1301-
1302- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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
1303- func eL (bH,bJ) = {
1304- let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1305- let eN = parseIntValue(cR[bJ])
1306- if ((eM > eN))
1307- then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1308- else if ((eM > 0))
1309- then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1310- else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
1311- }
1312-
1313- let eO = {
1314- let cl = an
1315- let cm = size(cl)
1316- let cn = $Tuple2(nil, 0)
1317- func cs (cp,cq) = if ((cq >= cm))
1318- then cp
1319- else eL(cp, cl[cq])
1320-
1321- func ct (cp,cq) = if ((cq >= cm))
1322- then cp
1323- else throw("List size exceeds 6")
1324-
1325- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
1326- }
1327- let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1328- let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1329- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1330- $Tuple2(nil, $Tuple3(eP, ea, eh))
1331- }
1332- }
1333- }
1334- }
1335- }
1312+ else if ((dn != al))
1313+ then throw((("exactly " + aN(m, 6)) + " USDT must be attached as payment"))
1314+ else {
1315+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1316+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1317+ if ((es[L] != "M"))
1318+ then throw(("Duck location type should be Manufactory, but is " + es[L]))
1319+ else {
1320+ let eR = es[K]
1321+ let et = bE(U(V))
1322+ let cT = split(et[I], "_")
1323+ let ea = if ((et[J] == ""))
1324+ then nil
1325+ else split_4C(et[J], "_")
1326+ let eS = dZ(cT, ea, eR, ec, ed)
1327+ let eJ = eS._1
1328+ let ej = eS._2
1329+ let eT = eS._3
1330+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1331+ let eU = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1332+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1333+ $Tuple2(nil, $Tuple3(eU, er, ey))
1334+ }
1335+ }
13361336 }
13371337 else throw("Strict value is not equal to itself.")
13381338 }
13391339
13401340
13411341
1342-@Callable(dX)
1343-func setWarehouseOrder (eQ,W) = {
1344- let en = dX.originCaller
1345- let P = toString(en)
1346- let eP = if ((en != aB))
1347- then bE()
1348- else false
1349- let eo = value(assetInfo(fromBase58String(W)))
1350- if (!(isDefined(getInteger(aC, N(W)))))
1351- then throw((("NFT " + eo.name) + " is not staked"))
1352- else {
1353- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1354- if (if ((en != aB))
1355- then (ep != P)
1356- else false)
1357- then throw((e + " is not yours"))
1358- else {
1359- let eR = split_4C(eQ, ":")
1360- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1361- let bY = split_4C(dz, ":")
1362- let eS = split(bY[B], "_")
1363- let eT = parseIntValue(eS[D])
1364- let be = V(W)
1365- let bZ = bd(be)
1366- let dY = bX(bY, bZ, eR)
1367- let eU = dY._4
1368- let eV = dY._5
1369- let eW = dY._7
1370- let eX = (eU + eV)
1371- let eY = ((eT - eW) - eX)
1372- if ((0 > eY))
1373- then throw((((((("Attempt to reserve " + toString(eU)) + " space for buy orders, and ") + toString(eV)) + " space for sell orders (and occupied=") + toString(eW)) + "), leads to negative free space"))
1374- else {
1375- let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":")
1376- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1377- let eZ = dY._6
1378- let fa = if ((eZ > 0))
1379- then if ((size(dX.payments) != 1))
1380- then throw("exactly 1 payment must be attached")
1381- else {
1382- let dk = dX.payments[0]
1383- let dl = dk.amount
1384- let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1385- if ((eC != ae))
1386- then throw("USDT payments only!")
1387- else if ((dl != eZ))
1388- then throw(("Payment needed is " + toString(eZ)))
1389- else [StringEntry(be, eQ)]
1390- }
1391- else if ((eZ == 0))
1392- then if ((size(dX.payments) != 0))
1393- then throw("No payments needed")
1394- else [StringEntry(be, eQ)]
1395- else if ((size(dX.payments) != 0))
1396- then throw("No payments needed")
1397- else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)]
1398- $Tuple2(fa, $Tuple2(eP, dJ))
1399- }
1400- }
1401- }
1402- }
1403-
1404-
1405-
1406-@Callable(dX)
1407-func acceptWarehouseOrder (dq,dp,T) = {
1408- let ea = bF()
1409- if ((ea == ea))
1410- then {
1411- let de = dX.originCaller
1412- let cZ = toString(de)
1413- let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1414- let eb = valueOrElse(getString(aC, U(fb)), g)
1415- let fc = split(value(eb), "_")
1416- if ((fc[J] != "L"))
1417- then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1418- else if ((fb != T))
1419- then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
1420- else {
1421- let bD = S(T)
1422- let ec = bC(bD)
1423- let dr = split(ec[F], "_")
1424- let ds = split(ec[G], "_")
1425- let dt = if ((ec[H] == ""))
1426- then nil
1427- else split_4C(ec[H], "_")
1428- let fd = do(dp, cZ, dq, dr, ds, dt)
1429- let fe = fd._1
1430- let ff = fd._2
1431- let fg = fd._3
1432- let fh = fd._4
1433- let cY = fd._5
1434- let dg = fd._6
1435- let fi = fd._7
1436- let di = fd._8
1437- let fj = fd._9
1438- let dK = fd._10
1439- let fk = [fe, cX(cY, cZ, 0)]
1440- let fl = df(dg, dX.payments, di, 0)
1441- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1442- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1443- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1444- $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
1445- }
1446- }
1447- else throw("Strict value is not equal to itself.")
1448- }
1449-
1450-
1451-
1452-@Callable(dX)
1453-func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac))
1342+@Callable(eo)
1343+func craftGoodsDuckDelivery (ec,ed,eb) = if (!(ae))
14541344 then throw("Delivery feature is turned off!")
14551345 else {
1456- let ea = bF()
1457- if ((ea == ea))
1346+ let er = bH()
1347+ if ((er == er))
14581348 then {
1459- let de = dX.originCaller
1460- let cZ = toString(de)
1461- let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1462- let bD = S(T)
1463- let ec = bC(bD)
1464- let dr = split(ec[F], "_")
1465- let ds = split(ec[G], "_")
1466- let dt = if ((ec[H] == ""))
1467- then nil
1468- else split_4C(ec[H], "_")
1469- let fq = do(dp, cZ, fp, dr, ds, dt)
1470- let fe = fq._1
1471- let ff = fq._2
1472- let fg = fq._3
1473- let fh = fq._4
1474- let cY = fq._5
1475- let dg = fq._6
1476- let fi = fq._7
1477- let di = fq._8
1478- let fj = fq._9
1479- let dK = fq._10
1480- let fr = fraction((dg + cY), aV, aj)
1481- let fs = if ((k > fr))
1482- then k
1483- else fr
1484- let dj = fraction(fs, dg, (dg + cY))
1485- let da = (fs - dj)
1486- let em = valueOrElse(getInteger(Y), 0)
1487- let fk = [fe, cX(cY, cZ, da)]
1488- let fl = df(dg, dX.payments, di, dj)
1489- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1490- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1491- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1492- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
1493- }
1494- else throw("Strict value is not equal to itself.")
1495- }
1496-
1497-
1498-
1499-@Callable(dX)
1500-func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac))
1501- then throw("Delivery feature is turned off!")
1502- else {
1503- let ea = bF()
1504- if ((ea == ea))
1505- then {
1506- let de = dX.originCaller
1507- let cZ = toString(de)
1508- let eo = value(assetInfo(fromBase58String(ft)))
1509- if (!(isDefined(getInteger(aC, N(ft)))))
1510- then throw((("NFT " + eo.name) + " is not staked"))
1349+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1350+ if ((size(eo.payments) != 1))
1351+ then throw("exactly 1 payment must be attached")
15111352 else {
1512- let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1513- if ((ep != cZ))
1514- then throw((e + " is not yours"))
1353+ let dm = eo.payments[0]
1354+ let dn = dm.amount
1355+ if (if (!(isDefined(dm.assetId)))
1356+ then true
1357+ else (value(dm.assetId) != ag))
1358+ then throw("USDT payments only!")
15151359 else {
1516- let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1517- let bY = split_4C(dz, ":")
1518- let cK = split(bY[y], "_")
1519- let cR = split(bY[z], "_")
1520- let eF = if ((bY[A] == ""))
1360+ let et = bE(U(V))
1361+ let cT = split(et[I], "_")
1362+ let ea = if ((et[J] == ""))
15211363 then nil
1522- else split(bY[A], "_")
1523- let fu = do(dp, cZ, fp, cK, cR, eF)
1524- let fe = fu._1
1525- let ff = fu._2
1526- let fg = fu._3
1527- let fh = fu._4
1528- let cY = fu._5
1529- let dg = fu._6
1530- let fi = fu._7
1531- let di = fu._8
1532- let fj = fu._9
1533- let dK = fu._10
1534- let fr = fraction((dg + cY), aV, aj)
1535- let fs = if ((k > fr))
1536- then k
1537- else fr
1538- let dj = fraction(fs, dg, (dg + cY))
1539- let da = (fs - dj)
1540- let em = valueOrElse(getInteger(Y), 0)
1541- let fk = [fe, cX(cY, cZ, da)]
1542- let fl = df(dg, dX.payments, di, dj)
1543- let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1544- let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1545- let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1546- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
1364+ else split_4C(et[J], "_")
1365+ let eV = dZ(cT, ea, eb, ec, ed)
1366+ let eJ = eV._1
1367+ let ej = eV._2
1368+ let eT = eV._3
1369+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1370+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1371+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1372+ let eC = fraction(ed, k, n)
1373+ let dW = max([eC, k])
1374+ let do = (m + dW)
1375+ if ((do > dn))
1376+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1377+ else {
1378+ let az = if (((dn - do) > 0))
1379+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
1380+ else nil
1381+ let eD = valueOrElse(getInteger(aa), 0)
1382+ $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1383+ }
15471384 }
15481385 }
15491386 }
15521389
15531390
15541391
1555-@Callable(dX)
1556-func sellProductsToES (cM) = {
1557- let ea = bF()
1558- if ((ea == ea))
1559- then if ((size(dX.payments) != 0))
1392+@Callable(eo)
1393+func craftGoodsLandDelivery (ec,ed,Y,eb) = if (!(ae))
1394+ then throw("Delivery feature is turned off!")
1395+ else {
1396+ let er = bH()
1397+ if ((er == er))
1398+ then if ((size(eo.payments) != 1))
1399+ then throw("exactly 1 payment must be attached")
1400+ else {
1401+ let dm = eo.payments[0]
1402+ let dn = dm.amount
1403+ if (if (!(isDefined(dm.assetId)))
1404+ then true
1405+ else (value(dm.assetId) != ag))
1406+ then throw("USDT payments only!")
1407+ else {
1408+ let eE = eo.caller
1409+ let R = toString(eE)
1410+ let eF = value(assetInfo(fromBase58String(Y)))
1411+ if (!(isDefined(getInteger(aE, P(Y)))))
1412+ then throw((("NFT " + eF.name) + " is not staked"))
1413+ else {
1414+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1415+ if ((eG != R))
1416+ then throw((e + " is not yours"))
1417+ else {
1418+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1419+ let ca = split_4C(dB, ":")
1420+ let cT = split(ca[B], "_")
1421+ let ea = if ((ca[C] == ""))
1422+ then nil
1423+ else split_4C(ca[C], "_")
1424+ let eW = dZ(cT, ea, eb, ec, ed)
1425+ let eJ = eW._1
1426+ let ej = eW._2
1427+ let eT = eW._3
1428+ let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), makeString_2C(ej, "_"), ca[D]], ":")
1429+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1430+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(b, eT, am)], nil))
1431+ let eC = fraction(ed, k, n)
1432+ let dW = max([eC, k])
1433+ let do = (m + dW)
1434+ if ((do > dn))
1435+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1436+ else {
1437+ let az = if (((dn - do) > 0))
1438+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
1439+ else nil
1440+ let eD = valueOrElse(getInteger(aa), 0)
1441+ $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1442+ }
1443+ }
1444+ }
1445+ }
1446+ }
1447+ else throw("Strict value is not equal to itself.")
1448+ }
1449+
1450+
1451+
1452+@Callable(eo)
1453+func setWarehouseOrder (eX,Y) = {
1454+ let eE = eo.originCaller
1455+ let R = toString(eE)
1456+ let eU = if ((eE != aD))
1457+ then bG()
1458+ else false
1459+ let eF = value(assetInfo(fromBase58String(Y)))
1460+ if (!(isDefined(getInteger(aE, P(Y)))))
1461+ then throw((("NFT " + eF.name) + " is not staked"))
1462+ else {
1463+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1464+ if (if ((eE != aD))
1465+ then (eG != R)
1466+ else false)
1467+ then throw((e + " is not yours"))
1468+ else {
1469+ let eY = split_4C(eX, ":")
1470+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1471+ let ca = split_4C(dB, ":")
1472+ let eZ = split(ca[D], "_")
1473+ let fa = parseIntValue(eZ[F])
1474+ let bg = X(Y)
1475+ let cb = bf(bg)
1476+ let ep = bZ(ca, cb, eY)
1477+ let fb = ep._4
1478+ let fc = ep._5
1479+ let fd = ep._7
1480+ let fe = (fb + fc)
1481+ let ff = ((fa - fd) - fe)
1482+ if ((0 > ff))
1483+ then throw((((((("Attempt to reserve " + toString(fb)) + " space for buy orders, and ") + toString(fc)) + " space for sell orders (and occupied=") + toString(fd)) + "), leads to negative free space"))
1484+ else {
1485+ let dJ = makeString_2C([ca[z], makeString(ep._1, "_"), makeString(ep._2, "_"), makeString_2C(ep._3, "_"), toString(fe)], ":")
1486+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1487+ let fg = ep._6
1488+ let fh = if ((fg > 0))
1489+ then if ((size(eo.payments) != 1))
1490+ then throw("exactly 1 payment must be attached")
1491+ else {
1492+ let dm = eo.payments[0]
1493+ let dn = dm.amount
1494+ let fi = valueOrErrorMessage(dm.assetId, "WAVES can't be used as payment")
1495+ if ((fi != ag))
1496+ then throw("USDT payments only!")
1497+ else if ((dn != fg))
1498+ then throw(("Payment needed is " + toString(fg)))
1499+ else [StringEntry(bg, eX)]
1500+ }
1501+ else if ((fg == 0))
1502+ then if ((size(eo.payments) != 0))
1503+ then throw("No payments needed")
1504+ else [StringEntry(bg, eX)]
1505+ else if ((size(eo.payments) != 0))
1506+ then throw("No payments needed")
1507+ else [ScriptTransfer(addressFromStringValue(eG), -(fg), ag), StringEntry(bg, eX)]
1508+ $Tuple2(fh, $Tuple2(eU, dL))
1509+ }
1510+ }
1511+ }
1512+ }
1513+
1514+
1515+
1516+@Callable(eo)
1517+func acceptWarehouseOrder (ds,dr,V) = {
1518+ let er = bH()
1519+ if ((er == er))
1520+ then {
1521+ let dg = eo.originCaller
1522+ let db = toString(dg)
1523+ let fj = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1524+ let es = valueOrElse(getString(aE, W(fj)), g)
1525+ let fk = split(value(es), "_")
1526+ if ((fk[L] != "L"))
1527+ then throw((("Duck location type is " + fk[L]) + ", but should be L"))
1528+ else if ((fj != V))
1529+ then throw(((("Your staked duck is " + fj) + ", but passed ") + V))
1530+ else {
1531+ let bF = U(V)
1532+ let et = bE(bF)
1533+ let dt = split(et[H], "_")
1534+ let du = split(et[I], "_")
1535+ let dv = if ((et[J] == ""))
1536+ then nil
1537+ else split_4C(et[J], "_")
1538+ let fl = dq(dr, db, ds, dt, du, dv)
1539+ let fm = fl._1
1540+ let fn = fl._2
1541+ let fo = fl._3
1542+ let fp = fl._4
1543+ let da = fl._5
1544+ let di = fl._6
1545+ let fq = fl._7
1546+ let dk = fl._8
1547+ let fr = fl._9
1548+ let dM = fl._10
1549+ let fs = [fm, cZ(da, db, 0)]
1550+ let ft = dh(di, eo.payments, dk, 0)
1551+ let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1552+ let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1553+ let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1554+ $Tuple2((fs ++ ft), $Tuple5(er, fr, fv, fw, dM))
1555+ }
1556+ }
1557+ else throw("Strict value is not equal to itself.")
1558+ }
1559+
1560+
1561+
1562+@Callable(eo)
1563+func acceptShopOrderDuckDelivery (fx,dr) = if (!(ae))
1564+ then throw("Delivery feature is turned off!")
1565+ else {
1566+ let er = bH()
1567+ if ((er == er))
1568+ then {
1569+ let dg = eo.originCaller
1570+ let db = toString(dg)
1571+ let V = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1572+ let bF = U(V)
1573+ let et = bE(bF)
1574+ let dt = split(et[H], "_")
1575+ let du = split(et[I], "_")
1576+ let dv = if ((et[J] == ""))
1577+ then nil
1578+ else split_4C(et[J], "_")
1579+ let fy = dq(dr, db, fx, dt, du, dv)
1580+ let fm = fy._1
1581+ let fn = fy._2
1582+ let fo = fy._3
1583+ let fp = fy._4
1584+ let da = fy._5
1585+ let di = fy._6
1586+ let fq = fy._7
1587+ let dk = fy._8
1588+ let fr = fy._9
1589+ let dM = fy._10
1590+ let fz = fraction((di + da), aX, al)
1591+ let fA = max([fz, k])
1592+ let dl = fraction(fA, di, (di + da))
1593+ let dc = (fA - dl)
1594+ let eD = valueOrElse(getInteger(aa), 0)
1595+ let fs = [fm, cZ(da, db, dc)]
1596+ let ft = dh(di, eo.payments, dk, dl)
1597+ let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1598+ let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1599+ let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1600+ $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, fv, fw, dM))
1601+ }
1602+ else throw("Strict value is not equal to itself.")
1603+ }
1604+
1605+
1606+
1607+@Callable(eo)
1608+func acceptShopOrderLandDelivery (fx,dr,fB) = if (!(ae))
1609+ then throw("Delivery feature is turned off!")
1610+ else {
1611+ let er = bH()
1612+ if ((er == er))
1613+ then {
1614+ let dg = eo.originCaller
1615+ let db = toString(dg)
1616+ let eF = value(assetInfo(fromBase58String(fB)))
1617+ if (!(isDefined(getInteger(aE, P(fB)))))
1618+ then throw((("NFT " + eF.name) + " is not staked"))
1619+ else {
1620+ let eG = valueOrErrorMessage(getString(aE, N(fB)), (("NFT " + eF.name) + " is orphaned"))
1621+ if ((eG != db))
1622+ then throw((e + " is not yours"))
1623+ else {
1624+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [fB], nil))
1625+ let ca = split_4C(dB, ":")
1626+ let cM = split(ca[A], "_")
1627+ let cT = split(ca[B], "_")
1628+ let ea = if ((ca[C] == ""))
1629+ then nil
1630+ else split_4C(ca[C], "_")
1631+ let fC = dq(dr, db, fx, cM, cT, ea)
1632+ let fm = fC._1
1633+ let fn = fC._2
1634+ let fo = fC._3
1635+ let fp = fC._4
1636+ let da = fC._5
1637+ let di = fC._6
1638+ let fq = fC._7
1639+ let dk = fC._8
1640+ let fr = fC._9
1641+ let dM = fC._10
1642+ let fz = fraction((di + da), aX, al)
1643+ let fA = max([fz, k])
1644+ let dl = fraction(fA, di, (di + da))
1645+ let dc = (fA - dl)
1646+ let eD = valueOrElse(getInteger(aa), 0)
1647+ let fs = [fm, cZ(da, db, dc)]
1648+ let ft = dh(di, eo.payments, dk, dl)
1649+ let dJ = makeString_2C([ca[z], makeString(fn, "_"), makeString(fo, "_"), makeString(fp, "_"), ca[D]], ":")
1650+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, fB], nil))
1651+ let ey = aK(invoke(aE, "updateAccStats", [db, fraction(d, fq, am)], nil))
1652+ $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, dL, ey, dM))
1653+ }
1654+ }
1655+ }
1656+ else throw("Strict value is not equal to itself.")
1657+ }
1658+
1659+
1660+
1661+@Callable(eo)
1662+func sellProductsToES (cO) = {
1663+ let er = bH()
1664+ if ((er == er))
1665+ then if ((size(eo.payments) != 0))
15601666 then throw("No payments needed")
15611667 else {
1562- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1563- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1564- if ((eb[J] != "A"))
1565- then throw(("Duck location type should be Airport, but is " + eb[J]))
1668+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1669+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1670+ if ((es[L] != "A"))
1671+ then throw(("Duck location type should be Airport, but is " + es[L]))
15661672 else {
1567- let ec = bC(S(T))
1568- let eF = if ((ec[H] == ""))
1673+ let et = bE(U(V))
1674+ let ea = if ((et[J] == ""))
15691675 then nil
1570- else split_4C(ec[H], "_")
1571- let fv = X()
1572- let fw = getString(fv)
1573- let fx = if (isDefined(fw))
1574- then split_4C(value(fw), "_")
1676+ else split_4C(et[J], "_")
1677+ let fD = Z()
1678+ let fE = getString(fD)
1679+ let fF = if (isDefined(fE))
1680+ then split_4C(value(fE), "_")
15751681 else nil
1576- func fy (bH,fz) = {
1577- let bJ = bH._1
1578- let eB = if ((size(cM) > bJ))
1579- then cM[bJ]
1682+ func fG (bJ,fH) = {
1683+ let bL = bJ._1
1684+ let ed = if ((size(cO) > bL))
1685+ then cO[bL]
15801686 else 0
1581- if ((0 > eB))
1687+ if ((0 > ed))
15821688 then throw("Quantity cannot be negative")
15831689 else {
1584- let ab = split(fz, "_")
1585- if ((size(ab) != v))
1586- then throw(("Fatal: unknown recipe: " + fz))
1690+ let ad = split(fH, "_")
1691+ if ((size(ad) != x))
1692+ then throw(("Fatal: unknown recipe: " + fH))
15871693 else {
1588- let fA = (i * w)
1589- let fB = if ((size(fx) > bJ))
1590- then parseIntValue(fx[bJ])
1694+ let fI = (i * y)
1695+ let fJ = if ((size(fF) > bL))
1696+ then parseIntValue(fF[bL])
15911697 else 0
1592- let fC = (fA - fB)
1593- if ((eB > fC))
1594- then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
1698+ let fK = (fI - fJ)
1699+ if ((ed > fK))
1700+ then throw(((("Warehouse can buy only " + toString(fK)) + " of ") + r[bL]))
15951701 else {
1596- let et = aa(ab)
1597- let fD = fraction((et * j), h, (ak * w))
1598- let fE = if ((size(eF) > bJ))
1599- then parseIntValue(eF[bJ])
1702+ let eK = ac(ad)
1703+ let fL = fraction((eK * j), h, (am * y))
1704+ let fM = if ((size(ea) > bL))
1705+ then parseIntValue(ea[bL])
16001706 else 0
1601- if ((eB > fE))
1602- then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1603- else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
1707+ if ((ed > fM))
1708+ then throw(((("You have only " + toString(fM)) + " of ") + r[bL]))
1709+ else $Tuple5((bL + 1), (bJ._2 + (fL * ed)), (bJ._3 :+ toString((fM - ed))), (bJ._4 :+ toString((fJ + ed))), (bJ._5 + (eK * ed)))
16041710 }
16051711 }
16061712 }
16071713 }
16081714
1609- let eO = {
1610- let cl = s
1611- let cm = size(cl)
1612- let cn = $Tuple5(0, 0, nil, nil, 0)
1613- func co (cp,cq) = if ((cq >= cm))
1614- then cp
1615- else fy(cp, cl[cq])
1715+ let en = {
1716+ let cn = u
1717+ let co = size(cn)
1718+ let cp = $Tuple5(0, 0, nil, nil, 0)
1719+ func cq (cr,cs) = if ((cs >= co))
1720+ then cr
1721+ else fG(cr, cn[cs])
16161722
1617- func cr (cp,cq) = if ((cq >= cm))
1618- then cp
1723+ func ct (cr,cs) = if ((cs >= co))
1724+ then cr
16191725 else throw("List size exceeds 50")
16201726
1621- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
1727+ ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 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)
16221728 }
1623- let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1624- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1625- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1626- $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
1729+ let fu = makeString_2C([et[G], et[H], et[I], makeString_2C(en._3, "_")], ":")
1730+ let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1731+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(c, en._5, (am * 10))], nil))
1732+ $Tuple2([StringEntry(fD, makeString_2C(en._4, "_")), ScriptTransfer(eo.caller, en._2, ag)], $Tuple3(fv, er, ey))
16271733 }
16281734 }
16291735 else throw("Strict value is not equal to itself.")
16311737
16321738
16331739
1634-@Callable(dX)
1635-func updateEsStorage (fF) = if ((dX.caller != aC))
1740+@Callable(eo)
1741+func updateEsStorage (fN) = if ((eo.caller != aE))
16361742 then throw("Permission denied")
1637- else $Tuple2([StringEntry(X(), fF)], fF)
1743+ else $Tuple2([StringEntry(Z(), fN)], fN)
16381744
16391745
16401746
1641-@Callable(dX)
1642-func updateDeliveryLocked (fG) = if ((dX.caller != aC))
1747+@Callable(eo)
1748+func updateDeliveryLocked (fO) = if ((eo.caller != aE))
16431749 then throw("Permission denied")
1644- else $Tuple2([IntegerEntry(Z, fG)], fG)
1750+ else $Tuple2([IntegerEntry(ab, fO)], fO)
16451751
16461752
16471753
1648-@Callable(dX)
1649-func sendDeliveryReward (P) = if ((dX.caller != aC))
1754+@Callable(eo)
1755+func sendDeliveryReward (R) = if ((eo.caller != aE))
16501756 then throw("Permission denied")
16511757 else {
1652- let em = valueOrElse(getInteger(Y), 0)
1653- let fH = valueOrElse(getInteger(Z), 0)
1654- let fI = (k * m)
1655- let fJ = invoke(aE, "sendAcres", [P, fI], nil)
1656- $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ)
1758+ let eD = valueOrElse(getInteger(aa), 0)
1759+ let fP = valueOrElse(getInteger(ab), 0)
1760+ let fQ = (k * o)
1761+ let fR = invoke(aG, "sendAcres", [R, fQ], nil)
1762+ $Tuple2([IntegerEntry(aa, (eD - k)), IntegerEntry(ab, (fP - k))], fR)
16571763 }
16581764
16591765
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 10000
55
66 let b = 10000
77
88 let c = 10000
99
1010 let d = 10000
1111
1212 let e = "LAND"
1313
1414 let f = 6
1515
1616 let g = "Africa_F_Africa"
1717
1818 let h = 39637
1919
2020 let i = 10
2121
2222 let j = 4
2323
2424 let k = 50000
2525
2626 let l = 75000
2727
28-let m = 10
28+let m = 1000000
2929
30-let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
30+let n = 10
3131
32-let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
32+let o = 10
3333
34-let p = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
34+let p = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
3535
36-let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
36+let q = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3737
38-let r = 10000000
38+let r = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
3939
40-let s = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
40+let s = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
4141
42-let t = 6
42+let t = 10000000
4343
44-let u = 7
44+let u = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
4545
46-let v = 11
46+let v = 6
4747
48-let w = 10
48+let w = 7
4949
50-let x = 0
50+let x = 11
5151
52-let y = 1
52+let y = 10
5353
54-let z = 2
54+let z = 0
5555
56-let A = 3
56+let A = 1
5757
58-let B = 4
58+let B = 2
5959
60-let C = 0
60+let C = 3
6161
62-let D = 3
62+let D = 4
6363
6464 let E = 0
6565
66-let F = 1
66+let F = 3
6767
68-let G = 2
68+let G = 0
6969
70-let H = 3
70+let H = 1
7171
72-let I = 0
72+let I = 2
7373
74-let J = 1
74+let J = 3
7575
76-let K = 2
76+let K = 0
7777
78-func L (M) = ("no_" + M)
78+let L = 1
79+
80+let M = 2
81+
82+func N (O) = ("no_" + O)
7983
8084
81-func N (M) = ("st_" + M)
85+func P (O) = ("st_" + O)
8286
8387
84-func O (P) = ("accRefBy_" + P)
88+func Q (R) = ("accRefBy_" + R)
8589
8690
87-func Q (R) = ("stakedDuckByOwner_" + R)
91+func S (T) = ("stakedDuckByOwner_" + T)
8892
8993
90-func S (T) = ("backPack_" + T)
94+func U (V) = ("backPack_" + V)
9195
9296
93-func U (T) = ("duckLocation_" + T)
97+func W (V) = ("duckLocation_" + V)
9498
9599
96-func V (W) = ("landOrder_" + W)
100+func X (Y) = ("landOrder_" + Y)
97101
98102
99-func X () = "emergencyWarehouseProducts"
103+func Z () = "emergencyWarehouseProducts"
100104
101105
102-let Y = "deliveryFund"
106+let aa = "deliveryFund"
103107
104-let Z = "deliveryLocked"
108+let ab = "deliveryLocked"
105109
106-func aa (ab) = (parseIntValue(ab[t]) * r)
110+func ac (ad) = (parseIntValue(ad[v]) * t)
107111
108112
109-let ac = true
113+let ae = true
110114
111-let ad = take(drop(this.bytes, 1), 1)
115+let af = take(drop(this.bytes, 1), 1)
112116
113-let ae = {
114- let af = ad
115- if ((base58'2W' == af))
117+let ag = {
118+ let ah = af
119+ if ((base58'2W' == ah))
116120 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
117- else if ((base58'2T' == af))
121+ else if ((base58'2T' == ah))
118122 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
119123 else throw("Unknown chain")
120124 }
121125
122-let ag = {
123- let af = ad
124- if ((base58'2W' == af))
126+let ai = {
127+ let ah = af
128+ if ((base58'2W' == ah))
125129 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
126- else if ((base58'2T' == af))
130+ else if ((base58'2T' == ah))
127131 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
128132 else throw("Unknown chain")
129133 }
130134
131-let ah = "__"
135+let aj = "__"
132136
133-let ai = 100000
137+let ak = 100000
134138
135-let aj = 1000000
139+let al = 1000000
136140
137-let ak = 100000000
141+let am = 100000000
138142
139-let al = 10000000000
143+let an = 10000000000
140144
141-let am = 100000
145+let ao = 100000
142146
143-let an = [0, 1, 2, 3, 4, 5]
147+let ap = [0, 1, 2, 3, 4, 5]
144148
145-func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
149+func aq (ar,as) = valueOrErrorMessage(getString(ar, as), makeString(["mandatory ", toString(ar), ".", as, " is not defined"], ""))
146150
147151
148-let ar = 1
152+let at = 1
149153
150-let as = 6
154+let au = 6
151155
152-let at = 8
156+let av = 8
153157
154-func au () = "%s__restConfig"
158+func aw () = "%s__restConfig"
155159
156160
157-func av () = "%s__restAddr"
161+func ax () = "%s__restAddr"
158162
159163
160-func aw (ax) = split_4C(ao(ax, au()), ah)
164+func ay (az) = split_4C(aq(az, aw()), aj)
161165
162166
163-func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA)))
167+func aA (aB,aC) = valueOrErrorMessage(addressFromString(aB[aC]), ("Rest cfg doesn't contain address at index " + toString(aC)))
164168
165169
166-let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag))
170+let aD = addressFromStringValue(valueOrElse(getString(this, ax()), ai))
167171
168-let az = aw(aB)
172+let aB = ay(aD)
169173
170-let aC = ay(az, ar)
174+let aE = aA(aB, at)
171175
172-let aD = ay(az, as)
176+let aF = aA(aB, au)
173177
174-let aE = ay(az, at)
178+let aG = aA(aB, av)
175179
176-func aF (aG) = {
177- let af = aG
178- if ($isInstanceOf(af, "String"))
180+func aH (aI) = {
181+ let ah = aI
182+ if ($isInstanceOf(ah, "String"))
179183 then {
180- let aH = af
181- aH
184+ let aJ = ah
185+ aJ
182186 }
183187 else throw("fail to cast into String")
184188 }
185189
186190
187-func aI (aG) = {
188- let af = aG
189- if ($isInstanceOf(af, "Int"))
191+func aK (aI) = {
192+ let ah = aI
193+ if ($isInstanceOf(ah, "Int"))
190194 then {
191- let aJ = af
192- aJ
195+ let aL = ah
196+ aL
193197 }
194198 else throw("fail to cast into Int")
195199 }
196200
197201
198-func aK () = "contractsBlocked"
202+func aM () = "contractsBlocked"
199203
200204
201-func aL (aM,aN) = {
202- let aO = pow(10, 0, aN, 0, 0, DOWN)
203- let aP = toString((aM % aO))
204- let aQ = drop(toString(aO), (1 + size(aP)))
205- (((toString((aM / aO)) + ".") + aQ) + aP)
205+func aN (aO,aP) = {
206+ let aQ = pow(10, 0, aP, 0, 0, DOWN)
207+ let aR = toString((aO % aQ))
208+ let aS = drop(toString(aQ), (1 + size(aR)))
209+ (((toString((aO / aQ)) + ".") + aS) + aR)
206210 }
207211
208212
209-let aR = 10000000000
213+let aT = 10000000000
210214
211-let aS = 200
215+let aU = 200
212216
213-let aT = 300
217+let aV = 300
214218
215-let aU = 10000
219+let aW = 10000
216220
217-let aV = 10000
221+let aX = 10000
218222
219-let aW = 15000
223+let aY = 15000
220224
221-func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ))
225+func aZ (ba,bb) = ((("factoryWhByContinentAndRes_" + ba) + "_") + toString(bb))
222226
223227
224-let ba = 0
228+let bc = 0
225229
226-let bb = 1
230+let bd = 1
227231
228-let bc = 2
232+let be = 2
229233
230-func bd (be) = {
231- let bf = split(valueOrElse(getString(be), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
232-[if ((size(split(bf[ba], "_")) == f))
233- then bf[ba]
234- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f))
235- then bf[bb]
236- else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]]
234+func bf (bg) = {
235+ let bh = split(valueOrElse(getString(bg), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
236+[if ((size(split(bh[bc], "_")) == f))
237+ then bh[bc]
238+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bh[bd], "_")) == f))
239+ then bh[bd]
240+ else "0@0_0@0_0@0_0@0_0@0_0@0", bh[be]]
237241 }
238242
239243
240-func bg (bh,bi,bj) = if (bj)
244+func bi (bj,bk,bl) = if (bl)
241245 then {
242- let bk = if ((bh >= 0))
243- then (((bh + bi) - 1) / bi)
244- else -((((-(bh) + bi) - 1) / bi))
245- (bk * ak)
246+ let bm = if ((bj >= 0))
247+ then (((bj + bk) - 1) / bk)
248+ else -((((-(bj) + bk) - 1) / bk))
249+ (bm * am)
246250 }
247- else bh
251+ else bj
248252
249253
250-func bl (bm,aZ,bh,bn) = {
251- let bo = aX(bm, aZ)
252- let bp = valueOrElse(getInteger(bo), 0)
253- let bq = if ((bp > aR))
254+func bn (bo,bb,bj,bp) = {
255+ let bq = aZ(bo, bb)
256+ let br = valueOrElse(getInteger(bq), 0)
257+ let bs = if ((br > aT))
254258 then 0
255- else if (((bp + bh) > aR))
256- then (aR - bp)
257- else bh
258- let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak))
259- let bs = (bn - (bn / 100))
260- if (((bs * bh) > (br * ak)))
261- then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")"))
262- else $Tuple2(IntegerEntry(bo, (bp + bh)), br)
259+ else if (((br + bj) > aT))
260+ then (aT - br)
261+ else bj
262+ let bt = (fraction(bs, ((aU * h) - fraction(((100 * br) + (50 * bs)), h, aT)), an) + fraction((bj - bs), h, am))
263+ let bu = (bp - (bp / 100))
264+ if (((bu * bj) > (bt * am)))
265+ then throw((((((((((("Actual price = " + toString(bt)) + " / ") + toString(bj)) + " < minPrice = ") + toString(bp)) + ", (") + bo) + ", ") + p[bb]) + ")"))
266+ else $Tuple2(IntegerEntry(bq, (br + bj)), bt)
263267 }
264268
265269
266-func bt (bm,bu,bh,bv) = {
267- let bo = aX(bm, bu)
268- let bp = valueOrElse(getInteger(bo), 0)
269- let bw = if ((bp > aR))
270- then min([bh, (bp - aR)])
270+func bv (bo,bw,bj,bx) = {
271+ let bq = aZ(bo, bw)
272+ let br = valueOrElse(getInteger(bq), 0)
273+ let by = if ((br > aT))
274+ then min([bj, (br - aT)])
271275 else 0
272- let bx = min([bp, (bh - bw)])
273- let by = (bx + bw)
274- let bz = min([bp, aR])
275- let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak))
276- let bB = (bv + (bv / 100))
277- if (((bA * ak) > (bB * by)))
278- then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")"))
279- else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by)
276+ let bz = min([br, (bj - by)])
277+ let bA = (bz + by)
278+ let bB = min([br, aT])
279+ let bC = (fraction(bz, ((aV * h) - fraction(((100 * bB) - (50 * bz)), h, aT)), an) + fraction(by, (2 * h), am))
280+ let bD = (bx + (bx / 100))
281+ if (((bC * am) > (bD * bA)))
282+ then throw((((((((((("Actual price = " + toString(bC)) + " / ") + toString(bA)) + " > maxPrice = ") + toString(bx)) + ", (") + bo) + ", ") + q[bw]) + ")"))
283+ else $Tuple3(IntegerEntry(bq, (br - bA)), bC, bA)
280284 }
281285
282286
283-func bC (bD) = {
284- let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
285-[toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f))
286- then bf[F]
287- else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f))
288- then bf[G]
289- else "0_0_0_0_0_0", bf[H]]
287+func bE (bF) = {
288+ let bh = split_4C(valueOrElse(getString(aE, bF), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289+[toString(valueOrElse(parseInt(bh[G]), 0)), if ((size(split(bh[H], "_")) == f))
290+ then bh[H]
291+ else "0_0_0_0_0_0", if ((size(split(bh[I], "_")) == f))
292+ then bh[I]
293+ else "0_0_0_0_0_0", bh[J]]
290294 }
291295
292296
293-func bE () = if (valueOrElse(getBoolean(aC, aK()), false))
297+func bG () = if (valueOrElse(getBoolean(aE, aM()), false))
294298 then throw("Contracts are under maintenance")
295299 else unit
296300
297301
298-func bF () = aI(reentrantInvoke(aC, "saveLastTx", nil, nil))
302+func bH () = aK(reentrantInvoke(aE, "saveLastTx", nil, nil))
299303
300304
301-func bG (bH,bI) = {
302- let bJ = bH._1
303- let bK = if ((size(bH._10) > bJ))
304- then bH._10[bJ]
305+func bI (bJ,bK) = {
306+ let bL = bJ._1
307+ let bM = if ((size(bJ._10) > bL))
308+ then bJ._10[bL]
305309 else "0@0"
306- let bL = bH._8
307- let bM = split(bK, "@")
308- if ((size(bM) != 2))
310+ let bN = bJ._8
311+ let bO = split(bM, "@")
312+ if ((size(bO) != 2))
309313 then throw("Incorrect order format, should be amount@price")
310314 else {
311- let bN = parseIntValue(bM[0])
312- let bO = parseIntValue(bM[1])
313- let bP = if (bL)
314- then (bN * bO)
315- else fraction(bN, bO, ak)
316- let bQ = bg(bN, w, bL)
317- let bR = if ((size(bH._6) > bJ))
318- then parseIntValue(bH._6[bJ])
315+ let bP = parseIntValue(bO[0])
316+ let bQ = parseIntValue(bO[1])
317+ let bR = if (bN)
318+ then (bP * bQ)
319+ else fraction(bP, bQ, am)
320+ let bS = bi(bP, y, bN)
321+ let bT = if ((size(bJ._6) > bL))
322+ then parseIntValue(bJ._6[bL])
319323 else 0
320- let bS = split(if ((size(bH._7) > bJ))
321- then bH._7[bJ]
324+ let bU = split(if ((size(bJ._7) > bL))
325+ then bJ._7[bL]
322326 else "0@0", "@")
323- let bT = parseIntValue(bS[0])
324- let bU = parseIntValue(bS[1])
325- if (if ((0 > bU))
327+ let bV = parseIntValue(bU[0])
328+ let bW = parseIntValue(bU[1])
329+ if (if ((0 > bW))
326330 then true
327- else (0 > bO))
331+ else (0 > bQ))
328332 then throw("Price can't be negative")
329333 else {
330- let bV = if (bL)
331- then (bT * bU)
332- else fraction(bT, bU, ak)
333- if ((bN == 0))
334- then if ((bT > 0))
335- then $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), bH._3, bH._4, (bH._5 - bV), bH._6, bH._7, bL, (bH._9 + bg(bR, w, bL)), bH._10)
336- else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), bH._3, bH._4, bH._5, bH._6, bH._7, bL, (bH._9 + bg((bR - bT), w, bL)), bH._10)
337- else if ((bN > 0))
338- then if ((0 > bT))
339- then $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), (bH._3 + bQ), bH._4, (bH._5 + bP), bH._6, bH._7, bL, bg((bR - bT), w, bL), bH._10)
340- else $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), (bH._3 + bQ), bH._4, ((bH._5 + bP) - bV), bH._6, bH._7, bL, bg(bR, w, bL), bH._10)
341- else if ((0 > bT))
334+ let bX = if (bN)
335+ then (bV * bW)
336+ else fraction(bV, bW, am)
337+ if ((bP == 0))
338+ then if ((bV > 0))
339+ then $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), bJ._3, bJ._4, (bJ._5 - bX), bJ._6, bJ._7, bN, (bJ._9 + bi(bT, y, bN)), bJ._10)
340+ else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), bJ._3, bJ._4, bJ._5, bJ._6, bJ._7, bN, (bJ._9 + bi((bT - bV), y, bN)), bJ._10)
341+ else if ((bP > 0))
342+ then if ((0 > bV))
343+ then $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), (bJ._3 + bS), bJ._4, (bJ._5 + bR), bJ._6, bJ._7, bN, bi((bT - bV), y, bN), bJ._10)
344+ else $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), (bJ._3 + bS), bJ._4, ((bJ._5 + bR) - bX), bJ._6, bJ._7, bN, bi(bT, y, bN), bJ._10)
345+ else if ((0 > bV))
342346 then {
343- let bW = (bT - bN)
344- if ((0 > (bR - bW)))
345- then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available"))
346- else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bW))), bH._3, (bH._4 - bQ), bH._5, bH._6, bH._7, bL, bg((bR - bW), w, bL), bH._10)
347+ let bY = (bV - bP)
348+ if ((0 > (bT - bY)))
349+ then throw((((("Attempt to take " + toString(bY)) + " from warehouse, but only ") + toString(bT)) + " available"))
350+ else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bY))), bJ._3, (bJ._4 - bS), bJ._5, bJ._6, bJ._7, bN, bi((bT - bY), y, bN), bJ._10)
347351 }
348- else if ((0 > (bR + bN)))
349- then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available"))
350- else $Tuple10((bJ + 1), (bH._2 :+ toString((bR + bN))), bH._3, (bH._4 - bQ), (bH._5 - bV), bH._6, bH._7, bL, bg((bR + bN), w, bL), bH._10)
352+ else if ((0 > (bT + bP)))
353+ then throw((((("Attempt to take " + toString(-(bP))) + " from warehouse, but only ") + toString(bT)) + " available"))
354+ else $Tuple10((bL + 1), (bJ._2 :+ toString((bT + bP))), bJ._3, (bJ._4 - bS), (bJ._5 - bX), bJ._6, bJ._7, bN, bi((bT + bP), y, bN), bJ._10)
351355 }
352356 }
353357 }
354358
355359
356-func bX (bY,bZ,ca) = {
357- let cb = split(bY[y], "_")
358- let cc = split(bY[z], "_")
359- let cd = if ((bY[A] == ""))
360+func bZ (ca,cb,cc) = {
361+ let cd = split(ca[A], "_")
362+ let ce = split(ca[B], "_")
363+ let cf = if ((ca[C] == ""))
360364 then nil
361- else split_4C(bY[A], "_")
362- let ce = split(bZ[ba], "_")
363- let cf = split(bZ[bb], "_")
364- let cg = if ((bZ[bc] == ""))
365+ else split_4C(ca[C], "_")
366+ let cg = split(cb[bc], "_")
367+ let ch = split(cb[bd], "_")
368+ let ci = if ((cb[be] == ""))
365369 then nil
366- else split_4C(bZ[bc], "_")
367- if ((size(ca) != 3))
370+ else split_4C(cb[be], "_")
371+ if ((size(cc) != 3))
368372 then throw("newOrderStr should contain exactly 2 ':' separators")
369373 else {
370- let ch = split(ca[0], "_")
371- let ci = split(ca[1], "_")
372- let cj = if ((ca[2] == ""))
374+ let cj = split(cc[0], "_")
375+ let ck = split(cc[1], "_")
376+ let cl = if ((cc[2] == ""))
373377 then nil
374- else split_4C(ca[2], "_")
375- if ((size(ch) != f))
378+ else split_4C(cc[2], "_")
379+ if ((size(cj) != f))
376380 then throw("All 6 resources should be passed")
377- else if ((size(ci) != f))
381+ else if ((size(ck) != f))
378382 then throw("All 6 materials should be passed")
379383 else {
380- let ck = {
381- let cl = n
382- let cm = size(cl)
383- let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch)
384- func co (cp,cq) = if ((cq >= cm))
385- then cp
386- else bG(cp, cl[cq])
384+ let cm = {
385+ let cn = p
386+ let co = size(cn)
387+ let cp = $Tuple10(0, nil, 0, 0, 0, cd, cg, false, 0, cj)
388+ func cq (cr,cs) = if ((cs >= co))
389+ then cr
390+ else bI(cr, cn[cs])
387391
388- func cr (cp,cq) = if ((cq >= cm))
389- then cp
392+ func ct (cr,cs) = if ((cs >= co))
393+ then cr
390394 else throw("List size exceeds 6")
391395
392- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
396+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
393397 }
394- let by = {
395- let cl = o
396- let cm = size(cl)
397- let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci)
398- func cs (cp,cq) = if ((cq >= cm))
399- then cp
400- else bG(cp, cl[cq])
398+ let bA = {
399+ let cn = q
400+ let co = size(cn)
401+ let cp = $Tuple10(0, nil, cm._3, cm._4, cm._5, ce, ch, false, cm._9, ck)
402+ func cu (cr,cs) = if ((cs >= co))
403+ then cr
404+ else bI(cr, cn[cs])
401405
402- func ct (cp,cq) = if ((cq >= cm))
403- then cp
406+ func cv (cr,cs) = if ((cs >= co))
407+ then cr
404408 else throw("List size exceeds 6")
405409
406- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
410+ cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
407411 }
408- let bf = {
409- let cl = p
410- let cm = size(cl)
411- let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj)
412- func cu (cp,cq) = if ((cq >= cm))
413- then cp
414- else bG(cp, cl[cq])
412+ let bh = {
413+ let cn = r
414+ let co = size(cn)
415+ let cp = $Tuple10(0, nil, bA._3, bA._4, bA._5, cf, ci, true, bA._9, cl)
416+ func cw (cr,cs) = if ((cs >= co))
417+ then cr
418+ else bI(cr, cn[cs])
415419
416- func cv (cp,cq) = if ((cq >= cm))
417- then cp
420+ func cx (cr,cs) = if ((cs >= co))
421+ then cr
418422 else throw("List size exceeds 50")
419423
420- cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
424+ cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 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)
421425 }
422- $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9)
426+ $Tuple7(cm._2, bA._2, bh._2, bh._3, bh._4, bh._5, bh._9)
423427 }
424428 }
425429 }
426430
427431
428-func cw (bH,cx) = {
429- let bJ = bH._7
430- let bL = bH._12
431- let cy = split(cx, "@")
432- if ((size(cy) != 2))
432+func cy (bJ,cz) = {
433+ let bL = bJ._7
434+ let bN = bJ._12
435+ let cA = split(cz, "@")
436+ if ((size(cA) != 2))
433437 then throw("Incorrect order format, should be amount@price")
434438 else {
435- let cz = parseIntValue(cy[0])
436- let cA = parseIntValue(cy[1])
437- if ((0 > cA))
439+ let cB = parseIntValue(cA[0])
440+ let cC = parseIntValue(cA[1])
441+ if ((0 > cC))
438442 then throw("Price can't be negative")
439443 else {
440- let cB = if (bL)
441- then (cz * cA)
442- else fraction(cz, cA, ak)
443- let cC = if ((size(bH._8) > bJ))
444- then parseIntValue(bH._8[bJ])
444+ let cD = if (bN)
445+ then (cB * cC)
446+ else fraction(cB, cC, am)
447+ let cE = if ((size(bJ._8) > bL))
448+ then parseIntValue(bJ._8[bL])
445449 else 0
446- let bR = if ((size(bH._9) > bJ))
447- then parseIntValue(bH._9[bJ])
450+ let bT = if ((size(bJ._9) > bL))
451+ then parseIntValue(bJ._9[bL])
448452 else 0
449- let cD = if ((size(bH._10) > bJ))
450- then bH._10[bJ]
453+ let cF = if ((size(bJ._10) > bL))
454+ then bJ._10[bL]
451455 else "0@0"
452- let cE = split(cD, "@")
453- let cF = parseIntValue(cE[0])
454- let cG = parseIntValue(cE[1])
455- if (if ((cz != 0))
456- then (cA != cG)
456+ let cG = split(cF, "@")
457+ let cH = parseIntValue(cG[0])
458+ let cI = parseIntValue(cG[1])
459+ if (if ((cB != 0))
460+ then (cC != cI)
457461 else false)
458- then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA)))
462+ then throw(((((("Prices of " + bJ._11[bL]) + " don't match! WH price=") + toString(cI)) + ", your price=") + toString(cC)))
459463 else {
460- let cH = if (bL)
461- then (cF * cG)
462- else fraction(cF, cG, ak)
463- let cI = bg(cz, w, bL)
464- if ((cz == 0))
465- then $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ cD), (bH._3 :+ toString(cC)), bH._4, bH._5, bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, bH._13)
466- else if ((cz > 0))
467- then if ((0 > cF))
468- then if ((cz > -(cF)))
469- then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF))))
470- else $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 + cI), bH._5, (bH._6 + cB), (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 + (if (bL)
471- then (cz * ak)
472- else cz)))
473- else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it"))
474- else if ((cF > 0))
475- then if ((-(cz) > cF))
476- then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF)))
477- else if ((-(cz) > cC))
478- then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ]))
479- else $Tuple13((bH._1 :+ toString((bR - cz))), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 - cI), (bH._5 - cB), bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 - (if (bL)
480- then (cz * ak)
481- else cz)))
482- else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it"))
464+ let cJ = if (bN)
465+ then (cH * cI)
466+ else fraction(cH, cI, am)
467+ let cK = bi(cB, y, bN)
468+ if ((cB == 0))
469+ then $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ cF), (bJ._3 :+ toString(cE)), bJ._4, bJ._5, bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, bJ._13)
470+ else if ((cB > 0))
471+ then if ((0 > cH))
472+ then if ((cB > -(cH)))
473+ then throw(((((("Attempt to buy " + toString(cB)) + " of ") + bJ._11[bL]) + ", but warehouse only sells ") + toString(-(cH))))
474+ else $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 + cK), bJ._5, (bJ._6 + cD), (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 + (if (bN)
475+ then (cB * am)
476+ else cB)))
477+ else throw((("Attempt to buy " + bJ._11[bL]) + " while warehouse doesn't sell it"))
478+ else if ((cH > 0))
479+ then if ((-(cB) > cH))
480+ then throw(((((("Attempt to sell " + toString(-(cB))) + " of ") + bJ._11[bL]) + ", but warehouse only buys ") + toString(cH)))
481+ else if ((-(cB) > cE))
482+ then throw(((((("Attempt to sell " + toString(-(cB))) + ", but you only have ") + toString(cE)) + " of ") + bJ._11[bL]))
483+ else $Tuple13((bJ._1 :+ toString((bT - cB))), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 - cK), (bJ._5 - cD), bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 - (if (bN)
484+ then (cB * am)
485+ else cB)))
486+ else throw((("Attempt to sell " + bJ._11[bL]) + " while warehouse doesn't buy it"))
483487 }
484488 }
485489 }
486490 }
487491
488492
489-func cJ (cK,cL,cM,cN) = {
490- func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ])))
491- then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ])))
492- else if ((0 > cM[bJ]))
493- then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ])))
494- else if ((cM[bJ] > 0))
493+func cL (cM,cN,cO,cP) = {
494+ func cQ (bJ,bL) = if ((cO[bL] > parseIntValue(cM[bL])))
495+ then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to sell ") + toString(cO[bL])))
496+ else if ((0 > cO[bL]))
497+ then throw(((("You tried to sell negative amount of " + p[bL]) + ": ") + toString(cO[bL])))
498+ else if ((cO[bL] > 0))
495499 then {
496- let cP = bl(cL, bJ, cM[bJ], cN[bJ])
497- $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
500+ let cR = bn(cN, bL, cO[bL], cP[bL])
501+ $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cM[bL]) - cO[bL]))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
498502 }
499- else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4)
503+ else $Tuple4(bJ._1, (bJ._2 :+ cM[bL]), bJ._3, bJ._4)
500504
501- let cl = an
502- let cm = size(cl)
503- let cn = $Tuple4(nil, nil, 0, 0)
504- func co (cp,cq) = if ((cq >= cm))
505- then cp
506- else cO(cp, cl[cq])
505+ let cn = ap
506+ let co = size(cn)
507+ let cp = $Tuple4(nil, nil, 0, 0)
508+ func cq (cr,cs) = if ((cs >= co))
509+ then cr
510+ else cQ(cr, cn[cs])
507511
508- func cr (cp,cq) = if ((cq >= cm))
509- then cp
512+ func ct (cr,cs) = if ((cs >= co))
513+ then cr
510514 else throw("List size exceeds 6")
511515
512- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
516+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
513517 }
514518
515519
516-func cQ (cR,cL,cM,cS) = {
517- func cT (bH,bJ) = if ((0 > cM[bJ]))
518- then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ])))
519- else if ((cM[bJ] > 0))
520+func cS (cT,cN,cO,cU) = {
521+ func cV (bJ,bL) = if ((0 > cO[bL]))
522+ then throw(((("You tried to buy negative amount of " + q[bL]) + ": ") + toString(cO[bL])))
523+ else if ((cO[bL] > 0))
520524 then {
521- let cP = bt(cL, bJ, cM[bJ], cS[bJ])
522- $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
525+ let cR = bv(cN, bL, cO[bL], cU[bL])
526+ $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cR._3))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
523527 }
524- else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4)
528+ else $Tuple4(bJ._1, (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
525529
526- let cl = an
527- let cm = size(cl)
528- let cn = $Tuple4(nil, nil, 0, 0)
529- func co (cp,cq) = if ((cq >= cm))
530- then cp
531- else cT(cp, cl[cq])
530+ let cn = ap
531+ let co = size(cn)
532+ let cp = $Tuple4(nil, nil, 0, 0)
533+ func cq (cr,cs) = if ((cs >= co))
534+ then cr
535+ else cV(cr, cn[cs])
532536
533- func cr (cp,cq) = if ((cq >= cm))
534- then cp
537+ func ct (cr,cs) = if ((cs >= co))
538+ then cr
535539 else throw("List size exceeds 6")
536540
537- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
541+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
538542 }
539543
540544
541-func cU (cK,cR,cM) = {
542- func cV (bH,bJ) = {
543- let cW = cM[bJ]
544- if ((cW > parseIntValue(cK[bJ])))
545- then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW)))
546- else if ((0 > cW))
547- then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW)))
548- else if ((cW > 0))
549- then $Tuple4((bH._1 :+ toString((parseIntValue(cK[bJ]) - cW))), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cW))), (bH._3 + fraction(cW, h, ak)), (bH._4 + cW))
550- else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4)
545+func cW (cM,cT,cO) = {
546+ func cX (bJ,bL) = {
547+ let cY = cO[bL]
548+ if ((cY > parseIntValue(cM[bL])))
549+ then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to exchange ") + toString(cY)))
550+ else if ((0 > cY))
551+ then throw(((("You tried to exchange negative amount of " + p[bL]) + ": ") + toString(cY)))
552+ else if ((cY > 0))
553+ then $Tuple4((bJ._1 :+ toString((parseIntValue(cM[bL]) - cY))), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cY))), (bJ._3 + fraction(cY, h, am)), (bJ._4 + cY))
554+ else $Tuple4((bJ._1 :+ cM[bL]), (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
551555 }
552556
553- let cl = an
554- let cm = size(cl)
555- let cn = $Tuple4(nil, nil, 0, 0)
556- func co (cp,cq) = if ((cq >= cm))
557- then cp
558- else cV(cp, cl[cq])
557+ let cn = ap
558+ let co = size(cn)
559+ let cp = $Tuple4(nil, nil, 0, 0)
560+ func cq (cr,cs) = if ((cs >= co))
561+ then cr
562+ else cX(cr, cn[cs])
559563
560- func cr (cp,cq) = if ((cq >= cm))
561- then cp
564+ func ct (cr,cs) = if ((cs >= co))
565+ then cr
562566 else throw("List size exceeds 6")
563567
564- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
568+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
565569 }
566570
567571
568-func cX (cY,cZ,da) = if ((cY > 0))
572+func cZ (da,db,dc) = if ((da > 0))
569573 then {
570- let db = fraction(cY, aU, aj)
571- if ((da >= (cY - (3 * db))))
572- then throw(("This trade does not cover delivery cost of " + aL(da, 6)))
574+ let dd = fraction(da, aW, al)
575+ if ((dc >= (da - (3 * dd))))
576+ then throw(("This trade does not cover delivery cost of " + aN(dc, 6)))
573577 else {
574- let dc = O(cZ)
575- let dd = getString(aC, dc)
576- let de = addressFromStringValue(cZ)
577- (((if (isDefined(dd))
578- then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)]
579- else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae))
578+ let de = Q(db)
579+ let df = getString(aE, de)
580+ let dg = addressFromStringValue(db)
581+ (((if (isDefined(df))
582+ then [ScriptTransfer(addressFromStringValue(value(df)), dd, ag)]
583+ else nil) :+ ScriptTransfer(dg, ((da - (3 * dd)) - dc), ag)) :+ ScriptTransfer(aD, dd, ag))
580584 }
581585 }
582586 else nil
583587
584588
585-func df (dg,dh,di,dj) = if ((dg > 0))
586- then if ((size(dh) != 1))
589+func dh (di,dj,dk,dl) = if ((di > 0))
590+ then if ((size(dj) != 1))
587591 then throw("exactly 1 payment must be attached")
588592 else {
589- let dk = dh[0]
590- let dl = dk.amount
591- if (if (!(isDefined(dk.assetId)))
593+ let dm = dj[0]
594+ let dn = dm.amount
595+ if (if (!(isDefined(dm.assetId)))
592596 then true
593- else (value(dk.assetId) != ae))
597+ else (value(dm.assetId) != ag))
594598 then throw("USDT payments only!")
595599 else {
596- let dm = (dg + dj)
597- if ((dl != dm))
598- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)"))
599- else if ((am > dg))
600- then throw(("Min shop trade is " + aL(am, 6)))
600+ let do = (di + dl)
601+ if ((dn != do))
602+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(di, 6)) + "+") + aN(dl, 6)) + "(delivery fee)"))
603+ else if ((ao > di))
604+ then throw(("Min shop trade is " + aN(ao, 6)))
601605 else {
602- let dn = fraction(dg, aU, aj)
603- let dc = O(di)
604- let dd = getString(aC, dc)
605- (((if (isDefined(dd))
606- then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)]
607- else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae))
606+ let dp = fraction(di, aW, al)
607+ let de = Q(dk)
608+ let df = getString(aE, de)
609+ (((if (isDefined(df))
610+ then [ScriptTransfer(addressFromStringValue(value(df)), dp, ag)]
611+ else nil) :+ ScriptTransfer(addressFromStringValue(dk), (di - (3 * dp)), ag)) :+ ScriptTransfer(aD, dp, ag))
608612 }
609613 }
610614 }
611- else if ((size(dh) != 0))
615+ else if ((size(dj) != 0))
612616 then throw("No payments needed")
613617 else nil
614618
615619
616-func do (dp,cZ,dq,dr,ds,dt) = {
617- let du = value(assetInfo(fromBase58String(dp)))
618- if (!(isDefined(getInteger(aC, N(dp)))))
619- then throw((("NFT " + du.name) + " is not staked"))
620+func dq (dr,db,ds,dt,du,dv) = {
621+ let dw = value(assetInfo(fromBase58String(dr)))
622+ if (!(isDefined(getInteger(aE, P(dr)))))
623+ then throw((("NFT " + dw.name) + " is not staked"))
620624 else {
621- let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned"))
622- if ((di == cZ))
625+ let dk = valueOrErrorMessage(getString(aE, N(dr)), (("NFT " + dw.name) + " is orphaned"))
626+ if ((dk == db))
623627 then throw("You cannot trade with yourself")
624628 else {
625- let dv = split_4C(dq, ":")
626- if ((size(dv) != 3))
629+ let dx = split_4C(ds, ":")
630+ if ((size(dx) != 3))
627631 then throw("bpOrderStr should contain exactly 2 ':' separators")
628632 else {
629- let dw = split(dv[0], "_")
630- let dx = split(dv[1], "_")
631- let dy = if ((dv[2] == ""))
633+ let dy = split(dx[0], "_")
634+ let dz = split(dx[1], "_")
635+ let dA = if ((dx[2] == ""))
632636 then nil
633- else split_4C(dv[2], "_")
634- if ((size(dw) != f))
637+ else split_4C(dx[2], "_")
638+ if ((size(dy) != f))
635639 then throw("All 6 resources should be passed")
636- else if ((size(dx) != f))
640+ else if ((size(dz) != f))
637641 then throw("All 6 materials should be passed")
638642 else {
639- let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil))
640- let bY = split_4C(dz, ":")
641- let cb = split(bY[y], "_")
642- let cc = split(bY[z], "_")
643- let cd = if ((bY[A] == ""))
643+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [dr], nil))
644+ let ca = split_4C(dB, ":")
645+ let cd = split(ca[A], "_")
646+ let ce = split(ca[B], "_")
647+ let cf = if ((ca[C] == ""))
644648 then nil
645- else split_4C(bY[A], "_")
646- let dA = parseIntValue(split(bY[B], "_")[C])
647- let be = V(dp)
648- let dB = bd(be)
649- let dC = split(dB[ba], "_")
650- let dD = split(dB[bb], "_")
651- let dE = if ((dB[bc] == ""))
649+ else split_4C(ca[C], "_")
650+ let dC = parseIntValue(split(ca[D], "_")[E])
651+ let bg = X(dr)
652+ let dD = bf(bg)
653+ let dE = split(dD[bc], "_")
654+ let dF = split(dD[bd], "_")
655+ let dG = if ((dD[be] == ""))
652656 then nil
653- else split_4C(dB[bc], "_")
654- let ck = {
655- let cl = dw
656- let cm = size(cl)
657- let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0)
658- func co (cp,cq) = if ((cq >= cm))
659- then cp
660- else cw(cp, cl[cq])
657+ else split_4C(dD[be], "_")
658+ let cm = {
659+ let cn = dy
660+ let co = size(cn)
661+ let cp = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dt, cd, dE, p, false, 0)
662+ func cq (cr,cs) = if ((cs >= co))
663+ then cr
664+ else cy(cr, cn[cs])
661665
662- func cr (cp,cq) = if ((cq >= cm))
663- then cp
666+ func ct (cr,cs) = if ((cs >= co))
667+ then cr
664668 else throw("List size exceeds 6")
665669
666- cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
670+ ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
667671 }
668- let by = {
669- let cl = dx
670- let cm = size(cl)
671- let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13)
672- func cs (cp,cq) = if ((cq >= cm))
673- then cp
674- else cw(cp, cl[cq])
672+ let bA = {
673+ let cn = dz
674+ let co = size(cn)
675+ let cp = $Tuple13(nil, nil, nil, cm._4, cm._5, cm._6, 0, du, ce, dF, q, false, cm._13)
676+ func cu (cr,cs) = if ((cs >= co))
677+ then cr
678+ else cy(cr, cn[cs])
675679
676- func ct (cp,cq) = if ((cq >= cm))
677- then cp
680+ func cv (cr,cs) = if ((cs >= co))
681+ then cr
678682 else throw("List size exceeds 6")
679683
680- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
684+ cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
681685 }
682- let bf = if ((size(dy) != 0))
686+ let bh = if ((size(dA) != 0))
683687 then {
684- let cl = dy
685- let cm = size(cl)
686- let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
687- func cu (cp,cq) = if ((cq >= cm))
688- then cp
689- else cw(cp, cl[cq])
688+ let cn = dA
689+ let co = size(cn)
690+ let cp = $Tuple13(nil, nil, nil, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
691+ func cw (cr,cs) = if ((cs >= co))
692+ then cr
693+ else cy(cr, cn[cs])
690694
691- func cv (cp,cq) = if ((cq >= cm))
692- then cp
695+ func cx (cr,cs) = if ((cs >= co))
696+ then cr
693697 else throw("List size exceeds 50")
694698
695- cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
699+ cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 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)
696700 }
697- else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
698- let dF = bf._4
699- let dG = if ((0 > (dA - dF)))
701+ else $Tuple13(cf, dG, dv, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
702+ let dH = bh._4
703+ let dI = if ((0 > (dC - dH)))
700704 then 0
701- else (dA - dF)
702- let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":")
703- let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":")
704- let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil))
705- let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil))
706- $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK)
705+ else (dC - dH)
706+ let dJ = makeString_2C([ca[z], makeString(cm._1, "_"), makeString(bA._1, "_"), makeString_2C(bh._1, "_"), toString(dI)], ":")
707+ let dK = makeString_2C([makeString(cm._2, "_"), makeString(bA._2, "_"), makeString_2C(bh._2, "_")], ":")
708+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, dr], nil))
709+ let dM = aK(invoke(aE, "updateAccStats", [dk, fraction(d, bh._13, am)], nil))
710+ $Tuple10(StringEntry(bg, dK), cm._3, bA._3, bh._3, bh._5, bh._6, bh._13, dk, dL, dM)
707711 }
708712 }
709713 }
710714 }
711715 }
712716
713717
714-func dL (bh) = {
715- let dM = (bh / 30)
716- let dN = [dM, dM, dM, dM, dM, dM]
717- let aH = toString(dM)
718- let cK = [aH, aH, aH, aH, aH, aH]
719- let cN = [0, 0, 0, 0, 0, 0]
720- func dO (bH,dP) = {
721- let dQ = cJ(cK, dP, dN, cN)
722- $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4))
718+func dN (bj) = {
719+ let dO = (bj / 30)
720+ let dP = [dO, dO, dO, dO, dO, dO]
721+ let aJ = toString(dO)
722+ let cM = [aJ, aJ, aJ, aJ, aJ, aJ]
723+ let cP = [0, 0, 0, 0, 0, 0]
724+ func dQ (bJ,dR) = {
725+ let dS = cL(cM, dR, dP, cP)
726+ $Tuple3((bJ._1 ++ dS._1), (bJ._2 + dS._3), (bJ._3 + dS._4))
723727 }
724728
725- let dR = {
726- let cl = q
727- let cm = size(cl)
728- let cn = $Tuple3(nil, 0, 0)
729- func co (cp,cq) = if ((cq >= cm))
730- then cp
731- else dO(cp, cl[cq])
729+ let dT = {
730+ let cn = s
731+ let co = size(cn)
732+ let cp = $Tuple3(nil, 0, 0)
733+ func cq (cr,cs) = if ((cs >= co))
734+ then cr
735+ else dQ(cr, cn[cs])
732736
733- func cr (cp,cq) = if ((cq >= cm))
734- then cp
737+ func ct (cr,cs) = if ((cs >= co))
738+ then cr
735739 else throw("List size exceeds 5")
736740
737- cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5)
741+ ct(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5)
738742 }
739- let dS = dR._1
740- let br = dR._2
741- let dT = dR._3
742- let dU = fraction(br, aV, aj)
743- let dV = (br / 100)
744- let dW = ((br - dV) - dU)
745- $Tuple5(dS, dW, dU, dV, dT)
743+ let dU = dT._1
744+ let bt = dT._2
745+ let dV = dT._3
746+ let dW = fraction(bt, aX, al)
747+ let dX = (bt / 100)
748+ let dY = ((bt - dX) - dW)
749+ $Tuple5(dU, dY, dW, dX, dV)
746750 }
747751
748752
749-@Callable(dX)
750-func recalcLockedVolumeREADONLY (W,dz) = {
751- let bZ = bd(V(W))
752- let dY = bX(dz, bZ, bZ)
753- $Tuple2(nil, (dY._4 + dY._5))
753+func dZ (cT,ea,eb,ec,ed) = if ((0 >= ed))
754+ then throw("Quantity should be positive")
755+ else if (if ((0 > ec))
756+ then true
757+ else (ec >= size(u)))
758+ then throw(("Unknown product idx=" + toString(ec)))
759+ else {
760+ let ad = split(u[ec], "_")
761+ if ((size(ad) != x))
762+ then throw(("Fatal: unknown recipe: " + u[ec]))
763+ else {
764+ let ee = parseIntValue(ad[w])
765+ if ((s[ee] != eb))
766+ then throw(((("This product is available in " + s[ee]) + ", not in ") + eb))
767+ else {
768+ func ef (bJ,eg) = {
769+ let aL = bJ._2
770+ let eh = if ((size(ea) > aL))
771+ then ea[aL]
772+ else "0"
773+ let dS = parseIntValue(eh)
774+ let bj = (ed * y)
775+ let ei = if ((aL == ec))
776+ then toString((dS + bj))
777+ else eh
778+ $Tuple2((bJ._1 :+ ei), (aL + 1))
779+ }
780+
781+ let ej = ( let cn = u
782+ let co = size(cn)
783+ let cp = $Tuple2(nil, 0)
784+ func cq (cr,cs) = if ((cs >= co))
785+ then cr
786+ else ef(cr, cn[cs])
787+
788+ func ct (cr,cs) = if ((cs >= co))
789+ then cr
790+ else throw("List size exceeds 50")
791+
792+ ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 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
793+ func ek (bJ,bL) = {
794+ let el = (((parseIntValue(ad[bL]) * ak) * ed) * parseIntValue(ad[v]))
795+ let em = parseIntValue(cT[bL])
796+ if ((el > em))
797+ then throw(((((((("You have " + aN(em, 8)) + " of ") + q[bL]) + ", but recipe requires ") + aN(el, 8)) + " for quantity ") + toString(ed)))
798+ else if ((el > 0))
799+ then $Tuple2((bJ._1 :+ toString((em - el))), (bJ._2 + el))
800+ else $Tuple2((bJ._1 :+ cT[bL]), bJ._2)
801+ }
802+
803+ let en = {
804+ let cn = ap
805+ let co = size(cn)
806+ let cp = $Tuple2(nil, 0)
807+ func cu (cr,cs) = if ((cs >= co))
808+ then cr
809+ else ek(cr, cn[cs])
810+
811+ func cv (cr,cs) = if ((cs >= co))
812+ then cr
813+ else throw("List size exceeds 6")
814+
815+ cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
816+ }
817+ $Tuple3(en._1, ej, en._2)
818+ }
819+ }
820+ }
821+
822+
823+@Callable(eo)
824+func recalcLockedVolumeREADONLY (Y,dB) = {
825+ let cb = bf(X(Y))
826+ let ep = bZ(dB, cb, cb)
827+ $Tuple2(nil, (ep._4 + ep._5))
754828 }
755829
756830
757831
758-@Callable(dX)
759-func constructorV1 (dZ) = if ((dX.caller != this))
832+@Callable(eo)
833+func constructorV1 (eq) = if ((eo.caller != this))
760834 then throw("Permission denied")
761- else [StringEntry(av(), dZ)]
835+ else [StringEntry(ax(), eq)]
762836
763837
764838
765-@Callable(dX)
766-func sellResources (cM,cN) = {
767- let ea = bF()
768- if ((ea == ea))
839+@Callable(eo)
840+func sellResources (cO,cP) = {
841+ let er = bH()
842+ if ((er == er))
769843 then {
770- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
771- if ((size(dX.payments) != 0))
844+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
845+ if ((size(eo.payments) != 0))
772846 then throw("sellResources doesn't require any payments")
773847 else {
774- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
775- if ((eb[J] != "F"))
776- then throw(("Duck location type should be Factory, but is " + eb[J]))
848+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
849+ if ((es[L] != "F"))
850+ then throw(("Duck location type should be Factory, but is " + es[L]))
777851 else {
778- let ec = bC(S(T))
779- let cK = split(ec[F], "_")
780- let ed = cJ(cK, eb[K], cM, cN)
781- let dS = ed._1
782- let ee = ed._2
783- let br = ed._3
784- let dT = ed._4
785- let dV = (br / 100)
786- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
787- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
788- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
789- $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
852+ let et = bE(U(V))
853+ let cM = split(et[H], "_")
854+ let eu = cL(cM, es[M], cO, cP)
855+ let dU = eu._1
856+ let ev = eu._2
857+ let bt = eu._3
858+ let dV = eu._4
859+ let dX = (bt / 100)
860+ let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
861+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
862+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
863+ $Tuple2(((dU :+ ScriptTransfer(eo.caller, (bt - dX), ag)) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
790864 }
791865 }
792866 }
793867 else throw("Strict value is not equal to itself.")
794868 }
795869
796870
797871
798-@Callable(dX)
799-func sellResourcesWorld (P,bh) = if ((dX.caller != aE))
872+@Callable(eo)
873+func sellResourcesWorld (R,bj) = if ((eo.caller != aG))
800874 then throw("Permission denied")
801875 else {
802- let ei = dL(bh)
803- let dS = ei._1
804- let dW = ei._2
805- let dU = ei._3
806- let dV = ei._4
807- let dT = ei._5
808- if ((0 >= dW))
809- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
876+ let ez = dN(bj)
877+ let dU = ez._1
878+ let dY = ez._2
879+ let dW = ez._3
880+ let dX = ez._4
881+ let dV = ez._5
882+ if ((0 >= dY))
883+ then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
810884 else {
811- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
812- $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh))
885+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
886+ $Tuple2((((dU :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dW))) :+ ScriptTransfer(aD, dX, ag)) :+ ScriptTransfer(aF, dY, ag)), $Tuple2(dY, ey))
813887 }
814888 }
815889
816890
817891
818-@Callable(dX)
819-func sellResourcesWorldREADONLY (bh) = {
820- let dW = dL(bh)._2
821- $Tuple2(nil, dW)
892+@Callable(eo)
893+func sellResourcesWorldREADONLY (bj) = {
894+ let dY = dN(bj)._2
895+ $Tuple2(nil, dY)
822896 }
823897
824898
825899
826-@Callable(dX)
827-func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac))
900+@Callable(eo)
901+func sellResourcesDuckDelivery (cO,cP,eA) = if (!(ae))
828902 then throw("Delivery feature is turned off!")
829903 else {
830- let ea = bF()
831- if ((ea == ea))
904+ let er = bH()
905+ if ((er == er))
832906 then {
833- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
834- if ((size(dX.payments) != 0))
907+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
908+ if ((size(eo.payments) != 0))
835909 then throw("sellResources doesn't require any payments")
836910 else {
837- let ec = bC(S(T))
838- let cK = split(ec[F], "_")
839- let ek = cJ(cK, ej, cM, cN)
840- let dS = ek._1
841- let ee = ek._2
842- let br = ek._3
843- let dT = ek._4
844- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
845- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
846- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
847- let el = fraction(br, aV, aj)
848- let dU = if ((k > el))
849- then k
850- else el
851- let dV = (br / 100)
852- if ((dU >= (br - dV)))
853- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
911+ let et = bE(U(V))
912+ let cM = split(et[H], "_")
913+ let eB = cL(cM, eA, cO, cP)
914+ let dU = eB._1
915+ let ev = eB._2
916+ let bt = eB._3
917+ let dV = eB._4
918+ let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
919+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
920+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
921+ let eC = fraction(bt, aX, al)
922+ let dW = max([eC, k])
923+ let dX = (bt / 100)
924+ if ((dW >= (bt - dX)))
925+ then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
854926 else {
855- let em = valueOrElse(getInteger(Y), 0)
856- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
927+ let eD = valueOrElse(getInteger(aa), 0)
928+ $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
857929 }
858930 }
859931 }
860932 else throw("Strict value is not equal to itself.")
861933 }
862934
863935
864936
865-@Callable(dX)
866-func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac))
937+@Callable(eo)
938+func sellResourcesLandDelivery (cO,cP,Y,eA) = if (!(ae))
867939 then throw("Delivery feature is turned off!")
868940 else {
869- let ea = bF()
870- if ((ea == ea))
871- then if ((size(dX.payments) != 0))
941+ let er = bH()
942+ if ((er == er))
943+ then if ((size(eo.payments) != 0))
872944 then throw("sellResources doesn't require any payments")
873945 else {
874- let en = dX.caller
875- let P = toString(en)
876- let eo = value(assetInfo(fromBase58String(W)))
877- if (!(isDefined(getInteger(aC, N(W)))))
878- then throw((("NFT " + eo.name) + " is not staked"))
946+ let eE = eo.caller
947+ let R = toString(eE)
948+ let eF = value(assetInfo(fromBase58String(Y)))
949+ if (!(isDefined(getInteger(aE, P(Y)))))
950+ then throw((("NFT " + eF.name) + " is not staked"))
879951 else {
880- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
881- if ((ep != P))
952+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
953+ if ((eG != R))
882954 then throw((e + " is not yours"))
883955 else {
884- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
885- let bY = split_4C(dz, ":")
886- let cK = split(bY[y], "_")
887- let eq = cJ(cK, ej, cM, cN)
888- let dS = eq._1
889- let ee = eq._2
890- let br = eq._3
891- let dT = eq._4
892- let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
893- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
894- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
895- let el = fraction(br, aV, aj)
896- let dU = if ((k > el))
897- then k
898- else el
899- let dV = (br / 100)
900- if ((dU >= (br - dV)))
901- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
956+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
957+ let ca = split_4C(dB, ":")
958+ let cM = split(ca[A], "_")
959+ let eH = cL(cM, eA, cO, cP)
960+ let dU = eH._1
961+ let ev = eH._2
962+ let bt = eH._3
963+ let dV = eH._4
964+ let dJ = makeString_2C([ca[z], makeString(ev, "_"), ca[B], ca[C], ca[D]], ":")
965+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
966+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
967+ let eC = fraction(bt, aX, al)
968+ let dW = max([eC, k])
969+ let dX = (bt / 100)
970+ if ((dW >= (bt - dX)))
971+ then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
902972 else {
903- let em = valueOrElse(getInteger(Y), 0)
904- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
973+ let eD = valueOrElse(getInteger(aa), 0)
974+ $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(dL, er, ey))
905975 }
906976 }
907977 }
908978 }
909979 else throw("Strict value is not equal to itself.")
910980 }
911981
912982
913983
914-@Callable(dX)
915-func buyMaterials (cM,cS) = {
916- let ea = bF()
917- if ((ea == ea))
984+@Callable(eo)
985+func buyMaterials (cO,cU) = {
986+ let er = bH()
987+ if ((er == er))
918988 then {
919- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
920- if ((size(dX.payments) != 1))
989+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
990+ if ((size(eo.payments) != 1))
921991 then throw("exactly 1 payment must be attached")
922992 else {
923- let dk = dX.payments[0]
924- let dl = dk.amount
925- if (if (!(isDefined(dk.assetId)))
993+ let dm = eo.payments[0]
994+ let dn = dm.amount
995+ if (if (!(isDefined(dm.assetId)))
926996 then true
927- else (value(dk.assetId) != ae))
997+ else (value(dm.assetId) != ag))
928998 then throw("USDT payments only!")
929999 else {
930- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
931- if ((eb[J] != "F"))
932- then throw(("Duck location type should be Factory, but is " + eb[J]))
1000+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1001+ if ((es[L] != "F"))
1002+ then throw(("Duck location type should be Factory, but is " + es[L]))
9331003 else {
934- let ec = bC(S(T))
935- let cR = split(ec[G], "_")
936- let er = cQ(cR, eb[K], cM, cS)
937- let dS = er._1
938- let es = er._2
939- let bA = er._3
940- let et = er._4
941- if ((bA > dl))
942- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1004+ let et = bE(U(V))
1005+ let cT = split(et[I], "_")
1006+ let eI = cS(cT, es[M], cO, cU)
1007+ let dU = eI._1
1008+ let eJ = eI._2
1009+ let bC = eI._3
1010+ let eK = eI._4
1011+ if ((bC > dn))
1012+ then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
9431013 else {
944- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
945- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
946- let ax = if (((dl - bA) > 0))
947- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1014+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1015+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1016+ let az = if (((dn - bC) > 0))
1017+ then [ScriptTransfer(eo.caller, (dn - bC), ag)]
9481018 else nil
949- let dV = (bA / 100)
950- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
951- $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1019+ let dX = (bC / 100)
1020+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1021+ $Tuple2(((dU ++ az) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
9521022 }
9531023 }
9541024 }
9551025 }
9561026 }
9571027 else throw("Strict value is not equal to itself.")
9581028 }
9591029
9601030
9611031
962-@Callable(dX)
963-func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac))
1032+@Callable(eo)
1033+func buyMaterialsDuckDelivery (cO,cU,eA) = if (!(ae))
9641034 then throw("Delivery feature is turned off!")
9651035 else {
966- let ea = bF()
967- if ((ea == ea))
1036+ let er = bH()
1037+ if ((er == er))
9681038 then {
969- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
970- if ((size(dX.payments) != 1))
1039+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1040+ if ((size(eo.payments) != 1))
9711041 then throw("exactly 1 payment must be attached")
9721042 else {
973- let dk = dX.payments[0]
974- let dl = dk.amount
975- if (if (!(isDefined(dk.assetId)))
1043+ let dm = eo.payments[0]
1044+ let dn = dm.amount
1045+ if (if (!(isDefined(dm.assetId)))
9761046 then true
977- else (value(dk.assetId) != ae))
1047+ else (value(dm.assetId) != ag))
9781048 then throw("USDT payments only!")
9791049 else {
980- let ec = bC(S(T))
981- let cR = split(ec[G], "_")
982- let eu = cQ(cR, ej, cM, cS)
983- let dS = eu._1
984- let es = eu._2
985- let bA = eu._3
986- let et = eu._4
987- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
988- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
989- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
990- let el = fraction(bA, aV, aj)
991- let dU = if ((k > el))
992- then k
993- else el
994- let dm = (bA + dU)
995- if ((dm > dl))
996- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1050+ let et = bE(U(V))
1051+ let cT = split(et[I], "_")
1052+ let eL = cS(cT, eA, cO, cU)
1053+ let dU = eL._1
1054+ let eJ = eL._2
1055+ let bC = eL._3
1056+ let eK = eL._4
1057+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1058+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1059+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1060+ let eC = fraction(bC, aX, al)
1061+ let dW = max([eC, k])
1062+ let do = (bC + dW)
1063+ if ((do > dn))
1064+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
9971065 else {
998- let ax = if (((dl - dm) > 0))
999- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1066+ let az = if (((dn - do) > 0))
1067+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
10001068 else nil
1001- let dV = (bA / 100)
1002- let em = valueOrElse(getInteger(Y), 0)
1003- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1069+ let dX = (bC / 100)
1070+ let eD = valueOrElse(getInteger(aa), 0)
1071+ $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
10041072 }
10051073 }
10061074 }
10071075 }
10081076 else throw("Strict value is not equal to itself.")
10091077 }
10101078
10111079
10121080
1013-@Callable(dX)
1014-func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac))
1081+@Callable(eo)
1082+func buyMaterialsLandDelivery (cO,cU,Y,eA) = if (!(ae))
10151083 then throw("Delivery feature is turned off!")
10161084 else {
1017- let ea = bF()
1018- if ((ea == ea))
1019- then if ((size(dX.payments) != 1))
1085+ let er = bH()
1086+ if ((er == er))
1087+ then if ((size(eo.payments) != 1))
10201088 then throw("exactly 1 payment must be attached")
10211089 else {
1022- let dk = dX.payments[0]
1023- let dl = dk.amount
1024- if (if (!(isDefined(dk.assetId)))
1090+ let dm = eo.payments[0]
1091+ let dn = dm.amount
1092+ if (if (!(isDefined(dm.assetId)))
10251093 then true
1026- else (value(dk.assetId) != ae))
1094+ else (value(dm.assetId) != ag))
10271095 then throw("USDT payments only!")
10281096 else {
1029- let en = dX.caller
1030- let P = toString(en)
1031- let eo = value(assetInfo(fromBase58String(W)))
1032- if (!(isDefined(getInteger(aC, N(W)))))
1033- then throw((("NFT " + eo.name) + " is not staked"))
1097+ let eE = eo.caller
1098+ let R = toString(eE)
1099+ let eF = value(assetInfo(fromBase58String(Y)))
1100+ if (!(isDefined(getInteger(aE, P(Y)))))
1101+ then throw((("NFT " + eF.name) + " is not staked"))
10341102 else {
1035- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1036- if ((ep != P))
1103+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1104+ if ((eG != R))
10371105 then throw((e + " is not yours"))
10381106 else {
1039- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1040- let bY = split_4C(dz, ":")
1041- let cR = split(bY[z], "_")
1042- let ev = cQ(cR, ej, cM, cS)
1043- let dS = ev._1
1044- let es = ev._2
1045- let bA = ev._3
1046- let et = ev._4
1047- let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1048- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1049- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1050- let el = fraction(bA, aV, aj)
1051- let dU = if ((k > el))
1052- then k
1053- else el
1054- let dm = (bA + dU)
1055- if ((dm > dl))
1056- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1107+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1108+ let ca = split_4C(dB, ":")
1109+ let cT = split(ca[B], "_")
1110+ let eM = cS(cT, eA, cO, cU)
1111+ let dU = eM._1
1112+ let eJ = eM._2
1113+ let bC = eM._3
1114+ let eK = eM._4
1115+ let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), ca[C], ca[D]], ":")
1116+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1117+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eK, am)], nil))
1118+ let eC = fraction(bC, aX, al)
1119+ let dW = max([eC, k])
1120+ let do = (bC + dW)
1121+ if ((do > dn))
1122+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
10571123 else {
1058- let ax = if (((dl - dm) > 0))
1059- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1124+ let az = if (((dn - do) > 0))
1125+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
10601126 else nil
1061- let dV = (bA / 100)
1062- let em = valueOrElse(getInteger(Y), 0)
1063- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1127+ let dX = (bC / 100)
1128+ let eD = valueOrElse(getInteger(aa), 0)
1129+ $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
10641130 }
10651131 }
10661132 }
10671133 }
10681134 }
10691135 else throw("Strict value is not equal to itself.")
10701136 }
10711137
10721138
10731139
1074-@Callable(dX)
1075-func exchangeResources (cM) = {
1076- let ea = bF()
1077- if ((ea == ea))
1140+@Callable(eo)
1141+func exchangeResources (cO) = {
1142+ let er = bH()
1143+ if ((er == er))
10781144 then {
1079- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1080- if ((size(dX.payments) != 1))
1145+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1146+ if ((size(eo.payments) != 1))
10811147 then throw("exactly 1 payment must be attached")
10821148 else {
1083- let dk = dX.payments[0]
1084- let dl = dk.amount
1085- if (if (!(isDefined(dk.assetId)))
1149+ let dm = eo.payments[0]
1150+ let dn = dm.amount
1151+ if (if (!(isDefined(dm.assetId)))
10861152 then true
1087- else (value(dk.assetId) != ae))
1153+ else (value(dm.assetId) != ag))
10881154 then throw("USDT payments only!")
10891155 else {
1090- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1091- if ((eb[J] != "F"))
1092- then throw(("Duck location type should be Factory, but is " + eb[J]))
1156+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1157+ if ((es[L] != "F"))
1158+ then throw(("Duck location type should be Factory, but is " + es[L]))
10931159 else {
1094- let ec = bC(S(T))
1095- let cK = split(ec[F], "_")
1096- let cR = split(ec[G], "_")
1097- let ew = cU(cK, cR, cM)
1098- let ee = ew._1
1099- let es = ew._2
1100- let bA = ew._3
1101- let ex = ew._4
1102- if ((bA > dl))
1103- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1160+ let et = bE(U(V))
1161+ let cM = split(et[H], "_")
1162+ let cT = split(et[I], "_")
1163+ let eN = cW(cM, cT, cO)
1164+ let ev = eN._1
1165+ let eJ = eN._2
1166+ let bC = eN._3
1167+ let eO = eN._4
1168+ if ((bC > dn))
1169+ then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
11041170 else {
1105- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1106- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1107- let ax = if (((dl - bA) > 0))
1108- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1171+ let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1172+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1173+ let az = if (((dn - bC) > 0))
1174+ then [ScriptTransfer(eo.caller, (dn - bC), ag)]
11091175 else nil
1110- let dV = (bA / 100)
1111- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1112- $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1176+ let dX = (bC / 100)
1177+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1178+ $Tuple2((az :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
11131179 }
11141180 }
11151181 }
11161182 }
11171183 }
11181184 else throw("Strict value is not equal to itself.")
11191185 }
11201186
11211187
11221188
1123-@Callable(dX)
1124-func exchangeResourcesDuckDelivery (cM) = if (!(ac))
1189+@Callable(eo)
1190+func exchangeResourcesDuckDelivery (cO) = if (!(ae))
11251191 then throw("Delivery feature is turned off!")
11261192 else {
1127- let ea = bF()
1128- if ((ea == ea))
1193+ let er = bH()
1194+ if ((er == er))
11291195 then {
1130- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1131- if ((size(dX.payments) != 1))
1196+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1197+ if ((size(eo.payments) != 1))
11321198 then throw("exactly 1 payment must be attached")
11331199 else {
1134- let dk = dX.payments[0]
1135- let dl = dk.amount
1136- if (if (!(isDefined(dk.assetId)))
1200+ let dm = eo.payments[0]
1201+ let dn = dm.amount
1202+ if (if (!(isDefined(dm.assetId)))
11371203 then true
1138- else (value(dk.assetId) != ae))
1204+ else (value(dm.assetId) != ag))
11391205 then throw("USDT payments only!")
11401206 else {
1141- let ec = bC(S(T))
1142- let cK = split(ec[F], "_")
1143- let cR = split(ec[G], "_")
1144- let ey = cU(cK, cR, cM)
1145- let ee = ey._1
1146- let es = ey._2
1147- let bA = ey._3
1148- let ex = ey._4
1149- let el = fraction(bA, aW, aj)
1150- let dU = if ((l > el))
1151- then l
1152- else el
1153- let dm = (bA + dU)
1154- if ((dm > dl))
1155- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1207+ let et = bE(U(V))
1208+ let cM = split(et[H], "_")
1209+ let cT = split(et[I], "_")
1210+ let eP = cW(cM, cT, cO)
1211+ let ev = eP._1
1212+ let eJ = eP._2
1213+ let bC = eP._3
1214+ let eO = eP._4
1215+ let eC = fraction(bC, aY, al)
1216+ let dW = max([eC, l])
1217+ let do = (bC + dW)
1218+ if ((do > dn))
1219+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
11561220 else {
1157- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1158- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1159- let ax = if (((dl - dm) > 0))
1160- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1221+ let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1222+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1223+ let az = if (((dn - do) > 0))
1224+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
11611225 else nil
1162- let dV = (bA / 100)
1163- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1164- let em = valueOrElse(getInteger(Y), 0)
1165- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1226+ let dX = (bC / 100)
1227+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1228+ let eD = valueOrElse(getInteger(aa), 0)
1229+ $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
11661230 }
11671231 }
11681232 }
11691233 }
11701234 else throw("Strict value is not equal to itself.")
11711235 }
11721236
11731237
11741238
1175-@Callable(dX)
1176-func exchangeResourcesLandDelivery (cM,W) = if (!(ac))
1239+@Callable(eo)
1240+func exchangeResourcesLandDelivery (cO,Y) = if (!(ae))
11771241 then throw("Delivery feature is turned off!")
11781242 else {
1179- let ea = bF()
1180- if ((ea == ea))
1181- then if ((size(dX.payments) != 1))
1243+ let er = bH()
1244+ if ((er == er))
1245+ then if ((size(eo.payments) != 1))
11821246 then throw("exactly 1 payment must be attached")
11831247 else {
1184- let dk = dX.payments[0]
1185- let dl = dk.amount
1186- if (if (!(isDefined(dk.assetId)))
1248+ let dm = eo.payments[0]
1249+ let dn = dm.amount
1250+ if (if (!(isDefined(dm.assetId)))
11871251 then true
1188- else (value(dk.assetId) != ae))
1252+ else (value(dm.assetId) != ag))
11891253 then throw("USDT payments only!")
11901254 else {
1191- let en = dX.caller
1192- let P = toString(en)
1193- let eo = value(assetInfo(fromBase58String(W)))
1194- if (!(isDefined(getInteger(aC, N(W)))))
1195- then throw((("NFT " + eo.name) + " is not staked"))
1255+ let eE = eo.caller
1256+ let R = toString(eE)
1257+ let eF = value(assetInfo(fromBase58String(Y)))
1258+ if (!(isDefined(getInteger(aE, P(Y)))))
1259+ then throw((("NFT " + eF.name) + " is not staked"))
11961260 else {
1197- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1198- if ((ep != P))
1261+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1262+ if ((eG != R))
11991263 then throw((e + " is not yours"))
12001264 else {
1201- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1202- let bY = split_4C(dz, ":")
1203- let cK = split(bY[y], "_")
1204- let cR = split(bY[z], "_")
1205- let ez = cU(cK, cR, cM)
1206- let ee = ez._1
1207- let es = ez._2
1208- let bA = ez._3
1209- let ex = ez._4
1210- let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1211- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1212- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1213- let el = fraction(bA, aW, aj)
1214- let dU = if ((l > el))
1215- then l
1216- else el
1217- let dm = (bA + dU)
1218- if ((dm > dl))
1219- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1265+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1266+ let ca = split_4C(dB, ":")
1267+ let cM = split(ca[A], "_")
1268+ let cT = split(ca[B], "_")
1269+ let eQ = cW(cM, cT, cO)
1270+ let ev = eQ._1
1271+ let eJ = eQ._2
1272+ let bC = eQ._3
1273+ let eO = eQ._4
1274+ let dJ = makeString_2C([ca[z], makeString(ev, "_"), makeString(eJ, "_"), ca[C], ca[D]], ":")
1275+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1276+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eO, am)], nil))
1277+ let eC = fraction(bC, aY, al)
1278+ let dW = max([eC, l])
1279+ let do = (bC + dW)
1280+ if ((do > dn))
1281+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
12201282 else {
1221- let ax = if (((dl - dm) > 0))
1222- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1283+ let az = if (((dn - do) > 0))
1284+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
12231285 else nil
1224- let dV = (bA / 100)
1225- let em = valueOrElse(getInteger(Y), 0)
1226- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1286+ let dX = (bC / 100)
1287+ let eD = valueOrElse(getInteger(aa), 0)
1288+ $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
12271289 }
12281290 }
12291291 }
12301292 }
12311293 }
12321294 else throw("Strict value is not equal to itself.")
12331295 }
12341296
12351297
12361298
1237-@Callable(dX)
1238-func craftGoods (eA,eB) = {
1239- let ea = bF()
1240- if ((ea == ea))
1241- then if ((size(dX.payments) != 1))
1299+@Callable(eo)
1300+func craftGoods (ec,ed) = {
1301+ let er = bH()
1302+ if ((er == er))
1303+ then if ((size(eo.payments) != 1))
12421304 then throw("exactly 1 payment must be attached")
12431305 else {
1244- let dk = dX.payments[0]
1245- let dl = dk.amount
1246- let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1247- if ((eC != ae))
1306+ let dm = eo.payments[0]
1307+ let dn = dm.amount
1308+ if (if (!(isDefined(dm.assetId)))
1309+ then true
1310+ else (value(dm.assetId) != ag))
12481311 then throw("USDT payments only!")
1249- else if ((dl != aj))
1250- then throw("exactly 1 USDT must be attached as payment")
1251- else if ((0 >= eB))
1252- then throw("Quantity should be positive")
1253- else {
1254- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1255- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1256- if ((eb[J] != "M"))
1257- then throw(("Duck location type should be Manufactory, but is " + eb[J]))
1258- else {
1259- let eD = eb[I]
1260- let ec = bC(S(T))
1261- let cR = split(ec[G], "_")
1262- if (if ((0 > eA))
1263- then true
1264- else (eA >= size(s)))
1265- then throw(("Unknown product idx=" + toString(eA)))
1266- else {
1267- let ab = split(s[eA], "_")
1268- if ((size(ab) != v))
1269- then throw(("Fatal: unknown recipe: " + s[eA]))
1270- else {
1271- let eE = parseIntValue(ab[u])
1272- if ((q[eE] != eD))
1273- then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
1274- else {
1275- let eF = if ((ec[H] == ""))
1276- then nil
1277- else split_4C(ec[H], "_")
1278- func eG (bH,eH) = {
1279- let aJ = bH._2
1280- let eI = if ((size(eF) > aJ))
1281- then eF[aJ]
1282- else "0"
1283- let dQ = parseIntValue(eI)
1284- let bh = (eB * w)
1285- let eJ = if ((aJ == eA))
1286- then toString((dQ + bh))
1287- else eI
1288- $Tuple2((bH._1 :+ eJ), (aJ + 1))
1289- }
1290-
1291- let eK = ( let cl = s
1292- let cm = size(cl)
1293- let cn = $Tuple2(nil, 0)
1294- func co (cp,cq) = if ((cq >= cm))
1295- then cp
1296- else eG(cp, cl[cq])
1297-
1298- func cr (cp,cq) = if ((cq >= cm))
1299- then cp
1300- else throw("List size exceeds 50")
1301-
1302- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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
1303- func eL (bH,bJ) = {
1304- let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1305- let eN = parseIntValue(cR[bJ])
1306- if ((eM > eN))
1307- then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1308- else if ((eM > 0))
1309- then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1310- else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
1311- }
1312-
1313- let eO = {
1314- let cl = an
1315- let cm = size(cl)
1316- let cn = $Tuple2(nil, 0)
1317- func cs (cp,cq) = if ((cq >= cm))
1318- then cp
1319- else eL(cp, cl[cq])
1320-
1321- func ct (cp,cq) = if ((cq >= cm))
1322- then cp
1323- else throw("List size exceeds 6")
1324-
1325- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
1326- }
1327- let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1328- let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1329- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1330- $Tuple2(nil, $Tuple3(eP, ea, eh))
1331- }
1332- }
1333- }
1334- }
1335- }
1312+ else if ((dn != al))
1313+ then throw((("exactly " + aN(m, 6)) + " USDT must be attached as payment"))
1314+ else {
1315+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1316+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1317+ if ((es[L] != "M"))
1318+ then throw(("Duck location type should be Manufactory, but is " + es[L]))
1319+ else {
1320+ let eR = es[K]
1321+ let et = bE(U(V))
1322+ let cT = split(et[I], "_")
1323+ let ea = if ((et[J] == ""))
1324+ then nil
1325+ else split_4C(et[J], "_")
1326+ let eS = dZ(cT, ea, eR, ec, ed)
1327+ let eJ = eS._1
1328+ let ej = eS._2
1329+ let eT = eS._3
1330+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1331+ let eU = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1332+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1333+ $Tuple2(nil, $Tuple3(eU, er, ey))
1334+ }
1335+ }
13361336 }
13371337 else throw("Strict value is not equal to itself.")
13381338 }
13391339
13401340
13411341
1342-@Callable(dX)
1343-func setWarehouseOrder (eQ,W) = {
1344- let en = dX.originCaller
1345- let P = toString(en)
1346- let eP = if ((en != aB))
1347- then bE()
1348- else false
1349- let eo = value(assetInfo(fromBase58String(W)))
1350- if (!(isDefined(getInteger(aC, N(W)))))
1351- then throw((("NFT " + eo.name) + " is not staked"))
1352- else {
1353- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1354- if (if ((en != aB))
1355- then (ep != P)
1356- else false)
1357- then throw((e + " is not yours"))
1358- else {
1359- let eR = split_4C(eQ, ":")
1360- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1361- let bY = split_4C(dz, ":")
1362- let eS = split(bY[B], "_")
1363- let eT = parseIntValue(eS[D])
1364- let be = V(W)
1365- let bZ = bd(be)
1366- let dY = bX(bY, bZ, eR)
1367- let eU = dY._4
1368- let eV = dY._5
1369- let eW = dY._7
1370- let eX = (eU + eV)
1371- let eY = ((eT - eW) - eX)
1372- if ((0 > eY))
1373- then throw((((((("Attempt to reserve " + toString(eU)) + " space for buy orders, and ") + toString(eV)) + " space for sell orders (and occupied=") + toString(eW)) + "), leads to negative free space"))
1374- else {
1375- let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":")
1376- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1377- let eZ = dY._6
1378- let fa = if ((eZ > 0))
1379- then if ((size(dX.payments) != 1))
1380- then throw("exactly 1 payment must be attached")
1381- else {
1382- let dk = dX.payments[0]
1383- let dl = dk.amount
1384- let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1385- if ((eC != ae))
1386- then throw("USDT payments only!")
1387- else if ((dl != eZ))
1388- then throw(("Payment needed is " + toString(eZ)))
1389- else [StringEntry(be, eQ)]
1390- }
1391- else if ((eZ == 0))
1392- then if ((size(dX.payments) != 0))
1393- then throw("No payments needed")
1394- else [StringEntry(be, eQ)]
1395- else if ((size(dX.payments) != 0))
1396- then throw("No payments needed")
1397- else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)]
1398- $Tuple2(fa, $Tuple2(eP, dJ))
1399- }
1400- }
1401- }
1402- }
1403-
1404-
1405-
1406-@Callable(dX)
1407-func acceptWarehouseOrder (dq,dp,T) = {
1408- let ea = bF()
1409- if ((ea == ea))
1410- then {
1411- let de = dX.originCaller
1412- let cZ = toString(de)
1413- let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1414- let eb = valueOrElse(getString(aC, U(fb)), g)
1415- let fc = split(value(eb), "_")
1416- if ((fc[J] != "L"))
1417- then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1418- else if ((fb != T))
1419- then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
1420- else {
1421- let bD = S(T)
1422- let ec = bC(bD)
1423- let dr = split(ec[F], "_")
1424- let ds = split(ec[G], "_")
1425- let dt = if ((ec[H] == ""))
1426- then nil
1427- else split_4C(ec[H], "_")
1428- let fd = do(dp, cZ, dq, dr, ds, dt)
1429- let fe = fd._1
1430- let ff = fd._2
1431- let fg = fd._3
1432- let fh = fd._4
1433- let cY = fd._5
1434- let dg = fd._6
1435- let fi = fd._7
1436- let di = fd._8
1437- let fj = fd._9
1438- let dK = fd._10
1439- let fk = [fe, cX(cY, cZ, 0)]
1440- let fl = df(dg, dX.payments, di, 0)
1441- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1442- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1443- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1444- $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
1445- }
1446- }
1447- else throw("Strict value is not equal to itself.")
1448- }
1449-
1450-
1451-
1452-@Callable(dX)
1453-func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac))
1342+@Callable(eo)
1343+func craftGoodsDuckDelivery (ec,ed,eb) = if (!(ae))
14541344 then throw("Delivery feature is turned off!")
14551345 else {
1456- let ea = bF()
1457- if ((ea == ea))
1346+ let er = bH()
1347+ if ((er == er))
14581348 then {
1459- let de = dX.originCaller
1460- let cZ = toString(de)
1461- let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1462- let bD = S(T)
1463- let ec = bC(bD)
1464- let dr = split(ec[F], "_")
1465- let ds = split(ec[G], "_")
1466- let dt = if ((ec[H] == ""))
1467- then nil
1468- else split_4C(ec[H], "_")
1469- let fq = do(dp, cZ, fp, dr, ds, dt)
1470- let fe = fq._1
1471- let ff = fq._2
1472- let fg = fq._3
1473- let fh = fq._4
1474- let cY = fq._5
1475- let dg = fq._6
1476- let fi = fq._7
1477- let di = fq._8
1478- let fj = fq._9
1479- let dK = fq._10
1480- let fr = fraction((dg + cY), aV, aj)
1481- let fs = if ((k > fr))
1482- then k
1483- else fr
1484- let dj = fraction(fs, dg, (dg + cY))
1485- let da = (fs - dj)
1486- let em = valueOrElse(getInteger(Y), 0)
1487- let fk = [fe, cX(cY, cZ, da)]
1488- let fl = df(dg, dX.payments, di, dj)
1489- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1490- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1491- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1492- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
1493- }
1494- else throw("Strict value is not equal to itself.")
1495- }
1496-
1497-
1498-
1499-@Callable(dX)
1500-func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac))
1501- then throw("Delivery feature is turned off!")
1502- else {
1503- let ea = bF()
1504- if ((ea == ea))
1505- then {
1506- let de = dX.originCaller
1507- let cZ = toString(de)
1508- let eo = value(assetInfo(fromBase58String(ft)))
1509- if (!(isDefined(getInteger(aC, N(ft)))))
1510- then throw((("NFT " + eo.name) + " is not staked"))
1349+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1350+ if ((size(eo.payments) != 1))
1351+ then throw("exactly 1 payment must be attached")
15111352 else {
1512- let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1513- if ((ep != cZ))
1514- then throw((e + " is not yours"))
1353+ let dm = eo.payments[0]
1354+ let dn = dm.amount
1355+ if (if (!(isDefined(dm.assetId)))
1356+ then true
1357+ else (value(dm.assetId) != ag))
1358+ then throw("USDT payments only!")
15151359 else {
1516- let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1517- let bY = split_4C(dz, ":")
1518- let cK = split(bY[y], "_")
1519- let cR = split(bY[z], "_")
1520- let eF = if ((bY[A] == ""))
1360+ let et = bE(U(V))
1361+ let cT = split(et[I], "_")
1362+ let ea = if ((et[J] == ""))
15211363 then nil
1522- else split(bY[A], "_")
1523- let fu = do(dp, cZ, fp, cK, cR, eF)
1524- let fe = fu._1
1525- let ff = fu._2
1526- let fg = fu._3
1527- let fh = fu._4
1528- let cY = fu._5
1529- let dg = fu._6
1530- let fi = fu._7
1531- let di = fu._8
1532- let fj = fu._9
1533- let dK = fu._10
1534- let fr = fraction((dg + cY), aV, aj)
1535- let fs = if ((k > fr))
1536- then k
1537- else fr
1538- let dj = fraction(fs, dg, (dg + cY))
1539- let da = (fs - dj)
1540- let em = valueOrElse(getInteger(Y), 0)
1541- let fk = [fe, cX(cY, cZ, da)]
1542- let fl = df(dg, dX.payments, di, dj)
1543- let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1544- let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1545- let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1546- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
1364+ else split_4C(et[J], "_")
1365+ let eV = dZ(cT, ea, eb, ec, ed)
1366+ let eJ = eV._1
1367+ let ej = eV._2
1368+ let eT = eV._3
1369+ let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1370+ let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1371+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1372+ let eC = fraction(ed, k, n)
1373+ let dW = max([eC, k])
1374+ let do = (m + dW)
1375+ if ((do > dn))
1376+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1377+ else {
1378+ let az = if (((dn - do) > 0))
1379+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
1380+ else nil
1381+ let eD = valueOrElse(getInteger(aa), 0)
1382+ $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1383+ }
15471384 }
15481385 }
15491386 }
15501387 else throw("Strict value is not equal to itself.")
15511388 }
15521389
15531390
15541391
1555-@Callable(dX)
1556-func sellProductsToES (cM) = {
1557- let ea = bF()
1558- if ((ea == ea))
1559- then if ((size(dX.payments) != 0))
1392+@Callable(eo)
1393+func craftGoodsLandDelivery (ec,ed,Y,eb) = if (!(ae))
1394+ then throw("Delivery feature is turned off!")
1395+ else {
1396+ let er = bH()
1397+ if ((er == er))
1398+ then if ((size(eo.payments) != 1))
1399+ then throw("exactly 1 payment must be attached")
1400+ else {
1401+ let dm = eo.payments[0]
1402+ let dn = dm.amount
1403+ if (if (!(isDefined(dm.assetId)))
1404+ then true
1405+ else (value(dm.assetId) != ag))
1406+ then throw("USDT payments only!")
1407+ else {
1408+ let eE = eo.caller
1409+ let R = toString(eE)
1410+ let eF = value(assetInfo(fromBase58String(Y)))
1411+ if (!(isDefined(getInteger(aE, P(Y)))))
1412+ then throw((("NFT " + eF.name) + " is not staked"))
1413+ else {
1414+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1415+ if ((eG != R))
1416+ then throw((e + " is not yours"))
1417+ else {
1418+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1419+ let ca = split_4C(dB, ":")
1420+ let cT = split(ca[B], "_")
1421+ let ea = if ((ca[C] == ""))
1422+ then nil
1423+ else split_4C(ca[C], "_")
1424+ let eW = dZ(cT, ea, eb, ec, ed)
1425+ let eJ = eW._1
1426+ let ej = eW._2
1427+ let eT = eW._3
1428+ let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), makeString_2C(ej, "_"), ca[D]], ":")
1429+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1430+ let ey = aK(invoke(aE, "updateAccStats", [R, fraction(b, eT, am)], nil))
1431+ let eC = fraction(ed, k, n)
1432+ let dW = max([eC, k])
1433+ let do = (m + dW)
1434+ if ((do > dn))
1435+ then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1436+ else {
1437+ let az = if (((dn - do) > 0))
1438+ then [ScriptTransfer(eo.caller, (dn - do), ag)]
1439+ else nil
1440+ let eD = valueOrElse(getInteger(aa), 0)
1441+ $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1442+ }
1443+ }
1444+ }
1445+ }
1446+ }
1447+ else throw("Strict value is not equal to itself.")
1448+ }
1449+
1450+
1451+
1452+@Callable(eo)
1453+func setWarehouseOrder (eX,Y) = {
1454+ let eE = eo.originCaller
1455+ let R = toString(eE)
1456+ let eU = if ((eE != aD))
1457+ then bG()
1458+ else false
1459+ let eF = value(assetInfo(fromBase58String(Y)))
1460+ if (!(isDefined(getInteger(aE, P(Y)))))
1461+ then throw((("NFT " + eF.name) + " is not staked"))
1462+ else {
1463+ let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1464+ if (if ((eE != aD))
1465+ then (eG != R)
1466+ else false)
1467+ then throw((e + " is not yours"))
1468+ else {
1469+ let eY = split_4C(eX, ":")
1470+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1471+ let ca = split_4C(dB, ":")
1472+ let eZ = split(ca[D], "_")
1473+ let fa = parseIntValue(eZ[F])
1474+ let bg = X(Y)
1475+ let cb = bf(bg)
1476+ let ep = bZ(ca, cb, eY)
1477+ let fb = ep._4
1478+ let fc = ep._5
1479+ let fd = ep._7
1480+ let fe = (fb + fc)
1481+ let ff = ((fa - fd) - fe)
1482+ if ((0 > ff))
1483+ then throw((((((("Attempt to reserve " + toString(fb)) + " space for buy orders, and ") + toString(fc)) + " space for sell orders (and occupied=") + toString(fd)) + "), leads to negative free space"))
1484+ else {
1485+ let dJ = makeString_2C([ca[z], makeString(ep._1, "_"), makeString(ep._2, "_"), makeString_2C(ep._3, "_"), toString(fe)], ":")
1486+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1487+ let fg = ep._6
1488+ let fh = if ((fg > 0))
1489+ then if ((size(eo.payments) != 1))
1490+ then throw("exactly 1 payment must be attached")
1491+ else {
1492+ let dm = eo.payments[0]
1493+ let dn = dm.amount
1494+ let fi = valueOrErrorMessage(dm.assetId, "WAVES can't be used as payment")
1495+ if ((fi != ag))
1496+ then throw("USDT payments only!")
1497+ else if ((dn != fg))
1498+ then throw(("Payment needed is " + toString(fg)))
1499+ else [StringEntry(bg, eX)]
1500+ }
1501+ else if ((fg == 0))
1502+ then if ((size(eo.payments) != 0))
1503+ then throw("No payments needed")
1504+ else [StringEntry(bg, eX)]
1505+ else if ((size(eo.payments) != 0))
1506+ then throw("No payments needed")
1507+ else [ScriptTransfer(addressFromStringValue(eG), -(fg), ag), StringEntry(bg, eX)]
1508+ $Tuple2(fh, $Tuple2(eU, dL))
1509+ }
1510+ }
1511+ }
1512+ }
1513+
1514+
1515+
1516+@Callable(eo)
1517+func acceptWarehouseOrder (ds,dr,V) = {
1518+ let er = bH()
1519+ if ((er == er))
1520+ then {
1521+ let dg = eo.originCaller
1522+ let db = toString(dg)
1523+ let fj = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1524+ let es = valueOrElse(getString(aE, W(fj)), g)
1525+ let fk = split(value(es), "_")
1526+ if ((fk[L] != "L"))
1527+ then throw((("Duck location type is " + fk[L]) + ", but should be L"))
1528+ else if ((fj != V))
1529+ then throw(((("Your staked duck is " + fj) + ", but passed ") + V))
1530+ else {
1531+ let bF = U(V)
1532+ let et = bE(bF)
1533+ let dt = split(et[H], "_")
1534+ let du = split(et[I], "_")
1535+ let dv = if ((et[J] == ""))
1536+ then nil
1537+ else split_4C(et[J], "_")
1538+ let fl = dq(dr, db, ds, dt, du, dv)
1539+ let fm = fl._1
1540+ let fn = fl._2
1541+ let fo = fl._3
1542+ let fp = fl._4
1543+ let da = fl._5
1544+ let di = fl._6
1545+ let fq = fl._7
1546+ let dk = fl._8
1547+ let fr = fl._9
1548+ let dM = fl._10
1549+ let fs = [fm, cZ(da, db, 0)]
1550+ let ft = dh(di, eo.payments, dk, 0)
1551+ let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1552+ let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1553+ let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1554+ $Tuple2((fs ++ ft), $Tuple5(er, fr, fv, fw, dM))
1555+ }
1556+ }
1557+ else throw("Strict value is not equal to itself.")
1558+ }
1559+
1560+
1561+
1562+@Callable(eo)
1563+func acceptShopOrderDuckDelivery (fx,dr) = if (!(ae))
1564+ then throw("Delivery feature is turned off!")
1565+ else {
1566+ let er = bH()
1567+ if ((er == er))
1568+ then {
1569+ let dg = eo.originCaller
1570+ let db = toString(dg)
1571+ let V = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1572+ let bF = U(V)
1573+ let et = bE(bF)
1574+ let dt = split(et[H], "_")
1575+ let du = split(et[I], "_")
1576+ let dv = if ((et[J] == ""))
1577+ then nil
1578+ else split_4C(et[J], "_")
1579+ let fy = dq(dr, db, fx, dt, du, dv)
1580+ let fm = fy._1
1581+ let fn = fy._2
1582+ let fo = fy._3
1583+ let fp = fy._4
1584+ let da = fy._5
1585+ let di = fy._6
1586+ let fq = fy._7
1587+ let dk = fy._8
1588+ let fr = fy._9
1589+ let dM = fy._10
1590+ let fz = fraction((di + da), aX, al)
1591+ let fA = max([fz, k])
1592+ let dl = fraction(fA, di, (di + da))
1593+ let dc = (fA - dl)
1594+ let eD = valueOrElse(getInteger(aa), 0)
1595+ let fs = [fm, cZ(da, db, dc)]
1596+ let ft = dh(di, eo.payments, dk, dl)
1597+ let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1598+ let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1599+ let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1600+ $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, fv, fw, dM))
1601+ }
1602+ else throw("Strict value is not equal to itself.")
1603+ }
1604+
1605+
1606+
1607+@Callable(eo)
1608+func acceptShopOrderLandDelivery (fx,dr,fB) = if (!(ae))
1609+ then throw("Delivery feature is turned off!")
1610+ else {
1611+ let er = bH()
1612+ if ((er == er))
1613+ then {
1614+ let dg = eo.originCaller
1615+ let db = toString(dg)
1616+ let eF = value(assetInfo(fromBase58String(fB)))
1617+ if (!(isDefined(getInteger(aE, P(fB)))))
1618+ then throw((("NFT " + eF.name) + " is not staked"))
1619+ else {
1620+ let eG = valueOrErrorMessage(getString(aE, N(fB)), (("NFT " + eF.name) + " is orphaned"))
1621+ if ((eG != db))
1622+ then throw((e + " is not yours"))
1623+ else {
1624+ let dB = aH(invoke(aE, "getWarehouseREADONLY", [fB], nil))
1625+ let ca = split_4C(dB, ":")
1626+ let cM = split(ca[A], "_")
1627+ let cT = split(ca[B], "_")
1628+ let ea = if ((ca[C] == ""))
1629+ then nil
1630+ else split_4C(ca[C], "_")
1631+ let fC = dq(dr, db, fx, cM, cT, ea)
1632+ let fm = fC._1
1633+ let fn = fC._2
1634+ let fo = fC._3
1635+ let fp = fC._4
1636+ let da = fC._5
1637+ let di = fC._6
1638+ let fq = fC._7
1639+ let dk = fC._8
1640+ let fr = fC._9
1641+ let dM = fC._10
1642+ let fz = fraction((di + da), aX, al)
1643+ let fA = max([fz, k])
1644+ let dl = fraction(fA, di, (di + da))
1645+ let dc = (fA - dl)
1646+ let eD = valueOrElse(getInteger(aa), 0)
1647+ let fs = [fm, cZ(da, db, dc)]
1648+ let ft = dh(di, eo.payments, dk, dl)
1649+ let dJ = makeString_2C([ca[z], makeString(fn, "_"), makeString(fo, "_"), makeString(fp, "_"), ca[D]], ":")
1650+ let dL = aH(invoke(aE, "saveWarehouse", [dJ, fB], nil))
1651+ let ey = aK(invoke(aE, "updateAccStats", [db, fraction(d, fq, am)], nil))
1652+ $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, dL, ey, dM))
1653+ }
1654+ }
1655+ }
1656+ else throw("Strict value is not equal to itself.")
1657+ }
1658+
1659+
1660+
1661+@Callable(eo)
1662+func sellProductsToES (cO) = {
1663+ let er = bH()
1664+ if ((er == er))
1665+ then if ((size(eo.payments) != 0))
15601666 then throw("No payments needed")
15611667 else {
1562- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1563- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1564- if ((eb[J] != "A"))
1565- then throw(("Duck location type should be Airport, but is " + eb[J]))
1668+ let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1669+ let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1670+ if ((es[L] != "A"))
1671+ then throw(("Duck location type should be Airport, but is " + es[L]))
15661672 else {
1567- let ec = bC(S(T))
1568- let eF = if ((ec[H] == ""))
1673+ let et = bE(U(V))
1674+ let ea = if ((et[J] == ""))
15691675 then nil
1570- else split_4C(ec[H], "_")
1571- let fv = X()
1572- let fw = getString(fv)
1573- let fx = if (isDefined(fw))
1574- then split_4C(value(fw), "_")
1676+ else split_4C(et[J], "_")
1677+ let fD = Z()
1678+ let fE = getString(fD)
1679+ let fF = if (isDefined(fE))
1680+ then split_4C(value(fE), "_")
15751681 else nil
1576- func fy (bH,fz) = {
1577- let bJ = bH._1
1578- let eB = if ((size(cM) > bJ))
1579- then cM[bJ]
1682+ func fG (bJ,fH) = {
1683+ let bL = bJ._1
1684+ let ed = if ((size(cO) > bL))
1685+ then cO[bL]
15801686 else 0
1581- if ((0 > eB))
1687+ if ((0 > ed))
15821688 then throw("Quantity cannot be negative")
15831689 else {
1584- let ab = split(fz, "_")
1585- if ((size(ab) != v))
1586- then throw(("Fatal: unknown recipe: " + fz))
1690+ let ad = split(fH, "_")
1691+ if ((size(ad) != x))
1692+ then throw(("Fatal: unknown recipe: " + fH))
15871693 else {
1588- let fA = (i * w)
1589- let fB = if ((size(fx) > bJ))
1590- then parseIntValue(fx[bJ])
1694+ let fI = (i * y)
1695+ let fJ = if ((size(fF) > bL))
1696+ then parseIntValue(fF[bL])
15911697 else 0
1592- let fC = (fA - fB)
1593- if ((eB > fC))
1594- then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
1698+ let fK = (fI - fJ)
1699+ if ((ed > fK))
1700+ then throw(((("Warehouse can buy only " + toString(fK)) + " of ") + r[bL]))
15951701 else {
1596- let et = aa(ab)
1597- let fD = fraction((et * j), h, (ak * w))
1598- let fE = if ((size(eF) > bJ))
1599- then parseIntValue(eF[bJ])
1702+ let eK = ac(ad)
1703+ let fL = fraction((eK * j), h, (am * y))
1704+ let fM = if ((size(ea) > bL))
1705+ then parseIntValue(ea[bL])
16001706 else 0
1601- if ((eB > fE))
1602- then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1603- else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
1707+ if ((ed > fM))
1708+ then throw(((("You have only " + toString(fM)) + " of ") + r[bL]))
1709+ else $Tuple5((bL + 1), (bJ._2 + (fL * ed)), (bJ._3 :+ toString((fM - ed))), (bJ._4 :+ toString((fJ + ed))), (bJ._5 + (eK * ed)))
16041710 }
16051711 }
16061712 }
16071713 }
16081714
1609- let eO = {
1610- let cl = s
1611- let cm = size(cl)
1612- let cn = $Tuple5(0, 0, nil, nil, 0)
1613- func co (cp,cq) = if ((cq >= cm))
1614- then cp
1615- else fy(cp, cl[cq])
1715+ let en = {
1716+ let cn = u
1717+ let co = size(cn)
1718+ let cp = $Tuple5(0, 0, nil, nil, 0)
1719+ func cq (cr,cs) = if ((cs >= co))
1720+ then cr
1721+ else fG(cr, cn[cs])
16161722
1617- func cr (cp,cq) = if ((cq >= cm))
1618- then cp
1723+ func ct (cr,cs) = if ((cs >= co))
1724+ then cr
16191725 else throw("List size exceeds 50")
16201726
1621- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
1727+ ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 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)
16221728 }
1623- let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1624- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1625- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1626- $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
1729+ let fu = makeString_2C([et[G], et[H], et[I], makeString_2C(en._3, "_")], ":")
1730+ let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1731+ let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(c, en._5, (am * 10))], nil))
1732+ $Tuple2([StringEntry(fD, makeString_2C(en._4, "_")), ScriptTransfer(eo.caller, en._2, ag)], $Tuple3(fv, er, ey))
16271733 }
16281734 }
16291735 else throw("Strict value is not equal to itself.")
16301736 }
16311737
16321738
16331739
1634-@Callable(dX)
1635-func updateEsStorage (fF) = if ((dX.caller != aC))
1740+@Callable(eo)
1741+func updateEsStorage (fN) = if ((eo.caller != aE))
16361742 then throw("Permission denied")
1637- else $Tuple2([StringEntry(X(), fF)], fF)
1743+ else $Tuple2([StringEntry(Z(), fN)], fN)
16381744
16391745
16401746
1641-@Callable(dX)
1642-func updateDeliveryLocked (fG) = if ((dX.caller != aC))
1747+@Callable(eo)
1748+func updateDeliveryLocked (fO) = if ((eo.caller != aE))
16431749 then throw("Permission denied")
1644- else $Tuple2([IntegerEntry(Z, fG)], fG)
1750+ else $Tuple2([IntegerEntry(ab, fO)], fO)
16451751
16461752
16471753
1648-@Callable(dX)
1649-func sendDeliveryReward (P) = if ((dX.caller != aC))
1754+@Callable(eo)
1755+func sendDeliveryReward (R) = if ((eo.caller != aE))
16501756 then throw("Permission denied")
16511757 else {
1652- let em = valueOrElse(getInteger(Y), 0)
1653- let fH = valueOrElse(getInteger(Z), 0)
1654- let fI = (k * m)
1655- let fJ = invoke(aE, "sendAcres", [P, fI], nil)
1656- $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ)
1758+ let eD = valueOrElse(getInteger(aa), 0)
1759+ let fP = valueOrElse(getInteger(ab), 0)
1760+ let fQ = (k * o)
1761+ let fR = invoke(aG, "sendAcres", [R, fQ], nil)
1762+ $Tuple2([IntegerEntry(aa, (eD - k)), IntegerEntry(ab, (fP - k))], fR)
16571763 }
16581764
16591765

github/deemru/w8io/873ac7e 
787.17 ms