tx · dqzgd8gseAfbV712X4DB5DNfiQ6ygtfqTS4Lp6z8KjX

3N1RM5X2PdS1vH3vmzRrdzQDjAUjMqk2RbJ:  -0.01400000 Waves

2020.04.03 21:27 [938347] smart account 3N1RM5X2PdS1vH3vmzRrdzQDjAUjMqk2RbJ > SELF 0.00000000 Waves

{ "type": 13, "id": "dqzgd8gseAfbV712X4DB5DNfiQ6ygtfqTS4Lp6z8KjX", "fee": 1400000, "feeAssetId": null, "timestamp": 1585938477337, "version": 1, "sender": "3N1RM5X2PdS1vH3vmzRrdzQDjAUjMqk2RbJ", "senderPublicKey": "5xkQSCjfQmc7gqQcXZtkcWTzv4TmPAWcc81im9ngfwK9", "proofs": [ "Z8fBxb5F8MtR1CHoatYaB22B3M3ChzE3SJt5qzXR8cmEVXsUiXp2mfmecCRXUYAnY1rYpgr2Y6q7qws62WgiQWA" ], "script": "base64:AAIDAAAAAAAAAD0IARIGCgQICAEEEgcKBQgBCAEBEgYKBAgBAQgSAwoBCBIHCgUICAEIARIFCgMIAQESBgoECAEIARIDCgEIAAAAKgAAAAAHYWRkcmVzcwIAAAAjM04xUk01WDJQZFMxdkgzdm16UnJkelFEakFVak1xazJSYkoAAAAADmtleUV2ZW50UHJlZml4AgAAAAJlXwAAAAASa2V5RXZlbnREYXRhUHJlZml4AgAAAAVkYXRhXwAAAAAZa2V5RXZlbnRUaWNrZXRQcmljZVByZWZpeAIAAAAMdGlja2V0UHJpY2VfAAAAABJrZXlFdmVudERhdGVQcmVmaXgCAAAABWRhdGVfAAAAABZrZXlFdmVudEF0dGVuZGVlUHJlZml4AgAAAAJhXwAAAAAYa2V5UHJvZHVjZXJCYWxhbmNlUHJlZml4AgAAAAhiYWxhbmNlXwAAAAAaa2V5RXZlbnRBbW91bnRUaWNrZXRQcmVmaXgCAAAADXRpY2tldEFtb3VudF8AAAAAFmtleUV2ZW50Q2FuY2VsZWRQcmVmaXgCAAAACWNhbmNlbGVkXwAAAAAXa2V5RXZlbnRUaWNrZXRNYXhQcmVmaXgCAAAACnRpY2tldE1heF8AAAAAGGtleUV2ZW50UmVxdWlyZXNJZFByZWZpeAIAAAALcmVxdWlyZXNJZF8AAAAAH2tleUV2ZW50VGlja2V0RGVzY3JpcHRpb25QcmVmaXgCAAAAEnRpY2tldERlc2NyaXB0aW9uXwAAAAAVa2V5RXZlbnRUaWNrZXRzUHJlZml4AgAAAAh0aWNrZXRzXwAAAAAETk9ORQIAAAAEbm9uZQAAAAAKY29tbWlzc2lvbgAAAAAAAAAABQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAADbnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABQAAAANudW0BAAAAC2dldFN0ckJ5S2V5AAAAAQAAAANrZXkEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAETk9ORQUAAAADc3RyAQAAAAxnZXRCb29sQnlLZXkAAAABAAAAA2tleQQAAAAEYm9vbAQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEHBQAAAARib29sAQAAAAtnZXRFdmVudEtleQAAAAIAAAAIcHJvZHVjZXIAAAAFdGl0bGUJAAEsAAAAAgUAAAAOa2V5RXZlbnRQcmVmaXgJAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAIcHJvZHVjZXIFAAAABXRpdGxlAQAAAA9nZXRFdmVudERhdGFLZXkAAAABAAAABWV2ZW50CQABLAAAAAIFAAAAEmtleUV2ZW50RGF0YVByZWZpeAUAAAAFZXZlbnQBAAAAFmdldEV2ZW50VGlja2V0UHJpY2VLZXkAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAABlrZXlFdmVudFRpY2tldFByaWNlUHJlZml4CQABpAAAAAEFAAAACHRpY2tldElkAgAAAAFfBQAAAAVldmVudAEAAAAPZ2V0RXZlbnREYXRlS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABJrZXlFdmVudERhdGVQcmVmaXgFAAAABWV2ZW50AQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAAAAAR1c2VyAAAAAmlkAAAACHRpY2tldElkAAAABWV2ZW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAWa2V5RXZlbnRBdHRlbmRlZVByZWZpeAkAAlgAAAABCQAB9wAAAAEJAAGbAAAAAQkAASwAAAACBQAAAAR1c2VyBQAAAAJpZAIAAAABXwkAAaQAAAABBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAFZXZlbnQBAAAAEmdldEV2ZW50QmFsYW5jZUtleQAAAAIAAAAHYWNjb3VudAAAAAVldmVudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAYa2V5UHJvZHVjZXJCYWxhbmNlUHJlZml4BQAAAAdhY2NvdW50AgAAAAFfBQAAAAVldmVudAEAAAAXZ2V0RXZlbnRUaWNrZXRBbW91bnRLZXkAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAABprZXlFdmVudEFtb3VudFRpY2tldFByZWZpeAkAAaQAAAABBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAFZXZlbnQBAAAAE2dldEV2ZW50Q2FuY2VsZWRLZXkAAAABAAAABWV2ZW50CQABLAAAAAIFAAAAFmtleUV2ZW50Q2FuY2VsZWRQcmVmaXgFAAAABWV2ZW50AQAAABVnZXRFdmVudFJlcXVpcmVzSWRLZXkAAAABAAAABWV2ZW50CQABLAAAAAIFAAAAGGtleUV2ZW50UmVxdWlyZXNJZFByZWZpeAUAAAAFZXZlbnQBAAAAFGdldEV2ZW50VGlja2V0TWF4S2V5AAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAXa2V5RXZlbnRUaWNrZXRNYXhQcmVmaXgJAAGkAAAAAQUAAAAIdGlja2V0SWQCAAAAAV8FAAAABWV2ZW50AQAAABxnZXRFdmVudFRpY2tldERlc2NyaXB0aW9uS2V5AAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAfa2V5RXZlbnRUaWNrZXREZXNjcmlwdGlvblByZWZpeAkAAaQAAAABBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAFZXZlbnQBAAAAEmdldEV2ZW50VGlja2V0c0tleQAAAAEAAAAFZXZlbnQJAAEsAAAAAgUAAAAVa2V5RXZlbnRUaWNrZXRzUHJlZml4BQAAAAVldmVudAEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAABGl0ZW0BAAAADWdldEV2ZW50VmFsdWUAAAACAAAACHByb2R1Y2VyAAAABXRpdGxlCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAALZ2V0RXZlbnRLZXkAAAACBQAAAAhwcm9kdWNlcgUAAAAFdGl0bGUBAAAAGGdldEV2ZW50VGlja2V0UHJpY2VWYWx1ZQAAAAIAAAAFZXZlbnQAAAAIdGlja2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRFdmVudFRpY2tldFByaWNlS2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRFdmVudERhdGVLZXkAAAABBQAAAAVldmVudAEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAABAAAAAR1c2VyAAAAAmlkAAAACHRpY2tldElkAAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAATZ2V0RXZlbnRBdHRlbmRlZUtleQAAAAQFAAAABHVzZXIFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQBAAAAFGdldEV2ZW50QmFsYW5jZVZhbHVlAAAAAgAAAAdhY2NvdW50AAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0RXZlbnRCYWxhbmNlS2V5AAAAAgUAAAAHYWNjb3VudAUAAAAFZXZlbnQBAAAAGWdldEV2ZW50VGlja2V0QW1vdW50VmFsdWUAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAXZ2V0RXZlbnRUaWNrZXRBbW91bnRLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAAxnZXRCb29sQnlLZXkAAAABCQEAAAATZ2V0RXZlbnRDYW5jZWxlZEtleQAAAAEFAAAABWV2ZW50AQAAABdnZXRFdmVudFJlcXVpcmVzSWRWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAAxnZXRCb29sQnlLZXkAAAABCQEAAAAVZ2V0RXZlbnRSZXF1aXJlc0lkS2V5AAAAAQUAAAAFZXZlbnQBAAAAFmdldEV2ZW50VGlja2V0TWF4VmFsdWUAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAUZ2V0RXZlbnRUaWNrZXRNYXhLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQBAAAAHmdldEV2ZW50VGlja2V0RGVzY3JpcHRpb25WYWx1ZQAAAAIAAAAFZXZlbnQAAAAIdGlja2V0SWQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABxnZXRFdmVudFRpY2tldERlc2NyaXB0aW9uS2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkAQAAABRnZXRFdmVudFRpY2tldHNWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJnZXRFdmVudFRpY2tldHNLZXkAAAABBQAAAAVldmVudAAAAAgAAAABaQEAAAALY3JlYXRlRXZlbnQAAAAEAAAABXRpdGxlAAAABGRhdGEAAAAEZGF0ZQAAAApyZXF1aXJlc0lkBAAAAA9wcm9kdWNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFZXZlbnQJAQAAAAtnZXRFdmVudEtleQAAAAIFAAAAD3Byb2R1Y2VyQWRkcmVzcwUAAAAFdGl0bGUDCQEAAAACIT0AAAACCQEAAAANZ2V0RXZlbnRWYWx1ZQAAAAIFAAAAD3Byb2R1Y2VyQWRkcmVzcwUAAAAFdGl0bGUFAAAABE5PTkUJAAACAAAAAQIAAAAXVGhlIGV2ZW50IGFscmVhZHkgZXhpc3QDCQAAZgAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAARkYXRlCQAAAgAAAAECAAAAGkRhdGUgY2Fubm90IGJlIGluIHRoZSBwYXN0CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAALZ2V0RXZlbnRLZXkAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABXRpdGxlBQAAAA9wcm9kdWNlckFkZHJlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRFdmVudERhdGFLZXkAAAABBQAAAAVldmVudAUAAAAEZGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAD2dldEV2ZW50RGF0ZUtleQAAAAEFAAAABWV2ZW50BQAAAARkYXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0RXZlbnRSZXF1aXJlc0lkS2V5AAAAAQUAAAAFZXZlbnQFAAAACnJlcXVpcmVzSWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRFdmVudFRpY2tldHNLZXkAAAABBQAAAAVldmVudAAAAAAAAAAAAAUAAAADbmlsAAAAAWkBAAAAEWNyZWF0ZUV2ZW50VGlja2V0AAAABQAAAAVldmVudAAAAAVwcmljZQAAAAtkZXNjcmlwdGlvbgAAAA1hbW91bnRUaWNrZXRzAAAACW1heEFtb3VudAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA9wcm9kdWNlckFkZHJlc3MJAQAAABFnZXRFdmVudFZhbHVlQnlJZAAAAAEFAAAABWV2ZW50BAAAAAh0aWNrZXRJZAkBAAAAFGdldEV2ZW50VGlja2V0c1ZhbHVlAAAAAQUAAAAFZXZlbnQDCQEAAAACIT0AAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAF1RoaXMgZXZlbnQgd2FzIGNhbmNlbGVkCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAWZ2V0RXZlbnRUaWNrZXRQcmljZUtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAUAAAAFcHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRFdmVudFRpY2tldEFtb3VudEtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAUAAAANYW1vdW50VGlja2V0cwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFGdldEV2ZW50VGlja2V0TWF4S2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkBQAAAAltYXhBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABxnZXRFdmVudFRpY2tldERlc2NyaXB0aW9uS2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEV2ZW50VGlja2V0c0tleQAAAAEFAAAABWV2ZW50CQAAZAAAAAIJAQAAABRnZXRFdmVudFRpY2tldHNWYWx1ZQAAAAEFAAAABWV2ZW50AAAAAAAAAAABBQAAAANuaWwAAAABaQEAAAAIcHVyY2hhc2UAAAAEAAAABWV2ZW50AAAACHRpY2tldElkAAAABmFtb3VudAAAAAJpZAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAC3VzZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABXByaWNlAAAAAAAAAABkBAAAAA9wcm9kdWNlckFkZHJlc3MJAQAAABFnZXRFdmVudFZhbHVlQnlJZAAAAAEFAAAABWV2ZW50BAAAAAt0aWNrZXRzTGVmdAkBAAAAGWdldEV2ZW50VGlja2V0QW1vdW50VmFsdWUAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQEAAAACnRvdGFsUHJpY2UJAABoAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAgY2FuIHVzZSBXQVZFUyBvbmx5IGF0IHRoZSBtb21lbnQDCQAAAAAAAAIFAAAAD3Byb2R1Y2VyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABRFdmVudCBkb2VzIG5vdCBleGlzdAMJAABmAAAAAgUAAAAKdG90YWxQcmljZQgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAAAeWW91IGRpZCBub3Qgc2VuZCBlbm91Z2ggbW9uZXkuAwkAAGYAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAKdG90YWxQcmljZQkAAAIAAAABAgAAABhZb3Ugc2VuZCB0b28gbXVjaCBtb25leS4DCQAAZgAAAAIAAAAAAAAAAAAJAABlAAAAAgUAAAALdGlja2V0c0xlZnQFAAAABmFtb3VudAkAAAIAAAABAgAAABdOb3QgZW5vdWdoIHRpY2tldHMgbGVmdAMJAABmAAAAAgkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAOThwAkBAAAAEWdldEV2ZW50RGF0ZVZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAAAfVGhpcyBldmVudCBoYXMgYWxyZWFkeSBoYXBwZW5lZAMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAABdUaGlzIGV2ZW50IHdhcyBjYW5jZWxlZAMDCQEAAAAXZ2V0RXZlbnRSZXF1aXJlc0lkVmFsdWUAAAABBQAAAAVldmVudAkAAAAAAAACBQAAAAJpZAIAAAAABwkAAAIAAAABAgAAADhUaGlzIGV2ZW50IHJlcXVpcmVzIHRoYXQgeW91IHJlZ2lzdGVyIHdpdGggYSBwZXJzb25hbCBJRAMJAABmAAAAAgkBAAAAFmdldEV2ZW50VGlja2V0TWF4VmFsdWUAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQJAABkAAAAAgkBAAAAFWdldEV2ZW50QXR0ZW5kZWVWYWx1ZQAAAAQFAAAAC3VzZXJBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50BQAAAAZhbW91bnQJAAACAAAAAQIAAAA1QW1vdW50IG9mIFRpY2tldHMgZXhjZWVkcyBtYXhpbXVtIGFtb3VudCBwZXIgYXR0ZW5kZWUJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAATZ2V0RXZlbnRBdHRlbmRlZUtleQAAAAQFAAAAC3VzZXJBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50CQAAZAAAAAIJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAAt1c2VyQWRkcmVzcwUAAAACaWQFAAAACHRpY2tldElkBQAAAAVldmVudAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0RXZlbnRCYWxhbmNlS2V5AAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAVldmVudAkAAGQAAAACCQEAAAAUZ2V0RXZlbnRCYWxhbmNlVmFsdWUAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABWV2ZW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAF2dldEV2ZW50VGlja2V0QW1vdW50S2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkCQAAZQAAAAIFAAAAC3RpY2tldHNMZWZ0BQAAAAZhbW91bnQFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MIBQAAAANwbXQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAALY2FuY2VsRXZlbnQAAAABAAAABWV2ZW50BAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAUAAAANY2FsbGVyQWRkcmVzcwkAAAIAAAABAgAAAE5FdmVudCBkb2VzIG5vdCBleGlzdCwgb3IgeW91IGRvbid0IGhhdmUgdGhlIGNyZWRlbnRpYWxzIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24DCQAAZgAAAAIJAABkAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAADk4cAJAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgaGFzIGFscmVhZHkgaGFwcGVuZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQUAAAAFZXZlbnQGBQAAAANuaWwAAAABaQEAAAAHY2hlY2tpbgAAAAUAAAAFZXZlbnQAAAAPYXR0ZW5kZWVBZGRyZXNzAAAABmFtb3VudAAAAAJpZAAAAAh0aWNrZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACBQAAAAZhbW91bnQJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQJAAACAAAAAQIAAAAeWW91IGRvbid0IGhhdmUgZW5vdWdoIHRpY2tldHMuAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAT1RoaXMgZXZlbnQgd2FzIGNhbmNlbGVkLiBZb3UgY2FuIHJlZGVlbSB5b3VyIHRpY2tldCB1c2luZyByZWZ1bmRUaWNrZXQgZnVuY3Rpb24JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50CQAAZQAAAAIJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQFAAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAAEGVkaXRFdmVudFRpY2tldHMAAAADAAAABWV2ZW50AAAACHRpY2tldElkAAAACW5ld0Ftb3VudAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgd2FzIGFscmVhZHkgY2FuY2VsZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRFdmVudFRpY2tldEFtb3VudEtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAUAAAAJbmV3QW1vdW50BQAAAANuaWwAAAABaQEAAAAMcmVmdW5kVGlja2V0AAAABAAAAAVldmVudAAAAAZhbW91bnQAAAACaWQAAAAIdGlja2V0SWQEAAAAD2F0dGVuZGVlQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1hdHRlbmRlZVZhbHVlCQEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50AwkAAAAAAAACCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAUAAAAETk9ORQkAAAIAAAABAgAAABhUaGUgZXZlbnQgZG9lcyBub3QgZXhpc3QDCQAAZgAAAAIFAAAABmFtb3VudAUAAAANYXR0ZW5kZWVWYWx1ZQkAAAIAAAABAgAAADpZb3UgZG9uJ3QgaGF2ZSBlbm91Z2ggcmVnaXN0ZXJlZCB0aWNrZXRzIHdpdGggdGhpcyBhZGRyZXNzAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAE2dldEV2ZW50QXR0ZW5kZWVLZXkAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQJAABlAAAAAgUAAAANYXR0ZW5kZWVWYWx1ZQUAAAAGYW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA9hdHRlbmRlZUFkZHJlc3MJAABoAAAAAgUAAAAGYW1vdW50BQAAAA1hdHRlbmRlZVZhbHVlBQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAABAAAABWV2ZW50BAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAB2JhbGFuY2UJAQAAABRnZXRFdmVudEJhbGFuY2VWYWx1ZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWV2ZW50AwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGcAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAFEluc3VmZmljaWVudCBiYWxhbmNlAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAF0V2ZW50IGhhcyBiZWVuIGNhbmNlbGVkCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEV2ZW50QmFsYW5jZUtleQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWV2ZW50AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA1jYWxsZXJBZGRyZXNzCQAAZQAAAAIFAAAAB2JhbGFuY2UJAABpAAAAAgkAAGgAAAACBQAAAAdiYWxhbmNlBQAAAApjb21taXNzaW9uAAAAAAAAAABkBQAAAAR1bml0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwkAAGkAAAACCQAAaAAAAAIFAAAAB2JhbGFuY2UFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQFAAAABHVuaXQFAAAAA25pbAAAAADW7tqS", "chainId": 84, "height": 938347, "spentComplexity": 0 } View: original | compacted Prev: Dj15fd9gAnkGga7XL8m6gMr7dmYBL9AamZqEoa1dHjPM Next: 5SjD11XvFm8M7LyWW9jkqCCAZawP7KJgisx14wVRqAhF Diff:
OldNewDifferences
169169 func purchase (event,ticketId,amount,id) = {
170170 let pmt = extract(i.payment)
171171 let userAddress = toBase58String(i.caller.bytes)
172- let price = getEventTicketPriceValue(event, ticketId)
172+ let price = 100
173173 let producerAddress = getEventValueById(event)
174174 let ticketsLeft = getEventTicketAmountValue(event, ticketId)
175175 let totalPrice = (amount * price)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let address = "3N1RM5X2PdS1vH3vmzRrdzQDjAUjMqk2RbJ"
55
66 let keyEventPrefix = "e_"
77
88 let keyEventDataPrefix = "data_"
99
1010 let keyEventTicketPricePrefix = "ticketPrice_"
1111
1212 let keyEventDatePrefix = "date_"
1313
1414 let keyEventAttendeePrefix = "a_"
1515
1616 let keyProducerBalancePrefix = "balance_"
1717
1818 let keyEventAmountTicketPrefix = "ticketAmount_"
1919
2020 let keyEventCanceledPrefix = "canceled_"
2121
2222 let keyEventTicketMaxPrefix = "ticketMax_"
2323
2424 let keyEventRequiresIdPrefix = "requiresId_"
2525
2626 let keyEventTicketDescriptionPrefix = "ticketDescription_"
2727
2828 let keyEventTicketsPrefix = "tickets_"
2929
3030 let NONE = "none"
3131
3232 let commission = 5
3333
3434 func getNumberByKey (key) = {
3535 let num = match getInteger(this, key) {
3636 case a: Int =>
3737 a
3838 case _ =>
3939 0
4040 }
4141 num
4242 }
4343
4444
4545 func getStrByKey (key) = {
4646 let str = match getString(this, key) {
4747 case a: String =>
4848 a
4949 case _ =>
5050 NONE
5151 }
5252 str
5353 }
5454
5555
5656 func getBoolByKey (key) = {
5757 let bool = match getBoolean(this, key) {
5858 case a: Boolean =>
5959 a
6060 case _ =>
6161 false
6262 }
6363 bool
6464 }
6565
6666
6767 func getEventKey (producer,title) = (keyEventPrefix + toBase58String(sha256(toBytes((producer + title)))))
6868
6969
7070 func getEventDataKey (event) = (keyEventDataPrefix + event)
7171
7272
7373 func getEventTicketPriceKey (event,ticketId) = (((keyEventTicketPricePrefix + toString(ticketId)) + "_") + event)
7474
7575
7676 func getEventDateKey (event) = (keyEventDatePrefix + event)
7777
7878
7979 func getEventAttendeeKey (user,id,ticketId,event) = (((((keyEventAttendeePrefix + toBase58String(sha256(toBytes((user + id))))) + "_") + toString(ticketId)) + "_") + event)
8080
8181
8282 func getEventBalanceKey (account,event) = (((keyProducerBalancePrefix + account) + "_") + event)
8383
8484
8585 func getEventTicketAmountKey (event,ticketId) = (((keyEventAmountTicketPrefix + toString(ticketId)) + "_") + event)
8686
8787
8888 func getEventCanceledKey (event) = (keyEventCanceledPrefix + event)
8989
9090
9191 func getEventRequiresIdKey (event) = (keyEventRequiresIdPrefix + event)
9292
9393
9494 func getEventTicketMaxKey (event,ticketId) = (((keyEventTicketMaxPrefix + toString(ticketId)) + "_") + event)
9595
9696
9797 func getEventTicketDescriptionKey (event,ticketId) = (((keyEventTicketDescriptionPrefix + toString(ticketId)) + "_") + event)
9898
9999
100100 func getEventTicketsKey (event) = (keyEventTicketsPrefix + event)
101101
102102
103103 func getEventValueById (item) = getStrByKey(item)
104104
105105
106106 func getEventValue (producer,title) = getStrByKey(getEventKey(producer, title))
107107
108108
109109 func getEventTicketPriceValue (event,ticketId) = getNumberByKey(getEventTicketPriceKey(event, ticketId))
110110
111111
112112 func getEventDateValue (event) = getNumberByKey(getEventDateKey(event))
113113
114114
115115 func getEventAttendeeValue (user,id,ticketId,event) = getNumberByKey(getEventAttendeeKey(user, id, ticketId, event))
116116
117117
118118 func getEventBalanceValue (account,event) = getNumberByKey(getEventBalanceKey(account, event))
119119
120120
121121 func getEventTicketAmountValue (event,ticketId) = getNumberByKey(getEventTicketAmountKey(event, ticketId))
122122
123123
124124 func getEventCanceledValue (event) = getBoolByKey(getEventCanceledKey(event))
125125
126126
127127 func getEventRequiresIdValue (event) = getBoolByKey(getEventRequiresIdKey(event))
128128
129129
130130 func getEventTicketMaxValue (event,ticketId) = getNumberByKey(getEventTicketMaxKey(event, ticketId))
131131
132132
133133 func getEventTicketDescriptionValue (event,ticketId) = getStrByKey(getEventTicketDescriptionKey(event, ticketId))
134134
135135
136136 func getEventTicketsValue (event) = getNumberByKey(getEventTicketsKey(event))
137137
138138
139139 @Callable(i)
140140 func createEvent (title,data,date,requiresId) = {
141141 let producerAddress = toBase58String(i.caller.bytes)
142142 let event = getEventKey(producerAddress, title)
143143 if ((getEventValue(producerAddress, title) != NONE))
144144 then throw("The event already exist")
145145 else if ((lastBlock.timestamp > date))
146146 then throw("Date cannot be in the past")
147147 else WriteSet([DataEntry(getEventKey(producerAddress, title), producerAddress), DataEntry(getEventDataKey(event), data), DataEntry(getEventDateKey(event), date), DataEntry(getEventRequiresIdKey(event), requiresId), DataEntry(getEventTicketsKey(event), 0)])
148148 }
149149
150150
151151
152152 @Callable(i)
153153 func createEventTicket (event,price,description,amountTickets,maxAmount) = {
154154 let callerAddress = toBase58String(i.caller.bytes)
155155 let producerAddress = getEventValueById(event)
156156 let ticketId = getEventTicketsValue(event)
157157 if ((producerAddress != callerAddress))
158158 then throw("Event does not exist, or you don't have the credentials to perform this action")
159159 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
160160 then throw("This event has already happened")
161161 else if (getEventCanceledValue(event))
162162 then throw("This event was canceled")
163163 else WriteSet([DataEntry(getEventTicketPriceKey(event, ticketId), price), DataEntry(getEventTicketAmountKey(event, ticketId), amountTickets), DataEntry(getEventTicketMaxKey(event, ticketId), maxAmount), DataEntry(getEventTicketDescriptionKey(event, ticketId), description), DataEntry(getEventTicketsKey(event), (getEventTicketsValue(event) + 1))])
164164 }
165165
166166
167167
168168 @Callable(i)
169169 func purchase (event,ticketId,amount,id) = {
170170 let pmt = extract(i.payment)
171171 let userAddress = toBase58String(i.caller.bytes)
172- let price = getEventTicketPriceValue(event, ticketId)
172+ let price = 100
173173 let producerAddress = getEventValueById(event)
174174 let ticketsLeft = getEventTicketAmountValue(event, ticketId)
175175 let totalPrice = (amount * price)
176176 if (isDefined(pmt.assetId))
177177 then throw("can use WAVES only at the moment")
178178 else if ((producerAddress == NONE))
179179 then throw("Event does not exist")
180180 else if ((totalPrice > pmt.amount))
181181 then throw("You did not send enough money.")
182182 else if ((pmt.amount > totalPrice))
183183 then throw("You send too much money.")
184184 else if ((0 > (ticketsLeft - amount)))
185185 then throw("Not enough tickets left")
186186 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
187187 then throw("This event has already happened")
188188 else if (getEventCanceledValue(event))
189189 then throw("This event was canceled")
190190 else if (if (getEventRequiresIdValue(event))
191191 then (id == "")
192192 else false)
193193 then throw("This event requires that you register with a personal ID")
194194 else if ((getEventTicketMaxValue(event, ticketId) > (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)))
195195 then throw("Amount of Tickets exceeds maximum amount per attendee")
196196 else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, ticketId, event), (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventTicketAmountKey(event, ticketId), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
197197 }
198198
199199
200200
201201 @Callable(i)
202202 func cancelEvent (event) = {
203203 let callerAddress = toBase58String(i.caller.bytes)
204204 if ((getEventValueById(event) != callerAddress))
205205 then throw("Event does not exist, or you don't have the credentials to perform this action")
206206 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
207207 then throw("This event has already happened")
208208 else WriteSet([DataEntry(getEventCanceledKey(event), true)])
209209 }
210210
211211
212212
213213 @Callable(i)
214214 func checkin (event,attendeeAddress,amount,id,ticketId) = {
215215 let callerAddress = toBase58String(i.caller.bytes)
216216 if ((getEventValueById(event) != callerAddress))
217217 then throw("Event does not exist, or you don't have the credentials to perform this action")
218218 else if ((amount > getEventAttendeeValue(attendeeAddress, id, ticketId, event)))
219219 then throw("You don't have enough tickets.")
220220 else if (getEventCanceledValue(event))
221221 then throw("This event was canceled. You can redeem your ticket using refundTicket function")
222222 else WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, ticketId, event), (getEventAttendeeValue(attendeeAddress, id, ticketId, event) - amount))])
223223 }
224224
225225
226226
227227 @Callable(i)
228228 func editEventTickets (event,ticketId,newAmount) = {
229229 let callerAddress = toBase58String(i.caller.bytes)
230230 if ((getEventValueById(event) != callerAddress))
231231 then throw("Event does not exist, or you don't have the credentials to perform this action")
232232 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
233233 then throw("This event has already happened")
234234 else if (getEventCanceledValue(event))
235235 then throw("This event was already canceled")
236236 else WriteSet([DataEntry(getEventTicketAmountKey(event, ticketId), newAmount)])
237237 }
238238
239239
240240
241241 @Callable(i)
242242 func refundTicket (event,amount,id,ticketId) = {
243243 let attendeeAddress = toBase58String(i.caller.bytes)
244244 let attendeeValue = getEventAttendeeValue(attendeeAddress, id, ticketId, event)
245245 if ((getEventValueById(event) == NONE))
246246 then throw("The event does not exist")
247247 else if ((amount > attendeeValue))
248248 then throw("You don't have enough registered tickets with this address")
249249 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
250250 then throw("This event has already happened")
251251 else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, ticketId, event), (attendeeValue - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(attendeeAddress), (amount * attendeeValue), unit)]))
252252 }
253253
254254
255255
256256 @Callable(i)
257257 func withdraw (event) = {
258258 let callerAddress = toBase58String(i.caller.bytes)
259259 let balance = getEventBalanceValue(callerAddress, event)
260260 if ((getEventValueById(event) != callerAddress))
261261 then throw("Event does not exist, or you don't have the credentials to perform this action")
262262 else if ((0 >= balance))
263263 then throw("Insufficient balance")
264264 else if (getEventCanceledValue(event))
265265 then throw("Event has been canceled")
266266 else ScriptResult(WriteSet([DataEntry(getEventBalanceKey(callerAddress, event), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), (balance - ((balance * commission) / 100)), unit), ScriptTransfer(addressFromStringValue(address), ((balance * commission) / 100), unit)]))
267267 }
268268
269269

github/deemru/w8io/169f3d6 
37.74 ms