@witnet/sdk 1.0.0-beta.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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/package.json +72 -0
- package/dist/src/bin/helpers.d.ts +91 -0
- package/dist/src/bin/helpers.d.ts.map +1 -0
- package/dist/src/bin/helpers.js +816 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +47 -0
- package/dist/src/lib/crypto/account.d.ts +32 -0
- package/dist/src/lib/crypto/account.d.ts.map +1 -0
- package/dist/src/lib/crypto/account.js +106 -0
- package/dist/src/lib/crypto/coinbase.d.ts +10 -0
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/src/lib/crypto/coinbase.js +28 -0
- package/dist/src/lib/crypto/index.d.ts +8 -0
- package/dist/src/lib/crypto/index.d.ts.map +1 -0
- package/dist/src/lib/crypto/index.js +30 -0
- package/dist/src/lib/crypto/interfaces.d.ts +85 -0
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/src/lib/crypto/interfaces.js +3 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
- package/dist/src/lib/crypto/payloads.d.ts +57 -0
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads.js +170 -0
- package/dist/src/lib/crypto/signer.d.ts +33 -0
- package/dist/src/lib/crypto/signer.d.ts.map +1 -0
- package/dist/src/lib/crypto/signer.js +194 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
- package/dist/src/lib/crypto/transmitters.d.ts +47 -0
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters.js +416 -0
- package/dist/src/lib/crypto/types.d.ts +161 -0
- package/dist/src/lib/crypto/types.d.ts.map +1 -0
- package/dist/src/lib/crypto/types.js +273 -0
- package/dist/src/lib/crypto/utils.d.ts +21 -0
- package/dist/src/lib/crypto/utils.d.ts.map +1 -0
- package/dist/src/lib/crypto/utils.js +156 -0
- package/dist/src/lib/crypto/wallet.d.ts +120 -0
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/src/lib/crypto/wallet.js +258 -0
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +44 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/eth.js +272 -0
- package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/index.js +39 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/wit.js +35 -0
- package/dist/src/lib/radon/filters.d.ts +14 -0
- package/dist/src/lib/radon/filters.d.ts.map +1 -0
- package/dist/src/lib/radon/filters.js +45 -0
- package/dist/src/lib/radon/index.d.ts +296 -0
- package/dist/src/lib/radon/index.d.ts.map +1 -0
- package/dist/src/lib/radon/index.js +707 -0
- package/dist/src/lib/radon/reducers.d.ts +29 -0
- package/dist/src/lib/radon/reducers.d.ts.map +1 -0
- package/dist/src/lib/radon/reducers.js +66 -0
- package/dist/src/lib/radon/types.d.ts +521 -0
- package/dist/src/lib/radon/types.d.ts.map +1 -0
- package/dist/src/lib/radon/types.js +936 -0
- package/dist/src/lib/radon/utils.d.ts +53 -0
- package/dist/src/lib/radon/utils.d.ts.map +1 -0
- package/dist/src/lib/radon/utils.js +153 -0
- package/dist/src/lib/rpc/index.d.ts +3 -0
- package/dist/src/lib/rpc/index.d.ts.map +1 -0
- package/dist/src/lib/rpc/index.js +19 -0
- package/dist/src/lib/rpc/nodes.d.ts +40 -0
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/src/lib/rpc/nodes.js +293 -0
- package/dist/src/lib/rpc/provider.d.ts +88 -0
- package/dist/src/lib/rpc/provider.d.ts.map +1 -0
- package/dist/src/lib/rpc/provider.js +336 -0
- package/dist/src/lib/rpc/reporter.d.ts +18 -0
- package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/src/lib/rpc/reporter.js +30 -0
- package/dist/src/lib/rpc/types.d.ts +409 -0
- package/dist/src/lib/rpc/types.d.ts.map +1 -0
- package/dist/src/lib/rpc/types.js +81 -0
- package/dist/src/lib/types.d.ts +18 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +7 -0
- package/dist/src/lib/utils.d.ts +13 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +97 -0
- package/dist/witnet/assets/index.d.ts +30 -0
- package/dist/witnet/assets/index.d.ts.map +1 -0
- package/dist/witnet/assets/index.js +6 -0
- package/dist/witnet/assets/modals/index.d.ts +18 -0
- package/dist/witnet/assets/modals/index.d.ts.map +1 -0
- package/dist/witnet/assets/modals/index.js +21 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.js +26 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.js +20 -0
- package/dist/witnet/assets/requests.d.ts +11 -0
- package/dist/witnet/assets/requests.d.ts.map +1 -0
- package/dist/witnet/assets/requests.js +88 -0
- package/dist/witnet/witnet.proto.json +1325 -0
- package/package.json +72 -0
- package/src/bin/cli/history.js +31 -0
- package/src/bin/cli/inspect.js +359 -0
- package/src/bin/cli/network.js +592 -0
- package/src/bin/cli/nodes.js +364 -0
- package/src/bin/cli/radon.js +814 -0
- package/src/bin/cli/wallet.js +1000 -0
- package/src/bin/helpers.js +829 -0
- package/src/bin/postinstall.js +9 -0
- package/src/bin/toolkit.js +294 -0
- package/witnet/assets/_index.js +8 -0
- package/witnet/assets/_requests.js +25 -0
- package/witnet/assets/_sources.js +36 -0
- package/witnet/assets/_templates.js +36 -0
- package/witnet/assets/index.js +4 -0
- package/witnet/assets/modals/index.js +25 -0
- package/witnet/assets/modals/web3/btc.js +0 -0
- package/witnet/assets/modals/web3/eth.js +29 -0
- package/witnet/assets/modals/web3/sol.js +0 -0
- package/witnet/assets/modals/web3/wit.js +23 -0
- package/witnet/assets/requests.js +94 -0
- package/witnet/witnet.proto.json +1325 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.Radon = void 0;
|
|
40
|
+
__exportStar(require("./crypto"), exports);
|
|
41
|
+
exports.Radon = __importStar(require("./radon"));
|
|
42
|
+
__exportStar(require("./rpc"), exports);
|
|
43
|
+
__exportStar(require("./types"), exports);
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF3QjtBQUN4QixpREFBZ0M7QUFDaEMsd0NBQXFCO0FBQ3JCLDBDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NyeXB0b1wiXHJcbmV4cG9ydCAqIGFzIFJhZG9uIGZyb20gXCIuL3JhZG9uXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vcnBjXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIlxyXG4iXX0=
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { BlockNumber, Bytes, Bytes32, HexString, HexStringOfLength, Wildcard } from ".";
|
|
2
|
+
export type EthAddress = HexStringOfLength<40>;
|
|
3
|
+
export type EthBlockHead = BlockNumber | EthBlockTag | Wildcard;
|
|
4
|
+
export type EthBlockTag = "latest" | "earliest" | "pending" | "finalized";
|
|
5
|
+
/**
|
|
6
|
+
* Retrieve the number of most recent block.
|
|
7
|
+
*/
|
|
8
|
+
export declare const blockNumber: () => {
|
|
9
|
+
method: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Invoke message call immediately without creating a transaction
|
|
13
|
+
* on the remote block chain. Often used for executing read-only smart contract
|
|
14
|
+
* functions, for example the balanceOf for an ERC-20 contract.
|
|
15
|
+
* @param tx The transaction call object.
|
|
16
|
+
*/
|
|
17
|
+
export declare const call: (tx: {
|
|
18
|
+
from?: EthAddress | Wildcard;
|
|
19
|
+
to: EthAddress | Wildcard;
|
|
20
|
+
gas?: number | HexString | Wildcard;
|
|
21
|
+
gasPrice?: number | HexString | Wildcard;
|
|
22
|
+
value?: number | HexString | Wildcard;
|
|
23
|
+
data?: HexString | Wildcard;
|
|
24
|
+
}) => {
|
|
25
|
+
method: string;
|
|
26
|
+
params: {
|
|
27
|
+
from?: EthAddress | Wildcard;
|
|
28
|
+
to: EthAddress | Wildcard;
|
|
29
|
+
gas?: number | HexString | Wildcard;
|
|
30
|
+
gasPrice?: number | HexString | Wildcard;
|
|
31
|
+
value?: number | HexString | Wildcard;
|
|
32
|
+
data?: HexString | Wildcard;
|
|
33
|
+
}[];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Generates and returns an estimate of how much gas is necessary
|
|
37
|
+
* to allow the transaction to complete. The transaction will not be
|
|
38
|
+
* added to the blockchain. Note that the estimate may be significantly
|
|
39
|
+
* more than the amount of gas actually used by the transaction, for a
|
|
40
|
+
* variety of reasons including EVM mechanics and node performance.
|
|
41
|
+
* @param tx The transaction call object.
|
|
42
|
+
*/
|
|
43
|
+
export declare const estimateGas: (tx: {
|
|
44
|
+
from?: EthAddress | Wildcard;
|
|
45
|
+
to: EthAddress | Wildcard;
|
|
46
|
+
gas?: number | HexString | Wildcard;
|
|
47
|
+
gasPrice?: number | HexString | Wildcard;
|
|
48
|
+
value?: number | HexString | Wildcard;
|
|
49
|
+
data?: HexString | Wildcard;
|
|
50
|
+
}) => {
|
|
51
|
+
method: string;
|
|
52
|
+
params: {
|
|
53
|
+
from?: EthAddress | Wildcard;
|
|
54
|
+
to: EthAddress | Wildcard;
|
|
55
|
+
gas?: number | HexString | Wildcard;
|
|
56
|
+
gasPrice?: number | HexString | Wildcard;
|
|
57
|
+
value?: number | HexString | Wildcard;
|
|
58
|
+
data?: HexString | Wildcard;
|
|
59
|
+
}[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Retrieve the balance of the account of given address.
|
|
63
|
+
* @param address Web3 address on remote EVM chain.
|
|
64
|
+
*/
|
|
65
|
+
export declare const getBalance: (address: EthAddress | Wildcard, block?: EthBlockHead | Wildcard) => {
|
|
66
|
+
method: string;
|
|
67
|
+
params: (string | number | undefined)[];
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Retrieve code at a given address.
|
|
71
|
+
* @param address EthAddress from where to get the code.
|
|
72
|
+
*/
|
|
73
|
+
export declare const getCode: (address: EthAddress | Wildcard) => {
|
|
74
|
+
method: string;
|
|
75
|
+
params: (string | EthAddress)[];
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Retrieve an array of all logs matching a given filter object.
|
|
79
|
+
* @param filter The filter options.
|
|
80
|
+
*/
|
|
81
|
+
export declare const getLogs: (filter: {
|
|
82
|
+
fromBlock?: EthBlockHead;
|
|
83
|
+
toBlock?: EthBlockHead;
|
|
84
|
+
address?: EthAddress | EthAddress[] | Wildcard;
|
|
85
|
+
topics?: Bytes32[];
|
|
86
|
+
blockHash?: Bytes32 | Wildcard;
|
|
87
|
+
}) => {
|
|
88
|
+
method: string;
|
|
89
|
+
params: {
|
|
90
|
+
fromBlock?: EthBlockHead;
|
|
91
|
+
toBlock?: EthBlockHead;
|
|
92
|
+
address?: EthAddress | EthAddress[] | Wildcard;
|
|
93
|
+
topics?: Bytes32[];
|
|
94
|
+
blockHash?: Bytes32 | Wildcard;
|
|
95
|
+
}[];
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Retrieve an estimate of the current price per gas in wei.
|
|
99
|
+
*/
|
|
100
|
+
export declare const gasPrice: () => {
|
|
101
|
+
method: string;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Retrieve the value from a storage position at a given address.
|
|
105
|
+
* @param address EthAddress of the storage.
|
|
106
|
+
* @param offset Offset within storage address.
|
|
107
|
+
*/
|
|
108
|
+
export declare const getStorageAt: (address: EthAddress | Wildcard, offset: Bytes32 | Wildcard) => {
|
|
109
|
+
method: string;
|
|
110
|
+
params: string[];
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Retrieve the information about a remote transaction given a block hash and a transaction index.
|
|
114
|
+
* @param txHash Hash of the remote transaction.
|
|
115
|
+
*/
|
|
116
|
+
export declare const getTransactionByBlockHashAndIndex: (blockHash: Bytes32 | Wildcard, txIndex: number | Bytes32 | Wildcard) => {
|
|
117
|
+
method: string;
|
|
118
|
+
params: (string | number)[];
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Retrieve the information about a remote transaction given a block number and a transaction index.
|
|
122
|
+
* @param txHash Hash of the remote transaction.
|
|
123
|
+
*/
|
|
124
|
+
export declare const getTransactionByBlockNumberAndIndex: (blockNumber: EthBlockHead, txIndex: number | Bytes32 | Wildcard) => {
|
|
125
|
+
method: string;
|
|
126
|
+
params: EthBlockHead[];
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Retrieve the information about a remote transaction given its transaction hash.
|
|
130
|
+
* @param txHash Hash of the remote transaction.
|
|
131
|
+
*/
|
|
132
|
+
export declare const getTransactionByHash: (txHash: Bytes32 | Wildcard) => {
|
|
133
|
+
method: string;
|
|
134
|
+
params: (string | Bytes32)[];
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Retrieve the number of transactions sent from an address.
|
|
138
|
+
* @param address EthAddress from where to get transaction count.
|
|
139
|
+
*/
|
|
140
|
+
export declare const getTransactionCount: (address: EthAddress | Wildcard) => {
|
|
141
|
+
method: string;
|
|
142
|
+
params: (string | EthAddress)[];
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Retrieve the receipt of a remote transaction given its transaction hash.
|
|
146
|
+
* @param txHash Hash of the remote transaction.
|
|
147
|
+
*/
|
|
148
|
+
export declare const getTransactionReceipt: (txHash: Bytes32 | Wildcard) => {
|
|
149
|
+
method: string;
|
|
150
|
+
params: (string | Bytes32)[];
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Invoke remote call transaction, or remote contract creation.
|
|
154
|
+
* @param data The signed transaction data.
|
|
155
|
+
*/
|
|
156
|
+
export declare const sendRawTransaction: (data: Bytes | Wildcard) => {
|
|
157
|
+
method: string;
|
|
158
|
+
params: (string | HexString)[];
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=eth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eth.d.ts","sourceRoot":"","sources":["../../../../../src/lib/radon/ccdr/eth.ts"],"names":[],"mappings":"AAOA,OAAO,EAEH,WAAW,EACX,KAAK,EACL,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACX,MAAM,GAAG,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAA;AAWzE;;GAEG;AACH,eAAO,MAAM,WAAW;;CAAwC,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,OAAQ;IACrB,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC7B,EAAE,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,IAAI,CAAC,EAAE,SAAS,GAAI,QAAQ,CAAA;CAC/B;;;eANU,UAAU,GAAG,QAAQ;YACxB,UAAU,GAAG,QAAQ;cACnB,MAAM,GAAG,SAAS,GAAG,QAAQ;mBACxB,MAAM,GAAG,SAAS,GAAG,QAAQ;gBAChC,MAAM,GAAG,SAAS,GAAG,QAAQ;eAC9B,SAAS,GAAI,QAAQ;;CAsB/B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,OAAQ;IAC5B,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC7B,EAAE,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;CAC9B;;;eANU,UAAU,GAAG,QAAQ;YACxB,UAAU,GAAG,QAAQ;cACnB,MAAM,GAAG,SAAS,GAAG,QAAQ;mBACxB,MAAM,GAAG,SAAS,GAAG,QAAQ;gBAChC,MAAM,GAAG,SAAS,GAAG,QAAQ;eAC9B,SAAS,GAAG,QAAQ;;CAsB9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAa,UAAU,GAAG,QAAQ,UAAU,YAAY,GAAG,QAAQ;;;CASzF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,YAAa,UAAU,GAAG,QAAQ;;;CASrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,WAAY;IAC5B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAClC;;;oBALe,YAAY;kBACd,YAAY;kBACZ,UAAU,GAAG,UAAU,EAAE,GAAG,QAAQ;iBACrC,OAAO,EAAE;oBACN,OAAO,GAAG,QAAQ;;CAkCjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ;;CAAqC,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,YAAY,YAAa,UAAU,GAAG,QAAQ,UAAU,OAAO,GAAG,QAAQ;;;CAYtF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iCAAiC,cAAe,OAAO,GAAG,QAAQ,WAAW,MAAM,GAAG,OAAO,GAAG,QAAQ;;;CAYpH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,gBAC/B,YAAY,WAChB,MAAM,GAAG,OAAO,GAAG,QAAQ;;;CAiBvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,WAAY,OAAO,GAAG,QAAQ;;;CAS9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,YAAa,UAAU,GAAG,QAAQ;;;CASjE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAY,OAAO,GAAG,QAAQ;;;CAS/D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,SAAU,KAAK,GAAG,QAAQ;;;CASxD,CAAC"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendRawTransaction = exports.getTransactionReceipt = exports.getTransactionCount = exports.getTransactionByHash = exports.getTransactionByBlockNumberAndIndex = exports.getTransactionByBlockHashAndIndex = exports.getStorageAt = exports.gasPrice = exports.getLogs = exports.getCode = exports.getBalance = exports.estimateGas = exports.call = exports.blockNumber = void 0;
|
|
4
|
+
const helpers_1 = require("../../../bin/helpers");
|
|
5
|
+
function _isBlockHead(block) {
|
|
6
|
+
return (block === "latest" || block === "earliest" || block === "finalized" || block === "pending"
|
|
7
|
+
|| typeof block === 'number'
|
|
8
|
+
|| (0, helpers_1.isHexStringOfLength)(block, 32)
|
|
9
|
+
|| (0, helpers_1.isWildcard)(block));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Retrieve the number of most recent block.
|
|
13
|
+
*/
|
|
14
|
+
const blockNumber = () => ({ method: "eth_blockNumber" });
|
|
15
|
+
exports.blockNumber = blockNumber;
|
|
16
|
+
/**
|
|
17
|
+
* Invoke message call immediately without creating a transaction
|
|
18
|
+
* on the remote block chain. Often used for executing read-only smart contract
|
|
19
|
+
* functions, for example the balanceOf for an ERC-20 contract.
|
|
20
|
+
* @param tx The transaction call object.
|
|
21
|
+
*/
|
|
22
|
+
const call = (tx) => {
|
|
23
|
+
(0, helpers_1.checkRpcWildcards)(tx);
|
|
24
|
+
if (tx?.from && !(0, helpers_1.isHexStringOfLength)(tx?.from, 20) && !(0, helpers_1.isWildcard)(tx?.from)) {
|
|
25
|
+
throw new TypeError("rpc.eth.call: invalid 'from' address");
|
|
26
|
+
}
|
|
27
|
+
if (tx?.gas && !Number.isInteger(tx.gas) && !(0, helpers_1.isHexStringOfLength)(tx.gas, 32) && !(0, helpers_1.isWildcard)(tx.gas)) {
|
|
28
|
+
throw new TypeError("rpc.eth.call: invalid 'gas' value");
|
|
29
|
+
}
|
|
30
|
+
if (tx?.gasPrice && !Number.isInteger(tx.gasPrice) && !(0, helpers_1.isHexStringOfLength)(tx.gasPrice, 32) && !(0, helpers_1.isWildcard)(tx.gasPrice)) {
|
|
31
|
+
throw new TypeError("rpc.eth.call: invalid 'gasPrice' value");
|
|
32
|
+
}
|
|
33
|
+
if (tx?.value && !Number.isInteger(tx.value) && !(0, helpers_1.isHexStringOfLength)(tx.value, 32) && !(0, helpers_1.isWildcard)(tx.value)) {
|
|
34
|
+
throw new TypeError("rpc.eth.call: invalid transaction 'value'");
|
|
35
|
+
}
|
|
36
|
+
if (tx?.data && !(0, helpers_1.isHexString)(tx.data) && !(0, helpers_1.isWildcard)(tx.data)) {
|
|
37
|
+
throw new TypeError("rpc.eth.call: invalid transaction 'data'");
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
method: "eth_call",
|
|
41
|
+
params: [tx]
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
exports.call = call;
|
|
45
|
+
/**
|
|
46
|
+
* Generates and returns an estimate of how much gas is necessary
|
|
47
|
+
* to allow the transaction to complete. The transaction will not be
|
|
48
|
+
* added to the blockchain. Note that the estimate may be significantly
|
|
49
|
+
* more than the amount of gas actually used by the transaction, for a
|
|
50
|
+
* variety of reasons including EVM mechanics and node performance.
|
|
51
|
+
* @param tx The transaction call object.
|
|
52
|
+
*/
|
|
53
|
+
const estimateGas = (tx) => {
|
|
54
|
+
(0, helpers_1.checkRpcWildcards)(tx);
|
|
55
|
+
if (tx?.from && !(0, helpers_1.isHexStringOfLength)(tx?.from, 20) && !(0, helpers_1.isWildcard)(tx?.from)) {
|
|
56
|
+
throw new TypeError("rpc.eth.estimateGas: invalid 'from' address");
|
|
57
|
+
}
|
|
58
|
+
if (tx?.gas && !Number.isInteger(tx.gas) && !(0, helpers_1.isHexStringOfLength)(tx.gas, 32) && !(0, helpers_1.isWildcard)(tx.gas)) {
|
|
59
|
+
throw new TypeError("rpc.eth.estimateGas: invalid 'gas' value");
|
|
60
|
+
}
|
|
61
|
+
if (tx?.gasPrice && !Number.isInteger(tx.gasPrice) && !(0, helpers_1.isHexStringOfLength)(tx.gasPrice, 32) && !(0, helpers_1.isWildcard)(tx.gasPrice)) {
|
|
62
|
+
throw new TypeError("rpc.eth.estimateGas: invalid 'gasPrice' value");
|
|
63
|
+
}
|
|
64
|
+
if (tx?.value && !Number.isInteger(tx.value) && !(0, helpers_1.isHexStringOfLength)(tx.value, 32) && !(0, helpers_1.isWildcard)(tx.value)) {
|
|
65
|
+
throw new TypeError("rpc.eth.estimateGas: invalid transaction 'value'");
|
|
66
|
+
}
|
|
67
|
+
if (tx?.data && !(0, helpers_1.isHexString)(tx.data) && !(0, helpers_1.isWildcard)(tx.data)) {
|
|
68
|
+
throw new TypeError("rpc.eth.estimateGas: invalid transaction 'data'");
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
method: "eth_estimateGas",
|
|
72
|
+
params: [tx]
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.estimateGas = estimateGas;
|
|
76
|
+
/**
|
|
77
|
+
* Retrieve the balance of the account of given address.
|
|
78
|
+
* @param address Web3 address on remote EVM chain.
|
|
79
|
+
*/
|
|
80
|
+
const getBalance = (address, block) => {
|
|
81
|
+
(0, helpers_1.checkRpcWildcards)([address, block]);
|
|
82
|
+
if (!(0, helpers_1.isHexStringOfLength)(address, 20) && !(0, helpers_1.isWildcard)(address)) {
|
|
83
|
+
throw new TypeError("rpc.eth.getBalance: invalid Web3 address format");
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
method: "eth_getBalance",
|
|
87
|
+
params: [address, block]
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
exports.getBalance = getBalance;
|
|
91
|
+
/**
|
|
92
|
+
* Retrieve code at a given address.
|
|
93
|
+
* @param address EthAddress from where to get the code.
|
|
94
|
+
*/
|
|
95
|
+
const getCode = (address) => {
|
|
96
|
+
(0, helpers_1.checkRpcWildcards)(address);
|
|
97
|
+
if (!(0, helpers_1.isHexStringOfLength)(address, 20) && !(0, helpers_1.isWildcard)(address)) {
|
|
98
|
+
throw new TypeError("rpc.eth.getCode: invalid Web3 address format");
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
method: "eth_getCode",
|
|
102
|
+
params: [address],
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
exports.getCode = getCode;
|
|
106
|
+
/**
|
|
107
|
+
* Retrieve an array of all logs matching a given filter object.
|
|
108
|
+
* @param filter The filter options.
|
|
109
|
+
*/
|
|
110
|
+
const getLogs = (filter) => {
|
|
111
|
+
(0, helpers_1.checkRpcWildcards)(filter);
|
|
112
|
+
if (filter?.blockHash && (filter?.fromBlock || filter?.toBlock)) {
|
|
113
|
+
throw new TypeError("rpc.eth.getLogs: uncompliant use of 'blockHash'");
|
|
114
|
+
}
|
|
115
|
+
if (filter?.fromBlock) {
|
|
116
|
+
if (!_isBlockHead(filter?.fromBlock)) {
|
|
117
|
+
throw new TypeError("rpc.eth.getLogs: invalid 'fromBlock' value");
|
|
118
|
+
}
|
|
119
|
+
else if (typeof filter?.fromBlock === 'number') {
|
|
120
|
+
filter.fromBlock = `0x${(filter?.fromBlock).toString(16)}`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (filter?.toBlock) {
|
|
124
|
+
if (!_isBlockHead(filter?.toBlock)) {
|
|
125
|
+
throw new TypeError("rpc.eth.getLogs: invalid 'toBlock' value");
|
|
126
|
+
}
|
|
127
|
+
else if (typeof filter?.toBlock === 'number') {
|
|
128
|
+
filter.toBlock = `0x${(filter?.toBlock).toString(16)}`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (filter?.blockHash && !(0, helpers_1.isHexStringOfLength)(filter.blockHash, 32) && !(0, helpers_1.isWildcard)(filter.blockHash)) {
|
|
132
|
+
throw new TypeError("rpc.eth.getLogs: invalid 'blockHash' value");
|
|
133
|
+
}
|
|
134
|
+
if (filter?.topics) {
|
|
135
|
+
filter.topics.map((value, index) => {
|
|
136
|
+
if (!(0, helpers_1.isHexStringOfLength)(value, 32) && !(0, helpers_1.isWildcard)(value)) {
|
|
137
|
+
throw new TypeError(`rpc.eth.getLogs: topic #${index}: invalid hash`);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
method: "eth_getLogs",
|
|
143
|
+
params: [filter]
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
exports.getLogs = getLogs;
|
|
147
|
+
/**
|
|
148
|
+
* Retrieve an estimate of the current price per gas in wei.
|
|
149
|
+
*/
|
|
150
|
+
const gasPrice = () => ({ method: "eth_gasPrice" });
|
|
151
|
+
exports.gasPrice = gasPrice;
|
|
152
|
+
/**
|
|
153
|
+
* Retrieve the value from a storage position at a given address.
|
|
154
|
+
* @param address EthAddress of the storage.
|
|
155
|
+
* @param offset Offset within storage address.
|
|
156
|
+
*/
|
|
157
|
+
const getStorageAt = (address, offset) => {
|
|
158
|
+
(0, helpers_1.checkRpcWildcards)([address, offset]);
|
|
159
|
+
if (!(0, helpers_1.isHexStringOfLength)(address, 20) && !(0, helpers_1.isWildcard)(address)) {
|
|
160
|
+
throw new TypeError("rpc.eth.getStorageAt: invalid Web3 address format");
|
|
161
|
+
}
|
|
162
|
+
if (!(0, helpers_1.isHexStringOfLength)(offset, 32) && !(0, helpers_1.isWildcard)(offset)) {
|
|
163
|
+
throw new TypeError("rpc.eth.getStorageAt: invalid storage offset value");
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
method: "eth_getStorageAt",
|
|
167
|
+
params: [address, offset],
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
exports.getStorageAt = getStorageAt;
|
|
171
|
+
/**
|
|
172
|
+
* Retrieve the information about a remote transaction given a block hash and a transaction index.
|
|
173
|
+
* @param txHash Hash of the remote transaction.
|
|
174
|
+
*/
|
|
175
|
+
const getTransactionByBlockHashAndIndex = (blockHash, txIndex) => {
|
|
176
|
+
(0, helpers_1.checkRpcWildcards)([blockHash, txIndex]);
|
|
177
|
+
if (!(0, helpers_1.isHexStringOfLength)(blockHash, 32) && !(0, helpers_1.isWildcard)(blockHash)) {
|
|
178
|
+
throw new TypeError("rpc.eth.getTransactionByBlockHashAndIndex: invalid block hash value");
|
|
179
|
+
}
|
|
180
|
+
if (!Number.isInteger(txIndex) && !(0, helpers_1.isHexStringOfLength)(txIndex, 32) && !(0, helpers_1.isWildcard)(txIndex)) {
|
|
181
|
+
throw new TypeError("rpc.eth.getTransactionByBlockHashAndIndex: invalid transaction index value");
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
method: "eth_getTransactionByBlockHashAndIndex",
|
|
185
|
+
params: [blockHash, txIndex]
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
exports.getTransactionByBlockHashAndIndex = getTransactionByBlockHashAndIndex;
|
|
189
|
+
/**
|
|
190
|
+
* Retrieve the information about a remote transaction given a block number and a transaction index.
|
|
191
|
+
* @param txHash Hash of the remote transaction.
|
|
192
|
+
*/
|
|
193
|
+
const getTransactionByBlockNumberAndIndex = (blockNumber, txIndex) => {
|
|
194
|
+
(0, helpers_1.checkRpcWildcards)([blockNumber, txIndex]);
|
|
195
|
+
if (!_isBlockHead(blockNumber)) {
|
|
196
|
+
throw new TypeError("rpc.eth.getTransactionByBlockNumberAndIndex: invalid block number value");
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
if (typeof blockNumber === 'number') {
|
|
200
|
+
blockNumber = `0x${blockNumber.toString(16)}`;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (!Number.isInteger(txIndex) && !(0, helpers_1.isHexStringOfLength)(txIndex, 32) && !(0, helpers_1.isWildcard)(txIndex)) {
|
|
204
|
+
throw new TypeError("rpc.eth.getTransactionByBlockNumberAndIndex: invalid transaction index value");
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
method: "eth_getTransactionByBlockHashAndIndex",
|
|
208
|
+
params: [blockNumber, txIndex],
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
exports.getTransactionByBlockNumberAndIndex = getTransactionByBlockNumberAndIndex;
|
|
212
|
+
/**
|
|
213
|
+
* Retrieve the information about a remote transaction given its transaction hash.
|
|
214
|
+
* @param txHash Hash of the remote transaction.
|
|
215
|
+
*/
|
|
216
|
+
const getTransactionByHash = (txHash) => {
|
|
217
|
+
(0, helpers_1.checkRpcWildcards)(txHash);
|
|
218
|
+
if (!(0, helpers_1.isHexStringOfLength)(txHash, 32) && !(0, helpers_1.isWildcard)(txHash)) {
|
|
219
|
+
throw new TypeError("rpc.eth.getTransactionByHash: invalid transaction hash value");
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
method: "eth_getTransactionByHash",
|
|
223
|
+
params: [txHash],
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
exports.getTransactionByHash = getTransactionByHash;
|
|
227
|
+
/**
|
|
228
|
+
* Retrieve the number of transactions sent from an address.
|
|
229
|
+
* @param address EthAddress from where to get transaction count.
|
|
230
|
+
*/
|
|
231
|
+
const getTransactionCount = (address) => {
|
|
232
|
+
(0, helpers_1.checkRpcWildcards)(address);
|
|
233
|
+
if (!(0, helpers_1.isHexStringOfLength)(address, 20) && !(0, helpers_1.isWildcard)(address)) {
|
|
234
|
+
throw new TypeError("rpc.eth.getTransactionCount: invalid Web3 address format");
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
method: "eth_getTransactionCount",
|
|
238
|
+
params: [address],
|
|
239
|
+
};
|
|
240
|
+
};
|
|
241
|
+
exports.getTransactionCount = getTransactionCount;
|
|
242
|
+
/**
|
|
243
|
+
* Retrieve the receipt of a remote transaction given its transaction hash.
|
|
244
|
+
* @param txHash Hash of the remote transaction.
|
|
245
|
+
*/
|
|
246
|
+
const getTransactionReceipt = (txHash) => {
|
|
247
|
+
(0, helpers_1.checkRpcWildcards)(txHash);
|
|
248
|
+
if (!(0, helpers_1.isHexStringOfLength)(txHash, 32) && !(0, helpers_1.isWildcard)(txHash)) {
|
|
249
|
+
throw new TypeError("rpc.eth.getTransactionReceipt: invalid transaction hash value");
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
method: "eth_getTransactionReceipt",
|
|
253
|
+
params: [txHash],
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
exports.getTransactionReceipt = getTransactionReceipt;
|
|
257
|
+
/**
|
|
258
|
+
* Invoke remote call transaction, or remote contract creation.
|
|
259
|
+
* @param data The signed transaction data.
|
|
260
|
+
*/
|
|
261
|
+
const sendRawTransaction = (data) => {
|
|
262
|
+
(0, helpers_1.checkRpcWildcards)(data);
|
|
263
|
+
if (!(0, helpers_1.isHexString)(data) && !(0, helpers_1.isWildcard)(data)) {
|
|
264
|
+
throw new TypeError("rpc.eth.sendRawTransaction: invalid signed transaction data");
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
method: "eth_sendRawTransaction",
|
|
268
|
+
params: [data]
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
exports.sendRawTransaction = sendRawTransaction;
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9yYWRvbi9jY2RyL2V0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFLNkI7QUFnQjdCLFNBQVMsWUFBWSxDQUFDLEtBQW1CO0lBQ3JDLE9BQU8sQ0FDSCxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxVQUFVLElBQUksS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssU0FBUztXQUNuRixPQUFPLEtBQUssS0FBSyxRQUFRO1dBQ3pCLElBQUEsNkJBQW1CLEVBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztXQUM5QixJQUFBLG9CQUFVLEVBQUMsS0FBSyxDQUFDLENBQzNCLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQUFwRCxRQUFBLFdBQVcsZUFBeUM7QUFFakU7Ozs7O0dBS0c7QUFDSSxNQUFNLElBQUksR0FBRyxDQUFDLEVBT3BCLEVBQUUsRUFBRTtJQUNELElBQUEsMkJBQWlCLEVBQUMsRUFBRSxDQUFDLENBQUE7SUFDckIsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBQSw2QkFBbUIsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEcsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxJQUFJLEVBQUUsRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0SCxNQUFNLElBQUksU0FBUyxDQUFDLHdDQUF3QyxDQUFDLENBQUE7SUFDakUsQ0FBQztJQUNELElBQUksRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBQSw2QkFBbUIsRUFBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFHLE1BQU0sSUFBSSxTQUFTLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBQ0QsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBQSxxQkFBVyxFQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUksU0FBUyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUNELE9BQU87UUFDSCxNQUFNLEVBQUUsVUFBVTtRQUNsQixNQUFNLEVBQUUsQ0FBRSxFQUFFLENBQUU7S0FDakIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQTVCVyxRQUFBLElBQUksUUE0QmY7QUFFRjs7Ozs7OztHQU9HO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQU8zQixFQUFFLEVBQUU7SUFDRCxJQUFBLDJCQUFpQixFQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxNQUFNLElBQUksU0FBUyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSw2QkFBbUIsRUFBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xHLE1BQU0sSUFBSSxTQUFTLENBQUMsMENBQTBDLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBQ0QsSUFBSSxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEgsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFDRCxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRyxNQUFNLElBQUksU0FBUyxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUNELElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUEscUJBQVcsRUFBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFDRCxPQUFPO1FBQ0gsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixNQUFNLEVBQUUsQ0FBRSxFQUFFLENBQUU7S0FDakIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQTVCVyxRQUFBLFdBQVcsZUE0QnRCO0FBRUY7OztHQUdHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEtBQStCLEVBQUUsRUFBRTtJQUMxRixJQUFBLDJCQUFpQixFQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDbkMsSUFBSSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPO1FBQ0gsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixNQUFNLEVBQUUsQ0FBRSxPQUFPLEVBQUUsS0FBSyxDQUFFO0tBQzdCLENBQUE7QUFDTCxDQUFDLENBQUM7QUFUVyxRQUFBLFVBQVUsY0FTckI7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQThCLEVBQUUsRUFBRTtJQUN0RCxJQUFBLDJCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzFCLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVELE1BQU0sSUFBSSxTQUFTLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsT0FBTztRQUNILE1BQU0sRUFBRSxhQUFhO1FBQ3JCLE1BQU0sRUFBRSxDQUFFLE9BQU8sQ0FBRTtLQUN0QixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBVFcsUUFBQSxPQUFPLFdBU2xCO0FBRUY7OztHQUdHO0FBQ0ksTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQU12QixFQUFFLEVBQUU7SUFDRCxJQUFBLDJCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pCLElBQUksTUFBTSxFQUFFLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDOUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFDRCxJQUFJLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxTQUFTLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUN0RSxDQUFDO2FBQU0sSUFBSSxPQUFPLE1BQU0sRUFBRSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQW9CLENBQUEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQWtCLENBQUE7UUFDeEYsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxTQUFTLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUNwRSxDQUFDO2FBQU0sSUFBSSxPQUFPLE1BQU0sRUFBRSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQWtCLENBQUEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQWtCLENBQUE7UUFDcEYsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkcsTUFBTSxJQUFJLFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWMsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNoRCxJQUFJLENBQUMsSUFBQSw2QkFBbUIsRUFBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ3pFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxPQUFPO1FBQ0gsTUFBTSxFQUFFLGFBQWE7UUFDckIsTUFBTSxFQUFFLENBQUUsTUFBTSxDQUFFO0tBQ3JCLENBQUM7QUFDTixDQUFDLENBQUM7QUF2Q1csUUFBQSxPQUFPLFdBdUNsQjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQTlDLFFBQUEsUUFBUSxZQUFzQztBQUUzRDs7OztHQUlHO0FBQ0ksTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUE4QixFQUFFLE1BQTBCLEVBQUUsRUFBRTtJQUN2RixJQUFBLDJCQUFpQixFQUFDLENBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBRSxDQUFDLENBQUE7SUFDdEMsSUFBSSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBQSw2QkFBbUIsRUFBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksU0FBUyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU87UUFDSCxNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE1BQU0sRUFBRSxDQUFFLE9BQU8sRUFBRSxNQUFNLENBQUU7S0FDOUIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQVpXLFFBQUEsWUFBWSxnQkFZdkI7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLGlDQUFpQyxHQUFHLENBQUMsU0FBNkIsRUFBRSxPQUFvQyxFQUFFLEVBQUU7SUFDckgsSUFBQSwyQkFBaUIsRUFBQyxDQUFFLFNBQVMsRUFBRSxPQUFPLENBQUUsQ0FBQyxDQUFBO0lBQ3pDLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxTQUFTLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sSUFBSSxTQUFTLENBQUMsNEVBQTRFLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBQ0QsT0FBTztRQUNILE1BQU0sRUFBRSx1Q0FBdUM7UUFDL0MsTUFBTSxFQUFFLENBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBRTtLQUNqQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBWlcsUUFBQSxpQ0FBaUMscUNBWTVDO0FBRUY7OztHQUdHO0FBQ0ksTUFBTSxtQ0FBbUMsR0FBRyxDQUMvQyxXQUF5QixFQUN6QixPQUFvQyxFQUN0QyxFQUFFO0lBQ0EsSUFBQSwyQkFBaUIsRUFBQyxDQUFFLFdBQVcsRUFBRSxPQUFPLENBQUUsQ0FBQyxDQUFBO0lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksU0FBUyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7SUFDbkcsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLFdBQVcsR0FBRyxLQUFNLFdBQXNCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFrQixDQUFBO1FBQzdFLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sSUFBSSxTQUFTLENBQUMsOEVBQThFLENBQUMsQ0FBQTtJQUN2RyxDQUFDO0lBQ0QsT0FBTztRQUNILE1BQU0sRUFBRSx1Q0FBdUM7UUFDL0MsTUFBTSxFQUFFLENBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBRTtLQUNuQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBbkJXLFFBQUEsbUNBQW1DLHVDQW1COUM7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO0lBQy9ELElBQUEsMkJBQWlCLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDekIsSUFBSSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxPQUFPO1FBQ0gsTUFBTSxFQUFFLDBCQUEwQjtRQUNsQyxNQUFNLEVBQUUsQ0FBRSxNQUFNLENBQUU7S0FDckIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQVRXLFFBQUEsb0JBQW9CLHdCQVMvQjtBQUVGOzs7R0FHRztBQUNJLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDbEUsSUFBQSwyQkFBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQTtJQUMxQixJQUFJLENBQUMsSUFBQSw2QkFBbUIsRUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUksU0FBUyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUNELE9BQU87UUFDSCxNQUFNLEVBQUUseUJBQXlCO1FBQ2pDLE1BQU0sRUFBRSxDQUFFLE9BQU8sQ0FBRTtLQUN0QixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBVFcsUUFBQSxtQkFBbUIsdUJBUzlCO0FBRUY7OztHQUdHO0FBQ0ksTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtJQUNoRSxJQUFBLDJCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pCLElBQUksQ0FBQyxJQUFBLDZCQUFtQixFQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFELE1BQU0sSUFBSSxTQUFTLENBQUMsK0RBQStELENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0QsT0FBTztRQUNILE1BQU0sRUFBRSwyQkFBMkI7UUFDbkMsTUFBTSxFQUFFLENBQUUsTUFBTSxDQUFFO0tBQ3JCLENBQUM7QUFDTixDQUFDLENBQUM7QUFUVyxRQUFBLHFCQUFxQix5QkFTaEM7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO0lBQ3pELElBQUEsMkJBQWlCLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkIsSUFBSSxDQUFDLElBQUEscUJBQVcsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxTQUFTLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsT0FBTztRQUNILE1BQU0sRUFBRSx3QkFBd0I7UUFDaEMsTUFBTSxFQUFFLENBQUUsSUFBSSxDQUFFO0tBQ25CLENBQUM7QUFDTixDQUFDLENBQUM7QUFUVyxRQUFBLGtCQUFrQixzQkFTN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgY2hlY2tScGNXaWxkY2FyZHMsXHJcbiAgICBpc0hleFN0cmluZyxcclxuICAgIGlzSGV4U3RyaW5nT2ZMZW5ndGgsXHJcbiAgICBpc1dpbGRjYXJkLFxyXG59IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBcclxuICAgIC8vIENyb3NzQ2hhaW5SUEMsIFxyXG4gICAgQmxvY2tOdW1iZXIsIFxyXG4gICAgQnl0ZXMsIFxyXG4gICAgQnl0ZXMzMiwgXHJcbiAgICBIZXhTdHJpbmcsXHJcbiAgICBIZXhTdHJpbmdPZkxlbmd0aCxcclxuICAgIFdpbGRjYXJkLFxyXG59IGZyb20gXCIuXCI7XHJcblxyXG5leHBvcnQgdHlwZSBFdGhBZGRyZXNzID0gSGV4U3RyaW5nT2ZMZW5ndGg8NDA+O1xyXG5leHBvcnQgdHlwZSBFdGhCbG9ja0hlYWQgPSBCbG9ja051bWJlciB8IEV0aEJsb2NrVGFnIHwgV2lsZGNhcmQ7XHJcbmV4cG9ydCB0eXBlIEV0aEJsb2NrVGFnID0gXCJsYXRlc3RcIiB8IFwiZWFybGllc3RcIiB8IFwicGVuZGluZ1wiIHwgXCJmaW5hbGl6ZWRcIiBcclxuXHJcbmZ1bmN0aW9uIF9pc0Jsb2NrSGVhZChibG9jazogRXRoQmxvY2tIZWFkKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIGJsb2NrID09PSBcImxhdGVzdFwiIHx8IGJsb2NrID09PSBcImVhcmxpZXN0XCIgfHwgYmxvY2sgPT09IFwiZmluYWxpemVkXCIgfHwgYmxvY2sgPT09IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgIHx8IHR5cGVvZiBibG9jayA9PT0gJ251bWJlcidcclxuICAgICAgICAgICAgfHwgaXNIZXhTdHJpbmdPZkxlbmd0aChibG9jaywgMzIpXHJcbiAgICAgICAgICAgIHx8IGlzV2lsZGNhcmQoYmxvY2spXHJcbiAgICApO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIG51bWJlciBvZiBtb3N0IHJlY2VudCBibG9jay5cclxuICovIFxyXG5leHBvcnQgY29uc3QgYmxvY2tOdW1iZXIgPSAoKSA9PiAoeyBtZXRob2Q6IFwiZXRoX2Jsb2NrTnVtYmVyXCIgfSk7XHJcblxyXG4vKipcclxuICogSW52b2tlIG1lc3NhZ2UgY2FsbCBpbW1lZGlhdGVseSB3aXRob3V0IGNyZWF0aW5nIGEgdHJhbnNhY3Rpb24gXHJcbiAqIG9uIHRoZSByZW1vdGUgYmxvY2sgY2hhaW4uIE9mdGVuIHVzZWQgZm9yIGV4ZWN1dGluZyByZWFkLW9ubHkgc21hcnQgY29udHJhY3QgXHJcbiAqIGZ1bmN0aW9ucywgZm9yIGV4YW1wbGUgdGhlIGJhbGFuY2VPZiBmb3IgYW4gRVJDLTIwIGNvbnRyYWN0LlxyXG4gKiBAcGFyYW0gdHggVGhlIHRyYW5zYWN0aW9uIGNhbGwgb2JqZWN0LlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNhbGwgPSAodHg6IHtcclxuICAgIGZyb20/OiBFdGhBZGRyZXNzIHwgV2lsZGNhcmQsXHJcbiAgICB0bzogRXRoQWRkcmVzcyB8IFdpbGRjYXJkLFxyXG4gICAgZ2FzPzogbnVtYmVyIHwgSGV4U3RyaW5nIHwgV2lsZGNhcmQsXHJcbiAgICBnYXNQcmljZT86IG51bWJlciB8IEhleFN0cmluZyB8IFdpbGRjYXJkLFxyXG4gICAgdmFsdWU/OiBudW1iZXIgfCBIZXhTdHJpbmcgfCBXaWxkY2FyZCxcclxuICAgIGRhdGE/OiBIZXhTdHJpbmcgIHwgV2lsZGNhcmRcclxufSkgPT4ge1xyXG4gICAgY2hlY2tScGNXaWxkY2FyZHModHgpXHJcbiAgICBpZiAodHg/LmZyb20gJiYgIWlzSGV4U3RyaW5nT2ZMZW5ndGgodHg/LmZyb20sIDIwKSAmJiAhaXNXaWxkY2FyZCh0eD8uZnJvbSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5jYWxsOiBpbnZhbGlkICdmcm9tJyBhZGRyZXNzXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR4Py5nYXMgJiYgIU51bWJlci5pc0ludGVnZXIodHguZ2FzKSAmJiAhaXNIZXhTdHJpbmdPZkxlbmd0aCh0eC5nYXMsIDMyKSAmJiAhaXNXaWxkY2FyZCh0eC5nYXMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguY2FsbDogaW52YWxpZCAnZ2FzJyB2YWx1ZVwiKVxyXG4gICAgfVxyXG4gICAgaWYgKHR4Py5nYXNQcmljZSAmJiAhTnVtYmVyLmlzSW50ZWdlcih0eC5nYXNQcmljZSkgJiYgIWlzSGV4U3RyaW5nT2ZMZW5ndGgodHguZ2FzUHJpY2UsIDMyKSAmJiAhaXNXaWxkY2FyZCh0eC5nYXNQcmljZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5jYWxsOiBpbnZhbGlkICdnYXNQcmljZScgdmFsdWVcIilcclxuICAgIH1cclxuICAgIGlmICh0eD8udmFsdWUgJiYgIU51bWJlci5pc0ludGVnZXIodHgudmFsdWUpICYmICFpc0hleFN0cmluZ09mTGVuZ3RoKHR4LnZhbHVlLCAzMikgJiYgIWlzV2lsZGNhcmQodHgudmFsdWUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguY2FsbDogaW52YWxpZCB0cmFuc2FjdGlvbiAndmFsdWUnXCIpXHJcbiAgICB9XHJcbiAgICBpZiAodHg/LmRhdGEgJiYgIWlzSGV4U3RyaW5nKHR4LmRhdGEpICYmICFpc1dpbGRjYXJkKHR4LmRhdGEpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguY2FsbDogaW52YWxpZCB0cmFuc2FjdGlvbiAnZGF0YSdcIilcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWV0aG9kOiBcImV0aF9jYWxsXCIsIFxyXG4gICAgICAgIHBhcmFtczogWyB0eCBdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhbmQgcmV0dXJucyBhbiBlc3RpbWF0ZSBvZiBob3cgbXVjaCBnYXMgaXMgbmVjZXNzYXJ5IFxyXG4gKiB0byBhbGxvdyB0aGUgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUuIFRoZSB0cmFuc2FjdGlvbiB3aWxsIG5vdCBiZSBcclxuICogYWRkZWQgdG8gdGhlIGJsb2NrY2hhaW4uIE5vdGUgdGhhdCB0aGUgZXN0aW1hdGUgbWF5IGJlIHNpZ25pZmljYW50bHkgXHJcbiAqIG1vcmUgdGhhbiB0aGUgYW1vdW50IG9mIGdhcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSB0cmFuc2FjdGlvbiwgZm9yIGEgXHJcbiAqIHZhcmlldHkgb2YgcmVhc29ucyBpbmNsdWRpbmcgRVZNIG1lY2hhbmljcyBhbmQgbm9kZSBwZXJmb3JtYW5jZS5cclxuICogQHBhcmFtIHR4IFRoZSB0cmFuc2FjdGlvbiBjYWxsIG9iamVjdC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBlc3RpbWF0ZUdhcyA9ICh0eDoge1xyXG4gICAgZnJvbT86IEV0aEFkZHJlc3MgfCBXaWxkY2FyZCxcclxuICAgIHRvOiBFdGhBZGRyZXNzIHwgV2lsZGNhcmQsXHJcbiAgICBnYXM/OiBudW1iZXIgfCBIZXhTdHJpbmcgfCBXaWxkY2FyZCxcclxuICAgIGdhc1ByaWNlPzogbnVtYmVyIHwgSGV4U3RyaW5nIHwgV2lsZGNhcmQsXHJcbiAgICB2YWx1ZT86IG51bWJlciB8IEhleFN0cmluZyB8IFdpbGRjYXJkLFxyXG4gICAgZGF0YT86IEhleFN0cmluZyB8IFdpbGRjYXJkXHJcbn0pID0+IHtcclxuICAgIGNoZWNrUnBjV2lsZGNhcmRzKHR4KVxyXG4gICAgaWYgKHR4Py5mcm9tICYmICFpc0hleFN0cmluZ09mTGVuZ3RoKHR4Py5mcm9tLCAyMCkgJiYgIWlzV2lsZGNhcmQodHg/LmZyb20pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguZXN0aW1hdGVHYXM6IGludmFsaWQgJ2Zyb20nIGFkZHJlc3NcIik7XHJcbiAgICB9XHJcbiAgICBpZiAodHg/LmdhcyAmJiAhTnVtYmVyLmlzSW50ZWdlcih0eC5nYXMpICYmICFpc0hleFN0cmluZ09mTGVuZ3RoKHR4LmdhcywgMzIpICYmICFpc1dpbGRjYXJkKHR4LmdhcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5lc3RpbWF0ZUdhczogaW52YWxpZCAnZ2FzJyB2YWx1ZVwiKVxyXG4gICAgfVxyXG4gICAgaWYgKHR4Py5nYXNQcmljZSAmJiAhTnVtYmVyLmlzSW50ZWdlcih0eC5nYXNQcmljZSkgJiYgIWlzSGV4U3RyaW5nT2ZMZW5ndGgodHguZ2FzUHJpY2UsIDMyKSAmJiAhaXNXaWxkY2FyZCh0eC5nYXNQcmljZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5lc3RpbWF0ZUdhczogaW52YWxpZCAnZ2FzUHJpY2UnIHZhbHVlXCIpXHJcbiAgICB9XHJcbiAgICBpZiAodHg/LnZhbHVlICYmICFOdW1iZXIuaXNJbnRlZ2VyKHR4LnZhbHVlKSAmJiAhaXNIZXhTdHJpbmdPZkxlbmd0aCh0eC52YWx1ZSwgMzIpICYmICFpc1dpbGRjYXJkKHR4LnZhbHVlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmVzdGltYXRlR2FzOiBpbnZhbGlkIHRyYW5zYWN0aW9uICd2YWx1ZSdcIilcclxuICAgIH1cclxuICAgIGlmICh0eD8uZGF0YSAmJiAhaXNIZXhTdHJpbmcodHguZGF0YSkgJiYgIWlzV2lsZGNhcmQodHguZGF0YSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5lc3RpbWF0ZUdhczogaW52YWxpZCB0cmFuc2FjdGlvbiAnZGF0YSdcIilcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWV0aG9kOiBcImV0aF9lc3RpbWF0ZUdhc1wiLCBcclxuICAgICAgICBwYXJhbXM6IFsgdHggXVxyXG4gICAgfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYmFsYW5jZSBvZiB0aGUgYWNjb3VudCBvZiBnaXZlbiBhZGRyZXNzLlxyXG4gKiBAcGFyYW0gYWRkcmVzcyBXZWIzIGFkZHJlc3Mgb24gcmVtb3RlIEVWTSBjaGFpbi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRCYWxhbmNlID0gKGFkZHJlc3M6IEV0aEFkZHJlc3MgfCBXaWxkY2FyZCwgYmxvY2s/OiBFdGhCbG9ja0hlYWQgfCBXaWxkY2FyZCkgPT4ge1xyXG4gICAgY2hlY2tScGNXaWxkY2FyZHMoW2FkZHJlc3MsIGJsb2NrXSlcclxuICAgIGlmICghaXNIZXhTdHJpbmdPZkxlbmd0aChhZGRyZXNzLCAyMCkgJiYgIWlzV2lsZGNhcmQoYWRkcmVzcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5nZXRCYWxhbmNlOiBpbnZhbGlkIFdlYjMgYWRkcmVzcyBmb3JtYXRcIik7XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZXRob2Q6IFwiZXRoX2dldEJhbGFuY2VcIiwgXHJcbiAgICAgICAgcGFyYW1zOiBbIGFkZHJlc3MsIGJsb2NrIF1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSBjb2RlIGF0IGEgZ2l2ZW4gYWRkcmVzcy5cclxuICogQHBhcmFtIGFkZHJlc3MgRXRoQWRkcmVzcyBmcm9tIHdoZXJlIHRvIGdldCB0aGUgY29kZS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRDb2RlID0gKGFkZHJlc3M6IEV0aEFkZHJlc3MgfCBXaWxkY2FyZCkgPT4ge1xyXG4gICAgY2hlY2tScGNXaWxkY2FyZHMoYWRkcmVzcylcclxuICAgIGlmICghaXNIZXhTdHJpbmdPZkxlbmd0aChhZGRyZXNzLCAyMCkgJiYgIWlzV2lsZGNhcmQoYWRkcmVzcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5nZXRDb2RlOiBpbnZhbGlkIFdlYjMgYWRkcmVzcyBmb3JtYXRcIik7XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZXRob2Q6IFwiZXRoX2dldENvZGVcIiwgXHJcbiAgICAgICAgcGFyYW1zOiBbIGFkZHJlc3MgXSxcclxuICAgIH07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0cmlldmUgYW4gYXJyYXkgb2YgYWxsIGxvZ3MgbWF0Y2hpbmcgYSBnaXZlbiBmaWx0ZXIgb2JqZWN0LlxyXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgb3B0aW9ucy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRMb2dzID0gKGZpbHRlcjoge1xyXG4gICAgZnJvbUJsb2NrPzogRXRoQmxvY2tIZWFkLFxyXG4gICAgdG9CbG9jaz86IEV0aEJsb2NrSGVhZCxcclxuICAgIGFkZHJlc3M/OiBFdGhBZGRyZXNzIHwgRXRoQWRkcmVzc1tdIHwgV2lsZGNhcmQsXHJcbiAgICB0b3BpY3M/OiBCeXRlczMyW10sXHJcbiAgICBibG9ja0hhc2g/OiBCeXRlczMyIHwgV2lsZGNhcmQsXHJcbn0pID0+IHtcclxuICAgIGNoZWNrUnBjV2lsZGNhcmRzKGZpbHRlcilcclxuICAgIGlmIChmaWx0ZXI/LmJsb2NrSGFzaCAmJiAoZmlsdGVyPy5mcm9tQmxvY2sgfHwgZmlsdGVyPy50b0Jsb2NrKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmdldExvZ3M6IHVuY29tcGxpYW50IHVzZSBvZiAnYmxvY2tIYXNoJ1wiKVxyXG4gICAgfVxyXG4gICAgaWYgKGZpbHRlcj8uZnJvbUJsb2NrKSB7XHJcbiAgICAgICAgaWYgKCFfaXNCbG9ja0hlYWQoZmlsdGVyPy5mcm9tQmxvY2spKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmdldExvZ3M6IGludmFsaWQgJ2Zyb21CbG9jaycgdmFsdWVcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyPy5mcm9tQmxvY2sgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5mcm9tQmxvY2sgPSBgMHgkeyhmaWx0ZXI/LmZyb21CbG9jayBhcyBudW1iZXIpLnRvU3RyaW5nKDE2KX1gIGFzIEV0aEJsb2NrSGVhZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmaWx0ZXI/LnRvQmxvY2spIHtcclxuICAgICAgICBpZiAoIV9pc0Jsb2NrSGVhZChmaWx0ZXI/LnRvQmxvY2spKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmdldExvZ3M6IGludmFsaWQgJ3RvQmxvY2snIHZhbHVlXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlcj8udG9CbG9jayA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgZmlsdGVyLnRvQmxvY2sgPSBgMHgkeyhmaWx0ZXI/LnRvQmxvY2sgYXMgbnVtYmVyKS50b1N0cmluZygxNil9YCBhcyBFdGhCbG9ja0hlYWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZmlsdGVyPy5ibG9ja0hhc2ggJiYgIWlzSGV4U3RyaW5nT2ZMZW5ndGgoZmlsdGVyLmJsb2NrSGFzaCwgMzIpICYmICFpc1dpbGRjYXJkKGZpbHRlci5ibG9ja0hhc2gpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguZ2V0TG9nczogaW52YWxpZCAnYmxvY2tIYXNoJyB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmIChmaWx0ZXI/LnRvcGljcykge1xyXG4gICAgICAgIGZpbHRlci50b3BpY3MubWFwKCh2YWx1ZTogQnl0ZXMzMiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWlzSGV4U3RyaW5nT2ZMZW5ndGgodmFsdWUsIDMyKSAmJiAhaXNXaWxkY2FyZCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHJwYy5ldGguZ2V0TG9nczogdG9waWMgIyR7aW5kZXh9OiBpbnZhbGlkIGhhc2hgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWV0aG9kOiBcImV0aF9nZXRMb2dzXCIsIFxyXG4gICAgICAgIHBhcmFtczogWyBmaWx0ZXIgXVxyXG4gICAgfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSBhbiBlc3RpbWF0ZSBvZiB0aGUgY3VycmVudCBwcmljZSBwZXIgZ2FzIGluIHdlaS4gXHJcbiAqLyBcclxuZXhwb3J0IGNvbnN0IGdhc1ByaWNlID0gKCkgPT4gKHsgbWV0aG9kOiBcImV0aF9nYXNQcmljZVwiIH0pO1xyXG5cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tIGEgc3RvcmFnZSBwb3NpdGlvbiBhdCBhIGdpdmVuIGFkZHJlc3MuXHJcbiAqIEBwYXJhbSBhZGRyZXNzIEV0aEFkZHJlc3Mgb2YgdGhlIHN0b3JhZ2UuXHJcbiAqIEBwYXJhbSBvZmZzZXQgT2Zmc2V0IHdpdGhpbiBzdG9yYWdlIGFkZHJlc3MuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0U3RvcmFnZUF0ID0gKGFkZHJlc3M6IEV0aEFkZHJlc3MgfCBXaWxkY2FyZCwgb2Zmc2V0OiBCeXRlczMyIHwgV2lsZGNhcmQpID0+IHtcclxuICAgIGNoZWNrUnBjV2lsZGNhcmRzKFsgYWRkcmVzcywgb2Zmc2V0IF0pXHJcbiAgICBpZiAoIWlzSGV4U3RyaW5nT2ZMZW5ndGgoYWRkcmVzcywgMjApICYmICFpc1dpbGRjYXJkKGFkZHJlc3MpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguZ2V0U3RvcmFnZUF0OiBpbnZhbGlkIFdlYjMgYWRkcmVzcyBmb3JtYXRcIik7XHJcbiAgICB9IFxyXG4gICAgaWYgKCFpc0hleFN0cmluZ09mTGVuZ3RoKG9mZnNldCwgMzIpICYmICFpc1dpbGRjYXJkKG9mZnNldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5nZXRTdG9yYWdlQXQ6IGludmFsaWQgc3RvcmFnZSBvZmZzZXQgdmFsdWVcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1ldGhvZDogXCJldGhfZ2V0U3RvcmFnZUF0XCIsIFxyXG4gICAgICAgIHBhcmFtczogWyBhZGRyZXNzLCBvZmZzZXQgXSxcclxuICAgIH07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgcmVtb3RlIHRyYW5zYWN0aW9uIGdpdmVuIGEgYmxvY2sgaGFzaCBhbmQgYSB0cmFuc2FjdGlvbiBpbmRleC5cclxuICogQHBhcmFtIHR4SGFzaCBIYXNoIG9mIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4ID0gKGJsb2NrSGFzaDogQnl0ZXMzMiB8IFdpbGRjYXJkLCB0eEluZGV4OiBudW1iZXIgfCBCeXRlczMyIHwgV2lsZGNhcmQpID0+IHtcclxuICAgIGNoZWNrUnBjV2lsZGNhcmRzKFsgYmxvY2tIYXNoLCB0eEluZGV4IF0pXHJcbiAgICBpZiAoIWlzSGV4U3RyaW5nT2ZMZW5ndGgoYmxvY2tIYXNoLCAzMikgJiYgIWlzV2lsZGNhcmQoYmxvY2tIYXNoKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmdldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleDogaW52YWxpZCBibG9jayBoYXNoIHZhbHVlXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR4SW5kZXgpICYmICFpc0hleFN0cmluZ09mTGVuZ3RoKHR4SW5kZXgsIDMyKSAmJiAhaXNXaWxkY2FyZCh0eEluZGV4KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmdldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleDogaW52YWxpZCB0cmFuc2FjdGlvbiBpbmRleCB2YWx1ZVwiKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZXRob2Q6IFwiZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleFwiLCBcclxuICAgICAgICBwYXJhbXM6IFsgYmxvY2tIYXNoLCB0eEluZGV4IF1cclxuICAgIH07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgcmVtb3RlIHRyYW5zYWN0aW9uIGdpdmVuIGEgYmxvY2sgbnVtYmVyIGFuZCBhIHRyYW5zYWN0aW9uIGluZGV4LlxyXG4gKiBAcGFyYW0gdHhIYXNoIEhhc2ggb2YgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleCA9IChcclxuICAgIGJsb2NrTnVtYmVyOiBFdGhCbG9ja0hlYWQsXHJcbiAgICB0eEluZGV4OiBudW1iZXIgfCBCeXRlczMyIHwgV2lsZGNhcmRcclxuKSA9PiB7XHJcbiAgICBjaGVja1JwY1dpbGRjYXJkcyhbIGJsb2NrTnVtYmVyLCB0eEluZGV4IF0pXHJcbiAgICBpZiAoIV9pc0Jsb2NrSGVhZChibG9ja051bWJlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5nZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleDogaW52YWxpZCBibG9jayBudW1iZXIgdmFsdWVcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYmxvY2tOdW1iZXIgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyID0gYDB4JHsoYmxvY2tOdW1iZXIgYXMgbnVtYmVyKS50b1N0cmluZygxNil9YCBhcyBFdGhCbG9ja0hlYWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodHhJbmRleCkgJiYgIWlzSGV4U3RyaW5nT2ZMZW5ndGgodHhJbmRleCwgMzIpICYmICFpc1dpbGRjYXJkKHR4SW5kZXgpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXg6IGludmFsaWQgdHJhbnNhY3Rpb24gaW5kZXggdmFsdWVcIilcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWV0aG9kOiBcImV0aF9nZXRUcmFuc2FjdGlvbkJ5QmxvY2tIYXNoQW5kSW5kZXhcIiwgXHJcbiAgICAgICAgcGFyYW1zOiBbIGJsb2NrTnVtYmVyLCB0eEluZGV4IF0sXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIHJlbW90ZSB0cmFuc2FjdGlvbiBnaXZlbiBpdHMgdHJhbnNhY3Rpb24gaGFzaC5cclxuICogQHBhcmFtIHR4SGFzaCBIYXNoIG9mIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0VHJhbnNhY3Rpb25CeUhhc2ggPSAodHhIYXNoOiBCeXRlczMyIHwgV2lsZGNhcmQpID0+IHtcclxuICAgIGNoZWNrUnBjV2lsZGNhcmRzKHR4SGFzaClcclxuICAgIGlmICghaXNIZXhTdHJpbmdPZkxlbmd0aCh0eEhhc2gsIDMyKSAmJiAhaXNXaWxkY2FyZCh0eEhhc2gpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJwYy5ldGguZ2V0VHJhbnNhY3Rpb25CeUhhc2g6IGludmFsaWQgdHJhbnNhY3Rpb24gaGFzaCB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IFxyXG4gICAgICAgIG1ldGhvZDogXCJldGhfZ2V0VHJhbnNhY3Rpb25CeUhhc2hcIiwgXHJcbiAgICAgICAgcGFyYW1zOiBbIHR4SGFzaCBdLFxyXG4gICAgfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBzZW50IGZyb20gYW4gYWRkcmVzcy5cclxuICogQHBhcmFtIGFkZHJlc3MgRXRoQWRkcmVzcyBmcm9tIHdoZXJlIHRvIGdldCB0cmFuc2FjdGlvbiBjb3VudC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRUcmFuc2FjdGlvbkNvdW50ID0gKGFkZHJlc3M6IEV0aEFkZHJlc3MgfCBXaWxkY2FyZCkgPT4ge1xyXG4gICAgY2hlY2tScGNXaWxkY2FyZHMoYWRkcmVzcylcclxuICAgIGlmICghaXNIZXhTdHJpbmdPZkxlbmd0aChhZGRyZXNzLCAyMCkgJiYgIWlzV2lsZGNhcmQoYWRkcmVzcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicnBjLmV0aC5nZXRUcmFuc2FjdGlvbkNvdW50OiBpbnZhbGlkIFdlYjMgYWRkcmVzcyBmb3JtYXRcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1ldGhvZDogXCJldGhfZ2V0VHJhbnNhY3Rpb25Db3VudFwiLCBcclxuICAgICAgICBwYXJhbXM6IFsgYWRkcmVzcyBdLFxyXG4gICAgfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgcmVjZWlwdCBvZiBhIHJlbW90ZSB0cmFuc2FjdGlvbiBnaXZlbiBpdHMgdHJhbnNhY3Rpb24gaGFzaC5cclxuICogQHBhcmFtIHR4SGFzaCBIYXNoIG9mIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0ID0gKHR4SGFzaDogQnl0ZXMzMiB8IFdpbGRjYXJkKSA9PiB7XHJcbiAgICBjaGVja1JwY1dpbGRjYXJkcyh0eEhhc2gpXHJcbiAgICBpZiAoIWlzSGV4U3RyaW5nT2ZMZW5ndGgodHhIYXNoLCAzMikgJiYgIWlzV2lsZGNhcmQodHhIYXNoKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLmdldFRyYW5zYWN0aW9uUmVjZWlwdDogaW52YWxpZCB0cmFuc2FjdGlvbiBoYXNoIHZhbHVlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZXRob2Q6IFwiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdFwiLCBcclxuICAgICAgICBwYXJhbXM6IFsgdHhIYXNoIF0sXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEludm9rZSByZW1vdGUgY2FsbCB0cmFuc2FjdGlvbiwgb3IgcmVtb3RlIGNvbnRyYWN0IGNyZWF0aW9uLiBcclxuICogQHBhcmFtIGRhdGEgVGhlIHNpZ25lZCB0cmFuc2FjdGlvbiBkYXRhLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHNlbmRSYXdUcmFuc2FjdGlvbiA9IChkYXRhOiBCeXRlcyB8IFdpbGRjYXJkKSA9PiB7XHJcbiAgICBjaGVja1JwY1dpbGRjYXJkcyhkYXRhKVxyXG4gICAgaWYgKCFpc0hleFN0cmluZyhkYXRhKSAmJiAhaXNXaWxkY2FyZChkYXRhKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJycGMuZXRoLnNlbmRSYXdUcmFuc2FjdGlvbjogaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24gZGF0YVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWV0aG9kOiBcImV0aF9zZW5kUmF3VHJhbnNhY3Rpb25cIiwgXHJcbiAgICAgICAgcGFyYW1zOiBbIGRhdGEgXVxyXG4gICAgfTtcclxufTtcclxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * as eth from "./eth";
|
|
2
|
+
export * as wit from "./wit";
|
|
3
|
+
export type HexStringOfLength<Max> = string & {
|
|
4
|
+
max: Max;
|
|
5
|
+
readonly HexStringOfLength: unique symbol;
|
|
6
|
+
};
|
|
7
|
+
export type HexString = string & {
|
|
8
|
+
readonly HexString: unique symbol;
|
|
9
|
+
};
|
|
10
|
+
export type Bytes32 = HexStringOfLength<64>;
|
|
11
|
+
export type Bytes = HexString;
|
|
12
|
+
export type BlockNumber = number | Bytes32;
|
|
13
|
+
export type Wildcard = string;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/radon/ccdr/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAC5B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAE5B,MAAM,MAAM,iBAAiB,CAAC,GAAG,IAAI,MAAM,GAAG;IAC1C,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAA;CAC5C,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,MAAM,CAAA;CACpC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC5C,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.wit = exports.eth = void 0;
|
|
37
|
+
exports.eth = __importStar(require("./eth"));
|
|
38
|
+
exports.wit = __importStar(require("./wit"));
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3JhZG9uL2NjZHIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTRCO0FBQzVCLDZDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGV0aCBmcm9tIFwiLi9ldGhcIlxyXG5leHBvcnQgKiBhcyB3aXQgZnJvbSBcIi4vd2l0XCJcclxuXHJcbmV4cG9ydCB0eXBlIEhleFN0cmluZ09mTGVuZ3RoPE1heD4gPSBzdHJpbmcgJiB7XHJcbiAgICBtYXg6IE1heDtcclxuICAgIHJlYWRvbmx5IEhleFN0cmluZ09mTGVuZ3RoOiB1bmlxdWUgc3ltYm9sXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBIZXhTdHJpbmcgPSBzdHJpbmcgJiB7XHJcbiAgICByZWFkb25seSBIZXhTdHJpbmc6IHVuaXF1ZSBzeW1ib2xcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEJ5dGVzMzIgPSBIZXhTdHJpbmdPZkxlbmd0aDw2ND47XHJcbmV4cG9ydCB0eXBlIEJ5dGVzID0gSGV4U3RyaW5nO1xyXG5leHBvcnQgdHlwZSBCbG9ja051bWJlciA9IG51bWJlciB8IEJ5dGVzMzI7XHJcbmV4cG9ydCB0eXBlIFdpbGRjYXJkID0gc3RyaW5nXHJcbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Bytes32, Wildcard } from ".";
|
|
2
|
+
export type WitAddress = string & {
|
|
3
|
+
readonly WitAddress: unique symbol;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Retrieve the balance in $nanoWIT of some account in Witnet.
|
|
7
|
+
* @param address Address of the account within the Witnet blockchain.
|
|
8
|
+
*/
|
|
9
|
+
export declare const getBalance: (address: WitAddress | Wildcard) => {
|
|
10
|
+
method: string;
|
|
11
|
+
params: {
|
|
12
|
+
pkh: string | WitAddress;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Retrieve detailed informatinon about a mined transaction in the Witnet blockchain.
|
|
17
|
+
* @param txHash The hash of the transaction to retrieve.
|
|
18
|
+
*/
|
|
19
|
+
export declare const getTransaction: (txHash: Bytes32 | Wildcard) => {
|
|
20
|
+
method: string;
|
|
21
|
+
params: (string | Bytes32)[];
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=wit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wit.d.ts","sourceRoot":"","sources":["../../../../../src/lib/radon/ccdr/wit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AAEtC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,MAAM,CAAA;CACrC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAa,UAAU,GAAG,QAAQ;;;;;CAaxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,WAAY,OAAO,GAAG,QAAQ;;;CASxD,CAAA"}
|