@bitgo/sdk-core 38.23.0 → 39.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +37 -3
  2. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  4. package/dist/src/bitgo/errors.d.ts +6 -0
  5. package/dist/src/bitgo/errors.d.ts.map +1 -1
  6. package/dist/src/bitgo/errors.js +11 -2
  7. package/dist/src/bitgo/keychain/iKeychains.d.ts +22 -2
  8. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  9. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  10. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  11. package/dist/src/bitgo/keychain/keychains.js +31 -1
  12. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +18 -0
  13. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
  14. package/dist/src/bitgo/safe/derivableEd25519Pub.js +39 -3
  15. package/dist/src/bitgo/safe/recovery.d.ts +44 -3
  16. package/dist/src/bitgo/safe/recovery.d.ts.map +1 -1
  17. package/dist/src/bitgo/safe/recovery.js +74 -46
  18. package/dist/src/bitgo/safe/safe.d.ts +5 -5
  19. package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
  20. package/dist/src/bitgo/safe/safe.js +24 -16
  21. package/dist/src/bitgo/tss/common.d.ts +11 -2
  22. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  23. package/dist/src/bitgo/tss/common.js +16 -4
  24. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +10 -5
  25. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
  26. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +11 -6
  27. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  28. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
  29. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +6 -0
  30. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  31. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  32. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +5 -4
  33. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  34. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +5 -9
  35. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +4 -9
  36. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
  37. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +16 -21
  38. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +32 -4
  39. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  40. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +92 -3
  41. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +5 -5
  42. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
  43. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +51 -76
  44. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +40 -21
  45. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -1
  46. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +2 -13
  47. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
  48. package/dist/src/bitgo/utils/tss/recipientUtils.js +12 -1
  49. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -1
  50. package/dist/src/bitgo/wallet/BuildParams.d.ts +1 -0
  51. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  52. package/dist/src/bitgo/wallet/BuildParams.js +5 -1
  53. package/dist/src/bitgo/wallet/iWallet.d.ts +13 -0
  54. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  55. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  56. package/dist/src/bitgo/wallet/iWallets.d.ts +1 -0
  57. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  58. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  59. package/dist/src/bitgo/wallet/safeKeychain.d.ts +1 -1
  60. package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
  61. package/dist/src/bitgo/wallet/safeKeychain.js +4 -3
  62. package/dist/src/bitgo/wallet/wallet.d.ts +32 -1
  63. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  64. package/dist/src/bitgo/wallet/wallet.js +210 -83
  65. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  66. package/dist/src/bitgo/wallet/wallets.js +23 -9
  67. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +29 -1
  68. package/dist/test/unit/bitgo/safe/recovery.d.ts.map +1 -1
  69. package/dist/test/unit/bitgo/safe/recovery.js +164 -6
  70. package/dist/test/unit/bitgo/safe/safe.js +54 -32
  71. package/dist/test/unit/bitgo/safe/safeDerivation.js +15 -53
  72. package/dist/test/unit/bitgo/tss/common.js +12 -5
  73. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +422 -5
  74. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +215 -44
  75. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +37 -1
  76. package/dist/test/unit/bitgo/wallet/BuildParams.js +14 -1
  77. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +29 -49
  78. package/dist/test/unit/bitgo/wallet/safeShareWallet.js +5 -4
  79. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +180 -2
  80. package/dist/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +6 -6
@@ -49,7 +49,8 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
49
49
  throw new Error('expected deriveKeyWithSeedBip32 to return a private key');
50
50
  }
51
51
  const softDerivedPrv = softDerivedNode.key.toBase58();
52
- const hardened = (0, src_1.deriveSafeChildHardenedFromXprv)(prv, '123');
52
+ const childPath = (0, src_1.buildSafeBip44Path)(0, 'secp256k1Multisig', 123);
53
+ const hardened = (0, src_1.deriveSafeChildHardenedFromXprv)(prv, childPath);
53
54
  const passphrase = 'test-passphrase';
54
55
  const rootKeyId = 'root-key-id';
55
56
  let mockBitGo;
@@ -114,29 +115,6 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
114
115
  ...overrides,
115
116
  });
116
117
  }
117
- describe('safeDerivation', function () {
118
- it('builds the hardened path from the sequential mint index', function () {
119
- (0, src_1.getSafeHardenedDerivationPath)(123).should.eql("m/123'");
120
- (0, src_1.getSafeHardenedDerivationPath)('0').should.eql("m/0'");
121
- });
122
- it('rejects a non-integer index', function () {
123
- (() => (0, src_1.getSafeHardenedDerivationPath)('abc')).should.throw(/Invalid safe derivation index/);
124
- (() => (0, src_1.getSafeHardenedDerivationPath)('')).should.throw(/Invalid safe derivation index/);
125
- (() => (0, src_1.getSafeHardenedDerivationPath)('1e2')).should.throw(/Invalid safe derivation index/);
126
- });
127
- it('hardened-derives a child that differs from soft deriveKeyWithSeed', function () {
128
- hardened.derivationPath.should.eql("m/123'");
129
- hardened.prv.should.not.eql(softDerivedPrv);
130
- });
131
- it('parses the hardened derivation path as m/<n> primed', function () {
132
- (0, src_1.parseDerivedFromParentWithHardenedPath)("m/0'").should.eql(0);
133
- (0, src_1.parseDerivedFromParentWithHardenedPath)("m/123'").should.eql(123);
134
- (() => (0, src_1.parseDerivedFromParentWithHardenedPath)('m/0')).should.throw(/derivedFromParentWithHardenedPath/);
135
- (() => (0, src_1.parseDerivedFromParentWithHardenedPath)('m/999999/a/b')).should.throw(/derivedFromParentWithHardenedPath/);
136
- (() => (0, src_1.parseDerivedFromParentWithHardenedPath)("not-a-path'")).should.throw(/derivedFromParentWithHardenedPath/);
137
- (() => (0, src_1.parseDerivedFromParentWithHardenedPath)("m/0''")).should.throw(/derivedFromParentWithHardenedPath/);
138
- });
139
- });
140
118
  describe('fetchRootKeychainForSafeChild', function () {
141
119
  it('throws when child keychain has no parent', async function () {
142
120
  await (0, src_1.fetchRootKeychainForSafeChild)(mockBaseCoin.keychains(), {
@@ -251,7 +229,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
251
229
  pub: hardened.pub,
252
230
  type: 'independent',
253
231
  parent: rootKeyId,
254
- derivedFromParentWithPath: "m/123'",
232
+ derivedFromParentWithPath: childPath,
255
233
  },
256
234
  walletPassphrase: passphrase,
257
235
  });
@@ -297,34 +275,36 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
297
275
  pub: hardened.pub,
298
276
  type: 'independent',
299
277
  parent: rootKeyId,
300
- derivedFromParentWithPath: "m/0'",
278
+ derivedFromParentWithPath: "m/44'/0'/1'/0'",
301
279
  },
302
280
  walletPassphrase: passphrase,
303
281
  })
304
282
  .should.be.rejectedWith(src_1.SafeDerivedPublicKeyMismatchError);
305
283
  });
306
- it('rejects a malformed derivedFromParentWithPath', async function () {
307
- const wallet = makeWallet({ safe: 'safe-id-1' });
308
- keychainsGetStub.resolves({
309
- id: rootKeyId,
310
- source: 'user',
311
- encryptedPrv: `enc:${prv}`,
312
- type: 'independent',
313
- pub: 'root-pub',
314
- });
315
- await wallet
316
- .getUserPrv({
317
- keychain: {
318
- id: 'child-key',
319
- pub: hardened.pub,
284
+ for (const storedPath of ["not-a-path'", "m/123'", 'm/44/0/1/123']) {
285
+ it(`rejects a non-BIP44 derivedFromParentWithPath ${JSON.stringify(storedPath)}`, async function () {
286
+ const wallet = makeWallet({ safe: 'safe-id-1' });
287
+ keychainsGetStub.resolves({
288
+ id: rootKeyId,
289
+ source: 'user',
290
+ encryptedPrv: `enc:${prv}`,
320
291
  type: 'independent',
321
- parent: rootKeyId,
322
- derivedFromParentWithPath: "not-a-path'",
323
- },
324
- walletPassphrase: passphrase,
325
- })
326
- .should.be.rejectedWith(/derivedFromParentWithHardenedPath/);
327
- });
292
+ pub: 'root-pub',
293
+ });
294
+ await wallet
295
+ .getUserPrv({
296
+ keychain: {
297
+ id: 'child-key',
298
+ pub: hardened.pub,
299
+ type: 'independent',
300
+ parent: rootKeyId,
301
+ derivedFromParentWithPath: storedPath,
302
+ },
303
+ walletPassphrase: passphrase,
304
+ })
305
+ .should.be.rejectedWith(/derivedFromParentWithPath/);
306
+ });
307
+ }
328
308
  it('fails closed for TSS safe owner instead of returning the root prv', async function () {
329
309
  const wallet = makeWallet({ safe: 'safe-id-1', multisigType: 'tss' });
330
310
  await wallet
@@ -377,7 +357,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
377
357
  pub: 'xpub-wrong-registered-key',
378
358
  type: 'independent',
379
359
  parent: rootKeyId,
380
- derivedFromParentWithPath: "m/123'",
360
+ derivedFromParentWithPath: childPath,
381
361
  },
382
362
  walletPassphrase: passphrase,
383
363
  })
@@ -668,4 +648,4 @@ describe('WCN-1200 recreateAndSignTSSTransaction safe path', function () {
668
648
  recreateTxRequest.calledOnce.should.be.true();
669
649
  });
670
650
  });
671
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUdldFVzZXJQcnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vd2FsbGV0L3NhZmVHZXRVc2VyUHJ2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLDhDQUF3QztBQUN4Qyx5Q0FheUI7QUFDekIsNkRBQTBEO0FBRTFELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixRQUFRLENBQUMsa0RBQWtELEVBQUU7SUFDM0QsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxlQUFlLEdBQUcsbUJBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBRWhDLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGdCQUFpQyxDQUFDO0lBQ3RDLElBQUksV0FBNEIsQ0FBQztJQUNqQyxJQUFJLFdBQTRCLENBQUM7SUFFakMsTUFBTSxjQUFjLEdBQUc7UUFDckIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUs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QU0sZUFBZSxDQUFDLDZCQUE2QixDQUNoRSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxFQUM1QixJQUFJLG1CQUFhLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHtcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbiAgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQsXG4gIGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoLFxuICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCxcbiAgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcixcbiAgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yLFxuICBNaXNzaW5nRW5jcnlwdGVkS2V5Y2hhaW5FcnJvcixcbiAgUGVuZGluZ0FwcHJvdmFsLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IsXG4gIFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yLFxuICBXYWxsZXQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9iYXNlQ29pbic7XG5cbnJlcXVpcmUoJ3Nob3VsZC1zaW5vbicpO1xuXG5kZXNjcmliZSgnV0NOLTEyMDAgc2FmZSBjaGlsZCBnZXRVc2VyUHJ2IHJvb3QtZmV0Y2ggZGV0b3VyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcnYgPVxuICAgICd4cHJ2OXMyMVpyUUgxNDNLM2hla3lOajdUY2lSNFhOWWUxa01qNjhXMmlwakpHTkhFVFdQN280MkFqRG5TUGdLaGRaNHg4TkJBdmFMNzJSclhqdVhOZG1rTXFMRVJaemE3M29ZdWdHdGJMRlhHOGcnO1xuICBjb25zdCBzb2Z0RGVyaXZlZE5vZGUgPSBCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZEJpcDMyKGJpcDMyLmZyb21CYXNlNTgocHJ2KSwgJzEyMycpO1xuICBpZiAoIXNvZnREZXJpdmVkTm9kZS5rZXkucHJpdmF0ZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZGVyaXZlS2V5V2l0aFNlZWRCaXAzMiB0byByZXR1cm4gYSBwcml2YXRlIGtleScpO1xuICB9XG4gIGNvbnN0IHNvZnREZXJpdmVkUHJ2ID0gc29mdERlcml2ZWROb2RlLmtleS50b0Jhc2U1OCgpO1xuICBjb25zdCBoYXJkZW5lZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYocHJ2LCAnMTIzJyk7XG4gIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgY29uc3Qgcm9vdEtleUlkID0gJ3Jvb3Qta2V5LWlkJztcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IGtleWNoYWluc0dldFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGVuY3J5cHRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBkZWNyeXB0U3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGJhc2VXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGtleWNoYWluc0dldFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZW5jcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBlbmNyeXB0OiBlbmNyeXB0U3R1YixcbiAgICAgIGRlY3J5cHQ6IGRlY3J5cHRTdHViLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS8nKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0Q2hhaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0YnRjJyksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdidGMnKSxcbiAgICAgIGdldEZ1bGxOYW1lOiBzaW5vbi5zdHViKCkucmV0dXJucygnVGVzdCBCaXRjb2luJyksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtdKSxcbiAgICAgIH0pLFxuICAgICAgZGVyaXZlS2V5V2l0aFNlZWQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHsga2V5LCBzZWVkIH06IHsga2V5OiBzdHJpbmc7IHNlZWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IHBydiAmJiBzZWVkID09PSAnMTIzJykge1xuICAgICAgICAgIHJldHVybiB7IGtleTogc29mdERlcml2ZWRQcnYsIGRlcml2YXRpb25QYXRoOiAnbS85OTk5OTkvLi4uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogYGRlcml2ZWQoJHtrZXl9LCR7c2VlZH0pYCwgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH07XG4gICAgICB9KSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGJ0YyR7cGF0aH1gKSxcbiAgICAgIHN1cHBvcnRzU3Rha2luZzogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAga2V5SWRzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJldHVybnMoWzAsIDEsIDJdKSxcbiAgICB9O1xuXG4gICAgZGVjcnlwdFN0dWIuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkICE9PSBwYXNzcGhyYXNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuc3RhcnRzV2l0aCgnZW5jOicpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5zbGljZSg0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbWFrZVdhbGxldChvdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBXYWxsZXQge1xuICAgIHJldHVybiBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luIGFzIHVua25vd24gYXMgQmFzZUNvaW4sIHtcbiAgICAgIC4uLmJhc2VXYWxsZXREYXRhLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH0pO1xuICB9XG5cbiAgZGVzY3JpYmUoJ3NhZmVEZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdidWlsZHMgdGhlIGhhcmRlbmVkIHBhdGggZnJvbSB0aGUgc2VxdWVudGlhbCBtaW50IGluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoMTIzKS5zaG91bGQuZXFsKFwibS8xMjMnXCIpO1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzAnKS5zaG91bGQuZXFsKFwibS8wJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWludGVnZXIgaW5kZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJ2FiYycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzFlMicpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFyZGVuZWQtZGVyaXZlcyBhIGNoaWxkIHRoYXQgZGlmZmVycyBmcm9tIHNvZnQgZGVyaXZlS2V5V2l0aFNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBoYXJkZW5lZC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXFsKFwibS8xMjMnXCIpO1xuICAgICAgaGFyZGVuZWQucHJ2LnNob3VsZC5ub3QuZXFsKHNvZnREZXJpdmVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXJzZXMgdGhlIGhhcmRlbmVkIGRlcml2YXRpb24gcGF0aCBhcyBtLzxuPiBwcmltZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChcIm0vMCdcIikuc2hvdWxkLmVxbCgwKTtcbiAgICAgIHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoKFwibS8xMjMnXCIpLnNob3VsZC5lcWwoMTIzKTtcbiAgICAgICgoKSA9PiBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCgnbS8wJykpLnNob3VsZC50aHJvdygvZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgICAoKCkgPT4gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoJ20vOTk5OTk5L2EvYicpKS5zaG91bGQudGhyb3coL2Rlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aC8pO1xuICAgICAgKCgpID0+IHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoKFwibm90LWEtcGF0aCdcIikpLnNob3VsZC50aHJvdygvZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgICAoKCkgPT4gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoXCJtLzAnJ1wiKSkuc2hvdWxkLnRocm93KC9kZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0aHJvd3Mgd2hlbiBjaGlsZCBrZXljaGFpbiBoYXMgbm8gcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2NoaWxkS2V5Y2hhaW4ucGFyZW50IGlzIHJlcXVpcmVkIHRvIGZldGNoIHRoZSByb290IGtleWNoYWluJyk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkUm9vdEtleWNoYWluU291cmNlRXJyb3Igd2hlbiByb290IHNvdXJjZSBpcyBiYWNrdXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jOnJvb3QnLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB0aGUgcm9vdCBrZXljaGFpbiB3aGVuIHNvdXJjZSBpcyB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdCA9IHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogJ2VuYzpyb290JyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMocm9vdCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkKG1vY2tCYXNlQ29pbi5rZXljaGFpbnMoKSwge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChyb290KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiByb290IGtleWNoYWluIGhhcyBubyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zKCksIHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2RvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRVc2VyUHJ2JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0aHJvd3Mgd2hlbiBrZXljaGFpbiBoYXMgbm8gZW5jcnlwdGVkUHJ2IG9uIGEgbm9uLXNhZmUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGEgbm9uLXNhZmUgd2FsbGV0IGV2ZW4gd2hlbiBrZXljaGFpbiBoYXMgcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGEgc2FmZSB3YWxsZXQgd2hlbiBrZXljaGFpbiBoYXMgbm8gcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmV0Y2hlcyByb290IGFuZCBoYXJkZW5lZC1kZXJpdmVzIGNoaWxkIGtleSBmb3Igc2FmZSBvd25lcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzEyMydcIixcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChoYXJkZW5lZC5wcnYpO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuZXFsKHNvZnREZXJpdmVkUHJ2KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgaWQ6IHJvb3RLZXlJZCB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlcXVpcmVzIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggb24gdGhlIGNoaWxkIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGNsb3NlZCB3aGVuIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgcHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzAnXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6IGhhcmRlbmVkLnB1YixcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGg6IFwibm90LWEtcGF0aCdcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBjbG9zZWQgZm9yIFRTUyBzYWZlIG93bmVyIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByb290IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgbXVsdGlzaWdUeXBlOiAndHNzJyB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAndW5yZWxhdGVkLWNoaWxkLXB1YicsXG4gICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgY2xvc2VkIGZvciBlZDI1NTE5IG9uY2hhaW4gc2FmZSBvd25lciBpbnN0ZWFkIG9mIEJJUDMyLWRlcml2aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0Jhc2VDb2luLmdldEZhbWlseS5yZXR1cm5zKCd4bG0nKTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgY29pbjogJ3R4bG0nIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Fib3J0cyBsb2NhbGx5IHdoZW4gZGVyaXZlZCBwdWIgZG9lcyBub3QgbWF0Y2ggcmVnaXN0ZXJlZCBjaGlsZCBwdWInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAneHB1Yi13cm9uZy1yZWdpc3RlcmVkLWtleScsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vMTIzJ1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNyeXB0cyBjaGlsZCBlbmNyeXB0ZWRQcnYgYXMtaXMgZm9yIHdhbGxldCBzaGFyZWUgKGhhcmRlbmVkIGNoaWxkIHBydiknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZFBydiA9ICdjaGlsZC1sZXZlbC1wcnYnO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiAnMTIzJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtjaGlsZFBydn1gLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGNoaWxkUHJ2KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgYXV0by1wb3B1bGF0ZSBjb2xkRGVyaXZhdGlvblNlZWQgd2hlbiBleHBsaWNpdCBwcnYgYW5kIGVuY3J5cHRlZFBydiBhcmUgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoaWxkUHJ2ID0gJ2NoaWxkLWxldmVsLXBydic7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgcHJ2OiBjaGlsZFBydixcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke2NoaWxkUHJ2fWAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoY2hpbGRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N0aWxsIGF1dG8tcG9wdWxhdGVzIGNvbGREZXJpdmF0aW9uU2VlZCBmb3IgU01DIHdpdGggcGFyYW1zLnBydiBhbmQgbm8gZW5jcnlwdGVkUHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIHBydixcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ3NtYy1rZXknLFxuICAgICAgICAgIHB1YjogJ3NtYy1wdWInLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoc29mdERlcml2ZWRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhcHBseSBhbiBleHBsaWNpdCBjb2xkRGVyaXZhdGlvblNlZWQgYWZ0ZXIgZGVjcnlwdGluZyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KCk7XG4gICAgICBjb25zdCBjaGlsZFBydiA9IHBydjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYoe1xuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGlkOiAnc21jLWtleScsXG4gICAgICAgICAgcHViOiAnc21jLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtjaGlsZFBydn1gLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICBjb2xkRGVyaXZhdGlvblNlZWQ6ICcxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGNoaWxkUHJ2KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZC5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZW5jcnlwdGVkUHJ2IGVycm9yIGJlZm9yZSB3YWxsZXRQYXNzcGhyYXNlIHdoZW4gYm90aCBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoKTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogJ3B1YicsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzdGlsbCBmYWlscyBmb3IgYSBzYWZlIG93bmVyIHNvIHdhbGxldCBzaGFyaW5nIGNhbm5vdCBvYnRhaW4gcm9vdCBtYXRlcmlhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogJ3VzZXIta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKE1pc3NpbmdFbmNyeXB0ZWRLZXljaGFpbkVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduaW5nIGd1YXJkcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbiBhbGxvd3Mgc2FmZSBjaGlsZCBrZXljaGFpbiB3aXRob3V0IGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoe1xuICAgICAgICBzYWZlOiAnc2FmZS1pZC0xJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoaWxkS2V5Y2hhaW4gPSB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgIH07XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDoga2V5Y2hhaW5zR2V0U3R1YixcbiAgICAgICAgZ2V0S2V5c0ZvclNpZ25pbmc6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhbY2hpbGRLZXljaGFpbl0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduU3R1YiA9IHNpbm9uLnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHsgdHhIZXg6ICdzaWduZWQnIH0gYXMgYW55KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoeyB0eEhleDogJ3NpZ25lZCcgfSk7XG4gICAgICBzaWduU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjb25zdCBzaWduQXJncyA9IHNpZ25TdHViLmZpcnN0Q2FsbC5hcmdzWzBdIGFzIHsga2V5Y2hhaW46IHR5cGVvZiBjaGlsZEtleWNoYWluIH07XG4gICAgICBzaWduQXJncy5rZXljaGFpbi5zaG91bGQuZXFsKGNoaWxkS2V5Y2hhaW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24gcmVqZWN0cyB3cm9uZyBwYXNzcGhyYXNlIGVhcmx5IGZvciBzYWZlIGNoaWxkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHtcbiAgICAgICAgc2FmZTogJ3NhZmUtaWQtMScsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGlsZEtleWNoYWluID0ge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdjaycsXG4gICAgICB9O1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG4gICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zLnJldHVybnMoe1xuICAgICAgICBnZXQ6IGtleWNoYWluc0dldFN0dWIsXG4gICAgICAgIGdldEtleXNGb3JTaWduaW5nOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoW2NoaWxkS2V5Y2hhaW5dKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2lnblN0dWIgPSBzaW5vbi5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3dyb25nLXBhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbmNvcnJlY3RQYXNzd29yZEVycm9yKTtcblxuICAgICAgc2lnblN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHJhbnNhY3Rpb24gZG9lcyBub3QgcGFzcyB0aGUgcm9vdCBwcnYgaW50byBUU1Mgc2lnbmluZyBmb3IgYSBzYWZlIG93bmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7XG4gICAgICAgIHNhZmU6ICdzYWZlLWlkLTEnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hpbGRLZXljaGFpbiA9IHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGNvbW1vbktleWNoYWluOiAnY2snLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZEtleWNoYWluXSksXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5wcmVzaWduVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IGFueSkgPT4gcGFyYW1zKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRNUENBbGdvcml0aG0gPSBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKTtcbiAgICAgIGNvbnN0IHNpZ25Uc3NTdHViID0gc2lub24uc3R1YihXYWxsZXQucHJvdG90eXBlIGFzIGFueSwgJ3NpZ25UcmFuc2FjdGlvblRzcycpLnJlc29sdmVzKHsgdHhIZXg6ICdzaWduZWQnIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4UmVxdWVzdElkOiAndHgtcmVxJyB9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBzaWduVHNzU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1dDTi0xMjAwIHJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uIHNhZmUgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0OiBhbnkpIHtcbiAgICBjb25zdCByZWNyZWF0ZVR4UmVxdWVzdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICB1bnNpZ25lZFR4czogW3sgc2VyaWFsaXplZFR4SGV4OiAnZGVhZGJlZWYnLCBzaWduYWJsZUhleDogJ2FiJywgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH1dLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBuZXcgUGVuZGluZ0FwcHJvdmFsKFxuICAgICAge30gYXMgYW55LFxuICAgICAgd2FsbGV0LmJhc2VDb2luLFxuICAgICAge1xuICAgICAgICBpZDogJ3BhMCcsXG4gICAgICAgIHR4UmVxdWVzdElkOiAndHgtcmVxJyxcbiAgICAgICAgaW5mbzogeyB0eXBlOiAndHJhbnNhY3Rpb25SZXF1ZXN0JywgdHJhbnNhY3Rpb25SZXF1ZXN0OiB7IHJlY2lwaWVudHM6IFtdLCBjb2luU3BlY2lmaWM6IHt9IH0gfSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nJyxcbiAgICAgICAgY3JlYXRvcjogJ3Rlc3QnLFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXRcbiAgICApO1xuICAgIChwZW5kaW5nQXBwcm92YWwgYXMgYW55KS50c3NVdGlscyA9IHsgcmVjcmVhdGVUeFJlcXVlc3QgfTtcbiAgICByZXR1cm4geyBwZW5kaW5nQXBwcm92YWwsIHJlY3JlYXRlVHhSZXF1ZXN0IH07XG4gIH1cblxuICBpdCgndXNlcyBnZXRVc2VyUHJ2IGZvciB0aGUgc2FmZSBvd25lciAobWludGVyKSBpbnN0ZWFkIG9mIGdldFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZFVzZXJLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICAgIHBhcmVudDogJ3Jvb3Qta2V5LWlkJyxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdzZWVkJyxcbiAgICB9O1xuICAgIGNvbnN0IGdldEtleXNGb3JTaWduaW5nID0gc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZFVzZXJLZXljaGFpbl0pO1xuICAgIGNvbnN0IGdldFVzZXJQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2RlY3J5cHRlZFBydicpO1xuICAgIGNvbnN0IGdldFBydiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnc2hvdWxkLW5vdC1iZS1jYWxsZWQnKTtcbiAgICBjb25zdCB3YWxsZXQ6IGFueSA9IHtcbiAgICAgIHNhZmVJZDogKCkgPT4gJ3NhZmUtaWQtMScsXG4gICAgICBnZXRVc2VyUHJ2LFxuICAgICAgZ2V0UHJ2LFxuICAgICAgYmFzZUNvaW46IHtcbiAgICAgICAga2V5Y2hhaW5zOiAoKSA9PiAoeyBnZXRLZXlzRm9yU2lnbmluZyB9KSxcbiAgICAgICAgc3VwcG9ydHNUc3M6ICgpID0+IHRydWUsXG4gICAgICAgIGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyxcbiAgICAgIH0sXG4gICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCB7IHBlbmRpbmdBcHByb3ZhbCwgcmVjcmVhdGVUeFJlcXVlc3QgfSA9IG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbC5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihcbiAgICAgIHsgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3MnIH0sXG4gICAgICBuZXcgUmVxdWVzdFRyYWNlcigpXG4gICAgKTtcblxuICAgIHJlc3VsdC5zaG91bGQuZXFsKHsgdHhIZXg6ICdkZWFkYmVlZicgfSk7XG4gICAgZ2V0UHJ2Lm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGdldEtleXNGb3JTaWduaW5nLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICBnZXRVc2VyUHJ2XG4gICAgICAuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAga2V5Y2hhaW46IGNoaWxkVXNlcktleWNoYWluLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzcycsXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS50cnVlKCk7XG4gICAgcmVjcmVhdGVUeFJlcXVlc3QuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgndXNlcyBnZXRQcnYgZm9yIGEgc2FmZSB3YWxsZXQgc2hhcmVlIChjaGlsZCBlbmNyeXB0ZWRQcnYgYWxyZWFkeSBwcmVzZW50KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZFVzZXJLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICAgIHBhcmVudDogJ3Jvb3Qta2V5LWlkJyxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdzZWVkJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYzpzaGFyZWUtcHJ2JyxcbiAgICB9O1xuICAgIGNvbnN0IGdldEtleXNGb3JTaWduaW5nID0gc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZFVzZXJLZXljaGFpbl0pO1xuICAgIGNvbnN0IGdldFVzZXJQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ3Nob3VsZC1ub3QtYmUtY2FsbGVkJyk7XG4gICAgY29uc3QgZ2V0UHJ2ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdzaGFyZWUtcHJ2Jyk7XG4gICAgY29uc3Qgd2FsbGV0OiBhbnkgPSB7XG4gICAgICBzYWZlSWQ6ICgpID0+ICdzYWZlLWlkLTEnLFxuICAgICAgZ2V0VXNlclBydixcbiAgICAgIGdldFBydixcbiAgICAgIGJhc2VDb2luOiB7XG4gICAgICAgIGtleWNoYWluczogKCkgPT4gKHsgZ2V0S2V5c0ZvclNpZ25pbmcgfSksXG4gICAgICAgIHN1cHBvcnRzVHNzOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScsXG4gICAgICB9LFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgIH07XG4gICAgY29uc3QgeyBwZW5kaW5nQXBwcm92YWwsIHJlY3JlYXRlVHhSZXF1ZXN0IH0gPSBtYWtlUGVuZGluZ0FwcHJvdmFsKHdhbGxldCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWwucmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24oXG4gICAgICB7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9LFxuICAgICAgbmV3IFJlcXVlc3RUcmFjZXIoKVxuICAgICk7XG5cbiAgICByZXN1bHQuc2hvdWxkLmVxbCh7IHR4SGV4OiAnZGVhZGJlZWYnIH0pO1xuICAgIGdldFVzZXJQcnYubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgZ2V0UHJ2LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHJlY3JlYXRlVHhSZXF1ZXN0LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcbiJdfQ==
651
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUdldFVzZXJQcnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vd2FsbGV0L3NhZmVHZXRVc2VyUHJ2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLDhDQUF3QztBQUN4Qyx5Q0FZeUI7QUFDekIsNkRBQTBEO0FBRTFELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixRQUFRLENBQUMsa0RBQWtELEVBQUU7SUFDM0QsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxlQUFlLEdBQUcsbUJBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBa0IsRUFBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBRWhDLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGdCQUFpQyxDQUFDO0lBQ3RDLElBQUksV0FBNEIsQ0FBQztJQUNqQyxJQUFJLFdBQTRCLENBQUM7SUFFakMsTUFBTSxjQUFjLEdBQUc7UUFDckIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzdDLElBQUksRUFBRSxLQUFLO1FBQ1gsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNULGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFM0IsU0FBUyxHQUFHO1lBQ1YsT0FBTyxFQUFFLFdBQVc7WUFDcEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtTQUMvQixDQUFDO1FBRUYsWUFBWSxHQUFHO1lBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN0QyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDakQsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLEdBQUcsRUFBRSxnQkFBZ0I7Z0JBQ3JCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2FBQzdDLENBQUM7WUFDRixpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFpQyxFQUFFLEVBQUU7Z0JBQ3pGLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDakUsQ0FBQztnQkFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNuRSxDQUFDLENBQUM7WUFDRixHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMscUNBQXFDLElBQUksRUFBRSxDQUFDO1lBQzFGLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUM1QyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDN0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEQsQ0FBQztRQUVGLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQXVDLEVBQUUsRUFBRTtZQUNqRixJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsVUFBVSxDQUFDLFlBQXFDLEVBQUU7UUFDekQsT0FBTyxJQUFJLFlBQU0sQ0FBQyxTQUFTLEVBQUUsWUFBbUMsRUFBRTtZQUNoRSxHQUFHLGNBQWM7WUFDakIsR0FBRyxTQUFTO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQywrQkFBK0IsRUFBRTtRQUN4QyxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLElBQUEsbUNBQTZCLEVBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUM1RCxFQUFFLEVBQUUsV0FBVztnQkFDZixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFdBQVc7YUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDekYsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsS0FBSztZQUMxRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixZQUFZLEVBQUUsVUFBVTtnQkFDeEIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBQSxtQ0FBNkIsRUFBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzVELEVBQUUsRUFBRSxXQUFXO2dCQUNmLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFdBQVc7YUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9DQUE4QixDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztZQUN2RCxNQUFNLElBQUksR0FBRztnQkFDWCxFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsVUFBVTtnQkFDeEIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLG1DQUE2QixFQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDM0UsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsV0FBVzthQUNqQixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO1lBQ3ZELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBQSxtQ0FBNkIsRUFBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzVELEVBQUUsRUFBRSxXQUFXO2dCQUNmLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFdBQVc7YUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLEVBQUU7UUFDckIsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7WUFDdkUsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDNUIsTUFBTSxNQUFNO2lCQUNULFVBQVUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsSUFBSSxFQUFFLGFBQWE7aUJBQ3BCO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7WUFDcEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDNUIsTUFBTSxNQUFNO2lCQUNULFVBQVUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxTQUFTO2lCQUNsQjtnQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2FBQzdCLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUMxRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO1lBQzlELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sTUFBTTtpQkFDVCxVQUFVLENBQUM7Z0JBQ1YsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSxLQUFLO29CQUNWLElBQUksRUFBRSxhQUFhO2lCQUNwQjtnQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2FBQzdCLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUMxRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLO1lBQ3BFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO2dCQUMxQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUNyQyxRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUNqQixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLHlCQUF5QixFQUFFLFNBQVM7aUJBQ3JDO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0QyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0UsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7WUFDbEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ2pCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztpQkFDbEI7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztZQUN2RixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNqRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUVILE1BQU0sTUFBTTtpQkFDVCxVQUFVLENBQUM7Z0JBQ1YsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztvQkFDakIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxTQUFTO29CQUNqQix5QkFBeUIsRUFBRSxnQkFBZ0I7aUJBQzVDO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1Q0FBaUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLFVBQVUsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxFQUFFLENBQUMsaURBQWlELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxLQUFLO2dCQUNyRixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO29CQUN4QixFQUFFLEVBQUUsU0FBUztvQkFDYixNQUFNLEVBQUUsTUFBTTtvQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7b0JBQzFCLElBQUksRUFBRSxhQUFhO29CQUNuQixHQUFHLEVBQUUsVUFBVTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUVILE1BQU0sTUFBTTtxQkFDVCxVQUFVLENBQUM7b0JBQ1YsUUFBUSxFQUFFO3dCQUNSLEVBQUUsRUFBRSxXQUFXO3dCQUNmLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRzt3QkFDakIsSUFBSSxFQUFFLGFBQWE7d0JBQ25CLE1BQU0sRUFBRSxTQUFTO3dCQUNqQix5QkFBeUIsRUFBRSxVQUFVO3FCQUN0QztvQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2lCQUM3QixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEtBQUs7WUFDM0UsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUV0RSxNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUscUJBQXFCO29CQUMxQixJQUFJLEVBQUUsS0FBSztvQkFDWCxNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsS0FBSztvQkFDaEMsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx5Q0FBbUMsQ0FBQyxDQUFDO1lBQy9ELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLO1lBQy9FLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFL0QsTUFBTSxNQUFNO2lCQUNULFVBQVUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLFdBQVc7b0JBQ2hCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsS0FBSztpQkFDakM7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlDQUFtQyxDQUFDLENBQUM7WUFDL0QsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUs7WUFDN0UsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsMkJBQTJCO29CQUNoQyxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLHlCQUF5QixFQUFFLFNBQVM7aUJBQ3JDO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1Q0FBaUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEtBQUs7WUFDbEYsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFFakQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUNyQyxRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLFdBQVc7b0JBQ2hCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsS0FBSztvQkFDaEMsWUFBWSxFQUFFLE9BQU8sUUFBUSxFQUFFO2lCQUNoQztnQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2FBQzdCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwRkFBMEYsRUFBRSxLQUFLO1lBQ2xHLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRWpELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDckMsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSxXQUFXO29CQUNoQixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLHlCQUF5QixFQUFFLEtBQUs7b0JBQ2hDLFlBQVksRUFBRSxPQUFPLFFBQVEsRUFBRTtpQkFDaEM7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUZBQXFGLEVBQUUsS0FBSztZQUM3RixNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUU1QixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3JDLEdBQUc7Z0JBQ0gsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxTQUFTO29CQUNiLEdBQUcsRUFBRSxTQUFTO29CQUNkLElBQUksRUFBRSxhQUFhO29CQUNuQix5QkFBeUIsRUFBRSxLQUFLO2lCQUNqQzthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2RUFBNkUsRUFBRSxLQUFLO1lBQ3JGLE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUVyQixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3JDLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsU0FBUztvQkFDYixHQUFHLEVBQUUsU0FBUztvQkFDZCxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsWUFBWSxFQUFFLE9BQU8sUUFBUSxFQUFFO2lCQUNoQztnQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2dCQUM1QixrQkFBa0IsRUFBRSxLQUFLO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxLQUFLO1lBQ2pGLE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sTUFBTTtpQkFDVCxVQUFVLENBQUM7Z0JBQ1YsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSxLQUFLO29CQUNWLElBQUksRUFBRSxhQUFhO2lCQUNwQjthQUNGLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1FBQ25DLEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxLQUFLO1lBQ3BGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFVBQVU7Z0JBQ2QsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLElBQUksRUFBRSxhQUFhO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIseUJBQXlCLEVBQUUsS0FBSzthQUNqQyxDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG1DQUE2QixDQUFDLENBQUM7WUFDOUYsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsaUZBQWlGLEVBQUUsS0FBSztZQUN6RixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQ3hCLElBQUksRUFBRSxXQUFXO2dCQUNqQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsSUFBSSxFQUFFLEtBQUs7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRztnQkFDcEIsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLElBQUksRUFBRSxLQUFjO2dCQUNwQixNQUFNLEVBQUUsU0FBUztnQkFDakIsY0FBYyxFQUFFLElBQUk7YUFDckIsQ0FBQztZQUNGLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO2dCQUMxQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLEdBQUcsRUFBRSxnQkFBZ0I7Z0JBQ3JCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMxRCxDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQU0sQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFTLENBQUMsQ0FBQztZQUV0RyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2QyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUF1QyxDQUFDO1lBQ2xGLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1RkFBdUYsRUFBRSxLQUFLO1lBQy9GLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHO2dCQUNwQixFQUFFLEVBQUUsV0FBVztnQkFDZixHQUFHLEVBQUUsV0FBVztnQkFDaEIsSUFBSSxFQUFFLEtBQWM7Z0JBQ3BCLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixjQUFjLEVBQUUsSUFBSTthQUNyQixDQUFDO1lBQ0YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsR0FBRyxFQUFFLGdCQUFnQjtnQkFDckIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzFELENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBTSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRWpFLE1BQU0sTUFBTTtpQkFDVCwrQkFBK0IsQ0FBQztnQkFDL0IsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLGdCQUFnQixFQUFFLGtCQUFrQjthQUNyQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUFzQixDQUFDLENBQUM7WUFFbEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhFQUE4RSxFQUFFLEtBQUs7WUFDdEYsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsV0FBVztnQkFDakIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLEVBQUUsRUFBRSxXQUFXO2dCQUNmLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixJQUFJLEVBQUUsS0FBYztnQkFDcEIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUM3QixHQUFHLEVBQUUsZ0JBQWdCO2dCQUNyQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUQsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEYsWUFBWSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBTSxDQUFDLFNBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUU1RyxNQUFNLE1BQU07aUJBQ1QsZUFBZSxDQUFDO2dCQUNmLGdCQUFnQixFQUFFLFVBQVU7Z0JBQzVCLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUU7YUFDdEMsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx5Q0FBbUMsQ0FBQyxDQUFDO1lBQy9ELFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsa0RBQWtELEVBQUU7SUFDM0QsU0FBUyxDQUFDO1FBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxtQkFBbUIsQ0FBQyxNQUFXO1FBQ3RDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUM5QyxVQUFVLEVBQUUsTUFBTTtZQUNsQixXQUFXLEVBQUUsUUFBUTtZQUNyQixXQUFXLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDeEYsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxxQkFBZSxDQUN6QyxFQUFTLEVBQ1QsTUFBTSxDQUFDLFFBQVEsRUFDZjtZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsV0FBVyxFQUFFLFFBQVE7WUFDckIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDOUYsS0FBSyxFQUFFLFNBQVM7WUFDaEIsT0FBTyxFQUFFLE1BQU07U0FDVCxFQUNSLE1BQU0sQ0FDUCxDQUFDO1FBQ0QsZUFBdUIsQ0FBQyxRQUFRLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7UUFDdkUsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixFQUFFLEVBQUUsV0FBVztZQUNmLEdBQUcsRUFBRSxXQUFXO1lBQ2hCLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLGFBQWE7WUFDckIseUJBQXlCLEVBQUUsTUFBTTtTQUNsQyxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFRO1lBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXO1lBQ3pCLFVBQVU7WUFDVixNQUFNO1lBQ04sUUFBUSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztnQkFDeEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7Z0JBQ3ZCLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPO2FBQy9CO1lBQ0QsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztTQUNyQyxDQUFDO1FBQ0YsTUFBTSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLDZCQUE2QixDQUNoRSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxFQUM1QixJQUFJLG1CQUFhLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLFVBQVU7YUFDUCxxQkFBcUIsQ0FBQztZQUNyQixRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLGdCQUFnQixFQUFFLE1BQU07U0FDekIsQ0FBQzthQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkVBQTJFLEVBQUUsS0FBSztRQUNuRixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEVBQUUsRUFBRSxXQUFXO1lBQ2YsR0FBRyxFQUFFLFdBQVc7WUFDaEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxNQUFNLEVBQUUsYUFBYTtZQUNyQix5QkFBeUIsRUFBRSxNQUFNO1lBQ2pDLFlBQVksRUFBRSxnQkFBZ0I7U0FDL0IsQ0FBQztRQUNGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBUTtZQUNsQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVztZQUN6QixVQUFVO1lBQ1YsTUFBTTtZQUNOLFFBQVEsRUFBRTtnQkFDUixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3hDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO2dCQUN2QixlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTzthQUMvQjtZQUNELG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7U0FDckMsQ0FBQztRQUNGLE1BQU0sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzRSxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyw2QkFBNkIsQ0FDaEUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsRUFDNUIsSUFBSSxtQkFBYSxFQUFFLENBQ3BCLENBQUM7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIGJ1aWxkU2FmZUJpcDQ0UGF0aCxcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbiAgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQsXG4gIEluY29ycmVjdFBhc3N3b3JkRXJyb3IsXG4gIEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcixcbiAgTWlzc2luZ0VuY3J5cHRlZEtleWNoYWluRXJyb3IsXG4gIFBlbmRpbmdBcHByb3ZhbCxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yLFxuICBTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgV2FsbGV0LFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYmFzZUNvaW4nO1xuXG5yZXF1aXJlKCdzaG91bGQtc2lub24nKTtcblxuZGVzY3JpYmUoJ1dDTi0xMjAwIHNhZmUgY2hpbGQgZ2V0VXNlclBydiByb290LWZldGNoIGRldG91cicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcHJ2ID1cbiAgICAneHBydjlzMjFaclFIMTQzSzNoZWt5Tmo3VGNpUjRYTlllMWtNajY4VzJpcGpKR05IRVRXUDdvNDJBakRuU1BnS2hkWjR4OE5CQXZhTDcyUnJYanVYTmRta01xTEVSWnphNzNvWXVnR3RiTEZYRzhnJztcbiAgY29uc3Qgc29mdERlcml2ZWROb2RlID0gQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWRCaXAzMihiaXAzMi5mcm9tQmFzZTU4KHBydiksICcxMjMnKTtcbiAgaWYgKCFzb2Z0RGVyaXZlZE5vZGUua2V5LnByaXZhdGVLZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGRlcml2ZUtleVdpdGhTZWVkQmlwMzIgdG8gcmV0dXJuIGEgcHJpdmF0ZSBrZXknKTtcbiAgfVxuICBjb25zdCBzb2Z0RGVyaXZlZFBydiA9IHNvZnREZXJpdmVkTm9kZS5rZXkudG9CYXNlNTgoKTtcbiAgY29uc3QgY2hpbGRQYXRoID0gYnVpbGRTYWZlQmlwNDRQYXRoKDAsICdzZWNwMjU2azFNdWx0aXNpZycsIDEyMyk7XG4gIGNvbnN0IGhhcmRlbmVkID0gZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydihwcnYsIGNoaWxkUGF0aCk7XG4gIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgY29uc3Qgcm9vdEtleUlkID0gJ3Jvb3Qta2V5LWlkJztcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IGtleWNoYWluc0dldFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGVuY3J5cHRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBkZWNyeXB0U3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGJhc2VXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGtleWNoYWluc0dldFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZW5jcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBlbmNyeXB0OiBlbmNyeXB0U3R1YixcbiAgICAgIGRlY3J5cHQ6IGRlY3J5cHRTdHViLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS8nKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0Q2hhaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0YnRjJyksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdidGMnKSxcbiAgICAgIGdldEZ1bGxOYW1lOiBzaW5vbi5zdHViKCkucmV0dXJucygnVGVzdCBCaXRjb2luJyksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtdKSxcbiAgICAgIH0pLFxuICAgICAgZGVyaXZlS2V5V2l0aFNlZWQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHsga2V5LCBzZWVkIH06IHsga2V5OiBzdHJpbmc7IHNlZWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IHBydiAmJiBzZWVkID09PSAnMTIzJykge1xuICAgICAgICAgIHJldHVybiB7IGtleTogc29mdERlcml2ZWRQcnYsIGRlcml2YXRpb25QYXRoOiAnbS85OTk5OTkvLi4uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogYGRlcml2ZWQoJHtrZXl9LCR7c2VlZH0pYCwgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH07XG4gICAgICB9KSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGJ0YyR7cGF0aH1gKSxcbiAgICAgIHN1cHBvcnRzU3Rha2luZzogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAga2V5SWRzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJldHVybnMoWzAsIDEsIDJdKSxcbiAgICB9O1xuXG4gICAgZGVjcnlwdFN0dWIuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkICE9PSBwYXNzcGhyYXNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuc3RhcnRzV2l0aCgnZW5jOicpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5zbGljZSg0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbWFrZVdhbGxldChvdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBXYWxsZXQge1xuICAgIHJldHVybiBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luIGFzIHVua25vd24gYXMgQmFzZUNvaW4sIHtcbiAgICAgIC4uLmJhc2VXYWxsZXREYXRhLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH0pO1xuICB9XG5cbiAgZGVzY3JpYmUoJ2ZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0aHJvd3Mgd2hlbiBjaGlsZCBrZXljaGFpbiBoYXMgbm8gcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2NoaWxkS2V5Y2hhaW4ucGFyZW50IGlzIHJlcXVpcmVkIHRvIGZldGNoIHRoZSByb290IGtleWNoYWluJyk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkUm9vdEtleWNoYWluU291cmNlRXJyb3Igd2hlbiByb290IHNvdXJjZSBpcyBiYWNrdXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jOnJvb3QnLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB0aGUgcm9vdCBrZXljaGFpbiB3aGVuIHNvdXJjZSBpcyB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdCA9IHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogJ2VuYzpyb290JyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMocm9vdCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkKG1vY2tCYXNlQ29pbi5rZXljaGFpbnMoKSwge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChyb290KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiByb290IGtleWNoYWluIGhhcyBubyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zKCksIHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2RvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRVc2VyUHJ2JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0aHJvd3Mgd2hlbiBrZXljaGFpbiBoYXMgbm8gZW5jcnlwdGVkUHJ2IG9uIGEgbm9uLXNhZmUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGEgbm9uLXNhZmUgd2FsbGV0IGV2ZW4gd2hlbiBrZXljaGFpbiBoYXMgcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGEgc2FmZSB3YWxsZXQgd2hlbiBrZXljaGFpbiBoYXMgbm8gcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmV0Y2hlcyByb290IGFuZCBoYXJkZW5lZC1kZXJpdmVzIGNoaWxkIGtleSBmb3Igc2FmZSBvd25lcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogY2hpbGRQYXRoLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGhhcmRlbmVkLnBydik7XG4gICAgICByZXN1bHQuc2hvdWxkLm5vdC5lcWwoc29mdERlcml2ZWRQcnYpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoeyBpZDogcm9vdEtleUlkIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVxdWlyZXMgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCBvbiB0aGUgY2hpbGQga2V5Y2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiBoYXJkZW5lZC5wdWIsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgY2xvc2VkIHdoZW4gZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnaXN0ZXJlZCBwdWInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiBoYXJkZW5lZC5wdWIsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vNDQnLzAnLzEnLzAnXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzdG9yZWRQYXRoIG9mIFtcIm5vdC1hLXBhdGgnXCIsIFwibS8xMjMnXCIsICdtLzQ0LzAvMS8xMjMnXSkge1xuICAgICAgaXQoYHJlamVjdHMgYSBub24tQklQNDQgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCAke0pTT04uc3RyaW5naWZ5KHN0b3JlZFBhdGgpfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogc3RvcmVkUGF0aCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Rlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGgvKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdmYWlscyBjbG9zZWQgZm9yIFRTUyBzYWZlIG93bmVyIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByb290IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgbXVsdGlzaWdUeXBlOiAndHNzJyB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAndW5yZWxhdGVkLWNoaWxkLXB1YicsXG4gICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgY2xvc2VkIGZvciBlZDI1NTE5IG9uY2hhaW4gc2FmZSBvd25lciBpbnN0ZWFkIG9mIEJJUDMyLWRlcml2aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0Jhc2VDb2luLmdldEZhbWlseS5yZXR1cm5zKCd4bG0nKTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgY29pbjogJ3R4bG0nIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Fib3J0cyBsb2NhbGx5IHdoZW4gZGVyaXZlZCBwdWIgZG9lcyBub3QgbWF0Y2ggcmVnaXN0ZXJlZCBjaGlsZCBwdWInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAneHB1Yi13cm9uZy1yZWdpc3RlcmVkLWtleScsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBjaGlsZFBhdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY3J5cHRzIGNoaWxkIGVuY3J5cHRlZFBydiBhcy1pcyBmb3Igd2FsbGV0IHNoYXJlZSAoaGFyZGVuZWQgY2hpbGQgcHJ2KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoaWxkUHJ2ID0gJ2NoaWxkLWxldmVsLXBydic7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHtcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke2NoaWxkUHJ2fWAsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoY2hpbGRQcnYpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZC5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhdXRvLXBvcHVsYXRlIGNvbGREZXJpdmF0aW9uU2VlZCB3aGVuIGV4cGxpY2l0IHBydiBhbmQgZW5jcnlwdGVkUHJ2IGFyZSBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hpbGRQcnYgPSAnY2hpbGQtbGV2ZWwtcHJ2JztcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYoe1xuICAgICAgICBwcnY6IGNoaWxkUHJ2LFxuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7Y2hpbGRQcnZ9YCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChjaGlsZFBydik7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3RpbGwgYXV0by1wb3B1bGF0ZXMgY29sZERlcml2YXRpb25TZWVkIGZvciBTTUMgd2l0aCBwYXJhbXMucHJ2IGFuZCBubyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGlkOiAnc21jLWtleScsXG4gICAgICAgICAgcHViOiAnc21jLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiAnMTIzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChzb2Z0RGVyaXZlZFBydik7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGFwcGx5IGFuIGV4cGxpY2l0IGNvbGREZXJpdmF0aW9uU2VlZCBhZnRlciBkZWNyeXB0aW5nIGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoKTtcbiAgICAgIGNvbnN0IGNoaWxkUHJ2ID0gcHJ2O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdzbWMta2V5JyxcbiAgICAgICAgICBwdWI6ICdzbWMtcHViJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke2NoaWxkUHJ2fWAsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIGNvbGREZXJpdmF0aW9uU2VlZDogJzEyMycsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoY2hpbGRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBlbmNyeXB0ZWRQcnYgZXJyb3IgYmVmb3JlIHdhbGxldFBhc3NwaHJhc2Ugd2hlbiBib3RoIGFyZSBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2tleWNoYWluIGRvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3N0aWxsIGZhaWxzIGZvciBhIHNhZmUgb3duZXIgc28gd2FsbGV0IHNoYXJpbmcgY2Fubm90IG9idGFpbiByb290IG1hdGVyaWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAndXNlci1rZXknLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoTWlzc2luZ0VuY3J5cHRlZEtleWNoYWluRXJyb3IpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25pbmcgZ3VhcmRzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uIGFsbG93cyBzYWZlIGNoaWxkIGtleWNoYWluIHdpdGhvdXQgZW5jcnlwdGVkUHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7XG4gICAgICAgIHNhZmU6ICdzYWZlLWlkLTEnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hpbGRLZXljaGFpbiA9IHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGNvbW1vbktleWNoYWluOiAnY2snLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZEtleWNoYWluXSksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpZ25TdHViID0gc2lub24uc3R1YihXYWxsZXQucHJvdG90eXBlLCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoeyB0eEhleDogJ3NpZ25lZCcgfSBhcyBhbnkpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UmVxdWVzdElkOiAndHgtcmVxJyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbCh7IHR4SGV4OiAnc2lnbmVkJyB9KTtcbiAgICAgIHNpZ25TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IHNpZ25BcmdzID0gc2lnblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0gYXMgeyBrZXljaGFpbjogdHlwZW9mIGNoaWxkS2V5Y2hhaW4gfTtcbiAgICAgIHNpZ25BcmdzLmtleWNoYWluLnNob3VsZC5lcWwoY2hpbGRLZXljaGFpbik7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbiByZWplY3RzIHdyb25nIHBhc3NwaHJhc2UgZWFybHkgZm9yIHNhZmUgY2hpbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoe1xuICAgICAgICBzYWZlOiAnc2FmZS1pZC0xJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoaWxkS2V5Y2hhaW4gPSB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgIH07XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDoga2V5Y2hhaW5zR2V0U3R1YixcbiAgICAgICAgZ2V0S2V5c0ZvclNpZ25pbmc6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhbY2hpbGRLZXljaGFpbl0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduU3R1YiA9IHNpbm9uLnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHgtcmVxJyxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnd3JvbmctcGFzc3BocmFzZScsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKEluY29ycmVjdFBhc3N3b3JkRXJyb3IpO1xuXG4gICAgICBzaWduU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NpZ25UcmFuc2FjdGlvbiBkb2VzIG5vdCBwYXNzIHRoZSByb290IHBydiBpbnRvIFRTUyBzaWduaW5nIGZvciBhIHNhZmUgb3duZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHtcbiAgICAgICAgc2FmZTogJ3NhZmUtaWQtMScsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGlsZEtleWNoYWluID0ge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdjaycsXG4gICAgICB9O1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG4gICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zLnJldHVybnMoe1xuICAgICAgICBnZXQ6IGtleWNoYWluc0dldFN0dWIsXG4gICAgICAgIGdldEtleXNGb3JTaWduaW5nOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoW2NoaWxkS2V5Y2hhaW5dKSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Jhc2VDb2luLnByZXNpZ25UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtczogYW55KSA9PiBwYXJhbXMpO1xuICAgICAgbW9ja0Jhc2VDb2luLmdldE1QQ0FsZ29yaXRobSA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdlZGRzYScpO1xuICAgICAgY29uc3Qgc2lnblRzc1N0dWIgPSBzaW5vbi5zdHViKFdhbGxldC5wcm90b3R5cGUgYXMgYW55LCAnc2lnblRyYW5zYWN0aW9uVHNzJykucmVzb2x2ZXMoeyB0eEhleDogJ3NpZ25lZCcgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhSZXF1ZXN0SWQ6ICd0eC1yZXEnIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICAgIHNpZ25Uc3NTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnV0NOLTEyMDAgcmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24gc2FmZSBwYXRoJywgZnVuY3Rpb24gKCkge1xuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbWFrZVBlbmRpbmdBcHByb3ZhbCh3YWxsZXQ6IGFueSkge1xuICAgIGNvbnN0IHJlY3JlYXRlVHhSZXF1ZXN0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgIGFwaVZlcnNpb246ICdsaXRlJyxcbiAgICAgIHR4UmVxdWVzdElkOiAndHgtcmVxJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbeyBzZXJpYWxpemVkVHhIZXg6ICdkZWFkYmVlZicsIHNpZ25hYmxlSGV4OiAnYWInLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcgfV0sXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbCA9IG5ldyBQZW5kaW5nQXBwcm92YWwoXG4gICAgICB7fSBhcyBhbnksXG4gICAgICB3YWxsZXQuYmFzZUNvaW4sXG4gICAgICB7XG4gICAgICAgIGlkOiAncGEwJyxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eC1yZXEnLFxuICAgICAgICBpbmZvOiB7IHR5cGU6ICd0cmFuc2FjdGlvblJlcXVlc3QnLCB0cmFuc2FjdGlvblJlcXVlc3Q6IHsgcmVjaXBpZW50czogW10sIGNvaW5TcGVjaWZpYzoge30gfSB9LFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmcnLFxuICAgICAgICBjcmVhdG9yOiAndGVzdCcsXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHdhbGxldFxuICAgICk7XG4gICAgKHBlbmRpbmdBcHByb3ZhbCBhcyBhbnkpLnRzc1V0aWxzID0geyByZWNyZWF0ZVR4UmVxdWVzdCB9O1xuICAgIHJldHVybiB7IHBlbmRpbmdBcHByb3ZhbCwgcmVjcmVhdGVUeFJlcXVlc3QgfTtcbiAgfVxuXG4gIGl0KCd1c2VzIGdldFVzZXJQcnYgZm9yIHRoZSBzYWZlIG93bmVyIChtaW50ZXIpIGluc3RlYWQgb2YgZ2V0UHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNoaWxkVXNlcktleWNoYWluID0ge1xuICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgcGFyZW50OiAncm9vdC1rZXktaWQnLFxuICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJ3NlZWQnLFxuICAgIH07XG4gICAgY29uc3QgZ2V0S2V5c0ZvclNpZ25pbmcgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoW2NoaWxkVXNlcktleWNoYWluXSk7XG4gICAgY29uc3QgZ2V0VXNlclBydiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZGVjcnlwdGVkUHJ2Jyk7XG4gICAgY29uc3QgZ2V0UHJ2ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdzaG91bGQtbm90LWJlLWNhbGxlZCcpO1xuICAgIGNvbnN0IHdhbGxldDogYW55ID0ge1xuICAgICAgc2FmZUlkOiAoKSA9PiAnc2FmZS1pZC0xJyxcbiAgICAgIGdldFVzZXJQcnYsXG4gICAgICBnZXRQcnYsXG4gICAgICBiYXNlQ29pbjoge1xuICAgICAgICBrZXljaGFpbnM6ICgpID0+ICh7IGdldEtleXNGb3JTaWduaW5nIH0pLFxuICAgICAgICBzdXBwb3J0c1RzczogKCkgPT4gdHJ1ZSxcbiAgICAgICAgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWRkc2EnLFxuICAgICAgfSxcbiAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICgpID0+IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGNvbnN0IHsgcGVuZGluZ0FwcHJvdmFsLCByZWNyZWF0ZVR4UmVxdWVzdCB9ID0gbWFrZVBlbmRpbmdBcHByb3ZhbCh3YWxsZXQpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVuZGluZ0FwcHJvdmFsLnJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKFxuICAgICAgeyB3YWxsZXRQYXNzcGhyYXNlOiAncGFzcycgfSxcbiAgICAgIG5ldyBSZXF1ZXN0VHJhY2VyKClcbiAgICApO1xuXG4gICAgcmVzdWx0LnNob3VsZC5lcWwoeyB0eEhleDogJ2RlYWRiZWVmJyB9KTtcbiAgICBnZXRQcnYubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgZ2V0S2V5c0ZvclNpZ25pbmcuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGdldFVzZXJQcnZcbiAgICAgIC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICBrZXljaGFpbjogY2hpbGRVc2VyS2V5Y2hhaW4sXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnRydWUoKTtcbiAgICByZWNyZWF0ZVR4UmVxdWVzdC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIGdldFBydiBmb3IgYSBzYWZlIHdhbGxldCBzaGFyZWUgKGNoaWxkIGVuY3J5cHRlZFBydiBhbHJlYWR5IHByZXNlbnQpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNoaWxkVXNlcktleWNoYWluID0ge1xuICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgcGFyZW50OiAncm9vdC1rZXktaWQnLFxuICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJ3NlZWQnLFxuICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jOnNoYXJlZS1wcnYnLFxuICAgIH07XG4gICAgY29uc3QgZ2V0S2V5c0ZvclNpZ25pbmcgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoW2NoaWxkVXNlcktleWNoYWluXSk7XG4gICAgY29uc3QgZ2V0VXNlclBydiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnc2hvdWxkLW5vdC1iZS1jYWxsZWQnKTtcbiAgICBjb25zdCBnZXRQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ3NoYXJlZS1wcnYnKTtcbiAgICBjb25zdCB3YWxsZXQ6IGFueSA9IHtcbiAgICAgIHNhZmVJZDogKCkgPT4gJ3NhZmUtaWQtMScsXG4gICAgICBnZXRVc2VyUHJ2LFxuICAgICAgZ2V0UHJ2LFxuICAgICAgYmFzZUNvaW46IHtcbiAgICAgICAga2V5Y2hhaW5zOiAoKSA9PiAoeyBnZXRLZXlzRm9yU2lnbmluZyB9KSxcbiAgICAgICAgc3VwcG9ydHNUc3M6ICgpID0+IHRydWUsXG4gICAgICAgIGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyxcbiAgICAgIH0sXG4gICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCB7IHBlbmRpbmdBcHByb3ZhbCwgcmVjcmVhdGVUeFJlcXVlc3QgfSA9IG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbC5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihcbiAgICAgIHsgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3MnIH0sXG4gICAgICBuZXcgUmVxdWVzdFRyYWNlcigpXG4gICAgKTtcblxuICAgIHJlc3VsdC5zaG91bGQuZXFsKHsgdHhIZXg6ICdkZWFkYmVlZicgfSk7XG4gICAgZ2V0VXNlclBydi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICBnZXRQcnYuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3MnIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgcmVjcmVhdGVUeFJlcXVlc3QuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcbn0pO1xuIl19
@@ -48,7 +48,8 @@ const bitcoin_1 = require("../../../../src/bitgo/bitcoin");
48
48
  require('should-sinon');
49
49
  describe('Safe wallet spend sharing', function () {
50
50
  const prv = 'xprv9s21ZrQH143K3hekyNj7TciR4XNYe1kMj68W2ipjJGNHETWP7o42AjDnSPgKhdZ4x8NBAvaL72RrXjuXNdmkMqLERZza73oYugGtbLFXG8g';
51
- const hardened = (0, src_1.deriveSafeChildHardenedFromXprv)(prv, '123');
51
+ const childPath = (0, src_1.buildSafeBip44Path)(0, 'secp256k1Multisig', 123);
52
+ const hardened = (0, src_1.deriveSafeChildHardenedFromXprv)(prv, childPath);
52
53
  const passphrase = 'test-passphrase';
53
54
  const rootKeyId = 'root-key-id';
54
55
  const SHAREE_PUB = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798';
@@ -72,7 +73,7 @@ describe('Safe wallet spend sharing', function () {
72
73
  pub: hardened.pub,
73
74
  type: 'independent',
74
75
  parent: rootKeyId,
75
- derivedFromParentWithPath: "m/123'",
76
+ derivedFromParentWithPath: childPath,
76
77
  });
77
78
  const publicOnlyKeychain = (id) => ({ id, pub: 'pub-' + id, type: 'independent' });
78
79
  const rootKeychain = {
@@ -186,7 +187,7 @@ describe('Safe wallet spend sharing', function () {
186
187
  keychainsGetStub.callsFake(({ id }) => Promise.resolve(id === rootKeyId
187
188
  ? rootKeychain
188
189
  : id === 'user-key'
189
- ? { ...childKeychain(id), pub: 'wrong-child-pub', derivedFromParentWithPath: "m/123'" }
190
+ ? { ...childKeychain(id), pub: 'wrong-child-pub' }
190
191
  : publicOnlyKeychain(id)));
191
192
  await wallet
192
193
  .shareWallet({ email: 'shareto@test.com', permissions: 'spend', walletPassphrase: passphrase })
@@ -300,4 +301,4 @@ describe('Safe wallet spend sharing', function () {
300
301
  });
301
302
  });
302
303
  });
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZVNoYXJlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9zYWZlU2hhcmVXYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLHlDQU15QjtBQUV6QixxREFBNkQ7QUFDN0QsMkRBQThEO0FBRTlELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixRQUFRLENBQUMsMkJBQTJCLEVBQUU7SUFDcEMsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBQ2hDLE1BQU0sVUFBVSxHQUFHLG9FQUFvRSxDQUFDO0lBRXhGLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGdCQUFpQyxDQUFDO0lBQ3RDLElBQUksV0FBNEIsQ0FBQztJQUNqQyxJQUFJLFdBQTRCLENBQUM7SUFDakMsSUFBSSxlQUFnQyxDQUFDO0lBQ3JDLElBQUksdUJBQXdDLENBQUM7SUFFN0MsTUFBTSxjQUFjLEdBQUc7UUFDckIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzdDLElBQUksRUFBRSxLQUFLO1FBQ1gsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FB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VSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0RSxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQ0FBNEIsQ0FBQyxDQUFDO1lBQ3BHLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogU2FmZS13YWxsZXQgU1BFTkQgc2hhcmluZy4gTWlycm9ycyB0ZXN0L3VuaXQvYml0Z28vd2FsbGV0L3NhZmVHZXRVc2VyUHJ2LnRzIChzaW5vbi1zdHViYmVkLFxuICogbm8gbm9jaykgZm9yIHRoZSBzaGFyaW5nIGFuYWxvZ3VlOiBhIHNhZmUgb3duZXIncyBjaGlsZHJlbiBhcmUgcHViLW9ubHksIHNvIHRoZSBzaGFyZSBwYXRoXG4gKiBtdXN0IHJlLWRlcml2ZSB0aGUgY2hpbGQgcHJ2IGZyb20gdGhlIHJvb3Qg4oCUIG5ldmVyIHRoZSByb290IG1hdGVyaWFsLlxuICovXG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQge1xuICBJbmNvcnJlY3RQYXNzd29yZEVycm9yLFxuICBTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IsXG4gIFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3IsXG4gIFdhbGxldCxcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IEJhc2VDb2luIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2Jhc2VDb2luJztcbmltcG9ydCB7IGdldFNoYXJlZFNlY3JldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9lY2RoJztcbmltcG9ydCB7IG1ha2VSYW5kb21LZXkgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYml0Y29pbic7XG5cbnJlcXVpcmUoJ3Nob3VsZC1zaW5vbicpO1xuXG5kZXNjcmliZSgnU2FmZSB3YWxsZXQgc3BlbmQgc2hhcmluZycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcHJ2ID1cbiAgICAneHBydjlzMjFaclFIMTQzSzNoZWt5Tmo3VGNpUjRYTlllMWtNajY4VzJpcGpKR05IRVRXUDdvNDJBakRuU1BnS2hkWjR4OE5CQXZhTDcyUnJYanVYTmRta01xTEVSWnphNzNvWXVnR3RiTEZYRzhnJztcbiAgY29uc3QgaGFyZGVuZWQgPSBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2KHBydiwgJzEyMycpO1xuICBjb25zdCBwYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3BocmFzZSc7XG4gIGNvbnN0IHJvb3RLZXlJZCA9ICdyb290LWtleS1pZCc7XG4gIGNvbnN0IFNIQVJFRV9QVUIgPSAnMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JztcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IGtleWNoYWluc0dldFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGVuY3J5cHRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBkZWNyeXB0U3R1Yjogc2lub24uU2lub25TdHViO1xuICBsZXQgY3JlYXRlU2hhcmVTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBjcmVhdGVCdWxrS2V5U2hhcmVzU3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGJhc2VXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICB9O1xuXG4gIGNvbnN0IGNoaWxkS2V5Y2hhaW4gPSAoaWQ6IHN0cmluZykgPT4gKHtcbiAgICBpZCxcbiAgICBwdWI6IGhhcmRlbmVkLnB1YixcbiAgICB0eXBlOiAnaW5kZXBlbmRlbnQnIGFzIGNvbnN0LFxuICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGg6IFwibS8xMjMnXCIsXG4gIH0pO1xuICBjb25zdCBwdWJsaWNPbmx5S2V5Y2hhaW4gPSAoaWQ6IHN0cmluZykgPT4gKHsgaWQsIHB1YjogJ3B1Yi0nICsgaWQsIHR5cGU6ICdpbmRlcGVuZGVudCcgYXMgY29uc3QgfSk7XG4gIGNvbnN0IHJvb3RLZXljaGFpbiA9IHtcbiAgICBpZDogcm9vdEtleUlkLFxuICAgIHNvdXJjZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgIHR5cGU6ICdpbmRlcGVuZGVudCcgYXMgY29uc3QsXG4gICAgcHViOiAncm9vdC1wdWInLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGtleWNoYWluc0dldFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZW5jcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBlbmNyeXB0OiBlbmNyeXB0U3R1YixcbiAgICAgIGRlY3J5cHQ6IGRlY3J5cHRTdHViLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS8nKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldFNoYXJpbmdLZXk6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHVzZXJJZDogJ3NoYXJlZS1pZCcsIHB1YmtleTogU0hBUkVFX1BVQiwgcGF0aDogJ20vMCcgfSksXG4gICAgfTtcblxuICAgIG1vY2tCYXNlQ29pbiA9IHtcbiAgICAgIGdldENoYWluOiBzaW5vbi5zdHViKCkucmV0dXJucygndGJ0YycpLFxuICAgICAgZ2V0RmFtaWx5OiBzaW5vbi5zdHViKCkucmV0dXJucygnYnRjJyksXG4gICAgICBnZXRGdWxsTmFtZTogc2lub24uc3R1YigpLnJldHVybnMoJ1Rlc3QgQml0Y29pbicpLFxuICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIGdldDoga2V5Y2hhaW5zR2V0U3R1YixcbiAgICAgICAgZ2V0S2V5c0ZvclNpZ25pbmc6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhbXSksXG4gICAgICB9KSxcbiAgICAgIGRlcml2ZUtleVdpdGhTZWVkOiBzaW5vbi5zdHViKCksXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gYGh0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YyL3RidGMke3BhdGh9YCksXG4gICAgICBzdXBwb3J0c1N0YWtpbmc6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIHN1cHBvcnRzVHNzOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICBnZXRNUENBbGdvcml0aG06IHNpbm9uLnN0dWIoKSxcbiAgICAgIGtleUlkc0ZvclNpZ25pbmc6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFswLCAxLCAyXSksXG4gICAgfTtcblxuICAgIGtleWNoYWluc0dldFN0dWIuY2FsbHNGYWtlKCh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KSA9PlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGlkID09PSByb290S2V5SWQgPyByb290S2V5Y2hhaW4gOiBpZCA9PT0gJ3VzZXIta2V5JyA/IGNoaWxkS2V5Y2hhaW4oaWQpIDogcHVibGljT25seUtleWNoYWluKGlkKSlcbiAgICApO1xuXG4gICAgLy8gUmV2ZXJzaWJsZSBlbmNyeXB0OiBgc2hhcmVkOjxwYXNzd29yZD46PGlucHV0PmAgc28gdGVzdHMgY2FuIHZlcmlmeSB0aGUgRUNESCBzZWNyZXQgYW5kXG4gICAgLy8gdGhhdCB0aGUgcGF5bG9hZCBlbmNyeXB0cyB0aGUgQ0hJTEQgcHJ2LCBub3QgdGhlIHJvb3QuXG4gICAgZW5jcnlwdFN0dWIuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT5cbiAgICAgIFByb21pc2UucmVzb2x2ZShgc2hhcmVkOiR7cGFzc3dvcmR9OiR7aW5wdXR9YClcbiAgICApO1xuXG4gICAgZGVjcnlwdFN0dWIuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkICE9PSBwYXNzcGhyYXNlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0LnN0YXJ0c1dpdGgoJ2VuYzonKSkgcmV0dXJuIGlucHV0LnNsaWNlKDQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG5cbiAgICBjcmVhdGVTaGFyZVN0dWIgPSBzaW5vbi5zdHViKFdhbGxldC5wcm90b3R5cGUsICdjcmVhdGVTaGFyZScpLnJlc29sdmVzKHt9KTtcbiAgICBjcmVhdGVCdWxrS2V5U2hhcmVzU3R1YiA9IHNpbm9uLnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ2NyZWF0ZUJ1bGtLZXlTaGFyZXMnKS5yZXNvbHZlcyh7IHNoYXJlczogW10gfSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBmdW5jdGlvbiBtYWtlV2FsbGV0KG92ZXJyaWRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IFdhbGxldCB7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4gYXMgdW5rbm93biBhcyBCYXNlQ29pbiwge1xuICAgICAgLi4uYmFzZVdhbGxldERhdGEsXG4gICAgICAuLi5vdmVycmlkZXMsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRTaGFyZU9wdGlvbnMod2FsbGV0OiBXYWxsZXQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSkge1xuICAgIGF3YWl0IHdhbGxldC5zaGFyZVdhbGxldCh7XG4gICAgICBlbWFpbDogJ3NoYXJldG9AdGVzdC5jb20nLFxuICAgICAgcGVybWlzc2lvbnM6ICdzcGVuZCcsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiBjcmVhdGVTaGFyZVN0dWIuZmlyc3RDYWxsLmFyZ3NbMF07XG4gIH1cblxuICBkZXNjcmliZSgnaG90IHNhZmUgd2FsbGV0LCBzcGVuZCBzaGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBjaGlsZCBtYXRlcmlhbCwgdXNlcyB0aGUgcmVnaXN0ZXJlZCBjaGlsZCBwdWIsIGFuZCBuZXZlciBzaGlwcyByb290IG1hdGVyaWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldFNoYXJlT3B0aW9ucyh3YWxsZXQpO1xuXG4gICAgICBvcHRpb25zLnNraXBLZXljaGFpbi5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgb3B0aW9ucy5rZXljaGFpbi5zaG91bGQuYmUub2soKTtcbiAgICAgIG9wdGlvbnMua2V5Y2hhaW4ucHViLnNob3VsZC5lcXVhbChoYXJkZW5lZC5wdWIpO1xuXG4gICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5rZXljaGFpbik7XG4gICAgICBqc29uLnNob3VsZC5ub3QuY29udGFpbkVxbChwcnYpOyAvLyByb290IHhwcnYgbmV2ZXIgbGVhdmVzXG4gICAgICBqc29uLnNob3VsZC5ub3QuY29udGFpbkVxbCgncm9vdC1wdWInKTsgLy8gcm9vdCBwdWIgbmV2ZXIgbGVhdmVzXG4gICAgfSk7XG5cbiAgICBpdCgndGhlIGVuY3J5cHRlZCBwcnYgRUNESC1kZWNyeXB0cyAoc2hhcmVlIHNpZGUpIHRvIHRoZSBDSElMRCBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzaGFyZWVLZXkgPSBtYWtlUmFuZG9tS2V5KCk7XG4gICAgICBjb25zdCBzaGFyZWVQdWIgPSBzaGFyZWVLZXkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIG1vY2tCaXRHby5nZXRTaGFyaW5nS2V5ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgdXNlcklkOiAnc2hhcmVlLWlkJywgcHVia2V5OiBzaGFyZWVQdWIsIHBhdGg6ICdtLzAnIH0pO1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZ2V0U2hhcmVPcHRpb25zKHdhbGxldCk7XG5cbiAgICAgIGNvbnN0IHNoYXJlZVNlY3JldCA9IGdldFNoYXJlZFNlY3JldChzaGFyZWVLZXksIEJ1ZmZlci5mcm9tKG9wdGlvbnMua2V5Y2hhaW4uZnJvbVB1YktleSwgJ2hleCcpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBvcHRpb25zLmtleWNoYWluLmVuY3J5cHRlZFBydi5zaG91bGQuZXF1YWwoYHNoYXJlZDoke3NoYXJlZVNlY3JldH06JHtoYXJkZW5lZC5wcnZ9YCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB2aWV3LW9ubHkgc2hhcmUgbmVlZHMgbm8ga2V5Y2hhaW4gYW5kIGRvZXMgbm90IGZldGNoIHRoZSByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWw6ICdzaGFyZXRvQHRlc3QuY29tJywgcGVybWlzc2lvbnM6ICd2aWV3Jywgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSB9KTtcblxuICAgICAgY3JlYXRlU2hhcmVTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNraXBLZXljaGFpbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBjcmVhdGVTaGFyZVN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2tleWNoYWluJywgdW5kZWZpbmVkKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHdyb25nIHBhc3NwaHJhc2UgcmVqZWN0cyB3aXRoIEluY29ycmVjdFBhc3N3b3JkRXJyb3IgYW5kIHBvc3RzIG5vdGhpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNoYXJlV2FsbGV0KHsgZW1haWw6ICdzaGFyZXRvQHRlc3QuY29tJywgcGVybWlzc2lvbnM6ICdzcGVuZCcsIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZy1wYXNzcGhyYXNlJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbmNvcnJlY3RQYXNzd29yZEVycm9yKTtcbiAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgbWlzc2luZyBwYXNzcGhyYXNlIHRocm93cyBpbnN0ZWFkIG9mIHNpbGVudGx5IHNraXBLZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2hhcmVXYWxsZXQoeyBlbWFpbDogJ3NoYXJldG9AdGVzdC5jb20nLCBwZXJtaXNzaW9uczogJ3NwZW5kJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvTWlzc2luZyB3YWxsZXRQYXNzcGhyYXNlIGFyZ3VtZW50Lyk7XG4gICAgICBjcmVhdGVTaGFyZVN0dWIubm90Q2FsbGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBjbG9zZWQgd2hlbiB0aGUgZGVyaXZlZCBwdWIgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgY2hpbGQgcHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsc0Zha2UoKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBpZCA9PT0gcm9vdEtleUlkXG4gICAgICAgICAgICA/IHJvb3RLZXljaGFpblxuICAgICAgICAgICAgOiBpZCA9PT0gJ3VzZXIta2V5J1xuICAgICAgICAgICAgPyB7IC4uLmNoaWxkS2V5Y2hhaW4oaWQpLCBwdWI6ICd3cm9uZy1jaGlsZC1wdWInLCBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vMTIzJ1wiIH1cbiAgICAgICAgICAgIDogcHVibGljT25seUtleWNoYWluKGlkKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zaGFyZVdhbGxldCh7IGVtYWlsOiAnc2hhcmV0b0B0ZXN0LmNvbScsIHBlcm1pc3Npb25zOiAnc3BlbmQnLCB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1bnN1cHBvcnRlZCBzYWZlIHNsb3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdUU1Mgc2FmZSB3YWxsZXQgdGhyb3dzIFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3Igd2l0aG91dCBmZXRjaGluZyB0aGUgcm9vdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgbXVsdGlzaWdUeXBlOiAndHNzJyB9KTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2hhcmVXYWxsZXQoeyBlbWFpbDogJ3NoYXJldG9AdGVzdC5jb20nLCBwZXJtaXNzaW9uczogJ3NwZW5kJywgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlU2hhcmVOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICAgIC8vIGNoaWxkIGZldGNoZWQgKHNhZmUgYnJhbmNoKSwgcm9vdCBuZXZlciBmZXRjaGVkIChndWFyZCBmaXJlcyBmaXJzdClcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkT25jZS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5kZWVwRXF1YWwoeyBpZDogJ3VzZXIta2V5JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdlZDI1NTE5IG9uY2hhaW4gc2FmZSB3YWxsZXQgdGhyb3dzIFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScsIGNvaW46ICd0eGxtJyB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRGYW1pbHkucmV0dXJucygneGxtJyk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNoYXJlV2FsbGV0KHsgZW1haWw6ICdzaGFyZXRvQHRlc3QuY29tJywgcGVybWlzc2lvbnM6ICdzcGVuZCcsIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVncmVzc2lvbjogbm9uLXNhZmUgYW5kIHNoYXJlZSBwYXRocycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnYSBnZW51aW5lIGNvbGQgd2FsbGV0IHN0aWxsIHlpZWxkcyBza2lwS2V5Y2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgdHlwZTogJ2NvbGQnIH0pO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldFNoYXJlT3B0aW9ucyh3YWxsZXQpO1xuICAgICAgb3B0aW9ucy5za2lwS2V5Y2hhaW4uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgb3B0aW9ucy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2hhcmVlIHJlLXNoYXJpbmcgKGNoaWxkIGhhcyBlbmNyeXB0ZWRQcnYpIHRha2VzIHRoZSBvcmRpbmFyeSBwYXRoIGFuZCBuZXZlciBmZXRjaGVzIHRoZSByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgY29uc3Qgc2hhcmVlQ2hpbGQgPSB7XG4gICAgICAgIGlkOiAndXNlci1rZXknLFxuICAgICAgICBwdWI6ICdzaGFyZWUtcHViJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyBhcyBjb25zdCxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOnNoYXJlZS1wcnZgLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbHNGYWtlKCh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoaWQgPT09ICd1c2VyLWtleScgPyBzaGFyZWVDaGlsZCA6IHB1YmxpY09ubHlLZXljaGFpbihpZCkpXG4gICAgICApO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldFNoYXJlT3B0aW9ucyh3YWxsZXQpO1xuICAgICAgb3B0aW9ucy5za2lwS2V5Y2hhaW4uc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIG9wdGlvbnMua2V5Y2hhaW4ucHViLnNob3VsZC5lcXVhbCgnc2hhcmVlLXB1YicpO1xuICAgICAgLy8gcm9vdCAoc2FmZS1vd25lciBkZXRvdXIpIG11c3QgbmV2ZXIgYmUgcmVhY2hlZCBmb3IgYSBzaGFyZWUgd2l0aCBhbiBlbmNyeXB0ZWQgY2hpbGQgcHJ2XG4gICAgICBrZXljaGFpbnNHZXRTdHViXG4gICAgICAgIC5nZXRDYWxscygpXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IGMuYXJncz8uWzBdPy5pZCA9PT0gcm9vdEtleUlkKVxuICAgICAgICAubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIG1hbGZvcm1lZCBzYWZlIHdhbGxldCAoY2hpbGQgd2l0aCBubyBwYXJlbnQpIGZhaWxzIGNsb3NlZCBpbnN0ZWFkIG9mIGNvbGQtc2tpcHBpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxzRmFrZSgoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGlkID09PSAndXNlci1rZXknID8gcHVibGljT25seUtleWNoYWluKGlkKSA6IHB1YmxpY09ubHlLZXljaGFpbihpZCkpXG4gICAgICApO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zaGFyZVdhbGxldCh7IGVtYWlsOiAnc2hhcmV0b0B0ZXN0LmNvbScsIHBlcm1pc3Npb25zOiAnc3BlbmQnLCB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zYWZlIGNoaWxkIGNvdWxkIG5vdCBiZSByZXNvbHZlZC8pO1xuICAgICAgY3JlYXRlU2hhcmVTdHViLm5vdENhbGxlZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBub24tc2FmZSBob3Qgd2FsbGV0IHNwZW5kIHNoYXJlIGlzIHVuY2hhbmdlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoe30pO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0ge1xuICAgICAgICBpZDogJ3VzZXIta2V5JyxcbiAgICAgICAgcHViOiAnaG90LXB1YicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcgYXMgY29uc3QsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzpob3QtcHJ2YCxcbiAgICAgIH07XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxzRmFrZSgoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGlkID09PSAndXNlci1rZXknID8gdXNlcktleWNoYWluIDogcHVibGljT25seUtleWNoYWluKGlkKSlcbiAgICAgICk7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZ2V0U2hhcmVPcHRpb25zKHdhbGxldCk7XG4gICAgICBvcHRpb25zLnNraXBLZXljaGFpbi5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgb3B0aW9ucy5rZXljaGFpbi5wdWIuc2hvdWxkLmVxdWFsKCdob3QtcHViJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gbG5idGMgd2FsbGV0IHRha2VzIHRoZSB1c2VyQXV0aCBwYXRoIGFuZCBuZXZlciBlbnRlcnMgdGhlIHNhZmUgYnJhbmNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnLCBjb2luOiAnbGJ0YycgfSk7XG4gICAgICBtb2NrQmFzZUNvaW4uZ2V0RmFtaWx5LnJldHVybnMoJ2xuYnRjJyk7XG4gICAgICBjb25zdCBzYWZlQ2hpbGRTcHkgPSBzaW5vbi5zcHkod2FsbGV0IGFzIGFueSwgJ2dldFNhZmVPd25lckNoaWxkS2V5Y2hhaW4nKTtcbiAgICAgIC8vIHN0dWJiaW5nIHRoZSBwcml2YXRlIGtleWNoYWluIGZldGNoIHNvIGxuYnRjIHJlc29sdmVzIGEga2V5Y2hhaW4gd2l0aG91dCBmdWxsIGxpZ2h0bmluZyBtb2Nrc1xuICAgICAgc2lub24uc3R1Yih3YWxsZXQgYXMgYW55LCAnZ2V0RW5jcnlwdGVkV2FsbGV0S2V5Y2hhaW5Gb3JXYWxsZXRTaGFyaW5nJykucmVzb2x2ZXMoe1xuICAgICAgICBpZDogJ3VzZXIta2V5JyxcbiAgICAgICAgcHViOiAnbG4tcHViJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOmxuLXBydmAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBnZXRTaGFyZU9wdGlvbnMod2FsbGV0KTtcbiAgICAgIG9wdGlvbnMua2V5Y2hhaW4ucHViLnNob3VsZC5lcXVhbCgnbG4tcHViJyk7XG4gICAgICBzYWZlQ2hpbGRTcHkubm90Q2FsbGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZUJ1bGtXYWxsZXRTaGFyZSBvbiBhIHNhZmUgd2FsbGV0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1bGtQYXJhbXMgPSB7XG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAga2V5U2hhcmVPcHRpb25zOiBbXG4gICAgICAgIHsgdXNlcklkOiAndTEnLCBwdWJLZXk6IFNIQVJFRV9QVUIsIHBhdGg6ICdtLzAnLCBwZXJtaXNzaW9uczogJ3NwZW5kJyB9LFxuICAgICAgICB7IHVzZXJJZDogJ3UyJywgcHViS2V5OiBTSEFSRUVfUFVCLCBwYXRoOiAnbS8wJywgcGVybWlzc2lvbnM6ICdzcGVuZCcgfSxcbiAgICAgIF0sXG4gICAgfSBhcyBhbnk7XG5cbiAgICBpdCgnZGVyaXZlcyB0aGUgY2hpbGQgb25jZSAob25lIHJvb3QgZGVjcnlwdCkgYW5kIGZhbnMgaXQgb3V0IHBlciB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUJ1bGtXYWxsZXRTaGFyZShidWxrUGFyYW1zKTtcblxuICAgICAgY3JlYXRlQnVsa0tleVNoYXJlc1N0dWIuY2FsbGVkT25jZS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gY3JlYXRlQnVsa0tleVNoYXJlc1N0dWIuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBvcHRpb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgICBvcHRpb25zLmZvckVhY2goKG86IGFueSkgPT4gby5rZXljaGFpbi5wdWIuc2hvdWxkLmVxdWFsKGhhcmRlbmVkLnB1YikpO1xuICAgICAgLy8gY2hpbGQgKyByb290IGV4YWN0bHkgb25jZSAoc2luZ2xlIHJvb3QgZGVjcnlwdClcbiAgICAgIGNvbnN0IHJvb3RDYWxscyA9IGtleWNoYWluc0dldFN0dWIuZ2V0Q2FsbHMoKS5maWx0ZXIoKGMpID0+IGMuYXJncz8uWzBdPy5pZCA9PT0gcm9vdEtleUlkKTtcbiAgICAgIHJvb3RDYWxscy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RoZSByZWFsIGVycm9yIHByb3BhZ2F0ZXMgaW5zdGVhZCBvZiBzaGFyZU9wdGlvbnMgY2Fubm90IGJlIGVtcHR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnLCBtdWx0aXNpZ1R5cGU6ICd0c3MnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUJ1bGtXYWxsZXRTaGFyZShidWxrUGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3IpO1xuICAgICAgY3JlYXRlQnVsa0tleVNoYXJlc1N0dWIubm90Q2FsbGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZVNoYXJlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9zYWZlU2hhcmVXYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLHlDQU95QjtBQUV6QixxREFBNkQ7QUFDN0QsMkRBQThEO0FBRTlELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixRQUFRLENBQUMsMkJBQTJCLEVBQUU7SUFDcEMsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBa0IsRUFBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBQ2hDLE1BQU0sVUFBVSxHQUFHLG9FQUFvRSxDQUFDO0lBRXhGLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGdCQUFpQyxDQUFDO0lBQ3RDLElBQUksV0FBNEIsQ0FBQztJQUNqQyxJQUFJLFdBQTRCLENBQUM7SUFDakMsSUFBSSxlQUFnQyxDQUFDO0lBQ3JDLElBQUksdUJBQXdDLENBQUM7SUFFN0MsTUFBTSxjQUFjLEdBQUc7UUFDckIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzdDLElBQUksRUFBRSxLQUFLO1FBQ1gsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLEVBQUU7UUFDRixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7UUFDakIsSUFBSSxFQUFFLGFBQXNCO1FBQzVCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLHlCQUF5QixFQUFFLFNBQVM7S0FDckMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBc0IsRUFBRSxDQUFDLENBQUM7SUFDcEcsTUFBTSxZQUFZLEdBQUc7UUFDbkIsRUFBRSxFQUFFLFNBQVM7UUFDYixNQUFNLEVBQUUsTUFBZTtRQUN2QixZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxFQUFFLGFBQXNCO1FBQzVCLEdBQUcsRUFBRSxVQUFVO0tBQ2hCLENBQUM7SUFFRixVQUFVLENBQUM7UUFDVCxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTNCLFNBQVMsR0FBRztZQUNWLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1lBQ3BELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDOUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQy9GLENBQUM7UUFFRixZQUFZLEdBQUc7WUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDdEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3RDLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNqRCxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsR0FBRyxFQUFFLGdCQUFnQjtnQkFDckIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDN0MsQ0FBQztZQUNGLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDL0IsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLHFDQUFxQyxJQUFJLEVBQUUsQ0FBQztZQUMxRixlQUFlLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDNUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hDLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQzdCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xELENBQUM7UUFFRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBa0IsRUFBRSxFQUFFLENBQ3BELE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ2xILENBQUM7UUFFRiwwRkFBMEY7UUFDMUYseURBQXlEO1FBQ3pELFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQXVDLEVBQUUsRUFBRSxDQUNqRixPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFRixXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUF1QyxFQUFFLEVBQUU7WUFDakYsSUFBSSxRQUFRLEtBQUssVUFBVTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQU0sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBTSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxVQUFVLENBQUMsWUFBcUMsRUFBRTtRQUN6RCxPQUFPLElBQUksWUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFtQyxFQUFFO1lBQ2hFLEdBQUcsY0FBYztZQUNqQixHQUFHLFNBQVM7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxNQUFjLEVBQUUsU0FBa0MsRUFBRTtRQUNqRixNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDdkIsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixXQUFXLEVBQUUsT0FBTztZQUNwQixnQkFBZ0IsRUFBRSxVQUFVO1lBQzVCLEdBQUcsTUFBTTtTQUNWLENBQUMsQ0FBQztRQUNILE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtRQUN2QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5RixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtZQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSztZQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFBLHVCQUFhLEdBQUUsQ0FBQztZQUNsQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFekcsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUMsTUFBTSxZQUFZLEdBQUcsSUFBQSxzQkFBZSxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pILE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxZQUFZLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBRTNHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xFLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sTUFBTTtpQkFDVCxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO2lCQUN0RyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBc0IsQ0FBQyxDQUFDO1lBQ2xELGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO1lBQ3RFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sTUFBTTtpQkFDVCxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUNoRSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9ELGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1lBQ25GLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFrQixFQUFFLEVBQUUsQ0FDcEQsT0FBTyxDQUFDLE9BQU8sQ0FDYixFQUFFLEtBQUssU0FBUztnQkFDZCxDQUFDLENBQUMsWUFBWTtnQkFDZCxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVU7b0JBQ25CLENBQUMsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRTtvQkFDbEQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUMzQixDQUNGLENBQUM7WUFDRixNQUFNLE1BQU07aUJBQ1QsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUM7aUJBQzlGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHVDQUFpQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtRQUNqQyxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztZQUN2RixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sTUFBTTtpQkFDVCxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDOUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0NBQTRCLENBQUMsQ0FBQztZQUN4RCxzRUFBc0U7WUFDdEUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sTUFBTTtpQkFDVCxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDOUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0NBQTRCLENBQUMsQ0FBQztZQUN4RCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHVDQUF1QyxFQUFFO1FBQ2hELEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLO1lBQ3pELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlHQUFpRyxFQUFFLEtBQUs7WUFDekcsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEVBQUUsRUFBRSxVQUFVO2dCQUNkLEdBQUcsRUFBRSxZQUFZO2dCQUNqQixJQUFJLEVBQUUsYUFBc0I7Z0JBQzVCLFlBQVksRUFBRSxnQkFBZ0I7YUFDL0IsQ0FBQztZQUNGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFrQixFQUFFLEVBQUUsQ0FDcEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzFFLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRCwwRkFBMEY7WUFDMUYsZ0JBQWdCO2lCQUNiLFFBQVEsRUFBRTtpQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssU0FBUyxDQUFDO2lCQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRkFBc0YsRUFBRSxLQUFLO1lBQzlGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFrQixFQUFFLEVBQUUsQ0FDcEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDckYsQ0FBQztZQUNGLE1BQU0sTUFBTTtpQkFDVCxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDOUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUM5RCxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSztZQUN4RCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEVBQUUsRUFBRSxVQUFVO2dCQUNkLEdBQUcsRUFBRSxTQUFTO2dCQUNkLElBQUksRUFBRSxhQUFzQjtnQkFDNUIsWUFBWSxFQUFFLGFBQWE7YUFDNUIsQ0FBQztZQUNGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFrQixFQUFFLEVBQUUsQ0FDcEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzNFLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDL0QsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFhLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUMzRSxnR0FBZ0c7WUFDaEcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFhLEVBQUUsNENBQTRDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQy9FLEVBQUUsRUFBRSxVQUFVO2dCQUNkLEdBQUcsRUFBRSxRQUFRO2dCQUNiLFlBQVksRUFBRSxZQUFZO2dCQUMxQixJQUFJLEVBQUUsYUFBYTthQUNwQixDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHdDQUF3QyxFQUFFO1FBQ2pELE1BQU0sVUFBVSxHQUFHO1lBQ2pCLGdCQUFnQixFQUFFLFVBQVU7WUFDNUIsZUFBZSxFQUFFO2dCQUNmLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRTtnQkFDdkUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO2FBQ3hFO1NBQ0ssQ0FBQztRQUVULEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxLQUFLO1lBQzVFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRS9DLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsa0RBQWtEO1lBQ2xELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUMzRixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtDQUE0QixDQUFDLENBQUM7WUFDcEcsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBTYWZlLXdhbGxldCBTUEVORCBzaGFyaW5nLiBNaXJyb3JzIHRlc3QvdW5pdC9iaXRnby93YWxsZXQvc2FmZUdldFVzZXJQcnYudHMgKHNpbm9uLXN0dWJiZWQsXG4gKiBubyBub2NrKSBmb3IgdGhlIHNoYXJpbmcgYW5hbG9ndWU6IGEgc2FmZSBvd25lcidzIGNoaWxkcmVuIGFyZSBwdWItb25seSwgc28gdGhlIHNoYXJlIHBhdGhcbiAqIG11c3QgcmUtZGVyaXZlIHRoZSBjaGlsZCBwcnYgZnJvbSB0aGUgcm9vdCDigJQgbmV2ZXIgdGhlIHJvb3QgbWF0ZXJpYWwuXG4gKi9cbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7XG4gIEluY29ycmVjdFBhc3N3b3JkRXJyb3IsXG4gIFNhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvcixcbiAgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgV2FsbGV0LFxuICBidWlsZFNhZmVCaXA0NFBhdGgsXG4gIGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9iYXNlQ29pbic7XG5pbXBvcnQgeyBnZXRTaGFyZWRTZWNyZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vZWNkaCc7XG5pbXBvcnQgeyBtYWtlUmFuZG9tS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2JpdGNvaW4nO1xuXG5yZXF1aXJlKCdzaG91bGQtc2lub24nKTtcblxuZGVzY3JpYmUoJ1NhZmUgd2FsbGV0IHNwZW5kIHNoYXJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHBydiA9XG4gICAgJ3hwcnY5czIxWnJRSDE0M0szaGVreU5qN1RjaVI0WE5ZZTFrTWo2OFcyaXBqSkdOSEVUV1A3bzQyQWpEblNQZ0toZFo0eDhOQkF2YUw3MlJyWGp1WE5kbWtNcUxFUlp6YTczb1l1Z0d0YkxGWEc4Zyc7XG4gIGNvbnN0IGNoaWxkUGF0aCA9IGJ1aWxkU2FmZUJpcDQ0UGF0aCgwLCAnc2VjcDI1NmsxTXVsdGlzaWcnLCAxMjMpO1xuICBjb25zdCBoYXJkZW5lZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYocHJ2LCBjaGlsZFBhdGgpO1xuICBjb25zdCBwYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3BocmFzZSc7XG4gIGNvbnN0IHJvb3RLZXlJZCA9ICdyb290LWtleS1pZCc7XG4gIGNvbnN0IFNIQVJFRV9QVUIgPSAnMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JztcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IGtleWNoYWluc0dldFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGVuY3J5cHRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBkZWNyeXB0U3R1Yjogc2lub24uU2lub25TdHViO1xuICBsZXQgY3JlYXRlU2hhcmVTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBjcmVhdGVCdWxrS2V5U2hhcmVzU3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGJhc2VXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICB9O1xuXG4gIGNvbnN0IGNoaWxkS2V5Y2hhaW4gPSAoaWQ6IHN0cmluZykgPT4gKHtcbiAgICBpZCxcbiAgICBwdWI6IGhhcmRlbmVkLnB1YixcbiAgICB0eXBlOiAnaW5kZXBlbmRlbnQnIGFzIGNvbnN0LFxuICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGg6IGNoaWxkUGF0aCxcbiAgfSk7XG4gIGNvbnN0IHB1YmxpY09ubHlLZXljaGFpbiA9IChpZDogc3RyaW5nKSA9PiAoeyBpZCwgcHViOiAncHViLScgKyBpZCwgdHlwZTogJ2luZGVwZW5kZW50JyBhcyBjb25zdCB9KTtcbiAgY29uc3Qgcm9vdEtleWNoYWluID0ge1xuICAgIGlkOiByb290S2V5SWQsXG4gICAgc291cmNlOiAndXNlcicgYXMgY29uc3QsXG4gICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgdHlwZTogJ2luZGVwZW5kZW50JyBhcyBjb25zdCxcbiAgICBwdWI6ICdyb290LXB1YicsXG4gIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAga2V5Y2hhaW5zR2V0U3R1YiA9IHNpbm9uLnN0dWIoKTtcbiAgICBlbmNyeXB0U3R1YiA9IHNpbm9uLnN0dWIoKTtcbiAgICBkZWNyeXB0U3R1YiA9IHNpbm9uLnN0dWIoKTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIGVuY3J5cHQ6IGVuY3J5cHRTdHViLFxuICAgICAgZGVjcnlwdDogZGVjcnlwdFN0dWIsXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdodHRwczovL3Rlc3QuYml0Z28uY29tLycpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgICAgZ2V0U2hhcmluZ0tleTogc2lub24uc3R1YigpLnJlc29sdmVzKHsgdXNlcklkOiAnc2hhcmVlLWlkJywgcHVia2V5OiBTSEFSRUVfUFVCLCBwYXRoOiAnbS8wJyB9KSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0Q2hhaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0YnRjJyksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdidGMnKSxcbiAgICAgIGdldEZ1bGxOYW1lOiBzaW5vbi5zdHViKCkucmV0dXJucygnVGVzdCBCaXRjb2luJyksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtdKSxcbiAgICAgIH0pLFxuICAgICAgZGVyaXZlS2V5V2l0aFNlZWQ6IHNpbm9uLnN0dWIoKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGJ0YyR7cGF0aH1gKSxcbiAgICAgIHN1cHBvcnRzU3Rha2luZzogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAga2V5SWRzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJldHVybnMoWzAsIDEsIDJdKSxcbiAgICB9O1xuXG4gICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsc0Zha2UoKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pID0+XG4gICAgICBQcm9taXNlLnJlc29sdmUoaWQgPT09IHJvb3RLZXlJZCA/IHJvb3RLZXljaGFpbiA6IGlkID09PSAndXNlci1rZXknID8gY2hpbGRLZXljaGFpbihpZCkgOiBwdWJsaWNPbmx5S2V5Y2hhaW4oaWQpKVxuICAgICk7XG5cbiAgICAvLyBSZXZlcnNpYmxlIGVuY3J5cHQ6IGBzaGFyZWQ6PHBhc3N3b3JkPjo8aW5wdXQ+YCBzbyB0ZXN0cyBjYW4gdmVyaWZ5IHRoZSBFQ0RIIHNlY3JldCBhbmRcbiAgICAvLyB0aGF0IHRoZSBwYXlsb2FkIGVuY3J5cHRzIHRoZSBDSElMRCBwcnYsIG5vdCB0aGUgcm9vdC5cbiAgICBlbmNyeXB0U3R1Yi5jYWxsc0Zha2UoKHsgaW5wdXQsIHBhc3N3b3JkIH06IHsgaW5wdXQ6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGBzaGFyZWQ6JHtwYXNzd29yZH06JHtpbnB1dH1gKVxuICAgICk7XG5cbiAgICBkZWNyeXB0U3R1Yi5jYWxsc0Zha2UoKHsgaW5wdXQsIHBhc3N3b3JkIH06IHsgaW5wdXQ6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICBpZiAocGFzc3dvcmQgIT09IHBhc3NwaHJhc2UpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuc3RhcnRzV2l0aCgnZW5jOicpKSByZXR1cm4gaW5wdXQuc2xpY2UoNCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcblxuICAgIGNyZWF0ZVNoYXJlU3R1YiA9IHNpbm9uLnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ2NyZWF0ZVNoYXJlJykucmVzb2x2ZXMoe30pO1xuICAgIGNyZWF0ZUJ1bGtLZXlTaGFyZXNTdHViID0gc2lub24uc3R1YihXYWxsZXQucHJvdG90eXBlLCAnY3JlYXRlQnVsa0tleVNoYXJlcycpLnJlc29sdmVzKHsgc2hhcmVzOiBbXSB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIG1ha2VXYWxsZXQob3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogV2FsbGV0IHtcbiAgICByZXR1cm4gbmV3IFdhbGxldChtb2NrQml0R28sIG1vY2tCYXNlQ29pbiBhcyB1bmtub3duIGFzIEJhc2VDb2luLCB7XG4gICAgICAuLi5iYXNlV2FsbGV0RGF0YSxcbiAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFNoYXJlT3B0aW9ucyh3YWxsZXQ6IFdhbGxldCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KSB7XG4gICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHtcbiAgICAgIGVtYWlsOiAnc2hhcmV0b0B0ZXN0LmNvbScsXG4gICAgICBwZXJtaXNzaW9uczogJ3NwZW5kJyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAuLi5wYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNyZWF0ZVNoYXJlU3R1Yi5maXJzdENhbGwuYXJnc1swXTtcbiAgfVxuXG4gIGRlc2NyaWJlKCdob3Qgc2FmZSB3YWxsZXQsIHNwZW5kIHNoYXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdkZXJpdmVzIGNoaWxkIG1hdGVyaWFsLCB1c2VzIHRoZSByZWdpc3RlcmVkIGNoaWxkIHB1YiwgYW5kIG5ldmVyIHNoaXBzIHJvb3QgbWF0ZXJpYWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZ2V0U2hhcmVPcHRpb25zKHdhbGxldCk7XG5cbiAgICAgIG9wdGlvbnMuc2tpcEtleWNoYWluLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBvcHRpb25zLmtleWNoYWluLnNob3VsZC5iZS5vaygpO1xuICAgICAgb3B0aW9ucy5rZXljaGFpbi5wdWIuc2hvdWxkLmVxdWFsKGhhcmRlbmVkLnB1Yik7XG5cbiAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmtleWNoYWluKTtcbiAgICAgIGpzb24uc2hvdWxkLm5vdC5jb250YWluRXFsKHBydik7IC8vIHJvb3QgeHBydiBuZXZlciBsZWF2ZXNcbiAgICAgIGpzb24uc2hvdWxkLm5vdC5jb250YWluRXFsKCdyb290LXB1YicpOyAvLyByb290IHB1YiBuZXZlciBsZWF2ZXNcbiAgICB9KTtcblxuICAgIGl0KCd0aGUgZW5jcnlwdGVkIHBydiBFQ0RILWRlY3J5cHRzIChzaGFyZWUgc2lkZSkgdG8gdGhlIENISUxEIHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNoYXJlZUtleSA9IG1ha2VSYW5kb21LZXkoKTtcbiAgICAgIGNvbnN0IHNoYXJlZVB1YiA9IHNoYXJlZUtleS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgbW9ja0JpdEdvLmdldFNoYXJpbmdLZXkgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyB1c2VySWQ6ICdzaGFyZWUtaWQnLCBwdWJrZXk6IHNoYXJlZVB1YiwgcGF0aDogJ20vMCcgfSk7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBnZXRTaGFyZU9wdGlvbnMod2FsbGV0KTtcblxuICAgICAgY29uc3Qgc2hhcmVlU2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KHNoYXJlZUtleSwgQnVmZmVyLmZyb20ob3B0aW9ucy5rZXljaGFpbi5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIG9wdGlvbnMua2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LnNob3VsZC5lcXVhbChgc2hhcmVkOiR7c2hhcmVlU2VjcmV0fToke2hhcmRlbmVkLnBydn1gKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHZpZXctb25seSBzaGFyZSBuZWVkcyBubyBrZXljaGFpbiBhbmQgZG9lcyBub3QgZmV0Y2ggdGhlIHJvb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBhd2FpdCB3YWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbDogJ3NoYXJldG9AdGVzdC5jb20nLCBwZXJtaXNzaW9uczogJ3ZpZXcnLCB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlIH0pO1xuXG4gICAgICBjcmVhdGVTaGFyZVN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2tpcEtleWNoYWluLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nLCB1bmRlZmluZWQpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egd3JvbmcgcGFzc3BocmFzZSByZWplY3RzIHdpdGggSW5jb3JyZWN0UGFzc3dvcmRFcnJvciBhbmQgcG9zdHMgbm90aGluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2hhcmVXYWxsZXQoeyBlbWFpbDogJ3NoYXJldG9AdGVzdC5jb20nLCBwZXJtaXNzaW9uczogJ3NwZW5kJywgd2FsbGV0UGFzc3BocmFzZTogJ3dyb25nLXBhc3NwaHJhc2UnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKEluY29ycmVjdFBhc3N3b3JkRXJyb3IpO1xuICAgICAgY3JlYXRlU2hhcmVTdHViLm5vdENhbGxlZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBtaXNzaW5nIHBhc3NwaHJhc2UgdGhyb3dzIGluc3RlYWQgb2Ygc2lsZW50bHkgc2tpcEtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zaGFyZVdhbGxldCh7IGVtYWlsOiAnc2hhcmV0b0B0ZXN0LmNvbScsIHBlcm1pc3Npb25zOiAnc3BlbmQnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9NaXNzaW5nIHdhbGxldFBhc3NwaHJhc2UgYXJndW1lbnQvKTtcbiAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGNsb3NlZCB3aGVuIHRoZSBkZXJpdmVkIHB1YiBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnaXN0ZXJlZCBjaGlsZCBwdWInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxzRmFrZSgoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGlkID09PSByb290S2V5SWRcbiAgICAgICAgICAgID8gcm9vdEtleWNoYWluXG4gICAgICAgICAgICA6IGlkID09PSAndXNlci1rZXknXG4gICAgICAgICAgICA/IHsgLi4uY2hpbGRLZXljaGFpbihpZCksIHB1YjogJ3dyb25nLWNoaWxkLXB1YicgfVxuICAgICAgICAgICAgOiBwdWJsaWNPbmx5S2V5Y2hhaW4oaWQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNoYXJlV2FsbGV0KHsgZW1haWw6ICdzaGFyZXRvQHRlc3QuY29tJywgcGVybWlzc2lvbnM6ICdzcGVuZCcsIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Vuc3VwcG9ydGVkIHNhZmUgc2xvdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ1RTUyBzYWZlIHdhbGxldCB0aHJvd3MgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvciB3aXRob3V0IGZldGNoaW5nIHRoZSByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnLCBtdWx0aXNpZ1R5cGU6ICd0c3MnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5zaGFyZVdhbGxldCh7IGVtYWlsOiAnc2hhcmV0b0B0ZXN0LmNvbScsIHBlcm1pc3Npb25zOiAnc3BlbmQnLCB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3IpO1xuICAgICAgLy8gY2hpbGQgZmV0Y2hlZCAoc2FmZSBicmFuY2gpLCByb290IG5ldmVyIGZldGNoZWQgKGd1YXJkIGZpcmVzIGZpcnN0KVxuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmRlZXBFcXVhbCh7IGlkOiAndXNlci1rZXknIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VkMjU1MTkgb25jaGFpbiBzYWZlIHdhbGxldCB0aHJvd3MgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgY29pbjogJ3R4bG0nIH0pO1xuICAgICAgbW9ja0Jhc2VDb2luLmdldEZhbWlseS5yZXR1cm5zKCd4bG0nKTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2hhcmVXYWxsZXQoeyBlbWFpbDogJ3NoYXJldG9AdGVzdC5jb20nLCBwZXJtaXNzaW9uczogJ3NwZW5kJywgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlU2hhcmVOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkT25jZS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWdyZXNzaW9uOiBub24tc2FmZSBhbmQgc2hhcmVlIHBhdGhzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdhIGdlbnVpbmUgY29sZCB3YWxsZXQgc3RpbGwgeWllbGRzIHNraXBLZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyB0eXBlOiAnY29sZCcgfSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZ2V0U2hhcmVPcHRpb25zKHdhbGxldCk7XG4gICAgICBvcHRpb25zLnNraXBLZXljaGFpbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBvcHRpb25zLnNob3VsZC5oYXZlLnByb3BlcnR5KCdrZXljaGFpbicsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzaGFyZWUgcmUtc2hhcmluZyAoY2hpbGQgaGFzIGVuY3J5cHRlZFBydikgdGFrZXMgdGhlIG9yZGluYXJ5IHBhdGggYW5kIG5ldmVyIGZldGNoZXMgdGhlIHJvb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBjb25zdCBzaGFyZWVDaGlsZCA9IHtcbiAgICAgICAgaWQ6ICd1c2VyLWtleScsXG4gICAgICAgIHB1YjogJ3NoYXJlZS1wdWInLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnIGFzIGNvbnN0LFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6c2hhcmVlLXBydmAsXG4gICAgICB9O1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsc0Zha2UoKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShpZCA9PT0gJ3VzZXIta2V5JyA/IHNoYXJlZUNoaWxkIDogcHVibGljT25seUtleWNoYWluKGlkKSlcbiAgICAgICk7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZ2V0U2hhcmVPcHRpb25zKHdhbGxldCk7XG4gICAgICBvcHRpb25zLnNraXBLZXljaGFpbi5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgb3B0aW9ucy5rZXljaGFpbi5wdWIuc2hvdWxkLmVxdWFsKCdzaGFyZWUtcHViJyk7XG4gICAgICAvLyByb290IChzYWZlLW93bmVyIGRldG91cikgbXVzdCBuZXZlciBiZSByZWFjaGVkIGZvciBhIHNoYXJlZSB3aXRoIGFuIGVuY3J5cHRlZCBjaGlsZCBwcnZcbiAgICAgIGtleWNoYWluc0dldFN0dWJcbiAgICAgICAgLmdldENhbGxzKClcbiAgICAgICAgLmZpbHRlcigoYykgPT4gYy5hcmdzPy5bMF0/LmlkID09PSByb290S2V5SWQpXG4gICAgICAgIC5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgbWFsZm9ybWVkIHNhZmUgd2FsbGV0IChjaGlsZCB3aXRoIG5vIHBhcmVudCkgZmFpbHMgY2xvc2VkIGluc3RlYWQgb2YgY29sZC1za2lwcGluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbHNGYWtlKCh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoaWQgPT09ICd1c2VyLWtleScgPyBwdWJsaWNPbmx5S2V5Y2hhaW4oaWQpIDogcHVibGljT25seUtleWNoYWluKGlkKSlcbiAgICAgICk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNoYXJlV2FsbGV0KHsgZW1haWw6ICdzaGFyZXRvQHRlc3QuY29tJywgcGVybWlzc2lvbnM6ICdzcGVuZCcsIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NhZmUgY2hpbGQgY291bGQgbm90IGJlIHJlc29sdmVkLyk7XG4gICAgICBjcmVhdGVTaGFyZVN0dWIubm90Q2FsbGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIG5vbi1zYWZlIGhvdCB3YWxsZXQgc3BlbmQgc2hhcmUgaXMgdW5jaGFuZ2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7fSk7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW4gPSB7XG4gICAgICAgIGlkOiAndXNlci1rZXknLFxuICAgICAgICBwdWI6ICdob3QtcHViJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyBhcyBjb25zdCxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOmhvdC1wcnZgLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbHNGYWtlKCh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoaWQgPT09ICd1c2VyLWtleScgPyB1c2VyS2V5Y2hhaW4gOiBwdWJsaWNPbmx5S2V5Y2hhaW4oaWQpKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBnZXRTaGFyZU9wdGlvbnMod2FsbGV0KTtcbiAgICAgIG9wdGlvbnMuc2tpcEtleWNoYWluLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBvcHRpb25zLmtleWNoYWluLnB1Yi5zaG91bGQuZXF1YWwoJ2hvdC1wdWInKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiBsbmJ0YyB3YWxsZXQgdGFrZXMgdGhlIHVzZXJBdXRoIHBhdGggYW5kIG5ldmVyIGVudGVycyB0aGUgc2FmZSBicmFuY2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScsIGNvaW46ICdsYnRjJyB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRGYW1pbHkucmV0dXJucygnbG5idGMnKTtcbiAgICAgIGNvbnN0IHNhZmVDaGlsZFNweSA9IHNpbm9uLnNweSh3YWxsZXQgYXMgYW55LCAnZ2V0U2FmZU93bmVyQ2hpbGRLZXljaGFpbicpO1xuICAgICAgLy8gc3R1YmJpbmcgdGhlIHByaXZhdGUga2V5Y2hhaW4gZmV0Y2ggc28gbG5idGMgcmVzb2x2ZXMgYSBrZXljaGFpbiB3aXRob3V0IGZ1bGwgbGlnaHRuaW5nIG1vY2tzXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCBhcyBhbnksICdnZXRFbmNyeXB0ZWRXYWxsZXRLZXljaGFpbkZvcldhbGxldFNoYXJpbmcnKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAndXNlci1rZXknLFxuICAgICAgICBwdWI6ICdsbi1wdWInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6bG4tcHJ2YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldFNoYXJlT3B0aW9ucyh3YWxsZXQpO1xuICAgICAgb3B0aW9ucy5rZXljaGFpbi5wdWIuc2hvdWxkLmVxdWFsKCdsbi1wdWInKTtcbiAgICAgIHNhZmVDaGlsZFNweS5ub3RDYWxsZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlQnVsa1dhbGxldFNoYXJlIG9uIGEgc2FmZSB3YWxsZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVsa1BhcmFtcyA9IHtcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICBrZXlTaGFyZU9wdGlvbnM6IFtcbiAgICAgICAgeyB1c2VySWQ6ICd1MScsIHB1YktleTogU0hBUkVFX1BVQiwgcGF0aDogJ20vMCcsIHBlcm1pc3Npb25zOiAnc3BlbmQnIH0sXG4gICAgICAgIHsgdXNlcklkOiAndTInLCBwdWJLZXk6IFNIQVJFRV9QVUIsIHBhdGg6ICdtLzAnLCBwZXJtaXNzaW9uczogJ3NwZW5kJyB9LFxuICAgICAgXSxcbiAgICB9IGFzIGFueTtcblxuICAgIGl0KCdkZXJpdmVzIHRoZSBjaGlsZCBvbmNlIChvbmUgcm9vdCBkZWNyeXB0KSBhbmQgZmFucyBpdCBvdXQgcGVyIHVzZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQnVsa1dhbGxldFNoYXJlKGJ1bGtQYXJhbXMpO1xuXG4gICAgICBjcmVhdGVCdWxrS2V5U2hhcmVzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVCdWxrS2V5U2hhcmVzU3R1Yi5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIG9wdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIG9wdGlvbnMuZm9yRWFjaCgobzogYW55KSA9PiBvLmtleWNoYWluLnB1Yi5zaG91bGQuZXF1YWwoaGFyZGVuZWQucHViKSk7XG4gICAgICAvLyBjaGlsZCArIHJvb3QgZXhhY3RseSBvbmNlIChzaW5nbGUgcm9vdCBkZWNyeXB0KVxuICAgICAgY29uc3Qgcm9vdENhbGxzID0ga2V5Y2hhaW5zR2V0U3R1Yi5nZXRDYWxscygpLmZpbHRlcigoYykgPT4gYy5hcmdzPy5bMF0/LmlkID09PSByb290S2V5SWQpO1xuICAgICAgcm9vdENhbGxzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhlIHJlYWwgZXJyb3IgcHJvcGFnYXRlcyBpbnN0ZWFkIG9mIHNoYXJlT3B0aW9ucyBjYW5ub3QgYmUgZW1wdHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScsIG11bHRpc2lnVHlwZTogJ3RzcycgfSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQnVsa1dhbGxldFNoYXJlKGJ1bGtQYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBjcmVhdGVCdWxrS2V5U2hhcmVzU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19