@bitgo-beta/abstract-utxo 1.1.1-beta.2020 → 1.1.1-beta.2021

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.
@@ -281,6 +281,143 @@ describe('Verify Transaction', function () {
281
281
  coinMock.restore();
282
282
  bitcoinMock.restore();
283
283
  });
284
+ it('should verify a bridging transaction whose implicit external output matches the bridge amount', async () => {
285
+ // Bridging intents (e.g. BTC -> sBTC peg-in) carry no recipients; the single external output
286
+ // is the bridge deposit address computed server-side. With explicitExternalSpendAmount 0 the
287
+ // paygo limit is 0, so any implicit external output would normally be rejected as an
288
+ // "unintended external recipient". For type: 'bridging' we instead verify that the implicit
289
+ // external spend equals bridgingParams.sbtc.amount.
290
+ const coinMock = sinon.stub(coin, 'parseTransaction').resolves({
291
+ keychains: {},
292
+ keySignatures: {},
293
+ outputs: [],
294
+ missingOutputs: [],
295
+ explicitExternalOutputs: [],
296
+ implicitExternalOutputs: [
297
+ {
298
+ address: 'sbtc_deposit_address',
299
+ amount: '22000',
300
+ },
301
+ ],
302
+ changeOutputs: [],
303
+ explicitExternalSpendAmount: 0,
304
+ implicitExternalSpendAmount: 22000,
305
+ needsCustomChangeKeySignatureVerification: false,
306
+ });
307
+ const bitcoinMock = sinon
308
+ .stub(coin, 'createTransactionFromHex')
309
+ .returns({ ins: [] });
310
+ const result = await coin.verifyTransaction({
311
+ txParams: {
312
+ walletPassphrase: passphrase,
313
+ type: 'bridging',
314
+ bridgingParams: { sbtc: { amount: '22000', stacksRecipient: 'SM1X', maxFee: '1000', lockTime: 100 } },
315
+ },
316
+ txPrebuild: {
317
+ txHex: '00',
318
+ },
319
+ wallet: unsignedSendingWallet,
320
+ verification: {},
321
+ });
322
+ assert_1.default.strictEqual(result, true);
323
+ coinMock.restore();
324
+ bitcoinMock.restore();
325
+ });
326
+ it('should reject a bridging transaction whose implicit external output does not match the bridge amount', async () => {
327
+ const coinMock = sinon.stub(coin, 'parseTransaction').resolves({
328
+ keychains: {},
329
+ keySignatures: {},
330
+ outputs: [],
331
+ missingOutputs: [],
332
+ explicitExternalOutputs: [],
333
+ implicitExternalOutputs: [
334
+ {
335
+ address: 'sbtc_deposit_address',
336
+ amount: '50000',
337
+ },
338
+ ],
339
+ changeOutputs: [],
340
+ explicitExternalSpendAmount: 0,
341
+ implicitExternalSpendAmount: 50000,
342
+ needsCustomChangeKeySignatureVerification: false,
343
+ });
344
+ await assert_1.default.rejects(coin.verifyTransaction({
345
+ txParams: {
346
+ walletPassphrase: passphrase,
347
+ type: 'bridging',
348
+ bridgingParams: { sbtc: { amount: '22000', stacksRecipient: 'SM1X', maxFee: '1000', lockTime: 100 } },
349
+ },
350
+ txPrebuild: {
351
+ txHex: '00',
352
+ },
353
+ wallet: unsignedSendingWallet,
354
+ verification: {},
355
+ }), /bridging output amount \(50000\) does not match intended bridge amount \(22000\)/);
356
+ coinMock.restore();
357
+ });
358
+ it('should reject a bridging transaction that is missing bridgingParams.sbtc.amount', async () => {
359
+ const coinMock = sinon.stub(coin, 'parseTransaction').resolves({
360
+ keychains: {},
361
+ keySignatures: {},
362
+ outputs: [],
363
+ missingOutputs: [],
364
+ explicitExternalOutputs: [],
365
+ implicitExternalOutputs: [
366
+ {
367
+ address: 'sbtc_deposit_address',
368
+ amount: '22000',
369
+ },
370
+ ],
371
+ changeOutputs: [],
372
+ explicitExternalSpendAmount: 0,
373
+ implicitExternalSpendAmount: 22000,
374
+ needsCustomChangeKeySignatureVerification: false,
375
+ });
376
+ await assert_1.default.rejects(coin.verifyTransaction({
377
+ txParams: {
378
+ walletPassphrase: passphrase,
379
+ type: 'bridging',
380
+ },
381
+ txPrebuild: {
382
+ txHex: '00',
383
+ },
384
+ wallet: unsignedSendingWallet,
385
+ verification: {},
386
+ }), /bridging transaction is missing bridgingParams.sbtc.amount/);
387
+ coinMock.restore();
388
+ });
389
+ it('should still reject the same implicit external output when the intent is not bridging', async () => {
390
+ // Same shape as the bridging test above, but without type: 'bridging' the implicit external
391
+ // output is treated as an unintended external recipient and rejected.
392
+ const coinMock = sinon.stub(coin, 'parseTransaction').resolves({
393
+ keychains: {},
394
+ keySignatures: {},
395
+ outputs: [],
396
+ missingOutputs: [],
397
+ explicitExternalOutputs: [],
398
+ implicitExternalOutputs: [
399
+ {
400
+ address: 'sbtc_deposit_address',
401
+ amount: '22000',
402
+ },
403
+ ],
404
+ changeOutputs: [],
405
+ explicitExternalSpendAmount: 0,
406
+ implicitExternalSpendAmount: 22000,
407
+ needsCustomChangeKeySignatureVerification: false,
408
+ });
409
+ await assert_1.default.rejects(coin.verifyTransaction({
410
+ txParams: {
411
+ walletPassphrase: passphrase,
412
+ },
413
+ txPrebuild: {
414
+ txHex: '00',
415
+ },
416
+ wallet: unsignedSendingWallet,
417
+ verification: {},
418
+ }), /prebuild attempts to spend to unintended external recipients/);
419
+ coinMock.restore();
420
+ });
284
421
  it('should work with bigint amounts', async () => {
285
422
  // need a coin that uses bigint
286
423
  const bigintCoin = (0, util_1.getUtxoCoin)('tdoge');
@@ -324,4 +461,4 @@ describe('Verify Transaction', function () {
324
461
  bitcoinMock.restore();
325
462
  });
326
463
  });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFHNUIsNkNBQStCO0FBQy9CLG1EQUE4QztBQUU5QyxpQ0FBbUQ7QUFFbkQsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRWhELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO0tBQ2pDLENBQUM7SUFFRixvRUFBb0U7SUFDcEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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QkFBaUIsQ0FBQztZQUNoRCxRQUFRLEVBQUU7Z0JBQ1IsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QjtZQUNELFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0QsTUFBTSxFQUFFLHFCQUE0QjtZQUNwQyxZQUFZLEVBQUUsRUFBRTtTQUNqQixDQUFDLENBQUM7UUFFSCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXRVdHhvQ29pbiB9IGZyb20gJy4vdXRpbCc7XG5cbmRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuXG4gIGNvbnN0IHVzZXJLZXljaGFpbiA9IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCk7XG4gIGNvbnN0IG90aGVyS2V5Y2hhaW4gPSBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpO1xuXG4gIGNvbnN0IGNoYW5nZUtleXMgPSB7XG4gICAgdXNlcjogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSxcbiAgICBiYWNrdXA6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCksXG4gICAgYml0Z286IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCksXG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgY29uc3Qgc2lnbiA9IGFzeW5jIChrZXksIGtleWNoYWluKSA9PiAoYXdhaXQgY29pbi5zaWduTWVzc2FnZShrZXljaGFpbiwga2V5LnB1YiEpKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHNpZ25Vc2VyID0gKGtleSkgPT4gc2lnbihrZXksIHVzZXJLZXljaGFpbik7XG4gIGNvbnN0IHNpZ25PdGhlciA9IChrZXkpID0+IHNpZ24oa2V5LCBvdGhlcktleWNoYWluKTtcbiAgY29uc3QgcGFzc3BocmFzZSA9ICd0ZXN0X3Bhc3NwaHJhc2UnO1xuXG4gIGNvbnN0IHN0dWJEYXRhID0ge1xuICAgIHVuc2lnbmVkU2VuZGluZ1dhbGxldDoge1xuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhbJzAnLCAnMScsICcyJ10pLFxuICAgIH0sXG4gICAgcGFyc2VUcmFuc2FjdGlvbkRhdGE6IHtcbiAgICAgIGJhZEtleToge1xuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICAvLyB1c2VyIHB1YmxpYyBrZXkgc3dhcHBlZCBvdXRcbiAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICBwdWI6IG90aGVyS2V5Y2hhaW4ucHViLFxuICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBkZWZhdWx0Qml0R28uZW5jcnlwdCh7XG4gICAgICAgICAgICAgIGlucHV0OiB1c2VyS2V5Y2hhaW4ucHJ2LFxuICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG5vQ3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgIGtleWNoYWluczogeyB1c2VyOiB1c2VyS2V5Y2hhaW4gfSxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICB9LFxuICAgICAgZW1wdHlDdXN0b21DaGFuZ2U6IHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlOiB7fSxcbiAgICAgIH0sXG4gICAgICAvLyBuZWVkcyB0byBiZSBhc3luYyBmdW5jdGlvbiB0byBjcmVhdGUgc2lnbmF0dXJlc1xuICAgICAgYmFkU2lnczogYXN5bmMgKCkgPT4gKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgICAga2V5czogW2NoYW5nZUtleXMudXNlciwgY2hhbmdlS2V5cy5iYWNrdXAsIGNoYW5nZUtleXMuYml0Z29dLFxuICAgICAgICAgIHNpZ25hdHVyZXM6IFtcbiAgICAgICAgICAgIGF3YWl0IHNpZ25PdGhlcihjaGFuZ2VLZXlzLnVzZXIpLFxuICAgICAgICAgICAgYXdhaXQgc2lnbk90aGVyKGNoYW5nZUtleXMuYmFja3VwKSxcbiAgICAgICAgICAgIGF3YWl0IHNpZ25PdGhlcihjaGFuZ2VLZXlzLmJpdGdvKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBnb29kU2lnczogYXN5bmMgKCkgPT4gKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgICAga2V5czogW2NoYW5nZUtleXMudXNlciwgY2hhbmdlS2V5cy5iYWNrdXAsIGNoYW5nZUtleXMuYml0Z29dLFxuICAgICAgICAgIHNpZ25hdHVyZXM6IFtcbiAgICAgICAgICAgIGF3YWl0IHNpZ25Vc2VyKGNoYW5nZUtleXMudXNlciksXG4gICAgICAgICAgICBhd2FpdCBzaWduVXNlcihjaGFuZ2VLZXlzLmJhY2t1cCksXG4gICAgICAgICAgICBhd2FpdCBzaWduVXNlcihjaGFuZ2VLZXlzLmJpdGdvKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBtaXNzaW5nT3V0cHV0czogMSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgdW5zaWduZWRTZW5kaW5nV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwgc3R1YkRhdGEudW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSB1c2VyIHByaXZhdGUga2V5IGNhbm5vdCBiZSB2ZXJpZmllZCB0byBtYXRjaCB0aGUgdXNlciBwdWJsaWMga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5iYWRLZXkgYXMgYW55KTtcbiAgICBjb25zdCB2ZXJpZnlXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCB7fSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHZlcmlmeVdhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC90cmFuc2FjdGlvbiByZXF1aXJlcyB2ZXJpZmljYXRpb24gb2YgdXNlciBwdWJsaWMga2V5LCBidXQgaXQgd2FzIHVuYWJsZSB0byBiZSB2ZXJpZmllZC9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjdXN0b20gY2hhbmdlIHZlcmlmaWNhdGlvbiBkYXRhIGlzIHJlcXVpcmVkIGJ1dCBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5ub0N1c3RvbUNoYW5nZSBhcyBhbnkpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvcGFyc2VkIHRyYW5zYWN0aW9uIGlzIG1pc3NpbmcgcmVxdWlyZWQgY3VzdG9tIGNoYW5nZSB2ZXJpZmljYXRpb24gZGF0YS9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjdXN0b20gY2hhbmdlIGtleXMgb3Iga2V5IHNpZ25hdHVyZXMgYXJlIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHN0dWJEYXRhLnBhcnNlVHJhbnNhY3Rpb25EYXRhLmVtcHR5Q3VzdG9tQ2hhbmdlIGFzIGFueSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9jdXN0b21DaGFuZ2UgcHJvcGVydHkgaXMgbWlzc2luZyBrZXlzIG9yIHNpZ25hdHVyZXMvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcyBjYW5ub3QgYmUgdmVyaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKChhd2FpdCBzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5iYWRTaWdzKCkpIGFzIGFueSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC90cmFuc2FjdGlvbiByZXF1aXJlcyB2ZXJpZmljYXRpb24gb2YgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcywgYnV0IHRoZXkgd2VyZSB1bmFibGUgdG8gYmUgdmVyaWZpZWQvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGN1c3RvbSBjaGFuZ2UgdHJhbnNhY3Rpb24gd2hlbiBjaGFuZ2Uga2V5cyBhbmQgc2lnbmF0dXJlcyBhcmUgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKChhd2FpdCBzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5nb29kU2lncygpKSBhcyBhbnkpO1xuXG4gICAgLy8gaWYgdmVyaWZ5IHRyYW5zYWN0aW9uIGdldHMgcmVqZWN0ZWQgd2l0aCB0aGUgb3V0cHV0cyBtaXNzaW5nIGVycm9yIG1lc3NhZ2UsXG4gICAgLy8gdGhlbiB3ZSBrbm93IHRoYXQgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcyB3YXMgc3VjY2Vzc2Z1bFxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL2V4cGVjdGVkIG91dHB1dHMgbWlzc2luZyBpbiB0cmFuc2FjdGlvbiBwcmVidWlsZC9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgbW9yZSB0aGFuIDE1MCBiYXNpcyBwb2ludHMgb2YgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyAoZm9yIHBheWdvIG91dHB1dHMpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxMDAwMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTUxLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgfSksXG4gICAgICAvcHJlYnVpbGQgYXR0ZW1wdHMgdG8gc3BlbmQgdG8gdW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRzL1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgMTUwIGJhc2lzIHBvaW50cyBvZiBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIChmb3IgcGF5Z28gb3V0cHV0cyknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDEwMDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE1LFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoY29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIGJpdGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYW55IGltcGxpY2l0IGV4dGVybmFsIG91dHB1dHMgaWYgcGF5Z28gb3V0cHV0cyBhcmUgZGlzYWxsb3dlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHtcbiAgICAgICAgICBhbGxvd1BheWdvT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgL3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cy9cbiAgICApO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IHBheWdvIG91dHB1dHMgaWYgZW1wdHkgdmVyaWZpY2F0aW9uIG9iamVjdCBpcyBwYXNzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDEwMDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE1LFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoY29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgICBiaXRjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgd29yayB3aXRoIGJpZ2ludCBhbW91bnRzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIG5lZWQgYSBjb2luIHRoYXQgdXNlcyBiaWdpbnRcbiAgICBjb25zdCBiaWdpbnRDb2luID0gZ2V0VXR4b0NvaW4oJ3Rkb2dlJyk7XG5cbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoYmlnaW50Q29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2V4dGVybmFsX2FkZHJlc3MnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2V4dGVybmFsX2FkZHJlc3NfMicsXG4gICAgICAgICAgYW1vdW50OiAnMTUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBCaWdJbnQoMTAwMDApLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBCaWdJbnQoMTUpLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoYmlnaW50Q29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpZ2ludENvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgICBiaXRjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xufSk7XG4iXX0=
464
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFHNUIsNkNBQStCO0FBQy9CLG1EQUE4QztBQUU5QyxpQ0FBbUQ7QUFFbkQsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRWhELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO0tBQ2pDLENBQUM7SUFFRixvRUFBb0U7SUFDcEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZGVzY3JpYmUoJ1ZlcmlmeSBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG5cbiAgY29uc3QgdXNlcktleWNoYWluID0gY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKTtcbiAgY29uc3Qgb3RoZXJLZXljaGFpbiA9IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCk7XG5cbiAgY29uc3QgY2hhbmdlS2V5cyA9IHtcbiAgICB1c2VyOiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpLFxuICAgIGJhY2t1cDogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSxcbiAgICBiaXRnbzogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSxcbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICBjb25zdCBzaWduID0gYXN5bmMgKGtleSwga2V5Y2hhaW4pID0+IChhd2FpdCBjb2luLnNpZ25NZXNzYWdlKGtleWNoYWluLCBrZXkucHViISkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3Qgc2lnblVzZXIgPSAoa2V5KSA9PiBzaWduKGtleSwgdXNlcktleWNoYWluKTtcbiAgY29uc3Qgc2lnbk90aGVyID0gKGtleSkgPT4gc2lnbihrZXksIG90aGVyS2V5Y2hhaW4pO1xuICBjb25zdCBwYXNzcGhyYXNlID0gJ3Rlc3RfcGFzc3BocmFzZSc7XG5cbiAgY29uc3Qgc3R1YkRhdGEgPSB7XG4gICAgdW5zaWduZWRTZW5kaW5nV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFsnMCcsICcxJywgJzInXSksXG4gICAgfSxcbiAgICBwYXJzZVRyYW5zYWN0aW9uRGF0YToge1xuICAgICAgYmFkS2V5OiB7XG4gICAgICAgIGtleWNoYWluczoge1xuICAgICAgICAgIC8vIHVzZXIgcHVibGljIGtleSBzd2FwcGVkIG91dFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIHB1Yjogb3RoZXJLZXljaGFpbi5wdWIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGRlZmF1bHRCaXRHby5lbmNyeXB0KHtcbiAgICAgICAgICAgICAgaW5wdXQ6IHVzZXJLZXljaGFpbi5wcnYsXG4gICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzcGhyYXNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICB9LFxuICAgICAgbm9DdXN0b21DaGFuZ2U6IHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBlbXB0eUN1c3RvbUNoYW5nZToge1xuICAgICAgICBrZXljaGFpbnM6IHsgdXNlcjogdXNlcktleWNoYWluIH0sXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgICBjdXN0b21DaGFuZ2U6IHt9LFxuICAgICAgfSxcbiAgICAgIC8vIG5lZWRzIHRvIGJlIGFzeW5jIGZ1bmN0aW9uIHRvIGNyZWF0ZSBzaWduYXR1cmVzXG4gICAgICBiYWRTaWdzOiBhc3luYyAoKSA9PiAoe1xuICAgICAgICBrZXljaGFpbnM6IHsgdXNlcjogdXNlcktleWNoYWluIH0sXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgICBjdXN0b21DaGFuZ2U6IHtcbiAgICAgICAgICBrZXlzOiBbY2hhbmdlS2V5cy51c2VyLCBjaGFuZ2VLZXlzLmJhY2t1cCwgY2hhbmdlS2V5cy5iaXRnb10sXG4gICAgICAgICAgc2lnbmF0dXJlczogW1xuICAgICAgICAgICAgYXdhaXQgc2lnbk90aGVyKGNoYW5nZUtleXMudXNlciksXG4gICAgICAgICAgICBhd2FpdCBzaWduT3RoZXIoY2hhbmdlS2V5cy5iYWNrdXApLFxuICAgICAgICAgICAgYXdhaXQgc2lnbk90aGVyKGNoYW5nZUtleXMuYml0Z28pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGdvb2RTaWdzOiBhc3luYyAoKSA9PiAoe1xuICAgICAgICBrZXljaGFpbnM6IHsgdXNlcjogdXNlcktleWNoYWluIH0sXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgICBjdXN0b21DaGFuZ2U6IHtcbiAgICAgICAgICBrZXlzOiBbY2hhbmdlS2V5cy51c2VyLCBjaGFuZ2VLZXlzLmJhY2t1cCwgY2hhbmdlS2V5cy5iaXRnb10sXG4gICAgICAgICAgc2lnbmF0dXJlczogW1xuICAgICAgICAgICAgYXdhaXQgc2lnblVzZXIoY2hhbmdlS2V5cy51c2VyKSxcbiAgICAgICAgICAgIGF3YWl0IHNpZ25Vc2VyKGNoYW5nZUtleXMuYmFja3VwKSxcbiAgICAgICAgICAgIGF3YWl0IHNpZ25Vc2VyKGNoYW5nZUtleXMuYml0Z28pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIG1pc3NpbmdPdXRwdXRzOiAxLFxuICAgICAgfSksXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCBzdHViRGF0YS51bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIHVzZXIgcHJpdmF0ZSBrZXkgY2Fubm90IGJlIHZlcmlmaWVkIHRvIG1hdGNoIHRoZSB1c2VyIHB1YmxpYyBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHN0dWJEYXRhLnBhcnNlVHJhbnNhY3Rpb25EYXRhLmJhZEtleSBhcyBhbnkpO1xuICAgIGNvbnN0IHZlcmlmeVdhbGxldCA9IHNpbm9uLmNyZWF0ZVN0dWJJbnN0YW5jZShXYWxsZXQsIHt9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdmVyaWZ5V2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL3RyYW5zYWN0aW9uIHJlcXVpcmVzIHZlcmlmaWNhdGlvbiBvZiB1c2VyIHB1YmxpYyBrZXksIGJ1dCBpdCB3YXMgdW5hYmxlIHRvIGJlIHZlcmlmaWVkL1xuICAgICk7XG5cbiAgICAoY29pbi5wYXJzZVRyYW5zYWN0aW9uIGFzIGFueSkucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIGN1c3RvbSBjaGFuZ2UgdmVyaWZpY2F0aW9uIGRhdGEgaXMgcmVxdWlyZWQgYnV0IG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHN0dWJEYXRhLnBhcnNlVHJhbnNhY3Rpb25EYXRhLm5vQ3VzdG9tQ2hhbmdlIGFzIGFueSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9wYXJzZWQgdHJhbnNhY3Rpb24gaXMgbWlzc2luZyByZXF1aXJlZCBjdXN0b20gY2hhbmdlIHZlcmlmaWNhdGlvbiBkYXRhL1xuICAgICk7XG5cbiAgICAoY29pbi5wYXJzZVRyYW5zYWN0aW9uIGFzIGFueSkucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIGN1c3RvbSBjaGFuZ2Uga2V5cyBvciBrZXkgc2lnbmF0dXJlcyBhcmUgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoc3R1YkRhdGEucGFyc2VUcmFuc2FjdGlvbkRhdGEuZW1wdHlDdXN0b21DaGFuZ2UgYXMgYW55KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL2N1c3RvbUNoYW5nZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGtleXMgb3Igc2lnbmF0dXJlcy9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjdXN0b20gY2hhbmdlIGtleSBzaWduYXR1cmVzIGNhbm5vdCBiZSB2ZXJpZmllZCcsIGFzeW5jICgpID0+IHtcbiAgICBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoKGF3YWl0IHN0dWJEYXRhLnBhcnNlVHJhbnNhY3Rpb25EYXRhLmJhZFNpZ3MoKSkgYXMgYW55KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL3RyYW5zYWN0aW9uIHJlcXVpcmVzIHZlcmlmaWNhdGlvbiBvZiBjdXN0b20gY2hhbmdlIGtleSBzaWduYXR1cmVzLCBidXQgdGhleSB3ZXJlIHVuYWJsZSB0byBiZSB2ZXJpZmllZC9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgY3VzdG9tIGNoYW5nZSB0cmFuc2FjdGlvbiB3aGVuIGNoYW5nZSBrZXlzIGFuZCBzaWduYXR1cmVzIGFyZSB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoKGF3YWl0IHN0dWJEYXRhLnBhcnNlVHJhbnNhY3Rpb25EYXRhLmdvb2RTaWdzKCkpIGFzIGFueSk7XG5cbiAgICAvLyBpZiB2ZXJpZnkgdHJhbnNhY3Rpb24gZ2V0cyByZWplY3RlZCB3aXRoIHRoZSBvdXRwdXRzIG1pc3NpbmcgZXJyb3IgbWVzc2FnZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhhdCB0aGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBjdXN0b20gY2hhbmdlIGtleSBzaWduYXR1cmVzIHdhcyBzdWNjZXNzZnVsXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvZXhwZWN0ZWQgb3V0cHV0cyBtaXNzaW5nIGluIHRyYW5zYWN0aW9uIHByZWJ1aWxkL1xuICAgICk7XG5cbiAgICAoY29pbi5wYXJzZVRyYW5zYWN0aW9uIGFzIGFueSkucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBtb3JlIHRoYW4gMTUwIGJhc2lzIHBvaW50cyBvZiBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIChmb3IgcGF5Z28gb3V0cHV0cyknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDEwMDAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxNTEsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICB9KSxcbiAgICAgIC9wcmVidWlsZCBhdHRlbXB0cyB0byBzcGVuZCB0byB1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudHMvXG4gICAgKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyAxNTAgYmFzaXMgcG9pbnRzIG9mIGltcGxpY2l0IGV4dGVybmFsIG91dHB1dHMgKGZvciBwYXlnbyBvdXRwdXRzKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAwMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTUsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiaXRjb2luTW9jayA9IHNpbm9uXG4gICAgICAuc3R1Yihjb2luLCAnY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4JylcbiAgICAgIC5yZXR1cm5zKHsgaW5zOiBbXSB9IGFzIHVua25vd24gYXMgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICB9LFxuICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gICAgYml0Y29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBhbnkgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyBpZiBwYXlnbyBvdXRwdXRzIGFyZSBkaXNhbGxvd2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICAgIGFsbG93UGF5Z29PdXRwdXQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICAvcHJlYnVpbGQgYXR0ZW1wdHMgdG8gc3BlbmQgdG8gdW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRzL1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgcGF5Z28gb3V0cHV0cyBpZiBlbXB0eSB2ZXJpZmljYXRpb24gb2JqZWN0IGlzIHBhc3NlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAwMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTUsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBiaXRjb2luTW9jayA9IHNpbm9uXG4gICAgICAuc3R1Yihjb2luLCAnY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4JylcbiAgICAgIC5yZXR1cm5zKHsgaW5zOiBbXSB9IGFzIHVua25vd24gYXMgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICB9LFxuICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIGJpdGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSBicmlkZ2luZyB0cmFuc2FjdGlvbiB3aG9zZSBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXQgbWF0Y2hlcyB0aGUgYnJpZGdlIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBCcmlkZ2luZyBpbnRlbnRzIChlLmcuIEJUQyAtPiBzQlRDIHBlZy1pbikgY2Fycnkgbm8gcmVjaXBpZW50czsgdGhlIHNpbmdsZSBleHRlcm5hbCBvdXRwdXRcbiAgICAvLyBpcyB0aGUgYnJpZGdlIGRlcG9zaXQgYWRkcmVzcyBjb21wdXRlZCBzZXJ2ZXItc2lkZS4gV2l0aCBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgMCB0aGVcbiAgICAvLyBwYXlnbyBsaW1pdCBpcyAwLCBzbyBhbnkgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0IHdvdWxkIG5vcm1hbGx5IGJlIHJlamVjdGVkIGFzIGFuXG4gICAgLy8gXCJ1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudFwiLiBGb3IgdHlwZTogJ2JyaWRnaW5nJyB3ZSBpbnN0ZWFkIHZlcmlmeSB0aGF0IHRoZSBpbXBsaWNpdFxuICAgIC8vIGV4dGVybmFsIHNwZW5kIGVxdWFscyBicmlkZ2luZ1BhcmFtcy5zYnRjLmFtb3VudC5cbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ3NidGNfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICBhbW91bnQ6ICcyMjAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDIyMDAwLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoY29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgYnJpZGdpbmdQYXJhbXM6IHsgc2J0YzogeyBhbW91bnQ6ICcyMjAwMCcsIHN0YWNrc1JlY2lwaWVudDogJ1NNMVgnLCBtYXhGZWU6ICcxMDAwJywgbG9ja1RpbWU6IDEwMCB9IH0sXG4gICAgICB9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgIH0sXG4gICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gICAgYml0Y29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCBhIGJyaWRnaW5nIHRyYW5zYWN0aW9uIHdob3NlIGltcGxpY2l0IGV4dGVybmFsIG91dHB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgYnJpZGdlIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ3NidGNfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICBhbW91bnQ6ICc1MDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDUwMDAwLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgICAgYnJpZGdpbmdQYXJhbXM6IHsgc2J0YzogeyBhbW91bnQ6ICcyMjAwMCcsIHN0YWNrc1JlY2lwaWVudDogJ1NNMVgnLCBtYXhGZWU6ICcxMDAwJywgbG9ja1RpbWU6IDEwMCB9IH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvYnJpZGdpbmcgb3V0cHV0IGFtb3VudCBcXCg1MDAwMFxcKSBkb2VzIG5vdCBtYXRjaCBpbnRlbmRlZCBicmlkZ2UgYW1vdW50IFxcKDIyMDAwXFwpL1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IGEgYnJpZGdpbmcgdHJhbnNhY3Rpb24gdGhhdCBpcyBtaXNzaW5nIGJyaWRnaW5nUGFyYW1zLnNidGMuYW1vdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnc2J0Y19kZXBvc2l0X2FkZHJlc3MnLFxuICAgICAgICAgIGFtb3VudDogJzIyMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMjIwMDAsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9icmlkZ2luZyB0cmFuc2FjdGlvbiBpcyBtaXNzaW5nIGJyaWRnaW5nUGFyYW1zLnNidGMuYW1vdW50L1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RpbGwgcmVqZWN0IHRoZSBzYW1lIGltcGxpY2l0IGV4dGVybmFsIG91dHB1dCB3aGVuIHRoZSBpbnRlbnQgaXMgbm90IGJyaWRnaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFNhbWUgc2hhcGUgYXMgdGhlIGJyaWRnaW5nIHRlc3QgYWJvdmUsIGJ1dCB3aXRob3V0IHR5cGU6ICdicmlkZ2luZycgdGhlIGltcGxpY2l0IGV4dGVybmFsXG4gICAgLy8gb3V0cHV0IGlzIHRyZWF0ZWQgYXMgYW4gdW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnQgYW5kIHJlamVjdGVkLlxuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnc2J0Y19kZXBvc2l0X2FkZHJlc3MnLFxuICAgICAgICAgIGFtb3VudDogJzIyMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMjIwMDAsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvcHJlYnVpbGQgYXR0ZW1wdHMgdG8gc3BlbmQgdG8gdW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRzL1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgd29yayB3aXRoIGJpZ2ludCBhbW91bnRzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIG5lZWQgYSBjb2luIHRoYXQgdXNlcyBiaWdpbnRcbiAgICBjb25zdCBiaWdpbnRDb2luID0gZ2V0VXR4b0NvaW4oJ3Rkb2dlJyk7XG5cbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoYmlnaW50Q29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2V4dGVybmFsX2FkZHJlc3MnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2V4dGVybmFsX2FkZHJlc3NfMicsXG4gICAgICAgICAgYW1vdW50OiAnMTUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBCaWdJbnQoMTAwMDApLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBCaWdJbnQoMTUpLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoYmlnaW50Q29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpZ2ludENvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgICBiaXRjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xufSk7XG4iXX0=