@bitgo/abstract-utxo 10.24.0 → 10.25.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/cjs/src/abstractUtxoCoin.d.ts +1 -1
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +3 -3
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +5 -1
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +33 -4
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +3 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -1
- package/dist/cjs/test/unit/bip322.js +99 -28
- package/dist/cjs/test/unit/explainTransaction.js +1 -61
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +4 -4
- package/dist/cjs/test/unit/transaction/recipient.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/recipient.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/recipient.js +38 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +3 -3
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +5 -1
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +33 -4
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +3 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -1
- package/package.json +8 -8
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +0 -15
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +0 -1
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +0 -51
|
@@ -40,20 +40,22 @@ const assert_1 = __importDefault(require("assert"));
|
|
|
40
40
|
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
41
41
|
const utxo_core_1 = require("@bitgo/utxo-core");
|
|
42
42
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
43
|
+
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
44
|
+
const fixedScript_1 = require("../../src/transaction/fixedScript");
|
|
43
45
|
const bip322_1 = require("../../src/transaction/bip322");
|
|
44
46
|
function createTestWalletKeys(seed) {
|
|
45
|
-
const keys =
|
|
47
|
+
const keys = (0, testutils_1.getKeyTriple)(seed);
|
|
46
48
|
return {
|
|
47
49
|
xpubs: keys.map((k) => k.neutered().toBase58()),
|
|
48
50
|
xprivs: keys.map((k) => k.toBase58()),
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
53
|
function getDerivedPubkeys(seed, chain, index) {
|
|
52
|
-
const keys =
|
|
53
|
-
return keys.map((k) => k.derivePath(`m/0/0/${chain}/${index}`).publicKey.toString('hex'));
|
|
54
|
+
const keys = (0, testutils_1.getKeyTriple)(seed);
|
|
55
|
+
return keys.map((k) => Buffer.from(k.derivePath(`m/0/0/${chain}/${index}`).publicKey).toString('hex'));
|
|
54
56
|
}
|
|
55
57
|
function getAddress(walletKeys, chain, index) {
|
|
56
|
-
return wasm_utxo_1.fixedScriptWallet.address(walletKeys, chain, index,
|
|
58
|
+
return wasm_utxo_1.fixedScriptWallet.address(walletKeys, chain, index, 'btc');
|
|
57
59
|
}
|
|
58
60
|
describe('BIP322', function () {
|
|
59
61
|
describe('BIP322MessageBroadcastable', () => {
|
|
@@ -338,8 +340,8 @@ describe('BIP322', function () {
|
|
|
338
340
|
scriptId: { chain, index },
|
|
339
341
|
rootWalletKeys: walletKeys,
|
|
340
342
|
});
|
|
341
|
-
psbt.sign(
|
|
342
|
-
psbt.sign(
|
|
343
|
+
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
344
|
+
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
343
345
|
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
344
346
|
const address = getAddress(walletKeys, chain, index);
|
|
345
347
|
const broadcastables = [
|
|
@@ -358,44 +360,113 @@ describe('BIP322', function () {
|
|
|
358
360
|
assert_1.default.throws(() => (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc'), /did not have a successful validation/);
|
|
359
361
|
});
|
|
360
362
|
});
|
|
361
|
-
describe('
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
363
|
+
describe('BIP322 Proof', function () {
|
|
364
|
+
const message = 'I can believe it is not butter';
|
|
365
|
+
const chain = 10;
|
|
366
|
+
const index = 0;
|
|
367
|
+
const { xpubs, xprivs } = createTestWalletKeys('bip322-proof');
|
|
368
|
+
const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(xpubs);
|
|
369
|
+
function createUnsignedPsbt() {
|
|
370
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
371
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, { message, scriptId: { chain, index }, rootWalletKeys: walletKeys });
|
|
372
|
+
return psbt;
|
|
373
|
+
}
|
|
374
|
+
function assertCommon(result, expectedSignerCount) {
|
|
375
|
+
assert_1.default.strictEqual(result.outputAmount, '0');
|
|
376
|
+
assert_1.default.strictEqual(result.changeAmount, '0');
|
|
377
|
+
assert_1.default.strictEqual(result.outputs.length, 1);
|
|
378
|
+
assert_1.default.strictEqual(result.outputs[0].address, 'scriptPubKey:6a');
|
|
379
|
+
assert_1.default.strictEqual(result.fee, '0');
|
|
380
|
+
for (const input of result.inputs) {
|
|
381
|
+
const signerCount = Object.values(input.signedBy).filter(Boolean).length;
|
|
382
|
+
assert_1.default.strictEqual(signerCount, expectedSignerCount);
|
|
383
|
+
}
|
|
384
|
+
assert_1.default.ok(result.messages);
|
|
385
|
+
for (const obj of result.messages ?? []) {
|
|
386
|
+
assert_1.default.ok(obj.address);
|
|
387
|
+
assert_1.default.strictEqual(obj.message, message);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
it('should successfully run with a user nonce', function () {
|
|
391
|
+
const psbt = createUnsignedPsbt();
|
|
392
|
+
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 0);
|
|
393
|
+
});
|
|
394
|
+
it('should successfully run with a user signature', function () {
|
|
395
|
+
const psbt = createUnsignedPsbt();
|
|
396
|
+
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
397
|
+
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 1);
|
|
398
|
+
});
|
|
399
|
+
it('should successfully run with a hsm signature', function () {
|
|
400
|
+
const psbt = createUnsignedPsbt();
|
|
401
|
+
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
402
|
+
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
403
|
+
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 2);
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
describe('p2trMusig2 BIP322 signing', function () {
|
|
407
|
+
it('should produce verifiable musig2 signatures', function () {
|
|
371
408
|
const seed = 'p2trMusig2_sighash_test';
|
|
409
|
+
const { xpubs, xprivs } = createTestWalletKeys(seed);
|
|
410
|
+
const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(xpubs);
|
|
411
|
+
const chain = 40; // p2trMusig2 external
|
|
412
|
+
const index = 0;
|
|
413
|
+
const messageText = 'BIP322 sighash test';
|
|
414
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
415
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
416
|
+
message: messageText,
|
|
417
|
+
scriptId: { chain, index },
|
|
418
|
+
rootWalletKeys: walletKeys,
|
|
419
|
+
signPath: { signer: 'user', cosigner: 'bitgo' },
|
|
420
|
+
});
|
|
421
|
+
const userKey = wasm_utxo_1.BIP32.fromBase58(xprivs[0]);
|
|
422
|
+
const bitgoKey = wasm_utxo_1.BIP32.fromBase58(xprivs[2]);
|
|
423
|
+
psbt.generateMusig2Nonces(userKey);
|
|
424
|
+
psbt.generateMusig2Nonces(bitgoKey);
|
|
425
|
+
psbt.sign(userKey);
|
|
426
|
+
psbt.sign(bitgoKey);
|
|
427
|
+
const signers = wasm_utxo_1.bip322.verifyBip322PsbtInput(psbt, 0, {
|
|
428
|
+
message: messageText,
|
|
429
|
+
scriptId: { chain, index },
|
|
430
|
+
rootWalletKeys: walletKeys,
|
|
431
|
+
});
|
|
432
|
+
assert_1.default.ok(signers.includes('user'));
|
|
433
|
+
assert_1.default.ok(signers.includes('bitgo'));
|
|
434
|
+
});
|
|
435
|
+
});
|
|
436
|
+
describe('utxolib interoperability - wasm-utxo can verify utxolib-generated BIP322 proofs', function () {
|
|
437
|
+
// This test verifies cross-library compatibility:
|
|
438
|
+
// 1. utxo-core (utxolib) creates a BIP322 PSBT
|
|
439
|
+
// 2. wasm-utxo signs it with musig2
|
|
440
|
+
// 3. utxo-core validates the wasm-utxo signatures
|
|
441
|
+
//
|
|
442
|
+
// This ensures that wasm-utxo and utxolib generate compatible BIP322 proofs.
|
|
443
|
+
it('should sign utxolib-created BIP322 PSBT and validate with utxolib', function () {
|
|
444
|
+
const seed = 'p2trMusig2_utxolib_compat_test';
|
|
372
445
|
const { xprivs } = createTestWalletKeys(seed);
|
|
373
446
|
// Create utxolib RootWalletKeys for utxo-core PSBT construction
|
|
374
447
|
const utxolibRootWalletKeys = new utxolib.bitgo.RootWalletKeys(utxolib.testutil.getKeyTriple(seed));
|
|
375
448
|
// p2trMusig2 external chain code
|
|
376
449
|
const chain = utxolib.bitgo.getExternalChainCode('p2trMusig2');
|
|
377
450
|
const index = 0;
|
|
378
|
-
const messageText = 'BIP322
|
|
451
|
+
const messageText = 'BIP322 utxolib interop test';
|
|
379
452
|
// Create BIP322 PSBT using utxo-core
|
|
380
453
|
const psbt = utxo_core_1.bip322.createBaseToSignPsbt(utxolibRootWalletKeys, utxolib.networks.bitcoin);
|
|
381
|
-
utxo_core_1.bip322.addBip322InputWithChainAndIndex(psbt, messageText, utxolibRootWalletKeys, {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
// Convert to wasm-utxo PSBT for
|
|
454
|
+
utxo_core_1.bip322.addBip322InputWithChainAndIndex(psbt, messageText, utxolibRootWalletKeys, {
|
|
455
|
+
chain,
|
|
456
|
+
index,
|
|
457
|
+
});
|
|
458
|
+
// Convert to wasm-utxo PSBT for signing
|
|
386
459
|
const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), 'btc');
|
|
387
460
|
// Generate musig2 nonces and sign with wasm-utxo
|
|
388
|
-
// wasm-utxo now respects input.sighashType and creates signatures with SIGHASH_ALL
|
|
389
461
|
const userKey = wasm_utxo_1.BIP32.fromBase58(xprivs[0]);
|
|
390
462
|
const bitgoKey = wasm_utxo_1.BIP32.fromBase58(xprivs[2]);
|
|
391
463
|
wasmPsbt.generateMusig2Nonces(userKey);
|
|
392
464
|
wasmPsbt.generateMusig2Nonces(bitgoKey);
|
|
393
|
-
wasmPsbt.sign(
|
|
394
|
-
wasmPsbt.sign(
|
|
465
|
+
wasmPsbt.sign(userKey);
|
|
466
|
+
wasmPsbt.sign(bitgoKey);
|
|
395
467
|
// Convert back to utxolib PSBT for validation
|
|
396
468
|
const signedPsbt = utxolib.bitgo.createPsbtFromBuffer(Buffer.from(wasmPsbt.serialize()), utxolib.networks.bitcoin);
|
|
397
|
-
// Validation should succeed
|
|
398
|
-
// with the correct sighash type (SIGHASH_ALL) matching input.sighashType
|
|
469
|
+
// Validation should succeed - wasm-utxo signatures are compatible with utxolib
|
|
399
470
|
const validationResult = utxolib.bitgo.getSignatureValidationArrayPsbt(signedPsbt, utxolibRootWalletKeys);
|
|
400
471
|
// Verify that both user (index 0) and bitgo (index 2) signatures are valid
|
|
401
472
|
assert_1.default.strictEqual(validationResult.length, 1);
|
|
@@ -407,4 +478,4 @@ describe('BIP322', function () {
|
|
|
407
478
|
});
|
|
408
479
|
});
|
|
409
480
|
});
|
|
410
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFDM0MsZ0RBQXdEO0FBQ3hELGdEQUErRjtBQUUvRix5REFPc0M7QUFFdEMsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBSXhDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQjtRQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFtQjtLQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQW1CLENBQUM7QUFDOUcsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQTRDLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDNUYsT0FBTyw2QkFBaUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQsUUFBUSxDQUFDLFFBQVEsRUFBRTtJQUNqQixRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQzFDLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxPQUFPLEdBQStCO2dCQUMxQyxLQUFLLEVBQUUsUUFBUTtnQkFDZixXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQzt3QkFDMUMsVUFBVSxFQUFFLE1BQU07cUJBQ25CO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLElBQUEsNENBQW1DLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBQSw4Q0FBcUMsRUFBQyxVQUFVLENBQUMsQ0FBQztZQUN2RSxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsV0FBVyxFQUFFO29CQUNYO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixPQUFPLEVBQUUsYUFBYTt3QkFDdEIsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7d0JBQzFDLFVBQVUsRUFBRSxhQUFhO3FCQUMxQjtpQkFDRjthQUN1QyxDQUFDO1lBRTNDLE1BQU0sVUFBVSxHQUFHLElBQUEsNENBQW1DLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNqQixJQUFBLDhDQUFxQyxFQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQ0FBMkMsRUFBRTtRQUNwRCxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNsQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEUsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1lBQy9DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDO1lBRXBDLE1BQU0sSUFBSSxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLGtCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDOUIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLGNBQWMsRUFBRSxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUVILGdDQUFnQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFMUMsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVyRCxNQUFNLGFBQWEsR0FBK0I7Z0JBQ2hELEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BELFdBQVcsRUFBRTtvQkFDWDt3QkFDRSxPQUFPO3dCQUNQLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixPQUFPO3dCQUNQLFVBQVUsRUFBRSxXQUFXO3FCQUN4QjtpQkFDRjthQUNGLENBQUM7WUFFRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGtEQUF5QyxFQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO1lBRXZDLE1BQU0sSUFBSSxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLGtCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDOUIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLGNBQWMsRUFBRSxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELE1BQU0sYUFBYSxHQUErQjtnQkFDaEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDcEQsV0FBVyxFQUFFO29CQUNYO3dCQUNFLE9BQU87d0JBQ1AsT0FBTyxFQUFFLFdBQVc7d0JBQ3BCLE9BQU87d0JBQ1AsVUFBVSxFQUFFLE9BQU87cUJBQ3BCO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsa0RBQXlDLEVBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFO1lBQ25ELE1BQU0sUUFBUSxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sU0FBUyxHQUFHO2dCQUNoQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDdkIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDeEIsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFzQyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUU5RSxNQUFNLElBQUksR0FBRyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV4RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxrQkFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUU7b0JBQzlCLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNwQixRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsY0FBYyxFQUFFLFVBQVU7aUJBQzNCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxrQkFBa0I7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQXdCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9ELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEYsT0FBTztvQkFDTCxPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ3ZFLE9BQU8sRUFBRSxHQUFHO29CQUNaLE9BQU87b0JBQ1AsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQzNCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sYUFBYSxHQUErQjtnQkFDaEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDcEQsV0FBVzthQUNaLENBQUM7WUFFRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGtEQUF5QyxFQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO1lBRXZDLE1BQU0sSUFBSSxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLGtCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDOUIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLGNBQWMsRUFBRSxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELE1BQU0sYUFBYSxHQUErQjtnQkFDaEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDcEQsV0FBVyxFQUFFO29CQUNYO3dCQUNFLE9BQU87d0JBQ1AsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQjt3QkFDOUMsT0FBTzt3QkFDUCxVQUFVLEVBQUUsV0FBVztxQkFDeEI7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrREFBeUMsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxhQUFhLEdBQStCO2dCQUNoRCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsRUFBRTthQUNoQixDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsSUFBQSxrREFBeUMsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQ3JFLDJDQUEyQyxDQUM1QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0REFBNEQsRUFBRTtRQUNyRSxNQUFNLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNwQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEUsRUFBRSxDQUFDLGdEQUFnRCxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDO1lBRXBDLE1BQU0sSUFBSSxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLGtCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDOUIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLGNBQWMsRUFBRSxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELE1BQU0sY0FBYyxHQUFpQztnQkFDbkQ7b0JBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDcEQsV0FBVyxFQUFFO3dCQUNYOzRCQUNFLE9BQU87NEJBQ1AsT0FBTyxFQUFFLFdBQVc7NEJBQ3BCLE9BQU87NEJBQ1AsVUFBVSxFQUFFLFdBQVc7eUJBQ3hCO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLElBQUEsbUVBQTBELEVBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWpHLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1lBRW5DLHlEQUF5RDtZQUN6RCxNQUFNLEtBQUssR0FBRyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RixrQkFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7Z0JBQy9CLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUMxQixjQUFjLEVBQUUsVUFBVTthQUMzQixDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0MsTUFBTSxLQUFLLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsa0JBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO2dCQUMvQixPQUFPLEVBQUUsV0FBVztnQkFDcEIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDMUIsY0FBYyxFQUFFLFVBQVU7YUFDM0IsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTNDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFckQsTUFBTSxjQUFjLEdBQWlDO2dCQUNuRDtvQkFDRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7aUJBQ25GO2dCQUNEO29CQUNFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0JBQ3JELFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztpQkFDbkY7YUFDRixDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUcsSUFBQSxtRUFBMEQsRUFBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFakcsdUNBQXVDO1lBQ3ZDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFO1lBQzlELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFaEIsTUFBTSxLQUFLLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsa0JBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO2dCQUMvQixPQUFPLEVBQUUsV0FBVztnQkFDcEIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDMUIsY0FBYyxFQUFFLFVBQVU7YUFDM0IsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTNDLE1BQU0sS0FBSyxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLGtCQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtnQkFDL0IsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLGNBQWMsRUFBRSxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELE1BQU0sY0FBYyxHQUFpQztnQkFDbkQ7b0JBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDckQsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO2lCQUNuRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7aUJBQ25GO2FBQ0YsQ0FBQztZQUVGLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLElBQUEsbUVBQTBELEVBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUN2RiwyQ0FBMkMsQ0FDNUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDO1lBRXBDLE1BQU0sSUFBSSxHQUFHLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLGtCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDOUIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLGNBQWMsRUFBRSxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGlCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsaUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELE1BQU0sY0FBYyxHQUFpQztnQkFDbkQ7b0JBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDcEQsV0FBVyxFQUFFO3dCQUNYOzRCQUNFLE9BQU87NEJBQ1AsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQ0FBZ0M7NEJBQzFELE9BQU87NEJBQ1AsVUFBVSxFQUFFLFdBQVc7eUJBQ3hCO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLElBQUEsbUVBQTBELEVBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUN2RixzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUVBQW1FLEVBQUU7UUFDNUUsbUZBQW1GO1FBQ25GLDJDQUEyQztRQUMzQyxFQUFFO1FBQ0YsNkZBQTZGO1FBQzdGLHlFQUF5RTtRQUN6RSxFQUFFO1FBQ0YscUZBQXFGO1FBQ3JGLHdEQUF3RDtRQUV4RCxFQUFFLENBQUMsc0VBQXNFLEVBQUU7WUFDekUsTUFBTSxJQUFJLEdBQUcseUJBQXlCLENBQUM7WUFDdkMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlDLGdFQUFnRTtZQUNoRSxNQUFNLHFCQUFxQixHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVwRyxpQ0FBaUM7WUFDakMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUM7WUFFMUMscUNBQXFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLGtCQUFVLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RixrQkFBVSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUV2RyxrRkFBa0Y7WUFDbEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUVqRSwwQ0FBMEM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFL0UsaURBQWlEO1lBQ2pELG1GQUFtRjtZQUNuRixNQUFNLE9BQU8sR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRTNCLDhDQUE4QztZQUM5QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDekIsQ0FBQztZQUVGLHFFQUFxRTtZQUNyRSx5RUFBeUU7WUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRTFHLDJFQUEyRTtZQUMzRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMjIgYXMgY29yZUJpcDMyMiB9IGZyb20gJ0BiaXRnby91dHhvLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIyIGFzIHdhc21CaXAzMjIsIGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiwgdHlwZSBUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUsXG4gIEJJUDMyMk1lc3NhZ2VJbmZvLFxuICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlLFxuICBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgdmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG59IGZyb20gJy4uLy4uL3NyYy90cmFuc2FjdGlvbi9iaXAzMjInO1xuXG5mdW5jdGlvbiBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkOiBzdHJpbmcpOiB7XG4gIHhwdWJzOiBUcmlwbGU8c3RyaW5nPjtcbiAgeHByaXZzOiBUcmlwbGU8c3RyaW5nPjtcbn0ge1xuICBjb25zdCBrZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiB7XG4gICAgeHB1YnM6IGtleXMubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgeHByaXZzOiBrZXlzLm1hcCgoaykgPT4gay50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZDogc3RyaW5nLCBjaGFpbjogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogVHJpcGxlPHN0cmluZz4ge1xuICBjb25zdCBrZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT4gay5kZXJpdmVQYXRoKGBtLzAvMC8ke2NoYWlufS8ke2luZGV4fWApLnB1YmxpY0tleS50b1N0cmluZygnaGV4JykpIGFzIFRyaXBsZTxzdHJpbmc+O1xufVxuXG5mdW5jdGlvbiBnZXRBZGRyZXNzKHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLCBjaGFpbjogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LmFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xufVxuXG5kZXNjcmliZSgnQklQMzIyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2Uoc2VyaWFsaXplZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZCwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gJ2JpcDMyMl92ZXJpZnlfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHAyc2hQMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0hlbGxvLCBCaXRHbyEnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaWduIHdpdGggdXNlciBhbmQgYml0Z28ga2V5c1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAyMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gNTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1AyV1NIIHByb29mIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IG11bHRpcGxlIGlucHV0cyBpbiBhIHNpbmdsZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbJ01lc3NhZ2UgMScsICdNZXNzYWdlIDInXTtcbiAgICAgIGNvbnN0IHNjcmlwdElkcyA9IFtcbiAgICAgICAgeyBjaGFpbjogMTAsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgY2hhaW46IDIwLCBpbmRleDogMSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBCSVAzMjJNZXNzYWdlSW5mb1snc2NyaXB0VHlwZSddW10gPSBbJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZXNbaV0sXG4gICAgICAgICAgc2NyaXB0SWQ6IHNjcmlwdElkc1tpXSxcbiAgICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpZ24gYWxsIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwc2J0LnNpZ24oaSwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBCSVAzMjJNZXNzYWdlSW5mb1tdID0gbWVzc2FnZXMubWFwKChtc2csIGkpID0+IHtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBnZXRBZGRyZXNzKHdhbGxldEtleXMsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KSxcbiAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICBzY3JpcHRUeXBlOiBzY3JpcHRUeXBlc1tpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm8sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBtZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ09yaWdpbmFsIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRGlmZmVyZW50IG1lc3NhZ2UnLCAvLyBXcm9uZyBtZXNzYWdlXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdsdGMnKSxcbiAgICAgICAgL09ubHkgdGJ0YzQgb3IgYnRjIGNvaW5OYW1lcyBhcmUgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfZ2VuZXJhdGVfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG1lc3NhZ2UgbGlzdCBmcm9tIHZhbGlkIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQcm9vZiBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLmFkZHJlc3MsIGFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5tZXNzYWdlLCBtZXNzYWdlVGV4dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZHVwbGljYXRlIGFkZHJlc3NlcyB3aXRoIHNhbWUgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdTYW1lIG1lc3NhZ2UnO1xuXG4gICAgICAvLyBDcmVhdGUgdHdvIHNlcGFyYXRlIFBTQlRzIGZvciB0aGUgc2FtZSBhZGRyZXNzL21lc3NhZ2VcbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyk7XG5cbiAgICAgIC8vIFNob3VsZCBkZWR1cGxpY2F0ZSB0byBhIHNpbmdsZSBlbnRyeVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgZHVwbGljYXRlIGFkZHJlc3Mgd2l0aCBkaWZmZXJlbnQgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgMicsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAyJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9EdXBsaWNhdGUgYWRkcmVzcy4qaGFzIGRpZmZlcmVudCBtZXNzYWdlcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1ZhbGlkIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1dyb25nIG1lc3NhZ2UnLCAvLyBEb2Vzbid0IG1hdGNoIHdoYXQgd2FzIHNpZ25lZFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKSxcbiAgICAgICAgL2RpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1dHhvbGliIHZlcmlmaWNhdGlvbiBzdGFjayAtIHdhc20tdXR4byByZXNwZWN0cyBpbnB1dC5zaWdoYXNoVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB3YXNtLXV0eG8gY29ycmVjdGx5IHJlc3BlY3RzIHRoZSBpbnB1dC5zaWdoYXNoVHlwZSBmaWVsZFxuICAgIC8vIHdoZW4gY3JlYXRpbmcgbXVzaWcyIHBhcnRpYWwgc2lnbmF0dXJlcy5cbiAgICAvL1xuICAgIC8vIFByZXZpb3VzbHkgKGJlZm9yZSBmaXgpLCB3YXNtLXV0eG8gd291bGQgYWx3YXlzIGNyZWF0ZSBzaWduYXR1cmVzIHdpdGggU0lHSEFTSF9ERUZBVUxUICgwKVxuICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIGlucHV0LnNpZ2hhc2hUeXBlIGZpZWxkLCBjYXVzaW5nIHZhbGlkYXRpb24gdG8gZmFpbC5cbiAgICAvL1xuICAgIC8vIE5vdyAoYWZ0ZXIgZml4KSwgd2FzbS11dHhvIHJlYWRzIGlucHV0LnNpZ2hhc2hUeXBlIGFuZCBjcmVhdGVzIHNpZ25hdHVyZXMgd2l0aCB0aGVcbiAgICAvLyBjb3JyZWN0IHNpZ2hhc2ggdHlwZSwgYWxsb3dpbmcgdmFsaWRhdGlvbiB0byBzdWNjZWVkLlxuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzaWduYXR1cmVzIHdoZW4gd2FzbS11dHhvIHJlc3BlY3RzIGlucHV0LnNpZ2hhc2hUeXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9ICdwMnRyTXVzaWcyX3NpZ2hhc2hfdGVzdCc7XG4gICAgICBjb25zdCB7IHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG5cbiAgICAgIC8vIENyZWF0ZSB1dHhvbGliIFJvb3RXYWxsZXRLZXlzIGZvciB1dHhvLWNvcmUgUFNCVCBjb25zdHJ1Y3Rpb25cbiAgICAgIGNvbnN0IHV0eG9saWJSb290V2FsbGV0S2V5cyA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpKTtcblxuICAgICAgLy8gcDJ0ck11c2lnMiBleHRlcm5hbCBjaGFpbiBjb2RlXG4gICAgICBjb25zdCBjaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoJ3AydHJNdXNpZzInKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0JJUDMyMiBzaWdoYXNoIHRlc3QnO1xuXG4gICAgICAvLyBDcmVhdGUgQklQMzIyIFBTQlQgdXNpbmcgdXR4by1jb3JlXG4gICAgICBjb25zdCBwc2J0ID0gY29yZUJpcDMyMi5jcmVhdGVCYXNlVG9TaWduUHNidCh1dHhvbGliUm9vdFdhbGxldEtleXMsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gICAgICBjb3JlQmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZVRleHQsIHV0eG9saWJSb290V2FsbGV0S2V5cywgeyBjaGFpbiwgaW5kZXggfSk7XG5cbiAgICAgIC8vIE5vdGU6IHV0eG8tY29yZSBzZXRzIHNpZ2hhc2hUeXBlOiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTCAoMSkgZm9yIEJJUDMyMiBpbnB1dHNcbiAgICAgIGNvbnN0IFNJR0hBU0hfQUxMID0gMTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwc2J0LmRhdGEuaW5wdXRzWzBdLnNpZ2hhc2hUeXBlLCBTSUdIQVNIX0FMTCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2FzbS11dHhvIFBTQlQgZm9yIGNvc2lnbmluZ1xuICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnQudG9CdWZmZXIoKSwgJ2J0YycpO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBtdXNpZzIgbm9uY2VzIGFuZCBzaWduIHdpdGggd2FzbS11dHhvXG4gICAgICAvLyB3YXNtLXV0eG8gbm93IHJlc3BlY3RzIGlucHV0LnNpZ2hhc2hUeXBlIGFuZCBjcmVhdGVzIHNpZ25hdHVyZXMgd2l0aCBTSUdIQVNIX0FMTFxuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuXG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHdhc21Qc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIHdhc21Qc2J0LnNpZ24oMCwgdXNlcktleSk7XG4gICAgICB3YXNtUHNidC5zaWduKDAsIGJpdGdvS2V5KTtcblxuICAgICAgLy8gQ29udmVydCBiYWNrIHRvIHV0eG9saWIgUFNCVCBmb3IgdmFsaWRhdGlvblxuICAgICAgY29uc3Qgc2lnbmVkUHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHdhc21Qc2J0LnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuXG4gICAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBzdWNjZWVkIGJlY2F1c2Ugd2FzbS11dHhvIG5vdyBjcmVhdGVzIHNpZ25hdHVyZXNcbiAgICAgIC8vIHdpdGggdGhlIGNvcnJlY3Qgc2lnaGFzaCB0eXBlIChTSUdIQVNIX0FMTCkgbWF0Y2hpbmcgaW5wdXQuc2lnaGFzaFR5cGVcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB1dHhvbGliLmJpdGdvLmdldFNpZ25hdHVyZVZhbGlkYXRpb25BcnJheVBzYnQoc2lnbmVkUHNidCwgdXR4b2xpYlJvb3RXYWxsZXRLZXlzKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgYm90aCB1c2VyIChpbmRleCAwKSBhbmQgYml0Z28gKGluZGV4IDIpIHNpZ25hdHVyZXMgYXJlIHZhbGlkXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmFsaWRhdGlvblJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgY29uc3QgW2lucHV0SW5kZXgsIHNpZ1ZhbGlkYXRpb25dID0gdmFsaWRhdGlvblJlc3VsdFswXTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnB1dEluZGV4LCAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzBdLCB0cnVlLCAndXNlciBzaWduYXR1cmUgc2hvdWxkIGJlIHZhbGlkJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblsxXSwgZmFsc2UsICdiYWNrdXAgc2lnbmF0dXJlIHNob3VsZCBub3QgYmUgcHJlc2VudCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMl0sIHRydWUsICdiaXRnbyBzaWduYXR1cmUgc2hvdWxkIGJlIHZhbGlkJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFDM0MsZ0RBQXdEO0FBQ3hELGdEQUErRjtBQUMvRiwwREFBMEQ7QUFFMUQsbUVBQW9FO0FBQ3BFLHlEQU9zQztBQUV0QyxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFJeEMsTUFBTSxJQUFJLEdBQUcsSUFBQSx3QkFBWSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQjtRQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFtQjtLQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQzdELENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQTRDLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDNUYsT0FBTyw2QkFBaUIsQ0FB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LENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMjIgYXMgY29yZUJpcDMyMiB9IGZyb20gJ0BiaXRnby91dHhvLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIyIGFzIHdhc21CaXAzMjIsIGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiwgdHlwZSBUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleVRyaXBsZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHsgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IGdldEtleVRyaXBsZShzZWVkKTtcbiAgcmV0dXJuIHtcbiAgICB4cHViczoga2V5cy5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICB4cHJpdnM6IGtleXMubWFwKChrKSA9PiBrLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmVkUHVia2V5cyhzZWVkOiBzdHJpbmcsIGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBUcmlwbGU8c3RyaW5nPiB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT5cbiAgICBCdWZmZXIuZnJvbShrLmRlcml2ZVBhdGgoYG0vMC8wLyR7Y2hhaW59LyR7aW5kZXh9YCkucHVibGljS2V5KS50b1N0cmluZygnaGV4JylcbiAgKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgJ2J0YycpO1xufVxuXG5kZXNjcmliZSgnQklQMzIyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2Uoc2VyaWFsaXplZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZCwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gJ2JpcDMyMl92ZXJpZnlfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHAyc2hQMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0hlbGxvLCBCaXRHbyEnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaWduIHdpdGggdXNlciBhbmQgYml0Z28ga2V5c1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAyMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gNTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1AyV1NIIHByb29mIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IG11bHRpcGxlIGlucHV0cyBpbiBhIHNpbmdsZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbJ01lc3NhZ2UgMScsICdNZXNzYWdlIDInXTtcbiAgICAgIGNvbnN0IHNjcmlwdElkcyA9IFtcbiAgICAgICAgeyBjaGFpbjogMTAsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgY2hhaW46IDIwLCBpbmRleDogMSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBCSVAzMjJNZXNzYWdlSW5mb1snc2NyaXB0VHlwZSddW10gPSBbJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZXNbaV0sXG4gICAgICAgICAgc2NyaXB0SWQ6IHNjcmlwdElkc1tpXSxcbiAgICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpZ24gYWxsIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwc2J0LnNpZ24oaSwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBCSVAzMjJNZXNzYWdlSW5mb1tdID0gbWVzc2FnZXMubWFwKChtc2csIGkpID0+IHtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBnZXRBZGRyZXNzKHdhbGxldEtleXMsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KSxcbiAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICBzY3JpcHRUeXBlOiBzY3JpcHRUeXBlc1tpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm8sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBtZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ09yaWdpbmFsIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRGlmZmVyZW50IG1lc3NhZ2UnLCAvLyBXcm9uZyBtZXNzYWdlXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdsdGMnKSxcbiAgICAgICAgL09ubHkgdGJ0YzQgb3IgYnRjIGNvaW5OYW1lcyBhcmUgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfZ2VuZXJhdGVfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG1lc3NhZ2UgbGlzdCBmcm9tIHZhbGlkIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQcm9vZiBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLmFkZHJlc3MsIGFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5tZXNzYWdlLCBtZXNzYWdlVGV4dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZHVwbGljYXRlIGFkZHJlc3NlcyB3aXRoIHNhbWUgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdTYW1lIG1lc3NhZ2UnO1xuXG4gICAgICAvLyBDcmVhdGUgdHdvIHNlcGFyYXRlIFBTQlRzIGZvciB0aGUgc2FtZSBhZGRyZXNzL21lc3NhZ2VcbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyk7XG5cbiAgICAgIC8vIFNob3VsZCBkZWR1cGxpY2F0ZSB0byBhIHNpbmdsZSBlbnRyeVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgZHVwbGljYXRlIGFkZHJlc3Mgd2l0aCBkaWZmZXJlbnQgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgMicsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAyJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9EdXBsaWNhdGUgYWRkcmVzcy4qaGFzIGRpZmZlcmVudCBtZXNzYWdlcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1ZhbGlkIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1dyb25nIG1lc3NhZ2UnLCAvLyBEb2Vzbid0IG1hdGNoIHdoYXQgd2FzIHNpZ25lZFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKSxcbiAgICAgICAgL2RpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCSVAzMjIgUHJvb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdJIGNhbiBiZWxpZXZlIGl0IGlzIG5vdCBidXR0ZXInO1xuICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgY29uc3QgaW5kZXggPSAwO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoJ2JpcDMyMi1wcm9vZicpO1xuICAgIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuc2lnbmVkUHNidCgpOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7IG1lc3NhZ2UsIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LCByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyB9KTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydENvbW1vbihyZXN1bHQ6IFJldHVyblR5cGU8dHlwZW9mIGV4cGxhaW5Qc2J0V2FzbT4sIGV4cGVjdGVkU2lnbmVyQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRBbW91bnQsICcwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzWzBdLmFkZHJlc3MsICdzY3JpcHRQdWJLZXk6NmEnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmVlLCAnMCcpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lckNvdW50ID0gT2JqZWN0LnZhbHVlcyhpbnB1dC5zaWduZWRCeSkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25lckNvdW50LCBleHBlY3RlZFNpZ25lckNvdW50KTtcbiAgICAgIH1cbiAgICAgIGFzc2VydC5vayhyZXN1bHQubWVzc2FnZXMpO1xuICAgICAgZm9yIChjb25zdCBvYmogb2YgcmVzdWx0Lm1lc3NhZ2VzID8/IFtdKSB7XG4gICAgICAgIGFzc2VydC5vayhvYmouYWRkcmVzcyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSB1c2VyIG5vbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgYXNzZXJ0Q29tbW9uKGV4cGxhaW5Qc2J0V2FzbShwc2J0LCB3YWxsZXRLZXlzLCB7IHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSB9KSwgMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBydW4gd2l0aCBhIHVzZXIgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBhc3NlcnRDb21tb24oZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pLCAxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJ1biB3aXRoIGEgaHNtIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSBjcmVhdGVVbnNpZ25lZFBzYnQoKTtcbiAgICAgIHBzYnQuc2lnbihCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICBhc3NlcnRDb21tb24oZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pLCAyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3AydHJNdXNpZzIgQklQMzIyIHNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZlcmlmaWFibGUgbXVzaWcyIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gJ3AydHJNdXNpZzJfc2lnaGFzaF90ZXN0JztcbiAgICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICAgIGNvbnN0IGNoYWluID0gNDA7IC8vIHAydHJNdXNpZzIgZXh0ZXJuYWxcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0JJUDMyMiBzaWdoYXNoIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgc2lnblBhdGg6IHsgc2lnbmVyOiAndXNlcicsIGNvc2lnbmVyOiAnYml0Z28nIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuICAgICAgcHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoYml0Z29LZXkpO1xuICAgICAgcHNidC5zaWduKHVzZXJLZXkpO1xuICAgICAgcHNidC5zaWduKGJpdGdvS2V5KTtcblxuICAgICAgY29uc3Qgc2lnbmVycyA9IHdhc21CaXAzMjIudmVyaWZ5QmlwMzIyUHNidElucHV0KHBzYnQsIDAsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25lcnMuaW5jbHVkZXMoJ3VzZXInKSk7XG4gICAgICBhc3NlcnQub2soc2lnbmVycy5pbmNsdWRlcygnYml0Z28nKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1dHhvbGliIGludGVyb3BlcmFiaWxpdHkgLSB3YXNtLXV0eG8gY2FuIHZlcmlmeSB1dHhvbGliLWdlbmVyYXRlZCBCSVAzMjIgcHJvb2ZzJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyBjcm9zcy1saWJyYXJ5IGNvbXBhdGliaWxpdHk6XG4gICAgLy8gMS4gdXR4by1jb3JlICh1dHhvbGliKSBjcmVhdGVzIGEgQklQMzIyIFBTQlRcbiAgICAvLyAyLiB3YXNtLXV0eG8gc2lnbnMgaXQgd2l0aCBtdXNpZzJcbiAgICAvLyAzLiB1dHhvLWNvcmUgdmFsaWRhdGVzIHRoZSB3YXNtLXV0eG8gc2lnbmF0dXJlc1xuICAgIC8vXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2FzbS11dHhvIGFuZCB1dHhvbGliIGdlbmVyYXRlIGNvbXBhdGlibGUgQklQMzIyIHByb29mcy5cblxuICAgIGl0KCdzaG91bGQgc2lnbiB1dHhvbGliLWNyZWF0ZWQgQklQMzIyIFBTQlQgYW5kIHZhbGlkYXRlIHdpdGggdXR4b2xpYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSAncDJ0ck11c2lnMl91dHhvbGliX2NvbXBhdF90ZXN0JztcbiAgICAgIGNvbnN0IHsgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcblxuICAgICAgLy8gQ3JlYXRlIHV0eG9saWIgUm9vdFdhbGxldEtleXMgZm9yIHV0eG8tY29yZSBQU0JUIGNvbnN0cnVjdGlvblxuICAgICAgY29uc3QgdXR4b2xpYlJvb3RXYWxsZXRLZXlzID0gbmV3IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXModXR4b2xpYi50ZXN0dXRpbC5nZXRLZXlUcmlwbGUoc2VlZCkpO1xuXG4gICAgICAvLyBwMnRyTXVzaWcyIGV4dGVybmFsIGNoYWluIGNvZGVcbiAgICAgIGNvbnN0IGNoYWluID0gdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZSgncDJ0ck11c2lnMicpO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnQklQMzIyIHV0eG9saWIgaW50ZXJvcCB0ZXN0JztcblxuICAgICAgLy8gQ3JlYXRlIEJJUDMyMiBQU0JUIHVzaW5nIHV0eG8tY29yZVxuICAgICAgY29uc3QgcHNidCA9IGNvcmVCaXAzMjIuY3JlYXRlQmFzZVRvU2lnblBzYnQodXR4b2xpYlJvb3RXYWxsZXRLZXlzLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgY29yZUJpcDMyMi5hZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KHBzYnQsIG1lc3NhZ2VUZXh0LCB1dHhvbGliUm9vdFdhbGxldEtleXMsIHtcbiAgICAgICAgY2hhaW4sXG4gICAgICAgIGluZGV4LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2FzbS11dHhvIFBTQlQgZm9yIHNpZ25pbmdcbiAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdidGMnKTtcblxuICAgICAgLy8gR2VuZXJhdGUgbXVzaWcyIG5vbmNlcyBhbmQgc2lnbiB3aXRoIHdhc20tdXR4b1xuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuXG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHdhc21Qc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIHdhc21Qc2J0LnNpZ24odXNlcktleSk7XG4gICAgICB3YXNtUHNidC5zaWduKGJpdGdvS2V5KTtcblxuICAgICAgLy8gQ29udmVydCBiYWNrIHRvIHV0eG9saWIgUFNCVCBmb3IgdmFsaWRhdGlvblxuICAgICAgY29uc3Qgc2lnbmVkUHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHdhc21Qc2J0LnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuXG4gICAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBzdWNjZWVkIC0gd2FzbS11dHhvIHNpZ25hdHVyZXMgYXJlIGNvbXBhdGlibGUgd2l0aCB1dHhvbGliXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdXR4b2xpYi5iaXRnby5nZXRTaWduYXR1cmVWYWxpZGF0aW9uQXJyYXlQc2J0KHNpZ25lZFBzYnQsIHV0eG9saWJSb290V2FsbGV0S2V5cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGJvdGggdXNlciAoaW5kZXggMCkgYW5kIGJpdGdvIChpbmRleCAyKSBzaWduYXR1cmVzIGFyZSB2YWxpZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRpb25SZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IFtpbnB1dEluZGV4LCBzaWdWYWxpZGF0aW9uXSA9IHZhbGlkYXRpb25SZXN1bHRbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW5wdXRJbmRleCwgMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblswXSwgdHJ1ZSwgJ3VzZXIgc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMV0sIGZhbHNlLCAnYmFja3VwIHNpZ25hdHVyZSBzaG91bGQgbm90IGJlIHByZXNlbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzJdLCB0cnVlLCAnYml0Z28gc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const assert_1 = __importDefault(require("assert"));
|
|
7
3
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
4
|
const nock = require("nock");
|
|
9
|
-
const fixtures_1 = require("./fixtures/bip322/fixtures");
|
|
10
5
|
const psbtHexProof_1 = require("./fixtures/psbtHexProof");
|
|
11
6
|
const util_1 = require("./util");
|
|
12
7
|
nock.disableNetConnect();
|
|
@@ -38,60 +33,5 @@ describe('Explain Transaction', function () {
|
|
|
38
33
|
await coin.explainTransaction(psbtHexProof_1.psbtTxHex, wallet);
|
|
39
34
|
});
|
|
40
35
|
});
|
|
41
|
-
describe('BIP322 Proof', function () {
|
|
42
|
-
const coin = (0, util_1.getUtxoCoin)('btc');
|
|
43
|
-
const pubs = fixtures_1.bip322Fixtures.valid.rootWalletKeys.triple.map((b) => b.neutered().toBase58());
|
|
44
|
-
it('should successfully run with a user nonce', async function () {
|
|
45
|
-
const psbtHex = fixtures_1.bip322Fixtures.valid.userNonce;
|
|
46
|
-
const result = await coin.explainTransaction({ txHex: psbtHex, pubs });
|
|
47
|
-
assert_1.default.strictEqual(result.outputAmount, '0');
|
|
48
|
-
assert_1.default.strictEqual(result.changeAmount, '0');
|
|
49
|
-
assert_1.default.strictEqual(result.outputs.length, 1);
|
|
50
|
-
assert_1.default.strictEqual(result.outputs[0].address, 'scriptPubKey:6a');
|
|
51
|
-
assert_1.default.strictEqual(result.fee, '0');
|
|
52
|
-
assert_1.default.ok('signatures' in result);
|
|
53
|
-
assert_1.default.strictEqual(result.signatures, 0);
|
|
54
|
-
assert_1.default.ok(result.messages);
|
|
55
|
-
result.messages?.forEach((obj) => {
|
|
56
|
-
assert_1.default.ok(obj.address);
|
|
57
|
-
assert_1.default.ok(obj.message);
|
|
58
|
-
assert_1.default.strictEqual(obj.message, fixtures_1.bip322Fixtures.valid.message);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
it('should successfully run with a user signature', async function () {
|
|
62
|
-
const psbtHex = fixtures_1.bip322Fixtures.valid.userSignature;
|
|
63
|
-
const result = await coin.explainTransaction({ txHex: psbtHex, pubs });
|
|
64
|
-
assert_1.default.strictEqual(result.outputAmount, '0');
|
|
65
|
-
assert_1.default.strictEqual(result.changeAmount, '0');
|
|
66
|
-
assert_1.default.strictEqual(result.outputs.length, 1);
|
|
67
|
-
assert_1.default.strictEqual(result.outputs[0].address, 'scriptPubKey:6a');
|
|
68
|
-
assert_1.default.strictEqual(result.fee, '0');
|
|
69
|
-
assert_1.default.ok('signatures' in result);
|
|
70
|
-
assert_1.default.strictEqual(result.signatures, 1);
|
|
71
|
-
assert_1.default.ok(result.messages);
|
|
72
|
-
result.messages?.forEach((obj) => {
|
|
73
|
-
assert_1.default.ok(obj.address);
|
|
74
|
-
assert_1.default.ok(obj.message);
|
|
75
|
-
assert_1.default.strictEqual(obj.message, fixtures_1.bip322Fixtures.valid.message);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it('should successfully run with a hsm signature', async function () {
|
|
79
|
-
const psbtHex = fixtures_1.bip322Fixtures.valid.hsmSignature;
|
|
80
|
-
const result = await coin.explainTransaction({ txHex: psbtHex, pubs });
|
|
81
|
-
assert_1.default.strictEqual(result.outputAmount, '0');
|
|
82
|
-
assert_1.default.strictEqual(result.changeAmount, '0');
|
|
83
|
-
assert_1.default.strictEqual(result.outputs.length, 1);
|
|
84
|
-
assert_1.default.strictEqual(result.outputs[0].address, 'scriptPubKey:6a');
|
|
85
|
-
assert_1.default.strictEqual(result.fee, '0');
|
|
86
|
-
assert_1.default.ok('signatures' in result);
|
|
87
|
-
assert_1.default.strictEqual(result.signatures, 2);
|
|
88
|
-
assert_1.default.ok(result.messages);
|
|
89
|
-
result.messages?.forEach((obj) => {
|
|
90
|
-
assert_1.default.ok(obj.address);
|
|
91
|
-
assert_1.default.ok(obj.message);
|
|
92
|
-
assert_1.default.strictEqual(obj.message, fixtures_1.bip322Fixtures.valid.message);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
36
|
});
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4Q0FBeUQ7QUFDekQsNkJBQThCO0FBRTlCLHlEQUE0RDtBQUM1RCwwREFBb0Q7QUFDcEQsaUNBQW1EO0FBRW5ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBRXpCLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFFN0QsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFNBQVMsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzREFBc0QsRUFBRTtRQUMvRCxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEMsTUFBTSxJQUFJLEdBQW1CO1lBQzNCLGlIQUFpSDtZQUNqSCxpSEFBaUg7WUFDakgsaUhBQWlIO1NBQ2xILENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdkQsU0FBUyxZQUFZO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLENBQUM7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LENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNqRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLGdCQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQztZQUNsQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMvQixnQkFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLGdCQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSx5QkFBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgY29tbW9uLCBUcmlwbGUsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcblxuaW1wb3J0IHsgYmlwMzIyRml4dHVyZXMgfSBmcm9tICcuL2ZpeHR1cmVzL2JpcDMyMi9maXh0dXJlcyc7XG5pbXBvcnQgeyBwc2J0VHhIZXggfSBmcm9tICcuL2ZpeHR1cmVzL3BzYnRIZXhQcm9vZic7XG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxubm9jay5kaXNhYmxlTmV0Q29ubmVjdCgpO1xuXG5jb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG5cbmRlc2NyaWJlKCdFeHBsYWluIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSBwYXlnbyBvdXRwdXQgd2hlbiBleHBsYWluaW5nIHBzYnQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjNCcpO1xuXG4gICAgY29uc3QgcHViczogVHJpcGxlPHN0cmluZz4gPSBbXG4gICAgICAneHB1YjY2MU15TXdBcVJiY0ZhS3ZOQkZkVjZIWTdpYlh4RlNiTDdyRGpZMWNWTThzM3BHUFROS2ZqVHU4U21hdE5aN0FjWlFlaFNxY0VuQzd2ZXpNb3ByUXZocVFVc3pMaHVZNEc4cnV2NlBHRXI3JyxcbiAgICAgICd4cHViNjYxTXlNd0FxUmJjR2tBVlZRVkhyRVlRQTRoZmJEVzlScG4zNWI2c1hBOVRTQmQ1UXpqd3o3RjZXZWplNTdrQlZlVmZpbWZKalh1dHdVREJTTXo1eVJ3c1dpazlnTnl4cmR2U2FKYmpnaTYnLFxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHQ0NMM0dZTmJ2S3MxdDVrNXllS1pjVjVzbXRvOVQ1WjE3emtjZ1JGNFg5dXpEZlB4TUhIZWR3RjRKY0o2a3BnOE0yTldIRUZDNUxNU3YxdDNuTU1tMUdDOVBjVm1xNScsXG4gICAgXTtcblxuICAgIGNvbnN0IGtleUlkcyA9IFsna2V5LXVzZXInLCAna2V5LWJhY2t1cCcsICdrZXktYml0Z28nXTtcblxuICAgIGZ1bmN0aW9uIG5vY2tLZXlGZXRjaCgpOiB2b2lkIHtcbiAgICAgIGtleUlkcy5mb3JFYWNoKChpZCwgaSkgPT4ge1xuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L2tleS8ke2lkfWApLnJlcGx5KDIwMCwgeyBwdWI6IHB1YnNbaV0gfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBhbmQgdmVyaWZ5IHBheWdvIGFkZHJlc3MgcHJvb2YgaW4gUFNCVCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tLZXlGZXRjaCgpO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChkZWZhdWx0Qml0R28sIGNvaW4sIHtcbiAgICAgICAgaWQ6ICdtb2NrLXdhbGxldC1pZCcsXG4gICAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAga2V5czoga2V5SWRzLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihwc2J0VHhIZXgsIHdhbGxldCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCSVAzMjIgUHJvb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgICBjb25zdCBwdWJzID0gYmlwMzIyRml4dHVyZXMudmFsaWQucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoYikgPT4gYi5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSB1c2VyIG5vbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidEhleCA9IGJpcDMyMkZpeHR1cmVzLnZhbGlkLnVzZXJOb25jZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHBzYnRIZXgsIHB1YnMgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lm91dHB1dEFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuY2hhbmdlQW1vdW50LCAnMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lm91dHB1dHNbMF0uYWRkcmVzcywgJ3NjcmlwdFB1YktleTo2YScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mZWUsICcwJyk7XG4gICAgICBhc3NlcnQub2soJ3NpZ25hdHVyZXMnIGluIHJlc3VsdCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnNpZ25hdHVyZXMsIDApO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5tZXNzYWdlcyk7XG4gICAgICByZXN1bHQubWVzc2FnZXM/LmZvckVhY2goKG9iaikgPT4ge1xuICAgICAgICBhc3NlcnQub2sob2JqLmFkZHJlc3MpO1xuICAgICAgICBhc3NlcnQub2sob2JqLm1lc3NhZ2UpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLm1lc3NhZ2UsIGJpcDMyMkZpeHR1cmVzLnZhbGlkLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBydW4gd2l0aCBhIHVzZXIgc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidEhleCA9IGJpcDMyMkZpeHR1cmVzLnZhbGlkLnVzZXJTaWduYXR1cmU7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiBwc2J0SGV4LCBwdWJzIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRBbW91bnQsICcwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzWzBdLmFkZHJlc3MsICdzY3JpcHRQdWJLZXk6NmEnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmVlLCAnMCcpO1xuICAgICAgYXNzZXJ0Lm9rKCdzaWduYXR1cmVzJyBpbiByZXN1bHQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5zaWduYXR1cmVzLCAxKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQubWVzc2FnZXMpO1xuICAgICAgcmVzdWx0Lm1lc3NhZ2VzPy5mb3JFYWNoKChvYmopID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKG9iai5hZGRyZXNzKTtcbiAgICAgICAgYXNzZXJ0Lm9rKG9iai5tZXNzYWdlKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9iai5tZXNzYWdlLCBiaXAzMjJGaXh0dXJlcy52YWxpZC5tZXNzYWdlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSBoc20gc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidEhleCA9IGJpcDMyMkZpeHR1cmVzLnZhbGlkLmhzbVNpZ25hdHVyZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHBzYnRIZXgsIHB1YnMgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lm91dHB1dEFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuY2hhbmdlQW1vdW50LCAnMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lm91dHB1dHNbMF0uYWRkcmVzcywgJ3NjcmlwdFB1YktleTo2YScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mZWUsICcwJyk7XG4gICAgICBhc3NlcnQub2soJ3NpZ25hdHVyZXMnIGluIHJlc3VsdCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnNpZ25hdHVyZXMsIDIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5tZXNzYWdlcyk7XG4gICAgICByZXN1bHQubWVzc2FnZXM/LmZvckVhY2goKG9iaikgPT4ge1xuICAgICAgICBhc3NlcnQub2sob2JqLmFkZHJlc3MpO1xuICAgICAgICBhc3NlcnQub2sob2JqLm1lc3NhZ2UpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqLm1lc3NhZ2UsIGJpcDMyMkZpeHR1cmVzLnZhbGlkLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhDQUF5RDtBQUN6RCw2QkFBOEI7QUFFOUIsMERBQW9EO0FBQ3BELGlDQUFtRDtBQUVuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUV6QixNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO0FBRTdELFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixTQUFTLENBQUM7UUFDUixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0RBQXNELEVBQUU7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBQSxrQkFBVyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLE1BQU0sSUFBSSxHQUFtQjtZQUMzQixpSEFBaUg7WUFDakgsaUhBQWlIO1lBQ2pILGlIQUFpSDtTQUNsSCxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXZELFNBQVMsWUFBWTtZQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELFlBQVksRUFBRSxDQUFDO1lBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLG1CQUFZLEVBQUUsSUFBSSxFQUFFO2dCQUM1QyxFQUFFLEVBQUUsZ0JBQWdCO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbW1vbiwgVHJpcGxlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5cbmltcG9ydCB7IHBzYnRUeEhleCB9IGZyb20gJy4vZml4dHVyZXMvcHNidEhleFByb29mJztcbmltcG9ydCB7IGRlZmF1bHRCaXRHbywgZ2V0VXR4b0NvaW4gfSBmcm9tICcuL3V0aWwnO1xuXG5ub2NrLmRpc2FibGVOZXRDb25uZWN0KCk7XG5cbmNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHBheWdvIG91dHB1dCB3aGVuIGV4cGxhaW5pbmcgcHNidCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGM0Jyk7XG5cbiAgICBjb25zdCBwdWJzOiBUcmlwbGU8c3RyaW5nPiA9IFtcbiAgICAgICd4cHViNjYxTXlNd0FxUmJjRmFLdk5CRmRWNkhZN2liWHhGU2JMN3JEalkxY1ZNOHMzcEdQVE5LZmpUdThTbWF0Tlo3QWNaUWVoU3FjRW5DN3Zlek1vcHJRdmhxUVVzekxodVk0RzhydXY2UEdFcjcnLFxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHa0FWVlFWSHJFWVFBNGhmYkRXOVJwbjM1YjZzWEE5VFNCZDVRemp3ejdGNldlamU1N2tCVmVWZmltZkpqWHV0d1VEQlNNejV5UndzV2lrOWdOeXhyZHZTYUpiamdpNicsXG4gICAgICAneHB1YjY2MU15TXdBcVJiY0dDQ0wzR1lOYnZLczF0NWs1eWVLWmNWNXNtdG85VDVaMTd6a2NnUkY0WDl1ekRmUHhNSEhlZHdGNEpjSjZrcGc4TTJOV0hFRkM1TE1TdjF0M25NTW0xR0M5UGNWbXE1JyxcbiAgICBdO1xuXG4gICAgY29uc3Qga2V5SWRzID0gWydrZXktdXNlcicsICdrZXktYmFja3VwJywgJ2tleS1iaXRnbyddO1xuXG4gICAgZnVuY3Rpb24gbm9ja0tleUZldGNoKCk6IHZvaWQge1xuICAgICAga2V5SWRzLmZvckVhY2goKGlkLCBpKSA9PiB7XG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0va2V5LyR7aWR9YCkucmVwbHkoMjAwLCB7IHB1YjogcHVic1tpXSB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGFuZCB2ZXJpZnkgcGF5Z28gYWRkcmVzcyBwcm9vZiBpbiBQU0JUJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja0tleUZldGNoKCk7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGRlZmF1bHRCaXRHbywgY29pbiwge1xuICAgICAgICBpZDogJ21vY2std2FsbGV0LWlkJyxcbiAgICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgICBrZXlzOiBrZXlJZHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHBzYnRUeEhleCwgd2FsbGV0KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|