@bitgo/sdk-core 38.17.0 → 38.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +3 -3
- package/dist/src/account-lib/index.d.ts +0 -1
- package/dist/src/account-lib/index.d.ts.map +1 -1
- package/dist/src/account-lib/index.js +1 -2
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +14 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/keychain/keychains.js +4 -4
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +3 -21
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +6 -145
- package/dist/src/bitgo/safe/iSafe.d.ts +5 -0
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/index.d.ts +1 -1
- package/dist/src/bitgo/safe/index.d.ts.map +1 -1
- package/dist/src/bitgo/safe/index.js +2 -2
- package/dist/src/bitgo/safe/safe.d.ts +5 -1
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +23 -37
- package/dist/src/bitgo/safe/safes.js +4 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +20 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -11
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +13 -5
- package/dist/src/bitgo/wallet/safeKeychain.js +3 -3
- package/dist/test/unit/bitgo/safe/safe.js +28 -2
- package/dist/test/unit/bitgo/safe/safeDerivation.js +5 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +0 -52
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +0 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +0 -91
- package/dist/src/bitgo/safe/safeDerivation.d.ts +0 -43
- package/dist/src/bitgo/safe/safeDerivation.d.ts.map +0 -1
- package/dist/src/bitgo/safe/safeDerivation.js +0 -151
|
@@ -18,6 +18,6 @@ __exportStar(require("./derivableEd25519Pub"), exports);
|
|
|
18
18
|
__exportStar(require("./iSafe"), exports);
|
|
19
19
|
__exportStar(require("./iSafes"), exports);
|
|
20
20
|
__exportStar(require("./safe"), exports);
|
|
21
|
-
__exportStar(require("./safeDerivation"), exports);
|
|
22
21
|
__exportStar(require("./safes"), exports);
|
|
23
|
-
|
|
22
|
+
__exportStar(require("@bitgo/sdk-lib-safes"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXNDO0FBQ3RDLDBDQUF3QjtBQUN4QiwyQ0FBeUI7QUFDekIseUNBQXVCO0FBQ3ZCLDBDQUF3QjtBQUN4Qix1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Rlcml2YWJsZUVkMjU1MTlQdWInO1xuZXhwb3J0ICogZnJvbSAnLi9pU2FmZSc7XG5leHBvcnQgKiBmcm9tICcuL2lTYWZlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zYWZlcyc7XG5leHBvcnQgKiBmcm9tICdAYml0Z28vc2RrLWxpYi1zYWZlcyc7XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FreezeSafeBody, SafeData, SafeShareData, SafeShareState } from '@bitgo/public-types';
|
|
2
2
|
import { BitGoBase } from '../bitgoBase';
|
|
3
3
|
import { Wallet } from '../wallet';
|
|
4
|
-
import { AcceptSafeShareOptions, AddSafeMemberOptions, AddSafeWalletMemberOptions, CreateSafeWalletOptions, ISafe, WalletShareData } from './iSafe';
|
|
4
|
+
import { AcceptSafeShareOptions, AddSafeMemberOptions, AddSafeWalletMemberOptions, CreateSafeWalletOptions, ISafe, UpdateSafeOptions, WalletShareData } from './iSafe';
|
|
5
5
|
/**
|
|
6
6
|
* @experimental
|
|
7
7
|
*/
|
|
@@ -53,6 +53,10 @@ export declare class Safe implements ISafe {
|
|
|
53
53
|
* Accept a safe key share addressed to the caller.
|
|
54
54
|
*/
|
|
55
55
|
acceptShare(params: AcceptSafeShareOptions): Promise<SafeShareData>;
|
|
56
|
+
/**
|
|
57
|
+
* Update the safe label.
|
|
58
|
+
*/
|
|
59
|
+
update(params: UpdateSafeOptions): Promise<SafeData>;
|
|
56
60
|
/**
|
|
57
61
|
* Freeze the safe — blocks withdrawals on all safe wallets. Safe stays 'active'.
|
|
58
62
|
* @param params
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/safe.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/safe.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAEhH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAC;AAgDjB;;GAEG;AACH,qBAAa,IAAK,YAAW,KAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,SAAgB,KAAK,EAAE,QAAQ,CAAC;gBAEpB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAKhD,EAAE,IAAI,MAAM;IAIZ,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAIf,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAI5B;;;OAGG;IACH,GAAG,CAAC,KAAK,SAAK,GAAG,MAAM;IAIvB;;;;;;;;;OASG;IACG,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuFpE;;;OAGG;YACW,qBAAqB;YA+CrB,aAAa;IAK3B;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIhE;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC;IAIrF;;OAEG;IACG,UAAU,CAAC,MAAM,GAAE;QAAE,KAAK,CAAC,EAAE,cAAc,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAInF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAIzE;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK1D;;;OAGG;IACG,MAAM,CAAC,MAAM,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK5D;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAKlC,MAAM,IAAI,QAAQ;CAGnB"}
|
|
@@ -42,7 +42,6 @@ exports.Safe = void 0;
|
|
|
42
42
|
*/
|
|
43
43
|
const t = __importStar(require("io-ts"));
|
|
44
44
|
const public_types_1 = require("@bitgo/public-types");
|
|
45
|
-
const statics_1 = require("@bitgo/statics");
|
|
46
45
|
const errors_1 = require("../errors");
|
|
47
46
|
const keychain_1 = require("../keychain");
|
|
48
47
|
const utils_1 = require("../utils");
|
|
@@ -50,7 +49,7 @@ const codecs_1 = require("../utils/codecs");
|
|
|
50
49
|
const postWithCodec_1 = require("../utils/postWithCodec");
|
|
51
50
|
const wallet_1 = require("../wallet");
|
|
52
51
|
const safeKeychain_1 = require("../wallet/safeKeychain");
|
|
53
|
-
const
|
|
52
|
+
const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
|
|
54
53
|
const SafeRootKeySlot = t.keyof({
|
|
55
54
|
secp256k1Multisig: null,
|
|
56
55
|
ecdsaMpc: null,
|
|
@@ -75,35 +74,9 @@ const CreateWalletInSafeBody = t.union([
|
|
|
75
74
|
label: t.string,
|
|
76
75
|
type: t.literal('hot'),
|
|
77
76
|
multisigType: t.literal('tss'),
|
|
78
|
-
keys: t.tuple([t.string, t.string]),
|
|
77
|
+
keys: t.tuple([t.string, t.string, t.string]),
|
|
79
78
|
}),
|
|
80
79
|
]);
|
|
81
|
-
function onchainSlotForCoin(coin) {
|
|
82
|
-
if (coin.getDefaultMultisigType() === 'tss') {
|
|
83
|
-
throw new Error('MPC safe wallet minting requires multisigType "tss"; use "onchain" for non-MPC minting');
|
|
84
|
-
}
|
|
85
|
-
const curve = statics_1.coins.get(coin.getChain()).primaryKeyCurve;
|
|
86
|
-
if (curve === statics_1.KeyCurve.Secp256k1) {
|
|
87
|
-
return 'secp256k1Multisig';
|
|
88
|
-
}
|
|
89
|
-
if (curve === statics_1.KeyCurve.Ed25519) {
|
|
90
|
-
return 'ed25519Multisig';
|
|
91
|
-
}
|
|
92
|
-
throw new Error(`Coin '${coin.getChain()}' is not supported for safe wallet minting`);
|
|
93
|
-
}
|
|
94
|
-
function tssSlotForCoin(coin) {
|
|
95
|
-
if (coin.getDefaultMultisigType() !== 'tss') {
|
|
96
|
-
throw new Error(`Coin '${coin.getChain()}' is not a TSS coin; cannot mint a tss safe wallet for it`);
|
|
97
|
-
}
|
|
98
|
-
const curve = statics_1.coins.get(coin.getChain()).primaryKeyCurve;
|
|
99
|
-
if (curve === statics_1.KeyCurve.Secp256k1) {
|
|
100
|
-
return 'ecdsaMpc';
|
|
101
|
-
}
|
|
102
|
-
if (curve === statics_1.KeyCurve.Ed25519) {
|
|
103
|
-
throw new Error('ed25519 MPC safe wallet minting is not yet supported');
|
|
104
|
-
}
|
|
105
|
-
throw new Error(`Coin '${coin.getChain()}' is not supported for safe wallet minting`);
|
|
106
|
-
}
|
|
107
80
|
function rootIdFromSafe(safe, slot, position) {
|
|
108
81
|
const triplet = safe.rootKeys?.hot?.[slot];
|
|
109
82
|
if (!triplet || triplet.length !== 3) {
|
|
@@ -158,7 +131,13 @@ class Safe {
|
|
|
158
131
|
}
|
|
159
132
|
const isTss = params.multisigType === 'tss';
|
|
160
133
|
const coin = this.bitgo.coin(params.coin);
|
|
161
|
-
|
|
134
|
+
if (isTss && coin.getDefaultMultisigType() !== 'tss') {
|
|
135
|
+
throw new Error(`Coin '${coin.getChain()}' is not a TSS coin; cannot mint a tss safe wallet for it`);
|
|
136
|
+
}
|
|
137
|
+
if (!isTss && coin.getDefaultMultisigType() === 'tss') {
|
|
138
|
+
throw new Error('MPC safe wallet minting requires multisigType "tss"; use "onchain" for non-MPC minting');
|
|
139
|
+
}
|
|
140
|
+
const slot = isTss ? (0, sdk_lib_safes_1.tssSlotForCoin)(coin.getChain()) : (0, sdk_lib_safes_1.onchainSlotForCoin)(coin.getChain());
|
|
162
141
|
const indexResponse = await this.bitgo.get(this.url('/derivation-index')).query({ slot }).result();
|
|
163
142
|
const peeked = (0, codecs_1.decodeWithCodec)(GetDerivationIndexResponse, indexResponse, 'GetDerivationIndexResponse');
|
|
164
143
|
if (peeked.slot !== slot) {
|
|
@@ -191,9 +170,9 @@ class Safe {
|
|
|
191
170
|
throw new errors_1.IncorrectPasswordError();
|
|
192
171
|
}
|
|
193
172
|
const derived = slot === 'ed25519Multisig'
|
|
194
|
-
? (0,
|
|
195
|
-
: (0,
|
|
196
|
-
const derivedFromParentWithHardenedPath = (0, codecs_1.decodeWithCodec)(
|
|
173
|
+
? (0, sdk_lib_safes_1.deriveSafeChildEd25519Hardened)(rootPrv, index)
|
|
174
|
+
: (0, sdk_lib_safes_1.deriveAndSelfCheckSafeChildHardened)(rootPrv, index);
|
|
175
|
+
const derivedFromParentWithHardenedPath = (0, codecs_1.decodeWithCodec)(sdk_lib_safes_1.DerivedFromParentWithHardenedPath, derived.derivationPath, 'derivedFromParentWithHardenedPath');
|
|
197
176
|
const child = await keychains.add({
|
|
198
177
|
pub: derived.pub,
|
|
199
178
|
source: 'user',
|
|
@@ -232,7 +211,7 @@ class Safe {
|
|
|
232
211
|
}
|
|
233
212
|
const userRootMaterial = utils_1.ECDSAUtils.parseVrfKeyEnvelopes(userRootPrv);
|
|
234
213
|
const tssUtils = new utils_1.ECDSAUtils.EcdsaVrfMPCv2Utils(this.bitgo, coin);
|
|
235
|
-
const { userKeychain, backupKeychain } = await tssUtils.createSafeChildKeychains({
|
|
214
|
+
const { userKeychain, backupKeychain, bitgoKeychain } = await tssUtils.createSafeChildKeychains({
|
|
236
215
|
passphrase: params.passphrase,
|
|
237
216
|
enterprise: this.enterpriseId(),
|
|
238
217
|
safeId: this.id(),
|
|
@@ -243,10 +222,10 @@ class Safe {
|
|
|
243
222
|
userRootKeyShare: userRootMaterial.signing,
|
|
244
223
|
userRootVrfKeyShare: userRootMaterial.vrf,
|
|
245
224
|
});
|
|
246
|
-
if (userKeychain.id.length === 0 || backupKeychain.id.length === 0) {
|
|
225
|
+
if (userKeychain.id.length === 0 || backupKeychain.id.length === 0 || bitgoKeychain.id.length === 0) {
|
|
247
226
|
throw new Error('safe child key registration returned an empty id');
|
|
248
227
|
}
|
|
249
|
-
const keys = [userKeychain.id, backupKeychain.id];
|
|
228
|
+
const keys = [userKeychain.id, backupKeychain.id, bitgoKeychain.id];
|
|
250
229
|
const response = await (0, postWithCodec_1.postWithCodec)(this.bitgo, this.url('/wallets'), CreateWalletInSafeBody, {
|
|
251
230
|
coin: params.coin,
|
|
252
231
|
label: params.label,
|
|
@@ -284,6 +263,13 @@ class Safe {
|
|
|
284
263
|
async acceptShare(params) {
|
|
285
264
|
throw new Error('Safe.acceptShare is not yet implemented');
|
|
286
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Update the safe label.
|
|
268
|
+
*/
|
|
269
|
+
async update(params) {
|
|
270
|
+
const response = await this.bitgo.put(this.url()).send({ label: params.label }).result();
|
|
271
|
+
return (0, codecs_1.decodeWithCodec)(public_types_1.SafeData, response, 'SafeData');
|
|
272
|
+
}
|
|
287
273
|
/**
|
|
288
274
|
* Freeze the safe — blocks withdrawals on all safe wallets. Safe stays 'active'.
|
|
289
275
|
* @param params
|
|
@@ -305,4 +291,4 @@ class Safe {
|
|
|
305
291
|
}
|
|
306
292
|
}
|
|
307
293
|
exports.Safe = Safe;
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL3NhZmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7O0dBS0c7QUFDSCx5Q0FBMkI7QUFDM0Isc0RBQWdIO0FBQ2hILDRDQUFpRDtBQUdqRCxzQ0FBbUQ7QUFDbkQsMENBQXdEO0FBQ3hELG9DQUFzQztBQUN0Qyw0Q0FBOEQ7QUFDOUQsMERBQXVEO0FBQ3ZELHNDQUFtQztBQUNuQyx5REFBd0U7QUFTeEUscURBSTBCO0FBRTFCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxJQUFJO0lBQ2QsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLElBQUksRUFBRSxlQUFlO0lBQ3JCLEtBQUssRUFBRSxJQUFBLG1CQUFVLEVBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztDQUNwRCxDQUFDLENBQUM7QUFFSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNmLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN0QixZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUIsQ0FBQztJQUNGLHlEQUF5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IFRoZSBzYWZlIGNsaWVudCBzdXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSAoaW5jbHVkaW5nIGJyZWFraW5nXG4gKiBjaGFuZ2VzKSBiZWZvcmUgdGhlIHB1YmxpYyByZWxlYXNlLlxuICovXG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IEZyZWV6ZVNhZmVCb2R5LCBTYWZlRGF0YSwgU2FmZVNoYXJlRGF0YSwgU2FmZVNoYXJlU3RhdGUsIHR5cGUgUm9vdEtleVR5cGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IGNvaW5zLCBLZXlDdXJ2ZSB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IElCYXNlQ29pbiB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkgfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBFQ0RTQVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgYm91bmRlZEludCwgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMvY29kZWNzJztcbmltcG9ydCB7IHBvc3RXaXRoQ29kZWMgfSBmcm9tICcuLi91dGlscy9wb3N0V2l0aENvZGVjJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBJbnZhbGlkUm9vdEtleWNoYWluU291cmNlRXJyb3IgfSBmcm9tICcuLi93YWxsZXQvc2FmZUtleWNoYWluJztcbmltcG9ydCB7XG4gIEFjY2VwdFNhZmVTaGFyZU9wdGlvbnMsXG4gIEFkZFNhZmVNZW1iZXJPcHRpb25zLFxuICBBZGRTYWZlV2FsbGV0TWVtYmVyT3B0aW9ucyxcbiAgQ3JlYXRlU2FmZVdhbGxldE9wdGlvbnMsXG4gIElTYWZlLFxuICBXYWxsZXRTaGFyZURhdGEsXG59IGZyb20gJy4vaVNhZmUnO1xuaW1wb3J0IHtcbiAgZGVyaXZlQW5kU2VsZkNoZWNrU2FmZUNoaWxkSGFyZGVuZWQsXG4gIGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCxcbiAgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLFxufSBmcm9tICcuL3NhZmVEZXJpdmF0aW9uJztcblxuY29uc3QgU2FmZVJvb3RLZXlTbG90ID0gdC5rZXlvZih7XG4gIHNlY3AyNTZrMU11bHRpc2lnOiBudWxsLFxuICBlY2RzYU1wYzogbnVsbCxcbiAgZWRkc2FNcGM6IG51bGwsXG4gIGVkMjU1MTlNdWx0aXNpZzogbnVsbCxcbn0pO1xuXG5jb25zdCBHZXREZXJpdmF0aW9uSW5kZXhSZXNwb25zZSA9IHQudHlwZSh7XG4gIHNsb3Q6IFNhZmVSb290S2V5U2xvdCxcbiAgaW5kZXg6IGJvdW5kZWRJbnQoMCwgMHg3ZmZmZmZmZiwgJ2Rlcml2YXRpb25JbmRleCcpLFxufSk7XG5cbmNvbnN0IENyZWF0ZVdhbGxldEluU2FmZUJvZHkgPSB0LnVuaW9uKFtcbiAgdC5zdHJpY3Qoe1xuICAgIGNvaW46IHQuc3RyaW5nLFxuICAgIGxhYmVsOiB0LnN0cmluZyxcbiAgICB0eXBlOiB0LmxpdGVyYWwoJ2hvdCcpLFxuICAgIG11bHRpc2lnVHlwZTogdC5saXRlcmFsKCdvbmNoYWluJyksXG4gICAga2V5czogdC50dXBsZShbdC5zdHJpbmddKSxcbiAgfSksXG4gIC8vIFRTUyBtaW50IHVzZXMgb3JkZXJlZCB1c2VyIGFuZCBiYWNrdXAgY2hpbGQgZG9jdW1lbnRzLlxuICB0LnN0cmljdCh7XG4gICAgY29pbjogdC5zdHJpbmcsXG4gICAgbGFiZWw6IHQuc3RyaW5nLFxuICAgIHR5cGU6IHQubGl0ZXJhbCgnaG90JyksXG4gICAgbXVsdGlzaWdUeXBlOiB0LmxpdGVyYWwoJ3RzcycpLFxuICAgIGtleXM6IHQudHVwbGUoW3Quc3RyaW5nLCB0LnN0cmluZ10pLFxuICB9KSxcbl0pO1xuXG5mdW5jdGlvbiBvbmNoYWluU2xvdEZvckNvaW4oY29pbjogSUJhc2VDb2luKTogRXh0cmFjdDxSb290S2V5VHlwZSwgJ3NlY3AyNTZrMU11bHRpc2lnJyB8ICdlZDI1NTE5TXVsdGlzaWcnPiB7XG4gIGlmIChjb2luLmdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKSA9PT0gJ3RzcycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01QQyBzYWZlIHdhbGxldCBtaW50aW5nIHJlcXVpcmVzIG11bHRpc2lnVHlwZSBcInRzc1wiOyB1c2UgXCJvbmNoYWluXCIgZm9yIG5vbi1NUEMgbWludGluZycpO1xuICB9XG4gIGNvbnN0IGN1cnZlID0gY29pbnMuZ2V0KGNvaW4uZ2V0Q2hhaW4oKSkucHJpbWFyeUtleUN1cnZlO1xuICBpZiAoY3VydmUgPT09IEtleUN1cnZlLlNlY3AyNTZrMSkge1xuICAgIHJldHVybiAnc2VjcDI1NmsxTXVsdGlzaWcnO1xuICB9XG4gIGlmIChjdXJ2ZSA9PT0gS2V5Q3VydmUuRWQyNTUxOSkge1xuICAgIHJldHVybiAnZWQyNTUxOU11bHRpc2lnJztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYENvaW4gJyR7Y29pbi5nZXRDaGFpbigpfScgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2FmZSB3YWxsZXQgbWludGluZ2ApO1xufVxuXG5mdW5jdGlvbiB0c3NTbG90Rm9yQ29pbihjb2luOiBJQmFzZUNvaW4pOiBFeHRyYWN0PFJvb3RLZXlUeXBlLCAnZWNkc2FNcGMnPiB7XG4gIGlmIChjb2luLmdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKSAhPT0gJ3RzcycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvaW4gJyR7Y29pbi5nZXRDaGFpbigpfScgaXMgbm90IGEgVFNTIGNvaW47IGNhbm5vdCBtaW50IGEgdHNzIHNhZmUgd2FsbGV0IGZvciBpdGApO1xuICB9XG4gIGNvbnN0IGN1cnZlID0gY29pbnMuZ2V0KGNvaW4uZ2V0Q2hhaW4oKSkucHJpbWFyeUtleUN1cnZlO1xuICBpZiAoY3VydmUgPT09IEtleUN1cnZlLlNlY3AyNTZrMSkge1xuICAgIHJldHVybiAnZWNkc2FNcGMnO1xuICB9XG4gIGlmIChjdXJ2ZSA9PT0gS2V5Q3VydmUuRWQyNTUxOSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBNUEMgc2FmZSB3YWxsZXQgbWludGluZyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ29pbiAnJHtjb2luLmdldENoYWluKCl9JyBpcyBub3Qgc3VwcG9ydGVkIGZvciBzYWZlIHdhbGxldCBtaW50aW5nYCk7XG59XG5cbmZ1bmN0aW9uIHJvb3RJZEZyb21TYWZlKHNhZmU6IFNhZmVEYXRhLCBzbG90OiBSb290S2V5VHlwZSwgcG9zaXRpb246IDAgfCAxIHwgMik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaXBsZXQgPSBzYWZlLnJvb3RLZXlzPy5ob3Q/LltzbG90XTtcbiAgaWYgKCF0cmlwbGV0IHx8IHRyaXBsZXQubGVuZ3RoICE9PSAzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByb290SWQgPSB0cmlwbGV0W3Bvc2l0aW9uXTtcbiAgcmV0dXJuIHJvb3RJZC5sZW5ndGggPiAwID8gcm9vdElkIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNhZmUgaW1wbGVtZW50cyBJU2FmZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHVibGljIHJlYWRvbmx5IF9zYWZlOiBTYWZlRGF0YTtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzYWZlRGF0YTogU2FmZURhdGEpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5fc2FmZSA9IHNhZmVEYXRhO1xuICB9XG5cbiAgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2FmZS5pZDtcbiAgfVxuXG4gIGVudGVycHJpc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zYWZlLmVudGVycHJpc2VJZDtcbiAgfVxuXG4gIGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NhZmUubGFiZWw7XG4gIH1cblxuICBzdGF0dXMoKTogU2FmZURhdGFbJ3N0YXR1cyddIHtcbiAgICByZXR1cm4gdGhpcy5fc2FmZS5zdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJwcmlzZS1zY29wZWQgdjIgVVJMIGZvciB0aGlzIHNhZmUsIGUuZy4gL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZFxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHVybChleHRyYSA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iaXRnby51cmwoYC9lbnRlcnByaXNlLyR7dGhpcy5lbnRlcnByaXNlSWQoKX0vc2FmZXMvJHt0aGlzLmlkKCl9JHtleHRyYX1gLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW50IGEgY2hpbGQgd2FsbGV0OiBwZWVrIHRoZSBzZXF1ZW50aWFsIGluZGV4LCBkZXJpdmUgdGhlIGNoaWxkIGtleXMsIHJlZ2lzdGVyXG4gICAqIHRoZW0sIHRoZW4gbWludC5cbiAgICpcbiAgICogYG9uY2hhaW5gOiBoYXJkZW5lZC1kZXJpdmUgdGhlIHVzZXIgY2hpbGQgKGBtLzxpbmRleD4nYCksIHJlZ2lzdGVyIGl0XG4gICAqIHB1YmxpYy1vbmx5OyBiYWNrdXAgYW5kIEJpdEdvIGNoaWxkcmVuIGFyZSBzb2Z0LWRlcml2ZWQgb24gdGhlIHNlcnZlci5cbiAgICpcbiAgICogYHRzc2A6IGRlY3J5cHQgdGhlIHVzZXIgcm9vdCBibG9iLCBydW4gdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmUgY2VyZW1vbnksXG4gICAqIHJlZ2lzdGVyIHRoZSBvcmRlcmVkIGNoaWxkIGRvY3VtZW50cywgdGhlbiBtaW50LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlV2FsbGV0KHBhcmFtczogQ3JlYXRlU2FmZVdhbGxldE9wdGlvbnMpOiBQcm9taXNlPFdhbGxldD4ge1xuICAgIGlmIChwYXJhbXMucGFzc3BocmFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGFzc3BocmFzZSBpcyByZXF1aXJlZCB0byBtaW50IGEgc2FmZSB3YWxsZXQnKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy50eXBlICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnR5cGUgIT09ICdob3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgd2FsbGV0cyBhcmUgaG90LW9ubHkgaW4gdjEnKTtcbiAgICB9XG4gICAgY29uc3QgaXNUc3MgPSBwYXJhbXMubXVsdGlzaWdUeXBlID09PSAndHNzJztcblxuICAgIGNvbnN0IGNvaW4gPSB0aGlzLmJpdGdvLmNvaW4ocGFyYW1zLmNvaW4pO1xuICAgIGNvbnN0IHNsb3QgPSBpc1RzcyA/IHRzc1Nsb3RGb3JDb2luKGNvaW4pIDogb25jaGFpblNsb3RGb3JDb2luKGNvaW4pO1xuXG4gICAgY29uc3QgaW5kZXhSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvZGVyaXZhdGlvbi1pbmRleCcpKS5xdWVyeSh7IHNsb3QgfSkucmVzdWx0KCk7XG4gICAgY29uc3QgcGVla2VkID0gZGVjb2RlV2l0aENvZGVjKEdldERlcml2YXRpb25JbmRleFJlc3BvbnNlLCBpbmRleFJlc3BvbnNlLCAnR2V0RGVyaXZhdGlvbkluZGV4UmVzcG9uc2UnKTtcbiAgICBpZiAocGVla2VkLnNsb3QgIT09IHNsb3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZGVyaXZhdGlvbi1pbmRleCByZXR1cm5lZCBzbG90ICcke3BlZWtlZC5zbG90fScsIGV4cGVjdGVkICcke3Nsb3R9J2ApO1xuICAgIH1cbiAgICBjb25zdCB7IGluZGV4IH0gPSBwZWVrZWQ7XG5cbiAgICBjb25zdCBzYWZlRGF0YSA9IHJvb3RJZEZyb21TYWZlKHRoaXMuX3NhZmUsIHNsb3QsIDApICE9PSB1bmRlZmluZWQgPyB0aGlzLl9zYWZlIDogYXdhaXQgdGhpcy5mZXRjaFNhZmVEYXRhKCk7XG4gICAgY29uc3QgdXNlclJvb3RJZCA9IHJvb3RJZEZyb21TYWZlKHNhZmVEYXRhLCBzbG90LCAwKTtcbiAgICBpZiAodXNlclJvb3RJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmUgJHt0aGlzLmlkKCl9IGlzIG1pc3Npbmcgcm9vdEtleXMuaG90LiR7c2xvdH1gKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUc3MpIHtcbiAgICAgIGNvbnN0IGJhY2t1cFJvb3RJZCA9IHJvb3RJZEZyb21TYWZlKHNhZmVEYXRhLCBzbG90LCAxKTtcbiAgICAgIGNvbnN0IGJpdGdvUm9vdElkID0gcm9vdElkRnJvbVNhZmUoc2FmZURhdGEsIHNsb3QsIDIpO1xuICAgICAgaWYgKGJhY2t1cFJvb3RJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSAke3RoaXMuaWQoKX0gaXMgbWlzc2luZyByb290S2V5cy5ob3QuJHtzbG90fSBiYWNrdXAga2V5YCk7XG4gICAgICB9XG4gICAgICBpZiAoYml0Z29Sb290SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmUgJHt0aGlzLmlkKCl9IGlzIG1pc3Npbmcgcm9vdEtleXMuaG90LiR7c2xvdH0gYml0Z28ga2V5YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVUc3NXYWxsZXRJblNhZmUoY29pbiwgdXNlclJvb3RJZCwgYmFja3VwUm9vdElkLCBiaXRnb1Jvb3RJZCwgaW5kZXgsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5Y2hhaW5zID0gY29pbi5rZXljaGFpbnMoKTtcbiAgICBjb25zdCByb290S2V5Y2hhaW4gPSBhd2FpdCBrZXljaGFpbnMuZ2V0KHsgaWQ6IHVzZXJSb290SWQgfSk7XG4gICAgaWYgKHJvb3RLZXljaGFpbi5zb3VyY2UgIT09ICd1c2VyJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcihyb290S2V5Y2hhaW4uaWQsIHJvb3RLZXljaGFpbi5zb3VyY2UpO1xuICAgIH1cbiAgICBjb25zdCByb290UHJ2ID0gYXdhaXQgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleSh0aGlzLmJpdGdvLCByb290S2V5Y2hhaW4sIHBhcmFtcy5wYXNzcGhyYXNlKTtcbiAgICBpZiAoIXJvb3RQcnYpIHtcbiAgICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVyaXZlZCA9XG4gICAgICBzbG90ID09PSAnZWQyNTUxOU11bHRpc2lnJ1xuICAgICAgICA/IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChyb290UHJ2LCBpbmRleClcbiAgICAgICAgOiBkZXJpdmVBbmRTZWxmQ2hlY2tTYWZlQ2hpbGRIYXJkZW5lZChyb290UHJ2LCBpbmRleCk7XG4gICAgY29uc3QgZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLFxuICAgICAgZGVyaXZlZC5kZXJpdmF0aW9uUGF0aCxcbiAgICAgICdkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgnXG4gICAgKTtcblxuICAgIGNvbnN0IGNoaWxkID0gYXdhaXQga2V5Y2hhaW5zLmFkZCh7XG4gICAgICBwdWI6IGRlcml2ZWQucHViLFxuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBrZXlUeXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgcGFyZW50OiB1c2VyUm9vdElkLFxuICAgICAgc2FmZUlkOiB0aGlzLmlkKCksXG4gICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgsXG4gICAgfSk7XG4gICAgY29uc3QgY2hpbGRJZCA9IGNoaWxkLmlkO1xuICAgIGlmIChjaGlsZElkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzYWZlIGNoaWxkIGtleSByZWdpc3RyYXRpb24gcmV0dXJuZWQgYW4gZW1wdHkgaWQnKTtcbiAgICB9XG4gICAgY29uc3Qga2V5czogW3N0cmluZ10gPSBbY2hpbGRJZF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3RXaXRoQ29kZWModGhpcy5iaXRnbywgdGhpcy51cmwoJy93YWxsZXRzJyksIENyZWF0ZVdhbGxldEluU2FmZUJvZHksIHtcbiAgICAgIGNvaW46IHBhcmFtcy5jb2luLFxuICAgICAgbGFiZWw6IHBhcmFtcy5sYWJlbCxcbiAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICBrZXlzLFxuICAgIH0pLnJlc3VsdCgpO1xuICAgIHJldHVybiBuZXcgV2FsbGV0KHRoaXMuYml0Z28sIGNvaW4sIHJlc3BvbnNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUU1Mgd2FsbGV0IG1pbnQ6IGRlY3J5cHQgdGhlIHVzZXIgcm9vdCBibG9iLCBydW4gdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmVcbiAgICogY2VyZW1vbnksIHJlZ2lzdGVyIHRoZSBvcmRlcmVkIGNoaWxkIGRvY3VtZW50cywgdGhlbiBtaW50LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVUc3NXYWxsZXRJblNhZmUoXG4gICAgY29pbjogSUJhc2VDb2luLFxuICAgIHVzZXJSb290SWQ6IHN0cmluZyxcbiAgICBiYWNrdXBSb290SWQ6IHN0cmluZyxcbiAgICBiaXRnb1Jvb3RJZDogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFyYW1zOiBDcmVhdGVTYWZlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFdhbGxldD4ge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IGNvaW4ua2V5Y2hhaW5zKCk7XG4gICAgY29uc3QgdXNlclJvb3RLZXljaGFpbiA9IGF3YWl0IGtleWNoYWlucy5nZXQoeyBpZDogdXNlclJvb3RJZCB9KTtcbiAgICBpZiAodXNlclJvb3RLZXljaGFpbi5zb3VyY2UgIT09ICd1c2VyJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcih1c2VyUm9vdEtleWNoYWluLmlkLCB1c2VyUm9vdEtleWNoYWluLnNvdXJjZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclJvb3RQcnYgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5KHRoaXMuYml0Z28sIHVzZXJSb290S2V5Y2hhaW4sIHBhcmFtcy5wYXNzcGhyYXNlKTtcbiAgICBpZiAoIXVzZXJSb290UHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcigpO1xuICAgIH1cbiAgICBjb25zdCB1c2VyUm9vdE1hdGVyaWFsID0gRUNEU0FVdGlscy5wYXJzZVZyZktleUVudmVsb3Blcyh1c2VyUm9vdFBydik7XG5cbiAgICBjb25zdCB0c3NVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVnJmTVBDdjJVdGlscyh0aGlzLmJpdGdvLCBjb2luKTtcbiAgICBjb25zdCB7IHVzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4gfSA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVNhZmVDaGlsZEtleWNoYWlucyh7XG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGVudGVycHJpc2U6IHRoaXMuZW50ZXJwcmlzZUlkKCksXG4gICAgICBzYWZlSWQ6IHRoaXMuaWQoKSxcbiAgICAgIHBhcmVudEtleUlkOiBiaXRnb1Jvb3RJZCxcbiAgICAgIGRlcml2YXRpb25JbmRleDogaW5kZXgsXG4gICAgICB1c2VyUm9vdEtleUlkOiB1c2VyUm9vdElkLFxuICAgICAgYmFja3VwUm9vdEtleUlkOiBiYWNrdXBSb290SWQsXG4gICAgICB1c2VyUm9vdEtleVNoYXJlOiB1c2VyUm9vdE1hdGVyaWFsLnNpZ25pbmcsXG4gICAgICB1c2VyUm9vdFZyZktleVNoYXJlOiB1c2VyUm9vdE1hdGVyaWFsLnZyZixcbiAgICB9KTtcbiAgICBpZiAodXNlcktleWNoYWluLmlkLmxlbmd0aCA9PT0gMCB8fCBiYWNrdXBLZXljaGFpbi5pZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2FmZSBjaGlsZCBrZXkgcmVnaXN0cmF0aW9uIHJldHVybmVkIGFuIGVtcHR5IGlkJyk7XG4gICAgfVxuICAgIGNvbnN0IGtleXM6IFtzdHJpbmcsIHN0cmluZ10gPSBbdXNlcktleWNoYWluLmlkLCBiYWNrdXBLZXljaGFpbi5pZF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3RXaXRoQ29kZWModGhpcy5iaXRnbywgdGhpcy51cmwoJy93YWxsZXRzJyksIENyZWF0ZVdhbGxldEluU2FmZUJvZHksIHtcbiAgICAgIGNvaW46IHBhcmFtcy5jb2luLFxuICAgICAgbGFiZWw6IHBhcmFtcy5sYWJlbCxcbiAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIGtleXMsXG4gICAgfSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQodGhpcy5iaXRnbywgY29pbiwgcmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFNhZmVEYXRhKCk6IFByb21pc2U8U2FmZURhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCkpLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVXaXRoQ29kZWMoU2FmZURhdGEsIHJlc3BvbnNlLCAnU2FmZURhdGEnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBtZW1iZXIgdG8gdGhlIHdob2xlIHNhZmUgKHZpZXcvYWRtaW4vc3BlbmQpLiBTcGVuZCBvcGVucyBhIGtleSBzaGFyZS5cbiAgICovXG4gIGFzeW5jIGFkZE1lbWJlcihwYXJhbXM6IEFkZFNhZmVNZW1iZXJPcHRpb25zKTogUHJvbWlzZTxTYWZlRGF0YT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignU2FmZS5hZGRNZW1iZXIgaXMgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYXJlIE9ORSBzYWZlIHdhbGxldCB3aXRoIGEgbm9uLW1lbWJlciB2aWEgdGhlIGV4aXN0aW5nIHdhbGxldC1zaGFyZSBoYW5kc2hha2UuXG4gICAqL1xuICBhc3luYyBhZGRNZW1iZXJUb1dhbGxldChwYXJhbXM6IEFkZFNhZmVXYWxsZXRNZW1iZXJPcHRpb25zKTogUHJvbWlzZTxXYWxsZXRTaGFyZURhdGE+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUuYWRkTWVtYmVyVG9XYWxsZXQgaXMgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgdGhlIHNhZmUga2V5IHNoYXJlcyB2aXNpYmxlIHRvIHRoZSBjYWxsZXIuXG4gICAqL1xuICBhc3luYyBsaXN0U2hhcmVzKHBhcmFtczogeyBzdGF0ZT86IFNhZmVTaGFyZVN0YXRlIH0gPSB7fSk6IFByb21pc2U8U2FmZVNoYXJlRGF0YVtdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlLmxpc3RTaGFyZXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdCBhIHNhZmUga2V5IHNoYXJlIGFkZHJlc3NlZCB0byB0aGUgY2FsbGVyLlxuICAgKi9cbiAgYXN5bmMgYWNjZXB0U2hhcmUocGFyYW1zOiBBY2NlcHRTYWZlU2hhcmVPcHRpb25zKTogUHJvbWlzZTxTYWZlU2hhcmVEYXRhPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlLmFjY2VwdFNoYXJlIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGcmVlemUgdGhlIHNhZmUg4oCUIGJsb2NrcyB3aXRoZHJhd2FscyBvbiBhbGwgc2FmZSB3YWxsZXRzLiBTYWZlIHN0YXlzICdhY3RpdmUnLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBmcmVlemUocGFyYW1zOiBGcmVlemVTYWZlQm9keSA9IHt9KTogUHJvbWlzZTxTYWZlRGF0YT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFdpdGhDb2RlYyh0aGlzLmJpdGdvLCB0aGlzLnVybCgnL2ZyZWV6ZScpLCBGcmVlemVTYWZlQm9keSwgcGFyYW1zKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gIH1cblxuICAvKipcbiAgICogQXJjaGl2ZSB0aGUgc2FmZS4gUmVxdWlyZXMgZXZlcnkgc2FmZSB3YWxsZXQgdG8gYWxyZWFkeSBiZSBhcmNoaXZlZDsgYWxzbyB0aGUgYWJhbmRvbm1lbnRcbiAgICogcGF0aCBmb3IgYSBzdHVjayAnaW5pdGlhbGl6aW5nJyBzYWZlLlxuICAgKi9cbiAgYXN5bmMgYXJjaGl2ZSgpOiBQcm9taXNlPFNhZmVEYXRhPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy51cmwoJy9hcmNoaXZlJykpLnNlbmQoKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gIH1cblxuICB0b0pTT04oKTogU2FmZURhdGEge1xuICAgIHJldHVybiB0aGlzLl9zYWZlO1xuICB9XG59XG4iXX0=
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL3NhZmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7O0dBS0c7QUFDSCx5Q0FBMkI7QUFDM0Isc0RBQWdIO0FBR2hILHNDQUFtRDtBQUNuRCwwQ0FBd0Q7QUFDeEQsb0NBQXNDO0FBQ3RDLDRDQUE4RDtBQUM5RCwwREFBdUQ7QUFDdkQsc0NBQW1DO0FBQ25DLHlEQUF3RTtBQVV4RSx3REFNOEI7QUFFOUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5QixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFLElBQUk7SUFDZCxlQUFlLEVBQUUsSUFBSTtDQUN0QixDQUFDLENBQUM7QUFFSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsSUFBSSxFQUFFLGVBQWU7SUFDckIsS0FBSyxFQUFFLElBQUEsbUJBQVUsRUFBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDO0NBQ3BELENBQUMsQ0FBQztBQUVILE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2YsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3RCLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMxQixDQUFDO0lBQ0YseURBQXlEO0lBQ3pELENBQUMs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Q0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUF5QixFQUFFO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSw2QkFBYSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSw2QkFBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZHLE9BQU8sSUFBQSx3QkFBZSxFQUFDLHVCQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdFLE9BQU8sSUFBQSx3QkFBZSxFQUFDLHVCQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQW5QRCxvQkFtUEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhlIHNhZmUgY2xpZW50IHN1cmZhY2UgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIChpbmNsdWRpbmcgYnJlYWtpbmdcbiAqIGNoYW5nZXMpIGJlZm9yZSB0aGUgcHVibGljIHJlbGVhc2UuXG4gKi9cbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHsgRnJlZXplU2FmZUJvZHksIFNhZmVEYXRhLCBTYWZlU2hhcmVEYXRhLCBTYWZlU2hhcmVTdGF0ZSwgdHlwZSBSb290S2V5VHlwZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgSUJhc2VDb2luIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEluY29ycmVjdFBhc3N3b3JkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleSB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IEVDRFNBVXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBib3VuZGVkSW50LCBkZWNvZGVXaXRoQ29kZWMgfSBmcm9tICcuLi91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgcG9zdFdpdGhDb2RlYyB9IGZyb20gJy4uL3V0aWxzL3Bvc3RXaXRoQ29kZWMnO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0JztcbmltcG9ydCB7IEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvciB9IGZyb20gJy4uL3dhbGxldC9zYWZlS2V5Y2hhaW4nO1xuaW1wb3J0IHtcbiAgQWNjZXB0U2FmZVNoYXJlT3B0aW9ucyxcbiAgQWRkU2FmZU1lbWJlck9wdGlvbnMsXG4gIEFkZFNhZmVXYWxsZXRNZW1iZXJPcHRpb25zLFxuICBDcmVhdGVTYWZlV2FsbGV0T3B0aW9ucyxcbiAgSVNhZmUsXG4gIFVwZGF0ZVNhZmVPcHRpb25zLFxuICBXYWxsZXRTaGFyZURhdGEsXG59IGZyb20gJy4vaVNhZmUnO1xuaW1wb3J0IHtcbiAgZGVyaXZlQW5kU2VsZkNoZWNrU2FmZUNoaWxkSGFyZGVuZWQsXG4gIGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCxcbiAgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLFxuICBvbmNoYWluU2xvdEZvckNvaW4sXG4gIHRzc1Nsb3RGb3JDb2luLFxufSBmcm9tICdAYml0Z28vc2RrLWxpYi1zYWZlcyc7XG5cbmNvbnN0IFNhZmVSb290S2V5U2xvdCA9IHQua2V5b2Yoe1xuICBzZWNwMjU2azFNdWx0aXNpZzogbnVsbCxcbiAgZWNkc2FNcGM6IG51bGwsXG4gIGVkZHNhTXBjOiBudWxsLFxuICBlZDI1NTE5TXVsdGlzaWc6IG51bGwsXG59KTtcblxuY29uc3QgR2V0RGVyaXZhdGlvbkluZGV4UmVzcG9uc2UgPSB0LnR5cGUoe1xuICBzbG90OiBTYWZlUm9vdEtleVNsb3QsXG4gIGluZGV4OiBib3VuZGVkSW50KDAsIDB4N2ZmZmZmZmYsICdkZXJpdmF0aW9uSW5kZXgnKSxcbn0pO1xuXG5jb25zdCBDcmVhdGVXYWxsZXRJblNhZmVCb2R5ID0gdC51bmlvbihbXG4gIHQuc3RyaWN0KHtcbiAgICBjb2luOiB0LnN0cmluZyxcbiAgICBsYWJlbDogdC5zdHJpbmcsXG4gICAgdHlwZTogdC5saXRlcmFsKCdob3QnKSxcbiAgICBtdWx0aXNpZ1R5cGU6IHQubGl0ZXJhbCgnb25jaGFpbicpLFxuICAgIGtleXM6IHQudHVwbGUoW3Quc3RyaW5nXSksXG4gIH0pLFxuICAvLyBUU1MgbWludCB1c2VzIG9yZGVyZWQgdXNlciBhbmQgYmFja3VwIGNoaWxkIGRvY3VtZW50cy5cbiAgdC5zdHJpY3Qoe1xuICAgIGNvaW46IHQuc3RyaW5nLFxuICAgIGxhYmVsOiB0LnN0cmluZyxcbiAgICB0eXBlOiB0LmxpdGVyYWwoJ2hvdCcpLFxuICAgIG11bHRpc2lnVHlwZTogdC5saXRlcmFsKCd0c3MnKSxcbiAgICBrZXlzOiB0LnR1cGxlKFt0LnN0cmluZywgdC5zdHJpbmcsIHQuc3RyaW5nXSksXG4gIH0pLFxuXSk7XG5cbmZ1bmN0aW9uIHJvb3RJZEZyb21TYWZlKHNhZmU6IFNhZmVEYXRhLCBzbG90OiBSb290S2V5VHlwZSwgcG9zaXRpb246IDAgfCAxIHwgMik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaXBsZXQgPSBzYWZlLnJvb3RLZXlzPy5ob3Q/LltzbG90XTtcbiAgaWYgKCF0cmlwbGV0IHx8IHRyaXBsZXQubGVuZ3RoICE9PSAzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByb290SWQgPSB0cmlwbGV0W3Bvc2l0aW9uXTtcbiAgcmV0dXJuIHJvb3RJZC5sZW5ndGggPiAwID8gcm9vdElkIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNhZmUgaW1wbGVtZW50cyBJU2FmZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHVibGljIHJlYWRvbmx5IF9zYWZlOiBTYWZlRGF0YTtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzYWZlRGF0YTogU2FmZURhdGEpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5fc2FmZSA9IHNhZmVEYXRhO1xuICB9XG5cbiAgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2FmZS5pZDtcbiAgfVxuXG4gIGVudGVycHJpc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zYWZlLmVudGVycHJpc2VJZDtcbiAgfVxuXG4gIGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NhZmUubGFiZWw7XG4gIH1cblxuICBzdGF0dXMoKTogU2FmZURhdGFbJ3N0YXR1cyddIHtcbiAgICByZXR1cm4gdGhpcy5fc2FmZS5zdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJwcmlzZS1zY29wZWQgdjIgVVJMIGZvciB0aGlzIHNhZmUsIGUuZy4gL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZFxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHVybChleHRyYSA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iaXRnby51cmwoYC9lbnRlcnByaXNlLyR7dGhpcy5lbnRlcnByaXNlSWQoKX0vc2FmZXMvJHt0aGlzLmlkKCl9JHtleHRyYX1gLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW50IGEgY2hpbGQgd2FsbGV0OiBwZWVrIHRoZSBzZXF1ZW50aWFsIGluZGV4LCBkZXJpdmUgdGhlIGNoaWxkIGtleXMsIHJlZ2lzdGVyXG4gICAqIHRoZW0sIHRoZW4gbWludC5cbiAgICpcbiAgICogYG9uY2hhaW5gOiBoYXJkZW5lZC1kZXJpdmUgdGhlIHVzZXIgY2hpbGQgKGBtLzxpbmRleD4nYCksIHJlZ2lzdGVyIGl0XG4gICAqIHB1YmxpYy1vbmx5OyBiYWNrdXAgYW5kIEJpdEdvIGNoaWxkcmVuIGFyZSBzb2Z0LWRlcml2ZWQgb24gdGhlIHNlcnZlci5cbiAgICpcbiAgICogYHRzc2A6IGRlY3J5cHQgdGhlIHVzZXIgcm9vdCBibG9iLCBydW4gdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmUgY2VyZW1vbnksXG4gICAqIHJlZ2lzdGVyIHRoZSBvcmRlcmVkIGNoaWxkIGRvY3VtZW50cywgdGhlbiBtaW50LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlV2FsbGV0KHBhcmFtczogQ3JlYXRlU2FmZVdhbGxldE9wdGlvbnMpOiBQcm9taXNlPFdhbGxldD4ge1xuICAgIGlmIChwYXJhbXMucGFzc3BocmFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGFzc3BocmFzZSBpcyByZXF1aXJlZCB0byBtaW50IGEgc2FmZSB3YWxsZXQnKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy50eXBlICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zLnR5cGUgIT09ICdob3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgd2FsbGV0cyBhcmUgaG90LW9ubHkgaW4gdjEnKTtcbiAgICB9XG4gICAgY29uc3QgaXNUc3MgPSBwYXJhbXMubXVsdGlzaWdUeXBlID09PSAndHNzJztcblxuICAgIGNvbnN0IGNvaW4gPSB0aGlzLmJpdGdvLmNvaW4ocGFyYW1zLmNvaW4pO1xuICAgIGlmIChpc1RzcyAmJiBjb2luLmdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKSAhPT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29pbiAnJHtjb2luLmdldENoYWluKCl9JyBpcyBub3QgYSBUU1MgY29pbjsgY2Fubm90IG1pbnQgYSB0c3Mgc2FmZSB3YWxsZXQgZm9yIGl0YCk7XG4gICAgfVxuICAgIGlmICghaXNUc3MgJiYgY29pbi5nZXREZWZhdWx0TXVsdGlzaWdUeXBlKCkgPT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01QQyBzYWZlIHdhbGxldCBtaW50aW5nIHJlcXVpcmVzIG11bHRpc2lnVHlwZSBcInRzc1wiOyB1c2UgXCJvbmNoYWluXCIgZm9yIG5vbi1NUEMgbWludGluZycpO1xuICAgIH1cbiAgICBjb25zdCBzbG90ID0gaXNUc3MgPyB0c3NTbG90Rm9yQ29pbihjb2luLmdldENoYWluKCkpIDogb25jaGFpblNsb3RGb3JDb2luKGNvaW4uZ2V0Q2hhaW4oKSk7XG5cbiAgICBjb25zdCBpbmRleFJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoJy9kZXJpdmF0aW9uLWluZGV4JykpLnF1ZXJ5KHsgc2xvdCB9KS5yZXN1bHQoKTtcbiAgICBjb25zdCBwZWVrZWQgPSBkZWNvZGVXaXRoQ29kZWMoR2V0RGVyaXZhdGlvbkluZGV4UmVzcG9uc2UsIGluZGV4UmVzcG9uc2UsICdHZXREZXJpdmF0aW9uSW5kZXhSZXNwb25zZScpO1xuICAgIGlmIChwZWVrZWQuc2xvdCAhPT0gc2xvdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmF0aW9uLWluZGV4IHJldHVybmVkIHNsb3QgJyR7cGVla2VkLnNsb3R9JywgZXhwZWN0ZWQgJyR7c2xvdH0nYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5kZXggfSA9IHBlZWtlZDtcblxuICAgIGNvbnN0IHNhZmVEYXRhID0gcm9vdElkRnJvbVNhZmUodGhpcy5fc2FmZSwgc2xvdCwgMCkgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3NhZmUgOiBhd2FpdCB0aGlzLmZldGNoU2FmZURhdGEoKTtcbiAgICBjb25zdCB1c2VyUm9vdElkID0gcm9vdElkRnJvbVNhZmUoc2FmZURhdGEsIHNsb3QsIDApO1xuICAgIGlmICh1c2VyUm9vdElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSAke3RoaXMuaWQoKX0gaXMgbWlzc2luZyByb290S2V5cy5ob3QuJHtzbG90fWApO1xuICAgIH1cblxuICAgIGlmIChpc1Rzcykge1xuICAgICAgY29uc3QgYmFja3VwUm9vdElkID0gcm9vdElkRnJvbVNhZmUoc2FmZURhdGEsIHNsb3QsIDEpO1xuICAgICAgY29uc3QgYml0Z29Sb290SWQgPSByb290SWRGcm9tU2FmZShzYWZlRGF0YSwgc2xvdCwgMik7XG4gICAgICBpZiAoYmFja3VwUm9vdElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYWZlICR7dGhpcy5pZCgpfSBpcyBtaXNzaW5nIHJvb3RLZXlzLmhvdC4ke3Nsb3R9IGJhY2t1cCBrZXlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaXRnb1Jvb3RJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSAke3RoaXMuaWQoKX0gaXMgbWlzc2luZyByb290S2V5cy5ob3QuJHtzbG90fSBiaXRnbyBrZXlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRzc1dhbGxldEluU2FmZShjb2luLCB1c2VyUm9vdElkLCBiYWNrdXBSb290SWQsIGJpdGdvUm9vdElkLCBpbmRleCwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXljaGFpbnMgPSBjb2luLmtleWNoYWlucygpO1xuICAgIGNvbnN0IHJvb3RLZXljaGFpbiA9IGF3YWl0IGtleWNoYWlucy5nZXQoeyBpZDogdXNlclJvb3RJZCB9KTtcbiAgICBpZiAocm9vdEtleWNoYWluLnNvdXJjZSAhPT0gJ3VzZXInKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yKHJvb3RLZXljaGFpbi5pZCwgcm9vdEtleWNoYWluLnNvdXJjZSk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RQcnYgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5KHRoaXMuYml0Z28sIHJvb3RLZXljaGFpbiwgcGFyYW1zLnBhc3NwaHJhc2UpO1xuICAgIGlmICghcm9vdFBydikge1xuICAgICAgdGhyb3cgbmV3IEluY29ycmVjdFBhc3N3b3JkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXJpdmVkID1cbiAgICAgIHNsb3QgPT09ICdlZDI1NTE5TXVsdGlzaWcnXG4gICAgICAgID8gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKHJvb3RQcnYsIGluZGV4KVxuICAgICAgICA6IGRlcml2ZUFuZFNlbGZDaGVja1NhZmVDaGlsZEhhcmRlbmVkKHJvb3RQcnYsIGluZGV4KTtcbiAgICBjb25zdCBkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgsXG4gICAgICBkZXJpdmVkLmRlcml2YXRpb25QYXRoLFxuICAgICAgJ2Rlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCdcbiAgICApO1xuXG4gICAgY29uc3QgY2hpbGQgPSBhd2FpdCBrZXljaGFpbnMuYWRkKHtcbiAgICAgIHB1YjogZGVyaXZlZC5wdWIsXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIGtleVR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICBwYXJlbnQ6IHVzZXJSb290SWQsXG4gICAgICBzYWZlSWQ6IHRoaXMuaWQoKSxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGg6IGRlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCxcbiAgICB9KTtcbiAgICBjb25zdCBjaGlsZElkID0gY2hpbGQuaWQ7XG4gICAgaWYgKGNoaWxkSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NhZmUgY2hpbGQga2V5IHJlZ2lzdHJhdGlvbiByZXR1cm5lZCBhbiBlbXB0eSBpZCcpO1xuICAgIH1cbiAgICBjb25zdCBrZXlzOiBbc3RyaW5nXSA9IFtjaGlsZElkXTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFdpdGhDb2RlYyh0aGlzLmJpdGdvLCB0aGlzLnVybCgnL3dhbGxldHMnKSwgQ3JlYXRlV2FsbGV0SW5TYWZlQm9keSwge1xuICAgICAgY29pbjogcGFyYW1zLmNvaW4sXG4gICAgICBsYWJlbDogcGFyYW1zLmxhYmVsLFxuICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgIGtleXMsXG4gICAgfSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQodGhpcy5iaXRnbywgY29pbiwgcmVzcG9uc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRTUyB3YWxsZXQgbWludDogZGVjcnlwdCB0aGUgdXNlciByb290IGJsb2IsIHJ1biB0aGUgdXNlci9CaXRHbyBoYXJkLWRlcml2ZVxuICAgKiBjZXJlbW9ueSwgcmVnaXN0ZXIgdGhlIG9yZGVyZWQgY2hpbGQgZG9jdW1lbnRzLCB0aGVuIG1pbnQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVRzc1dhbGxldEluU2FmZShcbiAgICBjb2luOiBJQmFzZUNvaW4sXG4gICAgdXNlclJvb3RJZDogc3RyaW5nLFxuICAgIGJhY2t1cFJvb3RJZDogc3RyaW5nLFxuICAgIGJpdGdvUm9vdElkOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYXJhbXM6IENyZWF0ZVNhZmVXYWxsZXRPcHRpb25zXG4gICk6IFByb21pc2U8V2FsbGV0PiB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gY29pbi5rZXljaGFpbnMoKTtcbiAgICBjb25zdCB1c2VyUm9vdEtleWNoYWluID0gYXdhaXQga2V5Y2hhaW5zLmdldCh7IGlkOiB1c2VyUm9vdElkIH0pO1xuICAgIGlmICh1c2VyUm9vdEtleWNoYWluLnNvdXJjZSAhPT0gJ3VzZXInKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yKHVzZXJSb290S2V5Y2hhaW4uaWQsIHVzZXJSb290S2V5Y2hhaW4uc291cmNlKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyUm9vdFBydiA9IGF3YWl0IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkodGhpcy5iaXRnbywgdXNlclJvb3RLZXljaGFpbiwgcGFyYW1zLnBhc3NwaHJhc2UpO1xuICAgIGlmICghdXNlclJvb3RQcnYpIHtcbiAgICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJSb290TWF0ZXJpYWwgPSBFQ0RTQVV0aWxzLnBhcnNlVnJmS2V5RW52ZWxvcGVzKHVzZXJSb290UHJ2KTtcblxuICAgIGNvbnN0IHRzc1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FWcmZNUEN2MlV0aWxzKHRoaXMuYml0Z28sIGNvaW4pO1xuICAgIGNvbnN0IHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbiB9ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHtcbiAgICAgIHBhc3NwaHJhc2U6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgZW50ZXJwcmlzZTogdGhpcy5lbnRlcnByaXNlSWQoKSxcbiAgICAgIHNhZmVJZDogdGhpcy5pZCgpLFxuICAgICAgcGFyZW50S2V5SWQ6IGJpdGdvUm9vdElkLFxuICAgICAgZGVyaXZhdGlvbkluZGV4OiBpbmRleCxcbiAgICAgIHVzZXJSb290S2V5SWQ6IHVzZXJSb290SWQsXG4gICAgICBiYWNrdXBSb290S2V5SWQ6IGJhY2t1cFJvb3RJZCxcbiAgICAgIHVzZXJSb290S2V5U2hhcmU6IHVzZXJSb290TWF0ZXJpYWwuc2lnbmluZyxcbiAgICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IHVzZXJSb290TWF0ZXJpYWwudnJmLFxuICAgIH0pO1xuICAgIGlmICh1c2VyS2V5Y2hhaW4uaWQubGVuZ3RoID09PSAwIHx8IGJhY2t1cEtleWNoYWluLmlkLmxlbmd0aCA9PT0gMCB8fCBiaXRnb0tleWNoYWluLmlkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzYWZlIGNoaWxkIGtleSByZWdpc3RyYXRpb24gcmV0dXJuZWQgYW4gZW1wdHkgaWQnKTtcbiAgICB9XG4gICAgY29uc3Qga2V5czogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gW3VzZXJLZXljaGFpbi5pZCwgYmFja3VwS2V5Y2hhaW4uaWQsIGJpdGdvS2V5Y2hhaW4uaWRdO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0V2l0aENvZGVjKHRoaXMuYml0Z28sIHRoaXMudXJsKCcvd2FsbGV0cycpLCBDcmVhdGVXYWxsZXRJblNhZmVCb2R5LCB7XG4gICAgICBjb2luOiBwYXJhbXMuY29pbixcbiAgICAgIGxhYmVsOiBwYXJhbXMubGFiZWwsXG4gICAgICB0eXBlOiAnaG90JyxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICBrZXlzLFxuICAgIH0pLnJlc3VsdCgpO1xuICAgIHJldHVybiBuZXcgV2FsbGV0KHRoaXMuYml0Z28sIGNvaW4sIHJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hTYWZlRGF0YSgpOiBQcm9taXNlPFNhZmVEYXRhPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgpKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbWVtYmVyIHRvIHRoZSB3aG9sZSBzYWZlICh2aWV3L2FkbWluL3NwZW5kKS4gU3BlbmQgb3BlbnMgYSBrZXkgc2hhcmUuXG4gICAqL1xuICBhc3luYyBhZGRNZW1iZXIocGFyYW1zOiBBZGRTYWZlTWVtYmVyT3B0aW9ucyk6IFByb21pc2U8U2FmZURhdGE+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUuYWRkTWVtYmVyIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFyZSBPTkUgc2FmZSB3YWxsZXQgd2l0aCBhIG5vbi1tZW1iZXIgdmlhIHRoZSBleGlzdGluZyB3YWxsZXQtc2hhcmUgaGFuZHNoYWtlLlxuICAgKi9cbiAgYXN5bmMgYWRkTWVtYmVyVG9XYWxsZXQocGFyYW1zOiBBZGRTYWZlV2FsbGV0TWVtYmVyT3B0aW9ucyk6IFByb21pc2U8V2FsbGV0U2hhcmVEYXRhPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlLmFkZE1lbWJlclRvV2FsbGV0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRoZSBzYWZlIGtleSBzaGFyZXMgdmlzaWJsZSB0byB0aGUgY2FsbGVyLlxuICAgKi9cbiAgYXN5bmMgbGlzdFNoYXJlcyhwYXJhbXM6IHsgc3RhdGU/OiBTYWZlU2hhcmVTdGF0ZSB9ID0ge30pOiBQcm9taXNlPFNhZmVTaGFyZURhdGFbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignU2FmZS5saXN0U2hhcmVzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgYSBzYWZlIGtleSBzaGFyZSBhZGRyZXNzZWQgdG8gdGhlIGNhbGxlci5cbiAgICovXG4gIGFzeW5jIGFjY2VwdFNoYXJlKHBhcmFtczogQWNjZXB0U2FmZVNoYXJlT3B0aW9ucyk6IFByb21pc2U8U2FmZVNoYXJlRGF0YT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignU2FmZS5hY2NlcHRTaGFyZSBpcyBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBzYWZlIGxhYmVsLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlKHBhcmFtczogVXBkYXRlU2FmZU9wdGlvbnMpOiBQcm9taXNlPFNhZmVEYXRhPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLnB1dCh0aGlzLnVybCgpKS5zZW5kKHsgbGFiZWw6IHBhcmFtcy5sYWJlbCB9KS5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gIH1cblxuICAvKipcbiAgICogRnJlZXplIHRoZSBzYWZlIOKAlCBibG9ja3Mgd2l0aGRyYXdhbHMgb24gYWxsIHNhZmUgd2FsbGV0cy4gU2FmZSBzdGF5cyAnYWN0aXZlJy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZnJlZXplKHBhcmFtczogRnJlZXplU2FmZUJvZHkgPSB7fSk6IFByb21pc2U8U2FmZURhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3RXaXRoQ29kZWModGhpcy5iaXRnbywgdGhpcy51cmwoJy9mcmVlemUnKSwgRnJlZXplU2FmZUJvZHksIHBhcmFtcykucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhTYWZlRGF0YSwgcmVzcG9uc2UsICdTYWZlRGF0YScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyY2hpdmUgdGhlIHNhZmUuIFJlcXVpcmVzIGV2ZXJ5IHNhZmUgd2FsbGV0IHRvIGFscmVhZHkgYmUgYXJjaGl2ZWQ7IGFsc28gdGhlIGFiYW5kb25tZW50XG4gICAqIHBhdGggZm9yIGEgc3R1Y2sgJ2luaXRpYWxpemluZycgc2FmZS5cbiAgICovXG4gIGFzeW5jIGFyY2hpdmUoKTogUHJvbWlzZTxTYWZlRGF0YT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5wb3N0KHRoaXMudXJsKCcvYXJjaGl2ZScpKS5zZW5kKCkucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhTYWZlRGF0YSwgcmVzcG9uc2UsICdTYWZlRGF0YScpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNhZmVEYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fc2FmZTtcbiAgfVxufVxuIl19
|
|
@@ -45,7 +45,7 @@ const public_types_1 = require("@bitgo/public-types");
|
|
|
45
45
|
const common_1 = require("../../common");
|
|
46
46
|
const errors_1 = require("../errors");
|
|
47
47
|
const codecs_1 = require("../utils/codecs");
|
|
48
|
-
const
|
|
48
|
+
const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
|
|
49
49
|
const postWithCodec_1 = require("../utils/postWithCodec");
|
|
50
50
|
const safe_1 = require("./safe");
|
|
51
51
|
/**
|
|
@@ -259,9 +259,9 @@ class Safes {
|
|
|
259
259
|
// Coin-specific child encoding is performed by Wallet Platform after soft derivation.
|
|
260
260
|
if (slot === 'ed25519Multisig' &&
|
|
261
261
|
(!backupKeychain.pub ||
|
|
262
|
-
!(0,
|
|
262
|
+
!(0, sdk_lib_safes_1.isDerivableEd25519Pub)(backupKeychain.pub) ||
|
|
263
263
|
!bitgoKeychain.pub ||
|
|
264
|
-
!(0,
|
|
264
|
+
!(0, sdk_lib_safes_1.isDerivableEd25519Pub)(bitgoKeychain.pub))) {
|
|
265
265
|
throw new Error('Safe ed25519Multisig roots are not derivable: expected 64-byte canonical base32 material');
|
|
266
266
|
}
|
|
267
267
|
return [userKeychain.id, backupKeychain.id, bitgoKeychain.id];
|
|
@@ -314,4 +314,4 @@ class Safes {
|
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
316
|
exports.Safes = Safes;
|
|
317
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7R0FLRztBQUNILHlDQUEyQjtBQUMzQixzREFRNkI7QUFDN0IseUNBQTRDO0FBRzVDLHNDQUE2QztBQUM3Qyw0Q0FBa0Q7QUFDbEQsK0RBQThEO0FBQzlELDBEQUF1RDtBQUd2RCxpQ0FBOEI7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBK0Q7SUFDdkYsT0FBTyxFQUFFO1FBQ1AsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsWUFBWTtRQUNaLFFBQVEsRUFBRSxLQUFLO1FBQ2YsUUFBUSxFQUFFLEtBQUs7S0FDaEI7SUFDRCxPQUFPLEVBQUU7UUFDUCxpQkFBaUI7UUFDakIsaUJBQWlCLEVBQUUsTUFBTTtRQUN6QixlQUFlLEVBQUUsTUFBTTtRQUN2QixZQUFZO1FBQ1osUUFBUSxFQUFFLE9BQU87UUFDakIsUUFBUSxFQUFFLE1BQU07S0FDakI7Q0FDRixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUFRLENBQUMsRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3pDLENBQUMsQ0FBQztBQUVIOzs7Ozs7R0FNRztBQUNILE1BQWEsS0FBSztJQUloQixZQUFZLEtBQWdCLEVBQUUsWUFBb0I7UUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIs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UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFBLHdCQUFlLEVBQUMsdUJBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFJLFdBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQXBRRCxzQkFvUUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhlIHNhZmUgY2xpZW50IHN1cmZhY2UgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIChpbmNsdWRpbmcgYnJlYWtpbmdcbiAqIGNoYW5nZXMpIGJlZm9yZSB0aGUgcHVibGljIHJlbGVhc2UuXG4gKi9cbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHtcbiAgRmluYWxpemVTYWZlQm9keSxcbiAgSW5pdGlhbGl6ZVNhZmVCb2R5LFxuICBJbml0aWFsaXplU2FmZVJlc3BvbnNlLFxuICBSb290S2V5c0J5VHlwZSxcbiAgUm9vdEtleVRyaXBsZXQsXG4gIFJvb3RLZXlUeXBlLFxuICBTYWZlRGF0YSxcbn0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudHMgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgSUJhc2VDb2luIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMvY29kZWNzJztcbmltcG9ydCB7IGlzRGVyaXZhYmxlRWQyNTUxOVB1YiB9IGZyb20gJy4vZGVyaXZhYmxlRWQyNTUxOVB1Yic7XG5pbXBvcnQgeyBwb3N0V2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMvcG9zdFdpdGhDb2RlYyc7XG5pbXBvcnQgeyBGaW5hbGl6ZVNhZmVPcHRpb25zLCBJbml0aWFsaXplU2FmZU9wdGlvbnMgfSBmcm9tICcuL2lTYWZlJztcbmltcG9ydCB7IENyZWF0ZVNhZmVPcHRpb25zLCBHZXRTYWZlT3B0aW9ucywgSVNhZmVzLCBMaXN0U2FmZXNPcHRpb25zLCBTYWZlQ3JlYXRpb25IYW5kbGUsIFNhZmVLZXlzIH0gZnJvbSAnLi9pU2FmZXMnO1xuaW1wb3J0IHsgU2FmZSB9IGZyb20gJy4vc2FmZSc7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpdmUgY29pbiBwZXIgcm9vdCBzbG90LCBieSBuZXR3b3JrLiBTYWZlIHJvb3RzIGFyZSBjdXJ2ZS9zY2hlbWUtc2NvcGVkLCBub3RcbiAqIGNvaW4tc2NvcGVkIOKAlCBXUCBzdGFtcHMgYGN1cnZlYCBzZXJ2ZXItc2lkZSBmcm9tIHRoZSBjb2luJ3Mga2V5IGN1cnZlLCBzbyBhbnkgY29pbiBvZiB0aGVcbiAqIHJpZ2h0IChjdXJ2ZSwgc2NoZW1lKSB3b3Jrcy4gVGhlc2UgYXJlIHN0YWJsZSwgYWx3YXlzLWF2YWlsYWJsZSBjaG9pY2VzIHVzZWQgb25seSB0byByb3V0ZVxuICogdGhlIGtleS1nZW5lcmF0aW9uIGNlcmVtb255OyB0aGUgcmVzdWx0aW5nIHJvb3QgaXMgaW50ZXJjaGFuZ2VhYmxlIGFjcm9zcyBjb2lucyBvZiB0aGUgc2xvdC5cbiAqIEBleHBlcmltZW50YWxcbiAqL1xuY29uc3QgUk9PVF9DT0lOX0JZX05FVFdPUks6IFJlY29yZDwnbWFpbm5ldCcgfCAndGVzdG5ldCcsIFJlY29yZDxSb290S2V5VHlwZSwgc3RyaW5nPj4gPSB7XG4gIG1haW5uZXQ6IHtcbiAgICAvLyBtdWx0aXNpZyByb290c1xuICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnYnRjJyxcbiAgICBlZDI1NTE5TXVsdGlzaWc6ICd4bG0nLFxuICAgIC8vIE1QQyByb290c1xuICAgIGVjZHNhTXBjOiAnZXRoJyxcbiAgICBlZGRzYU1wYzogJ3NvbCcsXG4gIH0sXG4gIHRlc3RuZXQ6IHtcbiAgICAvLyBtdWx0aXNpZyByb290c1xuICAgIHNlY3AyNTZrMU11bHRpc2lnOiAndGJ0YycsXG4gICAgZWQyNTUxOU11bHRpc2lnOiAndHhsbScsXG4gICAgLy8gTVBDIHJvb3RzXG4gICAgZWNkc2FNcGM6ICdodGV0aCcsXG4gICAgZWRkc2FNcGM6ICd0c29sJyxcbiAgfSxcbn07XG5cbi8qKlxuICogV2lyZSBzaGFwZSBvZiB0aGUgcGFnaW5hdGVkIGBHRVQgL2VudGVycHJpc2UvOmVJZC9zYWZlc2AgcmVzcG9uc2UuIFdQIHBhZ2luYXRlcyB3aXRoIHRoZSB2MlxuICogYHByZXZJZGAvYG5leHRCYXRjaFByZXZJZGAgY29udmVudGlvbjsgdGhlIFNESyByZS1leHBvc2VzIGl0IGFzIGFuIG9wYXF1ZSBgY3Vyc29yYC9gbmV4dEN1cnNvcmBcbiAqIChzZWUgYGxpc3RgKS5cbiAqIEBleHBlcmltZW50YWxcbiAqL1xuY29uc3QgTGlzdFNhZmVzUmVzcG9uc2UgPSB0LmludGVyc2VjdGlvbihbXG4gIHQudHlwZSh7IHNhZmVzOiB0LmFycmF5KFNhZmVEYXRhKSB9KSxcbiAgdC5wYXJ0aWFsKHsgbmV4dEJhdGNoUHJldklkOiB0LnN0cmluZyB9KSxcbl0pO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gYWNjZXNzb3IgZm9yIGEgc2luZ2xlIGVudGVycHJpc2UncyBzYWZlcywgbWlycm9yaW5nIFdhbGxldHMgLyBFbnRlcnByaXNlcy5cbiAqIFNhZmUgcm91dGVzIGFyZSBlbnRlcnByaXNlLXNjb3BlZCAoL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMpLCBzbyB0aGUgYWNjZXNzb3IgaXNcbiAqIGNvbnN0cnVjdGVkIHdpdGggdGhlIGVudGVycHJpc2UgaWQgKHNlZSBFbnRlcnByaXNlLnNhZmVzKCkpLlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVzIGltcGxlbWVudHMgSVNhZmVzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGVudGVycHJpc2VJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGVudGVycHJpc2VJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuZW50ZXJwcmlzZUlkID0gZW50ZXJwcmlzZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycHJpc2Utc2NvcGVkIHYyIFVSTCBmb3IgdGhlIHNhZmVzIGNvbGxlY3Rpb24sIGUuZy4gL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXNcbiAgICogQHBhcmFtIGV4dHJhXG4gICAqL1xuICBwcml2YXRlIHVybChleHRyYSA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iaXRnby51cmwoYC9lbnRlcnByaXNlLyR7dGhpcy5lbnRlcnByaXNlSWR9L3NhZmVzJHtleHRyYX1gLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmUtY2FsbCBjb252ZW5pZW5jZSB3cmFwcGVyIGNoYWluaW5nIHRoZSB0aHJlZSBjcmVhdGlvbiBwaGFzZXM6XG4gICAqIGluaXRpYWxpemUgKFBoYXNlIDEpIOKGkiBjcmVhdGVTYWZlS2V5cyAoUGhhc2UgMiwgZW5hYmxlZC1zbG90IGNlcmVtb25pZXMpIOKGklxuICAgKiBmaW5hbGl6ZSAoUGhhc2UgMykuIEhPVCBjdXN0b2R5IG9ubHkgaW4gdjEuXG4gICAqXG4gICAqIElmIGEga2V5IGNlcmVtb255IGZhaWxzLCBgY3JlYXRlU2FmZUtleXNgIGFyY2hpdmVzIHRoZSBzYWZlIGJlZm9yZSB0aHJvd2luZywgc28gYSBmYWlsZWQgcnVuXG4gICAqIGxlYXZlcyBubyBoYWxmLWNyZWF0ZWQgc2FmZSBiZWhpbmQg4oCUIGNyZWF0ZSBhIG5ldyBzYWZlIGFuZCByZXRyeS5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVTYWZlKHBhcmFtczogQ3JlYXRlU2FmZU9wdGlvbnMpOiBQcm9taXNlPFNhZmU+IHtcbiAgICBjb25zdCBzYWZlID0gYXdhaXQgdGhpcy5pbml0aWFsaXplU2FmZSh7IGxhYmVsOiBwYXJhbXMubGFiZWwgfSk7XG4gICAgY29uc3Qgcm9vdEtleXMgPSBhd2FpdCB0aGlzLmNyZWF0ZVNhZmVLZXlzKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHNhZmVJZDogc2FmZS5pZCxcbiAgICAgIGVuYWJsZWRSb290U2xvdHM6IHNhZmUuZW5hYmxlZFJvb3RTbG90cyxcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5hbGl6ZVNhZmUoc2FmZS5pZCwgcm9vdEtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBoYXNlIDEg4oCUIGluaXRpYWxpemUgYSBzYWZlIChtZXRhZGF0YSBvbmx5LCBubyBrZXkgbWF0ZXJpYWwpLlxuICAgKiBQT1NUIC9hcGkvdjIvZW50ZXJwcmlzZS86ZUlkL3NhZmVzIHsgbGFiZWwgfVxuICAgKiBSZXNwb25zZSBpcyBgeyBpZCwgc3RhdHVzIH1gIHBsdXMgb3B0aW9uYWwgYGVuYWJsZWRSb290U2xvdHNgIChhYnNlbnQgb24gb2xkZXIgV1ApLlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplU2FmZShwYXJhbXM6IEluaXRpYWxpemVTYWZlT3B0aW9ucyk6IFByb21pc2U8SW5pdGlhbGl6ZVNhZmVSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFdpdGhDb2RlYyh0aGlzLmJpdGdvLCB0aGlzLnVybCgpLCBJbml0aWFsaXplU2FmZUJvZHksIHBhcmFtcykucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhJbml0aWFsaXplU2FmZVJlc3BvbnNlLCByZXNwb25zZSwgJ0luaXRpYWxpemVTYWZlUmVzcG9uc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAyIOKAlCBydW4gdGhlIGVuYWJsZWQgcm9vdCBrZXkgY2VyZW1vbmllcyB0YWdnZWQgd2l0aCBgc2FmZUlkYDsgcmV0dXJucyBvcmRlcmVkXG4gICAqIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSB0cmlwbGV0cyBmb3IgdGhvc2Ugc2xvdHMuIEhPVCBjdXN0b2R5IG9ubHkgaW4gdjEuXG4gICAqXG4gICAqIEFic2VudCBgZW5hYmxlZFJvb3RTbG90c2AgKG9sZGVyIFdQLCBwcmUtZ2F0aW5nKSBydW5zIGFsbCA0IHNsb3RzLiBFbmFibGVkIGNlcmVtb25pZXNcbiAgICogKDIuMSBtdWx0aXNpZyDikaDikaMsIDIuMiBNUEMg4pGh4pGiKSBydW4gaW4gcGFyYWxsZWwuIElmIGFueSBvZiB0aGVtIGZhaWwsIHRoZVxuICAgKiBwYXJ0aWFsbHktY3JlYXRlZCBzYWZlIGlzIGFyY2hpdmVkIChhIGxlZ2FsIGBpbml0aWFsaXppbmcg4oaSIGFyY2hpdmVkYCB0cmFuc2l0aW9uLCBzbyB0aGVcbiAgICogb3JwaGFuZWQgdGFnZ2VkIGtleXMgYXJlIGluZXJ0KSBhbmQgYW4gZXJyb3IgbGlzdGluZyBldmVyeSBjZXJlbW9ueSBmYWlsdXJlIGlzIHRocm93biDigJRcbiAgICogY3JlYXRlIGEgbmV3IHNhZmUgYW5kIHJldHJ5LlxuICAgKlxuICAgKiBOb3QgaW5kZXBlbmRlbnRseSBpZGVtcG90ZW50OiByZS1ydW5uaW5nIGFnYWluc3QgYSBzYWZlIHRoYXQgYWxyZWFkeSBoYXMgc29tZSByb290cyBoaXRzIFdQJ3NcbiAgICogdW5pcXVlIHJvb3Qtc2xvdCBpbmRleC5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlU2FmZUtleXMocGFyYW1zOiBDcmVhdGVTYWZlT3B0aW9ucyAmIFNhZmVDcmVhdGlvbkhhbmRsZSk6IFByb21pc2U8U2FmZUtleXM+IHtcbiAgICBjb25zdCB7IHNhZmVJZCwgcGFzc3BocmFzZSwgZW5hYmxlZFJvb3RTbG90cyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGVudGVycHJpc2UgPSB0aGlzLmVudGVycHJpc2VJZDtcblxuICAgIC8vIEFic2VudCBgZW5hYmxlZFJvb3RTbG90c2AgKG9sZGVyIFdQLCBwcmUtZ2F0aW5nKSDih5IgYWxsIDQsIHByZXNlcnZpbmcgY3VycmVudCBiZWhhdmlvci5cbiAgICAvLyBPcmRlcmVkIGJ5IHNjaGVtZTogdGhlIHR3byBtdWx0aXNpZyByb290cyBmaXJzdCwgdGhlbiB0aGUgdHdvIE1QQyByb290cy5cbiAgICBjb25zdCBhbGxTbG90czogUm9vdEtleVR5cGVbXSA9IFsnc2VjcDI1NmsxTXVsdGlzaWcnLCAnZWQyNTUxOU11bHRpc2lnJywgJ2VjZHNhTXBjJywgJ2VkZHNhTXBjJ107XG4gICAgY29uc3QgZW5hYmxlZCA9IG5ldyBTZXQoZW5hYmxlZFJvb3RTbG90cyA/PyBhbGxTbG90cyk7XG4gICAgY29uc3Qgc2xvdHMgPSBhbGxTbG90cy5maWx0ZXIoKHNsb3QpID0+IGVuYWJsZWQuaGFzKHNsb3QpKTtcbiAgICBjb25zdCBjZXJlbW9uaWVzOiBSZWNvcmQ8Um9vdEtleVR5cGUsICgpID0+IFByb21pc2U8Um9vdEtleVRyaXBsZXQ+PiA9IHtcbiAgICAgIC8vIFBoYXNlIDIuMSDigJQgbXVsdGlzaWcgcm9vdHMgKOKRoOKRoyk6IGxvY2FsIHVzZXIvYmFja3VwIGtleXBhaXJzICsgQml0R28ga2V5LCBhbGwgc2FmZUlkLXRhZ2dlZC5cbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAoKSA9PiB0aGlzLmNyZWF0ZU11bHRpc2lnUm9vdCgnc2VjcDI1NmsxTXVsdGlzaWcnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAoKSA9PiB0aGlzLmNyZWF0ZU11bHRpc2lnUm9vdCgnZWQyNTUxOU11bHRpc2lnJywgc2FmZUlkLCBwYXNzcGhyYXNlLCBlbnRlcnByaXNlKSxcbiAgICAgIC8vIFBoYXNlIDIuMiDigJQgTVBDIHJvb3RzICjikaHikaIpOiB0aGUgZXhpc3RpbmcgREtMUyAo4pGhKSBhbmQgRWREU0EgKOKRoikgY2VyZW1vbmllcywgc2FmZUlkIHRocmVhZGVkLlxuICAgICAgZWNkc2FNcGM6ICgpID0+IHRoaXMuY3JlYXRlTXBjUm9vdCgnZWNkc2FNcGMnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgICAgZWRkc2FNcGM6ICgpID0+IHRoaXMuY3JlYXRlTXBjUm9vdCgnZWRkc2FNcGMnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzbG90cy5tYXAoKHNsb3QpID0+IGNlcmVtb25pZXNbc2xvdF0oKSkpO1xuXG4gICAgLy8gU2luZ2xlIHBhc3Mgb3ZlciB0aGUgc2V0dGxlZCByZXN1bHRzOiBgc3RhdHVzID09PSAnZnVsZmlsbGVkJ2AgbmFycm93cyBgLnZhbHVlYCB0byBhXG4gICAgLy8gUm9vdEtleVRyaXBsZXQsIGFuZCByZWplY3Rpb25zIGFyZSBjb2xsZWN0ZWQgcGVyLXNsb3QgZm9yIHRoZSBlcnJvciBiZWxvdy5cbiAgICBjb25zdCBob3Q6IFJvb3RLZXlzQnlUeXBlID0ge307XG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICBob3Rbc2xvdHNbaV1dID0gcmVzdWx0LnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVhc29uID0gcmVzdWx0LnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0LnJlYXNvbi5tZXNzYWdlIDogU3RyaW5nKHJlc3VsdC5yZWFzb24pO1xuICAgICAgICAvLyBBcGlSZXNwb25zZUVycm9yIGNhcnJpZXMgdGhlIHNlcnZlci1lY2hvZWQgYFJlcXVlc3QtSURgIGhlYWRlciDigJQgaW5jbHVkZSBpdCAod2hlblxuICAgICAgICAvLyBwcmVzZW50KSBzbyBhIGZhaWxlZCBjZXJlbW9ueSBjYW4gYmUgY29ycmVsYXRlZCB3aXRoIFdQJ3Mgc2VydmVyLXNpZGUgbG9ncy5cbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gcmVzdWx0LnJlYXNvbiBpbnN0YW5jZW9mIEFwaVJlc3BvbnNlRXJyb3IgPyByZXN1bHQucmVhc29uLnJlcXVlc3RJZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgZmFpbHVyZXMucHVzaChgJHtzbG90c1tpXX06ICR7cmVhc29ufSR7cmVxdWVzdElkID8gYCAocmVxdWVzdElkOiAke3JlcXVlc3RJZH0pYCA6ICcnfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEJlc3QtZWZmb3J0IGFiYW5kb24gdGhlIHBhcnRpYWxseS1jcmVhdGVkIHNhZmUgc28gYSByZXRyeSBzdGFydHMgZnJvbSBhIGNsZWFuIHNsYXRlLiBLZWVwXG4gICAgICAvLyB0aGUgY2VyZW1vbnkgZmFpbHVyZXMgYXMgdGhlIHByaW1hcnkgZXJyb3I7IG5vdGUgaXQgaWYgdGhlIGNsZWFudXAgYXJjaGl2ZSBhbHNvIGZhaWxlZC5cbiAgICAgIGxldCBhcmNoaXZlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcmNoaXZlU2FmZShzYWZlSWQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhcmNoaXZlRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlIDogbmV3IEVycm9yKFN0cmluZyhlKSk7XG4gICAgICB9XG4gICAgICBsZXQgbWVzc2FnZSA9XG4gICAgICAgIGBTYWZlIGtleSBnZW5lcmF0aW9uIGZhaWxlZCBmb3IgJHtmYWlsdXJlcy5sZW5ndGh9IHJvb3QgY2VyZW1vbnkvaWVzIGAgK1xuICAgICAgICBgWyR7ZmFpbHVyZXMuam9pbignOyAnKX1dLiBUaGUgc2FmZSAoJHtzYWZlSWR9KSBoYXMgYmVlbiBhcmNoaXZlZDsgY3JlYXRlIGEgbmV3IHNhZmUgYW5kIHJldHJ5LmA7XG4gICAgICBpZiAoYXJjaGl2ZUVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCBOT1RFOiBhcmNoaXZpbmcgdGhlIHNhZmUgYWxzbyBmYWlsZWQgKCR7YXJjaGl2ZUVycm9yLm1lc3NhZ2V9KTsgYXJjaGl2ZSBpdCBtYW51YWxseSBiZWZvcmUgcmV0cnlpbmcuYDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByb290S2V5czogeyBob3QgfSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFyY2hpdmUgYSBzYWZlLiBBbHNvIHRoZSBhYmFuZG9ubWVudCBwYXRoIGZvciBhIHN0dWNrIGBpbml0aWFsaXppbmdgIHNhZmUgKHVzZWQgYnlcbiAgICogYGNyZWF0ZVNhZmVLZXlzYCB0byBjbGVhbiB1cCBhZnRlciBhIGZhaWxlZCBjZXJlbW9ueSkuXG4gICAqIFBPU1QgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZC9hcmNoaXZlXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIGFzeW5jIGFyY2hpdmVTYWZlKHNhZmVJZDogc3RyaW5nKTogUHJvbWlzZTxTYWZlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLnVybChgLyR7c2FmZUlkfS9hcmNoaXZlYCkpXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3Qgc2FmZURhdGEgPSBkZWNvZGVXaXRoQ29kZWMoU2FmZURhdGEsIHJlc3BvbnNlLCAnU2FmZURhdGEnKTtcbiAgICByZXR1cm4gbmV3IFNhZmUodGhpcy5iaXRnbywgc2FmZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBoYXNlIDMg4oCUIGZpbmFsaXplIGEgc2FmZSB3aXRoIHRoZSBtaW50ZWQgcm9vdCBrZXkgaWRzIGFzIG9yZGVyZWQgW3VzZXIsIGJhY2t1cCwgYml0Z29dIHRyaXBsZXRzLlxuICAgKiBQT1NUIC9hcGkvdjIvZW50ZXJwcmlzZS86ZUlkL3NhZmVzLzpzYWZlSWQvZmluYWxpemUgeyByb290S2V5cyB9LlxuICAgKiBJZGVtcG90ZW50OiByZS1maW5hbGl6aW5nIHdpdGggdGhlIHNhbWUgYHJvb3RLZXlzYCByZXR1cm5zIHRoZSBhY3RpdmUgc2FmZSBhZ2FpbiAoMjAwKS5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgZmluYWxpemVTYWZlKHNhZmVJZDogc3RyaW5nLCBwYXJhbXM6IEZpbmFsaXplU2FmZU9wdGlvbnMpOiBQcm9taXNlPFNhZmU+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3RXaXRoQ29kZWMoXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy51cmwoYC8ke3NhZmVJZH0vZmluYWxpemVgKSxcbiAgICAgIEZpbmFsaXplU2FmZUJvZHksXG4gICAgICBwYXJhbXNcbiAgICApLnJlc3VsdCgpO1xuICAgIGNvbnN0IHNhZmVEYXRhID0gZGVjb2RlV2l0aENvZGVjKFNhZmVEYXRhLCByZXNwb25zZSwgJ1NhZmVEYXRhJyk7XG4gICAgcmV0dXJuIG5ldyBTYWZlKHRoaXMuYml0Z28sIHNhZmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2luIHVzZWQgdG8gcm91dGUgYSBnaXZlbiByb290J3Mga2V5IGNlcmVtb255IChzZWUgUk9PVF9DT0lOX0JZX05FVFdPUkspLlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwcml2YXRlIGNvaW5Gb3JSb290KHNsb3Q6IFJvb3RLZXlUeXBlKTogSUJhc2VDb2luIHtcbiAgICAvLyBWMU5ldHdvcmsgaXMgZXhhY3RseSAnYml0Y29pbicgfCAndGVzdG5ldCcsIHNvIHRoaXMgYnJhbmNoIGlzIGV4aGF1c3RpdmUgb3ZlciBldmVyeVxuICAgIC8vIGVudmlyb25tZW50OiAnYml0Y29pbicgaXMgbWFpbm5ldCBhbmQgZXZlcnkgb3RoZXIgdmFsdWUgaXMgYSB0ZXN0bmV0LlxuICAgIGNvbnN0IG5ldHdvcmsgPSBFbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0ubmV0d29yayA9PT0gJ2JpdGNvaW4nID8gJ21haW5uZXQnIDogJ3Rlc3RuZXQnO1xuICAgIHJldHVybiB0aGlzLmJpdGdvLmNvaW4oUk9PVF9DT0lOX0JZX05FVFdPUktbbmV0d29ya11bc2xvdF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBoYXNlIDIuMSBoZWxwZXIg4oCUIG1pbnQgb25lIG9uY2hhaW4tbXVsdGlzaWcgcm9vdCAoY29sZCBtb2RlbCwgYXMgd2FsbGV0IGNyZWF0aW9uIGRvZXMgdG9kYXkpOlxuICAgKiBnZW5lcmF0ZSB1c2VyL2JhY2t1cCBrZXlwYWlycyBsb2NhbGx5LCBlbmNyeXB0IHdpdGggYHBhc3NwaHJhc2VgLCByZWdpc3RlciB2aWEgUE9TVCAvOmNvaW4va2V5XG4gICAqIHdpdGggYHNhZmVJZGA7IHRoZSBCaXRHbyBrZXkgaXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBzYW1lIHJvdXRlJ3MgYHNvdXJjZTonYml0Z28nYCBwYXRoLlxuICAgKiBSZXR1cm5zIHRoZSBbdXNlciwgYmFja3VwLCBiaXRnb10ga2V5IGlkIHRyaXBsZXQuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlTXVsdGlzaWdSb290KFxuICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycgfCAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICBzYWZlSWQ6IHN0cmluZyxcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmcsXG4gICAgZW50ZXJwcmlzZTogc3RyaW5nXG4gICk6IFByb21pc2U8Um9vdEtleVRyaXBsZXQ+IHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSB0aGlzLmNvaW5Gb3JSb290KHNsb3QpLmtleWNoYWlucygpO1xuXG4gICAgY29uc3QgdXNlcktleVBhaXIgPSBrZXljaGFpbnMuY3JlYXRlKCk7XG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IGtleWNoYWlucy5hZGQoe1xuICAgICAgcHViOiB1c2VyS2V5UGFpci5wdWIsXG4gICAgICBlbmNyeXB0ZWRQcnY6IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdCh7IGlucHV0OiB1c2VyS2V5UGFpci5wcnYsIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pLFxuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBzYWZlSWQsXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmNyZWF0ZUJhY2t1cCh7IHBhc3NwaHJhc2UsIHNhZmVJZCB9KTtcbiAgICBjb25zdCBiaXRnb0tleWNoYWluUHJvbWlzZSA9IGtleWNoYWlucy5jcmVhdGVCaXRHbyh7IGVudGVycHJpc2UsIHNhZmVJZCB9KTtcblxuICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHVzZXJLZXljaGFpblByb21pc2UsXG4gICAgICBiYWNrdXBLZXljaGFpblByb21pc2UsXG4gICAgICBiaXRnb0tleWNoYWluUHJvbWlzZSxcbiAgICBdKTtcblxuICAgIC8vIFNsb3Qg4pGjIHJvb3RzIHVzZSBuZXV0cmFsIHJhdyBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbCAoMzItYnl0ZSBwdWJsaWMga2V5IHBsdXMgMzItYnl0ZVxuICAgIC8vIGNoYWluIGNvZGUpLCBzZXJpYWxpemVkIHRvZ2V0aGVyIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIgKDEwMyBjaGFyYWN0ZXJzKS5cbiAgICAvLyBDb2luLXNwZWNpZmljIGNoaWxkIGVuY29kaW5nIGlzIHBlcmZvcm1lZCBieSBXYWxsZXQgUGxhdGZvcm0gYWZ0ZXIgc29mdCBkZXJpdmF0aW9uLlxuICAgIGlmIChcbiAgICAgIHNsb3QgPT09ICdlZDI1NTE5TXVsdGlzaWcnICYmXG4gICAgICAoIWJhY2t1cEtleWNoYWluLnB1YiB8fFxuICAgICAgICAhaXNEZXJpdmFibGVFZDI1NTE5UHViKGJhY2t1cEtleWNoYWluLnB1YikgfHxcbiAgICAgICAgIWJpdGdvS2V5Y2hhaW4ucHViIHx8XG4gICAgICAgICFpc0Rlcml2YWJsZUVkMjU1MTlQdWIoYml0Z29LZXljaGFpbi5wdWIpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlIGVkMjU1MTlNdWx0aXNpZyByb290cyBhcmUgbm90IGRlcml2YWJsZTogZXhwZWN0ZWQgNjQtYnl0ZSBjYW5vbmljYWwgYmFzZTMyIG1hdGVyaWFsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1c2VyS2V5Y2hhaW4uaWQsIGJhY2t1cEtleWNoYWluLmlkLCBiaXRnb0tleWNoYWluLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaGFzZSAyLjIgaGVscGVyIOKAlCBydW4gb25lIE1QQyBjZXJlbW9ueSAoREtMUyBmb3IgZWNkc2FNcGMsIEVkRFNBIGZvciBlZGRzYU1wYykgdmlhIHRoZVxuICAgKiBleGlzdGluZyBgY3JlYXRlTXBjYCBmbG93IHdpdGggYHNhZmVJZGAgdGhyZWFkZWQgdGhyb3VnaCwgc28gdGhlIHJlc3VsdGluZyB1c2VyL2JhY2t1cC9iaXRnb1xuICAgKiBrZXlzIGxhbmQgdGFnZ2VkLiBSZXR1cm5zIHRoZSBbdXNlciwgYmFja3VwLCBiaXRnb10ga2V5IGlkIHRyaXBsZXQuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlTXBjUm9vdChcbiAgICBzbG90OiAnZWNkc2FNcGMnIHwgJ2VkZHNhTXBjJyxcbiAgICBzYWZlSWQ6IHN0cmluZyxcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmcsXG4gICAgZW50ZXJwcmlzZTogc3RyaW5nXG4gICk6IFByb21pc2U8Um9vdEtleVRyaXBsZXQ+IHtcbiAgICBjb25zdCB7IHVzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW4gfSA9IGF3YWl0IHRoaXMuY29pbkZvclJvb3Qoc2xvdClcbiAgICAgIC5rZXljaGFpbnMoKVxuICAgICAgLmNyZWF0ZU1wYyh7IG11bHRpc2lnVHlwZTogJ3RzcycsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UsIHNhZmVJZCB9KTtcbiAgICByZXR1cm4gW3VzZXJLZXljaGFpbi5pZCwgYmFja3VwS2V5Y2hhaW4uaWQsIGJpdGdvS2V5Y2hhaW4uaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgdGhlIGVudGVycHJpc2UncyBzYWZlcyB0aGUgY2FsbGVyIGlzIGEgbWVtYmVyIG9mIChjdXJzb3IgcGFnaW5hdGlvbikuXG4gICAqIEdFVCAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcz9saW1pdCZwcmV2SWRcbiAgICpcbiAgICogYGN1cnNvcmAgaXMgdGhlIG9wYXF1ZSBgbmV4dEN1cnNvcmAgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsOyBwYWdlIGZvcndhcmQgdW50aWxcbiAgICogYG5leHRDdXJzb3JgIGlzIGFic2VudC5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgbGlzdChwYXJhbXM6IExpc3RTYWZlc09wdGlvbnMgPSB7fSk6IFByb21pc2U8eyBzYWZlczogU2FmZVtdOyBuZXh0Q3Vyc29yPzogc3RyaW5nIH0+IHtcbiAgICAvLyBTREsgZXhwb3NlcyBhbiBvcGFxdWUgY3Vyc29yOyBXUCBzcGVha3MgcHJldklkL25leHRCYXRjaFByZXZJZCAodjIgbGlzdCBjb252ZW50aW9uKS5cbiAgICBjb25zdCBxdWVyeTogeyBsaW1pdD86IG51bWJlcjsgcHJldklkPzogc3RyaW5nIH0gPSB7fTtcbiAgICBpZiAocGFyYW1zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHF1ZXJ5LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmN1cnNvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBxdWVyeS5wcmV2SWQgPSBwYXJhbXMuY3Vyc29yO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCkpLnF1ZXJ5KHF1ZXJ5KS5yZXN1bHQoKTtcbiAgICBjb25zdCB7IHNhZmVzLCBuZXh0QmF0Y2hQcmV2SWQgfSA9IGRlY29kZVdpdGhDb2RlYyhMaXN0U2FmZXNSZXNwb25zZSwgcmVzcG9uc2UsICdMaXN0U2FmZXNSZXNwb25zZScpO1xuICAgIHJldHVybiB7XG4gICAgICBzYWZlczogc2FmZXMubWFwKChzYWZlRGF0YSkgPT4gbmV3IFNhZmUodGhpcy5iaXRnbywgc2FmZURhdGEpKSxcbiAgICAgIG5leHRDdXJzb3I6IG5leHRCYXRjaFByZXZJZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgc2luZ2xlIHNhZmUgYnkgaWQuIE5vbi1tZW1iZXJzIGdldCBhIDQwNCAoZXhpc3RlbmNlIGlzIG5vdCBsZWFrZWQpLlxuICAgKiBHRVQgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZFxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBnZXQocGFyYW1zOiBHZXRTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoYC8ke3BhcmFtcy5pZH1gKSkucmVzdWx0KCk7XG4gICAgY29uc3Qgc2FmZURhdGEgPSBkZWNvZGVXaXRoQ29kZWMoU2FmZURhdGEsIHJlc3BvbnNlLCAnU2FmZURhdGEnKTtcbiAgICByZXR1cm4gbmV3IFNhZmUodGhpcy5iaXRnbywgc2FmZURhdGEpO1xuICB9XG59XG4iXX0=
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7R0FLRztBQUNILHlDQUEyQjtBQUMzQixzREFRNkI7QUFDN0IseUNBQTRDO0FBRzVDLHNDQUE2QztBQUM3Qyw0Q0FBa0Q7QUFDbEQsd0RBQTZEO0FBQzdELDBEQUF1RDtBQUd2RCxpQ0FBOEI7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBK0Q7SUFDdkYsT0FBTyxFQUFFO1FBQ1AsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsWUFBWTtRQUNaLFFBQVEsRUFBRSxLQUFLO1FBQ2YsUUFBUSxFQUFFLEtBQUs7S0FDaEI7SUFDRCxPQUFPLEVBQUU7UUFDUCxpQkFBaUI7UUFDakIsaUJBQWlCLEVBQUUsTUFBTTtRQUN6QixlQUFlLEVBQUUsTUFBTTtRQUN2QixZQUFZO1FBQ1osUUFBUSxFQUFFLE9BQU87UUFDakIsUUFBUSxFQUFFLE1BQU07S0FDakI7Q0FDRixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUFRLENBQUMsRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3pDLENBQUMsQ0FBQztBQUVIOzs7Ozs7R0FNRztBQUNILE1BQWEsS0FBSztJQUloQixZQUFZLEtBQWdCLEVBQUUsWUFBb0I7UUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIs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UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFBLHdCQUFlLEVBQUMsdUJBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFJLFdBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQXBRRCxzQkFvUUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhlIHNhZmUgY2xpZW50IHN1cmZhY2UgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIChpbmNsdWRpbmcgYnJlYWtpbmdcbiAqIGNoYW5nZXMpIGJlZm9yZSB0aGUgcHVibGljIHJlbGVhc2UuXG4gKi9cbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHtcbiAgRmluYWxpemVTYWZlQm9keSxcbiAgSW5pdGlhbGl6ZVNhZmVCb2R5LFxuICBJbml0aWFsaXplU2FmZVJlc3BvbnNlLFxuICBSb290S2V5c0J5VHlwZSxcbiAgUm9vdEtleVRyaXBsZXQsXG4gIFJvb3RLZXlUeXBlLFxuICBTYWZlRGF0YSxcbn0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudHMgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgSUJhc2VDb2luIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vdXRpbHMvY29kZWNzJztcbmltcG9ydCB7IGlzRGVyaXZhYmxlRWQyNTUxOVB1YiB9IGZyb20gJ0BiaXRnby9zZGstbGliLXNhZmVzJztcbmltcG9ydCB7IHBvc3RXaXRoQ29kZWMgfSBmcm9tICcuLi91dGlscy9wb3N0V2l0aENvZGVjJztcbmltcG9ydCB7IEZpbmFsaXplU2FmZU9wdGlvbnMsIEluaXRpYWxpemVTYWZlT3B0aW9ucyB9IGZyb20gJy4vaVNhZmUnO1xuaW1wb3J0IHsgQ3JlYXRlU2FmZU9wdGlvbnMsIEdldFNhZmVPcHRpb25zLCBJU2FmZXMsIExpc3RTYWZlc09wdGlvbnMsIFNhZmVDcmVhdGlvbkhhbmRsZSwgU2FmZUtleXMgfSBmcm9tICcuL2lTYWZlcyc7XG5pbXBvcnQgeyBTYWZlIH0gZnJvbSAnLi9zYWZlJztcblxuLyoqXG4gKiBSZXByZXNlbnRhdGl2ZSBjb2luIHBlciByb290IHNsb3QsIGJ5IG5ldHdvcmsuIFNhZmUgcm9vdHMgYXJlIGN1cnZlL3NjaGVtZS1zY29wZWQsIG5vdFxuICogY29pbi1zY29wZWQg4oCUIFdQIHN0YW1wcyBgY3VydmVgIHNlcnZlci1zaWRlIGZyb20gdGhlIGNvaW4ncyBrZXkgY3VydmUsIHNvIGFueSBjb2luIG9mIHRoZVxuICogcmlnaHQgKGN1cnZlLCBzY2hlbWUpIHdvcmtzLiBUaGVzZSBhcmUgc3RhYmxlLCBhbHdheXMtYXZhaWxhYmxlIGNob2ljZXMgdXNlZCBvbmx5IHRvIHJvdXRlXG4gKiB0aGUga2V5LWdlbmVyYXRpb24gY2VyZW1vbnk7IHRoZSByZXN1bHRpbmcgcm9vdCBpcyBpbnRlcmNoYW5nZWFibGUgYWNyb3NzIGNvaW5zIG9mIHRoZSBzbG90LlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5jb25zdCBST09UX0NPSU5fQllfTkVUV09SSzogUmVjb3JkPCdtYWlubmV0JyB8ICd0ZXN0bmV0JywgUmVjb3JkPFJvb3RLZXlUeXBlLCBzdHJpbmc+PiA9IHtcbiAgbWFpbm5ldDoge1xuICAgIC8vIG11bHRpc2lnIHJvb3RzXG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdidGMnLFxuICAgIGVkMjU1MTlNdWx0aXNpZzogJ3hsbScsXG4gICAgLy8gTVBDIHJvb3RzXG4gICAgZWNkc2FNcGM6ICdldGgnLFxuICAgIGVkZHNhTXBjOiAnc29sJyxcbiAgfSxcbiAgdGVzdG5ldDoge1xuICAgIC8vIG11bHRpc2lnIHJvb3RzXG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd0YnRjJyxcbiAgICBlZDI1NTE5TXVsdGlzaWc6ICd0eGxtJyxcbiAgICAvLyBNUEMgcm9vdHNcbiAgICBlY2RzYU1wYzogJ2h0ZXRoJyxcbiAgICBlZGRzYU1wYzogJ3Rzb2wnLFxuICB9LFxufTtcblxuLyoqXG4gKiBXaXJlIHNoYXBlIG9mIHRoZSBwYWdpbmF0ZWQgYEdFVCAvZW50ZXJwcmlzZS86ZUlkL3NhZmVzYCByZXNwb25zZS4gV1AgcGFnaW5hdGVzIHdpdGggdGhlIHYyXG4gKiBgcHJldklkYC9gbmV4dEJhdGNoUHJldklkYCBjb252ZW50aW9uOyB0aGUgU0RLIHJlLWV4cG9zZXMgaXQgYXMgYW4gb3BhcXVlIGBjdXJzb3JgL2BuZXh0Q3Vyc29yYFxuICogKHNlZSBgbGlzdGApLlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5jb25zdCBMaXN0U2FmZXNSZXNwb25zZSA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgdC50eXBlKHsgc2FmZXM6IHQuYXJyYXkoU2FmZURhdGEpIH0pLFxuICB0LnBhcnRpYWwoeyBuZXh0QmF0Y2hQcmV2SWQ6IHQuc3RyaW5nIH0pLFxuXSk7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBhY2Nlc3NvciBmb3IgYSBzaW5nbGUgZW50ZXJwcmlzZSdzIHNhZmVzLCBtaXJyb3JpbmcgV2FsbGV0cyAvIEVudGVycHJpc2VzLlxuICogU2FmZSByb3V0ZXMgYXJlIGVudGVycHJpc2Utc2NvcGVkICgvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcyksIHNvIHRoZSBhY2Nlc3NvciBpc1xuICogY29uc3RydWN0ZWQgd2l0aCB0aGUgZW50ZXJwcmlzZSBpZCAoc2VlIEVudGVycHJpc2Uuc2FmZXMoKSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgU2FmZXMgaW1wbGVtZW50cyBJU2FmZXMge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50ZXJwcmlzZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgZW50ZXJwcmlzZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5lbnRlcnByaXNlSWQgPSBlbnRlcnByaXNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJwcmlzZS1zY29wZWQgdjIgVVJMIGZvciB0aGUgc2FmZXMgY29sbGVjdGlvbiwgZS5nLiAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlc1xuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHByaXZhdGUgdXJsKGV4dHJhID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJpdGdvLnVybChgL2VudGVycHJpc2UvJHt0aGlzLmVudGVycHJpc2VJZH0vc2FmZXMke2V4dHJhfWAsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uZS1jYWxsIGNvbnZlbmllbmNlIHdyYXBwZXIgY2hhaW5pbmcgdGhlIHRocmVlIGNyZWF0aW9uIHBoYXNlczpcbiAgICogaW5pdGlhbGl6ZSAoUGhhc2UgMSkg4oaSIGNyZWF0ZVNhZmVLZXlzIChQaGFzZSAyLCBlbmFibGVkLXNsb3QgY2VyZW1vbmllcykg4oaSXG4gICAqIGZpbmFsaXplIChQaGFzZSAzKS4gSE9UIGN1c3RvZHkgb25seSBpbiB2MS5cbiAgICpcbiAgICogSWYgYSBrZXkgY2VyZW1vbnkgZmFpbHMsIGBjcmVhdGVTYWZlS2V5c2AgYXJjaGl2ZXMgdGhlIHNhZmUgYmVmb3JlIHRocm93aW5nLCBzbyBhIGZhaWxlZCBydW5cbiAgICogbGVhdmVzIG5vIGhhbGYtY3JlYXRlZCBzYWZlIGJlaGluZCDigJQgY3JlYXRlIGEgbmV3IHNhZmUgYW5kIHJldHJ5LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVNhZmUocGFyYW1zOiBDcmVhdGVTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHNhZmUgPSBhd2FpdCB0aGlzLmluaXRpYWxpemVTYWZlKHsgbGFiZWw6IHBhcmFtcy5sYWJlbCB9KTtcbiAgICBjb25zdCByb290S2V5cyA9IGF3YWl0IHRoaXMuY3JlYXRlU2FmZUtleXMoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgc2FmZUlkOiBzYWZlLmlkLFxuICAgICAgZW5hYmxlZFJvb3RTbG90czogc2FmZS5lbmFibGVkUm9vdFNsb3RzLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmFsaXplU2FmZShzYWZlLmlkLCByb290S2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMSDigJQgaW5pdGlhbGl6ZSBhIHNhZmUgKG1ldGFkYXRhIG9ubHksIG5vIGtleSBtYXRlcmlhbCkuXG4gICAqIFBPU1QgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMgeyBsYWJlbCB9XG4gICAqIFJlc3BvbnNlIGlzIGB7IGlkLCBzdGF0dXMgfWAgcGx1cyBvcHRpb25hbCBgZW5hYmxlZFJvb3RTbG90c2AgKGFic2VudCBvbiBvbGRlciBXUCkuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVTYWZlKHBhcmFtczogSW5pdGlhbGl6ZVNhZmVPcHRpb25zKTogUHJvbWlzZTxJbml0aWFsaXplU2FmZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0V2l0aENvZGVjKHRoaXMuYml0Z28sIHRoaXMudXJsKCksIEluaXRpYWxpemVTYWZlQm9keSwgcGFyYW1zKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKEluaXRpYWxpemVTYWZlUmVzcG9uc2UsIHJlc3BvbnNlLCAnSW5pdGlhbGl6ZVNhZmVSZXNwb25zZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBoYXNlIDIg4oCUIHJ1biB0aGUgZW5hYmxlZCByb290IGtleSBjZXJlbW9uaWVzIHRhZ2dlZCB3aXRoIGBzYWZlSWRgOyByZXR1cm5zIG9yZGVyZWRcbiAgICogW3VzZXIsIGJhY2t1cCwgYml0Z29dIHRyaXBsZXRzIGZvciB0aG9zZSBzbG90cy4gSE9UIGN1c3RvZHkgb25seSBpbiB2MS5cbiAgICpcbiAgICogQWJzZW50IGBlbmFibGVkUm9vdFNsb3RzYCAob2xkZXIgV1AsIHByZS1nYXRpbmcpIHJ1bnMgYWxsIDQgc2xvdHMuIEVuYWJsZWQgY2VyZW1vbmllc1xuICAgKiAoMi4xIG11bHRpc2lnIOKRoOKRoywgMi4yIE1QQyDikaHikaIpIHJ1biBpbiBwYXJhbGxlbC4gSWYgYW55IG9mIHRoZW0gZmFpbCwgdGhlXG4gICAqIHBhcnRpYWxseS1jcmVhdGVkIHNhZmUgaXMgYXJjaGl2ZWQgKGEgbGVnYWwgYGluaXRpYWxpemluZyDihpIgYXJjaGl2ZWRgIHRyYW5zaXRpb24sIHNvIHRoZVxuICAgKiBvcnBoYW5lZCB0YWdnZWQga2V5cyBhcmUgaW5lcnQpIGFuZCBhbiBlcnJvciBsaXN0aW5nIGV2ZXJ5IGNlcmVtb255IGZhaWx1cmUgaXMgdGhyb3duIOKAlFxuICAgKiBjcmVhdGUgYSBuZXcgc2FmZSBhbmQgcmV0cnkuXG4gICAqXG4gICAqIE5vdCBpbmRlcGVuZGVudGx5IGlkZW1wb3RlbnQ6IHJlLXJ1bm5pbmcgYWdhaW5zdCBhIHNhZmUgdGhhdCBhbHJlYWR5IGhhcyBzb21lIHJvb3RzIGhpdHMgV1Anc1xuICAgKiB1bmlxdWUgcm9vdC1zbG90IGluZGV4LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBjcmVhdGVTYWZlS2V5cyhwYXJhbXM6IENyZWF0ZVNhZmVPcHRpb25zICYgU2FmZUNyZWF0aW9uSGFuZGxlKTogUHJvbWlzZTxTYWZlS2V5cz4ge1xuICAgIGNvbnN0IHsgc2FmZUlkLCBwYXNzcGhyYXNlLCBlbmFibGVkUm9vdFNsb3RzIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZW50ZXJwcmlzZSA9IHRoaXMuZW50ZXJwcmlzZUlkO1xuXG4gICAgLy8gQWJzZW50IGBlbmFibGVkUm9vdFNsb3RzYCAob2xkZXIgV1AsIHByZS1nYXRpbmcpIOKHkiBhbGwgNCwgcHJlc2VydmluZyBjdXJyZW50IGJlaGF2aW9yLlxuICAgIC8vIE9yZGVyZWQgYnkgc2NoZW1lOiB0aGUgdHdvIG11bHRpc2lnIHJvb3RzIGZpcnN0LCB0aGVuIHRoZSB0d28gTVBDIHJvb3RzLlxuICAgIGNvbnN0IGFsbFNsb3RzOiBSb290S2V5VHlwZVtdID0gWydzZWNwMjU2azFNdWx0aXNpZycsICdlZDI1NTE5TXVsdGlzaWcnLCAnZWNkc2FNcGMnLCAnZWRkc2FNcGMnXTtcbiAgICBjb25zdCBlbmFibGVkID0gbmV3IFNldChlbmFibGVkUm9vdFNsb3RzID8/IGFsbFNsb3RzKTtcbiAgICBjb25zdCBzbG90cyA9IGFsbFNsb3RzLmZpbHRlcigoc2xvdCkgPT4gZW5hYmxlZC5oYXMoc2xvdCkpO1xuICAgIGNvbnN0IGNlcmVtb25pZXM6IFJlY29yZDxSb290S2V5VHlwZSwgKCkgPT4gUHJvbWlzZTxSb290S2V5VHJpcGxldD4+ID0ge1xuICAgICAgLy8gUGhhc2UgMi4xIOKAlCBtdWx0aXNpZyByb290cyAo4pGg4pGjKTogbG9jYWwgdXNlci9iYWNrdXAga2V5cGFpcnMgKyBCaXRHbyBrZXksIGFsbCBzYWZlSWQtdGFnZ2VkLlxuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICgpID0+IHRoaXMuY3JlYXRlTXVsdGlzaWdSb290KCdzZWNwMjU2azFNdWx0aXNpZycsIHNhZmVJZCwgcGFzc3BocmFzZSwgZW50ZXJwcmlzZSksXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICgpID0+IHRoaXMuY3JlYXRlTXVsdGlzaWdSb290KCdlZDI1NTE5TXVsdGlzaWcnLCBzYWZlSWQsIHBhc3NwaHJhc2UsIGVudGVycHJpc2UpLFxuICAgICAgLy8gUGhhc2UgMi4yIOKAlCBNUEMgcm9vdHMgKOKRoeKRoik6IHRoZSBleGlzdGluZyBES0xTICjikaEpIGFuZCBFZERTQSAo4pGiKSBjZXJlbW9uaWVzLCBzYWZlSWQgdGhyZWFkZWQuXG4gICAgICBlY2RzYU1wYzogKCkgPT4gdGhpcy5jcmVhdGVNcGNSb290KCdlY2RzYU1wYycsIHNhZmVJZCwgcGFzc3BocmFzZSwgZW50ZXJwcmlzZSksXG4gICAgICBlZGRzYU1wYzogKCkgPT4gdGhpcy5jcmVhdGVNcGNSb290KCdlZGRzYU1wYycsIHNhZmVJZCwgcGFzc3BocmFzZSwgZW50ZXJwcmlzZSksXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHNsb3RzLm1hcCgoc2xvdCkgPT4gY2VyZW1vbmllc1tzbG90XSgpKSk7XG5cbiAgICAvLyBTaW5nbGUgcGFzcyBvdmVyIHRoZSBzZXR0bGVkIHJlc3VsdHM6IGBzdGF0dXMgPT09ICdmdWxmaWxsZWQnYCBuYXJyb3dzIGAudmFsdWVgIHRvIGFcbiAgICAvLyBSb290S2V5VHJpcGxldCwgYW5kIHJlamVjdGlvbnMgYXJlIGNvbGxlY3RlZCBwZXItc2xvdCBmb3IgdGhlIGVycm9yIGJlbG93LlxuICAgIGNvbnN0IGhvdDogUm9vdEtleXNCeVR5cGUgPSB7fTtcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgIGhvdFtzbG90c1tpXV0gPSByZXN1bHQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWFzb24gPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uLm1lc3NhZ2UgOiBTdHJpbmcocmVzdWx0LnJlYXNvbik7XG4gICAgICAgIC8vIEFwaVJlc3BvbnNlRXJyb3IgY2FycmllcyB0aGUgc2VydmVyLWVjaG9lZCBgUmVxdWVzdC1JRGAgaGVhZGVyIOKAlCBpbmNsdWRlIGl0ICh3aGVuXG4gICAgICAgIC8vIHByZXNlbnQpIHNvIGEgZmFpbGVkIGNlcmVtb255IGNhbiBiZSBjb3JyZWxhdGVkIHdpdGggV1AncyBzZXJ2ZXItc2lkZSBsb2dzLlxuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgQXBpUmVzcG9uc2VFcnJvciA/IHJlc3VsdC5yZWFzb24ucmVxdWVzdElkIDogdW5kZWZpbmVkO1xuICAgICAgICBmYWlsdXJlcy5wdXNoKGAke3Nsb3RzW2ldfTogJHtyZWFzb259JHtyZXF1ZXN0SWQgPyBgIChyZXF1ZXN0SWQ6ICR7cmVxdWVzdElkfSlgIDogJyd9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQmVzdC1lZmZvcnQgYWJhbmRvbiB0aGUgcGFydGlhbGx5LWNyZWF0ZWQgc2FmZSBzbyBhIHJldHJ5IHN0YXJ0cyBmcm9tIGEgY2xlYW4gc2xhdGUuIEtlZXBcbiAgICAgIC8vIHRoZSBjZXJlbW9ueSBmYWlsdXJlcyBhcyB0aGUgcHJpbWFyeSBlcnJvcjsgbm90ZSBpdCBpZiB0aGUgY2xlYW51cCBhcmNoaXZlIGFsc28gZmFpbGVkLlxuICAgICAgbGV0IGFyY2hpdmVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFyY2hpdmVTYWZlKHNhZmVJZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFyY2hpdmVFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUgOiBuZXcgRXJyb3IoU3RyaW5nKGUpKTtcbiAgICAgIH1cbiAgICAgIGxldCBtZXNzYWdlID1cbiAgICAgICAgYFNhZmUga2V5IGdlbmVyYXRpb24gZmFpbGVkIGZvciAke2ZhaWx1cmVzLmxlbmd0aH0gcm9vdCBjZXJlbW9ueS9pZXMgYCArXG4gICAgICAgIGBbJHtmYWlsdXJlcy5qb2luKCc7ICcpfV0uIFRoZSBzYWZlICgke3NhZmVJZH0pIGhhcyBiZWVuIGFyY2hpdmVkOyBjcmVhdGUgYSBuZXcgc2FmZSBhbmQgcmV0cnkuYDtcbiAgICAgIGlmIChhcmNoaXZlRXJyb3IpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIE5PVEU6IGFyY2hpdmluZyB0aGUgc2FmZSBhbHNvIGZhaWxlZCAoJHthcmNoaXZlRXJyb3IubWVzc2FnZX0pOyBhcmNoaXZlIGl0IG1hbnVhbGx5IGJlZm9yZSByZXRyeWluZy5gO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJvb3RLZXlzOiB7IGhvdCB9IH07XG4gIH1cblxuICAvKipcbiAgICogQXJjaGl2ZSBhIHNhZmUuIEFsc28gdGhlIGFiYW5kb25tZW50IHBhdGggZm9yIGEgc3R1Y2sgYGluaXRpYWxpemluZ2Agc2FmZSAodXNlZCBieVxuICAgKiBgY3JlYXRlU2FmZUtleXNgIHRvIGNsZWFuIHVwIGFmdGVyIGEgZmFpbGVkIGNlcmVtb255KS5cbiAgICogUE9TVCAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcy86c2FmZUlkL2FyY2hpdmVcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgYXN5bmMgYXJjaGl2ZVNhZmUoc2FmZUlkOiBzdHJpbmcpOiBQcm9taXNlPFNhZmU+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKGAvJHtzYWZlSWR9L2FyY2hpdmVgKSlcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBjb25zdCBzYWZlRGF0YSA9IGRlY29kZVdpdGhDb2RlYyhTYWZlRGF0YSwgcmVzcG9uc2UsICdTYWZlRGF0YScpO1xuICAgIHJldHVybiBuZXcgU2FmZSh0aGlzLmJpdGdvLCBzYWZlRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMyDigJQgZmluYWxpemUgYSBzYWZlIHdpdGggdGhlIG1pbnRlZCByb290IGtleSBpZHMgYXMgb3JkZXJlZCBbdXNlciwgYmFja3VwLCBiaXRnb10gdHJpcGxldHMuXG4gICAqIFBPU1QgL2FwaS92Mi9lbnRlcnByaXNlLzplSWQvc2FmZXMvOnNhZmVJZC9maW5hbGl6ZSB7IHJvb3RLZXlzIH0uXG4gICAqIElkZW1wb3RlbnQ6IHJlLWZpbmFsaXppbmcgd2l0aCB0aGUgc2FtZSBgcm9vdEtleXNgIHJldHVybnMgdGhlIGFjdGl2ZSBzYWZlIGFnYWluICgyMDApLlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBmaW5hbGl6ZVNhZmUoc2FmZUlkOiBzdHJpbmcsIHBhcmFtczogRmluYWxpemVTYWZlT3B0aW9ucyk6IFByb21pc2U8U2FmZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdFdpdGhDb2RlYyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLnVybChgLyR7c2FmZUlkfS9maW5hbGl6ZWApLFxuICAgICAgRmluYWxpemVTYWZlQm9keSxcbiAgICAgIHBhcmFtc1xuICAgICkucmVzdWx0KCk7XG4gICAgY29uc3Qgc2FmZURhdGEgPSBkZWNvZGVXaXRoQ29kZWMoU2FmZURhdGEsIHJlc3BvbnNlLCAnU2FmZURhdGEnKTtcbiAgICByZXR1cm4gbmV3IFNhZmUodGhpcy5iaXRnbywgc2FmZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvaW4gdXNlZCB0byByb3V0ZSBhIGdpdmVuIHJvb3QncyBrZXkgY2VyZW1vbnkgKHNlZSBST09UX0NPSU5fQllfTkVUV09SSykuXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHByaXZhdGUgY29pbkZvclJvb3Qoc2xvdDogUm9vdEtleVR5cGUpOiBJQmFzZUNvaW4ge1xuICAgIC8vIFYxTmV0d29yayBpcyBleGFjdGx5ICdiaXRjb2luJyB8ICd0ZXN0bmV0Jywgc28gdGhpcyBicmFuY2ggaXMgZXhoYXVzdGl2ZSBvdmVyIGV2ZXJ5XG4gICAgLy8gZW52aXJvbm1lbnQ6ICdiaXRjb2luJyBpcyBtYWlubmV0IGFuZCBldmVyeSBvdGhlciB2YWx1ZSBpcyBhIHRlc3RuZXQuXG4gICAgY29uc3QgbmV0d29yayA9IEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5uZXR3b3JrID09PSAnYml0Y29pbicgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCc7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uY29pbihST09UX0NPSU5fQllfTkVUV09SS1tuZXR3b3JrXVtzbG90XSk7XG4gIH1cblxuICAvKipcbiAgICogUGhhc2UgMi4xIGhlbHBlciDigJQgbWludCBvbmUgb25jaGFpbi1tdWx0aXNpZyByb290IChjb2xkIG1vZGVsLCBhcyB3YWxsZXQgY3JlYXRpb24gZG9lcyB0b2RheSk6XG4gICAqIGdlbmVyYXRlIHVzZXIvYmFja3VwIGtleXBhaXJzIGxvY2FsbHksIGVuY3J5cHQgd2l0aCBgcGFzc3BocmFzZWAsIHJlZ2lzdGVyIHZpYSBQT1NUIC86Y29pbi9rZXlcbiAgICogd2l0aCBgc2FmZUlkYDsgdGhlIEJpdEdvIGtleSBpcyBjcmVhdGVkIHRocm91Z2ggdGhlIHNhbWUgcm91dGUncyBgc291cmNlOidiaXRnbydgIHBhdGguXG4gICAqIFJldHVybnMgdGhlIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSBrZXkgaWQgdHJpcGxldC5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVNdWx0aXNpZ1Jvb3QoXG4gICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyB8ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgIHNhZmVJZDogc3RyaW5nLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBlbnRlcnByaXNlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSb290S2V5VHJpcGxldD4ge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IHRoaXMuY29pbkZvclJvb3Qoc2xvdCkua2V5Y2hhaW5zKCk7XG5cbiAgICBjb25zdCB1c2VyS2V5UGFpciA9IGtleWNoYWlucy5jcmVhdGUoKTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmFkZCh7XG4gICAgICBwdWI6IHVzZXJLZXlQYWlyLnB1YixcbiAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHVzZXJLZXlQYWlyLnBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIHNhZmVJZCxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSBrZXljaGFpbnMuY3JlYXRlQmFja3VwKHsgcGFzc3BocmFzZSwgc2FmZUlkIH0pO1xuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW5Qcm9taXNlID0ga2V5Y2hhaW5zLmNyZWF0ZUJpdEdvKHsgZW50ZXJwcmlzZSwgc2FmZUlkIH0pO1xuXG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdXNlcktleWNoYWluUHJvbWlzZSxcbiAgICAgIGJhY2t1cEtleWNoYWluUHJvbWlzZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgIF0pO1xuXG4gICAgLy8gU2xvdCDikaMgcm9vdHMgdXNlIG5ldXRyYWwgcmF3IHB1YmxpYyBkZXJpdmF0aW9uIG1hdGVyaWFsICgzMi1ieXRlIHB1YmxpYyBrZXkgcGx1cyAzMi1ieXRlXG4gICAgLy8gY2hhaW4gY29kZSksIHNlcmlhbGl6ZWQgdG9nZXRoZXIgYXMgY2Fub25pY2FsIHVucGFkZGVkIFJGQyA0NjQ4IGJhc2UzMiAoMTAzIGNoYXJhY3RlcnMpLlxuICAgIC8vIENvaW4tc3BlY2lmaWMgY2hpbGQgZW5jb2RpbmcgaXMgcGVyZm9ybWVkIGJ5IFdhbGxldCBQbGF0Zm9ybSBhZnRlciBzb2Z0IGRlcml2YXRpb24uXG4gICAgaWYgKFxuICAgICAgc2xvdCA9PT0gJ2VkMjU1MTlNdWx0aXNpZycgJiZcbiAgICAgICghYmFja3VwS2V5Y2hhaW4ucHViIHx8XG4gICAgICAgICFpc0Rlcml2YWJsZUVkMjU1MTlQdWIoYmFja3VwS2V5Y2hhaW4ucHViKSB8fFxuICAgICAgICAhYml0Z29LZXljaGFpbi5wdWIgfHxcbiAgICAgICAgIWlzRGVyaXZhYmxlRWQyNTUxOVB1YihiaXRnb0tleWNoYWluLnB1YikpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgZWQyNTUxOU11bHRpc2lnIHJvb3RzIGFyZSBub3QgZGVyaXZhYmxlOiBleHBlY3RlZCA2NC1ieXRlIGNhbm9uaWNhbCBiYXNlMzIgbWF0ZXJpYWwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VzZXJLZXljaGFpbi5pZCwgYmFja3VwS2V5Y2hhaW4uaWQsIGJpdGdvS2V5Y2hhaW4uaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFBoYXNlIDIuMiBoZWxwZXIg4oCUIHJ1biBvbmUgTVBDIGNlcmVtb255IChES0xTIGZvciBlY2RzYU1wYywgRWREU0EgZm9yIGVkZHNhTXBjKSB2aWEgdGhlXG4gICAqIGV4aXN0aW5nIGBjcmVhdGVNcGNgIGZsb3cgd2l0aCBgc2FmZUlkYCB0aHJlYWRlZCB0aHJvdWdoLCBzbyB0aGUgcmVzdWx0aW5nIHVzZXIvYmFja3VwL2JpdGdvXG4gICAqIGtleXMgbGFuZCB0YWdnZWQuIFJldHVybnMgdGhlIFt1c2VyLCBiYWNrdXAsIGJpdGdvXSBrZXkgaWQgdHJpcGxldC5cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVNcGNSb290KFxuICAgIHNsb3Q6ICdlY2RzYU1wYycgfCAnZWRkc2FNcGMnLFxuICAgIHNhZmVJZDogc3RyaW5nLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBlbnRlcnByaXNlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSb290S2V5VHJpcGxldD4ge1xuICAgIGNvbnN0IHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbiB9ID0gYXdhaXQgdGhpcy5jb2luRm9yUm9vdChzbG90KVxuICAgICAgLmtleWNoYWlucygpXG4gICAgICAuY3JlYXRlTXBjKHsgbXVsdGlzaWdUeXBlOiAndHNzJywgcGFzc3BocmFzZSwgZW50ZXJwcmlzZSwgc2FmZUlkIH0pO1xuICAgIHJldHVybiBbdXNlcktleWNoYWluLmlkLCBiYWNrdXBLZXljaGFpbi5pZCwgYml0Z29LZXljaGFpbi5pZF07XG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0aGUgZW50ZXJwcmlzZSdzIHNhZmVzIHRoZSBjYWxsZXIgaXMgYSBtZW1iZXIgb2YgKGN1cnNvciBwYWdpbmF0aW9uKS5cbiAgICogR0VUIC9hcGkvdjIvZW50ZXJwcmlzZS86ZUlkL3NhZmVzP2xpbWl0JnByZXZJZFxuICAgKlxuICAgKiBgY3Vyc29yYCBpcyB0aGUgb3BhcXVlIGBuZXh0Q3Vyc29yYCByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGw7IHBhZ2UgZm9yd2FyZCB1bnRpbFxuICAgKiBgbmV4dEN1cnNvcmAgaXMgYWJzZW50LlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBhc3luYyBsaXN0KHBhcmFtczogTGlzdFNhZmVzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx7IHNhZmVzOiBTYWZlW107IG5leHRDdXJzb3I/OiBzdHJpbmcgfT4ge1xuICAgIC8vIFNESyBleHBvc2VzIGFuIG9wYXF1ZSBjdXJzb3I7IFdQIHNwZWFrcyBwcmV2SWQvbmV4dEJhdGNoUHJldklkICh2MiBsaXN0IGNvbnZlbnRpb24pLlxuICAgIGNvbnN0IHF1ZXJ5OiB7IGxpbWl0PzogbnVtYmVyOyBwcmV2SWQ/OiBzdHJpbmcgfSA9IHt9O1xuICAgIGlmIChwYXJhbXMubGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcXVlcnkubGltaXQgPSBwYXJhbXMubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY3Vyc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHF1ZXJ5LnByZXZJZCA9IHBhcmFtcy5jdXJzb3I7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoKSkucXVlcnkocXVlcnkpLnJlc3VsdCgpO1xuICAgIGNvbnN0IHsgc2FmZXMsIG5leHRCYXRjaFByZXZJZCB9ID0gZGVjb2RlV2l0aENvZGVjKExpc3RTYWZlc1Jlc3BvbnNlLCByZXNwb25zZSwgJ0xpc3RTYWZlc1Jlc3BvbnNlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhZmVzOiBzYWZlcy5tYXAoKHNhZmVEYXRhKSA9PiBuZXcgU2FmZSh0aGlzLmJpdGdvLCBzYWZlRGF0YSkpLFxuICAgICAgbmV4dEN1cnNvcjogbmV4dEJhdGNoUHJldklkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBzaW5nbGUgc2FmZSBieSBpZC4gTm9uLW1lbWJlcnMgZ2V0IGEgNDA0IChleGlzdGVuY2UgaXMgbm90IGxlYWtlZCkuXG4gICAqIEdFVCAvYXBpL3YyL2VudGVycHJpc2UvOmVJZC9zYWZlcy86c2FmZUlkXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IEdldFNhZmVPcHRpb25zKTogUHJvbWlzZTxTYWZlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybChgLyR7cGFyYW1zLmlkfWApKS5yZXN1bHQoKTtcbiAgICBjb25zdCBzYWZlRGF0YSA9IGRlY29kZVdpdGhDb2RlYyhTYWZlRGF0YSwgcmVzcG9uc2UsICdTYWZlRGF0YScpO1xuICAgIHJldHVybiBuZXcgU2FmZSh0aGlzLmJpdGdvLCBzYWZlRGF0YSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -70,10 +70,27 @@ export declare class EcdsaMPCv2Utils extends BaseEcdsaUtils {
|
|
|
70
70
|
xiList: number[][];
|
|
71
71
|
mpc: Ecdsa;
|
|
72
72
|
}): DklsTypes.RetrofitData;
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
protected addUserKeychain(commonKeychain: string, privateMaterial: Buffer, reducedPrivateMaterial: Buffer, passphrase: string, originalPasscodeEncryptionCode?: string, webauthnInfo?: WebauthnKeyEncryptionInfo, encryptionSession?: {
|
|
74
|
+
encrypt(plaintext: string): Promise<string>;
|
|
75
|
+
decrypt(ciphertext: string): Promise<string>;
|
|
76
|
+
destroy(): void;
|
|
77
|
+
}, encryptionVersion?: EncryptionVersion, enterprise?: string, safeId?: string, child?: {
|
|
78
|
+
parentKeyId?: string;
|
|
79
|
+
index?: number;
|
|
80
|
+
}): Promise<Keychain>;
|
|
81
|
+
protected addBackupKeychain(commonKeychain: string, privateMaterial: Buffer | undefined, reducedPrivateMaterial: Buffer | undefined, passphrase: string, originalPasscodeEncryptionCode?: string, encryptionSession?: {
|
|
82
|
+
encrypt(plaintext: string): Promise<string>;
|
|
83
|
+
decrypt(ciphertext: string): Promise<string>;
|
|
84
|
+
destroy(): void;
|
|
85
|
+
}, encryptionVersion?: EncryptionVersion, safeId?: string, child?: {
|
|
86
|
+
parentKeyId?: string;
|
|
87
|
+
index?: number;
|
|
88
|
+
}): Promise<Keychain>;
|
|
75
89
|
private getUserAndBackupSession;
|
|
76
|
-
|
|
90
|
+
protected addBitgoKeychain(commonKeychain: string, safeId?: string, child?: {
|
|
91
|
+
parentKeyId?: string;
|
|
92
|
+
index?: number;
|
|
93
|
+
}): Promise<Keychain>;
|
|
77
94
|
/**
|
|
78
95
|
* Creates ECDSA MPCv2 keychains using external signer callbacks instead of a passphrase.
|
|
79
96
|
* The external signer holds all private key material; the SDK only coordinates the DKG protocol.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAiD,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAEzG,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EAEzB,eAAe,EACf,4BAA4B,EAG7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAsB,QAAQ,EAAW,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUhD,OAAO,EACL,0CAA0C,EAC1C,0CAA0C,EAC1C,0CAA0C,EAC1C,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAE1B,6BAA6B,EAE7B,SAAS,EAGV,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAA6B,MAAM,0BAA0B,CAAC;AAG7F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,qBAAa,eAAgB,SAAQ,cAAc;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAiC;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAiC;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAiC;IAEpF,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QAEtC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8SvB,yBAAyB,CAC7B,gBAAgB,EAAE,4BAA4B,EAC9C,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,EACxB,sBAAsB,CAAC,EAAE,MAAM,EAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,8BAA8B,CAAC,EAAE,MAAM,EACvC,YAAY,CAAC,EAAE,yBAAyB,EACxC,iBAAiB,CAAC,EAAE;QAClB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAI,IAAI,CAAC;KACjB,EACD,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ecdsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.ts"],"names":[],"mappings":"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"}
|