@shroud-fi/transport 0.1.0

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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/dist/cjs/abis.d.ts +446 -0
  4. package/dist/cjs/abis.d.ts.map +1 -0
  5. package/dist/cjs/abis.js +287 -0
  6. package/dist/cjs/abis.js.map +1 -0
  7. package/dist/cjs/addresses.d.ts +38 -0
  8. package/dist/cjs/addresses.d.ts.map +1 -0
  9. package/dist/cjs/addresses.js +43 -0
  10. package/dist/cjs/addresses.js.map +1 -0
  11. package/dist/cjs/chains.d.ts +2 -0
  12. package/dist/cjs/chains.d.ts.map +1 -0
  13. package/dist/cjs/chains.js +7 -0
  14. package/dist/cjs/chains.js.map +1 -0
  15. package/dist/cjs/create.d.ts +3 -0
  16. package/dist/cjs/create.d.ts.map +1 -0
  17. package/dist/cjs/create.js +18 -0
  18. package/dist/cjs/create.js.map +1 -0
  19. package/dist/cjs/deployments-helpers.d.ts +54 -0
  20. package/dist/cjs/deployments-helpers.d.ts.map +1 -0
  21. package/dist/cjs/deployments-helpers.js +99 -0
  22. package/dist/cjs/deployments-helpers.js.map +1 -0
  23. package/dist/cjs/deployments.d.ts +35 -0
  24. package/dist/cjs/deployments.d.ts.map +1 -0
  25. package/dist/cjs/deployments.js +78 -0
  26. package/dist/cjs/deployments.js.map +1 -0
  27. package/dist/cjs/errors.d.ts +9 -0
  28. package/dist/cjs/errors.d.ts.map +1 -0
  29. package/dist/cjs/errors.js +18 -0
  30. package/dist/cjs/errors.js.map +1 -0
  31. package/dist/cjs/index.d.ts +10 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +45 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/package.json +1 -0
  36. package/dist/cjs/types.d.ts +17 -0
  37. package/dist/cjs/types.d.ts.map +1 -0
  38. package/dist/cjs/types.js +3 -0
  39. package/dist/cjs/types.js.map +1 -0
  40. package/dist/esm/abis.d.ts +446 -0
  41. package/dist/esm/abis.d.ts.map +1 -0
  42. package/dist/esm/abis.js +284 -0
  43. package/dist/esm/abis.js.map +1 -0
  44. package/dist/esm/addresses.d.ts +38 -0
  45. package/dist/esm/addresses.d.ts.map +1 -0
  46. package/dist/esm/addresses.js +40 -0
  47. package/dist/esm/addresses.js.map +1 -0
  48. package/dist/esm/chains.d.ts +2 -0
  49. package/dist/esm/chains.d.ts.map +1 -0
  50. package/dist/esm/chains.js +2 -0
  51. package/dist/esm/chains.js.map +1 -0
  52. package/dist/esm/create.d.ts +3 -0
  53. package/dist/esm/create.d.ts.map +1 -0
  54. package/dist/esm/create.js +15 -0
  55. package/dist/esm/create.js.map +1 -0
  56. package/dist/esm/deployments-helpers.d.ts +54 -0
  57. package/dist/esm/deployments-helpers.d.ts.map +1 -0
  58. package/dist/esm/deployments-helpers.js +85 -0
  59. package/dist/esm/deployments-helpers.js.map +1 -0
  60. package/dist/esm/deployments.d.ts +35 -0
  61. package/dist/esm/deployments.d.ts.map +1 -0
  62. package/dist/esm/deployments.js +75 -0
  63. package/dist/esm/deployments.js.map +1 -0
  64. package/dist/esm/errors.d.ts +9 -0
  65. package/dist/esm/errors.d.ts.map +1 -0
  66. package/dist/esm/errors.js +13 -0
  67. package/dist/esm/errors.js.map +1 -0
  68. package/dist/esm/index.d.ts +10 -0
  69. package/dist/esm/index.d.ts.map +1 -0
  70. package/dist/esm/index.js +8 -0
  71. package/dist/esm/index.js.map +1 -0
  72. package/dist/esm/types.d.ts +17 -0
  73. package/dist/esm/types.d.ts.map +1 -0
  74. package/dist/esm/types.js +2 -0
  75. package/dist/esm/types.js.map +1 -0
  76. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  77. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  78. package/dist/tsconfig.tsbuildinfo +1 -0
  79. package/package.json +55 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ShroudFi contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # @shroud-fi/transport
2
+
3
+ > Pluggable viem-based transport + canonical Base mainnet deployment manifest.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@shroud-fi/transport.svg)](https://www.npmjs.com/package/@shroud-fi/transport)
6
+ [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
7
+
8
+ ```bash
9
+ npm i @shroud-fi/transport viem
10
+ ```
11
+
12
+ ## What it does
13
+
14
+ `@shroud-fi/transport` is the I/O layer for the ShroudFi SDK. It wraps [viem](https://viem.sh/) clients for RPC reads, contract calls, and event subscription — and ships the canonical Base mainnet deployment manifest (`ShroudFiStealth`, `ShroudFiRegistrar`, relayer addresses, deploy block heights).
15
+
16
+ You can swap your own RPC URL or a private mempool transport in without touching the rest of the SDK.
17
+
18
+ ## Quick start
19
+
20
+ ```ts
21
+ import { createTransport, getDeployment } from '@shroud-fi/transport';
22
+ import { base } from 'viem/chains';
23
+
24
+ const transport = createTransport({
25
+ chain: base,
26
+ rpcUrl: process.env.BASE_RPC_URL!,
27
+ });
28
+
29
+ const deployment = getDeployment(8453);
30
+ console.log(deployment.shroudfiStealth);
31
+ // → 0x4BC88813b09dDD6Ab530261200D706B397EcD0AB
32
+ ```
33
+
34
+ ## Exports
35
+
36
+ | Symbol | Purpose |
37
+ |---|---|
38
+ | `createTransport(cfg)` | Build a transport from `chain`, `rpcUrl`, or an existing viem client. |
39
+ | `getDeployment(chainId)` | Lookup verified contract addresses + deploy blocks by chain ID. Base mainnet = `8453`. |
40
+ | `ShroudFiStealthAbi` · `RegistrarAbi` · `RelayerAbi` · `EthRelayerAbi` | Typed ABIs for every deployed contract. |
41
+ | `DeploymentManifest` | Type for the manifest. |
42
+
43
+ Full API reference: [shroudfi.live/sdk#transport](https://shroudfi.live/sdk#transport)
44
+
45
+ ## Supported chains
46
+
47
+ - **Base mainnet** (8453) — production, contracts verified on Blockscout.
48
+
49
+ Other chains can be added by extending the manifest at deploy time; the SDK is chain-agnostic by design.
50
+
51
+ ## License
52
+
53
+ MIT — see [LICENSE](./LICENSE).
54
+
55
+ Part of the [ShroudFi](https://shroudfi.live) privacy SDK for AI agents on Base.
@@ -0,0 +1,446 @@
1
+ export declare const ERC5564AnnouncerAbi: readonly [{
2
+ readonly type: "function";
3
+ readonly name: "announce";
4
+ readonly inputs: readonly [{
5
+ readonly name: "schemeId";
6
+ readonly type: "uint256";
7
+ }, {
8
+ readonly name: "stealthAddress";
9
+ readonly type: "address";
10
+ }, {
11
+ readonly name: "ephemeralPubKey";
12
+ readonly type: "bytes";
13
+ }, {
14
+ readonly name: "metadata";
15
+ readonly type: "bytes";
16
+ }];
17
+ readonly outputs: readonly [];
18
+ readonly stateMutability: "nonpayable";
19
+ }, {
20
+ readonly type: "event";
21
+ readonly name: "Announcement";
22
+ readonly inputs: readonly [{
23
+ readonly name: "schemeId";
24
+ readonly type: "uint256";
25
+ readonly indexed: true;
26
+ }, {
27
+ readonly name: "stealthAddress";
28
+ readonly type: "address";
29
+ readonly indexed: true;
30
+ }, {
31
+ readonly name: "caller";
32
+ readonly type: "address";
33
+ readonly indexed: true;
34
+ }, {
35
+ readonly name: "ephemeralPubKey";
36
+ readonly type: "bytes";
37
+ readonly indexed: false;
38
+ }, {
39
+ readonly name: "metadata";
40
+ readonly type: "bytes";
41
+ readonly indexed: false;
42
+ }];
43
+ }];
44
+ export declare const ShroudFiStealthAbi: readonly [{
45
+ readonly type: "function";
46
+ readonly name: "sendETH";
47
+ readonly inputs: readonly [{
48
+ readonly name: "stealthAddress";
49
+ readonly type: "address";
50
+ }, {
51
+ readonly name: "ephemeralPubKey";
52
+ readonly type: "bytes";
53
+ }, {
54
+ readonly name: "viewTag";
55
+ readonly type: "bytes1";
56
+ }];
57
+ readonly outputs: readonly [];
58
+ readonly stateMutability: "payable";
59
+ }, {
60
+ readonly type: "function";
61
+ readonly name: "sendERC20";
62
+ readonly inputs: readonly [{
63
+ readonly name: "stealthAddress";
64
+ readonly type: "address";
65
+ }, {
66
+ readonly name: "token";
67
+ readonly type: "address";
68
+ }, {
69
+ readonly name: "amount";
70
+ readonly type: "uint256";
71
+ }, {
72
+ readonly name: "ephemeralPubKey";
73
+ readonly type: "bytes";
74
+ }, {
75
+ readonly name: "viewTag";
76
+ readonly type: "bytes1";
77
+ }];
78
+ readonly outputs: readonly [];
79
+ readonly stateMutability: "nonpayable";
80
+ }, {
81
+ readonly type: "function";
82
+ readonly name: "ANNOUNCER";
83
+ readonly inputs: readonly [];
84
+ readonly outputs: readonly [{
85
+ readonly name: "";
86
+ readonly type: "address";
87
+ }];
88
+ readonly stateMutability: "view";
89
+ }, {
90
+ readonly type: "function";
91
+ readonly name: "SCHEME_ID";
92
+ readonly inputs: readonly [];
93
+ readonly outputs: readonly [{
94
+ readonly name: "";
95
+ readonly type: "uint256";
96
+ }];
97
+ readonly stateMutability: "view";
98
+ }, {
99
+ readonly type: "function";
100
+ readonly name: "ETH_TOKEN_ADDRESS";
101
+ readonly inputs: readonly [];
102
+ readonly outputs: readonly [{
103
+ readonly name: "";
104
+ readonly type: "address";
105
+ }];
106
+ readonly stateMutability: "view";
107
+ }, {
108
+ readonly type: "event";
109
+ readonly name: "StealthPayment";
110
+ readonly inputs: readonly [{
111
+ readonly name: "stealthAddress";
112
+ readonly type: "address";
113
+ readonly indexed: true;
114
+ }, {
115
+ readonly name: "token";
116
+ readonly type: "address";
117
+ readonly indexed: true;
118
+ }, {
119
+ readonly name: "amount";
120
+ readonly type: "uint256";
121
+ readonly indexed: false;
122
+ }];
123
+ }, {
124
+ readonly type: "error";
125
+ readonly name: "ZeroAddress";
126
+ readonly inputs: readonly [];
127
+ }, {
128
+ readonly type: "error";
129
+ readonly name: "ZeroAmount";
130
+ readonly inputs: readonly [];
131
+ }, {
132
+ readonly type: "error";
133
+ readonly name: "InsufficientETH";
134
+ readonly inputs: readonly [];
135
+ }, {
136
+ readonly type: "error";
137
+ readonly name: "ETHTransferFailed";
138
+ readonly inputs: readonly [];
139
+ }];
140
+ /**
141
+ * Minimal ABI for USDC's EIP-3009 `transferWithAuthorization`. Pulled out as
142
+ * a separate constant because not every ERC-20 supports it — only Circle's
143
+ * USDC contract and a handful of other authorization-capable tokens. Use
144
+ * `USDC_BY_CHAIN[chainId]` to address the right deployment.
145
+ *
146
+ * The `authorizationState` view is included so callers can confirm a nonce
147
+ * has not already been consumed before submitting.
148
+ */
149
+ export declare const USDCAuthorizationAbi: readonly [{
150
+ readonly type: "function";
151
+ readonly name: "transferWithAuthorization";
152
+ readonly inputs: readonly [{
153
+ readonly name: "from";
154
+ readonly type: "address";
155
+ }, {
156
+ readonly name: "to";
157
+ readonly type: "address";
158
+ }, {
159
+ readonly name: "value";
160
+ readonly type: "uint256";
161
+ }, {
162
+ readonly name: "validAfter";
163
+ readonly type: "uint256";
164
+ }, {
165
+ readonly name: "validBefore";
166
+ readonly type: "uint256";
167
+ }, {
168
+ readonly name: "nonce";
169
+ readonly type: "bytes32";
170
+ }, {
171
+ readonly name: "v";
172
+ readonly type: "uint8";
173
+ }, {
174
+ readonly name: "r";
175
+ readonly type: "bytes32";
176
+ }, {
177
+ readonly name: "s";
178
+ readonly type: "bytes32";
179
+ }];
180
+ readonly outputs: readonly [];
181
+ readonly stateMutability: "nonpayable";
182
+ }, {
183
+ readonly type: "function";
184
+ readonly name: "authorizationState";
185
+ readonly inputs: readonly [{
186
+ readonly name: "authorizer";
187
+ readonly type: "address";
188
+ }, {
189
+ readonly name: "nonce";
190
+ readonly type: "bytes32";
191
+ }];
192
+ readonly outputs: readonly [{
193
+ readonly name: "";
194
+ readonly type: "bool";
195
+ }];
196
+ readonly stateMutability: "view";
197
+ }, {
198
+ readonly type: "event";
199
+ readonly name: "AuthorizationUsed";
200
+ readonly inputs: readonly [{
201
+ readonly name: "authorizer";
202
+ readonly type: "address";
203
+ readonly indexed: true;
204
+ }, {
205
+ readonly name: "nonce";
206
+ readonly type: "bytes32";
207
+ readonly indexed: true;
208
+ }];
209
+ }];
210
+ export declare const ERC20Abi: readonly [{
211
+ readonly type: "function";
212
+ readonly name: "balanceOf";
213
+ readonly inputs: readonly [{
214
+ readonly name: "account";
215
+ readonly type: "address";
216
+ }];
217
+ readonly outputs: readonly [{
218
+ readonly name: "";
219
+ readonly type: "uint256";
220
+ }];
221
+ readonly stateMutability: "view";
222
+ }, {
223
+ readonly type: "function";
224
+ readonly name: "transfer";
225
+ readonly inputs: readonly [{
226
+ readonly name: "to";
227
+ readonly type: "address";
228
+ }, {
229
+ readonly name: "amount";
230
+ readonly type: "uint256";
231
+ }];
232
+ readonly outputs: readonly [{
233
+ readonly name: "";
234
+ readonly type: "bool";
235
+ }];
236
+ readonly stateMutability: "nonpayable";
237
+ }, {
238
+ readonly type: "function";
239
+ readonly name: "approve";
240
+ readonly inputs: readonly [{
241
+ readonly name: "spender";
242
+ readonly type: "address";
243
+ }, {
244
+ readonly name: "amount";
245
+ readonly type: "uint256";
246
+ }];
247
+ readonly outputs: readonly [{
248
+ readonly name: "";
249
+ readonly type: "bool";
250
+ }];
251
+ readonly stateMutability: "nonpayable";
252
+ }, {
253
+ readonly type: "function";
254
+ readonly name: "allowance";
255
+ readonly inputs: readonly [{
256
+ readonly name: "owner";
257
+ readonly type: "address";
258
+ }, {
259
+ readonly name: "spender";
260
+ readonly type: "address";
261
+ }];
262
+ readonly outputs: readonly [{
263
+ readonly name: "";
264
+ readonly type: "uint256";
265
+ }];
266
+ readonly stateMutability: "view";
267
+ }];
268
+ export declare const ShroudFiRelayerAbi: readonly [{
269
+ readonly type: "function";
270
+ readonly name: "sweepERC20WithPermit";
271
+ readonly inputs: readonly [{
272
+ readonly name: "token";
273
+ readonly type: "address";
274
+ }, {
275
+ readonly name: "destination";
276
+ readonly type: "address";
277
+ }, {
278
+ readonly name: "deadline";
279
+ readonly type: "uint256";
280
+ }, {
281
+ readonly name: "v";
282
+ readonly type: "uint8";
283
+ }, {
284
+ readonly name: "r";
285
+ readonly type: "bytes32";
286
+ }, {
287
+ readonly name: "s";
288
+ readonly type: "bytes32";
289
+ }];
290
+ readonly outputs: readonly [];
291
+ readonly stateMutability: "nonpayable";
292
+ }, {
293
+ readonly type: "function";
294
+ readonly name: "previewFee";
295
+ readonly inputs: readonly [{
296
+ readonly name: "grossAmount";
297
+ readonly type: "uint256";
298
+ }];
299
+ readonly outputs: readonly [{
300
+ readonly name: "fee";
301
+ readonly type: "uint256";
302
+ }, {
303
+ readonly name: "net";
304
+ readonly type: "uint256";
305
+ }];
306
+ readonly stateMutability: "view";
307
+ }, {
308
+ readonly type: "function";
309
+ readonly name: "FEE_BPS";
310
+ readonly inputs: readonly [];
311
+ readonly outputs: readonly [{
312
+ readonly name: "";
313
+ readonly type: "uint16";
314
+ }];
315
+ readonly stateMutability: "view";
316
+ }, {
317
+ readonly type: "function";
318
+ readonly name: "BPS_DENOMINATOR";
319
+ readonly inputs: readonly [];
320
+ readonly outputs: readonly [{
321
+ readonly name: "";
322
+ readonly type: "uint16";
323
+ }];
324
+ readonly stateMutability: "view";
325
+ }, {
326
+ readonly type: "function";
327
+ readonly name: "TREASURY";
328
+ readonly inputs: readonly [];
329
+ readonly outputs: readonly [{
330
+ readonly name: "";
331
+ readonly type: "address";
332
+ }];
333
+ readonly stateMutability: "view";
334
+ }, {
335
+ readonly type: "function";
336
+ readonly name: "treasury";
337
+ readonly inputs: readonly [];
338
+ readonly outputs: readonly [{
339
+ readonly name: "";
340
+ readonly type: "address";
341
+ }];
342
+ readonly stateMutability: "view";
343
+ }, {
344
+ readonly type: "function";
345
+ readonly name: "trustedForwarder";
346
+ readonly inputs: readonly [];
347
+ readonly outputs: readonly [{
348
+ readonly name: "";
349
+ readonly type: "address";
350
+ }];
351
+ readonly stateMutability: "view";
352
+ }, {
353
+ readonly type: "function";
354
+ readonly name: "isTrustedForwarder";
355
+ readonly inputs: readonly [{
356
+ readonly name: "forwarder";
357
+ readonly type: "address";
358
+ }];
359
+ readonly outputs: readonly [{
360
+ readonly name: "";
361
+ readonly type: "bool";
362
+ }];
363
+ readonly stateMutability: "view";
364
+ }, {
365
+ readonly type: "event";
366
+ readonly name: "SweepRelayed";
367
+ readonly inputs: readonly [{
368
+ readonly name: "stealthAddress";
369
+ readonly type: "address";
370
+ readonly indexed: true;
371
+ }, {
372
+ readonly name: "token";
373
+ readonly type: "address";
374
+ readonly indexed: true;
375
+ }, {
376
+ readonly name: "destination";
377
+ readonly type: "address";
378
+ readonly indexed: false;
379
+ }, {
380
+ readonly name: "grossAmount";
381
+ readonly type: "uint256";
382
+ readonly indexed: false;
383
+ }, {
384
+ readonly name: "feeAmount";
385
+ readonly type: "uint256";
386
+ readonly indexed: false;
387
+ }];
388
+ }, {
389
+ readonly type: "error";
390
+ readonly name: "InvalidToken";
391
+ readonly inputs: readonly [];
392
+ }, {
393
+ readonly type: "error";
394
+ readonly name: "InvalidDestination";
395
+ readonly inputs: readonly [];
396
+ }, {
397
+ readonly type: "error";
398
+ readonly name: "ZeroBalance";
399
+ readonly inputs: readonly [];
400
+ }, {
401
+ readonly type: "error";
402
+ readonly name: "PermitFailedAndNoAllowance";
403
+ readonly inputs: readonly [];
404
+ }, {
405
+ readonly type: "error";
406
+ readonly name: "TransferFailed";
407
+ readonly inputs: readonly [];
408
+ }];
409
+ export declare const ERC6538RegistryAbi: readonly [{
410
+ readonly type: "function";
411
+ readonly name: "registerKeys";
412
+ readonly inputs: readonly [{
413
+ readonly name: "schemeId";
414
+ readonly type: "uint256";
415
+ }, {
416
+ readonly name: "stealthMetaAddress";
417
+ readonly type: "bytes";
418
+ }];
419
+ readonly outputs: readonly [];
420
+ readonly stateMutability: "nonpayable";
421
+ }, {
422
+ readonly type: "function";
423
+ readonly name: "stealthMetaAddressOf";
424
+ readonly inputs: readonly [{
425
+ readonly name: "registrant";
426
+ readonly type: "address";
427
+ }, {
428
+ readonly name: "schemeId";
429
+ readonly type: "uint256";
430
+ }];
431
+ readonly outputs: readonly [{
432
+ readonly name: "";
433
+ readonly type: "bytes";
434
+ }];
435
+ readonly stateMutability: "view";
436
+ }, {
437
+ readonly type: "function";
438
+ readonly name: "incrementNonce";
439
+ readonly inputs: readonly [{
440
+ readonly name: "schemeId";
441
+ readonly type: "uint256";
442
+ }];
443
+ readonly outputs: readonly [];
444
+ readonly stateMutability: "nonpayable";
445
+ }];
446
+ //# sourceMappingURL=abis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../../src/abis.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBtB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2DrB,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCvB,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCX,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmFrB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BrB,CAAC"}