tx · 8orFhj3AyJFL1AJUSEi31sHAagofQrmcPH167R74bb6V

3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG:  -0.01400000 Waves

2020.10.10 11:22 [1214232] smart account 3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG > SELF 0.00000000 Waves

{ "type": 13, "id": "8orFhj3AyJFL1AJUSEi31sHAagofQrmcPH167R74bb6V", "fee": 1400000, "feeAssetId": null, "timestamp": 1602318224475, "version": 2, "chainId": 84, "sender": "3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG", "senderPublicKey": "9SULUbW7L2jV2nv8v48Kdzox4cZ8jEfg778yJHJpgVwM", "proofs": [ "4SyH1JAmStw8da6traKgY2w7defHqA6KM3xhTrbeXuEMJJ7meE8dfHAP9CYMfQotBqW9bBQ4RuCsMEnzfkuxD839" ], "script": "base64:AAIEAAAAAAAAAFoIAhIGCgQICAgIEgMKAQgSBgoECAgICBIECgIICBIDCgEIEg4KDAgICAgICAEICAgICBINCgsICAgICAEICAgICBIECgIICBIGCgQIAQEIEgQKAggIEgMKAQgAAAA2AAAAAA9zdG9yYWdlVmVyaWZpZXIJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM04yczVSdGFIUEJlbkNzeDJFQ2NvRlJiWUh4M25vWmhYVzEAAAAADHNpZ25WZXJpZmllcgkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAALZmVlUmVjZWl2ZXICAAAAIzNOMUU2dFhkZFJvVmFSZlE5ZFEzdmc1TGFXMmZzZDhIS3ViAAAAAAtzaWduQXNzZXRJZAEAAAAg6KVqvMp3QvJwYTI1Sk9Fg7m5HuWZZxfDcerZC6EEresAAAAAC3VzZG5Bc3NldElkAQAAACAP8hwSrOTEPJrsRhqrJaiw7LoHK0bMbYhy8LXikkkBtAAAAAAMd2F2ZXNBc3NldElkAQAAAAAAAAAABnVzZG5JRAIAAAAsM0tGWEJHR0xDakE1WjJEdVc0RHE5ZkREckhqSkpQMVpFa2FvYWpTenVLc0MAAAAABWFkbWluAgAAACMzTXNHNmpQTkNyVkpVdFlCN1hKQnhTN3V0V3NYQWY0bjlWcAAAAAAGYWRtaW4yAgAAACMzTXptNFZMd3NOOXVad2JUTXpQajNYdXhWNmtFZkFSOFVETgAAAAAPV0hJVEVMSVNURURPTkxZBgAAAAALdXNlckFsbG93ZWQCAAAAB0FMTE9XRUQAAAAADnVzZXJSZWdpc3RlcmVkAgAAAApSRUdJU1RFUkVEAAAAAAx1c2VyVmVyaWZpZWQCAAAACFZFUklGSUVEAAAAAA11c2VyU3VzcGVuZGVkAgAAAAlTVVNQRU5ERUQAAAAAC3VzZXJSZW1vdmVkAgAAAAdSRU1PVkVEAAAAABB1c2VyVW5yZWdpc3RlcmVkAgAAAAxVTlJFR0lTVEVSRUQAAAAABm9uU2FsZQIAAAAHT05fU0FMRQAAAAAEc29sZAIAAAAEU09MRAAAAAAIY2FuY2VsZWQCAAAACENBTkNFTEVEAQAAAA5nZXRT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CmFydF9wcmljZV8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABVrZXlBcnRBc3NldElkQWNjZXB0ZWQAAAACAAAACmNhbGxlckFkZHIAAAAFYXJ0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEmFydF9hc3NldEFjY2VwdGVkXwUAAAAFYXJ0SWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgAAAApjYWxsZXJBZGRyAAAABHR4aWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAE2dldF9oYXNoYnl0eGlkYWRkcl8FAAAABHR4aWQCAAAAAV8FAAAACmNhbGxlckFkZHIBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQAAAApzaGEyNTZIYXNoCQABLAAAAAICAAAAEmdldF9vd25lcl9ieV9oYXNoXwUAAAAKc2hhMjU2SGFzaAEAAAATa2V5QXJ0QXJ0aWRCeVNpZ25pZAAAAAIAAAAKY2FsbGVyQWRkcgAAAAZzaWduSWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEmdldF9hcnRpZGJ5c2lnbmlkXwUAAAAGc2lnbklkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACAAAACnNoYTI1Nkhhc2gAAAAKY2FsbGVyQWRkcgkAASwAAAACAgAAABdnZXRfdHhpZF9ieV9oYXNoX293bmVyXwkAAlgAAAABCQALVAAAAAEJAAGbAAAAAQkAASwAAAACBQAAAApzaGEyNTZIYXNoBQAAAApjYWxsZXJBZGRyAAAACwAAAAFpAQAAAAxyZWdpc3RlclVzZXIAAAAEAAAABG5hbWUAAAALZGVzY3JpcHRpb24AAAAFdGh1bWIAAAAGc29jaWFsBAAAAApjYWxsZXJBZGRyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAPdXNlckNhblJlZ2lzdGVyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAANa2V5VXNlclN0YXR1cwAAAAEFAAAACmNhbGxlckFkZHIEAAAAAmlkCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAACXRpbWVzdGFtcAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXADAwkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAADXVzZXJTdXNwZW5kZWQGCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgUAAAALdXNlclJlbW92ZWQJAAACAAAAAQIAAABLWW91IGFyZSBub3cgYWxsb3dlZCB0byByZWdpc3RlciwgeW91ciBhY2NvdW50IGhhdmUgYmVlbiBzdXNwZW5kZWQvIHJlbW92ZWQuAwkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAADnVzZXJSZWdpc3RlcmVkCQAAAgAAAAECAAAAPVlvdSBhcmUgYWxyZWFkeSByZWdpc3RlcmVkLCBwbGVhc2UgdXNlIHVwZGF0ZSBtZXRob2QgaW5zdGVhZC4DAwkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXICAAAAAAUAAAAPV0hJVEVMSVNURURPTkxZBwkAAAIAAAABAgAAAE1Zb3UgYXJlIG5vdyBhbGxvd2VkIHRvIHJlZ2lzdGVyIHlldCwgcGxlYXNlIGNvbnRhY3QgdXMgZmlyc3QgdG8gZ2V0IGFwcHJvdmVkLgMDCQAAAAAAAAIFAAAABG5hbWUCAAAAAAYJAAAAAAAAAgUAAAALZGVzY3JpcHRpb24CAAAAAAkAAAIAAAABAgAAACROYW1lIGFuZCBkZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkDCQAAZgAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAAlgJAAACAAAAAQIAAAAqNjAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIGRlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAALa2V5VXNlckRhdGUAAAABBQAAAApjYWxsZXJBZGRyBQAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleVVzZXJBZGRyAAAAAQUAAAAKY2FsbGVyQWRkcgkAASwAAAACCQABLAAAAAIFAAAAAmlkAgAAAAFfCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlVc2VyTmFtZQAAAAEFAAAACmNhbGxlckFkZHIFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleVVzZXJEZXNjAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAALZGVzY3JpcHRpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVVzZXJTb2NpYWwAAAABBQAAAApjYWxsZXJBZGRyBQAAAAZzb2NpYWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleVVzZXJUaHVtYgAAAAEFAAAACmNhbGxlckFkZHIFAAAABXRodW1iCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAAOdXNlclJlZ2lzdGVyZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAObGFzdF9pbnZva2VfaWQFAAAAAmlkBQAAAANuaWwAAAABaQEAAAALZGVsZXRlRW50cnkAAAABAAAABWVudHJ5BAAAAApjYWxsZXJBZGRyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAKY2FsbGVyQWRkcgUAAAAFYWRtaW4JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAFZW50cnkFAAAAA25pbAkAAAIAAAABAgAAAAJubwAAAAFpAQAAAAp1cGRhdGVVc2VyAAAABAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABXRodW1iAAAABnNvY2lhbAQAAAAKY2FsbGVyQWRkcgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAD3VzZXJDYW5SZWdpc3RlcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAApjYWxsZXJBZGRyAwMJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAA11c2VyU3VzcGVuZGVkBgkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAAC3VzZXJSZW1vdmVkCQAAAgAAAAECAAAAS1lvdSBhcmUgbm93IGFsbG93ZWQgdG8gcmVnaXN0ZXIsIHlvdXIgYWNjb3VudCBoYXZlIGJlZW4gc3VzcGVuZGVkLyByZW1vdmVkLgMDCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgIAAAAABgkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAAC3VzZXJBbGxvd2VkCQAAAgAAAAECAAAAJ1BsZWFzZSByZWdpc3RlciBmaXJzdCB3aXRoIHJlZ2lzdGVyVXNlcgQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAJdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAMDCQAAAAAAAAIFAAAABG5hbWUCAAAAAAYJAAAAAAAAAgUAAAALZGVzY3JpcHRpb24CAAAAAAkAAAIAAAABAgAAACROYW1lIGFuZCBkZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkDCQAAZgAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAAlgJAAACAAAAAQIAAAAqNjAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIGRlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlVc2VyTmFtZQAAAAEFAAAACmNhbGxlckFkZHIFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleVVzZXJEZXNjAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAALZGVzY3JpcHRpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVVzZXJTb2NpYWwAAAABBQAAAApjYWxsZXJBZGRyBQAAAAZzb2NpYWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkB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ZyBMaWNlbmNlIENJRCBsZW5ndGgDCQEAAAABIQAAAAEJAQAAAAx2YWxpZGF0ZUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAAAgAAAAECAAAAK1NvdXJjZSBIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0DCQEAAAABIQAAAAEJAQAAAAx2YWxpZGF0ZUhhc2gAAAABBQAAAAxzaGEyNTZFeHBvcnQJAAACAAAAAQIAAAArRXhwb3J0IEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQMJAQAAAAEhAAAAAQkBAAAADHZhbGlkYXRlSGFzaAAAAAEFAAAADXNoYTI1NkxpY2VuY2UJAAACAAAAAQIAAAAsTGljZW5jZSBIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0DCQAAAAAAAAIJAAGQAAAAAQgFAAAABmludm9rZQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABNObyBwYXltZW50IGF0dGFjaGVkBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABmFtb3VudAkBAAAABXZhbHVlAAAAAQgFAAAAB3BheW1lbnQAAAAGYW1vdW50BAAAAAdhc3NldElkAwMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkCQAAAAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAC3NpZ25Bc3NldElkBwgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACZPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXQgdGhlIG1vbWVudAQAAAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAA9zdG9yYWdlVmVyaWZpZXIJAAEsAAAAAgIAAAASY2VydGlmaWNhdGlvbl9mZWVfCQACWAAAAAEFAAAAC3NpZ25Bc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABXByaWNlBQAAAAckbWF0Y2gwBQAAAAVwcmljZQkAAAIAAAABAgAAABlQcmljZSB1bmRlZmluZWQgaW4gb3JhY2xlAwkBAAAAAiE9AAAAAgUAAAAGYW1vdW50BQAAABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQAAAgAAAAEJAAEsAAAAAgIAAAAZUGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIAkAAaQAAAABBQAAABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlBAAAAAplbnRyeUV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAVa2V5QXJ0VHhpZEJ5SGFzaE93bmVyAAAAAgUAAAAKc2hhMjU2SGFzaAUAAAANY2FsbGVyQWRkcmVzcwMJAQAAAAIhPQAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAACpZb3UgYWxyZWFkeSBhZGRlZCB0aGlzIGFydHdvcmsgb24gU2lnbiBBcnQEAAAACWhhc2hFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAMJAQAAAAIhPQAAAAIFAAAACWhhc2hFeGlzdAIAAAAACQAAAgAAAAECAAAAM1RoaXMgYXJ0d29yayBoYXNoIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBvbiBTaWduIEFydAQAAAAPaXNTaWduQ2VydGlmaWVkCQEAAAAUY2hlY2tTaWduQ2VydGlmaWNhdGUAAAADBQAAAAZzaWduSUQFAAAADWNhbGxlckFkZHJlc3MFAAAACnNoYTI1Nkhhc2gDCQEAAAABIQAAAAEFAAAAD2lzU2lnbkNlcnRpZmllZAkAAAIAAAABAgAAAEtTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBvbiBTaWduLXdlYi5hcHAgc21hcnQgY29udHJhY3QgZm9yIHRoaXMgYWRkcmVzcy4DCQAAAAAAAAIJAAExAAAAAQUAAAAKY2lkRGlzcGxheQAAAAAAAAAAAAkAAAIAAAABAgAAABtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQAAAAAAAAIJAAExAAAAAQUAAAAEbmFtZQAAAAAAAAAAAAkAAAIAAAABAgAAABVUaXRsZSBjYW5ub3QgYmUgZW1wdHkDCQAAZgAAAAIJAAExAAAAAQUAAAAEbmFtZQAAAAAAAAAAZAkAAAIAAAABAgAAACMxMDAgQ2hhcmFjdGVycyBtYXhpbXVtIGZvciB0aGUgbmFtZQMJAABmAAAAAgkAATEAAAABBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAD6AkAAAIAAAABAgAAACsxMDAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIGRlc2NyaXB0aW9uAwkAAAAAAAACCQABMQAAAAEFAAAAC2Rlc2NyaXB0aW9uAAAAAAAAAAAACQAAAgAAAAECAAAAG0Rlc2NyaXB0aW9uIGNhbm5vdCBiZSBlbXB0eQQAAAAIdGFnc0xpc3QJAAS1AAAAAgUAAAAEdGFncwIAAAABLAMJAABmAAAAAgkAAZAAAAABBQAAAAh0YWdzTGlzdAAAAAAAAAAABQkAAAIAAAABAgAAADhUYWdzIHNob3VsZCBiZSBtYXhpbXVtIDUgc2luZ2xlIHdvcmQgc2VwYXJhdGVkIGJ5IHNwYWNlLgQAAAAQdXNlcklzUmVnaXN0ZXJlZAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAADHVzZXJfc3RhdHVzXwUAAAANY2FsbGVyQWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAABB1c2VyVW5yZWdpc3RlcmVkBAAAAAl0aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAwMJAQAAAAlpc0RlZmluZWQAAAABBQAAABB1c2VySXNSZWdpc3RlcmVkCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQFAAAAEHVzZXJVbnJlZ2lzdGVyZWQHCQAAAgAAAAECAAAAOFBsZWFzZSByZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiVXNlciBpbmZvcyIgdGFiAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAA11c2VyU3VzcGVuZGVkCQAAAgAAAAECAAAAGVlvdXIgYWNjb3VudCBpcyBzdXNwZW5kZWQDCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQFAAAAC3VzZXJSZW1vdmVkCQAAAgAAAAECAAAAHllvdXIgYWNjb3VudCBoYXZlIGJlZW4gcmVtb3ZlZAMJAABmAAAAAgUAAAAHbWF4bWludAAAAAAAAAAACgkAAAIAAAABAgAAAB9NYXhpbXVtIDEwIGVkaXRpb25zIHBlciBhcnR3b3JrAwkBAAAAAiE9AAAAAgkAATEAAAABBQAAAApzaGEyNTZIYXNoAAAAAAAAAABACQAAAgAAAAECAAAAMUhhc2ggc2hvdWxkIGJlIHNoYTI1NiBzdHJpbmcgY29tcG9zZWQgb2YgNjQgY2hhci4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAUAAAANY2FsbGVyQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAVa2V5QXJ0VHhpZEJ5SGFzaE93bmVyAAAAAgUAAAAKc2hhMjU2SGFzaAUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAprZXlBcnREYXRlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAARuYW1lCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnREZXNjAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnREaXNwbGF5Q2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAljaWRFeHBvcnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUFydEV4cG9ydEhhc2gAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAMc2hhMjU2RXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlBcnRMaWNlbmNlSGFzaAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAA1zaGEyNTZMaWNlbmNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAACmNpZExpY2VuY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFR5cGUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAEdHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0VGFncwAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAR0YWdzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAdtYXhtaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAGc2lnbklECQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAMa2V5QXJ0SXNzdWVkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAxrZXlBcnRPblNhbGUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUFydEFydGlkQnlTaWduaWQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAZzaWduSUQFAAAABWFydElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADmxhc3RfaW52b2tlX2lkBQAAAAVhcnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUa2V5QXJ0SGFzaEJ5VHhpZEFkZHIAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZmVlUmVjZWl2ZXIFAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsAAAABmludm9rZQEAAAANdXBkYXRlQXJ0d29yawAAAAsAAAAEdHhpZAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UEAAAACHVwZGF0ZUlkCQACWAAAAAEIBQAAAAZpbnZva2UAAAANdHJhbnNhY3Rpb25JZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAABIQAAAAEJAQAAAAt2YWxpZGF0ZUNJRAAAAAEFAAAACmNpZERpc3BsYXkJAAACAAAAAQIAAAArRGlzcGxheSBDSUQgc2hvdWxkIGJlIDU5IGNoYXJhY3RlcnMgbWF4aW11bQMJAQAAAAEhAAAAAQkBAAAAC3ZhbGlkYXRlQ0lEAAAAAQUAAAAJY2lkRXhwb3J0CQAAAgAAAAECAAAAKkV4cG9ydCBDSUQgc2hvdWxkIGJlIDU5IGNoYXJhY3RlcnMgbWF4aW11bQMJAQAAAAEhAAAAAQkBAAAAC3ZhbGlkYXRlQ0lEAAAAAQUAAAAKY2lkTGljZW5jZQkAAAIAAAABAgAAACtMaWNlbmNlIENJRCBzaG91bGQgYmUgNTkgY2hhcmFjdGVycyBtYXhpbXVtAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAMc2hhMjU2RXhwb3J0CQAAAgAAAAECAAAAK0V4cG9ydCBIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0DCQEAAAABIQAAAAEJAQAAAAx2YWxpZGF0ZUhhc2gAAAABBQAAAA1zaGEyNTZMaWNlbmNlCQAAAgAAAAECAAAALExpY2VuY2UgSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtBAAAAAplbnRyeUV4aXN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQDCQAAAAAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAADFUaGlzIGVudHJ5IGRvZXNuJ3QgZXhpc3Qgb3IgeW91IGFyZSBub3QgdGhlIG93bmVyAwkAAAAAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAVVGl0bGUgY2Fubm90IGJlIGVtcHR5AwkAAGYAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAGQJAAACAAAAAQIAAAAjMTAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIG5hbWUDCQAAZgAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAA+gJAAACAAAAAQIAAAArMTAwMCBDaGFyYWN0ZXJzIG1heGltdW0gZm9yIHRoZSBkZXNjcmlwdGlvbgMJAAAAAAAAAgkAATEAAAABBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAAkAAAIAAAABAgAAABtEZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkEAAAADWFydHdvcmtNaW50ZWQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAMJAAAAAAAAAgUAAAABYgAAAAAAAAAAAAcGBwQAAAAIdGFnc0xpc3QJAAS1AAAAAgUAAAAEdGFncwIAAAABLAMJAABmAAAAAgkAAZAAAAABBQAAAAh0YWdzTGlzdAAAAAAAAAAABQkAAAIAAAABAgAAADhUYWdzIHNob3VsZCBiZSBtYXhpbXVtIDUgc2luZ2xlIHdvcmQgc2VwYXJhdGVkIGJ5IHNwYWNlLgQAAAAQdXNlcklzUmVnaXN0ZXJlZAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAADHVzZXJfc3RhdHVzXwUAAAANY2FsbGVyQWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAABB1c2VyVW5yZWdpc3RlcmVkAwMJAQAAAAlpc0RlZmluZWQAAAABBQAAABB1c2VySXNSZWdpc3RlcmVkCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQFAAAAEHVzZXJVbnJlZ2lzdGVyZWQHCQAAAgAAAAECAAAAOFBsZWFzZSByZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiVXNlciBpbmZvcyIgdGFiAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAA11c2VyU3VzcGVuZGVkCQAAAgAAAAECAAAAGVlvdXIgYWNjb3VudCBpcyBzdXNwZW5kZWQDCQAAAAAAAAIFAAAAEHVzZXJJc1JlZ2lzdGVyZWQFAAAAC3VzZXJSZW1vdmVkCQAAAgAAAAECAAAAHllvdXIgYWNjb3VudCBoYXZlIGJlZW4gcmVtb3ZlZAMJAABmAAAAAgUAAAAHbWF4bWludAAAAAAAAAAACgkAAAIAAAABAgAAAB9NYXhpbXVtIDEwIGVkaXRpb25zIHBlciBhcnR3b3JrAwkBAAAAASEAAAABBQAAAA1hcnR3b3JrTWludGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnROYW1lAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAEbmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0RGVzYwAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnREaXNwbGF5Q2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAKY2lkRGlzcGxheQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5QXJ0RXhwb3J0Q2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAJY2lkRXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAMc2hhMjU2RXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAKY2lkTGljZW5jZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAA1zaGEyNTZMaWNlbmNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAAB21heG1pbnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFRhZ3MAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAAR0YWdzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUeXBlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAEdHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAAIdXBkYXRlSWQFAAAAA25pbAkAAAIAAAABAgAAADRZb3UgY2Fubm90IGVkaXQgYXJ0d29yayB0aGF0IGhhdmUgYWxyZWFkeSBtaW50ZWQgTkZUAAAAAWkBAAAADWRlbGV0ZUFydHdvcmsAAAACAAAABWFydElkAAAAB2FkZHJlc3MEAAAADWNhbGxlckFkZHJlc3MJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAJpZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAxhZGRyZXNzVG9Vc2UDAwkAAAAAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhZG1pbgYJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAGYWRtaW4yBQAAAAdhZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzBAAAAAplbnRyeUV4aXN0BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAQAAAAprZXlBcnROYW1lAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAAN05vIGFydHdvcmsgbWF0Y2hpbmcgdGhpcyByZXF1ZXN0IG9yIHlvdSBhcmUgbm90IGFsbG93ZWQEAAAADWFydHdvcmtNaW50ZWQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAMJAAAAAAAAAgUAAAABYgAAAAAAAAAAAAcGBwQAAAAKc2hhMjU2SGFzaAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAAUa2V5QXJ0SGFzaEJ5VHhpZEFkZHIAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMJAAACAAAAAQIAAAAlTm8gYXJ0d29yayBoYXNoIG1hdGNoaW5nIHRoaXMgcmVxdWVzdAQAAAAGc2lnbklEBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMJAAACAAAAAQIAAAAgTm8gU0lHTiBJRCBtYXRjaGluZyB0aGlzIHJlcXVlc3QEAAAADGRhdGFUb0RlbGV0ZQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0RGF0ZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydE5hbWUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnREZXNjAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUFydEV4cG9ydEhhc2gAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABFrZXlBcnRMaWNlbmNlSGFzaAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUFydExpY2VuY2VDaWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnRUeXBlAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0VGFncwAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAxrZXlBcnRPblNhbGUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADmxhc3RfaW52b2tlX2lkBQAAAAJpZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAARa2V5QXJ0T3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABNrZXlBcnRBcnRpZEJ5U2lnbmlkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAZzaWduSUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADGFkZHJlc3NUb1VzZQUAAAADbmlsAwMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYWRtaW4GCQAAAAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABmFkbWluMgUAAAAMZGF0YVRvRGVsZXRlAwkBAAAAASEAAAABBQAAAA1hcnR3b3JrTWludGVkBQAAAAxkYXRhVG9EZWxldGUJAAACAAAAAQIAAAA6VGhpcyBhcnR3b3JrIGFscmVhZHkgaGF2ZSBtaW50ZWQgTkZULCB5b3UgY2Fubm90IGRlbGV0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aXNzdWFibGUgYW55bW9yZQMJAAAAAAAAAgUAAAAQdXNlcklzUmVnaXN0ZXJlZAUAAAANdXNlclN1c3BlbmRlZAkAAAIAAAABAgAAABlZb3VyIGFjY291bnQgaXMgc3VzcGVuZGVkAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAB5Zb3VyIGFjY291bnQgaGF2ZSBiZWVuIGRlbGV0ZWQEAAAACnNlbGxTdGF0dXMDCQAAZgAAAAIFAAAABXByaWNlAAAAAAAAAAAABgcJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAxrZXlBcnRPblNhbGUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAKc2VsbFN0YXR1cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAC2tleUFydFByaWNlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAABXByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5QXJ0TWF4TWludAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAdtYXhNaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABVrZXlBcnRBc3NldElkQWNjZXB0ZWQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAACaWQFAAAAA25pbAAAAAZpbnZva2UBAAAACmJ1eUFydHdvcmsAAAACAAAABWFydElkAAAABmlzc3VlcgQAAAACaWQJAAJYAAAAAQgFAAAABmludm9rZQAAAA10cmFuc2FjdGlvbklkBAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAAGaW52b2tlAAAABmNhbGxlcgAAAAVieXRlcwQAAAAIdG90YWxORlQJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABAgAAABB0b3RhbF9uZnRfaXNzdWVkBAAAAAZzaWduSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxrZXlBcnRTaWduSUQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAthcnR3b3JrTmFtZQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwkAAAIAAAABAgAAABlUaGlzIGFydHdvcmsgZG9lc24ndCBleGl0BAAAAApkaXNwbGF5Q0lECQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACWV4cG9ydENJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACmV4cG9ydEhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAAKbGljZW5jZUNJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGtleUFydExpY2VuY2VDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAtsaWNlbmNlSGFzaAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEWtleUFydExpY2VuY2VIYXNoAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALZGVzY3JpcHRpb24JAAEvAAAAAgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmtleUFydERlc2MAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAAAAAAAAAAAyBAAAAAphbW91bnRTb2xkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADGtleUFydElzc3VlZAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAADGFydHdvcmtQcmljZQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAA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", "height": 1214232, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G72qiqcFjCDoriQCoyoZ2tpPv4Tp8dua9gGQYWsPFZts Next: A5ewwrzvGtgchFzDoDUdqoSPybwsBJbTiWMzqhdLcnHU Diff:
OldNewDifferences
9797 }
9898
9999
100-func I (J) = {
101- let v = getString(this, ("user_status_" + J))
100+func I (J) = if (if ((75 > size(J)))
101+ then (60 > size(split(J, "/")[0]))
102+ else false)
103+ then (16 > size(split(J, "/")[1]))
104+ else false
105+
106+
107+func K (L) = (65 > size(L))
108+
109+
110+func M (N) = {
111+ let v = getString(this, ("user_status_" + N))
102112 if ($isInstanceOf(v, "String"))
103113 then {
104- let K = v
105- K
114+ let O = v
115+ O
106116 }
107117 else throw("Something went wrong.")
108118 }
109119
110120
111-func L (M) = ("user_" + M)
121+func P (Q) = ("user_" + Q)
112122
113123
114-func N (M) = ("user_name_" + M)
124+func R (Q) = ("user_name_" + Q)
115125
116126
117-func O (M) = ("user_desc_" + M)
127+func S (Q) = ("user_desc_" + Q)
118128
119129
120-func P (M) = ("user_social_" + M)
130+func T (Q) = ("user_social_" + Q)
121131
122132
123-func Q (M) = ("user_thumb_" + M)
133+func U (Q) = ("user_thumb_" + Q)
124134
125135
126-func R (M) = ("user_status_" + M)
136+func V (Q) = ("user_status_" + Q)
127137
128138
129-func S (M) = ("user_date_" + M)
139+func W (Q) = ("user_date_" + Q)
130140
131141
132-func T (M,U) = ((("art_date_" + U) + "_") + M)
142+func X (Q,Y) = ((("art_date_" + Y) + "_") + Q)
133143
134144
135-func V (M,U) = ((("art_name_" + U) + "_") + M)
145+func Z (Q,Y) = ((("art_name_" + Y) + "_") + Q)
136146
137147
138-func W (M,U) = ((("art_desc_" + U) + "_") + M)
148+func aa (Q,Y) = ((("art_desc_" + Y) + "_") + Q)
139149
140150
141-func X (M,U) = ((("art_display_cid_" + U) + "_") + M)
151+func ab (Q,Y) = ((("art_display_cid_" + Y) + "_") + Q)
142152
143153
144-func Y (M,U) = ((("art_export_hash_" + U) + "_") + M)
154+func ac (Q,Y) = ((("art_export_hash_" + Y) + "_") + Q)
145155
146156
147-func Z (M,U) = ((("art_export_cid_" + U) + "_") + M)
157+func ad (Q,Y) = ((("art_export_cid_" + Y) + "_") + Q)
148158
149159
150-func aa (M,U) = ((("art_maxmint_" + U) + "_") + M)
160+func ae (Q,Y) = ((("art_maxmint_" + Y) + "_") + Q)
151161
152162
153-func ab (M,U) = ((("art_signid_" + U) + "_") + M)
163+func af (Q,Y) = ((("art_signid_" + Y) + "_") + Q)
154164
155165
156-func ac (M,U) = ((("art_issued_" + U) + "_") + M)
166+func ag (Q,Y) = ((("art_issued_" + Y) + "_") + Q)
157167
158168
159-func ad (M,U) = ((("art_onsale_" + U) + "_") + M)
169+func ah (Q,Y) = ((("art_onsale_" + Y) + "_") + Q)
160170
161171
162-func ae (M,U) = ((("art_licence_hash_" + U) + "_") + M)
172+func ai (Q,Y) = ((("art_licence_hash_" + Y) + "_") + Q)
163173
164174
165-func af (M,U) = ((("art_licence_cid_" + U) + "_") + M)
175+func aj (Q,Y) = ((("art_licence_cid_" + Y) + "_") + Q)
166176
167177
168-func ag (M,U) = ((("art_tags_" + U) + "_") + M)
178+func ak (Q,Y) = ((("art_tags_" + Y) + "_") + Q)
169179
170180
171-func ah (M,U) = ((("art_type_" + U) + "_") + M)
181+func al (Q,Y) = ((("art_type_" + Y) + "_") + Q)
172182
173183
174-func ai (M,U) = ((("art_price_" + U) + "_") + M)
184+func am (Q,Y) = ((("art_price_" + Y) + "_") + Q)
175185
176186
177-func aj (M,U) = ((("art_assetAccepted_" + U) + "_") + M)
187+func an (Q,Y) = ((("art_assetAccepted_" + Y) + "_") + Q)
178188
179189
180-func ak (M,al) = ((("get_hashbytxidaddr_" + al) + "_") + M)
190+func ao (Q,ap) = ((("get_hashbytxidaddr_" + ap) + "_") + Q)
181191
182192
183-func am (D) = ("get_owner_by_hash_" + D)
193+func aq (D) = ("get_owner_by_hash_" + D)
184194
185195
186-func an (M,ao) = ((("get_artidbysignid_" + ao) + "_") + M)
196+func ar (Q,as) = ((("get_artidbysignid_" + as) + "_") + Q)
187197
188198
189-func ap (D,M) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((D + M)))))
199+func at (D,Q) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((D + Q)))))
190200
191201
192202 @Callable(y)
193-func registerUser (aq,ar,as,at) = {
194- let M = toString(addressFromPublicKey(y.callerPublicKey))
195- let au = t(R(M))
203+func registerUser (au,av,aw,ax) = {
204+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
205+ let ay = t(V(Q))
196206 let G = toBase58String(y.transactionId)
197- let av = lastBlock.timestamp
198- if (if ((au == n))
207+ let az = lastBlock.timestamp
208+ if (if ((ay == n))
199209 then true
200- else (au == o))
210+ else (ay == o))
201211 then throw("You are now allowed to register, your account have been suspended/ removed.")
202- else if ((au == l))
212+ else if ((ay == l))
203213 then throw("You are already registered, please use update method instead.")
204- else if (if ((au == ""))
214+ else if (if ((ay == ""))
205215 then j
206216 else false)
207217 then throw("You are now allowed to register yet, please contact us first to get approved.")
208- else if (if ((aq == ""))
218+ else if (if ((au == ""))
209219 then true
210- else (ar == ""))
220+ else (av == ""))
211221 then throw("Name and description cannot be empty")
212- else if ((size(ar) > 600))
222+ else if ((size(av) > 600))
213223 then throw("600 Characters maximum for the description")
214- else [IntegerEntry(S(M), av), StringEntry(L(M), ((G + "_") + toString(lastBlock.timestamp))), StringEntry(N(M), aq), StringEntry(O(M), ar), StringEntry(P(M), at), StringEntry(Q(M), as), StringEntry(R(M), l), StringEntry("last_invoke_id", G)]
224+ else [IntegerEntry(W(Q), az), StringEntry(P(Q), ((G + "_") + toString(lastBlock.timestamp))), StringEntry(R(Q), au), StringEntry(S(Q), av), StringEntry(T(Q), ax), StringEntry(U(Q), aw), StringEntry(V(Q), l), StringEntry("last_invoke_id", G)]
215225 }
216226
217227
218228
219229 @Callable(y)
220-func deleteEntry (aw) = {
221- let M = toString(addressFromPublicKey(y.callerPublicKey))
222- if ((M == h))
223- then [DeleteEntry(aw)]
230+func deleteEntry (aA) = {
231+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
232+ if ((Q == h))
233+ then [DeleteEntry(aA)]
224234 else throw("no")
225235 }
226236
227237
228238
229239 @Callable(y)
230-func updateUser (aq,ar,as,at) = {
231- let M = toString(addressFromPublicKey(y.callerPublicKey))
232- let au = t(R(M))
233- if (if ((au == n))
240+func updateUser (au,av,aw,ax) = {
241+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
242+ let ay = t(V(Q))
243+ if (if ((ay == n))
234244 then true
235- else (au == o))
245+ else (ay == o))
236246 then throw("You are now allowed to register, your account have been suspended/ removed.")
237- else if (if ((au == ""))
247+ else if (if ((ay == ""))
238248 then true
239- else (au == k))
249+ else (ay == k))
240250 then throw("Please register first with registerUser")
241251 else {
242252 let G = toBase58String(y.transactionId)
243- let av = lastBlock.timestamp
244- if (if ((aq == ""))
253+ let az = lastBlock.timestamp
254+ if (if ((au == ""))
245255 then true
246- else (ar == ""))
256+ else (av == ""))
247257 then throw("Name and description cannot be empty")
248- else if ((size(ar) > 600))
258+ else if ((size(av) > 600))
249259 then throw("600 Characters maximum for the description")
250- else [StringEntry(N(M), aq), StringEntry(O(M), ar), StringEntry(P(M), at), StringEntry(Q(M), as), StringEntry("last_invoke_id", G)]
260+ else [StringEntry(R(Q), au), StringEntry(S(Q), av), StringEntry(T(Q), ax), StringEntry(U(Q), aw), StringEntry("last_invoke_id", G)]
251261 }
252262 }
253263
254264
255265
256266 @Callable(y)
257-func changeUserStatus (ax,ay) = {
258- let M = toString(addressFromPublicKey(y.callerPublicKey))
267+func changeUserStatus (aB,aC) = {
268+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
259269 let G = toBase58String(y.transactionId)
260- let az = if ((ay == m))
270+ let aD = if ((aC == m))
261271 then m
262- else if ((ay == l))
272+ else if ((aC == l))
263273 then l
264- else if ((ay == n))
274+ else if ((aC == n))
265275 then n
266- else if ((ay == o))
276+ else if ((aC == o))
267277 then o
268- else if ((ay == k))
278+ else if ((aC == k))
269279 then k
270280 else throw("Unknown status")
271- if (if ((M == h))
281+ if (if ((Q == h))
272282 then true
273- else (M == i))
274- then [StringEntry(R(ax), az), StringEntry("last_invoke_id", G)]
275- else throw(((("You are not allowed to change user status " + M) + " / ") + h))
283+ else (Q == i))
284+ then [StringEntry(V(aB), aD), StringEntry("last_invoke_id", G)]
285+ else throw(((("You are not allowed to change user status " + Q) + " / ") + h))
276286 }
277287
278288
279289
280290 @Callable(y)
281-func creditUser (ax) = {
282- let M = toString(addressFromPublicKey(y.callerPublicKey))
291+func creditUser (aB) = {
292+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
283293 let G = toBase58String(y.transactionId)
284- if (if ((M == h))
294+ if (if ((Q == h))
285295 then true
286- else (M == i))
287- then [ScriptTransfer(Address(fromBase58String(ax)), 150000000000, d)]
296+ else (Q == i))
297+ then [ScriptTransfer(Address(fromBase58String(aB)), 150000000000, d)]
288298 else throw("You are not allowed to do that")
289299 }
290300
291301
292302
293-@Callable(aA)
294-func addArtwork (D,B,aq,ar,aB,aC,aD,aE,aF,aG,aH,aI) = {
295- let U = toBase58String(aA.transactionId)
296- let aJ = toBase58String(aA.caller.bytes)
297- if ((size(aA.payments) == 0))
298- then throw("No payment attached")
299- else {
300- let aK = value(aA.payments[0])
301- let aL = value(aK.amount)
302- let aM = if (if (isDefined(aK.assetId))
303- then (aK.assetId == d)
304- else false)
305- then aK.assetId
306- else throw("Only SIGN token accepted at the moment")
307- let aN = {
308- let v = getInteger(a, ("certification_fee_" + toBase58String(d)))
309- if ($isInstanceOf(v, "Int"))
310- then {
311- let aO = v
312- aO
313- }
314- else throw("Price undefined in oracle")
315- }
316- if ((aL != aN))
317- then throw(("Payment amount should be " + toString(aN)))
318- else {
319- let aP = t(ap(D, aJ))
320- if ((aP != ""))
321- then throw("You already added this artwork on Sign Art")
322- else {
323- let aQ = t(am(D))
324- if ((aQ != ""))
325- then throw("This artwork hash is already registered on Sign Art")
303+@Callable(aE)
304+func addArtwork (D,B,au,av,aF,aG,aH,aI,aJ,aK,aL,aM) = {
305+ let Y = toBase58String(aE.transactionId)
306+ let aN = toBase58String(aE.caller.bytes)
307+ if (!(I(aI)))
308+ then throw("Wrong Display CID length")
309+ else if (!(I(aK)))
310+ then throw("Wrong Export CID length")
311+ else if (!(I(aM)))
312+ then throw("Wrong Licence CID length")
313+ else if (!(K(D)))
314+ then throw("Source Hash should be 64 characters maximum")
315+ else if (!(K(aJ)))
316+ then throw("Export Hash should be 64 characters maximum")
317+ else if (!(K(aL)))
318+ then throw("Licence Hash should be 64 characters maximum")
319+ else if ((size(aE.payments) == 0))
320+ then throw("No payment attached")
326321 else {
327- let aR = A(B, aJ, D)
328- if (!(aR))
329- then throw("Sign Certificate not found on Sign-web.app smart contract for this address.")
330- else if ((size(aE) == 0))
331- then throw("Display CID cannot be empty")
332- else if ((size(aq) == 0))
333- then throw("Title cannot be empty")
334- else if ((size(aq) > 100))
335- then throw("100 Characters maximum for the name")
336- else if ((size(ar) > 1000))
337- then throw("1000 Characters maximum for the description")
338- else if ((size(ar) == 0))
339- then throw("Description cannot be empty")
340- else {
341- let aS = split(aB, ",")
342- if ((size(aS) > 5))
343- then throw("Tags should be maximum 5 single word separated by space.")
344- else {
345- let aT = {
346- let v = getString(this, ("user_status_" + aJ))
347- if ($isInstanceOf(v, "String"))
348- then {
349- let aU = v
350- aU
351- }
352- else p
353- }
354- let av = lastBlock.timestamp
355- if (if (isDefined(aT))
356- then (aT == p)
357- else false)
358- then throw("Please register this account first with \"User infos\" tab")
359- else if ((aT == n))
360- then throw("Your account is suspended")
361- else if ((aT == o))
362- then throw("Your account have been removed")
363- else if ((aD > 10))
364- then throw("Maximum 10 editions per artwork")
365- else if ((size(D) != 64))
366- then throw("Hash should be sha256 string composed of 64 char.")
367- else [StringEntry(am(D), aJ), StringEntry(ap(D, aJ), U), IntegerEntry(T(aJ, U), av), StringEntry(V(aJ, U), aq), StringEntry(W(aJ, U), ar), StringEntry(X(aJ, U), aE), StringEntry(Z(aJ, U), aG), StringEntry(Y(aJ, U), aF), StringEntry(ae(aJ, U), aH), StringEntry(af(aJ, U), aI), StringEntry(ah(aJ, U), aC), StringEntry(ag(aJ, U), aB), IntegerEntry(aa(aJ, U), aD), StringEntry(ab(aJ, U), B), IntegerEntry(ac(aJ, U), 0), BooleanEntry(ad(aJ, U), false), StringEntry(an(aJ, B), U), StringEntry("last_invoke_id", U), StringEntry(ak(aJ, U), D), ScriptTransfer(Address(fromBase58String(c)), aL, aM)]
368- }
369- }
322+ let aO = value(aE.payments[0])
323+ let aP = value(aO.amount)
324+ let aQ = if (if (isDefined(aO.assetId))
325+ then (aO.assetId == d)
326+ else false)
327+ then aO.assetId
328+ else throw("Only SIGN token accepted at the moment")
329+ let aR = {
330+ let v = getInteger(a, ("certification_fee_" + toBase58String(d)))
331+ if ($isInstanceOf(v, "Int"))
332+ then {
333+ let aS = v
334+ aS
335+ }
336+ else throw("Price undefined in oracle")
337+ }
338+ if ((aP != aR))
339+ then throw(("Payment amount should be " + toString(aR)))
340+ else {
341+ let aT = t(at(D, aN))
342+ if ((aT != ""))
343+ then throw("You already added this artwork on Sign Art")
344+ else {
345+ let aU = t(aq(D))
346+ if ((aU != ""))
347+ then throw("This artwork hash is already registered on Sign Art")
348+ else {
349+ let aV = A(B, aN, D)
350+ if (!(aV))
351+ then throw("Sign Certificate not found on Sign-web.app smart contract for this address.")
352+ else if ((size(aI) == 0))
353+ then throw("Display CID cannot be empty")
354+ else if ((size(au) == 0))
355+ then throw("Title cannot be empty")
356+ else if ((size(au) > 100))
357+ then throw("100 Characters maximum for the name")
358+ else if ((size(av) > 1000))
359+ then throw("1000 Characters maximum for the description")
360+ else if ((size(av) == 0))
361+ then throw("Description cannot be empty")
362+ else {
363+ let aW = split(aF, ",")
364+ if ((size(aW) > 5))
365+ then throw("Tags should be maximum 5 single word separated by space.")
366+ else {
367+ let aX = {
368+ let v = getString(this, ("user_status_" + aN))
369+ if ($isInstanceOf(v, "String"))
370+ then {
371+ let aY = v
372+ aY
373+ }
374+ else p
375+ }
376+ let az = lastBlock.timestamp
377+ if (if (isDefined(aX))
378+ then (aX == p)
379+ else false)
380+ then throw("Please register this account first with \"User infos\" tab")
381+ else if ((aX == n))
382+ then throw("Your account is suspended")
383+ else if ((aX == o))
384+ then throw("Your account have been removed")
385+ else if ((aH > 10))
386+ then throw("Maximum 10 editions per artwork")
387+ else if ((size(D) != 64))
388+ then throw("Hash should be sha256 string composed of 64 char.")
389+ else [StringEntry(aq(D), aN), StringEntry(at(D, aN), Y), IntegerEntry(X(aN, Y), az), StringEntry(Z(aN, Y), au), StringEntry(aa(aN, Y), av), StringEntry(ab(aN, Y), aI), StringEntry(ad(aN, Y), aK), StringEntry(ac(aN, Y), aJ), StringEntry(ai(aN, Y), aL), StringEntry(aj(aN, Y), aM), StringEntry(al(aN, Y), aG), StringEntry(ak(aN, Y), aF), IntegerEntry(ae(aN, Y), aH), StringEntry(af(aN, Y), B), IntegerEntry(ag(aN, Y), 0), BooleanEntry(ah(aN, Y), false), StringEntry(ar(aN, B), Y), StringEntry("last_invoke_id", Y), StringEntry(ao(aN, Y), D), ScriptTransfer(Address(fromBase58String(c)), aP, aQ)]
390+ }
391+ }
392+ }
393+ }
394+ }
370395 }
371- }
372- }
373- }
374396 }
375397
376398
377399
378-@Callable(aA)
379-func updateArtwork (al,aq,ar,aB,aC,aD,aE,aF,aG,aH,aI) = {
380- let aV = toBase58String(aA.transactionId)
381- let aJ = toBase58String(aA.caller.bytes)
382- let aP = t(V(aJ, al))
383- if ((aP == ""))
384- then throw("This entry doesn't exist or you are not the owner")
385- else if ((size(aq) == 0))
386- then throw("Title cannot be empty")
387- else if ((size(aq) > 100))
388- then throw("100 Characters maximum for the name")
389- else if ((size(ar) > 1000))
390- then throw("1000 Characters maximum for the description")
391- else if ((size(ar) == 0))
392- then throw("Description cannot be empty")
400+@Callable(aE)
401+func updateArtwork (ap,au,av,aF,aG,aH,aI,aJ,aK,aL,aM) = {
402+ let aZ = toBase58String(aE.transactionId)
403+ let aN = toBase58String(aE.caller.bytes)
404+ if (!(I(aI)))
405+ then throw("Display CID should be 59 characters maximum")
406+ else if (!(I(aK)))
407+ then throw("Export CID should be 59 characters maximum")
408+ else if (!(I(aM)))
409+ then throw("Licence CID should be 59 characters maximum")
410+ else if (!(K(aJ)))
411+ then throw("Export Hash should be 64 characters maximum")
412+ else if (!(K(aL)))
413+ then throw("Licence Hash should be 64 characters maximum")
393414 else {
394- let aW = {
395- let v = getInteger(this, ac(aJ, al))
396- if ($isInstanceOf(v, "Int"))
397- then {
398- let K = v
399- if ((K == 0))
400- then false
401- else true
402- }
403- else false
404- }
405- let aS = split(aB, ",")
406- if ((size(aS) > 5))
407- then throw("Tags should be maximum 5 single word separated by space.")
408- else {
409- let aT = {
410- let v = getString(this, ("user_status_" + aJ))
411- if ($isInstanceOf(v, "String"))
412- then {
413- let aU = v
414- aU
415- }
416- else p
417- }
418- if (if (isDefined(aT))
419- then (aT == p)
420- else false)
421- then throw("Please register this account first with \"User infos\" tab")
422- else if ((aT == n))
423- then throw("Your account is suspended")
424- else if ((aT == o))
425- then throw("Your account have been removed")
426- else if ((aD > 10))
427- then throw("Maximum 10 editions per artwork")
428- else if (!(aW))
429- then [StringEntry(V(aJ, al), aq), StringEntry(W(aJ, al), ar), StringEntry(X(aJ, al), aE), StringEntry(Z(aJ, al), aG), StringEntry(Y(aJ, al), aF), StringEntry(af(aJ, al), aI), StringEntry(ae(aJ, al), aH), IntegerEntry(aa(aJ, al), aD), StringEntry(ag(aJ, al), aB), StringEntry(ah(aJ, al), aC), StringEntry("last_invoke_id", aV)]
430- else [StringEntry(V(aJ, al), aq), StringEntry(W(aJ, al), ar), StringEntry(X(aJ, al), aE), StringEntry(ah(aJ, al), aC), StringEntry(ag(aJ, al), aB), StringEntry("last_invoke_id", aV)]
431- }
415+ let aT = t(Z(aN, ap))
416+ if ((aT == ""))
417+ then throw("This entry doesn't exist or you are not the owner")
418+ else if ((size(au) == 0))
419+ then throw("Title cannot be empty")
420+ else if ((size(au) > 100))
421+ then throw("100 Characters maximum for the name")
422+ else if ((size(av) > 1000))
423+ then throw("1000 Characters maximum for the description")
424+ else if ((size(av) == 0))
425+ then throw("Description cannot be empty")
426+ else {
427+ let ba = {
428+ let v = getInteger(this, ag(aN, ap))
429+ if ($isInstanceOf(v, "Int"))
430+ then {
431+ let O = v
432+ if ((O == 0))
433+ then false
434+ else true
435+ }
436+ else false
437+ }
438+ let aW = split(aF, ",")
439+ if ((size(aW) > 5))
440+ then throw("Tags should be maximum 5 single word separated by space.")
441+ else {
442+ let aX = {
443+ let v = getString(this, ("user_status_" + aN))
444+ if ($isInstanceOf(v, "String"))
445+ then {
446+ let aY = v
447+ aY
448+ }
449+ else p
450+ }
451+ if (if (isDefined(aX))
452+ then (aX == p)
453+ else false)
454+ then throw("Please register this account first with \"User infos\" tab")
455+ else if ((aX == n))
456+ then throw("Your account is suspended")
457+ else if ((aX == o))
458+ then throw("Your account have been removed")
459+ else if ((aH > 10))
460+ then throw("Maximum 10 editions per artwork")
461+ else if (!(ba))
462+ then [StringEntry(Z(aN, ap), au), StringEntry(aa(aN, ap), av), StringEntry(ab(aN, ap), aI), StringEntry(ad(aN, ap), aK), StringEntry(ac(aN, ap), aJ), StringEntry(aj(aN, ap), aM), StringEntry(ai(aN, ap), aL), IntegerEntry(ae(aN, ap), aH), StringEntry(ak(aN, ap), aF), StringEntry(al(aN, ap), aG), StringEntry("last_invoke_id", aZ)]
463+ else throw("You cannot edit artwork that have already minted NFT")
464+ }
465+ }
432466 }
433467 }
434468
435469
436470
437471 @Callable(y)
438-func deleteArtwork (U,ax) = {
439- let aJ = toString(addressFromPublicKey(y.callerPublicKey))
472+func deleteArtwork (Y,aB) = {
473+ let aN = toString(addressFromPublicKey(y.callerPublicKey))
440474 let G = toBase58String(y.transactionId)
441- let aX = if (if ((aJ == h))
475+ let bb = if (if ((aN == h))
442476 then true
443- else (aJ == i))
444- then ax
445- else aJ
446- let aP = {
447- let v = getString(this, V(aX, U))
477+ else (aN == i))
478+ then aB
479+ else aN
480+ let aT = {
481+ let v = getString(this, Z(bb, Y))
448482 if ($isInstanceOf(v, "String"))
449483 then {
450- let aU = v
451- aU
484+ let aY = v
485+ aY
452486 }
453487 else throw("No artwork matching this request or you are not allowed")
454488 }
455- let aW = {
456- let v = getInteger(this, ac(aX, U))
489+ let ba = {
490+ let v = getInteger(this, ag(bb, Y))
457491 if ($isInstanceOf(v, "Int"))
458492 then {
459- let K = v
460- if ((K == 0))
493+ let O = v
494+ if ((O == 0))
461495 then false
462496 else true
463497 }
464498 else false
465499 }
466500 let D = {
467- let v = getString(this, ak(aX, U))
501+ let v = getString(this, ao(bb, Y))
468502 if ($isInstanceOf(v, "String"))
469503 then {
470- let aU = v
471- aU
504+ let aY = v
505+ aY
472506 }
473507 else throw("No artwork hash matching this request")
474508 }
475509 let B = {
476- let v = getString(this, ab(aX, U))
510+ let v = getString(this, af(bb, Y))
477511 if ($isInstanceOf(v, "String"))
478512 then {
479- let aU = v
480- aU
513+ let aY = v
514+ aY
481515 }
482516 else throw("No SIGN ID matching this request")
483517 }
484- let aY = [DeleteEntry(T(aX, U)), DeleteEntry(V(aX, U)), DeleteEntry(W(aX, U)), DeleteEntry(X(aX, U)), DeleteEntry(Z(aX, U)), DeleteEntry(Y(aX, U)), DeleteEntry(ae(aX, U)), DeleteEntry(af(aX, U)), DeleteEntry(ah(aX, U)), DeleteEntry(ag(aX, U)), DeleteEntry(aa(aX, U)), DeleteEntry(ab(aX, U)), DeleteEntry(ac(aX, U)), DeleteEntry(ad(aX, U)), StringEntry("last_invoke_id", G), DeleteEntry(am(D)), DeleteEntry(an(aX, B)), DeleteEntry(ap(D, aX))]
485- if (if ((aJ == h))
518+ let bc = [DeleteEntry(X(bb, Y)), DeleteEntry(Z(bb, Y)), DeleteEntry(aa(bb, Y)), DeleteEntry(ab(bb, Y)), DeleteEntry(ad(bb, Y)), DeleteEntry(ac(bb, Y)), DeleteEntry(ai(bb, Y)), DeleteEntry(aj(bb, Y)), DeleteEntry(al(bb, Y)), DeleteEntry(ak(bb, Y)), DeleteEntry(ae(bb, Y)), DeleteEntry(af(bb, Y)), DeleteEntry(ag(bb, Y)), DeleteEntry(ah(bb, Y)), StringEntry("last_invoke_id", G), DeleteEntry(aq(D)), DeleteEntry(ar(bb, B)), DeleteEntry(at(D, bb))]
519+ if (if ((aN == h))
486520 then true
487- else (aJ == i))
488- then aY
489- else if (!(aW))
490- then aY
521+ else (aN == i))
522+ then bc
523+ else if (!(ba))
524+ then bc
491525 else throw("This artwork already have minted NFT, you cannot delete it")
492526 }
493527
494528
495529
496-@Callable(aA)
497-func sellArtwork (U,aO,aZ,aM) = {
498- let G = toBase58String(aA.transactionId)
499- let aJ = toBase58String(aA.caller.bytes)
500- let ba = lastBlock.timestamp
501- let bb = t(Z(aJ, U))
502- if ((size(bb) == 0))
530+@Callable(aE)
531+func sellArtwork (Y,aS,bd,aQ) = {
532+ let G = toBase58String(aE.transactionId)
533+ let aN = toBase58String(aE.caller.bytes)
534+ let be = lastBlock.timestamp
535+ let bf = t(ad(aN, Y))
536+ if ((size(bf) == 0))
503537 then throw("You cannot sell artwork with no export file")
504538 else {
505- let bc = t(Y(aJ, U))
506- if ((size(bc) == 0))
539+ let bg = t(ac(aN, Y))
540+ if ((size(bg) == 0))
507541 then throw("You cannot sell artwork with no export hash")
508- else if (if (if ((aM != toBase58String(d)))
509- then (aM != toBase58String(f))
542+ else if (if (if ((aQ != toBase58String(d)))
543+ then (aQ != toBase58String(f))
510544 else false)
511- then (aM != toBase58String(e))
545+ then (aQ != toBase58String(e))
512546 else false)
513547 then throw("Only SIGN, USDN or WAVES currency accepted at the moment")
514548 else {
515- let bd = {
516- let v = getString(this, V(aJ, U))
549+ let bh = {
550+ let v = getString(this, Z(aN, Y))
517551 if ($isInstanceOf(v, "String"))
518552 then {
519- let aU = v
520- aU
553+ let aY = v
554+ aY
521555 }
522556 else throw("This artwork doesn't exit or you are not the owner")
523557 }
524- let aT = {
525- let v = getString(this, R(aJ))
558+ let aX = {
559+ let v = getString(this, V(aN))
526560 if ($isInstanceOf(v, "String"))
527561 then {
528- let aU = v
529- aU
562+ let aY = v
563+ aY
530564 }
531565 else throw("Please register this account first")
532566 }
533- let be = {
534- let v = getInteger(this, ac(aJ, U))
567+ let bi = {
568+ let v = getInteger(this, ag(aN, Y))
535569 if ($isInstanceOf(v, "Int"))
536570 then {
537- let bf = v
538- bf
571+ let bj = v
572+ bj
539573 }
540574 else 0
541575 }
542- let bg = {
543- let v = getInteger(this, aa(aJ, U))
576+ let bk = {
577+ let v = getInteger(this, ae(aN, Y))
544578 if ($isInstanceOf(v, "Int"))
545579 then {
546- let bf = v
547- bf
580+ let bj = v
581+ bj
548582 }
549583 else 0
550584 }
551- if (if ((be != 0))
552- then (be == bg)
585+ if (if ((bi != 0))
586+ then (bi == bk)
553587 else false)
554588 then throw("You reached the max edition allowed to sell for this edition.")
555- else if (if ((be > 0))
556- then (bg != aZ)
589+ else if (if ((bi > 0))
590+ then (bk != bd)
557591 else false)
558592 then throw("You cannot change the maximum issuable anymore")
559- else if ((aT == n))
593+ else if ((aX == n))
560594 then throw("Your account is suspended")
561- else if ((aT == o))
595+ else if ((aX == o))
562596 then throw("Your account have been deleted")
563597 else {
564- let bh = if ((aO > 0))
598+ let bl = if ((aS > 0))
565599 then true
566600 else false
567-[BooleanEntry(ad(aJ, U), bh), IntegerEntry(ai(aJ, U), aO), IntegerEntry(aa(aJ, U), aZ), StringEntry(aj(aJ, U), aM), StringEntry("last_invoke_id", G)]
601+[BooleanEntry(ah(aN, Y), bl), IntegerEntry(am(aN, Y), aS), IntegerEntry(ae(aN, Y), bd), StringEntry(an(aN, Y), aQ), StringEntry("last_invoke_id", G)]
568602 }
569603 }
570604 }
572606
573607
574608
575-@Callable(aA)
576-func buyArtwork (U,bi) = {
577- let G = toBase58String(aA.transactionId)
578- let aJ = toBase58String(aA.caller.bytes)
579- let bj = x("total_nft_issued")
580- let B = t(ab(bi, U))
581- let bd = {
582- let v = getString(this, V(bi, U))
609+@Callable(aE)
610+func buyArtwork (Y,bm) = {
611+ let G = toBase58String(aE.transactionId)
612+ let aN = toBase58String(aE.caller.bytes)
613+ let bn = x("total_nft_issued")
614+ let B = t(af(bm, Y))
615+ let bh = {
616+ let v = getString(this, Z(bm, Y))
583617 if ($isInstanceOf(v, "String"))
584618 then {
585- let aU = v
586- aU
619+ let aY = v
620+ aY
587621 }
588622 else throw("This artwork doesn't exit")
589623 }
590- let bk = t(X(bi, U))
591- let bb = t(Z(bi, U))
592- let bc = t(Y(bi, U))
593- let bl = t(af(bi, U))
594- let bm = t(ae(bi, U))
595- let ar = take(t(W(bi, U)), 50)
596- let be = x(ac(bi, U))
597- let bn = x(ai(bi, U))
598- let bo = z(ad(bi, U))
599- let bp = t(aj(bi, U))
600- let bq = t(ak(bi, U))
601- if ((bn == 0))
624+ let bo = t(ab(bm, Y))
625+ let bf = t(ad(bm, Y))
626+ let bg = t(ac(bm, Y))
627+ let bp = t(aj(bm, Y))
628+ let bq = t(ai(bm, Y))
629+ let av = take(t(aa(bm, Y)), 50)
630+ let bi = x(ag(bm, Y))
631+ let br = x(am(bm, Y))
632+ let bs = z(ah(bm, Y))
633+ let bt = t(an(bm, Y))
634+ let bu = t(ao(bm, Y))
635+ if ((br == 0))
602636 then throw("This artwork is not for sell")
603- else if (!(bo))
637+ else if (!(bs))
604638 then throw("This artwork is not for sale")
605639 else {
606- let bg = x(aa(bi, U))
607- let aK = value(aA.payments[0])
608- let aL = value(aK.amount)
609- let aM = if (if (isDefined(aK.assetId))
610- then (aK.assetId == fromBase58String(bp))
640+ let bk = x(ae(bm, Y))
641+ let aO = value(aE.payments[0])
642+ let aP = value(aO.amount)
643+ let aQ = if (if (isDefined(aO.assetId))
644+ then (aO.assetId == fromBase58String(bt))
611645 else false)
612- then aK.assetId
613- else throw((("Only " + bp) + " token id accepted at the moment"))
614- if ((be == bg))
646+ then aO.assetId
647+ else throw((("Only " + bt) + " token id accepted at the moment"))
648+ if ((bi == bk))
615649 then throw("Cannot buy this artwork anymore, maximum editions reached")
616- else if ((bn != aL))
617- then throw(((("Payment don't match seller price: " + toString(bn)) + " vs ") + toString(aL)))
650+ else if ((br != aP))
651+ then throw(((("Payment don't match seller price: " + toString(br)) + " vs ") + toString(aP)))
618652 else {
619- let br = (be + 1)
620- let bs = lastBlock.timestamp
621- let bt = (((((((((((((((((((((((((((("{\"version\": 1,
622- \"creator\": \"" + bi) + "\",
623- \"artID\": \"") + U) + "\",
624- \"maxIssuable\": \"") + toString(bg)) + "\",
653+ let bv = (bi + 1)
654+ let bw = lastBlock.timestamp
655+ let bx = (((((((((((((((((((((((((((("{\"version\": 1,
656+ \"creator\": \"" + bm) + "\",
657+ \"artID\": \"") + Y) + "\",
658+ \"maxIssuable\": \"") + toString(bk)) + "\",
625659 \"signID\": \"") + B) + "\",
626- \"issue\": \"") + toString(br)) + "/") + toString(bg)) + "\",
627- \"source_hash\": \"") + bq) + "\",
628- \"artwork_name\": \"") + bd) + "\",
629- \"artwork_desc\": \"") + ar) + "\",
630- \"display_cid\": \"") + bk) + "\",
631- \"export_cid\": \"") + bb) + "\",
632- \"export_hash\": \"") + bc) + "\",
633- \"licence_cid\": \"") + bl) + "\",
634- \"licence_hash\": \"") + bm) + "\"}")
635- let bu = Issue(("SA_" + toString((bj + 1))), bt, 1, 0, false)
636- let bv = calculateAssetId(bu)
637- let bh = if ((br == bg))
660+ \"issue\": \"") + toString(bv)) + "/") + toString(bk)) + "\",
661+ \"source_hash\": \"") + bu) + "\",
662+ \"artwork_name\": \"") + bh) + "\",
663+ \"artwork_desc\": \"") + av) + "\",
664+ \"display_cid\": \"") + bo) + "\",
665+ \"export_cid\": \"") + bf) + "\",
666+ \"export_hash\": \"") + bg) + "\",
667+ \"licence_cid\": \"") + bp) + "\",
668+ \"licence_hash\": \"") + bq) + "\"}")
669+ let by = Issue(("SA_" + toString((bn + 1))), bx, 1, 0, false)
670+ let bz = calculateAssetId(by)
671+ let bl = if ((bv == bk))
638672 then false
639673 else true
640-[IntegerEntry(ac(bi, U), br), StringEntry(((((((("art_sold_" + toString(br)) + "_of_") + toString(bg)) + "_") + U) + "_") + bi), ((((((aJ + "_") + toString(bs)) + "_") + G) + "_") + toString(bn))), IntegerEntry("total_nft_issued", (bj + 1)), BooleanEntry(ad(bi, U), bh), StringEntry("last_invoke_id", G), bu, ScriptTransfer(Address(fromBase58String(bi)), aL, aM), ScriptTransfer(aA.caller, 1, bv)]
674+[IntegerEntry(ag(bm, Y), bv), StringEntry(((((((("art_sold_" + toString(bv)) + "_of_") + toString(bk)) + "_") + Y) + "_") + bm), ((((((aN + "_") + toString(bw)) + "_") + G) + "_") + toString(br))), IntegerEntry("total_nft_issued", (bn + 1)), BooleanEntry(ah(bm, Y), bl), StringEntry("last_invoke_id", G), by, ScriptTransfer(Address(fromBase58String(bm)), aP, aQ), ScriptTransfer(aE.caller, 1, bz)]
641675 }
642676 }
643677 }
645679
646680
647681 @Callable(y)
648-func deleteUser (ax) = {
649- let M = toString(addressFromPublicKey(y.callerPublicKey))
682+func deleteUser (aB) = {
683+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
650684 let G = toBase58String(y.transactionId)
651- if (if ((M == h))
685+ if (if ((Q == h))
652686 then true
653- else (M == i))
654- then [DeleteEntry(S(ax)), DeleteEntry(L(ax)), DeleteEntry(N(ax)), DeleteEntry(O(ax)), DeleteEntry(P(ax)), DeleteEntry(Q(ax)), StringEntry(R(ax), o), StringEntry("last_invoke_id", G)]
687+ else (Q == i))
688+ then [DeleteEntry(W(aB)), DeleteEntry(P(aB)), DeleteEntry(R(aB)), DeleteEntry(S(aB)), DeleteEntry(T(aB)), DeleteEntry(U(aB)), StringEntry(V(aB), o), StringEntry("last_invoke_id", G)]
655689 else throw("You are not allowed to do that")
656690 }
657691
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
55
66 let b = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
77
88 let c = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
99
1010 let d = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
1111
1212 let e = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
1313
1414 let f = base58''
1515
1616 let g = "3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC"
1717
1818 let h = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
1919
2020 let i = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
2121
2222 let j = true
2323
2424 let k = "ALLOWED"
2525
2626 let l = "REGISTERED"
2727
2828 let m = "VERIFIED"
2929
3030 let n = "SUSPENDED"
3131
3232 let o = "REMOVED"
3333
3434 let p = "UNREGISTERED"
3535
3636 let q = "ON_SALE"
3737
3838 let r = "SOLD"
3939
4040 let s = "CANCELED"
4141
4242 func t (u) = {
4343 let v = getString(this, u)
4444 if ($isInstanceOf(v, "String"))
4545 then {
4646 let w = v
4747 w
4848 }
4949 else ""
5050 }
5151
5252
5353 func x (u) = {
5454 let v = getInteger(this, u)
5555 if ($isInstanceOf(v, "Int"))
5656 then {
5757 let y = v
5858 y
5959 }
6060 else 0
6161 }
6262
6363
6464 func z (u) = {
6565 let v = getBoolean(this, u)
6666 if ($isInstanceOf(v, "Boolean"))
6767 then {
6868 let y = v
6969 y
7070 }
7171 else false
7272 }
7373
7474
7575 func A (B,C,D) = {
7676 let v = getString(b, ((("data_fc_" + B) + "_") + C))
7777 if ($isInstanceOf(v, "String"))
7878 then {
7979 let w = v
8080 if (contains(w, D))
8181 then true
8282 else false
8383 }
8484 else false
8585 }
8686
8787
8888 func E (F,G) = {
8989 let H = value(assetInfo(fromBase58String(G)))
9090 if (if (if ((H.quantity != 1))
9191 then true
9292 else (H.decimals != 0))
9393 then true
9494 else (H.reissuable != false))
9595 then (F + 0)
9696 else (F + 1)
9797 }
9898
9999
100-func I (J) = {
101- let v = getString(this, ("user_status_" + J))
100+func I (J) = if (if ((75 > size(J)))
101+ then (60 > size(split(J, "/")[0]))
102+ else false)
103+ then (16 > size(split(J, "/")[1]))
104+ else false
105+
106+
107+func K (L) = (65 > size(L))
108+
109+
110+func M (N) = {
111+ let v = getString(this, ("user_status_" + N))
102112 if ($isInstanceOf(v, "String"))
103113 then {
104- let K = v
105- K
114+ let O = v
115+ O
106116 }
107117 else throw("Something went wrong.")
108118 }
109119
110120
111-func L (M) = ("user_" + M)
121+func P (Q) = ("user_" + Q)
112122
113123
114-func N (M) = ("user_name_" + M)
124+func R (Q) = ("user_name_" + Q)
115125
116126
117-func O (M) = ("user_desc_" + M)
127+func S (Q) = ("user_desc_" + Q)
118128
119129
120-func P (M) = ("user_social_" + M)
130+func T (Q) = ("user_social_" + Q)
121131
122132
123-func Q (M) = ("user_thumb_" + M)
133+func U (Q) = ("user_thumb_" + Q)
124134
125135
126-func R (M) = ("user_status_" + M)
136+func V (Q) = ("user_status_" + Q)
127137
128138
129-func S (M) = ("user_date_" + M)
139+func W (Q) = ("user_date_" + Q)
130140
131141
132-func T (M,U) = ((("art_date_" + U) + "_") + M)
142+func X (Q,Y) = ((("art_date_" + Y) + "_") + Q)
133143
134144
135-func V (M,U) = ((("art_name_" + U) + "_") + M)
145+func Z (Q,Y) = ((("art_name_" + Y) + "_") + Q)
136146
137147
138-func W (M,U) = ((("art_desc_" + U) + "_") + M)
148+func aa (Q,Y) = ((("art_desc_" + Y) + "_") + Q)
139149
140150
141-func X (M,U) = ((("art_display_cid_" + U) + "_") + M)
151+func ab (Q,Y) = ((("art_display_cid_" + Y) + "_") + Q)
142152
143153
144-func Y (M,U) = ((("art_export_hash_" + U) + "_") + M)
154+func ac (Q,Y) = ((("art_export_hash_" + Y) + "_") + Q)
145155
146156
147-func Z (M,U) = ((("art_export_cid_" + U) + "_") + M)
157+func ad (Q,Y) = ((("art_export_cid_" + Y) + "_") + Q)
148158
149159
150-func aa (M,U) = ((("art_maxmint_" + U) + "_") + M)
160+func ae (Q,Y) = ((("art_maxmint_" + Y) + "_") + Q)
151161
152162
153-func ab (M,U) = ((("art_signid_" + U) + "_") + M)
163+func af (Q,Y) = ((("art_signid_" + Y) + "_") + Q)
154164
155165
156-func ac (M,U) = ((("art_issued_" + U) + "_") + M)
166+func ag (Q,Y) = ((("art_issued_" + Y) + "_") + Q)
157167
158168
159-func ad (M,U) = ((("art_onsale_" + U) + "_") + M)
169+func ah (Q,Y) = ((("art_onsale_" + Y) + "_") + Q)
160170
161171
162-func ae (M,U) = ((("art_licence_hash_" + U) + "_") + M)
172+func ai (Q,Y) = ((("art_licence_hash_" + Y) + "_") + Q)
163173
164174
165-func af (M,U) = ((("art_licence_cid_" + U) + "_") + M)
175+func aj (Q,Y) = ((("art_licence_cid_" + Y) + "_") + Q)
166176
167177
168-func ag (M,U) = ((("art_tags_" + U) + "_") + M)
178+func ak (Q,Y) = ((("art_tags_" + Y) + "_") + Q)
169179
170180
171-func ah (M,U) = ((("art_type_" + U) + "_") + M)
181+func al (Q,Y) = ((("art_type_" + Y) + "_") + Q)
172182
173183
174-func ai (M,U) = ((("art_price_" + U) + "_") + M)
184+func am (Q,Y) = ((("art_price_" + Y) + "_") + Q)
175185
176186
177-func aj (M,U) = ((("art_assetAccepted_" + U) + "_") + M)
187+func an (Q,Y) = ((("art_assetAccepted_" + Y) + "_") + Q)
178188
179189
180-func ak (M,al) = ((("get_hashbytxidaddr_" + al) + "_") + M)
190+func ao (Q,ap) = ((("get_hashbytxidaddr_" + ap) + "_") + Q)
181191
182192
183-func am (D) = ("get_owner_by_hash_" + D)
193+func aq (D) = ("get_owner_by_hash_" + D)
184194
185195
186-func an (M,ao) = ((("get_artidbysignid_" + ao) + "_") + M)
196+func ar (Q,as) = ((("get_artidbysignid_" + as) + "_") + Q)
187197
188198
189-func ap (D,M) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((D + M)))))
199+func at (D,Q) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((D + Q)))))
190200
191201
192202 @Callable(y)
193-func registerUser (aq,ar,as,at) = {
194- let M = toString(addressFromPublicKey(y.callerPublicKey))
195- let au = t(R(M))
203+func registerUser (au,av,aw,ax) = {
204+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
205+ let ay = t(V(Q))
196206 let G = toBase58String(y.transactionId)
197- let av = lastBlock.timestamp
198- if (if ((au == n))
207+ let az = lastBlock.timestamp
208+ if (if ((ay == n))
199209 then true
200- else (au == o))
210+ else (ay == o))
201211 then throw("You are now allowed to register, your account have been suspended/ removed.")
202- else if ((au == l))
212+ else if ((ay == l))
203213 then throw("You are already registered, please use update method instead.")
204- else if (if ((au == ""))
214+ else if (if ((ay == ""))
205215 then j
206216 else false)
207217 then throw("You are now allowed to register yet, please contact us first to get approved.")
208- else if (if ((aq == ""))
218+ else if (if ((au == ""))
209219 then true
210- else (ar == ""))
220+ else (av == ""))
211221 then throw("Name and description cannot be empty")
212- else if ((size(ar) > 600))
222+ else if ((size(av) > 600))
213223 then throw("600 Characters maximum for the description")
214- else [IntegerEntry(S(M), av), StringEntry(L(M), ((G + "_") + toString(lastBlock.timestamp))), StringEntry(N(M), aq), StringEntry(O(M), ar), StringEntry(P(M), at), StringEntry(Q(M), as), StringEntry(R(M), l), StringEntry("last_invoke_id", G)]
224+ else [IntegerEntry(W(Q), az), StringEntry(P(Q), ((G + "_") + toString(lastBlock.timestamp))), StringEntry(R(Q), au), StringEntry(S(Q), av), StringEntry(T(Q), ax), StringEntry(U(Q), aw), StringEntry(V(Q), l), StringEntry("last_invoke_id", G)]
215225 }
216226
217227
218228
219229 @Callable(y)
220-func deleteEntry (aw) = {
221- let M = toString(addressFromPublicKey(y.callerPublicKey))
222- if ((M == h))
223- then [DeleteEntry(aw)]
230+func deleteEntry (aA) = {
231+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
232+ if ((Q == h))
233+ then [DeleteEntry(aA)]
224234 else throw("no")
225235 }
226236
227237
228238
229239 @Callable(y)
230-func updateUser (aq,ar,as,at) = {
231- let M = toString(addressFromPublicKey(y.callerPublicKey))
232- let au = t(R(M))
233- if (if ((au == n))
240+func updateUser (au,av,aw,ax) = {
241+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
242+ let ay = t(V(Q))
243+ if (if ((ay == n))
234244 then true
235- else (au == o))
245+ else (ay == o))
236246 then throw("You are now allowed to register, your account have been suspended/ removed.")
237- else if (if ((au == ""))
247+ else if (if ((ay == ""))
238248 then true
239- else (au == k))
249+ else (ay == k))
240250 then throw("Please register first with registerUser")
241251 else {
242252 let G = toBase58String(y.transactionId)
243- let av = lastBlock.timestamp
244- if (if ((aq == ""))
253+ let az = lastBlock.timestamp
254+ if (if ((au == ""))
245255 then true
246- else (ar == ""))
256+ else (av == ""))
247257 then throw("Name and description cannot be empty")
248- else if ((size(ar) > 600))
258+ else if ((size(av) > 600))
249259 then throw("600 Characters maximum for the description")
250- else [StringEntry(N(M), aq), StringEntry(O(M), ar), StringEntry(P(M), at), StringEntry(Q(M), as), StringEntry("last_invoke_id", G)]
260+ else [StringEntry(R(Q), au), StringEntry(S(Q), av), StringEntry(T(Q), ax), StringEntry(U(Q), aw), StringEntry("last_invoke_id", G)]
251261 }
252262 }
253263
254264
255265
256266 @Callable(y)
257-func changeUserStatus (ax,ay) = {
258- let M = toString(addressFromPublicKey(y.callerPublicKey))
267+func changeUserStatus (aB,aC) = {
268+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
259269 let G = toBase58String(y.transactionId)
260- let az = if ((ay == m))
270+ let aD = if ((aC == m))
261271 then m
262- else if ((ay == l))
272+ else if ((aC == l))
263273 then l
264- else if ((ay == n))
274+ else if ((aC == n))
265275 then n
266- else if ((ay == o))
276+ else if ((aC == o))
267277 then o
268- else if ((ay == k))
278+ else if ((aC == k))
269279 then k
270280 else throw("Unknown status")
271- if (if ((M == h))
281+ if (if ((Q == h))
272282 then true
273- else (M == i))
274- then [StringEntry(R(ax), az), StringEntry("last_invoke_id", G)]
275- else throw(((("You are not allowed to change user status " + M) + " / ") + h))
283+ else (Q == i))
284+ then [StringEntry(V(aB), aD), StringEntry("last_invoke_id", G)]
285+ else throw(((("You are not allowed to change user status " + Q) + " / ") + h))
276286 }
277287
278288
279289
280290 @Callable(y)
281-func creditUser (ax) = {
282- let M = toString(addressFromPublicKey(y.callerPublicKey))
291+func creditUser (aB) = {
292+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
283293 let G = toBase58String(y.transactionId)
284- if (if ((M == h))
294+ if (if ((Q == h))
285295 then true
286- else (M == i))
287- then [ScriptTransfer(Address(fromBase58String(ax)), 150000000000, d)]
296+ else (Q == i))
297+ then [ScriptTransfer(Address(fromBase58String(aB)), 150000000000, d)]
288298 else throw("You are not allowed to do that")
289299 }
290300
291301
292302
293-@Callable(aA)
294-func addArtwork (D,B,aq,ar,aB,aC,aD,aE,aF,aG,aH,aI) = {
295- let U = toBase58String(aA.transactionId)
296- let aJ = toBase58String(aA.caller.bytes)
297- if ((size(aA.payments) == 0))
298- then throw("No payment attached")
299- else {
300- let aK = value(aA.payments[0])
301- let aL = value(aK.amount)
302- let aM = if (if (isDefined(aK.assetId))
303- then (aK.assetId == d)
304- else false)
305- then aK.assetId
306- else throw("Only SIGN token accepted at the moment")
307- let aN = {
308- let v = getInteger(a, ("certification_fee_" + toBase58String(d)))
309- if ($isInstanceOf(v, "Int"))
310- then {
311- let aO = v
312- aO
313- }
314- else throw("Price undefined in oracle")
315- }
316- if ((aL != aN))
317- then throw(("Payment amount should be " + toString(aN)))
318- else {
319- let aP = t(ap(D, aJ))
320- if ((aP != ""))
321- then throw("You already added this artwork on Sign Art")
322- else {
323- let aQ = t(am(D))
324- if ((aQ != ""))
325- then throw("This artwork hash is already registered on Sign Art")
303+@Callable(aE)
304+func addArtwork (D,B,au,av,aF,aG,aH,aI,aJ,aK,aL,aM) = {
305+ let Y = toBase58String(aE.transactionId)
306+ let aN = toBase58String(aE.caller.bytes)
307+ if (!(I(aI)))
308+ then throw("Wrong Display CID length")
309+ else if (!(I(aK)))
310+ then throw("Wrong Export CID length")
311+ else if (!(I(aM)))
312+ then throw("Wrong Licence CID length")
313+ else if (!(K(D)))
314+ then throw("Source Hash should be 64 characters maximum")
315+ else if (!(K(aJ)))
316+ then throw("Export Hash should be 64 characters maximum")
317+ else if (!(K(aL)))
318+ then throw("Licence Hash should be 64 characters maximum")
319+ else if ((size(aE.payments) == 0))
320+ then throw("No payment attached")
326321 else {
327- let aR = A(B, aJ, D)
328- if (!(aR))
329- then throw("Sign Certificate not found on Sign-web.app smart contract for this address.")
330- else if ((size(aE) == 0))
331- then throw("Display CID cannot be empty")
332- else if ((size(aq) == 0))
333- then throw("Title cannot be empty")
334- else if ((size(aq) > 100))
335- then throw("100 Characters maximum for the name")
336- else if ((size(ar) > 1000))
337- then throw("1000 Characters maximum for the description")
338- else if ((size(ar) == 0))
339- then throw("Description cannot be empty")
340- else {
341- let aS = split(aB, ",")
342- if ((size(aS) > 5))
343- then throw("Tags should be maximum 5 single word separated by space.")
344- else {
345- let aT = {
346- let v = getString(this, ("user_status_" + aJ))
347- if ($isInstanceOf(v, "String"))
348- then {
349- let aU = v
350- aU
351- }
352- else p
353- }
354- let av = lastBlock.timestamp
355- if (if (isDefined(aT))
356- then (aT == p)
357- else false)
358- then throw("Please register this account first with \"User infos\" tab")
359- else if ((aT == n))
360- then throw("Your account is suspended")
361- else if ((aT == o))
362- then throw("Your account have been removed")
363- else if ((aD > 10))
364- then throw("Maximum 10 editions per artwork")
365- else if ((size(D) != 64))
366- then throw("Hash should be sha256 string composed of 64 char.")
367- else [StringEntry(am(D), aJ), StringEntry(ap(D, aJ), U), IntegerEntry(T(aJ, U), av), StringEntry(V(aJ, U), aq), StringEntry(W(aJ, U), ar), StringEntry(X(aJ, U), aE), StringEntry(Z(aJ, U), aG), StringEntry(Y(aJ, U), aF), StringEntry(ae(aJ, U), aH), StringEntry(af(aJ, U), aI), StringEntry(ah(aJ, U), aC), StringEntry(ag(aJ, U), aB), IntegerEntry(aa(aJ, U), aD), StringEntry(ab(aJ, U), B), IntegerEntry(ac(aJ, U), 0), BooleanEntry(ad(aJ, U), false), StringEntry(an(aJ, B), U), StringEntry("last_invoke_id", U), StringEntry(ak(aJ, U), D), ScriptTransfer(Address(fromBase58String(c)), aL, aM)]
368- }
369- }
322+ let aO = value(aE.payments[0])
323+ let aP = value(aO.amount)
324+ let aQ = if (if (isDefined(aO.assetId))
325+ then (aO.assetId == d)
326+ else false)
327+ then aO.assetId
328+ else throw("Only SIGN token accepted at the moment")
329+ let aR = {
330+ let v = getInteger(a, ("certification_fee_" + toBase58String(d)))
331+ if ($isInstanceOf(v, "Int"))
332+ then {
333+ let aS = v
334+ aS
335+ }
336+ else throw("Price undefined in oracle")
337+ }
338+ if ((aP != aR))
339+ then throw(("Payment amount should be " + toString(aR)))
340+ else {
341+ let aT = t(at(D, aN))
342+ if ((aT != ""))
343+ then throw("You already added this artwork on Sign Art")
344+ else {
345+ let aU = t(aq(D))
346+ if ((aU != ""))
347+ then throw("This artwork hash is already registered on Sign Art")
348+ else {
349+ let aV = A(B, aN, D)
350+ if (!(aV))
351+ then throw("Sign Certificate not found on Sign-web.app smart contract for this address.")
352+ else if ((size(aI) == 0))
353+ then throw("Display CID cannot be empty")
354+ else if ((size(au) == 0))
355+ then throw("Title cannot be empty")
356+ else if ((size(au) > 100))
357+ then throw("100 Characters maximum for the name")
358+ else if ((size(av) > 1000))
359+ then throw("1000 Characters maximum for the description")
360+ else if ((size(av) == 0))
361+ then throw("Description cannot be empty")
362+ else {
363+ let aW = split(aF, ",")
364+ if ((size(aW) > 5))
365+ then throw("Tags should be maximum 5 single word separated by space.")
366+ else {
367+ let aX = {
368+ let v = getString(this, ("user_status_" + aN))
369+ if ($isInstanceOf(v, "String"))
370+ then {
371+ let aY = v
372+ aY
373+ }
374+ else p
375+ }
376+ let az = lastBlock.timestamp
377+ if (if (isDefined(aX))
378+ then (aX == p)
379+ else false)
380+ then throw("Please register this account first with \"User infos\" tab")
381+ else if ((aX == n))
382+ then throw("Your account is suspended")
383+ else if ((aX == o))
384+ then throw("Your account have been removed")
385+ else if ((aH > 10))
386+ then throw("Maximum 10 editions per artwork")
387+ else if ((size(D) != 64))
388+ then throw("Hash should be sha256 string composed of 64 char.")
389+ else [StringEntry(aq(D), aN), StringEntry(at(D, aN), Y), IntegerEntry(X(aN, Y), az), StringEntry(Z(aN, Y), au), StringEntry(aa(aN, Y), av), StringEntry(ab(aN, Y), aI), StringEntry(ad(aN, Y), aK), StringEntry(ac(aN, Y), aJ), StringEntry(ai(aN, Y), aL), StringEntry(aj(aN, Y), aM), StringEntry(al(aN, Y), aG), StringEntry(ak(aN, Y), aF), IntegerEntry(ae(aN, Y), aH), StringEntry(af(aN, Y), B), IntegerEntry(ag(aN, Y), 0), BooleanEntry(ah(aN, Y), false), StringEntry(ar(aN, B), Y), StringEntry("last_invoke_id", Y), StringEntry(ao(aN, Y), D), ScriptTransfer(Address(fromBase58String(c)), aP, aQ)]
390+ }
391+ }
392+ }
393+ }
394+ }
370395 }
371- }
372- }
373- }
374396 }
375397
376398
377399
378-@Callable(aA)
379-func updateArtwork (al,aq,ar,aB,aC,aD,aE,aF,aG,aH,aI) = {
380- let aV = toBase58String(aA.transactionId)
381- let aJ = toBase58String(aA.caller.bytes)
382- let aP = t(V(aJ, al))
383- if ((aP == ""))
384- then throw("This entry doesn't exist or you are not the owner")
385- else if ((size(aq) == 0))
386- then throw("Title cannot be empty")
387- else if ((size(aq) > 100))
388- then throw("100 Characters maximum for the name")
389- else if ((size(ar) > 1000))
390- then throw("1000 Characters maximum for the description")
391- else if ((size(ar) == 0))
392- then throw("Description cannot be empty")
400+@Callable(aE)
401+func updateArtwork (ap,au,av,aF,aG,aH,aI,aJ,aK,aL,aM) = {
402+ let aZ = toBase58String(aE.transactionId)
403+ let aN = toBase58String(aE.caller.bytes)
404+ if (!(I(aI)))
405+ then throw("Display CID should be 59 characters maximum")
406+ else if (!(I(aK)))
407+ then throw("Export CID should be 59 characters maximum")
408+ else if (!(I(aM)))
409+ then throw("Licence CID should be 59 characters maximum")
410+ else if (!(K(aJ)))
411+ then throw("Export Hash should be 64 characters maximum")
412+ else if (!(K(aL)))
413+ then throw("Licence Hash should be 64 characters maximum")
393414 else {
394- let aW = {
395- let v = getInteger(this, ac(aJ, al))
396- if ($isInstanceOf(v, "Int"))
397- then {
398- let K = v
399- if ((K == 0))
400- then false
401- else true
402- }
403- else false
404- }
405- let aS = split(aB, ",")
406- if ((size(aS) > 5))
407- then throw("Tags should be maximum 5 single word separated by space.")
408- else {
409- let aT = {
410- let v = getString(this, ("user_status_" + aJ))
411- if ($isInstanceOf(v, "String"))
412- then {
413- let aU = v
414- aU
415- }
416- else p
417- }
418- if (if (isDefined(aT))
419- then (aT == p)
420- else false)
421- then throw("Please register this account first with \"User infos\" tab")
422- else if ((aT == n))
423- then throw("Your account is suspended")
424- else if ((aT == o))
425- then throw("Your account have been removed")
426- else if ((aD > 10))
427- then throw("Maximum 10 editions per artwork")
428- else if (!(aW))
429- then [StringEntry(V(aJ, al), aq), StringEntry(W(aJ, al), ar), StringEntry(X(aJ, al), aE), StringEntry(Z(aJ, al), aG), StringEntry(Y(aJ, al), aF), StringEntry(af(aJ, al), aI), StringEntry(ae(aJ, al), aH), IntegerEntry(aa(aJ, al), aD), StringEntry(ag(aJ, al), aB), StringEntry(ah(aJ, al), aC), StringEntry("last_invoke_id", aV)]
430- else [StringEntry(V(aJ, al), aq), StringEntry(W(aJ, al), ar), StringEntry(X(aJ, al), aE), StringEntry(ah(aJ, al), aC), StringEntry(ag(aJ, al), aB), StringEntry("last_invoke_id", aV)]
431- }
415+ let aT = t(Z(aN, ap))
416+ if ((aT == ""))
417+ then throw("This entry doesn't exist or you are not the owner")
418+ else if ((size(au) == 0))
419+ then throw("Title cannot be empty")
420+ else if ((size(au) > 100))
421+ then throw("100 Characters maximum for the name")
422+ else if ((size(av) > 1000))
423+ then throw("1000 Characters maximum for the description")
424+ else if ((size(av) == 0))
425+ then throw("Description cannot be empty")
426+ else {
427+ let ba = {
428+ let v = getInteger(this, ag(aN, ap))
429+ if ($isInstanceOf(v, "Int"))
430+ then {
431+ let O = v
432+ if ((O == 0))
433+ then false
434+ else true
435+ }
436+ else false
437+ }
438+ let aW = split(aF, ",")
439+ if ((size(aW) > 5))
440+ then throw("Tags should be maximum 5 single word separated by space.")
441+ else {
442+ let aX = {
443+ let v = getString(this, ("user_status_" + aN))
444+ if ($isInstanceOf(v, "String"))
445+ then {
446+ let aY = v
447+ aY
448+ }
449+ else p
450+ }
451+ if (if (isDefined(aX))
452+ then (aX == p)
453+ else false)
454+ then throw("Please register this account first with \"User infos\" tab")
455+ else if ((aX == n))
456+ then throw("Your account is suspended")
457+ else if ((aX == o))
458+ then throw("Your account have been removed")
459+ else if ((aH > 10))
460+ then throw("Maximum 10 editions per artwork")
461+ else if (!(ba))
462+ then [StringEntry(Z(aN, ap), au), StringEntry(aa(aN, ap), av), StringEntry(ab(aN, ap), aI), StringEntry(ad(aN, ap), aK), StringEntry(ac(aN, ap), aJ), StringEntry(aj(aN, ap), aM), StringEntry(ai(aN, ap), aL), IntegerEntry(ae(aN, ap), aH), StringEntry(ak(aN, ap), aF), StringEntry(al(aN, ap), aG), StringEntry("last_invoke_id", aZ)]
463+ else throw("You cannot edit artwork that have already minted NFT")
464+ }
465+ }
432466 }
433467 }
434468
435469
436470
437471 @Callable(y)
438-func deleteArtwork (U,ax) = {
439- let aJ = toString(addressFromPublicKey(y.callerPublicKey))
472+func deleteArtwork (Y,aB) = {
473+ let aN = toString(addressFromPublicKey(y.callerPublicKey))
440474 let G = toBase58String(y.transactionId)
441- let aX = if (if ((aJ == h))
475+ let bb = if (if ((aN == h))
442476 then true
443- else (aJ == i))
444- then ax
445- else aJ
446- let aP = {
447- let v = getString(this, V(aX, U))
477+ else (aN == i))
478+ then aB
479+ else aN
480+ let aT = {
481+ let v = getString(this, Z(bb, Y))
448482 if ($isInstanceOf(v, "String"))
449483 then {
450- let aU = v
451- aU
484+ let aY = v
485+ aY
452486 }
453487 else throw("No artwork matching this request or you are not allowed")
454488 }
455- let aW = {
456- let v = getInteger(this, ac(aX, U))
489+ let ba = {
490+ let v = getInteger(this, ag(bb, Y))
457491 if ($isInstanceOf(v, "Int"))
458492 then {
459- let K = v
460- if ((K == 0))
493+ let O = v
494+ if ((O == 0))
461495 then false
462496 else true
463497 }
464498 else false
465499 }
466500 let D = {
467- let v = getString(this, ak(aX, U))
501+ let v = getString(this, ao(bb, Y))
468502 if ($isInstanceOf(v, "String"))
469503 then {
470- let aU = v
471- aU
504+ let aY = v
505+ aY
472506 }
473507 else throw("No artwork hash matching this request")
474508 }
475509 let B = {
476- let v = getString(this, ab(aX, U))
510+ let v = getString(this, af(bb, Y))
477511 if ($isInstanceOf(v, "String"))
478512 then {
479- let aU = v
480- aU
513+ let aY = v
514+ aY
481515 }
482516 else throw("No SIGN ID matching this request")
483517 }
484- let aY = [DeleteEntry(T(aX, U)), DeleteEntry(V(aX, U)), DeleteEntry(W(aX, U)), DeleteEntry(X(aX, U)), DeleteEntry(Z(aX, U)), DeleteEntry(Y(aX, U)), DeleteEntry(ae(aX, U)), DeleteEntry(af(aX, U)), DeleteEntry(ah(aX, U)), DeleteEntry(ag(aX, U)), DeleteEntry(aa(aX, U)), DeleteEntry(ab(aX, U)), DeleteEntry(ac(aX, U)), DeleteEntry(ad(aX, U)), StringEntry("last_invoke_id", G), DeleteEntry(am(D)), DeleteEntry(an(aX, B)), DeleteEntry(ap(D, aX))]
485- if (if ((aJ == h))
518+ let bc = [DeleteEntry(X(bb, Y)), DeleteEntry(Z(bb, Y)), DeleteEntry(aa(bb, Y)), DeleteEntry(ab(bb, Y)), DeleteEntry(ad(bb, Y)), DeleteEntry(ac(bb, Y)), DeleteEntry(ai(bb, Y)), DeleteEntry(aj(bb, Y)), DeleteEntry(al(bb, Y)), DeleteEntry(ak(bb, Y)), DeleteEntry(ae(bb, Y)), DeleteEntry(af(bb, Y)), DeleteEntry(ag(bb, Y)), DeleteEntry(ah(bb, Y)), StringEntry("last_invoke_id", G), DeleteEntry(aq(D)), DeleteEntry(ar(bb, B)), DeleteEntry(at(D, bb))]
519+ if (if ((aN == h))
486520 then true
487- else (aJ == i))
488- then aY
489- else if (!(aW))
490- then aY
521+ else (aN == i))
522+ then bc
523+ else if (!(ba))
524+ then bc
491525 else throw("This artwork already have minted NFT, you cannot delete it")
492526 }
493527
494528
495529
496-@Callable(aA)
497-func sellArtwork (U,aO,aZ,aM) = {
498- let G = toBase58String(aA.transactionId)
499- let aJ = toBase58String(aA.caller.bytes)
500- let ba = lastBlock.timestamp
501- let bb = t(Z(aJ, U))
502- if ((size(bb) == 0))
530+@Callable(aE)
531+func sellArtwork (Y,aS,bd,aQ) = {
532+ let G = toBase58String(aE.transactionId)
533+ let aN = toBase58String(aE.caller.bytes)
534+ let be = lastBlock.timestamp
535+ let bf = t(ad(aN, Y))
536+ if ((size(bf) == 0))
503537 then throw("You cannot sell artwork with no export file")
504538 else {
505- let bc = t(Y(aJ, U))
506- if ((size(bc) == 0))
539+ let bg = t(ac(aN, Y))
540+ if ((size(bg) == 0))
507541 then throw("You cannot sell artwork with no export hash")
508- else if (if (if ((aM != toBase58String(d)))
509- then (aM != toBase58String(f))
542+ else if (if (if ((aQ != toBase58String(d)))
543+ then (aQ != toBase58String(f))
510544 else false)
511- then (aM != toBase58String(e))
545+ then (aQ != toBase58String(e))
512546 else false)
513547 then throw("Only SIGN, USDN or WAVES currency accepted at the moment")
514548 else {
515- let bd = {
516- let v = getString(this, V(aJ, U))
549+ let bh = {
550+ let v = getString(this, Z(aN, Y))
517551 if ($isInstanceOf(v, "String"))
518552 then {
519- let aU = v
520- aU
553+ let aY = v
554+ aY
521555 }
522556 else throw("This artwork doesn't exit or you are not the owner")
523557 }
524- let aT = {
525- let v = getString(this, R(aJ))
558+ let aX = {
559+ let v = getString(this, V(aN))
526560 if ($isInstanceOf(v, "String"))
527561 then {
528- let aU = v
529- aU
562+ let aY = v
563+ aY
530564 }
531565 else throw("Please register this account first")
532566 }
533- let be = {
534- let v = getInteger(this, ac(aJ, U))
567+ let bi = {
568+ let v = getInteger(this, ag(aN, Y))
535569 if ($isInstanceOf(v, "Int"))
536570 then {
537- let bf = v
538- bf
571+ let bj = v
572+ bj
539573 }
540574 else 0
541575 }
542- let bg = {
543- let v = getInteger(this, aa(aJ, U))
576+ let bk = {
577+ let v = getInteger(this, ae(aN, Y))
544578 if ($isInstanceOf(v, "Int"))
545579 then {
546- let bf = v
547- bf
580+ let bj = v
581+ bj
548582 }
549583 else 0
550584 }
551- if (if ((be != 0))
552- then (be == bg)
585+ if (if ((bi != 0))
586+ then (bi == bk)
553587 else false)
554588 then throw("You reached the max edition allowed to sell for this edition.")
555- else if (if ((be > 0))
556- then (bg != aZ)
589+ else if (if ((bi > 0))
590+ then (bk != bd)
557591 else false)
558592 then throw("You cannot change the maximum issuable anymore")
559- else if ((aT == n))
593+ else if ((aX == n))
560594 then throw("Your account is suspended")
561- else if ((aT == o))
595+ else if ((aX == o))
562596 then throw("Your account have been deleted")
563597 else {
564- let bh = if ((aO > 0))
598+ let bl = if ((aS > 0))
565599 then true
566600 else false
567-[BooleanEntry(ad(aJ, U), bh), IntegerEntry(ai(aJ, U), aO), IntegerEntry(aa(aJ, U), aZ), StringEntry(aj(aJ, U), aM), StringEntry("last_invoke_id", G)]
601+[BooleanEntry(ah(aN, Y), bl), IntegerEntry(am(aN, Y), aS), IntegerEntry(ae(aN, Y), bd), StringEntry(an(aN, Y), aQ), StringEntry("last_invoke_id", G)]
568602 }
569603 }
570604 }
571605 }
572606
573607
574608
575-@Callable(aA)
576-func buyArtwork (U,bi) = {
577- let G = toBase58String(aA.transactionId)
578- let aJ = toBase58String(aA.caller.bytes)
579- let bj = x("total_nft_issued")
580- let B = t(ab(bi, U))
581- let bd = {
582- let v = getString(this, V(bi, U))
609+@Callable(aE)
610+func buyArtwork (Y,bm) = {
611+ let G = toBase58String(aE.transactionId)
612+ let aN = toBase58String(aE.caller.bytes)
613+ let bn = x("total_nft_issued")
614+ let B = t(af(bm, Y))
615+ let bh = {
616+ let v = getString(this, Z(bm, Y))
583617 if ($isInstanceOf(v, "String"))
584618 then {
585- let aU = v
586- aU
619+ let aY = v
620+ aY
587621 }
588622 else throw("This artwork doesn't exit")
589623 }
590- let bk = t(X(bi, U))
591- let bb = t(Z(bi, U))
592- let bc = t(Y(bi, U))
593- let bl = t(af(bi, U))
594- let bm = t(ae(bi, U))
595- let ar = take(t(W(bi, U)), 50)
596- let be = x(ac(bi, U))
597- let bn = x(ai(bi, U))
598- let bo = z(ad(bi, U))
599- let bp = t(aj(bi, U))
600- let bq = t(ak(bi, U))
601- if ((bn == 0))
624+ let bo = t(ab(bm, Y))
625+ let bf = t(ad(bm, Y))
626+ let bg = t(ac(bm, Y))
627+ let bp = t(aj(bm, Y))
628+ let bq = t(ai(bm, Y))
629+ let av = take(t(aa(bm, Y)), 50)
630+ let bi = x(ag(bm, Y))
631+ let br = x(am(bm, Y))
632+ let bs = z(ah(bm, Y))
633+ let bt = t(an(bm, Y))
634+ let bu = t(ao(bm, Y))
635+ if ((br == 0))
602636 then throw("This artwork is not for sell")
603- else if (!(bo))
637+ else if (!(bs))
604638 then throw("This artwork is not for sale")
605639 else {
606- let bg = x(aa(bi, U))
607- let aK = value(aA.payments[0])
608- let aL = value(aK.amount)
609- let aM = if (if (isDefined(aK.assetId))
610- then (aK.assetId == fromBase58String(bp))
640+ let bk = x(ae(bm, Y))
641+ let aO = value(aE.payments[0])
642+ let aP = value(aO.amount)
643+ let aQ = if (if (isDefined(aO.assetId))
644+ then (aO.assetId == fromBase58String(bt))
611645 else false)
612- then aK.assetId
613- else throw((("Only " + bp) + " token id accepted at the moment"))
614- if ((be == bg))
646+ then aO.assetId
647+ else throw((("Only " + bt) + " token id accepted at the moment"))
648+ if ((bi == bk))
615649 then throw("Cannot buy this artwork anymore, maximum editions reached")
616- else if ((bn != aL))
617- then throw(((("Payment don't match seller price: " + toString(bn)) + " vs ") + toString(aL)))
650+ else if ((br != aP))
651+ then throw(((("Payment don't match seller price: " + toString(br)) + " vs ") + toString(aP)))
618652 else {
619- let br = (be + 1)
620- let bs = lastBlock.timestamp
621- let bt = (((((((((((((((((((((((((((("{\"version\": 1,
622- \"creator\": \"" + bi) + "\",
623- \"artID\": \"") + U) + "\",
624- \"maxIssuable\": \"") + toString(bg)) + "\",
653+ let bv = (bi + 1)
654+ let bw = lastBlock.timestamp
655+ let bx = (((((((((((((((((((((((((((("{\"version\": 1,
656+ \"creator\": \"" + bm) + "\",
657+ \"artID\": \"") + Y) + "\",
658+ \"maxIssuable\": \"") + toString(bk)) + "\",
625659 \"signID\": \"") + B) + "\",
626- \"issue\": \"") + toString(br)) + "/") + toString(bg)) + "\",
627- \"source_hash\": \"") + bq) + "\",
628- \"artwork_name\": \"") + bd) + "\",
629- \"artwork_desc\": \"") + ar) + "\",
630- \"display_cid\": \"") + bk) + "\",
631- \"export_cid\": \"") + bb) + "\",
632- \"export_hash\": \"") + bc) + "\",
633- \"licence_cid\": \"") + bl) + "\",
634- \"licence_hash\": \"") + bm) + "\"}")
635- let bu = Issue(("SA_" + toString((bj + 1))), bt, 1, 0, false)
636- let bv = calculateAssetId(bu)
637- let bh = if ((br == bg))
660+ \"issue\": \"") + toString(bv)) + "/") + toString(bk)) + "\",
661+ \"source_hash\": \"") + bu) + "\",
662+ \"artwork_name\": \"") + bh) + "\",
663+ \"artwork_desc\": \"") + av) + "\",
664+ \"display_cid\": \"") + bo) + "\",
665+ \"export_cid\": \"") + bf) + "\",
666+ \"export_hash\": \"") + bg) + "\",
667+ \"licence_cid\": \"") + bp) + "\",
668+ \"licence_hash\": \"") + bq) + "\"}")
669+ let by = Issue(("SA_" + toString((bn + 1))), bx, 1, 0, false)
670+ let bz = calculateAssetId(by)
671+ let bl = if ((bv == bk))
638672 then false
639673 else true
640-[IntegerEntry(ac(bi, U), br), StringEntry(((((((("art_sold_" + toString(br)) + "_of_") + toString(bg)) + "_") + U) + "_") + bi), ((((((aJ + "_") + toString(bs)) + "_") + G) + "_") + toString(bn))), IntegerEntry("total_nft_issued", (bj + 1)), BooleanEntry(ad(bi, U), bh), StringEntry("last_invoke_id", G), bu, ScriptTransfer(Address(fromBase58String(bi)), aL, aM), ScriptTransfer(aA.caller, 1, bv)]
674+[IntegerEntry(ag(bm, Y), bv), StringEntry(((((((("art_sold_" + toString(bv)) + "_of_") + toString(bk)) + "_") + Y) + "_") + bm), ((((((aN + "_") + toString(bw)) + "_") + G) + "_") + toString(br))), IntegerEntry("total_nft_issued", (bn + 1)), BooleanEntry(ah(bm, Y), bl), StringEntry("last_invoke_id", G), by, ScriptTransfer(Address(fromBase58String(bm)), aP, aQ), ScriptTransfer(aE.caller, 1, bz)]
641675 }
642676 }
643677 }
644678
645679
646680
647681 @Callable(y)
648-func deleteUser (ax) = {
649- let M = toString(addressFromPublicKey(y.callerPublicKey))
682+func deleteUser (aB) = {
683+ let Q = toString(addressFromPublicKey(y.callerPublicKey))
650684 let G = toBase58String(y.transactionId)
651- if (if ((M == h))
685+ if (if ((Q == h))
652686 then true
653- else (M == i))
654- then [DeleteEntry(S(ax)), DeleteEntry(L(ax)), DeleteEntry(N(ax)), DeleteEntry(O(ax)), DeleteEntry(P(ax)), DeleteEntry(Q(ax)), StringEntry(R(ax), o), StringEntry("last_invoke_id", G)]
687+ else (Q == i))
688+ then [DeleteEntry(W(aB)), DeleteEntry(P(aB)), DeleteEntry(R(aB)), DeleteEntry(S(aB)), DeleteEntry(T(aB)), DeleteEntry(U(aB)), StringEntry(V(aB), o), StringEntry("last_invoke_id", G)]
655689 else throw("You are not allowed to do that")
656690 }
657691
658692

github/deemru/w8io/3ef1775 
265.83 ms