tx · FPHDQrk1RbK2uVoN48Q5qg8qT9jM2bQMtZs2cdzVxTeT

3NCV5EhSifEAkU6wJ21ao7Yfb5JstkX9Sit:  -0.01500000 Waves

2019.06.25 19:54 [557903] smart account 3NCV5EhSifEAkU6wJ21ao7Yfb5JstkX9Sit > SELF 0.00000000 Waves

{ "type": 13, "id": "FPHDQrk1RbK2uVoN48Q5qg8qT9jM2bQMtZs2cdzVxTeT", "fee": 1500000, "feeAssetId": null, "timestamp": 1561481672112, "version": 1, "sender": "3NCV5EhSifEAkU6wJ21ao7Yfb5JstkX9Sit", "senderPublicKey": "3ZghGT2iDpLvy9BztBNSUnRWG2nrBKpGp3cU4n65p55z", "proofs": [ "4ebDJbP7BRtky3Ud4vRki2o81Gv8izoNnrU4zUTwemzvHxz5scPsbmAbCcCJiXBYNgUQkaCgeiSKGAd5Z3bPC9v9" ], "script": "base64:AAIDAAAAAAAAAAAAAAAMAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAGPYmFzZTY0Ok1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcWxBaUFOU21CcERIWUtQOXNLZ2VOL2wxYkFiMjhnL3RHbGdEa3dUNUZpTU40WDNwd2R2ZHhFN212U1I4LzQxZFU5cng0akcrNnRacGIxVUxWRFBzNDMxdFIySVJhVFh3NUNqK0FjMnZoTCs1SmFtQ2VyR0QxVVcrYmgvRUdRdHhvOFczWUxEcm9mWEI1UUhKeDRQa3oyS2dmK29TL0M4aEh1Qi9VNGtyTzc2VTA1MDdHVGpaUFA5a1JRMHVMU01lcVFYdDh3WFMrbk1wNXdhanF4UHBETE1hU1JFZ3NLd3YvQUVrUDRkenBUWWJpa0xCWWw0cXRkSnNEODRITEZTa2l3ZDNCaGNPclBqb0lZbUx4UXVCRDVUSU1LVEtEM3NkWmdhWTlyc3lxeDNBMDBpbm55eEQ2enAzYjRnRnBVT1g4SnhLWmRFQzJteUVxbGVOZ2c3R3p3SURBUUFCAAAAAAZTRVJWRVIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM05DaUcyOExtV3lUaWdXRzEzRTVRbnZkSEJzWkZZWFNTMmoAAAAAEFNFU1NJT05JREZJWFNJWkUAAAAAAAAAADIAAAAACVNUQVRFSU5JVAIAAAAESU5JVAAAAAAKU1RBVEVSRUFEWQIAAAAFUkVBRFkAAAAADVNUQVRFRklOSVNIRUQCAAAACEZJTklTSEVEAQAAAANhYnMAAAABAAAAA3ZhbAMJAABmAAAAAgAAAAAAAAAAAAUAAAADdmFsCQEAAAABLQAAAAEFAAAAA3ZhbAUAAAADdmFsAQAAABJmb3JtYXRTdGF0ZURhdGFTdHIAAAADAAAACWRyYXdTdGF0ZQAAABFvcmdhbml6ZXJQdWJLZXk1OAAAAAtyYW5kT3JFbXB0eQQAAAAMZnVsbFN0YXRlU3RyCQABLAAAAAIJAAEsAAAAAgUAAAAJZHJhd1N0YXRlAgAAAAFfBQAAABFvcmdhbml6ZXJQdWJLZXk1OAMJAAAAAAAAAgUAAAALcmFuZE9yRW1wdHkCAAAAAAUAAAAMZnVs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dGUJAQAAABJmb3JtYXRTdGF0ZURhdGFTdHIAAAADBQAAAAlTVEFURUlOSVQFAAAAEW9yZ2FuaXplclB1YktleTU4AgAAAAAJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACXNlc3Npb25JZAUAAAAJaW5pdFN0YXRlBQAAAANuaWwAAAABaQEAAAAFcmVhZHkAAAABAAAACXNlc3Npb25JZAQAAAAOZHJhd1BhcmFtc0xpc3QJAQAAABNleHRyYWN0R2FtZURhdGFMaXN0AAAAAQUAAAAJc2Vzc2lvbklkBAAAAAlkcmF3U3RhdGUJAAGRAAAAAgUAAAAOZHJhd1BhcmFtc0xpc3QAAAAAAAAAAAAEAAAAEW9yZ2FuaXplclB1YktleTU4CQABkQAAAAIFAAAADmRyYXdQYXJhbXNMaXN0AAAAAAAAAAABBAAAAA9vcmdhbml6ZXJQdWJLZXkJAAJZAAAAAQUAAAARb3JnYW5pemVyUHViS2V5NTgDCQEAAAACIT0AAAACBQAAAAlkcmF3U3RhdGUFAAAACVNUQVRFSU5JVAkAAAIAAAABCQABLAAAAAIFAAAACXNlc3Npb25JZAIAAAA+IGRyYXc6IG1vdmluZyBpbnRvIFJFQURZIHN0YXRlIGlzIGFsbG93ZWQgb25seSBmcm9tIElOSVQgc3RhdGUDCQEAAAACIT0AAAACBQAAAA9vcmdhbml6ZXJQdWJLZXkIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABCQABLAAAAAIFAAAACXNlc3Npb25JZAIAAAA7ZHJhdzogbW92aW5nIGludG8gUkVBRFkgc3RhdGUgaXMgYWxsb3dlZCBmb3Igb3JnYW5pemVyIG9ubHkEAAAACnJlYWR5U3RhdGUJAQAAABJmb3JtYXRTdGF0ZURhdGFTdHIAAAADBQAAAAlTVEFURUlOSVQFAAAAEW9yZ2FuaXplclB1YktleTU4AgAAAAAJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACXNlc3Npb25JZAUAAAAKcmVhZHlTdGF0ZQUAAAADbmlsAAAAAWkBAAAABnJhbmRvbQAAAAIAAAAJc2Vzc2lvbklkAAAAB3JzYVNpZ24EAAAABGZyb20AAAAAAAAAAAEEAAAAAnRvAAAAAAAAAABkBAAAAA5kcmF3UGFyYW1zTGlzdAkBAAAAE2V4dHJhY3RHYW1lRGF0YUxpc3QAAAABBQAAAAlzZXNzaW9uSWQEAAAACWRyYXdTdGF0ZQkAAZEAAAACBQAAAA5kcmF3UGFyYW1zTGlzdAAAAAAAAAAAAAQAAAARb3JnYW5pemVyUHViS2V5NTgJAAGRAAAAAgUAAAAOZHJhd1BhcmFtc0xpc3QAAAAAAAAAAAEEAAAAD29yZ2FuaXplclB1YktleQkAAlkAAAABBQAAABFvcmdhbml6ZXJQdWJLZXk1OAMJAQAAAAIhPQAAAAIFAAAACWRyYXdTdGF0ZQUAAAAKU1RBVEVSRUFEWQkAAAIAAAABCQABLAAAAAIFAAAACXNlc3Npb25JZAIAAAA7IGRyYXc6IGl0IG11c3QgYmUgaW4gUkVBRFkgc3RhdGUgdG8gZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnMDCQEAAAABIQAAAAEJAAH4AAAABAUAAAAGU0hBMjU2CQABmwAAAAEFAAAACXNlc3Npb25JZAUAAAAHcnNhU2lnbgUAAAAJUlNBUFVCTElDCQAAAgAAAAECAAAAFUludmFsaWQgUlNBIHNpZ25hdHVyZQQAAAAIY3VyclZlY3QJAQAAABNnZW5lcmF0ZVJhbmRzVmVjdG9yAAAABAUAAAAJc2Vzc2lvbklkBQAAAARmcm9tBQAAAAJ0bwUAAAAHcnNhU2lnbgQAAAABcwkAAMgAAAABBQAAAAhjdXJyVmVjdAQAAAAFcmFuZDEDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAEJAAGkAAAAAQkABLEAAAABCQAAyQAAAAIJAADKAAAAAgUAAAAIY3VyclZlY3QAAAAAAAAAAAAAAAAAAAAAAAgCAAAAAAQAAAAFcmFuZDIDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kMQIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAABAAAAAAAAAAAIAAAAAAAAAAAIBQAAAAVyYW5kMQQAAAAFcmFuZDMDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAMJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kMgIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAACAAAAAAAAAAAIAAAAAAAAAAAIBQAAAAVyYW5kMgQAAAAFcmFuZDQDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAQJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kMwIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAADAAAAAAAAAAAIAAAAAAAAAAAIBQAAAAVyYW5kMwQAAAAFcmFuZDUDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAUJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kNAIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAIBQAAAAVyYW5kNAQAAAAFcmFuZDYDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAYJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kNQIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAAFAAAAAAAAAAAIAAAAAAAAAAAIBQAAAAVyYW5kNQQAAAAFcmFuZDcDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAcJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kNgIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAAGAAAAAAAAAAAIAAAAAAAAAAAIBQAAAAVyYW5kNgQAAAAFcmFuZDgDCQAAZwAAAAIFAAAAAXMAAAAAAAAAAAgJAAEsAAAAAgkAASwAAAACBQAAAAVyYW5kNwIAAAABXwkAAaQAAAABCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAhjdXJyVmVjdAkAAGgAAAACAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAA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", "chainId": 84, "height": 557903, "spentComplexity": 0 } View: original | compacted Prev: none Next: 5LLYxBQjSzg8tCR3Lxa5thEfD9WxDeWmmET2BcZJGGJw Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqlAiANSmBpDHYKP9sKgeN/l1bAb28g/tGlgDkwT5FiMN4X3pwdvdxE7mvSR8/41dU9rx4jG+6tZpb1ULVDPs431tR2IRaTXw5Cj+Ac2vhL+5JamCerGD1UW+bh/EGQtxo8W3YLDrofXB5QHJx4Pkz2Kgf+oS/C8hHuB/U4krO76U0507GTjZPP9kRQ0uLSMeqQXt8wXS+nMp5wajqxPpDLMaSREgsKwv/AEkP4dzpTYbikLBYl4qtdJsD84HLFSkiwd3BhcOrPjoIYmLxQuBD5TIMKTKD3sdZgaY9rsyqx3A00innyxD6zp3b4gFpUOX8JxKZdEC2myEqleNgg7GzwIDAQAB")
5+
6+let SERVER = addressFromStringValue("3NCiG28LmWyTigWG13E5QnvdHBsZFYXSS2j")
7+
8+let SESSIONIDFIXSIZE = 50
9+
10+let STATEINIT = "INIT"
11+
12+let STATEREADY = "READY"
13+
14+let STATEFINISHED = "FINISHED"
15+
16+func abs (val) = if ((0 > val))
17+ then -(val)
18+ else val
19+
20+
21+func formatStateDataStr (drawState,organizerPubKey58,randOrEmpty) = {
22+ let fullStateStr = ((drawState + "_") + organizerPubKey58)
23+ if ((randOrEmpty == ""))
24+ then fullStateStr
25+ else ((fullStateStr + "_") + randOrEmpty)
26+ }
27+
28+
29+func extractGameDataList (sessionId) = {
30+ let rawDataStr = getStringValue(this, sessionId)
31+ split(rawDataStr, "_")
32+ }
33+
34+
35+func nextRand (currRandsVect,remainingHash) = {
36+ let nextRandInt = abs(toInt(remainingHash))
37+ let nextRandVect = toBytes(nextRandInt)
38+ let s = (size(currRandsVect) / 8)
39+ if ((0 == s))
40+ then [nextRandVect, drop(remainingHash, 1)]
41+ else {
42+ let duplicate = if (if (if (if (if (if (if (if (if ((s >= 1))
43+ then (take(currRandsVect, 8) == nextRandVect)
44+ else false)
45+ then true
46+ else if ((s >= 2))
47+ then (take(drop(currRandsVect, (1 * 8)), 8) == nextRandVect)
48+ else false)
49+ then true
50+ else if ((s >= 3))
51+ then (take(drop(currRandsVect, (2 * 8)), 8) == nextRandVect)
52+ else false)
53+ then true
54+ else if ((s >= 4))
55+ then (take(drop(currRandsVect, (3 * 8)), 8) == nextRandVect)
56+ else false)
57+ then true
58+ else if ((s >= 5))
59+ then (take(drop(currRandsVect, (4 * 8)), 8) == nextRandVect)
60+ else false)
61+ then true
62+ else if ((s >= 6))
63+ then (take(drop(currRandsVect, (5 * 8)), 8) == nextRandVect)
64+ else false)
65+ then true
66+ else if ((s >= 7))
67+ then (take(drop(currRandsVect, (6 * 8)), 8) == nextRandVect)
68+ else false)
69+ then true
70+ else if ((s >= 8))
71+ then (take(drop(currRandsVect, (7 * 8)), 8) == nextRandVect)
72+ else false)
73+ then true
74+ else if ((s >= 9))
75+ then (take(drop(currRandsVect, (8 * 8)), 8) == nextRandVect)
76+ else false
77+ if (duplicate)
78+ then [currRandsVect, drop(remainingHash, 1)]
79+ else [(currRandsVect + nextRandVect), drop(remainingHash, 1)]
80+ }
81+ }
82+
83+
84+func generateRandsVector (sessionId,from,to,rsaSign) = {
85+ let emptyVec = toBytes("")
86+ let randHash = sha256(rsaSign)
87+ let nextInfo1 = nextRand(emptyVec, randHash)
88+ let nextInfo2 = nextRand(nextInfo1[0], nextInfo1[1])
89+ let nextInfo3 = nextRand(nextInfo2[0], nextInfo2[1])
90+ let nextInfo4 = nextRand(nextInfo3[0], nextInfo3[1])
91+ let nextInfo5 = nextRand(nextInfo4[0], nextInfo4[1])
92+ let nextInfo6 = nextRand(nextInfo5[0], nextInfo5[1])
93+ let nextInfo7 = nextRand(nextInfo6[0], nextInfo6[1])
94+ let nextInfo8 = nextRand(nextInfo7[0], nextInfo7[1])
95+ let nextInfo9 = nextRand(nextInfo8[0], nextInfo8[1])
96+nextInfo9[0]
97+ }
98+
99+
100+func validateDtxKey (sessionId,data,dataEntriesCount,iteration) = {
101+ let sessionIdFromKey = take(data.key, SESSIONIDFIXSIZE)
102+ if ((iteration >= dataEntriesCount))
103+ then true
104+ else if (if (if ((sessionId == sessionIdFromKey))
105+ then (size(data.key) > SESSIONIDFIXSIZE)
106+ else false)
107+ then !(isDefined(getString(this, data.key)))
108+ else false)
109+ then match data.value {
110+ case str: String =>
111+ true
112+ case _ =>
113+ throw((sessionId + " draw: only String type is accepted for data transactions"))
114+ }
115+ else false
116+ }
117+
118+
119+@Callable(i)
120+func initDraw (sessionId) = {
121+ let base58Valid = (size(fromBase58String(sessionId)) > 0)
122+ if ((size(sessionId) != SESSIONIDFIXSIZE))
123+ then throw("Draw Id must be exactly 50 simbols")
124+ else if (!(base58Valid))
125+ then throw("Draw id must be in Base58 format")
126+ else {
127+ let organizerPubKey58 = toBase58String(i.callerPublicKey)
128+ let initState = formatStateDataStr(STATEINIT, organizerPubKey58, "")
129+ WriteSet([DataEntry(sessionId, initState)])
130+ }
131+ }
132+
133+
134+
135+@Callable(i)
136+func ready (sessionId) = {
137+ let drawParamsList = extractGameDataList(sessionId)
138+ let drawState = drawParamsList[0]
139+ let organizerPubKey58 = drawParamsList[1]
140+ let organizerPubKey = fromBase58String(organizerPubKey58)
141+ if ((drawState != STATEINIT))
142+ then throw((sessionId + " draw: moving into READY state is allowed only from INIT state"))
143+ else if ((organizerPubKey != i.callerPublicKey))
144+ then throw((sessionId + "draw: moving into READY state is allowed for organizer only"))
145+ else {
146+ let readyState = formatStateDataStr(STATEINIT, organizerPubKey58, "")
147+ WriteSet([DataEntry(sessionId, readyState)])
148+ }
149+ }
150+
151+
152+
153+@Callable(i)
154+func random (sessionId,rsaSign) = {
155+ let from = 1
156+ let to = 100
157+ let drawParamsList = extractGameDataList(sessionId)
158+ let drawState = drawParamsList[0]
159+ let organizerPubKey58 = drawParamsList[1]
160+ let organizerPubKey = fromBase58String(organizerPubKey58)
161+ if ((drawState != STATEREADY))
162+ then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
163+ else if (!(rsaVerify(SHA256, toBytes(sessionId), rsaSign, RSAPUBLIC)))
164+ then throw("Invalid RSA signature")
165+ else {
166+ let currVect = generateRandsVector(sessionId, from, to, rsaSign)
167+ let s = size(currVect)
168+ let rand1 = if ((s >= 1))
169+ then toString(toInt(take(drop(currVect, 0), 8)))
170+ else ""
171+ let rand2 = if ((s >= 2))
172+ then ((rand1 + "_") + toString(toInt(take(drop(currVect, (1 * 8)), 8))))
173+ else rand1
174+ let rand3 = if ((s >= 3))
175+ then ((rand2 + "_") + toString(toInt(take(drop(currVect, (2 * 8)), 8))))
176+ else rand2
177+ let rand4 = if ((s >= 4))
178+ then ((rand3 + "_") + toString(toInt(take(drop(currVect, (3 * 8)), 8))))
179+ else rand3
180+ let rand5 = if ((s >= 5))
181+ then ((rand4 + "_") + toString(toInt(take(drop(currVect, (4 * 8)), 8))))
182+ else rand4
183+ let rand6 = if ((s >= 6))
184+ then ((rand5 + "_") + toString(toInt(take(drop(currVect, (5 * 8)), 8))))
185+ else rand5
186+ let rand7 = if ((s >= 7))
187+ then ((rand6 + "_") + toString(toInt(take(drop(currVect, (6 * 8)), 8))))
188+ else rand6
189+ let rand8 = if ((s >= 8))
190+ then ((rand7 + "_") + toString(toInt(take(drop(currVect, (7 * 8)), 8))))
191+ else rand7
192+ let rand9 = if ((s >= 9))
193+ then ((rand8 + "_") + toString(toInt(take(drop(currVect, (8 * 8)), 8))))
194+ else rand8
195+ WriteSet([DataEntry(sessionId, formatStateDataStr(STATEFINISHED, organizerPubKey58, rand9))])
196+ }
197+ }
198+
199+
200+@Verifier(tx)
201+func verify () = match tx {
202+ case dtx: DataTransaction =>
203+ let data0 = dtx.data[0]
204+ let sessionId = take(data0.key, SESSIONIDFIXSIZE)
205+ let drawParamsList = extractGameDataList(sessionId)
206+ let drawState = drawParamsList[0]
207+ let organizerPubKey58 = drawParamsList[1]
208+ let organizerPubKey = fromBase58String(organizerPubKey58)
209+ let dataEntriesCount = size(dtx.data)
210+ if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((drawState == STATEINIT))
211+ then sigVerify(tx.bodyBytes, tx.proofs[0], organizerPubKey)
212+ else false)
213+ then (dataEntriesCount > 0)
214+ else false)
215+ then (15 >= dataEntriesCount)
216+ else false)
217+ then validateDtxKey(sessionId, data0, dataEntriesCount, 0)
218+ else false)
219+ then validateDtxKey(sessionId, dtx.data[1], dataEntriesCount, 1)
220+ else false)
221+ then validateDtxKey(sessionId, dtx.data[2], dataEntriesCount, 2)
222+ else false)
223+ then validateDtxKey(sessionId, dtx.data[3], dataEntriesCount, 3)
224+ else false)
225+ then validateDtxKey(sessionId, dtx.data[4], dataEntriesCount, 4)
226+ else false)
227+ then validateDtxKey(sessionId, dtx.data[5], dataEntriesCount, 5)
228+ else false)
229+ then validateDtxKey(sessionId, dtx.data[6], dataEntriesCount, 6)
230+ else false)
231+ then validateDtxKey(sessionId, dtx.data[7], dataEntriesCount, 7)
232+ else false)
233+ then validateDtxKey(sessionId, dtx.data[8], dataEntriesCount, 8)
234+ else false)
235+ then validateDtxKey(sessionId, dtx.data[9], dataEntriesCount, 9)
236+ else false)
237+ then validateDtxKey(sessionId, dtx.data[10], dataEntriesCount, 10)
238+ else false)
239+ then validateDtxKey(sessionId, dtx.data[11], dataEntriesCount, 11)
240+ else false)
241+ then validateDtxKey(sessionId, dtx.data[12], dataEntriesCount, 12)
242+ else false)
243+ then validateDtxKey(sessionId, dtx.data[13], dataEntriesCount, 13)
244+ else false)
245+ then validateDtxKey(sessionId, dtx.data[14], dataEntriesCount, 14)
246+ else false
247+ case sstx: SetScriptTransaction =>
248+ true
249+ case _ =>
250+ false
251+}
252+

github/deemru/w8io/169f3d6 
20.83 ms