@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.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +3 -1
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +18 -2
- package/dist/cjs/test/unit/verifyTransaction.js +138 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +3 -1
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +1 -1
- package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/verifyTransaction.js +18 -2
- package/package.json +9 -9
|
@@ -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=
|