tx · BLkAVQsubnWRZRfXW2ye8WAzFx7G25tMjhJ2mP36hT2T

3NBbFNBed9tcU5AmsJAuExWvgJyNmJxqjWq:  -0.01000000 Waves

2023.06.27 11:38 [2640829] smart account 3NBbFNBed9tcU5AmsJAuExWvgJyNmJxqjWq > SELF 0.00000000 Waves

{ "type": 13, "id": "BLkAVQsubnWRZRfXW2ye8WAzFx7G25tMjhJ2mP36hT2T", "fee": 1000000, "feeAssetId": null, "timestamp": 1687855140617, "version": 2, "chainId": 84, "sender": "3NBbFNBed9tcU5AmsJAuExWvgJyNmJxqjWq", "senderPublicKey": "ERewvWFUFQfR1eCnipNAv9n7SdQhof2ESP6PGVjTueLd", "proofs": [ "3EvM474UWWdc7FLzi9UaH5hpXoTgXPmyGmgcB7e2KM5ozp3wTuPAtMXd3HYHzcf8aLHNfexFr3jVwvV7nZm3ZKJB" ], "script": "base64:BgIvCAISBAoCAQgSAwoBARIDCgEBEgMKAQESAwoBARIECgIIARIAEgQKAggBEgMKAQgFAANhcnIJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAARhcnIyCQDMCAIAAQkAzAgCAAIFA25pbAEDc3VtAgFhAWIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM04zRG5WZmZuVXladHoyTVJiazVVN2dpTjExMldlbXBNTmQCBmJvcnJvdwkAzAgCAiwyNUZFcUVqUmtxSzZ5Q2tpVDdMejZTQVl6N2dVRkN0eGZDQ2huclZGRDVBVAkAzAgCAMCEPQUDbmlsBQNuaWwBD2dldEN1cnJlbnRQcmljZQEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwACCQACAQIFRXJyb3IBCmdldEJhbGFuY2UCCmFzc2V0SWRTdHIHYWRkcmVzcwMJAAACBQphc3NldElkU3RyAgVXQVZFUwgJAO8HAQUHYWRkcmVzcwlhdmFpbGFibGUJAPAHAgUHYWRkcmVzcwkA2QQBBQphc3NldElkU3RyCQFpAQ10cmFuc2ZlcldhdmVzAgthc3NldEFtb3VudA1zZW5kZXJBZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUEdGhpcwULYXNzZXRBbW91bnQFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUNc2VuZGVyQWRkcmVzcwIQX2RlcG9zaXRlZF9XQVZFUwULYXNzZXRBbW91bnQFA25pbAFpARF0cmFuc2ZlcldhdmVzVGVzdAELYXNzZXRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUEdGhpcwULYXNzZXRBbW91bnQFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApQgBCAUBaQZjYWxsZXICEF9kZXBvc2l0ZWRfV0FWRVMFC2Fzc2V0QW1vdW50BQNuaWwBaQEGbG9uZzJ4AQthc3NldEFtb3VudAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWN1cnJlbnRBbW91bnQJAQpnZXRCYWxhbmNlAgIFV0FWRVMIBQFpBmNhbGxlcgMJAGYCBQ1jdXJyZW50QW1vdW50BQthc3NldEFtb3VudAoBCnJlcGVhdEZ1bmMCBWFjY3VtBG5leHQEDnRyYW5zZmVyUmVzdWx0CQD8BwQFBHRoaXMCDXRyYW5zZmVyV2F2ZXMJAMwIAgULYXNzZXRBbW91bnQJAMwIAggFAWkGY2FsbGVyBQNuaWwFA25pbAMJAAACBQ50cmFuc2ZlclJlc3VsdAUOdHJhbnNmZXJSZXN1bHQEDHN1cHBseVJlc3VsdAkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBAiMzTjNEblZmZm5VeVp0ejJNUmJrNVU3Z2lOMTEyV2VtcE1OZAIGc3VwcGx5BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Fzc2V0QW1vdW50BQNuaWwDCQAAAgUMc3VwcGx5UmVzdWx0BQxzdXBwbHlSZXN1bHQEDGJvcnJvd1Jlc3VsdAkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBAiMzTjNEblZmZm5VeVp0ejJNUmJrNVU3Z2lOMTEyV2VtcE1OZAIGYm9ycm93CQDMCAICLDI1RkVxRWpSa3FLNnlDa2lUN0x6NlNBWXo3Z1VGQ3R4ZkNDaG5yVkZENUFUCQDMCAIJAGkCCQBoAgULYXNzZXRBbW91bnQJAQ9nZXRDdXJyZW50UHJpY2UBAgVXQVZFUwBkBQNuaWwFA25pbAMJAAACBQxib3Jyb3dSZXN1bHQFDGJvcnJvd1Jlc3VsdAkAZAIFBWFjY3VtBQRuZXh0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAVhcnJheQkAzAgCBQthc3NldEFtb3VudAkAzAgCBQthc3NldEFtb3VudAUDbmlsBANyZXMKAAIkbAUFYXJyYXkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnJlcGVhdEZ1bmMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwIsMjVGRXFFalJrcUs2eUNraVQ3THo2U0FZejdnVUZDdHhmQ0NobnJWRkQ1QVQJAGgCBQthc3NldEFtb3VudAkBD2dldEN1cnJlbnRQcmljZQECBVdBVkVTCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAaQIJAGgCBQNyZXMJAQ9nZXRDdXJyZW50UHJpY2UBAgVXQVZFUwBkASAP8hwSrOTEPJrsRhqrJaiw7LoHK0bMbYhy8LXikkkBtAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQR0aGlzBQNyZXMFBHVuaXQFA25pbAkAAgECBkVycm9yIQFpAQZib3Jyb3cBC2Fzc2V0QW1vdW50BAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQDcmVzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNOM0RuVmZmblV5WnR6Mk1SYms1VTdnaU4xMTJXZW1wTU5kAgZib3Jyb3cJAMwIAgIsMjVGRXFFalJrcUs2eUNraVQ3THo2U0FZejdnVUZDdHhmQ0NobnJWRkQ1QVQJAMwIAgULYXNzZXRBbW91bnQFA25pbAUDbmlsAwkAAAIFA3JlcwUDcmVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQBIA/yHBKs5MQ8muxGGqslqLDsugcrRsxtiHLwteKSSQG0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwIsMjVGRXFFalJrcUs2eUNraVQ3THo2U0FZejdnVUZDdHhmQ0NobnJWRkQ1QVQFC2Fzc2V0QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHYm9ycm93MgELYXNzZXRBbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCgEKcmVwZWF0RnVuYwIFYWNjdW0EbmV4dAQGcmVzdWx0CQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNOM0RuVmZmblV5WnR6Mk1SYms1VTdnaU4xMTJXZW1wTU5kAgZib3Jyb3cJAMwIAgIsMjVGRXFFalJrcUs2eUNraVQ3THo2U0FZejdnVUZDdHhmQ0NobnJWRkQ1QVQJAMwIAgULYXNzZXRBbW91bnQFA25pbAUDbmlsAwkAAAIFBnJlc3VsdAUGcmVzdWx0CQBkAgUFYWNjdW0FBG5leHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EBWFycmF5CQDMCAIFC2Fzc2V0QW1vdW50CQDMCAIFC2Fzc2V0QW1vdW50BQNuaWwEA3JlcwoAAiRsBQVhcnJheQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKcmVwZWF0RnVuYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfAiwyNUZFcUVqUmtxSzZ5Q2tpVDdMejZTQVl6N2dVRkN0eGZDQ2huclZGRDVBVAULYXNzZXRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQNyZXMBIA/yHBKs5MQ8muxGGqslqLDsugcrRsxtiHLwteKSSQG0BQNuaWwBaQEHYm9ycm93NQIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEA3JlcwoAAiRsBQNhcnIKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA3N1bQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUDCQAAAgUDcmVzBQNyZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBQthc3NldEFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2RlcG9zaXQABAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQDcmVzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNOM0RuVmZmblV5WnR6Mk1SYms1VTdnaU4xMTJXZW1wTU5kAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdADAhD0FA25pbAMJAAACBQNyZXMFA3JlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAgxzdXBwbHlfd2F2ZXMAwIQ9BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBANyZXMJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM04zRG5WZmZuVXladHoyTVJiazVVN2dpTjExMldlbXBNTmQCCHdpdGhkcmF3CQDMCAIFCmFzc2V0SWRTdHIJAMwIAgULYXNzZXRBbW91bnQFA25pbAUDbmlsAwkAAAIFA3JlcwUDcmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3dpdGhkcmV3XwUKYXNzZXRJZFN0cgULYXNzZXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxjaGVja0JhbGFuY2UBCmFzc2V0SWRTdHIEB2FkZHJlc3MIBQFpBmNhbGxlcgMJAAACBQphc3NldElkU3RyAgVXQVZFUwkAzAgCCQEMSW50ZWdlckVudHJ5AgINV2F2ZXMgQmFsYW5jZQgJAO8HAQUHYWRkcmVzcwlhdmFpbGFibGUFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgINQXNzZXQgQmFsYW5jZQkA8AcCBQdhZGRyZXNzCQDZBAEFCmFzc2V0SWRTdHIFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnMVUXO", "height": 2640829, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4yjhaehSSSKwF8CpjdkAqrXRmRPShNM4x8JLWvx3iatG Next: 8Yczqqw7q5deLZPnJocZeBizCQitX3d5MuL1z15hBLXR Diff:
OldNewDifferences
1919
2020
2121 @Callable(j)
22-func transferToken (k,l) = if ((j.caller != this))
22+func transferWaves (k,l) = if ((j.caller != this))
2323 then throw("only for internal smart contract invocations")
2424 else [ScriptTransfer(this, k, unit), IntegerEntry((l + "_deposited_WAVES"), k)]
25+
26+
27+
28+@Callable(j)
29+func transferWavesTest (k) = [ScriptTransfer(this, k, unit), IntegerEntry((toString(j.caller) + "_deposited_WAVES"), k)]
2530
2631
2732
3237 if ((m > k))
3338 then {
3439 func n (o,p) = {
35- let q = invoke(this, "transferToken", [k, j.caller], nil)
40+ let q = invoke(this, "transferWaves", [k, j.caller], nil)
3641 if ((q == q))
3742 then {
3843 let r = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "supply", nil, [AttachedPayment(unit, k)])
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = [1, 2, 3, 4, 5]
55
66 let b = [1, 2]
77
88 func c (d,e) = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "borrow", ["25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT", 1000000], nil)
99
1010
1111 func f (g) = if ((g == "WAVES"))
1212 then 2
1313 else throw("Error")
1414
1515
1616 func h (g,i) = if ((g == "WAVES"))
1717 then wavesBalance(i).available
1818 else assetBalance(i, fromBase58String(g))
1919
2020
2121 @Callable(j)
22-func transferToken (k,l) = if ((j.caller != this))
22+func transferWaves (k,l) = if ((j.caller != this))
2323 then throw("only for internal smart contract invocations")
2424 else [ScriptTransfer(this, k, unit), IntegerEntry((l + "_deposited_WAVES"), k)]
25+
26+
27+
28+@Callable(j)
29+func transferWavesTest (k) = [ScriptTransfer(this, k, unit), IntegerEntry((toString(j.caller) + "_deposited_WAVES"), k)]
2530
2631
2732
2833 @Callable(j)
2934 func long2x (k) = {
3035 let i = toString(j.caller)
3136 let m = h("WAVES", j.caller)
3237 if ((m > k))
3338 then {
3439 func n (o,p) = {
35- let q = invoke(this, "transferToken", [k, j.caller], nil)
40+ let q = invoke(this, "transferWaves", [k, j.caller], nil)
3641 if ((q == q))
3742 then {
3843 let r = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "supply", nil, [AttachedPayment(unit, k)])
3944 if ((r == r))
4045 then {
4146 let s = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "borrow", ["25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT", ((k * f("WAVES")) / 100)], nil)
4247 if ((s == s))
4348 then (o + p)
4449 else throw("Strict value is not equal to itself.")
4550 }
4651 else throw("Strict value is not equal to itself.")
4752 }
4853 else throw("Strict value is not equal to itself.")
4954 }
5055
5156 let t = [k, k]
5257 let u = {
5358 let v = t
5459 let w = size(v)
5560 let x = 0
5661 func y (z,A) = if ((A >= w))
5762 then z
5863 else n(z, v[A])
5964
6065 func B (z,A) = if ((A >= w))
6166 then z
6267 else throw("List size exceeds 2")
6368
6469 B(y(y(x, 0), 1), 2)
6570 }
6671 [IntegerEntry(((i + "_borrowed_") + "25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT"), (k * f("WAVES"))), ScriptTransfer(j.caller, ((u * f("WAVES")) / 100), base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'), ScriptTransfer(this, u, unit)]
6772 }
6873 else throw("Error!")
6974 }
7075
7176
7277
7378 @Callable(j)
7479 func borrow (k) = {
7580 let i = toString(j.caller)
7681 let u = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "borrow", ["25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT", k], nil)
7782 if ((u == u))
7883 then [ScriptTransfer(j.caller, k, base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'), IntegerEntry(((i + "_borrowed_") + "25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT"), k)]
7984 else throw("Strict value is not equal to itself.")
8085 }
8186
8287
8388
8489 @Callable(j)
8590 func borrow2 (k) = {
8691 let i = toString(j.caller)
8792 func n (o,p) = {
8893 let C = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "borrow", ["25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT", k], nil)
8994 if ((C == C))
9095 then (o + p)
9196 else throw("Strict value is not equal to itself.")
9297 }
9398
9499 let t = [k, k]
95100 let u = {
96101 let v = t
97102 let w = size(v)
98103 let x = 0
99104 func y (z,A) = if ((A >= w))
100105 then z
101106 else n(z, v[A])
102107
103108 func B (z,A) = if ((A >= w))
104109 then z
105110 else throw("List size exceeds 2")
106111
107112 B(y(y(x, 0), 1), 2)
108113 }
109114 [IntegerEntry(((i + "_borrowed_") + "25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT"), k), ScriptTransfer(j.caller, u, base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT')]
110115 }
111116
112117
113118
114119 @Callable(j)
115120 func borrow5 (g,k) = {
116121 let i = toString(j.caller)
117122 let u = {
118123 let v = a
119124 let w = size(v)
120125 let x = 0
121126 func y (z,A) = if ((A >= w))
122127 then z
123128 else c(z, v[A])
124129
125130 func B (z,A) = if ((A >= w))
126131 then z
127132 else throw("List size exceeds 5")
128133
129134 B(y(y(y(y(y(x, 0), 1), 2), 3), 4), 5)
130135 }
131136 if ((u == u))
132137 then [IntegerEntry(((i + "_borrowed_") + g), k)]
133138 else throw("Strict value is not equal to itself.")
134139 }
135140
136141
137142
138143 @Callable(j)
139144 func deposit () = {
140145 let i = toString(j.caller)
141146 let u = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "supply", nil, [AttachedPayment(unit, 1000000)])
142147 if ((u == u))
143148 then [IntegerEntry((i + "supply_waves"), 1000000)]
144149 else throw("Strict value is not equal to itself.")
145150 }
146151
147152
148153
149154 @Callable(j)
150155 func withdraw (g,k) = {
151156 let i = toString(j.caller)
152157 let u = invoke(addressFromStringValue("3N3DnVffnUyZtz2MRbk5U7giN112WempMNd"), "withdraw", [g, k], nil)
153158 if ((u == u))
154159 then [IntegerEntry(((i + "_withdrew_") + g), k)]
155160 else throw("Strict value is not equal to itself.")
156161 }
157162
158163
159164
160165 @Callable(j)
161166 func checkBalance (g) = {
162167 let i = j.caller
163168 if ((g == "WAVES"))
164169 then [IntegerEntry("Waves Balance", wavesBalance(i).available)]
165170 else [IntegerEntry("Asset Balance", assetBalance(i, fromBase58String(g)))]
166171 }
167172
168173
169174 @Verifier(D)
170175 func E () = sigVerify(D.bodyBytes, D.proofs[0], D.senderPublicKey)
171176

github/deemru/w8io/169f3d6 
41.54 ms