@bitgo/sdk-coin-stx 4.3.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/abstractContractBuilder.d.ts +18 -2
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
- package/dist/src/lib/abstractContractBuilder.js +40 -7
- package/dist/src/lib/constants.d.ts +0 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +2 -4
- package/dist/src/lib/contractBuilder.d.ts +14 -0
- package/dist/src/lib/contractBuilder.d.ts.map +1 -1
- package/dist/src/lib/contractBuilder.js +29 -5
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -1
- package/dist/src/lib/fungibleTokenTransferBuilder.js +10 -5
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +2 -1
- package/dist/src/lib/keyPair.d.ts +1 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +8 -4
- package/dist/src/lib/network.d.ts.map +1 -1
- package/dist/src/lib/network.js +4 -3
- package/dist/src/lib/postConditions.d.ts +31 -0
- package/dist/src/lib/postConditions.d.ts.map +1 -0
- package/dist/src/lib/postConditions.js +61 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.js +11 -9
- package/dist/src/lib/sendmanyBuilder.d.ts +1 -1
- package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -1
- package/dist/src/lib/sendmanyBuilder.js +5 -3
- package/dist/src/lib/transaction.d.ts +3 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +22 -20
- package/dist/src/lib/transactionBuilder.d.ts +0 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +20 -10
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +2 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +1 -2
- package/dist/src/lib/utils.d.ts +2 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +36 -21
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +13 -13
- package/dist/test/fixtures.d.ts +3 -18
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +7 -20
- package/dist/test/unit/btcAddressUtils.js +54 -1
- package/dist/test/unit/keyPair.js +9 -4
- package/dist/test/unit/network.js +5 -5
- package/dist/test/unit/postConditions.d.ts +2 -0
- package/dist/test/unit/postConditions.d.ts.map +1 -0
- package/dist/test/unit/postConditions.js +56 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +94 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts +2 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts.map +1 -0
- package/dist/test/unit/registerForBondRealArgs.js +22 -0
- package/dist/test/unit/resources.d.ts +2 -0
- package/dist/test/unit/resources.d.ts.map +1 -1
- package/dist/test/unit/resources.js +7 -4
- package/dist/test/unit/sip10Token.js +47 -1
- package/dist/test/unit/stx.js +93 -2
- package/dist/test/unit/stxNodeErrors.d.ts +2 -0
- package/dist/test/unit/stxNodeErrors.d.ts.map +1 -0
- package/dist/test/unit/stxNodeErrors.js +118 -0
- package/dist/test/unit/transaction.js +24 -1
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/builderValidators.js +119 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +37 -3
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +86 -3
- package/dist/test/unit/transactionBuilder/pox5Builder.js +96 -1
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +94 -27
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +31 -8
- package/dist/test/unit/transactionBuilder/transferBuilder.js +69 -3
- package/dist/test/unit/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilderFactory.js +63 -0
- package/dist/test/unit/tstxsignet.js +14 -3
- package/dist/test/unit/util.js +106 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -79,8 +79,8 @@ describe('Stacks: Contract Builder', function () {
|
|
|
79
79
|
// used type any to access protected properties
|
|
80
80
|
const txBuilder = factory.getTransferBuilder();
|
|
81
81
|
const txBuilderProd = factoryProd.getTransferBuilder();
|
|
82
|
-
txBuilder._network.should.deepEqual(
|
|
83
|
-
txBuilderProd._network.should.deepEqual(
|
|
82
|
+
txBuilder._network.should.deepEqual(network_1.STACKS_TESTNET);
|
|
83
|
+
txBuilderProd._network.should.deepEqual(network_1.STACKS_MAINNET);
|
|
84
84
|
});
|
|
85
85
|
});
|
|
86
86
|
describe('should build ', () => {
|
|
@@ -366,6 +366,14 @@ describe('Stacks: Contract Builder', function () {
|
|
|
366
366
|
})),
|
|
367
367
|
]);
|
|
368
368
|
});
|
|
369
|
+
it('rejects a malformed JSON descriptor instead of treating it as a ClarityValue', () => {
|
|
370
|
+
const builder = initTxBuilder();
|
|
371
|
+
// `{ type: 'list' }` / `{ type: 'tuple' }` reuse a ClarityType name but carry no
|
|
372
|
+
// `val`/`value`; they must still be validated by `parseCv` (and rejected) rather than
|
|
373
|
+
// passed through as raw ClarityValues.
|
|
374
|
+
assert_1.default.throws(() => builder.functionArgs([{ type: 'list' }]), sdk_core_1.InvalidParameterValueError);
|
|
375
|
+
assert_1.default.throws(() => builder.functionArgs([{ type: 'tuple' }]), sdk_core_1.InvalidParameterValueError);
|
|
376
|
+
});
|
|
369
377
|
it('use ClarityValue', () => {
|
|
370
378
|
const amount = '400000000';
|
|
371
379
|
const builder = initTxBuilder();
|
|
@@ -457,7 +465,33 @@ describe('Stacks: Contract Builder', function () {
|
|
|
457
465
|
assert_1.default.throws(() => builder.functionArgs([{ type: 'response', val: { type: 'maybe', val: { type: 'uint128', val: '1' } } }]), /response requires \{ type: ok\|err, val \}/);
|
|
458
466
|
});
|
|
459
467
|
});
|
|
468
|
+
describe('contract builder validation and init edge cases', function () {
|
|
469
|
+
it('rejects an invalid contract address and empty names', function () {
|
|
470
|
+
const builder = factory.getContractBuilder();
|
|
471
|
+
assert_1.default.throws(() => builder.contractAddress('invalid'), /Invalid address/);
|
|
472
|
+
assert_1.default.throws(() => builder.contractName(''), /Invalid name/);
|
|
473
|
+
assert_1.default.throws(() => builder.functionName(''), /Invalid name/);
|
|
474
|
+
});
|
|
475
|
+
it('parses a response-error Clarity value descriptor', function () {
|
|
476
|
+
const builder = factory.getContractBuilder();
|
|
477
|
+
builder.functionArgs([{ type: 'response', val: { type: 'err', val: { type: 'uint128', val: '1' } } }]);
|
|
478
|
+
});
|
|
479
|
+
it('rejects principal descriptors without a string val', function () {
|
|
480
|
+
const builder = factory.getContractBuilder();
|
|
481
|
+
assert_1.default.throws(() => builder.functionArgs([{ type: 'contractPrincipal', val: 1 }]), /contract principal requires string val/);
|
|
482
|
+
assert_1.default.throws(() => builder.functionArgs([{ type: 'standardPrincipal', val: 1 }]), /standard principal requires string val/);
|
|
483
|
+
});
|
|
484
|
+
it('rejects a contract-call init with a missing or non-contract-call payload', function () {
|
|
485
|
+
const builder = factory.getContractBuilder();
|
|
486
|
+
assert_1.default.throws(() => builder.initBuilder({ toJson: () => ({ payload: undefined }) }), /payload must not be undefined/);
|
|
487
|
+
assert_1.default.throws(() => builder.initBuilder({ toJson: () => ({ payload: { payloadType: 0 } }) }), /Transaction should be contract call/);
|
|
488
|
+
});
|
|
489
|
+
it('rejects building a contract call without a public key', async function () {
|
|
490
|
+
const builder = initTxBuilder();
|
|
491
|
+
await assert_1.default.rejects(builder.build(), /supply at least 1 public key/);
|
|
492
|
+
});
|
|
493
|
+
});
|
|
460
494
|
});
|
|
461
495
|
});
|
|
462
496
|
});
|
|
463
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jb250cmFjdEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGtEQUEyQjtBQUMzQiw2Q0FBK0Q7QUFDL0QsOENBQWtEO0FBQ2xELHVEQUE2RztBQUM3Ryw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBQzFDLDRDQUF1QztBQUV2QyxzQ0FBaUQ7QUFDakQsdURBQXlDO0FBRXpDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxZQUFNLENBQUMsS0FBSyxDQUFDO0FBRXJDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtJQUNuQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQzVCLElBQUksS0FBbUIsQ0FBQztJQUV4QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM5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YSxFQUFFLENBQUM7b0JBQ2hDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUMzRSw4QkFBOEIsQ0FDL0IsQ0FBQztvQkFDRixnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUNwRixvQ0FBb0MsQ0FDckMsQ0FBQztvQkFDRixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztvQkFDOUcsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQ0gsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQzFHLDRDQUE0QyxDQUM3QyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgQmlnTnVtIGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IFN0YWNrc1Rlc3RuZXQsIFN0YWNrc01haW5uZXQgfSBmcm9tICdAc3RhY2tzL25ldHdvcmsnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGJ1ZmZlckNWLCBub25lQ1YsIHNvbWVDViwgc3RhbmRhcmRQcmluY2lwYWxDViwgdHVwbGVDViwgdWludENWLCBpbnRDViB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmltcG9ydCB7IFN0eCwgVHN0eCwgU3R4TGliIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmNvbnN0IHsgc3RyaW5naWZ5Q3YgfSA9IFN0eExpYi5VdGlscztcblxuZGVzY3JpYmUoJ1N0YWNrczogQ29udHJhY3QgQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4JztcbiAgY29uc3QgY29pbk5hbWVUZXN0ID0gJ3RzdHgnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7XG4gICAgICBlbnY6ICdtb2NrJyxcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3N0eCcsIFN0eC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0c3R4JywgVHN0eC5jcmVhdGVJbnN0YW5jZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTdHggQ29udHJhY3QgY2FsbCBCdWlsZGVyJywgKCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lVGVzdCkpO1xuICAgIGNvbnN0IGZhY3RvcnlQcm9kID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuXG4gICAgY29uc3QgaW5pdFR4QnVpbGRlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q29udHJhY3RCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgwKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdEFkZHJlc3ModGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3ROYW1lKHRlc3REYXRhLkNPTlRSQUNUX05BTUUpO1xuICAgICAgdHhCdWlsZGVyLmZ1bmN0aW9uTmFtZSh0ZXN0RGF0YS5DT05UUkFDVF9GVU5DVElPTl9OQU1FKTtcbiAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgfTtcblxuICAgIGRlc2NyaWJlKCdjb250cmFjdCBidWlsZGVyIGVudmlyb25tZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzZWxlY3QgdGhlIHJpZ2h0IG5ldHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpLmNvaW5OYW1lKCksICd0c3R4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChmYWN0b3J5UHJvZC5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAnc3R4Jyk7XG4gICAgICAgIC8vIHVzZWQgdHlwZSBhbnkgdG8gYWNjZXNzIHByb3RlY3RlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHR4QnVpbGRlcjogYW55ID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyUHJvZDogYW55ID0gZmFjdG9yeVByb2QuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG5cbiAgICAgICAgdHhCdWlsZGVyLl9uZXR3b3JrLnNob3VsZC5kZWVwRXF1YWwobmV3IFN0YWNrc1Rlc3RuZXQoKSk7XG4gICAgICAgIHR4QnVpbGRlclByb2QuX25ldHdvcmsuc2hvdWxkLmRlZXBFcXVhbChuZXcgU3RhY2tzTWFpbm5ldCgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCAnLCAoKSA9PiB7XG4gICAgICBpdCgnYW4gdW5zaWduZWQgY29udHJhY3QgY2FsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICc0MDAwMDAwMDAnIH0sXG4gICAgICAgICAgeyB0eXBlOiAncHJpbmNpcGFsJywgdmFsOiB0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyB9LFxuICAgICAgICAgIHsgdHlwZTogJ29wdGlvbmFsJywgdmFsOiB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnMjAwJyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ29wdGlvbmFsJyxcbiAgICAgICAgICAgIHZhbDoge1xuICAgICAgICAgICAgICB0eXBlOiAndHVwbGUnLFxuICAgICAgICAgICAgICB2YWw6IFtcbiAgICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICAgIHsga2V5OiAndmVyc2lvbicsIHR5cGU6ICdidWZmZXInLCB2YWw6IG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX0ZVTkNUSU9OX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVU5TSUdORURfQ09OVFJBQ1RfQ0FMTCk7XG5cbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYW4gdW5zaWduZWQgc2VsZiBzdGFja2luZyBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAvKiBDb250cmFjdCBjYWxsIGluIGNsYXJpdHkgUE9YLTRcbiAgICAgICAgKGRlZmluZS1wdWJsaWMgKHN0YWNrLXN0eCAoYW1vdW50LXVzdHggdWludClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBveC1hZGRyICh0dXBsZSAodmVyc2lvbiAoYnVmZiAxKSkgKGhhc2hieXRlcyAoYnVmZiAzMikpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0LWJ1cm4taHQgdWludClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2stcGVyaW9kIHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduZXItc2lnIChvcHRpb25hbCAoYnVmZiA2NSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbmVyLWtleSAoYnVmZiAzMykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtYXgtYW1vdW50IHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhdXRoLWlkIHVpbnQpKVxuICAgICAgICAgKi9cbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICc0MDAwMDAwMDAnIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3R1cGxlJyxcbiAgICAgICAgICAgIHZhbDogW1xuICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICB7IGtleTogJ3ZlcnNpb24nLCB0eXBlOiAnYnVmZmVyJywgdmFsOiBuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnNTI4MDAnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzInIH0sXG4gICAgICAgICAgLy8gTmFrYW1vdG8gdXBncmFkZSBuZXcgNCBwYXJhbWV0ZXJzXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLnN0YWNrcy5jby9uYWthbW90by11cGdyYWRlL3NpZ25pbmctYW5kLXN0YWNraW5nL3N0YWNraW5nLWZsb3cjc29sby1zdGFja2VyLWZsb3dcbiAgICAgICAgICB7IHR5cGU6ICdvcHRpb25hbCcsIHZhbDogeyB0eXBlOiAnYnVmZmVyJywgdmFsOiBCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykgfSB9LFxuICAgICAgICAgIHsgdHlwZTogJ2J1ZmZlcicsIHZhbDogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzM0MDI4MjM2NjkyMDkzODQ2MzQ2MzM3NDYwNzQzMTc2ODIxMTQ1NScgfSxcbiAgICAgICAgICB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnMTIzNDU2JyB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX0ZVTkNUSU9OX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVU5TSUdORURfU0VMRl9TVEFDS19DT05UUkFDVF9DQUxMKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhbiB1bnNpZ25lZCBQb1gtNSByZWdpc3Rlci1mb3ItYm9uZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRDb250cmFjdEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgICBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcyh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC01Jyk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzIxMCcgfSxcbiAgICAgICAgICB7IHR5cGU6ICdwcmluY2lwYWwnLCB2YWw6ICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwLnNpZ25lci1tYW5hZ2VyJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcxMDA1MDAwJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ29wdGlvbmFsJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ29wdGlvbmFsJyB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgJ3BveC01Jyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICAgICAgdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Egc2lnbmVkIGNvbnRyYWN0IGNhbGwgd2l0aCBhcmdzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzQwMDAwMDAwMCcgfSxcbiAgICAgICAgICB7IHR5cGU6ICdwcmluY2lwYWwnLCB2YWw6IHRlc3REYXRhLkFDQ09VTlRfMi5hZGRyZXNzIH0sXG4gICAgICAgICAgeyB0eXBlOiAnb3B0aW9uYWwnIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ29wdGlvbmFsJyxcbiAgICAgICAgICAgIHZhbDoge1xuICAgICAgICAgICAgICB0eXBlOiAndHVwbGUnLFxuICAgICAgICAgICAgICB2YWw6IFtcbiAgICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICAgIHsga2V5OiAndmVyc2lvbicsIHR5cGU6ICdidWZmZXInLCB2YWw6IG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5UWF9TRU5ERVIucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9GVU5DVElPTl9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9DT05UUkFDVF9XSVRIX0FSR1MpO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuICAgICAgICB0eC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Egc2lnbmVkIHNlbGYgc3RhY2tpbmcgY29udHJhY3QgY2FsbCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgLyogQ29udHJhY3QgY2FsbCBpbiBjbGFyaXR5IFBPWC00XG4gICAgICAgIChkZWZpbmUtcHVibGljIChzdGFjay1zdHggKGFtb3VudC11c3R4IHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChwb3gtYWRkciAodHVwbGUgKHZlcnNpb24gKGJ1ZmYgMSkpIChoYXNoYnl0ZXMgKGJ1ZmYgMzIpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydC1idXJuLWh0IHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NrLXBlcmlvZCB1aW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbmVyLXNpZyAob3B0aW9uYWwgKGJ1ZmYgNjUpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25lci1rZXkgKGJ1ZmYgMzMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4LWFtb3VudCB1aW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYXV0aC1pZCB1aW50KSlcbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnNDAwMDAwMDAwJyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0dXBsZScsXG4gICAgICAgICAgICB2YWw6IFtcbiAgICAgICAgICAgICAgeyBrZXk6ICdoYXNoYnl0ZXMnLCB0eXBlOiAnYnVmZmVyJywgdmFsOiBCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykgfSxcbiAgICAgICAgICAgICAgeyBrZXk6ICd2ZXJzaW9uJywgdHlwZTogJ2J1ZmZlcicsIHZhbDogbmV3IEJpZ051bSgxKS50b0J1ZmZlcigpIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzUyODAwJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyJyB9LFxuICAgICAgICAgIC8vIE5ha2Ftb3RvIHVwZ3JhZGUgbmV3IDQgcGFyYW1ldGVyc1xuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5zdGFja3MuY28vbmFrYW1vdG8tdXBncmFkZS9zaWduaW5nLWFuZC1zdGFja2luZy9zdGFja2luZy1mbG93I3NvbG8tc3RhY2tlci1mbG93XG4gICAgICAgICAgeyB0eXBlOiAnb3B0aW9uYWwnLCB2YWw6IHsgdHlwZTogJ2J1ZmZlcicsIHZhbDogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0gfSxcbiAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICczNDAyODIzNjY5MjA5Mzg0NjM0NjMzNzQ2MDc0MzE3NjgyMTE0NTUnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzEyMzQ1NicgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuVFhfU0VOREVSLnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TSUdORURfU0VMRl9TVEFDS19DT05UUkFDVF9DQUxMKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHNpZ25lZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhbW91bnQgPSAxMjM7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdvcHRpb25hbCcsIHZhbDogeyB0eXBlOiAnaW50MTI4JywgdmFsOiBhbW91bnQgfSB9XSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuVFhfU0VOREVSLnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3MsIFtzdHJpbmdpZnlDdihzb21lQ1YoaW50Q1YoYW1vdW50KSkpXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0lHTkVEX0NPTlRSQUNUX0NBTEwpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBzaWduZWQgc2VyaWFsaXplZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlNJR05FRF9DT05UUkFDVF9DQUxMKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX0ZVTkNUSU9OX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLCBbc3RyaW5naWZ5Q3Yoc29tZUNWKGludENWKDEyMykpKV0pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9DT05UUkFDVF9DQUxMKTtcbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBzaWduZWQgc2VyaWFsaXplZCBzZWxmIHN0YWNraW5nIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU0lHTkVEX1NFTEZfU1RBQ0tfQ09OVFJBQ1RfQ0FMTCk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9GVU5DVElPTl9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICAvLyBOb3cgc3RhY2tzLXN0eCBzZWxmLXN0YWNraW5nIHN1cHBvcnRzIDggcGFyYW1ldGVyc1xuICAgICAgICAvLyBodHRwczovL2RvY3Muc3RhY2tzLmNvL25ha2Ftb3RvLXVwZ3JhZGUvc2lnbmluZy1hbmQtc3RhY2tpbmcvc3RhY2tpbmctZmxvdyNzb2xvLXN0YWNrZXItZmxvd1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGgsIDgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9TRUxGX1NUQUNLX0NPTlRSQUNUX0NBTEwpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbeyB0eXBlOiAnb3B0aW9uYWwnLCB2YWw6IHsgdHlwZTogJ2ludDEyOCcsIHZhbDogJzEyMycgfSB9XSk7XG5cbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYxIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjIgfSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleShbdGVzdERhdGEucHViMSwgdGVzdERhdGEucHViMiwgdGVzdERhdGEucHViM10pO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuTVVMVElfU0lHX0NPTlRSQUNUX0NBTEwpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdQYXJzZUNWIHRlc3QnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdPcHRpb25hbCB3aXRoIG91dCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSAnNDAwMDAwMDAwJztcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6IGFtb3VudCB9LFxuICAgICAgICAgICAgeyB0eXBlOiAncHJpbmNpcGFsJywgdmFsOiB0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnb3B0aW9uYWwnIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvcHRpb25hbCcsXG4gICAgICAgICAgICAgIHZhbDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0dXBsZScsXG4gICAgICAgICAgICAgICAgdmFsOiBbXG4gICAgICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICAgICAgeyBrZXk6ICd2ZXJzaW9uJywgdHlwZTogJ2J1ZmZlcicsIHZhbDogbmV3IEJpZ051bSgxKS50b0J1ZmZlcigpIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9mdW5jdGlvbkFyZ3MsIFtcbiAgICAgICAgICAgIHVpbnRDVihhbW91bnQpLFxuICAgICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyksXG4gICAgICAgICAgICBub25lQ1YoKSxcbiAgICAgICAgICAgIHNvbWVDVihcbiAgICAgICAgICAgICAgdHVwbGVDVih7XG4gICAgICAgICAgICAgICAgaGFzaGJ5dGVzOiBidWZmZXJDVihCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykpLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IGJ1ZmZlckNWKG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndXNlIENsYXJpdHlWYWx1ZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSAnNDAwMDAwMDAwJztcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICAgIHVpbnRDVihhbW91bnQpLFxuICAgICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyksXG4gICAgICAgICAgICBub25lQ1YoKSxcbiAgICAgICAgICAgIHNvbWVDVihcbiAgICAgICAgICAgICAgdHVwbGVDVih7XG4gICAgICAgICAgICAgICAgaGFzaGJ5dGVzOiBidWZmZXJDVihCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykpLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IGJ1ZmZlckNWKG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZnVuY3Rpb25BcmdzLCBbXG4gICAgICAgICAgICB1aW50Q1YoYW1vdW50KSxcbiAgICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuQUNDT1VOVF8yLmFkZHJlc3MpLFxuICAgICAgICAgICAgbm9uZUNWKCksXG4gICAgICAgICAgICBzb21lQ1YoXG4gICAgICAgICAgICAgIHR1cGxlQ1Yoe1xuICAgICAgICAgICAgICAgIGhhc2hieXRlczogYnVmZmVyQ1YoQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpKSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBidWZmZXJDVihuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0J1ZmZlciBhcyBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6ICdzb21lLWhhc2gnIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6ICcxJyB9LFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZnVuY3Rpb25BcmdzLCBbXG4gICAgICAgICAgICBidWZmZXJDVihCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykpLFxuICAgICAgICAgICAgYnVmZmVyQ1YobmV3IEJpZ051bSgxKS50b0J1ZmZlcigpKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0J1ZmZlciBhcyBudW1iZXInLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6ICcxJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnYnVmZmVyJywgdmFsOiAxIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9mdW5jdGlvbkFyZ3MsIFtcbiAgICAgICAgICAgIGJ1ZmZlckNWKG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSksXG4gICAgICAgICAgICBidWZmZXJDVihuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW52YWxpZCB0eXBlJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG5cbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3sgdHlwZTogJ3Vua25vdycsIHZhbDogJ2FueS12YWwnIH1dKSxcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoJ1VuZXhwZWN0ZWQgQ2xhcml0eSBBQkkgdHlwZSBwcmltaXRpdmU6IFwidW5rbm93XCInKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICAgICAgaXQoJ2EgY29udHJhY3QgY2FsbCB3aXRoIGFuIGludmFsaWQga2V5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLnNpZ24oeyBrZXk6ICdpbnZhbGlkS2V5JyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnYSBjb250cmFjdCBjYWxsIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksIC9JbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MvKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdhIGNvbnRyYWN0IGNhbGwgd2l0aCBhbiBpbnZhbGlkIGNvbnRyYWN0IG5hbWUgcG94LTInLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC0yJyksXG4gICAgICAgICAgICAvT25seSBwb3gtNCwgcG94LTUsIGFuZCBzZW5kLW1hbnktbWVtbyBjb250cmFjdHMgc3VwcG9ydGVkL1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnYSBjb250cmFjdCBjYWxsIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBuYW1lIHBveC0zJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuY29udHJhY3ROYW1lKCdwb3gtMycpLFxuICAgICAgICAgICAgL09ubHkgcG94LTQsIHBveC01LCBhbmQgc2VuZC1tYW55LW1lbW8gY29udHJhY3RzIHN1cHBvcnRlZC9cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2EgY29udHJhY3QgY2FsbCB3aXRoIGFuIGludmFsaWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBidWlsZGVyLmZ1bmN0aW9uTmFtZSgndGVzdC1mdW5jdGlvbicpLFxuICAgICAgICAgICAgbmV3IFJlZ0V4cCgndGVzdC1mdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVqZWN0cyBhIFBvWC00IGZ1bmN0aW9uIG9uIGEgUG9YLTUgY29udHJhY3QnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0Q29udHJhY3RCdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC01Jyk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdzdGFjay1zdHgnKSxcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoJ3N0YWNrLXN0eCBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVqZWN0cyBhIFBvWC01IGZ1bmN0aW9uIGJlZm9yZSBhIGNvbnRyYWN0IGlzIHNlbGVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldENvbnRyYWN0QnVpbGRlcigpO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBidWlsZGVyLmZ1bmN0aW9uTmFtZSgncmVnaXN0ZXItZm9yLWJvbmQnKSxcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoJ3JlZ2lzdGVyLWZvci1ib25kIGlzIG5vdCBzdXBwb3J0ZWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdyZXZhbGlkYXRlcyB0aGUgZnVuY3Rpb24gd2hlbiBjaGFuZ2luZyB0aGUgY29udHJhY3QnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC01JyksXG4gICAgICAgICAgICBuZXcgUmVnRXhwKCdzdGFjay1zdHggaXMgbm90IHN1cHBvcnRlZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIHByaW5jaXBhbCBhbmQgbmVzdGVkIENsYXJpdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdjb250cmFjdC1wcmluY2lwYWwnLCB2YWw6ICduby1kb3QnIH1dKSxcbiAgICAgICAgICAgIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0L1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdzdGFuZGFyZC1wcmluY2lwYWwnLCB2YWw6ICdpbnZhbGlkLWFkZHJlc3MnIH1dKSxcbiAgICAgICAgICAgIC9tdXN0IGJlIGEgdmFsaWQgc3RhbmRhcmQgcHJpbmNpcGFsL1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZ1bmN0aW9uQXJncyhbeyB0eXBlOiAnbGlzdCcsIHZhbDogJ25vdC1hbi1hcnJheScgfV0pLCAvbGlzdCByZXF1aXJlcyBBcnJheSB2YWwvKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3sgdHlwZTogJ3Jlc3BvbnNlJywgdmFsOiB7IHR5cGU6ICdtYXliZScsIHZhbDogeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzEnIH0gfSB9XSksXG4gICAgICAgICAgICAvcmVzcG9uc2UgcmVxdWlyZXMgXFx7IHR5cGU6IG9rXFx8ZXJyLCB2YWwgXFx9L1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jb250cmFjdEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGtEQUEyQjtBQUMzQiw2Q0FBaUU7QUFDakUsOENBQThFO0FBQzlFLHVEQUE2RztBQUM3Ryw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBQzFDLDRDQUF1QztBQUV2QyxzQ0FBaUQ7QUFDakQsdURBQXlDO0FBRXpDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxZQUFNLENBQUMsS0FBSyxDQUFDO0FBRXJDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtJQUNuQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQzVCLElBQUksS0FBbUIsQ0FBQztJQUV4QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM5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T0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IEJpZ051bSBmcm9tICdibi5qcyc7XG5pbXBvcnQgeyBTVEFDS1NfVEVTVE5FVCwgU1RBQ0tTX01BSU5ORVQgfSBmcm9tICdAc3RhY2tzL25ldHdvcmsnO1xuaW1wb3J0IHsgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBidWZmZXJDViwgbm9uZUNWLCBzb21lQ1YsIHN0YW5kYXJkUHJpbmNpcGFsQ1YsIHR1cGxlQ1YsIHVpbnRDViwgaW50Q1YgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBTdHgsIFRzdHgsIFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5jb25zdCB7IHN0cmluZ2lmeUN2IH0gPSBTdHhMaWIuVXRpbHM7XG5cbmRlc2NyaWJlKCdTdGFja3M6IENvbnRyYWN0IEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5OYW1lID0gJ3N0eCc7XG4gIGNvbnN0IGNvaW5OYW1lVGVzdCA9ICd0c3R4JztcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdzdHgnLCBTdHguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHN0eCcsIFRzdHguY3JlYXRlSW5zdGFuY2UpO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3R4IENvbnRyYWN0IGNhbGwgQnVpbGRlcicsICgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZVRlc3QpKTtcbiAgICBjb25zdCBmYWN0b3J5UHJvZCA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWUpKTtcblxuICAgIGNvbnN0IGluaXRUeEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldENvbnRyYWN0QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoMCk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZSh0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgIHR4QnVpbGRlci5mdW5jdGlvbk5hbWUodGVzdERhdGEuQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRSk7XG4gICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgIH07XG5cbiAgICBkZXNjcmliZSgnY29udHJhY3QgYnVpbGRlciBlbnZpcm9ubWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2VsZWN0IHRoZSByaWdodCBuZXR3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaG91bGQuZXF1YWwoZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAndHN0eCcpO1xuICAgICAgICBzaG91bGQuZXF1YWwoZmFjdG9yeVByb2QuZ2V0VHJhbnNmZXJCdWlsZGVyKCkuY29pbk5hbWUoKSwgJ3N0eCcpO1xuICAgICAgICAvLyB1c2VkIHR5cGUgYW55IHRvIGFjY2VzcyBwcm90ZWN0ZWQgcHJvcGVydGllc1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXI6IGFueSA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlclByb2Q6IGFueSA9IGZhY3RvcnlQcm9kLmdldFRyYW5zZmVyQnVpbGRlcigpO1xuXG4gICAgICAgIHR4QnVpbGRlci5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKFNUQUNLU19URVNUTkVUKTtcbiAgICAgICAgdHhCdWlsZGVyUHJvZC5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKFNUQUNLU19NQUlOTkVUKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCAnLCAoKSA9PiB7XG4gICAgICBpdCgnYW4gdW5zaWduZWQgY29udHJhY3QgY2FsbCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICc0MDAwMDAwMDAnIH0sXG4gICAgICAgICAgeyB0eXBlOiAncHJpbmNpcGFsJywgdmFsOiB0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyB9LFxuICAgICAgICAgIHsgdHlwZTogJ29wdGlvbmFsJywgdmFsOiB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnMjAwJyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ29wdGlvbmFsJyxcbiAgICAgICAgICAgIHZhbDoge1xuICAgICAgICAgICAgICB0eXBlOiAndHVwbGUnLFxuICAgICAgICAgICAgICB2YWw6IFtcbiAgICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICAgIHsga2V5OiAndmVyc2lvbicsIHR5cGU6ICdidWZmZXInLCB2YWw6IG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX0ZVTkNUSU9OX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVU5TSUdORURfQ09OVFJBQ1RfQ0FMTCk7XG5cbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYW4gdW5zaWduZWQgc2VsZiBzdGFja2luZyBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAvKiBDb250cmFjdCBjYWxsIGluIGNsYXJpdHkgUE9YLTRcbiAgICAgICAgKGRlZmluZS1wdWJsaWMgKHN0YWNrLXN0eCAoYW1vdW50LXVzdHggdWludClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBveC1hZGRyICh0dXBsZSAodmVyc2lvbiAoYnVmZiAxKSkgKGhhc2hieXRlcyAoYnVmZiAzMikpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0LWJ1cm4taHQgdWludClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2stcGVyaW9kIHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduZXItc2lnIChvcHRpb25hbCAoYnVmZiA2NSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbmVyLWtleSAoYnVmZiAzMykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtYXgtYW1vdW50IHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhdXRoLWlkIHVpbnQpKVxuICAgICAgICAgKi9cbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICc0MDAwMDAwMDAnIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3R1cGxlJyxcbiAgICAgICAgICAgIHZhbDogW1xuICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICB7IGtleTogJ3ZlcnNpb24nLCB0eXBlOiAnYnVmZmVyJywgdmFsOiBuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnNTI4MDAnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzInIH0sXG4gICAgICAgICAgLy8gTmFrYW1vdG8gdXBncmFkZSBuZXcgNCBwYXJhbWV0ZXJzXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLnN0YWNrcy5jby9uYWthbW90by11cGdyYWRlL3NpZ25pbmctYW5kLXN0YWNraW5nL3N0YWNraW5nLWZsb3cjc29sby1zdGFja2VyLWZsb3dcbiAgICAgICAgICB7IHR5cGU6ICdvcHRpb25hbCcsIHZhbDogeyB0eXBlOiAnYnVmZmVyJywgdmFsOiBCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykgfSB9LFxuICAgICAgICAgIHsgdHlwZTogJ2J1ZmZlcicsIHZhbDogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzM0MDI4MjM2NjkyMDkzODQ2MzQ2MzM3NDYwNzQzMTc2ODIxMTQ1NScgfSxcbiAgICAgICAgICB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnMTIzNDU2JyB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX0ZVTkNUSU9OX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuVU5TSUdORURfU0VMRl9TVEFDS19DT05UUkFDVF9DQUxMKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhbiB1bnNpZ25lZCBQb1gtNSByZWdpc3Rlci1mb3ItYm9uZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRDb250cmFjdEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgICBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcyh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC01Jyk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzIxMCcgfSxcbiAgICAgICAgICB7IHR5cGU6ICdwcmluY2lwYWwnLCB2YWw6ICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwLnNpZ25lci1tYW5hZ2VyJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcxMDA1MDAwJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ29wdGlvbmFsJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ29wdGlvbmFsJyB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgJ3BveC01Jyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICAgICAgdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Egc2lnbmVkIGNvbnRyYWN0IGNhbGwgd2l0aCBhcmdzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzQwMDAwMDAwMCcgfSxcbiAgICAgICAgICB7IHR5cGU6ICdwcmluY2lwYWwnLCB2YWw6IHRlc3REYXRhLkFDQ09VTlRfMi5hZGRyZXNzIH0sXG4gICAgICAgICAgeyB0eXBlOiAnb3B0aW9uYWwnIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ29wdGlvbmFsJyxcbiAgICAgICAgICAgIHZhbDoge1xuICAgICAgICAgICAgICB0eXBlOiAndHVwbGUnLFxuICAgICAgICAgICAgICB2YWw6IFtcbiAgICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICAgIHsga2V5OiAndmVyc2lvbicsIHR5cGU6ICdidWZmZXInLCB2YWw6IG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5UWF9TRU5ERVIucHJ2IH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9GVU5DVElPTl9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9DT05UUkFDVF9XSVRIX0FSR1MpO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuICAgICAgICB0eC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Egc2lnbmVkIHNlbGYgc3RhY2tpbmcgY29udHJhY3QgY2FsbCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgLyogQ29udHJhY3QgY2FsbCBpbiBjbGFyaXR5IFBPWC00XG4gICAgICAgIChkZWZpbmUtcHVibGljIChzdGFjay1zdHggKGFtb3VudC11c3R4IHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChwb3gtYWRkciAodHVwbGUgKHZlcnNpb24gKGJ1ZmYgMSkpIChoYXNoYnl0ZXMgKGJ1ZmYgMzIpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydC1idXJuLWh0IHVpbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NrLXBlcmlvZCB1aW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2lnbmVyLXNpZyAob3B0aW9uYWwgKGJ1ZmYgNjUpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ25lci1rZXkgKGJ1ZmYgMzMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4LWFtb3VudCB1aW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYXV0aC1pZCB1aW50KSlcbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnNDAwMDAwMDAwJyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0dXBsZScsXG4gICAgICAgICAgICB2YWw6IFtcbiAgICAgICAgICAgICAgeyBrZXk6ICdoYXNoYnl0ZXMnLCB0eXBlOiAnYnVmZmVyJywgdmFsOiBCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykgfSxcbiAgICAgICAgICAgICAgeyBrZXk6ICd2ZXJzaW9uJywgdHlwZTogJ2J1ZmZlcicsIHZhbDogbmV3IEJpZ051bSgxKS50b0J1ZmZlcigpIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzUyODAwJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyJyB9LFxuICAgICAgICAgIC8vIE5ha2Ftb3RvIHVwZ3JhZGUgbmV3IDQgcGFyYW1ldGVyc1xuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5zdGFja3MuY28vbmFrYW1vdG8tdXBncmFkZS9zaWduaW5nLWFuZC1zdGFja2luZy9zdGFja2luZy1mbG93I3NvbG8tc3RhY2tlci1mbG93XG4gICAgICAgICAgeyB0eXBlOiAnb3B0aW9uYWwnLCB2YWw6IHsgdHlwZTogJ2J1ZmZlcicsIHZhbDogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0gfSxcbiAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICczNDAyODIzNjY5MjA5Mzg0NjM0NjMzNzQ2MDc0MzE3NjgyMTE0NTUnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzEyMzQ1NicgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuVFhfU0VOREVSLnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TSUdORURfU0VMRl9TVEFDS19DT05UUkFDVF9DQUxMKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHNpZ25lZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhbW91bnQgPSAxMjM7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdvcHRpb25hbCcsIHZhbDogeyB0eXBlOiAnaW50MTI4JywgdmFsOiBhbW91bnQgfSB9XSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuVFhfU0VOREVSLnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3MsIFtzdHJpbmdpZnlDdihzb21lQ1YoaW50Q1YoYW1vdW50KSkpXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0lHTkVEX0NPTlRSQUNUX0NBTEwpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBzaWduZWQgc2VyaWFsaXplZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlNJR05FRF9DT05UUkFDVF9DQUxMKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsIHRlc3REYXRhLkNPTlRSQUNUX0ZVTkNUSU9OX05BTUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLCBbc3RyaW5naWZ5Q3Yoc29tZUNWKGludENWKDEyMykpKV0pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9DT05UUkFDVF9DQUxMKTtcbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBzaWduZWQgc2VyaWFsaXplZCBzZWxmIHN0YWNraW5nIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU0lHTkVEX1NFTEZfU1RBQ0tfQ09OVFJBQ1RfQ0FMTCk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgdGVzdERhdGEuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCB0ZXN0RGF0YS5DT05UUkFDVF9GVU5DVElPTl9OQU1FKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICAvLyBOb3cgc3RhY2tzLXN0eCBzZWxmLXN0YWNraW5nIHN1cHBvcnRzIDggcGFyYW1ldGVyc1xuICAgICAgICAvLyBodHRwczovL2RvY3Muc3RhY2tzLmNvL25ha2Ftb3RvLXVwZ3JhZGUvc2lnbmluZy1hbmQtc3RhY2tpbmcvc3RhY2tpbmctZmxvdyNzb2xvLXN0YWNrZXItZmxvd1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGgsIDgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9TRUxGX1NUQUNLX0NPTlRSQUNUX0NBTEwpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbeyB0eXBlOiAnb3B0aW9uYWwnLCB2YWw6IHsgdHlwZTogJ2ludDEyOCcsIHZhbDogJzEyMycgfSB9XSk7XG5cbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYxIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjIgfSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleShbdGVzdERhdGEucHViMSwgdGVzdERhdGEucHViMiwgdGVzdERhdGEucHViM10pO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuTVVMVElfU0lHX0NPTlRSQUNUX0NBTEwpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdQYXJzZUNWIHRlc3QnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdPcHRpb25hbCB3aXRoIG91dCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSAnNDAwMDAwMDAwJztcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICAgIHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6IGFtb3VudCB9LFxuICAgICAgICAgICAgeyB0eXBlOiAncHJpbmNpcGFsJywgdmFsOiB0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnb3B0aW9uYWwnIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvcHRpb25hbCcsXG4gICAgICAgICAgICAgIHZhbDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0dXBsZScsXG4gICAgICAgICAgICAgICAgdmFsOiBbXG4gICAgICAgICAgICAgICAgICB7IGtleTogJ2hhc2hieXRlcycsIHR5cGU6ICdidWZmZXInLCB2YWw6IEJ1ZmZlci5mcm9tKCdzb21lLWhhc2gnKSB9LFxuICAgICAgICAgICAgICAgICAgeyBrZXk6ICd2ZXJzaW9uJywgdHlwZTogJ2J1ZmZlcicsIHZhbDogbmV3IEJpZ051bSgxKS50b0J1ZmZlcigpIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9mdW5jdGlvbkFyZ3MsIFtcbiAgICAgICAgICAgIHVpbnRDVihhbW91bnQpLFxuICAgICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyksXG4gICAgICAgICAgICBub25lQ1YoKSxcbiAgICAgICAgICAgIHNvbWVDVihcbiAgICAgICAgICAgICAgdHVwbGVDVih7XG4gICAgICAgICAgICAgICAgaGFzaGJ5dGVzOiBidWZmZXJDVihCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykpLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IGJ1ZmZlckNWKG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCBKU09OIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiB0cmVhdGluZyBpdCBhcyBhIENsYXJpdHlWYWx1ZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIC8vIGB7IHR5cGU6ICdsaXN0JyB9YCAvIGB7IHR5cGU6ICd0dXBsZScgfWAgcmV1c2UgYSBDbGFyaXR5VHlwZSBuYW1lIGJ1dCBjYXJyeSBub1xuICAgICAgICAgIC8vIGB2YWxgL2B2YWx1ZWA7IHRoZXkgbXVzdCBzdGlsbCBiZSB2YWxpZGF0ZWQgYnkgYHBhcnNlQ3ZgIChhbmQgcmVqZWN0ZWQpIHJhdGhlciB0aGFuXG4gICAgICAgICAgLy8gcGFzc2VkIHRocm91Z2ggYXMgcmF3IENsYXJpdHlWYWx1ZXMuXG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZ1bmN0aW9uQXJncyhbeyB0eXBlOiAnbGlzdCcgfSBhcyBuZXZlcl0pLCBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcik7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZ1bmN0aW9uQXJncyhbeyB0eXBlOiAndHVwbGUnIH0gYXMgbmV2ZXJdKSwgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndXNlIENsYXJpdHlWYWx1ZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSAnNDAwMDAwMDAwJztcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICAgIHVpbnRDVihhbW91bnQpLFxuICAgICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5BQ0NPVU5UXzIuYWRkcmVzcyksXG4gICAgICAgICAgICBub25lQ1YoKSxcbiAgICAgICAgICAgIHNvbWVDVihcbiAgICAgICAgICAgICAgdHVwbGVDVih7XG4gICAgICAgICAgICAgICAgaGFzaGJ5dGVzOiBidWZmZXJDVihCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykpLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IGJ1ZmZlckNWKG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZnVuY3Rpb25BcmdzLCBbXG4gICAgICAgICAgICB1aW50Q1YoYW1vdW50KSxcbiAgICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuQUNDT1VOVF8yLmFkZHJlc3MpLFxuICAgICAgICAgICAgbm9uZUNWKCksXG4gICAgICAgICAgICBzb21lQ1YoXG4gICAgICAgICAgICAgIHR1cGxlQ1Yoe1xuICAgICAgICAgICAgICAgIGhhc2hieXRlczogYnVmZmVyQ1YoQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpKSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBidWZmZXJDVihuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0J1ZmZlciBhcyBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6ICdzb21lLWhhc2gnIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6ICcxJyB9LFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZnVuY3Rpb25BcmdzLCBbXG4gICAgICAgICAgICBidWZmZXJDVihCdWZmZXIuZnJvbSgnc29tZS1oYXNoJykpLFxuICAgICAgICAgICAgYnVmZmVyQ1YobmV3IEJpZ051bSgxKS50b0J1ZmZlcigpKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0J1ZmZlciBhcyBudW1iZXInLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgICB7IHR5cGU6ICdidWZmZXInLCB2YWw6ICcxJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnYnVmZmVyJywgdmFsOiAxIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9mdW5jdGlvbkFyZ3MsIFtcbiAgICAgICAgICAgIGJ1ZmZlckNWKG5ldyBCaWdOdW0oMSkudG9CdWZmZXIoKSksXG4gICAgICAgICAgICBidWZmZXJDVihuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW52YWxpZCB0eXBlJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG5cbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3sgdHlwZTogJ3Vua25vdycsIHZhbDogJ2FueS12YWwnIH1dKSxcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoJ1VuZXhwZWN0ZWQgQ2xhcml0eSBBQkkgdHlwZSBwcmltaXRpdmU6IFwidW5rbm93XCInKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICAgICAgaXQoJ2EgY29udHJhY3QgY2FsbCB3aXRoIGFuIGludmFsaWQga2V5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLnNpZ24oeyBrZXk6ICdpbnZhbGlkS2V5JyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnYSBjb250cmFjdCBjYWxsIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksIC9JbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MvKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdhIGNvbnRyYWN0IGNhbGwgd2l0aCBhbiBpbnZhbGlkIGNvbnRyYWN0IG5hbWUgcG94LTInLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC0yJyksXG4gICAgICAgICAgICAvT25seSBwb3gtNCwgcG94LTUsIGFuZCBzZW5kLW1hbnktbWVtbyBjb250cmFjdHMgc3VwcG9ydGVkL1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnYSBjb250cmFjdCBjYWxsIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBuYW1lIHBveC0zJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuY29udHJhY3ROYW1lKCdwb3gtMycpLFxuICAgICAgICAgICAgL09ubHkgcG94LTQsIHBveC01LCBhbmQgc2VuZC1tYW55LW1lbW8gY29udHJhY3RzIHN1cHBvcnRlZC9cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2EgY29udHJhY3QgY2FsbCB3aXRoIGFuIGludmFsaWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBidWlsZGVyLmZ1bmN0aW9uTmFtZSgndGVzdC1mdW5jdGlvbicpLFxuICAgICAgICAgICAgbmV3IFJlZ0V4cCgndGVzdC1mdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVqZWN0cyBhIFBvWC00IGZ1bmN0aW9uIG9uIGEgUG9YLTUgY29udHJhY3QnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0Q29udHJhY3RCdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC01Jyk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdzdGFjay1zdHgnKSxcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoJ3N0YWNrLXN0eCBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgncmVqZWN0cyBhIFBvWC01IGZ1bmN0aW9uIGJlZm9yZSBhIGNvbnRyYWN0IGlzIHNlbGVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldENvbnRyYWN0QnVpbGRlcigpO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBidWlsZGVyLmZ1bmN0aW9uTmFtZSgncmVnaXN0ZXItZm9yLWJvbmQnKSxcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoJ3JlZ2lzdGVyLWZvci1ib25kIGlzIG5vdCBzdXBwb3J0ZWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdyZXZhbGlkYXRlcyB0aGUgZnVuY3Rpb24gd2hlbiBjaGFuZ2luZyB0aGUgY29udHJhY3QnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5jb250cmFjdE5hbWUoJ3BveC01JyksXG4gICAgICAgICAgICBuZXcgUmVnRXhwKCdzdGFjay1zdHggaXMgbm90IHN1cHBvcnRlZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIHByaW5jaXBhbCBhbmQgbmVzdGVkIENsYXJpdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdjb250cmFjdC1wcmluY2lwYWwnLCB2YWw6ICduby1kb3QnIH1dKSxcbiAgICAgICAgICAgIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0L1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdzdGFuZGFyZC1wcmluY2lwYWwnLCB2YWw6ICdpbnZhbGlkLWFkZHJlc3MnIH1dKSxcbiAgICAgICAgICAgIC9tdXN0IGJlIGEgdmFsaWQgc3RhbmRhcmQgcHJpbmNpcGFsL1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZ1bmN0aW9uQXJncyhbeyB0eXBlOiAnbGlzdCcsIHZhbDogJ25vdC1hbi1hcnJheScgfV0pLCAvbGlzdCByZXF1aXJlcyBBcnJheSB2YWwvKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3sgdHlwZTogJ3Jlc3BvbnNlJywgdmFsOiB7IHR5cGU6ICdtYXliZScsIHZhbDogeyB0eXBlOiAndWludDEyOCcsIHZhbDogJzEnIH0gfSB9XSksXG4gICAgICAgICAgICAvcmVzcG9uc2UgcmVxdWlyZXMgXFx7IHR5cGU6IG9rXFx8ZXJyLCB2YWwgXFx9L1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdjb250cmFjdCBidWlsZGVyIHZhbGlkYXRpb24gYW5kIGluaXQgZWRnZSBjYXNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3JlamVjdHMgYW4gaW52YWxpZCBjb250cmFjdCBhZGRyZXNzIGFuZCBlbXB0eSBuYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRDb250cmFjdEJ1aWxkZXIoKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKCdpbnZhbGlkJyksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuY29udHJhY3ROYW1lKCcnKSwgL0ludmFsaWQgbmFtZS8pO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mdW5jdGlvbk5hbWUoJycpLCAvSW52YWxpZCBuYW1lLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdwYXJzZXMgYSByZXNwb25zZS1lcnJvciBDbGFyaXR5IHZhbHVlIGRlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0Q29udHJhY3RCdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3sgdHlwZTogJ3Jlc3BvbnNlJywgdmFsOiB7IHR5cGU6ICdlcnInLCB2YWw6IHsgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcxJyB9IH0gfV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgncmVqZWN0cyBwcmluY2lwYWwgZGVzY3JpcHRvcnMgd2l0aG91dCBhIHN0cmluZyB2YWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0Q29udHJhY3RCdWlsZGVyKCk7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFt7IHR5cGU6ICdjb250cmFjdFByaW5jaXBhbCcsIHZhbDogMSB9IGFzIG5ldmVyXSksXG4gICAgICAgICAgICAvY29udHJhY3QgcHJpbmNpcGFsIHJlcXVpcmVzIHN0cmluZyB2YWwvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3sgdHlwZTogJ3N0YW5kYXJkUHJpbmNpcGFsJywgdmFsOiAxIH0gYXMgbmV2ZXJdKSxcbiAgICAgICAgICAgIC9zdGFuZGFyZCBwcmluY2lwYWwgcmVxdWlyZXMgc3RyaW5nIHZhbC9cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgncmVqZWN0cyBhIGNvbnRyYWN0LWNhbGwgaW5pdCB3aXRoIGEgbWlzc2luZyBvciBub24tY29udHJhY3QtY2FsbCBwYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldENvbnRyYWN0QnVpbGRlcigpO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBidWlsZGVyLmluaXRCdWlsZGVyKHsgdG9Kc29uOiAoKSA9PiAoeyBwYXlsb2FkOiB1bmRlZmluZWQgfSkgfSBhcyBuZXZlciksXG4gICAgICAgICAgICAvcGF5bG9hZCBtdXN0IG5vdCBiZSB1bmRlZmluZWQvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gYnVpbGRlci5pbml0QnVpbGRlcih7IHRvSnNvbjogKCkgPT4gKHsgcGF5bG9hZDogeyBwYXlsb2FkVHlwZTogMCB9IH0pIH0gYXMgbmV2ZXIpLFxuICAgICAgICAgICAgL1RyYW5zYWN0aW9uIHNob3VsZCBiZSBjb250cmFjdCBjYWxsL1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdyZWplY3RzIGJ1aWxkaW5nIGEgY29udHJhY3QgY2FsbCB3aXRob3V0IGEgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGJ1aWxkZXIuYnVpbGQoKSwgL3N1cHBseSBhdCBsZWFzdCAxIHB1YmxpYyBrZXkvKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -77,8 +77,8 @@ describe('Stacks: Fungible Token Transfer Builder', () => {
|
|
|
77
77
|
// used type any to access protected properties
|
|
78
78
|
const txBuilder = factory.getFungibleTokenTransferBuilder();
|
|
79
79
|
const txBuilderProd = factoryProd.getFungibleTokenTransferBuilder();
|
|
80
|
-
txBuilder._network.should.deepEqual(
|
|
81
|
-
txBuilderProd._network.should.deepEqual(
|
|
80
|
+
txBuilder._network.should.deepEqual(network_1.STACKS_TESTNET);
|
|
81
|
+
txBuilderProd._network.should.deepEqual(network_1.STACKS_MAINNET);
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
84
|
describe('should build', function () {
|
|
@@ -186,6 +186,89 @@ describe('Stacks: Fungible Token Transfer Builder', () => {
|
|
|
186
186
|
assert_1.default.throws(() => builder.functionName('claim-rewards'), new RegExp('claim-rewards is not supported contract function name'));
|
|
187
187
|
});
|
|
188
188
|
});
|
|
189
|
+
describe('fungible token transfer builder validation and mainnet post-condition', function () {
|
|
190
|
+
it('rejects empty contract name and function name', function () {
|
|
191
|
+
const builder = factory.getFungibleTokenTransferBuilder();
|
|
192
|
+
assert_1.default.throws(() => builder.contractName(''), /Invalid name/);
|
|
193
|
+
assert_1.default.throws(() => builder.functionName(''), /Invalid name/);
|
|
194
|
+
});
|
|
195
|
+
it('rejects fewer than three function args', function () {
|
|
196
|
+
const builder = factory.getFungibleTokenTransferBuilder();
|
|
197
|
+
assert_1.default.throws(() => builder.functionArgs([(0, transactions_1.uintCV)(1), (0, transactions_1.uintCV)(2)]), /Invalid number of arguments/);
|
|
198
|
+
});
|
|
199
|
+
it('builds a mainnet fungible token transfer with a mainnet post-condition address', async function () {
|
|
200
|
+
const builder = factoryProd.getFungibleTokenTransferBuilder();
|
|
201
|
+
builder.fee({ fee: '180' });
|
|
202
|
+
builder.nonce(0);
|
|
203
|
+
builder.contractAddress(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
|
|
204
|
+
builder.contractName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_NAME);
|
|
205
|
+
builder.functionName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.FUNCTION_NAME);
|
|
206
|
+
builder.tokenName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.TOKEN_NAME);
|
|
207
|
+
builder.functionArgs([
|
|
208
|
+
(0, transactions_1.uintCV)('10000'),
|
|
209
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
210
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
211
|
+
]);
|
|
212
|
+
builder.fromPubKey(testData.TX_SENDER.pub);
|
|
213
|
+
builder.numberSignatures(1);
|
|
214
|
+
const tx = await builder.build();
|
|
215
|
+
should_1.default.exist(tx.toBroadcastFormat());
|
|
216
|
+
});
|
|
217
|
+
it('fails the build for a contract that is not a known sip10 token', async function () {
|
|
218
|
+
const builder = factory.getFungibleTokenTransferBuilder();
|
|
219
|
+
builder.fee({ fee: '180' });
|
|
220
|
+
builder.nonce(0);
|
|
221
|
+
builder.contractAddress('ST000000000000000000002AMW42H');
|
|
222
|
+
builder.contractName('not-a-token');
|
|
223
|
+
builder.functionName('transfer');
|
|
224
|
+
builder.functionArgs([
|
|
225
|
+
(0, transactions_1.uintCV)('10000'),
|
|
226
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
227
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
228
|
+
]);
|
|
229
|
+
builder.fromPubKey(testData.TX_SENDER.pub);
|
|
230
|
+
builder.numberSignatures(1);
|
|
231
|
+
// must fail at build time rather than emit an 'undefined' asset name that aborts on-chain
|
|
232
|
+
await assert_1.default.rejects(builder.build(), /unknown fungible token contract/);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('sBTC token transfer', function () {
|
|
236
|
+
const sbtcContracts = [
|
|
237
|
+
['tstx:tsbtc', 'ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT'],
|
|
238
|
+
['stx:sbtc', 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4'],
|
|
239
|
+
];
|
|
240
|
+
for (const [coinName, contractAddress] of sbtcContracts) {
|
|
241
|
+
it(`builds a ${coinName} transfer with a statics-resolved sbtc-token post-condition`, async function () {
|
|
242
|
+
const sbtcFactory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinName));
|
|
243
|
+
const builder = sbtcFactory.getFungibleTokenTransferBuilder();
|
|
244
|
+
builder.fee({ fee: '180' });
|
|
245
|
+
builder.nonce(0);
|
|
246
|
+
builder.contractAddress(contractAddress);
|
|
247
|
+
builder.contractName('sbtc-token');
|
|
248
|
+
builder.functionName('transfer');
|
|
249
|
+
builder.functionArgs([
|
|
250
|
+
(0, transactions_1.uintCV)('10000'),
|
|
251
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
252
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
253
|
+
]);
|
|
254
|
+
builder.fromPubKey(testData.TX_SENDER.pub);
|
|
255
|
+
builder.numberSignatures(1);
|
|
256
|
+
const tx = await builder.build();
|
|
257
|
+
// no explicit tokenName was set, so it must be resolved from statics
|
|
258
|
+
const payload = tx.stxTransaction.payload;
|
|
259
|
+
should_1.default.equal(payload.contractName.content, 'sbtc-token');
|
|
260
|
+
const postCondition = tx.stxTransaction.postConditions.values[0];
|
|
261
|
+
should_1.default.equal(postCondition.asset.contractName.content, 'sbtc-token');
|
|
262
|
+
should_1.default.equal(postCondition.asset.assetName.content, 'sbtc-token');
|
|
263
|
+
// rebuild from the serialized tx must be byte-identical (post-conditions preserved).
|
|
264
|
+
// An unsigned single-sig tx carries no pubkey in its auth fields, so it is re-supplied
|
|
265
|
+
// here — same pattern as the PoX-5/contract rebuild tests.
|
|
266
|
+
const rebuilt = sbtcFactory.from(tx.toBroadcastFormat());
|
|
267
|
+
rebuilt.fromPubKey(testData.TX_SENDER.pub);
|
|
268
|
+
should_1.default.equal((await rebuilt.build()).toBroadcastFormat(), tx.toBroadcastFormat());
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
});
|
|
189
272
|
});
|
|
190
273
|
});
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsNENBQXVDO0FBQ3ZDLHVEQUF1RztBQUN2RyxvREFBNEI7QUFDNUIsNkNBQStEO0FBQy9ELDhDQUFrRDtBQUNsRCxvREFBNEI7QUFFNUIsc0NBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxRQUFRLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBRXhCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sYUFB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O2dCQUM1RSxNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDNUYsQ0FBQyxDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO2dCQUNsRixNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFDM0MsSUFBSSxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FDcEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtnQkFDakMsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQzNDLElBQUksTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQ3BFLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBidWZmZXJDVkZyb21TdHJpbmcsIG5vbmVDViwgc29tZUNWLCBzdGFuZGFyZFByaW5jaXBhbENWLCB1aW50Q1YgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBTdGFja3NNYWlubmV0LCBTdGFja3NUZXN0bmV0IH0gZnJvbSAnQHN0YWNrcy9uZXR3b3JrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFNpcDEwVG9rZW4sIFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogRnVuZ2libGUgVG9rZW4gVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4OnNidGMnO1xuICBjb25zdCBjb2luTmFtZVRlc3QgPSAndHN0eDp0c2lwNmRwJztcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0c3R4OnRzaXA2ZHAnLCBTaXAxMFRva2VuLmNyZWF0ZUluc3RhbmNlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpcDEwIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWVUZXN0KSk7XG4gICAgY29uc3QgZmFjdG9yeVByb2QgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG5cbiAgICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgwKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdEFkZHJlc3ModGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICB0eEJ1aWxkZXIuZnVuY3Rpb25OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5GVU5DVElPTl9OQU1FKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbk5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlRPS0VOX05BTUUpO1xuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ2Z1bmdpYmxlIHRva2VuIGJ1aWxkZXIgZW52aXJvbm1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHNlbGVjdCB0aGUgcmlnaHQgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpLmNvaW5OYW1lKCksICd0c3R4OnRzaXA2ZHAnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnlQcm9kLmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAnc3R4OnNidGMnKTtcbiAgICAgICAgLy8gdXNlZCB0eXBlIGFueSB0byBhY2Nlc3MgcHJvdGVjdGVkIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyOiBhbnkgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyUHJvZDogYW55ID0gZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuXG4gICAgICAgIHR4QnVpbGRlci5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKG5ldyBTdGFja3NUZXN0bmV0KCkpO1xuICAgICAgICB0eEJ1aWxkZXJQcm9kLl9uZXR3b3JrLnNob3VsZC5kZWVwRXF1YWwobmV3IFN0YWNrc01haW5uZXQoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYW4gdW5zaWduZWQgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIHNvbWVDVihidWZmZXJDVkZyb21TdHJpbmcoJzEnKSksXG4gICAgICAgIF0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHN0YWNrc1R4biA9IHR4IGFzIFRyYW5zYWN0aW9uO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHN0YWNrc1R4bi5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9ucy52YWx1ZXMubGVuZ3RoLCAxKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsICd0c2lwNmRwLXRva2VuJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAndHJhbnNmZXInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5VTlNJR05FRF9TSU5HTEVfU0lHX1RYKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2FuIHVuc2lnbmVkIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgIF0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCAndHNpcDZkcC10b2tlbicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgJ3RyYW5zZmVyJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICAgIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5VTlNJR05FRF9TSU5HTEVfU0lHX1RYX1dJVEhPVVRfTUVNT1xuICAgICAgICApO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBtdWx0aXNpZyBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIHNvbWVDVihidWZmZXJDVkZyb21TdHJpbmcoJzEnKSksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MSB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYyIH0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkoW3Rlc3REYXRhLnB1YjEsIHRlc3REYXRhLnB1YjIsIHRlc3REYXRhLnB1YjNdKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TSUdORURfTVVMVElfU0lHX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBtdWx0aXNpZyBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRob3V0IG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIG5vbmVDVigpLFxuICAgICAgICBdKTtcblxuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjEgfSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MiB9KTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KFt0ZXN0RGF0YS5wdWIxLCB0ZXN0RGF0YS5wdWIyLCB0ZXN0RGF0YS5wdWIzXSk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICAgIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TSUdORURfTVVMVElfU0lHX1RYX1dJVEhPVVRfTUVNT1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2hvdWxkIGZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBrZXknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5zaWduKHsga2V5OiAnaW52YWxpZEtleScgfSksIC9VbnN1cHBvcnRlZCBwcml2YXRlIGtleS8pO1xuICAgICAgfSk7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKCdpbnZhbGlkQ29udHJhY3RBZGRyZXNzJyksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ2EgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgYnVpbGRlciB3aXRoIGFuIGludmFsaWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBidWlsZGVyLmZ1bmN0aW9uTmFtZSgndGVzdC1mdW5jdGlvbicpLFxuICAgICAgICAgIG5ldyBSZWdFeHAoJ3Rlc3QtZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3JlamVjdHMgUG9YLTUgZnVuY3Rpb25zJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjbGFpbS1yZXdhcmRzJyksXG4gICAgICAgICAgbmV3IFJlZ0V4cCgnY2xhaW0tcmV3YXJkcyBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsNENBQXVDO0FBQ3ZDLHVEQUF1RztBQUN2RyxvREFBNEI7QUFDNUIsNkNBQWlFO0FBQ2pFLDhDQUFrRDtBQUNsRCxvREFBNEI7QUFFNUIsc0NBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxRQUFRLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBRXhCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sYUFB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ZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgYnVmZmVyQ1ZGcm9tU3RyaW5nLCBub25lQ1YsIHNvbWVDViwgc3RhbmRhcmRQcmluY2lwYWxDViwgdWludENWIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgU1RBQ0tTX01BSU5ORVQsIFNUQUNLU19URVNUTkVUIH0gZnJvbSAnQHN0YWNrcy9uZXR3b3JrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFNpcDEwVG9rZW4sIFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogRnVuZ2libGUgVG9rZW4gVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4OnNidGMnO1xuICBjb25zdCBjb2luTmFtZVRlc3QgPSAndHN0eDp0c2lwNmRwJztcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0c3R4OnRzaXA2ZHAnLCBTaXAxMFRva2VuLmNyZWF0ZUluc3RhbmNlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpcDEwIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWVUZXN0KSk7XG4gICAgY29uc3QgZmFjdG9yeVByb2QgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG5cbiAgICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgwKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdEFkZHJlc3ModGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICB0eEJ1aWxkZXIuZnVuY3Rpb25OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5GVU5DVElPTl9OQU1FKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbk5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlRPS0VOX05BTUUpO1xuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ2Z1bmdpYmxlIHRva2VuIGJ1aWxkZXIgZW52aXJvbm1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHNlbGVjdCB0aGUgcmlnaHQgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpLmNvaW5OYW1lKCksICd0c3R4OnRzaXA2ZHAnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnlQcm9kLmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAnc3R4OnNidGMnKTtcbiAgICAgICAgLy8gdXNlZCB0eXBlIGFueSB0byBhY2Nlc3MgcHJvdGVjdGVkIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyOiBhbnkgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyUHJvZDogYW55ID0gZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuXG4gICAgICAgIHR4QnVpbGRlci5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKFNUQUNLU19URVNUTkVUKTtcbiAgICAgICAgdHhCdWlsZGVyUHJvZC5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKFNUQUNLU19NQUlOTkVUKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdhbiB1bnNpZ25lZCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZygnMScpKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3Qgc3RhY2tzVHhuID0gdHggYXMgVHJhbnNhY3Rpb247XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoc3RhY2tzVHhuLnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlcy5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgJ3RzaXA2ZHAtdG9rZW4nKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsICd0cmFuc2ZlcicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlVOU0lHTkVEX1NJTkdMRV9TSUdfVFgpO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYW4gdW5zaWduZWQgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aG91dCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsICd0c2lwNmRwLXRva2VuJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAndHJhbnNmZXInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgICAgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlVOU0lHTkVEX1NJTkdMRV9TSUdfVFhfV0lUSE9VVF9NRU1PXG4gICAgICAgICk7XG5cbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpO1xuICAgICAgICB0eC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZygnMScpKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYxIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjIgfSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleShbdGVzdERhdGEucHViMSwgdGVzdERhdGEucHViMiwgdGVzdERhdGEucHViM10pO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNJR05FRF9NVUxUSV9TSUdfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgbm9uZUNWKCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MSB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYyIH0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkoW3Rlc3REYXRhLnB1YjEsIHRlc3REYXRhLnB1YjIsIHRlc3REYXRhLnB1YjNdKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgICAgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNJR05FRF9NVUxUSV9TSUdfVFhfV0lUSE9VVF9NRU1PXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGtleScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLnNpZ24oeyBrZXk6ICdpbnZhbGlkS2V5JyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5jb250cmFjdEFkZHJlc3MoJ2ludmFsaWRDb250cmFjdEFkZHJlc3MnKSwgL0ludmFsaWQgYWRkcmVzcy8pO1xuICAgICAgfSk7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0ZXN0LWZ1bmN0aW9uJyksXG4gICAgICAgICAgbmV3IFJlZ0V4cCgndGVzdC1mdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpdCgncmVqZWN0cyBQb1gtNSBmdW5jdGlvbnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYnVpbGRlci5mdW5jdGlvbk5hbWUoJ2NsYWltLXJld2FyZHMnKSxcbiAgICAgICAgICBuZXcgUmVnRXhwKCdjbGFpbS1yZXdhcmRzIGlzIG5vdCBzdXBwb3J0ZWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHZhbGlkYXRpb24gYW5kIG1haW5uZXQgcG9zdC1jb25kaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgncmVqZWN0cyBlbXB0eSBjb250cmFjdCBuYW1lIGFuZCBmdW5jdGlvbiBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5jb250cmFjdE5hbWUoJycpLCAvSW52YWxpZCBuYW1lLyk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mdW5jdGlvbk5hbWUoJycpLCAvSW52YWxpZCBuYW1lLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JlamVjdHMgZmV3ZXIgdGhhbiB0aHJlZSBmdW5jdGlvbiBhcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3VpbnRDVigxKSwgdWludENWKDIpXSksIC9JbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGRzIGEgbWFpbm5ldCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB3aXRoIGEgbWFpbm5ldCBwb3N0LWNvbmRpdGlvbiBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICAgIGJ1aWxkZXIubm9uY2UoMCk7XG4gICAgICAgIGJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX05BTUUpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uTmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuRlVOQ1RJT05fTkFNRSk7XG4gICAgICAgIGJ1aWxkZXIudG9rZW5OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5UT0tFTl9OQU1FKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgIF0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZmFpbHMgdGhlIGJ1aWxkIGZvciBhIGNvbnRyYWN0IHRoYXQgaXMgbm90IGEga25vd24gc2lwMTAgdG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgICBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcygnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgnKTtcbiAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUoJ25vdC1hLXRva2VuJyk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICAvLyBtdXN0IGZhaWwgYXQgYnVpbGQgdGltZSByYXRoZXIgdGhhbiBlbWl0IGFuICd1bmRlZmluZWQnIGFzc2V0IG5hbWUgdGhhdCBhYm9ydHMgb24tY2hhaW5cbiAgICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYnVpbGRlci5idWlsZCgpLCAvdW5rbm93biBmdW5naWJsZSB0b2tlbiBjb250cmFjdC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc0JUQyB0b2tlbiB0cmFuc2ZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNidGNDb250cmFjdHMgPSBbXG4gICAgICAgIFsndHN0eDp0c2J0YycsICdTVDFGN1FBMk1ERjE3UzgwN0VQQTM2VFNTOEFNRUZZNEtBOVRWR1dYVCddLFxuICAgICAgICBbJ3N0eDpzYnRjJywgJ1NNM1ZEWEszV1paU0E4NFhYRktBRkFGMTVOTlpYMzJDVFNHODJKRlE0J10sXG4gICAgICBdIGFzIGNvbnN0O1xuXG4gICAgICBmb3IgKGNvbnN0IFtjb2luTmFtZSwgY29udHJhY3RBZGRyZXNzXSBvZiBzYnRjQ29udHJhY3RzKSB7XG4gICAgICAgIGl0KGBidWlsZHMgYSAke2NvaW5OYW1lfSB0cmFuc2ZlciB3aXRoIGEgc3RhdGljcy1yZXNvbHZlZCBzYnRjLXRva2VuIHBvc3QtY29uZGl0aW9uYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNidGNGYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBzYnRjRmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgICAgIGJ1aWxkZXIubm9uY2UoMCk7XG4gICAgICAgICAgYnVpbGRlci5jb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgICAgICBidWlsZGVyLmNvbnRyYWN0TmFtZSgnc2J0Yy10b2tlbicpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG5cbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICAgIC8vIG5vIGV4cGxpY2l0IHRva2VuTmFtZSB3YXMgc2V0LCBzbyBpdCBtdXN0IGJlIHJlc29sdmVkIGZyb20gc3RhdGljc1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgeyBjb250cmFjdE5hbWU6IHsgY29udGVudDogc3RyaW5nIH0gfTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5jb250cmFjdE5hbWUuY29udGVudCwgJ3NidGMtdG9rZW4nKTtcblxuICAgICAgICAgIGNvbnN0IHBvc3RDb25kaXRpb24gPSAodHggYXMgVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlc1swXSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIGFzc2V0OiB7IGNvbnRyYWN0TmFtZTogeyBjb250ZW50OiBzdHJpbmcgfTsgYXNzZXROYW1lOiB7IGNvbnRlbnQ6IHN0cmluZyB9IH07XG4gICAgICAgICAgfTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwocG9zdENvbmRpdGlvbi5hc3NldC5jb250cmFjdE5hbWUuY29udGVudCwgJ3NidGMtdG9rZW4nKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwocG9zdENvbmRpdGlvbi5hc3NldC5hc3NldE5hbWUuY29udGVudCwgJ3NidGMtdG9rZW4nKTtcblxuICAgICAgICAgIC8vIHJlYnVpbGQgZnJvbSB0aGUgc2VyaWFsaXplZCB0eCBtdXN0IGJlIGJ5dGUtaWRlbnRpY2FsIChwb3N0LWNvbmRpdGlvbnMgcHJlc2VydmVkKS5cbiAgICAgICAgICAvLyBBbiB1bnNpZ25lZCBzaW5nbGUtc2lnIHR4IGNhcnJpZXMgbm8gcHVia2V5IGluIGl0cyBhdXRoIGZpZWxkcywgc28gaXQgaXMgcmUtc3VwcGxpZWRcbiAgICAgICAgICAvLyBoZXJlIOKAlCBzYW1lIHBhdHRlcm4gYXMgdGhlIFBvWC01L2NvbnRyYWN0IHJlYnVpbGQgdGVzdHMuXG4gICAgICAgICAgY29uc3QgcmVidWlsdCA9IHNidGNGYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICAgICAgcmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCgoYXdhaXQgcmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|