@bitgo-beta/sdk-core 8.2.1-beta.2129 → 8.2.1-beta.2130

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.
@@ -319,15 +319,18 @@ describe('deriveSafeWalletKeys', () => {
319
319
  });
320
320
  it('derives the ed25519Multisig triplet at the BIP44 path', async () => {
321
321
  const STRKEY_SEED = 'SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI';
322
- const backupSeed = (0, src_1.decodeEd25519StrKeySecretSeed)(STRKEY_SEED);
323
- const backupRootPub = Buffer.from(ed25519_1.ed25519.getPublicKey(backupSeed));
324
322
  const backupChainCode = Buffer.alloc(32, 0xab);
323
+ // Distinct BitGo root + chain code: if the BitGo composite were derived from the backup root, the
324
+ // backup child and the BitGo child would be the same key and a slot swap would pass every golden.
325
+ const bitgoSeed = Buffer.alloc(32, 0x22);
326
+ const bitgoRootPub = Buffer.from(ed25519_1.ed25519.getPublicKey(bitgoSeed));
327
+ const bitgoChainCode = Buffer.alloc(32, 0xcd);
325
328
  const ed25519Roots = {
326
329
  ...roots,
327
330
  ed25519Multisig: {
328
331
  user: STRKEY_SEED,
329
332
  backup: { prv: STRKEY_SEED, chainCode: (0, src_1.encodeEd25519ChainCode)(backupChainCode) },
330
- bitgo: (0, src_1.encodeDerivableEd25519Pub)(backupRootPub, backupChainCode),
333
+ bitgo: (0, src_1.encodeDerivableEd25519Pub)(bitgoRootPub, bitgoChainCode),
331
334
  },
332
335
  };
333
336
  const result = await (0, recovery_1.deriveSafeWalletKeys)({
@@ -354,7 +357,9 @@ describe('deriveSafeWalletKeys', () => {
354
357
  }
355
358
  result.keys.backup.kL.should.equal(algoSoft.childKLHex);
356
359
  result.keys.backup.kR.should.equal(algoSoft.childKRHex);
357
- result.keys.backup.pub.should.equal(bitgoPub);
360
+ // With distinct roots the three children are provably distinct, so a slot swap cannot sneak through.
361
+ result.keys.user.pub.should.not.equal(result.keys.backup.pub);
362
+ result.keys.backup.pub.should.not.equal(result.keys.bitgo.pub);
358
363
  result.keys.bitgo.pub.should.equal(bitgoPub);
359
364
  });
360
365
  it('rejects a non-integer account', async () => {
@@ -433,10 +438,133 @@ describe('buildSafeRecoverKeyParams', () => {
433
438
  bitgo,
434
439
  coin: 'btc',
435
440
  slot: 'eddsaMpc',
436
- keys,
441
+ keys: { commonKeychain: 'ck', user: 'u', backup: 'b' },
437
442
  mode: 'signed',
438
443
  }).should.be.rejectedWith(/not supported yet/);
439
444
  });
445
+ describe('ed25519Multisig (algo)', () => {
446
+ // Golden vectors generated with algosdk: encodeAddress(Buffer.alloc(32, n)) and
447
+ // multisigAddress({ version: 1, threshold: 2, addrs: [...] }) over the same pubs.
448
+ const edKeys = {
449
+ user: { kind: 'seed', seed: '11'.repeat(32), pub: '21'.repeat(32) },
450
+ backup: { kind: 'extended', kL: '31'.repeat(32), kR: '41'.repeat(32), pub: '51'.repeat(32) },
451
+ bitgo: { pub: '61'.repeat(32) },
452
+ };
453
+ it('unsigned mode returns ALGO addresses and the multisig rootAddress, and never encrypts', async () => {
454
+ const encrypt = sinon.stub().callsFake(async () => {
455
+ throw new Error('encrypt should not be called');
456
+ });
457
+ const bitgo = { encrypt };
458
+ const result = await (0, recovery_1.buildSafeRecoverKeyParams)({
459
+ bitgo,
460
+ coin: 'algo',
461
+ slot: 'ed25519Multisig',
462
+ keys: edKeys,
463
+ mode: 'unsigned',
464
+ });
465
+ if (result.slot !== 'ed25519Multisig' || result.mode !== 'unsigned') {
466
+ throw new Error('expected unsigned ed25519Multisig key params');
467
+ }
468
+ result.userKey.should.equal('EEQSCIJBEEQSCIJBEEQSCIJBEEQSCIJBEEQSCIJBEEQSCIJBEEQYNI53HM');
469
+ result.backupKey.should.equal('KFIVCUKRKFIVCUKRKFIVCUKRKFIVCUKRKFIVCUKRKFIVCUKRKFI33B3AOY');
470
+ result.bitgoKey.should.equal('MFQWCYLBMFQWCYLBMFQWCYLBMFQWCYLBMFQWCYLBMFQWCYLBMFQS3KHEHM');
471
+ result.rootAddress.should.equal('LHWEIOU2UIPSKCZ3XMKQUKRYY3FM6XTZKBHDMIU737OQQEXQTYSGDFOHDM');
472
+ result.userKey.should.match(/^[A-Z2-7]{58}$/);
473
+ result.should.not.have.property('walletPassphrase');
474
+ result.should.not.have.property('externalBackupSigner');
475
+ encrypt.callCount.should.equal(0);
476
+ });
477
+ it('signed mode encrypts the 58-char seed and returns a lazy external backup signer', async () => {
478
+ // Real derivation output, with a distinct BitGo root so the backup child and the BitGo child
479
+ // are different keys — a slot swap between them must change the outputs.
480
+ const STRKEY_SEED = 'SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI';
481
+ const backupChainCode = Buffer.alloc(32, 0xab);
482
+ const bitgoSeed = Buffer.alloc(32, 0x22);
483
+ const bitgoRootPub = Buffer.from(ed25519_1.ed25519.getPublicKey(bitgoSeed));
484
+ const bitgoChainCode = Buffer.alloc(32, 0xcd);
485
+ const ed25519Roots = {
486
+ ...makeRoots({ user: 'x', backup: 'y', bitgo: 'z' }),
487
+ ed25519Multisig: {
488
+ user: STRKEY_SEED,
489
+ backup: { prv: STRKEY_SEED, chainCode: (0, src_1.encodeEd25519ChainCode)(backupChainCode) },
490
+ bitgo: (0, src_1.encodeDerivableEd25519Pub)(bitgoRootPub, bitgoChainCode),
491
+ },
492
+ };
493
+ const derived = await (0, recovery_1.deriveSafeWalletKeys)({
494
+ coin: 'algo',
495
+ slot: 'ed25519Multisig',
496
+ account: 0,
497
+ roots: ed25519Roots,
498
+ });
499
+ if (derived.slot !== 'ed25519Multisig') {
500
+ throw new Error('expected ed25519Multisig slot');
501
+ }
502
+ const passphrases = [];
503
+ const encrypt = sinon.stub().callsFake(async ({ input, password, encryptionVersion }) => {
504
+ passphrases.push(password);
505
+ encryptionVersion.should.equal(1);
506
+ return `enc(${input})`;
507
+ });
508
+ const bitgo = { encrypt };
509
+ const result = await (0, recovery_1.buildSafeRecoverKeyParams)({
510
+ bitgo,
511
+ coin: 'talgo',
512
+ slot: 'ed25519Multisig',
513
+ keys: derived.keys,
514
+ mode: 'signed',
515
+ });
516
+ if (result.slot !== 'ed25519Multisig' || result.mode !== 'signed') {
517
+ throw new Error('expected signed ed25519Multisig key params');
518
+ }
519
+ derived.keys.user.pub.should.not.equal(derived.keys.backup.pub);
520
+ derived.keys.backup.pub.should.not.equal(derived.keys.bitgo.pub);
521
+ // user seed re-encoded as the 58-char ALGO seed before encryption; no backupKey — the
522
+ // seedless backup child only exists as the lazy signer.
523
+ result.userKey.should.equal(`enc(${(0, src_1.encodeAlgoKey)(Buffer.from(derived.keys.user.seed, 'hex'))})`);
524
+ result.should.not.have.property('backupKey');
525
+ result.bitgoKey.should.equal((0, src_1.encodeAlgoKey)(Buffer.from(derived.keys.bitgo.pub, 'hex')));
526
+ result.bitgoKey.should.match(/^[A-Z2-7]{58}$/);
527
+ // The wallet's on-chain address over the three distinct children, in wallet-creation order.
528
+ result.rootAddress.should.equal((0, src_1.algoMultisigAddress)(1, 2, [
529
+ Buffer.from(derived.keys.user.pub, 'hex'),
530
+ Buffer.from(derived.keys.backup.pub, 'hex'),
531
+ Buffer.from(derived.keys.bitgo.pub, 'hex'),
532
+ ]));
533
+ result.rootAddress.should.match(/^[A-Z2-7]{58}$/);
534
+ result.walletPassphrase.should.be.a.String();
535
+ passphrases.should.have.length(1);
536
+ passphrases[0].should.equal(result.walletPassphrase);
537
+ encrypt.callCount.should.equal(1);
538
+ // the lazy signer signs with the real extended key halves and its pub matches the backup child
539
+ result.externalBackupSigner.publicKey.should.equal(derived.keys.backup.pub);
540
+ const message = Buffer.from('deadbeef', 'hex');
541
+ const { signature } = await result.externalBackupSigner.sign(message);
542
+ signature.should.match(/^[0-9a-f]{128}$/);
543
+ ed25519_1.ed25519
544
+ .verify(new Uint8Array(Buffer.from(signature, 'hex')), new Uint8Array(message), new Uint8Array(Buffer.from(result.externalBackupSigner.publicKey, 'hex')))
545
+ .should.equal(true);
546
+ });
547
+ it('rejects slot-2 coins that have no registry entry yet', async () => {
548
+ const bitgo = { encrypt: sinon.stub() };
549
+ await (0, recovery_1.buildSafeRecoverKeyParams)({
550
+ bitgo,
551
+ coin: 'xlm',
552
+ slot: 'ed25519Multisig',
553
+ keys: edKeys,
554
+ mode: 'signed',
555
+ }).should.be.rejectedWith(/coin 'xlm' ed25519Multisig is not supported yet/);
556
+ });
557
+ it('rejects ed25519 children with malformed public keys', async () => {
558
+ const bitgo = { encrypt: sinon.stub() };
559
+ await (0, recovery_1.buildSafeRecoverKeyParams)({
560
+ bitgo,
561
+ coin: 'algo',
562
+ slot: 'ed25519Multisig',
563
+ keys: { ...edKeys, bitgo: { pub: '1234' } },
564
+ mode: 'unsigned',
565
+ }).should.be.rejectedWith(/ed25519 child public keys must be 32 bytes/);
566
+ });
567
+ });
440
568
  });
441
569
  describe('Safe ecdsaMpc derive → sign (gate)', function () {
442
570
  it('derives a child, rebuilds 2-of-2 shares, and signs a message verified at m/0', async function () {
@@ -475,4 +603,4 @@ describe('Safe ecdsaMpc derive → sign (gate)', function () {
475
603
  signatureString.should.match(/^\d+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+$/);
476
604
  });
477
605
  });
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLG1EQUE2QztBQUM3QyxtREFBZ0Q7QUFDaEQsdURBQXlDO0FBQ3pDLHlEQUF1SDtBQUN2SCx1RkFBNEY7QUFDNUYseURBQXNFO0FBQ3RFLGtFQUs2QztBQUM3Qyx5Q0FLeUI7QUFFekIsaUVBQWtGO0FBQ2xGLGlGQUE0RjtBQUU1RiwrRkFBK0Y7QUFDL0YsMERBQTBEO0FBQzFELCtFQUFpRTtBQUVqRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFFakMsU0FBUyxhQUFhLENBQUMsV0FBb0U7SUFDekYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUEyQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEYsQ0FBQztBQUM1QixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsY0FBYyxDQUFDLE9BQStCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxT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USxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRixNQUFNLGVBQWUsR0FBRyx1QkFBUyxDQUFDLDZCQUE2QixDQUM3RCxXQUFXLEVBQ1gsQ0FBQyxNQUFNLHVCQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBd0MsRUFDaEcsY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBQ1QsS0FBSyxDQUNOLENBQUM7UUFFRiw2RkFBNkY7UUFDN0YsMEZBQTBGO1FBQzFGLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGVkMjU1MTkgfSBmcm9tICdAbm9ibGUvY3VydmVzL2VkMjU1MTknO1xuaW1wb3J0ICogYXMgc2pjbCBmcm9tICdAYml0Z28tYmV0YS9zamNsJztcbmltcG9ydCB7IERrbHNEc2csIERrbHNUeXBlcywgRGtsc1V0aWxzLCBEa2xzVnJmVXRpbHMsIE1QU1V0aWwsIE1wc0Rlcml2ZSwgTXBzVnJmVXRpbHMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2tleVNoYXJlRW52ZWxvcGUnO1xuaW1wb3J0IHsgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgRGVjcnlwdGVkU2FmZVJvb3RzLFxuICBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zLFxuICBkZWNyeXB0U2FmZUtleWNhcmQsXG4gIGRlcml2ZVNhZmVXYWxsZXRLZXlzLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9yZWNvdmVyeSc7XG5pbXBvcnQge1xuICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvZWRkc2EvZWRkc2EnO1xuaW1wb3J0IHsgc2lnbkVkZHNhTXBjVjJSZWNvdmVyeVR4IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS9lZGRzYU1QQ3YyJztcblxuLy8gVGhlIGVkMjU1MTkgc29mdCBjby1zaWduZXIgcHJpdmF0ZSBoYWx2ZXMgYXNzZXJ0ZWQgYmVsb3cgYXJlIHBpbm5lZCBjcm9zcy1yZXBvIGluIHRoZSBzaGFyZWRcbi8vIEdWMSBmaXh0dXJlIChieXRlLWlkZW50aWNhbCB0byB3YWxsZXQtcGxhdGZvcm0ncyBjb3B5KS5cbmltcG9ydCAqIGFzIGJpcDQ0Rml4dHVyZSBmcm9tICcuL2ZpeHR1cmVzL3NhZmVCaXA0NFZlY3RvcnMuanNvbic7XG5cbmNvbnN0IFBBU1NXT1JEID0gJ3NhZmUtcGFzc3dvcmQnO1xuXG5mdW5jdGlvbiBtYWtlTW9ja0JpdEdvKGRlY3J5cHRJbXBsOiAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gc3RyaW5nKTogQml0R29CYXNlIHtcbiAgcmV0dXJuIHtcbiAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBkZWNyeXB0SW1wbChwYXJhbXMpKSxcbiAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbn1cblxuLyoqIEEgZmFrZSBkZWNyeXB0IHRoYXQgb25seSByZWNvZ25pemVzIHRoZSB1c2VyL2JhY2t1cCB0b2tlbnM7IGFueSBvdGhlciBpbnB1dCAoZS5nLiBhIEJveCBDIHB1YmxpYykgdGhyb3dzLiAqL1xuZnVuY3Rpb24gbWFrZURlY3J5cHRNYXAoZW50cmllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBzdHJpbmcge1xuICByZXR1cm4gKHsgcGFzc3dvcmQsIGlucHV0IH0pID0+IHtcbiAgICBwYXNzd29yZC5zaG91bGQuZXF1YWwoUEFTU1dPUkQpO1xuICAgIGlmICghKGlucHV0IGluIGVudHJpZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgZGVjcnlwdCBpbnB1dDogJHtpbnB1dH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXNbaW5wdXRdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBib3godmFsdWVzOiB7XG4gIHNlY3AyNTZrMU11bHRpc2lnOiBzdHJpbmc7XG4gIGVkMjU1MTlNdWx0aXNpZzogc3RyaW5nIHwgeyBwcnY6IHN0cmluZzsgY2hhaW5Db2RlOiBzdHJpbmcgfTtcbiAgZWNkc2FNcGM6IHN0cmluZztcbiAgZWRkc2FNcGM6IHN0cmluZztcbn0pOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWVzKTtcbn1cblxuZGVzY3JpYmUoJ2RlY3J5cHRTYWZlS2V5Y2FyZCcsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdkZWNyeXB0cyBvbmNoYWluIHJvb3RzIHRvIHN0cmluZ3MgYW5kIHJldHVybnMgQm94IEMgdmVyYmF0aW0nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlckJveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy11c2VyLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLXVzZXItZWQyNTUxOScsXG4gICAgICBlY2RzYU1wYzogJ2VuYy11c2VyLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLXVzZXItZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cEJveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy1iYWNrdXAtc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHsgcHJ2OiAnZW5jLWJhY2t1cC1lZDI1NTE5JywgY2hhaW5Db2RlOiAnQycucmVwZWF0KDUyKSB9LFxuICAgICAgZWNkc2FNcGM6ICdlbmMtYmFja3VwLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLWJhY2t1cC1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z29Cb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd4cHViLXNlY3AtYml0Z28nLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAncHViLWVkMjU1MTktYml0Z28nLFxuICAgICAgZWNkc2FNcGM6ICdjb21tb24tZWNkc2EtYml0Z28nLFxuICAgICAgZWRkc2FNcGM6ICdjb21tb24tZWRkc2EtYml0Z28nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbXBjVXNlciA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpXG4gICAgKTtcbiAgICBjb25zdCBtcGNCYWNrdXAgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC12cmYnKVxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oXG4gICAgICBtYWtlRGVjcnlwdE1hcCh7XG4gICAgICAgICdlbmMtdXNlci1zZWNwJzogJ3hwcnYtdXNlcicsXG4gICAgICAgICdlbmMtYmFja3VwLXNlY3AnOiAneHBydi1iYWNrdXAnLFxuICAgICAgICAnZW5jLXVzZXItZWQyNTUxOSc6ICdTLXVzZXItc2VlZCcsXG4gICAgICAgICdlbmMtYmFja3VwLWVkMjU1MTknOiAnUy1iYWNrdXAtc2VlZCcsXG4gICAgICAgICdlbmMtdXNlci1lY2RzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWNkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy11c2VyLWVkZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZGRzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogYmFja3VwQm94LFxuICAgICAgYml0Z29LZXlCb3g6IGJpdGdvQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLnVzZXIuc2hvdWxkLmVxdWFsKCd4cHJ2LXVzZXInKTtcbiAgICByZXN1bHQuc2VjcDI1NmsxTXVsdGlzaWcuYmFja3VwLnNob3VsZC5lcXVhbCgneHBydi1iYWNrdXAnKTtcbiAgICByZXN1bHQuc2VjcDI1NmsxTXVsdGlzaWcuYml0Z28uc2hvdWxkLmVxdWFsKCd4cHViLXNlY3AtYml0Z28nKTtcblxuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcudXNlci5zaG91bGQuZXF1YWwoJ1MtdXNlci1zZWVkJyk7XG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAucHJ2LnNob3VsZC5lcXVhbCgnUy1iYWNrdXAtc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLmNoYWluQ29kZS5zaG91bGQuZXF1YWwoJ0MnLnJlcGVhdCg1MikpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYml0Z28uc2hvdWxkLmVxdWFsKCdwdWItZWQyNTUxOS1iaXRnbycpO1xuXG4gICAgcmVzdWx0LmVjZHNhTXBjLnVzZXIuc2lnbmluZy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKS50b1N0cmluZygnaGV4JykpO1xuICAgIHJlc3VsdC5lY2RzYU1wYy51c2VyLnZyZi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJhY2t1cC5zaWduaW5nLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoQnVmZmVyLmZyb20oJ2JhY2t1cC1yZWR1Y2VkJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMuYmFja3VwLnZyZi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMuYml0Z28uc2hvdWxkLmVxdWFsKCdjb21tb24tZWNkc2EtYml0Z28nKTtcblxuICAgIHJlc3VsdC5lZGRzYU1wYy5iaXRnby5zaG91bGQuZXF1YWwoJ2NvbW1vbi1lZGRzYS1iaXRnbycpO1xuXG4gICAgLy8gNCBzbG90cyDDlyAodXNlciArIGJhY2t1cCkgPSA4IGRlY3J5cHRzOyBCaXRHbyAoQm94IEMpIGlzIG5ldmVyIGRlY3J5cHRlZC5cbiAgICAoYml0Z28uZGVjcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoOCk7XG4gIH0pO1xuXG4gIGl0KCdkZWNyeXB0cyB0aGUgc2VlZCBmcm9tIGFuIG9iamVjdC1mb3JtIGVkMjU1MTlNdWx0aXNpZyBiYWNrdXAgZW50cnknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlckJveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy11c2VyLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLXVzZXItZWQyNTUxOScsXG4gICAgICBlY2RzYU1wYzogJ2VuYy11c2VyLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLXVzZXItZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cEJveCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnZW5jLWJhY2t1cC1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogeyBwcnY6ICdlbmMtYmFja3VwLWVkMjU1MTknLCBjaGFpbkNvZGU6ICdBJy5yZXBlYXQoNTIpIH0sXG4gICAgICBlY2RzYU1wYzogJ2VuYy1iYWNrdXAtZWNkc2EnLFxuICAgICAgZWRkc2FNcGM6ICdlbmMtYmFja3VwLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnb0JveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ3hwdWItc2VjcC1iaXRnbycsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICdwdWItZWQyNTUxOS1iaXRnbycsXG4gICAgICBlY2RzYU1wYzogJ2NvbW1vbi1lY2RzYS1iaXRnbycsXG4gICAgICBlZGRzYU1wYzogJ2NvbW1vbi1lZGRzYS1iaXRnbycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtcGNVc2VyID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgQnVmZmVyLmZyb20oJ3VzZXItc2lnbmluZycpLFxuICAgICAgQnVmZmVyLmZyb20oJ3VzZXItcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ3VzZXItdnJmJylcbiAgICApO1xuICAgIGNvbnN0IG1wY0JhY2t1cCA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtc2lnbmluZycpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC1yZWR1Y2VkJyksXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXZyZicpXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbyhcbiAgICAgIG1ha2VEZWNyeXB0TWFwKHtcbiAgICAgICAgJ2VuYy11c2VyLXNlY3AnOiAneHBydi11c2VyJyxcbiAgICAgICAgJ2VuYy1iYWNrdXAtc2VjcCc6ICd4cHJ2LWJhY2t1cCcsXG4gICAgICAgICdlbmMtdXNlci1lZDI1NTE5JzogJ1MtdXNlci1zZWVkJyxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWQyNTUxOSc6ICdTLWJhY2t1cC1zZWVkJyxcbiAgICAgICAgJ2VuYy11c2VyLWVjZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lY2RzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLXVzZXItZWRkc2EnOiBtcGNVc2VyLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtYmFja3VwLWVkZHNhJzogbXBjQmFja3VwLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWNyeXB0U2FmZUtleWNhcmQoe1xuICAgICAgYml0Z28sXG4gICAgICB1c2VyS2V5Qm94OiB1c2VyQm94LFxuICAgICAgYmFja3VwS2V5Qm94OiBiYWNrdXBCb3gsXG4gICAgICBiaXRnb0tleUJveDogYml0Z29Cb3gsXG4gICAgICBwYXNzd29yZDogUEFTU1dPUkQsXG4gICAgfSk7XG5cbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJhY2t1cC5wcnYuc2hvdWxkLmVxdWFsKCdTLWJhY2t1cC1zZWVkJyk7XG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAuY2hhaW5Db2RlLnNob3VsZC5lcXVhbCgnQScucmVwZWF0KDUyKSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGVkMjU1MTkgY2hhaW4tY29kZSBlbnRyeSBpbiBhIG5vbi1iYWNrdXAgc2xvdCAoZmFpbCBjbG9zZWQpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogeyBwcnY6ICdlbmMtdXNlci1zZWNwJywgY2hhaW5Db2RlOiAnQScucmVwZWF0KDUyKSB9LFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLXVzZXItZWQyNTUxOScsXG4gICAgICBlY2RzYU1wYzogJ2VuYy11c2VyLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLXVzZXItZWRkc2EnLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvOiBtYWtlTW9ja0JpdEdvKG1ha2VEZWNyeXB0TWFwKHt9KSksXG4gICAgICB1c2VyS2V5Qm94OiB1c2VyQm94LFxuICAgICAgYmFja3VwS2V5Qm94OiB1c2VyQm94LFxuICAgICAgYml0Z29LZXlCb3g6IHVzZXJCb3gsXG4gICAgICBwYXNzd29yZDogUEFTU1dPUkQsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvdW5leHBlY3RlZCBlZDI1NTE5IGNoYWluLWNvZGUgZW50cnkvKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIHdoZW4gZGVjcnlwdGlvbiBmYWlscyAod3JvbmcgcGFzc3dvcmQpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcmdvbjI6IHRhZyBkb2VzIG5vdCBtYXRjaCcpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogdXNlckJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiB1c2VyQm94LFxuICAgICAgcGFzc3dvcmQ6ICd3cm9uZy1wYXNzd29yZCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbmNvcnJlY3RQYXNzd29yZEVycm9yKTtcbiAgfSk7XG59KTtcblxuY29uc3QgTVBDX1JPT1QgPSB7IHNpZ25pbmc6IEJ1ZmZlci5hbGxvYygwKSwgdnJmOiBCdWZmZXIuYWxsb2MoMCkgfTtcblxuZnVuY3Rpb24gbWFrZVJvb3RzKHNlY3A6IHsgdXNlcjogc3RyaW5nOyBiYWNrdXA6IHN0cmluZzsgYml0Z286IHN0cmluZyB9KTogRGVjcnlwdGVkU2FmZVJvb3RzIHtcbiAgcmV0dXJuIHtcbiAgICBzZWNwMjU2azFNdWx0aXNpZzogc2VjcCxcbiAgICBlZDI1NTE5TXVsdGlzaWc6IHsgdXNlcjogJ3UnLCBiYWNrdXA6IHsgcHJ2OiAnYicsIGNoYWluQ29kZTogJ2MnIH0sIGJpdGdvOiAnZycgfSxcbiAgICBlY2RzYU1wYzogeyB1c2VyOiBNUENfUk9PVCwgYmFja3VwOiBNUENfUk9PVCwgYml0Z286ICdnJyB9LFxuICAgIGVkZHNhTXBjOiB7IHVzZXI6IE1QQ19ST09ULCBiYWNrdXA6IE1QQ19ST09ULCBiaXRnbzogJ2cnIH0sXG4gIH07XG59XG5cbmRlc2NyaWJlKCdkZXJpdmVTYWZlV2FsbGV0S2V5cycsICgpID0+IHtcbiAgY29uc3QgdXNlclJvb3QgPSBiaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnLCAnaGV4JykpO1xuICBjb25zdCBiYWNrdXBSb290ID0gYmlwMzIuZnJvbVNlZWQoXG4gICAgQnVmZmVyLmZyb20oJzFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwMGYwZTBkMGMwYjBhMDkwODA3MDYwNTA0MDMwMjAxMDAnLCAnaGV4JylcbiAgKTtcbiAgY29uc3QgYml0Z29Sb290ID0gYmlwMzJcbiAgICAuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzJmMmUyZDJjMmIyYTI5MjgyNzI2MjUyNDIzMjIyMTIwMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAnLCAnaGV4JykpXG4gICAgLm5ldXRlcmVkKCk7XG5cbiAgY29uc3Qgcm9vdHMgPSBtYWtlUm9vdHMoe1xuICAgIHVzZXI6IHVzZXJSb290LnRvQmFzZTU4KCksXG4gICAgYmFja3VwOiBiYWNrdXBSb290LnRvQmFzZTU4KCksXG4gICAgYml0Z286IGJpdGdvUm9vdC50b0Jhc2U1OCgpLFxuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgQklQNDQgY2hpbGQgdHJpcGxldCBmb3Igc2xvdCAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDAsIHJvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ3NlY3AyNTZrMU11bHRpc2lnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBzZWNwMjU2azFNdWx0aXNpZyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMCdcIik7XG4gICAgcmVzdWx0LmtleXMudXNlci5wcnYuc2hvdWxkLmVxdWFsKHVzZXJSb290LmRlcml2ZVBhdGgoXCJtLzQ0Jy8wJy8xJy8wJ1wiKS50b0Jhc2U1OCgpKTtcbiAgICByZXN1bHQua2V5cy51c2VyLnB1Yi5zaG91bGQuZXF1YWwodXNlclJvb3QuZGVyaXZlUGF0aChcIm0vNDQnLzAnLzEnLzAnXCIpLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnBydi5zaG91bGQuZXF1YWwoYmFja3VwUm9vdC5kZXJpdmVQYXRoKCdtLzQ0LzAvMS8wJykudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMuYml0Z28ucHViLnNob3VsZC5lcXVhbChiaXRnb1Jvb3QuZGVyaXZlUGF0aCgnbS80NC8wLzEvMCcpLnRvQmFzZTU4KCkpO1xuICB9KTtcblxuICBpdCgndmFyaWVzIHRoZSBwYXRoIHdpdGggdGhlIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnYnRjJywgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgYWNjb3VudDogMiwgcm9vdHMgfSk7XG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMidcIik7XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIHRoZSBlY2RzYU1wYyBjaGlsZCB2aWEgdGhlIERLTHMgY2VyZW1vbnknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwXSA9IGF3YWl0IERrbHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuXG4gICAgY29uc3QgbXBjUm9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgIC4uLnJvb3RzLFxuICAgICAgZWNkc2FNcGM6IHtcbiAgICAgICAgdXNlcjogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiYWNrdXA6IHsgc2lnbmluZzogYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICAgIGJpdGdvOiAnZycsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdldGgnLCBzbG90OiAnZWNkc2FNcGMnLCBhY2NvdW50OiAwLCByb290czogbXBjUm9vdHMgfSk7XG4gICAgaWYgKHJlc3VsdC5zbG90ICE9PSAnZWNkc2FNcGMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGVjZHNhTXBjIHNsb3QnKTtcbiAgICB9XG5cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy82MCcvMycvMCdcIik7XG4gICAgcmVzdWx0LmtleXMuY29tbW9uS2V5Y2hhaW4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcmVzdWx0LmtleXMudXNlci5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIGFuZCBzaWducyB0aGUgZWRkc2FNcGMgc2xvdC00IEJJUDQ0IGNoaWxkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2csIGJpdGdvRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IFt2cmZVc2VyLCB2cmZCYWNrdXAsIHZyZkJpdGdvXSA9IGF3YWl0IE1wc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgbXBjUm9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgIC4uLnJvb3RzLFxuICAgICAgZWRkc2FNcGM6IHtcbiAgICAgICAgdXNlcjogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiYWNrdXA6IHsgc2lnbmluZzogYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICAgIGJpdGdvOiBiaXRnb0RrZy5nZXRDb21tb25LZXljaGFpbigpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnc29sJywgc2xvdDogJ2VkZHNhTXBjJywgYWNjb3VudDogMCwgcm9vdHM6IG1wY1Jvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ2VkZHNhTXBjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZGRzYU1wYyBzbG90Jyk7XG4gICAgfVxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzUwMScvNCcvMCdcIik7XG5cbiAgICAvLyBQbGF5IG1pbnQncyB1c2Vy4oaUQml0R28gcm9sZSBsb2NhbGx5IGF0IHRoZSBzYW1lIEJJUDQ0IHBhdGg7IG5vIGRldi1taW50ZWQgd2FsbGV0IGlzIG5lZWRlZC5cbiAgICBjb25zdCB1c2VyTWludCA9IG5ldyBNcHNEZXJpdmUuRGVyaXZlKDMsIDIsIDAsIHVzZXJEa2cuZ2V0S2V5U2hhcmUoKSwgdnJmVXNlci5nZXRLZXlTaGFyZSgpLCByZXN1bHQucGF0aCk7XG4gICAgY29uc3QgYml0Z29NaW50ID0gbmV3IE1wc0Rlcml2ZS5EZXJpdmUoMywgMiwgMiwgYml0Z29Ea2cuZ2V0S2V5U2hhcmUoKSwgdnJmQml0Z28uZ2V0S2V5U2hhcmUoKSwgcmVzdWx0LnBhdGgpO1xuICAgIGNvbnN0IFt1c2VyUm91bmQwLCBiaXRnb1JvdW5kMF0gPSBhd2FpdCBQcm9taXNlLmFsbChbdXNlck1pbnQuaW5pdERlcml2ZSgpLCBiaXRnb01pbnQuaW5pdERlcml2ZSgpXSk7XG4gICAgY29uc3QgW3VzZXJSb3VuZDFdID0gdXNlck1pbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYml0Z29Sb3VuZDBdKTtcbiAgICBjb25zdCBbYml0Z29Sb3VuZDFdID0gYml0Z29NaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3VzZXJSb3VuZDBdKTtcbiAgICBpZiAoIXVzZXJSb3VuZDEgfHwgIWJpdGdvUm91bmQxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVzZXIgYW5kIEJpdEdvIGRlcml2ZSByb3VuZC0xIG1lc3NhZ2VzJyk7XG4gICAgfVxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodXNlck1pbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYml0Z29Sb3VuZDFdKSwgW10pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYml0Z29NaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3VzZXJSb3VuZDFdKSwgW10pO1xuICAgIGNvbnN0IG1pbnRlZENoaWxkQ29tbW9uS2V5Y2hhaW4gPSB1c2VyTWludC5nZXRDb21tb25LZXljaGFpbigpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiaXRnb01pbnQuZ2V0Q29tbW9uS2V5Y2hhaW4oKSwgbWludGVkQ2hpbGRDb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLCBtaW50ZWRDaGlsZENvbW1vbktleWNoYWluKTtcblxuICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnc2FmZS1yZWNvdmVyeS1wYXNzcGhyYXNlJztcbiAgICBjb25zdCB1c2VyS2V5ID0gc2pjbC5lbmNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJlc3VsdC5rZXlzLnVzZXIpO1xuICAgIGNvbnN0IGJhY2t1cEtleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQua2V5cy5iYWNrdXApO1xuICAgIGNvbnN0IHJvb3RDb21tb25LZXljaGFpbiA9IHVzZXJEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHNpZ25FZGRzYU1wY1YyUmVjb3ZlcnlUeCh7XG4gICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd3cm9uZyBrZXljaGFpbiBtdXN0IGZhaWwnKSxcbiAgICAgICAgdXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBiaXRnb0tleTogcm9vdENvbW1vbktleWNoYWluLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICB9KSxcbiAgICAgIC9jb21tb25LZXlDaGFpbiBmcm9tIGtleWNhcmQgZG9lcyBub3QgbWF0Y2ggYml0Z29LZXkvXG4gICAgKTtcblxuICAgIGNvbnN0IG1wYyA9IGF3YWl0IGdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UoKTtcbiAgICBmb3IgKGNvbnN0IGRlcml2YXRpb25QYXRoIG9mIFsnbS8wJywgJ20vMyddKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oYFNhZmUgRWREU0EgcmVjb3ZlcnkgJHtkZXJpdmF0aW9uUGF0aH1gKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNpZ25FZGRzYU1wY1YyUmVjb3ZlcnlUeCh7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYml0Z29LZXk6IHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVyaXZlZEtleWNoYWluID0gbXBjLmRlcml2ZVVuaGFyZGVuZWQocmVzdWx0LmtleXMuY29tbW9uS2V5Y2hhaW4sIGRlcml2YXRpb25QYXRoKTtcbiAgICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gQnVmZmVyLmZyb20oZGVyaXZlZEtleWNoYWluLnNsaWNlKDAsIDY0KSwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICBlZDI1NTE5LnZlcmlmeShuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShtZXNzYWdlKSwgbmV3IFVpbnQ4QXJyYXkocHVibGljS2V5Qnl0ZXMpKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIHRoZSBlZDI1NTE5TXVsdGlzaWcgdHJpcGxldCBhdCB0aGUgQklQNDQgcGF0aCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBTVFJLRVlfU0VFRCA9ICdTQUFBQ0FRREFRQ1FNQllJQkVGQVdEQU5CWUhSQUVJU0NNS0JLRlFYREFNUlVHWTREVVBCNk5LSSc7XG4gICAgY29uc3QgYmFja3VwU2VlZCA9IGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKFNUUktFWV9TRUVEKTtcbiAgICBjb25zdCBiYWNrdXBSb290UHViID0gQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoYmFja3VwU2VlZCkpO1xuICAgIGNvbnN0IGJhY2t1cENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgY29uc3QgZWQyNTUxOVJvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzoge1xuICAgICAgICB1c2VyOiBTVFJLRVlfU0VFRCxcbiAgICAgICAgYmFja3VwOiB7IHBydjogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogZW5jb2RlRWQyNTUxOUNoYWluQ29kZShiYWNrdXBDaGFpbkNvZGUpIH0sXG4gICAgICAgIGJpdGdvOiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKGJhY2t1cFJvb3RQdWIsIGJhY2t1cENoYWluQ29kZSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7XG4gICAgICBjb2luOiAnYWxnbycsXG4gICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgIGFjY291bnQ6IDAsXG4gICAgICByb290czogZWQyNTUxOVJvb3RzLFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ2VkMjU1MTlNdWx0aXNpZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZWQyNTUxOU11bHRpc2lnIHNsb3QnKTtcbiAgICB9XG5cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy8yODMnLzInLzAnXCIpO1xuXG4gICAgLy8gdXNlcjogaGFyZGVuZWQgU0xJUC0wMDEwIGNoaWxkLCBwaW5uZWQgdG8gdGhlIGxlYWYncyBnb2xkZW4gdmVjdG9yXG4gICAgcmVzdWx0LmtleXMudXNlci5raW5kLnNob3VsZC5lcXVhbCgnc2VlZCcpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIuc2VlZC5zaG91bGQuZXF1YWwoJ2JlNjk1MzFlYmJhYjg1MWI2OWFhNDFiYjljOTA1YWZlZDUyZDI2ZmY0Mjc4ZTY0MTg2MDlkNGQ2MDU3MDUxMGMnKTtcbiAgICByZXN1bHQua2V5cy51c2VyLnB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICBCdWZmZXIuZnJvbShlZDI1NTE5LmdldFB1YmxpY0tleShCdWZmZXIuZnJvbShyZXN1bHQua2V5cy51c2VyLnNlZWQsICdoZXgnKSkpLnRvU3RyaW5nKCdoZXgnKVxuICAgICk7XG5cbiAgICAvLyBiYWNrdXA6IGV4dGVuZGVkIGtleSB3aG9zZSBwdWJsaWMgaGFsZiBlcXVhbHMgdGhlIHB1YmxpYyBzb2Z0LWRlcml2ZSBvZiByb290IHB1YiDigJYgY2hhaW4gY29kZVxuICAgIGNvbnN0IGJpdGdvUHViID0gKFxuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChlZDI1NTE5Um9vdHMuZWQyNTUxOU11bHRpc2lnLmJpdGdvLCAnbS80NC8yODMvMi8wJylcbiAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAua2luZC5zaG91bGQuZXF1YWwoJ2V4dGVuZGVkJyk7XG4gICAgLy8gUGluIHRoZSBwcml2YXRlIGhhbHZlcyB0byB0aGUgY3Jvc3MtcmVwbyBHVjEgZ29sZGVuIHZlY3RvciBmb3IgdGhpcyBwYXRoLlxuICAgIGNvbnN0IGFsZ29Tb2Z0ID0gYmlwNDRGaXh0dXJlLmVkMjU1MTlTb2Z0LnZlY3RvcnMuZmluZCgodikgPT4gdi5wYXRoID09PSAnbS80NC8yODMvMi8wJyk7XG4gICAgaWYgKGFsZ29Tb2Z0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZml4dHVyZSBpcyBtaXNzaW5nIHRoZSBtLzQ0LzI4My8yLzAgc29mdCBjby1zaWduZXIgdmVjdG9yJyk7XG4gICAgfVxuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5rTC5zaG91bGQuZXF1YWwoYWxnb1NvZnQuY2hpbGRLTEhleCk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLmtSLnNob3VsZC5lcXVhbChhbGdvU29mdC5jaGlsZEtSSGV4KTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAucHViLnNob3VsZC5lcXVhbChiaXRnb1B1Yik7XG4gICAgcmVzdWx0LmtleXMuYml0Z28ucHViLnNob3VsZC5lcXVhbChiaXRnb1B1Yik7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgbm9uLWludGVnZXIgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdidGMnLCBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBhY2NvdW50OiAxLjUsIHJvb3RzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAvaW52YWxpZCBhY2NvdW50L1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgY29uc3QgdXNlclJvb3QgPSBiaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnLCAnaGV4JykpO1xuICBjb25zdCBiYWNrdXBSb290ID0gYmlwMzIuZnJvbVNlZWQoXG4gICAgQnVmZmVyLmZyb20oJzFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwMGYwZTBkMGMwYjBhMDkwODA3MDYwNTA0MDMwMjAxMDAnLCAnaGV4JylcbiAgKTtcbiAgY29uc3QgYml0Z29Sb290ID0gYmlwMzJcbiAgICAuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzJmMmUyZDJjMmIyYTI5MjgyNzI2MjUyNDIzMjIyMTIwMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAnLCAnaGV4JykpXG4gICAgLm5ldXRlcmVkKCk7XG5cbiAgY29uc3Qga2V5cyA9IHtcbiAgICB1c2VyOiB7IHBydjogdXNlclJvb3QudG9CYXNlNTgoKSwgcHViOiB1c2VyUm9vdC5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgfSxcbiAgICBiYWNrdXA6IHsgcHJ2OiBiYWNrdXBSb290LnRvQmFzZTU4KCksIHB1YjogYmFja3VwUm9vdC5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgfSxcbiAgICBiaXRnbzogeyBwdWI6IGJpdGdvUm9vdC50b0Jhc2U1OCgpIH0sXG4gIH07XG5cbiAgaXQoJ3NpZ25lZCBtb2RlIHJlLWVuY3J5cHRzIGNoaWxkIHhwcnZzIHVuZGVyIGEgc2luZ2xlIGVwaGVtZXJhbCBwYXNzcGhyYXNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhc3NwaHJhc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICh7IGlucHV0LCBwYXNzd29yZCwgZW5jcnlwdGlvblZlcnNpb24gfSkgPT4ge1xuICAgICAgcGFzc3BocmFzZXMucHVzaChwYXNzd29yZCk7XG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbi5zaG91bGQuZXF1YWwoMSk7XG4gICAgICByZXR1cm4gYGVuYygke2lucHV0fSlgO1xuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0IH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLFxuICAgICAga2V5cyxcbiAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtrZXlzLnVzZXIucHJ2fSlgKTtcbiAgICByZXN1bHQuYmFja3VwS2V5LnNob3VsZC5lcXVhbChgZW5jKCR7a2V5cy5iYWNrdXAucHJ2fSlgKTtcbiAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLmVxdWFsKGtleXMuYml0Z28ucHViKTtcbiAgICAocmVzdWx0LndhbGxldFBhc3NwaHJhc2UgYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICBwYXNzcGhyYXNlcy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgcGFzc3BocmFzZXNbMF0uc2hvdWxkLmVxdWFsKHBhc3NwaHJhc2VzWzFdKTtcbiAgICBwYXNzcGhyYXNlc1swXS5zaG91bGQuZXF1YWwocmVzdWx0LndhbGxldFBhc3NwaHJhc2UpO1xuICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgyKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbm9uLXByaXZhdGUgY2hpbGQga2V5cyBpbiBzaWduZWQgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdDogc2lub24uc3R1YigpIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIGtleXM6IHsgdXNlcjogeyBwcnY6IGtleXMudXNlci5wdWIsIHB1Yjoga2V5cy51c2VyLnB1YiB9LCBiYWNrdXA6IGtleXMuYmFja3VwLCBiaXRnbzoga2V5cy5iaXRnbyB9LFxuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbXVzdCBiZSBwcml2YXRlIHhwcnZzLyk7XG4gIH0pO1xuXG4gIGl0KCd1bnNpZ25lZCBtb2RlIHJldHVybnMgcHVicyBhbmQgbmV2ZXIgZW5jcnlwdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbmNyeXB0IHNob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBrZXlzLFxuICAgICAgbW9kZTogJ3Vuc2lnbmVkJyxcbiAgICB9KTtcblxuICAgIHJlc3VsdC51c2VyS2V5LnNob3VsZC5lcXVhbChrZXlzLnVzZXIucHViKTtcbiAgICByZXN1bHQuYmFja3VwS2V5LnNob3VsZC5lcXVhbChrZXlzLmJhY2t1cC5wdWIpO1xuICAgIHJlc3VsdC5iaXRnb0tleS5zaG91bGQuZXF1YWwoa2V5cy5iaXRnby5wdWIpO1xuICAgIHJlc3VsdC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dhbGxldFBhc3NwaHJhc2UnKTtcbiAgICBlbmNyeXB0LmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMCk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHVuc3VwcG9ydGVkIHNsb3RzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0OiBzaW5vbi5zdHViKCkgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnZWRkc2FNcGMnLFxuICAgICAga2V5cyxcbiAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCBzdXBwb3J0ZWQgeWV0Lyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdTYWZlIGVjZHNhTXBjIGRlcml2ZSDihpIgc2lnbiAoZ2F0ZSknLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdkZXJpdmVzIGEgY2hpbGQsIHJlYnVpbGRzIDItb2YtMiBzaGFyZXMsIGFuZCBzaWducyBhIG1lc3NhZ2UgdmVyaWZpZWQgYXQgbS8wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsIHZyZkJhY2t1cF0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcblxuICAgIGNvbnN0IHJvb3RDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyRGtnLmdldEtleVNoYXJlKCkpO1xuXG4gICAgY29uc3QgeyBjb21tb25LZXljaGFpbiwgdXNlckNoaWxkLCBiYWNrdXBDaGlsZCB9ID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmRlcml2ZVNhZmVFY2RzYU1wY0NoaWxkKHtcbiAgICAgIHVzZXJSb290OiB7IHNpZ25pbmc6IHVzZXJEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksIHZyZjogdnJmVXNlci5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICBiYWNrdXBSb290OiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIGNvaW5UeXBlOiA2MCxcbiAgICAgIHNhZmVTbG90T3JkaW5hbDogMyxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkZXJpdmVkIGNoaWxkIG11c3QgbmV2ZXIgYmUgdGhlIHJvb3QgKHRoZSBcInJvb3QgZW52ZWxvcGUgaW4gdGhlIGNoaWxkIHBvc2l0aW9uXCIgZm9vdGd1bikuXG4gICAgY29tbW9uS2V5Y2hhaW4uc2hvdWxkLm5vdC5lcXVhbChyb290Q29tbW9uS2V5Y2hhaW4pO1xuXG4gICAgLy8gUmVidWlsZCAyLW9mLTIga2V5c2hhcmVzIGZyb20gdGhlIGRlcml2ZWQgcmVkdWNlZCBDQk9SLCBleGFjdGx5IGFzIHRoZSBzaWduZXIncyByZXRyb2ZpdCBkb2VzLlxuICAgIGNvbnN0IHRvUmV0cm9maXQgPSAoYjY0OiBzdHJpbmcpOiBEa2xzVHlwZXMuUmV0cm9maXREYXRhID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZWQgPSBEa2xzVHlwZXMuZ2V0RGVjb2RlZFJlZHVjZWRLZXlTaGFyZShCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4U2hhcmU6IHtcbiAgICAgICAgICB4OiBCdWZmZXIuZnJvbShyZWR1Y2VkLnBydikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHk6IEJ1ZmZlci5mcm9tKHJlZHVjZWQucHViKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgY2hhaW5jb2RlOiBCdWZmZXIuZnJvbShyZWR1Y2VkLnJvb3RDaGFpbkNvZGUpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSxcbiAgICAgICAgeGlMaXN0OiByZWR1Y2VkLnhMaXN0LnNsaWNlKDAsIDIpLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFt1c2VyMm9mMiwgYmFja3VwMm9mMl0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGUyb2YyS2V5U2hhcmVzKFxuICAgICAgdG9SZXRyb2ZpdCh1c2VyQ2hpbGQpLFxuICAgICAgdG9SZXRyb2ZpdChiYWNrdXBDaGlsZClcbiAgICApO1xuXG4gICAgY29uc3QgbWVzc2FnZUhhc2ggPSBCdWZmZXIuZnJvbSgnMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZicsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IERrbHNEc2cuRHNnKHVzZXIyb2YyLmdldEtleVNoYXJlKCksIDAsICdtLzAnLCBtZXNzYWdlSGFzaCk7XG4gICAgY29uc3QgYmFja3VwRHNnID0gbmV3IERrbHNEc2cuRHNnKGJhY2t1cDJvZjIuZ2V0S2V5U2hhcmUoKSwgMSwgJ20vMCcsIG1lc3NhZ2VIYXNoKTtcbiAgICBjb25zdCBzaWduYXR1cmVTdHJpbmcgPSBEa2xzVXRpbHMudmVyaWZ5QW5kQ29udmVydERrbHNTaWduYXR1cmUoXG4gICAgICBtZXNzYWdlSGFzaCxcbiAgICAgIChhd2FpdCBEa2xzVXRpbHMuZXhlY3V0ZVRpbGxSb3VuZCg1LCB1c2VyRHNnLCBiYWNrdXBEc2cpKSBhcyBEa2xzVHlwZXMuRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSxcbiAgICAgIGNvbW1vbktleWNoYWluLFxuICAgICAgJ20vMCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZVxuICAgICk7XG5cbiAgICAvLyB2ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZSByZWNvdmVycyB0aGUgcHVia2V5IGZyb20gdGhlIHNpZ25hdHVyZSBhbmQgY2hlY2tzIGl0IGFnYWluc3RcbiAgICAvLyBkZXJpdmVVbmhhcmRlbmVkKGNoaWxkQ0ssICdtLzAnKTsgaXQgdGhyb3dzIG9uIG1pc21hdGNoLCBzbyBhIHJldHVybmVkIHN0cmluZyBpcyBwcm9vZi5cbiAgICBzaWduYXR1cmVTdHJpbmcuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgc2lnbmF0dXJlU3RyaW5nLnNob3VsZC5tYXRjaCgvXlxcZCs6WzAtOWEtZl0rOlswLTlhLWZdKzpbMC05YS1mXSskLyk7XG4gIH0pO1xufSk7XG4iXX0=
606
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLG1EQUE2QztBQUM3QyxtREFBZ0Q7QUFDaEQsdURBQXlDO0FBQ3pDLHlEQUF1SDtBQUN2SCx1RkFBNEY7QUFDNUYseURBQXNFO0FBQ3RFLGtFQUs2QztBQUM3Qyx5Q0FNeUI7QUFFekIsaUVBQWtGO0FBQ2xGLGlGQUE0RjtBQUU1RiwrRkFBK0Y7QUFDL0YsMERBQTBEO0FBQzFELCtFQUFpRTtBQUVqRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFFakMsU0FBUyxhQUFhLENBQUMsV0FBb0U7SUFDekYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUEyQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEYsQ0FBQztBQUM1QixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsY0FBYyxDQUFDLE9BQStCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxT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Q25GLE1BQU0sZUFBZSxHQUFHLHVCQUFTLENBQUMsNkJBQTZCLENBQzdELFdBQVcsRUFDWCxDQUFDLE1BQU0sdUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUF3QyxFQUNoRyxjQUFjLEVBQ2QsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQztRQUVGLDZGQUE2RjtRQUM3RiwwRkFBMEY7UUFDMUYsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgZWQyNTUxOSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvZWQyNTUxOSc7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby1iZXRhL3NqY2wnO1xuaW1wb3J0IHsgRGtsc0RzZywgRGtsc1R5cGVzLCBEa2xzVXRpbHMsIERrbHNWcmZVdGlscywgTVBTVXRpbCwgTXBzRGVyaXZlLCBNcHNWcmZVdGlscyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5pbXBvcnQgeyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2Vycm9ycyc7XG5pbXBvcnQge1xuICBEZWNyeXB0ZWRTYWZlUm9vdHMsXG4gIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMsXG4gIGRlY3J5cHRTYWZlS2V5Y2FyZCxcbiAgZGVyaXZlU2FmZVdhbGxldEtleXMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL3JlY292ZXJ5JztcbmltcG9ydCB7XG4gIGFsZ29NdWx0aXNpZ0FkZHJlc3MsXG4gIGVuY29kZUFsZ29LZXksXG4gIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGVuY29kZUVkMjU1MTlDaGFpbkNvZGUsXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYml0Z29CYXNlJztcbmltcG9ydCB7IGdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VkZHNhL2VkZHNhJztcbmltcG9ydCB7IHNpZ25FZGRzYU1wY1YyUmVjb3ZlcnlUeCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5cbi8vIFRoZSBlZDI1NTE5IHNvZnQgY28tc2lnbmVyIHByaXZhdGUgaGFsdmVzIGFzc2VydGVkIGJlbG93IGFyZSBwaW5uZWQgY3Jvc3MtcmVwbyBpbiB0aGUgc2hhcmVkXG4vLyBHVjEgZml4dHVyZSAoYnl0ZS1pZGVudGljYWwgdG8gd2FsbGV0LXBsYXRmb3JtJ3MgY29weSkuXG5pbXBvcnQgKiBhcyBiaXA0NEZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9zYWZlQmlwNDRWZWN0b3JzLmpzb24nO1xuXG5jb25zdCBQQVNTV09SRCA9ICdzYWZlLXBhc3N3b3JkJztcblxuZnVuY3Rpb24gbWFrZU1vY2tCaXRHbyhkZWNyeXB0SW1wbDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZyk6IEJpdEdvQmFzZSB7XG4gIHJldHVybiB7XG4gICAgZGVjcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gZGVjcnlwdEltcGwocGFyYW1zKSksXG4gIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG59XG5cbi8qKiBBIGZha2UgZGVjcnlwdCB0aGF0IG9ubHkgcmVjb2duaXplcyB0aGUgdXNlci9iYWNrdXAgdG9rZW5zOyBhbnkgb3RoZXIgaW5wdXQgKGUuZy4gYSBCb3ggQyBwdWJsaWMpIHRocm93cy4gKi9cbmZ1bmN0aW9uIG1ha2VEZWNyeXB0TWFwKGVudHJpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gc3RyaW5nIHtcbiAgcmV0dXJuICh7IHBhc3N3b3JkLCBpbnB1dCB9KSA9PiB7XG4gICAgcGFzc3dvcmQuc2hvdWxkLmVxdWFsKFBBU1NXT1JEKTtcbiAgICBpZiAoIShpbnB1dCBpbiBlbnRyaWVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGRlY3J5cHQgaW5wdXQ6ICR7aW5wdXR9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzW2lucHV0XTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYm94KHZhbHVlczoge1xuICBzZWNwMjU2azFNdWx0aXNpZzogc3RyaW5nO1xuICBlZDI1NTE5TXVsdGlzaWc6IHN0cmluZyB8IHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH07XG4gIGVjZHNhTXBjOiBzdHJpbmc7XG4gIGVkZHNhTXBjOiBzdHJpbmc7XG59KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XG59XG5cbmRlc2NyaWJlKCdkZWNyeXB0U2FmZUtleWNhcmQnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgb25jaGFpbiByb290cyB0byBzdHJpbmdzIGFuZCByZXR1cm5zIEJveCBDIHZlcmJhdGltJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtYmFja3VwLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiB7IHBydjogJ2VuYy1iYWNrdXAtZWQyNTUxOScsIGNoYWluQ29kZTogJ0MnLnJlcGVhdCg1MikgfSxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLWJhY2t1cC1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy1iYWNrdXAtZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAneHB1Yi1zZWNwLWJpdGdvJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ3B1Yi1lZDI1NTE5LWJpdGdvJyxcbiAgICAgIGVjZHNhTXBjOiAnY29tbW9uLWVjZHNhLWJpdGdvJyxcbiAgICAgIGVkZHNhTXBjOiAnY29tbW9uLWVkZHNhLWJpdGdvJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1wY1VzZXIgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci12cmYnKVxuICAgICk7XG4gICAgY29uc3QgbXBjQmFja3VwID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJylcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKFxuICAgICAgbWFrZURlY3J5cHRNYXAoe1xuICAgICAgICAnZW5jLXVzZXItc2VjcCc6ICd4cHJ2LXVzZXInLFxuICAgICAgICAnZW5jLWJhY2t1cC1zZWNwJzogJ3hwcnYtYmFja3VwJyxcbiAgICAgICAgJ2VuYy11c2VyLWVkMjU1MTknOiAnUy11c2VyLXNlZWQnLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZDI1NTE5JzogJ1MtYmFja3VwLXNlZWQnLFxuICAgICAgICAnZW5jLXVzZXItZWNkc2EnOiBtcGNVc2VyLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtYmFja3VwLWVjZHNhJzogbXBjQmFja3VwLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtdXNlci1lZGRzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWRkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IGJhY2t1cEJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiBiaXRnb0JveCxcbiAgICAgIHBhc3N3b3JkOiBQQVNTV09SRCxcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zZWNwMjU2azFNdWx0aXNpZy51c2VyLnNob3VsZC5lcXVhbCgneHBydi11c2VyJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJhY2t1cC5zaG91bGQuZXF1YWwoJ3hwcnYtYmFja3VwJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgneHB1Yi1zZWNwLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLnVzZXIuc2hvdWxkLmVxdWFsKCdTLXVzZXItc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLnBydi5zaG91bGQuZXF1YWwoJ1MtYmFja3VwLXNlZWQnKTtcbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJhY2t1cC5jaGFpbkNvZGUuc2hvdWxkLmVxdWFsKCdDJy5yZXBlYXQoNTIpKTtcbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgncHViLWVkMjU1MTktYml0Z28nKTtcblxuICAgIHJlc3VsdC5lY2RzYU1wYy51c2VyLnNpZ25pbmcudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMudXNlci52cmYudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgndXNlci12cmYnKS50b1N0cmluZygnaGV4JykpO1xuICAgIHJlc3VsdC5lY2RzYU1wYy5iYWNrdXAuc2lnbmluZy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJhY2t1cC52cmYudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgnYmFja3VwLXZyZicpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJpdGdvLnNob3VsZC5lcXVhbCgnY29tbW9uLWVjZHNhLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWRkc2FNcGMuYml0Z28uc2hvdWxkLmVxdWFsKCdjb21tb24tZWRkc2EtYml0Z28nKTtcblxuICAgIC8vIDQgc2xvdHMgw5cgKHVzZXIgKyBiYWNrdXApID0gOCBkZWNyeXB0czsgQml0R28gKEJveCBDKSBpcyBuZXZlciBkZWNyeXB0ZWQuXG4gICAgKGJpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgdGhlIHNlZWQgZnJvbSBhbiBvYmplY3QtZm9ybSBlZDI1NTE5TXVsdGlzaWcgYmFja3VwIGVudHJ5JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy1iYWNrdXAtc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHsgcHJ2OiAnZW5jLWJhY2t1cC1lZDI1NTE5JywgY2hhaW5Db2RlOiAnQScucmVwZWF0KDUyKSB9LFxuICAgICAgZWNkc2FNcGM6ICdlbmMtYmFja3VwLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLWJhY2t1cC1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z29Cb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd4cHViLXNlY3AtYml0Z28nLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAncHViLWVkMjU1MTktYml0Z28nLFxuICAgICAgZWNkc2FNcGM6ICdjb21tb24tZWNkc2EtYml0Z28nLFxuICAgICAgZWRkc2FNcGM6ICdjb21tb24tZWRkc2EtYml0Z28nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbXBjVXNlciA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpXG4gICAgKTtcbiAgICBjb25zdCBtcGNCYWNrdXAgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC12cmYnKVxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oXG4gICAgICBtYWtlRGVjcnlwdE1hcCh7XG4gICAgICAgICdlbmMtdXNlci1zZWNwJzogJ3hwcnYtdXNlcicsXG4gICAgICAgICdlbmMtYmFja3VwLXNlY3AnOiAneHBydi1iYWNrdXAnLFxuICAgICAgICAnZW5jLXVzZXItZWQyNTUxOSc6ICdTLXVzZXItc2VlZCcsXG4gICAgICAgICdlbmMtYmFja3VwLWVkMjU1MTknOiAnUy1iYWNrdXAtc2VlZCcsXG4gICAgICAgICdlbmMtdXNlci1lY2RzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWNkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy11c2VyLWVkZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZGRzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogYmFja3VwQm94LFxuICAgICAgYml0Z29LZXlCb3g6IGJpdGdvQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAucHJ2LnNob3VsZC5lcXVhbCgnUy1iYWNrdXAtc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLmNoYWluQ29kZS5zaG91bGQuZXF1YWwoJ0EnLnJlcGVhdCg1MikpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhbiBlZDI1NTE5IGNoYWluLWNvZGUgZW50cnkgaW4gYSBub24tYmFja3VwIHNsb3QgKGZhaWwgY2xvc2VkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6IHsgcHJ2OiAnZW5jLXVzZXItc2VjcCcsIGNoYWluQ29kZTogJ0EnLnJlcGVhdCg1MikgfSxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbzogbWFrZU1vY2tCaXRHbyhtYWtlRGVjcnlwdE1hcCh7fSkpLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogdXNlckJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiB1c2VyQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3VuZXhwZWN0ZWQgZWQyNTUxOSBjaGFpbi1jb2RlIGVudHJ5Lyk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3MgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB3aGVuIGRlY3J5cHRpb24gZmFpbHMgKHdyb25nIHBhc3N3b3JkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnZW5jLXVzZXItc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICdlbmMtdXNlci1lZDI1NTE5JyxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLXVzZXItZWNkc2EnLFxuICAgICAgZWRkc2FNcGM6ICdlbmMtdXNlci1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXJnb24yOiB0YWcgZG9lcyBub3QgbWF0Y2gnKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiaXRnb0tleUJveDogdXNlckJveCxcbiAgICAgIHBhc3N3b3JkOiAnd3JvbmctcGFzc3dvcmQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW5jb3JyZWN0UGFzc3dvcmRFcnJvcik7XG4gIH0pO1xufSk7XG5cbmNvbnN0IE1QQ19ST09UID0geyBzaWduaW5nOiBCdWZmZXIuYWxsb2MoMCksIHZyZjogQnVmZmVyLmFsbG9jKDApIH07XG5cbmZ1bmN0aW9uIG1ha2VSb290cyhzZWNwOiB7IHVzZXI6IHN0cmluZzsgYmFja3VwOiBzdHJpbmc7IGJpdGdvOiBzdHJpbmcgfSk6IERlY3J5cHRlZFNhZmVSb290cyB7XG4gIHJldHVybiB7XG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6IHNlY3AsXG4gICAgZWQyNTUxOU11bHRpc2lnOiB7IHVzZXI6ICd1JywgYmFja3VwOiB7IHBydjogJ2InLCBjaGFpbkNvZGU6ICdjJyB9LCBiaXRnbzogJ2cnIH0sXG4gICAgZWNkc2FNcGM6IHsgdXNlcjogTVBDX1JPT1QsIGJhY2t1cDogTVBDX1JPT1QsIGJpdGdvOiAnZycgfSxcbiAgICBlZGRzYU1wYzogeyB1c2VyOiBNUENfUk9PVCwgYmFja3VwOiBNUENfUk9PVCwgYml0Z286ICdnJyB9LFxuICB9O1xufVxuXG5kZXNjcmliZSgnZGVyaXZlU2FmZVdhbGxldEtleXMnLCAoKSA9PiB7XG4gIGNvbnN0IHVzZXJSb290ID0gYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJywgJ2hleCcpKTtcbiAgY29uc3QgYmFja3VwUm9vdCA9IGJpcDMyLmZyb21TZWVkKFxuICAgIEJ1ZmZlci5mcm9tKCcxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMDBmMGUwZDBjMGIwYTA5MDgwNzA2MDUwNDAzMDIwMTAwJywgJ2hleCcpXG4gICk7XG4gIGNvbnN0IGJpdGdvUm9vdCA9IGJpcDMyXG4gICAgLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcyZjJlMmQyYzJiMmEyOTI4MjcyNjI1MjQyMzIyMjEyMDFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwJywgJ2hleCcpKVxuICAgIC5uZXV0ZXJlZCgpO1xuXG4gIGNvbnN0IHJvb3RzID0gbWFrZVJvb3RzKHtcbiAgICB1c2VyOiB1c2VyUm9vdC50b0Jhc2U1OCgpLFxuICAgIGJhY2t1cDogYmFja3VwUm9vdC50b0Jhc2U1OCgpLFxuICAgIGJpdGdvOiBiaXRnb1Jvb3QudG9CYXNlNTgoKSxcbiAgfSk7XG5cbiAgaXQoJ2Rlcml2ZXMgdGhlIEJJUDQ0IGNoaWxkIHRyaXBsZXQgZm9yIHNsb3QgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdidGMnLCBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBhY2NvdW50OiAwLCByb290cyB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgc2VjcDI1NmsxTXVsdGlzaWcgc2xvdCcpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzAnLzEnLzAnXCIpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIucHJ2LnNob3VsZC5lcXVhbCh1c2VyUm9vdC5kZXJpdmVQYXRoKFwibS80NCcvMCcvMScvMCdcIikudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLmVxdWFsKHVzZXJSb290LmRlcml2ZVBhdGgoXCJtLzQ0Jy8wJy8xJy8wJ1wiKS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5wcnYuc2hvdWxkLmVxdWFsKGJhY2t1cFJvb3QuZGVyaXZlUGF0aCgnbS80NC8wLzEvMCcpLnRvQmFzZTU4KCkpO1xuICAgIHJlc3VsdC5rZXlzLmJpdGdvLnB1Yi5zaG91bGQuZXF1YWwoYml0Z29Sb290LmRlcml2ZVBhdGgoJ20vNDQvMC8xLzAnKS50b0Jhc2U1OCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhcmllcyB0aGUgcGF0aCB3aXRoIHRoZSBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDIsIHJvb3RzIH0pO1xuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzAnLzEnLzInXCIpO1xuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgZWNkc2FNcGMgY2hpbGQgdmlhIHRoZSBES0xzIGNlcmVtb255JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsIHZyZkJhY2t1cF0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcblxuICAgIGNvbnN0IG1wY1Jvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVjZHNhTXBjOiB7XG4gICAgICAgIHVzZXI6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgICAgYmFja3VwOiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiaXRnbzogJ2cnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnZXRoJywgc2xvdDogJ2VjZHNhTXBjJywgYWNjb3VudDogMCwgcm9vdHM6IG1wY1Jvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ2VjZHNhTXBjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlY2RzYU1wYyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvNjAnLzMnLzAnXCIpO1xuICAgIHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICB9KTtcblxuICBpdCgnZGVyaXZlcyBhbmQgc2lnbnMgdGhlIGVkZHNhTXBjIHNsb3QtNCBCSVA0NCBjaGlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnLCBiaXRnb0RrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwLCB2cmZCaXRnb10gPSBhd2FpdCBNcHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1wY1Jvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVkZHNhTXBjOiB7XG4gICAgICAgIHVzZXI6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgICAgYmFja3VwOiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiaXRnbzogYml0Z29Ea2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ3NvbCcsIHNsb3Q6ICdlZGRzYU1wYycsIGFjY291bnQ6IDAsIHJvb3RzOiBtcGNSb290cyB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZGRzYU1wYycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZWRkc2FNcGMgc2xvdCcpO1xuICAgIH1cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy81MDEnLzQnLzAnXCIpO1xuXG4gICAgLy8gUGxheSBtaW50J3MgdXNlcuKGlEJpdEdvIHJvbGUgbG9jYWxseSBhdCB0aGUgc2FtZSBCSVA0NCBwYXRoOyBubyBkZXYtbWludGVkIHdhbGxldCBpcyBuZWVkZWQuXG4gICAgY29uc3QgdXNlck1pbnQgPSBuZXcgTXBzRGVyaXZlLkRlcml2ZSgzLCAyLCAwLCB1c2VyRGtnLmdldEtleVNoYXJlKCksIHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSwgcmVzdWx0LnBhdGgpO1xuICAgIGNvbnN0IGJpdGdvTWludCA9IG5ldyBNcHNEZXJpdmUuRGVyaXZlKDMsIDIsIDIsIGJpdGdvRGtnLmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIHJlc3VsdC5wYXRoKTtcbiAgICBjb25zdCBbdXNlclJvdW5kMCwgYml0Z29Sb3VuZDBdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJNaW50LmluaXREZXJpdmUoKSwgYml0Z29NaW50LmluaXREZXJpdmUoKV0pO1xuICAgIGNvbnN0IFt1c2VyUm91bmQxXSA9IHVzZXJNaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvUm91bmQwXSk7XG4gICAgY29uc3QgW2JpdGdvUm91bmQxXSA9IGJpdGdvTWludC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt1c2VyUm91bmQwXSk7XG4gICAgaWYgKCF1c2VyUm91bmQxIHx8ICFiaXRnb1JvdW5kMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCB1c2VyIGFuZCBCaXRHbyBkZXJpdmUgcm91bmQtMSBtZXNzYWdlcycpO1xuICAgIH1cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHVzZXJNaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvUm91bmQxXSksIFtdKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJpdGdvTWludC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt1c2VyUm91bmQxXSksIFtdKTtcbiAgICBjb25zdCBtaW50ZWRDaGlsZENvbW1vbktleWNoYWluID0gdXNlck1pbnQuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYml0Z29NaW50LmdldENvbW1vbktleWNoYWluKCksIG1pbnRlZENoaWxkQ29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQua2V5cy5jb21tb25LZXljaGFpbiwgbWludGVkQ2hpbGRDb21tb25LZXljaGFpbik7XG5cbiAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3NhZmUtcmVjb3ZlcnktcGFzc3BocmFzZSc7XG4gICAgY29uc3QgdXNlcktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQua2V5cy51c2VyKTtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgcmVzdWx0LmtleXMuYmFja3VwKTtcbiAgICBjb25zdCByb290Q29tbW9uS2V5Y2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHgoe1xuICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgnd3Jvbmcga2V5Y2hhaW4gbXVzdCBmYWlsJyksXG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYml0Z29LZXk6IHJvb3RDb21tb25LZXljaGFpbixcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgfSksXG4gICAgICAvY29tbW9uS2V5Q2hhaW4gZnJvbSBrZXljYXJkIGRvZXMgbm90IG1hdGNoIGJpdGdvS2V5L1xuICAgICk7XG5cbiAgICBjb25zdCBtcGMgPSBhd2FpdCBnZXRJbml0aWFsaXplZE1wY0luc3RhbmNlKCk7XG4gICAgZm9yIChjb25zdCBkZXJpdmF0aW9uUGF0aCBvZiBbJ20vMCcsICdtLzMnXSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKGBTYWZlIEVkRFNBIHJlY292ZXJ5ICR7ZGVyaXZhdGlvblBhdGh9YCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHgoe1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICB1c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGJpdGdvS2V5OiByZXN1bHQua2V5cy5jb21tb25LZXljaGFpbixcbiAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9IEJ1ZmZlci5mcm9tKGRlcml2ZWRLZXljaGFpbi5zbGljZSgwLCA2NCksICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgZWQyNTUxOS52ZXJpZnkobmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSksIG5ldyBVaW50OEFycmF5KHB1YmxpY0tleUJ5dGVzKSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgZWQyNTUxOU11bHRpc2lnIHRyaXBsZXQgYXQgdGhlIEJJUDQ0IHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgU1RSS0VZX1NFRUQgPSAnU0FBQUNBUURBUUNRTUJZSUJFRkFXREFOQllIUkFFSVNDTUtCS0ZRWERBTVJVR1k0RFVQQjZOS0knO1xuICAgIGNvbnN0IGJhY2t1cENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgLy8gRGlzdGluY3QgQml0R28gcm9vdCArIGNoYWluIGNvZGU6IGlmIHRoZSBCaXRHbyBjb21wb3NpdGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIGJhY2t1cCByb290LCB0aGVcbiAgICAvLyBiYWNrdXAgY2hpbGQgYW5kIHRoZSBCaXRHbyBjaGlsZCB3b3VsZCBiZSB0aGUgc2FtZSBrZXkgYW5kIGEgc2xvdCBzd2FwIHdvdWxkIHBhc3MgZXZlcnkgZ29sZGVuLlxuICAgIGNvbnN0IGJpdGdvU2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgMHgyMik7XG4gICAgY29uc3QgYml0Z29Sb290UHViID0gQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoYml0Z29TZWVkKSk7XG4gICAgY29uc3QgYml0Z29DaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4Y2QpO1xuICAgIGNvbnN0IGVkMjU1MTlSb290czogRGVjcnlwdGVkU2FmZVJvb3RzID0ge1xuICAgICAgLi4ucm9vdHMsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHtcbiAgICAgICAgdXNlcjogU1RSS0VZX1NFRUQsXG4gICAgICAgIGJhY2t1cDogeyBwcnY6IFNUUktFWV9TRUVELCBjaGFpbkNvZGU6IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoYmFja3VwQ2hhaW5Db2RlKSB9LFxuICAgICAgICBiaXRnbzogZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihiaXRnb1Jvb3RQdWIsIGJpdGdvQ2hhaW5Db2RlKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHtcbiAgICAgIGNvaW46ICdhbGdvJyxcbiAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIHJvb3RzOiBlZDI1NTE5Um9vdHMsXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5zbG90ICE9PSAnZWQyNTUxOU11bHRpc2lnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZDI1NTE5TXVsdGlzaWcgc2xvdCcpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzI4MycvMicvMCdcIik7XG5cbiAgICAvLyB1c2VyOiBoYXJkZW5lZCBTTElQLTAwMTAgY2hpbGQsIHBpbm5lZCB0byB0aGUgbGVhZidzIGdvbGRlbiB2ZWN0b3JcbiAgICByZXN1bHQua2V5cy51c2VyLmtpbmQuc2hvdWxkLmVxdWFsKCdzZWVkJyk7XG4gICAgcmVzdWx0LmtleXMudXNlci5zZWVkLnNob3VsZC5lcXVhbCgnYmU2OTUzMWViYmFiODUxYjY5YWE0MWJiOWM5MDVhZmVkNTJkMjZmZjQyNzhlNjQxODYwOWQ0ZDYwNTcwNTEwYycpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIucHViLnNob3VsZC5lcXVhbChcbiAgICAgIEJ1ZmZlci5mcm9tKGVkMjU1MTkuZ2V0UHVibGljS2V5KEJ1ZmZlci5mcm9tKHJlc3VsdC5rZXlzLnVzZXIuc2VlZCwgJ2hleCcpKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcblxuICAgIC8vIGJhY2t1cDogZXh0ZW5kZWQga2V5IHdob3NlIHB1YmxpYyBoYWxmIGVxdWFscyB0aGUgcHVibGljIHNvZnQtZGVyaXZlIG9mIHJvb3QgcHViIOKAliBjaGFpbiBjb2RlXG4gICAgY29uc3QgYml0Z29QdWIgPSAoXG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGVkMjU1MTlSb290cy5lZDI1NTE5TXVsdGlzaWcuYml0Z28sICdtLzQ0LzI4My8yLzAnKVxuICAgICkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5raW5kLnNob3VsZC5lcXVhbCgnZXh0ZW5kZWQnKTtcbiAgICAvLyBQaW4gdGhlIHByaXZhdGUgaGFsdmVzIHRvIHRoZSBjcm9zcy1yZXBvIEdWMSBnb2xkZW4gdmVjdG9yIGZvciB0aGlzIHBhdGguXG4gICAgY29uc3QgYWxnb1NvZnQgPSBiaXA0NEZpeHR1cmUuZWQyNTUxOVNvZnQudmVjdG9ycy5maW5kKCh2KSA9PiB2LnBhdGggPT09ICdtLzQ0LzI4My8yLzAnKTtcbiAgICBpZiAoYWxnb1NvZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXh0dXJlIGlzIG1pc3NpbmcgdGhlIG0vNDQvMjgzLzIvMCBzb2Z0IGNvLXNpZ25lciB2ZWN0b3InKTtcbiAgICB9XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLmtMLnNob3VsZC5lcXVhbChhbGdvU29mdC5jaGlsZEtMSGV4KTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAua1Iuc2hvdWxkLmVxdWFsKGFsZ29Tb2Z0LmNoaWxkS1JIZXgpO1xuICAgIC8vIFdpdGggZGlzdGluY3Qgcm9vdHMgdGhlIHRocmVlIGNoaWxkcmVuIGFyZSBwcm92YWJseSBkaXN0aW5jdCwgc28gYSBzbG90IHN3YXAgY2Fubm90IHNuZWFrIHRocm91Z2guXG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLm5vdC5lcXVhbChyZXN1bHQua2V5cy5iYWNrdXAucHViKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAucHViLnNob3VsZC5ub3QuZXF1YWwocmVzdWx0LmtleXMuYml0Z28ucHViKTtcbiAgICByZXN1bHQua2V5cy5iaXRnby5wdWIuc2hvdWxkLmVxdWFsKGJpdGdvUHViKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBub24taW50ZWdlciBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDEuNSwgcm9vdHMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgIC9pbnZhbGlkIGFjY291bnQvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2J1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBjb25zdCB1c2VyUm9vdCA9IGJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicsICdoZXgnKSk7XG4gIGNvbnN0IGJhY2t1cFJvb3QgPSBiaXAzMi5mcm9tU2VlZChcbiAgICBCdWZmZXIuZnJvbSgnMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAwZjBlMGQwYzBiMGEwOTA4MDcwNjA1MDQwMzAyMDEwMCcsICdoZXgnKVxuICApO1xuICBjb25zdCBiaXRnb1Jvb3QgPSBiaXAzMlxuICAgIC5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMmYyZTJkMmMyYjJhMjkyODI3MjYyNTI0MjMyMjIxMjAxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMCcsICdoZXgnKSlcbiAgICAubmV1dGVyZWQoKTtcblxuICBjb25zdCBrZXlzID0ge1xuICAgIHVzZXI6IHsgcHJ2OiB1c2VyUm9vdC50b0Jhc2U1OCgpLCBwdWI6IHVzZXJSb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9LFxuICAgIGJhY2t1cDogeyBwcnY6IGJhY2t1cFJvb3QudG9CYXNlNTgoKSwgcHViOiBiYWNrdXBSb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9LFxuICAgIGJpdGdvOiB7IHB1YjogYml0Z29Sb290LnRvQmFzZTU4KCkgfSxcbiAgfTtcblxuICBpdCgnc2lnbmVkIG1vZGUgcmUtZW5jcnlwdHMgY2hpbGQgeHBydnMgdW5kZXIgYSBzaW5nbGUgZXBoZW1lcmFsIHBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzc3BocmFzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkLCBlbmNyeXB0aW9uVmVyc2lvbiB9KSA9PiB7XG4gICAgICBwYXNzcGhyYXNlcy5wdXNoKHBhc3N3b3JkKTtcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHJldHVybiBgZW5jKCR7aW5wdXR9KWA7XG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBrZXlzLFxuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgfSk7XG5cbiAgICByZXN1bHQudXNlcktleS5zaG91bGQuZXF1YWwoYGVuYygke2tleXMudXNlci5wcnZ9KWApO1xuICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtrZXlzLmJhY2t1cC5wcnZ9KWApO1xuICAgIHJlc3VsdC5iaXRnb0tleS5zaG91bGQuZXF1YWwoa2V5cy5iaXRnby5wdWIpO1xuICAgIChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHBhc3NwaHJhc2VzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICBwYXNzcGhyYXNlc1swXS5zaG91bGQuZXF1YWwocGFzc3BocmFzZXNbMV0pO1xuICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSk7XG4gICAgZW5jcnlwdC5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDIpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBub24tcHJpdmF0ZSBjaGlsZCBrZXlzIGluIHNpZ25lZCBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0OiBzaW5vbi5zdHViKCkgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLFxuICAgICAga2V5czogeyB1c2VyOiB7IHBydjoga2V5cy51c2VyLnB1YiwgcHViOiBrZXlzLnVzZXIucHViIH0sIGJhY2t1cDoga2V5cy5iYWNrdXAsIGJpdGdvOiBrZXlzLmJpdGdvIH0sXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tdXN0IGJlIHByaXZhdGUgeHBydnMvKTtcbiAgfSk7XG5cbiAgaXQoJ3Vuc2lnbmVkIG1vZGUgcmV0dXJucyBwdWJzIGFuZCBuZXZlciBlbmNyeXB0cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuY3J5cHQgc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIGtleXMsXG4gICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGtleXMudXNlci5wdWIpO1xuICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKGtleXMuYmFja3VwLnB1Yik7XG4gICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbChrZXlzLmJpdGdvLnB1Yik7XG4gICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgdW5zdXBwb3J0ZWQgc2xvdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdlZGRzYU1wYycsXG4gICAgICBrZXlzOiB7IGNvbW1vbktleWNoYWluOiAnY2snLCB1c2VyOiAndScsIGJhY2t1cDogJ2InIH0sXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3Qgc3VwcG9ydGVkIHlldC8pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWQyNTUxOU11bHRpc2lnIChhbGdvKScsICgpID0+IHtcbiAgICAvLyBHb2xkZW4gdmVjdG9ycyBnZW5lcmF0ZWQgd2l0aCBhbGdvc2RrOiBlbmNvZGVBZGRyZXNzKEJ1ZmZlci5hbGxvYygzMiwgbikpIGFuZFxuICAgIC8vIG11bHRpc2lnQWRkcmVzcyh7IHZlcnNpb246IDEsIHRocmVzaG9sZDogMiwgYWRkcnM6IFsuLi5dIH0pIG92ZXIgdGhlIHNhbWUgcHVicy5cbiAgICBjb25zdCBlZEtleXMgPSB7XG4gICAgICB1c2VyOiB7IGtpbmQ6ICdzZWVkJywgc2VlZDogJzExJy5yZXBlYXQoMzIpLCBwdWI6ICcyMScucmVwZWF0KDMyKSB9LFxuICAgICAgYmFja3VwOiB7IGtpbmQ6ICdleHRlbmRlZCcsIGtMOiAnMzEnLnJlcGVhdCgzMiksIGtSOiAnNDEnLnJlcGVhdCgzMiksIHB1YjogJzUxJy5yZXBlYXQoMzIpIH0sXG4gICAgICBiaXRnbzogeyBwdWI6ICc2MScucmVwZWF0KDMyKSB9LFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICBpdCgndW5zaWduZWQgbW9kZSByZXR1cm5zIEFMR08gYWRkcmVzc2VzIGFuZCB0aGUgbXVsdGlzaWcgcm9vdEFkZHJlc3MsIGFuZCBuZXZlciBlbmNyeXB0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbmNyeXB0IHNob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0IH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgICBiaXRnbyxcbiAgICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAga2V5czogZWRLZXlzLFxuICAgICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnIHx8IHJlc3VsdC5tb2RlICE9PSAndW5zaWduZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgdW5zaWduZWQgZWQyNTUxOU11bHRpc2lnIGtleSBwYXJhbXMnKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKCdFRVFTQ0lKQkVFUVNDSUpCRUVRU0NJSkJFRVFTQ0lKQkVFUVNDSUpCRUVRU0NJSkJFRVFZTkk1M0hNJyk7XG4gICAgICByZXN1bHQuYmFja3VwS2V5LnNob3VsZC5lcXVhbCgnS0ZJVkNVS1JLRklWQ1VLUktGSVZDVUtSS0ZJVkNVS1JLRklWQ1VLUktGSVZDVUtSS0ZJMzNCM0FPWScpO1xuICAgICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbCgnTUZRV0NZTEJNRlFXQ1lMQk1GUVdDWUxCTUZRV0NZTEJNRlFXQ1lMQk1GUVdDWUxCTUZRUzNLSEVITScpO1xuICAgICAgcmVzdWx0LnJvb3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnTEhXRUlPVTJVSVBTS0NaM1hNS1FVS1JZWTNGTTZYVFpLQkhETUlVNzM3T1FRRVhRVFlTR0RGT0hETScpO1xuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117NTh9JC8pO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZXh0ZXJuYWxCYWNrdXBTaWduZXInKTtcbiAgICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduZWQgbW9kZSBlbmNyeXB0cyB0aGUgNTgtY2hhciBzZWVkIGFuZCByZXR1cm5zIGEgbGF6eSBleHRlcm5hbCBiYWNrdXAgc2lnbmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVhbCBkZXJpdmF0aW9uIG91dHB1dCwgd2l0aCBhIGRpc3RpbmN0IEJpdEdvIHJvb3Qgc28gdGhlIGJhY2t1cCBjaGlsZCBhbmQgdGhlIEJpdEdvIGNoaWxkXG4gICAgICAvLyBhcmUgZGlmZmVyZW50IGtleXMg4oCUIGEgc2xvdCBzd2FwIGJldHdlZW4gdGhlbSBtdXN0IGNoYW5nZSB0aGUgb3V0cHV0cy5cbiAgICAgIGNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcbiAgICAgIGNvbnN0IGJhY2t1cENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgICBjb25zdCBiaXRnb1NlZWQgPSBCdWZmZXIuYWxsb2MoMzIsIDB4MjIpO1xuICAgICAgY29uc3QgYml0Z29Sb290UHViID0gQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoYml0Z29TZWVkKSk7XG4gICAgICBjb25zdCBiaXRnb0NoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhjZCk7XG4gICAgICBjb25zdCBlZDI1NTE5Um9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgICAgLi4ubWFrZVJvb3RzKHsgdXNlcjogJ3gnLCBiYWNrdXA6ICd5JywgYml0Z286ICd6JyB9KSxcbiAgICAgICAgZWQyNTUxOU11bHRpc2lnOiB7XG4gICAgICAgICAgdXNlcjogU1RSS0VZX1NFRUQsXG4gICAgICAgICAgYmFja3VwOiB7IHBydjogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogZW5jb2RlRWQyNTUxOUNoYWluQ29kZShiYWNrdXBDaGFpbkNvZGUpIH0sXG4gICAgICAgICAgYml0Z286IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoYml0Z29Sb290UHViLCBiaXRnb0NoYWluQ29kZSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVyaXZlZCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHtcbiAgICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAgYWNjb3VudDogMCxcbiAgICAgICAgcm9vdHM6IGVkMjU1MTlSb290cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKGRlcml2ZWQuc2xvdCAhPT0gJ2VkMjU1MTlNdWx0aXNpZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZDI1NTE5TXVsdGlzaWcgc2xvdCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXNzcGhyYXNlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICh7IGlucHV0LCBwYXNzd29yZCwgZW5jcnlwdGlvblZlcnNpb24gfSkgPT4ge1xuICAgICAgICBwYXNzcGhyYXNlcy5wdXNoKHBhc3N3b3JkKTtcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb24uc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICByZXR1cm4gYGVuYygke2lucHV0fSlgO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46ICd0YWxnbycsXG4gICAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgICBrZXlzOiBkZXJpdmVkLmtleXMsXG4gICAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnIHx8IHJlc3VsdC5tb2RlICE9PSAnc2lnbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHNpZ25lZCBlZDI1NTE5TXVsdGlzaWcga2V5IHBhcmFtcycpO1xuICAgICAgfVxuXG4gICAgICBkZXJpdmVkLmtleXMudXNlci5wdWIuc2hvdWxkLm5vdC5lcXVhbChkZXJpdmVkLmtleXMuYmFja3VwLnB1Yik7XG4gICAgICBkZXJpdmVkLmtleXMuYmFja3VwLnB1Yi5zaG91bGQubm90LmVxdWFsKGRlcml2ZWQua2V5cy5iaXRnby5wdWIpO1xuXG4gICAgICAvLyB1c2VyIHNlZWQgcmUtZW5jb2RlZCBhcyB0aGUgNTgtY2hhciBBTEdPIHNlZWQgYmVmb3JlIGVuY3J5cHRpb247IG5vIGJhY2t1cEtleSDigJQgdGhlXG4gICAgICAvLyBzZWVkbGVzcyBiYWNrdXAgY2hpbGQgb25seSBleGlzdHMgYXMgdGhlIGxhenkgc2lnbmVyLlxuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtlbmNvZGVBbGdvS2V5KEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy51c2VyLnNlZWQsICdoZXgnKSl9KWApO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwS2V5Jyk7XG4gICAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLmVxdWFsKGVuY29kZUFsZ29LZXkoQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLmJpdGdvLnB1YiwgJ2hleCcpKSk7XG4gICAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117NTh9JC8pO1xuICAgICAgLy8gVGhlIHdhbGxldCdzIG9uLWNoYWluIGFkZHJlc3Mgb3ZlciB0aGUgdGhyZWUgZGlzdGluY3QgY2hpbGRyZW4sIGluIHdhbGxldC1jcmVhdGlvbiBvcmRlci5cbiAgICAgIHJlc3VsdC5yb290QWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgIGFsZ29NdWx0aXNpZ0FkZHJlc3MoMSwgMiwgW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy51c2VyLnB1YiwgJ2hleCcpLFxuICAgICAgICAgIEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy5iYWNrdXAucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLmJpdGdvLnB1YiwgJ2hleCcpLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5yb290QWRkcmVzcy5zaG91bGQubWF0Y2goL15bQS1aMi03XXs1OH0kLyk7XG4gICAgICByZXN1bHQud2FsbGV0UGFzc3BocmFzZS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHBhc3NwaHJhc2VzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSk7XG4gICAgICBlbmNyeXB0LmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgIC8vIHRoZSBsYXp5IHNpZ25lciBzaWducyB3aXRoIHRoZSByZWFsIGV4dGVuZGVkIGtleSBoYWx2ZXMgYW5kIGl0cyBwdWIgbWF0Y2hlcyB0aGUgYmFja3VwIGNoaWxkXG4gICAgICByZXN1bHQuZXh0ZXJuYWxCYWNrdXBTaWduZXIucHVibGljS2V5LnNob3VsZC5lcXVhbChkZXJpdmVkLmtleXMuYmFja3VwLnB1Yik7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2RlYWRiZWVmJywgJ2hleCcpO1xuICAgICAgY29uc3QgeyBzaWduYXR1cmUgfSA9IGF3YWl0IHJlc3VsdC5leHRlcm5hbEJhY2t1cFNpZ25lci5zaWduKG1lc3NhZ2UpO1xuICAgICAgc2lnbmF0dXJlLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezEyOH0kLyk7XG4gICAgICBlZDI1NTE5XG4gICAgICAgIC52ZXJpZnkoXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JykpLFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpLFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHJlc3VsdC5leHRlcm5hbEJhY2t1cFNpZ25lci5wdWJsaWNLZXksICdoZXgnKSlcbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgc2xvdC0yIGNvaW5zIHRoYXQgaGF2ZSBubyByZWdpc3RyeSBlbnRyeSB5ZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdDogc2lub24uc3R1YigpIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgICBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46ICd4bG0nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAga2V5czogZWRLZXlzLFxuICAgICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2NvaW4gJ3hsbScgZWQyNTUxOU11bHRpc2lnIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBlZDI1NTE5IGNoaWxkcmVuIHdpdGggbWFsZm9ybWVkIHB1YmxpYyBrZXlzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgICAgYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICAgIGJpdGdvLFxuICAgICAgICBjb2luOiAnYWxnbycsXG4gICAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgICBrZXlzOiB7IC4uLmVkS2V5cywgYml0Z286IHsgcHViOiAnMTIzNCcgfSB9LFxuICAgICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZWQyNTUxOSBjaGlsZCBwdWJsaWMga2V5cyBtdXN0IGJlIDMyIGJ5dGVzLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdTYWZlIGVjZHNhTXBjIGRlcml2ZSDihpIgc2lnbiAoZ2F0ZSknLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdkZXJpdmVzIGEgY2hpbGQsIHJlYnVpbGRzIDItb2YtMiBzaGFyZXMsIGFuZCBzaWducyBhIG1lc3NhZ2UgdmVyaWZpZWQgYXQgbS8wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsIHZyZkJhY2t1cF0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcblxuICAgIGNvbnN0IHJvb3RDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyRGtnLmdldEtleVNoYXJlKCkpO1xuXG4gICAgY29uc3QgeyBjb21tb25LZXljaGFpbiwgdXNlckNoaWxkLCBiYWNrdXBDaGlsZCB9ID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmRlcml2ZVNhZmVFY2RzYU1wY0NoaWxkKHtcbiAgICAgIHVzZXJSb290OiB7IHNpZ25pbmc6IHVzZXJEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksIHZyZjogdnJmVXNlci5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICBiYWNrdXBSb290OiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIGNvaW5UeXBlOiA2MCxcbiAgICAgIHNhZmVTbG90T3JkaW5hbDogMyxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkZXJpdmVkIGNoaWxkIG11c3QgbmV2ZXIgYmUgdGhlIHJvb3QgKHRoZSBcInJvb3QgZW52ZWxvcGUgaW4gdGhlIGNoaWxkIHBvc2l0aW9uXCIgZm9vdGd1bikuXG4gICAgY29tbW9uS2V5Y2hhaW4uc2hvdWxkLm5vdC5lcXVhbChyb290Q29tbW9uS2V5Y2hhaW4pO1xuXG4gICAgLy8gUmVidWlsZCAyLW9mLTIga2V5c2hhcmVzIGZyb20gdGhlIGRlcml2ZWQgcmVkdWNlZCBDQk9SLCBleGFjdGx5IGFzIHRoZSBzaWduZXIncyByZXRyb2ZpdCBkb2VzLlxuICAgIGNvbnN0IHRvUmV0cm9maXQgPSAoYjY0OiBzdHJpbmcpOiBEa2xzVHlwZXMuUmV0cm9maXREYXRhID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZWQgPSBEa2xzVHlwZXMuZ2V0RGVjb2RlZFJlZHVjZWRLZXlTaGFyZShCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4U2hhcmU6IHtcbiAgICAgICAgICB4OiBCdWZmZXIuZnJvbShyZWR1Y2VkLnBydikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHk6IEJ1ZmZlci5mcm9tKHJlZHVjZWQucHViKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgY2hhaW5jb2RlOiBCdWZmZXIuZnJvbShyZWR1Y2VkLnJvb3RDaGFpbkNvZGUpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSxcbiAgICAgICAgeGlMaXN0OiByZWR1Y2VkLnhMaXN0LnNsaWNlKDAsIDIpLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFt1c2VyMm9mMiwgYmFja3VwMm9mMl0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGUyb2YyS2V5U2hhcmVzKFxuICAgICAgdG9SZXRyb2ZpdCh1c2VyQ2hpbGQpLFxuICAgICAgdG9SZXRyb2ZpdChiYWNrdXBDaGlsZClcbiAgICApO1xuXG4gICAgY29uc3QgbWVzc2FnZUhhc2ggPSBCdWZmZXIuZnJvbSgnMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZicsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IERrbHNEc2cuRHNnKHVzZXIyb2YyLmdldEtleVNoYXJlKCksIDAsICdtLzAnLCBtZXNzYWdlSGFzaCk7XG4gICAgY29uc3QgYmFja3VwRHNnID0gbmV3IERrbHNEc2cuRHNnKGJhY2t1cDJvZjIuZ2V0S2V5U2hhcmUoKSwgMSwgJ20vMCcsIG1lc3NhZ2VIYXNoKTtcbiAgICBjb25zdCBzaWduYXR1cmVTdHJpbmcgPSBEa2xzVXRpbHMudmVyaWZ5QW5kQ29udmVydERrbHNTaWduYXR1cmUoXG4gICAgICBtZXNzYWdlSGFzaCxcbiAgICAgIChhd2FpdCBEa2xzVXRpbHMuZXhlY3V0ZVRpbGxSb3VuZCg1LCB1c2VyRHNnLCBiYWNrdXBEc2cpKSBhcyBEa2xzVHlwZXMuRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSxcbiAgICAgIGNvbW1vbktleWNoYWluLFxuICAgICAgJ20vMCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZVxuICAgICk7XG5cbiAgICAvLyB2ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZSByZWNvdmVycyB0aGUgcHVia2V5IGZyb20gdGhlIHNpZ25hdHVyZSBhbmQgY2hlY2tzIGl0IGFnYWluc3RcbiAgICAvLyBkZXJpdmVVbmhhcmRlbmVkKGNoaWxkQ0ssICdtLzAnKTsgaXQgdGhyb3dzIG9uIG1pc21hdGNoLCBzbyBhIHJldHVybmVkIHN0cmluZyBpcyBwcm9vZi5cbiAgICBzaWduYXR1cmVTdHJpbmcuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgc2lnbmF0dXJlU3RyaW5nLnNob3VsZC5tYXRjaCgvXlxcZCs6WzAtOWEtZl0rOlswLTlhLWZdKzpbMC05YS1mXSskLyk7XG4gIH0pO1xufSk7XG4iXX0=