viem 0.0.1-alpha.27 → 0.0.1-alpha.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chain-4d46a747.d.ts +543 -0
- package/dist/{chain-b0cfb141.d.ts → chain-c7c44165.d.ts} +1 -1
- package/dist/chains.d.ts +5 -3
- package/dist/chains.js +46 -46
- package/dist/chains.mjs +1 -1
- package/dist/{chunk-JY7JGKSA.js → chunk-4VQKZYE2.js} +219 -157
- package/dist/chunk-4VQKZYE2.js.map +1 -0
- package/dist/{chunk-2DSFM32P.js → chunk-CKYH337I.js} +15 -15
- package/dist/{chunk-2DSFM32P.js.map → chunk-CKYH337I.js.map} +1 -1
- package/dist/{chunk-W7KWIGWO.js → chunk-EYORBAD4.js} +45 -44
- package/dist/chunk-EYORBAD4.js.map +1 -0
- package/dist/{chunk-LF6P33WQ.mjs → chunk-HPUQL3IM.mjs} +3 -3
- package/dist/chunk-HPUQL3IM.mjs.map +1 -0
- package/dist/chunk-OJ7H3CQF.js +265 -0
- package/dist/chunk-OJ7H3CQF.js.map +1 -0
- package/dist/chunk-Q67VUTW3.mjs +210 -0
- package/dist/chunk-Q67VUTW3.mjs.map +1 -0
- package/dist/{chunk-AKGXRZDN.mjs → chunk-RR4MGS6O.mjs} +27 -26
- package/dist/chunk-RR4MGS6O.mjs.map +1 -0
- package/dist/chunk-S252SZEL.mjs +265 -0
- package/dist/chunk-S252SZEL.mjs.map +1 -0
- package/dist/chunk-SEIPUKZE.js +210 -0
- package/dist/chunk-SEIPUKZE.js.map +1 -0
- package/dist/{chunk-BJJH7RYH.mjs → chunk-TQC7KZ24.mjs} +164 -102
- package/dist/chunk-TQC7KZ24.mjs.map +1 -0
- package/dist/contract.d.ts +12 -128
- package/dist/contract.js +6 -4
- package/dist/contract.mjs +5 -3
- package/dist/{createClient-6689596e.d.ts → createClient-5d5c14d6.d.ts} +5 -3
- package/dist/createPublicClient-2b4afeac.d.ts +629 -0
- package/dist/{eip1193-617a05ae.d.ts → eip1193-f09a55af.d.ts} +2 -2
- package/dist/ens.d.ts +10 -68
- package/dist/ens.js +5 -199
- package/dist/ens.js.map +1 -1
- package/dist/ens.mjs +7 -201
- package/dist/ens.mjs.map +1 -1
- package/dist/formatAbiItem-d231fef2.d.ts +14 -0
- package/dist/{getAbiItem-d2e8bd76.d.ts → getAbiItem-0e085959.d.ts} +15 -15
- package/dist/index.d.ts +22 -13
- package/dist/index.js +368 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +358 -16
- package/dist/index.mjs.map +1 -1
- package/dist/namehash-88f4639d.d.ts +22 -0
- package/dist/parseGwei-4d0b0d73.d.ts +344 -0
- package/dist/public.d.ts +11 -334
- package/dist/public.js +5 -3
- package/dist/public.mjs +4 -2
- package/dist/test-b9208949.d.ts +213 -0
- package/dist/test.d.ts +8 -149
- package/dist/test.js +20 -222
- package/dist/test.js.map +1 -1
- package/dist/test.mjs +30 -232
- package/dist/test.mjs.map +1 -1
- package/dist/{transactionReceipt-44dbf122.d.ts → transactionReceipt-84fc92e1.d.ts} +1 -1
- package/dist/{transactionRequest-f437b4ba.d.ts → transactionRequest-44c539b4.d.ts} +1 -1
- package/dist/utils/index.d.ts +12 -238
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.mjs +1 -1
- package/dist/wallet-9b1c6905.d.ts +104 -0
- package/dist/wallet.d.ts +7 -41
- package/dist/wallet.js +3 -3
- package/dist/wallet.mjs +2 -2
- package/dist/window.d.ts +4 -2
- package/package.json +1 -1
- package/dist/call-3476b8ee.d.ts +0 -22
- package/dist/chain-42de87e5.d.ts +0 -359
- package/dist/chunk-AKGXRZDN.mjs.map +0 -1
- package/dist/chunk-BJJH7RYH.mjs.map +0 -1
- package/dist/chunk-JY7JGKSA.js.map +0 -1
- package/dist/chunk-LF6P33WQ.mjs.map +0 -1
- package/dist/chunk-W7KWIGWO.js.map +0 -1
- package/dist/contract-9dd2f98b.d.ts +0 -166
- package/dist/createPublicClient-fd558574.d.ts +0 -19
- package/dist/createTestClient-bc1d9028.d.ts +0 -34
- package/dist/createWalletClient-4df88244.d.ts +0 -30
- package/dist/decodeErrorResult-ac835649.d.ts +0 -16
- package/dist/readContract-c460f23a.d.ts +0 -10
- package/dist/rpc-8c10fc98.d.ts +0 -119
- package/dist/sendTransaction-7ce442c0.d.ts +0 -12
- package/dist/watchEvent-569c9976.d.ts +0 -41
@@ -6,12 +6,11 @@ import {
|
|
6
6
|
TransactionNotFoundError,
|
7
7
|
TransactionReceiptNotFoundError,
|
8
8
|
WaitForTransactionReceiptTimeoutError,
|
9
|
+
decodeEventLog,
|
9
10
|
decodeFunctionResult,
|
10
11
|
encodeEventTopics,
|
11
12
|
encodeFunctionData,
|
12
13
|
extract,
|
13
|
-
extractFunctionName,
|
14
|
-
extractFunctionParams,
|
15
14
|
format,
|
16
15
|
formatBlock,
|
17
16
|
formatFeeHistory,
|
@@ -19,6 +18,7 @@ import {
|
|
19
18
|
formatTransaction,
|
20
19
|
formatTransactionReceipt,
|
21
20
|
formatTransactionRequest,
|
21
|
+
getAbiItem,
|
22
22
|
getCache,
|
23
23
|
getContractError,
|
24
24
|
hexToNumber,
|
@@ -26,7 +26,7 @@ import {
|
|
26
26
|
numberToHex,
|
27
27
|
wait,
|
28
28
|
withCache
|
29
|
-
} from "./chunk-
|
29
|
+
} from "./chunk-RR4MGS6O.mjs";
|
30
30
|
|
31
31
|
// src/actions/public/call.ts
|
32
32
|
async function call(client, {
|
@@ -139,6 +139,75 @@ async function createBlockFilter(client) {
|
|
139
139
|
return { id, type: "block" };
|
140
140
|
}
|
141
141
|
|
142
|
+
// src/actions/public/createEventFilter.ts
|
143
|
+
async function createEventFilter(client, {
|
144
|
+
address,
|
145
|
+
args,
|
146
|
+
event,
|
147
|
+
fromBlock,
|
148
|
+
toBlock
|
149
|
+
} = {}) {
|
150
|
+
let topics = [];
|
151
|
+
if (event)
|
152
|
+
topics = encodeEventTopics({
|
153
|
+
abi: [event],
|
154
|
+
eventName: event.name,
|
155
|
+
args
|
156
|
+
});
|
157
|
+
const id = await client.request({
|
158
|
+
method: "eth_newFilter",
|
159
|
+
params: [
|
160
|
+
{
|
161
|
+
address,
|
162
|
+
fromBlock: typeof fromBlock === "bigint" ? numberToHex(fromBlock) : fromBlock,
|
163
|
+
toBlock: typeof toBlock === "bigint" ? numberToHex(toBlock) : toBlock,
|
164
|
+
...topics.length ? { topics } : {}
|
165
|
+
}
|
166
|
+
]
|
167
|
+
});
|
168
|
+
return {
|
169
|
+
abi: event ? [event] : void 0,
|
170
|
+
args,
|
171
|
+
eventName: event ? event.name : void 0,
|
172
|
+
id,
|
173
|
+
type: "event"
|
174
|
+
};
|
175
|
+
}
|
176
|
+
|
177
|
+
// src/actions/public/createContractEventFilter.ts
|
178
|
+
async function createContractEventFilter(client, {
|
179
|
+
address,
|
180
|
+
abi,
|
181
|
+
args,
|
182
|
+
eventName,
|
183
|
+
fromBlock,
|
184
|
+
toBlock
|
185
|
+
}) {
|
186
|
+
const topics = eventName ? encodeEventTopics({
|
187
|
+
abi,
|
188
|
+
args,
|
189
|
+
eventName
|
190
|
+
}) : void 0;
|
191
|
+
const id = await client.request({
|
192
|
+
method: "eth_newFilter",
|
193
|
+
params: [
|
194
|
+
{
|
195
|
+
address,
|
196
|
+
fromBlock: typeof fromBlock === "bigint" ? numberToHex(fromBlock) : fromBlock,
|
197
|
+
toBlock: typeof toBlock === "bigint" ? numberToHex(toBlock) : toBlock,
|
198
|
+
topics
|
199
|
+
}
|
200
|
+
]
|
201
|
+
});
|
202
|
+
return {
|
203
|
+
abi,
|
204
|
+
args,
|
205
|
+
eventName,
|
206
|
+
id,
|
207
|
+
type: "event"
|
208
|
+
};
|
209
|
+
}
|
210
|
+
|
142
211
|
// src/actions/public/estimateGas.ts
|
143
212
|
async function estimateGas(client, {
|
144
213
|
accessList,
|
@@ -332,9 +401,16 @@ async function getFilterChanges(client, { filter }) {
|
|
332
401
|
method: "eth_getFilterChanges",
|
333
402
|
params: [filter.id]
|
334
403
|
});
|
335
|
-
return logs.map(
|
336
|
-
(
|
337
|
-
|
404
|
+
return logs.map((log) => {
|
405
|
+
if (typeof log === "string")
|
406
|
+
return log;
|
407
|
+
const { eventName, args } = "abi" in filter && filter.abi ? decodeEventLog({
|
408
|
+
abi: filter.abi,
|
409
|
+
data: log.data,
|
410
|
+
topics: log.topics
|
411
|
+
}) : { eventName: void 0, args: void 0 };
|
412
|
+
return formatLog(log, { args, eventName });
|
413
|
+
});
|
338
414
|
}
|
339
415
|
|
340
416
|
// src/actions/public/getFilterLogs.ts
|
@@ -343,7 +419,14 @@ async function getFilterLogs(client, { filter }) {
|
|
343
419
|
method: "eth_getFilterLogs",
|
344
420
|
params: [filter.id]
|
345
421
|
});
|
346
|
-
return logs.map(
|
422
|
+
return logs.map((log) => {
|
423
|
+
const { eventName, args } = "abi" in filter && filter.abi ? decodeEventLog({
|
424
|
+
abi: filter.abi,
|
425
|
+
data: log.data,
|
426
|
+
topics: log.topics
|
427
|
+
}) : { eventName: void 0, args: void 0 };
|
428
|
+
return formatLog(log, { args, eventName });
|
429
|
+
});
|
347
430
|
}
|
348
431
|
|
349
432
|
// src/actions/public/getGasPrice.ts
|
@@ -354,50 +437,6 @@ async function getGasPrice(client) {
|
|
354
437
|
return BigInt(gasPrice);
|
355
438
|
}
|
356
439
|
|
357
|
-
// src/actions/public/createEventFilter.ts
|
358
|
-
async function createEventFilter(client, {
|
359
|
-
address,
|
360
|
-
event,
|
361
|
-
args,
|
362
|
-
fromBlock,
|
363
|
-
toBlock
|
364
|
-
} = {}) {
|
365
|
-
let topics = [];
|
366
|
-
if (event)
|
367
|
-
topics = buildFilterTopics({ event, args });
|
368
|
-
const id = await client.request({
|
369
|
-
method: "eth_newFilter",
|
370
|
-
params: [
|
371
|
-
{
|
372
|
-
address,
|
373
|
-
fromBlock: typeof fromBlock === "bigint" ? numberToHex(fromBlock) : fromBlock,
|
374
|
-
toBlock: typeof toBlock === "bigint" ? numberToHex(toBlock) : toBlock,
|
375
|
-
...topics.length ? { topics } : {}
|
376
|
-
}
|
377
|
-
]
|
378
|
-
});
|
379
|
-
return { id, type: "event" };
|
380
|
-
}
|
381
|
-
function buildFilterTopics({
|
382
|
-
event,
|
383
|
-
args
|
384
|
-
}) {
|
385
|
-
const eventName = extractFunctionName(event);
|
386
|
-
const abi = unstable_parseAbi(event);
|
387
|
-
return encodeEventTopics({ abi, eventName, args });
|
388
|
-
}
|
389
|
-
function unstable_parseAbi(definition) {
|
390
|
-
const name = extractFunctionName(definition);
|
391
|
-
const params = extractFunctionParams(definition);
|
392
|
-
return [
|
393
|
-
{
|
394
|
-
type: "event",
|
395
|
-
name,
|
396
|
-
inputs: params || []
|
397
|
-
}
|
398
|
-
];
|
399
|
-
}
|
400
|
-
|
401
440
|
// src/actions/public/getLogs.ts
|
402
441
|
async function getLogs(client, {
|
403
442
|
address,
|
@@ -408,9 +447,12 @@ async function getLogs(client, {
|
|
408
447
|
args
|
409
448
|
} = {}) {
|
410
449
|
let topics = [];
|
411
|
-
if (event)
|
412
|
-
topics =
|
413
|
-
|
450
|
+
if (event)
|
451
|
+
topics = encodeEventTopics({
|
452
|
+
abi: [event],
|
453
|
+
eventName: event.name,
|
454
|
+
args
|
455
|
+
});
|
414
456
|
let logs;
|
415
457
|
if (blockHash) {
|
416
458
|
logs = await client.request({
|
@@ -430,7 +472,14 @@ async function getLogs(client, {
|
|
430
472
|
]
|
431
473
|
});
|
432
474
|
}
|
433
|
-
return logs.map(
|
475
|
+
return logs.map((log) => {
|
476
|
+
const { eventName, args: args2 } = event ? decodeEventLog({
|
477
|
+
abi: [event],
|
478
|
+
data: log.data,
|
479
|
+
topics: log.topics
|
480
|
+
}) : { eventName: void 0, args: void 0 };
|
481
|
+
return formatLog(log, { args: args2, eventName });
|
482
|
+
});
|
434
483
|
}
|
435
484
|
|
436
485
|
// src/actions/public/getStorageAt.ts
|
@@ -677,34 +726,6 @@ function observe(observerId, callbacks, fn) {
|
|
677
726
|
return unwatch;
|
678
727
|
}
|
679
728
|
|
680
|
-
// src/actions/public/createContractEventFilter.ts
|
681
|
-
async function createContractEventFilter(client, {
|
682
|
-
address,
|
683
|
-
abi,
|
684
|
-
args,
|
685
|
-
eventName,
|
686
|
-
fromBlock,
|
687
|
-
toBlock
|
688
|
-
}) {
|
689
|
-
const topics = eventName ? encodeEventTopics({
|
690
|
-
abi,
|
691
|
-
args,
|
692
|
-
eventName
|
693
|
-
}) : void 0;
|
694
|
-
const id = await client.request({
|
695
|
-
method: "eth_newFilter",
|
696
|
-
params: [
|
697
|
-
{
|
698
|
-
address,
|
699
|
-
fromBlock: typeof fromBlock === "bigint" ? numberToHex(fromBlock) : fromBlock,
|
700
|
-
toBlock: typeof toBlock === "bigint" ? numberToHex(toBlock) : toBlock,
|
701
|
-
topics
|
702
|
-
}
|
703
|
-
]
|
704
|
-
});
|
705
|
-
return { id, type: "event" };
|
706
|
-
}
|
707
|
-
|
708
729
|
// src/utils/poll.ts
|
709
730
|
function poll(fn, { emitOnBegin, initialWaitTime, interval }) {
|
710
731
|
let active = true;
|
@@ -853,25 +874,46 @@ function watchContractEvent(client, {
|
|
853
874
|
pollingInterval
|
854
875
|
]);
|
855
876
|
return observe(observerId, { onLogs, onError }, (emit) => {
|
877
|
+
let currentBlockNumber;
|
856
878
|
let filter;
|
879
|
+
let initialized = false;
|
857
880
|
const unwatch = poll(
|
858
881
|
async () => {
|
882
|
+
if (!initialized) {
|
883
|
+
try {
|
884
|
+
filter = await createContractEventFilter(client, {
|
885
|
+
abi,
|
886
|
+
address,
|
887
|
+
args,
|
888
|
+
eventName
|
889
|
+
});
|
890
|
+
} catch {
|
891
|
+
}
|
892
|
+
initialized = true;
|
893
|
+
return;
|
894
|
+
}
|
859
895
|
try {
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
896
|
+
let logs;
|
897
|
+
if (filter) {
|
898
|
+
logs = await getFilterChanges(client, { filter });
|
899
|
+
} else {
|
900
|
+
const blockNumber = await getBlockNumber(client);
|
901
|
+
if (currentBlockNumber && currentBlockNumber !== blockNumber) {
|
902
|
+
logs = await getLogs(client, {
|
864
903
|
address,
|
865
904
|
args,
|
866
|
-
|
905
|
+
fromBlock: blockNumber,
|
906
|
+
toBlock: blockNumber,
|
907
|
+
event: getAbiItem({
|
908
|
+
abi,
|
909
|
+
name: eventName
|
910
|
+
})
|
867
911
|
});
|
868
|
-
|
869
|
-
|
870
|
-
unwatch();
|
871
|
-
throw err;
|
912
|
+
} else {
|
913
|
+
logs = [];
|
872
914
|
}
|
915
|
+
currentBlockNumber = blockNumber;
|
873
916
|
}
|
874
|
-
const logs = await getFilterChanges(client, { filter });
|
875
917
|
if (logs.length === 0)
|
876
918
|
return;
|
877
919
|
if (batch)
|
@@ -915,24 +957,42 @@ function watchEvent(client, {
|
|
915
957
|
pollingInterval
|
916
958
|
]);
|
917
959
|
return observe(observerId, { onLogs, onError }, (emit) => {
|
960
|
+
let currentBlockNumber;
|
918
961
|
let filter;
|
962
|
+
let initialized = false;
|
919
963
|
const unwatch = poll(
|
920
964
|
async () => {
|
965
|
+
if (!initialized) {
|
966
|
+
try {
|
967
|
+
filter = await createEventFilter(client, {
|
968
|
+
address,
|
969
|
+
args,
|
970
|
+
event
|
971
|
+
});
|
972
|
+
} catch {
|
973
|
+
}
|
974
|
+
initialized = true;
|
975
|
+
return;
|
976
|
+
}
|
921
977
|
try {
|
922
|
-
|
923
|
-
|
924
|
-
|
978
|
+
let logs;
|
979
|
+
if (filter) {
|
980
|
+
logs = await getFilterChanges(client, { filter });
|
981
|
+
} else {
|
982
|
+
const blockNumber = await getBlockNumber(client);
|
983
|
+
if (currentBlockNumber && currentBlockNumber !== blockNumber) {
|
984
|
+
logs = await getLogs(client, {
|
925
985
|
address,
|
926
986
|
args,
|
987
|
+
fromBlock: blockNumber,
|
988
|
+
toBlock: blockNumber,
|
927
989
|
event
|
928
990
|
});
|
929
|
-
|
930
|
-
|
931
|
-
unwatch();
|
932
|
-
throw err;
|
991
|
+
} else {
|
992
|
+
logs = [];
|
933
993
|
}
|
994
|
+
currentBlockNumber = blockNumber;
|
934
995
|
}
|
935
|
-
const logs = await getFilterChanges(client, { filter });
|
936
996
|
if (logs.length === 0)
|
937
997
|
return;
|
938
998
|
if (batch)
|
@@ -1104,6 +1164,8 @@ export {
|
|
1104
1164
|
simulateContract,
|
1105
1165
|
createPendingTransactionFilter,
|
1106
1166
|
createBlockFilter,
|
1167
|
+
createEventFilter,
|
1168
|
+
createContractEventFilter,
|
1107
1169
|
estimateGas,
|
1108
1170
|
estimateContractGas,
|
1109
1171
|
getBalance,
|
@@ -1133,4 +1195,4 @@ export {
|
|
1133
1195
|
watchEvent,
|
1134
1196
|
watchPendingTransactions
|
1135
1197
|
};
|
1136
|
-
//# sourceMappingURL=chunk-
|
1198
|
+
//# sourceMappingURL=chunk-TQC7KZ24.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/actions/public/call.ts","../src/actions/public/simulateContract.ts","../src/actions/public/createPendingTransactionFilter.ts","../src/actions/public/createBlockFilter.ts","../src/actions/public/createEventFilter.ts","../src/actions/public/createContractEventFilter.ts","../src/actions/public/estimateGas.ts","../src/actions/public/estimateContractGas.ts","../src/actions/public/getBalance.ts","../src/actions/public/getBlock.ts","../src/actions/public/getBlockNumber.ts","../src/actions/public/getBlockTransactionCount.ts","../src/actions/public/getBytecode.ts","../src/actions/public/getChainId.ts","../src/actions/public/getFeeHistory.ts","../src/actions/public/getFilterChanges.ts","../src/actions/public/getFilterLogs.ts","../src/actions/public/getGasPrice.ts","../src/actions/public/getLogs.ts","../src/actions/public/getStorageAt.ts","../src/actions/public/getTransaction.ts","../src/actions/public/getTransactionConfirmations.ts","../src/actions/public/getTransactionCount.ts","../src/actions/public/getTransactionReceipt.ts","../src/actions/public/readContract.ts","../src/actions/public/multicall.ts","../src/actions/public/uninstallFilter.ts","../src/utils/observe.ts","../src/utils/poll.ts","../src/actions/public/watchBlockNumber.ts","../src/actions/public/watchBlocks.ts","../src/actions/public/watchContractEvent.ts","../src/actions/public/watchEvent.ts","../src/actions/public/watchPendingTransactions.ts","../src/actions/public/waitForTransactionReceipt.ts"],"sourcesContent":["import type { PublicClient } from '../../clients'\nimport { InvalidGasArgumentsError } from '../../errors'\nimport type {\n Address,\n BlockTag,\n Chain,\n Formatter,\n Hex,\n MergeIntersectionProperties,\n TransactionRequest,\n} from '../../types'\nimport { extract, Formatted, TransactionRequestFormatter } from '../../utils'\nimport { format, formatTransactionRequest, numberToHex } from '../../utils'\n\nexport type FormattedCall<\n TFormatter extends Formatter | undefined = Formatter,\n> = MergeIntersectionProperties<\n Formatted<TFormatter, TransactionRequest, true>,\n TransactionRequest\n>\n\nexport type CallArgs<TChain extends Chain = Chain> = FormattedCall<\n TransactionRequestFormatter<TChain>\n> & {\n from?: Address\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint\n blockTag?: never\n }\n | {\n blockNumber?: never\n /** The balance of the account at a block tag. */\n blockTag?: BlockTag\n }\n )\n\nexport type CallResponse = { data: Hex | undefined }\n\nexport async function call<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n {\n blockNumber,\n blockTag = 'latest',\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n ...rest\n }: CallArgs<TChain>,\n): Promise<CallResponse> {\n if (\n maxFeePerGas !== undefined &&\n maxPriorityFeePerGas !== undefined &&\n maxFeePerGas < maxPriorityFeePerGas\n )\n throw new InvalidGasArgumentsError()\n\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n\n const formatter = client.chain?.formatters?.transactionRequest\n const request_ = format(\n {\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { formatter }),\n } as TransactionRequest,\n {\n formatter: formatter || formatTransactionRequest,\n },\n )\n\n const response = await client.request({\n method: 'eth_call',\n params: [request_, blockNumberHex || blockTag],\n })\n if (response === '0x') return { data: undefined }\n return { data: response }\n}\n","import { Abi, Narrow } from 'abitype'\n\nimport type { PublicClient } from '../../clients'\nimport { BaseError } from '../../errors'\nimport type {\n Chain,\n ContractConfig,\n ExtractResultFromAbi,\n GetValue,\n} from '../../types'\nimport {\n DecodeFunctionResultArgs,\n EncodeFunctionDataArgs,\n decodeFunctionResult,\n encodeFunctionData,\n getContractError,\n} from '../../utils'\nimport { WriteContractArgs } from '../wallet'\nimport { call, CallArgs } from './call'\n\nexport type SimulateContractArgs<\n TChain extends Chain = Chain,\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = any,\n> = Omit<CallArgs<TChain>, 'to' | 'data' | 'value'> &\n ContractConfig<TAbi, TFunctionName, 'payable' | 'nonpayable'> & {\n value?: GetValue<TAbi, TFunctionName, CallArgs<TChain>['value']>\n }\n\nexport type SimulateContractResponse<\n TChain extends Chain = Chain,\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = {\n result: ExtractResultFromAbi<TAbi, TFunctionName>\n request: WriteContractArgs<TChain, TAbi, TFunctionName> &\n ContractConfig<TAbi, TFunctionName, 'payable' | 'nonpayable'>\n}\n\nexport async function simulateContract<\n TChain extends Chain,\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>(\n client: PublicClient<any, TChain>,\n {\n abi,\n address,\n args,\n functionName,\n ...callRequest\n }: SimulateContractArgs<TChain, TAbi, TFunctionName>,\n): Promise<SimulateContractResponse<TChain, TAbi, TFunctionName>> {\n const calldata = encodeFunctionData({\n abi,\n args,\n functionName,\n } as unknown as EncodeFunctionDataArgs<TAbi, TFunctionName>)\n try {\n const { data } = await call(client, {\n data: calldata,\n to: address,\n ...callRequest,\n } as unknown as CallArgs<TChain>)\n const result = decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n } as DecodeFunctionResultArgs)\n return {\n result,\n request: {\n abi,\n address,\n args,\n functionName,\n ...callRequest,\n },\n } as unknown as SimulateContractResponse<TChain, TAbi, TFunctionName>\n } catch (err) {\n throw getContractError(err as BaseError, {\n abi: abi as Abi,\n address,\n args,\n docsPath: '/docs/contract/simulateContract',\n functionName,\n sender: callRequest.from,\n })\n }\n}\n","import type { PublicClient } from '../../clients'\n\nimport type { Filter } from '../../types'\n\nexport type CreatePendingTransactionFilterResponse = Filter<'transaction'>\n\nexport async function createPendingTransactionFilter(\n client: PublicClient,\n): Promise<CreatePendingTransactionFilterResponse> {\n const id = await client.request({\n method: 'eth_newPendingTransactionFilter',\n })\n return { id, type: 'transaction' }\n}\n","import type { PublicClient } from '../../clients'\n\nimport type { Filter } from '../../types'\n\nexport type CreateBlockFilterResponse = Filter<'block'>\n\nexport async function createBlockFilter(\n client: PublicClient,\n): Promise<CreateBlockFilterResponse> {\n const id = await client.request({\n method: 'eth_newBlockFilter',\n })\n return { id, type: 'block' }\n}\n","import { Abi, AbiEvent } from 'abitype'\nimport type { PublicClient } from '../../clients'\n\nimport type {\n Address,\n BlockNumber,\n BlockTag,\n Filter,\n LogTopic,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types'\nimport {\n EncodeEventTopicsArgs,\n encodeEventTopics,\n numberToHex,\n} from '../../utils'\n\nexport type CreateEventFilterArgs<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n TArgs extends\n | MaybeExtractEventArgsFromAbi<TAbi, TEventName>\n | undefined = undefined,\n> = {\n address?: Address | Address[]\n fromBlock?: BlockNumber | BlockTag\n toBlock?: BlockNumber | BlockTag\n} & (MaybeExtractEventArgsFromAbi<\n TAbi,\n TEventName\n> extends infer TEventFilterArgs\n ?\n | {\n args:\n | TEventFilterArgs\n | (TArgs extends TEventFilterArgs ? TArgs : never)\n event: TAbiEvent\n }\n | {\n args?: never\n event?: TAbiEvent\n }\n | {\n args?: never\n event?: never\n }\n : {\n args?: never\n event?: never\n })\n\nexport type CreateEventFilterResponse<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n TArgs extends\n | MaybeExtractEventArgsFromAbi<TAbi, TEventName>\n | undefined = undefined,\n> = Filter<'event', TAbi, TEventName, TArgs>\n\nexport async function createEventFilter<\n TAbiEvent extends AbiEvent | undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n TArgs extends\n | MaybeExtractEventArgsFromAbi<TAbi, TEventName>\n | undefined = undefined,\n>(\n client: PublicClient,\n {\n address,\n args,\n event,\n fromBlock,\n toBlock,\n }: CreateEventFilterArgs<TAbiEvent, TAbi, TEventName, TArgs> = {} as any,\n): Promise<CreateEventFilterResponse<TAbiEvent, TAbi, TEventName, TArgs>> {\n let topics: LogTopic[] = []\n if (event)\n topics = encodeEventTopics({\n abi: [event],\n eventName: event.name,\n args,\n } as EncodeEventTopicsArgs)\n\n const id = await client.request({\n method: 'eth_newFilter',\n params: [\n {\n address,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n ...(topics.length ? { topics } : {}),\n },\n ],\n })\n return {\n abi: event ? [event] : undefined,\n args,\n eventName: event ? event.name : undefined,\n id,\n type: 'event',\n } as unknown as CreateEventFilterResponse<TAbiEvent, TAbi, TEventName, TArgs>\n}\n","import { Abi, Narrow } from 'abitype'\nimport type { PublicClient } from '../../clients'\n\nimport type {\n Address,\n BlockNumber,\n BlockTag,\n ExtractEventNameFromAbi,\n Filter,\n MaybeExtractEventArgsFromAbi,\n} from '../../types'\nimport {\n encodeEventTopics,\n EncodeEventTopicsArgs,\n numberToHex,\n} from '../../utils'\n\nexport type CreateContractEventFilterArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TEventName extends string | undefined = undefined,\n TArgs extends\n | MaybeExtractEventArgsFromAbi<TAbi, TEventName>\n | undefined = undefined,\n> = {\n address?: Address | Address[]\n abi: Narrow<TAbi>\n eventName?: ExtractEventNameFromAbi<TAbi, TEventName>\n fromBlock?: BlockNumber | BlockTag\n toBlock?: BlockNumber | BlockTag\n} & (undefined extends TEventName\n ? {\n args?: never\n }\n : MaybeExtractEventArgsFromAbi<\n TAbi,\n TEventName\n > extends infer TEventFilterArgs\n ? {\n args?: TEventFilterArgs | (TArgs extends TEventFilterArgs ? TArgs : never)\n }\n : {\n args?: never\n })\n\nexport type CreateContractEventFilterResponse<\n TAbi extends Abi | readonly unknown[] = Abi,\n TEventName extends string | undefined = undefined,\n TArgs extends\n | MaybeExtractEventArgsFromAbi<TAbi, TEventName>\n | undefined = undefined,\n> = Filter<'event', TAbi, TEventName, TArgs>\n\nexport async function createContractEventFilter<\n TAbi extends Abi | readonly unknown[],\n TEventName extends string | undefined,\n TArgs extends MaybeExtractEventArgsFromAbi<TAbi, TEventName> | undefined,\n>(\n client: PublicClient,\n {\n address,\n abi,\n args,\n eventName,\n fromBlock,\n toBlock,\n }: CreateContractEventFilterArgs<TAbi, TEventName, TArgs>,\n): Promise<CreateContractEventFilterResponse<TAbi, TEventName, TArgs>> {\n const topics = eventName\n ? encodeEventTopics({\n abi,\n args,\n eventName,\n } as unknown as EncodeEventTopicsArgs)\n : undefined\n const id = await client.request({\n method: 'eth_newFilter',\n params: [\n {\n address,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n topics,\n },\n ],\n })\n return {\n abi,\n args,\n eventName,\n id,\n type: 'event',\n } as unknown as CreateContractEventFilterResponse<TAbi, TEventName, TArgs>\n}\n","import type { PublicClient } from '../../clients'\nimport type {\n BlockTag,\n Chain,\n Formatter,\n MergeIntersectionProperties,\n TransactionRequest,\n} from '../../types'\nimport {\n extract,\n format,\n Formatted,\n formatTransactionRequest,\n numberToHex,\n TransactionRequestFormatter,\n} from '../../utils'\n\nexport type FormattedEstimateGas<\n TFormatter extends Formatter | undefined = Formatter,\n> = MergeIntersectionProperties<\n Formatted<TFormatter, TransactionRequest, true>,\n TransactionRequest\n>\n\nexport type EstimateGasArgs<TChain extends Chain = Chain> =\n FormattedEstimateGas<TransactionRequestFormatter<TChain>> &\n (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint\n blockTag?: never\n }\n | {\n blockNumber?: never\n /** The balance of the account at a block tag. */\n blockTag?: BlockTag\n }\n )\n\nexport type EstimateGasResponse = bigint\n\n/**\n * @description Estimates the gas necessary to complete a transaction without submitting it to the network.\n */\nexport async function estimateGas<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n {\n accessList,\n blockNumber,\n blockTag = 'latest',\n data,\n from,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n ...rest\n }: EstimateGasArgs<TChain>,\n): Promise<EstimateGasResponse> {\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n\n const formatter = client.chain?.formatters?.transactionRequest\n const request_ = format(\n {\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { formatter }),\n } as TransactionRequest,\n {\n formatter: formatter || formatTransactionRequest,\n },\n )\n\n const balance = await client.request({\n method: 'eth_estimateGas',\n params: [request_, blockNumberHex || blockTag],\n })\n return BigInt(balance)\n}\n","import { Abi } from 'abitype'\n\nimport type { PublicClient } from '../../clients'\nimport { BaseError } from '../../errors'\nimport type { Chain, ContractConfig, GetValue } from '../../types'\nimport {\n EncodeFunctionDataArgs,\n encodeFunctionData,\n getContractError,\n} from '../../utils'\nimport { CallArgs } from './call'\nimport { estimateGas } from './estimateGas'\n\nexport type EstimateContractGasArgs<\n TChain extends Chain = Chain,\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = any,\n> = Omit<CallArgs<TChain>, 'to' | 'data' | 'value'> &\n ContractConfig<TAbi, TFunctionName, 'payable' | 'nonpayable'> & {\n value?: GetValue<TAbi, TFunctionName, CallArgs<TChain>['value']>\n }\nexport type EstimateContractGasResponse = bigint\n\nexport async function estimateContractGas<\n TChain extends Chain,\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>(\n client: PublicClient<any, TChain>,\n {\n abi,\n address,\n args,\n functionName,\n ...request\n }: EstimateContractGasArgs<TChain, TAbi, TFunctionName>,\n): Promise<EstimateContractGasResponse> {\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n } as unknown as EncodeFunctionDataArgs<TAbi, TFunctionName>)\n try {\n const gas = await estimateGas(client, {\n data,\n to: address,\n ...request,\n } as unknown as CallArgs<TChain>)\n return gas\n } catch (err) {\n throw getContractError(err as BaseError, {\n abi: abi as Abi,\n address,\n args,\n docsPath: '/docs/contract/simulateContract',\n functionName,\n sender: request.from,\n })\n }\n}\n","import type { PublicClient } from '../../clients'\nimport type { Address, BlockTag } from '../../types'\nimport { numberToHex } from '../../utils'\n\nexport type GetBalanceArgs = {\n /** The address of the account. */\n address: Address\n} & (\n | {\n /** The balance of the account at a block number. */\n blockNumber?: bigint\n blockTag?: never\n }\n | {\n blockNumber?: never\n /** The balance of the account at a block tag. */\n blockTag?: BlockTag\n }\n)\n\nexport type GetBalanceResponse = bigint\n\n/**\n * @description Returns the balance of an address in wei.\n */\nexport async function getBalance(\n client: PublicClient,\n { address, blockNumber, blockTag = 'latest' }: GetBalanceArgs,\n): Promise<GetBalanceResponse> {\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n\n const balance = await client.request({\n method: 'eth_getBalance',\n params: [address, blockNumberHex || blockTag],\n })\n return BigInt(balance)\n}\n","import type { PublicClient } from '../../clients'\nimport { BlockNotFoundError } from '../../errors'\nimport type { BlockTag, Chain, Hash, RpcBlock } from '../../types'\nimport type { BlockFormatter, FormattedBlock } from '../../utils'\nimport { format, formatBlock, numberToHex } from '../../utils'\n\nexport type GetBlockArgs = {\n /** Whether or not to include transaction data in the response. */\n includeTransactions?: boolean\n} & (\n | {\n /** Hash of the block. */\n blockHash?: Hash\n blockNumber?: never\n blockTag?: never\n }\n | {\n blockHash?: never\n /** The block number. */\n blockNumber?: bigint\n blockTag?: never\n }\n | {\n blockHash?: never\n blockNumber?: never\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag\n }\n)\n\nexport type GetBlockResponse<TChain extends Chain = Chain> = FormattedBlock<\n BlockFormatter<TChain>\n>\n\nexport async function getBlock<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n {\n blockHash,\n blockNumber,\n blockTag = 'latest',\n includeTransactions = false,\n }: GetBlockArgs = {},\n): Promise<GetBlockResponse<TChain>> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let block: RpcBlock | null = null\n if (blockHash) {\n block = await client.request({\n method: 'eth_getBlockByHash',\n params: [blockHash, includeTransactions],\n })\n } else {\n block = await client.request({\n method: 'eth_getBlockByNumber',\n params: [blockNumberHex || blockTag, includeTransactions],\n })\n }\n\n if (!block) throw new BlockNotFoundError({ blockHash, blockNumber })\n\n return format(block, {\n formatter: client.chain?.formatters?.block || formatBlock,\n })\n}\n","import type { PublicClient } from '../../clients'\nimport { getCache, withCache } from '../../utils/promise'\n\nexport type GetBlockNumberArgs = {\n /** The maximum age (in ms) of the cached value. */\n maxAge?: number\n}\n\nexport type GetBlockNumberResponse = bigint\n\nconst cacheKey = (id: string) => `blockNumber.${id}`\n\nexport function getBlockNumberCache(id: string) {\n return getCache(cacheKey(id))\n}\n\n/**\n * @description Returns the number of the most recent block seen.\n */\nexport async function getBlockNumber(\n client: PublicClient<any, any, any>,\n { maxAge = client.pollingInterval }: GetBlockNumberArgs = {},\n): Promise<GetBlockNumberResponse> {\n const blockNumberHex = await withCache(\n () =>\n client.request({\n method: 'eth_blockNumber',\n }),\n { cacheKey: cacheKey(client.uid), maxAge },\n )\n return BigInt(blockNumberHex)\n}\n","import type { PublicClient } from '../../clients'\nimport type { BlockTag, Chain, Hash, Quantity } from '../../types'\nimport { hexToNumber, numberToHex } from '../../utils'\n\nexport type GetBlockTransactionCountArgs =\n | {\n /** Hash of the block. */\n blockHash?: Hash\n blockNumber?: never\n blockTag?: never\n }\n | {\n blockHash?: never\n /** The block number. */\n blockNumber?: bigint\n blockTag?: never\n }\n | {\n blockHash?: never\n blockNumber?: never\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag\n }\n\nexport type GetBlockTransactionCountResponse = number\n\nexport async function getBlockTransactionCount<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n {\n blockHash,\n blockNumber,\n blockTag = 'latest',\n }: GetBlockTransactionCountArgs = {},\n): Promise<GetBlockTransactionCountResponse> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let count: Quantity | null = null\n if (blockHash) {\n count = await client.request({\n method: 'eth_getBlockTransactionCountByHash',\n params: [blockHash],\n })\n } else {\n count = await client.request({\n method: 'eth_getBlockTransactionCountByNumber',\n params: [blockNumberHex || blockTag],\n })\n }\n\n return hexToNumber(count)\n}\n","import { PublicClient } from '../../clients'\nimport { Address, BlockTag, Hex } from '../../types'\nimport { numberToHex } from '../../utils'\n\nexport type GetBytecodeArgs = {\n address: Address\n} & (\n | {\n blockNumber?: never\n blockTag?: BlockTag\n }\n | {\n blockNumber?: bigint\n blockTag?: never\n }\n)\n\nexport type GetBytecodeResponse = Hex | undefined\n\nexport async function getBytecode(\n client: PublicClient,\n { address, blockNumber, blockTag = 'latest' }: GetBytecodeArgs,\n): Promise<GetBytecodeResponse> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n const hex = await client.request({\n method: 'eth_getCode',\n params: [address, blockNumberHex || blockTag],\n })\n if (hex === '0x') return undefined\n return hex\n}\n","import type { PublicClient } from '../../clients'\nimport { hexToNumber } from '../../utils'\n\nexport type GetChainIdResponse = number\n\nexport async function getChainId(\n client: PublicClient,\n): Promise<GetChainIdResponse> {\n const chainIdHex = await client.request({ method: 'eth_chainId' })\n return hexToNumber(chainIdHex)\n}\n","import type { PublicClient } from '../../clients'\nimport type { BlockTag, FeeHistory } from '../../types'\n\nimport { numberToHex } from '../../utils'\nimport { formatFeeHistory } from '../../utils/formatters'\n\nexport type GetFeeHistoryArgs = {\n blockCount: number\n rewardPercentiles: number[]\n} & (\n | {\n blockNumber?: never\n blockTag?: BlockTag\n }\n | {\n blockNumber?: bigint\n blockTag?: never\n }\n)\nexport type GetFeeHistoryResponse = FeeHistory\n\n/**\n * @description Returns a collection of historical gas information.\n */\nexport async function getFeeHistory(\n client: PublicClient,\n {\n blockCount,\n blockNumber,\n blockTag = 'latest',\n rewardPercentiles,\n }: GetFeeHistoryArgs,\n): Promise<GetFeeHistoryResponse> {\n const blockNumberHex = blockNumber ? numberToHex(blockNumber) : undefined\n const feeHistory = await client.request({\n method: 'eth_feeHistory',\n params: [\n numberToHex(blockCount),\n blockNumberHex || blockTag,\n rewardPercentiles,\n ],\n })\n return formatFeeHistory(feeHistory)\n}\n","import { Abi, AbiEvent } from 'abitype'\nimport type { PublicClient } from '../../clients'\nimport type {\n Filter,\n FilterType,\n Hash,\n Log,\n MaybeAbiEventName,\n} from '../../types'\nimport { decodeEventLog } from '../../utils'\n\nimport { formatLog } from '../../utils/formatters/log'\n\nexport type GetFilterChangesArgs<\n TFilterType extends FilterType = FilterType,\n TAbiEvent extends AbiEvent | undefined = undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = {\n filter: Filter<TFilterType, TAbi, TEventName, any>\n}\n\nexport type GetFilterChangesResponse<\n TFilterType extends FilterType = FilterType,\n TAbiEvent extends AbiEvent | undefined = undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = TFilterType extends 'event'\n ? Log<bigint, number, TAbiEvent, TAbi, TEventName>[]\n : Hash[]\n\nexport async function getFilterChanges<\n TFilterType extends FilterType,\n TAbiEvent extends AbiEvent | undefined,\n TAbi extends Abi | readonly unknown[],\n TEventName extends string | undefined,\n>(\n client: PublicClient,\n { filter }: GetFilterChangesArgs<TFilterType, TAbiEvent, TAbi, TEventName>,\n) {\n const logs = await client.request({\n method: 'eth_getFilterChanges',\n params: [filter.id],\n })\n return logs.map((log) => {\n if (typeof log === 'string') return log\n const { eventName, args } =\n 'abi' in filter && filter.abi\n ? decodeEventLog({\n abi: filter.abi,\n data: log.data,\n topics: log.topics as any,\n })\n : { eventName: undefined, args: undefined }\n return formatLog(log, { args, eventName })\n }) as GetFilterChangesResponse<TFilterType, TAbiEvent, TAbi, TEventName>\n}\n","import type { Abi, AbiEvent } from 'abitype'\nimport type { PublicClient } from '../../clients'\nimport type { Filter, Log, MaybeAbiEventName } from '../../types'\nimport { decodeEventLog } from '../../utils'\n\nimport { formatLog } from '../../utils/formatters/log'\n\nexport type GetFilterLogsArgs<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = {\n filter: Filter<'event', TAbi, TEventName, any>\n}\nexport type GetFilterLogsResponse<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TAbi extends Abi | readonly unknown[] = [TAbiEvent],\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = Log<bigint, number, TAbiEvent, TAbi, TEventName>[]\n\nexport async function getFilterLogs<\n TAbiEvent extends AbiEvent | undefined,\n TAbi extends Abi | readonly unknown[],\n TEventName extends string | undefined,\n>(\n client: PublicClient,\n { filter }: GetFilterLogsArgs<TAbiEvent, TAbi, TEventName>,\n): Promise<GetFilterLogsResponse<TAbiEvent, TAbi, TEventName>> {\n const logs = await client.request({\n method: 'eth_getFilterLogs',\n params: [filter.id],\n })\n return logs.map((log) => {\n const { eventName, args } =\n 'abi' in filter && filter.abi\n ? decodeEventLog({\n abi: filter.abi,\n data: log.data,\n topics: log.topics as any,\n })\n : { eventName: undefined, args: undefined }\n return formatLog(log, { args, eventName })\n }) as unknown as GetFilterLogsResponse<TAbiEvent, TAbi, TEventName>\n}\n","import type { PublicClient } from '../../clients'\n\nexport type GetGasPriceResponse = bigint\n\n/**\n * @description Returns the current price of gas (in wei).\n */\nexport async function getGasPrice(\n client: PublicClient,\n): Promise<GetGasPriceResponse> {\n const gasPrice = await client.request({\n method: 'eth_gasPrice',\n })\n return BigInt(gasPrice)\n}\n","import { AbiEvent } from 'abitype'\nimport type { PublicClient } from '../../clients'\nimport type {\n Log,\n RpcLog,\n Address,\n BlockNumber,\n BlockTag,\n Hash,\n LogTopic,\n MaybeExtractEventArgsFromAbi,\n MaybeAbiEventName,\n} from '../../types'\nimport {\n decodeEventLog,\n encodeEventTopics,\n EncodeEventTopicsArgs,\n numberToHex,\n} from '../../utils'\nimport { formatLog } from '../../utils/formatters/log'\n\nexport type GetLogsArgs<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = {\n /** Address or list of addresses from which logs originated */\n address?: Address | Address[]\n} & (\n | {\n event: TAbiEvent\n args?: MaybeExtractEventArgsFromAbi<[TAbiEvent], TEventName>\n }\n | {\n event?: never\n args?: never\n }\n) &\n (\n | {\n /** Block number or tag after which to include logs */\n fromBlock?: BlockNumber<bigint> | BlockTag\n /** Block number or tag before which to include logs */\n toBlock?: BlockNumber<bigint> | BlockTag\n blockHash?: never\n }\n | {\n fromBlock?: never\n toBlock?: never\n /** Hash of block to include logs from */\n blockHash?: Hash\n }\n )\n\nexport type GetLogsResponse<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = Log<bigint, number, TAbiEvent, [TAbiEvent], TEventName>[]\n\n/**\n * @description Returns a collection of event logs.\n */\nexport async function getLogs<TAbiEvent extends AbiEvent | undefined>(\n client: PublicClient,\n {\n address,\n blockHash,\n fromBlock,\n toBlock,\n event,\n args,\n }: GetLogsArgs<TAbiEvent> = {},\n): Promise<GetLogsResponse<TAbiEvent>> {\n let topics: LogTopic[] = []\n if (event)\n topics = encodeEventTopics({\n abi: [event],\n eventName: event.name,\n args,\n } as EncodeEventTopicsArgs)\n\n let logs: RpcLog[]\n if (blockHash) {\n logs = await client.request({\n method: 'eth_getLogs',\n params: [{ address, topics, blockHash }],\n })\n } else {\n logs = await client.request({\n method: 'eth_getLogs',\n params: [\n {\n address,\n topics,\n fromBlock:\n typeof fromBlock === 'bigint' ? numberToHex(fromBlock) : fromBlock,\n toBlock: typeof toBlock === 'bigint' ? numberToHex(toBlock) : toBlock,\n },\n ],\n })\n }\n return logs.map((log) => {\n const { eventName, args } = event\n ? decodeEventLog({\n abi: [event],\n data: log.data,\n topics: log.topics as any,\n })\n : { eventName: undefined, args: undefined }\n return formatLog(log, { args, eventName })\n }) as unknown as GetLogsResponse<TAbiEvent>\n}\n","import { PublicClient } from '../../clients'\nimport { Address, BlockTag, Hex } from '../../types'\nimport { numberToHex } from '../../utils'\n\nexport type GetStorageAtArgs = {\n address: Address\n slot: Hex\n} & (\n | {\n blockNumber?: never\n blockTag?: BlockTag\n }\n | {\n blockNumber?: bigint\n blockTag?: never\n }\n)\n\nexport type GetStorageAtResponse = Hex | undefined\n\nexport async function getStorageAt(\n client: PublicClient,\n { address, blockNumber, blockTag = 'latest', slot }: GetStorageAtArgs,\n): Promise<GetStorageAtResponse> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n const data = await client.request({\n method: 'eth_getStorageAt',\n params: [address, slot, blockNumberHex || blockTag],\n })\n return data\n}\n","import type { PublicClient } from '../../clients'\nimport { TransactionNotFoundError } from '../../errors'\nimport type { BlockTag, Chain, Hash, RpcTransaction } from '../../types'\nimport { format, numberToHex } from '../../utils'\nimport type {\n FormattedTransaction,\n TransactionFormatter,\n} from '../../utils/formatters/transaction'\nimport { formatTransaction } from '../../utils/formatters/transaction'\n\nexport type GetTransactionArgs =\n | {\n /** The block hash */\n blockHash: Hash\n blockNumber?: never\n blockTag?: never\n hash?: never\n /** The index of the transaction on the block. */\n index: number\n }\n | {\n blockHash?: never\n /** The block number */\n blockNumber: bigint\n blockTag?: never\n hash?: never\n /** The index of the transaction on the block. */\n index: number\n }\n | {\n blockHash?: never\n blockNumber?: never\n /** The block tag. */\n blockTag: BlockTag\n hash?: never\n /** The index of the transaction on the block. */\n index: number\n }\n | {\n blockHash?: never\n blockNumber?: never\n blockTag?: never\n /** The hash of the transaction. */\n hash: Hash\n index?: number\n }\n\nexport type GetTransactionResponse<TChain extends Chain = Chain> =\n FormattedTransaction<TransactionFormatter<TChain>>\n\n/** @description Returns information about a transaction given a hash or block identifier. */\nexport async function getTransaction<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n {\n blockHash,\n blockNumber,\n blockTag = 'latest',\n hash,\n index,\n }: GetTransactionArgs,\n): Promise<GetTransactionResponse<TChain>> {\n const blockNumberHex =\n blockNumber !== undefined ? numberToHex(blockNumber) : undefined\n\n let transaction: RpcTransaction | null = null\n if (hash) {\n transaction = await client.request({\n method: 'eth_getTransactionByHash',\n params: [hash],\n })\n } else if (blockHash) {\n transaction = await client.request({\n method: 'eth_getTransactionByBlockHashAndIndex',\n params: [blockHash, numberToHex(index)],\n })\n } else if (blockNumberHex || blockTag) {\n transaction = await client.request({\n method: 'eth_getTransactionByBlockNumberAndIndex',\n params: [blockNumberHex || blockTag, numberToHex(index)],\n })\n }\n\n if (!transaction)\n throw new TransactionNotFoundError({\n blockHash,\n blockNumber,\n blockTag,\n hash,\n index,\n })\n\n return format(transaction, {\n formatter: client.chain?.formatters?.transaction || formatTransaction,\n })\n}\n","import type { PublicClient } from '../../clients'\nimport type { Chain, Hash } from '../../types'\nimport type {\n FormattedTransactionReceipt,\n TransactionReceiptFormatter,\n} from '../../utils'\nimport { getBlockNumber } from './getBlockNumber'\nimport { getTransaction } from './getTransaction'\n\nexport type GetTransactionConfirmationsArgs<TChain extends Chain = Chain> =\n | {\n /** The transaction hash. */\n hash: Hash\n transactionReceipt?: never\n }\n | {\n hash?: never\n /** The transaction receipt. */\n transactionReceipt: FormattedTransactionReceipt<\n TransactionReceiptFormatter<TChain>\n >\n }\n\nexport type GetTransactionConfirmationsResponse = bigint\n\nexport async function getTransactionConfirmations<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n { hash, transactionReceipt }: GetTransactionConfirmationsArgs<TChain>,\n): Promise<GetTransactionConfirmationsResponse> {\n const [blockNumber, transaction] = await Promise.all([\n getBlockNumber(client),\n hash ? getTransaction(client, { hash }) : undefined,\n ])\n const transactionBlockNumber =\n transactionReceipt?.blockNumber || transaction?.blockNumber\n if (!transactionBlockNumber) return 0n\n return blockNumber - transactionBlockNumber! + 1n\n}\n","import type { PublicClient } from '../../clients'\nimport type { Address, BlockTag } from '../../types'\nimport { hexToNumber, numberToHex } from '../../utils'\n\nexport type GetTransactionCountArgs = {\n /** The account address. */\n address: Address\n} & (\n | {\n /** The block number. */\n blockNumber?: bigint\n blockTag?: never\n }\n | {\n blockNumber?: never\n /** The block tag. Defaults to 'latest'. */\n blockTag?: BlockTag\n }\n)\nexport type GetTransactionCountResponse = number\n\n/**\n * @description Returns the number of transactions an account has broadcast / sent.\n */\nexport async function getTransactionCount(\n client: PublicClient,\n { address, blockTag = 'latest', blockNumber }: GetTransactionCountArgs,\n): Promise<GetTransactionCountResponse> {\n const count = await client.request({\n method: 'eth_getTransactionCount',\n params: [address, blockNumber ? numberToHex(blockNumber) : blockTag],\n })\n return hexToNumber(count)\n}\n","import type { PublicClient } from '../../clients'\nimport { TransactionReceiptNotFoundError } from '../../errors'\nimport type { Chain, Hash } from '../../types'\nimport { format } from '../../utils'\nimport type {\n FormattedTransactionReceipt,\n TransactionReceiptFormatter,\n} from '../../utils/formatters/transactionReceipt'\nimport { formatTransactionReceipt } from '../../utils/formatters/transactionReceipt'\n\nexport type GetTransactionReceiptArgs = {\n /** The hash of the transaction. */\n hash: Hash\n}\n\nexport type GetTransactionReceiptResponse<TChain extends Chain = Chain> =\n FormattedTransactionReceipt<TransactionReceiptFormatter<TChain>>\n\nexport async function getTransactionReceipt<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n { hash }: GetTransactionReceiptArgs,\n) {\n const receipt = await client.request({\n method: 'eth_getTransactionReceipt',\n params: [hash],\n })\n\n if (!receipt) throw new TransactionReceiptNotFoundError({ hash })\n\n return format(receipt, {\n formatter:\n client.chain?.formatters?.transactionReceipt || formatTransactionReceipt,\n }) as GetTransactionReceiptResponse<TChain>\n}\n","import { Abi } from 'abitype'\n\nimport type { PublicClient } from '../../clients'\nimport { BaseError } from '../../errors'\nimport type { ContractConfig, ExtractResultFromAbi } from '../../types'\nimport {\n EncodeFunctionDataArgs,\n decodeFunctionResult,\n encodeFunctionData,\n getContractError,\n DecodeFunctionResultArgs,\n} from '../../utils'\nimport { call, CallArgs } from './call'\n\nexport type ReadContractArgs<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = Pick<CallArgs, 'blockNumber' | 'blockTag'> &\n ContractConfig<TAbi, TFunctionName, 'view' | 'pure'>\n\nexport type ReadContractResponse<\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = ExtractResultFromAbi<TAbi, TFunctionName>\n\nexport async function readContract<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>(\n client: PublicClient,\n {\n abi,\n address,\n args,\n functionName,\n ...callRequest\n }: ReadContractArgs<TAbi, TFunctionName>,\n): Promise<ReadContractResponse<TAbi, TFunctionName>> {\n const calldata = encodeFunctionData({\n abi,\n args,\n functionName,\n } as unknown as EncodeFunctionDataArgs<TAbi, TFunctionName>)\n try {\n const { data } = await call(client, {\n data: calldata,\n to: address,\n ...callRequest,\n } as unknown as CallArgs)\n return decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n } as DecodeFunctionResultArgs<TAbi, TFunctionName>)\n } catch (err) {\n throw getContractError(err as BaseError, {\n abi: abi as Abi,\n address,\n args,\n docsPath: '/docs/contract/readContract',\n functionName,\n })\n }\n}\n","import { PublicClient } from '../../clients'\nimport { multicall3Abi } from '../../constants'\nimport {\n AbiDecodingZeroDataError,\n BaseError,\n RawContractError,\n} from '../../errors'\nimport { Address, ContractConfig, Hex, MulticallContracts } from '../../types'\nimport { MulticallResults } from '../../types/multicall'\nimport {\n EncodeFunctionDataArgs,\n decodeFunctionResult,\n encodeFunctionData,\n getContractError,\n} from '../../utils'\nimport { CallArgs } from './call'\nimport { readContract } from './readContract'\n\nexport type MulticallArgs<\n TContracts extends ContractConfig[] = ContractConfig[],\n TAllowFailure extends boolean = true,\n> = Pick<CallArgs, 'blockNumber' | 'blockTag'> & {\n allowFailure?: TAllowFailure\n contracts: readonly [...MulticallContracts<TContracts>]\n multicallAddress: Address\n}\n\nexport type MulticallResponse<\n TContracts extends ContractConfig[] = ContractConfig[],\n TAllowFailure extends boolean = true,\n> = MulticallResults<TContracts, TAllowFailure>\n\nexport async function multicall<\n TContracts extends ContractConfig[],\n TAllowFailure extends boolean = true,\n>(\n client: PublicClient,\n args: MulticallArgs<TContracts, TAllowFailure>,\n): Promise<MulticallResponse<TContracts, TAllowFailure>> {\n const {\n allowFailure = true,\n blockNumber,\n blockTag,\n contracts,\n multicallAddress,\n } = args\n\n const calls = contracts.map(({ abi, address, args, functionName }) => {\n try {\n const callData = encodeFunctionData({\n abi,\n args,\n functionName,\n } as unknown as EncodeFunctionDataArgs)\n return {\n allowFailure: true,\n callData,\n target: address,\n }\n } catch (err) {\n const error = getContractError(err as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n })\n if (!allowFailure) throw error\n return {\n allowFailure: true,\n callData: '0x' as Hex,\n target: address,\n }\n }\n })\n const results = await readContract(client, {\n abi: multicall3Abi,\n address: multicallAddress,\n args: [calls],\n blockNumber,\n blockTag,\n functionName: 'aggregate3',\n })\n return results.map(({ returnData, success }, i) => {\n const { callData } = calls[i]\n const { abi, address, functionName, args } = contracts[i]\n try {\n if (callData === '0x') throw new AbiDecodingZeroDataError()\n if (!success) throw new RawContractError({ data: returnData })\n const result = decodeFunctionResult({\n abi,\n data: returnData,\n functionName: functionName,\n })\n return { result, status: 'success' }\n } catch (err) {\n const error = getContractError(err as BaseError, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n })\n if (!allowFailure) throw error\n return { error, result: undefined, status: 'failure' }\n }\n }) as MulticallResults<TContracts, TAllowFailure>\n}\n","import type { PublicClient } from '../../clients'\nimport type { Filter } from '../../types'\n\nexport type UninstallFilterArgs = {\n filter: Filter<any>\n}\nexport type UninstallFilterResponse = boolean\n\nexport async function uninstallFilter(\n client: PublicClient,\n { filter }: UninstallFilterArgs,\n): Promise<UninstallFilterResponse> {\n return client.request({\n method: 'eth_uninstallFilter',\n params: [filter.id],\n })\n}\n","import type { MaybePromise } from '../types/utils'\n\ntype Callback = ((...args: any[]) => any) | undefined\ntype Callbacks = Record<string, Callback>\n\nexport const listenersCache = new Map<\n string,\n { id: number; fns: Callbacks }[]\n>()\nexport const cleanupCache = new Map<string, () => void>()\n\ntype EmitFunction<TCallbacks extends Callbacks> = (\n emit: TCallbacks,\n) => MaybePromise<void | (() => void)>\n\nlet callbackCount = 0\n\n/**\n * @description Sets up an observer for a given function. If another function\n * is set up under the same observer id, the function will only be called once\n * for both instances of the observer.\n */\nexport function observe<TCallbacks extends Callbacks>(\n observerId: string,\n callbacks: TCallbacks,\n fn: EmitFunction<TCallbacks>,\n) {\n const callbackId = ++callbackCount\n\n const getListeners = () => listenersCache.get(observerId) || []\n\n const unsubscribe = () => {\n const listeners = getListeners()\n listenersCache.set(\n observerId,\n listeners.filter((cb: any) => cb.id !== callbackId),\n )\n }\n\n const unwatch = () => {\n const cleanup = cleanupCache.get(observerId)\n if (getListeners().length === 1 && cleanup) cleanup()\n unsubscribe()\n }\n\n const listeners = getListeners()\n listenersCache.set(observerId, [\n ...listeners,\n { id: callbackId, fns: callbacks },\n ])\n\n if (listeners && listeners.length > 0) return unwatch\n\n let emit: TCallbacks = {} as TCallbacks\n for (const key in callbacks) {\n emit[key] = ((\n ...args: Parameters<NonNullable<TCallbacks[keyof TCallbacks]>>\n ) => {\n const listeners = getListeners()\n if (listeners.length === 0) return\n listeners.forEach((listener) => listener.fns[key]?.(...args))\n }) as TCallbacks[Extract<keyof TCallbacks, string>]\n }\n\n const cleanup = fn(emit)\n if (typeof cleanup === 'function') cleanupCache.set(observerId, cleanup)\n\n return unwatch\n}\n","import { wait } from './wait'\n\ntype PollOptions<TData> = {\n // Whether or not to emit when the polling starts.\n emitOnBegin?: boolean\n // The initial wait time (in ms) before polling.\n initialWaitTime?: (data: TData | void) => Promise<number>\n // The interval (in ms).\n interval: number\n}\n\n/**\n * @description Polls a function at a specified interval.\n */\nexport function poll<TData>(\n fn: ({ unpoll }: { unpoll: () => void }) => Promise<TData | void>,\n { emitOnBegin, initialWaitTime, interval }: PollOptions<TData>,\n) {\n let active = true\n\n const unwatch = () => (active = false)\n\n const watch = async () => {\n let data: TData | void\n if (emitOnBegin) data = await fn({ unpoll: unwatch })\n\n const initialWait = (await initialWaitTime?.(data)) ?? interval\n await wait(initialWait)\n\n const poll = async () => {\n if (!active) return\n await fn({ unpoll: unwatch })\n await wait(interval)\n poll()\n }\n\n poll()\n }\n watch()\n\n return unwatch\n}\n","import type { PublicClient } from '../../clients'\nimport { observe } from '../../utils/observe'\nimport { poll } from '../../utils/poll'\nimport type { GetBlockNumberResponse } from './getBlockNumber'\nimport { getBlockNumber } from './getBlockNumber'\n\nexport type OnBlockNumberResponse = GetBlockNumberResponse\nexport type OnBlockNumber = (\n blockNumber: OnBlockNumberResponse,\n prevBlockNumber: OnBlockNumberResponse | undefined,\n) => void\n\nexport type WatchBlockNumberArgs = {\n /** Whether or not to emit the missed block numbers to the callback. */\n emitMissed?: boolean\n /** Whether or not to emit the latest block number to the callback when the subscription opens. */\n emitOnBegin?: boolean\n /** The callback to call when a new block number is received. */\n onBlockNumber: OnBlockNumber\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: (error: Error) => void\n /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n pollingInterval?: number\n}\n\n/** @description Watches and returns incoming block numbers. */\nexport function watchBlockNumber(\n client: PublicClient<any, any, any>,\n {\n emitOnBegin = false,\n emitMissed = false,\n onBlockNumber,\n onError,\n pollingInterval = client.pollingInterval,\n }: WatchBlockNumberArgs,\n) {\n const observerId = JSON.stringify([\n 'watchBlockNumber',\n client.uid,\n emitOnBegin,\n emitMissed,\n pollingInterval,\n ])\n\n let prevBlockNumber: GetBlockNumberResponse | undefined\n\n return observe(observerId, { onBlockNumber, onError }, (emit) =>\n poll(\n async () => {\n try {\n const blockNumber = await getBlockNumber(client, { maxAge: 0 })\n\n if (prevBlockNumber) {\n // If the current block number is the same as the previous,\n // we can skip.\n if (blockNumber === prevBlockNumber) return\n\n // If we have missed out on some previous blocks, and the\n // `emitMissed` flag is truthy, let's emit those blocks.\n if (blockNumber - prevBlockNumber > 1 && emitMissed) {\n for (let i = prevBlockNumber + 1n; i < blockNumber; i++) {\n emit.onBlockNumber(i, prevBlockNumber)\n prevBlockNumber = i\n }\n }\n }\n prevBlockNumber = blockNumber\n emit.onBlockNumber(blockNumber, prevBlockNumber)\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin,\n interval: pollingInterval,\n },\n ),\n )\n}\n","import type { PublicClient } from '../../clients'\nimport type { BlockTag, Chain } from '../../types'\nimport { observe } from '../../utils/observe'\nimport { poll } from '../../utils/poll'\nimport type { GetBlockResponse } from './getBlock'\nimport { getBlock } from './getBlock'\n\nexport type OnBlockResponse<\n TChain extends Chain = Chain,\n TIncludeTransactions = false,\n> = Omit<\n GetBlockResponse<TChain>,\n TIncludeTransactions extends false ? 'transactions' : ''\n>\nexport type OnBlock<\n TChain extends Chain = Chain,\n TIncludeTransactions = false,\n> = (\n block: OnBlockResponse<TChain, TIncludeTransactions>,\n prevBlock: OnBlockResponse<TChain, TIncludeTransactions> | undefined,\n) => void\n\nexport type WatchBlocksArgs<TChain extends Chain = Chain> = {\n /** The block tag. Defaults to \"latest\". */\n blockTag?: BlockTag\n /** Whether or not to emit the missed blocks to the callback. */\n emitMissed?: boolean\n /** Whether or not to emit the block to the callback when the subscription opens. */\n emitOnBegin?: boolean\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: (error: Error) => void\n /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */\n pollingInterval?: number\n} & (\n | {\n /** Whether or not to include transaction data in the response. */\n includeTransactions: true\n /** The callback to call when a new block is received. */\n onBlock: OnBlock<TChain, true>\n }\n | {\n /** Whether or not to include transaction data in the response. */\n includeTransactions?: false\n /** The callback to call when a new block is received. */\n onBlock: OnBlock<TChain>\n }\n)\n\n/** @description Watches and returns information for incoming blocks. */\nexport function watchBlocks<\n TChain extends Chain,\n TWatchBlocksArgs extends WatchBlocksArgs<TChain>,\n>(\n client: PublicClient<any, TChain>,\n {\n blockTag = 'latest',\n emitMissed = false,\n emitOnBegin = false,\n onBlock,\n onError,\n includeTransactions = false,\n pollingInterval = client.pollingInterval,\n }: TWatchBlocksArgs,\n) {\n const observerId = JSON.stringify([\n 'watchBlocks',\n client.uid,\n emitMissed,\n emitOnBegin,\n includeTransactions,\n pollingInterval,\n ])\n\n let prevBlock: GetBlockResponse<TChain> | undefined\n\n return observe(observerId, { onBlock, onError }, (emit) =>\n poll(\n async () => {\n try {\n const block = await getBlock(client, {\n blockTag,\n includeTransactions,\n })\n if (block.number && prevBlock?.number) {\n // If the current block number is the same as the previous,\n // we can skip.\n if (block.number === prevBlock.number) return\n\n // If we have missed out on some previous blocks, and the\n // `emitMissed` flag is truthy, let's emit those blocks.\n if (block.number - prevBlock.number > 1 && emitMissed) {\n for (let i = prevBlock?.number + 1n; i < block.number; i++) {\n const block = await getBlock(client, {\n blockNumber: i,\n includeTransactions,\n })\n emit.onBlock(block, prevBlock)\n prevBlock = block\n }\n }\n }\n emit.onBlock(block, prevBlock)\n prevBlock = block\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin,\n interval: pollingInterval,\n },\n ),\n )\n}\n","import { Abi, AbiEvent, ExtractAbiEvent, Narrow } from 'abitype'\nimport type { PublicClient } from '../../clients'\nimport type {\n Address,\n ExtractEventArgsFromAbi,\n ExtractEventNameFromAbi,\n Filter,\n Log,\n} from '../../types'\nimport type { GetAbiItemArgs } from '../../utils'\nimport { getAbiItem } from '../../utils'\nimport { observe } from '../../utils/observe'\nimport { poll } from '../../utils/poll'\nimport {\n createContractEventFilter,\n CreateContractEventFilterArgs,\n} from './createContractEventFilter'\nimport { getBlockNumber } from './getBlockNumber'\nimport { getFilterChanges } from './getFilterChanges'\nimport { getLogs, GetLogsArgs } from './getLogs'\nimport { uninstallFilter } from './uninstallFilter'\n\nexport type OnLogsResponse<\n TAbi extends Abi | readonly unknown[] = readonly unknown[],\n TEventName extends string = string,\n> = TAbi extends Abi\n ? Log<bigint, number, ExtractAbiEvent<TAbi, TEventName>>[]\n : Log[]\nexport type OnLogs<\n TAbi extends Abi | readonly unknown[] = readonly unknown[],\n TEventName extends string = string,\n> = (logs: OnLogsResponse<TAbi, TEventName>) => void\n\nexport type WatchContractEventArgs<\n TAbi extends Abi | readonly unknown[] = readonly unknown[],\n TEventName extends string = string,\n> = {\n /** The address of the contract. */\n address?: Address | Address[]\n /** Contract ABI. */\n abi: Narrow<TAbi>\n args?: ExtractEventArgsFromAbi<TAbi, TEventName>\n /** Whether or not the event logs should be batched on each invocation. */\n batch?: boolean\n /** Contract event. */\n eventName?: ExtractEventNameFromAbi<TAbi, TEventName>\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: (error: Error) => void\n /** The callback to call when new event logs are received. */\n onLogs: OnLogs<TAbi, TEventName>\n /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n pollingInterval?: number\n}\n\nexport function watchContractEvent<\n TAbi extends Abi | readonly unknown[],\n TEventName extends string,\n>(\n client: PublicClient,\n {\n abi,\n address,\n args,\n batch = true,\n eventName,\n onError,\n onLogs,\n pollingInterval = client.pollingInterval,\n }: WatchContractEventArgs<TAbi, TEventName>,\n) {\n const observerId = JSON.stringify([\n 'watchContractEvent',\n address,\n args,\n batch,\n client.uid,\n eventName,\n pollingInterval,\n ])\n\n return observe(observerId, { onLogs, onError }, (emit) => {\n let currentBlockNumber: bigint\n let filter: Filter<'event', TAbi, TEventName> | undefined\n let initialized = false\n\n const unwatch = poll(\n async () => {\n if (!initialized) {\n try {\n filter = (await createContractEventFilter(client, {\n abi,\n address,\n args,\n eventName,\n } as unknown as CreateContractEventFilterArgs)) as Filter<\n 'event',\n TAbi,\n TEventName\n >\n } catch {}\n initialized = true\n return\n }\n\n try {\n let logs: Log[]\n if (filter) {\n logs = await getFilterChanges(client, { filter })\n } else {\n // If the filter doesn't exist, we will fall back to use `getLogs`.\n // The fall back exists because some RPC Providers do not support filters.\n\n // Fetch the block number to use for `getLogs`.\n const blockNumber = await getBlockNumber(client)\n\n // If the block number has changed, we will need to fetch the logs.\n // If the block number doesn't exist, we are yet to reach the first poll interval,\n // so do not emit any logs.\n if (currentBlockNumber && currentBlockNumber !== blockNumber) {\n logs = await getLogs(client, {\n address,\n args,\n fromBlock: blockNumber,\n toBlock: blockNumber,\n event: getAbiItem({\n abi,\n name: eventName,\n } as unknown as GetAbiItemArgs),\n } as unknown as GetLogsArgs)\n } else {\n logs = []\n }\n currentBlockNumber = blockNumber\n }\n\n if (logs.length === 0) return\n if (batch) emit.onLogs(logs as any)\n else logs.forEach((log) => emit.onLogs([log] as any))\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter) await uninstallFilter(client, { filter })\n unwatch()\n }\n })\n}\n","import { AbiEvent } from 'abitype'\nimport type { PublicClient } from '../../clients'\nimport type {\n Address,\n Filter,\n Log,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n} from '../../types'\nimport { observe } from '../../utils/observe'\nimport { poll } from '../../utils/poll'\nimport { createEventFilter, CreateEventFilterArgs } from './createEventFilter'\nimport { getBlockNumber } from './getBlockNumber'\nimport { getFilterChanges } from './getFilterChanges'\nimport { getLogs } from './getLogs'\nimport { uninstallFilter } from './uninstallFilter'\n\nexport type OnLogsResponse<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = Log<bigint, number, TAbiEvent, [TAbiEvent], TEventName>[]\nexport type OnLogs<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = (logs: OnLogsResponse<TAbiEvent, TEventName>) => void\n\nexport type WatchEventArgs<\n TAbiEvent extends AbiEvent | undefined = undefined,\n TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,\n> = {\n /** The address of the contract. */\n address?: Address | Address[]\n /** Whether or not the event logs should be batched on each invocation. */\n batch?: boolean\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: (error: Error) => void\n /** The callback to call when new event logs are received. */\n onLogs: OnLogs<TAbiEvent, TEventName>\n /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n pollingInterval?: number\n} & (\n | {\n event: TAbiEvent\n args?: MaybeExtractEventArgsFromAbi<[TAbiEvent], TEventName>\n }\n | {\n event?: never\n args?: never\n }\n)\n\nexport function watchEvent<\n TAbiEvent extends AbiEvent | undefined,\n TEventName extends string | undefined,\n>(\n client: PublicClient,\n {\n address,\n args,\n batch = true,\n event,\n onError,\n onLogs,\n pollingInterval = client.pollingInterval,\n }: WatchEventArgs<TAbiEvent>,\n) {\n const observerId = JSON.stringify([\n 'watchEvent',\n address,\n args,\n batch,\n client.uid,\n event,\n pollingInterval,\n ])\n\n return observe(observerId, { onLogs, onError }, (emit) => {\n let currentBlockNumber: bigint\n let filter: Filter<'event', [TAbiEvent], TEventName, any>\n let initialized = false\n\n const unwatch = poll(\n async () => {\n if (!initialized) {\n try {\n filter = (await createEventFilter(client, {\n address,\n args,\n event: event!,\n } as unknown as CreateEventFilterArgs)) as unknown as Filter<\n 'event',\n [TAbiEvent],\n TEventName\n >\n } catch {}\n initialized = true\n return\n }\n\n try {\n let logs: Log[]\n if (filter) {\n logs = await getFilterChanges(client, { filter })\n } else {\n // If the filter doesn't exist, we will fall back to use `getLogs`.\n // The fall back exists because some RPC Providers do not support filters.\n\n // Fetch the block number to use for `getLogs`.\n const blockNumber = await getBlockNumber(client)\n\n // If the block number has changed, we will need to fetch the logs.\n // If the block number doesn't exist, we are yet to reach the first poll interval,\n // so do not emit any logs.\n if (currentBlockNumber && currentBlockNumber !== blockNumber) {\n logs = await getLogs(client, {\n address,\n args,\n fromBlock: blockNumber,\n toBlock: blockNumber,\n event: event!,\n })\n } else {\n logs = []\n }\n currentBlockNumber = blockNumber\n }\n\n if (logs.length === 0) return\n if (batch) emit.onLogs(logs as any)\n else logs.forEach((log) => emit.onLogs([log] as any))\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter) await uninstallFilter(client, { filter })\n unwatch()\n }\n })\n}\n","import type { PublicClient } from '../../clients'\nimport type { Filter, Hash } from '../../types'\nimport { observe } from '../../utils/observe'\nimport { poll } from '../../utils/poll'\nimport { createPendingTransactionFilter } from './createPendingTransactionFilter'\nimport { getFilterChanges } from './getFilterChanges'\nimport { uninstallFilter } from './uninstallFilter'\n\nexport type OnTransactionsResponse = Hash[]\nexport type OnTransactions = (transactions: OnTransactionsResponse) => void\n\nexport type WatchPendingTransactionsArgs = {\n /** Whether or not the transaction hashes should be batched on each invocation. */\n batch?: boolean\n /** The callback to call when an error occurred when trying to get for a new block. */\n onError?: (error: Error) => void\n /** The callback to call when new transactions are received. */\n onTransactions: OnTransactions\n /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */\n pollingInterval?: number\n}\n\nexport function watchPendingTransactions(\n client: PublicClient,\n {\n batch = true,\n onError,\n onTransactions,\n pollingInterval = client.pollingInterval,\n }: WatchPendingTransactionsArgs,\n) {\n const observerId = JSON.stringify([\n 'watchPendingTransactions',\n client.uid,\n batch,\n pollingInterval,\n ])\n\n return observe(observerId, { onTransactions, onError }, (emit) => {\n let filter: Filter<'transaction'>\n\n const unwatch = poll(\n async () => {\n try {\n if (!filter) {\n try {\n filter = await createPendingTransactionFilter(client)\n return\n } catch (err) {\n unwatch()\n throw err\n }\n }\n\n const hashes = await getFilterChanges(client, { filter })\n if (hashes.length === 0) return\n if (batch) emit.onTransactions(hashes)\n else hashes.forEach((hash) => emit.onTransactions([hash]))\n } catch (err) {\n emit.onError?.(err as Error)\n }\n },\n {\n emitOnBegin: true,\n interval: pollingInterval,\n },\n )\n\n return async () => {\n if (filter) await uninstallFilter(client, { filter })\n unwatch()\n }\n })\n}\n","import type { PublicClient } from '../../clients'\nimport {\n TransactionNotFoundError,\n TransactionReceiptNotFoundError,\n WaitForTransactionReceiptTimeoutError,\n} from '../../errors'\nimport type { Chain, Hash, Transaction } from '../../types'\nimport { observe } from '../../utils/observe'\nimport { getBlock, watchBlockNumber } from '../public'\n\nimport type { GetTransactionResponse } from './getTransaction'\nimport { getTransaction } from './getTransaction'\nimport type { GetTransactionReceiptResponse } from './getTransactionReceipt'\nimport { getTransactionReceipt } from './getTransactionReceipt'\n\nexport type ReplacementReason = 'cancelled' | 'replaced' | 'repriced'\nexport type ReplacementResponse<TChain extends Chain = Chain> = {\n reason: ReplacementReason\n replacedTransaction: Transaction\n transaction: Transaction\n transactionReceipt: GetTransactionReceiptResponse<TChain>\n}\n\nexport type WaitForTransactionReceiptResponse<TChain extends Chain = Chain> =\n GetTransactionReceiptResponse<TChain>\n\nexport type WaitForTransactionReceiptArgs<TChain extends Chain = Chain> = {\n /** The number of confirmations (blocks that have passed) to wait before resolving. */\n confirmations?: number\n /** The hash of the transaction. */\n hash: Hash\n onReplaced?: (response: ReplacementResponse<TChain>) => void\n /** Polling frequency (in ms). Defaults to the client's pollingInterval config. */\n pollingInterval?: number\n /** Optional timeout (in milliseconds) to wait before stopping polling. */\n timeout?: number\n}\n\nexport async function waitForTransactionReceipt<TChain extends Chain>(\n client: PublicClient<any, TChain>,\n {\n confirmations = 1,\n hash,\n onReplaced,\n pollingInterval = client.pollingInterval,\n timeout,\n }: WaitForTransactionReceiptArgs<TChain>,\n): Promise<WaitForTransactionReceiptResponse<TChain>> {\n const observerId = JSON.stringify([\n 'waitForTransactionReceipt',\n client.uid,\n hash,\n ])\n\n let transaction: GetTransactionResponse<TChain> | undefined\n let replacedTransaction: GetTransactionResponse<TChain> | undefined\n let receipt: GetTransactionReceiptResponse<TChain>\n\n return new Promise((resolve, reject) => {\n if (timeout)\n setTimeout(\n () => reject(new WaitForTransactionReceiptTimeoutError({ hash })),\n timeout,\n )\n\n const unobserve = observe(\n observerId,\n { onReplaced, resolve, reject },\n (emit) => {\n const unwatch = watchBlockNumber(client, {\n emitMissed: true,\n emitOnBegin: true,\n pollingInterval,\n async onBlockNumber(blockNumber) {\n const done = async (fn: () => void) => {\n unwatch()\n fn()\n unobserve()\n }\n\n try {\n // If we already have a valid receipt, let's check if we have enough\n // confirmations. If we do, then we can resolve.\n if (receipt) {\n if (blockNumber - receipt.blockNumber + 1n < confirmations)\n return\n\n done(() => emit.resolve(receipt))\n return\n }\n\n // Get the transaction to check if it's been replaced.\n transaction = await getTransaction(client, { hash })\n\n // Get the receipt to check if it's been processed.\n receipt = await getTransactionReceipt(client, { hash })\n\n // Check if we have enough confirmations. If not, continue polling.\n if (blockNumber - receipt.blockNumber + 1n < confirmations) return\n\n done(() => emit.resolve(receipt))\n } catch (err) {\n // If the receipt is not found, the transaction will be pending.\n // We need to check if it has potentially been replaced.\n if (\n transaction &&\n (err instanceof TransactionNotFoundError ||\n err instanceof TransactionReceiptNotFoundError)\n ) {\n replacedTransaction = transaction\n\n // Let's retrieve the transactions from the current block.\n const block = await getBlock(client, {\n blockNumber,\n includeTransactions: true,\n })\n\n const replacementTransaction = (\n block.transactions as Transaction[]\n ).find(\n ({ from, nonce }) =>\n from === replacedTransaction!.from &&\n nonce === replacedTransaction!.nonce,\n )\n\n // If we couldn't find a replacement transaction, continue polling.\n if (!replacementTransaction) return\n\n // If we found a replacement transaction, return it's receipt.\n receipt = await getTransactionReceipt(client, {\n hash: replacementTransaction.hash,\n })\n\n // Check if we have enough confirmations. If not, continue polling.\n if (blockNumber - receipt.blockNumber + 1n < confirmations)\n return\n\n let reason: ReplacementReason = 'replaced'\n if (\n replacementTransaction.to === replacedTransaction.to &&\n replacementTransaction.value === replacedTransaction.value\n ) {\n reason = 'repriced'\n } else if (\n replacementTransaction.from === replacementTransaction.to &&\n replacementTransaction.value === 0n\n ) {\n reason = 'cancelled'\n }\n\n done(() => {\n emit.onReplaced?.({\n reason,\n replacedTransaction: replacedTransaction!,\n transaction: replacementTransaction,\n transactionReceipt: receipt,\n })\n emit.resolve(receipt)\n })\n } else {\n done(() => emit.reject(err))\n }\n }\n },\n })\n return unwatch\n },\n )\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,eAAsB,KACpB,QACA;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACuB;AACvB,MACE,iBAAiB,UACjB,yBAAyB,UACzB,eAAe;AAEf,UAAM,IAAI,yBAAyB;AAErC,QAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAEhE,QAAM,YAAY,OAAO,OAAO,YAAY;AAC5C,QAAM,WAAW;AAAA,IACf;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,GAAG,QAAQ,MAAM,EAAE,UAAU,CAAC;AAAA,IAChC;AAAA,IACA;AAAA,MACE,WAAW,aAAa;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,OAAO,QAAQ;AAAA,IACpC,QAAQ;AAAA,IACR,QAAQ,CAAC,UAAU,kBAAkB,QAAQ;AAAA,EAC/C,CAAC;AACD,MAAI,aAAa;AAAM,WAAO,EAAE,MAAM,OAAU;AAChD,SAAO,EAAE,MAAM,SAAS;AAC1B;;;ACvDA,eAAsB,iBAKpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACgE;AAChE,QAAM,WAAW,mBAAmB;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAA2D;AAC3D,MAAI;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,QAAQ;AAAA,MAClC,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,GAAG;AAAA,IACL,CAAgC;AAChC,UAAM,SAAS,qBAAqB;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA,IAChB,CAA6B;AAC7B,WAAO;AAAA,MACL;AAAA,MACA,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF,SAAS,KAAP;AACA,UAAM,iBAAiB,KAAkB;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,QAAQ,YAAY;AAAA,IACtB,CAAC;AAAA,EACH;AACF;;;ACpFA,eAAsB,+BACpB,QACiD;AACjD,QAAM,KAAK,MAAM,OAAO,QAAQ;AAAA,IAC9B,QAAQ;AAAA,EACV,CAAC;AACD,SAAO,EAAE,IAAI,MAAM,cAAc;AACnC;;;ACPA,eAAsB,kBACpB,QACoC;AACpC,QAAM,KAAK,MAAM,OAAO,QAAQ;AAAA,IAC9B,QAAQ;AAAA,EACV,CAAC;AACD,SAAO,EAAE,IAAI,MAAM,QAAQ;AAC7B;;;ACiDA,eAAsB,kBAQpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAA+D,CAAC,GACQ;AACxE,MAAI,SAAqB,CAAC;AAC1B,MAAI;AACF,aAAS,kBAAkB;AAAA,MACzB,KAAK,CAAC,KAAK;AAAA,MACX,WAAW,MAAM;AAAA,MACjB;AAAA,IACF,CAA0B;AAE5B,QAAM,KAAK,MAAM,OAAO,QAAQ;AAAA,IAC9B,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA,WACE,OAAO,cAAc,WAAW,YAAY,SAAS,IAAI;AAAA,QAC3D,SAAS,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;AAAA,QAC9D,GAAI,OAAO,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MACpC;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL,KAAK,QAAQ,CAAC,KAAK,IAAI;AAAA,IACvB;AAAA,IACA,WAAW,QAAQ,MAAM,OAAO;AAAA,IAChC;AAAA,IACA,MAAM;AAAA,EACR;AACF;;;ACtDA,eAAsB,0BAKpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACqE;AACrE,QAAM,SAAS,YACX,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAqC,IACrC;AACJ,QAAM,KAAK,MAAM,OAAO,QAAQ;AAAA,IAC9B,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN;AAAA,QACE;AAAA,QACA,WACE,OAAO,cAAc,WAAW,YAAY,SAAS,IAAI;AAAA,QAC3D,SAAS,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AACF;;;ACjDA,eAAsB,YACpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAC8B;AAC9B,QAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAEhE,QAAM,YAAY,OAAO,OAAO,YAAY;AAC5C,QAAM,WAAW;AAAA,IACf;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,GAAG,QAAQ,MAAM,EAAE,UAAU,CAAC;AAAA,IAChC;AAAA,IACA;AAAA,MACE,WAAW,aAAa;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,OAAO,QAAQ;AAAA,IACnC,QAAQ;AAAA,IACR,QAAQ,CAAC,UAAU,kBAAkB,QAAQ;AAAA,EAC/C,CAAC;AACD,SAAO,OAAO,OAAO;AACvB;;;ACnEA,eAAsB,oBAKpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACsC;AACtC,QAAM,OAAO,mBAAmB;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAA2D;AAC3D,MAAI;AACF,UAAM,MAAM,MAAM,YAAY,QAAQ;AAAA,MACpC;AAAA,MACA,IAAI;AAAA,MACJ,GAAG;AAAA,IACL,CAAgC;AAChC,WAAO;AAAA,EACT,SAAS,KAAP;AACA,UAAM,iBAAiB,KAAkB;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAAA,EACH;AACF;;;AClCA,eAAsB,WACpB,QACA,EAAE,SAAS,aAAa,WAAW,SAAS,GACf;AAC7B,QAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAEhE,QAAM,UAAU,MAAM,OAAO,QAAQ;AAAA,IACnC,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS,kBAAkB,QAAQ;AAAA,EAC9C,CAAC;AACD,SAAO,OAAO,OAAO;AACvB;;;ACFA,eAAsB,SACpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,sBAAsB;AACxB,IAAkB,CAAC,GACgB;AACnC,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,MAAI,QAAyB;AAC7B,MAAI,WAAW;AACb,YAAQ,MAAM,OAAO,QAAQ;AAAA,MAC3B,QAAQ;AAAA,MACR,QAAQ,CAAC,WAAW,mBAAmB;AAAA,IACzC,CAAC;AAAA,EACH,OAAO;AACL,YAAQ,MAAM,OAAO,QAAQ;AAAA,MAC3B,QAAQ;AAAA,MACR,QAAQ,CAAC,kBAAkB,UAAU,mBAAmB;AAAA,IAC1D,CAAC;AAAA,EACH;AAEA,MAAI,CAAC;AAAO,UAAM,IAAI,mBAAmB,EAAE,WAAW,YAAY,CAAC;AAEnE,SAAO,OAAO,OAAO;AAAA,IACnB,WAAW,OAAO,OAAO,YAAY,SAAS;AAAA,EAChD,CAAC;AACH;;;ACtDA,IAAM,WAAW,CAAC,OAAe,eAAe;AAEzC,SAAS,oBAAoB,IAAY;AAC9C,SAAO,SAAS,SAAS,EAAE,CAAC;AAC9B;AAKA,eAAsB,eACpB,QACA,EAAE,SAAS,OAAO,gBAAgB,IAAwB,CAAC,GAC1B;AACjC,QAAM,iBAAiB,MAAM;AAAA,IAC3B,MACE,OAAO,QAAQ;AAAA,MACb,QAAQ;AAAA,IACV,CAAC;AAAA,IACH,EAAE,UAAU,SAAS,OAAO,GAAG,GAAG,OAAO;AAAA,EAC3C;AACA,SAAO,OAAO,cAAc;AAC9B;;;ACLA,eAAsB,yBACpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AACb,IAAkC,CAAC,GACQ;AAC3C,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,MAAI,QAAyB;AAC7B,MAAI,WAAW;AACb,YAAQ,MAAM,OAAO,QAAQ;AAAA,MAC3B,QAAQ;AAAA,MACR,QAAQ,CAAC,SAAS;AAAA,IACpB,CAAC;AAAA,EACH,OAAO;AACL,YAAQ,MAAM,OAAO,QAAQ;AAAA,MAC3B,QAAQ;AAAA,MACR,QAAQ,CAAC,kBAAkB,QAAQ;AAAA,IACrC,CAAC;AAAA,EACH;AAEA,SAAO,YAAY,KAAK;AAC1B;;;AChCA,eAAsB,YACpB,QACA,EAAE,SAAS,aAAa,WAAW,SAAS,GACd;AAC9B,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AACzD,QAAM,MAAM,MAAM,OAAO,QAAQ;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS,kBAAkB,QAAQ;AAAA,EAC9C,CAAC;AACD,MAAI,QAAQ;AAAM,WAAO;AACzB,SAAO;AACT;;;AC1BA,eAAsB,WACpB,QAC6B;AAC7B,QAAM,aAAa,MAAM,OAAO,QAAQ,EAAE,QAAQ,cAAc,CAAC;AACjE,SAAO,YAAY,UAAU;AAC/B;;;ACcA,eAAsB,cACpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,GACgC;AAChC,QAAM,iBAAiB,cAAc,YAAY,WAAW,IAAI;AAChE,QAAM,aAAa,MAAM,OAAO,QAAQ;AAAA,IACtC,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN,YAAY,UAAU;AAAA,MACtB,kBAAkB;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,iBAAiB,UAAU;AACpC;;;ACZA,eAAsB,iBAMpB,QACA,EAAE,OAAO,GACT;AACA,QAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,IAChC,QAAQ;AAAA,IACR,QAAQ,CAAC,OAAO,EAAE;AAAA,EACpB,CAAC;AACD,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,QAAI,OAAO,QAAQ;AAAU,aAAO;AACpC,UAAM,EAAE,WAAW,KAAK,IACtB,SAAS,UAAU,OAAO,MACtB,eAAe;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,MAAM,IAAI;AAAA,MACV,QAAQ,IAAI;AAAA,IACd,CAAC,IACD,EAAE,WAAW,QAAW,MAAM,OAAU;AAC9C,WAAO,UAAU,KAAK,EAAE,MAAM,UAAU,CAAC;AAAA,EAC3C,CAAC;AACH;;;ACpCA,eAAsB,cAKpB,QACA,EAAE,OAAO,GACoD;AAC7D,QAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,IAChC,QAAQ;AAAA,IACR,QAAQ,CAAC,OAAO,EAAE;AAAA,EACpB,CAAC;AACD,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,UAAM,EAAE,WAAW,KAAK,IACtB,SAAS,UAAU,OAAO,MACtB,eAAe;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,MAAM,IAAI;AAAA,MACV,QAAQ,IAAI;AAAA,IACd,CAAC,IACD,EAAE,WAAW,QAAW,MAAM,OAAU;AAC9C,WAAO,UAAU,KAAK,EAAE,MAAM,UAAU,CAAC;AAAA,EAC3C,CAAC;AACH;;;ACpCA,eAAsB,YACpB,QAC8B;AAC9B,QAAM,WAAW,MAAM,OAAO,QAAQ;AAAA,IACpC,QAAQ;AAAA,EACV,CAAC;AACD,SAAO,OAAO,QAAQ;AACxB;;;AC+CA,eAAsB,QACpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAA4B,CAAC,GACQ;AACrC,MAAI,SAAqB,CAAC;AAC1B,MAAI;AACF,aAAS,kBAAkB;AAAA,MACzB,KAAK,CAAC,KAAK;AAAA,MACX,WAAW,MAAM;AAAA,MACjB;AAAA,IACF,CAA0B;AAE5B,MAAI;AACJ,MAAI,WAAW;AACb,WAAO,MAAM,OAAO,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ,CAAC,EAAE,SAAS,QAAQ,UAAU,CAAC;AAAA,IACzC,CAAC;AAAA,EACH,OAAO;AACL,WAAO,MAAM,OAAO,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,UACA,WACE,OAAO,cAAc,WAAW,YAAY,SAAS,IAAI;AAAA,UAC3D,SAAS,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;AAAA,QAChE;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,UAAM,EAAE,WAAW,MAAAA,MAAK,IAAI,QACxB,eAAe;AAAA,MACb,KAAK,CAAC,KAAK;AAAA,MACX,MAAM,IAAI;AAAA,MACV,QAAQ,IAAI;AAAA,IACd,CAAC,IACD,EAAE,WAAW,QAAW,MAAM,OAAU;AAC5C,WAAO,UAAU,KAAK,EAAE,MAAAA,OAAM,UAAU,CAAC;AAAA,EAC3C,CAAC;AACH;;;AC1FA,eAAsB,aACpB,QACA,EAAE,SAAS,aAAa,WAAW,UAAU,KAAK,GACnB;AAC/B,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AACzD,QAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,IAChC,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS,MAAM,kBAAkB,QAAQ;AAAA,EACpD,CAAC;AACD,SAAO;AACT;;;ACoBA,eAAsB,eACpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GACyC;AACzC,QAAM,iBACJ,gBAAgB,SAAY,YAAY,WAAW,IAAI;AAEzD,MAAI,cAAqC;AACzC,MAAI,MAAM;AACR,kBAAc,MAAM,OAAO,QAAQ;AAAA,MACjC,QAAQ;AAAA,MACR,QAAQ,CAAC,IAAI;AAAA,IACf,CAAC;AAAA,EACH,WAAW,WAAW;AACpB,kBAAc,MAAM,OAAO,QAAQ;AAAA,MACjC,QAAQ;AAAA,MACR,QAAQ,CAAC,WAAW,YAAY,KAAK,CAAC;AAAA,IACxC,CAAC;AAAA,EACH,WAAW,kBAAkB,UAAU;AACrC,kBAAc,MAAM,OAAO,QAAQ;AAAA,MACjC,QAAQ;AAAA,MACR,QAAQ,CAAC,kBAAkB,UAAU,YAAY,KAAK,CAAC;AAAA,IACzD,CAAC;AAAA,EACH;AAEA,MAAI,CAAC;AACH,UAAM,IAAI,yBAAyB;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAEH,SAAO,OAAO,aAAa;AAAA,IACzB,WAAW,OAAO,OAAO,YAAY,eAAe;AAAA,EACtD,CAAC;AACH;;;ACrEA,eAAsB,4BACpB,QACA,EAAE,MAAM,mBAAmB,GACmB;AAC9C,QAAM,CAAC,aAAa,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,IACnD,eAAe,MAAM;AAAA,IACrB,OAAO,eAAe,QAAQ,EAAE,KAAK,CAAC,IAAI;AAAA,EAC5C,CAAC;AACD,QAAM,yBACJ,oBAAoB,eAAe,aAAa;AAClD,MAAI,CAAC;AAAwB,WAAO;AACpC,SAAO,cAAc,yBAA0B;AACjD;;;ACbA,eAAsB,oBACpB,QACA,EAAE,SAAS,WAAW,UAAU,YAAY,GACN;AACtC,QAAM,QAAQ,MAAM,OAAO,QAAQ;AAAA,IACjC,QAAQ;AAAA,IACR,QAAQ,CAAC,SAAS,cAAc,YAAY,WAAW,IAAI,QAAQ;AAAA,EACrE,CAAC;AACD,SAAO,YAAY,KAAK;AAC1B;;;ACfA,eAAsB,sBACpB,QACA,EAAE,KAAK,GACP;AACA,QAAM,UAAU,MAAM,OAAO,QAAQ;AAAA,IACnC,QAAQ;AAAA,IACR,QAAQ,CAAC,IAAI;AAAA,EACf,CAAC;AAED,MAAI,CAAC;AAAS,UAAM,IAAI,gCAAgC,EAAE,KAAK,CAAC;AAEhE,SAAO,OAAO,SAAS;AAAA,IACrB,WACE,OAAO,OAAO,YAAY,sBAAsB;AAAA,EACpD,CAAC;AACH;;;ACRA,eAAsB,aAIpB,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACoD;AACpD,QAAM,WAAW,mBAAmB;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAA2D;AAC3D,MAAI;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,QAAQ;AAAA,MAClC,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,GAAG;AAAA,IACL,CAAwB;AACxB,WAAO,qBAAqB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA,IAChB,CAAkD;AAAA,EACpD,SAAS,KAAP;AACA,UAAM,iBAAiB,KAAkB;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AChCA,eAAsB,UAIpB,QACA,MACuD;AACvD,QAAM;AAAA,IACJ,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,QAAQ,UAAU,IAAI,CAAC,EAAE,KAAK,SAAS,MAAAC,OAAM,aAAa,MAAM;AACpE,QAAI;AACF,YAAM,WAAW,mBAAmB;AAAA,QAClC;AAAA,QACA,MAAAA;AAAA,QACA;AAAA,MACF,CAAsC;AACtC,aAAO;AAAA,QACL,cAAc;AAAA,QACd;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF,SAAS,KAAP;AACA,YAAM,QAAQ,iBAAiB,KAAkB;AAAA,QAC/C;AAAA,QACA;AAAA,QACA,MAAAA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AACD,UAAI,CAAC;AAAc,cAAM;AACzB,aAAO;AAAA,QACL,cAAc;AAAA,QACd,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,UAAU,MAAM,aAAa,QAAQ;AAAA,IACzC,KAAK;AAAA,IACL,SAAS;AAAA,IACT,MAAM,CAAC,KAAK;AAAA,IACZ;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AACD,SAAO,QAAQ,IAAI,CAAC,EAAE,YAAY,QAAQ,GAAG,MAAM;AACjD,UAAM,EAAE,SAAS,IAAI,MAAM,CAAC;AAC5B,UAAM,EAAE,KAAK,SAAS,cAAc,MAAAA,MAAK,IAAI,UAAU,CAAC;AACxD,QAAI;AACF,UAAI,aAAa;AAAM,cAAM,IAAI,yBAAyB;AAC1D,UAAI,CAAC;AAAS,cAAM,IAAI,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7D,YAAM,SAAS,qBAAqB;AAAA,QAClC;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,aAAO,EAAE,QAAQ,QAAQ,UAAU;AAAA,IACrC,SAAS,KAAP;AACA,YAAM,QAAQ,iBAAiB,KAAkB;AAAA,QAC/C;AAAA,QACA;AAAA,QACA,MAAAA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AACD,UAAI,CAAC;AAAc,cAAM;AACzB,aAAO,EAAE,OAAO,QAAQ,QAAW,QAAQ,UAAU;AAAA,IACvD;AAAA,EACF,CAAC;AACH;;;ACnGA,eAAsB,gBACpB,QACA,EAAE,OAAO,GACyB;AAClC,SAAO,OAAO,QAAQ;AAAA,IACpB,QAAQ;AAAA,IACR,QAAQ,CAAC,OAAO,EAAE;AAAA,EACpB,CAAC;AACH;;;ACXO,IAAM,iBAAiB,oBAAI,IAGhC;AACK,IAAM,eAAe,oBAAI,IAAwB;AAMxD,IAAI,gBAAgB;AAOb,SAAS,QACd,YACA,WACA,IACA;AACA,QAAM,aAAa,EAAE;AAErB,QAAM,eAAe,MAAM,eAAe,IAAI,UAAU,KAAK,CAAC;AAE9D,QAAM,cAAc,MAAM;AACxB,UAAMC,aAAY,aAAa;AAC/B,mBAAe;AAAA,MACb;AAAA,MACAA,WAAU,OAAO,CAAC,OAAY,GAAG,OAAO,UAAU;AAAA,IACpD;AAAA,EACF;AAEA,QAAM,UAAU,MAAM;AACpB,UAAMC,WAAU,aAAa,IAAI,UAAU;AAC3C,QAAI,aAAa,EAAE,WAAW,KAAKA;AAAS,MAAAA,SAAQ;AACpD,gBAAY;AAAA,EACd;AAEA,QAAM,YAAY,aAAa;AAC/B,iBAAe,IAAI,YAAY;AAAA,IAC7B,GAAG;AAAA,IACH,EAAE,IAAI,YAAY,KAAK,UAAU;AAAA,EACnC,CAAC;AAED,MAAI,aAAa,UAAU,SAAS;AAAG,WAAO;AAE9C,MAAI,OAAmB,CAAC;AACxB,aAAW,OAAO,WAAW;AAC3B,SAAK,GAAG,IAAK,IACR,SACA;AACH,YAAMD,aAAY,aAAa;AAC/B,UAAIA,WAAU,WAAW;AAAG;AAC5B,MAAAA,WAAU,QAAQ,CAAC,aAAa,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,QAAM,UAAU,GAAG,IAAI;AACvB,MAAI,OAAO,YAAY;AAAY,iBAAa,IAAI,YAAY,OAAO;AAEvE,SAAO;AACT;;;ACtDO,SAAS,KACd,IACA,EAAE,aAAa,iBAAiB,SAAS,GACzC;AACA,MAAI,SAAS;AAEb,QAAM,UAAU,MAAO,SAAS;AAEhC,QAAM,QAAQ,YAAY;AACxB,QAAI;AACJ,QAAI;AAAa,aAAO,MAAM,GAAG,EAAE,QAAQ,QAAQ,CAAC;AAEpD,UAAM,cAAe,MAAM,kBAAkB,IAAI,KAAM;AACvD,UAAM,KAAK,WAAW;AAEtB,UAAME,QAAO,YAAY;AACvB,UAAI,CAAC;AAAQ;AACb,YAAM,GAAG,EAAE,QAAQ,QAAQ,CAAC;AAC5B,YAAM,KAAK,QAAQ;AACnB,MAAAA,MAAK;AAAA,IACP;AAEA,IAAAA,MAAK;AAAA,EACP;AACA,QAAM;AAEN,SAAO;AACT;;;ACfO,SAAS,iBACd,QACA;AAAA,EACE,cAAc;AAAA,EACd,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO;AAC3B,GACA;AACA,QAAM,aAAa,KAAK,UAAU;AAAA,IAChC;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI;AAEJ,SAAO;AAAA,IAAQ;AAAA,IAAY,EAAE,eAAe,QAAQ;AAAA,IAAG,CAAC,SACtD;AAAA,MACE,YAAY;AACV,YAAI;AACF,gBAAM,cAAc,MAAM,eAAe,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAE9D,cAAI,iBAAiB;AAGnB,gBAAI,gBAAgB;AAAiB;AAIrC,gBAAI,cAAc,kBAAkB,KAAK,YAAY;AACnD,uBAAS,IAAI,kBAAkB,IAAI,IAAI,aAAa,KAAK;AACvD,qBAAK,cAAc,GAAG,eAAe;AACrC,kCAAkB;AAAA,cACpB;AAAA,YACF;AAAA,UACF;AACA,4BAAkB;AAClB,eAAK,cAAc,aAAa,eAAe;AAAA,QACjD,SAAS,KAAP;AACA,eAAK,UAAU,GAAY;AAAA,QAC7B;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;AC7BO,SAAS,YAId,QACA;AAAA,EACE,WAAW;AAAA,EACX,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB,kBAAkB,OAAO;AAC3B,GACA;AACA,QAAM,aAAa,KAAK,UAAU;AAAA,IAChC;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI;AAEJ,SAAO;AAAA,IAAQ;AAAA,IAAY,EAAE,SAAS,QAAQ;AAAA,IAAG,CAAC,SAChD;AAAA,MACE,YAAY;AACV,YAAI;AACF,gBAAM,QAAQ,MAAM,SAAS,QAAQ;AAAA,YACnC;AAAA,YACA;AAAA,UACF,CAAC;AACD,cAAI,MAAM,UAAU,WAAW,QAAQ;AAGrC,gBAAI,MAAM,WAAW,UAAU;AAAQ;AAIvC,gBAAI,MAAM,SAAS,UAAU,SAAS,KAAK,YAAY;AACrD,uBAAS,IAAI,WAAW,SAAS,IAAI,IAAI,MAAM,QAAQ,KAAK;AAC1D,sBAAMC,SAAQ,MAAM,SAAS,QAAQ;AAAA,kBACnC,aAAa;AAAA,kBACb;AAAA,gBACF,CAAC;AACD,qBAAK,QAAQA,QAAO,SAAS;AAC7B,4BAAYA;AAAA,cACd;AAAA,YACF;AAAA,UACF;AACA,eAAK,QAAQ,OAAO,SAAS;AAC7B,sBAAY;AAAA,QACd,SAAS,KAAP;AACA,eAAK,UAAU,GAAY;AAAA,QAC7B;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;;;AC3DO,SAAS,mBAId,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO;AAC3B,GACA;AACA,QAAM,aAAa,KAAK,UAAU;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,QAAQ,YAAY,EAAE,QAAQ,QAAQ,GAAG,CAAC,SAAS;AACxD,QAAI;AACJ,QAAI;AACJ,QAAI,cAAc;AAElB,UAAM,UAAU;AAAA,MACd,YAAY;AACV,YAAI,CAAC,aAAa;AAChB,cAAI;AACF,qBAAU,MAAM,0BAA0B,QAAQ;AAAA,cAChD;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAA6C;AAAA,UAK/C,QAAE;AAAA,UAAO;AACT,wBAAc;AACd;AAAA,QACF;AAEA,YAAI;AACF,cAAI;AACJ,cAAI,QAAQ;AACV,mBAAO,MAAM,iBAAiB,QAAQ,EAAE,OAAO,CAAC;AAAA,UAClD,OAAO;AAKL,kBAAM,cAAc,MAAM,eAAe,MAAM;AAK/C,gBAAI,sBAAsB,uBAAuB,aAAa;AAC5D,qBAAO,MAAM,QAAQ,QAAQ;AAAA,gBAC3B;AAAA,gBACA;AAAA,gBACA,WAAW;AAAA,gBACX,SAAS;AAAA,gBACT,OAAO,WAAW;AAAA,kBAChB;AAAA,kBACA,MAAM;AAAA,gBACR,CAA8B;AAAA,cAChC,CAA2B;AAAA,YAC7B,OAAO;AACL,qBAAO,CAAC;AAAA,YACV;AACA,iCAAqB;AAAA,UACvB;AAEA,cAAI,KAAK,WAAW;AAAG;AACvB,cAAI;AAAO,iBAAK,OAAO,IAAW;AAAA;AAC7B,iBAAK,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,GAAG,CAAQ,CAAC;AAAA,QACtD,SAAS,KAAP;AACA,eAAK,UAAU,GAAY;AAAA,QAC7B;AAAA,MACF;AAAA,MACA;AAAA,QACE,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO,YAAY;AACjB,UAAI;AAAQ,cAAM,gBAAgB,QAAQ,EAAE,OAAO,CAAC;AACpD,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACH;;;ACtGO,SAAS,WAId,QACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO;AAC3B,GACA;AACA,QAAM,aAAa,KAAK,UAAU;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,QAAQ,YAAY,EAAE,QAAQ,QAAQ,GAAG,CAAC,SAAS;AACxD,QAAI;AACJ,QAAI;AACJ,QAAI,cAAc;AAElB,UAAM,UAAU;AAAA,MACd,YAAY;AACV,YAAI,CAAC,aAAa;AAChB,cAAI;AACF,qBAAU,MAAM,kBAAkB,QAAQ;AAAA,cACxC;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAqC;AAAA,UAKvC,QAAE;AAAA,UAAO;AACT,wBAAc;AACd;AAAA,QACF;AAEA,YAAI;AACF,cAAI;AACJ,cAAI,QAAQ;AACV,mBAAO,MAAM,iBAAiB,QAAQ,EAAE,OAAO,CAAC;AAAA,UAClD,OAAO;AAKL,kBAAM,cAAc,MAAM,eAAe,MAAM;AAK/C,gBAAI,sBAAsB,uBAAuB,aAAa;AAC5D,qBAAO,MAAM,QAAQ,QAAQ;AAAA,gBAC3B;AAAA,gBACA;AAAA,gBACA,WAAW;AAAA,gBACX,SAAS;AAAA,gBACT;AAAA,cACF,CAAC;AAAA,YACH,OAAO;AACL,qBAAO,CAAC;AAAA,YACV;AACA,iCAAqB;AAAA,UACvB;AAEA,cAAI,KAAK,WAAW;AAAG;AACvB,cAAI;AAAO,iBAAK,OAAO,IAAW;AAAA;AAC7B,iBAAK,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,GAAG,CAAQ,CAAC;AAAA,QACtD,SAAS,KAAP;AACA,eAAK,UAAU,GAAY;AAAA,QAC7B;AAAA,MACF;AAAA,MACA;AAAA,QACE,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO,YAAY;AACjB,UAAI;AAAQ,cAAM,gBAAgB,QAAQ,EAAE,OAAO,CAAC;AACpD,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACH;;;AC3HO,SAAS,yBACd,QACA;AAAA,EACE,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO;AAC3B,GACA;AACA,QAAM,aAAa,KAAK,UAAU;AAAA,IAChC;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,QAAQ,YAAY,EAAE,gBAAgB,QAAQ,GAAG,CAAC,SAAS;AAChE,QAAI;AAEJ,UAAM,UAAU;AAAA,MACd,YAAY;AACV,YAAI;AACF,cAAI,CAAC,QAAQ;AACX,gBAAI;AACF,uBAAS,MAAM,+BAA+B,MAAM;AACpD;AAAA,YACF,SAAS,KAAP;AACA,sBAAQ;AACR,oBAAM;AAAA,YACR;AAAA,UACF;AAEA,gBAAM,SAAS,MAAM,iBAAiB,QAAQ,EAAE,OAAO,CAAC;AACxD,cAAI,OAAO,WAAW;AAAG;AACzB,cAAI;AAAO,iBAAK,eAAe,MAAM;AAAA;AAChC,mBAAO,QAAQ,CAAC,SAAS,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC;AAAA,QAC3D,SAAS,KAAP;AACA,eAAK,UAAU,GAAY;AAAA,QAC7B;AAAA,MACF;AAAA,MACA;AAAA,QACE,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO,YAAY;AACjB,UAAI;AAAQ,cAAM,gBAAgB,QAAQ,EAAE,OAAO,CAAC;AACpD,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACH;;;ACnCA,eAAsB,0BACpB,QACA;AAAA,EACE,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO;AAAA,EACzB;AACF,GACoD;AACpD,QAAM,aAAa,KAAK,UAAU;AAAA,IAChC;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AAED,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF;AAAA,QACE,MAAM,OAAO,IAAI,sCAAsC,EAAE,KAAK,CAAC,CAAC;AAAA,QAChE;AAAA,MACF;AAEF,UAAM,YAAY;AAAA,MAChB;AAAA,MACA,EAAE,YAAY,SAAS,OAAO;AAAA,MAC9B,CAAC,SAAS;AACR,cAAM,UAAU,iBAAiB,QAAQ;AAAA,UACvC,YAAY;AAAA,UACZ,aAAa;AAAA,UACb;AAAA,UACA,MAAM,cAAc,aAAa;AAC/B,kBAAM,OAAO,OAAO,OAAmB;AACrC,sBAAQ;AACR,iBAAG;AACH,wBAAU;AAAA,YACZ;AAEA,gBAAI;AAGF,kBAAI,SAAS;AACX,oBAAI,cAAc,QAAQ,cAAc,KAAK;AAC3C;AAEF,qBAAK,MAAM,KAAK,QAAQ,OAAO,CAAC;AAChC;AAAA,cACF;AAGA,4BAAc,MAAM,eAAe,QAAQ,EAAE,KAAK,CAAC;AAGnD,wBAAU,MAAM,sBAAsB,QAAQ,EAAE,KAAK,CAAC;AAGtD,kBAAI,cAAc,QAAQ,cAAc,KAAK;AAAe;AAE5D,mBAAK,MAAM,KAAK,QAAQ,OAAO,CAAC;AAAA,YAClC,SAAS,KAAP;AAGA,kBACE,gBACC,eAAe,4BACd,eAAe,kCACjB;AACA,sCAAsB;AAGtB,sBAAM,QAAQ,MAAM,SAAS,QAAQ;AAAA,kBACnC;AAAA,kBACA,qBAAqB;AAAA,gBACvB,CAAC;AAED,sBAAM,yBACJ,MAAM,aACN;AAAA,kBACA,CAAC,EAAE,MAAM,MAAM,MACb,SAAS,oBAAqB,QAC9B,UAAU,oBAAqB;AAAA,gBACnC;AAGA,oBAAI,CAAC;AAAwB;AAG7B,0BAAU,MAAM,sBAAsB,QAAQ;AAAA,kBAC5C,MAAM,uBAAuB;AAAA,gBAC/B,CAAC;AAGD,oBAAI,cAAc,QAAQ,cAAc,KAAK;AAC3C;AAEF,oBAAI,SAA4B;AAChC,oBACE,uBAAuB,OAAO,oBAAoB,MAClD,uBAAuB,UAAU,oBAAoB,OACrD;AACA,2BAAS;AAAA,gBACX,WACE,uBAAuB,SAAS,uBAAuB,MACvD,uBAAuB,UAAU,IACjC;AACA,2BAAS;AAAA,gBACX;AAEA,qBAAK,MAAM;AACT,uBAAK,aAAa;AAAA,oBAChB;AAAA,oBACA;AAAA,oBACA,aAAa;AAAA,oBACb,oBAAoB;AAAA,kBACtB,CAAC;AACD,uBAAK,QAAQ,OAAO;AAAA,gBACtB,CAAC;AAAA,cACH,OAAO;AACL,qBAAK,MAAM,KAAK,OAAO,GAAG,CAAC;AAAA,cAC7B;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":["args","args","listeners","cleanup","poll","block"]}
|