@bitgo/sdk-coin-tempo 1.6.0 → 1.7.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.
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @prettier
3
3
  */
4
- import { AbstractEthLikeNewCoins, RecoverOptions, OfflineVaultTxInfo, UnsignedSweepTxMPCv2, TransactionBuilder } from '@bitgo/abstract-eth';
4
+ import { AbstractEthLikeNewCoins, RecoverOptions, OfflineVaultTxInfo, UnsignedSweepTxMPCv2, TransactionBuilder, VerifyEthTransactionOptions, VerifyEthAddressOptions, TssVerifyEthAddressOptions } from '@bitgo/abstract-eth';
5
5
  import type * as EthLikeCommon from '@ethereumjs/common';
6
- import { BaseCoin, BitGoBase, MPCAlgorithm } from '@bitgo/sdk-core';
6
+ import { BaseCoin, BitGoBase, MPCAlgorithm, ParseTransactionOptions, ParsedTransaction } from '@bitgo/sdk-core';
7
7
  import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
8
8
  export declare class Tempo extends AbstractEthLikeNewCoins {
9
9
  protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
@@ -59,6 +59,22 @@ export declare class Tempo extends AbstractEthLikeNewCoins {
59
59
  * @returns true if valid
60
60
  */
61
61
  isValidMemoId(memoId: string): boolean;
62
+ /**
63
+ * Tempo uses memoId-based addresses rather than forwarder contracts.
64
+ * Verify that the address belongs to this wallet by checking that the
65
+ * base (EVM) portion matches the wallet's base address.
66
+ */
67
+ isWalletAddress(params: VerifyEthAddressOptions | TssVerifyEthAddressOptions): Promise<boolean>;
68
+ /**
69
+ * Parse a serialised Tempo transaction and return its operations as SDK outputs.
70
+ * @inheritdoc
71
+ */
72
+ parseTransaction(params: ParseTransactionOptions): Promise<ParsedTransaction>;
73
+ /**
74
+ * Verify that a Tempo transaction matches the intended recipients and amounts.
75
+ * @inheritdoc
76
+ */
77
+ verifyTransaction(params: VerifyEthTransactionOptions): Promise<boolean>;
62
78
  /**
63
79
  * Build unsigned sweep transaction for TSS
64
80
  * TODO: Implement sweep transaction logic
@@ -1 +1 @@
1
- {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAA2C,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7G,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,gBAAgB,CAAC;AAKpE,qBAAa,KAAM,SAAQ,uBAAuB;IAChD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB,kBAAkB;IAClB,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAsDnG;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAWtC;;;OAGG;cACa,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAMpH;;;OAGG;IACG,+BAA+B,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMnC;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,kBAAkB;CAGpF"}
1
+ {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,SAAS,EAGT,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,gBAAgB,CAAC;AAMpE,qBAAa,KAAM,SAAQ,uBAAuB;IAChD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB,kBAAkB;IAClB,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAsDnG;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BrG;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsBnF;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAqC9E;;;OAGG;cACa,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAMpH;;;OAGG;IACG,+BAA+B,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMnC;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,kBAAkB;CAGpF"}
package/dist/src/tempo.js CHANGED
@@ -41,6 +41,7 @@ const abstract_eth_1 = require("@bitgo/abstract-eth");
41
41
  const sdk_core_1 = require("@bitgo/sdk-core");
42
42
  const statics_1 = require("@bitgo/statics");
43
43
  const lib_1 = require("./lib");
44
+ const utils_1 = require("./lib/utils");
44
45
  const url = __importStar(require("url"));
45
46
  const querystring = __importStar(require("querystring"));
46
47
  class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
@@ -161,12 +162,89 @@ class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
161
162
  * @returns true if valid
162
163
  */
163
164
  isValidMemoId(memoId) {
164
- if (typeof memoId !== 'string' || memoId === '') {
165
- return false;
165
+ return (0, utils_1.isValidMemoId)(memoId);
166
+ }
167
+ /**
168
+ * Tempo uses memoId-based addresses rather than forwarder contracts.
169
+ * Verify that the address belongs to this wallet by checking that the
170
+ * base (EVM) portion matches the wallet's base address.
171
+ */
172
+ async isWalletAddress(params) {
173
+ const { address, baseAddress } = params;
174
+ const rootAddress = params.rootAddress;
175
+ if (!address) {
176
+ throw new sdk_core_1.InvalidAddressError('address is required');
166
177
  }
167
- // Must be a non-negative integer (no decimals, no negative, no leading zeros except for "0")
168
- if (!/^(0|[1-9]\d*)$/.test(memoId)) {
169
- return false;
178
+ if (!this.isValidAddress(address)) {
179
+ throw new sdk_core_1.InvalidAddressError(`invalid address: ${address}`);
180
+ }
181
+ const { baseAddress: addressBase } = this.getAddressDetails(address);
182
+ const walletBaseAddress = baseAddress || rootAddress;
183
+ if (!walletBaseAddress) {
184
+ throw new sdk_core_1.InvalidAddressError('baseAddress or rootAddress is required for verification');
185
+ }
186
+ const { baseAddress: walletBase } = this.getAddressDetails(walletBaseAddress);
187
+ if (addressBase.toLowerCase() !== walletBase.toLowerCase()) {
188
+ throw new sdk_core_1.UnexpectedAddressError(`address validation failure: expected ${walletBase} but got ${addressBase}`);
189
+ }
190
+ return true;
191
+ }
192
+ /**
193
+ * Parse a serialised Tempo transaction and return its operations as SDK outputs.
194
+ * @inheritdoc
195
+ */
196
+ async parseTransaction(params) {
197
+ const txHex = (params.txHex || params.halfSigned?.txHex);
198
+ if (!txHex) {
199
+ return {};
200
+ }
201
+ const txBuilder = this.getTransactionBuilder();
202
+ txBuilder.from(txHex);
203
+ const tx = (await txBuilder.build());
204
+ return {
205
+ inputs: tx.inputs.map((input) => ({
206
+ address: input.address,
207
+ amount: input.value,
208
+ coin: this.getChain(),
209
+ })),
210
+ outputs: tx.outputs.map((output) => ({
211
+ address: output.address,
212
+ amount: output.value,
213
+ coin: this.getChain(),
214
+ })),
215
+ };
216
+ }
217
+ /**
218
+ * Verify that a Tempo transaction matches the intended recipients and amounts.
219
+ * @inheritdoc
220
+ */
221
+ async verifyTransaction(params) {
222
+ const { txParams, txPrebuild } = params;
223
+ if (!txPrebuild?.txHex) {
224
+ return true;
225
+ }
226
+ const txBuilder = this.getTransactionBuilder();
227
+ txBuilder.from(txPrebuild.txHex);
228
+ const tx = (await txBuilder.build());
229
+ const operations = tx.getOperations();
230
+ // If the caller specified explicit recipients, verify they match the operations 1-to-1
231
+ const recipients = txParams?.recipients;
232
+ if (recipients && recipients.length > 0) {
233
+ if (operations.length !== recipients.length) {
234
+ throw new Error(`Transaction has ${operations.length} operation(s) but ${recipients.length} recipient(s) were requested`);
235
+ }
236
+ for (let i = 0; i < operations.length; i++) {
237
+ const op = operations[i];
238
+ const recipient = recipients[i];
239
+ if (op.to.toLowerCase() !== recipient.address.toLowerCase()) {
240
+ throw new Error(`Operation ${i} recipient mismatch: expected ${recipient.address}, got ${op.to}`);
241
+ }
242
+ // Compare amounts in base units (smallest denomination)
243
+ const opAmountBaseUnits = (0, utils_1.amountToTip20Units)(op.amount).toString();
244
+ if (opAmountBaseUnits !== recipient.amount.toString()) {
245
+ throw new Error(`Operation ${i} amount mismatch: expected ${recipient.amount}, got ${opAmountBaseUnits}`);
246
+ }
247
+ }
170
248
  }
171
249
  return true;
172
250
  }
@@ -199,4 +277,4 @@ class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
199
277
  }
200
278
  }
201
279
  exports.Tempo = Tempo;
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxzREFPNkI7QUFFN0IsOENBQTZHO0FBQzdHLDRDQUFvRTtBQUNwRSwrQkFBZ0Q7QUFDaEQseUNBQTJCO0FBQzNCLHlEQUEyQztBQUUzQyxNQUFhLEtBQU0sU0FBUSxzQ0FBdUI7SUFDaEQsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsYUFBYTtRQUNYLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FB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SUFFRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsTUFBc0I7UUFDN0QsZ0RBQWdEO1FBQ2hELGtFQUFrRTtRQUNsRSxPQUFPLEVBQXdCLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQywrQkFBK0IsQ0FDbkMsS0FBNkIsRUFDN0IsTUFBZTtRQUVmLGdEQUFnRDtRQUNoRCxtRUFBbUU7UUFDbkUsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxxQkFBcUIsQ0FBQyxNQUE4QjtRQUM1RCxPQUFPLElBQUksNkJBQXVCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBa0MsQ0FBQztJQUN0RyxDQUFDO0NBQ0Y7QUFyTEQsc0JBcUxDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RFdGhMaWtlTmV3Q29pbnMsXG4gIFJlY292ZXJPcHRpb25zLFxuICBPZmZsaW5lVmF1bHRUeEluZm8sXG4gIFVuc2lnbmVkU3dlZXBUeE1QQ3YyLFxuICBUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIG9wdGlvbmFsRGVwcyxcbn0gZnJvbSAnQGJpdGdvL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgdHlwZSAqIGFzIEV0aExpa2VDb21tb24gZnJvbSAnQGV0aGVyZXVtanMvY29tbW9uJztcbmltcG9ydCB7IEJhc2VDb2luLCBCaXRHb0Jhc2UsIEludmFsaWRBZGRyZXNzRXJyb3IsIEludmFsaWRNZW1vSWRFcnJvciwgTVBDQWxnb3JpdGhtIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuXG5leHBvcnQgY2xhc3MgVGVtcG8gZXh0ZW5kcyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBUZW1wbyBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFRlbXBvKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjaGFpbiBpZGVudGlmaWVyXG4gICAqL1xuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbj8ubmFtZSB8fCAndGVtcG8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCBjaGFpbiBuYW1lXG4gICAqL1xuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVGVtcG8nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU2O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhbHVlLWxlc3MgdHJhbnNmZXJzIGFyZSBhbGxvd2VkXG4gICAqIFRPRE86IFVwZGF0ZSBiYXNlZCBvbiBUZW1wbyByZXF1aXJlbWVudHNcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgVFNTIGlzIHN1cHBvcnRlZFxuICAgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBNUEMgYWxnb3JpdGhtIChFQ0RTQSBmb3IgRVZNIGNoYWlucylcbiAgICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGFuIGFkZHJlc3Mgc3RyaW5nIGlzIHZhbGlkIGZvciBUZW1wb1xuICAgKiBTdXBwb3J0cyBhZGRyZXNzZXMgd2l0aCBvcHRpb25hbCBtZW1vSWQgcXVlcnkgcGFyYW1ldGVyIChlLmcuLCAweC4uLj9tZW1vSWQ9MTIzKVxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYWRkcmVzcyBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGJhc2VBZGRyZXNzIH0gPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIG9wdGlvbmFsRGVwcy5ldGhVdGlsLmlzVmFsaWRBZGRyZXNzKG9wdGlvbmFsRGVwcy5ldGhVdGlsLmFkZEhleFByZWZpeChiYXNlQWRkcmVzcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYWRkcmVzcyBpbnRvIGJhc2UgYWRkcmVzcyBhbmQgb3B0aW9uYWwgbWVtb0lkXG4gICAqIFRocm93cyBJbnZhbGlkQWRkcmVzc0Vycm9yIGZvciBpbnZhbGlkIGFkZHJlc3MgZm9ybWF0c1xuICAgKiBAcGFyYW0gYWRkcmVzcyAtIEFkZHJlc3Mgc3RyaW5nLCBwb3RlbnRpYWxseSB3aXRoID9tZW1vSWQ9WCBzdWZmaXhcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgYWRkcmVzcywgYmFzZUFkZHJlc3MsIGFuZCBtZW1vSWQgKG51bGwgaWYgbm90IHByZXNlbnQpXG4gICAqIEB0aHJvd3MgSW52YWxpZEFkZHJlc3NFcnJvciBpZiBhZGRyZXNzIGZvcm1hdCBpcyBpbnZhbGlkXG4gICAqL1xuICBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgYmFzZUFkZHJlc3M6IHN0cmluZzsgbWVtb0lkOiBzdHJpbmcgfCBudWxsIH0ge1xuICAgIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgYmFzZUFkZHJlc3MgPSBkZXN0aW5hdGlvbkRldGFpbHMucGF0aG5hbWUgfHwgJyc7XG5cbiAgICAvLyBObyBxdWVyeSBzdHJpbmcgLSBqdXN0IGEgcGxhaW4gYWRkcmVzc1xuICAgIGlmIChkZXN0aW5hdGlvbkRldGFpbHMucGF0aG5hbWUgPT09IGFkZHJlc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIGJhc2VBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBtZW1vSWQ6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhcyBxdWVyeSBzdHJpbmcgLSBtdXN0IGNvbnRhaW4gbWVtb0lkXG4gICAgaWYgKCFkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeURldGFpbHMgPSBxdWVyeXN0cmluZy5wYXJzZShkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpO1xuXG4gICAgLy8gUXVlcnkgc3RyaW5nIG11c3QgY29udGFpbiBtZW1vSWRcbiAgICBpZiAoIXF1ZXJ5RGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc30sIHVua25vd24gcXVlcnkgcGFyYW1ldGVyc2ApO1xuICAgIH1cblxuICAgIC8vIE9ubHkgb25lIG1lbW9JZCBhbGxvd2VkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLm1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgbWVtb0lkIG1heSBvbmx5IGJlIGdpdmVuIGF0IG1vc3Qgb25jZSwgYnV0IGZvdW5kICR7cXVlcnlEZXRhaWxzLm1lbW9JZC5sZW5ndGh9IGluc3RhbmNlcyBpbiBhZGRyZXNzICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlamVjdCBpZiB0aGVyZSBhcmUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycyBiZXNpZGVzIG1lbW9JZFxuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5RGV0YWlscyk7XG4gICAgaWYgKHF1ZXJ5S2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc30sIG9ubHkgbWVtb0lkIHF1ZXJ5IHBhcmFtZXRlciBpcyBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWVtb0lkIGZvcm1hdFxuICAgIGlmICghdGhpcy5pc1ZhbGlkTWVtb0lkKHF1ZXJ5RGV0YWlscy5tZW1vSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZE1lbW9JZEVycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICcke2FkZHJlc3N9JywgbWVtb0lkIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzLFxuICAgICAgYmFzZUFkZHJlc3MsXG4gICAgICBtZW1vSWQ6IHF1ZXJ5RGV0YWlscy5tZW1vSWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IGEgbWVtb0lkIGlzIGEgdmFsaWQgbm9uLW5lZ2F0aXZlIGludGVnZXIgc3RyaW5nXG4gICAqIEBwYXJhbSBtZW1vSWQgLSBUaGUgbWVtb0lkIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAgICovXG4gIGlzVmFsaWRNZW1vSWQobWVtb0lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG1lbW9JZCAhPT0gJ3N0cmluZycgfHwgbWVtb0lkID09PSAnJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBNdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgKG5vIGRlY2ltYWxzLCBubyBuZWdhdGl2ZSwgbm8gbGVhZGluZyB6ZXJvcyBleGNlcHQgZm9yIFwiMFwiKVxuICAgIGlmICghL14oMHxbMS05XVxcZCopJC8udGVzdChtZW1vSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciBUU1NcbiAgICogVE9ETzogSW1wbGVtZW50IHN3ZWVwIHRyYW5zYWN0aW9uIGxvZ2ljXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPE9mZmxpbmVWYXVsdFR4SW5mbyB8IFVuc2lnbmVkU3dlZXBUeE1QQ3YyPiB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHdoZW4gcmVjb3ZlcnkgbG9naWMgaXMgbmVlZGVkXG4gICAgLy8gUmV0dXJuIGR1bW15IHZhbHVlIHRvIHByZXZlbnQgZG93bnN0cmVhbSBzZXJ2aWNlcyBmcm9tIGJyZWFraW5nXG4gICAgcmV0dXJuIHt9IGFzIE9mZmxpbmVWYXVsdFR4SW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyeSBibG9jayBleHBsb3JlciBmb3IgcmVjb3ZlcnkgaW5mb3JtYXRpb25cbiAgICogVE9ETzogSW1wbGVtZW50IHdoZW4gVGVtcG8gYmxvY2sgZXhwbG9yZXIgaXMgYXZhaWxhYmxlXG4gICAqL1xuICBhc3luYyByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KFxuICAgIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGFwaUtleT86IHN0cmluZ1xuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHdpdGggVGVtcG8gYmxvY2sgZXhwbG9yZXIgQVBJXG4gICAgLy8gUmV0dXJuIGVtcHR5IG9iamVjdCB0byBwcmV2ZW50IGRvd25zdHJlYW0gc2VydmljZXMgZnJvbSBicmVha2luZ1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgVGVtcG9cbiAgICogUmV0dXJucyBhIFRJUC0yMCB0cmFuc2FjdGlvbiBidWlsZGVyIGZvciBUZW1wby1zcGVjaWZpYyBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBjb21tb24gLSBPcHRpb25hbCBjb21tb24gY2hhaW4gY29uZmlndXJhdGlvblxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKGNvbW1vbj86IEV0aExpa2VDb21tb24uZGVmYXVsdCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB9XG59XG4iXX0=
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxzREFVNkI7QUFFN0IsOENBU3lCO0FBQ3pCLDRDQUFvRTtBQUNwRSwrQkFBa0U7QUFDbEUsdUNBQXFGO0FBQ3JGLHlDQUEyQjtBQUMzQix5REFBMkM7QUFFM0MsTUFBYSxLQUFNLFNBQVEsc0NBQXVCO0lBQ2hELFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWE7UUFDWCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLE9BQWU7UUFDNUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUss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QUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQXNCO1FBQzdELGdEQUFnRDtRQUNoRCxrRUFBa0U7UUFDbEUsT0FBTyxFQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsK0JBQStCLENBQ25DLEtBQTZCLEVBQzdCLE1BQWU7UUFFZixnREFBZ0Q7UUFDaEQsbUVBQW1FO1FBQ25FLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08scUJBQXFCLENBQUMsTUFBOEI7UUFDNUQsT0FBTyxJQUFJLDZCQUF1QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQWtDLENBQUM7SUFDdEcsQ0FBQztDQUNGO0FBbFJELHNCQWtSQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7XG4gIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zLFxuICBSZWNvdmVyT3B0aW9ucyxcbiAgT2ZmbGluZVZhdWx0VHhJbmZvLFxuICBVbnNpZ25lZFN3ZWVwVHhNUEN2MixcbiAgVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBWZXJpZnlFdGhUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUV0aEFkZHJlc3NPcHRpb25zLFxuICBUc3NWZXJpZnlFdGhBZGRyZXNzT3B0aW9ucyxcbiAgb3B0aW9uYWxEZXBzLFxufSBmcm9tICdAYml0Z28vYWJzdHJhY3QtZXRoJztcbmltcG9ydCB0eXBlICogYXMgRXRoTGlrZUNvbW1vbiBmcm9tICdAZXRoZXJldW1qcy9jb21tb24nO1xuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgSW52YWxpZE1lbW9JZEVycm9yLFxuICBNUENBbGdvcml0aG0sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uLCBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IGFtb3VudFRvVGlwMjBVbml0cywgaXNWYWxpZE1lbW9JZCBhcyBpc1ZhbGlkTWVtb0lkVXRpbCB9IGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuXG5leHBvcnQgY2xhc3MgVGVtcG8gZXh0ZW5kcyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBUZW1wbyBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFRlbXBvKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjaGFpbiBpZGVudGlmaWVyXG4gICAqL1xuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbj8ubmFtZSB8fCAndGVtcG8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCBjaGFpbiBuYW1lXG4gICAqL1xuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVGVtcG8nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU2O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhbHVlLWxlc3MgdHJhbnNmZXJzIGFyZSBhbGxvd2VkXG4gICAqIFRPRE86IFVwZGF0ZSBiYXNlZCBvbiBUZW1wbyByZXF1aXJlbWVudHNcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgVFNTIGlzIHN1cHBvcnRlZFxuICAgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBNUEMgYWxnb3JpdGhtIChFQ0RTQSBmb3IgRVZNIGNoYWlucylcbiAgICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGFuIGFkZHJlc3Mgc3RyaW5nIGlzIHZhbGlkIGZvciBUZW1wb1xuICAgKiBTdXBwb3J0cyBhZGRyZXNzZXMgd2l0aCBvcHRpb25hbCBtZW1vSWQgcXVlcnkgcGFyYW1ldGVyIChlLmcuLCAweC4uLj9tZW1vSWQ9MTIzKVxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYWRkcmVzcyBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGJhc2VBZGRyZXNzIH0gPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIG9wdGlvbmFsRGVwcy5ldGhVdGlsLmlzVmFsaWRBZGRyZXNzKG9wdGlvbmFsRGVwcy5ldGhVdGlsLmFkZEhleFByZWZpeChiYXNlQWRkcmVzcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYWRkcmVzcyBpbnRvIGJhc2UgYWRkcmVzcyBhbmQgb3B0aW9uYWwgbWVtb0lkXG4gICAqIFRocm93cyBJbnZhbGlkQWRkcmVzc0Vycm9yIGZvciBpbnZhbGlkIGFkZHJlc3MgZm9ybWF0c1xuICAgKiBAcGFyYW0gYWRkcmVzcyAtIEFkZHJlc3Mgc3RyaW5nLCBwb3RlbnRpYWxseSB3aXRoID9tZW1vSWQ9WCBzdWZmaXhcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgYWRkcmVzcywgYmFzZUFkZHJlc3MsIGFuZCBtZW1vSWQgKG51bGwgaWYgbm90IHByZXNlbnQpXG4gICAqIEB0aHJvd3MgSW52YWxpZEFkZHJlc3NFcnJvciBpZiBhZGRyZXNzIGZvcm1hdCBpcyBpbnZhbGlkXG4gICAqL1xuICBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgYmFzZUFkZHJlc3M6IHN0cmluZzsgbWVtb0lkOiBzdHJpbmcgfCBudWxsIH0ge1xuICAgIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgYmFzZUFkZHJlc3MgPSBkZXN0aW5hdGlvbkRldGFpbHMucGF0aG5hbWUgfHwgJyc7XG5cbiAgICAvLyBObyBxdWVyeSBzdHJpbmcgLSBqdXN0IGEgcGxhaW4gYWRkcmVzc1xuICAgIGlmIChkZXN0aW5hdGlvbkRldGFpbHMucGF0aG5hbWUgPT09IGFkZHJlc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIGJhc2VBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBtZW1vSWQ6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhcyBxdWVyeSBzdHJpbmcgLSBtdXN0IGNvbnRhaW4gbWVtb0lkXG4gICAgaWYgKCFkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeURldGFpbHMgPSBxdWVyeXN0cmluZy5wYXJzZShkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpO1xuXG4gICAgLy8gUXVlcnkgc3RyaW5nIG11c3QgY29udGFpbiBtZW1vSWRcbiAgICBpZiAoIXF1ZXJ5RGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc30sIHVua25vd24gcXVlcnkgcGFyYW1ldGVyc2ApO1xuICAgIH1cblxuICAgIC8vIE9ubHkgb25lIG1lbW9JZCBhbGxvd2VkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLm1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgbWVtb0lkIG1heSBvbmx5IGJlIGdpdmVuIGF0IG1vc3Qgb25jZSwgYnV0IGZvdW5kICR7cXVlcnlEZXRhaWxzLm1lbW9JZC5sZW5ndGh9IGluc3RhbmNlcyBpbiBhZGRyZXNzICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlamVjdCBpZiB0aGVyZSBhcmUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycyBiZXNpZGVzIG1lbW9JZFxuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5RGV0YWlscyk7XG4gICAgaWYgKHF1ZXJ5S2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc30sIG9ubHkgbWVtb0lkIHF1ZXJ5IHBhcmFtZXRlciBpcyBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWVtb0lkIGZvcm1hdFxuICAgIGlmICghdGhpcy5pc1ZhbGlkTWVtb0lkKHF1ZXJ5RGV0YWlscy5tZW1vSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZE1lbW9JZEVycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICcke2FkZHJlc3N9JywgbWVtb0lkIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzLFxuICAgICAgYmFzZUFkZHJlc3MsXG4gICAgICBtZW1vSWQ6IHF1ZXJ5RGV0YWlscy5tZW1vSWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IGEgbWVtb0lkIGlzIGEgdmFsaWQgbm9uLW5lZ2F0aXZlIGludGVnZXIgc3RyaW5nXG4gICAqIEBwYXJhbSBtZW1vSWQgLSBUaGUgbWVtb0lkIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAgICovXG4gIGlzVmFsaWRNZW1vSWQobWVtb0lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZE1lbW9JZFV0aWwobWVtb0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wbyB1c2VzIG1lbW9JZC1iYXNlZCBhZGRyZXNzZXMgcmF0aGVyIHRoYW4gZm9yd2FyZGVyIGNvbnRyYWN0cy5cbiAgICogVmVyaWZ5IHRoYXQgdGhlIGFkZHJlc3MgYmVsb25ncyB0byB0aGlzIHdhbGxldCBieSBjaGVja2luZyB0aGF0IHRoZVxuICAgKiBiYXNlIChFVk0pIHBvcnRpb24gbWF0Y2hlcyB0aGUgd2FsbGV0J3MgYmFzZSBhZGRyZXNzLlxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5RXRoQWRkcmVzc09wdGlvbnMgfCBUc3NWZXJpZnlFdGhBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywgYmFzZUFkZHJlc3MgfSA9IHBhcmFtcztcbiAgICBjb25zdCByb290QWRkcmVzcyA9IChwYXJhbXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikucm9vdEFkZHJlc3MgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmFzZUFkZHJlc3M6IGFkZHJlc3NCYXNlIH0gPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuXG4gICAgY29uc3Qgd2FsbGV0QmFzZUFkZHJlc3MgPSBiYXNlQWRkcmVzcyB8fCByb290QWRkcmVzcztcbiAgICBpZiAoIXdhbGxldEJhc2VBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignYmFzZUFkZHJlc3Mgb3Igcm9vdEFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIHZlcmlmaWNhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmFzZUFkZHJlc3M6IHdhbGxldEJhc2UgfSA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMod2FsbGV0QmFzZUFkZHJlc3MpO1xuXG4gICAgaWYgKGFkZHJlc3NCYXNlLnRvTG93ZXJDYXNlKCkgIT09IHdhbGxldEJhc2UudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAke3dhbGxldEJhc2V9IGJ1dCBnb3QgJHthZGRyZXNzQmFzZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHNlcmlhbGlzZWQgVGVtcG8gdHJhbnNhY3Rpb24gYW5kIHJldHVybiBpdHMgb3BlcmF0aW9ucyBhcyBTREsgb3V0cHV0cy5cbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IChwYXJhbXMudHhIZXggfHwgKHBhcmFtcyBhcyBhbnkpLmhhbGZTaWduZWQ/LnR4SGV4KSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzOiB0eC5pbnB1dHMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgYWRkcmVzczogaW5wdXQuYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiBpbnB1dC52YWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfSkpLFxuICAgICAgb3V0cHV0czogdHgub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogb3V0cHV0LnZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLmdldENoYWluKCksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIFRlbXBvIHRyYW5zYWN0aW9uIG1hdGNoZXMgdGhlIGludGVuZGVkIHJlY2lwaWVudHMgYW5kIGFtb3VudHMuXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSA9IHBhcmFtcztcblxuICAgIGlmICghdHhQcmVidWlsZD8udHhIZXgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmZyb20odHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHR4LmdldE9wZXJhdGlvbnMoKTtcblxuICAgIC8vIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIGV4cGxpY2l0IHJlY2lwaWVudHMsIHZlcmlmeSB0aGV5IG1hdGNoIHRoZSBvcGVyYXRpb25zIDEtdG8tMVxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0eFBhcmFtcz8ucmVjaXBpZW50cztcbiAgICBpZiAocmVjaXBpZW50cyAmJiByZWNpcGllbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCAhPT0gcmVjaXBpZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUcmFuc2FjdGlvbiBoYXMgJHtvcGVyYXRpb25zLmxlbmd0aH0gb3BlcmF0aW9uKHMpIGJ1dCAke3JlY2lwaWVudHMubGVuZ3RofSByZWNpcGllbnQocykgd2VyZSByZXF1ZXN0ZWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wZXJhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3AgPSBvcGVyYXRpb25zW2ldO1xuICAgICAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzW2ldO1xuICAgICAgICBpZiAob3AudG8udG9Mb3dlckNhc2UoKSAhPT0gcmVjaXBpZW50LmFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7aX0gcmVjaXBpZW50IG1pc21hdGNoOiBleHBlY3RlZCAke3JlY2lwaWVudC5hZGRyZXNzfSwgZ290ICR7b3AudG99YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29tcGFyZSBhbW91bnRzIGluIGJhc2UgdW5pdHMgKHNtYWxsZXN0IGRlbm9taW5hdGlvbilcbiAgICAgICAgY29uc3Qgb3BBbW91bnRCYXNlVW5pdHMgPSBhbW91bnRUb1RpcDIwVW5pdHMob3AuYW1vdW50KS50b1N0cmluZygpO1xuICAgICAgICBpZiAob3BBbW91bnRCYXNlVW5pdHMgIT09IHJlY2lwaWVudC5hbW91bnQudG9TdHJpbmcoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7aX0gYW1vdW50IG1pc21hdGNoOiBleHBlY3RlZCAke3JlY2lwaWVudC5hbW91bnR9LCBnb3QgJHtvcEFtb3VudEJhc2VVbml0c31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciBUU1NcbiAgICogVE9ETzogSW1wbGVtZW50IHN3ZWVwIHRyYW5zYWN0aW9uIGxvZ2ljXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPE9mZmxpbmVWYXVsdFR4SW5mbyB8IFVuc2lnbmVkU3dlZXBUeE1QQ3YyPiB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHdoZW4gcmVjb3ZlcnkgbG9naWMgaXMgbmVlZGVkXG4gICAgLy8gUmV0dXJuIGR1bW15IHZhbHVlIHRvIHByZXZlbnQgZG93bnN0cmVhbSBzZXJ2aWNlcyBmcm9tIGJyZWFraW5nXG4gICAgcmV0dXJuIHt9IGFzIE9mZmxpbmVWYXVsdFR4SW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyeSBibG9jayBleHBsb3JlciBmb3IgcmVjb3ZlcnkgaW5mb3JtYXRpb25cbiAgICogVE9ETzogSW1wbGVtZW50IHdoZW4gVGVtcG8gYmxvY2sgZXhwbG9yZXIgaXMgYXZhaWxhYmxlXG4gICAqL1xuICBhc3luYyByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KFxuICAgIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGFwaUtleT86IHN0cmluZ1xuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHdpdGggVGVtcG8gYmxvY2sgZXhwbG9yZXIgQVBJXG4gICAgLy8gUmV0dXJuIGVtcHR5IG9iamVjdCB0byBwcmV2ZW50IGRvd25zdHJlYW0gc2VydmljZXMgZnJvbSBicmVha2luZ1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgVGVtcG9cbiAgICogUmV0dXJucyBhIFRJUC0yMCB0cmFuc2FjdGlvbiBidWlsZGVyIGZvciBUZW1wby1zcGVjaWZpYyBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBjb21tb24gLSBPcHRpb25hbCBjb21tb24gY2hhaW4gY29uZmlndXJhdGlvblxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKGNvbW1vbj86IEV0aExpa2VDb21tb24uZGVmYXVsdCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB9XG59XG4iXX0=
@@ -48,6 +48,6 @@ export declare const ERROR_MESSAGES: {
48
48
  missingGas: RegExp;
49
49
  missingMaxFeePerGas: RegExp;
50
50
  missingMaxPriorityFeePerGas: RegExp;
51
- memoTooLong: RegExp;
51
+ invalidMemo: RegExp;
52
52
  };
53
53
  //# sourceMappingURL=tempo.d.ts.map
@@ -66,6 +66,6 @@ exports.ERROR_MESSAGES = {
66
66
  missingGas: /Gas limit is required/,
67
67
  missingMaxFeePerGas: /maxFeePerGas is required/,
68
68
  missingMaxPriorityFeePerGas: /maxPriorityFeePerGas is required/,
69
- memoTooLong: /Memo too long/,
69
+ invalidMemo: /Invalid memo/,
70
70
  };
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3Jlc291cmNlcy90ZW1wby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILCtFQUErRTtBQUMvRSx5Q0FBeUM7QUFDekMsK0VBQStFO0FBRWxFLFFBQUEsY0FBYyxHQUFHO0lBQzVCLE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGdCQUFnQjtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtLQUN4QjtJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGdCQUFnQjtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtLQUN4QjtDQUNGLENBQUM7QUFFRiwyQ0FBMkM7QUFDOUIsUUFBQSxzQkFBc0IsR0FBRyw0Q0FBNEMsQ0FBQztBQUVuRiwrRUFBK0U7QUFDL0UseUJBQXlCO0FBQ3pCLCtFQUErRTtBQUVsRSxRQUFBLFNBQVMsR0FBRztJQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3pDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7Q0FDbEQsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRWxFLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsY0FBYyxFQUFFO1FBQ2QsQ0FBQyxFQUFFLG9FQUFxRjtRQUN4RixDQUFDLEVBQUUsb0VBQXFGO1FBQ3hGLE9BQU8sRUFBRSxDQUFDO0tBQ1g7Q0FDRixDQUFDO0FBRUYsK0VBQStFO0FBQy9FLGtCQUFrQjtBQUNsQiwrRUFBK0U7QUFFbEUsUUFBQSxlQUFlLEdBQUc7SUFDN0IsS0FBSyxFQUFFO1FBQ0wsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7UUFDMUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUMzRCxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRTtRQUM3RCxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtLQUMzQztJQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLENBQUM7Q0FDOUUsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRWxFLFFBQUEsY0FBYyxHQUFHO0lBQzVCLFlBQVksRUFBRSxvQ0FBb0M7SUFDbEQsWUFBWSxFQUFFLG1CQUFtQjtJQUNqQyxVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLG1CQUFtQixFQUFFLDBCQUEwQjtJQUMvQywyQkFBMkIsRUFBRSxrQ0FBa0M7SUFDL0QsV0FBVyxFQUFFLGVBQWU7Q0FDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdCByZXNvdXJjZXMgZm9yIFRlbXBvIFNES1xuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRJUC0yMCBUb2tlbiBBZGRyZXNzZXMgKFRlbXBvIFRlc3RuZXQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBURVNUTkVUX1RPS0VOUyA9IHtcbiAgcGF0aFVTRDoge1xuICAgIGFkZHJlc3M6ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgIG5hbWU6ICd0dGVtcG86cGF0aHVzZCcsXG4gIH0sXG4gIGFscGhhVVNEOiB7XG4gICAgYWRkcmVzczogJzB4MjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsXG4gICAgbmFtZTogJ3R0ZW1wbzphbHBoYXVzZCcsXG4gIH0sXG4gIGJldGFVU0Q6IHtcbiAgICBhZGRyZXNzOiAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJyxcbiAgICBuYW1lOiAndHRlbXBvOmJldGF1c2QnLFxuICB9LFxuICB0aGV0YVVTRDoge1xuICAgIGFkZHJlc3M6ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMnLFxuICAgIG5hbWU6ICd0dGVtcG86dGhldGF1c2QnLFxuICB9LFxufTtcblxuLy8gVmFsaWQgY2hlY2tzdW1tZWQgdGVzdCByZWNpcGllbnQgYWRkcmVzc1xuZXhwb3J0IGNvbnN0IFRFU1RfUkVDSVBJRU5UX0FERFJFU1MgPSAnMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjg0NEJjNDU0ZTQ0MzhmNDRlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gUGFyYW1ldGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgVFhfUEFSQU1TID0ge1xuICBkZWZhdWx0R2FzOiBCaWdJbnQoJzEwMDAwMCcpLFxuICBkZWZhdWx0TWF4RmVlUGVyR2FzOiBCaWdJbnQoJzIwMDAwMDAwMDAnKSxcbiAgZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzOiBCaWdJbnQoJzEwMDAwMDAwMDAnKSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNpZ25hdHVyZSBUZXN0IERhdGFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IFNJR05BVFVSRV9URVNUX0RBVEEgPSB7XG4gIHZhbGlkU2lnbmF0dXJlOiB7XG4gICAgcjogJzB4MTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZicgYXMgYDB4JHtzdHJpbmd9YCxcbiAgICBzOiAnMHhmZWRjYmEwOTg3NjU0MzIxZmVkY2JhMDk4NzY1NDMyMWZlZGNiYTA5ODc2NTQzMjFmZWRjYmEwOTg3NjU0MzIxJyBhcyBgMHgke3N0cmluZ31gLFxuICAgIHlQYXJpdHk6IDAsXG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW1vIFRlc3QgQ2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IE1FTU9fVEVTVF9DQVNFUyA9IHtcbiAgdmFsaWQ6IFtcbiAgICB7IGlucHV0OiAnMTIzNDUnLCBkZXNjcmlwdGlvbjogJ251bWVyaWMnIH0sXG4gICAgeyBpbnB1dDogJ0lOVi0wMDEnLCBkZXNjcmlwdGlvbjogJ2FscGhhbnVtZXJpYyB3aXRoIGRhc2gnIH0sXG4gICAgeyBpbnB1dDogJ2EnLnJlcGVhdCgzMiksIGRlc2NyaXB0aW9uOiAnbWF4IGxlbmd0aCAzMiBieXRlcycgfSxcbiAgICB7IGlucHV0OiAnJywgZGVzY3JpcHRpb246ICdlbXB0eSBzdHJpbmcnIH0sXG4gIF0sXG4gIGludmFsaWQ6IFt7IGlucHV0OiAnYScucmVwZWF0KDMzKSwgZGVzY3JpcHRpb246ICczMyBieXRlcyAtIGV4Y2VlZHMgbGltaXQnIH1dLFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgTWVzc2FnZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VTID0ge1xuICBub09wZXJhdGlvbnM6IC9BdCBsZWFzdCBvbmUgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLyxcbiAgbWlzc2luZ05vbmNlOiAvTm9uY2UgaXMgcmVxdWlyZWQvLFxuICBtaXNzaW5nR2FzOiAvR2FzIGxpbWl0IGlzIHJlcXVpcmVkLyxcbiAgbWlzc2luZ01heEZlZVBlckdhczogL21heEZlZVBlckdhcyBpcyByZXF1aXJlZC8sXG4gIG1pc3NpbmdNYXhQcmlvcml0eUZlZVBlckdhczogL21heFByaW9yaXR5RmVlUGVyR2FzIGlzIHJlcXVpcmVkLyxcbiAgbWVtb1Rvb0xvbmc6IC9NZW1vIHRvbyBsb25nLyxcbn07XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3Jlc291cmNlcy90ZW1wby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILCtFQUErRTtBQUMvRSx5Q0FBeUM7QUFDekMsK0VBQStFO0FBRWxFLFFBQUEsY0FBYyxHQUFHO0lBQzVCLE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGdCQUFnQjtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtLQUN4QjtJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGdCQUFnQjtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtLQUN4QjtDQUNGLENBQUM7QUFFRiwyQ0FBMkM7QUFDOUIsUUFBQSxzQkFBc0IsR0FBRyw0Q0FBNEMsQ0FBQztBQUVuRiwrRUFBK0U7QUFDL0UseUJBQXlCO0FBQ3pCLCtFQUErRTtBQUVsRSxRQUFBLFNBQVMsR0FBRztJQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3pDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7Q0FDbEQsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRWxFLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsY0FBYyxFQUFFO1FBQ2QsQ0FBQyxFQUFFLG9FQUFxRjtRQUN4RixDQUFDLEVBQUUsb0VBQXFGO1FBQ3hGLE9BQU8sRUFBRSxDQUFDO0tBQ1g7Q0FDRixDQUFDO0FBRUYsK0VBQStFO0FBQy9FLGtCQUFrQjtBQUNsQiwrRUFBK0U7QUFFbEUsUUFBQSxlQUFlLEdBQUc7SUFDN0IsS0FBSyxFQUFFO1FBQ0wsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7UUFDMUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUMzRCxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRTtRQUM3RCxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtLQUMzQztJQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLENBQUM7Q0FDOUUsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRWxFLFFBQUEsY0FBYyxHQUFHO0lBQzVCLFlBQVksRUFBRSxvQ0FBb0M7SUFDbEQsWUFBWSxFQUFFLG1CQUFtQjtJQUNqQyxVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLG1CQUFtQixFQUFFLDBCQUEwQjtJQUMvQywyQkFBMkIsRUFBRSxrQ0FBa0M7SUFDL0QsV0FBVyxFQUFFLGNBQWM7Q0FDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdCByZXNvdXJjZXMgZm9yIFRlbXBvIFNES1xuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRJUC0yMCBUb2tlbiBBZGRyZXNzZXMgKFRlbXBvIFRlc3RuZXQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBURVNUTkVUX1RPS0VOUyA9IHtcbiAgcGF0aFVTRDoge1xuICAgIGFkZHJlc3M6ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgIG5hbWU6ICd0dGVtcG86cGF0aHVzZCcsXG4gIH0sXG4gIGFscGhhVVNEOiB7XG4gICAgYWRkcmVzczogJzB4MjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsXG4gICAgbmFtZTogJ3R0ZW1wbzphbHBoYXVzZCcsXG4gIH0sXG4gIGJldGFVU0Q6IHtcbiAgICBhZGRyZXNzOiAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJyxcbiAgICBuYW1lOiAndHRlbXBvOmJldGF1c2QnLFxuICB9LFxuICB0aGV0YVVTRDoge1xuICAgIGFkZHJlc3M6ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMnLFxuICAgIG5hbWU6ICd0dGVtcG86dGhldGF1c2QnLFxuICB9LFxufTtcblxuLy8gVmFsaWQgY2hlY2tzdW1tZWQgdGVzdCByZWNpcGllbnQgYWRkcmVzc1xuZXhwb3J0IGNvbnN0IFRFU1RfUkVDSVBJRU5UX0FERFJFU1MgPSAnMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjg0NEJjNDU0ZTQ0MzhmNDRlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gUGFyYW1ldGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgVFhfUEFSQU1TID0ge1xuICBkZWZhdWx0R2FzOiBCaWdJbnQoJzEwMDAwMCcpLFxuICBkZWZhdWx0TWF4RmVlUGVyR2FzOiBCaWdJbnQoJzIwMDAwMDAwMDAnKSxcbiAgZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzOiBCaWdJbnQoJzEwMDAwMDAwMDAnKSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNpZ25hdHVyZSBUZXN0IERhdGFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IFNJR05BVFVSRV9URVNUX0RBVEEgPSB7XG4gIHZhbGlkU2lnbmF0dXJlOiB7XG4gICAgcjogJzB4MTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZicgYXMgYDB4JHtzdHJpbmd9YCxcbiAgICBzOiAnMHhmZWRjYmEwOTg3NjU0MzIxZmVkY2JhMDk4NzY1NDMyMWZlZGNiYTA5ODc2NTQzMjFmZWRjYmEwOTg3NjU0MzIxJyBhcyBgMHgke3N0cmluZ31gLFxuICAgIHlQYXJpdHk6IDAsXG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW1vIFRlc3QgQ2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IE1FTU9fVEVTVF9DQVNFUyA9IHtcbiAgdmFsaWQ6IFtcbiAgICB7IGlucHV0OiAnMTIzNDUnLCBkZXNjcmlwdGlvbjogJ251bWVyaWMnIH0sXG4gICAgeyBpbnB1dDogJ0lOVi0wMDEnLCBkZXNjcmlwdGlvbjogJ2FscGhhbnVtZXJpYyB3aXRoIGRhc2gnIH0sXG4gICAgeyBpbnB1dDogJ2EnLnJlcGVhdCgzMiksIGRlc2NyaXB0aW9uOiAnbWF4IGxlbmd0aCAzMiBieXRlcycgfSxcbiAgICB7IGlucHV0OiAnJywgZGVzY3JpcHRpb246ICdlbXB0eSBzdHJpbmcnIH0sXG4gIF0sXG4gIGludmFsaWQ6IFt7IGlucHV0OiAnYScucmVwZWF0KDMzKSwgZGVzY3JpcHRpb246ICczMyBieXRlcyAtIGV4Y2VlZHMgbGltaXQnIH1dLFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgTWVzc2FnZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VTID0ge1xuICBub09wZXJhdGlvbnM6IC9BdCBsZWFzdCBvbmUgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLyxcbiAgbWlzc2luZ05vbmNlOiAvTm9uY2UgaXMgcmVxdWlyZWQvLFxuICBtaXNzaW5nR2FzOiAvR2FzIGxpbWl0IGlzIHJlcXVpcmVkLyxcbiAgbWlzc2luZ01heEZlZVBlckdhczogL21heEZlZVBlckdhcyBpcyByZXF1aXJlZC8sXG4gIG1pc3NpbmdNYXhQcmlvcml0eUZlZVBlckdhczogL21heFByaW9yaXR5RmVlUGVyR2FzIGlzIHJlcXVpcmVkLyxcbiAgaW52YWxpZE1lbW86IC9JbnZhbGlkIG1lbW8vLFxufTtcbiJdfQ==
@@ -149,6 +149,59 @@ describe('Tempo Coin', function () {
149
149
  basecoin.isValidMemoId('00').should.equal(false);
150
150
  });
151
151
  });
152
+ describe('isWalletAddress', function () {
153
+ const baseAddress = '0x2476602c78e9a5e0563320c78878faa3952b256f';
154
+ it('should verify a plain address matching the base address', async function () {
155
+ const result = await basecoin.isWalletAddress({
156
+ address: baseAddress,
157
+ baseAddress,
158
+ coinSpecific: {},
159
+ });
160
+ result.should.equal(true);
161
+ });
162
+ it('should verify a memoId address whose base matches the wallet base address', async function () {
163
+ const result = await basecoin.isWalletAddress({
164
+ address: `${baseAddress}?memoId=8`,
165
+ baseAddress,
166
+ coinSpecific: {},
167
+ });
168
+ result.should.equal(true);
169
+ });
170
+ it('should verify using rootAddress when baseAddress is not provided', async function () {
171
+ const result = await basecoin.isWalletAddress({
172
+ address: `${baseAddress}?memoId=42`,
173
+ rootAddress: baseAddress,
174
+ coinSpecific: {},
175
+ });
176
+ result.should.equal(true);
177
+ });
178
+ it('should reject address with mismatched base address', async function () {
179
+ await basecoin
180
+ .isWalletAddress({
181
+ address: '0x0000000000000000000000000000000000000001?memoId=8',
182
+ baseAddress,
183
+ coinSpecific: {},
184
+ })
185
+ .should.be.rejectedWith(sdk_core_1.UnexpectedAddressError);
186
+ });
187
+ it('should reject an invalid address', async function () {
188
+ await basecoin
189
+ .isWalletAddress({
190
+ address: 'not-a-valid-address',
191
+ baseAddress,
192
+ coinSpecific: {},
193
+ })
194
+ .should.be.rejectedWith(sdk_core_1.InvalidAddressError);
195
+ });
196
+ it('should not require forwarderVersion (no forwarder contracts)', async function () {
197
+ const result = await basecoin.isWalletAddress({
198
+ address: `${baseAddress}?memoId=100`,
199
+ baseAddress,
200
+ coinSpecific: { forwarderVersion: undefined },
201
+ });
202
+ result.should.equal(true);
203
+ });
204
+ });
152
205
  describe('Testnet', function () {
153
206
  let testnetBasecoin;
154
207
  before(function () {
@@ -168,4 +221,4 @@ describe('Tempo Coin', function () {
168
221
  });
169
222
  });
170
223
  });
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0M7QUFDeEMsNkNBQTBDO0FBQzFDLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFDMUQsOENBQXFGO0FBRXJGLCtDQUFpQztBQUVqQyxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLFNBQXVDLEVBQVEsRUFBRTtRQUNuRixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQWdCLEVBQUUsRUFBRTtZQUM1Qyw2QkFBNkI7WUFDN0IsTUFBTSxlQUFlLEdBQThCO2dCQUNqRCxJQUFJO2dCQUNKLFFBQVEsRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWU7Z0JBQ3RELE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO2lCQUN4QztnQkFDUixRQUFRLEVBQUUsRUFBRTthQUNOLENBQUM7WUFDVCxPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRTtRQUN4QyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekYsUUFBUSxDQUFDLGNBQWMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7WUFDeEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEcsUUFBUSxDQUFDLGNBQWMsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFO1lBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsdURBQXVELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JHLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0RBQXNELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BHLFFBQVEsQ0FBQyxjQUFjLENBQUMsdURBQXVELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JHLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0RBQXNELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZTtZQUNwSCxRQUFRLENBQUMsY0FBYyxDQUFDLG9EQUFvRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWU7UUFDcEgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUU7WUFDMUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyw4REFBOEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUU7WUFDckUsUUFBUSxDQUFDLGNBQWMsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDaEcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDbEYsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDdEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFO1lBQzNDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3pHLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQzNGLGNBQWMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3RGLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtZQUMzQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdEcsNkJBQWtCLENBQ25CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyw4REFBOEQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDN0csOEJBQW1CLENBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRTtZQUM3QyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDckcsOEJBQW1CLENBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDbkcsOEJBQW1CLENBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRTtZQUMxRCxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDNUcsOEJBQW1CLENBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGVBQWUsRUFBRTtRQUN4QixFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFO1lBQ2xDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2pFLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFNBQVMsRUFBRTtRQUNsQixJQUFJLGVBQWUsQ0FBQztRQUVwQixNQUFNLENBQUM7WUFDTCxZQUFZLENBQUMsUUFBUSxFQUFFLGVBQU0sQ0FBQyxDQUFDO1lBQy9CLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3hDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUQsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsZUFBZSxDQUFDLGNBQWMsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcG8gfSBmcm9tICcuLi8uLi9zcmMvdGVtcG8nO1xuaW1wb3J0IHsgVHRlbXBvIH0gZnJvbSAnLi4vLi4vc3JjL3R0ZW1wbyc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQmFzZSwgSW52YWxpZEFkZHJlc3NFcnJvciwgSW52YWxpZE1lbW9JZEVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5kZXNjcmliZSgnVGVtcG8gQ29pbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcblxuICBjb25zdCByZWdpc3RlckNvaW4gPSAobmFtZTogc3RyaW5nLCBjb2luQ2xhc3M6IHR5cGVvZiBUZW1wbyB8IHR5cGVvZiBUdGVtcG8pOiB2b2lkID0+IHtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgKGJpdGdvOiBCaXRHb0Jhc2UpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIG1vY2sgc3RhdGljcyBjb2luXG4gICAgICBjb25zdCBtb2NrU3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4gPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZ1bGxOYW1lOiBuYW1lID09PSAndGVtcG8nID8gJ1RlbXBvJyA6ICdUZXN0bmV0IFRlbXBvJyxcbiAgICAgICAgbmV0d29yazoge1xuICAgICAgICAgIHR5cGU6IG5hbWUgPT09ICd0ZW1wbycgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCcsXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9IGFzIGFueTtcbiAgICAgIHJldHVybiBjb2luQ2xhc3MuY3JlYXRlSW5zdGFuY2UoYml0Z28sIG1vY2tTdGF0aWNzQ29pbik7XG4gICAgfSk7XG4gIH07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICByZWdpc3RlckNvaW4oJ3RlbXBvJywgVGVtcG8pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVtcG8nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnN0YW50aWF0ZSB0aGUgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RlbXBvJyk7XG4gICAgYmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGVtcG8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb2luIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RlbXBvJyk7XG4gICAgYmFzZWNvaW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1RlbXBvJyk7XG4gICAgYmFzZWNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTYpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcGxhaW4gRVZNIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcyB3aXRoIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTgnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0wJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9MTIzNDUnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCdpbnZhbGlkJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MTIzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTsgLy8gVG9vIHNob3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzIHdpdGggaW52YWxpZCBtZW1vSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD1hYmMnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9LTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9MS41Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTAxJykuc2hvdWxkLmVxdWFsKGZhbHNlKTsgLy8gTGVhZGluZyB6ZXJvXG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0nKS5zaG91bGQuZXF1YWwoZmFsc2UpOyAvLyBFbXB0eSBtZW1vSWRcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFkZHJlc3Mgd2l0aCB1bmtub3duIHF1ZXJ5IHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP2ludmFsaWQ9MTIzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/Zm9vPWJhcicpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzIHdpdGggbXVsdGlwbGUgbWVtb0lkIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0xJm1lbW9JZD0yJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFkZHJlc3Mgd2l0aCBleHRyYSBxdWVyeSBwYXJhbWV0ZXJzIGJlc2lkZXMgbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9MSZmb289YmFyJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFkZHJlc3NEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRob3V0IG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2ZicpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2ZicpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYmFzZUFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmYnKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QoYWRkcmVzc0RldGFpbHMubWVtb0lkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRoIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9OCcpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9OCcpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYmFzZUFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmYnKTtcbiAgICAgIGFkZHJlc3NEZXRhaWxzLm1lbW9JZC5zaG91bGQuZXF1YWwoJzgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gaW52YWxpZCBtZW1vSWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD1hYmMnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkTWVtb0lkRXJyb3JcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIG11bHRpcGxlIG1lbW9JZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IGJhc2Vjb2luLmdldEFkZHJlc3NEZXRhaWxzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTEmbWVtb0lkPTInKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkQWRkcmVzc0Vycm9yXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB1bmtub3duIHF1ZXJ5IHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9pbnZhbGlkPTgnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkQWRkcmVzc0Vycm9yXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBlbXB0eSBtZW1vSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9JykpLnNob3VsZC50aHJvdyhcbiAgICAgICAgSW52YWxpZEFkZHJlc3NFcnJvclxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gZXh0cmEgcXVlcnkgcGFyYW1ldGVycyBiZXNpZGVzIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0xJmZvbz1iYXInKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkQWRkcmVzc0Vycm9yXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZE1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGNvcnJlY3QgbWVtb0lkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vSWQoJzAnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcxJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMTIzNDUnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCc5OTk5OTk5OTk5OTknKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIG1lbW9JZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnLTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMS41Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vSWQoJ2FiYycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcwMScpLnNob3VsZC5lcXVhbChmYWxzZSk7IC8vIExlYWRpbmcgemVyb1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMDAnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVGVzdG5ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgdGVzdG5ldEJhc2Vjb2luO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZ2lzdGVyQ29pbigndHRlbXBvJywgVHRlbXBvKTtcbiAgICAgIHRlc3RuZXRCYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3R0ZW1wbycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW50aWF0ZSB0aGUgdGVzdG5ldCBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgdGVzdG5ldEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKFR0ZW1wbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCB0ZXN0bmV0IGNvaW4gbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRlc3RuZXRCYXNlY29pbi5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndHRlbXBvJyk7XG4gICAgICB0ZXN0bmV0QmFzZWNvaW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgVGVtcG8nKTtcbiAgICAgIHRlc3RuZXRCYXNlY29pbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlNik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3Mgd2l0aCBtZW1vSWQgb24gdGVzdG5ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRlc3RuZXRCYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD04Jykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0M7QUFDeEMsNkNBQTBDO0FBQzFDLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFDMUQsOENBQTZHO0FBRTdHLCtDQUFpQztBQUVqQyxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLFNBQXVDLEVBQVEsRUFBRTtRQUNuRixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQWdCLEVBQUUsRUFBRTtZQUM1Qyw2QkFBNkI7WUFDN0IsTUFBTSxlQUFlLEdBQThCO2dCQUNqRCxJQUFJO2dCQUNKLFFBQVEsRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWU7Z0JBQ3RELE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO2lCQUN4QztnQkFDUixRQUFRLEVBQUUsRUFBRTthQUNOLENBQUM7WUFDVCxPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxZQUFZLENBQUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxrQkFBa0IsRUFB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LENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUQsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsZUFBZSxDQUFDLGNBQWMsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcG8gfSBmcm9tICcuLi8uLi9zcmMvdGVtcG8nO1xuaW1wb3J0IHsgVHRlbXBvIH0gZnJvbSAnLi4vLi4vc3JjL3R0ZW1wbyc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQmFzZSwgSW52YWxpZEFkZHJlc3NFcnJvciwgSW52YWxpZE1lbW9JZEVycm9yLCBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5kZXNjcmliZSgnVGVtcG8gQ29pbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcblxuICBjb25zdCByZWdpc3RlckNvaW4gPSAobmFtZTogc3RyaW5nLCBjb2luQ2xhc3M6IHR5cGVvZiBUZW1wbyB8IHR5cGVvZiBUdGVtcG8pOiB2b2lkID0+IHtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgKGJpdGdvOiBCaXRHb0Jhc2UpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIG1vY2sgc3RhdGljcyBjb2luXG4gICAgICBjb25zdCBtb2NrU3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4gPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZ1bGxOYW1lOiBuYW1lID09PSAndGVtcG8nID8gJ1RlbXBvJyA6ICdUZXN0bmV0IFRlbXBvJyxcbiAgICAgICAgbmV0d29yazoge1xuICAgICAgICAgIHR5cGU6IG5hbWUgPT09ICd0ZW1wbycgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCcsXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9IGFzIGFueTtcbiAgICAgIHJldHVybiBjb2luQ2xhc3MuY3JlYXRlSW5zdGFuY2UoYml0Z28sIG1vY2tTdGF0aWNzQ29pbik7XG4gICAgfSk7XG4gIH07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICByZWdpc3RlckNvaW4oJ3RlbXBvJywgVGVtcG8pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVtcG8nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnN0YW50aWF0ZSB0aGUgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RlbXBvJyk7XG4gICAgYmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGVtcG8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb2luIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RlbXBvJyk7XG4gICAgYmFzZWNvaW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1RlbXBvJyk7XG4gICAgYmFzZWNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTYpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcGxhaW4gRVZNIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcyB3aXRoIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTgnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0wJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9MTIzNDUnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCdpbnZhbGlkJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MTIzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTsgLy8gVG9vIHNob3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzIHdpdGggaW52YWxpZCBtZW1vSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD1hYmMnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9LTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9MS41Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTAxJykuc2hvdWxkLmVxdWFsKGZhbHNlKTsgLy8gTGVhZGluZyB6ZXJvXG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0nKS5zaG91bGQuZXF1YWwoZmFsc2UpOyAvLyBFbXB0eSBtZW1vSWRcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFkZHJlc3Mgd2l0aCB1bmtub3duIHF1ZXJ5IHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP2ludmFsaWQ9MTIzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/Zm9vPWJhcicpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzIHdpdGggbXVsdGlwbGUgbWVtb0lkIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0xJm1lbW9JZD0yJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFkZHJlc3Mgd2l0aCBleHRyYSBxdWVyeSBwYXJhbWV0ZXJzIGJlc2lkZXMgbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9MSZmb289YmFyJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFkZHJlc3NEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRob3V0IG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2ZicpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2ZicpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYmFzZUFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmYnKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QoYWRkcmVzc0RldGFpbHMubWVtb0lkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRoIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9OCcpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9OCcpO1xuICAgICAgYWRkcmVzc0RldGFpbHMuYmFzZUFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmYnKTtcbiAgICAgIGFkZHJlc3NEZXRhaWxzLm1lbW9JZC5zaG91bGQuZXF1YWwoJzgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gaW52YWxpZCBtZW1vSWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD1hYmMnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkTWVtb0lkRXJyb3JcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIG11bHRpcGxlIG1lbW9JZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IGJhc2Vjb2luLmdldEFkZHJlc3NEZXRhaWxzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTEmbWVtb0lkPTInKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkQWRkcmVzc0Vycm9yXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB1bmtub3duIHF1ZXJ5IHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9pbnZhbGlkPTgnKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkQWRkcmVzc0Vycm9yXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBlbXB0eSBtZW1vSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zj9tZW1vSWQ9JykpLnNob3VsZC50aHJvdyhcbiAgICAgICAgSW52YWxpZEFkZHJlc3NFcnJvclxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gZXh0cmEgcXVlcnkgcGFyYW1ldGVycyBiZXNpZGVzIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygnMHgyNDc2NjAyYzc4ZTlhNWUwNTYzMzIwYzc4ODc4ZmFhMzk1MmIyNTZmP21lbW9JZD0xJmZvbz1iYXInKSkuc2hvdWxkLnRocm93KFxuICAgICAgICBJbnZhbGlkQWRkcmVzc0Vycm9yXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZE1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGNvcnJlY3QgbWVtb0lkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vSWQoJzAnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcxJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMTIzNDUnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCc5OTk5OTk5OTk5OTknKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIG1lbW9JZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnLTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMS41Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vSWQoJ2FiYycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcwMScpLnNob3VsZC5lcXVhbChmYWxzZSk7IC8vIExlYWRpbmcgemVyb1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMDAnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXYWxsZXRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJhc2VBZGRyZXNzID0gJzB4MjQ3NjYwMmM3OGU5YTVlMDU2MzMyMGM3ODg3OGZhYTM5NTJiMjU2Zic7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHBsYWluIGFkZHJlc3MgbWF0Y2hpbmcgdGhlIGJhc2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IGJhc2VBZGRyZXNzLFxuICAgICAgICBiYXNlQWRkcmVzcyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgbWVtb0lkIGFkZHJlc3Mgd2hvc2UgYmFzZSBtYXRjaGVzIHRoZSB3YWxsZXQgYmFzZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogYCR7YmFzZUFkZHJlc3N9P21lbW9JZD04YCxcbiAgICAgICAgYmFzZUFkZHJlc3MsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB1c2luZyByb290QWRkcmVzcyB3aGVuIGJhc2VBZGRyZXNzIGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IGAke2Jhc2VBZGRyZXNzfT9tZW1vSWQ9NDJgLFxuICAgICAgICByb290QWRkcmVzczogYmFzZUFkZHJlc3MsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzIHdpdGggbWlzbWF0Y2hlZCBiYXNlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxP21lbW9JZD04JyxcbiAgICAgICAgICBiYXNlQWRkcmVzcyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6ICdub3QtYS12YWxpZC1hZGRyZXNzJyxcbiAgICAgICAgICBiYXNlQWRkcmVzcyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbnZhbGlkQWRkcmVzc0Vycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHJlcXVpcmUgZm9yd2FyZGVyVmVyc2lvbiAobm8gZm9yd2FyZGVyIGNvbnRyYWN0cyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOiBgJHtiYXNlQWRkcmVzc30/bWVtb0lkPTEwMGAsXG4gICAgICAgIGJhc2VBZGRyZXNzLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHsgZm9yd2FyZGVyVmVyc2lvbjogdW5kZWZpbmVkIH0sXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUZXN0bmV0JywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB0ZXN0bmV0QmFzZWNvaW47XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmVnaXN0ZXJDb2luKCd0dGVtcG8nLCBUdGVtcG8pO1xuICAgICAgdGVzdG5ldEJhc2Vjb2luID0gYml0Z28uY29pbigndHRlbXBvJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSB0ZXN0bmV0IGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZXN0bmV0QmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVHRlbXBvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IHRlc3RuZXQgY29pbiBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgdGVzdG5ldEJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0dGVtcG8nKTtcbiAgICAgIHRlc3RuZXRCYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBUZW1wbycpO1xuICAgICAgdGVzdG5ldEJhc2Vjb2luLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcyB3aXRoIG1lbW9JZCBvbiB0ZXN0bmV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgdGVzdG5ldEJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcweDI0NzY2MDJjNzhlOWE1ZTA1NjMzMjBjNzg4NzhmYWEzOTUyYjI1NmY/bWVtb0lkPTgnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=