@gobob/bob-sdk 1.0.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.
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@gobob/bob-sdk",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "scripts": {
7
+ "test": "ts-mocha test/*.ts",
8
+ "build": "tsc -p tsconfig.json"
9
+ },
10
+ "devDependencies": {
11
+ "@types/chai": "^4.3.6",
12
+ "@types/mocha": "^10.0.2",
13
+ "@types/node": "^20.8.3",
14
+ "chai": "^4.3.10",
15
+ "mocha": "^10.2.0",
16
+ "ts-mocha": "^10.0.0",
17
+ "ts-node-dev": "^2.0.0",
18
+ "typescript": "^5.2.2"
19
+ },
20
+ "dependencies": {
21
+ "bitcoinjs-lib": "^6.1.5"
22
+ }
23
+ }
package/src/electrs.ts ADDED
@@ -0,0 +1,98 @@
1
+ export const MAINNET_ESPLORA_BASE_PATH = "https://btc-mainnet.interlay.io";
2
+ export const TESTNET_ESPLORA_BASE_PATH = "https://btc-testnet.interlay.io";
3
+ export const REGTEST_ESPLORA_BASE_PATH = "http://localhost:3002";
4
+
5
+ export interface MerkleProof {
6
+ blockHeight: number
7
+ merkle: string,
8
+ pos: number,
9
+ }
10
+
11
+ export interface ElectrsClient {
12
+ /**
13
+ * @param height The height of the Bitcoin block
14
+ * @returns The block hash of the Bitcoin block
15
+ */
16
+ getBlockHash(height: number): Promise<string>;
17
+ /**
18
+ * @param height The hash of the Bitcoin block
19
+ * @returns The raw block header, represented as a hex string
20
+ */
21
+ getBlockHeader(hash: string): Promise<string>;
22
+ /**
23
+ * @param txId The ID of a Bitcoin transaction
24
+ * @returns The transaction data, represented as a hex string
25
+ */
26
+ getTransactionHex(txId: string): Promise<string>;
27
+ /**
28
+ * @param txId The ID of a Bitcoin transaction
29
+ * @returns The encoded merkle inclusion proof for the transaction
30
+ */
31
+ getMerkleProof(txId: string): Promise<MerkleProof>;
32
+ }
33
+
34
+ function encodeElectrsMerkleProof(merkle: string[]): string {
35
+ // convert to little-endian
36
+ return merkle.map(item => Buffer.from(item, "hex").reverse().toString("hex")).join('');
37
+ }
38
+
39
+ export class DefaultElectrsClient implements ElectrsClient {
40
+ private basePath: string;
41
+
42
+ constructor(networkOrUrl: string = "mainnet") {
43
+ switch (networkOrUrl) {
44
+ case "mainnet":
45
+ this.basePath = MAINNET_ESPLORA_BASE_PATH;
46
+ break;
47
+ case "testnet":
48
+ this.basePath = TESTNET_ESPLORA_BASE_PATH;
49
+ break;
50
+ case "regtest":
51
+ this.basePath = REGTEST_ESPLORA_BASE_PATH;
52
+ break;
53
+ default:
54
+ this.basePath = networkOrUrl;
55
+ }
56
+ }
57
+
58
+ async getBlockHash(height: number): Promise<string> {
59
+ return this.getText(`${this.basePath}/block-height/${height}`);
60
+ }
61
+
62
+ async getBlockHeader(hash: string): Promise<string> {
63
+ return this.getText(`${this.basePath}/block/${hash}/header`);
64
+ }
65
+
66
+ async getTransactionHex(txId: string): Promise<string> {
67
+ return this.getText(`${this.basePath}/tx/${txId}/hex`);
68
+ }
69
+
70
+ async getMerkleProof(txId: string): Promise<MerkleProof> {
71
+ const response = await this.getJson<{
72
+ "block_height": number,
73
+ "merkle": string[],
74
+ "pos": number,
75
+ }>(`${this.basePath}/tx/${txId}/merkle-proof`);
76
+ return {
77
+ blockHeight: response.block_height,
78
+ merkle: encodeElectrsMerkleProof(response.merkle),
79
+ pos: response.pos,
80
+ };
81
+ }
82
+
83
+ async getJson<T>(url: string): Promise<T> {
84
+ const response = await fetch(url);
85
+ if (!response.ok) {
86
+ throw new Error(response.statusText);
87
+ }
88
+ return await response.json() as Promise<T>;
89
+ }
90
+
91
+ async getText(url: string): Promise<string> {
92
+ const response = await fetch(url);
93
+ if (!response.ok) {
94
+ throw new Error(response.statusText);
95
+ }
96
+ return await response.text();
97
+ }
98
+ }
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./electrs";
2
+ export * from "./relay";
3
+ export * from "./utils";
package/src/relay.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { Transaction } from "bitcoinjs-lib";
2
+ import { ElectrsClient } from "./electrs";
3
+ import { encodeRawInput, encodeRawOutput } from "./utils";
4
+
5
+ export interface BitcoinTxInfo {
6
+ version: string,
7
+ inputVector: string,
8
+ outputVector: string,
9
+ locktime: string,
10
+ }
11
+
12
+ export async function getBitcoinTxInfo(
13
+ electrsClient: ElectrsClient,
14
+ txId: string,
15
+ ): Promise<BitcoinTxInfo> {
16
+ const txHex = await electrsClient.getTransactionHex(txId);
17
+ const tx = Transaction.fromHex(txHex);
18
+
19
+ const versionBuffer = Buffer.allocUnsafe(4);
20
+ versionBuffer.writeInt32LE(tx.version);
21
+
22
+ const locktimeBuffer = Buffer.allocUnsafe(4);
23
+ locktimeBuffer.writeInt32LE(tx.locktime);
24
+
25
+ return {
26
+ version: versionBuffer.toString("hex"),
27
+ inputVector: encodeRawInput(tx).toString("hex"),
28
+ outputVector: encodeRawOutput(tx).toString("hex"),
29
+ locktime: locktimeBuffer.toString("hex")
30
+ }
31
+ }
32
+
33
+ export interface BitcoinTxProof {
34
+ merkleProof: string,
35
+ txIndexInBlock: number,
36
+ bitcoinHeaders: string,
37
+ }
38
+
39
+ export async function getBitcoinTxProof(
40
+ electrsClient: ElectrsClient,
41
+ txId: string,
42
+ txProofDifficultyFactor: number,
43
+ ): Promise<BitcoinTxProof> {
44
+ const merkleProof = await electrsClient.getMerkleProof(txId);
45
+
46
+ const range = (start: number, end: number) => Array.from({ length: end - start }, (_element, index) => index + start);
47
+ const blockHeights = range(merkleProof.blockHeight, merkleProof.blockHeight + txProofDifficultyFactor);
48
+
49
+ const bitcoinHeaders = await Promise.all(blockHeights.map(async height => {
50
+ const hash = await electrsClient.getBlockHash(height);
51
+ return electrsClient.getBlockHeader(hash);
52
+ }));
53
+
54
+ return {
55
+ merkleProof: merkleProof.merkle,
56
+ txIndexInBlock: merkleProof.pos,
57
+ bitcoinHeaders: bitcoinHeaders.join(''),
58
+ }
59
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,127 @@
1
+ import { Block } from "bitcoinjs-lib";
2
+ import { BufferWriter, varuint } from "bitcoinjs-lib/src/bufferutils";
3
+ import { hash256 } from "bitcoinjs-lib/src/crypto";
4
+ import { Output, Transaction } from "bitcoinjs-lib/src/transaction";
5
+
6
+ function varSliceSize(someScript: Buffer): number {
7
+ const length = someScript.length;
8
+ return varuint.encodingLength(length) + length;
9
+ }
10
+
11
+ export function encodeRawInput(tx: Transaction) {
12
+ const inputSize = varuint.encodingLength(tx.ins.length) + tx.ins.reduce((sum, input) => {
13
+ return sum + 40 + varSliceSize(input.script);
14
+ }, 0);
15
+
16
+ const inputBuffer = Buffer.allocUnsafe(inputSize);
17
+ const inputBufferWriter = new BufferWriter(inputBuffer, 0);
18
+
19
+ inputBufferWriter.writeVarInt(tx.ins.length);
20
+ tx.ins.forEach(txIn => {
21
+ inputBufferWriter.writeSlice(txIn.hash);
22
+ inputBufferWriter.writeUInt32(txIn.index);
23
+ inputBufferWriter.writeVarSlice(txIn.script);
24
+ inputBufferWriter.writeUInt32(txIn.sequence);
25
+ });
26
+
27
+ return inputBuffer;
28
+ }
29
+
30
+ function isOutput(out: Output): boolean {
31
+ return out.value !== undefined;
32
+ }
33
+
34
+ export function encodeRawOutput(tx: Transaction) {
35
+ const outputSize = varuint.encodingLength(tx.outs.length) + tx.outs.reduce((sum, output) => {
36
+ return sum + 8 + varSliceSize(output.script);
37
+ }, 0);
38
+
39
+ const outputBuffer = Buffer.allocUnsafe(outputSize);
40
+ const outputBufferWriter = new BufferWriter(outputBuffer, 0);
41
+
42
+ outputBufferWriter.writeVarInt(tx.outs.length);
43
+ tx.outs.forEach(txOut => {
44
+ if (isOutput(txOut)) {
45
+ outputBufferWriter.writeUInt64(txOut.value);
46
+ } else {
47
+ outputBufferWriter.writeSlice((txOut as any).valueBuffer);
48
+ }
49
+
50
+ outputBufferWriter.writeVarSlice(txOut.script);
51
+ });
52
+
53
+ return outputBuffer;
54
+ }
55
+
56
+ function vectorSize(someVector: Buffer[]): number {
57
+ const length = someVector.length;
58
+
59
+ return (
60
+ varuint.encodingLength(length) +
61
+ someVector.reduce((sum, witness) => {
62
+ return sum + varSliceSize(witness);
63
+ }, 0)
64
+ );
65
+ }
66
+
67
+ export function encodeRawWitness(tx: Transaction) {
68
+ const witnessSize = tx.ins.reduce((sum, input) => {
69
+ return sum + vectorSize(input.witness);
70
+ }, 0);
71
+
72
+ const witnessBuffer = Buffer.allocUnsafe(witnessSize);
73
+ const witnessBufferWriter = new BufferWriter(witnessBuffer, 0);
74
+
75
+ tx.ins.forEach(input => {
76
+ witnessBufferWriter.writeVector(input.witness);
77
+ });
78
+
79
+ return witnessBuffer;
80
+ }
81
+
82
+ function chunkArray<T>(array: T[], chunkSize: number): T[][] {
83
+ const chunkedArray: T[][] = [];
84
+ let index = 0;
85
+ while (index < array.length) {
86
+ chunkedArray.push(array.slice(index, index + chunkSize));
87
+ index += chunkSize;
88
+ }
89
+ return chunkedArray;
90
+ }
91
+
92
+ // https://github.com/Blockstream/electrs/blob/fd35014283c7d3a7a85c77b9fd647c9f09de12c9/src/util/electrum_merkle.rs#L86-L105
93
+ function createMerkleBranchAndRoot(hashes: Buffer[], index: number): {
94
+ merkle: Buffer[],
95
+ root: Buffer,
96
+ } {
97
+ let merkle: Buffer[] = [];
98
+ while (hashes.length > 1) {
99
+ if (hashes.length % 2 != 0) {
100
+ let last = hashes[hashes.length - 1];
101
+ hashes.push(last);
102
+ }
103
+ if (index % 2 == 0) { index++ } else { index-- }
104
+ merkle.push(hashes[index]);
105
+ index = Math.floor(index / 2);
106
+ hashes = chunkArray(hashes, 2).map(pair => hash256(Buffer.concat([pair[0], pair[1]])));
107
+ }
108
+ return {
109
+ merkle,
110
+ root: hashes[0],
111
+ };
112
+ }
113
+
114
+ // used to construct merkle proofs from the raw block data, especially useful for
115
+ // constructing a non-standard "witness proof" which is not currently supported by electrs
116
+ export function getMerkleProof(block: Block, txHash: string, forWitness?: boolean) {
117
+ const txIds = block.transactions!.map(tx => tx.getHash(forWitness));
118
+ const pos = txIds.map(value => value.toString("hex")).indexOf(txHash);
119
+
120
+ const merkleAndRoot = createMerkleBranchAndRoot(txIds, pos);
121
+ return {
122
+ pos: pos,
123
+ // hashes are already little-endian
124
+ proof: merkleAndRoot.merkle.map(value => value.toString("hex")).join(''),
125
+ root: merkleAndRoot.root.toString("hex"),
126
+ };
127
+ }
@@ -0,0 +1,18 @@
1
+ import { assert } from "chai";
2
+ import { DefaultElectrsClient } from "../src/electrs";
3
+
4
+ describe("Electrs Tests", () => {
5
+ it("should serialize merkle proof", async () => {
6
+ const client = new DefaultElectrsClient();
7
+ const proof = await client.getMerkleProof("b61b0172d95e266c18aea0c624db987e971a5d6d4ebc2aaed85da4642d635735");
8
+
9
+ assert.equal(proof.merkle, "ace8423f874c95f5f9042d7cda6b9f0727251f3059ef827f373a56831cc621a371db6dfce8daed1d809275" +
10
+ "e0862441b3cdfd314eceea5a79ee7aeec69cc70f614082c8b474ccf00906a1e61694fdf0b717790ac3bdf850b36afb8df107ac" +
11
+ "a93b96e7dea43442a944a6ab4f8bed0d25d3d372a836a6042375bc57fee5c5425f67a3920a489b23f9133fc84d7987d990acc7" +
12
+ "c2569a81b547a5f65385856d90100e54ec14dd40c23c3cf1e61a2a16a03aea0e85d236942ad538262528d6748d20dc6ca7c40d" +
13
+ "75ba7b782bc3d1302633c6def1531573c6420b99840ecffc0125f8e0f12ec4aa1d74fd5ec8d9a57c154267cb6ff0276835592c" +
14
+ "b8500d8c3c5650e84b83e73e9094de0c2bdaa4d661a3b1adacfae0f3c0f8007ab1b2be8dbf32f073068979a263152d6c234ad0" +
15
+ "f4b70f697168502d62ead0c0194bcf77321a85a1e127afc4477dcc3c3636a7818601d9ff43f837b15ef74d387c688fc0a45b79" +
16
+ "aec0b6");
17
+ });
18
+ });
@@ -0,0 +1,25 @@
1
+ import { assert } from "chai";
2
+ import { DefaultElectrsClient } from "../src/electrs";
3
+ import { getBitcoinTxInfo, getBitcoinTxProof } from "../src/relay";
4
+
5
+ describe("Relay Tests", () => {
6
+ it("should get tx info", async () => {
7
+ const client = new DefaultElectrsClient();
8
+ const txId = "2ef69769cc0ee81141c79552de6b91f372ff886216dbfa84e5497a16b0173e79";
9
+ const txInfo = await getBitcoinTxInfo(client, txId);
10
+ assert.deepEqual(txInfo, {
11
+ version: '01000000',
12
+ inputVector: '01996cf4e2f0016a1f092aaaba653c7eae5dd4b6eef1f9a2a94c64f34b2fecbd85010000006a47304402206f99da49ce586528ed8981842df30b4a5a91195fd2d83e440d4193fc16a944ec022055cfdf63a2c90638821f1b5ff1fdf77526163ae057a0d0de30a6e1d3009e7a29012102811832eef7216470f489991f1d87e36d2890755d2bbf827eb1e71804491506afffffffff',
13
+ outputVector: '0200e9a435000000001976a914fd7e6999cd7e7114383e014b7e612a88ab6be68f88ac804a5d05000000001976a9145c1addbd0e4e78479e71fdca0555d2d44b67378e88ac',
14
+ locktime: '00000000'
15
+ });
16
+ });
17
+
18
+ it("should get tx proof", async () => {
19
+ const client = new DefaultElectrsClient();
20
+ const txId = "2ef69769cc0ee81141c79552de6b91f372ff886216dbfa84e5497a16b0173e79";
21
+ const txProof = await getBitcoinTxProof(client, txId, 2);
22
+ assert.equal(txProof.txIndexInBlock, 1);
23
+ assert.equal(Buffer.from(txProof.bitcoinHeaders, "hex").byteLength / 80, 2);
24
+ });
25
+ });
@@ -0,0 +1,22 @@
1
+ import { assert } from "chai";
2
+ import { MAINNET_ESPLORA_BASE_PATH } from "../src/electrs";
3
+ import { Block } from "bitcoinjs-lib";
4
+ import { getMerkleProof } from "../src/utils";
5
+
6
+ describe("Utils Tests", () => {
7
+ // NOTE: this is a bit flaky due to slow response times from electrs
8
+ it("should construct witness merkle proof from block", async () => {
9
+ const hash = "000000000000000000015712838394aeb93f5d45d0e5bec197382c08b375016e";
10
+ const response = await fetch(`${MAINNET_ESPLORA_BASE_PATH}/block/${hash}/raw`);
11
+ const blob = await response.blob()
12
+ const buffer = Buffer.from(await blob.arrayBuffer());
13
+ const block = Block.fromBuffer(buffer);
14
+ const wTxId = "6b374690d8e2dbca4187f443cddd293536400d431f43a643b263ce59c4f9a3eb";
15
+ const merkleProof = getMerkleProof(block, wTxId, true);
16
+ assert.deepEqual(merkleProof, {
17
+ pos: 407,
18
+ proof: '6034ddf453f5dd20de449b29b1221dede67ccae56f00528e0767e2ab506db31c4d2946e88f7efa3e94bb17bbd10f3f44172b59c48f2eb6bd7f67a88d149373ee4082c8b474ccf00906a1e61694fdf0b717790ac3bdf850b36afb8df107aca93b7c3c4f91ddf49c7f74244336c5833377d40760ae09dd1fba83063ace480f94cca3920a489b23f9133fc84d7987d990acc7c2569a81b547a5f65385856d90100e84878b4f305a3909a9420293cdc741109864c9338ea326449a7a303b227f2b10490bc4343355e1a391f51c42918a894c2980012cca5ffd4b56a6702abd98497802de83f5889b2ad5bd157762a58505948f32f42b9fa886c93bf30fef6144a64666843a28ef13184f9e7ac3c34b5741f58c8895a0167f496e0157e7d0a97f4041f97b8df4d8aee81d20d0d062ed3ee0f9b0afb196bdf5373712883cacdfd8349b739c0e6e41d650d05727ea5faec197bfa563d19b0150fba718ba1981aea9ef90',
19
+ root: '7cee5e99c8f0fc25fb115b7d7d00befca61f59a8544adaf3980f52132baf61ae'
20
+ });
21
+ }).timeout(5000);
22
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "es2017",
5
+ "sourceMap": true,
6
+ "esModuleInterop": true,
7
+ "composite": true,
8
+ "resolveJsonModule": true,
9
+ "declaration": true,
10
+ "noImplicitAny": false,
11
+ "removeComments": true,
12
+ "noLib": false,
13
+ "emitDecoratorMetadata": true,
14
+ "experimentalDecorators": true,
15
+ "rootDir": "./src",
16
+ "outDir": "./dist"
17
+ },
18
+ "include": ["src/**/*"],
19
+ "exclude": ["./node_modules/*"]
20
+ }
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/lib/lib.es2017.full.d.ts","./src/electrs.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/assert.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/assert/strict.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/header.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/readable.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/file.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/fetch.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/formdata.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/connector.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/client.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/errors.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/dispatcher.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/global-dispatcher.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/global-origin.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/pool-stats.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/pool.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/handlers.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/balanced-pool.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/agent.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/mock-interceptor.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/mock-agent.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/mock-client.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/mock-pool.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/mock-errors.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/proxy-agent.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/api.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/cookies.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/patch.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/filereader.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/websocket.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/content-type.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/cache.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/interceptors.d.ts","./node_modules/.pnpm/undici-types@5.25.3/node_modules/undici-types/index.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/globals.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/async_hooks.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/buffer.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/child_process.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/cluster.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/console.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/constants.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/crypto.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/dgram.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/dns.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/dns/promises.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/domain.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/dom-events.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/events.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/fs.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/fs/promises.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/http.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/http2.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/https.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/inspector.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/module.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/net.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/os.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/path.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/perf_hooks.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/process.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/punycode.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/querystring.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/readline.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/readline/promises.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/repl.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/stream.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/stream/promises.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/stream/consumers.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/stream/web.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/string_decoder.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/test.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/timers.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/timers/promises.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/tls.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/trace_events.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/tty.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/url.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/util.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/v8.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/vm.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/wasi.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/worker_threads.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/zlib.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/globals.global.d.ts","./node_modules/.pnpm/@types+node@20.8.4/node_modules/@types/node/index.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/networks.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/address.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/crypto.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/types.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/embed.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2ms.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2pk.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2pkh.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2sh.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2wpkh.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2wsh.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/p2tr.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/payments/index.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/ops.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/script_number.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/script_signature.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/script.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/transaction.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/block.d.ts","./node_modules/.pnpm/bip174@2.1.1/node_modules/bip174/src/lib/interfaces.d.ts","./node_modules/.pnpm/bip174@2.1.1/node_modules/bip174/src/lib/psbt.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/psbt.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/ecc_lib.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/index.d.ts","./node_modules/.pnpm/varuint-bitcoin@1.1.2/node_modules/varuint-bitcoin/index.d.ts","./node_modules/.pnpm/bitcoinjs-lib@6.1.5/node_modules/bitcoinjs-lib/src/bufferutils.d.ts","./src/utils.ts","./src/relay.ts","./src/index.ts","./node_modules/.pnpm/@types+chai@4.3.7/node_modules/@types/chai/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/.pnpm/@types+mocha@10.0.2/node_modules/@types/mocha/index.d.ts","./node_modules/@types/strip-bom/index.d.ts","./node_modules/@types/strip-json-comments/index.d.ts"],"fileInfos":[{"version":"2ac9cdcfb8f8875c18d14ec5796a8b029c426f73ad6dc3ffb580c228b58d1c44","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"0075fa5ceda385bcdf3488e37786b5a33be730e8bc4aa3cf1e78c63891752ce8","affectsGlobalScope":true},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true},{"version":"c5c5565225fce2ede835725a92a28ece149f83542aa4866cfb10290bff7b8996","affectsGlobalScope":true},{"version":"7d2dbc2a0250400af0809b0ad5f84686e84c73526de931f84560e483eb16b03c","affectsGlobalScope":true},{"version":"f296963760430fb65b4e5d91f0ed770a91c6e77455bacf8fa23a1501654ede0e","affectsGlobalScope":true},{"version":"09226e53d1cfda217317074a97724da3e71e2c545e18774484b61562afc53cd2","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"8b41361862022eb72fcc8a7f34680ac842aca802cf4bc1f915e8c620c9ce4331","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"b7e9f95a7387e3f66be0ed6db43600c49cec33a3900437ce2fd350d9b7cb16f2","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"f35a831e4f0fe3b3697f4a0fe0e3caa7624c92b78afbecaf142c0f93abfaf379","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"994c234848afc14a2586b6565777f4c0b05dc479ede0a041bfd5becf6dceb586",{"version":"a5302eaeb9a4412ff03f96ad5eb52b6510b331067fa09c63664c537ecc759ce8","signature":"3daa3a9cb7229ee19f0ccf366c0c88c907a49b654d26b0dee1362c85ec386abd"},"09df3b4f1c937f02e7fee2836d4c4d7a63e66db70fd4d4e97126f4542cc21d9d","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","adda9e3915c6bf15e360356a41d950881a51dbe44f9a6088155836b040820663","b4855526ac5a822d6e0005e4b62ee49c599bf89897e4109135283d660e60291c","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","80ad053918e96087d9da8d092ff9f90520c9fc199c8bfd9340266dd8f38f364e","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","d70119390aece1794bf4988f10ea750d13455f5286977d35027d43dd2e9841cf",{"version":"4d719cfab49ae4045d15cb6bed0f38ad3d7d6eb7f277d2603502a0f862ca3182","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"62486c25ff70799e9faac5c6108820969617daeb6e65644c212d03cdb5902a3c","affectsGlobalScope":true},"546ab07e19116d935ad982e76a223275b53bff7771dab94f433b7ab04652936e","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"aefb5a4a209f756b580eb53ea771cca8aad411603926f307a5e5b8ec6b16dcf6","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","f5a8b7ec4b798c88679194a8ebc25dcb6f5368e6e5811fcda9fe12b0d445b8db","b86e1a45b29437f3a99bad4147cb9fe2357617e8008c0484568e5bb5138d6e13","b5b719a47968cd61a6f83f437236bb6fe22a39223b6620da81ef89f5d7a78fb7","42c431e7965b641106b5e25ab3283aa4865ca7bb9909610a2abfa6226e4348be","0b7e732af0a9599be28c091d6bd1cb22c856ec0d415d4749c087c3881ca07a56","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"8d6138a264ddc6f94f16e99d4e117a2d6eb31b217891cf091b6437a2f114d561","affectsGlobalScope":true},"3b4c85eea12187de9929a76792b98406e8778ce575caca8c574f06da82622c54","f788131a39c81e0c9b9e463645dd7132b5bc1beb609b0e31e5c1ceaea378b4df","0c236069ce7bded4f6774946e928e4b3601894d294054af47a553f7abcafe2c1","21894466693f64957b9bd4c80fa3ec7fdfd4efa9d1861e070aca23f10220c9b2","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","ad8848c289c0b633452e58179f46edccd14b5a0fe90ebce411f79ff040b803e0",{"version":"5d4ef3f46c7f9d62f7c964f9f9ccdd293be99fb3dcc66c983f2aea7430e3c7c6","affectsGlobalScope":true},"91f8b5abcdff8f9ecb9656b9852878718416fb7700b2c4fad8331e5b97c080bb","59d8f064f86a4a2be03b33c0efcc9e7a268ad27b22f82dce16899f3364f70ba8","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"f49fb15c4aa06b65b0dce4db4584bfd8a9f74644baef1511b404dc95be34af00","affectsGlobalScope":true},{"version":"d48009cbe8a30a504031cc82e1286f78fed33b7a42abf7602c23b5547b382563","affectsGlobalScope":true},"7aaeb5e62f90e1b2be0fc4844df78cdb1be15c22b427bc6c39d57308785b8f10","3ba30205a029ebc0c91d7b1ab4da73f6277d730ca1fc6692d5a9144c6772c76b","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","458b216959c231df388a5de9dcbcafd4b4ca563bc3784d706d0455467d7d4942","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","f8c87b19eae111f8720b0345ab301af8d81add39621b63614dfc2d15fd6f140a","831c22d257717bf2cbb03afe9c4bcffc5ccb8a2074344d4238bf16d3a857bb12",{"version":"24ba151e213906027e2b1f5223d33575a3612b0234a0e2b56119520bbe0e594b","affectsGlobalScope":true},{"version":"cbf046714f3a3ba2544957e1973ac94aa819fa8aa668846fa8de47eb1c41b0b2","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","eae74e3d50820f37c72c0679fed959cd1e63c98f6a146a55b8c4361582fa6a52","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"aed89e3c18f4c659ee8153a76560dffda23e2d801e1e60d7a67abd84bc555f8d","affectsGlobalScope":true},{"version":"0ed13c80faeb2b7160bffb4926ff299c468e67a37a645b3ae0917ba0db633c1b","affectsGlobalScope":true},"e393915d3dc385e69c0e2390739c87b2d296a610662eb0b1cb85224e55992250","2f940651c2f30e6b29f8743fae3f40b7b1c03615184f837132b56ea75edad08b","5749c327c3f789f658072f8340786966c8b05ea124a56c1d8d60e04649495a4d",{"version":"c9d62b2a51b2ff166314d8be84f6881a7fcbccd37612442cf1c70d27d5352f50","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"d3f4c342fb62f348f25f54b473b0ab7371828cbf637134194fa9cdf04856f87b","692cce8a36696e9df80910c05ae3b34340c278bbba03701a9ae92ae038663824","035fd4564409153531cc683821b48048fd01982a8522c120b5a17f9a6320a229","8e30c31e1f95057c95fad8af9d7cfa916d09a9ae5f805ccd1ebd76c0158c5021","b86e99a2002acb78c3c5edfc219053cad18c2e0086d848d50086be8198e81c3b","a29a7b9ade7876d0f527b716a5bc5c7bc84554d155577020441f2d3c735589be","9cd42ff83837551961fa8788f14bd3498306fb2c1d35358f2b6bf3af05bf0890","5e51773d5624b8c871d8d140c88f944466338673fbc60ac4bf409eb60e6665cf","39b10cd95b70bbdc1cf8c832002618c3f81cd980438fe5e3694d99286ef90911","95244212208717085038a74378ea2a03e49c06a3a195b2826c01c978f14684c2","7362eeca79ce50eb72b2a0149e323f6d64daf4fbc8067592310859622c3dbcfe","8c0a305a7b10513d9d07bf739456bf9845bd4336027c85442b674a417facb57a","c91084ba90468037b6d266f3cae698aaa76c0864cf076aa099d981d847b74c2d","08c89f85121be91dd79dc42e1fdb0eef4336dd4f7c23710d05268accf1a65220","0f3fa7383d3f2ebed173ff59c102b4a68d10acdff5db4a009b73429ddaa15768","973d36af083ce019e3c38b99ca43cb6815b47082cf1e07215387df336192f447","617012176a8cb5be290ae89040aac88ec74321c2a8b984f01a7ba6eb9a2eddc2","111dae916025fd483a9be521111a10c3e7e9ed35eeb325ba34108433cc07aa19","fc2aced12725e81bbdb9e55a0efe1060cd4b6bbb6d1a5a23a09236a18c2d2323","7340d9ad1f3f55e7be3a85a151ef25d7a8c0205904519940c9dcea0f61cb3292","b6c3995be1adb84b6f81cbf9dfdecaa0da5cc71c5a61b5fc0e4a5a31765d8257","3da723823982206178406b7c2b8570152c6347a047fa7e59fa46011d10ac26b6","faba33b564a39dcb577490c3db303e692b745453fc50adb57860e8014e3247a2","72b83ee0bee9e2bec77a2a1666c6933da383075af254348e4c72e7e0b69e16dd","ad50fd05c6869671a429ce6581c052720d067f79d59a8eada7bc3a17e323728a","0c0d4c550d90c330a3129efed22ba8fda8f6151d4f2b2582edebac7582b5b74b","972606cd425b37bb428d665722abcffc6d5cadb250009dda9bd1cd5481874854",{"version":"003bb272dcf5780bd5abe7723f9cffcddbd992c83d8fa5ef144fd98465cdfb07","signature":"47b3aa4654392a4e9ca1e2cc348161f3892686c3d61a05b175cdfd1e54134edc"},{"version":"375780455a16cd7eed65d22c9af2929a0c0426275639b4d4b514ece2570f9c8f","signature":"6dbac004803036cb12dd2c2995ce12c8c4d32eb594936f51038a3b304ec448fb"},"8d6b167ef1929d215dd4d09868ad829e7b6aa4edb3fc6800a8b32da2a7cc9512",{"version":"268e85cc5d35666a8988dcc657aaa083e54cc92147a1919e01e8c394d271d423","affectsGlobalScope":true},"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538",{"version":"c992af0bb279ea7d18c12df03c2001042cdd7bc165bb3d9a3561a3f3bcf4ef49","affectsGlobalScope":true},"4006c872e38a2c4e09c593bc0cdd32b7b4f5c4843910bea0def631c483fff6c5","ab6aa3a65d473871ee093e3b7b71ed0f9c69e07d1d4295f45c9efd91a771241d"],"root":[50,[163,165]],"options":{"composite":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitAny":false,"outDir":"./dist","removeComments":true,"rootDir":"./src","sourceMap":true,"target":4},"fileIdsList":[[129],[51,129],[86,129],[87,92,120,129],[88,99,100,107,117,128,129],[88,89,99,107,129],[90,129],[91,92,100,108,129],[92,117,125,129],[93,95,99,107,129],[94,129],[95,96,129],[99,129],[97,99,129],[86,99,129],[99,100,101,117,128,129],[99,100,101,114,117,120,129],[84,129,133],[95,99,102,107,117,128,129],[99,100,102,103,107,117,125,128,129],[102,104,117,125,128,129],[51,52,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135],[99,105,129],[106,128,129,133],[95,99,107,117,129],[108,129],[109,129],[86,110,129],[111,127,129,133],[112,129],[113,129],[99,114,115,129],[114,116,129,131],[87,99,117,118,119,120,129],[87,117,119,129],[117,118,129],[120,129],[121,129],[86,117,129],[99,123,124,129],[123,124,129],[92,107,117,125,129],[126,129],[107,127,129],[87,102,113,128,129],[92,129],[117,129,130],[106,129,131],[129,132],[87,92,99,101,110,117,128,129,131,133],[117,129,134],[129,136],[129,136,156],[129,136,137],[129,136,154],[129,136,161],[129,140],[129,137,138,139,149,150,153,154,155,158,159],[129,149],[129,136,137,140,141,142,143,144,145,146,147,148],[129,136,137,154,156,157],[129,136,149,150,151,152],[61,65,128,129],[61,117,128,129],[56,129],[58,61,125,128,129],[107,125,129],[56,129,136],[58,61,107,128,129],[53,54,57,60,87,99,117,128,129],[53,59,129],[57,61,87,120,128,129,136],[87,129,136],[77,87,129,136],[55,56,129,136],[61,129],[55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,78,79,80,81,82,83,129],[61,68,69,129],[59,61,69,70,129],[60,129],[53,56,61,129],[61,65,69,70,129],[65,129],[59,61,64,128,129],[53,58,59,61,65,68,129],[87,117,129],[56,61,77,87,129,133,136],[50,129,163,164],[50,129,160,163],[129,139,154,160,162],[50],[154,160]],"referencedMap":[[166,1],[168,1],[51,2],[52,2],[86,3],[87,4],[88,5],[89,6],[90,7],[91,8],[92,9],[93,10],[94,11],[95,12],[96,12],[98,13],[97,14],[99,15],[100,16],[101,17],[85,18],[135,1],[102,19],[103,20],[104,21],[136,22],[105,23],[106,24],[107,25],[108,26],[109,27],[110,28],[111,29],[112,30],[113,31],[114,32],[115,32],[116,33],[117,34],[119,35],[118,36],[120,37],[121,38],[122,39],[123,40],[124,41],[125,42],[126,43],[127,44],[128,45],[129,46],[130,47],[131,48],[132,49],[133,50],[134,51],[156,52],[157,53],[138,54],[155,55],[162,56],[139,52],[159,57],[160,58],[137,1],[150,1],[141,59],[149,60],[142,59],[143,59],[144,59],[145,59],[148,59],[146,59],[147,59],[158,61],[153,62],[151,52],[152,52],[154,52],[140,52],[47,1],[48,1],[8,1],[9,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[4,1],[22,1],[49,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[46,1],[11,1],[10,1],[68,63],[75,64],[67,63],[82,65],[59,66],[58,67],[81,52],[76,68],[79,69],[61,70],[60,71],[56,72],[55,73],[78,74],[57,75],[62,76],[63,1],[66,76],[53,1],[84,77],[83,76],[70,78],[71,79],[73,80],[69,81],[72,82],[77,52],[64,83],[65,84],[74,85],[54,86],[80,87],[161,52],[167,1],[169,1],[170,1],[50,1],[165,88],[164,89],[163,90]],"exportedModulesMap":[[166,1],[168,1],[51,2],[52,2],[86,3],[87,4],[88,5],[89,6],[90,7],[91,8],[92,9],[93,10],[94,11],[95,12],[96,12],[98,13],[97,14],[99,15],[100,16],[101,17],[85,18],[135,1],[102,19],[103,20],[104,21],[136,22],[105,23],[106,24],[107,25],[108,26],[109,27],[110,28],[111,29],[112,30],[113,31],[114,32],[115,32],[116,33],[117,34],[119,35],[118,36],[120,37],[121,38],[122,39],[123,40],[124,41],[125,42],[126,43],[127,44],[128,45],[129,46],[130,47],[131,48],[132,49],[133,50],[134,51],[156,52],[157,53],[138,54],[155,55],[162,56],[139,52],[159,57],[160,58],[137,1],[150,1],[141,59],[149,60],[142,59],[143,59],[144,59],[145,59],[148,59],[146,59],[147,59],[158,61],[153,62],[151,52],[152,52],[154,52],[140,52],[47,1],[48,1],[8,1],[9,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[4,1],[22,1],[49,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[46,1],[11,1],[10,1],[68,63],[75,64],[67,63],[82,65],[59,66],[58,67],[81,52],[76,68],[79,69],[61,70],[60,71],[56,72],[55,73],[78,74],[57,75],[62,76],[63,1],[66,76],[53,1],[84,77],[83,76],[70,78],[71,79],[73,80],[69,81],[72,82],[77,52],[64,83],[65,84],[74,85],[54,86],[80,87],[161,52],[167,1],[169,1],[170,1],[165,88],[164,91],[163,92]],"semanticDiagnosticsPerFile":[166,168,51,52,86,87,88,89,90,91,92,93,94,95,96,98,97,99,100,101,85,135,102,103,104,136,105,106,107,108,109,110,111,112,113,114,115,116,117,119,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,156,157,138,155,162,139,159,160,137,150,141,149,142,143,144,145,148,146,147,158,153,151,152,154,140,47,48,8,9,13,12,2,14,15,16,17,18,19,20,21,3,4,22,49,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,1,46,11,10,68,75,67,82,59,58,81,76,79,61,60,56,55,78,57,62,63,66,53,84,83,70,71,73,69,72,77,64,65,74,54,80,161,167,169,170,50,165,164,163],"latestChangedDtsFile":"./dist/index.d.ts"},"version":"5.2.2"}