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

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.
@@ -442,7 +442,7 @@ describe('buildSafeRecoverKeyParams', () => {
442
442
  mode: 'signed',
443
443
  }).should.be.rejectedWith(/not supported yet/);
444
444
  });
445
- describe('ed25519Multisig (algo)', () => {
445
+ describe('ed25519Multisig', () => {
446
446
  // Golden vectors generated with algosdk: encodeAddress(Buffer.alloc(32, n)) and
447
447
  // multisigAddress({ version: 1, threshold: 2, addrs: [...] }) over the same pubs.
448
448
  const edKeys = {
@@ -468,6 +468,7 @@ describe('buildSafeRecoverKeyParams', () => {
468
468
  result.userKey.should.equal('EEQSCIJBEEQSCIJBEEQSCIJBEEQSCIJBEEQSCIJBEEQSCIJBEEQYNI53HM');
469
469
  result.backupKey.should.equal('KFIVCUKRKFIVCUKRKFIVCUKRKFIVCUKRKFIVCUKRKFIVCUKRKFI33B3AOY');
470
470
  result.bitgoKey.should.equal('MFQWCYLBMFQWCYLBMFQWCYLBMFQWCYLBMFQWCYLBMFQWCYLBMFQS3KHEHM');
471
+ (0, assert_1.default)(result.rootAddress);
471
472
  result.rootAddress.should.equal('LHWEIOU2UIPSKCZ3XMKQUKRYY3FM6XTZKBHDMIU737OQQEXQTYSGDFOHDM');
472
473
  result.userKey.should.match(/^[A-Z2-7]{58}$/);
473
474
  result.should.not.have.property('walletPassphrase');
@@ -525,6 +526,7 @@ describe('buildSafeRecoverKeyParams', () => {
525
526
  result.bitgoKey.should.equal((0, src_1.encodeAlgoKey)(Buffer.from(derived.keys.bitgo.pub, 'hex')));
526
527
  result.bitgoKey.should.match(/^[A-Z2-7]{58}$/);
527
528
  // The wallet's on-chain address over the three distinct children, in wallet-creation order.
529
+ (0, assert_1.default)(result.rootAddress);
528
530
  result.rootAddress.should.equal((0, src_1.algoMultisigAddress)(1, 2, [
529
531
  Buffer.from(derived.keys.user.pub, 'hex'),
530
532
  Buffer.from(derived.keys.backup.pub, 'hex'),
@@ -544,6 +546,45 @@ describe('buildSafeRecoverKeyParams', () => {
544
546
  .verify(new Uint8Array(Buffer.from(signature, 'hex')), new Uint8Array(message), new Uint8Array(Buffer.from(result.externalBackupSigner.publicKey, 'hex')))
545
547
  .should.equal(true);
546
548
  });
549
+ for (const coin of ['hbar', 'thbar']) {
550
+ for (const mode of ['signed', 'unsigned']) {
551
+ it(`${coin} ${mode} mode encodes Hedera keys without overwriting the caller's rootAddress`, async () => {
552
+ const encrypt = sinon.stub().callsFake(async ({ input }) => `enc(${input})`);
553
+ const bitgo = { encrypt };
554
+ const result = await (0, recovery_1.buildSafeRecoverKeyParams)({
555
+ bitgo,
556
+ coin,
557
+ slot: 'ed25519Multisig',
558
+ keys: edKeys,
559
+ mode,
560
+ });
561
+ (0, assert_1.default)(!('rootAddress' in result));
562
+ const rootAddress = '0.0.12345';
563
+ assert_1.default.strictEqual({ rootAddress, ...result }.rootAddress, rootAddress);
564
+ result.bitgoKey.should.equal('302a300506032b6570032100' + edKeys.bitgo.pub);
565
+ if (result.mode === 'unsigned') {
566
+ result.userKey.should.equal('302a300506032b6570032100' + edKeys.user.pub);
567
+ result.backupKey.should.equal('302a300506032b6570032100' + edKeys.backup.pub);
568
+ result.should.not.have.property('walletPassphrase');
569
+ result.should.not.have.property('externalBackupSigner');
570
+ sinon.assert.notCalled(encrypt);
571
+ }
572
+ else {
573
+ const encodedSeed = '302e020100300506032b657004220420' + edKeys.user.seed;
574
+ result.userKey.should.equal(`enc(${encodedSeed})`);
575
+ result.should.not.have.property('backupKey');
576
+ result.externalBackupSigner.publicKey.should.equal(edKeys.backup.pub);
577
+ result.walletPassphrase.should.match(/^[0-9a-f]{64}$/);
578
+ sinon.assert.calledOnce(encrypt);
579
+ sinon.assert.calledWithExactly(encrypt, {
580
+ input: encodedSeed,
581
+ password: result.walletPassphrase,
582
+ encryptionVersion: 1,
583
+ });
584
+ }
585
+ });
586
+ }
587
+ }
547
588
  it('rejects slot-2 coins that have no registry entry yet', async () => {
548
589
  const bitgo = { encrypt: sinon.stub() };
549
590
  await (0, recovery_1.buildSafeRecoverKeyParams)({
@@ -603,4 +644,4 @@ describe('Safe ecdsaMpc derive → sign (gate)', function () {
603
644
  signatureString.should.match(/^\d+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+$/);
604
645
  });
605
646
  });
606
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLG1EQUE2QztBQUM3QyxtREFBZ0Q7QUFDaEQsdURBQXlDO0FBQ3pDLHlEQUF1SDtBQUN2SCx1RkFBNEY7QUFDNUYseURBQXNFO0FBQ3RFLGtFQUs2QztBQUM3Qyx5Q0FNeUI7QUFFekIsaUVBQWtGO0FBQ2xGLGlGQUE0RjtBQUU1RiwrRkFBK0Y7QUFDL0YsMERBQTBEO0FBQzFELCtFQUFpRTtBQUVqRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFFakMsU0FBUyxhQUFhLENBQUMsV0FBb0U7SUFDekYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUEyQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEYsQ0FBQztBQUM1QixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsY0FBYyxDQUFDLE9BQStCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxT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Q25GLE1BQU0sZUFBZSxHQUFHLHVCQUFTLENBQUMsNkJBQTZCLENBQzdELFdBQVcsRUFDWCxDQUFDLE1BQU0sdUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUF3QyxFQUNoRyxjQUFjLEVBQ2QsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQztRQUVGLDZGQUE2RjtRQUM3RiwwRkFBMEY7UUFDMUYsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgZWQyNTUxOSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvZWQyNTUxOSc7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby1iZXRhL3NqY2wnO1xuaW1wb3J0IHsgRGtsc0RzZywgRGtsc1R5cGVzLCBEa2xzVXRpbHMsIERrbHNWcmZVdGlscywgTVBTVXRpbCwgTXBzRGVyaXZlLCBNcHNWcmZVdGlscyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5pbXBvcnQgeyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2Vycm9ycyc7XG5pbXBvcnQge1xuICBEZWNyeXB0ZWRTYWZlUm9vdHMsXG4gIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMsXG4gIGRlY3J5cHRTYWZlS2V5Y2FyZCxcbiAgZGVyaXZlU2FmZVdhbGxldEtleXMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL3JlY292ZXJ5JztcbmltcG9ydCB7XG4gIGFsZ29NdWx0aXNpZ0FkZHJlc3MsXG4gIGVuY29kZUFsZ29LZXksXG4gIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGVuY29kZUVkMjU1MTlDaGFpbkNvZGUsXG4gIHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYml0Z29CYXNlJztcbmltcG9ydCB7IGdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VkZHNhL2VkZHNhJztcbmltcG9ydCB7IHNpZ25FZGRzYU1wY1YyUmVjb3ZlcnlUeCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5cbi8vIFRoZSBlZDI1NTE5IHNvZnQgY28tc2lnbmVyIHByaXZhdGUgaGFsdmVzIGFzc2VydGVkIGJlbG93IGFyZSBwaW5uZWQgY3Jvc3MtcmVwbyBpbiB0aGUgc2hhcmVkXG4vLyBHVjEgZml4dHVyZSAoYnl0ZS1pZGVudGljYWwgdG8gd2FsbGV0LXBsYXRmb3JtJ3MgY29weSkuXG5pbXBvcnQgKiBhcyBiaXA0NEZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9zYWZlQmlwNDRWZWN0b3JzLmpzb24nO1xuXG5jb25zdCBQQVNTV09SRCA9ICdzYWZlLXBhc3N3b3JkJztcblxuZnVuY3Rpb24gbWFrZU1vY2tCaXRHbyhkZWNyeXB0SW1wbDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZyk6IEJpdEdvQmFzZSB7XG4gIHJldHVybiB7XG4gICAgZGVjcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gZGVjcnlwdEltcGwocGFyYW1zKSksXG4gIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG59XG5cbi8qKiBBIGZha2UgZGVjcnlwdCB0aGF0IG9ubHkgcmVjb2duaXplcyB0aGUgdXNlci9iYWNrdXAgdG9rZW5zOyBhbnkgb3RoZXIgaW5wdXQgKGUuZy4gYSBCb3ggQyBwdWJsaWMpIHRocm93cy4gKi9cbmZ1bmN0aW9uIG1ha2VEZWNyeXB0TWFwKGVudHJpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gc3RyaW5nIHtcbiAgcmV0dXJuICh7IHBhc3N3b3JkLCBpbnB1dCB9KSA9PiB7XG4gICAgcGFzc3dvcmQuc2hvdWxkLmVxdWFsKFBBU1NXT1JEKTtcbiAgICBpZiAoIShpbnB1dCBpbiBlbnRyaWVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGRlY3J5cHQgaW5wdXQ6ICR7aW5wdXR9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzW2lucHV0XTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYm94KHZhbHVlczoge1xuICBzZWNwMjU2azFNdWx0aXNpZzogc3RyaW5nO1xuICBlZDI1NTE5TXVsdGlzaWc6IHN0cmluZyB8IHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH07XG4gIGVjZHNhTXBjOiBzdHJpbmc7XG4gIGVkZHNhTXBjOiBzdHJpbmc7XG59KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XG59XG5cbmRlc2NyaWJlKCdkZWNyeXB0U2FmZUtleWNhcmQnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgb25jaGFpbiByb290cyB0byBzdHJpbmdzIGFuZCByZXR1cm5zIEJveCBDIHZlcmJhdGltJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtYmFja3VwLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiB7IHBydjogJ2VuYy1iYWNrdXAtZWQyNTUxOScsIGNoYWluQ29kZTogJ0MnLnJlcGVhdCg1MikgfSxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLWJhY2t1cC1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy1iYWNrdXAtZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAneHB1Yi1zZWNwLWJpdGdvJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ3B1Yi1lZDI1NTE5LWJpdGdvJyxcbiAgICAgIGVjZHNhTXBjOiAnY29tbW9uLWVjZHNhLWJpdGdvJyxcbiAgICAgIGVkZHNhTXBjOiAnY29tbW9uLWVkZHNhLWJpdGdvJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1wY1VzZXIgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci12cmYnKVxuICAgICk7XG4gICAgY29uc3QgbXBjQmFja3VwID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJylcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKFxuICAgICAgbWFrZURlY3J5cHRNYXAoe1xuICAgICAgICAnZW5jLXVzZXItc2VjcCc6ICd4cHJ2LXVzZXInLFxuICAgICAgICAnZW5jLWJhY2t1cC1zZWNwJzogJ3hwcnYtYmFja3VwJyxcbiAgICAgICAgJ2VuYy11c2VyLWVkMjU1MTknOiAnUy11c2VyLXNlZWQnLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZDI1NTE5JzogJ1MtYmFja3VwLXNlZWQnLFxuICAgICAgICAnZW5jLXVzZXItZWNkc2EnOiBtcGNVc2VyLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtYmFja3VwLWVjZHNhJzogbXBjQmFja3VwLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtdXNlci1lZGRzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWRkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IGJhY2t1cEJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiBiaXRnb0JveCxcbiAgICAgIHBhc3N3b3JkOiBQQVNTV09SRCxcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zZWNwMjU2azFNdWx0aXNpZy51c2VyLnNob3VsZC5lcXVhbCgneHBydi11c2VyJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJhY2t1cC5zaG91bGQuZXF1YWwoJ3hwcnYtYmFja3VwJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgneHB1Yi1zZWNwLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLnVzZXIuc2hvdWxkLmVxdWFsKCdTLXVzZXItc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLnBydi5zaG91bGQuZXF1YWwoJ1MtYmFja3VwLXNlZWQnKTtcbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJhY2t1cC5jaGFpbkNvZGUuc2hvdWxkLmVxdWFsKCdDJy5yZXBlYXQoNTIpKTtcbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgncHViLWVkMjU1MTktYml0Z28nKTtcblxuICAgIHJlc3VsdC5lY2RzYU1wYy51c2VyLnNpZ25pbmcudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMudXNlci52cmYudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgndXNlci12cmYnKS50b1N0cmluZygnaGV4JykpO1xuICAgIHJlc3VsdC5lY2RzYU1wYy5iYWNrdXAuc2lnbmluZy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJhY2t1cC52cmYudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgnYmFja3VwLXZyZicpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJpdGdvLnNob3VsZC5lcXVhbCgnY29tbW9uLWVjZHNhLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWRkc2FNcGMuYml0Z28uc2hvdWxkLmVxdWFsKCdjb21tb24tZWRkc2EtYml0Z28nKTtcblxuICAgIC8vIDQgc2xvdHMgw5cgKHVzZXIgKyBiYWNrdXApID0gOCBkZWNyeXB0czsgQml0R28gKEJveCBDKSBpcyBuZXZlciBkZWNyeXB0ZWQuXG4gICAgKGJpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgdGhlIHNlZWQgZnJvbSBhbiBvYmplY3QtZm9ybSBlZDI1NTE5TXVsdGlzaWcgYmFja3VwIGVudHJ5JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy1iYWNrdXAtc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHsgcHJ2OiAnZW5jLWJhY2t1cC1lZDI1NTE5JywgY2hhaW5Db2RlOiAnQScucmVwZWF0KDUyKSB9LFxuICAgICAgZWNkc2FNcGM6ICdlbmMtYmFja3VwLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLWJhY2t1cC1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z29Cb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd4cHViLXNlY3AtYml0Z28nLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAncHViLWVkMjU1MTktYml0Z28nLFxuICAgICAgZWNkc2FNcGM6ICdjb21tb24tZWNkc2EtYml0Z28nLFxuICAgICAgZWRkc2FNcGM6ICdjb21tb24tZWRkc2EtYml0Z28nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbXBjVXNlciA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpXG4gICAgKTtcbiAgICBjb25zdCBtcGNCYWNrdXAgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC12cmYnKVxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oXG4gICAgICBtYWtlRGVjcnlwdE1hcCh7XG4gICAgICAgICdlbmMtdXNlci1zZWNwJzogJ3hwcnYtdXNlcicsXG4gICAgICAgICdlbmMtYmFja3VwLXNlY3AnOiAneHBydi1iYWNrdXAnLFxuICAgICAgICAnZW5jLXVzZXItZWQyNTUxOSc6ICdTLXVzZXItc2VlZCcsXG4gICAgICAgICdlbmMtYmFja3VwLWVkMjU1MTknOiAnUy1iYWNrdXAtc2VlZCcsXG4gICAgICAgICdlbmMtdXNlci1lY2RzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWNkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy11c2VyLWVkZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZGRzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogYmFja3VwQm94LFxuICAgICAgYml0Z29LZXlCb3g6IGJpdGdvQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAucHJ2LnNob3VsZC5lcXVhbCgnUy1iYWNrdXAtc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLmNoYWluQ29kZS5zaG91bGQuZXF1YWwoJ0EnLnJlcGVhdCg1MikpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhbiBlZDI1NTE5IGNoYWluLWNvZGUgZW50cnkgaW4gYSBub24tYmFja3VwIHNsb3QgKGZhaWwgY2xvc2VkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6IHsgcHJ2OiAnZW5jLXVzZXItc2VjcCcsIGNoYWluQ29kZTogJ0EnLnJlcGVhdCg1MikgfSxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbzogbWFrZU1vY2tCaXRHbyhtYWtlRGVjcnlwdE1hcCh7fSkpLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogdXNlckJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiB1c2VyQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3VuZXhwZWN0ZWQgZWQyNTUxOSBjaGFpbi1jb2RlIGVudHJ5Lyk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3MgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB3aGVuIGRlY3J5cHRpb24gZmFpbHMgKHdyb25nIHBhc3N3b3JkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnZW5jLXVzZXItc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICdlbmMtdXNlci1lZDI1NTE5JyxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLXVzZXItZWNkc2EnLFxuICAgICAgZWRkc2FNcGM6ICdlbmMtdXNlci1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXJnb24yOiB0YWcgZG9lcyBub3QgbWF0Y2gnKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiaXRnb0tleUJveDogdXNlckJveCxcbiAgICAgIHBhc3N3b3JkOiAnd3JvbmctcGFzc3dvcmQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW5jb3JyZWN0UGFzc3dvcmRFcnJvcik7XG4gIH0pO1xufSk7XG5cbmNvbnN0IE1QQ19ST09UID0geyBzaWduaW5nOiBCdWZmZXIuYWxsb2MoMCksIHZyZjogQnVmZmVyLmFsbG9jKDApIH07XG5cbmZ1bmN0aW9uIG1ha2VSb290cyhzZWNwOiB7IHVzZXI6IHN0cmluZzsgYmFja3VwOiBzdHJpbmc7IGJpdGdvOiBzdHJpbmcgfSk6IERlY3J5cHRlZFNhZmVSb290cyB7XG4gIHJldHVybiB7XG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6IHNlY3AsXG4gICAgZWQyNTUxOU11bHRpc2lnOiB7IHVzZXI6ICd1JywgYmFja3VwOiB7IHBydjogJ2InLCBjaGFpbkNvZGU6ICdjJyB9LCBiaXRnbzogJ2cnIH0sXG4gICAgZWNkc2FNcGM6IHsgdXNlcjogTVBDX1JPT1QsIGJhY2t1cDogTVBDX1JPT1QsIGJpdGdvOiAnZycgfSxcbiAgICBlZGRzYU1wYzogeyB1c2VyOiBNUENfUk9PVCwgYmFja3VwOiBNUENfUk9PVCwgYml0Z286ICdnJyB9LFxuICB9O1xufVxuXG5kZXNjcmliZSgnZGVyaXZlU2FmZVdhbGxldEtleXMnLCAoKSA9PiB7XG4gIGNvbnN0IHVzZXJSb290ID0gYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJywgJ2hleCcpKTtcbiAgY29uc3QgYmFja3VwUm9vdCA9IGJpcDMyLmZyb21TZWVkKFxuICAgIEJ1ZmZlci5mcm9tKCcxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMDBmMGUwZDBjMGIwYTA5MDgwNzA2MDUwNDAzMDIwMTAwJywgJ2hleCcpXG4gICk7XG4gIGNvbnN0IGJpdGdvUm9vdCA9IGJpcDMyXG4gICAgLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcyZjJlMmQyYzJiMmEyOTI4MjcyNjI1MjQyMzIyMjEyMDFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwJywgJ2hleCcpKVxuICAgIC5uZXV0ZXJlZCgpO1xuXG4gIGNvbnN0IHJvb3RzID0gbWFrZVJvb3RzKHtcbiAgICB1c2VyOiB1c2VyUm9vdC50b0Jhc2U1OCgpLFxuICAgIGJhY2t1cDogYmFja3VwUm9vdC50b0Jhc2U1OCgpLFxuICAgIGJpdGdvOiBiaXRnb1Jvb3QudG9CYXNlNTgoKSxcbiAgfSk7XG5cbiAgaXQoJ2Rlcml2ZXMgdGhlIEJJUDQ0IGNoaWxkIHRyaXBsZXQgZm9yIHNsb3QgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdidGMnLCBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBhY2NvdW50OiAwLCByb290cyB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgc2VjcDI1NmsxTXVsdGlzaWcgc2xvdCcpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzAnLzEnLzAnXCIpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIucHJ2LnNob3VsZC5lcXVhbCh1c2VyUm9vdC5kZXJpdmVQYXRoKFwibS80NCcvMCcvMScvMCdcIikudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLmVxdWFsKHVzZXJSb290LmRlcml2ZVBhdGgoXCJtLzQ0Jy8wJy8xJy8wJ1wiKS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5wcnYuc2hvdWxkLmVxdWFsKGJhY2t1cFJvb3QuZGVyaXZlUGF0aCgnbS80NC8wLzEvMCcpLnRvQmFzZTU4KCkpO1xuICAgIHJlc3VsdC5rZXlzLmJpdGdvLnB1Yi5zaG91bGQuZXF1YWwoYml0Z29Sb290LmRlcml2ZVBhdGgoJ20vNDQvMC8xLzAnKS50b0Jhc2U1OCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhcmllcyB0aGUgcGF0aCB3aXRoIHRoZSBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDIsIHJvb3RzIH0pO1xuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzAnLzEnLzInXCIpO1xuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgZWNkc2FNcGMgY2hpbGQgdmlhIHRoZSBES0xzIGNlcmVtb255JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsIHZyZkJhY2t1cF0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcblxuICAgIGNvbnN0IG1wY1Jvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVjZHNhTXBjOiB7XG4gICAgICAgIHVzZXI6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgICAgYmFja3VwOiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiaXRnbzogJ2cnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnZXRoJywgc2xvdDogJ2VjZHNhTXBjJywgYWNjb3VudDogMCwgcm9vdHM6IG1wY1Jvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ2VjZHNhTXBjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlY2RzYU1wYyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvNjAnLzMnLzAnXCIpO1xuICAgIHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICB9KTtcblxuICBpdCgnZGVyaXZlcyBhbmQgc2lnbnMgdGhlIGVkZHNhTXBjIHNsb3QtNCBCSVA0NCBjaGlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnLCBiaXRnb0RrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwLCB2cmZCaXRnb10gPSBhd2FpdCBNcHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1wY1Jvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVkZHNhTXBjOiB7XG4gICAgICAgIHVzZXI6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgICAgYmFja3VwOiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiaXRnbzogYml0Z29Ea2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ3NvbCcsIHNsb3Q6ICdlZGRzYU1wYycsIGFjY291bnQ6IDAsIHJvb3RzOiBtcGNSb290cyB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZGRzYU1wYycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZWRkc2FNcGMgc2xvdCcpO1xuICAgIH1cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy81MDEnLzQnLzAnXCIpO1xuXG4gICAgLy8gUGxheSBtaW50J3MgdXNlcuKGlEJpdEdvIHJvbGUgbG9jYWxseSBhdCB0aGUgc2FtZSBCSVA0NCBwYXRoOyBubyBkZXYtbWludGVkIHdhbGxldCBpcyBuZWVkZWQuXG4gICAgY29uc3QgdXNlck1pbnQgPSBuZXcgTXBzRGVyaXZlLkRlcml2ZSgzLCAyLCAwLCB1c2VyRGtnLmdldEtleVNoYXJlKCksIHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSwgcmVzdWx0LnBhdGgpO1xuICAgIGNvbnN0IGJpdGdvTWludCA9IG5ldyBNcHNEZXJpdmUuRGVyaXZlKDMsIDIsIDIsIGJpdGdvRGtnLmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIHJlc3VsdC5wYXRoKTtcbiAgICBjb25zdCBbdXNlclJvdW5kMCwgYml0Z29Sb3VuZDBdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJNaW50LmluaXREZXJpdmUoKSwgYml0Z29NaW50LmluaXREZXJpdmUoKV0pO1xuICAgIGNvbnN0IFt1c2VyUm91bmQxXSA9IHVzZXJNaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvUm91bmQwXSk7XG4gICAgY29uc3QgW2JpdGdvUm91bmQxXSA9IGJpdGdvTWludC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt1c2VyUm91bmQwXSk7XG4gICAgaWYgKCF1c2VyUm91bmQxIHx8ICFiaXRnb1JvdW5kMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCB1c2VyIGFuZCBCaXRHbyBkZXJpdmUgcm91bmQtMSBtZXNzYWdlcycpO1xuICAgIH1cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHVzZXJNaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvUm91bmQxXSksIFtdKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJpdGdvTWludC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt1c2VyUm91bmQxXSksIFtdKTtcbiAgICBjb25zdCBtaW50ZWRDaGlsZENvbW1vbktleWNoYWluID0gdXNlck1pbnQuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYml0Z29NaW50LmdldENvbW1vbktleWNoYWluKCksIG1pbnRlZENoaWxkQ29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQua2V5cy5jb21tb25LZXljaGFpbiwgbWludGVkQ2hpbGRDb21tb25LZXljaGFpbik7XG5cbiAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3NhZmUtcmVjb3ZlcnktcGFzc3BocmFzZSc7XG4gICAgY29uc3QgdXNlcktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQua2V5cy51c2VyKTtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgcmVzdWx0LmtleXMuYmFja3VwKTtcbiAgICBjb25zdCByb290Q29tbW9uS2V5Y2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHgoe1xuICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgnd3Jvbmcga2V5Y2hhaW4gbXVzdCBmYWlsJyksXG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYml0Z29LZXk6IHJvb3RDb21tb25LZXljaGFpbixcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgfSksXG4gICAgICAvY29tbW9uS2V5Q2hhaW4gZnJvbSBrZXljYXJkIGRvZXMgbm90IG1hdGNoIGJpdGdvS2V5L1xuICAgICk7XG5cbiAgICBjb25zdCBtcGMgPSBhd2FpdCBnZXRJbml0aWFsaXplZE1wY0luc3RhbmNlKCk7XG4gICAgZm9yIChjb25zdCBkZXJpdmF0aW9uUGF0aCBvZiBbJ20vMCcsICdtLzMnXSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKGBTYWZlIEVkRFNBIHJlY292ZXJ5ICR7ZGVyaXZhdGlvblBhdGh9YCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHgoe1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICB1c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGJpdGdvS2V5OiByZXN1bHQua2V5cy5jb21tb25LZXljaGFpbixcbiAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9IEJ1ZmZlci5mcm9tKGRlcml2ZWRLZXljaGFpbi5zbGljZSgwLCA2NCksICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgZWQyNTUxOS52ZXJpZnkobmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSksIG5ldyBVaW50OEFycmF5KHB1YmxpY0tleUJ5dGVzKSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgZWQyNTUxOU11bHRpc2lnIHRyaXBsZXQgYXQgdGhlIEJJUDQ0IHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgU1RSS0VZX1NFRUQgPSAnU0FBQUNBUURBUUNRTUJZSUJFRkFXREFOQllIUkFFSVNDTUtCS0ZRWERBTVJVR1k0RFVQQjZOS0knO1xuICAgIGNvbnN0IGJhY2t1cENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgLy8gRGlzdGluY3QgQml0R28gcm9vdCArIGNoYWluIGNvZGU6IGlmIHRoZSBCaXRHbyBjb21wb3NpdGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIGJhY2t1cCByb290LCB0aGVcbiAgICAvLyBiYWNrdXAgY2hpbGQgYW5kIHRoZSBCaXRHbyBjaGlsZCB3b3VsZCBiZSB0aGUgc2FtZSBrZXkgYW5kIGEgc2xvdCBzd2FwIHdvdWxkIHBhc3MgZXZlcnkgZ29sZGVuLlxuICAgIGNvbnN0IGJpdGdvU2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgMHgyMik7XG4gICAgY29uc3QgYml0Z29Sb290UHViID0gQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoYml0Z29TZWVkKSk7XG4gICAgY29uc3QgYml0Z29DaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4Y2QpO1xuICAgIGNvbnN0IGVkMjU1MTlSb290czogRGVjcnlwdGVkU2FmZVJvb3RzID0ge1xuICAgICAgLi4ucm9vdHMsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHtcbiAgICAgICAgdXNlcjogU1RSS0VZX1NFRUQsXG4gICAgICAgIGJhY2t1cDogeyBwcnY6IFNUUktFWV9TRUVELCBjaGFpbkNvZGU6IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoYmFja3VwQ2hhaW5Db2RlKSB9LFxuICAgICAgICBiaXRnbzogZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihiaXRnb1Jvb3RQdWIsIGJpdGdvQ2hhaW5Db2RlKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHtcbiAgICAgIGNvaW46ICdhbGdvJyxcbiAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIHJvb3RzOiBlZDI1NTE5Um9vdHMsXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5zbG90ICE9PSAnZWQyNTUxOU11bHRpc2lnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZDI1NTE5TXVsdGlzaWcgc2xvdCcpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzI4MycvMicvMCdcIik7XG5cbiAgICAvLyB1c2VyOiBoYXJkZW5lZCBTTElQLTAwMTAgY2hpbGQsIHBpbm5lZCB0byB0aGUgbGVhZidzIGdvbGRlbiB2ZWN0b3JcbiAgICByZXN1bHQua2V5cy51c2VyLmtpbmQuc2hvdWxkLmVxdWFsKCdzZWVkJyk7XG4gICAgcmVzdWx0LmtleXMudXNlci5zZWVkLnNob3VsZC5lcXVhbCgnYmU2OTUzMWViYmFiODUxYjY5YWE0MWJiOWM5MDVhZmVkNTJkMjZmZjQyNzhlNjQxODYwOWQ0ZDYwNTcwNTEwYycpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIucHViLnNob3VsZC5lcXVhbChcbiAgICAgIEJ1ZmZlci5mcm9tKGVkMjU1MTkuZ2V0UHVibGljS2V5KEJ1ZmZlci5mcm9tKHJlc3VsdC5rZXlzLnVzZXIuc2VlZCwgJ2hleCcpKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcblxuICAgIC8vIGJhY2t1cDogZXh0ZW5kZWQga2V5IHdob3NlIHB1YmxpYyBoYWxmIGVxdWFscyB0aGUgcHVibGljIHNvZnQtZGVyaXZlIG9mIHJvb3QgcHViIOKAliBjaGFpbiBjb2RlXG4gICAgY29uc3QgYml0Z29QdWIgPSAoXG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGVkMjU1MTlSb290cy5lZDI1NTE5TXVsdGlzaWcuYml0Z28sICdtLzQ0LzI4My8yLzAnKVxuICAgICkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5raW5kLnNob3VsZC5lcXVhbCgnZXh0ZW5kZWQnKTtcbiAgICAvLyBQaW4gdGhlIHByaXZhdGUgaGFsdmVzIHRvIHRoZSBjcm9zcy1yZXBvIEdWMSBnb2xkZW4gdmVjdG9yIGZvciB0aGlzIHBhdGguXG4gICAgY29uc3QgYWxnb1NvZnQgPSBiaXA0NEZpeHR1cmUuZWQyNTUxOVNvZnQudmVjdG9ycy5maW5kKCh2KSA9PiB2LnBhdGggPT09ICdtLzQ0LzI4My8yLzAnKTtcbiAgICBpZiAoYWxnb1NvZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXh0dXJlIGlzIG1pc3NpbmcgdGhlIG0vNDQvMjgzLzIvMCBzb2Z0IGNvLXNpZ25lciB2ZWN0b3InKTtcbiAgICB9XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLmtMLnNob3VsZC5lcXVhbChhbGdvU29mdC5jaGlsZEtMSGV4KTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAua1Iuc2hvdWxkLmVxdWFsKGFsZ29Tb2Z0LmNoaWxkS1JIZXgpO1xuICAgIC8vIFdpdGggZGlzdGluY3Qgcm9vdHMgdGhlIHRocmVlIGNoaWxkcmVuIGFyZSBwcm92YWJseSBkaXN0aW5jdCwgc28gYSBzbG90IHN3YXAgY2Fubm90IHNuZWFrIHRocm91Z2guXG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLm5vdC5lcXVhbChyZXN1bHQua2V5cy5iYWNrdXAucHViKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAucHViLnNob3VsZC5ub3QuZXF1YWwocmVzdWx0LmtleXMuYml0Z28ucHViKTtcbiAgICByZXN1bHQua2V5cy5iaXRnby5wdWIuc2hvdWxkLmVxdWFsKGJpdGdvUHViKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBub24taW50ZWdlciBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDEuNSwgcm9vdHMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgIC9pbnZhbGlkIGFjY291bnQvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2J1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBjb25zdCB1c2VyUm9vdCA9IGJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicsICdoZXgnKSk7XG4gIGNvbnN0IGJhY2t1cFJvb3QgPSBiaXAzMi5mcm9tU2VlZChcbiAgICBCdWZmZXIuZnJvbSgnMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAwZjBlMGQwYzBiMGEwOTA4MDcwNjA1MDQwMzAyMDEwMCcsICdoZXgnKVxuICApO1xuICBjb25zdCBiaXRnb1Jvb3QgPSBiaXAzMlxuICAgIC5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMmYyZTJkMmMyYjJhMjkyODI3MjYyNTI0MjMyMjIxMjAxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMCcsICdoZXgnKSlcbiAgICAubmV1dGVyZWQoKTtcblxuICBjb25zdCBrZXlzID0ge1xuICAgIHVzZXI6IHsgcHJ2OiB1c2VyUm9vdC50b0Jhc2U1OCgpLCBwdWI6IHVzZXJSb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9LFxuICAgIGJhY2t1cDogeyBwcnY6IGJhY2t1cFJvb3QudG9CYXNlNTgoKSwgcHViOiBiYWNrdXBSb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9LFxuICAgIGJpdGdvOiB7IHB1YjogYml0Z29Sb290LnRvQmFzZTU4KCkgfSxcbiAgfTtcblxuICBpdCgnc2lnbmVkIG1vZGUgcmUtZW5jcnlwdHMgY2hpbGQgeHBydnMgdW5kZXIgYSBzaW5nbGUgZXBoZW1lcmFsIHBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzc3BocmFzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkLCBlbmNyeXB0aW9uVmVyc2lvbiB9KSA9PiB7XG4gICAgICBwYXNzcGhyYXNlcy5wdXNoKHBhc3N3b3JkKTtcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHJldHVybiBgZW5jKCR7aW5wdXR9KWA7XG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBrZXlzLFxuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgfSk7XG5cbiAgICByZXN1bHQudXNlcktleS5zaG91bGQuZXF1YWwoYGVuYygke2tleXMudXNlci5wcnZ9KWApO1xuICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtrZXlzLmJhY2t1cC5wcnZ9KWApO1xuICAgIHJlc3VsdC5iaXRnb0tleS5zaG91bGQuZXF1YWwoa2V5cy5iaXRnby5wdWIpO1xuICAgIChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHBhc3NwaHJhc2VzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICBwYXNzcGhyYXNlc1swXS5zaG91bGQuZXF1YWwocGFzc3BocmFzZXNbMV0pO1xuICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSk7XG4gICAgZW5jcnlwdC5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDIpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBub24tcHJpdmF0ZSBjaGlsZCBrZXlzIGluIHNpZ25lZCBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0OiBzaW5vbi5zdHViKCkgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLFxuICAgICAga2V5czogeyB1c2VyOiB7IHBydjoga2V5cy51c2VyLnB1YiwgcHViOiBrZXlzLnVzZXIucHViIH0sIGJhY2t1cDoga2V5cy5iYWNrdXAsIGJpdGdvOiBrZXlzLmJpdGdvIH0sXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tdXN0IGJlIHByaXZhdGUgeHBydnMvKTtcbiAgfSk7XG5cbiAgaXQoJ3Vuc2lnbmVkIG1vZGUgcmV0dXJucyBwdWJzIGFuZCBuZXZlciBlbmNyeXB0cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuY3J5cHQgc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIGtleXMsXG4gICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGtleXMudXNlci5wdWIpO1xuICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKGtleXMuYmFja3VwLnB1Yik7XG4gICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbChrZXlzLmJpdGdvLnB1Yik7XG4gICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgdW5zdXBwb3J0ZWQgc2xvdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdlZGRzYU1wYycsXG4gICAgICBrZXlzOiB7IGNvbW1vbktleWNoYWluOiAnY2snLCB1c2VyOiAndScsIGJhY2t1cDogJ2InIH0sXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3Qgc3VwcG9ydGVkIHlldC8pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWQyNTUxOU11bHRpc2lnIChhbGdvKScsICgpID0+IHtcbiAgICAvLyBHb2xkZW4gdmVjdG9ycyBnZW5lcmF0ZWQgd2l0aCBhbGdvc2RrOiBlbmNvZGVBZGRyZXNzKEJ1ZmZlci5hbGxvYygzMiwgbikpIGFuZFxuICAgIC8vIG11bHRpc2lnQWRkcmVzcyh7IHZlcnNpb246IDEsIHRocmVzaG9sZDogMiwgYWRkcnM6IFsuLi5dIH0pIG92ZXIgdGhlIHNhbWUgcHVicy5cbiAgICBjb25zdCBlZEtleXMgPSB7XG4gICAgICB1c2VyOiB7IGtpbmQ6ICdzZWVkJywgc2VlZDogJzExJy5yZXBlYXQoMzIpLCBwdWI6ICcyMScucmVwZWF0KDMyKSB9LFxuICAgICAgYmFja3VwOiB7IGtpbmQ6ICdleHRlbmRlZCcsIGtMOiAnMzEnLnJlcGVhdCgzMiksIGtSOiAnNDEnLnJlcGVhdCgzMiksIHB1YjogJzUxJy5yZXBlYXQoMzIpIH0sXG4gICAgICBiaXRnbzogeyBwdWI6ICc2MScucmVwZWF0KDMyKSB9LFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICBpdCgndW5zaWduZWQgbW9kZSByZXR1cm5zIEFMR08gYWRkcmVzc2VzIGFuZCB0aGUgbXVsdGlzaWcgcm9vdEFkZHJlc3MsIGFuZCBuZXZlciBlbmNyeXB0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbmNyeXB0IHNob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0IH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgICBiaXRnbyxcbiAgICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAga2V5czogZWRLZXlzLFxuICAgICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnIHx8IHJlc3VsdC5tb2RlICE9PSAndW5zaWduZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgdW5zaWduZWQgZWQyNTUxOU11bHRpc2lnIGtleSBwYXJhbXMnKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKCdFRVFTQ0lKQkVFUVNDSUpCRUVRU0NJSkJFRVFTQ0lKQkVFUVNDSUpCRUVRU0NJSkJFRVFZTkk1M0hNJyk7XG4gICAgICByZXN1bHQuYmFja3VwS2V5LnNob3VsZC5lcXVhbCgnS0ZJVkNVS1JLRklWQ1VLUktGSVZDVUtSS0ZJVkNVS1JLRklWQ1VLUktGSVZDVUtSS0ZJMzNCM0FPWScpO1xuICAgICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbCgnTUZRV0NZTEJNRlFXQ1lMQk1GUVdDWUxCTUZRV0NZTEJNRlFXQ1lMQk1GUVdDWUxCTUZRUzNLSEVITScpO1xuICAgICAgcmVzdWx0LnJvb3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnTEhXRUlPVTJVSVBTS0NaM1hNS1FVS1JZWTNGTTZYVFpLQkhETUlVNzM3T1FRRVhRVFlTR0RGT0hETScpO1xuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117NTh9JC8pO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZXh0ZXJuYWxCYWNrdXBTaWduZXInKTtcbiAgICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduZWQgbW9kZSBlbmNyeXB0cyB0aGUgNTgtY2hhciBzZWVkIGFuZCByZXR1cm5zIGEgbGF6eSBleHRlcm5hbCBiYWNrdXAgc2lnbmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVhbCBkZXJpdmF0aW9uIG91dHB1dCwgd2l0aCBhIGRpc3RpbmN0IEJpdEdvIHJvb3Qgc28gdGhlIGJhY2t1cCBjaGlsZCBhbmQgdGhlIEJpdEdvIGNoaWxkXG4gICAgICAvLyBhcmUgZGlmZmVyZW50IGtleXMg4oCUIGEgc2xvdCBzd2FwIGJldHdlZW4gdGhlbSBtdXN0IGNoYW5nZSB0aGUgb3V0cHV0cy5cbiAgICAgIGNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcbiAgICAgIGNvbnN0IGJhY2t1cENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgICBjb25zdCBiaXRnb1NlZWQgPSBCdWZmZXIuYWxsb2MoMzIsIDB4MjIpO1xuICAgICAgY29uc3QgYml0Z29Sb290UHViID0gQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoYml0Z29TZWVkKSk7XG4gICAgICBjb25zdCBiaXRnb0NoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhjZCk7XG4gICAgICBjb25zdCBlZDI1NTE5Um9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgICAgLi4ubWFrZVJvb3RzKHsgdXNlcjogJ3gnLCBiYWNrdXA6ICd5JywgYml0Z286ICd6JyB9KSxcbiAgICAgICAgZWQyNTUxOU11bHRpc2lnOiB7XG4gICAgICAgICAgdXNlcjogU1RSS0VZX1NFRUQsXG4gICAgICAgICAgYmFja3VwOiB7IHBydjogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogZW5jb2RlRWQyNTUxOUNoYWluQ29kZShiYWNrdXBDaGFpbkNvZGUpIH0sXG4gICAgICAgICAgYml0Z286IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoYml0Z29Sb290UHViLCBiaXRnb0NoYWluQ29kZSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVyaXZlZCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHtcbiAgICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAgYWNjb3VudDogMCxcbiAgICAgICAgcm9vdHM6IGVkMjU1MTlSb290cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKGRlcml2ZWQuc2xvdCAhPT0gJ2VkMjU1MTlNdWx0aXNpZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZDI1NTE5TXVsdGlzaWcgc2xvdCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXNzcGhyYXNlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICh7IGlucHV0LCBwYXNzd29yZCwgZW5jcnlwdGlvblZlcnNpb24gfSkgPT4ge1xuICAgICAgICBwYXNzcGhyYXNlcy5wdXNoKHBhc3N3b3JkKTtcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb24uc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICByZXR1cm4gYGVuYygke2lucHV0fSlgO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46ICd0YWxnbycsXG4gICAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgICBrZXlzOiBkZXJpdmVkLmtleXMsXG4gICAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnIHx8IHJlc3VsdC5tb2RlICE9PSAnc2lnbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHNpZ25lZCBlZDI1NTE5TXVsdGlzaWcga2V5IHBhcmFtcycpO1xuICAgICAgfVxuXG4gICAgICBkZXJpdmVkLmtleXMudXNlci5wdWIuc2hvdWxkLm5vdC5lcXVhbChkZXJpdmVkLmtleXMuYmFja3VwLnB1Yik7XG4gICAgICBkZXJpdmVkLmtleXMuYmFja3VwLnB1Yi5zaG91bGQubm90LmVxdWFsKGRlcml2ZWQua2V5cy5iaXRnby5wdWIpO1xuXG4gICAgICAvLyB1c2VyIHNlZWQgcmUtZW5jb2RlZCBhcyB0aGUgNTgtY2hhciBBTEdPIHNlZWQgYmVmb3JlIGVuY3J5cHRpb247IG5vIGJhY2t1cEtleSDigJQgdGhlXG4gICAgICAvLyBzZWVkbGVzcyBiYWNrdXAgY2hpbGQgb25seSBleGlzdHMgYXMgdGhlIGxhenkgc2lnbmVyLlxuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtlbmNvZGVBbGdvS2V5KEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy51c2VyLnNlZWQsICdoZXgnKSl9KWApO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwS2V5Jyk7XG4gICAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLmVxdWFsKGVuY29kZUFsZ29LZXkoQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLmJpdGdvLnB1YiwgJ2hleCcpKSk7XG4gICAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117NTh9JC8pO1xuICAgICAgLy8gVGhlIHdhbGxldCdzIG9uLWNoYWluIGFkZHJlc3Mgb3ZlciB0aGUgdGhyZWUgZGlzdGluY3QgY2hpbGRyZW4sIGluIHdhbGxldC1jcmVhdGlvbiBvcmRlci5cbiAgICAgIHJlc3VsdC5yb290QWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgIGFsZ29NdWx0aXNpZ0FkZHJlc3MoMSwgMiwgW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy51c2VyLnB1YiwgJ2hleCcpLFxuICAgICAgICAgIEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy5iYWNrdXAucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLmJpdGdvLnB1YiwgJ2hleCcpLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5yb290QWRkcmVzcy5zaG91bGQubWF0Y2goL15bQS1aMi03XXs1OH0kLyk7XG4gICAgICByZXN1bHQud2FsbGV0UGFzc3BocmFzZS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHBhc3NwaHJhc2VzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSk7XG4gICAgICBlbmNyeXB0LmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgIC8vIHRoZSBsYXp5IHNpZ25lciBzaWducyB3aXRoIHRoZSByZWFsIGV4dGVuZGVkIGtleSBoYWx2ZXMgYW5kIGl0cyBwdWIgbWF0Y2hlcyB0aGUgYmFja3VwIGNoaWxkXG4gICAgICByZXN1bHQuZXh0ZXJuYWxCYWNrdXBTaWduZXIucHVibGljS2V5LnNob3VsZC5lcXVhbChkZXJpdmVkLmtleXMuYmFja3VwLnB1Yik7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2RlYWRiZWVmJywgJ2hleCcpO1xuICAgICAgY29uc3QgeyBzaWduYXR1cmUgfSA9IGF3YWl0IHJlc3VsdC5leHRlcm5hbEJhY2t1cFNpZ25lci5zaWduKG1lc3NhZ2UpO1xuICAgICAgc2lnbmF0dXJlLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezEyOH0kLyk7XG4gICAgICBlZDI1NTE5XG4gICAgICAgIC52ZXJpZnkoXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JykpLFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpLFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHJlc3VsdC5leHRlcm5hbEJhY2t1cFNpZ25lci5wdWJsaWNLZXksICdoZXgnKSlcbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgc2xvdC0yIGNvaW5zIHRoYXQgaGF2ZSBubyByZWdpc3RyeSBlbnRyeSB5ZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdDogc2lub24uc3R1YigpIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgICBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46ICd4bG0nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAga2V5czogZWRLZXlzLFxuICAgICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2NvaW4gJ3hsbScgZWQyNTUxOU11bHRpc2lnIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBlZDI1NTE5IGNoaWxkcmVuIHdpdGggbWFsZm9ybWVkIHB1YmxpYyBrZXlzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgICAgYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICAgIGJpdGdvLFxuICAgICAgICBjb2luOiAnYWxnbycsXG4gICAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgICBrZXlzOiB7IC4uLmVkS2V5cywgYml0Z286IHsgcHViOiAnMTIzNCcgfSB9LFxuICAgICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZWQyNTUxOSBjaGlsZCBwdWJsaWMga2V5cyBtdXN0IGJlIDMyIGJ5dGVzLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdTYWZlIGVjZHNhTXBjIGRlcml2ZSDihpIgc2lnbiAoZ2F0ZSknLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdkZXJpdmVzIGEgY2hpbGQsIHJlYnVpbGRzIDItb2YtMiBzaGFyZXMsIGFuZCBzaWducyBhIG1lc3NhZ2UgdmVyaWZpZWQgYXQgbS8wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsIHZyZkJhY2t1cF0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcblxuICAgIGNvbnN0IHJvb3RDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyRGtnLmdldEtleVNoYXJlKCkpO1xuXG4gICAgY29uc3QgeyBjb21tb25LZXljaGFpbiwgdXNlckNoaWxkLCBiYWNrdXBDaGlsZCB9ID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmRlcml2ZVNhZmVFY2RzYU1wY0NoaWxkKHtcbiAgICAgIHVzZXJSb290OiB7IHNpZ25pbmc6IHVzZXJEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksIHZyZjogdnJmVXNlci5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICBiYWNrdXBSb290OiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIGNvaW5UeXBlOiA2MCxcbiAgICAgIHNhZmVTbG90T3JkaW5hbDogMyxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBkZXJpdmVkIGNoaWxkIG11c3QgbmV2ZXIgYmUgdGhlIHJvb3QgKHRoZSBcInJvb3QgZW52ZWxvcGUgaW4gdGhlIGNoaWxkIHBvc2l0aW9uXCIgZm9vdGd1bikuXG4gICAgY29tbW9uS2V5Y2hhaW4uc2hvdWxkLm5vdC5lcXVhbChyb290Q29tbW9uS2V5Y2hhaW4pO1xuXG4gICAgLy8gUmVidWlsZCAyLW9mLTIga2V5c2hhcmVzIGZyb20gdGhlIGRlcml2ZWQgcmVkdWNlZCBDQk9SLCBleGFjdGx5IGFzIHRoZSBzaWduZXIncyByZXRyb2ZpdCBkb2VzLlxuICAgIGNvbnN0IHRvUmV0cm9maXQgPSAoYjY0OiBzdHJpbmcpOiBEa2xzVHlwZXMuUmV0cm9maXREYXRhID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZWQgPSBEa2xzVHlwZXMuZ2V0RGVjb2RlZFJlZHVjZWRLZXlTaGFyZShCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4U2hhcmU6IHtcbiAgICAgICAgICB4OiBCdWZmZXIuZnJvbShyZWR1Y2VkLnBydikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHk6IEJ1ZmZlci5mcm9tKHJlZHVjZWQucHViKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgY2hhaW5jb2RlOiBCdWZmZXIuZnJvbShyZWR1Y2VkLnJvb3RDaGFpbkNvZGUpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSxcbiAgICAgICAgeGlMaXN0OiByZWR1Y2VkLnhMaXN0LnNsaWNlKDAsIDIpLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFt1c2VyMm9mMiwgYmFja3VwMm9mMl0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGUyb2YyS2V5U2hhcmVzKFxuICAgICAgdG9SZXRyb2ZpdCh1c2VyQ2hpbGQpLFxuICAgICAgdG9SZXRyb2ZpdChiYWNrdXBDaGlsZClcbiAgICApO1xuXG4gICAgY29uc3QgbWVzc2FnZUhhc2ggPSBCdWZmZXIuZnJvbSgnMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZicsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IERrbHNEc2cuRHNnKHVzZXIyb2YyLmdldEtleVNoYXJlKCksIDAsICdtLzAnLCBtZXNzYWdlSGFzaCk7XG4gICAgY29uc3QgYmFja3VwRHNnID0gbmV3IERrbHNEc2cuRHNnKGJhY2t1cDJvZjIuZ2V0S2V5U2hhcmUoKSwgMSwgJ20vMCcsIG1lc3NhZ2VIYXNoKTtcbiAgICBjb25zdCBzaWduYXR1cmVTdHJpbmcgPSBEa2xzVXRpbHMudmVyaWZ5QW5kQ29udmVydERrbHNTaWduYXR1cmUoXG4gICAgICBtZXNzYWdlSGFzaCxcbiAgICAgIChhd2FpdCBEa2xzVXRpbHMuZXhlY3V0ZVRpbGxSb3VuZCg1LCB1c2VyRHNnLCBiYWNrdXBEc2cpKSBhcyBEa2xzVHlwZXMuRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSxcbiAgICAgIGNvbW1vbktleWNoYWluLFxuICAgICAgJ20vMCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZVxuICAgICk7XG5cbiAgICAvLyB2ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZSByZWNvdmVycyB0aGUgcHVia2V5IGZyb20gdGhlIHNpZ25hdHVyZSBhbmQgY2hlY2tzIGl0IGFnYWluc3RcbiAgICAvLyBkZXJpdmVVbmhhcmRlbmVkKGNoaWxkQ0ssICdtLzAnKTsgaXQgdGhyb3dzIG9uIG1pc21hdGNoLCBzbyBhIHJldHVybmVkIHN0cmluZyBpcyBwcm9vZi5cbiAgICBzaWduYXR1cmVTdHJpbmcuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgc2lnbmF0dXJlU3RyaW5nLnNob3VsZC5tYXRjaCgvXlxcZCs6WzAtOWEtZl0rOlswLTlhLWZdKzpbMC05YS1mXSskLyk7XG4gIH0pO1xufSk7XG4iXX0=
647
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLG1EQUE2QztBQUM3QyxtREFBZ0Q7QUFDaEQsdURBQXlDO0FBQ3pDLHlEQUF1SDtBQUN2SCx1RkFBNEY7QUFDNUYseURBQXNFO0FBQ3RFLGtFQUs2QztBQUM3Qyx5Q0FNeUI7QUFFekIsaUVBQWtGO0FBQ2xGLGlGQUE0RjtBQUU1RiwrRkFBK0Y7QUFDL0YsMERBQTBEO0FBQzFELCtFQUFpRTtBQUVqRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFFakMsU0FBUyxhQUFhLENBQUMsV0FBb0U7SUFDekYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUEyQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEYsQ0FBQztBQUM1QixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsY0FBYyxDQUFDLE9BQStCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxT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S0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkYsTUFBTSxlQUFlLEdBQUcsdUJBQVMsQ0FBQyw2QkFBNkIsQ0FDN0QsV0FBVyxFQUNYLENBQUMsTUFBTSx1QkFBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQXdDLEVBQ2hHLGNBQWMsRUFDZCxLQUFLLEVBQ0wsU0FBUyxFQUNULEtBQUssQ0FDTixDQUFDO1FBRUYsNkZBQTZGO1FBQzdGLDBGQUEwRjtRQUMxRixlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBlZDI1NTE5IH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9lZDI1NTE5JztcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvLWJldGEvc2pjbCc7XG5pbXBvcnQgeyBEa2xzRHNnLCBEa2xzVHlwZXMsIERrbHNVdGlscywgRGtsc1ZyZlV0aWxzLCBNUFNVdGlsLCBNcHNEZXJpdmUsIE1wc1ZyZlV0aWxzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9rZXlTaGFyZUVudmVsb3BlJztcbmltcG9ydCB7IEluY29ycmVjdFBhc3N3b3JkRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vZXJyb3JzJztcbmltcG9ydCB7XG4gIERlY3J5cHRlZFNhZmVSb290cyxcbiAgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyxcbiAgZGVjcnlwdFNhZmVLZXljYXJkLFxuICBkZXJpdmVTYWZlV2FsbGV0S2V5cyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3NhZmUvcmVjb3ZlcnknO1xuaW1wb3J0IHtcbiAgYWxnb011bHRpc2lnQWRkcmVzcyxcbiAgZW5jb2RlQWxnb0tleSxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvZWRkc2EvZWRkc2EnO1xuaW1wb3J0IHsgc2lnbkVkZHNhTXBjVjJSZWNvdmVyeVR4IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS9lZGRzYU1QQ3YyJztcblxuLy8gVGhlIGVkMjU1MTkgc29mdCBjby1zaWduZXIgcHJpdmF0ZSBoYWx2ZXMgYXNzZXJ0ZWQgYmVsb3cgYXJlIHBpbm5lZCBjcm9zcy1yZXBvIGluIHRoZSBzaGFyZWRcbi8vIEdWMSBmaXh0dXJlIChieXRlLWlkZW50aWNhbCB0byB3YWxsZXQtcGxhdGZvcm0ncyBjb3B5KS5cbmltcG9ydCAqIGFzIGJpcDQ0Rml4dHVyZSBmcm9tICcuL2ZpeHR1cmVzL3NhZmVCaXA0NFZlY3RvcnMuanNvbic7XG5cbmNvbnN0IFBBU1NXT1JEID0gJ3NhZmUtcGFzc3dvcmQnO1xuXG5mdW5jdGlvbiBtYWtlTW9ja0JpdEdvKGRlY3J5cHRJbXBsOiAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gc3RyaW5nKTogQml0R29CYXNlIHtcbiAgcmV0dXJuIHtcbiAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBkZWNyeXB0SW1wbChwYXJhbXMpKSxcbiAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbn1cblxuLyoqIEEgZmFrZSBkZWNyeXB0IHRoYXQgb25seSByZWNvZ25pemVzIHRoZSB1c2VyL2JhY2t1cCB0b2tlbnM7IGFueSBvdGhlciBpbnB1dCAoZS5nLiBhIEJveCBDIHB1YmxpYykgdGhyb3dzLiAqL1xuZnVuY3Rpb24gbWFrZURlY3J5cHRNYXAoZW50cmllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBzdHJpbmcge1xuICByZXR1cm4gKHsgcGFzc3dvcmQsIGlucHV0IH0pID0+IHtcbiAgICBwYXNzd29yZC5zaG91bGQuZXF1YWwoUEFTU1dPUkQpO1xuICAgIGlmICghKGlucHV0IGluIGVudHJpZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgZGVjcnlwdCBpbnB1dDogJHtpbnB1dH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXNbaW5wdXRdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBib3godmFsdWVzOiB7XG4gIHNlY3AyNTZrMU11bHRpc2lnOiBzdHJpbmc7XG4gIGVkMjU1MTlNdWx0aXNpZzogc3RyaW5nIHwgeyBwcnY6IHN0cmluZzsgY2hhaW5Db2RlOiBzdHJpbmcgfTtcbiAgZWNkc2FNcGM6IHN0cmluZztcbiAgZWRkc2FNcGM6IHN0cmluZztcbn0pOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWVzKTtcbn1cblxuZGVzY3JpYmUoJ2RlY3J5cHRTYWZlS2V5Y2FyZCcsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdkZWNyeXB0cyBvbmNoYWluIHJvb3RzIHRvIHN0cmluZ3MgYW5kIHJldHVybnMgQm94IEMgdmVyYmF0aW0nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlckJveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy11c2VyLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLXVzZXItZWQyNTUxOScsXG4gICAgICBlY2RzYU1wYzogJ2VuYy11c2VyLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLXVzZXItZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cEJveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy1iYWNrdXAtc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHsgcHJ2OiAnZW5jLWJhY2t1cC1lZDI1NTE5JywgY2hhaW5Db2RlOiAnQycucmVwZWF0KDUyKSB9LFxuICAgICAgZWNkc2FNcGM6ICdlbmMtYmFja3VwLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLWJhY2t1cC1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z29Cb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd4cHViLXNlY3AtYml0Z28nLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAncHViLWVkMjU1MTktYml0Z28nLFxuICAgICAgZWNkc2FNcGM6ICdjb21tb24tZWNkc2EtYml0Z28nLFxuICAgICAgZWRkc2FNcGM6ICdjb21tb24tZWRkc2EtYml0Z28nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbXBjVXNlciA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpXG4gICAgKTtcbiAgICBjb25zdCBtcGNCYWNrdXAgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC12cmYnKVxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oXG4gICAgICBtYWtlRGVjcnlwdE1hcCh7XG4gICAgICAgICdlbmMtdXNlci1zZWNwJzogJ3hwcnYtdXNlcicsXG4gICAgICAgICdlbmMtYmFja3VwLXNlY3AnOiAneHBydi1iYWNrdXAnLFxuICAgICAgICAnZW5jLXVzZXItZWQyNTUxOSc6ICdTLXVzZXItc2VlZCcsXG4gICAgICAgICdlbmMtYmFja3VwLWVkMjU1MTknOiAnUy1iYWNrdXAtc2VlZCcsXG4gICAgICAgICdlbmMtdXNlci1lY2RzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWNkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy11c2VyLWVkZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZGRzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogYmFja3VwQm94LFxuICAgICAgYml0Z29LZXlCb3g6IGJpdGdvQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLnVzZXIuc2hvdWxkLmVxdWFsKCd4cHJ2LXVzZXInKTtcbiAgICByZXN1bHQuc2VjcDI1NmsxTXVsdGlzaWcuYmFja3VwLnNob3VsZC5lcXVhbCgneHBydi1iYWNrdXAnKTtcbiAgICByZXN1bHQuc2VjcDI1NmsxTXVsdGlzaWcuYml0Z28uc2hvdWxkLmVxdWFsKCd4cHViLXNlY3AtYml0Z28nKTtcblxuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcudXNlci5zaG91bGQuZXF1YWwoJ1MtdXNlci1zZWVkJyk7XG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAucHJ2LnNob3VsZC5lcXVhbCgnUy1iYWNrdXAtc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLmNoYWluQ29kZS5zaG91bGQuZXF1YWwoJ0MnLnJlcGVhdCg1MikpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYml0Z28uc2hvdWxkLmVxdWFsKCdwdWItZWQyNTUxOS1iaXRnbycpO1xuXG4gICAgcmVzdWx0LmVjZHNhTXBjLnVzZXIuc2lnbmluZy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKS50b1N0cmluZygnaGV4JykpO1xuICAgIHJlc3VsdC5lY2RzYU1wYy51c2VyLnZyZi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJhY2t1cC5zaWduaW5nLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoQnVmZmVyLmZyb20oJ2JhY2t1cC1yZWR1Y2VkJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMuYmFja3VwLnZyZi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMuYml0Z28uc2hvdWxkLmVxdWFsKCdjb21tb24tZWNkc2EtYml0Z28nKTtcblxuICAgIHJlc3VsdC5lZGRzYU1wYy5iaXRnby5zaG91bGQuZXF1YWwoJ2NvbW1vbi1lZGRzYS1iaXRnbycpO1xuXG4gICAgLy8gNCBzbG90cyDDlyAodXNlciArIGJhY2t1cCkgPSA4IGRlY3J5cHRzOyBCaXRHbyAoQm94IEMpIGlzIG5ldmVyIGRlY3J5cHRlZC5cbiAgICAoYml0Z28uZGVjcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoOCk7XG4gIH0pO1xuXG4gIGl0KCdkZWNyeXB0cyB0aGUgc2VlZCBmcm9tIGFuIG9iamVjdC1mb3JtIGVkMjU1MTlNdWx0aXNpZyBiYWNrdXAgZW50cnknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlckJveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy11c2VyLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLXVzZXItZWQyNTUxOScsXG4gICAgICBlY2RzYU1wYzogJ2VuYy11c2VyLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLXVzZXItZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cEJveCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnZW5jLWJhY2t1cC1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogeyBwcnY6ICdlbmMtYmFja3VwLWVkMjU1MTknLCBjaGFpbkNvZGU6ICdBJy5yZXBlYXQoNTIpIH0sXG4gICAgICBlY2RzYU1wYzogJ2VuYy1iYWNrdXAtZWNkc2EnLFxuICAgICAgZWRkc2FNcGM6ICdlbmMtYmFja3VwLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnb0JveCA9IGJveCh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ3hwdWItc2VjcC1iaXRnbycsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICdwdWItZWQyNTUxOS1iaXRnbycsXG4gICAgICBlY2RzYU1wYzogJ2NvbW1vbi1lY2RzYS1iaXRnbycsXG4gICAgICBlZGRzYU1wYzogJ2NvbW1vbi1lZGRzYS1iaXRnbycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtcGNVc2VyID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgQnVmZmVyLmZyb20oJ3VzZXItc2lnbmluZycpLFxuICAgICAgQnVmZmVyLmZyb20oJ3VzZXItcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ3VzZXItdnJmJylcbiAgICApO1xuICAgIGNvbnN0IG1wY0JhY2t1cCA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtc2lnbmluZycpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC1yZWR1Y2VkJyksXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXZyZicpXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbyhcbiAgICAgIG1ha2VEZWNyeXB0TWFwKHtcbiAgICAgICAgJ2VuYy11c2VyLXNlY3AnOiAneHBydi11c2VyJyxcbiAgICAgICAgJ2VuYy1iYWNrdXAtc2VjcCc6ICd4cHJ2LWJhY2t1cCcsXG4gICAgICAgICdlbmMtdXNlci1lZDI1NTE5JzogJ1MtdXNlci1zZWVkJyxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWQyNTUxOSc6ICdTLWJhY2t1cC1zZWVkJyxcbiAgICAgICAgJ2VuYy11c2VyLWVjZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lY2RzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLXVzZXItZWRkc2EnOiBtcGNVc2VyLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtYmFja3VwLWVkZHNhJzogbXBjQmFja3VwLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWNyeXB0U2FmZUtleWNhcmQoe1xuICAgICAgYml0Z28sXG4gICAgICB1c2VyS2V5Qm94OiB1c2VyQm94LFxuICAgICAgYmFja3VwS2V5Qm94OiBiYWNrdXBCb3gsXG4gICAgICBiaXRnb0tleUJveDogYml0Z29Cb3gsXG4gICAgICBwYXNzd29yZDogUEFTU1dPUkQsXG4gICAgfSk7XG5cbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJhY2t1cC5wcnYuc2hvdWxkLmVxdWFsKCdTLWJhY2t1cC1zZWVkJyk7XG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAuY2hhaW5Db2RlLnNob3VsZC5lcXVhbCgnQScucmVwZWF0KDUyKSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGFuIGVkMjU1MTkgY2hhaW4tY29kZSBlbnRyeSBpbiBhIG5vbi1iYWNrdXAgc2xvdCAoZmFpbCBjbG9zZWQpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogeyBwcnY6ICdlbmMtdXNlci1zZWNwJywgY2hhaW5Db2RlOiAnQScucmVwZWF0KDUyKSB9LFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLXVzZXItZWQyNTUxOScsXG4gICAgICBlY2RzYU1wYzogJ2VuYy11c2VyLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLXVzZXItZWRkc2EnLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvOiBtYWtlTW9ja0JpdEdvKG1ha2VEZWNyeXB0TWFwKHt9KSksXG4gICAgICB1c2VyS2V5Qm94OiB1c2VyQm94LFxuICAgICAgYmFja3VwS2V5Qm94OiB1c2VyQm94LFxuICAgICAgYml0Z29LZXlCb3g6IHVzZXJCb3gsXG4gICAgICBwYXNzd29yZDogUEFTU1dPUkQsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvdW5leHBlY3RlZCBlZDI1NTE5IGNoYWluLWNvZGUgZW50cnkvKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIHdoZW4gZGVjcnlwdGlvbiBmYWlscyAod3JvbmcgcGFzc3dvcmQpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcmdvbjI6IHRhZyBkb2VzIG5vdCBtYXRjaCcpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogdXNlckJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiB1c2VyQm94LFxuICAgICAgcGFzc3dvcmQ6ICd3cm9uZy1wYXNzd29yZCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbmNvcnJlY3RQYXNzd29yZEVycm9yKTtcbiAgfSk7XG59KTtcblxuY29uc3QgTVBDX1JPT1QgPSB7IHNpZ25pbmc6IEJ1ZmZlci5hbGxvYygwKSwgdnJmOiBCdWZmZXIuYWxsb2MoMCkgfTtcblxuZnVuY3Rpb24gbWFrZVJvb3RzKHNlY3A6IHsgdXNlcjogc3RyaW5nOyBiYWNrdXA6IHN0cmluZzsgYml0Z286IHN0cmluZyB9KTogRGVjcnlwdGVkU2FmZVJvb3RzIHtcbiAgcmV0dXJuIHtcbiAgICBzZWNwMjU2azFNdWx0aXNpZzogc2VjcCxcbiAgICBlZDI1NTE5TXVsdGlzaWc6IHsgdXNlcjogJ3UnLCBiYWNrdXA6IHsgcHJ2OiAnYicsIGNoYWluQ29kZTogJ2MnIH0sIGJpdGdvOiAnZycgfSxcbiAgICBlY2RzYU1wYzogeyB1c2VyOiBNUENfUk9PVCwgYmFja3VwOiBNUENfUk9PVCwgYml0Z286ICdnJyB9LFxuICAgIGVkZHNhTXBjOiB7IHVzZXI6IE1QQ19ST09ULCBiYWNrdXA6IE1QQ19ST09ULCBiaXRnbzogJ2cnIH0sXG4gIH07XG59XG5cbmRlc2NyaWJlKCdkZXJpdmVTYWZlV2FsbGV0S2V5cycsICgpID0+IHtcbiAgY29uc3QgdXNlclJvb3QgPSBiaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnLCAnaGV4JykpO1xuICBjb25zdCBiYWNrdXBSb290ID0gYmlwMzIuZnJvbVNlZWQoXG4gICAgQnVmZmVyLmZyb20oJzFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwMGYwZTBkMGMwYjBhMDkwODA3MDYwNTA0MDMwMjAxMDAnLCAnaGV4JylcbiAgKTtcbiAgY29uc3QgYml0Z29Sb290ID0gYmlwMzJcbiAgICAuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzJmMmUyZDJjMmIyYTI5MjgyNzI2MjUyNDIzMjIyMTIwMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAnLCAnaGV4JykpXG4gICAgLm5ldXRlcmVkKCk7XG5cbiAgY29uc3Qgcm9vdHMgPSBtYWtlUm9vdHMoe1xuICAgIHVzZXI6IHVzZXJSb290LnRvQmFzZTU4KCksXG4gICAgYmFja3VwOiBiYWNrdXBSb290LnRvQmFzZTU4KCksXG4gICAgYml0Z286IGJpdGdvUm9vdC50b0Jhc2U1OCgpLFxuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgQklQNDQgY2hpbGQgdHJpcGxldCBmb3Igc2xvdCAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDAsIHJvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ3NlY3AyNTZrMU11bHRpc2lnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBzZWNwMjU2azFNdWx0aXNpZyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMCdcIik7XG4gICAgcmVzdWx0LmtleXMudXNlci5wcnYuc2hvdWxkLmVxdWFsKHVzZXJSb290LmRlcml2ZVBhdGgoXCJtLzQ0Jy8wJy8xJy8wJ1wiKS50b0Jhc2U1OCgpKTtcbiAgICByZXN1bHQua2V5cy51c2VyLnB1Yi5zaG91bGQuZXF1YWwodXNlclJvb3QuZGVyaXZlUGF0aChcIm0vNDQnLzAnLzEnLzAnXCIpLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnBydi5zaG91bGQuZXF1YWwoYmFja3VwUm9vdC5kZXJpdmVQYXRoKCdtLzQ0LzAvMS8wJykudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMuYml0Z28ucHViLnNob3VsZC5lcXVhbChiaXRnb1Jvb3QuZGVyaXZlUGF0aCgnbS80NC8wLzEvMCcpLnRvQmFzZTU4KCkpO1xuICB9KTtcblxuICBpdCgndmFyaWVzIHRoZSBwYXRoIHdpdGggdGhlIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnYnRjJywgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgYWNjb3VudDogMiwgcm9vdHMgfSk7XG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMidcIik7XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIHRoZSBlY2RzYU1wYyBjaGlsZCB2aWEgdGhlIERLTHMgY2VyZW1vbnknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwXSA9IGF3YWl0IERrbHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuXG4gICAgY29uc3QgbXBjUm9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgIC4uLnJvb3RzLFxuICAgICAgZWNkc2FNcGM6IHtcbiAgICAgICAgdXNlcjogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiYWNrdXA6IHsgc2lnbmluZzogYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICAgIGJpdGdvOiAnZycsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdldGgnLCBzbG90OiAnZWNkc2FNcGMnLCBhY2NvdW50OiAwLCByb290czogbXBjUm9vdHMgfSk7XG4gICAgaWYgKHJlc3VsdC5zbG90ICE9PSAnZWNkc2FNcGMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGVjZHNhTXBjIHNsb3QnKTtcbiAgICB9XG5cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy82MCcvMycvMCdcIik7XG4gICAgcmVzdWx0LmtleXMuY29tbW9uS2V5Y2hhaW4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcmVzdWx0LmtleXMudXNlci5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIGFuZCBzaWducyB0aGUgZWRkc2FNcGMgc2xvdC00IEJJUDQ0IGNoaWxkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2csIGJpdGdvRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IFt2cmZVc2VyLCB2cmZCYWNrdXAsIHZyZkJpdGdvXSA9IGF3YWl0IE1wc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgbXBjUm9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgIC4uLnJvb3RzLFxuICAgICAgZWRkc2FNcGM6IHtcbiAgICAgICAgdXNlcjogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiYWNrdXA6IHsgc2lnbmluZzogYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICAgIGJpdGdvOiBiaXRnb0RrZy5nZXRDb21tb25LZXljaGFpbigpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnc29sJywgc2xvdDogJ2VkZHNhTXBjJywgYWNjb3VudDogMCwgcm9vdHM6IG1wY1Jvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ2VkZHNhTXBjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZGRzYU1wYyBzbG90Jyk7XG4gICAgfVxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzUwMScvNCcvMCdcIik7XG5cbiAgICAvLyBQbGF5IG1pbnQncyB1c2Vy4oaUQml0R28gcm9sZSBsb2NhbGx5IGF0IHRoZSBzYW1lIEJJUDQ0IHBhdGg7IG5vIGRldi1taW50ZWQgd2FsbGV0IGlzIG5lZWRlZC5cbiAgICBjb25zdCB1c2VyTWludCA9IG5ldyBNcHNEZXJpdmUuRGVyaXZlKDMsIDIsIDAsIHVzZXJEa2cuZ2V0S2V5U2hhcmUoKSwgdnJmVXNlci5nZXRLZXlTaGFyZSgpLCByZXN1bHQucGF0aCk7XG4gICAgY29uc3QgYml0Z29NaW50ID0gbmV3IE1wc0Rlcml2ZS5EZXJpdmUoMywgMiwgMiwgYml0Z29Ea2cuZ2V0S2V5U2hhcmUoKSwgdnJmQml0Z28uZ2V0S2V5U2hhcmUoKSwgcmVzdWx0LnBhdGgpO1xuICAgIGNvbnN0IFt1c2VyUm91bmQwLCBiaXRnb1JvdW5kMF0gPSBhd2FpdCBQcm9taXNlLmFsbChbdXNlck1pbnQuaW5pdERlcml2ZSgpLCBiaXRnb01pbnQuaW5pdERlcml2ZSgpXSk7XG4gICAgY29uc3QgW3VzZXJSb3VuZDFdID0gdXNlck1pbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYml0Z29Sb3VuZDBdKTtcbiAgICBjb25zdCBbYml0Z29Sb3VuZDFdID0gYml0Z29NaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3VzZXJSb3VuZDBdKTtcbiAgICBpZiAoIXVzZXJSb3VuZDEgfHwgIWJpdGdvUm91bmQxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVzZXIgYW5kIEJpdEdvIGRlcml2ZSByb3VuZC0xIG1lc3NhZ2VzJyk7XG4gICAgfVxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodXNlck1pbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYml0Z29Sb3VuZDFdKSwgW10pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYml0Z29NaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3VzZXJSb3VuZDFdKSwgW10pO1xuICAgIGNvbnN0IG1pbnRlZENoaWxkQ29tbW9uS2V5Y2hhaW4gPSB1c2VyTWludC5nZXRDb21tb25LZXljaGFpbigpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiaXRnb01pbnQuZ2V0Q29tbW9uS2V5Y2hhaW4oKSwgbWludGVkQ2hpbGRDb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLCBtaW50ZWRDaGlsZENvbW1vbktleWNoYWluKTtcblxuICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnc2FmZS1yZWNvdmVyeS1wYXNzcGhyYXNlJztcbiAgICBjb25zdCB1c2VyS2V5ID0gc2pjbC5lbmNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJlc3VsdC5rZXlzLnVzZXIpO1xuICAgIGNvbnN0IGJhY2t1cEtleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQua2V5cy5iYWNrdXApO1xuICAgIGNvbnN0IHJvb3RDb21tb25LZXljaGFpbiA9IHVzZXJEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHNpZ25FZGRzYU1wY1YyUmVjb3ZlcnlUeCh7XG4gICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd3cm9uZyBrZXljaGFpbiBtdXN0IGZhaWwnKSxcbiAgICAgICAgdXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBiaXRnb0tleTogcm9vdENvbW1vbktleWNoYWluLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICB9KSxcbiAgICAgIC9jb21tb25LZXlDaGFpbiBmcm9tIGtleWNhcmQgZG9lcyBub3QgbWF0Y2ggYml0Z29LZXkvXG4gICAgKTtcblxuICAgIGNvbnN0IG1wYyA9IGF3YWl0IGdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UoKTtcbiAgICBmb3IgKGNvbnN0IGRlcml2YXRpb25QYXRoIG9mIFsnbS8wJywgJ20vMyddKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oYFNhZmUgRWREU0EgcmVjb3ZlcnkgJHtkZXJpdmF0aW9uUGF0aH1gKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNpZ25FZGRzYU1wY1YyUmVjb3ZlcnlUeCh7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYml0Z29LZXk6IHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVyaXZlZEtleWNoYWluID0gbXBjLmRlcml2ZVVuaGFyZGVuZWQocmVzdWx0LmtleXMuY29tbW9uS2V5Y2hhaW4sIGRlcml2YXRpb25QYXRoKTtcbiAgICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gQnVmZmVyLmZyb20oZGVyaXZlZEtleWNoYWluLnNsaWNlKDAsIDY0KSwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICBlZDI1NTE5LnZlcmlmeShuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShtZXNzYWdlKSwgbmV3IFVpbnQ4QXJyYXkocHVibGljS2V5Qnl0ZXMpKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIHRoZSBlZDI1NTE5TXVsdGlzaWcgdHJpcGxldCBhdCB0aGUgQklQNDQgcGF0aCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBTVFJLRVlfU0VFRCA9ICdTQUFBQ0FRREFRQ1FNQllJQkVGQVdEQU5CWUhSQUVJU0NNS0JLRlFYREFNUlVHWTREVVBCNk5LSSc7XG4gICAgY29uc3QgYmFja3VwQ2hhaW5Db2RlID0gQnVmZmVyLmFsbG9jKDMyLCAweGFiKTtcbiAgICAvLyBEaXN0aW5jdCBCaXRHbyByb290ICsgY2hhaW4gY29kZTogaWYgdGhlIEJpdEdvIGNvbXBvc2l0ZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgYmFja3VwIHJvb3QsIHRoZVxuICAgIC8vIGJhY2t1cCBjaGlsZCBhbmQgdGhlIEJpdEdvIGNoaWxkIHdvdWxkIGJlIHRoZSBzYW1lIGtleSBhbmQgYSBzbG90IHN3YXAgd291bGQgcGFzcyBldmVyeSBnb2xkZW4uXG4gICAgY29uc3QgYml0Z29TZWVkID0gQnVmZmVyLmFsbG9jKDMyLCAweDIyKTtcbiAgICBjb25zdCBiaXRnb1Jvb3RQdWIgPSBCdWZmZXIuZnJvbShlZDI1NTE5LmdldFB1YmxpY0tleShiaXRnb1NlZWQpKTtcbiAgICBjb25zdCBiaXRnb0NoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhjZCk7XG4gICAgY29uc3QgZWQyNTUxOVJvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzoge1xuICAgICAgICB1c2VyOiBTVFJLRVlfU0VFRCxcbiAgICAgICAgYmFja3VwOiB7IHBydjogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogZW5jb2RlRWQyNTUxOUNoYWluQ29kZShiYWNrdXBDaGFpbkNvZGUpIH0sXG4gICAgICAgIGJpdGdvOiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKGJpdGdvUm9vdFB1YiwgYml0Z29DaGFpbkNvZGUpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoe1xuICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgICBhY2NvdW50OiAwLFxuICAgICAgcm9vdHM6IGVkMjU1MTlSb290cyxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGVkMjU1MTlNdWx0aXNpZyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMjgzJy8yJy8wJ1wiKTtcblxuICAgIC8vIHVzZXI6IGhhcmRlbmVkIFNMSVAtMDAxMCBjaGlsZCwgcGlubmVkIHRvIHRoZSBsZWFmJ3MgZ29sZGVuIHZlY3RvclxuICAgIHJlc3VsdC5rZXlzLnVzZXIua2luZC5zaG91bGQuZXF1YWwoJ3NlZWQnKTtcbiAgICByZXN1bHQua2V5cy51c2VyLnNlZWQuc2hvdWxkLmVxdWFsKCdiZTY5NTMxZWJiYWI4NTFiNjlhYTQxYmI5YzkwNWFmZWQ1MmQyNmZmNDI3OGU2NDE4NjA5ZDRkNjA1NzA1MTBjJyk7XG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoQnVmZmVyLmZyb20ocmVzdWx0LmtleXMudXNlci5zZWVkLCAnaGV4JykpKS50b1N0cmluZygnaGV4JylcbiAgICApO1xuXG4gICAgLy8gYmFja3VwOiBleHRlbmRlZCBrZXkgd2hvc2UgcHVibGljIGhhbGYgZXF1YWxzIHRoZSBwdWJsaWMgc29mdC1kZXJpdmUgb2Ygcm9vdCBwdWIg4oCWIGNoYWluIGNvZGVcbiAgICBjb25zdCBiaXRnb1B1YiA9IChcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoZWQyNTUxOVJvb3RzLmVkMjU1MTlNdWx0aXNpZy5iaXRnbywgJ20vNDQvMjgzLzIvMCcpXG4gICAgKS50b1N0cmluZygnaGV4Jyk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLmtpbmQuc2hvdWxkLmVxdWFsKCdleHRlbmRlZCcpO1xuICAgIC8vIFBpbiB0aGUgcHJpdmF0ZSBoYWx2ZXMgdG8gdGhlIGNyb3NzLXJlcG8gR1YxIGdvbGRlbiB2ZWN0b3IgZm9yIHRoaXMgcGF0aC5cbiAgICBjb25zdCBhbGdvU29mdCA9IGJpcDQ0Rml4dHVyZS5lZDI1NTE5U29mdC52ZWN0b3JzLmZpbmQoKHYpID0+IHYucGF0aCA9PT0gJ20vNDQvMjgzLzIvMCcpO1xuICAgIGlmIChhbGdvU29mdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpeHR1cmUgaXMgbWlzc2luZyB0aGUgbS80NC8yODMvMi8wIHNvZnQgY28tc2lnbmVyIHZlY3RvcicpO1xuICAgIH1cbiAgICByZXN1bHQua2V5cy5iYWNrdXAua0wuc2hvdWxkLmVxdWFsKGFsZ29Tb2Z0LmNoaWxkS0xIZXgpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5rUi5zaG91bGQuZXF1YWwoYWxnb1NvZnQuY2hpbGRLUkhleCk7XG4gICAgLy8gV2l0aCBkaXN0aW5jdCByb290cyB0aGUgdGhyZWUgY2hpbGRyZW4gYXJlIHByb3ZhYmx5IGRpc3RpbmN0LCBzbyBhIHNsb3Qgc3dhcCBjYW5ub3Qgc25lYWsgdGhyb3VnaC5cbiAgICByZXN1bHQua2V5cy51c2VyLnB1Yi5zaG91bGQubm90LmVxdWFsKHJlc3VsdC5rZXlzLmJhY2t1cC5wdWIpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5wdWIuc2hvdWxkLm5vdC5lcXVhbChyZXN1bHQua2V5cy5iaXRnby5wdWIpO1xuICAgIHJlc3VsdC5rZXlzLmJpdGdvLnB1Yi5zaG91bGQuZXF1YWwoYml0Z29QdWIpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIG5vbi1pbnRlZ2VyIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnYnRjJywgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgYWNjb3VudDogMS41LCByb290cyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgL2ludmFsaWQgYWNjb3VudC9cbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcycsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHVzZXJSb290ID0gYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJywgJ2hleCcpKTtcbiAgY29uc3QgYmFja3VwUm9vdCA9IGJpcDMyLmZyb21TZWVkKFxuICAgIEJ1ZmZlci5mcm9tKCcxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMDBmMGUwZDBjMGIwYTA5MDgwNzA2MDUwNDAzMDIwMTAwJywgJ2hleCcpXG4gICk7XG4gIGNvbnN0IGJpdGdvUm9vdCA9IGJpcDMyXG4gICAgLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcyZjJlMmQyYzJiMmEyOTI4MjcyNjI1MjQyMzIyMjEyMDFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwJywgJ2hleCcpKVxuICAgIC5uZXV0ZXJlZCgpO1xuXG4gIGNvbnN0IGtleXMgPSB7XG4gICAgdXNlcjogeyBwcnY6IHVzZXJSb290LnRvQmFzZTU4KCksIHB1YjogdXNlclJvb3QubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0sXG4gICAgYmFja3VwOiB7IHBydjogYmFja3VwUm9vdC50b0Jhc2U1OCgpLCBwdWI6IGJhY2t1cFJvb3QubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0sXG4gICAgYml0Z286IHsgcHViOiBiaXRnb1Jvb3QudG9CYXNlNTgoKSB9LFxuICB9O1xuXG4gIGl0KCdzaWduZWQgbW9kZSByZS1lbmNyeXB0cyBjaGlsZCB4cHJ2cyB1bmRlciBhIHNpbmdsZSBlcGhlbWVyYWwgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXNzcGhyYXNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoeyBpbnB1dCwgcGFzc3dvcmQsIGVuY3J5cHRpb25WZXJzaW9uIH0pID0+IHtcbiAgICAgIHBhc3NwaHJhc2VzLnB1c2gocGFzc3dvcmQpO1xuICAgICAgZW5jcnlwdGlvblZlcnNpb24uc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgcmV0dXJuIGBlbmMoJHtpbnB1dH0pYDtcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIGtleXMsXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KTtcblxuICAgIHJlc3VsdC51c2VyS2V5LnNob3VsZC5lcXVhbChgZW5jKCR7a2V5cy51c2VyLnBydn0pYCk7XG4gICAgcmVzdWx0LmJhY2t1cEtleS5zaG91bGQuZXF1YWwoYGVuYygke2tleXMuYmFja3VwLnBydn0pYCk7XG4gICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbChrZXlzLmJpdGdvLnB1Yik7XG4gICAgKHJlc3VsdC53YWxsZXRQYXNzcGhyYXNlIGFzIHN0cmluZykuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcGFzc3BocmFzZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChwYXNzcGhyYXNlc1sxXSk7XG4gICAgcGFzc3BocmFzZXNbMF0uc2hvdWxkLmVxdWFsKHJlc3VsdC53YWxsZXRQYXNzcGhyYXNlKTtcbiAgICBlbmNyeXB0LmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMik7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG5vbi1wcml2YXRlIGNoaWxkIGtleXMgaW4gc2lnbmVkIG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBrZXlzOiB7IHVzZXI6IHsgcHJ2OiBrZXlzLnVzZXIucHViLCBwdWI6IGtleXMudXNlci5wdWIgfSwgYmFja3VwOiBrZXlzLmJhY2t1cCwgYml0Z286IGtleXMuYml0Z28gfSxcbiAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL211c3QgYmUgcHJpdmF0ZSB4cHJ2cy8pO1xuICB9KTtcblxuICBpdCgndW5zaWduZWQgbW9kZSByZXR1cm5zIHB1YnMgYW5kIG5ldmVyIGVuY3J5cHRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZW5jcnlwdCBzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0IH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLFxuICAgICAga2V5cyxcbiAgICAgIG1vZGU6ICd1bnNpZ25lZCcsXG4gICAgfSk7XG5cbiAgICByZXN1bHQudXNlcktleS5zaG91bGQuZXF1YWwoa2V5cy51c2VyLnB1Yik7XG4gICAgcmVzdWx0LmJhY2t1cEtleS5zaG91bGQuZXF1YWwoa2V5cy5iYWNrdXAucHViKTtcbiAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLmVxdWFsKGtleXMuYml0Z28ucHViKTtcbiAgICByZXN1bHQuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJyk7XG4gICAgZW5jcnlwdC5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyB1bnN1cHBvcnRlZCBzbG90cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdDogc2lub24uc3R1YigpIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ2VkZHNhTXBjJyxcbiAgICAgIGtleXM6IHsgY29tbW9uS2V5Y2hhaW46ICdjaycsIHVzZXI6ICd1JywgYmFja3VwOiAnYicgfSxcbiAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCBzdXBwb3J0ZWQgeWV0Lyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlZDI1NTE5TXVsdGlzaWcnLCAoKSA9PiB7XG4gICAgLy8gR29sZGVuIHZlY3RvcnMgZ2VuZXJhdGVkIHdpdGggYWxnb3NkazogZW5jb2RlQWRkcmVzcyhCdWZmZXIuYWxsb2MoMzIsIG4pKSBhbmRcbiAgICAvLyBtdWx0aXNpZ0FkZHJlc3MoeyB2ZXJzaW9uOiAxLCB0aHJlc2hvbGQ6IDIsIGFkZHJzOiBbLi4uXSB9KSBvdmVyIHRoZSBzYW1lIHB1YnMuXG4gICAgY29uc3QgZWRLZXlzID0ge1xuICAgICAgdXNlcjogeyBraW5kOiAnc2VlZCcsIHNlZWQ6ICcxMScucmVwZWF0KDMyKSwgcHViOiAnMjEnLnJlcGVhdCgzMikgfSxcbiAgICAgIGJhY2t1cDogeyBraW5kOiAnZXh0ZW5kZWQnLCBrTDogJzMxJy5yZXBlYXQoMzIpLCBrUjogJzQxJy5yZXBlYXQoMzIpLCBwdWI6ICc1MScucmVwZWF0KDMyKSB9LFxuICAgICAgYml0Z286IHsgcHViOiAnNjEnLnJlcGVhdCgzMikgfSxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgaXQoJ3Vuc2lnbmVkIG1vZGUgcmV0dXJucyBBTEdPIGFkZHJlc3NlcyBhbmQgdGhlIG11bHRpc2lnIHJvb3RBZGRyZXNzLCBhbmQgbmV2ZXIgZW5jcnlwdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBlbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZW5jcnlwdCBzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46ICdhbGdvJyxcbiAgICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgICAgIGtleXM6IGVkS2V5cyxcbiAgICAgICAgbW9kZTogJ3Vuc2lnbmVkJyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5zbG90ICE9PSAnZWQyNTUxOU11bHRpc2lnJyB8fCByZXN1bHQubW9kZSAhPT0gJ3Vuc2lnbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHVuc2lnbmVkIGVkMjU1MTlNdWx0aXNpZyBrZXkgcGFyYW1zJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC51c2VyS2V5LnNob3VsZC5lcXVhbCgnRUVRU0NJSkJFRVFTQ0lKQkVFUVNDSUpCRUVRU0NJSkJFRVFTQ0lKQkVFUVNDSUpCRUVRWU5JNTNITScpO1xuICAgICAgcmVzdWx0LmJhY2t1cEtleS5zaG91bGQuZXF1YWwoJ0tGSVZDVUtSS0ZJVkNVS1JLRklWQ1VLUktGSVZDVUtSS0ZJVkNVS1JLRklWQ1VLUktGSTMzQjNBT1knKTtcbiAgICAgIHJlc3VsdC5iaXRnb0tleS5zaG91bGQuZXF1YWwoJ01GUVdDWUxCTUZRV0NZTEJNRlFXQ1lMQk1GUVdDWUxCTUZRV0NZTEJNRlFXQ1lMQk1GUVMzS0hFSE0nKTtcbiAgICAgIGFzc2VydChyZXN1bHQucm9vdEFkZHJlc3MpO1xuICAgICAgcmVzdWx0LnJvb3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnTEhXRUlPVTJVSVBTS0NaM1hNS1FVS1JZWTNGTTZYVFpLQkhETUlVNzM3T1FRRVhRVFlTR0RGT0hETScpO1xuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117NTh9JC8pO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZXh0ZXJuYWxCYWNrdXBTaWduZXInKTtcbiAgICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduZWQgbW9kZSBlbmNyeXB0cyB0aGUgNTgtY2hhciBzZWVkIGFuZCByZXR1cm5zIGEgbGF6eSBleHRlcm5hbCBiYWNrdXAgc2lnbmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVhbCBkZXJpdmF0aW9uIG91dHB1dCwgd2l0aCBhIGRpc3RpbmN0IEJpdEdvIHJvb3Qgc28gdGhlIGJhY2t1cCBjaGlsZCBhbmQgdGhlIEJpdEdvIGNoaWxkXG4gICAgICAvLyBhcmUgZGlmZmVyZW50IGtleXMg4oCUIGEgc2xvdCBzd2FwIGJldHdlZW4gdGhlbSBtdXN0IGNoYW5nZSB0aGUgb3V0cHV0cy5cbiAgICAgIGNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcbiAgICAgIGNvbnN0IGJhY2t1cENoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhhYik7XG4gICAgICBjb25zdCBiaXRnb1NlZWQgPSBCdWZmZXIuYWxsb2MoMzIsIDB4MjIpO1xuICAgICAgY29uc3QgYml0Z29Sb290UHViID0gQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoYml0Z29TZWVkKSk7XG4gICAgICBjb25zdCBiaXRnb0NoYWluQ29kZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHhjZCk7XG4gICAgICBjb25zdCBlZDI1NTE5Um9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgICAgLi4ubWFrZVJvb3RzKHsgdXNlcjogJ3gnLCBiYWNrdXA6ICd5JywgYml0Z286ICd6JyB9KSxcbiAgICAgICAgZWQyNTUxOU11bHRpc2lnOiB7XG4gICAgICAgICAgdXNlcjogU1RSS0VZX1NFRUQsXG4gICAgICAgICAgYmFja3VwOiB7IHBydjogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogZW5jb2RlRWQyNTUxOUNoYWluQ29kZShiYWNrdXBDaGFpbkNvZGUpIH0sXG4gICAgICAgICAgYml0Z286IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoYml0Z29Sb290UHViLCBiaXRnb0NoYWluQ29kZSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVyaXZlZCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHtcbiAgICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAgYWNjb3VudDogMCxcbiAgICAgICAgcm9vdHM6IGVkMjU1MTlSb290cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKGRlcml2ZWQuc2xvdCAhPT0gJ2VkMjU1MTlNdWx0aXNpZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlZDI1NTE5TXVsdGlzaWcgc2xvdCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXNzcGhyYXNlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICh7IGlucHV0LCBwYXNzd29yZCwgZW5jcnlwdGlvblZlcnNpb24gfSkgPT4ge1xuICAgICAgICBwYXNzcGhyYXNlcy5wdXNoKHBhc3N3b3JkKTtcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb24uc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICByZXR1cm4gYGVuYygke2lucHV0fSlgO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgICAgYml0Z28sXG4gICAgICAgIGNvaW46ICd0YWxnbycsXG4gICAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgICBrZXlzOiBkZXJpdmVkLmtleXMsXG4gICAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnIHx8IHJlc3VsdC5tb2RlICE9PSAnc2lnbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHNpZ25lZCBlZDI1NTE5TXVsdGlzaWcga2V5IHBhcmFtcycpO1xuICAgICAgfVxuXG4gICAgICBkZXJpdmVkLmtleXMudXNlci5wdWIuc2hvdWxkLm5vdC5lcXVhbChkZXJpdmVkLmtleXMuYmFja3VwLnB1Yik7XG4gICAgICBkZXJpdmVkLmtleXMuYmFja3VwLnB1Yi5zaG91bGQubm90LmVxdWFsKGRlcml2ZWQua2V5cy5iaXRnby5wdWIpO1xuXG4gICAgICAvLyB1c2VyIHNlZWQgcmUtZW5jb2RlZCBhcyB0aGUgNTgtY2hhciBBTEdPIHNlZWQgYmVmb3JlIGVuY3J5cHRpb247IG5vIGJhY2t1cEtleSDigJQgdGhlXG4gICAgICAvLyBzZWVkbGVzcyBiYWNrdXAgY2hpbGQgb25seSBleGlzdHMgYXMgdGhlIGxhenkgc2lnbmVyLlxuICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtlbmNvZGVBbGdvS2V5KEJ1ZmZlci5mcm9tKGRlcml2ZWQua2V5cy51c2VyLnNlZWQsICdoZXgnKSl9KWApO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwS2V5Jyk7XG4gICAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLmVxdWFsKGVuY29kZUFsZ29LZXkoQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLmJpdGdvLnB1YiwgJ2hleCcpKSk7XG4gICAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLm1hdGNoKC9eW0EtWjItN117NTh9JC8pO1xuICAgICAgLy8gVGhlIHdhbGxldCdzIG9uLWNoYWluIGFkZHJlc3Mgb3ZlciB0aGUgdGhyZWUgZGlzdGluY3QgY2hpbGRyZW4sIGluIHdhbGxldC1jcmVhdGlvbiBvcmRlci5cbiAgICAgIGFzc2VydChyZXN1bHQucm9vdEFkZHJlc3MpO1xuICAgICAgcmVzdWx0LnJvb3RBZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgYWxnb011bHRpc2lnQWRkcmVzcygxLCAyLCBbXG4gICAgICAgICAgQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLnVzZXIucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20oZGVyaXZlZC5rZXlzLmJhY2t1cC5wdWIsICdoZXgnKSxcbiAgICAgICAgICBCdWZmZXIuZnJvbShkZXJpdmVkLmtleXMuYml0Z28ucHViLCAnaGV4JyksXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgcmVzdWx0LnJvb3RBZGRyZXNzLnNob3VsZC5tYXRjaCgvXltBLVoyLTddezU4fSQvKTtcbiAgICAgIHJlc3VsdC53YWxsZXRQYXNzcGhyYXNlLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgcGFzc3BocmFzZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFzc3BocmFzZXNbMF0uc2hvdWxkLmVxdWFsKHJlc3VsdC53YWxsZXRQYXNzcGhyYXNlKTtcbiAgICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgxKTtcblxuICAgICAgLy8gdGhlIGxhenkgc2lnbmVyIHNpZ25zIHdpdGggdGhlIHJlYWwgZXh0ZW5kZWQga2V5IGhhbHZlcyBhbmQgaXRzIHB1YiBtYXRjaGVzIHRoZSBiYWNrdXAgY2hpbGRcbiAgICAgIHJlc3VsdC5leHRlcm5hbEJhY2t1cFNpZ25lci5wdWJsaWNLZXkuc2hvdWxkLmVxdWFsKGRlcml2ZWQua2V5cy5iYWNrdXAucHViKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZGVhZGJlZWYnLCAnaGV4Jyk7XG4gICAgICBjb25zdCB7IHNpZ25hdHVyZSB9ID0gYXdhaXQgcmVzdWx0LmV4dGVybmFsQmFja3VwU2lnbmVyLnNpZ24obWVzc2FnZSk7XG4gICAgICBzaWduYXR1cmUuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17MTI4fSQvKTtcbiAgICAgIGVkMjU1MTlcbiAgICAgICAgLnZlcmlmeShcbiAgICAgICAgICBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKSksXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSksXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocmVzdWx0LmV4dGVybmFsQmFja3VwU2lnbmVyLnB1YmxpY0tleSwgJ2hleCcpKVxuICAgICAgICApXG4gICAgICAgIC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGNvaW4gb2YgWydoYmFyJywgJ3RoYmFyJ10pIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZSBvZiBbJ3NpZ25lZCcsICd1bnNpZ25lZCddIGFzIGNvbnN0KSB7XG4gICAgICAgIGl0KGAke2NvaW59ICR7bW9kZX0gbW9kZSBlbmNvZGVzIEhlZGVyYSBrZXlzIHdpdGhvdXQgb3ZlcndyaXRpbmcgdGhlIGNhbGxlcidzIHJvb3RBZGRyZXNzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICh7IGlucHV0IH0pID0+IGBlbmMoJHtpbnB1dH0pYCk7XG4gICAgICAgICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgICAgICAgYml0Z28sXG4gICAgICAgICAgICBjb2luLFxuICAgICAgICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgICAgICAgICBrZXlzOiBlZEtleXMsXG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXNzZXJ0KCEoJ3Jvb3RBZGRyZXNzJyBpbiByZXN1bHQpKTtcbiAgICAgICAgICBjb25zdCByb290QWRkcmVzcyA9ICcwLjAuMTIzNDUnO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh7IHJvb3RBZGRyZXNzLCAuLi5yZXN1bHQgfS5yb290QWRkcmVzcywgcm9vdEFkZHJlc3MpO1xuICAgICAgICAgIHJlc3VsdC5iaXRnb0tleS5zaG91bGQuZXF1YWwoJzMwMmEzMDA1MDYwMzJiNjU3MDAzMjEwMCcgKyBlZEtleXMuYml0Z28ucHViKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQubW9kZSA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgICAgICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKCczMDJhMzAwNTA2MDMyYjY1NzAwMzIxMDAnICsgZWRLZXlzLnVzZXIucHViKTtcbiAgICAgICAgICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKCczMDJhMzAwNTA2MDMyYjY1NzAwMzIxMDAnICsgZWRLZXlzLmJhY2t1cC5wdWIpO1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZXh0ZXJuYWxCYWNrdXBTaWduZXInKTtcbiAgICAgICAgICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQoZW5jcnlwdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRTZWVkID0gJzMwMmUwMjAxMDAzMDA1MDYwMzJiNjU3MDA0MjIwNDIwJyArIGVkS2V5cy51c2VyLnNlZWQ7XG4gICAgICAgICAgICByZXN1bHQudXNlcktleS5zaG91bGQuZXF1YWwoYGVuYygke2VuY29kZWRTZWVkfSlgKTtcbiAgICAgICAgICAgIHJlc3VsdC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2JhY2t1cEtleScpO1xuICAgICAgICAgICAgcmVzdWx0LmV4dGVybmFsQmFja3VwU2lnbmVyLnB1YmxpY0tleS5zaG91bGQuZXF1YWwoZWRLZXlzLmJhY2t1cC5wdWIpO1xuICAgICAgICAgICAgcmVzdWx0LndhbGxldFBhc3NwaHJhc2Uuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17NjR9JC8pO1xuICAgICAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoZW5jcnlwdCk7XG4gICAgICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aEV4YWN0bHkoZW5jcnlwdCwge1xuICAgICAgICAgICAgICBpbnB1dDogZW5jb2RlZFNlZWQsXG4gICAgICAgICAgICAgIHBhc3N3b3JkOiByZXN1bHQud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGl0KCdyZWplY3RzIHNsb3QtMiBjb2lucyB0aGF0IGhhdmUgbm8gcmVnaXN0cnkgZW50cnkgeWV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgICAgYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICAgIGJpdGdvLFxuICAgICAgICBjb2luOiAneGxtJyxcbiAgICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgICAgIGtleXM6IGVkS2V5cyxcbiAgICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9jb2luICd4bG0nIGVkMjU1MTlNdWx0aXNpZyBpcyBub3Qgc3VwcG9ydGVkIHlldC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgZWQyNTUxOSBjaGlsZHJlbiB3aXRoIG1hbGZvcm1lZCBwdWJsaWMga2V5cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0OiBzaW5vbi5zdHViKCkgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICAgIGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgICBiaXRnbyxcbiAgICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgICBzbG90OiAnZWQyNTUxOU11bHRpc2lnJyxcbiAgICAgICAga2V5czogeyAuLi5lZEtleXMsIGJpdGdvOiB7IHB1YjogJzEyMzQnIH0gfSxcbiAgICAgICAgbW9kZTogJ3Vuc2lnbmVkJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2VkMjU1MTkgY2hpbGQgcHVibGljIGtleXMgbXVzdCBiZSAzMiBieXRlcy8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnU2FmZSBlY2RzYU1wYyBkZXJpdmUg4oaSIHNpZ24gKGdhdGUpJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZGVyaXZlcyBhIGNoaWxkLCByZWJ1aWxkcyAyLW9mLTIgc2hhcmVzLCBhbmQgc2lnbnMgYSBtZXNzYWdlIHZlcmlmaWVkIGF0IG0vMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnXSA9IGF3YWl0IERrbHNVdGlscy5nZW5lcmF0ZURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IFt2cmZVc2VyLCB2cmZCYWNrdXBdID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG5cbiAgICBjb25zdCByb290Q29tbW9uS2V5Y2hhaW4gPSBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4odXNlckRrZy5nZXRLZXlTaGFyZSgpKTtcblxuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IERrbHNWcmZVdGlscy5kZXJpdmVTYWZlRWNkc2FNcGNDaGlsZCh7XG4gICAgICB1c2VyUm9vdDogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgYmFja3VwUm9vdDogeyBzaWduaW5nOiBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksIHZyZjogdnJmQmFja3VwLmdldEtleVNoYXJlKCkgfSxcbiAgICAgIGFjY291bnQ6IDAsXG4gICAgICBjb2luVHlwZTogNjAsXG4gICAgICBzYWZlU2xvdE9yZGluYWw6IDMsXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZGVyaXZlZCBjaGlsZCBtdXN0IG5ldmVyIGJlIHRoZSByb290ICh0aGUgXCJyb290IGVudmVsb3BlIGluIHRoZSBjaGlsZCBwb3NpdGlvblwiIGZvb3RndW4pLlxuICAgIGNvbW1vbktleWNoYWluLnNob3VsZC5ub3QuZXF1YWwocm9vdENvbW1vbktleWNoYWluKTtcblxuICAgIC8vIFJlYnVpbGQgMi1vZi0yIGtleXNoYXJlcyBmcm9tIHRoZSBkZXJpdmVkIHJlZHVjZWQgQ0JPUiwgZXhhY3RseSBhcyB0aGUgc2lnbmVyJ3MgcmV0cm9maXQgZG9lcy5cbiAgICBjb25zdCB0b1JldHJvZml0ID0gKGI2NDogc3RyaW5nKTogRGtsc1R5cGVzLlJldHJvZml0RGF0YSA9PiB7XG4gICAgICBjb25zdCByZWR1Y2VkID0gRGtsc1R5cGVzLmdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmUoQnVmZmVyLmZyb20oYjY0LCAnYmFzZTY0JykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeFNoYXJlOiB7XG4gICAgICAgICAgeDogQnVmZmVyLmZyb20ocmVkdWNlZC5wcnYpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB5OiBCdWZmZXIuZnJvbShyZWR1Y2VkLnB1YikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIGNoYWluY29kZTogQnVmZmVyLmZyb20ocmVkdWNlZC5yb290Q2hhaW5Db2RlKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0sXG4gICAgICAgIHhpTGlzdDogcmVkdWNlZC54TGlzdC5zbGljZSgwLCAyKSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBbdXNlcjJvZjIsIGJhY2t1cDJvZjJdID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlMm9mMktleVNoYXJlcyhcbiAgICAgIHRvUmV0cm9maXQodXNlckNoaWxkKSxcbiAgICAgIHRvUmV0cm9maXQoYmFja3VwQ2hpbGQpXG4gICAgKTtcblxuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gQnVmZmVyLmZyb20oJzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYnLCAnaGV4Jyk7XG4gICAgY29uc3QgdXNlckRzZyA9IG5ldyBEa2xzRHNnLkRzZyh1c2VyMm9mMi5nZXRLZXlTaGFyZSgpLCAwLCAnbS8wJywgbWVzc2FnZUhhc2gpO1xuICAgIGNvbnN0IGJhY2t1cERzZyA9IG5ldyBEa2xzRHNnLkRzZyhiYWNrdXAyb2YyLmdldEtleVNoYXJlKCksIDEsICdtLzAnLCBtZXNzYWdlSGFzaCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlU3RyaW5nID0gRGtsc1V0aWxzLnZlcmlmeUFuZENvbnZlcnREa2xzU2lnbmF0dXJlKFxuICAgICAgbWVzc2FnZUhhc2gsXG4gICAgICAoYXdhaXQgRGtsc1V0aWxzLmV4ZWN1dGVUaWxsUm91bmQoNSwgdXNlckRzZywgYmFja3VwRHNnKSkgYXMgRGtsc1R5cGVzLkRlc2VyaWFsaXplZERrbHNTaWduYXR1cmUsXG4gICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICdtLzAnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZmFsc2VcbiAgICApO1xuXG4gICAgLy8gdmVyaWZ5QW5kQ29udmVydERrbHNTaWduYXR1cmUgcmVjb3ZlcnMgdGhlIHB1YmtleSBmcm9tIHRoZSBzaWduYXR1cmUgYW5kIGNoZWNrcyBpdCBhZ2FpbnN0XG4gICAgLy8gZGVyaXZlVW5oYXJkZW5lZChjaGlsZENLLCAnbS8wJyk7IGl0IHRocm93cyBvbiBtaXNtYXRjaCwgc28gYSByZXR1cm5lZCBzdHJpbmcgaXMgcHJvb2YuXG4gICAgc2lnbmF0dXJlU3RyaW5nLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHNpZ25hdHVyZVN0cmluZy5zaG91bGQubWF0Y2goL15cXGQrOlswLTlhLWZdKzpbMC05YS1mXSs6WzAtOWEtZl0rJC8pO1xuICB9KTtcbn0pO1xuIl19