tx · CJJe1AzUjwYrJZbozWgT5BHDt4AK5KDWBpvXFn76DMJ3

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.15 14:33 [1659418] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

{ "type": 13, "id": "CJJe1AzUjwYrJZbozWgT5BHDt4AK5KDWBpvXFn76DMJ3", "fee": 1000000, "feeAssetId": null, "timestamp": 1629027206131, "version": 2, "chainId": 84, "sender": "3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA", "senderPublicKey": "9abKuN1XmLjjire2feZH26PmcEWhEXxiHToWSmii3Gn2", "proofs": [ "2BiNJS2jNevU23k8X927nwTNZTTmDr4y5s5sfp5wZxgADAwLG3f9ZDGi66WpYUzraQxRBBkoXb3EUSVVeTuy73Sb" ], "script": "base64:AAIFAAAAAAAACx8IAhIICgYICAgICAgSCQoHCAEBCAgBARIECgIICBIDCgEIEgQKAggIEgYKBAgICAgSBQoDCAgIGg4KAmExEgh1bml0VGVzdBoPCgJhMhIJb3JhY2xlRmVlGhEKAmEzEgtmZWVSZWNlaXZlchoOCgJhNBIIdXNlckRhcHAaEwoCYTUSDXdoaXRlbGlzdERhcHAaEwoCYTYSDXNjb25leEFzc2V0SWQaCwoCYTcSBW93bmVyGhgKAmE4EhJzY29uZXhGaXJzdFNlbGxDdXQaEQoCYTkSC2RhcHBSdW5uaW5nGhQKAmIxEg5tYWludGVuYW5jZU1TRxoTCgJiMhINdXNlclN1c3BlbmRlZBoRCgJiMxILdXNlclJlbW92ZWQaFgoCYjQSEHVzZXJVbnJlZ2lzdGVyZWQaEQoCYjUSC3VzZXJBbGxvd2VkGhIKAmI2EgxhdWN0aW9uVHlwZTEaEgoCYjcSDGF1Y3Rpb25UeXBlMhoUCgJiOBIOZ2V0U3RyaW5nQnlLZXkaCQoCYjkSA2tleRofCgJjMRIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZRoVCgJjMhIPZ2V0SW50ZWdlckJ5S2V5GhQKAmMzEg5jaGVja1doaXRlbGlzdBoVCgJjNBIPZ2V0Qm9vbGVhbkJ5S2V5GhMKAmM1Eg1rZXlVc2VyU3RhdHVzGgwKAmM2EgZjYWxsZXIaDQoCYzcSB2tleURhdGUaCwoCYzgSBWFydElkGg0KAmM5EgdrZXlOYW1lGg0KAmQxEgdrZXlEZXNjGhMKAmQyEg1rZXlEaXNwbGF5Q2lkGhAKAmQzEgprZXlNYXhNaW50GhEKAmQ0EgtrZXlNaW5QcmljZRoTCgJkNRINa2V5SGlnaGVzdEJpZBoRCgJkNhILa2V5RHVyYXRpb24aFAoCZDcSDmtleUF1Y3Rpb25UeXBlGg8KAmQ4EglrZXlJc3N1ZWQaEgoCZDkSDEtleU5mdElzc3VlchoLCgJlMRIFbmZ0SWQaDwoCZTISCWtleU9uU2FsZRoNCgJlMxIHa2V5VGFncxoNCgJlNBIHa2V5VHlwZRoOCgJlNRIIa2V5UHJpY2UaGAoCZTYSEmtleUFzc2V0SWRBY2NlcHRlZBoXCgJlNxIRa2V5SGFzaEJ5VHhpZEFkZHIaCgoCZTgSBHR4aWQaFAoCZTkSDmtleU93bmVyQnlIYXNoGhAKAmYxEgpzaGEyNTZIYXNoGhgKAmYyEhJrZXlUeGlkQnlIYXNoT3duZXIaHwoCZjMSGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UaFAoCZjQSDnZhbGlkYXRlU3RyaW5nGgkKAmY1EgNzdHIaCQoCZjYSA21heBoSCgJmNxIMdmFsaWRhdGVVc2VyGhAKAmY4Egp1c2VyU3RhdHVzGhkKAmY5EhN2YWxpZGF0ZUFydHdvcmtEYXRhGhAKAmcxEgpjaWREaXNwbGF5GgoKAmcyEgRuYW1lGhEKAmczEgtkZXNjcmlwdGlvbhoKCgJnNBIEdGFncxoPCgJnNRIJY2hlY2tVc2VyGg8KAmc2Eglpc1BheW1lbnQaBwoCZzcSAWkaDQoCZzgSB3BheW1lbnQaDAoCZzkSBmFtb3VudBoVCgJoMRIPdmFsaWRhdGVQYXltZW50GhAKAmgyEgp0MDg5ODI5MDE4Gg0KAmgzEgdhc3NldElkGhoKAmg0EhR2YWxpZGF0ZVByaWNlQXNzZXRJZBoSCgJoNRIMcHJpY2VBc3NldElkGhIKAmg2EgxhcnR3b3JrUHJpY2UaEAoCaDcSCnQwOTYxMTk2NDcaFgoCaDgSEGFjY2VwdGVkQXNzZXRJZHMaFQoCaDkSD3ZhbGlkYXRlTWluU2VsbBoLCgJpMRIFcHJpY2UaEwoCaTISDW1pblNlbGxTY29uZXgaEwoCaTMSDWdldEJpZEFzc2V0SWQaHAoCaTQSFmdldFByaWNlQXNzZXRJZEZyb21CaWQaEAoCaTUSCmJpZERhdGFLZXkaDQoCaTYSB2JpZERhdGEaEAoCaTcSCmJpZERhdGFBcnIaDwoCaTgSCWJpZEFtb3VudBoQCgJpORIKYmlkQXNzZXRJZBoSCgJqMRIMaWRDYWxsZXJEYXRlGhAKAmoyEgppc0JpZENoZWNrGgwKAmozEgZpc3N1ZXIaDgoCajQSCGJpZE93bmVyGgsKAmo1EgViaWRJZBoQCgJqNhIKZ2V0QXJ0RGF0YRoLCgJqNxIFaXNCaWQaFAoCajgSDmNhbGxlcklzSXNzdWVyGg4KAmo5Egh0b3RhbE5GVBoRCgJrMRILYXJ0d29ya05hbWUaDgoCazISCGlzT25TYWxlGhAKAmszEgphbW91bnRTb2xkGhAKAms0EgptYXhDYW5TZWxsGhAKAms1EgpnZXRCaWREYXRhGhIKAms2Egx0MDEzNTE5MTM2NDgaFwoCazcSEWdldENvbW1pc3Npb25EYXRhGhMKAms4Eg1pc1doaXRlbGlzdGVkGgkKAms5EgNjdXQaFQoCbDESD2Ftb3VudEZvclNjb25leBoWCgJsMhIQYW1vdW50Rm9yQ3JlYXRvchoTCgJsMxINbmV3QW1vdW50U29sZBoSCgJsNBIMZ2V0SXNzdWVEYXRhGg8KAmw1Eglpc3N1ZU1ldGEaDgoCbDYSCGlzc3VlTkZUGgsKAmw3EgVpZE5GVBoQCgJsOBIKc2VsbFN0YXR1cxoQCgJsORIKcmVjZWl2ZU5GVBoSCgJtMRIMZ2V0QmlkS2V5VmFsGgoKAm0yEgRkYXRlGhAKAm0zEgphc3NldElkQmlkGg8KAm00EgliaWREZWxPbGQaDwoCbTUSCWJpZFVwZGF0ZRoNCgJtNhIHYnV5TWludBoSCgJtNxIMdDAxNTUxNjE1NTY2GggKAm04EgJpZBoSCgJtORIMdDAxNTY0NjE1Nzk3GhIKAm4xEgx0MDE1ODAyMTU5NDgaEgoCbjISDHQwMTU5NTMxNjA5NRoSCgJuMxIMdDAxNjEwMDE2MjkwGhIKAm40Egx0MDE2Mjk1MTYzOTQaDQoCbjUSB3NvbGRLZXkaDwoCbjYSCXNvbGRWYWx1ZRoOCgJuNxIIc29sZERhdGEaDAoCbjgSBmJ1eVJlcxoaCgJuORIUc2V0QmlkTm9uVHJhZGl0aW9uYWwaEgoCbzESDHQwMjc3MDkyNzc0NxoSCgJvMhIMdDAyNzc1MjI3Nzg4GgwKAm8zEgZiaWROYnIaFwoCbzQSEXNldEJpZFRyYWRpdGlvbmFsGg8KAm81EgllbmRIZWlnaHQaEAoCbzYSCmhpZ2hlc3RCaWQaEQoCbzcSC2NhbGxkZXJEYXRhGhIKAm84Egxpc1BheW1lbnRWYXIaEwoCbzkSDWNhbmNlbEJpZEltcGwaEgoCcDESDHQwMjg5NDIyOTA5NBoPCgJwMhIJYmlkU3RhdHVzGh4KAnAzEhhjYW5jZWxCaWRJbXBsVHJhZGl0aW9uYWwaCgoCcDQSBHR5cGUaEgoCcDUSDHQwMTc3NDAxNzc4MRoVCgJwNhIPdmFsaWRhdGVBcnR3b3JrGhIKAnA3Egx0MDE4MTcwMTgyMTIaEAoCcDgSCmVudHJ5RXhpc3QaDwoCcDkSCWhhc2hFeGlzdBoNCgJxMRIHbWF4TWludBoRCgJxMhILYXVjdGlvblR5cGUaDAoCcTMSBm1pbkJpZBoOCgJxNBIIZHVyYXRpb24aEgoCcTUSDHQwMjU3MTQyNTc0NxoLCgJxNhIFZW50cnkAAABAAAAAAAJhMQcAAAAAAmEyCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNcFpRanpHb2dtaWZjRUtlOG1EZDZyaWJMN254VDlBQ3llAAAAAAJhMwIAAAAjM042NXhMcThKY0NlYUVpUjFUSlE3ZEJxWEJ2RXk2RTQ4V3oAAAAAAmE0CQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOOWNRZ1pGUEhIVnU4d3FzbjJEa1FGZWhnM2g4Q05pb29BAAAAAAJhNQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjl4WllHcHpNRkRYdlh1Y3RtVTZ6VjhxU3ptMlpmRjMxZgAAAAACYTYBAAAAILqG7RB0p6PAf0j6P4bwBgeStpaWajtKEXDr6lXgktMzAAAAAAJhNwIAAAAjM04xRGhxNVpaeW9valFpc3VUTHVzWWpuR2lzcXJ4RHdHTHkAAAAAAmE4AAAAAAAAAACWAAAAAAJhOQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAJhNAIAAAAUY29uZl9kYXBwX2lzX3J1bm5pbmcGAAAAAAJiMQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAJhNAIAAAAUY29uZl9tYWludGVuYW5jZV9tc2cCAAAAAAAAAAACYjICAAAACVNVU1BFTkRFRAAAAAACYjMCAAAAB1JFTU9WRUQAAAAAAmI0AgAAAAxVTlJFR0lTVEVSRUQAAAAAAmI1AgAAAAdBTExPV0VEAAAAAAJiNgIAAAAHQklEVFlQRQAAAAACYjcCAAAAC1RSQURJVElPTkFMAQAAAAJiOAAAAAEAAAACYjkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAACYjkCAAAAAAEAAAACYzEAAAABAAAAAmI5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAACYTIFAAAAAmI5AgAAAB9JbnRlZ2VyIHVuZGVmaW5lIG9yIDAgaW4gb3JhY2xlAQAAAAJjMgAAAAEAAAACYjkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAACYjkAAAAAAAAAAAABAAAAAmMzAAAAAQAAAAJiOQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAJhNQUAAAACYjkAAAAAAAAAAAABAAAAAmM0AAAAAQAAAAJiOQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAAJiOQcBAAAAAmM1AAAAAQAAAAJjNgkAASwAAAACAgAAAAx1c2VyX3N0YXR1c18FAAAAAmM2AQAAAAJjNwAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9kYXRlXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJjOQAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9uYW1lXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJkMQAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9kZXNjXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJkMgAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEGFydF9kaXNwbGF5X2NpZF8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDMAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxhcnRfbWF4bWludF8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDQAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1hcnRfbWlucHJpY2VfBQAAAAJjOAIAAAABXwUAAAACYzYBAAAAAmQ1AAAAAQAAAAJjOAkAASwAAAACAgAAAA9hcnRfaGlnaGVzdEJpZF8FAAAAAmM4AQAAAAJkNgAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADWFydF9kdXJhdGlvbl8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDcAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABBhcnRfYXVjdGlvbnR5cGVfBQAAAAJjOAIAAAABXwUAAAACYzYBAAAAAmQ4AAAAAgAAAAJjNgAAAAJjOAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALYXJ0X2lzc3VlZF8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDkAAAABAAAAAmUxCQABLAAAAAICAAAAC25mdF9pc3N1ZWRfBQAAAAJlMQEAAAACZTIAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAthcnRfb25zYWxlXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJlMwAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF90YWdzXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJlNAAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF90eXBlXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJlNQAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACmFydF9wcmljZV8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZTYAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJhcnRfYXNzZXRBY2NlcHRlZF8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZTcAAAACAAAAAmM2AAAAAmU4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABNnZXRfaGFzaGJ5dHhpZGFkZHJfBQAAAAJlOAIAAAABXwUAAAACYzYBAAAAAmU5AAAAAQAAAAJmMQkAASwAAAACAgAAABJnZXRfb3duZXJfYnlfaGFzaF8FAAAAAmYxAQAAAAJmMgAAAAIAAAACZjEAAAACYzYJAAEsAAAAAgIAAAAXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JAAJYAAAAAQkAC1QAAAABCQABmwAAAAEJAAEsAAAAAgUAAAACZjEFAAAAAmM2AAAAAAJmMwkBAAAAAmMxAAAAAQkAASwAAAACAgAAABJjZXJ0aWZpY2F0aW9uX2ZlZV8JAAJYAAAAAQUAAAACYTYBAAAAAmY0AAAAAgAAAAJmNQAAAAJmNgMJAAAAAAAAAgkAATEAAAABBQAAAAJmNQAAAAAAAAAAAAkAAAIAAAABAgAAABhGaWVsZCBjYW5ub3QgYmUgaXMgZW1wdHkDCQAAZgAAAAIJAAExAAAAAQUAAAACZjUFAAAAAmY2CQAAAgAAAAEJAAEsAAAAAgUAAAACZjUCAAAADCBpcyB0b28gbG9uZwYBAAAAAmY3AAAAAQAAAAJjNgQAAAACZjgJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAACYTQJAQAAAAJjNQAAAAEFAAAAAmM2BQAAAAJiNAMDCQAAAAAAAAIFAAAAAmY4BQAAAAJiNAYJAAAAAAAAAgUAAAACZjgFAAAAAmI1AgAAAC5SZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAnQWNjb3VudCcgdGFiAwkAAAAAAAACBQAAAAJmOAUAAAACYjICAAAAEUFjY291bnQgc3VzcGVuZGVkAwkAAAAAAAACBQAAAAJmOAUAAAACYjMCAAAAD0FjY291bnQgcmVtb3ZlZAIAAAAAAQAAAAJmOQAAAAUAAAACYzYAAAACZzEAAAACZzIAAAACZzMAAAACZzQEAAAAAmc1CQEAAAACZjcAAAABBQAAAAJjNgMJAQAAAAIhPQAAAAIFAAAAAmc1AgAAAAAJAAACAAAAAQUAAAACZzUDCQAAAAAAAAIJAAExAAAAAQUAAAACZzEAAAAAAAAAAAAJAAACAAAAAQIAAAAbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBAAAAASEAAAABCQEAAAACZjQAAAACBQAAAAJnMgAAAAAAAAAAZAkAAAIAAAABAgAAABIxMDAgQ2hhci4gbWF4IG5hbWUDCQEAAAABIQAAAAEJAQAAAAJmNAAAAAIFAAAAAmczAAAAAAAAAAPoCQAAAgAAAAECAAAAGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkAAGYAAAACCQABkAAAAAEJAAS1AAAAAgUAAAACZzQCAAAAASwAAAAAAAAAAAUJAAACAAAAAQIAAAALNSB0YWdzIG1heC4CAAAAAAEAAAACZzYAAAABAAAAAmc3AwkAAAAAAAACCQABkAAAAAEIBQAAAAJnNwAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAABNObyBwYXltZW50IGF0dGFjaGVkBAAAAAJnOAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAACZzcAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAAAmc5CQEAAAAFdmFsdWUAAAABCAUAAAACZzgAAAAGYW1vdW50CQAFFAAAAAIFAAAAAmc4BQAAAAJnOQEAAAACaDEAAAABAAAAAmc3BAAAAAJoMgkBAAAAAmc2AAAAAQUAAAACZzcEAAAAAmc4CAUAAAACaDIAAAACXzEEAAAAAmc5CAUAAAACaDIAAAACXzIEAAAAAmgzAwMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAACZzgAAAAHYXNzZXRJZAkAAAAAAAACCAUAAAACZzgAAAAHYXNzZXRJZAUAAAACYTYHCAUAAAACZzgAAAAHYXNzZXRJZAkAAAIAAAABAgAAAC1Pbmx5IFNjb25leCB0b2tlbiBhY2NlcHRlZCBhcyB0cmFuc2FjdGlvbiBmZWUDCQEAAAACIT0AAAACBQAAAAJnOQUAAAACZjMJAAACAAAAAQkAASwAAAACAgAAABlQYXltZW50IGFtb3VudCBzaG91bGQgYmUgCQABpAAAAAEFAAAAAmYzCQAFFAAAAAIFAAAAAmc5BQAAAAJoMwEAAAACaDQAAAADAAAAAmc3AAAAAmg1AAAAAmg2BAAAAAJoNwkBAAAAAmc2AAAAAQUAAAACZzcEAAAAAmc4CAUAAAACaDcAAAACXzEEAAAAAmc5CAUAAAACaDcAAAACXzIEAAAAAmgzAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAAmc4AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAOV3JvbmcgYXNzZXQgaWQDAwkAAGYAAAACCQABMQAAAAEFAAAAAmg1AAAAAAAAAAAACQAAAAAAAAIJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAAmc4AAAAB2Fzc2V0SWQFAAAAAmg1BwgFAAAAAmc4AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAOV3JvbmcgYXNzZXQgaWQDAwkAAAAAAAACBQAAAAJoMwUAAAAEdW5pdAkBAAAAAiE9AAAAAgUAAAACaDUCAAAAAAcJAAACAAAAAQIAAAAOV3JvbmcgYXNzZXQgaWQDCQEAAAACIT0AAAACBQAAAAJoNgUAAAACZzkJAAACAAAAAQIAAAATUGF5bWVudCBkb24ndCBtYXRjaAkABRQAAAACBQAAAAJnOQUAAAACaDMBAAAAAmg4AAAAAQAAAAJoMwMJAQAAAAIhPQAAAAIFAAAAAmgzCQACWAAAAAEFAAAAAmE2CQAAAgAAAAECAAAAFE9ubHkgU2NvbmV4IGFjY2VwdGVkBgEAAAACaDkAAAACAAAAAmgzAAAAAmkxBAAAAAJpMgMFAAAAAmExAAAAAAAAAAABCQAAaAAAAAIFAAAAAmYzAAAAAAAAAAACAwMDCQAAAAAAAAIFAAAAAmgzCQACWAAAAAEFAAAAAmE2CQAAZgAAAAIFAAAAAmkyBQAAAAJpMQcJAQAAAAIhPQAAAAIFAAAAAmkxAAAAAAAAAAAABwkAAAIAAAABCQABLAAAAAICAAAAGVdyb25nIG1pbmltdW0gc2VsbCBwcmljZSAJAAGkAAAAAQUAAAACaTIGAQAAAAJpMwAAAAEAAAACaDMDCQAAAAAAAAIFAAAAAmgzAgAAAAVXQVZFUwkAAAIAAAABAgAAABhPbmx5IHNjb25leCBpcyBhY2NlcHRlZCEJAAJZAAAAAQUAAAACaDMBAAAAAmk0AAAAAQAAAAJpNQQAAAACaTYJAQAAAAJiOAAAAAEJAAEsAAAAAgUAAAACaTUCAAAABV9PUEVOAwkAAAAAAAACBQAAAAJpNgIAAAAACQAAAgAAAAECAAAADUJpZCBub3QgZm91bmQEAAAAAmk3CQAEtQAAAAIFAAAAAmk2AgAAAAFfBAAAAAJpOAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAAmk3AAAAAAAAAAABBAAAAAJpOQkBAAAAAmkzAAAAAQkAAZEAAAACBQAAAAJpNwAAAAAAAAAAAAMJAABnAAAAAgAAAAAAAAAAAAUAAAACaTgJAAACAAAAAQIAAAAMV3JvbmcgYW1vdW50CQAFFAAAAAIFAAAAAmk4BQAAAAJpOQEAAAACajEAAAABAAAAAmc3AwkBAAAAASEAAAABBQAAAAJhOQkAAAIAAAABBQAAAAJiMQkABRUAAAADCQACWAAAAAEIBQAAAAJnNwAAAA10cmFuc2FjdGlvbklkCQACWAAAAAEICAUAAAACZzcAAAAGY2FsbGVyAAAABWJ5dGVzCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAEAAAACajIAAAAEAAAAAmc3AAAAAmozAAAAAmo0AAAAAmo1AwMDCQAAAAAAAAIJAAJYAAAAAQgIBQAAAAJnNwAAAAZjYWxsZXIAAAAFYnl0ZXMFAAAAAmozCQEAAAACIT0AAAACBQAAAAJqNAIAAAAABwkBAAAAAiE9AAAAAgUAAAACajUCAAAAAAcGBwEAAAACajYAAAAEAAAAAmc3AAAAAmozAAAAAmM4AAAAAmo3BAAAAAJqOAkAAAAAAAACCQACWAAAAAEICAUAAAACZzcAAAAGY2FsbGVyAAAABWJ5dGVzBQAAAAJqMwQAAAACajkJAQAAAAJjMgAAAAECAAAAEHRvdGFsX25mdF9pc3N1ZWQEAAAAAmsxCQEAAAACYjgAAAABCQEAAAACYzkAAAACBQAAAAJqMwUAAAACYzgDCQAAAAAAAAIFAAAAAmsxAgAAAAAJAAACAAAAAQIAAAARQXJ0IGRvZXNuJ3QgZXhpc3QEAAAAAmsyCQEAAAACYzQAAAABCQEAAAACZTIAAAACBQAAAAJqMwUAAAACYzgEAAAAAmszCQEAAAACYzIAAAABCQEAAAACZDgAAAACBQAAAAJqMwUAAAACYzgEAAAAAmg2AwUAAAACajgJAABoAAAAAgUAAAACZjMAAAAAAAAAAAIJAQAAAAJjMgAAAAEJAQAAAAJlNQAAAAIFAAAAAmozBQAAAAJjOAQAAAACaDUDBQAAAAJqOAkAAlgAAAABBQAAAAJhNgkBAAAAAmI4AAAAAQkBAAAAAmU2AAAAAgUAAAACajMFAAAAAmM4BAAAAAJrNAkBAAAAAmMyAAAAAQkBAAAAAmQzAAAAAgUAAAACajMFAAAAAmM4AwMDCQEAAAABIQAAAAEFAAAAAmo3CQEAAAABIQAAAAEFAAAAAmo4BwMDCQAAZwAAAAIAAAAAAAAAAAAFAAAAAmg2BgkBAAAAASEAAAABBQAAAAJrMgYJAABnAAAAAgAAAAAAAAAAAAUAAAACazQHCQAAAgAAAAECAAAAEEFydCBub3QgZm9yIHNhbGUDAwMJAQAAAAEhAAAAAQUAAAACajcFAAAAAmo4BwkAAGcAAAACAAAAAAAAAAAABQAAAAJrNAcJAAACAAAAAQIAAAAUTWF4IGlzc3VhYmxlIG5vdCBzZXQJAAUZAAAABwUAAAACajkFAAAAAmsxBQAAAAJrMwUAAAACaDYFAAAAAmg1BQAAAAJrNAUAAAACazIBAAAAAms1AAAACQAAAAJnNwAAAAJjNgAAAAJqMwAAAAJjOAAAAAJqNAAAAAJqNQAAAAJoNQAAAAJoNgAAAAJqNwQAAAACZzUJAQAAAAJmNwAAAAEFAAAAAmozAwMFAAAAAmo3CQEAAAACIT0AAAACBQAAAAJnNQIAAAAABwkAAAIAAAABBQAAAAJnNQQAAAACaTUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEYmlkXwUAAAACYzgCAAAAAV8FAAAAAmozAgAAAAFfBQAAAAJqNAIAAAABXwUAAAACajUEAAAAAms2AwUAAAACajcJAQAAAAJpNAAAAAEFAAAAAmk1CQEAAAACaDQAAAADBQAAAAJnNwUAAAACaDUFAAAAAmg2BAAAAAJnOQgFAAAAAms2AAAAAl8xBAAAAAJoMwgFAAAAAms2AAAAAl8yCQAFFQAAAAMFAAAAAmk1BQAAAAJnOQUAAAACaDMBAAAAAms3AAAABQAAAAJqMwAAAAJoMwAAAAJnOQAAAAJrMwAAAAJrNAQAAAACazgJAQAAAAJjMwAAAAEFAAAAAmozBAAAAAJrOQMJAABmAAAAAgUAAAACazgFAAAABmhlaWdodAAAAAAAAAAAAAMJAAAAAAAAAgUAAAACaDMFAAAAAmE2BQAAAAJhOAkAAAIAAAABAgAAABhPbmx5IFNjb25leCBpcyBhY2NlcHRlZCEEAAAAAmwxCQAAawAAAAMFAAAAAmc5BQAAAAJrOQAAAAAAAAAD6AQAAAACbDIJAABlAAAAAgUAAAACZzkFAAAAAmwxAwkAAAAAAAACBQAAAAJrMwUAAAACazQJAAACAAAAAQIAAAAMQXJ0IHNvbGQgb3V0BAAAAAJsMwkAAGQAAAACBQAAAAJrMwAAAAAAAAAAAQkABRUAAAADBQAAAAJsMQUAAAACbDIFAAAAAmwzAQAAAAJsNAAAAAsAAAACajMAAAACYzgAAAACazEAAAACbDMAAAACazQAAAACajkAAAACYzYAAAACajQAAAACajUAAAACZzcAAAACazIEAAAAAmw1CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAlDcmVhdG9yOiAFAAAAAmozAgAAAAgsQXJ0SUQ6IAUAAAACYzgCAAAADyxBcnR3b3JrIG5hbWU6IAUAAAACazECAAAACCxJc3N1ZTogCQABpAAAAAEFAAAAAmwzAgAAAAEvCQABpAAAAAEFAAAAAms0BAAAAAJsNgkABEIAAAAFCQABLAAAAAICAAAAB1NDT05FWF8JAAGkAAAAAQkAAGQAAAACBQAAAAJqOQAAAAAAAAAAAQUAAAACbDUAAAAAAAAAAAEAAAAAAAAAAAAHBAAAAAJsNwkABDgAAAABBQAAAAJsNgQAAAACbDgDAwkAAAAAAAACBQAAAAJsMwUAAAACazQGCQEAAAABIQAAAAEFAAAAAmsyBwYEAAAAAmw5AwMDCQAAAAAAAAIFAAAAAmM2BQAAAAJqMwkBAAAAAiE9AAAAAgUAAAACajQCAAAAAAcJAQAAAAIhPQAAAAIFAAAAAmo1AgAAAAAHCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAJqNAgFAAAAAmc3AAAABmNhbGxlcgkABRYAAAAEBQAAAAJsNgUAAAACbDcFAAAAAmw4BQAAAAJsOQEAAAACbTEAAAADAAAAAmgzAAAAAmk1AAAAAm0yBAAAAAJtMwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAmgzCQAAAgAAAAECAAAAF09ubHkgc2NvbmV4IGlzIGFjY2VwdGVkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAmgzBAAAAAJpNgkBAAAAAmI4AAAAAQkAASwAAAACBQAAAAJpNQIAAAAFX09QRU4EAAAAAm00CQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAAAmk1AgAAAAVfT1BFTgQAAAACbTUJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAACaTUCAAAAB19DTE9TRUQJAAEsAAAAAgkAASwAAAACBQAAAAJpNgIAAAABXwkAAaQAAAABBQAAAAJtMgkABRUAAAADBQAAAAJtMwUAAAACbTQFAAAAAm01AQAAAAJtNgAAAAUAAAACZzcAAAACYzgAAAACajMAAAACajUAAAACajQEAAAAAm03CQEAAAACajEAAAABBQAAAAJnNwQAAAACbTgIBQAAAAJtNwAAAAJfMQQAAAACYzYIBQAAAAJtNwAAAAJfMgQAAAACbTIIBQAAAAJtNwAAAAJfMwQAAAACajcJAQAAAAJqMgAAAAQFAAAAAmc3BQAAAAJqMwUAAAACajQFAAAAAmo1BAAAAAJtOQkBAAAAAmo2AAAABAUAAAACZzcFAAAAAmozBQAAAAJjOAUAAAACajcEAAAAAmo5CAUAAAACbTkAAAACXzEEAAAAAmsxCAUAAAACbTkAAAACXzIEAAAAAmszCAUAAAACbTkAAAACXzMEAAAAAmg2CAUAAAACbTkAAAACXzQEAAAAAmg1CAUAAAACbTkAAAACXzUEAAAAAms0CAUAAAACbTkAAAACXzYEAAAAAmsyCAUAAAACbTkAAAACXzcEAAAAAm4xCQEAAAACazUAAAAJBQAAAAJnNwUAAAACYzYFAAAAAmozBQAAAAJjOAUAAAACajQFAAAAAmo1BQAAAAJoNQUAAAACaDYFAAAAAmo3BAAAAAJpNQgFAAAAAm4xAAAAAl8xBAAAAAJnOQgFAAAAAm4xAAAAAl8yBAAAAAJoMwgFAAAAAm4xAAAAAl8zBAAAAAJuMgkBAAAAAms3AAAABQUAAAACajMJAQAAAAV2YWx1ZQAAAAEFAAAAAmgzBQAAAAJnOQUAAAACazMFAAAAAms0BAAAAAJsMQgFAAAAAm4yAAAAAl8xBAAAAAJsMggFAAAAAm4yAAAAAl8yBAAAAAJsMwgFAAAAAm4yAAAAAl8zBAAAAAJuMwkBAAAAAmw0AAAACwUAAAACajMFAAAAAmM4BQAAAAJrMQUAAAACbDMFAAAAAms0BQAAAAJqOQUAAAACYzYFAAAAAmo0BQAAAAJqNQUAAAACZzcFAAAAAmsyBAAAAAJsNggFAAAAAm4zAAAAAl8xBAAAAAJsNwgFAAAAAm4zAAAAAl8yBAAAAAJsOAgFAAAAAm4zAAAAAl8zBAAAAAJsOQgFAAAAAm4zAAAAAl80BAAAAAJuNAkBAAAAAm0xAAAAAwUAAAACaDMFAAAAAmk1BQAAAAJtMgQAAAACbTMIBQAAAAJuNAAAAAJfMQQAAAACbTQIBQAAAAJuNAAAAAJfMgQAAAACbTUIBQAAAAJuNAAAAAJfMwQAAAACbjUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3NvbGRfCQABpAAAAAEFAAAAAmwzAgAAAARfb2ZfCQABpAAAAAEFAAAAAms0AgAAAAFfBQAAAAJjOAIAAAABXwUAAAACajMEAAAAAm42AwkBAAAAASEAAAABBQAAAAJqNwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJjNgIAAAABXwkAAaQAAAABBQAAAAJtMgIAAAABXwUAAAACbTgCAAAAAV8JAAGkAAAAAQUAAAACaDYCAAAAAV8FAAAAAmg1AgAAAAFfCQACWAAAAAEFAAAAAmw3CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQUAAAACbDkCAAAAAV8JAAGkAAAAAQUAAAACbTICAAAAAV8FAAAAAm04AgAAAAFfCQABpAAAAAEFAAAAAmc5AgAAAAFfBQAAAAJtMwIAAAABXwkAAlgAAAABBQAAAAJsNwQAAAACbjcJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAAm41BQAAAAJuNgQAAAACbjgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAJkOAAAAAIFAAAAAmozBQAAAAJjOAUAAAACbDMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAAARuZnRfCQACWAAAAAEFAAAAAmw3BQAAAAJuNQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQdG90YWxfbmZ0X2lzc3VlZAkAAGQAAAACBQAAAAJqOQAAAAAAAAAAAQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAAmUyAAAAAgUAAAACajMFAAAAAmM4BQAAAAJsOAkABEwAAAACBQAAAAJsNgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAACajMFAAAAAmwyBQAAAAJoMwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAACYTMFAAAAAmwxBQAAAAJoMwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAJsOQAAAAAAAAAAAQUAAAACbDcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmQ5AAAAAQkAAlgAAAABBQAAAAJsNwUAAAACajMFAAAAA25pbAMFAAAAAmo3CQAETQAAAAIJAARNAAAAAgkABE0AAAACBQAAAAJuOAUAAAACbjcFAAAAAm01BQAAAAJtNAkABEwAAAACBQAAAAJuNwUAAAACbjgBAAAAAm45AAAAAwAAAAJnNwAAAAJjOAAAAAJqMwQAAAACbzEJAQAAAAJqMQAAAAEFAAAAAmc3BAAAAAJtOAgFAAAAAm8xAAAAAl8xBAAAAAJjNggFAAAAAm8xAAAAAl8yBAAAAAJtMggFAAAAAm8xAAAAAl8zBAAAAAJvMgkBAAAAAmc2AAAAAQUAAAACZzcEAAAAAmc4CAUAAAACbzIAAAACXzEEAAAAAmc5CAUAAAACbzIAAAACXzIEAAAAAmgzAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAAmc4AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAYT25seSBzY29uZXggaXMgYWNjZXB0ZWQhCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAJnOAAAAAdhc3NldElkBAAAAAJvMwkBAAAAAmMyAAAAAQkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAAAmM4AwkBAAAAASEAAAABCQEAAAACaDgAAAABBQAAAAJoMwkAAAIAAAABAgAAABJhc3NldCBub3QgYWNjZXB0ZWQDCQEAAAABIQAAAAEJAQAAAAJoOQAAAAIFAAAAAmgzBQAAAAJnOQkAAAIAAAABAgAAAA5Xcm9uZyBtaW4gc2VsbAQAAAACazMJAQAAAAJjMgAAAAEJAQAAAAJkOAAAAAIFAAAAAmozBQAAAAJjOAQAAAACazQJAQAAAAJjMgAAAAEJAQAAAAJkMwAAAAIFAAAAAmozBQAAAAJjOAMJAABnAAAAAgAAAAAAAAAAAAUAAAACazQJAAACAAAAAQIAAAAjTm8gbWF4IGVkaXRpb24gc2V0IGZvciB0aGlzIGFydHdvcmsDCQAAZwAAAAIFAAAAAmszBQAAAAJrNAkAAAIAAAABAgAAABhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGJpZF8FAAAAAmM4AgAAAAFfBQAAAAJqMwIAAAABXwUAAAACYzYCAAAAAV8FAAAAAm04AgAAAAVfT1BFTgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJoMwIAAAABXwkAAaQAAAABBQAAAAJnOQIAAAABXwkAAaQAAAABBQAAAAJtMgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAAAmM4CQAAZAAAAAIFAAAAAm8zAAAAAAAAAAABBQAAAANuaWwBAAAAAm80AAAAAwAAAAJnNwAAAAJjOAAAAAJqMwQAAAACbzUJAQAAAAJjMgAAAAEJAQAAAAJkNgAAAAIFAAAAAmozBQAAAAJjOAQAAAACbzYJAQAAAAJjMgAAAAEJAQAAAAJkNQAAAAEFAAAAAmM4AwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAAm81CQAAAgAAAAECAAAAIVRoaXMgYXVjdGlvbiBpcyBmaW5pc2hlZCBhbHJlYWR5IQQAAAACbzcJAQAAAAJqMQAAAAEFAAAAAmc3BAAAAAJtOAgFAAAAAm83AAAAAl8xBAAAAAJjNggFAAAAAm83AAAAAl8yBAAAAAJtMggFAAAAAm83AAAAAl8zBAAAAAJvOAkBAAAAAmc2AAAAAQUAAAACZzcEAAAAAmc4CAUAAAACbzgAAAACXzEEAAAAAmc5CAUAAAACbzgAAAACXzIDCQAAZwAAAAIFAAAAAmc5BQAAAAJvNgkAAAIAAAABCQABLAAAAAICAAAAIFBsZWFzZSBwbGFjZSBhIGJpZCBoaWdoZXIgdGhlbjogCQABpAAAAAEFAAAAAm82BAAAAAJoMwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAJnOAAAAAdhc3NldElkCQAAAgAAAAECAAAAGE9ubHkgc2NvbmV4IGlzIGFjY2VwdGVkIQkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAACZzgAAAAHYXNzZXRJZAQAAAACbzMJAQAAAAJjMgAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAMJAQAAAAEhAAAAAQkBAAAAAmg4AAAAAQUAAAACaDMJAAACAAAAAQIAAAASYXNzZXQgbm90IGFjY2VwdGVkAwkBAAAAASEAAAABCQEAAAACaDkAAAACBQAAAAJoMwUAAAACZzkJAAACAAAAAQIAAAAOV3JvbmcgbWluIHNlbGwEAAAAAmszCQEAAAACYzIAAAABCQEAAAACZDgAAAACBQAAAAJqMwUAAAACYzgEAAAAAms0CQEAAAACYzIAAAABCQEAAAACZDMAAAACBQAAAAJqMwUAAAACYzgDCQAAZwAAAAIAAAAAAAAAAAAFAAAAAms0CQAAAgAAAAECAAAAI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAAGcAAAACBQAAAAJrMwUAAAACazQJAAACAAAAAQIAAAAYU29sZCBvdXQsIHlvdSBjYW5ub3QgYmlkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARiaWRfBQAAAAJjOAIAAAABXwUAAAACajMCAAAAAV8FAAAAAmM2AgAAAAFfBQAAAAJtOAIAAAAFX09QRU4JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACaDMCAAAAAV8JAAGkAAAAAQUAAAACZzkCAAAAAV8JAAGkAAAAAQUAAAACbTIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAkAAGQAAAACBQAAAAJvMwAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmQ1AAAAAQUAAAACYzgFAAAAAmc5BQAAAANuaWwBAAAAAm85AAAABAAAAAJnNwAAAAJjOAAAAAJqMwAAAAJqNQQAAAACcDEJAQAAAAJqMQAAAAEFAAAAAmc3BAAAAAJtOAgFAAAAAnAxAAAAAl8xBAAAAAJjNggFAAAAAnAxAAAAAl8yBAAAAAJtMggFAAAAAnAxAAAAAl8zBAAAAAJvMwkBAAAAAmMyAAAAAQkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAAAmM4BAAAAAJpNQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARiaWRfBQAAAAJjOAIAAAABXwUAAAACajMCAAAAAV8FAAAAAmM2AgAAAAFfBQAAAAJqNQQAAAACaTYJAQAAAAJiOAAAAAEJAAEsAAAAAgUAAAACaTUCAAAABV9PUEVOAwkAAAAAAAACBQAAAAJpNgIAAAAACQAAAgAAAAECAAAADUJpZCBub3QgZm91bmQEAAAAAmk3CQAEtQAAAAIFAAAAAmk2AgAAAAFfBAAAAAJoMwkBAAAAAmkzAAAAAQkAAZEAAAACBQAAAAJpNwAAAAAAAAAAAAQAAAACcDICAAAACENBTkNFTEVECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAACaTUCAAAABV9PUEVOCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAJpNQIAAAABXwUAAAACcDIJAAEsAAAAAgkAASwAAAACBQAAAAJpNgIAAAABXwkAAaQAAAABBQAAAAJtMgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAAAmM4CQAAZQAAAAIFAAAAAm8zAAAAAAAAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAJjNgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAAmk3AAAAAAAAAAABBQAAAAJoMwUAAAADbmlsAQAAAAJwMwAAAAQAAAACZzcAAAACYzgAAAACajMAAAACajUEAAAAAm81CQEAAAACYzIAAAABCQEAAAACZDYAAAACBQAAAAJqMwUAAAACYzgDCQAAZgAAAAIFAAAAAm81BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAhVGhpcyBhdWN0aW9uIGlzIG5vdCBmaW5pc2hlZCB5ZXQhBAAAAAJwMQkBAAAAAmoxAAAAAQUAAAACZzcEAAAAAm04CAUAAAACcDEAAAACXzEEAAAAAmM2CAUAAAACcDEAAAACXzIEAAAAAm0yCAUAAAACcDEAAAACXzMEAAAAAm8zCQEAAAACYzIAAAABCQABLAAAAAICAAAAEmN1cnJlbnRfYmlkYW1vdW50XwUAAAACYzgEAAAAAmk1CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGJpZF8FAAAAAmM4AgAAAAFfBQAAAAJqMwIAAAABXwUAAAACYzYCAAAAAV8FAAAAAmo1BAAAAAJpNgkBAAAAAmI4AAAAAQkAASwAAAACBQAAAAJpNQIAAAAFX09QRU4DCQAAAAAAAAIFAAAAAmk2AgAAAAAJAAACAAAAAQIAAAANQmlkIG5vdCBmb3VuZAQAAAACaTcJAAS1AAAAAgUAAAACaTYCAAAAAV8EAAAAAmgzCQEAAAACaTMAAAABCQABkQAAAAIFAAAAAmk3AAAAAAAAAAAABAAAAAJwMgIAAAAIQ0FOQ0VMRUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAJpNQIAAAAFX09QRU4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAAAmk1AgAAAAFfBQAAAAJwMgkAASwAAAACCQABLAAAAAIFAAAAAmk2AgAAAAFfCQABpAAAAAEFAAAAAm0yCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAEmN1cnJlbnRfYmlkYW1vdW50XwUAAAACYzgJAABlAAAAAgUAAAACbzMAAAAAAAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAmM2CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACaTcAAAAAAAAAAAEFAAAAAmgzBQAAAANuaWwAAAAHAAAAAmc3AQAAAAphZGRBcnR3b3JrAAAABgAAAAJmMQAAAAJnMgAAAAJnMwAAAAJnNAAAAAJwNAAAAAJnMQQAAAACcDUJAQAAAAJqMQAAAAEFAAAAAmc3BAAAAAJjOAgFAAAAAnA1AAAAAl8xBAAAAAJjNggFAAAAAnA1AAAAAl8yBAAAAAJtMggFAAAAAnA1AAAAAl8zBAAAAAJwNgkBAAAAAmY5AAAABQUAAAACYzYFAAAAAmcxBQAAAAJnMgUAAAACZzMFAAAAAmc0AwkBAAAAAiE9AAAAAgUAAAACcDYCAAAAAAkAAAIAAAABAgAAABVTb21ldGhpbmcgd2VudCB3cm9uZyEEAAAAAnA3CQEAAAACaDEAAAABBQAAAAJnNwQAAAACZzkIBQAAAAJwNwAAAAJfMQQAAAACaDMIBQAAAAJwNwAAAAJfMgMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAmc5CQAAAgAAAAECAAAAFFNvbWV0aGluZyB3ZW50IHdyb25nBAAAAAJwOAkBAAAAAmI4AAAAAQkBAAAAAmYyAAAAAgUAAAACZjEFAAAAAmM2AwkBAAAAAiE9AAAAAgUAAAACcDgCAAAAAAkAAAIAAAABAgAAABRZb3UgYWxyZWFkeSBhZGRlZCBpdAQAAAACcDkJAQAAAAJiOAAAAAEJAQAAAAJlOQAAAAEFAAAAAmYxAwkBAAAAAiE9AAAAAgUAAAACcDkCAAAAAAkAAAIAAAABAgAAABdIYXNoIGFscmVhZHkgcmVnaXN0ZXJlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAACZTkAAAABBQAAAAJmMQUAAAACYzYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmYyAAAAAgUAAAACZjEFAAAAAmM2BQAAAAJjOAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmM3AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJtMgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAACYzkAAAACBQAAAAJjNgUAAAACYzgFAAAAAmcyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJkMQAAAAIFAAAAAmM2BQAAAAJjOAUAAAACZzMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmQyAAAAAgUAAAACYzYFAAAAAmM4BQAAAAJnMQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAACZTQAAAACBQAAAAJjNgUAAAACYzgFAAAAAnA0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJlMwAAAAIFAAAAAmM2BQAAAAJjOAUAAAACZzQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAJkMwAAAAIFAAAAAmM2BQAAAAJjOAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmQ4AAAAAgUAAAACYzYFAAAAAmM4AAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAACZTIAAAACBQAAAAJjNgUAAAACYzgHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJlNwAAAAIFAAAAAmM2BQAAAAJjOAUAAAACZjEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAmEzBQAAAAJnOQUAAAACaDMFAAAAA25pbAAAAAJnNwEAAAALc2VsbEFydHdvcmsAAAAHAAAAAmM4AAAAAmkxAAAAAnExAAAAAmgzAAAAAnEyAAAAAnEzAAAAAnE0BAAAAAJxNQkBAAAAAmoxAAAAAQUAAAACZzcEAAAAAm04CAUAAAACcTUAAAACXzEEAAAAAmM2CAUAAAACcTUAAAACXzIEAAAAAmsxCQEAAAACYjgAAAABCQEAAAACYzkAAAACBQAAAAJjNgUAAAACYzgDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAAAmI2CQAETAAAAAIFAAAAAmI3BQAAAANuaWwFAAAAAnEyCQAAAgAAAAECAAAAHldlIGRvbnQga25vdyB0aGlzIGF1Y3Rpb24gdHlwZQMJAAAAAAAAAgUAAAACazECAAAAAAkAAAIAAAABAgAAACNUaGlzIGFydCBkb2Vzbid0IG1hdGNoIHlvdXIgYWNjb3VudAQAAAACbzMJAQAAAAJjMgAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAMJAQAAAAEhAAAAAQkBAAAAAmg4AAAAAQUAAAACaDMJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchAwkBAAAAASEAAAABCQEAAAACaDkAAAACBQAAAAJoMwUAAAACaTEJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchBAAAAAJnNQkBAAAAAmY3AAAAAQUAAAACYzYDCQEAAAACIT0AAAACBQAAAAJnNQIAAAAACQAAAgAAAAEFAAAAAmc1BAAAAAJrMwkBAAAAAmMyAAAAAQkBAAAAAmQ4AAAAAgUAAAACYzYFAAAAAmM4BAAAAAJrNAkBAAAAAmMyAAAAAQkBAAAAAmQzAAAAAgUAAAACYzYFAAAAAmM4AwkAAGYAAAACBQAAAAJxMQAAAAAAAAAACgkAAAIAAAABAgAAABsxMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAAAAAiE9AAAAAgUAAAACazMAAAAAAAAAAAAJAAAAAAAAAgUAAAACazMFAAAAAms0BwkAAAIAAAABAgAAABRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQAAZgAAAAIFAAAAAmszAAAAAAAAAAAACQEAAAACIT0AAAACBQAAAAJrNAUAAAACcTEHCQAAAgAAAAECAAAAJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAABmAAAAAgUAAAACbzMAAAAAAAAAAAAJAQAAAAIhPQAAAAIFAAAAAms0BQAAAAJxMQcJAAACAAAAAQIAAAAxQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIHdpdGggYWN0aXZlIG9yZGVycwQAAAACbDgDAwkAAGYAAAACBQAAAAJpMQAAAAAAAAAAAAkAAGYAAAACBQAAAAJxMQAAAAAAAAAAAAcGBwQAAAACbzUJAABkAAAAAgUAAAACcTQFAAAABmhlaWdodAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAAmUyAAAAAgUAAAACYzYFAAAAAmM4BQAAAAJsOAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmU1AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJpMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmQzAAAAAgUAAAACYzYFAAAAAmM4BQAAAAJxMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmQ0AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJxMwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmQ2AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJvNQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAACZTYAAAACBQAAAAJjNgUAAAACYzgFAAAAAmgzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJkNwAAAAIFAAAAAmM2BQAAAAJjOAUAAAACcTIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAJkNQAAAAEFAAAAAmM4AAAAAAAAAAAABQAAAANuaWwAAAACZzcBAAAACmJ1eUFydHdvcmsAAAACAAAAAmM4AAAAAmozCQEAAAACbTYAAAAFBQAAAAJnNwUAAAACYzgFAAAAAmozAgAAAAACAAAAAAAAAAJnNwEAAAALZGVsZXRlRW50cnkAAAABAAAAAnE2BAAAAAJjNgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAACZzcAAAAPY2FsbGVyUHVibGljS2V5AwkAAAAAAAACBQAAAAJjNgUAAAACYTcJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAACcTYFAAAAA25pbAkAAAIAAAABAgAAAAJubwAAAAJnNwEAAAAGc2V0QmlkAAAAAgAAAAJjOAAAAAJqMwQAAAACcTIJAQAAAAJiOAAAAAEJAQAAAAJkNwAAAAIFAAAAAmozBQAAAAJjOAMJAAAAAAAAAgUAAAACcTIFAAAAAmI2CQEAAAACbjkAAAADBQAAAAJnNwUAAAACYzgFAAAAAmozAwkAAAAAAAACBQAAAAJxMgUAAAACYjcJAQAAAAJvNAAAAAMFAAAAAmc3BQAAAAJjOAUAAAACajMJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAFlVua25vd24gYXVjdGlvbiB0eXBlIDoFAAAAAnEyAgAAABssIHBsZWFzZSBjb250YWN0IHRoZSBhZG1pbnMAAAACZzcBAAAACWFjY2VwdEJpZAAAAAQAAAACYzgAAAACajMAAAACajUAAAACajQEAAAAAmM2CQACWAAAAAEICAUAAAACZzcAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgUAAAACYzYFAAAAAmozCQAAAgAAAAECAAAAGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAQAAAAJtNgAAAAUFAAAAAmc3BQAAAAJjOAUAAAACajMFAAAAAmo1BQAAAAJqNAAAAAJnNwEAAAAJY2FuY2VsQmlkAAAAAwAAAAJjOAAAAAJqMwAAAAJqNQQAAAACcTIJAQAAAAJiOAAAAAEJAQAAAAJkNwAAAAIFAAAAAmozBQAAAAJjOAMJAAAAAAAAAgUAAAACcTIFAAAAAmI2CQEAAAACbzkAAAAEBQAAAAJnNwUAAAACYzgFAAAAAmozBQAAAAJqNQkBAAAAAnAzAAAABAUAAAACZzcFAAAAAmM4BQAAAAJqMwUAAAACajUAAAAAyx6t9w==", "height": 1659418, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AHbLG9pTRxHsWpUY4Zrv7q2CoAgeoh6e4ejugTkVDr9B Next: A9EiXZ1sbCgH3wSaRUk6y28ENw2oqpE4uUKewizjf8Cz Diff:
OldNewDifferences
6767
6868
6969 func keyMinPrice (caller,artId) = ((("art_minprice_" + artId) + "_") + caller)
70+
71+
72+func keyHighestBid (artId) = ("art_highestBid_" + artId)
7073
7174
7275 func keyDuration (caller,artId) = ((("art_duration_" + artId) + "_") + caller)
419422
420423 func setBidTraditional (i,artId,issuer) = {
421424 let endHeight = getIntegerByKey(keyDuration(issuer, artId))
425+ let highestBid = getIntegerByKey(keyHighestBid(artId))
422426 if ((height > endHeight))
423427 then throw("This auction is finished already!")
424428 else {
429433 let isPaymentVar = isPayment(i)
430434 let payment = isPaymentVar._1
431435 let amount = isPaymentVar._2
432- let assetId = if (!(isDefined(payment.assetId)))
433- then throw("Only sconex is accepted!")
434- else toBase58String(value(payment.assetId))
435- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
436- if (!(acceptedAssetIds(assetId)))
437- then throw("asset not accepted")
438- else if (!(validateMinSell(assetId, amount)))
439- then throw("Wrong min sell")
440- else {
441- let amountSold = getIntegerByKey(keyIssued(issuer, artId))
442- let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
443- if ((0 >= maxCanSell))
444- then throw("No max edition set for this artwork")
445- else if ((amountSold >= maxCanSell))
446- then throw("Sold out, you cannot bid")
447- else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
448- }
436+ if ((amount >= highestBid))
437+ then throw(("Please place a bid higher then: " + toString(highestBid)))
438+ else {
439+ let assetId = if (!(isDefined(payment.assetId)))
440+ then throw("Only sconex is accepted!")
441+ else toBase58String(value(payment.assetId))
442+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
443+ if (!(acceptedAssetIds(assetId)))
444+ then throw("asset not accepted")
445+ else if (!(validateMinSell(assetId, amount)))
446+ then throw("Wrong min sell")
447+ else {
448+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
449+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
450+ if ((0 >= maxCanSell))
451+ then throw("No max edition set for this artwork")
452+ else if ((amountSold >= maxCanSell))
453+ then throw("Sold out, you cannot bid")
454+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), IntegerEntry(keyHighestBid(artId), amount)]
455+ }
456+ }
449457 }
450458 }
451459
568576 then true
569577 else false
570578 let endHeight = (duration + height)
571-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
579+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType), IntegerEntry(keyHighestBid(artId), 0)]
572580 }
573581 }
574582 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let unitTest = false
55
66 let oracleFee = value(addressFromString("3MpZQjzGogmifcEKe8mDd6ribL7nxT9ACye"))
77
88 let feeReceiver = "3N65xLq8JcCeaEiR1TJQ7dBqXBvEy6E48Wz"
99
1010 let userDapp = value(addressFromString("3N9cQgZFPHHVu8wqsn2DkQFehg3h8CNiooA"))
1111
1212 let whitelistDapp = value(addressFromString("3N9xZYGpzMFDXvXuctmU6zV8qSzm2ZfF31f"))
1313
1414 let sconexAssetId = base58'DZ8ALmuLeSZ2ocsYLAcL9MiXBFDbMNQG9LtitREyU5ZC'
1515
1616 let owner = "3N1Dhq5ZZyoojQisuTLusYjnGisqrxDwGLy"
1717
1818 let sconexFirstSellCut = 150
1919
2020 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2121
2222 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2323
2424 let userSuspended = "SUSPENDED"
2525
2626 let userRemoved = "REMOVED"
2727
2828 let userUnregistered = "UNREGISTERED"
2929
3030 let userAllowed = "ALLOWED"
3131
3232 let auctionType1 = "BIDTYPE"
3333
3434 let auctionType2 = "TRADITIONAL"
3535
3636 func getStringByKey (key) = valueOrElse(getString(this, key), "")
3737
3838
3939 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
4040
4141
4242 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
4343
4444
4545 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
4646
4747
4848 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4949
5050
5151 func keyUserStatus (caller) = ("user_status_" + caller)
5252
5353
5454 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
5555
5656
5757 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
5858
5959
6060 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
6161
6262
6363 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
6464
6565
6666 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
6767
6868
6969 func keyMinPrice (caller,artId) = ((("art_minprice_" + artId) + "_") + caller)
70+
71+
72+func keyHighestBid (artId) = ("art_highestBid_" + artId)
7073
7174
7275 func keyDuration (caller,artId) = ((("art_duration_" + artId) + "_") + caller)
7376
7477
7578 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
7679
7780
7881 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
7982
8083
8184 func KeyNftIssuer (nftId) = ("nft_issued_" + nftId)
8285
8386
8487 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
8588
8689
8790 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
8891
8992
9093 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
9194
9295
9396 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
9497
9598
9699 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
97100
98101
99102 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
100103
101104
102105 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
103106
104107
105108 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
106109
107110
108111 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(sconexAssetId)))
109112
110113 func validateString (str,max) = if ((size(str) == 0))
111114 then throw("Field cannot be is empty")
112115 else if ((size(str) > max))
113116 then throw((str + " is too long"))
114117 else true
115118
116119
117120 func validateUser (caller) = {
118121 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
119122 if (if ((userStatus == userUnregistered))
120123 then true
121124 else (userStatus == userAllowed))
122125 then "Register this account first with 'Account' tab"
123126 else if ((userStatus == userSuspended))
124127 then "Account suspended"
125128 else if ((userStatus == userRemoved))
126129 then "Account removed"
127130 else ""
128131 }
129132
130133
131134 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
132135 let checkUser = validateUser(caller)
133136 if ((checkUser != ""))
134137 then throw(checkUser)
135138 else if ((size(cidDisplay) == 0))
136139 then throw("Display CID cannot be empty")
137140 else if (!(validateString(name, 100)))
138141 then throw("100 Char. max name")
139142 else if (!(validateString(description, 1000)))
140143 then throw("1000 Char. max description")
141144 else if ((size(split(tags, ",")) > 5))
142145 then throw("5 tags max.")
143146 else ""
144147 }
145148
146149
147150 func isPayment (i) = if ((size(i.payments) == 0))
148151 then throw("No payment attached")
149152 else {
150153 let payment = value(i.payments[0])
151154 let amount = value(payment.amount)
152155 $Tuple2(payment, amount)
153156 }
154157
155158
156159 func validatePayment (i) = {
157160 let t089829018 = isPayment(i)
158161 let payment = t089829018._1
159162 let amount = t089829018._2
160163 let assetId = if (if (isDefined(payment.assetId))
161164 then (payment.assetId == sconexAssetId)
162165 else false)
163166 then payment.assetId
164167 else throw("Only Sconex token accepted as transaction fee")
165168 if ((amount != currentCertificationPrice))
166169 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
167170 else $Tuple2(amount, assetId)
168171 }
169172
170173
171174 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
172175 let t096119647 = isPayment(i)
173176 let payment = t096119647._1
174177 let amount = t096119647._2
175178 let assetId = if (!(isDefined(payment.assetId)))
176179 then throw("Wrong asset id")
177180 else if (if ((size(priceAssetId) > 0))
178181 then (toBase58String(value(payment.assetId)) == priceAssetId)
179182 else false)
180183 then payment.assetId
181184 else throw("Wrong asset id")
182185 if (if ((assetId == unit))
183186 then (priceAssetId != "")
184187 else false)
185188 then throw("Wrong asset id")
186189 else if ((artworkPrice != amount))
187190 then throw("Payment don't match")
188191 else $Tuple2(amount, assetId)
189192 }
190193
191194
192195 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(sconexAssetId)))
193196 then throw("Only Sconex accepted")
194197 else true
195198
196199
197200 func validateMinSell (assetId,price) = {
198201 let minSellSconex = if (unitTest)
199202 then 1
200203 else (currentCertificationPrice * 2)
201204 if (if (if ((assetId == toBase58String(sconexAssetId)))
202205 then (minSellSconex > price)
203206 else false)
204207 then (price != 0)
205208 else false)
206209 then throw(("Wrong minimum sell price " + toString(minSellSconex)))
207210 else true
208211 }
209212
210213
211214 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
212215 then throw("Only sconex is accepted!")
213216 else fromBase58String(assetId)
214217
215218
216219 func getPriceAssetIdFromBid (bidDataKey) = {
217220 let bidData = getStringByKey((bidDataKey + "_OPEN"))
218221 if ((bidData == ""))
219222 then throw("Bid not found")
220223 else {
221224 let bidDataArr = split(bidData, "_")
222225 let bidAmount = parseIntValue(bidDataArr[1])
223226 let bidAssetId = getBidAssetId(bidDataArr[0])
224227 if ((0 >= bidAmount))
225228 then throw("Wrong amount")
226229 else $Tuple2(bidAmount, bidAssetId)
227230 }
228231 }
229232
230233
231234 func idCallerDate (i) = if (!(dappRunning))
232235 then throw(maintenanceMSG)
233236 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
234237
235238
236239 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
237240 then (bidOwner != "")
238241 else false)
239242 then (bidId != "")
240243 else false)
241244 then true
242245 else false
243246
244247
245248 func getArtData (i,issuer,artId,isBid) = {
246249 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
247250 let totalNFT = getIntegerByKey("total_nft_issued")
248251 let artworkName = getStringByKey(keyName(issuer, artId))
249252 if ((artworkName == ""))
250253 then throw("Art doesn't exist")
251254 else {
252255 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
253256 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
254257 let artworkPrice = if (callerIsIssuer)
255258 then (currentCertificationPrice * 2)
256259 else getIntegerByKey(keyPrice(issuer, artId))
257260 let priceAssetId = if (callerIsIssuer)
258261 then toBase58String(sconexAssetId)
259262 else getStringByKey(keyAssetIdAccepted(issuer, artId))
260263 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
261264 if (if (if (!(isBid))
262265 then !(callerIsIssuer)
263266 else false)
264267 then if (if ((0 >= artworkPrice))
265268 then true
266269 else !(isOnSale))
267270 then true
268271 else (0 >= maxCanSell)
269272 else false)
270273 then throw("Art not for sale")
271274 else if (if (if (!(isBid))
272275 then callerIsIssuer
273276 else false)
274277 then (0 >= maxCanSell)
275278 else false)
276279 then throw("Max issuable not set")
277280 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
278281 }
279282 }
280283
281284
282285 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
283286 let checkUser = validateUser(issuer)
284287 if (if (isBid)
285288 then (checkUser != "")
286289 else false)
287290 then throw(checkUser)
288291 else {
289292 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
290293 let t01351913648 = if (isBid)
291294 then getPriceAssetIdFromBid(bidDataKey)
292295 else validatePriceAssetId(i, priceAssetId, artworkPrice)
293296 let amount = t01351913648._1
294297 let assetId = t01351913648._2
295298 $Tuple3(bidDataKey, amount, assetId)
296299 }
297300 }
298301
299302
300303 func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
301304 let isWhitelisted = checkWhitelist(issuer)
302305 let cut = if ((isWhitelisted > height))
303306 then 0
304307 else if ((assetId == sconexAssetId))
305308 then sconexFirstSellCut
306309 else throw("Only Sconex is accepted!")
307310 let amountForSconex = fraction(amount, cut, 1000)
308311 let amountForCreator = (amount - amountForSconex)
309312 if ((amountSold == maxCanSell))
310313 then throw("Art sold out")
311314 else {
312315 let newAmountSold = (amountSold + 1)
313316 $Tuple3(amountForSconex, amountForCreator, newAmountSold)
314317 }
315318 }
316319
317320
318321 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
319322 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
320323 let issueNFT = Issue(("SCONEX_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
321324 let idNFT = calculateAssetId(issueNFT)
322325 let sellStatus = if (if ((newAmountSold == maxCanSell))
323326 then true
324327 else !(isOnSale))
325328 then false
326329 else true
327330 let receiveNFT = if (if (if ((caller == issuer))
328331 then (bidOwner != "")
329332 else false)
330333 then (bidId != "")
331334 else false)
332335 then addressFromStringValue(bidOwner)
333336 else i.caller
334337 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
335338 }
336339
337340
338341 func getBidKeyVal (assetId,bidDataKey,date) = {
339342 let assetIdBid = if (!(isDefined(assetId)))
340343 then throw("Only sconex is accepted")
341344 else toBase58String(value(assetId))
342345 let bidData = getStringByKey((bidDataKey + "_OPEN"))
343346 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
344347 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
345348 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
346349 }
347350
348351
349352 func buyMint (i,artId,issuer,bidId,bidOwner) = {
350353 let t01551615566 = idCallerDate(i)
351354 let id = t01551615566._1
352355 let caller = t01551615566._2
353356 let date = t01551615566._3
354357 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
355358 let t01564615797 = getArtData(i, issuer, artId, isBid)
356359 let totalNFT = t01564615797._1
357360 let artworkName = t01564615797._2
358361 let amountSold = t01564615797._3
359362 let artworkPrice = t01564615797._4
360363 let priceAssetId = t01564615797._5
361364 let maxCanSell = t01564615797._6
362365 let isOnSale = t01564615797._7
363366 let t01580215948 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
364367 let bidDataKey = t01580215948._1
365368 let amount = t01580215948._2
366369 let assetId = t01580215948._3
367370 let t01595316095 = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
368371 let amountForSconex = t01595316095._1
369372 let amountForCreator = t01595316095._2
370373 let newAmountSold = t01595316095._3
371374 let t01610016290 = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
372375 let issueNFT = t01610016290._1
373376 let idNFT = t01610016290._2
374377 let sellStatus = t01610016290._3
375378 let receiveNFT = t01610016290._4
376379 let t01629516394 = getBidKeyVal(assetId, bidDataKey, date)
377380 let assetIdBid = t01629516394._1
378381 let bidDelOld = t01629516394._2
379382 let bidUpdate = t01629516394._3
380383 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
381384 let soldValue = if (!(isBid))
382385 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
383386 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
384387 let soldData = StringEntry(soldKey, soldValue)
385388 let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSconex, assetId), ScriptTransfer(receiveNFT, 1, idNFT), StringEntry(KeyNftIssuer(toBase58String(idNFT)), issuer)]
386389 if (isBid)
387390 then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
388391 else soldData :: buyRes
389392 }
390393
391394
392395 func setBidNonTraditional (i,artId,issuer) = {
393396 let t02770927747 = idCallerDate(i)
394397 let id = t02770927747._1
395398 let caller = t02770927747._2
396399 let date = t02770927747._3
397400 let t02775227788 = isPayment(i)
398401 let payment = t02775227788._1
399402 let amount = t02775227788._2
400403 let assetId = if (!(isDefined(payment.assetId)))
401404 then throw("Only sconex is accepted!")
402405 else toBase58String(value(payment.assetId))
403406 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
404407 if (!(acceptedAssetIds(assetId)))
405408 then throw("asset not accepted")
406409 else if (!(validateMinSell(assetId, amount)))
407410 then throw("Wrong min sell")
408411 else {
409412 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
410413 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
411414 if ((0 >= maxCanSell))
412415 then throw("No max edition set for this artwork")
413416 else if ((amountSold >= maxCanSell))
414417 then throw("Sold out, you cannot bid")
415418 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
416419 }
417420 }
418421
419422
420423 func setBidTraditional (i,artId,issuer) = {
421424 let endHeight = getIntegerByKey(keyDuration(issuer, artId))
425+ let highestBid = getIntegerByKey(keyHighestBid(artId))
422426 if ((height > endHeight))
423427 then throw("This auction is finished already!")
424428 else {
425429 let callderData = idCallerDate(i)
426430 let id = callderData._1
427431 let caller = callderData._2
428432 let date = callderData._3
429433 let isPaymentVar = isPayment(i)
430434 let payment = isPaymentVar._1
431435 let amount = isPaymentVar._2
432- let assetId = if (!(isDefined(payment.assetId)))
433- then throw("Only sconex is accepted!")
434- else toBase58String(value(payment.assetId))
435- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
436- if (!(acceptedAssetIds(assetId)))
437- then throw("asset not accepted")
438- else if (!(validateMinSell(assetId, amount)))
439- then throw("Wrong min sell")
440- else {
441- let amountSold = getIntegerByKey(keyIssued(issuer, artId))
442- let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
443- if ((0 >= maxCanSell))
444- then throw("No max edition set for this artwork")
445- else if ((amountSold >= maxCanSell))
446- then throw("Sold out, you cannot bid")
447- else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
448- }
436+ if ((amount >= highestBid))
437+ then throw(("Please place a bid higher then: " + toString(highestBid)))
438+ else {
439+ let assetId = if (!(isDefined(payment.assetId)))
440+ then throw("Only sconex is accepted!")
441+ else toBase58String(value(payment.assetId))
442+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
443+ if (!(acceptedAssetIds(assetId)))
444+ then throw("asset not accepted")
445+ else if (!(validateMinSell(assetId, amount)))
446+ then throw("Wrong min sell")
447+ else {
448+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
449+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
450+ if ((0 >= maxCanSell))
451+ then throw("No max edition set for this artwork")
452+ else if ((amountSold >= maxCanSell))
453+ then throw("Sold out, you cannot bid")
454+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), IntegerEntry(keyHighestBid(artId), amount)]
455+ }
456+ }
449457 }
450458 }
451459
452460
453461 func cancelBidImpl (i,artId,issuer,bidId) = {
454462 let t02894229094 = idCallerDate(i)
455463 let id = t02894229094._1
456464 let caller = t02894229094._2
457465 let date = t02894229094._3
458466 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
459467 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
460468 let bidData = getStringByKey((bidDataKey + "_OPEN"))
461469 if ((bidData == ""))
462470 then throw("Bid not found")
463471 else {
464472 let bidDataArr = split(bidData, "_")
465473 let assetId = getBidAssetId(bidDataArr[0])
466474 let bidStatus = "CANCELED"
467475 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
468476 }
469477 }
470478
471479
472480 func cancelBidImplTraditional (i,artId,issuer,bidId) = {
473481 let endHeight = getIntegerByKey(keyDuration(issuer, artId))
474482 if ((endHeight > height))
475483 then throw("This auction is not finished yet!")
476484 else {
477485 let t02894229094 = idCallerDate(i)
478486 let id = t02894229094._1
479487 let caller = t02894229094._2
480488 let date = t02894229094._3
481489 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
482490 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
483491 let bidData = getStringByKey((bidDataKey + "_OPEN"))
484492 if ((bidData == ""))
485493 then throw("Bid not found")
486494 else {
487495 let bidDataArr = split(bidData, "_")
488496 let assetId = getBidAssetId(bidDataArr[0])
489497 let bidStatus = "CANCELED"
490498 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
491499 }
492500 }
493501 }
494502
495503
496504 @Callable(i)
497505 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay) = {
498506 let t01774017781 = idCallerDate(i)
499507 let artId = t01774017781._1
500508 let caller = t01774017781._2
501509 let date = t01774017781._3
502510 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
503511 if ((validateArtwork != ""))
504512 then throw("Something went wrong!")
505513 else {
506514 let t01817018212 = validatePayment(i)
507515 let amount = t01817018212._1
508516 let assetId = t01817018212._2
509517 if (!(isDefined(amount)))
510518 then throw("Something went wrong")
511519 else {
512520 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
513521 if ((entryExist != ""))
514522 then throw("You already added it")
515523 else {
516524 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
517525 if ((hashExist != ""))
518526 then throw("Hash already registered")
519527 else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
520528 }
521529 }
522530 }
523531 }
524532
525533
526534
527535 @Callable(i)
528536 func sellArtwork (artId,price,maxMint,assetId,auctionType,minBid,duration) = {
529537 let t02571425747 = idCallerDate(i)
530538 let id = t02571425747._1
531539 let caller = t02571425747._2
532540 let artworkName = getStringByKey(keyName(caller, artId))
533541 if (!(containsElement([auctionType1, auctionType2], auctionType)))
534542 then throw("We dont know this auction type")
535543 else if ((artworkName == ""))
536544 then throw("This art doesn't match your account")
537545 else {
538546 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
539547 if (!(acceptedAssetIds(assetId)))
540548 then throw("Something went wrong!")
541549 else if (!(validateMinSell(assetId, price)))
542550 then throw("Something went wrong!")
543551 else {
544552 let checkUser = validateUser(caller)
545553 if ((checkUser != ""))
546554 then throw(checkUser)
547555 else {
548556 let amountSold = getIntegerByKey(keyIssued(caller, artId))
549557 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
550558 if ((maxMint > 10))
551559 then throw("10 editions max per artwork")
552560 else if (if ((amountSold != 0))
553561 then (amountSold == maxCanSell)
554562 else false)
555563 then throw("Max edition reached.")
556564 else if (if ((amountSold > 0))
557565 then (maxCanSell != maxMint)
558566 else false)
559567 then throw("Cannot change maximum issuable anymore")
560568 else if (if ((bidNbr > 0))
561569 then (maxCanSell != maxMint)
562570 else false)
563571 then throw("Cannot change maximum issuable with active orders")
564572 else {
565573 let sellStatus = if (if ((price > 0))
566574 then (maxMint > 0)
567575 else false)
568576 then true
569577 else false
570578 let endHeight = (duration + height)
571-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
579+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType), IntegerEntry(keyHighestBid(artId), 0)]
572580 }
573581 }
574582 }
575583 }
576584 }
577585
578586
579587
580588 @Callable(i)
581589 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
582590
583591
584592
585593 @Callable(i)
586594 func deleteEntry (entry) = {
587595 let caller = toString(addressFromPublicKey(i.callerPublicKey))
588596 if ((caller == owner))
589597 then [DeleteEntry(entry)]
590598 else throw("no")
591599 }
592600
593601
594602
595603 @Callable(i)
596604 func setBid (artId,issuer) = {
597605 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
598606 if ((auctionType == auctionType1))
599607 then setBidNonTraditional(i, artId, issuer)
600608 else if ((auctionType == auctionType2))
601609 then setBidTraditional(i, artId, issuer)
602610 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
603611 }
604612
605613
606614
607615 @Callable(i)
608616 func acceptBid (artId,issuer,bidId,bidOwner) = {
609617 let caller = toBase58String(i.caller.bytes)
610618 if ((caller != issuer))
611619 then throw("You cannot do this action")
612620 else buyMint(i, artId, issuer, bidId, bidOwner)
613621 }
614622
615623
616624
617625 @Callable(i)
618626 func cancelBid (artId,issuer,bidId) = {
619627 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
620628 if ((auctionType == auctionType1))
621629 then cancelBidImpl(i, artId, issuer, bidId)
622630 else cancelBidImplTraditional(i, artId, issuer, bidId)
623631 }
624632
625633

github/deemru/w8io/169f3d6 
80.09 ms