@bitgo/sdk-coin-bsc 22.12.18 → 22.12.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bsc.d.ts +1 -11
- package/dist/src/bsc.d.ts.map +1 -1
- package/dist/src/bsc.js +1 -27
- package/dist/src/bscToken.d.ts +2 -12
- package/dist/src/bscToken.d.ts.map +1 -1
- package/dist/src/bscToken.js +1 -28
- package/dist/test/unit/bsc.js +153 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
package/dist/src/bsc.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseCoin, BitGoBase, MPCAlgorithm, MultisigType } from '@bitgo/sdk-core';
|
|
2
2
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
|
|
3
|
-
import { AbstractEthLikeNewCoins
|
|
3
|
+
import { AbstractEthLikeNewCoins } from '@bitgo/abstract-eth';
|
|
4
4
|
import { TransactionBuilder } from './lib';
|
|
5
5
|
export declare class Bsc extends AbstractEthLikeNewCoins {
|
|
6
6
|
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
@@ -21,15 +21,5 @@ export declare class Bsc extends AbstractEthLikeNewCoins {
|
|
|
21
21
|
* @returns {Promise<Object>} response from BSCScan
|
|
22
22
|
*/
|
|
23
23
|
recoveryBlockchainExplorerQuery(query: Record<string, string>, apiKey?: string): Promise<Record<string, unknown>>;
|
|
24
|
-
/**
|
|
25
|
-
* Verify if a tss transaction is valid
|
|
26
|
-
*
|
|
27
|
-
* @param {VerifyEthTransactionOptions} params
|
|
28
|
-
* @param {TransactionParams} params.txParams - params object passed to send
|
|
29
|
-
* @param {TransactionPrebuild} params.txPrebuild - prebuild object returned by server
|
|
30
|
-
* @param {Wallet} params.wallet - Wallet object to obtain keys to verify against
|
|
31
|
-
* @returns {boolean}
|
|
32
|
-
*/
|
|
33
|
-
verifyTssTransaction(params: VerifyEthTransactionOptions): Promise<boolean>;
|
|
34
24
|
}
|
|
35
25
|
//# sourceMappingURL=bsc.d.ts.map
|
package/dist/src/bsc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsc.d.ts","sourceRoot":"","sources":["../../src/bsc.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"bsc.d.ts","sourceRoot":"","sources":["../../src/bsc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAU,YAAY,EAAE,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAmC,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,qBAAa,GAAI,SAAQ,uBAAuB;IAC9C,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAIrD,kBAAkB;IAClB,2BAA2B,IAAI,OAAO;IAItC,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,kBAAkB;IAClB,eAAe,IAAI,YAAY;IAI/B;;;;;OAKG;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;CAKpC"}
|
package/dist/src/bsc.js
CHANGED
|
@@ -42,32 +42,6 @@ class Bsc extends abstract_eth_1.AbstractEthLikeNewCoins {
|
|
|
42
42
|
const explorerUrl = sdk_core_1.common.Environments[this.bitgo.getEnv()].bscscanBaseUrl;
|
|
43
43
|
return await (0, abstract_eth_1.recoveryBlockchainExplorerQuery)(query, explorerUrl, apiToken);
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Verify if a tss transaction is valid
|
|
47
|
-
*
|
|
48
|
-
* @param {VerifyEthTransactionOptions} params
|
|
49
|
-
* @param {TransactionParams} params.txParams - params object passed to send
|
|
50
|
-
* @param {TransactionPrebuild} params.txPrebuild - prebuild object returned by server
|
|
51
|
-
* @param {Wallet} params.wallet - Wallet object to obtain keys to verify against
|
|
52
|
-
* @returns {boolean}
|
|
53
|
-
*/
|
|
54
|
-
async verifyTssTransaction(params) {
|
|
55
|
-
const { txParams, txPrebuild, wallet } = params;
|
|
56
|
-
if (!txParams?.recipients &&
|
|
57
|
-
!(txParams.prebuildTx?.consolidateId ||
|
|
58
|
-
txParams.stakingRequestId ||
|
|
59
|
-
txParams.prebuildTx?.stakingRequestId ||
|
|
60
|
-
(txParams.type && sdk_core_1.NO_RECIPIENT_TX_TYPES.has(txParams.type)))) {
|
|
61
|
-
throw new Error(`missing txParams`);
|
|
62
|
-
}
|
|
63
|
-
if (!wallet || !txPrebuild) {
|
|
64
|
-
throw new Error(`missing params`);
|
|
65
|
-
}
|
|
66
|
-
if (txParams.hop && txParams.recipients && txParams.recipients.length > 1) {
|
|
67
|
-
throw new Error(`tx cannot be both a batch and hop transaction`);
|
|
68
|
-
}
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
45
|
}
|
|
72
46
|
exports.Bsc = Bsc;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBeUc7QUFDekcsNENBQW9FO0FBQ3BFLHNEQUErRjtBQUMvRiwrQkFBMkM7QUFFM0MsTUFBYSxHQUFJLFNBQVEsc0NBQXVCO0lBQzlDLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFUyxxQkFBcUI7UUFDN0IsT0FBTyxJQUFJLHdCQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixzQkFBc0I7UUFDcEIsT0FBTyx3QkFBYSxDQUFDLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsK0JBQStCLENBQ25DLEtBQTZCLEVBQzdCLE1BQWU7UUFFZixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksaUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNwRixNQUFNLFdBQVcsR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzVFLE9BQU8sTUFBTSxJQUFBLDhDQUErQixFQUFDLEtBQUssRUFBRSxXQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7Q0FDRjtBQS9DRCxrQkErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiwgQml0R29CYXNlLCBjb21tb24sIE1QQ0FsZ29yaXRobSwgTXVsdGlzaWdUeXBlLCBtdWx0aXNpZ1R5cGVzIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucywgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9saWInO1xuXG5leHBvcnQgY2xhc3MgQnNjIGV4dGVuZHMgQWJzdHJhY3RFdGhMaWtlTmV3Q29pbnMge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBCc2MoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy50c3M7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIHF1ZXJ5IHRvIEJTQ1NjYW4gZm9yIGluZm9ybWF0aW9uIHN1Y2ggYXMgYmFsYW5jZSwgdG9rZW4gYmFsYW5jZSwgc29saWRpdHkgY2FsbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IGtleS12YWx1ZSBwYWlycyBvZiBwYXJhbWV0ZXJzIHRvIGFwcGVuZCBhZnRlciAvYXBpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlLZXkgb3B0aW9uYWwgQVBJIGtleSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgb25lIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IHJlc3BvbnNlIGZyb20gQlNDU2NhblxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBhcGlLZXk/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGFwaVRva2VuID0gYXBpS2V5IHx8IGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uYnNjc2NhbkFwaVRva2VuO1xuICAgIGNvbnN0IGV4cGxvcmVyVXJsID0gY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5ic2NzY2FuQmFzZVVybDtcbiAgICByZXR1cm4gYXdhaXQgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShxdWVyeSwgZXhwbG9yZXJVcmwgYXMgc3RyaW5nLCBhcGlUb2tlbik7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/bscToken.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* @prettier
|
|
3
3
|
*/
|
|
4
4
|
import { EthLikeTokenConfig } from '@bitgo/statics';
|
|
5
|
-
import { BitGoBase, CoinConstructor,
|
|
6
|
-
import { CoinNames, EthLikeToken
|
|
5
|
+
import { BitGoBase, CoinConstructor, MPCAlgorithm, NamedCoinConstructor } from '@bitgo/sdk-core';
|
|
6
|
+
import { CoinNames, EthLikeToken } from '@bitgo/abstract-eth';
|
|
7
7
|
import { TransactionBuilder } from './lib';
|
|
8
8
|
export { EthLikeTokenConfig };
|
|
9
9
|
export declare class BscToken extends EthLikeToken {
|
|
@@ -18,15 +18,5 @@ export declare class BscToken extends EthLikeToken {
|
|
|
18
18
|
/** @inheritDoc */
|
|
19
19
|
getMPCAlgorithm(): MPCAlgorithm;
|
|
20
20
|
getFullName(): string;
|
|
21
|
-
/**
|
|
22
|
-
* Verify if a tss transaction is valid
|
|
23
|
-
*
|
|
24
|
-
* @param {VerifyEthTransactionOptions} params
|
|
25
|
-
* @param {TransactionParams} params.txParams - params object passed to send
|
|
26
|
-
* @param {TransactionPrebuild} params.txPrebuild - prebuild object returned by server
|
|
27
|
-
* @param {Wallet} params.wallet - Wallet object to obtain keys to verify against
|
|
28
|
-
* @returns {boolean}
|
|
29
|
-
*/
|
|
30
|
-
verifyTssTransaction(params: VerifyEthTransactionOptions): Promise<boolean>;
|
|
31
21
|
}
|
|
32
22
|
//# sourceMappingURL=bscToken.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bscToken.d.ts","sourceRoot":"","sources":["../../src/bscToken.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAS,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"bscToken.d.ts","sourceRoot":"","sources":["../../src/bscToken.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAS,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,qBAAa,QAAS,SAAQ,YAAY;IACxC,SAAgB,WAAW,EAAE,kBAAkB,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,SAAS,CAGzB;gBACU,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB;IAG7D,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,eAAe;IAI1E,MAAM,CAAC,uBAAuB,IAAI,oBAAoB,EAAE;IAIxD,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAIrD,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,kBAAkB;IAClB,eAAe,IAAI,YAAY;IAI/B,WAAW,IAAI,MAAM;CAGtB"}
|
package/dist/src/bscToken.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BscToken = void 0;
|
|
7
7
|
const statics_1 = require("@bitgo/statics");
|
|
8
|
-
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
9
8
|
const abstract_eth_1 = require("@bitgo/abstract-eth");
|
|
10
9
|
const lib_1 = require("./lib");
|
|
11
10
|
class BscToken extends abstract_eth_1.EthLikeToken {
|
|
@@ -32,36 +31,10 @@ class BscToken extends abstract_eth_1.EthLikeToken {
|
|
|
32
31
|
getFullName() {
|
|
33
32
|
return 'Bsc Token';
|
|
34
33
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Verify if a tss transaction is valid
|
|
37
|
-
*
|
|
38
|
-
* @param {VerifyEthTransactionOptions} params
|
|
39
|
-
* @param {TransactionParams} params.txParams - params object passed to send
|
|
40
|
-
* @param {TransactionPrebuild} params.txPrebuild - prebuild object returned by server
|
|
41
|
-
* @param {Wallet} params.wallet - Wallet object to obtain keys to verify against
|
|
42
|
-
* @returns {boolean}
|
|
43
|
-
*/
|
|
44
|
-
async verifyTssTransaction(params) {
|
|
45
|
-
const { txParams, txPrebuild, wallet } = params;
|
|
46
|
-
if (!txParams?.recipients &&
|
|
47
|
-
!(txParams.prebuildTx?.consolidateId ||
|
|
48
|
-
txParams.stakingRequestId ||
|
|
49
|
-
txParams.prebuildTx?.stakingRequestId ||
|
|
50
|
-
(txParams.type && sdk_core_1.NO_RECIPIENT_TX_TYPES.has(txParams.type)))) {
|
|
51
|
-
throw new Error(`missing txParams`);
|
|
52
|
-
}
|
|
53
|
-
if (!wallet || !txPrebuild) {
|
|
54
|
-
throw new Error(`missing params`);
|
|
55
|
-
}
|
|
56
|
-
if (txParams.hop && txParams.recipients && txParams.recipients.length > 1) {
|
|
57
|
-
throw new Error(`tx cannot be both a batch and hop transaction`);
|
|
58
|
-
}
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
34
|
}
|
|
62
35
|
exports.BscToken = BscToken;
|
|
63
36
|
BscToken.coinNames = {
|
|
64
37
|
Mainnet: 'bsc',
|
|
65
38
|
Testnet: 'tbsc',
|
|
66
39
|
};
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnNjVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCw0Q0FBMkQ7QUFFM0Qsc0RBQThEO0FBQzlELCtCQUEyQztBQUkzQyxNQUFhLFFBQVMsU0FBUSwyQkFBWTtJQU14QyxZQUFZLEtBQWdCLEVBQUUsV0FBK0I7UUFDM0QsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBMEI7UUFDdEQsT0FBTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QjtRQUM1QixPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOztBQWpDSCw0QkFrQ0M7QUFoQ1Esa0JBQVMsR0FBYztJQUM1QixPQUFPLEVBQUUsS0FBSztJQUNkLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5cbmltcG9ydCB7IEV0aExpa2VUb2tlbkNvbmZpZywgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UsIENvaW5Db25zdHJ1Y3RvciwgTVBDQWxnb3JpdGhtLCBOYW1lZENvaW5Db25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBDb2luTmFtZXMsIEV0aExpa2VUb2tlbiB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9saWInO1xuXG5leHBvcnQgeyBFdGhMaWtlVG9rZW5Db25maWcgfTtcblxuZXhwb3J0IGNsYXNzIEJzY1Rva2VuIGV4dGVuZHMgRXRoTGlrZVRva2VuIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBFdGhMaWtlVG9rZW5Db25maWc7XG4gIHN0YXRpYyBjb2luTmFtZXM6IENvaW5OYW1lcyA9IHtcbiAgICBNYWlubmV0OiAnYnNjJyxcbiAgICBUZXN0bmV0OiAndGJzYycsXG4gIH07XG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHRva2VuQ29uZmlnOiBFdGhMaWtlVG9rZW5Db25maWcpIHtcbiAgICBzdXBlcihiaXRnbywgdG9rZW5Db25maWcsIEJzY1Rva2VuLmNvaW5OYW1lcyk7XG4gIH1cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3IoY29uZmlnOiBFdGhMaWtlVG9rZW5Db25maWcpOiBDb2luQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBzdXBlci5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKGNvbmZpZywgQnNjVG9rZW4uY29pbk5hbWVzKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdIHtcbiAgICByZXR1cm4gc3VwZXIuY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoQnNjVG9rZW4uY29pbk5hbWVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0JzYyBUb2tlbic7XG4gIH1cbn1cbiJdfQ==
|
package/dist/test/unit/bsc.js
CHANGED
|
@@ -3,7 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
require("should");
|
|
4
4
|
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
5
5
|
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
6
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
6
7
|
const index_1 = require("../../src/index");
|
|
8
|
+
const getBuilder_1 = require("./getBuilder");
|
|
9
|
+
/** Encode ERC-20 transfer(address,uint256) calldata without ethereumjs-abi. */
|
|
10
|
+
function encodeErc20Transfer(to, amount) {
|
|
11
|
+
const address = to.toLowerCase().replace(/^0x/, '').padStart(64, '0');
|
|
12
|
+
const value = BigInt(amount).toString(16).padStart(64, '0');
|
|
13
|
+
return `0xa9059cbb${address}${value}`;
|
|
14
|
+
}
|
|
7
15
|
const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
8
16
|
describe('Native BNB', function () {
|
|
9
17
|
before(function () {
|
|
@@ -33,5 +41,149 @@ describe('Native BNB', function () {
|
|
|
33
41
|
tbsc.allowsAccountConsolidations().should.equal(true);
|
|
34
42
|
});
|
|
35
43
|
});
|
|
44
|
+
describe('verifyTssTransaction', function () {
|
|
45
|
+
const recipientAddress = '0x174cfd823af8ce27ed0afee3fcf3c3ba259116be';
|
|
46
|
+
const wrongAddress = '0x7e85bdc27c050e3905ebf4b8e634d9ad6edd0de6';
|
|
47
|
+
const tokenContractAddress = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
48
|
+
const transferAmount = '1000000000000000000';
|
|
49
|
+
it('should accept a native BNB transfer where txHex matches declared recipient', async function () {
|
|
50
|
+
const coin = bitgo.coin('tbsc');
|
|
51
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('tbsc');
|
|
52
|
+
txBuilder.type(sdk_core_1.TransactionType.SingleSigSend);
|
|
53
|
+
txBuilder.fee({ fee: '10', gasLimit: '21000' });
|
|
54
|
+
txBuilder.counter(1);
|
|
55
|
+
txBuilder.contract(recipientAddress);
|
|
56
|
+
txBuilder.value(transferAmount);
|
|
57
|
+
const tx = await txBuilder.build();
|
|
58
|
+
const txHex = tx.toBroadcastFormat();
|
|
59
|
+
const wallet = new sdk_core_1.Wallet(bitgo, coin, { coinSpecific: { baseAddress: recipientAddress } });
|
|
60
|
+
const result = await coin.verifyTssTransaction({
|
|
61
|
+
txParams: {
|
|
62
|
+
type: 'transfer',
|
|
63
|
+
recipients: [{ address: recipientAddress, amount: transferAmount }],
|
|
64
|
+
},
|
|
65
|
+
txPrebuild: { txHex, coin: 'tbsc', walletId: 'fakeWalletId' },
|
|
66
|
+
wallet,
|
|
67
|
+
});
|
|
68
|
+
result.should.equal(true);
|
|
69
|
+
});
|
|
70
|
+
it('should reject a native BNB transfer when txHex recipient does not match declared recipient', async function () {
|
|
71
|
+
const coin = bitgo.coin('tbsc');
|
|
72
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('tbsc');
|
|
73
|
+
txBuilder.type(sdk_core_1.TransactionType.SingleSigSend);
|
|
74
|
+
txBuilder.fee({ fee: '10', gasLimit: '21000' });
|
|
75
|
+
txBuilder.counter(1);
|
|
76
|
+
txBuilder.contract(wrongAddress);
|
|
77
|
+
txBuilder.value(transferAmount);
|
|
78
|
+
const tx = await txBuilder.build();
|
|
79
|
+
const txHex = tx.toBroadcastFormat();
|
|
80
|
+
const wallet = new sdk_core_1.Wallet(bitgo, coin, { coinSpecific: { baseAddress: recipientAddress } });
|
|
81
|
+
await coin
|
|
82
|
+
.verifyTssTransaction({
|
|
83
|
+
txParams: {
|
|
84
|
+
type: 'transfer',
|
|
85
|
+
recipients: [{ address: recipientAddress, amount: transferAmount }],
|
|
86
|
+
},
|
|
87
|
+
txPrebuild: { txHex, coin: 'tbsc', walletId: 'fakeWalletId' },
|
|
88
|
+
wallet,
|
|
89
|
+
})
|
|
90
|
+
.should.be.rejectedWith('destination address does not match with the recipient address');
|
|
91
|
+
});
|
|
92
|
+
it('should accept a BEP-20 token transfer where calldata matches declared recipient', async function () {
|
|
93
|
+
const coin = bitgo.coin('tbsc');
|
|
94
|
+
const erc20TransferData = encodeErc20Transfer(recipientAddress, '10000000');
|
|
95
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('tbsc');
|
|
96
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
97
|
+
txBuilder.fee({ fee: '10', gasLimit: '60000' });
|
|
98
|
+
txBuilder.counter(1);
|
|
99
|
+
txBuilder.contract(tokenContractAddress);
|
|
100
|
+
txBuilder.data(erc20TransferData);
|
|
101
|
+
const tx = await txBuilder.build();
|
|
102
|
+
const txHex = tx.toBroadcastFormat();
|
|
103
|
+
const wallet = new sdk_core_1.Wallet(bitgo, coin, { coinSpecific: { baseAddress: recipientAddress } });
|
|
104
|
+
const result = await coin.verifyTssTransaction({
|
|
105
|
+
txParams: {
|
|
106
|
+
type: 'transfer',
|
|
107
|
+
recipients: [{ address: recipientAddress, amount: '10000000' }],
|
|
108
|
+
},
|
|
109
|
+
txPrebuild: { txHex, coin: 'tbsc', walletId: 'fakeWalletId' },
|
|
110
|
+
wallet,
|
|
111
|
+
});
|
|
112
|
+
result.should.equal(true);
|
|
113
|
+
});
|
|
114
|
+
it('should reject a BEP-20 token transfer when calldata recipient does not match declared recipient', async function () {
|
|
115
|
+
const coin = bitgo.coin('tbsc');
|
|
116
|
+
const erc20TransferData = encodeErc20Transfer(wrongAddress, '10000000');
|
|
117
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('tbsc');
|
|
118
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
119
|
+
txBuilder.fee({ fee: '10', gasLimit: '60000' });
|
|
120
|
+
txBuilder.counter(1);
|
|
121
|
+
txBuilder.contract(tokenContractAddress);
|
|
122
|
+
txBuilder.data(erc20TransferData);
|
|
123
|
+
const tx = await txBuilder.build();
|
|
124
|
+
const txHex = tx.toBroadcastFormat();
|
|
125
|
+
const wallet = new sdk_core_1.Wallet(bitgo, coin, { coinSpecific: { baseAddress: recipientAddress } });
|
|
126
|
+
await coin
|
|
127
|
+
.verifyTssTransaction({
|
|
128
|
+
txParams: {
|
|
129
|
+
type: 'transfer',
|
|
130
|
+
recipients: [{ address: recipientAddress, amount: '10000000' }],
|
|
131
|
+
},
|
|
132
|
+
txPrebuild: { txHex, coin: 'tbsc', walletId: 'fakeWalletId' },
|
|
133
|
+
wallet,
|
|
134
|
+
})
|
|
135
|
+
.should.be.rejectedWith('destination address does not match with the recipient address');
|
|
136
|
+
});
|
|
137
|
+
it('should accept a BEP-20 token transfer using WalletConnect recipients[0].data flow', async function () {
|
|
138
|
+
const coin = bitgo.coin('tbsc');
|
|
139
|
+
// txHex sends to recipientAddress; recipients[0].data encodes the same intent
|
|
140
|
+
const erc20TransferData = encodeErc20Transfer(recipientAddress, '10000000');
|
|
141
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('tbsc');
|
|
142
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
143
|
+
txBuilder.fee({ fee: '10', gasLimit: '60000' });
|
|
144
|
+
txBuilder.counter(1);
|
|
145
|
+
txBuilder.contract(tokenContractAddress);
|
|
146
|
+
txBuilder.data(erc20TransferData);
|
|
147
|
+
const tx = await txBuilder.build();
|
|
148
|
+
const txHex = tx.toBroadcastFormat();
|
|
149
|
+
const wallet = new sdk_core_1.Wallet(bitgo, coin, { coinSpecific: { baseAddress: recipientAddress } });
|
|
150
|
+
const result = await coin.verifyTssTransaction({
|
|
151
|
+
txParams: {
|
|
152
|
+
type: 'transfer',
|
|
153
|
+
// WalletConnect passes the intended calldata in recipients[0].data
|
|
154
|
+
recipients: [{ address: tokenContractAddress, amount: '0', data: erc20TransferData }],
|
|
155
|
+
},
|
|
156
|
+
txPrebuild: { txHex, coin: 'tbsc', walletId: 'fakeWalletId' },
|
|
157
|
+
wallet,
|
|
158
|
+
});
|
|
159
|
+
result.should.equal(true);
|
|
160
|
+
});
|
|
161
|
+
it('should reject a BEP-20 token transfer using WalletConnect flow when calldata recipient is tampered', async function () {
|
|
162
|
+
const coin = bitgo.coin('tbsc');
|
|
163
|
+
// txHex sends to wrongAddress (tampered)
|
|
164
|
+
const tamperedData = encodeErc20Transfer(wrongAddress, '10000000');
|
|
165
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('tbsc');
|
|
166
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
167
|
+
txBuilder.fee({ fee: '10', gasLimit: '60000' });
|
|
168
|
+
txBuilder.counter(1);
|
|
169
|
+
txBuilder.contract(tokenContractAddress);
|
|
170
|
+
txBuilder.data(tamperedData);
|
|
171
|
+
const tx = await txBuilder.build();
|
|
172
|
+
const txHex = tx.toBroadcastFormat();
|
|
173
|
+
// recipients[0].data declares the correct recipient (recipientAddress)
|
|
174
|
+
const correctData = encodeErc20Transfer(recipientAddress, '10000000');
|
|
175
|
+
const wallet = new sdk_core_1.Wallet(bitgo, coin, { coinSpecific: { baseAddress: recipientAddress } });
|
|
176
|
+
await coin
|
|
177
|
+
.verifyTssTransaction({
|
|
178
|
+
txParams: {
|
|
179
|
+
type: 'transfer',
|
|
180
|
+
recipients: [{ address: tokenContractAddress, amount: '0', data: correctData }],
|
|
181
|
+
},
|
|
182
|
+
txPrebuild: { txHex, coin: 'tbsc', walletId: 'fakeWalletId' },
|
|
183
|
+
wallet,
|
|
184
|
+
})
|
|
185
|
+
.should.be.rejectedWith('destination address does not match with the recipient address');
|
|
186
|
+
});
|
|
187
|
+
});
|
|
36
188
|
});
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2JzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQiw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBRTFDLDJDQUE0QztBQUU1QyxNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRTFFLFFBQVEsQ0FBQyxZQUFZLEVBQUU7SUFDckIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtRQUMxQixFQUFFLENBQUMsc0NBQXNDLEVBQUU7WUFDekMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQUcsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuXG5pbXBvcnQgeyBCc2MsIFRic2MgfSBmcm9tICcuLi8uLi9zcmMvaW5kZXgnO1xuXG5jb25zdCBiaXRnbzogVGVzdEJpdEdvQVBJID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuXG5kZXNjcmliZSgnTmF0aXZlIEJOQicsIGZ1bmN0aW9uICgpIHtcbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2JzYycsIEJzYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0YnNjJywgVGJzYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCYXNpYyBDb2luIEluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8gZm9yIGJzYycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJzYyA9IGJpdGdvLmNvaW4oJ2JzYycpO1xuXG4gICAgICBic2Muc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoQnNjKTtcbiAgICAgIGJzYy5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgnYnNjJyk7XG4gICAgICBic2MuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdic2MnKTtcbiAgICAgIGJzYy5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnTmF0aXZlIEJOQicpO1xuICAgICAgYnNjLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWUxOCk7XG4gICAgICBic2Muc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBic2MuYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8gZm9yIHRic2MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0YnNjID0gYml0Z28uY29pbigndGJzYycpO1xuXG4gICAgICB0YnNjLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKFRic2MpO1xuICAgICAgdGJzYy5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGJzYycpO1xuICAgICAgdGJzYy5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2JzYycpO1xuICAgICAgdGJzYy5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBOYXRpdmUgQk5CJyk7XG4gICAgICB0YnNjLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWUxOCk7XG4gICAgICB0YnNjLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgdGJzYy5hbGxvd3NBY2NvdW50Q29uc29saWRhdGlvbnMoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2JzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQiw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBQzFDLDhDQUEwRDtBQUUxRCwyQ0FBNEM7QUFFNUMsNkNBQTBDO0FBRTFDLCtFQUErRTtBQUMvRSxTQUFTLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxNQUFjO0lBQ3JELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVELE9BQU8sYUFBYSxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFMUUsUUFBUSxDQUFDLFlBQVksRUFBRTtJQUNyQixNQUFNLENBQUM7UUFDTCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtZQUN6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBRyxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxFQUFFLENB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RSxRQUFRLEVBQUUsY0FBYyxFQUFTO2dCQUNwRSxNQUFNO2FBQ1AsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBQzdGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcblxuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEJzYywgVGJzYyB9IGZyb20gJy4uLy4uL3NyYy9pbmRleCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuL2dldEJ1aWxkZXInO1xuXG4vKiogRW5jb2RlIEVSQy0yMCB0cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpIGNhbGxkYXRhIHdpdGhvdXQgZXRoZXJldW1qcy1hYmkuICovXG5mdW5jdGlvbiBlbmNvZGVFcmMyMFRyYW5zZmVyKHRvOiBzdHJpbmcsIGFtb3VudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYWRkcmVzcyA9IHRvLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXjB4LywgJycpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICBjb25zdCB2YWx1ZSA9IEJpZ0ludChhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgcmV0dXJuIGAweGE5MDU5Y2JiJHthZGRyZXNzfSR7dmFsdWV9YDtcbn1cblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcblxuZGVzY3JpYmUoJ05hdGl2ZSBCTkInLCBmdW5jdGlvbiAoKSB7XG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdic2MnLCBCc2MuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGJzYycsIFRic2MuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQmFzaWMgQ29pbiBJbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvIGZvciBic2MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBic2MgPSBiaXRnby5jb2luKCdic2MnKTtcblxuICAgICAgYnNjLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEJzYyk7XG4gICAgICBic2MuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ2JzYycpO1xuICAgICAgYnNjLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnYnNjJyk7XG4gICAgICBic2MuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ05hdGl2ZSBCTkInKTtcbiAgICAgIGJzYy5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuICAgICAgYnNjLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYnNjLmFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvIGZvciB0YnNjJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGJzYyA9IGJpdGdvLmNvaW4oJ3Ric2MnKTtcblxuICAgICAgdGJzYy5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihUYnNjKTtcbiAgICAgIHRic2MuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3Ric2MnKTtcbiAgICAgIHRic2MuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdic2MnKTtcbiAgICAgIHRic2MuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgTmF0aXZlIEJOQicpO1xuICAgICAgdGJzYy5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuICAgICAgdGJzYy5zdXBwb3J0c1RzcygpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHRic2MuYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHNzVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnO1xuICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnO1xuICAgIGNvbnN0IHRva2VuQ29udHJhY3RBZGRyZXNzID0gJzB4YTBiODY5OTFjNjIxOGIzNmMxZDE5ZDRhMmU5ZWIwY2UzNjA2ZWI0OCc7XG4gICAgY29uc3QgdHJhbnNmZXJBbW91bnQgPSAnMTAwMDAwMDAwMDAwMDAwMDAwMCc7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIG5hdGl2ZSBCTkIgdHJhbnNmZXIgd2hlcmUgdHhIZXggbWF0Y2hlcyBkZWNsYXJlZCByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGJzYycpIGFzIFRic2M7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ3Ric2MnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAnLCBnYXNMaW1pdDogJzIxMDAwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KHJlY2lwaWVudEFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLnZhbHVlKHRyYW5zZmVyQW1vdW50KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGNvaW4sIHsgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzIH0gfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogcmVjaXBpZW50QWRkcmVzcywgYW1vdW50OiB0cmFuc2ZlckFtb3VudCB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGNvaW46ICd0YnNjJywgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnIH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5hdGl2ZSBCTkIgdHJhbnNmZXIgd2hlbiB0eEhleCByZWNpcGllbnQgZG9lcyBub3QgbWF0Y2ggZGVjbGFyZWQgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3Ric2MnKSBhcyBUYnNjO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0YnNjJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQpO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwJywgZ2FzTGltaXQ6ICcyMTAwMCcgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdCh3cm9uZ0FkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLnZhbHVlKHRyYW5zZmVyQW1vdW50KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGNvaW4sIHsgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzIH0gfSk7XG5cbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsIGFtb3VudDogdHJhbnNmZXJBbW91bnQgfV0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCwgY29pbjogJ3Ric2MnLCB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcgfSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZGVzdGluYXRpb24gYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSByZWNpcGllbnQgYWRkcmVzcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSBCRVAtMjAgdG9rZW4gdHJhbnNmZXIgd2hlcmUgY2FsbGRhdGEgbWF0Y2hlcyBkZWNsYXJlZCByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGJzYycpIGFzIFRic2M7XG5cbiAgICAgIGNvbnN0IGVyYzIwVHJhbnNmZXJEYXRhID0gZW5jb2RlRXJjMjBUcmFuc2ZlcihyZWNpcGllbnRBZGRyZXNzLCAnMTAwMDAwMDAnKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGJzYycpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwJywgZ2FzTGltaXQ6ICc2MDAwMCcgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdCh0b2tlbkNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuZGF0YShlcmMyMFRyYW5zZmVyRGF0YSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBjb2luLCB7IGNvaW5TcGVjaWZpYzogeyBiYXNlQWRkcmVzczogcmVjaXBpZW50QWRkcmVzcyB9IH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsIGFtb3VudDogJzEwMDAwMDAwJyB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGNvaW46ICd0YnNjJywgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnIH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhIEJFUC0yMCB0b2tlbiB0cmFuc2ZlciB3aGVuIGNhbGxkYXRhIHJlY2lwaWVudCBkb2VzIG5vdCBtYXRjaCBkZWNsYXJlZCByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGJzYycpIGFzIFRic2M7XG5cbiAgICAgIGNvbnN0IGVyYzIwVHJhbnNmZXJEYXRhID0gZW5jb2RlRXJjMjBUcmFuc2Zlcih3cm9uZ0FkZHJlc3MsICcxMDAwMDAwMCcpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0YnNjJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAnLCBnYXNMaW1pdDogJzYwMDAwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRva2VuQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5kYXRhKGVyYzIwVHJhbnNmZXJEYXRhKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGNvaW4sIHsgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzIH0gfSk7XG5cbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsIGFtb3VudDogJzEwMDAwMDAwJyB9XSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4LCBjb2luOiAndGJzYycsIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdkZXN0aW5hdGlvbiBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIHJlY2lwaWVudCBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIEJFUC0yMCB0b2tlbiB0cmFuc2ZlciB1c2luZyBXYWxsZXRDb25uZWN0IHJlY2lwaWVudHNbMF0uZGF0YSBmbG93JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3Ric2MnKSBhcyBUYnNjO1xuXG4gICAgICAvLyB0eEhleCBzZW5kcyB0byByZWNpcGllbnRBZGRyZXNzOyByZWNpcGllbnRzWzBdLmRhdGEgZW5jb2RlcyB0aGUgc2FtZSBpbnRlbnRcbiAgICAgIGNvbnN0IGVyYzIwVHJhbnNmZXJEYXRhID0gZW5jb2RlRXJjMjBUcmFuc2ZlcihyZWNpcGllbnRBZGRyZXNzLCAnMTAwMDAwMDAnKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGJzYycpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwJywgZ2FzTGltaXQ6ICc2MDAwMCcgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdCh0b2tlbkNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuZGF0YShlcmMyMFRyYW5zZmVyRGF0YSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBjb2luLCB7IGNvaW5TcGVjaWZpYzogeyBiYXNlQWRkcmVzczogcmVjaXBpZW50QWRkcmVzcyB9IH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIC8vIFdhbGxldENvbm5lY3QgcGFzc2VzIHRoZSBpbnRlbmRlZCBjYWxsZGF0YSBpbiByZWNpcGllbnRzWzBdLmRhdGFcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB0b2tlbkNvbnRyYWN0QWRkcmVzcywgYW1vdW50OiAnMCcsIGRhdGE6IGVyYzIwVHJhbnNmZXJEYXRhIH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCwgY29pbjogJ3Ric2MnLCB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgQkVQLTIwIHRva2VuIHRyYW5zZmVyIHVzaW5nIFdhbGxldENvbm5lY3QgZmxvdyB3aGVuIGNhbGxkYXRhIHJlY2lwaWVudCBpcyB0YW1wZXJlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0YnNjJykgYXMgVGJzYztcblxuICAgICAgLy8gdHhIZXggc2VuZHMgdG8gd3JvbmdBZGRyZXNzICh0YW1wZXJlZClcbiAgICAgIGNvbnN0IHRhbXBlcmVkRGF0YSA9IGVuY29kZUVyYzIwVHJhbnNmZXIod3JvbmdBZGRyZXNzLCAnMTAwMDAwMDAnKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGJzYycpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwJywgZ2FzTGltaXQ6ICc2MDAwMCcgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdCh0b2tlbkNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuZGF0YSh0YW1wZXJlZERhdGEpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gcmVjaXBpZW50c1swXS5kYXRhIGRlY2xhcmVzIHRoZSBjb3JyZWN0IHJlY2lwaWVudCAocmVjaXBpZW50QWRkcmVzcylcbiAgICAgIGNvbnN0IGNvcnJlY3REYXRhID0gZW5jb2RlRXJjMjBUcmFuc2ZlcihyZWNpcGllbnRBZGRyZXNzLCAnMTAwMDAwMDAnKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwgeyBjb2luU3BlY2lmaWM6IHsgYmFzZUFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MgfSB9KTtcblxuICAgICAgYXdhaXQgY29pblxuICAgICAgICAudmVyaWZ5VHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogdG9rZW5Db250cmFjdEFkZHJlc3MsIGFtb3VudDogJzAnLCBkYXRhOiBjb3JyZWN0RGF0YSB9XSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4LCBjb2luOiAndGJzYycsIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdkZXN0aW5hdGlvbiBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIHJlY2lwaWVudCBhZGRyZXNzJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|