tx · 7e7drXjcddLtvaHiaAwEumFDcbzWQH7noiiBSosG4GtE

3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx:  -0.02500000 Waves

2023.03.28 17:52 [2509947] smart account 3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx > SELF 0.00000000 Waves

{ "type": 13, "id": "7e7drXjcddLtvaHiaAwEumFDcbzWQH7noiiBSosG4GtE", "fee": 2500000, "feeAssetId": null, "timestamp": 1680015275031, "version": 2, "chainId": 84, "sender": "3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx", "senderPublicKey": "EKZmHJ5bK3qKKgRdq8rAamt9qrDbVMLARzRqXoQW258v", "proofs": [ "39CgrNg7xyamD4QC8D7CxuWd2C81Tqy9W5B7j2ZzJTWsPfTRLwEZNdpih4R5cqZeCqoWYFoi6bFcw6SjecdNCQsm" ], "script": "base64:BgJiCAISCwoJCAgICAgBCAgIEgQKAggIEgQKAggIEgMKAQgSBwoFCAgIAQgSBwoFCAgICAISBgoECAgICBIDCgEIEgQKAggIEgMKAQgSBAoCCAgSBAoCCAgSBAoCGAgSBAoCGAgMAAlzZXBhcmF0b3ICAV8ABGtCdXkCA2J1eQAGa1ByaWNlAgVwcmljZQAFa1NlbGwCBHNlbGwAEm1heEF1Y3Rpb25EdXJhdGlvbgAeAAV0ZWFtcwEghWOVo/OIjrDeDBeOCE6/mj+SuybbOuh2jhbcFCIqSH4ABVdBVkVTAQAABGtCaWQCA2JpZAAGcGF1c2VkBgAMc3RhdHVzRm9yTkZUCQCWCgQCBE9QRU4CBkNMT1NFRAIIUkVXQVJERUQCCENBTkNFTEVEAAtkQXBwQWRkcmVzcwEaAVRKuE9s3sLak+30julKNvjVT3+V1VVbXaABBWlzTmZ0AQdhc3NldElkBAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBXRva2VuBQckbWF0Y2gwAwMJAAACCAUFdG9rZW4IZGVjaW1hbHMAAAkAAAIIBQV0b2tlbghxdWFudGl0eQABBwkAAAIIBQV0b2tlbgpyZWlzc3VhYmxlBwcHDgFpAQljcmVhdGVOZnQJCG5mdF9uYW1lCW5mdF9vd25lcg9uZnRfZEFwcEFkZHJlc3MIbmZ0X3R5cGUIbmZ0X3RhZ3MRbmZ0X3NlbGxpbmdfcHJpY2UPbmZ0X2Rlc2NyaXB0aW9uCm5mdF9vblNlbGwIbmZ0X2RhdGEECG5ld1Rva2VuCQDCCAUFCG5mdF9uYW1lBQ9uZnRfZGVzY3JpcHRpb24AAQAABwQHaXNzdWVJZAkAuAgBBQhuZXdUb2tlbgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCBQhuZXdUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHaXNzdWVJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICBU93bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90eXBlBQhuZnRfdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90YWdzBQhuZnRfdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICD25mdF9kQXBwQWRkcmVzcwUPbmZ0X2RBcHBBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICEW5mdF9zZWxsaW5nX3ByaWNlBRFuZnRfc2VsbGluZ19wcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCm5mdF9vblNlbGwFCm5mdF9vblNlbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfZGF0YQUIbmZ0X2RhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUEdHhJZAUJc2VwYXJhdG9yAglpc3N1ZV9uZnQJANgEAQUHaXNzdWVJZAUDbmlsAWkBB3NlbGxORlQCBXByaWNlEHBheW1lbnRfY3VycmVuY3kEBHR4SWQIBQFpDXRyYW5zYWN0aW9uSWQEBnNlbGxlcggIBQFpBmNhbGxlcgVieXRlcwQLJHQwMjM3NDI0NTkJAJQKAgkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQGdG9rZW4wCAULJHQwMjM3NDI0NTkCXzEEB2Ftb3VudDAIBQskdDAyMzc0MjQ1OQJfMgMJAQEhAQkBBWlzTmZ0AQUGdG9rZW4wCQACAQIQVG9rZW4gaXMgbm90IE5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXIFCXNlcGFyYXRvcgUFa1NlbGwJAKwCAgkArAICCQCsAgIJANgEAQUGdG9rZW4wBQlzZXBhcmF0b3IJAKQDAQUHYW1vdW50MAUQcGF5bWVudF9jdXJyZW5jeQUDbmlsAWkBBmJ1eU5GVAIFbmZ0SUQRY3VycmVudF9uZnRfb3duZXIEB2Fzc2V0SWQJANkEAQUFbmZ0SUQEEGNoZWNrT3duZXJJc1NhbWUEByRtYXRjaDAJAJ0IAgUEdGhpcwkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhBwQFcHJpY2UJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IFBW5mdElEAgFfBRFjdXJyZW50X25mdF9vd25lcgQGYW1vdW50CQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQMc2VsbGVyQW1vdW50CQBlAgUGYW1vdW50CQBoAgkAaQIFBmFtb3VudADoBwAZBAxwbGF0Zm9ybV9mZWUJAGUCBQZhbW91bnQFDHNlbGxlckFtb3VudAMJAAACBRFjdXJyZW50X25mdF9vd25lcgkApQgBCAUBaQZjYWxsZXIJAAIBAiljdXJyZW50IE93bmVyIG9mIE5GVCBub3QgYWJsZSB0byBwdXJjaGFzZQMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRFjdXJyZW50X25mdF9vd25lcgUMc2VsbGVyQW1vdW50BQV0ZWFtcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SUQCDHBsYXRmb3JtX2ZlZQkApAMBBQxwbGF0Zm9ybV9mZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBGtCdXkJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yCQCkAwEFBmFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBW5mdElEBQlzZXBhcmF0b3ICBl9vd25lcgkApQgBCAUBaQZjYWxsZXIFA25pbAMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFEWN1cnJlbnRfbmZ0X293bmVyBQxzZWxsZXJBbW91bnQFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FBW5mdElEAgxwbGF0Zm9ybV9mZWUJAKQDAQUMcGxhdGZvcm1fZmVlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAFpAQpjYW5jZWxTZWxsAQVuZnRJZAQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZzZWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQFBW5mdElkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQZzZWxsZXIAAQkA2QQBBQVuZnRJZAUDbmlsAWkBCmFkZEF1Y3Rpb24FBXN0YXJ0A2VuZApzdGFydFByaWNlCGR1cmF0aW9uEHBheW1lbnRfY3VycmVuY3kEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQFbmZ0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQFcHJpY2UJAQV2YWx1ZQEFCnN0YXJ0UHJpY2UECWVuZEhlaWdodAkAZAIIBQlsYXN0QmxvY2sGaGVpZ2h0BQhkdXJhdGlvbgQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBBFjaGVja05mdEF1Y3Rpb25lZAQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQDYBAEFBW5mdElkBQlzZXBhcmF0b3ICC25mdF9zdGF0dXNfCQDYBAEFBmNhbGxlcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAGBwMJAAACBRFjaGVja05mdEF1Y3Rpb25lZAYJAAIBAhdBbHJlYWR5IGluIGF1Y3Rpb24gbGlzdAMJAGYCBQhkdXJhdGlvbgUSbWF4QXVjdGlvbkR1cmF0aW9uCQACAQkArAICAjdEdXJhdGlvbiBpcyB0b28gbG9uZy4gTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzAgCQCkAwEFEm1heEF1Y3Rpb25EdXJhdGlvbgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAAIBAhBORlQgbm90IGF0dGFjaGVkAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFdGVhbXMJAAIBAhBORlQgbm90IGF0dGFjaGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQR0eElkAhZuZnRfc3RhcnRfYXVjdGlvbl9kYXRlCQDYBAEFBmNhbGxlcgUFc3RhcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQCFG5mdF9lbmRfYXVjdGlvbl9kYXRlCQDYBAEFBmNhbGxlcgUDZW5kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX25mdF9zdGFydF9wcmljZQUKc3RhcnRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCCl9uZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIPX25mdF9vbl9hdWN0aW9uCQDYBAEFBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIQX3ByZXZpb3VzX2JpZGRlcgIEbm9uZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCDF9oaWdoZXN0X2JpZAIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCDl93aW5uZXJfb2ZfbmZ0AgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAINX2JpZGRlcl9jb3VudAIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCC19uZnRfc3RhdHVzAgRPUEVOBQNuaWwBaQEIcGxhY2VCaWQFCWF1Y3Rpb25JZAVuZnRJZAluZnRfb3duZXIJYmlkX3ByaWNlEGN1cnJlbnRfY3VycmVuY3kEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAdhc3NldElkCQDZBAEFBW5mdElkBAl0b2tlblR5cGUICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQPY3VycmVudEJpZFByaWNlCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQVZ2V0TGFzdFdpbm5lckJpZFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkBBhnZXRQcmV2aW91c0JpZGRlckFkZHJlc3MJAJ0IAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCEF9wcmV2aW91c19iaWRkZXIED2N1cnJlbnRCaWRDb3VudAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDV9iaWRkZXJfY291bnQEFGdldExhc3RXaW5uZXJBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIOX3dpbm5lcl9vZl9uZnQEEWNoZWNrTmZ0QXVjdGlvbmVkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAILX25mdF9zdGF0dXMDCQECIT0CBRFjaGVja05mdEF1Y3Rpb25lZAIET1BFTgkAAgECFE5vdCBvcGVuIGZvciBhdWN0aW9uAwkAZwIJAQ1wYXJzZUludFZhbHVlAQUVZ2V0TGFzdFdpbm5lckJpZFByaWNlBQ9jdXJyZW50QmlkUHJpY2UJAAIBAiVCaWQgaXMgbGVzcyB0aGVuIHN0YXJ0aW5nL2hpZ2hlc3QgQmlkAwkAAAIFFWdldExhc3RXaW5uZXJCaWRQcmljZQIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIMX2hpZ2hlc3RfYmlkCQCkAwEFD2N1cnJlbnRCaWRQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIOX3dpbm5lcl9vZl9uZnQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAINX2JpZGRlcl9jb3VudAkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBBQ9jdXJyZW50QmlkQ291bnQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIHX25mdF9pZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgpfbmZ0X293bmVyBQluZnRfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQJAKQDAQUPY3VycmVudEJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIHX3dpbm5lcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAINX2JpZGRlcl9jb3VudAkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBBQ9jdXJyZW50QmlkQ291bnQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCB19uZnRfaWQJANgEAQUHYXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIFCW5mdF9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCD19iaWRfZm9yX25mdF9ieQkA2AQBBQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhBfYmlkX3ByaWNlX3BsYWNlBQliaWRfcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAiZfcHJldmlvdXNfYmlkX2Ftb3VudF9yZWZ1bmRfdG9fYWRkcmVzcwUUZ2V0TGFzdFdpbm5lckFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhtfcHJldm9pdXNfYmlkX2Ftb3VudF9yZWZ1bmQFFWdldExhc3RXaW5uZXJCaWRQcmljZQUDbmlsAwkBAiE9AgUVZ2V0TGFzdFdpbm5lckJpZFByaWNlAgEwCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFCXRva2VuVHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCJl9wcmV2aW91c19iaWRfYW1vdW50X3JlZnVuZF90b19hZGRyZXNzBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCG19wcmV2b2l1c19iaWRfYW1vdW50X3JlZnVuZAUVZ2V0TGFzdFdpbm5lckJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQJAKQDAQUPY3VycmVudEJpZFByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgdfbmZ0X2lkCQDYBAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIFCW5mdF9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQR0eElkAgFfBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAkApAMBBQ9jdXJyZW50QmlkUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAgdfd2lubmVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdHhJZAIBXwUJYXVjdGlvbklkAg1fYmlkZGVyX2NvdW50CQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD2N1cnJlbnRCaWRDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIHX25mdF9pZAkA2AQBBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHR4SWQCAV8FCWF1Y3Rpb25JZAIKX25mdF9vd25lcgUJbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIPX2JpZF9mb3JfbmZ0X2J5CQDYBAEFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9iaWRfcHJpY2VfcGxhY2UFCWJpZF9wcmljZQUDbmlsBQNuaWwBaQEOYWNjZXB0QmlkT2ZmZXIECWF1Y3Rpb25JZAVuZnRJZBRiaWRfYW1vdW50X2Zyb21fdXNlchBjdXJyZW50X2N1cnJlbmN5BAthc2ltaVN0cmluZwIsOXloSkRmV2pQcHY2dEZqV1JEMUFKeUJRd2F1c0pmMlpkeHpMbjg2VWtubnEEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQKYW1vdW50VW5pdAkA2QQBBRBjdXJyZW50X2N1cnJlbmN5BAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEB2Fzc2V0SWQJANkEAQUFbmZ0SWQEEmdldE5mdFdpbm5pbmdQcmljZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAQTZ2V0TmZ0V2lubmluZ2Ftb3VudAkAaAIJAGkCCQENcGFyc2VJbnRWYWx1ZQEFEmdldE5mdFdpbm5pbmdQcmljZQDoBwDPBwQMcGxhdGZvcm1fZmVlCQBoAgkAaQIJAQ1wYXJzZUludFZhbHVlAQUSZ2V0TmZ0V2lubmluZ1ByaWNlAOgHABkEEGdldEF1Y3Rpb25XaW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAMJAAACBRBjdXJyZW50X2N1cnJlbmN5BQthc2ltaVN0cmluZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFBmNhbGxlcgUTZ2V0TmZ0V2lubmluZ2Ftb3VudAUKYW1vdW50VW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUQZ2V0QXVjdGlvbldpbm5lcgABBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIVX2Ftb3VudF9wYWlkX3RvX293bmVyBRJnZXROZnRXaW5uaW5nUHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhBfbmZ0X3RyYW5zZmVyX3RvBRBnZXRBdWN0aW9uV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAILX25mdF9zdGF0dXMCCFJFV0FSREVECQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAhVfYW1vdW50X3BhaWRfdG9fb3duZXIFEmdldE5mdFdpbm5pbmdQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAIQX25mdF90cmFuc2Zlcl90bwUQZ2V0QXVjdGlvbldpbm5lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFCWF1Y3Rpb25JZAILX25mdF9zdGF0dXMCCFJFV0FSREVEBQNuaWwDCQAAAgUQY3VycmVudF9jdXJyZW5jeQIFV0FWRVMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQZjYWxsZXIJAQ1wYXJzZUludFZhbHVlAQUSZ2V0TmZ0V2lubmluZ1ByaWNlBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRBnZXRBdWN0aW9uV2lubmVyAAEFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAhVfYW1vdW50X3BhaWRfdG9fb3duZXIFEmdldE5mdFdpbm5pbmdQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBHR4SWQCEF9uZnRfdHJhbnNmZXJfdG8FEGdldEF1Y3Rpb25XaW5uZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQR0eElkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQlhdWN0aW9uSWQCFV9hbW91bnRfcGFpZF90b19vd25lcgUSZ2V0TmZ0V2lubmluZ1ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAhBfbmZ0X3RyYW5zZmVyX3RvBRBnZXRBdWN0aW9uV2lubmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIUkVXQVJERUQFA25pbAUDbmlsAWkBDWNhbmNlbEF1Y3Rpb24BCWF1Y3Rpb25JZAQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEDWF1Y3Rpb25TdGF0dXMJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwQNYmlkZGluZ1dpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDl93aW5uZXJfb2ZfbmZ0BAhuZnRPd25lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCCl9uZnRfb3duZXIEBW5mdElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIPX25mdF9vbl9hdWN0aW9uBAxiaWRkaW5nUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgxfaGlnaGVzdF9iaWQDCQAAAgUNYmlkZGluZ1dpbm5lcgIBMAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUEdHhJZAUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQFA25pbAMJAQIhPQIFDWJpZGRpbmdXaW5uZXICATAJAAIBAkNzb29yeSB5b3UgY2FuJ3QgY2FuY2VsIGl0IGJlY2F1c2UgYWxyZWFkeSBhdWN0aW9uIHBsYWNlZCBieSBzb21lb25lBQNuaWwBaQESbWFudWFsRnVuZFRyYW5zZmVyAg1yZWNlcGllbnRBZGRyB3BheW1lbnQEBnNlbmRlcggIBQFpBmNhbGxlcgVieXRlcwQHcmVjaXZlcgkA2QQBBQ1yZWNlcGllbnRBZGRyBAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBFyZWNlcGllbnRfcGF5bWVudAkBDXBhcnNlSW50VmFsdWUBBQdwYXltZW50BAxwbGF0Zm9ybV9mZWUJAGgCCQBpAgUGYW1vdW50AOgHABkECXRvdGFsY29zdAkAZAIFBmFtb3VudAUMcGxhdGZvcm1fZmVlAwkBAiE9AgUJdG90YWxjb3N0BQZhbW91bnQJAAIBAjRwbGVhc2Ugc3VibWl0IHRoZSBzdW0gb2YgYWN0dWFsIGFtb3VudCBhbmQgIHBsYXRmb3JtAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQDYBAEFBnNlbmRlcgIJX3RyYW5zZmVyBQZhbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgIMcGxhdGZvcm1fZmVlCQCkAwEFDHBsYXRmb3JtX2ZlZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJANgEAQUGc2VuZGVyAgxfdHJhbnNmZXJfdG8FDXJlY2VwaWVudEFkZHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQdyZWNpdmVyBRFyZWNlcGllbnRfcGF5bWVudAUEdW5pdAUDbmlsAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFdGVhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkA2AQBBQZzZW5kZXICCV90cmFuc2ZlcgUGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQICDHBsYXRmb3JtX2ZlZQkApAMBBQxwbGF0Zm9ybV9mZWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQDYBAEFBnNlbmRlcgIMX3RyYW5zZmVyX3RvBQ1yZWNlcGllbnRBZGRyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUHcmVjaXZlcgURcmVjZXBpZW50X3BheW1lbnQFBXRlYW1zBQNuaWwFA25pbAFpAQliYWNrVmFsdWUBCWF1Y3Rpb25JZAQGY2FsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAVuZnRJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCD19uZnRfb25fYXVjdGlvbgQIbmZ0T3duZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAgpfbmZ0X293bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUJYXVjdGlvbklkAgtfbmZ0X3N0YXR1cwIRQXVjdGlvbl90aW1lIG92ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQFA25pbAFpAQt3aXRoZHJhd0JpZAIHYmlkVHhJZBBjdXJyZW50X2N1cnJlbmN5BAZjYWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMEC2FzaW1pU3RyaW5nAiw5eWhKRGZXalBwdjZ0RmpXUkQxQUp5QlF3YXVzSmYyWmR4ekxuODZVa25ucQQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAphbW91bnRVbml0CQDZBAEFEGN1cnJlbnRfY3VycmVuY3kECGJpZFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFB2JpZFR4SWQCDF9oaWdoZXN0X2JpZAQIYXNCaWRkZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUHYmlkVHhJZAIHX3dpbm5lcgQJYmlkRm9yTkZUCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFB2JpZFR4SWQCB19uZnRfaWQDCQAAAgUQY3VycmVudF9jdXJyZW5jeQULYXNpbWlTdHJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAghfbmZ0X2JpZAIIV0lUSERSQVcJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAgdfbmZ0X2lkBQliaWRGb3JORlQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdiaWRUeElkAhxfYmlkZGluZ19wcmljZV9yZWZ1bmRfYW1vdW50BQhiaWRQcmljZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAQ1wYXJzZUludFZhbHVlAQUIYmlkUHJpY2UFCmFtb3VudFVuaXQFA25pbAMJAAACBRBjdXJyZW50X2N1cnJlbmN5AgVXQVZFUwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCCF9uZnRfYmlkAghXSVRIRFJBVwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCB19uZnRfaWQFCWJpZEZvck5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB2JpZFR4SWQCHF9iaWRkaW5nX3ByaWNlX3JlZnVuZF9hbW91bnQFCGJpZFByaWNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBBQhiaWRQcmljZQUEdW5pdAUDbmlsBQNuaWwBaQEQYXV0b21hdGVGdW5jdGlvbgIJYXVjdGlvbklkEGN1cnJlbnRfY3VycmVuY3kEBmNhbGxlcggIBQFpBmNhbGxlcgVieXRlcwQFbmZ0SWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg9fbmZ0X29uX2F1Y3Rpb24ECG5mdE93bmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFCWF1Y3Rpb25JZAIKX25mdF9vd25lcgQLYXNpbWlTdHJpbmcCLDl5aEpEZldqUHB2NnRGaldSRDFBSnlCUXdhdXNKZjJaZHh6TG44NlVrbm5xBAphbW91bnRVbml0CQDZBAEFEGN1cnJlbnRfY3VycmVuY3kEFWdldExhc3RXaW5uZXJCaWRQcmljZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDF9oaWdoZXN0X2JpZAQUZ2V0TGFzdFdpbm5lckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUJYXVjdGlvbklkAg5fd2lubmVyX29mX25mdAQNYmlkZGluZ1dpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQlhdWN0aW9uSWQCDl93aW5uZXJfb2ZfbmZ0AwkAAAIFDWJpZGRpbmdXaW5uZXICATAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFCG5mdE93bmVyAAEJANkEAQUFbmZ0SWQFA25pbAMDCQECIT0CBQ1iaWRkaW5nV2lubmVyAgEwCQAAAgUQY3VycmVudF9jdXJyZW5jeQULYXNpbWlTdHJpbmcHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQhuZnRPd25lcgABCQDZBAEFBW5mdElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFCmFtb3VudFVuaXQFA25pbAMDCQECIT0CBQ1iaWRkaW5nV2lubmVyAgEwCQAAAgUQY3VycmVudF9jdXJyZW5jeQIFV0FWRVMHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQhuZnRPd25lcgABCQDZBAEFBW5mdElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRRnZXRMYXN0V2lubmVyQWRkcmVzcwkBDXBhcnNlSW50VmFsdWUBBRVnZXRMYXN0V2lubmVyQmlkUHJpY2UFBHVuaXQFA25pbAUDbmlsAWkBFGJ1eUFsbFByb2R1Y3RzX2FzaW1pAgduZnRJbmZvC3RvdGFsYW1vdW50BAVidXllcggFAWkGY2FsbGVyBAxidXllckJhbGFuY2UJAPAHAgUFYnV5ZXIFBXRlYW1zBAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAl0b3RhbGNvc3QJAQ1wYXJzZUludFZhbHVlAQULdG90YWxhbW91bnQEC3BsYXRmb3JtZmVlCQBoAgkAaQIFCXRvdGFsY29zdADoBwAZBAlmaW5hbGNvc3QJAGQCBQl0b3RhbGNvc3QFC3BsYXRmb3JtZmVlBARuZlQxCQC1CQIJAJEDAgUHbmZ0SW5mbwAAAgFfBARuZlQyCQC1CQIJAJEDAgUHbmZ0SW5mbwABAgFfBARuZlQzCQC1CQIJAJEDAgUHbmZ0SW5mbwACAgFfBARuZlQ0CQC1CQIJAJEDAgUHbmZ0SW5mbwADAgFfBARuZlQ1CQC1CQIJAJEDAgUHbmZ0SW5mbwAEAgFfAwkAZgIFCWZpbmFsY29zdAUGYW1vdW50CQACAQIceW91ciBwYXlpbmcgYW1vdW50IGlzIHdyb25nIAMJAGYCBQZhbW91bnQFDGJ1eWVyQmFsYW5jZQkAAgECOkJ1eWVyIGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvIGNvbXBsZXRlIHRoZSBwdXJjaGFzZS4DCQAAAgkAkAMBBQduZnRJbmZvAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAACQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAg9maXJzdF9uZnRfSW5mbz0CDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQkArAICAgVwcmljZQkAkQMCBQRuZlQxAAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQxAAEJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACAGQFBXRlYW1zBQNuaWwDCQAAAgkAkAMBBQduZnRJbmZvAAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPZmlyc3RfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQxAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQIFcHJpY2UJAJEDAgUEbmZUMQACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEHNlY29uZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDIAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMgABAgVwcmljZQkAkQMCBQRuZlQyAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQxAAIAZAUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMgABCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDIAAgBkBQV0ZWFtcwUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwADCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQxAAEJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMQACAGQFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDIAAQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIAZAUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMwABCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDMAAgBkBQV0ZWFtcwUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwAECQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBmb3VydGhfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQ0AAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDQAAQIFcHJpY2UJAJEDAgUEbmZUNAACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQ0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgBkBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMgACAGQFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDMAAQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQzAAIAZAUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUNAABCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDQAAgBkBQV0ZWFtcwUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwAFCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3RoaXJkX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMwAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQzAAECBXByaWNlCQCRAwIFBG5mVDMAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBmb3VydGhfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQ0AAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDQAAQIFcHJpY2UJAJEDAgUEbmZUNAACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpZnRoX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUNQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQ1AAECBXByaWNlCQCRAwIFBG5mVDUAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUNAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQ1AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMQABCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgBkBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMgACAGQFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDMAAQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQzAAIAZAUFdGVhbXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUNAABCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDQAAgBkBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQ1AAEJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUNQACAGQFBXRlYW1zBQNuaWwDCQBmAgkAkAMBBQduZnRJbmZvAAUJAAIBAi1zb3JyeSEgbWF4aW11bSBsaW1pdCBvZiB5b3VyICBjYXJ0IGlzIDUgaXRlbXMFA25pbAFpARRidXlBbGxQcm9kdWN0c193YXZlcwIHbmZ0SW5mbwt0b3RhbGFtb3VudAQFYnV5ZXIIBQFpBmNhbGxlcgQMYnV5ZXJCYWxhbmNlCQDwBwIFBWJ1eWVyBQVXQVZFUwQGYW1vdW50CQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQJdG90YWxjb3N0CQENcGFyc2VJbnRWYWx1ZQEFC3RvdGFsYW1vdW50BAtwbGF0Zm9ybWZlZQkAaAIJAGkCBQl0b3RhbGNvc3QA6AcAGQQJZmluYWxjb3N0CQBkAgUJdG90YWxjb3N0BQtwbGF0Zm9ybWZlZQQEbmZUMQkAtQkCCQCRAwIFB25mdEluZm8AAAIBXwQEbmZUMgkAtQkCCQCRAwIFB25mdEluZm8AAQIBXwQEbmZUMwkAtQkCCQCRAwIFB25mdEluZm8AAgIBXwQEbmZUNAkAtQkCCQCRAwIFB25mdEluZm8AAwIBXwQEbmZUNQkAtQkCCQCRAwIFB25mdEluZm8ABAIBXwMJAGYCBQlmaW5hbGNvc3QFBmFtb3VudAkAAgECHHlvdXIgcGF5aW5nIGFtb3VudCBpcyB3cm9uZyADCQBmAgUGYW1vdW50BQxidXllckJhbGFuY2UJAAIBAjpCdXllciBkb2VzIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byBjb21wbGV0ZSB0aGUgcHVyY2hhc2UuAwkAAAIJAJADAQUHbmZ0SW5mbwABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgUEdW5pdAUDbmlsAwkAAAIJAJADAQUHbmZ0SW5mbwACCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD2ZpcnN0X25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMQAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQxAAECBXByaWNlCQCRAwIFBG5mVDEAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBzZWNvbmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQyAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDIAAQIFcHJpY2UJAJEDAgUEbmZUMgACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQxAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQxAAIFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMgABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMgACBQR1bml0BQNuaWwDCQAAAgkAkAMBBQduZnRJbmZvAAMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPZmlyc3RfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQxAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQIFcHJpY2UJAJEDAgUEbmZUMQACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEHNlY29uZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDIAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMgABAgVwcmljZQkAkQMCBQRuZlQyAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPdGhpcmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQzAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDMAAQIFcHJpY2UJAJEDAgUEbmZUMwACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMwABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMwACBQR1bml0BQNuaWwDCQAAAgkAkAMBBQduZnRJbmZvAAQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPZmlyc3RfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQxAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDEAAQIFcHJpY2UJAJEDAgUEbmZUMQACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEHNlY29uZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDIAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMgABAgVwcmljZQkAkQMCBQRuZlQyAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPdGhpcmRfbmZ0X0luZm89AgVuZnRJZAkAkQMCBQRuZlQzAAACDnNlbGxlcl9hZGRyZXNzCQCRAwIFBG5mVDMAAQIFcHJpY2UJAJEDAgUEbmZUMwACCQCsAgICBWJ1eWVyCQClCAEFBWJ1eWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEGZvdXJ0aF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDQAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUNAABAgVwcmljZQkAkQMCBQRuZlQ0AAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQxAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQxAAIFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMgABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMgACBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDMAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDMAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQ0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQ0AAIFBHVuaXQFA25pbAMJAAACCQCQAwEFB25mdEluZm8ABQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9maXJzdF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDEAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMQABAgVwcmljZQkAkQMCBQRuZlQxAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQc2Vjb25kX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUMgAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQyAAECBXByaWNlCQCRAwIFBG5mVDIAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg90aGlyZF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDMAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUMwABAgVwcmljZQkAkQMCBQRuZlQzAAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQZm91cnRoX25mdF9JbmZvPQIFbmZ0SWQJAJEDAgUEbmZUNAAAAg5zZWxsZXJfYWRkcmVzcwkAkQMCBQRuZlQ0AAECBXByaWNlCQCRAwIFBG5mVDQAAgkArAICAgVidXllcgkApQgBBQVidXllcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9maWZ0aF9uZnRfSW5mbz0CBW5mdElkCQCRAwIFBG5mVDUAAAIOc2VsbGVyX2FkZHJlc3MJAJEDAgUEbmZUNQABAgVwcmljZQkAkQMCBQRuZlQ1AAIJAKwCAgIFYnV5ZXIJAKUIAQUFYnV5ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDEAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUMgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBWJ1eWVyAAEJANkEAQkAkQMCBQRuZlQzAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFYnV5ZXIAAQkA2QQBCQCRAwIFBG5mVDQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQVidXllcgABCQDZBAEJAJEDAgUEbmZUNQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDEAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQyAAIFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUEbmZUMwABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbmZUMwACBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBCQCRAwIFBG5mVDQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBG5mVDQAAgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQkAkQMCBQRuZlQ1AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRuZlQ1AAIFBHVuaXQFA25pbAMJAGYCCQCQAwEFB25mdEluZm8ABQkAAgECLXNvcnJ5ISBtYXhpbXVtIGxpbWl0IG9mIHlvdXIgIGNhcnQgaXMgNSBpdGVtcwUDbmlsAD2k9MM=", "height": 2509947, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ExKBYU8N9FURKa5xxPjK3MvydBi5ewxyoJAG1V2EQ1FK Next: Cv2RHsB9SX6WJTTv4yXZGVWbB124GgtgSTaLERJL2Mwy Diff:
OldNewDifferences
1717
1818 let h = "bid"
1919
20-let i = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
20+let i = true
2121
22-let j = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
22+let j = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
2323
24-func k (l) = {
25- let m = assetInfo(l)
26- if ($isInstanceOf(m, "Asset"))
24+let k = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
25+
26+func l (m) = {
27+ let n = assetInfo(m)
28+ if ($isInstanceOf(n, "Asset"))
2729 then {
28- let n = m
29- if (if ((n.decimals == 0))
30- then (n.quantity == 1)
30+ let o = n
31+ if (if ((o.decimals == 0))
32+ then (o.quantity == 1)
3133 else false)
32- then (n.reissuable == false)
34+ then (o.reissuable == false)
3335 else false
3436 }
3537 else false
3638 }
3739
3840
39-@Callable(o)
40-func createNft (p,q,r,s,t,u,v,w,x) = {
41- let y = Issue(p, v, 1, 0, false)
42- let z = calculateAssetId(y)
43- let A = o.transactionId
44-[y, ScriptTransfer(o.caller, 1, z), StringEntry(((toBase58String(z) + a) + "Owner"), toString(o.caller)), StringEntry(((toBase58String(z) + a) + "nft_type"), s), StringEntry(((toBase58String(z) + a) + "nft_tags"), t), StringEntry(((toBase58String(z) + a) + "nft_dAppAddress"), r), IntegerEntry(((toBase58String(z) + a) + "nft_selling_price"), u), StringEntry(((toBase58String(z) + a) + "nft_onSell"), w), StringEntry(((toBase58String(z) + a) + "nft_data"), x), StringEntry(((toBase58String(A) + a) + "issue_nft"), toBase58String(z))]
41+@Callable(p)
42+func createNft (q,r,s,t,u,v,w,x,y) = {
43+ let z = Issue(q, w, 1, 0, false)
44+ let A = calculateAssetId(z)
45+ let B = p.transactionId
46+[z, ScriptTransfer(p.caller, 1, A), StringEntry(((toBase58String(A) + a) + "Owner"), toString(p.caller)), StringEntry(((toBase58String(A) + a) + "nft_type"), t), StringEntry(((toBase58String(A) + a) + "nft_tags"), u), StringEntry(((toBase58String(A) + a) + "nft_dAppAddress"), s), IntegerEntry(((toBase58String(A) + a) + "nft_selling_price"), v), StringEntry(((toBase58String(A) + a) + "nft_onSell"), x), StringEntry(((toBase58String(A) + a) + "nft_data"), y), StringEntry(((toBase58String(B) + a) + "issue_nft"), toBase58String(A))]
4547 }
4648
4749
4850
49-@Callable(o)
50-func sellNFT (B,C) = {
51- let A = o.transactionId
52- let D = o.caller.bytes
53- let E = $Tuple2(value(o.payments[0].assetId), value(o.payments[0].amount))
54- let F = E._1
55- let G = E._2
56- if (!(k(F)))
51+@Callable(p)
52+func sellNFT (C,D) = {
53+ let B = p.transactionId
54+ let E = p.caller.bytes
55+ let F = $Tuple2(value(p.payments[0].assetId), value(p.payments[0].amount))
56+ let G = F._1
57+ let H = F._2
58+ if (!(l(G)))
5759 then throw("Token is not NFT")
58- else [StringEntry(((c + a) + toBase58String(value(o.payments[0].assetId))), B), StringEntry(((toString(o.caller) + a) + d), (((toBase58String(F) + a) + toString(G)) + C))]
60+ else [StringEntry(((c + a) + toBase58String(value(p.payments[0].assetId))), C), StringEntry(((toString(p.caller) + a) + d), (((toBase58String(G) + a) + toString(H)) + D))]
5961 }
6062
6163
6264
63-@Callable(o)
64-func buyNFT (H,I) = {
65- let l = fromBase58String(H)
66- let J = value(o.payments[0].amount)
65+@Callable(p)
66+func buyNFT (I,J) = {
67+ let m = fromBase58String(I)
6768 let K = {
68- let m = getString(this, (("nft_" + I) + "_owner"))
69- if ($isInstanceOf(m, "String"))
69+ let n = getString(this, (("nft_" + J) + "_owner"))
70+ if ($isInstanceOf(n, "String"))
7071 then {
71- let L = m
72+ let L = n
7273 L
7374 }
7475 else false
7576 }
76- let B = getStringValue(((((c + a) + H) + "_") + I))
77- let M = ((J / 1000) * 975)
78- let N = ((J / 1000) * 25)
79- if ((I == toString(o.caller)))
77+ let C = getStringValue(((((c + a) + I) + "_") + J))
78+ let M = value(p.payments[0].amount)
79+ let N = (M - ((M / 1000) * 25))
80+ let O = (M - N)
81+ if ((J == toString(p.caller)))
8082 then throw("current Owner of NFT not able to purchase")
81- else if ((o.payments[0].assetId == f))
82- then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), M, f), StringEntry((("nft_" + H) + "platform_fee"), toString(N)), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(J))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))]
83- else if ((o.payments[0].assetId == unit))
84- then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), M, unit), StringEntry((("nft_" + H) + "platform_fee"), toString(N)), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(J))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))]
83+ else if ((p.payments[0].assetId == f))
84+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(J)), N, f), StringEntry((("nft_" + I) + "platform_fee"), toString(O)), StringEntry(((toString(p.caller) + a) + b), ((I + a) + toString(M))), DeleteEntry((("nft_" + J) + "_owner")), StringEntry((("nft_" + J) + "_owner"), toString(p.caller)), StringEntry(((I + a) + "_owner"), toString(p.caller))]
85+ else if ((p.payments[0].assetId == unit))
86+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(J)), N, unit), StringEntry((("nft_" + I) + "platform_fee"), toString(O)), StringEntry(((toString(p.caller) + a) + b), ((I + a) + toString(M))), DeleteEntry((("nft_" + J) + "_owner")), StringEntry((("nft_" + J) + "_owner"), toString(p.caller)), StringEntry(((I + a) + "_owner"), toString(p.caller))]
8587 else nil
8688 }
8789
8890
8991
90-@Callable(o)
91-func cancelSell (O) = {
92- let A = toBase58String(o.transactionId)
93- let D = o.caller.bytes
94-[StringEntry(((A + O) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(D), 1, fromBase58String(O))]
92+@Callable(p)
93+func cancelSell (P) = {
94+ let B = toBase58String(p.transactionId)
95+ let E = p.caller.bytes
96+[StringEntry(((B + P) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(E), 1, fromBase58String(P))]
9597 }
9698
9799
98100
99-@Callable(o)
100-func addAuction (P,Q,R,S,C) = {
101- let A = toBase58String(o.transactionId)
102- let O = value(o.payments[0].assetId)
103- let B = value(R)
104- let T = (lastBlock.height + S)
105- let U = o.caller.bytes
106- let V = {
107- let m = getString(this, (((toBase58String(O) + a) + "nft_status_") + toBase58String(U)))
108- if ($isInstanceOf(m, "String"))
101+@Callable(p)
102+func addAuction (Q,R,S,T,D) = {
103+ let B = toBase58String(p.transactionId)
104+ let P = value(p.payments[0].assetId)
105+ let C = value(S)
106+ let U = (lastBlock.height + T)
107+ let V = p.caller.bytes
108+ let W = {
109+ let n = getString(this, (((toBase58String(P) + a) + "nft_status_") + toBase58String(V)))
110+ if ($isInstanceOf(n, "String"))
109111 then {
110- let L = m
112+ let L = n
111113 true
112114 }
113115 else false
114116 }
115- if ((V == true))
117+ if ((W == true))
116118 then throw("Already in auction list")
117- else if ((S > e))
118- then throw(("Duration is too long. Must be less than or equal to 7 " + toString(e)))
119- else if ((o.payments[0].assetId == unit))
119+ else if ((T > e))
120+ then throw(("Duration is too long. Must be less than or equal to 30 " + toString(e)))
121+ else if ((p.payments[0].assetId == unit))
120122 then throw("NFT not attached")
121- else if ((o.payments[0].assetId == f))
123+ else if ((p.payments[0].assetId == f))
122124 then throw("NFT not attached")
123- else [StringEntry(((A + "nft_start_auction_date") + toBase58String(U)), P), StringEntry(((A + "nft_end_auction_date") + toBase58String(U)), Q), StringEntry((A + "_nft_start_price"), R), StringEntry((A + "_nft_owner"), toString(o.caller)), StringEntry((A + "_nft_on_auction"), toBase58String(O)), StringEntry((A + "_previous_bidder"), "none"), StringEntry((A + "_highest_bid"), "0"), StringEntry((A + "_winner_of_nft"), "0"), StringEntry((A + "_bidder_count"), "0"), StringEntry((A + "_nft_status"), "OPEN")]
125+ else [StringEntry(((B + "nft_start_auction_date") + toBase58String(V)), Q), StringEntry(((B + "nft_end_auction_date") + toBase58String(V)), R), StringEntry((B + "_nft_start_price"), S), StringEntry((B + "_nft_owner"), toString(p.caller)), StringEntry((B + "_nft_on_auction"), toBase58String(P)), StringEntry((B + "_previous_bidder"), "none"), StringEntry((B + "_highest_bid"), "0"), StringEntry((B + "_winner_of_nft"), "0"), StringEntry((B + "_bidder_count"), "0"), StringEntry((B + "_nft_status"), "OPEN")]
124126 }
125127
126128
127129
128-@Callable(o)
129-func placeBid (W,O,q,X,Y) = {
130- let A = toBase58String(o.transactionId)
131- let U = o.caller.bytes
132- let l = fromBase58String(O)
133- let Z = o.payments[0].assetId
134- let aa = o.payments[0].amount
135- let ab = getStringValue(this, (W + "_highest_bid"))
136- let ac = getString(this, (W + "_previous_bidder"))
137- let ad = getStringValue(this, (W + "_bidder_count"))
138- let ae = getStringValue(this, (W + "_winner_of_nft"))
139- let V = getStringValue(this, (W + "_nft_status"))
140- if ((V != "OPEN"))
130+@Callable(p)
131+func placeBid (X,P,r,Y,Z) = {
132+ let B = toBase58String(p.transactionId)
133+ let V = p.caller.bytes
134+ let m = fromBase58String(P)
135+ let aa = p.payments[0].assetId
136+ let ab = p.payments[0].amount
137+ let ac = getStringValue(this, (X + "_highest_bid"))
138+ let ad = getString(this, (X + "_previous_bidder"))
139+ let ae = getStringValue(this, (X + "_bidder_count"))
140+ let af = getStringValue(this, (X + "_winner_of_nft"))
141+ let W = getStringValue(this, (X + "_nft_status"))
142+ if ((W != "OPEN"))
141143 then throw("Not open for auction")
142- else if ((parseIntValue(ab) >= aa))
144+ else if ((parseIntValue(ac) >= ab))
143145 then throw("Bid is less then starting/highest Bid")
144- else if ((ab == "0"))
145- then [StringEntry((W + "_highest_bid"), toString(aa)), StringEntry((W + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((W + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((W + "_nft_id"), toBase58String(l)), StringEntry((W + "_nft_owner"), q), StringEntry((((A + "_") + W) + "_highest_bid"), toString(aa)), StringEntry((((A + "_") + W) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + W) + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((((A + "_") + W) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + W) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(U)), StringEntry((A + "_bid_price_place"), X), StringEntry((A + "_previous_bid_amount_refund_to_address"), ae), StringEntry((A + "_prevoius_bid_amount_refund"), ab)]
146- else if ((ab != "0"))
147- then [ScriptTransfer(Address(fromBase58String(ae)), parseIntValue(ab), Z), StringEntry((A + "_previous_bid_amount_refund_to_address"), ae), StringEntry((A + "_prevoius_bid_amount_refund"), ab), StringEntry((W + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((W + "_highest_bid"), toString(aa)), StringEntry((W + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((W + "_nft_id"), toBase58String(l)), StringEntry((W + "_nft_owner"), q), StringEntry((((A + "_") + W) + "_highest_bid"), toString(aa)), StringEntry((((A + "_") + W) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + W) + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((((A + "_") + W) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + W) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(U)), StringEntry((A + "_bid_price_place"), X)]
146+ else if ((ac == "0"))
147+ then [StringEntry((X + "_highest_bid"), toString(ab)), StringEntry((X + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((X + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((X + "_nft_id"), toBase58String(m)), StringEntry((X + "_nft_owner"), r), StringEntry((((B + "_") + X) + "_highest_bid"), toString(ab)), StringEntry((((B + "_") + X) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((B + "_") + X) + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((((B + "_") + X) + "_nft_id"), toBase58String(m)), StringEntry((((B + "_") + X) + "_nft_owner"), r), StringEntry((B + "_bid_for_nft_by"), toBase58String(V)), StringEntry((B + "_bid_price_place"), Y), StringEntry((B + "_previous_bid_amount_refund_to_address"), af), StringEntry((B + "_prevoius_bid_amount_refund"), ac)]
148+ else if ((ac != "0"))
149+ then [ScriptTransfer(Address(fromBase58String(af)), parseIntValue(ac), aa), StringEntry((B + "_previous_bid_amount_refund_to_address"), af), StringEntry((B + "_prevoius_bid_amount_refund"), ac), StringEntry((X + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((X + "_highest_bid"), toString(ab)), StringEntry((X + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((X + "_nft_id"), toBase58String(m)), StringEntry((X + "_nft_owner"), r), StringEntry((((B + "_") + X) + "_highest_bid"), toString(ab)), StringEntry((((B + "_") + X) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((B + "_") + X) + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((((B + "_") + X) + "_nft_id"), toBase58String(m)), StringEntry((((B + "_") + X) + "_nft_owner"), r), StringEntry((B + "_bid_for_nft_by"), toBase58String(V)), StringEntry((B + "_bid_price_place"), Y)]
148150 else nil
149151 }
150152
151153
152154
153-@Callable(o)
154-func acceptBidOffer (W,O,af,Y) = {
155- let ag = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
156- let A = toBase58String(o.transactionId)
157- let ah = fromBase58String(Y)
158- let U = o.caller.bytes
159- let l = fromBase58String(O)
160- let ai = getStringValue(this, (W + "_highest_bid"))
161- let aj = ((parseIntValue(ai) / 1000) * 975)
162- let N = ((parseIntValue(ai) / 1000) * 25)
163- let ak = getStringValue(this, (W + "_winner_of_nft"))
164- if ((Y == ag))
165- then [ScriptTransfer(Address(U), aj, ah), ScriptTransfer(Address(fromBase58String(ak)), 1, l), StringEntry("platform_fee", toString(N)), StringEntry((A + "_amount_paid_to_owner"), ai), StringEntry((A + "_nft_transfer_to"), ak), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((W + "_amount_paid_to_owner"), ai), StringEntry((W + "_nft_transfer_to"), ak), StringEntry((W + "_nft_status"), "REWARDED")]
166- else if ((Y == "WAVES"))
167- then [ScriptTransfer(Address(U), aj, unit), ScriptTransfer(Address(fromBase58String(ak)), 1, l), StringEntry("platform_fee", toString(N)), StringEntry((A + "_amount_paid_to_owner"), ai), StringEntry((A + "_nft_transfer_to"), ak), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((W + "_amount_paid_to_owner"), ai), StringEntry((W + "_nft_transfer_to"), ak), StringEntry((W + "_nft_status"), "REWARDED")]
155+@Callable(p)
156+func acceptBidOffer (X,P,ag,Z) = {
157+ let ah = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
158+ let B = toBase58String(p.transactionId)
159+ let ai = fromBase58String(Z)
160+ let V = p.caller.bytes
161+ let m = fromBase58String(P)
162+ let aj = getStringValue(this, (X + "_highest_bid"))
163+ let ak = ((parseIntValue(aj) / 1000) * 975)
164+ let O = ((parseIntValue(aj) / 1000) * 25)
165+ let al = getStringValue(this, (X + "_winner_of_nft"))
166+ if ((Z == ah))
167+ then [ScriptTransfer(Address(V), ak, ai), ScriptTransfer(Address(fromBase58String(al)), 1, m), StringEntry((B + "_amount_paid_to_owner"), aj), StringEntry((B + "_nft_transfer_to"), al), StringEntry((B + "_nft_status"), "REWARDED"), StringEntry((X + "_amount_paid_to_owner"), aj), StringEntry((X + "_nft_transfer_to"), al), StringEntry((X + "_nft_status"), "REWARDED")]
168+ else if ((Z == "WAVES"))
169+ then [ScriptTransfer(Address(V), parseIntValue(aj), unit), ScriptTransfer(Address(fromBase58String(al)), 1, m), StringEntry((B + "_amount_paid_to_owner"), aj), StringEntry((B + "_nft_transfer_to"), al), StringEntry((B + "_nft_status"), "REWARDED"), StringEntry((X + "_amount_paid_to_owner"), aj), StringEntry((X + "_nft_transfer_to"), al), StringEntry((X + "_nft_status"), "REWARDED")]
168170 else nil
169171 }
170172
171173
172174
173-@Callable(o)
174-func cancelAuction (W,Y) = {
175- let A = toBase58String(o.transactionId)
176- let U = o.caller.bytes
177- let al = getStringValue(this, (W + "_nft_status"))
178- let am = getStringValue(this, (W + "_winner_of_nft"))
179- let an = getStringValue(this, (W + "_nft_owner"))
180- let O = getStringValue(this, (W + "_nft_on_auction"))
181- let ao = getStringValue(this, (W + "_highest_bid"))
182- if ((am == "0"))
183- then [StringEntry(((A + W) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(an)), 1, fromBase58String(O))]
184- else if ((am != "0"))
175+@Callable(p)
176+func cancelAuction (X) = {
177+ let B = toBase58String(p.transactionId)
178+ let V = p.caller.bytes
179+ let am = getStringValue(this, (X + "_nft_status"))
180+ let an = getStringValue(this, (X + "_winner_of_nft"))
181+ let ao = getStringValue(this, (X + "_nft_owner"))
182+ let P = getStringValue(this, (X + "_nft_on_auction"))
183+ let ap = getStringValue(this, (X + "_highest_bid"))
184+ if ((an == "0"))
185+ then [StringEntry(((B + X) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P))]
186+ else if ((an != "0"))
185187 then throw("soory you can't cancel it because already auction placed by someone")
186188 else nil
187189 }
188190
189191
190192
191-@Callable(o)
192-func manualFundTransfer (ap,aq) = {
193- let U = o.caller.bytes
194- let ar = fromBase58String(ap)
195- let J = o.payments[0].amount
196- let as = ((J / 1000) * 975)
197- let N = ((J / 1000) * 25)
198- if ((o.payments[0].assetId == unit))
199- then [IntegerEntry((toBase58String(U) + "_transfer"), J), StringEntry("platform_fee", toString(N)), StringEntry((toBase58String(U) + "_transfer_to"), ap), ScriptTransfer(Address(ar), as, unit)]
200- else if ((o.payments[0].assetId == f))
201- then [IntegerEntry((toBase58String(U) + "_transfer"), J), StringEntry("platform_fee", toString(N)), StringEntry((toBase58String(U) + "_transfer_to"), ap), ScriptTransfer(Address(ar), as, f)]
193+@Callable(p)
194+func manualFundTransfer (aq,ar) = {
195+ let as = p.caller.bytes
196+ let at = fromBase58String(aq)
197+ let M = p.payments[0].amount
198+ let au = parseIntValue(ar)
199+ let O = ((M / 1000) * 25)
200+ let av = (M + O)
201+ if ((av != M))
202+ then throw("please submit the sum of actual amount and platform")
203+ else if ((p.payments[0].assetId == unit))
204+ then [IntegerEntry((toBase58String(as) + "_transfer"), M), StringEntry("platform_fee", toString(O)), StringEntry((toBase58String(as) + "_transfer_to"), aq), ScriptTransfer(Address(at), au, unit)]
205+ else if ((p.payments[0].assetId == f))
206+ then [IntegerEntry((toBase58String(as) + "_transfer"), M), StringEntry("platform_fee", toString(O)), StringEntry((toBase58String(as) + "_transfer_to"), aq), ScriptTransfer(Address(at), au, f)]
207+ else nil
208+ }
209+
210+
211+
212+@Callable(p)
213+func backValue (X) = {
214+ let V = p.caller.bytes
215+ let P = getStringValue(this, (X + "_nft_on_auction"))
216+ let ao = getStringValue(this, (X + "_nft_owner"))
217+[StringEntry((X + "_nft_status"), "Auction_time over"), ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P))]
218+ }
219+
220+
221+
222+@Callable(p)
223+func withdrawBid (aw,Z) = {
224+ let V = p.caller.bytes
225+ let ah = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
226+ let B = toBase58String(p.transactionId)
227+ let ai = fromBase58String(Z)
228+ let ax = getStringValue(this, (aw + "_highest_bid"))
229+ let ay = getStringValue(this, (aw + "_winner"))
230+ let az = getStringValue(this, (aw + "_nft_id"))
231+ if ((Z == ah))
232+ then [StringEntry((aw + "_nft_bid"), "WITHDRAW"), StringEntry((aw + "_nft_id"), az), StringEntry((aw + "_bidding_price_refund_amount"), ax), ScriptTransfer(p.caller, parseIntValue(ax), ai)]
233+ else if ((Z == "WAVES"))
234+ then [StringEntry((aw + "_nft_bid"), "WITHDRAW"), StringEntry((aw + "_nft_id"), az), StringEntry((aw + "_bidding_price_refund_amount"), ax), ScriptTransfer(p.caller, parseIntValue(ax), unit)]
202235 else nil
203236 }
204237
205238
206239
207-@Callable(o)
208-func backValue (W) = {
209- let U = o.caller.bytes
210- let O = getStringValue(this, (W + "_nft_on_auction"))
211- let an = getStringValue(this, (W + "_nft_owner"))
212-[StringEntry((W + "_nft_status"), "Auction_time over"), ScriptTransfer(Address(fromBase58String(an)), 1, fromBase58String(O))]
240+@Callable(p)
241+func automateFunction (X,Z) = {
242+ let V = p.caller.bytes
243+ let P = getStringValue(this, (X + "_nft_on_auction"))
244+ let ao = getStringValue(this, (X + "_nft_owner"))
245+ let ah = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
246+ let ai = fromBase58String(Z)
247+ let ac = getStringValue(this, (X + "_highest_bid"))
248+ let af = getStringValue(this, (X + "_winner_of_nft"))
249+ let an = getStringValue(this, (X + "_winner_of_nft"))
250+ if ((an == "0"))
251+ then [ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P))]
252+ else if (if ((an != "0"))
253+ then (Z == ah)
254+ else false)
255+ then [ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P)), ScriptTransfer(Address(fromBase58String(af)), parseIntValue(ac), ai)]
256+ else if (if ((an != "0"))
257+ then (Z == "WAVES")
258+ else false)
259+ then [ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P)), ScriptTransfer(Address(fromBase58String(af)), parseIntValue(ac), unit)]
260+ else nil
213261 }
214262
215263
216264
217-@Callable(o)
218-func withdrawBid (at,Y) = {
219- let U = o.caller.bytes
220- let ag = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
221- let A = toBase58String(o.transactionId)
222- let ah = fromBase58String(Y)
223- let au = getStringValue(this, (at + "_highest_bid"))
224- let av = getStringValue(this, (at + "_winner"))
225- let aw = getStringValue(this, (at + "_nft_id"))
226- if ((Y == ag))
227- then [StringEntry((at + "_nft_bid"), "WITHDRAW"), StringEntry((at + "_nft_id"), aw), StringEntry((at + "_bidding_price_refund_amount"), au), ScriptTransfer(o.caller, parseIntValue(au), ah)]
228- else if ((Y == "WAVES"))
229- then [StringEntry((at + "_nft_bid"), "WITHDRAW"), StringEntry((at + "_nft_id"), aw), StringEntry((at + "_bidding_price_refund_amount"), au), ScriptTransfer(o.caller, parseIntValue(au), unit)]
230- else nil
265+@Callable(p)
266+func buyAllProducts_asimi (aA,aB) = {
267+ let aC = p.caller
268+ let aD = assetBalance(aC, f)
269+ let M = value(p.payments[0].amount)
270+ let av = parseIntValue(aB)
271+ let aE = ((av / 1000) * 25)
272+ let aF = (av + aE)
273+ let aG = split(aA[0], "_")
274+ let aH = split(aA[1], "_")
275+ let aI = split(aA[2], "_")
276+ let aJ = split(aA[3], "_")
277+ let aK = split(aA[4], "_")
278+ if ((aF > M))
279+ then throw("your paying amount is wrong ")
280+ else if ((M > aD))
281+ then throw("Buyer does not have enough funds to complete the purchase.")
282+ else if ((size(aA) == 1))
283+ then [StringEntry((("first_nft_Info=" + "nftId") + aG[0]), ("buyer" + toString(aC))), StringEntry((("first_nft_Info=" + "seller_address") + aG[1]), ("price" + aG[2])), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f)]
284+ else if ((size(aA) == 2))
285+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f)]
286+ else if ((size(aA) == 3))
287+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aI[1])), (parseIntValue(aI[2]) * 100), f)]
288+ else if ((size(aA) == 4))
289+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aI[1])), (parseIntValue(aI[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aJ[1])), (parseIntValue(aJ[2]) * 100), f)]
290+ else if ((size(aA) == 5))
291+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aK[0]) + "seller_address") + aK[1]) + "price") + aK[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(aC, 1, fromBase58String(aK[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aI[1])), (parseIntValue(aI[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aJ[1])), (parseIntValue(aJ[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aK[1])), (parseIntValue(aK[2]) * 100), f)]
292+ else if ((size(aA) > 5))
293+ then throw("sorry! maximum limit of your cart is 5 items")
294+ else nil
295+ }
296+
297+
298+
299+@Callable(p)
300+func buyAllProducts_waves (aA,aB) = {
301+ let aC = p.caller
302+ let aD = assetBalance(aC, g)
303+ let M = value(p.payments[0].amount)
304+ let av = parseIntValue(aB)
305+ let aE = ((av / 1000) * 25)
306+ let aF = (av + aE)
307+ let aG = split(aA[0], "_")
308+ let aH = split(aA[1], "_")
309+ let aI = split(aA[2], "_")
310+ let aJ = split(aA[3], "_")
311+ let aK = split(aA[4], "_")
312+ if ((aF > M))
313+ then throw("your paying amount is wrong ")
314+ else if ((M > aD))
315+ then throw("Buyer does not have enough funds to complete the purchase.")
316+ else if ((size(aA) == 1))
317+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit)]
318+ else if ((size(aA) == 2))
319+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit)]
320+ else if ((size(aA) == 3))
321+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit), ScriptTransfer(Address(fromBase58String(aI[1])), parseIntValue(aI[2]), unit)]
322+ else if ((size(aA) == 4))
323+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit), ScriptTransfer(Address(fromBase58String(aI[1])), parseIntValue(aI[2]), unit), ScriptTransfer(Address(fromBase58String(aJ[1])), parseIntValue(aJ[2]), unit)]
324+ else if ((size(aA) == 5))
325+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aK[0]) + "seller_address") + aK[1]) + "price") + aK[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(aC, 1, fromBase58String(aK[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit), ScriptTransfer(Address(fromBase58String(aI[1])), parseIntValue(aI[2]), unit), ScriptTransfer(Address(fromBase58String(aJ[1])), parseIntValue(aJ[2]), unit), ScriptTransfer(Address(fromBase58String(aK[1])), parseIntValue(aK[2]), unit)]
326+ else if ((size(aA) > 5))
327+ then throw("sorry! maximum limit of your cart is 5 items")
328+ else nil
231329 }
232330
233331
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "_"
55
66 let b = "buy"
77
88 let c = "price"
99
1010 let d = "sell"
1111
1212 let e = 30
1313
1414 let f = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq'
1515
1616 let g = base58''
1717
1818 let h = "bid"
1919
20-let i = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
20+let i = true
2121
22-let j = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
22+let j = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED")
2323
24-func k (l) = {
25- let m = assetInfo(l)
26- if ($isInstanceOf(m, "Asset"))
24+let k = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq'
25+
26+func l (m) = {
27+ let n = assetInfo(m)
28+ if ($isInstanceOf(n, "Asset"))
2729 then {
28- let n = m
29- if (if ((n.decimals == 0))
30- then (n.quantity == 1)
30+ let o = n
31+ if (if ((o.decimals == 0))
32+ then (o.quantity == 1)
3133 else false)
32- then (n.reissuable == false)
34+ then (o.reissuable == false)
3335 else false
3436 }
3537 else false
3638 }
3739
3840
39-@Callable(o)
40-func createNft (p,q,r,s,t,u,v,w,x) = {
41- let y = Issue(p, v, 1, 0, false)
42- let z = calculateAssetId(y)
43- let A = o.transactionId
44-[y, ScriptTransfer(o.caller, 1, z), StringEntry(((toBase58String(z) + a) + "Owner"), toString(o.caller)), StringEntry(((toBase58String(z) + a) + "nft_type"), s), StringEntry(((toBase58String(z) + a) + "nft_tags"), t), StringEntry(((toBase58String(z) + a) + "nft_dAppAddress"), r), IntegerEntry(((toBase58String(z) + a) + "nft_selling_price"), u), StringEntry(((toBase58String(z) + a) + "nft_onSell"), w), StringEntry(((toBase58String(z) + a) + "nft_data"), x), StringEntry(((toBase58String(A) + a) + "issue_nft"), toBase58String(z))]
41+@Callable(p)
42+func createNft (q,r,s,t,u,v,w,x,y) = {
43+ let z = Issue(q, w, 1, 0, false)
44+ let A = calculateAssetId(z)
45+ let B = p.transactionId
46+[z, ScriptTransfer(p.caller, 1, A), StringEntry(((toBase58String(A) + a) + "Owner"), toString(p.caller)), StringEntry(((toBase58String(A) + a) + "nft_type"), t), StringEntry(((toBase58String(A) + a) + "nft_tags"), u), StringEntry(((toBase58String(A) + a) + "nft_dAppAddress"), s), IntegerEntry(((toBase58String(A) + a) + "nft_selling_price"), v), StringEntry(((toBase58String(A) + a) + "nft_onSell"), x), StringEntry(((toBase58String(A) + a) + "nft_data"), y), StringEntry(((toBase58String(B) + a) + "issue_nft"), toBase58String(A))]
4547 }
4648
4749
4850
49-@Callable(o)
50-func sellNFT (B,C) = {
51- let A = o.transactionId
52- let D = o.caller.bytes
53- let E = $Tuple2(value(o.payments[0].assetId), value(o.payments[0].amount))
54- let F = E._1
55- let G = E._2
56- if (!(k(F)))
51+@Callable(p)
52+func sellNFT (C,D) = {
53+ let B = p.transactionId
54+ let E = p.caller.bytes
55+ let F = $Tuple2(value(p.payments[0].assetId), value(p.payments[0].amount))
56+ let G = F._1
57+ let H = F._2
58+ if (!(l(G)))
5759 then throw("Token is not NFT")
58- else [StringEntry(((c + a) + toBase58String(value(o.payments[0].assetId))), B), StringEntry(((toString(o.caller) + a) + d), (((toBase58String(F) + a) + toString(G)) + C))]
60+ else [StringEntry(((c + a) + toBase58String(value(p.payments[0].assetId))), C), StringEntry(((toString(p.caller) + a) + d), (((toBase58String(G) + a) + toString(H)) + D))]
5961 }
6062
6163
6264
63-@Callable(o)
64-func buyNFT (H,I) = {
65- let l = fromBase58String(H)
66- let J = value(o.payments[0].amount)
65+@Callable(p)
66+func buyNFT (I,J) = {
67+ let m = fromBase58String(I)
6768 let K = {
68- let m = getString(this, (("nft_" + I) + "_owner"))
69- if ($isInstanceOf(m, "String"))
69+ let n = getString(this, (("nft_" + J) + "_owner"))
70+ if ($isInstanceOf(n, "String"))
7071 then {
71- let L = m
72+ let L = n
7273 L
7374 }
7475 else false
7576 }
76- let B = getStringValue(((((c + a) + H) + "_") + I))
77- let M = ((J / 1000) * 975)
78- let N = ((J / 1000) * 25)
79- if ((I == toString(o.caller)))
77+ let C = getStringValue(((((c + a) + I) + "_") + J))
78+ let M = value(p.payments[0].amount)
79+ let N = (M - ((M / 1000) * 25))
80+ let O = (M - N)
81+ if ((J == toString(p.caller)))
8082 then throw("current Owner of NFT not able to purchase")
81- else if ((o.payments[0].assetId == f))
82- then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), M, f), StringEntry((("nft_" + H) + "platform_fee"), toString(N)), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(J))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))]
83- else if ((o.payments[0].assetId == unit))
84- then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), M, unit), StringEntry((("nft_" + H) + "platform_fee"), toString(N)), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(J))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))]
83+ else if ((p.payments[0].assetId == f))
84+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(J)), N, f), StringEntry((("nft_" + I) + "platform_fee"), toString(O)), StringEntry(((toString(p.caller) + a) + b), ((I + a) + toString(M))), DeleteEntry((("nft_" + J) + "_owner")), StringEntry((("nft_" + J) + "_owner"), toString(p.caller)), StringEntry(((I + a) + "_owner"), toString(p.caller))]
85+ else if ((p.payments[0].assetId == unit))
86+ then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(J)), N, unit), StringEntry((("nft_" + I) + "platform_fee"), toString(O)), StringEntry(((toString(p.caller) + a) + b), ((I + a) + toString(M))), DeleteEntry((("nft_" + J) + "_owner")), StringEntry((("nft_" + J) + "_owner"), toString(p.caller)), StringEntry(((I + a) + "_owner"), toString(p.caller))]
8587 else nil
8688 }
8789
8890
8991
90-@Callable(o)
91-func cancelSell (O) = {
92- let A = toBase58String(o.transactionId)
93- let D = o.caller.bytes
94-[StringEntry(((A + O) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(D), 1, fromBase58String(O))]
92+@Callable(p)
93+func cancelSell (P) = {
94+ let B = toBase58String(p.transactionId)
95+ let E = p.caller.bytes
96+[StringEntry(((B + P) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(E), 1, fromBase58String(P))]
9597 }
9698
9799
98100
99-@Callable(o)
100-func addAuction (P,Q,R,S,C) = {
101- let A = toBase58String(o.transactionId)
102- let O = value(o.payments[0].assetId)
103- let B = value(R)
104- let T = (lastBlock.height + S)
105- let U = o.caller.bytes
106- let V = {
107- let m = getString(this, (((toBase58String(O) + a) + "nft_status_") + toBase58String(U)))
108- if ($isInstanceOf(m, "String"))
101+@Callable(p)
102+func addAuction (Q,R,S,T,D) = {
103+ let B = toBase58String(p.transactionId)
104+ let P = value(p.payments[0].assetId)
105+ let C = value(S)
106+ let U = (lastBlock.height + T)
107+ let V = p.caller.bytes
108+ let W = {
109+ let n = getString(this, (((toBase58String(P) + a) + "nft_status_") + toBase58String(V)))
110+ if ($isInstanceOf(n, "String"))
109111 then {
110- let L = m
112+ let L = n
111113 true
112114 }
113115 else false
114116 }
115- if ((V == true))
117+ if ((W == true))
116118 then throw("Already in auction list")
117- else if ((S > e))
118- then throw(("Duration is too long. Must be less than or equal to 7 " + toString(e)))
119- else if ((o.payments[0].assetId == unit))
119+ else if ((T > e))
120+ then throw(("Duration is too long. Must be less than or equal to 30 " + toString(e)))
121+ else if ((p.payments[0].assetId == unit))
120122 then throw("NFT not attached")
121- else if ((o.payments[0].assetId == f))
123+ else if ((p.payments[0].assetId == f))
122124 then throw("NFT not attached")
123- else [StringEntry(((A + "nft_start_auction_date") + toBase58String(U)), P), StringEntry(((A + "nft_end_auction_date") + toBase58String(U)), Q), StringEntry((A + "_nft_start_price"), R), StringEntry((A + "_nft_owner"), toString(o.caller)), StringEntry((A + "_nft_on_auction"), toBase58String(O)), StringEntry((A + "_previous_bidder"), "none"), StringEntry((A + "_highest_bid"), "0"), StringEntry((A + "_winner_of_nft"), "0"), StringEntry((A + "_bidder_count"), "0"), StringEntry((A + "_nft_status"), "OPEN")]
125+ else [StringEntry(((B + "nft_start_auction_date") + toBase58String(V)), Q), StringEntry(((B + "nft_end_auction_date") + toBase58String(V)), R), StringEntry((B + "_nft_start_price"), S), StringEntry((B + "_nft_owner"), toString(p.caller)), StringEntry((B + "_nft_on_auction"), toBase58String(P)), StringEntry((B + "_previous_bidder"), "none"), StringEntry((B + "_highest_bid"), "0"), StringEntry((B + "_winner_of_nft"), "0"), StringEntry((B + "_bidder_count"), "0"), StringEntry((B + "_nft_status"), "OPEN")]
124126 }
125127
126128
127129
128-@Callable(o)
129-func placeBid (W,O,q,X,Y) = {
130- let A = toBase58String(o.transactionId)
131- let U = o.caller.bytes
132- let l = fromBase58String(O)
133- let Z = o.payments[0].assetId
134- let aa = o.payments[0].amount
135- let ab = getStringValue(this, (W + "_highest_bid"))
136- let ac = getString(this, (W + "_previous_bidder"))
137- let ad = getStringValue(this, (W + "_bidder_count"))
138- let ae = getStringValue(this, (W + "_winner_of_nft"))
139- let V = getStringValue(this, (W + "_nft_status"))
140- if ((V != "OPEN"))
130+@Callable(p)
131+func placeBid (X,P,r,Y,Z) = {
132+ let B = toBase58String(p.transactionId)
133+ let V = p.caller.bytes
134+ let m = fromBase58String(P)
135+ let aa = p.payments[0].assetId
136+ let ab = p.payments[0].amount
137+ let ac = getStringValue(this, (X + "_highest_bid"))
138+ let ad = getString(this, (X + "_previous_bidder"))
139+ let ae = getStringValue(this, (X + "_bidder_count"))
140+ let af = getStringValue(this, (X + "_winner_of_nft"))
141+ let W = getStringValue(this, (X + "_nft_status"))
142+ if ((W != "OPEN"))
141143 then throw("Not open for auction")
142- else if ((parseIntValue(ab) >= aa))
144+ else if ((parseIntValue(ac) >= ab))
143145 then throw("Bid is less then starting/highest Bid")
144- else if ((ab == "0"))
145- then [StringEntry((W + "_highest_bid"), toString(aa)), StringEntry((W + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((W + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((W + "_nft_id"), toBase58String(l)), StringEntry((W + "_nft_owner"), q), StringEntry((((A + "_") + W) + "_highest_bid"), toString(aa)), StringEntry((((A + "_") + W) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + W) + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((((A + "_") + W) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + W) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(U)), StringEntry((A + "_bid_price_place"), X), StringEntry((A + "_previous_bid_amount_refund_to_address"), ae), StringEntry((A + "_prevoius_bid_amount_refund"), ab)]
146- else if ((ab != "0"))
147- then [ScriptTransfer(Address(fromBase58String(ae)), parseIntValue(ab), Z), StringEntry((A + "_previous_bid_amount_refund_to_address"), ae), StringEntry((A + "_prevoius_bid_amount_refund"), ab), StringEntry((W + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((W + "_highest_bid"), toString(aa)), StringEntry((W + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((W + "_nft_id"), toBase58String(l)), StringEntry((W + "_nft_owner"), q), StringEntry((((A + "_") + W) + "_highest_bid"), toString(aa)), StringEntry((((A + "_") + W) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + W) + "_bidder_count"), toString((parseIntValue(ad) + 1))), StringEntry((((A + "_") + W) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + W) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(U)), StringEntry((A + "_bid_price_place"), X)]
146+ else if ((ac == "0"))
147+ then [StringEntry((X + "_highest_bid"), toString(ab)), StringEntry((X + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((X + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((X + "_nft_id"), toBase58String(m)), StringEntry((X + "_nft_owner"), r), StringEntry((((B + "_") + X) + "_highest_bid"), toString(ab)), StringEntry((((B + "_") + X) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((B + "_") + X) + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((((B + "_") + X) + "_nft_id"), toBase58String(m)), StringEntry((((B + "_") + X) + "_nft_owner"), r), StringEntry((B + "_bid_for_nft_by"), toBase58String(V)), StringEntry((B + "_bid_price_place"), Y), StringEntry((B + "_previous_bid_amount_refund_to_address"), af), StringEntry((B + "_prevoius_bid_amount_refund"), ac)]
148+ else if ((ac != "0"))
149+ then [ScriptTransfer(Address(fromBase58String(af)), parseIntValue(ac), aa), StringEntry((B + "_previous_bid_amount_refund_to_address"), af), StringEntry((B + "_prevoius_bid_amount_refund"), ac), StringEntry((X + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((X + "_highest_bid"), toString(ab)), StringEntry((X + "_winner_of_nft"), toBase58String(p.caller.bytes)), StringEntry((X + "_nft_id"), toBase58String(m)), StringEntry((X + "_nft_owner"), r), StringEntry((((B + "_") + X) + "_highest_bid"), toString(ab)), StringEntry((((B + "_") + X) + "_winner"), toBase58String(p.caller.bytes)), StringEntry((((B + "_") + X) + "_bidder_count"), toString((parseIntValue(ae) + 1))), StringEntry((((B + "_") + X) + "_nft_id"), toBase58String(m)), StringEntry((((B + "_") + X) + "_nft_owner"), r), StringEntry((B + "_bid_for_nft_by"), toBase58String(V)), StringEntry((B + "_bid_price_place"), Y)]
148150 else nil
149151 }
150152
151153
152154
153-@Callable(o)
154-func acceptBidOffer (W,O,af,Y) = {
155- let ag = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
156- let A = toBase58String(o.transactionId)
157- let ah = fromBase58String(Y)
158- let U = o.caller.bytes
159- let l = fromBase58String(O)
160- let ai = getStringValue(this, (W + "_highest_bid"))
161- let aj = ((parseIntValue(ai) / 1000) * 975)
162- let N = ((parseIntValue(ai) / 1000) * 25)
163- let ak = getStringValue(this, (W + "_winner_of_nft"))
164- if ((Y == ag))
165- then [ScriptTransfer(Address(U), aj, ah), ScriptTransfer(Address(fromBase58String(ak)), 1, l), StringEntry("platform_fee", toString(N)), StringEntry((A + "_amount_paid_to_owner"), ai), StringEntry((A + "_nft_transfer_to"), ak), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((W + "_amount_paid_to_owner"), ai), StringEntry((W + "_nft_transfer_to"), ak), StringEntry((W + "_nft_status"), "REWARDED")]
166- else if ((Y == "WAVES"))
167- then [ScriptTransfer(Address(U), aj, unit), ScriptTransfer(Address(fromBase58String(ak)), 1, l), StringEntry("platform_fee", toString(N)), StringEntry((A + "_amount_paid_to_owner"), ai), StringEntry((A + "_nft_transfer_to"), ak), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((W + "_amount_paid_to_owner"), ai), StringEntry((W + "_nft_transfer_to"), ak), StringEntry((W + "_nft_status"), "REWARDED")]
155+@Callable(p)
156+func acceptBidOffer (X,P,ag,Z) = {
157+ let ah = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
158+ let B = toBase58String(p.transactionId)
159+ let ai = fromBase58String(Z)
160+ let V = p.caller.bytes
161+ let m = fromBase58String(P)
162+ let aj = getStringValue(this, (X + "_highest_bid"))
163+ let ak = ((parseIntValue(aj) / 1000) * 975)
164+ let O = ((parseIntValue(aj) / 1000) * 25)
165+ let al = getStringValue(this, (X + "_winner_of_nft"))
166+ if ((Z == ah))
167+ then [ScriptTransfer(Address(V), ak, ai), ScriptTransfer(Address(fromBase58String(al)), 1, m), StringEntry((B + "_amount_paid_to_owner"), aj), StringEntry((B + "_nft_transfer_to"), al), StringEntry((B + "_nft_status"), "REWARDED"), StringEntry((X + "_amount_paid_to_owner"), aj), StringEntry((X + "_nft_transfer_to"), al), StringEntry((X + "_nft_status"), "REWARDED")]
168+ else if ((Z == "WAVES"))
169+ then [ScriptTransfer(Address(V), parseIntValue(aj), unit), ScriptTransfer(Address(fromBase58String(al)), 1, m), StringEntry((B + "_amount_paid_to_owner"), aj), StringEntry((B + "_nft_transfer_to"), al), StringEntry((B + "_nft_status"), "REWARDED"), StringEntry((X + "_amount_paid_to_owner"), aj), StringEntry((X + "_nft_transfer_to"), al), StringEntry((X + "_nft_status"), "REWARDED")]
168170 else nil
169171 }
170172
171173
172174
173-@Callable(o)
174-func cancelAuction (W,Y) = {
175- let A = toBase58String(o.transactionId)
176- let U = o.caller.bytes
177- let al = getStringValue(this, (W + "_nft_status"))
178- let am = getStringValue(this, (W + "_winner_of_nft"))
179- let an = getStringValue(this, (W + "_nft_owner"))
180- let O = getStringValue(this, (W + "_nft_on_auction"))
181- let ao = getStringValue(this, (W + "_highest_bid"))
182- if ((am == "0"))
183- then [StringEntry(((A + W) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(an)), 1, fromBase58String(O))]
184- else if ((am != "0"))
175+@Callable(p)
176+func cancelAuction (X) = {
177+ let B = toBase58String(p.transactionId)
178+ let V = p.caller.bytes
179+ let am = getStringValue(this, (X + "_nft_status"))
180+ let an = getStringValue(this, (X + "_winner_of_nft"))
181+ let ao = getStringValue(this, (X + "_nft_owner"))
182+ let P = getStringValue(this, (X + "_nft_on_auction"))
183+ let ap = getStringValue(this, (X + "_highest_bid"))
184+ if ((an == "0"))
185+ then [StringEntry(((B + X) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P))]
186+ else if ((an != "0"))
185187 then throw("soory you can't cancel it because already auction placed by someone")
186188 else nil
187189 }
188190
189191
190192
191-@Callable(o)
192-func manualFundTransfer (ap,aq) = {
193- let U = o.caller.bytes
194- let ar = fromBase58String(ap)
195- let J = o.payments[0].amount
196- let as = ((J / 1000) * 975)
197- let N = ((J / 1000) * 25)
198- if ((o.payments[0].assetId == unit))
199- then [IntegerEntry((toBase58String(U) + "_transfer"), J), StringEntry("platform_fee", toString(N)), StringEntry((toBase58String(U) + "_transfer_to"), ap), ScriptTransfer(Address(ar), as, unit)]
200- else if ((o.payments[0].assetId == f))
201- then [IntegerEntry((toBase58String(U) + "_transfer"), J), StringEntry("platform_fee", toString(N)), StringEntry((toBase58String(U) + "_transfer_to"), ap), ScriptTransfer(Address(ar), as, f)]
193+@Callable(p)
194+func manualFundTransfer (aq,ar) = {
195+ let as = p.caller.bytes
196+ let at = fromBase58String(aq)
197+ let M = p.payments[0].amount
198+ let au = parseIntValue(ar)
199+ let O = ((M / 1000) * 25)
200+ let av = (M + O)
201+ if ((av != M))
202+ then throw("please submit the sum of actual amount and platform")
203+ else if ((p.payments[0].assetId == unit))
204+ then [IntegerEntry((toBase58String(as) + "_transfer"), M), StringEntry("platform_fee", toString(O)), StringEntry((toBase58String(as) + "_transfer_to"), aq), ScriptTransfer(Address(at), au, unit)]
205+ else if ((p.payments[0].assetId == f))
206+ then [IntegerEntry((toBase58String(as) + "_transfer"), M), StringEntry("platform_fee", toString(O)), StringEntry((toBase58String(as) + "_transfer_to"), aq), ScriptTransfer(Address(at), au, f)]
207+ else nil
208+ }
209+
210+
211+
212+@Callable(p)
213+func backValue (X) = {
214+ let V = p.caller.bytes
215+ let P = getStringValue(this, (X + "_nft_on_auction"))
216+ let ao = getStringValue(this, (X + "_nft_owner"))
217+[StringEntry((X + "_nft_status"), "Auction_time over"), ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P))]
218+ }
219+
220+
221+
222+@Callable(p)
223+func withdrawBid (aw,Z) = {
224+ let V = p.caller.bytes
225+ let ah = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
226+ let B = toBase58String(p.transactionId)
227+ let ai = fromBase58String(Z)
228+ let ax = getStringValue(this, (aw + "_highest_bid"))
229+ let ay = getStringValue(this, (aw + "_winner"))
230+ let az = getStringValue(this, (aw + "_nft_id"))
231+ if ((Z == ah))
232+ then [StringEntry((aw + "_nft_bid"), "WITHDRAW"), StringEntry((aw + "_nft_id"), az), StringEntry((aw + "_bidding_price_refund_amount"), ax), ScriptTransfer(p.caller, parseIntValue(ax), ai)]
233+ else if ((Z == "WAVES"))
234+ then [StringEntry((aw + "_nft_bid"), "WITHDRAW"), StringEntry((aw + "_nft_id"), az), StringEntry((aw + "_bidding_price_refund_amount"), ax), ScriptTransfer(p.caller, parseIntValue(ax), unit)]
202235 else nil
203236 }
204237
205238
206239
207-@Callable(o)
208-func backValue (W) = {
209- let U = o.caller.bytes
210- let O = getStringValue(this, (W + "_nft_on_auction"))
211- let an = getStringValue(this, (W + "_nft_owner"))
212-[StringEntry((W + "_nft_status"), "Auction_time over"), ScriptTransfer(Address(fromBase58String(an)), 1, fromBase58String(O))]
240+@Callable(p)
241+func automateFunction (X,Z) = {
242+ let V = p.caller.bytes
243+ let P = getStringValue(this, (X + "_nft_on_auction"))
244+ let ao = getStringValue(this, (X + "_nft_owner"))
245+ let ah = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
246+ let ai = fromBase58String(Z)
247+ let ac = getStringValue(this, (X + "_highest_bid"))
248+ let af = getStringValue(this, (X + "_winner_of_nft"))
249+ let an = getStringValue(this, (X + "_winner_of_nft"))
250+ if ((an == "0"))
251+ then [ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P))]
252+ else if (if ((an != "0"))
253+ then (Z == ah)
254+ else false)
255+ then [ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P)), ScriptTransfer(Address(fromBase58String(af)), parseIntValue(ac), ai)]
256+ else if (if ((an != "0"))
257+ then (Z == "WAVES")
258+ else false)
259+ then [ScriptTransfer(Address(fromBase58String(ao)), 1, fromBase58String(P)), ScriptTransfer(Address(fromBase58String(af)), parseIntValue(ac), unit)]
260+ else nil
213261 }
214262
215263
216264
217-@Callable(o)
218-func withdrawBid (at,Y) = {
219- let U = o.caller.bytes
220- let ag = "9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq"
221- let A = toBase58String(o.transactionId)
222- let ah = fromBase58String(Y)
223- let au = getStringValue(this, (at + "_highest_bid"))
224- let av = getStringValue(this, (at + "_winner"))
225- let aw = getStringValue(this, (at + "_nft_id"))
226- if ((Y == ag))
227- then [StringEntry((at + "_nft_bid"), "WITHDRAW"), StringEntry((at + "_nft_id"), aw), StringEntry((at + "_bidding_price_refund_amount"), au), ScriptTransfer(o.caller, parseIntValue(au), ah)]
228- else if ((Y == "WAVES"))
229- then [StringEntry((at + "_nft_bid"), "WITHDRAW"), StringEntry((at + "_nft_id"), aw), StringEntry((at + "_bidding_price_refund_amount"), au), ScriptTransfer(o.caller, parseIntValue(au), unit)]
230- else nil
265+@Callable(p)
266+func buyAllProducts_asimi (aA,aB) = {
267+ let aC = p.caller
268+ let aD = assetBalance(aC, f)
269+ let M = value(p.payments[0].amount)
270+ let av = parseIntValue(aB)
271+ let aE = ((av / 1000) * 25)
272+ let aF = (av + aE)
273+ let aG = split(aA[0], "_")
274+ let aH = split(aA[1], "_")
275+ let aI = split(aA[2], "_")
276+ let aJ = split(aA[3], "_")
277+ let aK = split(aA[4], "_")
278+ if ((aF > M))
279+ then throw("your paying amount is wrong ")
280+ else if ((M > aD))
281+ then throw("Buyer does not have enough funds to complete the purchase.")
282+ else if ((size(aA) == 1))
283+ then [StringEntry((("first_nft_Info=" + "nftId") + aG[0]), ("buyer" + toString(aC))), StringEntry((("first_nft_Info=" + "seller_address") + aG[1]), ("price" + aG[2])), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f)]
284+ else if ((size(aA) == 2))
285+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f)]
286+ else if ((size(aA) == 3))
287+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aI[1])), (parseIntValue(aI[2]) * 100), f)]
288+ else if ((size(aA) == 4))
289+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aI[1])), (parseIntValue(aI[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aJ[1])), (parseIntValue(aJ[2]) * 100), f)]
290+ else if ((size(aA) == 5))
291+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aK[0]) + "seller_address") + aK[1]) + "price") + aK[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(aC, 1, fromBase58String(aK[0])), ScriptTransfer(Address(fromBase58String(aG[1])), (parseIntValue(aG[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aH[1])), (parseIntValue(aH[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aI[1])), (parseIntValue(aI[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aJ[1])), (parseIntValue(aJ[2]) * 100), f), ScriptTransfer(Address(fromBase58String(aK[1])), (parseIntValue(aK[2]) * 100), f)]
292+ else if ((size(aA) > 5))
293+ then throw("sorry! maximum limit of your cart is 5 items")
294+ else nil
295+ }
296+
297+
298+
299+@Callable(p)
300+func buyAllProducts_waves (aA,aB) = {
301+ let aC = p.caller
302+ let aD = assetBalance(aC, g)
303+ let M = value(p.payments[0].amount)
304+ let av = parseIntValue(aB)
305+ let aE = ((av / 1000) * 25)
306+ let aF = (av + aE)
307+ let aG = split(aA[0], "_")
308+ let aH = split(aA[1], "_")
309+ let aI = split(aA[2], "_")
310+ let aJ = split(aA[3], "_")
311+ let aK = split(aA[4], "_")
312+ if ((aF > M))
313+ then throw("your paying amount is wrong ")
314+ else if ((M > aD))
315+ then throw("Buyer does not have enough funds to complete the purchase.")
316+ else if ((size(aA) == 1))
317+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit)]
318+ else if ((size(aA) == 2))
319+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit)]
320+ else if ((size(aA) == 3))
321+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit), ScriptTransfer(Address(fromBase58String(aI[1])), parseIntValue(aI[2]), unit)]
322+ else if ((size(aA) == 4))
323+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit), ScriptTransfer(Address(fromBase58String(aI[1])), parseIntValue(aI[2]), unit), ScriptTransfer(Address(fromBase58String(aJ[1])), parseIntValue(aJ[2]), unit)]
324+ else if ((size(aA) == 5))
325+ then [StringEntry((((((("first_nft_Info=" + "nftId") + aG[0]) + "seller_address") + aG[1]) + "price") + aG[2]), ("buyer" + toString(aC))), StringEntry((((((("second_nft_Info=" + "nftId") + aH[0]) + "seller_address") + aH[1]) + "price") + aH[2]), ("buyer" + toString(aC))), StringEntry((((((("third_nft_Info=" + "nftId") + aI[0]) + "seller_address") + aI[1]) + "price") + aI[2]), ("buyer" + toString(aC))), StringEntry((((((("fourth_nft_Info=" + "nftId") + aJ[0]) + "seller_address") + aJ[1]) + "price") + aJ[2]), ("buyer" + toString(aC))), StringEntry((((((("fifth_nft_Info=" + "nftId") + aK[0]) + "seller_address") + aK[1]) + "price") + aK[2]), ("buyer" + toString(aC))), ScriptTransfer(aC, 1, fromBase58String(aG[0])), ScriptTransfer(aC, 1, fromBase58String(aH[0])), ScriptTransfer(aC, 1, fromBase58String(aI[0])), ScriptTransfer(aC, 1, fromBase58String(aJ[0])), ScriptTransfer(aC, 1, fromBase58String(aK[0])), ScriptTransfer(Address(fromBase58String(aG[1])), parseIntValue(aG[2]), unit), ScriptTransfer(Address(fromBase58String(aH[1])), parseIntValue(aH[2]), unit), ScriptTransfer(Address(fromBase58String(aI[1])), parseIntValue(aI[2]), unit), ScriptTransfer(Address(fromBase58String(aJ[1])), parseIntValue(aJ[2]), unit), ScriptTransfer(Address(fromBase58String(aK[1])), parseIntValue(aK[2]), unit)]
326+ else if ((size(aA) > 5))
327+ then throw("sorry! maximum limit of your cart is 5 items")
328+ else nil
231329 }
232330
233331

github/deemru/w8io/169f3d6 
176.60 ms