@bitgo-beta/sdk-coin-algo 1.3.3-alpha.104 → 1.3.3-alpha.106
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/CHANGELOG.md +13 -0
- package/dist/src/algo.d.ts +17 -3
- package/dist/src/algo.d.ts.map +1 -1
- package/dist/src/algo.js +40 -14
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.27.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-algo@1.27.0...@bitgo/sdk-coin-algo@1.27.1) (2024-02-28)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **sdk-coin-algo:** fix firstRound value for algo wrw ([9f040d8](https://github.com/BitGo/BitGoJS/commit/9f040d880160542cf21c741364ac1a57b2045663))
|
|
11
|
+
|
|
12
|
+
# [1.27.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-algo@1.26.0...@bitgo/sdk-coin-algo@1.27.0) (2024-02-22)
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- **sdk-coin-algo:** add wrw support for algo ([da00d83](https://github.com/BitGo/BitGoJS/commit/da00d8313b863af7fdcfd041de6dbe96b10eb97e))
|
|
17
|
+
- **sdk-coin-algo:** implement algo root key creation ([6541032](https://github.com/BitGo/BitGoJS/commit/6541032d45c0bd03d0540f6a4b828c349b8da5a7))
|
|
18
|
+
|
|
6
19
|
# [1.26.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-algo@1.5.0...@bitgo/sdk-coin-algo@1.26.0) (2024-02-19)
|
|
7
20
|
|
|
8
21
|
### Features
|
package/dist/src/algo.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { AddressCoinSpecific, BaseCoin, BitGoBase, KeyPair, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions as BaseSignTransactionOptions, TokenManagementType, TransactionExplanation, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { AddressCoinSpecific, BaseBroadcastTransactionOptions, BaseBroadcastTransactionResult, BaseCoin, BitGoBase, KeyPair, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions as BaseSignTransactionOptions, TokenManagementType, TransactionExplanation, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
|
|
3
3
|
import * as algosdk from 'algosdk';
|
|
4
|
+
import { Buffer } from 'buffer';
|
|
4
5
|
export interface AlgoAddressCoinSpecifics extends AddressCoinSpecific {
|
|
5
6
|
rootAddress: string;
|
|
6
7
|
bitgoKey: string;
|
|
@@ -90,7 +91,7 @@ export interface RecoveryOptions {
|
|
|
90
91
|
userKey: string;
|
|
91
92
|
rootAddress: string;
|
|
92
93
|
recoveryDestination: string;
|
|
93
|
-
bitgoKey
|
|
94
|
+
bitgoKey: string;
|
|
94
95
|
walletPassphrase?: string;
|
|
95
96
|
fee: number;
|
|
96
97
|
firstRound?: number;
|
|
@@ -112,7 +113,7 @@ export interface OfflineVaultTxInfo {
|
|
|
112
113
|
txHex: string;
|
|
113
114
|
userKey: string;
|
|
114
115
|
backupKey: string;
|
|
115
|
-
bitgoKey
|
|
116
|
+
bitgoKey: string;
|
|
116
117
|
type?: string;
|
|
117
118
|
address: string;
|
|
118
119
|
coin: string;
|
|
@@ -123,6 +124,11 @@ export interface OfflineVaultTxInfo {
|
|
|
123
124
|
genesisId: string;
|
|
124
125
|
genesisHash: string;
|
|
125
126
|
note?: string;
|
|
127
|
+
addressVersion: number;
|
|
128
|
+
keys: string[];
|
|
129
|
+
}
|
|
130
|
+
export interface BroadcastTransactionOptions extends BaseBroadcastTransactionOptions {
|
|
131
|
+
nodeParams: NodeParams;
|
|
126
132
|
}
|
|
127
133
|
export declare class Algo extends BaseCoin {
|
|
128
134
|
readonly ENABLE_TOKEN: TokenManagementType;
|
|
@@ -234,6 +240,7 @@ export declare class Algo extends BaseCoin {
|
|
|
234
240
|
verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
|
|
235
241
|
decodeTx(txn: Buffer): unknown;
|
|
236
242
|
getAddressFromPublicKey(pubKey: Uint8Array): string;
|
|
243
|
+
supportsDeriveKeyWithSeed(): boolean;
|
|
237
244
|
/**
|
|
238
245
|
* Gets config for how token enablements work for this coin
|
|
239
246
|
* @returns
|
|
@@ -257,6 +264,13 @@ export declare class Algo extends BaseCoin {
|
|
|
257
264
|
*/
|
|
258
265
|
getClient(token: string, baseServer: string, port: number): algosdk.Algodv2;
|
|
259
266
|
recover(params: RecoveryOptions): Promise<RecoveryInfo | OfflineVaultTxInfo>;
|
|
267
|
+
/**
|
|
268
|
+
* Accepts a fully signed serialized base64 transaction and broadcasts it on the network.
|
|
269
|
+
* Uses the external node provided by the client
|
|
270
|
+
* @param serializedSignedTransaction
|
|
271
|
+
* @param nodeParams
|
|
272
|
+
*/
|
|
273
|
+
broadcastTransaction({ serializedSignedTransaction, nodeParams, }: BroadcastTransactionOptions): Promise<BaseBroadcastTransactionResult>;
|
|
260
274
|
/**
|
|
261
275
|
* Stellar and Algorand both use keys on the ed25519 curve, but use different encodings.
|
|
262
276
|
* As the HSM doesn't have explicit support to create Algorand addresses, we use the Stellar
|
package/dist/src/algo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algo.d.ts","sourceRoot":"","sources":["../../src/algo.ts"],"names":[],"mappings":";AAOA,OAAO,EACL,mBAAmB,EACnB,QAAQ,EACR,SAAS,EAIT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,IAAI,0BAA0B,EACpD,mBAAmB,EACnB,sBAAsB,EAItB,oBAAoB,EACpB,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"algo.d.ts","sourceRoot":"","sources":["../../src/algo.ts"],"names":[],"mappings":"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"}
|
package/dist/src/algo.js
CHANGED
|
@@ -36,6 +36,7 @@ const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
|
36
36
|
const utils_1 = __importDefault(require("./lib/utils"));
|
|
37
37
|
const algosdk = __importStar(require("algosdk"));
|
|
38
38
|
const transactionBuilder_1 = require("./lib/transactionBuilder");
|
|
39
|
+
const buffer_1 = require("buffer");
|
|
39
40
|
const SUPPORTED_ADDRESS_VERSION = 1;
|
|
40
41
|
const MSIG_THRESHOLD = 2; // m in m-of-n
|
|
41
42
|
class Algo extends sdk_core_1.BaseCoin {
|
|
@@ -89,7 +90,7 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
89
90
|
}
|
|
90
91
|
return {
|
|
91
92
|
pub: keyPair.getAddress(),
|
|
92
|
-
prv: AlgoLib.algoUtils.encodeSeed(Buffer.from(keyPair.getSigningKey())),
|
|
93
|
+
prv: AlgoLib.algoUtils.encodeSeed(buffer_1.Buffer.from(keyPair.getSigningKey())),
|
|
93
94
|
};
|
|
94
95
|
}
|
|
95
96
|
/** inheritdoc */
|
|
@@ -138,10 +139,10 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
138
139
|
*/
|
|
139
140
|
async signMessage(key, message) {
|
|
140
141
|
const algoKeypair = new AlgoLib.KeyPair({ prv: key.prv });
|
|
141
|
-
if (Buffer.isBuffer(message)) {
|
|
142
|
+
if (buffer_1.Buffer.isBuffer(message)) {
|
|
142
143
|
message = message.toString('base64');
|
|
143
144
|
}
|
|
144
|
-
return Buffer.from(algoKeypair.signMessage(message));
|
|
145
|
+
return buffer_1.Buffer.from(algoKeypair.signMessage(message));
|
|
145
146
|
}
|
|
146
147
|
/**
|
|
147
148
|
* Specifies what key we will need for signing` - Algorand needs the backup, bitgo pubs.
|
|
@@ -335,7 +336,7 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
335
336
|
if (!transaction) {
|
|
336
337
|
throw new Error('Invalid transaction');
|
|
337
338
|
}
|
|
338
|
-
const signedTxHex = Buffer.from(transaction.toBroadcastFormat()).toString('base64');
|
|
339
|
+
const signedTxHex = buffer_1.Buffer.from(transaction.toBroadcastFormat()).toString('base64');
|
|
339
340
|
if (numberSigners === 1) {
|
|
340
341
|
return { txHex: signedTxHex };
|
|
341
342
|
}
|
|
@@ -380,6 +381,9 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
380
381
|
getAddressFromPublicKey(pubKey) {
|
|
381
382
|
return AlgoLib.algoUtils.publicKeyToAlgoAddress(pubKey);
|
|
382
383
|
}
|
|
384
|
+
supportsDeriveKeyWithSeed() {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
383
387
|
/**
|
|
384
388
|
* Gets config for how token enablements work for this coin
|
|
385
389
|
* @returns
|
|
@@ -411,7 +415,7 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
411
415
|
return new algosdk.Algodv2(token, baseServer, port);
|
|
412
416
|
}
|
|
413
417
|
async recover(params) {
|
|
414
|
-
var _a
|
|
418
|
+
var _a;
|
|
415
419
|
const isUnsignedSweep = this.isValidPub(params.userKey) && this.isValidPub(params.backupKey);
|
|
416
420
|
if (!params.nodeParams) {
|
|
417
421
|
throw new Error('Please provide the details of an ALGO node to use for recovery');
|
|
@@ -472,7 +476,7 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
472
476
|
.do()
|
|
473
477
|
.then((status) => status['last-round']);
|
|
474
478
|
}
|
|
475
|
-
const firstRound =
|
|
479
|
+
const firstRound = !params.firstRound ? latestRound : params.firstRound;
|
|
476
480
|
if (!firstRound) {
|
|
477
481
|
throw new Error('Unable to fetch the latest round from the node. Please provide the firstRound or try again.');
|
|
478
482
|
}
|
|
@@ -490,10 +494,10 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
490
494
|
.amount(spendableAmount)
|
|
491
495
|
.genesisId(genesisId)
|
|
492
496
|
.genesisHash(genesisHash)
|
|
493
|
-
.firstRound(firstRound)
|
|
494
|
-
.lastRound(lastRound);
|
|
497
|
+
.firstRound(new bignumber_js_1.default(firstRound).toNumber())
|
|
498
|
+
.lastRound(new bignumber_js_1.default(lastRound).toNumber());
|
|
495
499
|
if (params.note) {
|
|
496
|
-
const note = new Uint8Array(Buffer.from(params.note, 'utf-8'));
|
|
500
|
+
const note = new Uint8Array(buffer_1.Buffer.from(params.note, 'utf-8'));
|
|
497
501
|
txBuilder.note(note);
|
|
498
502
|
}
|
|
499
503
|
// Cold wallet, offline vault
|
|
@@ -501,7 +505,7 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
501
505
|
const tx = await txBuilder.build();
|
|
502
506
|
const txJson = tx.toJson();
|
|
503
507
|
return {
|
|
504
|
-
txHex: Buffer.from(tx.toBroadcastFormat()).toString('hex'),
|
|
508
|
+
txHex: buffer_1.Buffer.from(tx.toBroadcastFormat()).toString('hex'),
|
|
505
509
|
type: txJson.type,
|
|
506
510
|
userKey: params.userKey,
|
|
507
511
|
backupKey: params.backupKey,
|
|
@@ -509,12 +513,14 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
509
513
|
address: params.rootAddress,
|
|
510
514
|
coin: this.getChain(),
|
|
511
515
|
fee: txJson.fee,
|
|
512
|
-
amount: (
|
|
516
|
+
amount: (_a = txJson.amount) !== null && _a !== void 0 ? _a : nativeBalance.toString(),
|
|
513
517
|
firstRound: txJson.firstRound,
|
|
514
518
|
lastRound: txJson.lastRound,
|
|
515
519
|
genesisId: genesisId,
|
|
516
520
|
genesisHash: genesisHash,
|
|
517
|
-
note: txJson.note ? Buffer.from(txJson.note.buffer).toString('utf-8') : undefined,
|
|
521
|
+
note: txJson.note ? buffer_1.Buffer.from(txJson.note.buffer).toString('utf-8') : undefined,
|
|
522
|
+
keys: [params.userKey, params.backupKey, params.bitgoKey],
|
|
523
|
+
addressVersion: 1,
|
|
518
524
|
};
|
|
519
525
|
}
|
|
520
526
|
// Non-bitgo Recovery (Hot wallets)
|
|
@@ -531,9 +537,29 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
531
537
|
lastRound: txJson.lastRound,
|
|
532
538
|
genesisId: genesisId,
|
|
533
539
|
genesisHash: genesisHash,
|
|
534
|
-
note: txJson.note ? Buffer.from(txJson.note.buffer).toString('utf-8') : undefined,
|
|
540
|
+
note: txJson.note ? buffer_1.Buffer.from(txJson.note.buffer).toString('utf-8') : undefined,
|
|
535
541
|
};
|
|
536
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Accepts a fully signed serialized base64 transaction and broadcasts it on the network.
|
|
545
|
+
* Uses the external node provided by the client
|
|
546
|
+
* @param serializedSignedTransaction
|
|
547
|
+
* @param nodeParams
|
|
548
|
+
*/
|
|
549
|
+
async broadcastTransaction({ serializedSignedTransaction, nodeParams, }) {
|
|
550
|
+
if (!nodeParams) {
|
|
551
|
+
throw new Error('Please provide the details of the algorand node');
|
|
552
|
+
}
|
|
553
|
+
try {
|
|
554
|
+
const txHex = buffer_1.Buffer.from(serializedSignedTransaction, 'base64').toString('hex');
|
|
555
|
+
const algoTx = utils_1.default.toUint8Array(txHex);
|
|
556
|
+
const client = this.getClient(nodeParams.token, nodeParams.baseServer, nodeParams.port);
|
|
557
|
+
return await client.sendRawTransaction(algoTx).do();
|
|
558
|
+
}
|
|
559
|
+
catch (e) {
|
|
560
|
+
throw new Error('Failed to broadcast transaction, error: ' + e.message);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
537
563
|
/**
|
|
538
564
|
* Stellar and Algorand both use keys on the ed25519 curve, but use different encodings.
|
|
539
565
|
* As the HSM doesn't have explicit support to create Algorand addresses, we use the Stellar
|
|
@@ -565,4 +591,4 @@ class Algo extends sdk_core_1.BaseCoin {
|
|
|
565
591
|
}
|
|
566
592
|
}
|
|
567
593
|
exports.Algo = Algo;
|
|
568
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxnby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbGdvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILDBDQUE0QjtBQUM1QixtREFBZ0Q7QUFDaEQsaURBQXdEO0FBQ3hELCtDQUFpQztBQUNqQyxtREFvQjhCO0FBQzlCLDhEQUFrQztBQUNsQyxnRUFBcUM7QUFDckMsd0RBQWdDO0FBRWhDLGlEQUFtQztBQUNuQyxpRUFLa0M7QUFFbEMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYztBQTJJeEMsTUFBYSxJQUFLLFNBQVEsbUJBQVE7SUFJaEMsWUFBWSxLQUFnQjtRQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFKTixpQkFBWSxHQUF3QixhQUFhLENBQUM7UUFDbEQsa0JBQWEsR0FBd0IsY0FBYyxDQUFDO0lBSTdELENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCO1FBQ3BDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCwyQkFBMkI7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLGlC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eEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDbEYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSywyQkFBMkIsQ0FBQyxlQUF1QjtRQUN6RCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDeEMsOEJBQThCO1lBQzlCLE9BQU8sZUFBZSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLHFCQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzVELE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1NBQ3ZGO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLHFCQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1NBQ3ZHO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztDQUNGO0FBeG1CRCxvQkF3bUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VlZFZhbGlkYXRvciB9IGZyb20gJy4vc2VlZFZhbGlkYXRvcic7XG5pbXBvcnQgeyBjb2lucywgQ29pbkZhbWlseSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQWxnb0xpYiBmcm9tICcuL2xpYic7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkS2V5LFxuICBLZXlJbmRpY2VzLFxuICBLZXlQYWlyLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUb2tlbk1hbmFnZW1lbnRUeXBlLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBOb3RTdXBwb3J0ZWQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCBzdGVsbGFyIGZyb20gJ3N0ZWxsYXItc2RrJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBVdGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgeyBUeERhdGEgfSBmcm9tICcuL2xpYi9pZmFjZXMnO1xuaW1wb3J0ICogYXMgYWxnb3NkayBmcm9tICdhbGdvc2RrJztcbmltcG9ydCB7XG4gIE1BSU5ORVRfR0VORVNJU19IQVNILFxuICBNQUlOTkVUX0dFTkVTSVNfSUQsXG4gIFRFU1RORVRfR0VORVNJU19IQVNILFxuICBURVNUTkVUX0dFTkVTSVNfSUQsXG59IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5cbmNvbnN0IFNVUFBPUlRFRF9BRERSRVNTX1ZFUlNJT04gPSAxO1xuY29uc3QgTVNJR19USFJFU0hPTEQgPSAyOyAvLyBtIGluIG0tb2YtblxuXG5leHBvcnQgaW50ZXJmYWNlIEFsZ29BZGRyZXNzQ29pblNwZWNpZmljcyBleHRlbmRzIEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICByb290QWRkcmVzczogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICBiaXRnb1B1YktleT86IHN0cmluZztcbiAgYWRkcmVzc1ZlcnNpb246IG51bWJlcjtcbiAgdGhyZXNob2xkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWxnb0FkZHJlc3NPcHRpb25zIGV4dGVuZHMgVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICBjb2luU3BlY2lmaWM6IEFsZ29BZGRyZXNzQ29pblNwZWNpZmljcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGdvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBtZW1vPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nIHwgbnVtYmVyO1xuICB2b3RlS2V5Pzogc3RyaW5nO1xuICBzZWxlY3Rpb25LZXk/OiBzdHJpbmc7XG4gIHZvdGVGaXJzdD86IG51bWJlcjtcbiAgdm90ZUxhc3Q/OiBudW1iZXI7XG4gIHZvdGVLZXlEaWx1dGlvbj86IG51bWJlcjtcbiAgdG9rZW5JZD86IG51bWJlcjtcbiAgb3BlcmF0aW9ucz86IFRyYW5zYWN0aW9uT3BlcmF0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25PcGVyYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgaGFsZlNpZ25lZD86IHtcbiAgICB0eEhleDogc3RyaW5nO1xuICB9O1xuICB0eEluZm86IHtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBhbW91bnQ6IHN0cmluZztcbiAgICBmZWU6IG51bWJlcjtcbiAgICBmaXJzdFJvdW5kOiBudW1iZXI7XG4gICAgbGFzdFJvdW5kOiBudW1iZXI7XG4gICAgZ2VuZXNpc0lEOiBzdHJpbmc7XG4gICAgZ2VuZXNpc0hhc2g6IHN0cmluZztcbiAgICBub3RlPzogc3RyaW5nO1xuICB9O1xuICBrZXlzOiBzdHJpbmdbXTtcbiAgYWRkcmVzc1ZlcnNpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdWxseVNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYWxmU2lnbmVkVHJhbnNhY3Rpb24ge1xuICBoYWxmU2lnbmVkOiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkZlZSB7XG4gIGZlZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbiAgcHVibGljS2V5cz86IHN0cmluZ1tdO1xuICBmZWVJbmZvOiBUcmFuc2FjdGlvbkZlZTtcbn1cblxuaW50ZXJmYWNlIE5vZGVQYXJhbXMge1xuICB0b2tlbjogc3RyaW5nO1xuICBiYXNlU2VydmVyOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZmllZFRyYW5zYWN0aW9uUGFyYW1ldGVycyB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGFkZHJlc3NWZXJzaW9uOiBudW1iZXI7XG4gIHNpZ25lcnM6IHN0cmluZ1tdO1xuICBwcnY6IHN0cmluZztcbiAgaXNIYWxmU2lnbmVkOiBib29sZWFuO1xuICBudW1iZXJTaWduZXJzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlPcHRpb25zIHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgcm9vdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBiaXRnb0tleT86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgZmVlOiBudW1iZXI7XG4gIGZpcnN0Um91bmQ/OiBudW1iZXI7XG4gIG5vdGU/OiBzdHJpbmc7XG4gIG5vZGVQYXJhbXM6IE5vZGVQYXJhbXM7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeUluZm8ge1xuICBpZDogc3RyaW5nO1xuICB0eDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIGZlZTogbnVtYmVyO1xuICBmaXJzdFJvdW5kOiBudW1iZXI7XG4gIGxhc3RSb3VuZDogbnVtYmVyO1xuICBnZW5lc2lzSWQ6IHN0cmluZztcbiAgZ2VuZXNpc0hhc2g6IHN0cmluZztcbiAgbm90ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPZmZsaW5lVmF1bHRUeEluZm8ge1xuICB0eEhleDogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleT86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIGZlZTogbnVtYmVyO1xuICBhbW91bnQ6IHN0cmluZztcbiAgZmlyc3RSb3VuZDogbnVtYmVyO1xuICBsYXN0Um91bmQ6IG51bWJlcjtcbiAgZ2VuZXNpc0lkOiBzdHJpbmc7XG4gIGdlbmVzaXNIYXNoOiBzdHJpbmc7XG4gIG5vdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBbGdvIGV4dGVuZHMgQmFzZUNvaW4ge1xuICByZWFkb25seSBFTkFCTEVfVE9LRU46IFRva2VuTWFuYWdlbWVudFR5cGUgPSAnZW5hYmxldG9rZW4nO1xuICByZWFkb25seSBESVNBQkxFX1RPS0VOOiBUb2tlbk1hbmFnZW1lbnRUeXBlID0gJ2Rpc2FibGV0b2tlbic7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlKTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgQWxnbyhiaXRnbyk7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnYWxnbyc7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2FsZ28nO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdhbGdvJztcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdBbGdvcmFuZCc7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgcmV0dXJuIDFlNjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIGZvciBzZW5kaW5nIHZhbHVlIG9mIDBcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgb2theSB0byBzZW5kIDAgdmFsdWUsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgdmFsdWVsZXNzVHJhbnNmZXJBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsZ29yYW5kIHN1cHBvcnRzIGFjY291bnQgY29uc29saWRhdGlvbnMuIFRoZXNlIGFyZSB0cmFuc2ZlcnMgZnJvbSB0aGUgcmVjZWl2ZSBhZGRyZXNzZXNcbiAgICogdG8gdGhlIG1haW4gYWRkcmVzcy5cbiAgICovXG4gIGFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZG9jICovXG4gIGRlcml2ZUtleVdpdGhTZWVkKCk6IHsgZGVyaXZhdGlvblBhdGg6IHN0cmluZzsga2V5OiBzdHJpbmcgfSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnbWV0aG9kIGRlcml2ZUtleVdpdGhTZWVkIG5vdCBzdXBwb3J0ZWQgZm9yIGVkZHNhIGN1cnZlJyk7XG4gIH1cblxuICAvKiogaW5oZXJpdGRvYyAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEFsZ29MaWIuS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQWxnb0xpYi5LZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5UGFpci5nZXRBZGRyZXNzKCksXG4gICAgICBwcnY6IEFsZ29MaWIuYWxnb1V0aWxzLmVuY29kZVNlZWQoQnVmZmVyLmZyb20oa2V5UGFpci5nZXRTaWduaW5nS2V5KCkpKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIGluaGVyaXRkb2MgKi9cbiAgZ2VuZXJhdGVSb290S2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQWxnb0xpYi5LZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBbGdvTGliLktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcHJ2OiBrZXlzLnBydiArIGtleXMucHViLCBwdWI6IGtleXMucHViIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFsZ29MaWIuYWxnb1V0aWxzLmlzVmFsaWRBZGRyZXNzKHB1YikgfHwgQWxnb0xpYi5hbGdvVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBzZWVkIGZvciB0aGUgY29pblxuICAgKiBJbiBBbGdvcmFuZCwgd2hlbiB0aGUgcHJpdmF0ZSBrZXkgaXMgZW5jb2RlZCBhcyBiYXNlMzIgc3RyaW5nIG9ubHkgdGhlIGZpcnN0IDMyIGJ5dGVzIGFyZSB0YWtlbixcbiAgICogc28gdGhlIGVuY29kZWQgdmFsdWUgaXMgYWN0dWFsbHkgdGhlIHNlZWRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBydiB0aGUgcHJ2IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFBydihwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBbGdvTGliLmFsZ29VdGlscy5pc1ZhbGlkU2VlZChwcnYpIHx8IEFsZ29MaWIuYWxnb1V0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQWxnb0xpYi5hbGdvVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBtZXNzYWdlIHdpdGggcHJpdmF0ZSBrZXlcbiAgICpcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoa2V5OiBLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGFsZ29LZXlwYWlyID0gbmV3IEFsZ29MaWIuS2V5UGFpcih7IHBydjoga2V5LnBydiB9KTtcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UpKSB7XG4gICAgICBtZXNzYWdlID0gbWVzc2FnZS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuZnJvbShhbGdvS2V5cGFpci5zaWduTWVzc2FnZShtZXNzYWdlKSk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoYXQga2V5IHdlIHdpbGwgbmVlZCBmb3Igc2lnbmluZ2AgLSBBbGdvcmFuZCBuZWVkcyB0aGUgYmFja3VwLCBiaXRnbyBwdWJzLlxuICAgKi9cbiAga2V5SWRzRm9yU2lnbmluZygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFtLZXlJbmRpY2VzLlVTRVIsIEtleUluZGljZXMuQkFDS1VQLCBLZXlJbmRpY2VzLkJJVEdPXTtcbiAgfVxuXG4gIGdldFRva2VuTmFtZUJ5SWQodG9rZW5JZDogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b2tlbk5hbWVzID0gY29pbnMuZmlsdGVyKChjb2luKSA9PiBjb2luLmZhbWlseSA9PT0gJ2FsZ28nICYmIGNvaW4uaXNUb2tlbikubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSEpO1xuICAgIHJldHVybiB0b2tlbk5hbWVzLmZpbmQoKHRva2VuTmFtZSkgPT4gdG9rZW5OYW1lLnNwbGl0KCctJylbMV0gPT09IGAke3Rva2VuSWR9YCkgfHwgJ0FsZ29Ub2tlbiB1bmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluL3BhcnNlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEFsZ29UcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhIZXggfHwgKHBhcmFtcy5oYWxmU2lnbmVkICYmIHBhcmFtcy5oYWxmU2lnbmVkLnR4SGV4KTtcbiAgICBpZiAoIXR4SGV4IHx8ICFwYXJhbXMuZmVlSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGV4cGxhaW4gdHggcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXIoKTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eEhleCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgIGlmICh0eC50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHR4SnNvbi50byxcbiAgICAgICAgICBhbW91bnQ6IHR4SnNvbi5hbW91bnQsXG4gICAgICAgICAgbWVtbzogdHhKc29uLm5vdGUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uczogVHJhbnNhY3Rpb25PcGVyYXRpb25bXSA9IFtdO1xuXG4gICAgICBjb25zdCBpc1Rva2VuVHggPSB0aGlzLmlzVG9rZW5UeCh0eEpzb24udHlwZSk7XG4gICAgICBpZiAoaXNUb2tlblR4KSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBBbGdvTGliLmFsZ29VdGlscy5nZXRUb2tlblR4VHlwZSh0eEpzb24uYW1vdW50LCB0eEpzb24uZnJvbSwgdHhKc29uLnRvLCB0eEpzb24uY2xvc2VSZW1haW5kZXJUbyk7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICBjb2luOiB0aGlzLmdldFRva2VuTmFtZUJ5SWQodHhKc29uLnRva2VuSWQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgICAnaWQnLFxuICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAgICdvdXRwdXRzJyxcbiAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAnZmVlJyxcbiAgICAgICAgJ21lbW8nLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdvcGVyYXRpb25zJyxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBBbGdvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IHR4SnNvbi5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIG91dHB1dHMsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHR4SnNvbi5mZWUsXG4gICAgICAgIG1lbW86IHR4SnNvbi5ub3RlLFxuICAgICAgICB0eXBlOiB0eC50eXBlLnRvU3RyaW5nKCksXG4gICAgICAgIG9wZXJhdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAodHhKc29uLnRva2VuSWQpIHtcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudG9rZW5JZCA9IHR4SnNvbi50b2tlbklkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXhwbGFuYXRpb25SZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHR4LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbikge1xuICAgICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgICAnaWQnLFxuICAgICAgICAnZmVlJyxcbiAgICAgICAgJ21lbW8nLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd2b3RlS2V5JyxcbiAgICAgICAgJ3NlbGVjdGlvbktleScsXG4gICAgICAgICd2b3RlRmlyc3QnLFxuICAgICAgICAndm90ZUxhc3QnLFxuICAgICAgICAndm90ZUtleURpbHV0aW9uJyxcbiAgICAgIF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBvdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgICAgbWVtbzogdHhKc29uLm5vdGUsXG4gICAgICAgIHR5cGU6IHR4LnR5cGUsXG4gICAgICAgIHZvdGVLZXk6IHR4SnNvbi52b3RlS2V5LFxuICAgICAgICBzZWxlY3Rpb25LZXk6IHR4SnNvbi5zZWxlY3Rpb25LZXksXG4gICAgICAgIHZvdGVGaXJzdDogdHhKc29uLnZvdGVGaXJzdCxcbiAgICAgICAgdm90ZUxhc3Q6IHR4SnNvbi52b3RlTGFzdCxcbiAgICAgICAgdm90ZUtleURpbHV0aW9uOiB0eEpzb24udm90ZUtleURpbHV0aW9uLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBpZiBhIHR4IGlzIGEgdG9rZW4gdHhcbiAgICogQHBhcmFtIHR5cGUge3N0cmluZ30gLSB0eCB0eXBlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgaXQncyBhIHRva2VuIHR4XG4gICAqL1xuICBpc1Rva2VuVHgodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdheGZlcic7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBzZWVkIGlzIGEgdmFsaWQgc3RlbGxhciBzZWVkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZWVkIHRoZSBzZWVkIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBpbnB1dCBpcyBhIFN0ZWxsYXIgc2VlZFxuICAgKi9cbiAgaXNTdGVsbGFyU2VlZChzZWVkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU2VlZFZhbGlkYXRvci5pc1ZhbGlkRWQyNTUxOVNlZWRGb3JDb2luKHNlZWQsIENvaW5GYW1pbHkuWExNKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc3RlbGxhciBzZWVkIHRvIGFuIGFsZ28gc2VlZFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VlZCB0aGUgc2VlZCB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIHtCb29sZWFuIHwgbnVsbH0gc2VlZCBpbiBhbGdvIGVuY29kaW5nXG4gICAqL1xuICBjb252ZXJ0RnJvbVN0ZWxsYXJTZWVkKHNlZWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIC8vIGFzc3VtZSB0aGlzIGlzIGEgdHJ1c3QgY3VzdG9kaWFsIHNlZWQgaWYgaXRzIGEgdmFsaWQgZWQyNTUxOSBwcnZcbiAgICBpZiAoIXRoaXMuaXNTdGVsbGFyU2VlZChzZWVkKSB8fCBTZWVkVmFsaWRhdG9yLmhhc0NvbXBldGluZ1NlZWRGb3JtYXRzKHNlZWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoU2VlZFZhbGlkYXRvci5pc1ZhbGlkRWQyNTUxOVNlZWRGb3JDb2luKHNlZWQsIENvaW5GYW1pbHkuWExNKSkge1xuICAgICAgcmV0dXJuIEFsZ29MaWIuYWxnb1V0aWxzLmNvbnZlcnRGcm9tU3RlbGxhclNlZWQoc2VlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2ZXJpZnlTaWduVHJhbnNhY3Rpb25QYXJhbXMocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogVmVyaWZpZWRUcmFuc2FjdGlvblBhcmFtZXRlcnMge1xuICAgIGNvbnN0IHBydiA9IHBhcmFtcy5wcnY7XG4gICAgY29uc3QgYWRkcmVzc1ZlcnNpb24gPSBwYXJhbXMudHhQcmVidWlsZC5hZGRyZXNzVmVyc2lvbjtcbiAgICBsZXQgaXNIYWxmU2lnbmVkID0gZmFsc2U7XG5cbiAgICAvLyBpdCdzIHBvc3NpYmxlIHRoaXMgdHggd2FzIGFscmVhZHkgc2lnbmVkIC0gdGFrZSB0aGUgaGFsZlNpZ25lZFxuICAgIC8vIHR4SGV4IGlmIGl0IGlzXG4gICAgbGV0IHR4SGV4ID0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKHBhcmFtcy50eFByZWJ1aWxkLmhhbGZTaWduZWQpIHtcbiAgICAgIGlzSGFsZlNpZ25lZCA9IHRydWU7XG4gICAgICB0eEhleCA9IHBhcmFtcy50eFByZWJ1aWxkLmhhbGZTaWduZWQudHhIZXg7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQodHhIZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHhQcmVidWlsZCBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcodHhIZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCB0eXBlICR7dHlwZW9mIHR4SGV4fWApO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBwcnYgcGFyYW1ldGVyIHRvIHNpZ24gdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcnYgbXVzdCBiZSBhIHN0cmluZywgZ290IHR5cGUgJHt0eXBlb2YgcHJ2fWApO1xuICAgIH1cblxuICAgIGlmICghXy5oYXMocGFyYW1zLnR4UHJlYnVpbGQsICdrZXlzJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBwdWJsaWMga2V5cyBwYXJhbWV0ZXIgdG8gc2lnbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICghXy5pc051bWJlcihhZGRyZXNzVmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBhZGRyZXNzVmVyc2lvbiBwYXJhbWV0ZXIgdG8gc2lnbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lcnMgPSBwYXJhbXMudHhQcmVidWlsZC5rZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICAvLyBpZiB3ZSBhcmUgcmVjZWl2aW5nIGFkZHJlc3NlcyBkbyBub3QgdHJ5IHRvIGNvbnZlcnQgdGhlbVxuICAgICAgaWYgKCFBbGdvTGliLmFsZ29VdGlscy5pc1ZhbGlkQWRkcmVzcyhrZXkpKSB7XG4gICAgICAgIHJldHVybiBBbGdvTGliLmFsZ29VdGlscy5wdWJsaWNLZXlUb0FsZ29BZGRyZXNzKEFsZ29MaWIuYWxnb1V0aWxzLnRvVWludDhBcnJheShrZXkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgLy8gVE9ETyhodHRwczovL2JpdGdvaW5jLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NUTFgtNjA2Nyk6IGZpeCB0aGUgbnVtYmVyIG9mIHNpZ25lcnMgdXNpbmdcbiAgICAvLyBzaG91bGQgYmUgc2ltaWxhciB0byBvdGhlciBjb2lucyBpbXBsZW1lbnRhdGlvblxuICAgIC8vIElmIHdlIGhhdmUgYSBudW1iZXIgd2l0aCBkaWdpdHMgdG8gZWxpbWluYXRlIHRoZW0gd2l0aG91dCB0YWtpbmcgYW55IHJvdW5kaW5nIGNyaXRlcmlhLlxuICAgIGNvbnN0IG51bWJlclNpZ25lcnMgPSBNYXRoLnRydW5jKHNpZ25lcnMubGVuZ3RoIC8gMikgKyAxO1xuICAgIHJldHVybiB7IHR4SGV4LCBhZGRyZXNzVmVyc2lvbiwgc2lnbmVycywgcHJ2LCBpc0hhbGZTaWduZWQsIG51bWJlclNpZ25lcnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHtUcmFuc2FjdGlvblByZWJ1aWxkfSBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgcGxhdGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy5wcnYge1N0cmluZ30gdXNlciBwcnZcbiAgICogQHJldHVybnMge1Byb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB7IHR4SGV4LCBzaWduZXJzLCBwcnYsIGlzSGFsZlNpZ25lZCwgbnVtYmVyU2lnbmVycyB9ID0gdGhpcy52ZXJpZnlTaWduVHJhbnNhY3Rpb25QYXJhbXMocGFyYW1zKTtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyKCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4SGV4KTtcbiAgICB0eEJ1aWxkZXIubnVtYmVyT2ZSZXF1aXJlZFNpZ25lcnMobnVtYmVyU2lnbmVycyk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBydiB9KTtcbiAgICB0eEJ1aWxkZXIuc2V0U2lnbmVycyhzaWduZXJzKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBzaWduZWRUeEhleCA9IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBpZiAobnVtYmVyU2lnbmVycyA9PT0gMSkge1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHNpZ25lZFR4SGV4IH07XG4gICAgfSBlbHNlIGlmIChpc0hhbGZTaWduZWQpIHtcbiAgICAgIHJldHVybiB7IHR4SGV4OiBzaWduZWRUeEhleCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyBoYWxmU2lnbmVkOiB7IHR4SGV4OiBzaWduZWRUeEhleCB9IH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGNhbiBiZSB1c2VkIHRvIHNlbmQgZnVuZHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBwYXJhbXMua2V5Y2hhaW5zIHB1YmxpYyBrZXlzIHRvIGdlbmVyYXRlIHRoZSB3YWxsZXRcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFsZ29BZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBrZXljaGFpbnMsXG4gICAgICBjb2luU3BlY2lmaWM6IHsgYml0Z29QdWJLZXkgfSxcbiAgICB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlZmZlY3RpdmVLZXljaGFpbiA9IGJpdGdvUHViS2V5ID8ga2V5Y2hhaW5zLnNsaWNlKDAsIC0xKS5jb25jYXQoW3sgcHViOiBiaXRnb1B1YktleSB9XSkgOiBrZXljaGFpbnM7XG4gICAgY29uc3QgcHViS2V5cyA9IGVmZmVjdGl2ZUtleWNoYWluLm1hcCgoa2V5KSA9PiB0aGlzLnN0ZWxsYXJBZGRyZXNzVG9BbGdvQWRkcmVzcyhrZXkucHViKSk7XG5cbiAgICBpZiAoIXB1YktleXMuZXZlcnkoKHB1YktleSkgPT4gdGhpcy5pc1ZhbGlkUHViKHB1YktleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEtleSgnaW52YWxpZCBwdWJsaWMga2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBBbGdvTGliLmFsZ29VdGlscy5tdWx0aXNpZ0FkZHJlc3MoU1VQUE9SVEVEX0FERFJFU1NfVkVSU0lPTiwgTVNJR19USFJFU0hPTEQsIHB1YktleXMpO1xuXG4gICAgcmV0dXJuIHJvb3RBZGRyZXNzID09PSBhZGRyZXNzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRlY29kZVR4KHR4bjogQnVmZmVyKTogdW5rbm93biB7XG4gICAgcmV0dXJuIEFsZ29MaWIuYWxnb1V0aWxzLmRlY29kZUFsZ29UeG4odHhuKTtcbiAgfVxuXG4gIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YktleTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFsZ29MaWIuYWxnb1V0aWxzLnB1YmxpY0tleVRvQWxnb0FkZHJlc3MocHViS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbmZpZyBmb3IgaG93IHRva2VuIGVuYWJsZW1lbnRzIHdvcmsgZm9yIHRoaXMgY29pblxuICAgKiBAcmV0dXJuc1xuICAgKiAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogVHJ1ZSBpZiB0b2tlbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvaW5cbiAgICogICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IFRydWUgaWYgbXVsdGlwbGUgdG9rZW5zIGNhbiBiZSBlbmFibGVkIGluIG9uZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhbGFuY2Ugb2YgdGhlIHJvb3QgYWRkcmVzcyBpbiBiYXNlIHVuaXRzIG9mIGFsZ29cbiAgICogRWcuIElmIGJhbGFuY2UgaXMgMSBBbGdvLCB0aGlzIHJldHVybnMgMSoxMF42XG4gICAqIEBwYXJhbSByb290QWRkcmVzc1xuICAgKiBAcGFyYW0gY2xpZW50XG4gICAqL1xuICBhc3luYyBnZXRBY2NvdW50QmFsYW5jZShyb290QWRkcmVzczogc3RyaW5nLCBjbGllbnQ6IGFsZ29zZGsuQWxnb2R2Mik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYWNjb3VudEluZm9ybWF0aW9uID0gYXdhaXQgY2xpZW50LmFjY291bnRJbmZvcm1hdGlvbihyb290QWRkcmVzcykuZG8oKTtcbiAgICAvLyBFeHRyYWN0IHRoZSBiYWxhbmNlIGZyb20gdGhlIGFjY291bnQgaW5mb3JtYXRpb25cbiAgICByZXR1cm4gYWNjb3VudEluZm9ybWF0aW9uLmFtb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBbGdvIGNsaWVudCBmb3IgdGhlIGdpdmVuIHRva2VuLCBiYXNlU2VydmVyIGFuZCBwb3J0XG4gICAqIFVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgQWxnbyBuZXR3b3JrXG4gICAqL1xuICBnZXRDbGllbnQodG9rZW46IHN0cmluZywgYmFzZVNlcnZlcjogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBhbGdvc2RrLkFsZ29kdjIge1xuICAgIHJldHVybiBuZXcgYWxnb3Nkay5BbGdvZHYyKHRva2VuLCBiYXNlU2VydmVyLCBwb3J0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBPZmZsaW5lVmF1bHRUeEluZm8+IHtcbiAgICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSB0aGlzLmlzVmFsaWRQdWIocGFyYW1zLnVzZXJLZXkpICYmIHRoaXMuaXNWYWxpZFB1YihwYXJhbXMuYmFja3VwS2V5KTtcblxuICAgIGlmICghcGFyYW1zLm5vZGVQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgdGhlIGRldGFpbHMgb2YgYW4gQUxHTyBub2RlIHRvIHVzZSBmb3IgcmVjb3ZlcnknKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgcm9vdCBhZGRyZXNzXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yb290QWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByb290QWRkcmVzcywgZ290OiAnICsgcGFyYW1zLnJvb3RBZGRyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzc1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uLCBnb3Q6ICcgKyBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5maXJzdFJvdW5kICYmIG5ldyBCaWdOdW1iZXIocGFyYW1zLmZpcnN0Um91bmQpLmlzTmVnYXRpdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdCByb3VuZCBuZWVkcyB0byBiZSBhIHBvc2l0aXZlIHZhbHVlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXNpc0lkID0gdGhpcy5iaXRnby5nZXRFbnYoKSA9PT0gJ3Byb2QnID8gTUFJTk5FVF9HRU5FU0lTX0lEIDogVEVTVE5FVF9HRU5FU0lTX0lEO1xuICAgIGNvbnN0IGdlbmVzaXNIYXNoID0gdGhpcy5iaXRnby5nZXRFbnYoKSA9PT0gJ3Byb2QnID8gTUFJTk5FVF9HRU5FU0lTX0hBU0ggOiBURVNUTkVUX0dFTkVTSVNfSEFTSDtcblxuICAgIFV0aWxzLnZhbGlkYXRlQmFzZTY0KGdlbmVzaXNIYXNoKTtcblxuICAgIGlmICghaXNVbnNpZ25lZFN3ZWVwICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3YWxsZXRQYXNzcGhyYXNlIGlzIHJlcXVpcmVkIGZvciBub24tYml0Z28gcmVjb3ZlcnknKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEFsZ29MaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ2FsZ28nKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcblxuICAgIGxldCB1c2VyUHJ2OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJhY2t1cFBydjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICghaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICBpZiAoIXBhcmFtcy5iaXRnb0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpdGdvIHB1YmxpYyBrZXkgZnJvbSB0aGUga2V5Q2FyZCBpcyByZXF1aXJlZCBmb3Igbm9uLWJpdGdvIHJlY292ZXJ5Jyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICB1c2VyUHJ2ID0gdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHBhcmFtcy51c2VyS2V5LCBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgIGJhY2t1cFBydiA9IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBwYXJhbXMuYmFja3VwS2V5LCBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgIGNvbnN0IHVzZXJLZXlBZGRyZXNzID0gVXRpbHMucHJpdmF0ZUtleVRvQWxnb0FkZHJlc3ModXNlclBydik7XG4gICAgICAgIGNvbnN0IGJhY2t1cEtleUFkZHJlc3MgPSBVdGlscy5wcml2YXRlS2V5VG9BbGdvQWRkcmVzcyhiYWNrdXBQcnYpO1xuICAgICAgICB0eEJ1aWxkZXIubnVtYmVyT2ZSZXF1aXJlZFNpZ25lcnMoMikuc2V0U2lnbmVycyhbdXNlcktleUFkZHJlc3MsIGJhY2t1cEtleUFkZHJlc3MsIHBhcmFtcy5iaXRnb0tleV0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3VuYWJsZSB0byBkZWNyeXB0IHVzZXJLZXkgb3IgYmFja3VwS2V5IHdpdGggdGhlIHdhbGxldFBhc3NwaHJhc2UgcHJvdmlkZWQsIGdvdCBlcnJvcjogJyArIGUubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KHBhcmFtcy5ub2RlUGFyYW1zLnRva2VuLCBwYXJhbXMubm9kZVBhcmFtcy5iYXNlU2VydmVyLCBwYXJhbXMubm9kZVBhcmFtcy5wb3J0KTtcbiAgICBjb25zdCBuYXRpdmVCYWxhbmNlID0gYXdhaXQgdGhpcy5nZXRBY2NvdW50QmFsYW5jZShwYXJhbXMucm9vdEFkZHJlc3MsIGNsaWVudCk7XG5cbiAgICAvLyBBbGdvcmFuZCBhY2NvdW50cyByZXF1aXJlIGEgbWluLiBiYWxhbmNlIG9mIDEgQUxHT1xuICAgIGNvbnN0IE1JTl9NSUNST0FMR09TX0JBTEFOQ0UgPSAxMDAwMDA7XG4gICAgY29uc3Qgc3BlbmRhYmxlQW1vdW50ID0gbmV3IEJpZ051bWJlcihuYXRpdmVCYWxhbmNlKS5taW51cyhwYXJhbXMuZmVlKS5taW51cyhNSU5fTUlDUk9BTEdPU19CQUxBTkNFKS50b051bWJlcigpO1xuXG4gICAgaWYgKG5ldyBCaWdOdW1iZXIoc3BlbmRhYmxlQW1vdW50KS5pc1plcm8oKSB8fCBuZXcgQmlnTnVtYmVyKHNwZW5kYWJsZUFtb3VudCkuaXNMZXNzVGhhbk9yRXF1YWxUbyhwYXJhbXMuZmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW5zdWZmaWNpZW50IGJhbGFuY2UgdG8gcmVjb3ZlciwgZ290IGJhbGFuY2U6ICcgK1xuICAgICAgICAgIG5hdGl2ZUJhbGFuY2UgK1xuICAgICAgICAgICcgZmVlOiAnICtcbiAgICAgICAgICBwYXJhbXMuZmVlICtcbiAgICAgICAgICAnIG1pbiBhY2NvdW50IGJhbGFuY2U6ICcgK1xuICAgICAgICAgIE1JTl9NSUNST0FMR09TX0JBTEFOQ0VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxhdGVzdFJvdW5kOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFwYXJhbXMuZmlyc3RSb3VuZCkge1xuICAgICAgbGF0ZXN0Um91bmQgPSBhd2FpdCBjbGllbnRcbiAgICAgICAgLnN0YXR1cygpXG4gICAgICAgIC5kbygpXG4gICAgICAgIC50aGVuKChzdGF0dXMpID0+IHN0YXR1c1snbGFzdC1yb3VuZCddKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFJvdW5kID0gcGFyYW1zLmZpcnN0Um91bmQgPz8gbGF0ZXN0Um91bmQ7XG4gICAgaWYgKCFmaXJzdFJvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmZXRjaCB0aGUgbGF0ZXN0IHJvdW5kIGZyb20gdGhlIG5vZGUuIFBsZWFzZSBwcm92aWRlIHRoZSBmaXJzdFJvdW5kIG9yIHRyeSBhZ2Fpbi4nKTtcbiAgICB9XG4gICAgY29uc3QgTEFTVF9ST1VORF9CVUZGRVIgPSAxMDAwO1xuICAgIGNvbnN0IGxhc3RSb3VuZCA9IGZpcnN0Um91bmQgKyBMQVNUX1JPVU5EX0JVRkZFUjtcblxuICAgIHR4QnVpbGRlclxuICAgICAgLmZlZSh7IGZlZTogcGFyYW1zLmZlZS50b1N0cmluZygpIH0pXG4gICAgICAuaXNGbGF0RmVlKHRydWUpXG4gICAgICAuc2VuZGVyKHtcbiAgICAgICAgYWRkcmVzczogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgfSlcbiAgICAgIC50byh7XG4gICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSlcbiAgICAgIC5hbW91bnQoc3BlbmRhYmxlQW1vdW50KVxuICAgICAgLmdlbmVzaXNJZChnZW5lc2lzSWQpXG4gICAgICAuZ2VuZXNpc0hhc2goZ2VuZXNpc0hhc2gpXG4gICAgICAuZmlyc3RSb3VuZChmaXJzdFJvdW5kKVxuICAgICAgLmxhc3RSb3VuZChsYXN0Um91bmQpO1xuXG4gICAgaWYgKHBhcmFtcy5ub3RlKSB7XG4gICAgICBjb25zdCBub3RlID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocGFyYW1zLm5vdGUsICd1dGYtOCcpKTtcbiAgICAgIHR4QnVpbGRlci5ub3RlKG5vdGUpO1xuICAgIH1cblxuICAgIC8vIENvbGQgd2FsbGV0LCBvZmZsaW5lIHZhdWx0XG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpIGFzIFR4RGF0YTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdHlwZTogdHhKc29uLnR5cGUsXG4gICAgICAgIHVzZXJLZXk6IHBhcmFtcy51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IHBhcmFtcy5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBwYXJhbXMuYml0Z29LZXksXG4gICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yb290QWRkcmVzcyxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgICBmZWU6IHR4SnNvbi5mZWUsXG4gICAgICAgIGFtb3VudDogdHhKc29uLmFtb3VudCA/PyBuYXRpdmVCYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0Um91bmQ6IHR4SnNvbi5maXJzdFJvdW5kLFxuICAgICAgICBsYXN0Um91bmQ6IHR4SnNvbi5sYXN0Um91bmQsXG4gICAgICAgIGdlbmVzaXNJZDogZ2VuZXNpc0lkLFxuICAgICAgICBnZW5lc2lzSGFzaDogZ2VuZXNpc0hhc2gsXG4gICAgICAgIG5vdGU6IHR4SnNvbi5ub3RlID8gQnVmZmVyLmZyb20odHhKc29uLm5vdGUuYnVmZmVyKS50b1N0cmluZygndXRmLTgnKSA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTm9uLWJpdGdvIFJlY292ZXJ5IChIb3Qgd2FsbGV0cylcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdXNlclBydiB9KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYmFja3VwUHJ2IH0pO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKSBhcyBUeERhdGE7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgZmVlOiB0eEpzb24uZmVlLFxuICAgICAgZmlyc3RSb3VuZDogdHhKc29uLmZpcnN0Um91bmQsXG4gICAgICBsYXN0Um91bmQ6IHR4SnNvbi5sYXN0Um91bmQsXG4gICAgICBnZW5lc2lzSWQ6IGdlbmVzaXNJZCxcbiAgICAgIGdlbmVzaXNIYXNoOiBnZW5lc2lzSGFzaCxcbiAgICAgIG5vdGU6IHR4SnNvbi5ub3RlID8gQnVmZmVyLmZyb20odHhKc29uLm5vdGUuYnVmZmVyKS50b1N0cmluZygndXRmLTgnKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZWxsYXIgYW5kIEFsZ29yYW5kIGJvdGggdXNlIGtleXMgb24gdGhlIGVkMjU1MTkgY3VydmUsIGJ1dCB1c2UgZGlmZmVyZW50IGVuY29kaW5ncy5cbiAgICogQXMgdGhlIEhTTSBkb2Vzbid0IGhhdmUgZXhwbGljaXQgc3VwcG9ydCB0byBjcmVhdGUgQWxnb3JhbmQgYWRkcmVzc2VzLCB3ZSB1c2UgdGhlIFN0ZWxsYXJcbiAgICoga2V5cyBhbmQgcmUtZW5jb2RlIHRoZW0gdG8gdGhlIEFsZ29yYW5kIGVuY29kaW5nLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgQWxnb3JhbmQgY3VzdG9kaWFsIHdhbGxldHMgcmV1c2luZyBTdGVsbGFyIGtleXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzT3JQdWJLZXkgYSBTdGVsbGFyIHB1YmtleSBvciBBbGdvcmFuZCBhZGRyZXNzXG4gICAqIEByZXR1cm4geyp9XG4gICAqL1xuICBwcml2YXRlIHN0ZWxsYXJBZGRyZXNzVG9BbGdvQWRkcmVzcyhhZGRyZXNzT3JQdWJLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzc09yUHViS2V5KSkge1xuICAgICAgLy8gd2UgaGF2ZSBhbiBBbGdvcmFuZCBhZGRyZXNzXG4gICAgICByZXR1cm4gYWRkcmVzc09yUHViS2V5O1xuICAgIH1cblxuICAgIGlmICghc3RlbGxhci5TdHJLZXkuaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkoYWRkcmVzc09yUHViS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoJ05laXRoZXIgYW4gQWxnb3JhbmQgYWRkcmVzcyBub3IgYSBzdGVsbGFyIHB1YmtleS4nKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBoYXZlIGEgc3RlbGxhciBrZXlcbiAgICBjb25zdCBzdGVsbGFyUHViID0gc3RlbGxhci5TdHJLZXkuZGVjb2RlRWQyNTUxOVB1YmxpY0tleShhZGRyZXNzT3JQdWJLZXkpO1xuICAgIGNvbnN0IGFsZ29BZGRyZXNzID0gQWxnb0xpYi5hbGdvVXRpbHMuZW5jb2RlQWRkcmVzcyhzdGVsbGFyUHViKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhbGdvQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKCdDYW5ub3QgY29udmVydCBTdGVsbGFyIGFkZHJlc3MgdG8gYW4gQWxnb3JhbmQgYWRkcmVzcyB2aWEgcHVia2V5LicpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGdvQWRkcmVzcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlcigpOiBBbGdvTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgQWxnb0xpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cbn1cbiJdfQ==
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxnby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbGdvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILDBDQUE0QjtBQUM1QixtREFBZ0Q7QUFDaEQsaURBQXdEO0FBQ3hELCtDQUFpQztBQUNqQyxtREFzQjhCO0FBQzlCLDhEQUFrQztBQUNsQyxnRUFBcUM7QUFDckMsd0RBQWdDO0FBRWhDLGlEQUFtQztBQUNuQyxpRUFLa0M7QUFDbEMsbUNBQWdDO0FBRWhDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWM7QUFpSnhDLE1BQWEsSUFBSyxTQUFRLG1CQUFRO0lBSWhDLFlBQVksS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSk4saUJBQVksR0FBd0IsYUFBYSxDQUFDO1FBQ2xELGtCQUFhLEdBQXdCLGNBQWMsQ0FBQztJQUk3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlC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RSxDQUFDO1NBQ3JEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6RTtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSywyQkFBMkIsQ0FBQyxlQUF1QjtRQUN6RCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDeEMsOEJBQThCO1lBQzlCLE9BQU8sZUFBZSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLHFCQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzVELE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1NBQ3ZGO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLHFCQUFPLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1NBQ3ZHO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztDQUNGO0FBdG9CRCxvQkFzb0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VlZFZhbGlkYXRvciB9IGZyb20gJy4vc2VlZFZhbGlkYXRvcic7XG5pbXBvcnQgeyBjb2lucywgQ29pbkZhbWlseSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQWxnb0xpYiBmcm9tICcuL2xpYic7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQnJvYWRjYXN0VHJhbnNhY3Rpb25PcHRpb25zLFxuICBCYXNlQnJvYWRjYXN0VHJhbnNhY3Rpb25SZXN1bHQsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEludmFsaWRLZXksXG4gIEtleUluZGljZXMsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRva2VuTWFuYWdlbWVudFR5cGUsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIE5vdFN1cHBvcnRlZCxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHN0ZWxsYXIgZnJvbSAnc3RlbGxhci1zZGsnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IFR4RGF0YSB9IGZyb20gJy4vbGliL2lmYWNlcyc7XG5pbXBvcnQgKiBhcyBhbGdvc2RrIGZyb20gJ2FsZ29zZGsnO1xuaW1wb3J0IHtcbiAgTUFJTk5FVF9HRU5FU0lTX0hBU0gsXG4gIE1BSU5ORVRfR0VORVNJU19JRCxcbiAgVEVTVE5FVF9HRU5FU0lTX0hBU0gsXG4gIFRFU1RORVRfR0VORVNJU19JRCxcbn0gZnJvbSAnLi9saWIvdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5cbmNvbnN0IFNVUFBPUlRFRF9BRERSRVNTX1ZFUlNJT04gPSAxO1xuY29uc3QgTVNJR19USFJFU0hPTEQgPSAyOyAvLyBtIGluIG0tb2YtblxuXG5leHBvcnQgaW50ZXJmYWNlIEFsZ29BZGRyZXNzQ29pblNwZWNpZmljcyBleHRlbmRzIEFkZHJlc3NDb2luU3BlY2lmaWMge1xuICByb290QWRkcmVzczogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICBiaXRnb1B1YktleT86IHN0cmluZztcbiAgYWRkcmVzc1ZlcnNpb246IG51bWJlcjtcbiAgdGhyZXNob2xkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWxnb0FkZHJlc3NPcHRpb25zIGV4dGVuZHMgVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBjb2luOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICBjb2luU3BlY2lmaWM6IEFsZ29BZGRyZXNzQ29pblNwZWNpZmljcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbGdvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBtZW1vPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nIHwgbnVtYmVyO1xuICB2b3RlS2V5Pzogc3RyaW5nO1xuICBzZWxlY3Rpb25LZXk/OiBzdHJpbmc7XG4gIHZvdGVGaXJzdD86IG51bWJlcjtcbiAgdm90ZUxhc3Q/OiBudW1iZXI7XG4gIHZvdGVLZXlEaWx1dGlvbj86IG51bWJlcjtcbiAgdG9rZW5JZD86IG51bWJlcjtcbiAgb3BlcmF0aW9ucz86IFRyYW5zYWN0aW9uT3BlcmF0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25PcGVyYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgaGFsZlNpZ25lZD86IHtcbiAgICB0eEhleDogc3RyaW5nO1xuICB9O1xuICB0eEluZm86IHtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBhbW91bnQ6IHN0cmluZztcbiAgICBmZWU6IG51bWJlcjtcbiAgICBmaXJzdFJvdW5kOiBudW1iZXI7XG4gICAgbGFzdFJvdW5kOiBudW1iZXI7XG4gICAgZ2VuZXNpc0lEOiBzdHJpbmc7XG4gICAgZ2VuZXNpc0hhc2g6IHN0cmluZztcbiAgICBub3RlPzogc3RyaW5nO1xuICB9O1xuICBrZXlzOiBzdHJpbmdbXTtcbiAgYWRkcmVzc1ZlcnNpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdWxseVNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYWxmU2lnbmVkVHJhbnNhY3Rpb24ge1xuICBoYWxmU2lnbmVkOiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkZlZSB7XG4gIGZlZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbiAgcHVibGljS2V5cz86IHN0cmluZ1tdO1xuICBmZWVJbmZvOiBUcmFuc2FjdGlvbkZlZTtcbn1cblxuaW50ZXJmYWNlIE5vZGVQYXJhbXMge1xuICB0b2tlbjogc3RyaW5nO1xuICBiYXNlU2VydmVyOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZmllZFRyYW5zYWN0aW9uUGFyYW1ldGVycyB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGFkZHJlc3NWZXJzaW9uOiBudW1iZXI7XG4gIHNpZ25lcnM6IHN0cmluZ1tdO1xuICBwcnY6IHN0cmluZztcbiAgaXNIYWxmU2lnbmVkOiBib29sZWFuO1xuICBudW1iZXJTaWduZXJzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlPcHRpb25zIHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgcm9vdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBmZWU6IG51bWJlcjtcbiAgZmlyc3RSb3VuZD86IG51bWJlcjtcbiAgbm90ZT86IHN0cmluZztcbiAgbm9kZVBhcmFtczogTm9kZVBhcmFtcztcbn1cblxuaW50ZXJmYWNlIFJlY292ZXJ5SW5mbyB7XG4gIGlkOiBzdHJpbmc7XG4gIHR4OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgZmVlOiBudW1iZXI7XG4gIGZpcnN0Um91bmQ6IG51bWJlcjtcbiAgbGFzdFJvdW5kOiBudW1iZXI7XG4gIGdlbmVzaXNJZDogc3RyaW5nO1xuICBnZW5lc2lzSGFzaDogc3RyaW5nO1xuICBub3RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xuICBmZWU6IG51bWJlcjtcbiAgYW1vdW50OiBzdHJpbmc7XG4gIGZpcnN0Um91bmQ6IG51bWJlcjtcbiAgbGFzdFJvdW5kOiBudW1iZXI7XG4gIGdlbmVzaXNJZDogc3RyaW5nO1xuICBnZW5lc2lzSGFzaDogc3RyaW5nO1xuICBub3RlPzogc3RyaW5nO1xuICBhZGRyZXNzVmVyc2lvbjogbnVtYmVyO1xuICBrZXlzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBCYXNlQnJvYWRjYXN0VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgbm9kZVBhcmFtczogTm9kZVBhcmFtcztcbn1cblxuZXhwb3J0IGNsYXNzIEFsZ28gZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHJlYWRvbmx5IEVOQUJMRV9UT0tFTjogVG9rZW5NYW5hZ2VtZW50VHlwZSA9ICdlbmFibGV0b2tlbic7XG4gIHJlYWRvbmx5IERJU0FCTEVfVE9LRU46IFRva2VuTWFuYWdlbWVudFR5cGUgPSAnZGlzYWJsZXRva2VuJztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UpOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBBbGdvKGJpdGdvKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdhbGdvJztcbiAgfVxuXG4gIGdldEJhc2VDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnYWxnbyc7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2FsZ28nO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0FsZ29yYW5kJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICByZXR1cm4gMWU2O1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYWcgZm9yIHNlbmRpbmcgdmFsdWUgb2YgMFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBva2F5IHRvIHNlbmQgMCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWxnb3JhbmQgc3VwcG9ydHMgYWNjb3VudCBjb25zb2xpZGF0aW9ucy4gVGhlc2UgYXJlIHRyYW5zZmVycyBmcm9tIHRoZSByZWNlaXZlIGFkZHJlc3Nlc1xuICAgKiB0byB0aGUgbWFpbiBhZGRyZXNzLlxuICAgKi9cbiAgYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRkb2MgKi9cbiAgZGVyaXZlS2V5V2l0aFNlZWQoKTogeyBkZXJpdmF0aW9uUGF0aDogc3RyaW5nOyBrZXk6IHN0cmluZyB9IHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdtZXRob2QgZGVyaXZlS2V5V2l0aFNlZWQgbm90IHN1cHBvcnRlZCBmb3IgZWRkc2EgY3VydmUnKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZG9jICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQWxnb0xpYi5LZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBbGdvTGliLktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlQYWlyLmdldEFkZHJlc3MoKSxcbiAgICAgIHBydjogQWxnb0xpYi5hbGdvVXRpbHMuZW5jb2RlU2VlZChCdWZmZXIuZnJvbShrZXlQYWlyLmdldFNpZ25pbmdLZXkoKSkpLFxuICAgIH07XG4gIH1cblxuICAvKiogaW5oZXJpdGRvYyAqL1xuICBnZW5lcmF0ZVJvb3RLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBBbGdvTGliLktleVBhaXIoeyBzZWVkIH0pIDogbmV3IEFsZ29MaWIuS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4geyBwcnY6IGtleXMucHJ2ICsga2V5cy5wdWIsIHB1Yjoga2V5cy5wdWIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQWxnb0xpYi5hbGdvVXRpbHMuaXNWYWxpZEFkZHJlc3MocHViKSB8fCBBbGdvTGliLmFsZ29VdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHNlZWQgZm9yIHRoZSBjb2luXG4gICAqIEluIEFsZ29yYW5kLCB3aGVuIHRoZSBwcml2YXRlIGtleSBpcyBlbmNvZGVkIGFzIGJhc2UzMiBzdHJpbmcgb25seSB0aGUgZmlyc3QgMzIgYnl0ZXMgYXJlIHRha2VuLFxuICAgKiBzbyB0aGUgZW5jb2RlZCB2YWx1ZSBpcyBhY3R1YWxseSB0aGUgc2VlZFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJ2IHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFsZ29MaWIuYWxnb1V0aWxzLmlzVmFsaWRTZWVkKHBydikgfHwgQWxnb0xpYi5hbGdvVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkocHJ2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBbGdvTGliLmFsZ29VdGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG1lc3NhZ2Ugd2l0aCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IEtleVBhaXIsIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgYWxnb0tleXBhaXIgPSBuZXcgQWxnb0xpYi5LZXlQYWlyKHsgcHJ2OiBrZXkucHJ2IH0pO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIobWVzc2FnZSkpIHtcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFsZ29LZXlwYWlyLnNpZ25NZXNzYWdlKG1lc3NhZ2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hhdCBrZXkgd2Ugd2lsbCBuZWVkIGZvciBzaWduaW5nYCAtIEFsZ29yYW5kIG5lZWRzIHRoZSBiYWNrdXAsIGJpdGdvIHB1YnMuXG4gICAqL1xuICBrZXlJZHNGb3JTaWduaW5nKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dO1xuICB9XG5cbiAgZ2V0VG9rZW5OYW1lQnlJZCh0b2tlbklkOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRva2VuTmFtZXMgPSBjb2lucy5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmFtaWx5ID09PSAnYWxnbycgJiYgY29pbi5pc1Rva2VuKS5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lISk7XG4gICAgcmV0dXJuIHRva2VuTmFtZXMuZmluZCgodG9rZW5OYW1lKSA9PiB0b2tlbk5hbWUuc3BsaXQoJy0nKVsxXSA9PT0gYCR7dG9rZW5JZH1gKSB8fCAnQWxnb1Rva2VuIHVua25vd24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4vcGFyc2UgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QWxnb1RyYW5zYWN0aW9uRXhwbGFuYXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCB8fCAocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpO1xuICAgIGlmICghdHhIZXggfHwgIXBhcmFtcy5mZWVJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZXhwbGFpbiB0eCBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlcigpO1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgaWYgKHR4LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdHhKc29uLnRvLFxuICAgICAgICAgIGFtb3VudDogdHhKc29uLmFtb3VudCxcbiAgICAgICAgICBtZW1vOiB0eEpzb24ubm90ZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBvcGVyYXRpb25zOiBUcmFuc2FjdGlvbk9wZXJhdGlvbltdID0gW107XG5cbiAgICAgIGNvbnN0IGlzVG9rZW5UeCA9IHRoaXMuaXNUb2tlblR4KHR4SnNvbi50eXBlKTtcbiAgICAgIGlmIChpc1Rva2VuVHgpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IEFsZ29MaWIuYWxnb1V0aWxzLmdldFRva2VuVHhUeXBlKHR4SnNvbi5hbW91bnQsIHR4SnNvbi5mcm9tLCB0eEpzb24udG8sIHR4SnNvbi5jbG9zZVJlbWFpbmRlclRvKTtcbiAgICAgICAgb3BlcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0VG9rZW5OYW1lQnlJZCh0eEpzb24udG9rZW5JZCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbXG4gICAgICAgICdpZCcsXG4gICAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAnbWVtbycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ29wZXJhdGlvbnMnLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwbGFuYXRpb25SZXN1bHQ6IEFsZ29UcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICAgIG91dHB1dEFtb3VudDogdHhKc29uLmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgICAgbWVtbzogdHhKc29uLm5vdGUsXG4gICAgICAgIHR5cGU6IHR4LnR5cGUudG9TdHJpbmcoKSxcbiAgICAgICAgb3BlcmF0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eEpzb24udG9rZW5JZCkge1xuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50b2tlbklkID0gdHhKc29uLnRva2VuSWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleHBsYW5hdGlvblJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAodHgudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKSB7XG4gICAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbXG4gICAgICAgICdpZCcsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAnbWVtbycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3ZvdGVLZXknLFxuICAgICAgICAnc2VsZWN0aW9uS2V5JyxcbiAgICAgICAgJ3ZvdGVGaXJzdCcsXG4gICAgICAgICd2b3RlTGFzdCcsXG4gICAgICAgICd2b3RlS2V5RGlsdXRpb24nLFxuICAgICAgXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBvdXRwdXRBbW91bnQ6ICcwJyxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgZmVlOiB0eEpzb24uZmVlLFxuICAgICAgICBtZW1vOiB0eEpzb24ubm90ZSxcbiAgICAgICAgdHlwZTogdHgudHlwZSxcbiAgICAgICAgdm90ZUtleTogdHhKc29uLnZvdGVLZXksXG4gICAgICAgIHNlbGVjdGlvbktleTogdHhKc29uLnNlbGVjdGlvbktleSxcbiAgICAgICAgdm90ZUZpcnN0OiB0eEpzb24udm90ZUZpcnN0LFxuICAgICAgICB2b3RlTGFzdDogdHhKc29uLnZvdGVMYXN0LFxuICAgICAgICB2b3RlS2V5RGlsdXRpb246IHR4SnNvbi52b3RlS2V5RGlsdXRpb24sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGlmIGEgdHggaXMgYSB0b2tlbiB0eFxuICAgKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSAtIHR4IHR5cGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBpdCdzIGEgdG9rZW4gdHhcbiAgICovXG4gIGlzVG9rZW5UeCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2F4ZmVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHNlZWQgaXMgYSB2YWxpZCBzdGVsbGFyIHNlZWRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlZWQgdGhlIHNlZWQgdG8gY2hlY2tcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGlucHV0IGlzIGEgU3RlbGxhciBzZWVkXG4gICAqL1xuICBpc1N0ZWxsYXJTZWVkKHNlZWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTZWVkVmFsaWRhdG9yLmlzVmFsaWRFZDI1NTE5U2VlZEZvckNvaW4oc2VlZCwgQ29pbkZhbWlseS5YTE0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBzdGVsbGFyIHNlZWQgdG8gYW4gYWxnbyBzZWVkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZWVkIHRoZSBzZWVkIHRvIGNvbnZlcnRcbiAgICogQHJldHVybnMge0Jvb2xlYW4gfCBudWxsfSBzZWVkIGluIGFsZ28gZW5jb2RpbmdcbiAgICovXG4gIGNvbnZlcnRGcm9tU3RlbGxhclNlZWQoc2VlZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gYXNzdW1lIHRoaXMgaXMgYSB0cnVzdCBjdXN0b2RpYWwgc2VlZCBpZiBpdHMgYSB2YWxpZCBlZDI1NTE5IHBydlxuICAgIGlmICghdGhpcy5pc1N0ZWxsYXJTZWVkKHNlZWQpIHx8IFNlZWRWYWxpZGF0b3IuaGFzQ29tcGV0aW5nU2VlZEZvcm1hdHMoc2VlZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChTZWVkVmFsaWRhdG9yLmlzVmFsaWRFZDI1NTE5U2VlZEZvckNvaW4oc2VlZCwgQ29pbkZhbWlseS5YTE0pKSB7XG4gICAgICByZXR1cm4gQWxnb0xpYi5hbGdvVXRpbHMuY29udmVydEZyb21TdGVsbGFyU2VlZChzZWVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZlcmlmeVNpZ25UcmFuc2FjdGlvblBhcmFtcyhwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBWZXJpZmllZFRyYW5zYWN0aW9uUGFyYW1ldGVycyB7XG4gICAgY29uc3QgcHJ2ID0gcGFyYW1zLnBydjtcbiAgICBjb25zdCBhZGRyZXNzVmVyc2lvbiA9IHBhcmFtcy50eFByZWJ1aWxkLmFkZHJlc3NWZXJzaW9uO1xuICAgIGxldCBpc0hhbGZTaWduZWQgPSBmYWxzZTtcblxuICAgIC8vIGl0J3MgcG9zc2libGUgdGhpcyB0eCB3YXMgYWxyZWFkeSBzaWduZWQgLSB0YWtlIHRoZSBoYWxmU2lnbmVkXG4gICAgLy8gdHhIZXggaWYgaXQgaXNcbiAgICBsZXQgdHhIZXggPSBwYXJhbXMudHhQcmVidWlsZC50eEhleDtcbiAgICBpZiAocGFyYW1zLnR4UHJlYnVpbGQuaGFsZlNpZ25lZCkge1xuICAgICAgaXNIYWxmU2lnbmVkID0gdHJ1ZTtcbiAgICAgIHR4SGV4ID0gcGFyYW1zLnR4UHJlYnVpbGQuaGFsZlNpZ25lZC50eEhleDtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0eEhleCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0eFByZWJ1aWxkIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyh0eEhleCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZCBtdXN0IGJlIGFuIG9iamVjdCwgZ290IHR5cGUgJHt0eXBlb2YgdHhIZXh9YCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHBydiBwYXJhbWV0ZXIgdG8gc2lnbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHBydiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgdHlwZSAke3R5cGVvZiBwcnZ9YCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmhhcyhwYXJhbXMudHhQcmVidWlsZCwgJ2tleXMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHB1YmxpYyBrZXlzIHBhcmFtZXRlciB0byBzaWduIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzTnVtYmVyKGFkZHJlc3NWZXJzaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGFkZHJlc3NWZXJzaW9uIHBhcmFtZXRlciB0byBzaWduIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVycyA9IHBhcmFtcy50eFByZWJ1aWxkLmtleXMubWFwKChrZXkpID0+IHtcbiAgICAgIC8vIGlmIHdlIGFyZSByZWNlaXZpbmcgYWRkcmVzc2VzIGRvIG5vdCB0cnkgdG8gY29udmVydCB0aGVtXG4gICAgICBpZiAoIUFsZ29MaWIuYWxnb1V0aWxzLmlzVmFsaWRBZGRyZXNzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuIEFsZ29MaWIuYWxnb1V0aWxzLnB1YmxpY0tleVRvQWxnb0FkZHJlc3MoQWxnb0xpYi5hbGdvVXRpbHMudG9VaW50OEFycmF5KGtleSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICAvLyBUT0RPKGh0dHBzOi8vYml0Z29pbmMuYXRsYXNzaWFuLm5ldC9icm93c2UvU1RMWC02MDY3KTogZml4IHRoZSBudW1iZXIgb2Ygc2lnbmVycyB1c2luZ1xuICAgIC8vIHNob3VsZCBiZSBzaW1pbGFyIHRvIG90aGVyIGNvaW5zIGltcGxlbWVudGF0aW9uXG4gICAgLy8gSWYgd2UgaGF2ZSBhIG51bWJlciB3aXRoIGRpZ2l0cyB0byBlbGltaW5hdGUgdGhlbSB3aXRob3V0IHRha2luZyBhbnkgcm91bmRpbmcgY3JpdGVyaWEuXG4gICAgY29uc3QgbnVtYmVyU2lnbmVycyA9IE1hdGgudHJ1bmMoc2lnbmVycy5sZW5ndGggLyAyKSArIDE7XG4gICAgcmV0dXJuIHsgdHhIZXgsIGFkZHJlc3NWZXJzaW9uLCBzaWduZXJzLCBwcnYsIGlzSGFsZlNpZ25lZCwgbnVtYmVyU2lnbmVycyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGtleWNoYWluIGFuZCBoYWxmLXNpZ24gcHJlYnVpbHQgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQge1RyYW5zYWN0aW9uUHJlYnVpbGR9IHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBwbGF0Zm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLnBydiB7U3RyaW5nfSB1c2VyIHBydlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj59XG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHsgdHhIZXgsIHNpZ25lcnMsIHBydiwgaXNIYWxmU2lnbmVkLCBudW1iZXJTaWduZXJzIH0gPSB0aGlzLnZlcmlmeVNpZ25UcmFuc2FjdGlvblBhcmFtcyhwYXJhbXMpO1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXIoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHhIZXgpO1xuICAgIHR4QnVpbGRlci5udW1iZXJPZlJlcXVpcmVkU2lnbmVycyhudW1iZXJTaWduZXJzKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogcHJ2IH0pO1xuICAgIHR4QnVpbGRlci5zZXRTaWduZXJzKHNpZ25lcnMpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25lZFR4SGV4ID0gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGlmIChudW1iZXJTaWduZXJzID09PSAxKSB7XG4gICAgICByZXR1cm4geyB0eEhleDogc2lnbmVkVHhIZXggfTtcbiAgICB9IGVsc2UgaWYgKGlzSGFsZlNpZ25lZCkge1xuICAgICAgcmV0dXJuIHsgdHhIZXg6IHNpZ25lZFR4SGV4IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHNpZ25lZFR4SGV4IH0gfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gc2VuZCBmdW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgcHVibGljIGtleXMgdG8gZ2VuZXJhdGUgdGhlIHdhbGxldFxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWxnb0FkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGNvaW5TcGVjaWZpYzogeyBiaXRnb1B1YktleSB9LFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGNvbnN0IGVmZmVjdGl2ZUtleWNoYWluID0gYml0Z29QdWJLZXkgPyBrZXljaGFpbnMuc2xpY2UoMCwgLTEpLmNvbmNhdChbeyBwdWI6IGJpdGdvUHViS2V5IH1dKSA6IGtleWNoYWlucztcbiAgICBjb25zdCBwdWJLZXlzID0gZWZmZWN0aXZlS2V5Y2hhaW4ubWFwKChrZXkpID0+IHRoaXMuc3RlbGxhckFkZHJlc3NUb0FsZ29BZGRyZXNzKGtleS5wdWIpKTtcblxuICAgIGlmICghcHViS2V5cy5ldmVyeSgocHViS2V5KSA9PiB0aGlzLmlzVmFsaWRQdWIocHViS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkS2V5KCdpbnZhbGlkIHB1YmxpYyBrZXknKTtcbiAgICB9XG5cbiAgICBjb25zdCByb290QWRkcmVzcyA9IEFsZ29MaWIuYWxnb1V0aWxzLm11bHRpc2lnQWRkcmVzcyhTVVBQT1JURURfQUREUkVTU19WRVJTSU9OLCBNU0lHX1RIUkVTSE9MRCwgcHViS2V5cyk7XG5cbiAgICByZXR1cm4gcm9vdEFkZHJlc3MgPT09IGFkZHJlc3M7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGVjb2RlVHgodHhuOiBCdWZmZXIpOiB1bmtub3duIHtcbiAgICByZXR1cm4gQWxnb0xpYi5hbGdvVXRpbHMuZGVjb2RlQWxnb1R4bih0eG4pO1xuICB9XG5cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHViS2V5OiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gQWxnb0xpYi5hbGdvVXRpbHMucHVibGljS2V5VG9BbGdvQWRkcmVzcyhwdWJLZXkpO1xuICB9XG5cbiAgc3VwcG9ydHNEZXJpdmVLZXlXaXRoU2VlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb25maWcgZm9yIGhvdyB0b2tlbiBlbmFibGVtZW50cyB3b3JrIGZvciB0aGlzIGNvaW5cbiAgICogQHJldHVybnNcbiAgICogICAgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IFRydWUgaWYgdG9rZW5zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2luXG4gICAqICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBUcnVlIGlmIG11bHRpcGxlIHRva2VucyBjYW4gYmUgZW5hYmxlZCBpbiBvbmUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IHRydWUsXG4gICAgICBzdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50czogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiYWxhbmNlIG9mIHRoZSByb290IGFkZHJlc3MgaW4gYmFzZSB1bml0cyBvZiBhbGdvXG4gICAqIEVnLiBJZiBiYWxhbmNlIGlzIDEgQWxnbywgdGhpcyByZXR1cm5zIDEqMTBeNlxuICAgKiBAcGFyYW0gcm9vdEFkZHJlc3NcbiAgICogQHBhcmFtIGNsaWVudFxuICAgKi9cbiAgYXN5bmMgZ2V0QWNjb3VudEJhbGFuY2Uocm9vdEFkZHJlc3M6IHN0cmluZywgY2xpZW50OiBhbGdvc2RrLkFsZ29kdjIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGFjY291bnRJbmZvcm1hdGlvbiA9IGF3YWl0IGNsaWVudC5hY2NvdW50SW5mb3JtYXRpb24ocm9vdEFkZHJlc3MpLmRvKCk7XG4gICAgLy8gRXh0cmFjdCB0aGUgYmFsYW5jZSBmcm9tIHRoZSBhY2NvdW50IGluZm9ybWF0aW9uXG4gICAgcmV0dXJuIGFjY291bnRJbmZvcm1hdGlvbi5hbW91bnQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQWxnbyBjbGllbnQgZm9yIHRoZSBnaXZlbiB0b2tlbiwgYmFzZVNlcnZlciBhbmQgcG9ydFxuICAgKiBVc2VkIHRvIGludGVyYWN0IHdpdGggdGhlIEFsZ28gbmV0d29ya1xuICAgKi9cbiAgZ2V0Q2xpZW50KHRva2VuOiBzdHJpbmcsIGJhc2VTZXJ2ZXI6IHN0cmluZywgcG9ydDogbnVtYmVyKTogYWxnb3Nkay5BbGdvZHYyIHtcbiAgICByZXR1cm4gbmV3IGFsZ29zZGsuQWxnb2R2Mih0b2tlbiwgYmFzZVNlcnZlciwgcG9ydCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlJbmZvIHwgT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gdGhpcy5pc1ZhbGlkUHViKHBhcmFtcy51c2VyS2V5KSAmJiB0aGlzLmlzVmFsaWRQdWIocGFyYW1zLmJhY2t1cEtleSk7XG5cbiAgICBpZiAoIXBhcmFtcy5ub2RlUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIHRoZSBkZXRhaWxzIG9mIGFuIEFMR08gbm9kZSB0byB1c2UgZm9yIHJlY292ZXJ5Jyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHJvb3QgYWRkcmVzc1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucm9vdEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcm9vdEFkZHJlc3MsIGdvdDogJyArIHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZ290OiAnICsgcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZmlyc3RSb3VuZCAmJiBuZXcgQmlnTnVtYmVyKHBhcmFtcy5maXJzdFJvdW5kKS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3Qgcm91bmQgbmVlZHMgdG8gYmUgYSBwb3NpdGl2ZSB2YWx1ZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGdlbmVzaXNJZCA9IHRoaXMuYml0Z28uZ2V0RW52KCkgPT09ICdwcm9kJyA/IE1BSU5ORVRfR0VORVNJU19JRCA6IFRFU1RORVRfR0VORVNJU19JRDtcbiAgICBjb25zdCBnZW5lc2lzSGFzaCA9IHRoaXMuYml0Z28uZ2V0RW52KCkgPT09ICdwcm9kJyA/IE1BSU5ORVRfR0VORVNJU19IQVNIIDogVEVTVE5FVF9HRU5FU0lTX0hBU0g7XG5cbiAgICBVdGlscy52YWxpZGF0ZUJhc2U2NChnZW5lc2lzSGFzaCk7XG5cbiAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCAmJiAhcGFyYW1zLndhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd2FsbGV0UGFzc3BocmFzZSBpcyByZXF1aXJlZCBmb3Igbm9uLWJpdGdvIHJlY292ZXJ5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBBbGdvTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCdhbGdvJykpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG5cbiAgICBsZXQgdXNlclBydjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBiYWNrdXBQcnY6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgaWYgKCFwYXJhbXMuYml0Z29LZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiaXRnbyBwdWJsaWMga2V5IGZyb20gdGhlIGtleUNhcmQgaXMgcmVxdWlyZWQgZm9yIG5vbi1iaXRnbyByZWNvdmVyeScpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgdXNlclBydiA9IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBwYXJhbXMudXNlcktleSwgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgICAgICBiYWNrdXBQcnYgPSB0aGlzLmJpdGdvLmRlY3J5cHQoeyBpbnB1dDogcGFyYW1zLmJhY2t1cEtleSwgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgICAgICBjb25zdCB1c2VyS2V5QWRkcmVzcyA9IFV0aWxzLnByaXZhdGVLZXlUb0FsZ29BZGRyZXNzKHVzZXJQcnYpO1xuICAgICAgICBjb25zdCBiYWNrdXBLZXlBZGRyZXNzID0gVXRpbHMucHJpdmF0ZUtleVRvQWxnb0FkZHJlc3MoYmFja3VwUHJ2KTtcbiAgICAgICAgdHhCdWlsZGVyLm51bWJlck9mUmVxdWlyZWRTaWduZXJzKDIpLnNldFNpZ25lcnMoW3VzZXJLZXlBZGRyZXNzLCBiYWNrdXBLZXlBZGRyZXNzLCBwYXJhbXMuYml0Z29LZXldKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICd1bmFibGUgdG8gZGVjcnlwdCB1c2VyS2V5IG9yIGJhY2t1cEtleSB3aXRoIHRoZSB3YWxsZXRQYXNzcGhyYXNlIHByb3ZpZGVkLCBnb3QgZXJyb3I6ICcgKyBlLm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudChwYXJhbXMubm9kZVBhcmFtcy50b2tlbiwgcGFyYW1zLm5vZGVQYXJhbXMuYmFzZVNlcnZlciwgcGFyYW1zLm5vZGVQYXJhbXMucG9ydCk7XG4gICAgY29uc3QgbmF0aXZlQmFsYW5jZSA9IGF3YWl0IHRoaXMuZ2V0QWNjb3VudEJhbGFuY2UocGFyYW1zLnJvb3RBZGRyZXNzLCBjbGllbnQpO1xuXG4gICAgLy8gQWxnb3JhbmQgYWNjb3VudHMgcmVxdWlyZSBhIG1pbi4gYmFsYW5jZSBvZiAxIEFMR09cbiAgICBjb25zdCBNSU5fTUlDUk9BTEdPU19CQUxBTkNFID0gMTAwMDAwO1xuICAgIGNvbnN0IHNwZW5kYWJsZUFtb3VudCA9IG5ldyBCaWdOdW1iZXIobmF0aXZlQmFsYW5jZSkubWludXMocGFyYW1zLmZlZSkubWludXMoTUlOX01JQ1JPQUxHT1NfQkFMQU5DRSkudG9OdW1iZXIoKTtcblxuICAgIGlmIChuZXcgQmlnTnVtYmVyKHNwZW5kYWJsZUFtb3VudCkuaXNaZXJvKCkgfHwgbmV3IEJpZ051bWJlcihzcGVuZGFibGVBbW91bnQpLmlzTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1zLmZlZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0luc3VmZmljaWVudCBiYWxhbmNlIHRvIHJlY292ZXIsIGdvdCBiYWxhbmNlOiAnICtcbiAgICAgICAgICBuYXRpdmVCYWxhbmNlICtcbiAgICAgICAgICAnIGZlZTogJyArXG4gICAgICAgICAgcGFyYW1zLmZlZSArXG4gICAgICAgICAgJyBtaW4gYWNjb3VudCBiYWxhbmNlOiAnICtcbiAgICAgICAgICBNSU5fTUlDUk9BTEdPU19CQUxBTkNFXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsYXRlc3RSb3VuZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlmICghcGFyYW1zLmZpcnN0Um91bmQpIHtcbiAgICAgIGxhdGVzdFJvdW5kID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5zdGF0dXMoKVxuICAgICAgICAuZG8oKVxuICAgICAgICAudGhlbigoc3RhdHVzKSA9PiBzdGF0dXNbJ2xhc3Qtcm91bmQnXSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RSb3VuZCA9ICFwYXJhbXMuZmlyc3RSb3VuZCA/IGxhdGVzdFJvdW5kIDogcGFyYW1zLmZpcnN0Um91bmQ7XG4gICAgaWYgKCFmaXJzdFJvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmZXRjaCB0aGUgbGF0ZXN0IHJvdW5kIGZyb20gdGhlIG5vZGUuIFBsZWFzZSBwcm92aWRlIHRoZSBmaXJzdFJvdW5kIG9yIHRyeSBhZ2Fpbi4nKTtcbiAgICB9XG4gICAgY29uc3QgTEFTVF9ST1VORF9CVUZGRVIgPSAxMDAwO1xuICAgIGNvbnN0IGxhc3RSb3VuZCA9IGZpcnN0Um91bmQgKyBMQVNUX1JPVU5EX0JVRkZFUjtcblxuICAgIHR4QnVpbGRlclxuICAgICAgLmZlZSh7IGZlZTogcGFyYW1zLmZlZS50b1N0cmluZygpIH0pXG4gICAgICAuaXNGbGF0RmVlKHRydWUpXG4gICAgICAuc2VuZGVyKHtcbiAgICAgICAgYWRkcmVzczogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgfSlcbiAgICAgIC50byh7XG4gICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSlcbiAgICAgIC5hbW91bnQoc3BlbmRhYmxlQW1vdW50KVxuICAgICAgLmdlbmVzaXNJZChnZW5lc2lzSWQpXG4gICAgICAuZ2VuZXNpc0hhc2goZ2VuZXNpc0hhc2gpXG4gICAgICAuZmlyc3RSb3VuZChuZXcgQmlnTnVtYmVyKGZpcnN0Um91bmQpLnRvTnVtYmVyKCkpXG4gICAgICAubGFzdFJvdW5kKG5ldyBCaWdOdW1iZXIobGFzdFJvdW5kKS50b051bWJlcigpKTtcblxuICAgIGlmIChwYXJhbXMubm90ZSkge1xuICAgICAgY29uc3Qgbm90ZSA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHBhcmFtcy5ub3RlLCAndXRmLTgnKSk7XG4gICAgICB0eEJ1aWxkZXIubm90ZShub3RlKTtcbiAgICB9XG5cbiAgICAvLyBDb2xkIHdhbGxldCwgb2ZmbGluZSB2YXVsdFxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKSBhcyBUeERhdGE7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHR5cGU6IHR4SnNvbi50eXBlLFxuICAgICAgICB1c2VyS2V5OiBwYXJhbXMudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBwYXJhbXMuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogcGFyYW1zLmJpdGdvS2V5LFxuICAgICAgICBhZGRyZXNzOiBwYXJhbXMucm9vdEFkZHJlc3MsXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgZmVlOiB0eEpzb24uZmVlLFxuICAgICAgICBhbW91bnQ6IHR4SnNvbi5hbW91bnQgPz8gbmF0aXZlQmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICBmaXJzdFJvdW5kOiB0eEpzb24uZmlyc3RSb3VuZCxcbiAgICAgICAgbGFzdFJvdW5kOiB0eEpzb24ubGFzdFJvdW5kLFxuICAgICAgICBnZW5lc2lzSWQ6IGdlbmVzaXNJZCxcbiAgICAgICAgZ2VuZXNpc0hhc2g6IGdlbmVzaXNIYXNoLFxuICAgICAgICBub3RlOiB0eEpzb24ubm90ZSA/IEJ1ZmZlci5mcm9tKHR4SnNvbi5ub3RlLmJ1ZmZlcikudG9TdHJpbmcoJ3V0Zi04JykgOiB1bmRlZmluZWQsXG4gICAgICAgIGtleXM6IFtwYXJhbXMudXNlcktleSwgcGFyYW1zLmJhY2t1cEtleSwgcGFyYW1zLmJpdGdvS2V5XSxcbiAgICAgICAgYWRkcmVzc1ZlcnNpb246IDEsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE5vbi1iaXRnbyBSZWNvdmVyeSAoSG90IHdhbGxldHMpXG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHVzZXJQcnYgfSk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGJhY2t1cFBydiB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCkgYXMgVHhEYXRhO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgIGZpcnN0Um91bmQ6IHR4SnNvbi5maXJzdFJvdW5kLFxuICAgICAgbGFzdFJvdW5kOiB0eEpzb24ubGFzdFJvdW5kLFxuICAgICAgZ2VuZXNpc0lkOiBnZW5lc2lzSWQsXG4gICAgICBnZW5lc2lzSGFzaDogZ2VuZXNpc0hhc2gsXG4gICAgICBub3RlOiB0eEpzb24ubm90ZSA/IEJ1ZmZlci5mcm9tKHR4SnNvbi5ub3RlLmJ1ZmZlcikudG9TdHJpbmcoJ3V0Zi04JykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGEgZnVsbHkgc2lnbmVkIHNlcmlhbGl6ZWQgYmFzZTY0IHRyYW5zYWN0aW9uIGFuZCBicm9hZGNhc3RzIGl0IG9uIHRoZSBuZXR3b3JrLlxuICAgKiBVc2VzIHRoZSBleHRlcm5hbCBub2RlIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnRcbiAgICogQHBhcmFtIHNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvblxuICAgKiBAcGFyYW0gbm9kZVBhcmFtc1xuICAgKi9cbiAgYXN5bmMgYnJvYWRjYXN0VHJhbnNhY3Rpb24oe1xuICAgIHNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbixcbiAgICBub2RlUGFyYW1zLFxuICB9OiBCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICghbm9kZVBhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSB0aGUgZGV0YWlscyBvZiB0aGUgYWxnb3JhbmQgbm9kZScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhIZXggPSBCdWZmZXIuZnJvbShzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24sICdiYXNlNjQnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBhbGdvVHggPSBVdGlscy50b1VpbnQ4QXJyYXkodHhIZXgpO1xuICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQobm9kZVBhcmFtcy50b2tlbiwgbm9kZVBhcmFtcy5iYXNlU2VydmVyLCBub2RlUGFyYW1zLnBvcnQpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgY2xpZW50LnNlbmRSYXdUcmFuc2FjdGlvbihhbGdvVHgpLmRvKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYnJvYWRjYXN0IHRyYW5zYWN0aW9uLCBlcnJvcjogJyArIGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0ZWxsYXIgYW5kIEFsZ29yYW5kIGJvdGggdXNlIGtleXMgb24gdGhlIGVkMjU1MTkgY3VydmUsIGJ1dCB1c2UgZGlmZmVyZW50IGVuY29kaW5ncy5cbiAgICogQXMgdGhlIEhTTSBkb2Vzbid0IGhhdmUgZXhwbGljaXQgc3VwcG9ydCB0byBjcmVhdGUgQWxnb3JhbmQgYWRkcmVzc2VzLCB3ZSB1c2UgdGhlIFN0ZWxsYXJcbiAgICoga2V5cyBhbmQgcmUtZW5jb2RlIHRoZW0gdG8gdGhlIEFsZ29yYW5kIGVuY29kaW5nLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgQWxnb3JhbmQgY3VzdG9kaWFsIHdhbGxldHMgcmV1c2luZyBTdGVsbGFyIGtleXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzT3JQdWJLZXkgYSBTdGVsbGFyIHB1YmtleSBvciBBbGdvcmFuZCBhZGRyZXNzXG4gICAqIEByZXR1cm4geyp9XG4gICAqL1xuICBwcml2YXRlIHN0ZWxsYXJBZGRyZXNzVG9BbGdvQWRkcmVzcyhhZGRyZXNzT3JQdWJLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzc09yUHViS2V5KSkge1xuICAgICAgLy8gd2UgaGF2ZSBhbiBBbGdvcmFuZCBhZGRyZXNzXG4gICAgICByZXR1cm4gYWRkcmVzc09yUHViS2V5O1xuICAgIH1cblxuICAgIGlmICghc3RlbGxhci5TdHJLZXkuaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkoYWRkcmVzc09yUHViS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoJ05laXRoZXIgYW4gQWxnb3JhbmQgYWRkcmVzcyBub3IgYSBzdGVsbGFyIHB1YmtleS4nKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBoYXZlIGEgc3RlbGxhciBrZXlcbiAgICBjb25zdCBzdGVsbGFyUHViID0gc3RlbGxhci5TdHJLZXkuZGVjb2RlRWQyNTUxOVB1YmxpY0tleShhZGRyZXNzT3JQdWJLZXkpO1xuICAgIGNvbnN0IGFsZ29BZGRyZXNzID0gQWxnb0xpYi5hbGdvVXRpbHMuZW5jb2RlQWRkcmVzcyhzdGVsbGFyUHViKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhbGdvQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKCdDYW5ub3QgY29udmVydCBTdGVsbGFyIGFkZHJlc3MgdG8gYW4gQWxnb3JhbmQgYWRkcmVzcyB2aWEgcHVia2V5LicpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGdvQWRkcmVzcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlcigpOiBBbGdvTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgQWxnb0xpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-coin-algo",
|
|
3
|
-
"version": "1.3.3-alpha.
|
|
3
|
+
"version": "1.3.3-alpha.106",
|
|
4
4
|
"description": "BitGo SDK coin library for Algorand",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo-beta/sdk-core": "2.4.1-alpha.
|
|
44
|
-
"@bitgo-beta/statics": "10.0.1-alpha.
|
|
43
|
+
"@bitgo-beta/sdk-core": "2.4.1-alpha.106",
|
|
44
|
+
"@bitgo-beta/statics": "10.0.1-alpha.106",
|
|
45
45
|
"@hashgraph/cryptography": "1.1.2",
|
|
46
46
|
"@stablelib/hex": "^1.0.0",
|
|
47
47
|
"algosdk": "1.14.0",
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"tweetnacl": "^1.0.3"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@bitgo-beta/sdk-api": "1.6.1-alpha.
|
|
58
|
-
"@bitgo-beta/sdk-test": "^8.0.
|
|
57
|
+
"@bitgo-beta/sdk-api": "1.6.1-alpha.106",
|
|
58
|
+
"@bitgo-beta/sdk-test": "^8.0.2",
|
|
59
59
|
"should": "^13.1.3",
|
|
60
60
|
"sinon": "^7.5.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "31d7e72d752ec6c508e012cd89db512dc9d552f2"
|
|
63
63
|
}
|