@bitgo/sdk-coin-stx 4.3.0 → 4.4.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 +16 -0
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
- package/dist/src/lib/abstractContractBuilder.js +30 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +7 -1
- 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/stx.js +23 -1
- package/dist/test/unit/transactionBuilder/pox5Builder.js +47 -1
- package/dist/test/unit/util.js +15 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -42,6 +42,7 @@ const statics_1 = require("@bitgo/statics");
|
|
|
42
42
|
const should_1 = __importDefault(require("should"));
|
|
43
43
|
const src_1 = require("../../../src");
|
|
44
44
|
const testData = __importStar(require("../resources"));
|
|
45
|
+
const registerForBondRealArgs_1 = require("../registerForBondRealArgs");
|
|
45
46
|
describe('Stacks: PoX-5 Builder', function () {
|
|
46
47
|
const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get('tstx'));
|
|
47
48
|
const signerManager = 'STDE7Y8HV3RX8VBM2TZVWJTS7ZA1XB0SSC3NEVH0.signer-manager';
|
|
@@ -99,11 +100,55 @@ describe('Stacks: PoX-5 Builder', function () {
|
|
|
99
100
|
should_1.default.equal(payload.functionArgs[1].type, transactions_1.ClarityType.PrincipalContract);
|
|
100
101
|
should_1.default.equal(payload.functionArgs[3].type, transactions_1.ClarityType.ResponseOk);
|
|
101
102
|
should_1.default.equal(payload.functionArgs[4].type, transactions_1.ClarityType.OptionalSome);
|
|
103
|
+
// SI-1922: the register args must be JSON-serialisable (no BigInt leaks) — this object is sent
|
|
104
|
+
// to the policy service, where fast-safe-stringify otherwise replaces the whole body.
|
|
105
|
+
should_1.default.doesNotThrow(() => JSON.stringify(tx.toJson()));
|
|
106
|
+
should_1.default.equal(typeof payload.functionArgs[3].value.data.outputs.list[0].data.amount.value, 'string');
|
|
102
107
|
const rebuiltBuilder = factory.from(tx.toBroadcastFormat());
|
|
103
108
|
rebuiltBuilder.fromPubKey(testData.TX_SENDER.pub);
|
|
104
109
|
const rebuilt = await rebuiltBuilder.build();
|
|
105
110
|
should_1.default.equal(rebuilt.toBroadcastFormat(), tx.toBroadcastFormat());
|
|
106
111
|
});
|
|
112
|
+
it('pins the real staging register-for-bond args and keeps them JSON-serialisable (SI-1922)', async () => {
|
|
113
|
+
const functionArgs = registerForBondRealArgs_1.pox5RegisterForBondArgsHex.map((hex) => (0, transactions_1.deserializeCV)(Buffer.from(hex.replace(/^0x/, ''), 'hex')));
|
|
114
|
+
const builder = configure(factory.getPox5Builder());
|
|
115
|
+
builder.functionName('register-for-bond');
|
|
116
|
+
builder.functionArgs(functionArgs);
|
|
117
|
+
const tx = await builder.build();
|
|
118
|
+
const payload = tx.toJson().payload;
|
|
119
|
+
should_1.default.equal(payload.functionArgs.length, 5);
|
|
120
|
+
should_1.default.equal(payload.functionArgs[0].type, transactions_1.ClarityType.UInt);
|
|
121
|
+
should_1.default.equal(payload.functionArgs[1].type, transactions_1.ClarityType.PrincipalContract);
|
|
122
|
+
should_1.default.equal(payload.functionArgs[3].type, transactions_1.ClarityType.ResponseOk);
|
|
123
|
+
should_1.default.equal(payload.functionArgs[4].type, transactions_1.ClarityType.OptionalSome);
|
|
124
|
+
// the btc-lockup (arg 4) nested uints must be stringified — no BigInt leaks into the payload
|
|
125
|
+
should_1.default.doesNotThrow(() => JSON.stringify(tx.toJson()));
|
|
126
|
+
should_1.default.equal(typeof payload.functionArgs[3].value.data.outputs.list[0].data.amount.value, 'string');
|
|
127
|
+
should_1.default.equal(typeof payload.functionArgs[3].value.data.outputs.list[0].data['unlock-burn-height'].value, 'string');
|
|
128
|
+
// the fee re-build (factory.from → initBuilder) must stay byte-identical
|
|
129
|
+
const rebuilt = factory.from(tx.toBroadcastFormat());
|
|
130
|
+
rebuilt.fromPubKey(testData.TX_SENDER.pub);
|
|
131
|
+
should_1.default.equal((await rebuilt.build()).toBroadcastFormat(), tx.toBroadcastFormat());
|
|
132
|
+
});
|
|
133
|
+
it('carries post-condition mode/conditions and preserves them across the fee re-build (SI-1936)', async () => {
|
|
134
|
+
const functionArgs = registerForBondRealArgs_1.pox5RegisterForBondArgsHex.map((hex) => (0, transactions_1.deserializeCV)(Buffer.from(hex.replace(/^0x/, ''), 'hex')));
|
|
135
|
+
const postCondition = (0, transactions_1.makeStandardSTXPostCondition)(testData.TX_SENDER.address, transactions_1.FungibleConditionCode.LessEqual, 100000000);
|
|
136
|
+
const builder = configure(factory.getPox5Builder());
|
|
137
|
+
builder.functionName('register-for-bond');
|
|
138
|
+
builder.functionArgs(functionArgs);
|
|
139
|
+
builder.postConditionMode(transactions_1.PostConditionMode.Deny);
|
|
140
|
+
builder.postConditions([postCondition]);
|
|
141
|
+
const tx = (await builder.build());
|
|
142
|
+
should_1.default.equal(tx.stxTransaction.postConditionMode, transactions_1.PostConditionMode.Deny);
|
|
143
|
+
should_1.default.equal(tx.stxTransaction.postConditions.values.length, 1);
|
|
144
|
+
// `buildTransactionWithFee` re-builds via `factory.from(hex)`; the post-conditions must survive
|
|
145
|
+
// (initBuilder restores them from the deserialized tx).
|
|
146
|
+
const rebuilt = factory.from(tx.toBroadcastFormat());
|
|
147
|
+
rebuilt.fromPubKey(testData.TX_SENDER.pub);
|
|
148
|
+
const rebuiltTx = (await rebuilt.build());
|
|
149
|
+
should_1.default.equal(rebuiltTx.stxTransaction.postConditionMode, transactions_1.PostConditionMode.Deny);
|
|
150
|
+
should_1.default.equal(rebuiltTx.stxTransaction.postConditions.values.length, 1);
|
|
151
|
+
});
|
|
107
152
|
it('validates the PoX-5 contract address during factory routing', async () => {
|
|
108
153
|
const builder = configure(factory.getPox5Builder());
|
|
109
154
|
builder.registerForBond({
|
|
@@ -132,6 +177,7 @@ describe('Stacks: PoX-5 Builder', function () {
|
|
|
132
177
|
const payload = tx.toJson().payload;
|
|
133
178
|
should_1.default.equal(payload.functionArgs[3].type, transactions_1.ClarityType.ResponseErr);
|
|
134
179
|
should_1.default.equal((0, transactions_1.cvToValue)(payload.functionArgs[3].value).toString(), '10000');
|
|
180
|
+
should_1.default.doesNotThrow(() => JSON.stringify(tx.toJson()));
|
|
135
181
|
});
|
|
136
182
|
it('builds validator update, early exit, and reward calls', async () => {
|
|
137
183
|
const update = configure(factory.getPox5Builder()).updateBondRegistration({
|
|
@@ -415,4 +461,4 @@ describe('Stacks: PoX-5 Builder', function () {
|
|
|
415
461
|
});
|
|
416
462
|
});
|
|
417
463
|
});
|
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQUE4RztBQUM5Ryw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBRzVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFFekMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyx5REFBeUQsQ0FBQztJQUNoRixNQUFNLGdCQUFnQixHQUFHLDZEQUE2RCxDQUFDO0lBRXZGLFNBQVMsU0FBUyxDQUFDLE9BQTJCO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBQ3hCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLEVBQUUsRUFBRSxJQUFJO1lBQ1IsV0FBVyxFQUFFLENBQUM7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZ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QztZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxHQUFHLEVBQUU7WUFDcEYsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzFELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUNILE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ1osYUFBYSxFQUFFLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixTQUFTLEVBQUUsQ0FBQztnQkFDWixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBDbGFyaXR5VHlwZSwgQ29udHJhY3RDYWxsUGF5bG9hZCwgY3JlYXRlQWRkcmVzcywgY3ZUb1N0cmluZywgY3ZUb1ZhbHVlIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogUG9YLTUgQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHgnKSk7XG4gIGNvbnN0IHNpZ25lck1hbmFnZXIgPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMC5zaWduZXItbWFuYWdlcic7XG4gIGNvbnN0IG9sZFNpZ25lck1hbmFnZXIgPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMC5vbGQtc2lnbmVyLW1hbmFnZXInO1xuXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZShidWlsZGVyOiBTdHhMaWIuUG94NUJ1aWxkZXIpOiBTdHhMaWIuUG94NUJ1aWxkZXIge1xuICAgIGJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZExvY2t1cE91dHB1dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiA5MjMxLFxuICAgICAgdHg6ICcwMCcsXG4gICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLFxuICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICB0eENvdW50OiAxLFxuICAgICAgdHhJbmRleDogMCxcbiAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICB1bmxvY2tCdXJuSGVpZ2h0OiA5NDkwLFxuICAgIH07XG4gIH1cblxuICBpdCgnYnVpbGRzIGFuZCBwYXJzZXMgcmVnaXN0ZXItZm9yLWJvbmQgd2l0aCBhbiBMMSBsb2NrdXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgIGxvY2t1cDoge1xuICAgICAgICBraW5kOiAnYnRjJyxcbiAgICAgICAgdW5sb2NrQnl0ZXM6ICcwMCcsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWlnaHQ6IDkyMzEsXG4gICAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICAgIG91dHB1dEluZGV4OiAwLFxuICAgICAgICAgICAgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksXG4gICAgICAgICAgICBsZWFmSGFzaGVzOiBbJzAwJy5yZXBlYXQoMzIpXSxcbiAgICAgICAgICAgIHR4Q291bnQ6IDEsXG4gICAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgICAgYW1vdW50OiAxMDAwMCxcbiAgICAgICAgICAgIHVubG9ja0J1cm5IZWlnaHQ6IDk0OTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbk5hbWUsICdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGgsIDUpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXS50eXBlLCBDbGFyaXR5VHlwZS5VSW50KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLCBDbGFyaXR5VHlwZS5SZXNwb25zZU9rKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbNF0udHlwZSwgQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lKTtcblxuICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHRCdWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgY29uc3QgcmVidWlsdCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHQudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZXMgdGhlIFBvWC01IGNvbnRyYWN0IGFkZHJlc3MgZHVyaW5nIGZhY3Rvcnkgcm91dGluZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdidGMnLCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH0sXG4gICAgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9ICh0eCBhcyBTdHhMaWIuVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHgnKSwgcGF5bG9hZCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eCcpLCB7XG4gICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogY3JlYXRlQWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksXG4gICAgICB9KSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyBzQlRDIHJlZ2lzdHJhdGlvbiB1c2luZyByZXNwb25zZSBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdzYnRjJywgc2J0Y1NhdHM6IDEwMDAwIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICBzaG91bGQuZXF1YWwoY3ZUb1ZhbHVlKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnZhbHVlKS50b1N0cmluZygpLCAnMTAwMDAnKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyB2YWxpZGF0b3IgdXBkYXRlLCBlYXJseSBleGl0LCBhbmQgcmV3YXJkIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnVwZGF0ZUJvbmRSZWdpc3RyYXRpb24oe1xuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICAoKGF3YWl0IHVwZGF0ZS5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIHsgZnVuY3Rpb25OYW1lOiBzdHJpbmcgfSkuZnVuY3Rpb25OYW1lLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbidcbiAgICApO1xuXG4gICAgY29uc3QgZWFybHlFeGl0ID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuYW5ub3VuY2VMMUVhcmx5RXhpdCh7XG4gICAgICBzdGFrZXI6IHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzLFxuICAgICAgb2xkU2lnbmVyTWFuYWdlcixcbiAgICB9KTtcbiAgICBjb25zdCBlYXJseUV4aXRQYXlsb2FkID0gKGF3YWl0IGVhcmx5RXhpdC5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbk5hbWUsICdhbm5vdW5jZS1sMS1lYXJseS1leGl0Jyk7XG4gICAgc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLCB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG5cbiAgICBjb25zdCBjbGFpbXMgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5jbGFpbVJld2FyZHMoe1xuICAgICAgYm9uZEluZGljZXM6IFsyMTAsIDIyNl0sXG4gICAgICByZXdhcmRDeWNsZTogMzkxLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYWltUGF5bG9hZCA9IChhd2FpdCBjbGFpbXMuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbk5hbWUsICdjbGFpbS1yZXdhcmRzJyk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gIH0pO1xuXG4gIGl0KCdhY2NlcHRzIGV2ZXJ5IHN1cHBvcnRlZCBQb1gtNSBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXG4gICAgICAnc3Rha2UnLFxuICAgICAgJ3N0YWtlLXVwZGF0ZScsXG4gICAgICAndW5zdGFrZScsXG4gICAgICAncmVnaXN0ZXItZm9yLWJvbmQnLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbicsXG4gICAgICAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcsXG4gICAgICAnY2xhaW0tcmV3YXJkcycsXG4gICAgICAnY2xhaW0tc3Rha2VyLXJld2FyZHMtZm9yLXNpZ25lcicsXG4gICAgICAnY2FsY3VsYXRlLXJld2FyZHMnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBvZiBmdW5jdGlvbk5hbWVzKSB7XG4gICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdwYXJzZXMgcmVzcG9uc2UsIGxpc3QsIGFuZCBleHBsaWNpdCBwcmluY2lwYWwgSlNPTiB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjYWxjdWxhdGUtcmV3YXJkcycpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgdmFsOiB7XG4gICAgICAgICAgdHlwZTogJ29rJyxcbiAgICAgICAgICB2YWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgIHZhbDogW3sgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyMTAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiAnY29udHJhY3QtcHJpbmNpcGFsJywgdmFsOiBvbGRTaWduZXJNYW5hZ2VyIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBhcmdzID0gKChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55KS5mdW5jdGlvbkFyZ3M7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udmFsdWUudHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZhbGlkIFNQViBwcm9vZiBieXRlIGxlbmd0aHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9ja3VwID0ge1xuICAgICAga2luZDogJ2J0YycgYXMgY29uc3QsXG4gICAgICB1bmxvY2tCeXRlczogJzAwJyxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICBoZWFkZXI6ICcwMCcsXG4gICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgdHhDb3VudDogMSxcbiAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cCxcbiAgICAgICAgfSksXG4gICAgICAvaGVhZGVyIG11c3QgYmUgZXhhY3RseSA4MCBieXRlcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgICAgbG9ja3VwOiB7XG4gICAgICAgICAgICAuLi5sb2NrdXAsXG4gICAgICAgICAgICBvdXRwdXRzOiBbeyAuLi5sb2NrdXAub3V0cHV0c1swXSwgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksIGxlYWZIYXNoZXM6IFsnMDAnXSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIC9sZWFmSGFzaCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGxvY2t1cCBmaWVsZHMgYW5kIGNvbnRyYWN0IHByaW5jaXBhbHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdmFsaWRMb2NrdXAgPSB7IGtpbmQ6ICdidGMnIGFzIGNvbnN0LCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobG9ja3VwOiB0eXBlb2YgdmFsaWRMb2NrdXAsIG1hbmFnZXIgPSBzaWduZXJNYW5hZ2VyKSA9PlxuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXI6IG1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwLFxuICAgICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlZ2lzdGVyKHZhbGlkTG9ja3VwLCAnbm8tZG90JyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ2EuYi5jJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUvKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICcwJyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCB0eDogJ3p6JyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoKSA9PiB2YWxpZExvY2t1cE91dHB1dCgpKSB9KSxcbiAgICAgIC9iZXR3ZWVuIDEgYW5kIDEwIG91dHB1dHMvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVnaXN0ZXIoe1xuICAgICAgICAgIC4uLnZhbGlkTG9ja3VwLFxuICAgICAgICAgIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIGxlYWZIYXNoZXM6IEFycmF5KDE1KS5maWxsKCcwMCcucmVwZWF0KDMyKSkgfV0sXG4gICAgICAgIH0pLFxuICAgICAgL21vcmUgdGhhbiAxNCBtZXJrbGUgc2libGluZ3MvXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BvWC01IEJ1aWxkZXIgb24gdHN0eHNpZ25ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdGFja3MgRm91bmRhdGlvbiBzdGFraW5nLXRlc3RuZXQ6IGNoYWluIElEIDEyODAgKDB4MDAwMDA1MDApIHdpdGggdGhlIDB4ODAgdGVzdG5ldCB0eCB2ZXJzaW9uXG4gICAgY29uc3Qgc2lnbmV0RmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHhzaWduZXQnKSk7XG4gICAgY29uc3QgVFNUWFNJR05FVF9UWF9QUkVGSVggPSAnODAwMDAwMDUwMCc7XG4gICAgY29uc3QgUE9YNV9CT09UX0FERFJFU1MgPSAnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgnO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGJ1aWxkZXI6IFN0eExpYi5Qb3g1QnVpbGRlcik6IFN0eExpYi5Qb3g1QnVpbGRlciB7XG4gICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF5bG9hZE9mKHR4OiBCYXNlVHJhbnNhY3Rpb24pOiBTdHhMaWIuU3RhY2tzQ29udHJhY3RQYXlsb2FkIHtcbiAgICAgIHJldHVybiB0eC50b0pzb24oKS5wYXlsb2FkIGFzIFN0eExpYi5TdGFja3NDb250cmFjdFBheWxvYWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdWludEFyZyhjdjogeyB0eXBlOiBudW1iZXI7IHZhbHVlPzogdW5rbm93biB9LCBleHBlY3RlZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICBjdi50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5VSW50KTtcbiAgICAgIFN0cmluZyhjdi52YWx1ZSkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UgdHJhbnNhY3Rpb24gY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRPZih0eCk7XG4gICAgICBwYXlsb2FkLmNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoUE9YNV9CT09UX0FERFJFU1MpO1xuICAgICAgcGF5bG9hZC5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKCdwb3gtNScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnNob3VsZC5lcXVhbChzaWduZXJNYW5hZ2VyKTtcbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0sICcxMDAwMDAwMDAnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1syXSwgJzEnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzY2ODQ5Jyk7XG5cbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UtdXBkYXRlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZVVwZGF0ZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICAgIGN5Y2xlc1RvRXh0ZW5kOiAxLFxuICAgICAgICBhbW91bnRJbmNyZWFzZTogJzUwMDAwJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZS11cGRhdGUnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS5zaG91bGQuZXF1YWwoc2lnbmVyTWFuYWdlcik7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdKS5zaG91bGQuZXF1YWwob2xkU2lnbmVyTWFuYWdlcik7XG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzJdLCAnMScpO1xuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzUwMDAwJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5PcHRpb25hbE5vbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBhbiB1bnN0YWtlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci51bnN0YWtlKG9sZFNpZ25lck1hbmFnZXIpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCd1bnN0YWtlJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkuc2hvdWxkLmVxdWFsKG9sZFNpZ25lck1hbmFnZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyByZWdpc3Rlci1mb3ItYm9uZCB0cmFuc2FjdGlvbnMgKEwxIGxvY2t1cCBhbmQgc0JUQykgY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidGNCdWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cDogeyBraW5kOiAnYnRjJywgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidGNUeCA9IGF3YWl0IGJ0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGJ0Y1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IGJ0Y1BheWxvYWQgPSBwYXlsb2FkT2YoYnRjVHgpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG5cbiAgICAgIGNvbnN0IHNidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBzYnRjQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2J0Y1R4ID0gYXdhaXQgc2J0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNidGNUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBzYnRjUGF5bG9hZCA9IHBheWxvYWRPZihzYnRjVHgpO1xuICAgICAgc2J0Y1BheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWJ1aWxkcyBldmVyeSBzdGFraW5nIGZsb3cgYnl0ZS1pZGVudGljYWxseSBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFrZUJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHN0YWtlQnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3Rha2VUeCA9IGF3YWl0IHN0YWtlQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBzdGFrZVJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20oc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHN0YWtlUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHN0YWtlUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChzdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCB1bnN0YWtlQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgdW5zdGFrZUJ1aWxkZXIudW5zdGFrZShvbGRTaWduZXJNYW5hZ2VyKTtcbiAgICAgIGNvbnN0IHVuc3Rha2VUeCA9IGF3YWl0IHVuc3Rha2VCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHVuc3Rha2VSZWJ1aWx0ID0gc2lnbmV0RmFjdG9yeS5mcm9tKHVuc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHVuc3Rha2VSZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAoYXdhaXQgdW5zdGFrZVJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodW5zdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCByZWdpc3RlckJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHJlZ2lzdGVyQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVnaXN0ZXJUeCA9IGF3YWl0IHJlZ2lzdGVyQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCByZWdpc3RlclJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20ocmVnaXN0ZXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJlZ2lzdGVyUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHJlZ2lzdGVyUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyZWdpc3RlclR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBwYXJzZWQgc3Rha2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBQb1gtNSBidWlsZGVyIG9uIHRzdHhzaWduZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIHVua25vd24gYXMgQ29udHJhY3RDYWxsUGF5bG9hZDtcblxuICAgICAgYnVpbGRlci5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCBwYXlsb2FkKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCB7XG4gICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IGNyZWF0ZUFkZHJlc3ModGVzdERhdGEuQUNDT1VOVF8xLmFkZHJlc3MpLFxuICAgICAgICB9KSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJvdXRlZCA9IHNpZ25ldEZhY3RvcnkuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJvdXRlZC5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cG9zZXMgZmVlLCBub25jZSBhbmQgc2VuZGVyIG9uIHRoZSBidWlsdCBzdGFrZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZmVlLnNob3VsZC5lcXVhbCgnMTgwJyk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgdHhKc29uLmlkLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIHR4SnNvbi5mcm9tLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNpZ25lci1tYW5hZ2VyIHByaW5jaXBhbCB3aXRob3V0IHRoZSBhZGRyZXNzLmNvbnRyYWN0LW5hbWUgc2hhcGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICAgICAgc2lnbmVyTWFuYWdlcjogJ25vLWRvdCcsXG4gICAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2FkZHJlc3MuY29udHJhY3QtbmFtZSBmb3JtYXQvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQVU4QjtBQUM5Qiw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBRzVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFDekMsd0VBQXdFO0FBRXhFLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcseURBQXlELENBQUM7SUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyw2REFBNkQsQ0FBQztJQUV2RixTQUFTLFNBQVMsQ0FBQyxPQUEyQjtRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGlCQUFpQjtRQUN4QixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUk7WUFDWixFQUFFLEVBQUUsSUFBSTtZQUNSLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFB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QVUsRUFBRSxXQUFXO2dCQUN2QixTQUFTLEVBQUUsQ0FBQztnQkFDWixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBDbGFyaXR5VHlwZSxcbiAgQ29udHJhY3RDYWxsUGF5bG9hZCxcbiAgY3JlYXRlQWRkcmVzcyxcbiAgY3ZUb1N0cmluZyxcbiAgY3ZUb1ZhbHVlLFxuICBkZXNlcmlhbGl6ZUNWLFxuICBGdW5naWJsZUNvbmRpdGlvbkNvZGUsXG4gIG1ha2VTdGFuZGFyZFNUWFBvc3RDb25kaXRpb24sXG4gIFBvc3RDb25kaXRpb25Nb2RlLFxufSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXggfSBmcm9tICcuLi9yZWdpc3RlckZvckJvbmRSZWFsQXJncyc7XG5cbmRlc2NyaWJlKCdTdGFja3M6IFBvWC01IEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4JykpO1xuICBjb25zdCBzaWduZXJNYW5hZ2VyID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuc2lnbmVyLW1hbmFnZXInO1xuICBjb25zdCBvbGRTaWduZXJNYW5hZ2VyID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAub2xkLXNpZ25lci1tYW5hZ2VyJztcblxuICBmdW5jdGlvbiBjb25maWd1cmUoYnVpbGRlcjogU3R4TGliLlBveDVCdWlsZGVyKTogU3R4TGliLlBveDVCdWlsZGVyIHtcbiAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgYnVpbGRlci5ub25jZSgwKTtcbiAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRMb2NrdXBPdXRwdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgIHR4OiAnMDAnLFxuICAgICAgb3V0cHV0SW5kZXg6IDAsXG4gICAgICBoZWFkZXI6ICcwMCcucmVwZWF0KDgwKSxcbiAgICAgIGxlYWZIYXNoZXM6IFsnMDAnLnJlcGVhdCgzMildLFxuICAgICAgdHhDb3VudDogMSxcbiAgICAgIHR4SW5kZXg6IDAsXG4gICAgICBhbW91bnQ6IDEwMDAwLFxuICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICB9O1xuICB9XG5cbiAgaXQoJ2J1aWxkcyBhbmQgcGFyc2VzIHJlZ2lzdGVyLWZvci1ib25kIHdpdGggYW4gTDEgbG9ja3VwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHtcbiAgICAgICAga2luZDogJ2J0YycsXG4gICAgICAgIHVubG9ja0J5dGVzOiAnMDAnLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGVpZ2h0OiA5MjMxLFxuICAgICAgICAgICAgdHg6ICcwMCcsXG4gICAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICAgIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLFxuICAgICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgICB0eENvdW50OiAxLFxuICAgICAgICAgICAgdHhJbmRleDogMCxcbiAgICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgICB1bmxvY2tCdXJuSGVpZ2h0OiA5NDkwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgc2lnbmVyQ2FsbGRhdGE6ICcwMCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25OYW1lLCAncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLCA1KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUsIENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSk7XG5cbiAgICAvLyBTSS0xOTIyOiB0aGUgcmVnaXN0ZXIgYXJncyBtdXN0IGJlIEpTT04tc2VyaWFsaXNhYmxlIChubyBCaWdJbnQgbGVha3MpIOKAlCB0aGlzIG9iamVjdCBpcyBzZW50XG4gICAgLy8gdG8gdGhlIHBvbGljeSBzZXJ2aWNlLCB3aGVyZSBmYXN0LXNhZmUtc3RyaW5naWZ5IG90aGVyd2lzZSByZXBsYWNlcyB0aGUgd2hvbGUgYm9keS5cbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKSk7XG4gICAgc2hvdWxkLmVxdWFsKHR5cGVvZiBwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS52YWx1ZS5kYXRhLm91dHB1dHMubGlzdFswXS5kYXRhLmFtb3VudC52YWx1ZSwgJ3N0cmluZycpO1xuXG4gICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgcmVidWlsdEJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBjb25zdCByZWJ1aWx0ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwocmVidWlsdC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3BpbnMgdGhlIHJlYWwgc3RhZ2luZyByZWdpc3Rlci1mb3ItYm9uZCBhcmdzIGFuZCBrZWVwcyB0aGVtIEpTT04tc2VyaWFsaXNhYmxlIChTSS0xOTIyKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmdW5jdGlvbkFyZ3MgPSBwb3g1UmVnaXN0ZXJGb3JCb25kQXJnc0hleC5tYXAoKGhleCkgPT5cbiAgICAgIGRlc2VyaWFsaXplQ1YoQnVmZmVyLmZyb20oaGV4LnJlcGxhY2UoL14weC8sICcnKSwgJ2hleCcpKVxuICAgICk7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4LnRvSnNvbigpLnBheWxvYWQgYXMgYW55O1xuXG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aCwgNSk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLlVJbnQpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXS50eXBlLCBDbGFyaXR5VHlwZS5QcmluY2lwYWxDb250cmFjdCk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlT2spO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLCBDbGFyaXR5VHlwZS5PcHRpb25hbFNvbWUpO1xuXG4gICAgLy8gdGhlIGJ0Yy1sb2NrdXAgKGFyZyA0KSBuZXN0ZWQgdWludHMgbXVzdCBiZSBzdHJpbmdpZmllZCDigJQgbm8gQmlnSW50IGxlYWtzIGludG8gdGhlIHBheWxvYWRcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKSk7XG4gICAgc2hvdWxkLmVxdWFsKHR5cGVvZiBwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS52YWx1ZS5kYXRhLm91dHB1dHMubGlzdFswXS5kYXRhLmFtb3VudC52YWx1ZSwgJ3N0cmluZycpO1xuICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUuZGF0YS5vdXRwdXRzLmxpc3RbMF0uZGF0YVsndW5sb2NrLWJ1cm4taGVpZ2h0J10udmFsdWUsICdzdHJpbmcnKTtcblxuICAgIC8vIHRoZSBmZWUgcmUtYnVpbGQgKGZhY3RvcnkuZnJvbSDihpIgaW5pdEJ1aWxkZXIpIG11c3Qgc3RheSBieXRlLWlkZW50aWNhbFxuICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgcmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgIHNob3VsZC5lcXVhbCgoYXdhaXQgcmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgfSk7XG5cbiAgaXQoJ2NhcnJpZXMgcG9zdC1jb25kaXRpb24gbW9kZS9jb25kaXRpb25zIGFuZCBwcmVzZXJ2ZXMgdGhlbSBhY3Jvc3MgdGhlIGZlZSByZS1idWlsZCAoU0ktMTkzNiknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZnVuY3Rpb25BcmdzID0gcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXgubWFwKChoZXgpID0+XG4gICAgICBkZXNlcmlhbGl6ZUNWKEJ1ZmZlci5mcm9tKGhleC5yZXBsYWNlKC9eMHgvLCAnJyksICdoZXgnKSlcbiAgICApO1xuICAgIGNvbnN0IHBvc3RDb25kaXRpb24gPSBtYWtlU3RhbmRhcmRTVFhQb3N0Q29uZGl0aW9uKFxuICAgICAgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MsXG4gICAgICBGdW5naWJsZUNvbmRpdGlvbkNvZGUuTGVzc0VxdWFsLFxuICAgICAgMTAwMDAwMDAwXG4gICAgKTtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5mdW5jdGlvbk5hbWUoJ3JlZ2lzdGVyLWZvci1ib25kJyk7XG4gICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoZnVuY3Rpb25BcmdzKTtcbiAgICBidWlsZGVyLnBvc3RDb25kaXRpb25Nb2RlKFBvc3RDb25kaXRpb25Nb2RlLkRlbnkpO1xuICAgIGJ1aWxkZXIucG9zdENvbmRpdGlvbnMoW3Bvc3RDb25kaXRpb25dKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFN0eExpYi5UcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9uTW9kZSwgUG9zdENvbmRpdGlvbk1vZGUuRGVueSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlcy5sZW5ndGgsIDEpO1xuXG4gICAgLy8gYGJ1aWxkVHJhbnNhY3Rpb25XaXRoRmVlYCByZS1idWlsZHMgdmlhIGBmYWN0b3J5LmZyb20oaGV4KWA7IHRoZSBwb3N0LWNvbmRpdGlvbnMgbXVzdCBzdXJ2aXZlXG4gICAgLy8gKGluaXRCdWlsZGVyIHJlc3RvcmVzIHRoZW0gZnJvbSB0aGUgZGVzZXJpYWxpemVkIHR4KS5cbiAgICBjb25zdCByZWJ1aWx0ID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBjb25zdCByZWJ1aWx0VHggPSAoYXdhaXQgcmVidWlsdC5idWlsZCgpKSBhcyBTdHhMaWIuVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9uTW9kZSwgUG9zdENvbmRpdGlvbk1vZGUuRGVueSk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9ucy52YWx1ZXMubGVuZ3RoLCAxKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlcyB0aGUgUG9YLTUgY29udHJhY3QgYWRkcmVzcyBkdXJpbmcgZmFjdG9yeSByb3V0aW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHsga2luZDogJ2J0YycsIHVubG9ja0J5dGVzOiAnMDAnLCBvdXRwdXRzOiBbdmFsaWRMb2NrdXBPdXRwdXQoKV0gfSxcbiAgICB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gKHR4IGFzIFN0eExpYi5UcmFuc2FjdGlvbikuc3R4VHJhbnNhY3Rpb24ucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eCcpLCBwYXlsb2FkKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgU3R4TGliLlBveDVCdWlsZGVyLmlzVmFsaWRDb250cmFjdENhbGwoY29pbnMuZ2V0KCd0c3R4JyksIHtcbiAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBjcmVhdGVBZGRyZXNzKHRlc3REYXRhLkFDQ09VTlRfMS5hZGRyZXNzKSxcbiAgICAgIH0pLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9KTtcblxuICBpdCgnYnVpbGRzIHNCVEMgcmVnaXN0cmF0aW9uIHVzaW5nIHJlc3BvbnNlIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VFcnIpO1xuICAgIHNob3VsZC5lcXVhbChjdlRvVmFsdWUocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUpLnRvU3RyaW5nKCksICcxMDAwMCcpO1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyB2YWxpZGF0b3IgdXBkYXRlLCBlYXJseSBleGl0LCBhbmQgcmV3YXJkIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnVwZGF0ZUJvbmRSZWdpc3RyYXRpb24oe1xuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICAoKGF3YWl0IHVwZGF0ZS5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIHsgZnVuY3Rpb25OYW1lOiBzdHJpbmcgfSkuZnVuY3Rpb25OYW1lLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbidcbiAgICApO1xuXG4gICAgY29uc3QgZWFybHlFeGl0ID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuYW5ub3VuY2VMMUVhcmx5RXhpdCh7XG4gICAgICBzdGFrZXI6IHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzLFxuICAgICAgb2xkU2lnbmVyTWFuYWdlcixcbiAgICB9KTtcbiAgICBjb25zdCBlYXJseUV4aXRQYXlsb2FkID0gKGF3YWl0IGVhcmx5RXhpdC5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbk5hbWUsICdhbm5vdW5jZS1sMS1lYXJseS1leGl0Jyk7XG4gICAgc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLCB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG5cbiAgICBjb25zdCBjbGFpbXMgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5jbGFpbVJld2FyZHMoe1xuICAgICAgYm9uZEluZGljZXM6IFsyMTAsIDIyNl0sXG4gICAgICByZXdhcmRDeWNsZTogMzkxLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYWltUGF5bG9hZCA9IChhd2FpdCBjbGFpbXMuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbk5hbWUsICdjbGFpbS1yZXdhcmRzJyk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gIH0pO1xuXG4gIGl0KCdhY2NlcHRzIGV2ZXJ5IHN1cHBvcnRlZCBQb1gtNSBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXG4gICAgICAnc3Rha2UnLFxuICAgICAgJ3N0YWtlLXVwZGF0ZScsXG4gICAgICAndW5zdGFrZScsXG4gICAgICAncmVnaXN0ZXItZm9yLWJvbmQnLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbicsXG4gICAgICAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcsXG4gICAgICAnY2xhaW0tcmV3YXJkcycsXG4gICAgICAnY2xhaW0tc3Rha2VyLXJld2FyZHMtZm9yLXNpZ25lcicsXG4gICAgICAnY2FsY3VsYXRlLXJld2FyZHMnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBvZiBmdW5jdGlvbk5hbWVzKSB7XG4gICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdwYXJzZXMgcmVzcG9uc2UsIGxpc3QsIGFuZCBleHBsaWNpdCBwcmluY2lwYWwgSlNPTiB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjYWxjdWxhdGUtcmV3YXJkcycpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgdmFsOiB7XG4gICAgICAgICAgdHlwZTogJ29rJyxcbiAgICAgICAgICB2YWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgIHZhbDogW3sgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyMTAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiAnY29udHJhY3QtcHJpbmNpcGFsJywgdmFsOiBvbGRTaWduZXJNYW5hZ2VyIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBhcmdzID0gKChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55KS5mdW5jdGlvbkFyZ3M7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udmFsdWUudHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZhbGlkIFNQViBwcm9vZiBieXRlIGxlbmd0aHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9ja3VwID0ge1xuICAgICAga2luZDogJ2J0YycgYXMgY29uc3QsXG4gICAgICB1bmxvY2tCeXRlczogJzAwJyxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICBoZWFkZXI6ICcwMCcsXG4gICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgdHhDb3VudDogMSxcbiAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cCxcbiAgICAgICAgfSksXG4gICAgICAvaGVhZGVyIG11c3QgYmUgZXhhY3RseSA4MCBieXRlcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgICAgbG9ja3VwOiB7XG4gICAgICAgICAgICAuLi5sb2NrdXAsXG4gICAgICAgICAgICBvdXRwdXRzOiBbeyAuLi5sb2NrdXAub3V0cHV0c1swXSwgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksIGxlYWZIYXNoZXM6IFsnMDAnXSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIC9sZWFmSGFzaCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGxvY2t1cCBmaWVsZHMgYW5kIGNvbnRyYWN0IHByaW5jaXBhbHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdmFsaWRMb2NrdXAgPSB7IGtpbmQ6ICdidGMnIGFzIGNvbnN0LCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobG9ja3VwOiB0eXBlb2YgdmFsaWRMb2NrdXAsIG1hbmFnZXIgPSBzaWduZXJNYW5hZ2VyKSA9PlxuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXI6IG1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwLFxuICAgICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlZ2lzdGVyKHZhbGlkTG9ja3VwLCAnbm8tZG90JyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ2EuYi5jJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUvKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICcwJyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCB0eDogJ3p6JyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoKSA9PiB2YWxpZExvY2t1cE91dHB1dCgpKSB9KSxcbiAgICAgIC9iZXR3ZWVuIDEgYW5kIDEwIG91dHB1dHMvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVnaXN0ZXIoe1xuICAgICAgICAgIC4uLnZhbGlkTG9ja3VwLFxuICAgICAgICAgIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIGxlYWZIYXNoZXM6IEFycmF5KDE1KS5maWxsKCcwMCcucmVwZWF0KDMyKSkgfV0sXG4gICAgICAgIH0pLFxuICAgICAgL21vcmUgdGhhbiAxNCBtZXJrbGUgc2libGluZ3MvXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BvWC01IEJ1aWxkZXIgb24gdHN0eHNpZ25ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdGFja3MgRm91bmRhdGlvbiBzdGFraW5nLXRlc3RuZXQ6IGNoYWluIElEIDEyODAgKDB4MDAwMDA1MDApIHdpdGggdGhlIDB4ODAgdGVzdG5ldCB0eCB2ZXJzaW9uXG4gICAgY29uc3Qgc2lnbmV0RmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHhzaWduZXQnKSk7XG4gICAgY29uc3QgVFNUWFNJR05FVF9UWF9QUkVGSVggPSAnODAwMDAwMDUwMCc7XG4gICAgY29uc3QgUE9YNV9CT09UX0FERFJFU1MgPSAnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgnO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGJ1aWxkZXI6IFN0eExpYi5Qb3g1QnVpbGRlcik6IFN0eExpYi5Qb3g1QnVpbGRlciB7XG4gICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF5bG9hZE9mKHR4OiBCYXNlVHJhbnNhY3Rpb24pOiBTdHhMaWIuU3RhY2tzQ29udHJhY3RQYXlsb2FkIHtcbiAgICAgIHJldHVybiB0eC50b0pzb24oKS5wYXlsb2FkIGFzIFN0eExpYi5TdGFja3NDb250cmFjdFBheWxvYWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdWludEFyZyhjdjogeyB0eXBlOiBudW1iZXI7IHZhbHVlPzogdW5rbm93biB9LCBleHBlY3RlZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICBjdi50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5VSW50KTtcbiAgICAgIFN0cmluZyhjdi52YWx1ZSkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UgdHJhbnNhY3Rpb24gY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRPZih0eCk7XG4gICAgICBwYXlsb2FkLmNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoUE9YNV9CT09UX0FERFJFU1MpO1xuICAgICAgcGF5bG9hZC5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKCdwb3gtNScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnNob3VsZC5lcXVhbChzaWduZXJNYW5hZ2VyKTtcbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0sICcxMDAwMDAwMDAnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1syXSwgJzEnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzY2ODQ5Jyk7XG5cbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UtdXBkYXRlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZVVwZGF0ZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICAgIGN5Y2xlc1RvRXh0ZW5kOiAxLFxuICAgICAgICBhbW91bnRJbmNyZWFzZTogJzUwMDAwJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZS11cGRhdGUnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS5zaG91bGQuZXF1YWwoc2lnbmVyTWFuYWdlcik7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdKS5zaG91bGQuZXF1YWwob2xkU2lnbmVyTWFuYWdlcik7XG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzJdLCAnMScpO1xuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzUwMDAwJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5PcHRpb25hbE5vbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBhbiB1bnN0YWtlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci51bnN0YWtlKG9sZFNpZ25lck1hbmFnZXIpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCd1bnN0YWtlJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkuc2hvdWxkLmVxdWFsKG9sZFNpZ25lck1hbmFnZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyByZWdpc3Rlci1mb3ItYm9uZCB0cmFuc2FjdGlvbnMgKEwxIGxvY2t1cCBhbmQgc0JUQykgY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidGNCdWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cDogeyBraW5kOiAnYnRjJywgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidGNUeCA9IGF3YWl0IGJ0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGJ0Y1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IGJ0Y1BheWxvYWQgPSBwYXlsb2FkT2YoYnRjVHgpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG5cbiAgICAgIGNvbnN0IHNidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBzYnRjQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2J0Y1R4ID0gYXdhaXQgc2J0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNidGNUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBzYnRjUGF5bG9hZCA9IHBheWxvYWRPZihzYnRjVHgpO1xuICAgICAgc2J0Y1BheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWJ1aWxkcyBldmVyeSBzdGFraW5nIGZsb3cgYnl0ZS1pZGVudGljYWxseSBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFrZUJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHN0YWtlQnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3Rha2VUeCA9IGF3YWl0IHN0YWtlQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBzdGFrZVJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20oc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHN0YWtlUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHN0YWtlUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChzdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCB1bnN0YWtlQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgdW5zdGFrZUJ1aWxkZXIudW5zdGFrZShvbGRTaWduZXJNYW5hZ2VyKTtcbiAgICAgIGNvbnN0IHVuc3Rha2VUeCA9IGF3YWl0IHVuc3Rha2VCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHVuc3Rha2VSZWJ1aWx0ID0gc2lnbmV0RmFjdG9yeS5mcm9tKHVuc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHVuc3Rha2VSZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAoYXdhaXQgdW5zdGFrZVJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodW5zdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCByZWdpc3RlckJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHJlZ2lzdGVyQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVnaXN0ZXJUeCA9IGF3YWl0IHJlZ2lzdGVyQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCByZWdpc3RlclJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20ocmVnaXN0ZXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJlZ2lzdGVyUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHJlZ2lzdGVyUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyZWdpc3RlclR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBwYXJzZWQgc3Rha2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBQb1gtNSBidWlsZGVyIG9uIHRzdHhzaWduZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIHVua25vd24gYXMgQ29udHJhY3RDYWxsUGF5bG9hZDtcblxuICAgICAgYnVpbGRlci5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCBwYXlsb2FkKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCB7XG4gICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IGNyZWF0ZUFkZHJlc3ModGVzdERhdGEuQUNDT1VOVF8xLmFkZHJlc3MpLFxuICAgICAgICB9KSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJvdXRlZCA9IHNpZ25ldEZhY3RvcnkuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJvdXRlZC5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cG9zZXMgZmVlLCBub25jZSBhbmQgc2VuZGVyIG9uIHRoZSBidWlsdCBzdGFrZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZmVlLnNob3VsZC5lcXVhbCgnMTgwJyk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgdHhKc29uLmlkLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIHR4SnNvbi5mcm9tLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNpZ25lci1tYW5hZ2VyIHByaW5jaXBhbCB3aXRob3V0IHRoZSBhZGRyZXNzLmNvbnRyYWN0LW5hbWUgc2hhcGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICAgICAgc2lnbmVyTWFuYWdlcjogJ25vLWRvdCcsXG4gICAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2FkZHJlc3MuY29udHJhY3QtbmFtZSBmb3JtYXQvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
package/dist/test/unit/util.js
CHANGED
|
@@ -272,6 +272,20 @@ describe('Stx util library', function () {
|
|
|
272
272
|
const input = { type: transactions_1.ClarityType.List, list: [] };
|
|
273
273
|
Utils.stringifyCv(input).should.deepEqual({ type: 11, list: [] });
|
|
274
274
|
});
|
|
275
|
+
it('ResponseOk type with uint value', function () {
|
|
276
|
+
const input = {
|
|
277
|
+
type: transactions_1.ClarityType.ResponseOk,
|
|
278
|
+
value: { type: transactions_1.ClarityType.UInt, value: BigInt('100000') },
|
|
279
|
+
};
|
|
280
|
+
Utils.stringifyCv(input).should.deepEqual({ type: 7, value: { type: 1, value: '100000' } });
|
|
281
|
+
});
|
|
282
|
+
it('ResponseErr type with uint value', function () {
|
|
283
|
+
const input = {
|
|
284
|
+
type: transactions_1.ClarityType.ResponseErr,
|
|
285
|
+
value: { type: transactions_1.ClarityType.UInt, value: BigInt('10000') },
|
|
286
|
+
};
|
|
287
|
+
Utils.stringifyCv(input).should.deepEqual({ type: 8, value: { type: 1, value: '10000' } });
|
|
288
|
+
});
|
|
275
289
|
});
|
|
276
290
|
describe('getAddressVersion', function () {
|
|
277
291
|
it('should succeed to for valid addresses', function () {
|
|
@@ -337,4 +351,4 @@ describe('Stx util library', function () {
|
|
|
337
351
|
});
|
|
338
352
|
});
|
|
339
353
|
});
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qix1REFBMEc7QUFDMUcsa0RBQTJCO0FBQzNCLHNEQUF3QztBQUN4QyxtQ0FBbUM7QUFFbkMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFNLENBQUM7QUFFbEMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO0lBQzNCLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDbEIsRUFBRSxDQUFDLDJCQUEyQixFQUFFO1lBQzlCLE1BQU0sY0FBYyxHQUFHO2dCQUNyQiwwQ0FBMEM7Z0JBQzFDLDJDQUEyQztnQkFDM0MsMkNBQTJDO2dCQUMzQyxvREFBb0Q7Z0JBQ3BELG1EQUFtRDtnQkFDbkQsc0RBQXNEO2FBQ3ZELENBQUM7WUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsTUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsMENBQTBDO2dCQUMxQywyQ0FBMkM7Z0JBQzNDLHNEQUFzRDtnQkFDdEQsa0RBQWtEO2dCQUNsRCwwREFBMEQ7Z0JBQzFELEVBQUU7Z0JBQ0YsS0FBSzthQUNOLENBQUM7WUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FB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LENBQUMsRUFBRSxDQUFDO1lBQ3hFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQVcsRUFBRSxJQUFJLEVBQUUsMEJBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUJBQW1CLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQVcsRUFBRSxJQUFJLEVBQUUsMEJBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQVc7Z0JBQ3BCLElBQUksRUFBRSwwQkFBVyxDQUFDLFlBQVk7Z0JBQzlCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2FBQzNELENBQUM7WUFDRixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FB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QztZQUM3RCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQztZQUNoRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUvRCxNQUFNLFFBQVEsR0FBRywyQ0FBMkMsQ0FBQztZQUM3RCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQztZQUNoRSxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDcEUsSUFBSSxNQUFNLENBQUMsb0JBQW9CLFFBQVEsRUFBRSxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBBZGRyZXNzVmVyc2lvbiwgQ2xhcml0eVR5cGUsIEludENWLCBOb25lQ1YsIFNvbWVDViwgVUludENWLCBMaXN0Q1YgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgQmlnTnVtIGZyb20gJ2JuLmpzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmNvbnN0IHsgS2V5UGFpciwgVXRpbHMgfSA9IFN0eExpYjtcblxuZGVzY3JpYmUoJ1N0eCB1dGlsIGxpYnJhcnknLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JyxcbiAgICAgICAgJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJyxcbiAgICAgICAgJ1NQMlQ3NThLNlQyWVJLRzlRMFRKMTZCNkZQNVFRUkVXWlNFU1JTMFBZJyxcbiAgICAgICAgJ1NUMVdWSk1TNVZTNDFGMFlNSDdEMk0wVkhYUkc0Q1k0M1pKWkJTNjBBP21lbW9JZD00JyxcbiAgICAgICAgJ1NQU1pCWjNXMEpDMk1FQk4wTTlQQU0yUUI1U0g3MlFZRVFBTU42SEQ/bWVtb0lkPTAnLFxuICAgICAgICAnU1AzQlY3MDkySzlaUzlOSjlaWU1QWEU2OVNWNlk2MDcyTTdIRVo0OUU/bWVtb0lkPTI1NScsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQWRkcmVzc2VzID0gW1xuICAgICAgICAnU1AyNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgICAgICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gICAgICAgICdTVDFXVkpNUzVWUzQxRjBZTUg3RDJNMFZIWFJHNENZNDNaSlpCUzYwQT9tZW1vSWQ9TmFOJyxcbiAgICAgICAgJ1NQU1pCWjNXMEpDMk1FQk4wTTlQQU0yUUI1U0g3MlFZRVFBTU42SEQ/bWVtb0lkPScsXG4gICAgICAgICdTUDNCVjcwOTJLOVpTOU5KOVpZTVBYRTY5U1Y2WTYwNzJNN0hFWjQ5RT9tZW1vSWQ9dGVzdGluZycsXG4gICAgICAgICcnLFxuICAgICAgICAnYWJjJyxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgICBVdGlscy5pc1ZhbGlkQWRkcmVzc1dpdGhQYXltZW50SWQoYWRkcmVzcykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGNvbXByZXNzZWQgcHVibGljIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwdWJLZXlzID0gW1xuICAgICAgICAnMDI2M2UxZjJmMzIyZmI3NDIyNGUyMTBmOWQ2MTZmY2UxNGQxMGZhODk1MjBkY2RlM2Q2ZDAyNTE0Y2RiMTY4NDZhJyxcbiAgICAgICAgJzAyZDVkZTllMWI5YzEzZmM3YjY3NDQ2ZWJjZmY0ZmJiOWFhNmIxOTMzZjkwN2U5YWFiZjMyZjQ4ZDZlMGE1MDY0ZCcsXG4gICAgICAgICcwMjk2YzRiODM1M2M0YTkzODE3M2Y4MDcwNmRmNDgwY2Y2Zjg1NTIzYjQyOGQ1OWVlODFkOWVmZmNmNjFlNWVhZTgnLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgYWRkcmVzcyA9IFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKTtcblxuICAgICAgYWRkcmVzcy5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU00xVzlQQlZUWkE5U1JOQlFKMkEwNVIzVDBaVllDOTRQRDBBTjlLREcnKTtcbiAgICAgIGFkZHJlc3MuaGFzaDE2MC5zaG91bGQuZXF1YWwoJzc4OWIyZjdhZmE5MzljNTU3NzkwOTQwMmUwN2EwN2Y3ZTYyNDk2NjgnKTtcblxuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLlRlc3RuZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTjFXOVBCVlRaQTlTUk5CUUoyQTA1UjNUMFpWWUM5NFBEMEE5R0dNWidcbiAgICAgICk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uTWFpbm5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NNMVc5UEJWVFpBOVNSTkJRSjJBMDVSM1QwWlZZQzk0UEQwQU45S0RHJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgbXVsdGlzaWcgYWRkcmVzc2VzIGZyb20gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHViS2V5cyA9IFtcbiAgICAgICAgJzA0OTc0MmI5MDg1NzlmZmQyMjVkNWUxZDk0ODY0NzFmMTlhMTAxZGQwNGI3YTgxZDExZGE4ODJlN2FjN2YzZTA0Mjk4OWMzMTE1MjRhMzMzNWUxNWRlYzkzMzhhMDdiZDIxYjZlNDQ0NGI2Yjc3NDRkMzE0Y2M5MjZhMWYwMzgzZGInLFxuICAgICAgICAnMDQ2NDA5N2NjYmMyMjkwNWVjNmY2NzhjODQ2MzQ2Mjk0MDMzZTExYTIxNmQxMzNhYmY2YWYyNTIyOTQ2OTViMzUzOGQ2NWY2NWIxODhiNmU3MmUxODkwZTc3MzhmOWUyMjE5NDRlNjE4ZGVhMTE3OGVmNzQ5NzE3YjM1NDkyZGU2YScsXG4gICAgICAgICcwNDJjNjA4NDA4MzUyYWI0MTQ3N2FkOWRkMWNhYmNhOWU3MTJkZTJkZmYzYzVjOGJmYTRiNWY3ZjFhMGY3NGEzMjQwMmE4MjZkMmNlNWYzYTZiMDFjMTZhZWViZGQzMDRlMjM1NzkxOTU4YmJmOTdhMDhiNWQ0ZTlkZDRkYjM5OWI3JyxcbiAgICAgIF07XG5cbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU00yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjg2RkNDUTQnKTtcbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzLCBBZGRyZXNzVmVyc2lvbi5UZXN0bmV0TXVsdGlTaWcpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnU04yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjkwUDdZR1MnXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTTJURjhDMDAzSkU1WUE4QjQzQzJaQVkwSzk1UUZWSk5WODZGQ0NRNCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHB1YktleXMgPSBbXG4gICAgICAgICcwNGQ2ZjBmN2Q5N2E3Mjk3OTU5NmExN2ZhMjk0NmVhZWZmMzcwMzI1MGE2MjY0MDI3MWVlYTU5NDc3ZjViMTlmMzlhZDAxY2UyYTUzMDI1ZWJhMzY1YTRmNDBkZDA4NTIzNDE5NGQxZDA2YWVmZWMyYTlkNDQzOWJlMGYzYzJkZjM0JyxcbiAgICAgICAgJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCcsXG4gICAgICAgICcwMzRjODBmOTkxNDEwMDgyODI0YWVlNGNhNDgxNDcwODI5OTdkNDRlODAwZGE5ODc3ZTY5NGY5Y2I2NGIzY2I2NGEnLFxuICAgICAgXTtcblxuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdTTUU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1DS002N0VWJyk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uVGVzdG5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NORThQS1JIU0NCNjk5RkVLNTlGN1Q3Q0JCMjI1S0gxTURQQlZLRjknXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTUU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1DS002N0VWJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGludmFsaWQgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhbXSksIC9JbnZhbGlkIG51bWJlciBvZiBwdWJsaWMga2V5cy8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoWydiYWRrZXknLCAnYmFka2V5MiddKSwgL0ludmFsaWQgcHVibGljIGtleS8pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoW1xuICAgICAgICAgICAgJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCcsXG4gICAgICAgICAgICAnYmFka2V5JyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgL0ludmFsaWQgcHVibGljIGtleS9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3ZhbGlkIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRBbW91bnQoJzEwJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbnZhbGlkIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRBbW91bnQoJy0xMCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwcm9wZXIga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbdGVzdERhdGEuc2VjcmV0S2V5MSwgdGVzdERhdGEuc2VjcmV0S2V5MiwgdGVzdERhdGEuQUNDT1VOVF8xLnBydl07XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoa2V5KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgdmFsaWRhdGUgaW52YWxpZCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgJzY2Yzg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQwOScsXG4gICAgICAgICc2ODg2NDgxMTZiNzIxYmIyZjM5NGUwMDA3ZjlkMzQ4ZWEwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICAgICcweDY2Yzg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2JpdGdvLXN0YWNrcycsXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzNCA4ZWEwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzcnJ4eDkwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlzID0gW3Rlc3REYXRhLnB1YktleTEsIHRlc3REYXRhLnB1YktleTIsIHRlc3REYXRhLnB1YktleTJDb21wcmVzc2VkXTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgICcwNDIxZDZmNDJjOTdkMjNlYzJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlODZlM2NlYTZmNDFhOTRhOWE3YzI0YTFjY2Q4Mzc5MjE3M2Y0NzVmZGI1OTBjYzgyZjk0ZmY2MTVkZjM5MTQyNzY2ZTc1OWNlNjM4NycsXG4gICAgICAgICcwMzIxZDZmNDJjOTlmN2QyM2VjIDJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlNmUzY2VhNmY0MWEnLFxuICAgICAgICAnMGFhNjhjMmQ2ZmRiMzcwNmIzOWYzMmQ2ZjQyMjUyNzVjZTA2MjU2MTkwOGZkN2NhNTQwYTQ0YzkyZWI4NTk0ZWE2ZGI5ZmNmZTBiMzkwYzBlYWQzZjQ1YzM2YWZkNjgyZWFiNjJlYjEyNGE2M2I0NjA5NDVmZTFmN2M3ZjhhMDllMicsXG4gICAgICAgICcnLFxuICAgICAgICAnYml0Z28tc3RhY2tzJyxcbiAgICAgICAgJzA5MjFkNmY0MmM5OWY3ZDIzZWMyYzBkYzIxMjA4YTljNWVkZmNlNGU1YmM3YjYzOTcyZTY4ZTg2ZTNjZWE2ZjQxYScsXG4gICAgICAgICcwMzIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGV6emUzY2VhNmY0MWEnLFxuICAgICAgICAnMHgwMzIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGU4NmUzY2VhNmY0MWEnLFxuICAgICAgICB0ZXN0RGF0YS5pbnZhbGlkUHViS2V5MSxcbiAgICAgICAgdGVzdERhdGEuaW52YWxpZFB1YktleTIsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoa2V5KS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGlkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SWRzID0gW1xuICAgICAgICAnMHgyMDlhM2UxOTYxOTUwNjNiMmU1MTk1MjMyMDg3YTcxZmUyMzI5YTZkYzhkMmZjYTUzMWQ0OGM1YTc4MjRmNjc5JyxcbiAgICAgICAgJzZhNTkwMzc4YzA1OWY3OGZiNjk4ZWMwYWYxZmY2MTA1ODZjYjFhNTJlZTc5ZmRhZTY5ZTU2NDMwZmRlMDhjZjQnLFxuICAgICAgICAnMGUwMTQ5YmMyYzgxOWYzYWU0MGNlZjk1Y2E1ODk1NWM4MGJiYzllMTVmOGM3YzY1MWM3Yjg2YzIyMTRiN2YwMicsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHR4SWQgb2YgdHhJZHMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQgaWRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhJZHMgPSBbXG4gICAgICAgICcnLFxuICAgICAgICAnYml0Z28tc3RhY2tzJyxcbiAgICAgICAgJzB4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3JyxcbiAgICAgICAgJzZhNTkwMzc4YzA1OWY3OGZiNjk4ZWMwYWYxZmY2MTA1ODZjYjUyZWU3OWZkYWU2OWU1NjQzMGZkZTA4Y2Y0JyxcbiAgICAgICAgJzF4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3OScsXG4gICAgICAgICc2YTU5MDM3OGMwNTlmNzhmYjY5OGVjMGFmMWZmNjEwNTg2Y2IxYXp6MmVlNzlmZGFlNjllNTY0MzBmZGUwOGNmNCcsXG4gICAgICAgICcwZTAxNDliYzJjODE5ZjNhZTQwY2VmOTVjYTU4OTU1YzgwYmJjOWUxICAgNWY4YzdjNjUxYzdiODZjMjIxNGI3ZjAyJyxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdHhJZCBvZiB0eElkcykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIG1lbW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2NoZWNrIGZvciB2YWxpZCBtZW1vIHN0cmluZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZW1vU3RyaW5ncyA9IFsnJywgJ1RoaXMgaXMgYSB0ZXN0LicsICdPa2F5JywgJyEhVGhpcyBpcyB0aGlydHkgZm91ciBieXRlcyBsb25nISEnXTtcbiAgICAgIGZvciAoY29uc3QgbWVtbyBvZiBtZW1vU3RyaW5ncykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkTWVtbyhtZW1vKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGl0KCdjaGVjayBmb3IgdmFsaWQgbWVtbyBzdHJpbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVtb1N0cmluZ3MgPSBbJ+qcn+qcn1RoaXMgaXMgdGhpcnR5IGZvdXIgY2hhcnMgbG9uZyEhJywgJ0l0IHdhcyB0aGUgYmVzdCBvZiB0aW1lcywgaXQgd2FzIHRoZSB3b3JzdCBvZiB0aW1lcyddO1xuICAgICAgZm9yIChjb25zdCBtZW1vIG9mIG1lbW9TdHJpbmdzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRNZW1vKG1lbW8pLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbiBhbmQgdmVyaWZ5JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleVBhaXIxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnNlY3JldEtleTEgfSk7XG4gICAgY29uc3Qga2V5UGFpcjIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuc2VjcmV0S2V5MiB9KTtcblxuICAgIGl0KCdzaWduIGEgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5zaWduTWVzc2FnZShrZXlQYWlyMSwgdGVzdERhdGEubWVzc2FnZTEpLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLnNpZ25NZXNzYWdlKGtleVBhaXIyLCB0ZXN0RGF0YS5tZXNzYWdlMiksIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMik7XG4gICAgfSk7XG5cbiAgICBpdCgndmVyaWZ5IGEgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKHRlc3REYXRhLm1lc3NhZ2UxLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIxLmdldEtleXMoKS5wdWIpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIC8vIGhhbmRsZSBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgcHVibGljIGtleXMgcHJvcGVybHlcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEubWVzc2FnZTIsXG4gICAgICAgIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMixcbiAgICAgICAga2V5UGFpcjIuZ2V0S2V5cyhmYWxzZSkucHViXG4gICAgICApLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEubWVzc2FnZTIsXG4gICAgICAgIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMixcbiAgICAgICAga2V5UGFpcjIuZ2V0S2V5cyh0cnVlKS5wdWJcbiAgICAgICkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZlcmlmeSBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZW1wdHkgbWVzc2FnZVxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gVXRpbHMudmVyaWZ5U2lnbmF0dXJlKCcnLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIxLmdldEtleXMoKS5wdWIpLFxuICAgICAgICBuZXcgUmVnRXhwKCdDYW5ub3QgdmVyaWZ5IGVtcHR5IG1lc3NhZ2VzJylcbiAgICAgICk7XG5cbiAgICAgIC8vIHdyb25nIHB1YmxpYyBrZXlcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZSh0ZXN0RGF0YS5tZXNzYWdlMSwgdGVzdERhdGEuZXhwZWN0ZWRTaWduYXR1cmUxLCBrZXlQYWlyMi5nZXRLZXlzKCkucHViKS5zaG91bGQuYmUuZmFsc2UoKTtcblxuICAgICAgLy8gd3Jvbmcgc2lnbmF0dXJlXG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUodGVzdERhdGEubWVzc2FnZTIsIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMSwga2V5UGFpcjIuZ2V0S2V5cygpLnB1Yikuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpbmdpZnlDdicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnSW50IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLkludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKHsgdHlwZTogMCwgdmFsdWU6ICcxMDAwMDAnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1VJbnQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBVSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiBCaWdJbnQoJzEwMDAwMCcpIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IDEsIHZhbHVlOiAnMTAwMDAwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbE5vbmUgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBOb25lQ1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ09wdGlvbmFsU29tZSB0eXBlIHdpdGggdWludCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBTb21lQ1YgPSB7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSxcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfSxcbiAgICAgIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IDEwLCB2YWx1ZTogeyB0eXBlOiAxLCB2YWx1ZTogJzEwMDAwMCcgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbFNvbWUgdHlwZSB3aXRoIHR1cGxlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQ6IFNvbWVDViA9IHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlR1cGxlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhc2hieXRlczogeyB0eXBlOiBDbGFyaXR5VHlwZS5CdWZmZXIsIGJ1ZmZlcjogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7IHR5cGU6IENsYXJpdHlUeXBlLkJ1ZmZlciwgYnVmZmVyOiBuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKGlucHV0KTtcbiAgICB9KTtcblxuICAgIGl0KCdMaXN0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbeyB0eXBlOiBDbGFyaXR5VHlwZS5VSW50LCB2YWx1ZTogQmlnSW50KCcxMDAwMDAnKSB9XSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiAxMSwgbGlzdDogW3sgdHlwZTogMSwgdmFsdWU6ICcxMDAwMDAnIH1dIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ0xpc3QgdHlwZSB3aXRoIGVtcHR5IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbXSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiAxMSwgbGlzdDogW10gfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBZGRyZXNzVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gZm9yIHZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1haW5uZXQgc2luZ2xlIHNpZ1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NQMUROMk5HUkIyUjNXNzVTVDBHQUE3REJWMVZFQkJXWVoxRDMzREVRJykuc2hvdWxkLmVxdWFsKDIyKTtcbiAgICAgIC8vIE1haW5uZXQgbXVsdGkgc2lnXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU000NjhWRVRLQTVEQjE1SFdHMlFNN1kwNEVGUUtWNDRSOUQ2RDBRQycpLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAvLyBUZXN0bmV0IHNpbmdsZSBzaWdcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTVDFTUkNBOTNDRTFXRDhURUcyOEJTV0JGUjY4SjI0WlRBQjJGQUowJykuc2hvdWxkLmVxdWFsKDI2KTtcbiAgICAgIC8vIFRlc3RuZXQgbXVsdGkgc2lnXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnKS5zaG91bGQuZXF1YWwoMjEpO1xuICAgICAgLy8gV2l0aCBNZW1vIElkXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU1AxRE4yTkdSQjJSM1c3NVNUMEdBQTdEQlYxVkVCQldZWjFEMzNERVE/bWVtb0lkPTAnKS5zaG91bGQuZXF1YWwoMjIpO1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYP21lbW9JZD0yNTUnKS5zaG91bGQuZXF1YWwoMjEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RW5jb2RlZFByaW5jaXBhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSBhIHRlc3RuZXQgc3RhbmRhcmQgcHJpbmNpcGFsIGFzIHRoZSAyMi1ieXRlIENsYXJpdHkgYmxvYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ1NUMzkwRDBXQkY2MFQyNVAzNktNQ1A2V04xQlhRN1RUTU1RS05WMTVDJykuc2hvdWxkLmVxdWFsKFxuICAgICAgICAnMDUxYWQyMDY4MzhiNzk4MWExMTZjMzM0ZThjYjFiOTUwYWZiNzNlYjU0YTUnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgY29udHJhY3QgcHJpbmNpcGFscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ1NUMzkwRDBXQkY2MFQyNVAzNktNQ1A2V04xQlhRN1RUTU1RS05WMTVDLm15LWNvbnRyYWN0JyksXG4gICAgICAgIC9jb250cmFjdCBwcmluY2lwYWxzIGFyZSBub3Qgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFkZHJlc3NlcyB3aXRoIGEgbWVtb0lkIHN1ZmZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ1NUMzkwRDBXQkY2MFQyNVAzNktNQ1A2V04xQlhRN1RUTU1RS05WMTVDP21lbW9JZD0wJyksXG4gICAgICAgIC9tdXN0IG5vdCBpbmNsdWRlIGEgcXVlcnkgc3RyaW5nL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBVdGlscy5nZXRFbmNvZGVkUHJpbmNpcGFsKCdub3QtYS1zdGFja3MtYWRkcmVzcycpLCAvaW52YWxpZCBTdGFja3MgYWRkcmVzcy8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgneHB1YlRvU1RYUHVia2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBjb252ZXJ0IGZvciB2YWxpZCB4cHVicycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLnhwdWJUb1NUWFB1YmtleShcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHUzJITWR2QU5ON284RVNXcXd2cjVVNHJ5NWZaZEQ5VkhoeW1XeWZvRFFGNHZ6ZktvdFhnR3RKVHJ3ckZSejdYYkdGb3Y0RnFkS0tvNm1SWU5Xdk1wN1AyM0RqdUpuUydcbiAgICAgICkuc2hvdWxkLmVxdWFsKCcwM2YwZjM1ODFhNDI1Njc5N2ZhODQ3OGNiNmIxZGE2NTg4ZjRjNGJlZGM4MGFiMjYwMWUzYTE1NzJjZjU3YjYxNTYnKTtcbiAgICAgIFV0aWxzLnhwdWJUb1NUWFB1YmtleShcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNGRXpyNUNjcEZ6UEc0NXJtUGY3NURUdkRvYk41Z0ppbUNhdGJIdHpSNTNTYkh6RFoxSjU2YnlLU3NkYzh2U3VqR3VRcHlQamI3THN1YTJOZkFESmV3UHhOekwzTjZUaidcbiAgICAgICkuc2hvdWxkLmVxdWFsKCcwMjYyYjdlODZjMWUzNmU0NWQ0NTEyNjNiNTRhMWMzZDc0MGFiZWFiNjFkMjIxZDExNzVmYzNmZGFkNzUyODUzYWInKTtcbiAgICAgIFV0aWxzLnhwdWJUb1NUWFB1YmtleShcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHUDFhZGszNFZ6UlFKRU1YMjVyQ3hqRXlVOVlGRldOaFdOendQb3FnakxvS2ZucW90THdyejdrQmV2V2JSWm5xVFNRclFEdUp1WVVRYURRNUREUEV6RVhNd1BTOVBFZidcbiAgICAgICkuc2hvdWxkLmVxdWFsKCcwMzY1MjlhMGU0MWNmZDFhOWQyNjViNzRmOGQwMDAyYzkyYzVhZWMxMGQ0MjM5MDAwMjYwYTI1Y2ZkNTRlNDcyNmMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEJhc2VBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBiYXNlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFg/bWVtb0lkPTI1NSc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzcyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBVdGlscy5nZXRCYXNlQWRkcmVzcyhhZGRyZXNzV2l0aE1lbW8pLnNob3VsZC5lcXVhbChiYXNlQWRkcmVzcyk7XG4gICAgICBVdGlscy5nZXRCYXNlQWRkcmVzcyhiYXNlQWRkcmVzcykuc2hvdWxkLmVxdWFsKGJhc2VBZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzU2FtZUJhc2VBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgaWYgYmFzZSBhZGRyZXNzIG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWD9tZW1vSWQ9MjU1JztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJztcbiAgICAgIFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3MsIGJhc2VBZGRyZXNzKS5zaG91bGQudHJ1ZSgpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzMiA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzczIgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczIsIGJhc2VBZGRyZXNzMikuc2hvdWxkLnRydWUoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczMgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFg/bWVtb0lkPTI1NSc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzczMgPSAnU1QxU1JDQTkzQ0UxV0Q4VEVHMjhCU1dCRlI2OEoyNFpUQUIyRkFKMCc7XG4gICAgICBVdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzMywgYmFzZUFkZHJlc3MzKS5zaG91bGQuZmFsc2UoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczQgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3M0ID0gJ1NUMVNSQ0E5M0NFMVdEOFRFRzI4QlNXQkZSNjhKMjRaVEFCMkZBSjAnO1xuICAgICAgVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczQsIGJhc2VBZGRyZXNzNCkuc2hvdWxkLmZhbHNlKCk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3M1ID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRGJztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzNSA9ICdTVDFTUkNBOTNDRTFXRDhURUcyOEJTV0JGUjY4SjI0WlRBQjJGQUowJztcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3M1LCBiYXNlQWRkcmVzczUpLnNob3VsZC5mYWxzZSgpLFxuICAgICAgICBuZXcgUmVnRXhwKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzczV9YClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qix1REFVOEI7QUFDOUIsa0RBQTJCO0FBQzNCLHNEQUF3QztBQUN4QyxtQ0FBbUM7QUFFbkMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFNLENBQUM7QUFFbEMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO0lBQzNCLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDbEIsRUFBRSxDQUFDLDJCQUEyQixFQUFFO1lBQzlCLE1BQU0sY0FBYyxHQUFHO2dCQUNyQiwwQ0FBMEM7Z0JBQzFDLDJDQUEyQztnQkFDM0MsMkNBQTJDO2dCQUMzQyxvREFBb0Q7Z0JBQ3BELG1EQUFtRDtnQkFDbkQsc0RBQXNEO2FBQ3ZELENBQUM7WUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsTUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsMENBQTBDO2dCQUMxQywyQ0FBMkM7Z0JBQzNDLHNEQUFzRDtnQkFDdEQsa0RBQWtEO2dCQUNsRCwwREFBMEQ7Z0JBQzFELEVBQUU7Z0JBQ0YsS0FBSzthQUNOLENBQUM7WUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FB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LENBQUMsRUFBRSxDQUFDO1lBQ3hFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQVcsRUFBRSxJQUFJLEVBQUUsMEJBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUJBQW1CLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQVcsRUFBRSxJQUFJLEVBQUUsMEJBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQVc7Z0JBQ3BCLElBQUksRUFBRSwwQkFBVyxDQUFDLFlBQVk7Z0JBQzlCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2FBQzNELENBQUM7WUFDRixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FB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QkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDcEUsSUFBSSxNQUFNLENBQUMsb0JBQW9CLFFBQVEsRUFBRSxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBBZGRyZXNzVmVyc2lvbixcbiAgQ2xhcml0eVR5cGUsXG4gIEludENWLFxuICBOb25lQ1YsXG4gIFJlc3BvbnNlRXJyb3JDVixcbiAgUmVzcG9uc2VPa0NWLFxuICBTb21lQ1YsXG4gIFVJbnRDVixcbiAgTGlzdENWLFxufSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgQmlnTnVtIGZyb20gJ2JuLmpzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmNvbnN0IHsgS2V5UGFpciwgVXRpbHMgfSA9IFN0eExpYjtcblxuZGVzY3JpYmUoJ1N0eCB1dGlsIGxpYnJhcnknLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JyxcbiAgICAgICAgJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJyxcbiAgICAgICAgJ1NQMlQ3NThLNlQyWVJLRzlRMFRKMTZCNkZQNVFRUkVXWlNFU1JTMFBZJyxcbiAgICAgICAgJ1NUMVdWSk1TNVZTNDFGMFlNSDdEMk0wVkhYUkc0Q1k0M1pKWkJTNjBBP21lbW9JZD00JyxcbiAgICAgICAgJ1NQU1pCWjNXMEpDMk1FQk4wTTlQQU0yUUI1U0g3MlFZRVFBTU42SEQ/bWVtb0lkPTAnLFxuICAgICAgICAnU1AzQlY3MDkySzlaUzlOSjlaWU1QWEU2OVNWNlk2MDcyTTdIRVo0OUU/bWVtb0lkPTI1NScsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQWRkcmVzc2VzID0gW1xuICAgICAgICAnU1AyNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgICAgICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gICAgICAgICdTVDFXVkpNUzVWUzQxRjBZTUg3RDJNMFZIWFJHNENZNDNaSlpCUzYwQT9tZW1vSWQ9TmFOJyxcbiAgICAgICAgJ1NQU1pCWjNXMEpDMk1FQk4wTTlQQU0yUUI1U0g3MlFZRVFBTU42SEQ/bWVtb0lkPScsXG4gICAgICAgICdTUDNCVjcwOTJLOVpTOU5KOVpZTVBYRTY5U1Y2WTYwNzJNN0hFWjQ5RT9tZW1vSWQ9dGVzdGluZycsXG4gICAgICAgICcnLFxuICAgICAgICAnYWJjJyxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgICBVdGlscy5pc1ZhbGlkQWRkcmVzc1dpdGhQYXltZW50SWQoYWRkcmVzcykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGNvbXByZXNzZWQgcHVibGljIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwdWJLZXlzID0gW1xuICAgICAgICAnMDI2M2UxZjJmMzIyZmI3NDIyNGUyMTBmOWQ2MTZmY2UxNGQxMGZhODk1MjBkY2RlM2Q2ZDAyNTE0Y2RiMTY4NDZhJyxcbiAgICAgICAgJzAyZDVkZTllMWI5YzEzZmM3YjY3NDQ2ZWJjZmY0ZmJiOWFhNmIxOTMzZjkwN2U5YWFiZjMyZjQ4ZDZlMGE1MDY0ZCcsXG4gICAgICAgICcwMjk2YzRiODM1M2M0YTkzODE3M2Y4MDcwNmRmNDgwY2Y2Zjg1NTIzYjQyOGQ1OWVlODFkOWVmZmNmNjFlNWVhZTgnLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgYWRkcmVzcyA9IFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKTtcblxuICAgICAgYWRkcmVzcy5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU00xVzlQQlZUWkE5U1JOQlFKMkEwNVIzVDBaVllDOTRQRDBBTjlLREcnKTtcbiAgICAgIGFkZHJlc3MuaGFzaDE2MC5zaG91bGQuZXF1YWwoJzc4OWIyZjdhZmE5MzljNTU3NzkwOTQwMmUwN2EwN2Y3ZTYyNDk2NjgnKTtcblxuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLlRlc3RuZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTjFXOVBCVlRaQTlTUk5CUUoyQTA1UjNUMFpWWUM5NFBEMEE5R0dNWidcbiAgICAgICk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uTWFpbm5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NNMVc5UEJWVFpBOVNSTkJRSjJBMDVSM1QwWlZZQzk0UEQwQU45S0RHJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgbXVsdGlzaWcgYWRkcmVzc2VzIGZyb20gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHViS2V5cyA9IFtcbiAgICAgICAgJzA0OTc0MmI5MDg1NzlmZmQyMjVkNWUxZDk0ODY0NzFmMTlhMTAxZGQwNGI3YTgxZDExZGE4ODJlN2FjN2YzZTA0Mjk4OWMzMTE1MjRhMzMzNWUxNWRlYzkzMzhhMDdiZDIxYjZlNDQ0NGI2Yjc3NDRkMzE0Y2M5MjZhMWYwMzgzZGInLFxuICAgICAgICAnMDQ2NDA5N2NjYmMyMjkwNWVjNmY2NzhjODQ2MzQ2Mjk0MDMzZTExYTIxNmQxMzNhYmY2YWYyNTIyOTQ2OTViMzUzOGQ2NWY2NWIxODhiNmU3MmUxODkwZTc3MzhmOWUyMjE5NDRlNjE4ZGVhMTE3OGVmNzQ5NzE3YjM1NDkyZGU2YScsXG4gICAgICAgICcwNDJjNjA4NDA4MzUyYWI0MTQ3N2FkOWRkMWNhYmNhOWU3MTJkZTJkZmYzYzVjOGJmYTRiNWY3ZjFhMGY3NGEzMjQwMmE4MjZkMmNlNWYzYTZiMDFjMTZhZWViZGQzMDRlMjM1NzkxOTU4YmJmOTdhMDhiNWQ0ZTlkZDRkYjM5OWI3JyxcbiAgICAgIF07XG5cbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU00yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjg2RkNDUTQnKTtcbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzLCBBZGRyZXNzVmVyc2lvbi5UZXN0bmV0TXVsdGlTaWcpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnU04yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjkwUDdZR1MnXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTTJURjhDMDAzSkU1WUE4QjQzQzJaQVkwSzk1UUZWSk5WODZGQ0NRNCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHB1YktleXMgPSBbXG4gICAgICAgICcwNGQ2ZjBmN2Q5N2E3Mjk3OTU5NmExN2ZhMjk0NmVhZWZmMzcwMzI1MGE2MjY0MDI3MWVlYTU5NDc3ZjViMTlmMzlhZDAxY2UyYTUzMDI1ZWJhMzY1YTRmNDBkZDA4NTIzNDE5NGQxZDA2YWVmZWMyYTlkNDQzOWJlMGYzYzJkZjM0JyxcbiAgICAgICAgJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCcsXG4gICAgICAgICcwMzRjODBmOTkxNDEwMDgyODI0YWVlNGNhNDgxNDcwODI5OTdkNDRlODAwZGE5ODc3ZTY5NGY5Y2I2NGIzY2I2NGEnLFxuICAgICAgXTtcblxuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdTTUU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1DS002N0VWJyk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uVGVzdG5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NORThQS1JIU0NCNjk5RkVLNTlGN1Q3Q0JCMjI1S0gxTURQQlZLRjknXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTUU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1DS002N0VWJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGludmFsaWQgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhbXSksIC9JbnZhbGlkIG51bWJlciBvZiBwdWJsaWMga2V5cy8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoWydiYWRrZXknLCAnYmFka2V5MiddKSwgL0ludmFsaWQgcHVibGljIGtleS8pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoW1xuICAgICAgICAgICAgJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCcsXG4gICAgICAgICAgICAnYmFka2V5JyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgL0ludmFsaWQgcHVibGljIGtleS9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3ZhbGlkIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRBbW91bnQoJzEwJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbnZhbGlkIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRBbW91bnQoJy0xMCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwcm9wZXIga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbdGVzdERhdGEuc2VjcmV0S2V5MSwgdGVzdERhdGEuc2VjcmV0S2V5MiwgdGVzdERhdGEuQUNDT1VOVF8xLnBydl07XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoa2V5KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgdmFsaWRhdGUgaW52YWxpZCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgJzY2Yzg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQwOScsXG4gICAgICAgICc2ODg2NDgxMTZiNzIxYmIyZjM5NGUwMDA3ZjlkMzQ4ZWEwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICAgICcweDY2Yzg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2JpdGdvLXN0YWNrcycsXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzNCA4ZWEwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzcnJ4eDkwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlzID0gW3Rlc3REYXRhLnB1YktleTEsIHRlc3REYXRhLnB1YktleTIsIHRlc3REYXRhLnB1YktleTJDb21wcmVzc2VkXTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgICcwNDIxZDZmNDJjOTdkMjNlYzJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlODZlM2NlYTZmNDFhOTRhOWE3YzI0YTFjY2Q4Mzc5MjE3M2Y0NzVmZGI1OTBjYzgyZjk0ZmY2MTVkZjM5MTQyNzY2ZTc1OWNlNjM4NycsXG4gICAgICAgICcwMzIxZDZmNDJjOTlmN2QyM2VjIDJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlNmUzY2VhNmY0MWEnLFxuICAgICAgICAnMGFhNjhjMmQ2ZmRiMzcwNmIzOWYzMmQ2ZjQyMjUyNzVjZTA2MjU2MTkwOGZkN2NhNTQwYTQ0YzkyZWI4NTk0ZWE2ZGI5ZmNmZTBiMzkwYzBlYWQzZjQ1YzM2YWZkNjgyZWFiNjJlYjEyNGE2M2I0NjA5NDVmZTFmN2M3ZjhhMDllMicsXG4gICAgICAgICcnLFxuICAgICAgICAnYml0Z28tc3RhY2tzJyxcbiAgICAgICAgJzA5MjFkNmY0MmM5OWY3ZDIzZWMyYzBkYzIxMjA4YTljNWVkZmNlNGU1YmM3YjYzOTcyZTY4ZTg2ZTNjZWE2ZjQxYScsXG4gICAgICAgICcwMzIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGV6emUzY2VhNmY0MWEnLFxuICAgICAgICAnMHgwMzIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGU4NmUzY2VhNmY0MWEnLFxuICAgICAgICB0ZXN0RGF0YS5pbnZhbGlkUHViS2V5MSxcbiAgICAgICAgdGVzdERhdGEuaW52YWxpZFB1YktleTIsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoa2V5KS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGlkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SWRzID0gW1xuICAgICAgICAnMHgyMDlhM2UxOTYxOTUwNjNiMmU1MTk1MjMyMDg3YTcxZmUyMzI5YTZkYzhkMmZjYTUzMWQ0OGM1YTc4MjRmNjc5JyxcbiAgICAgICAgJzZhNTkwMzc4YzA1OWY3OGZiNjk4ZWMwYWYxZmY2MTA1ODZjYjFhNTJlZTc5ZmRhZTY5ZTU2NDMwZmRlMDhjZjQnLFxuICAgICAgICAnMGUwMTQ5YmMyYzgxOWYzYWU0MGNlZjk1Y2E1ODk1NWM4MGJiYzllMTVmOGM3YzY1MWM3Yjg2YzIyMTRiN2YwMicsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHR4SWQgb2YgdHhJZHMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQgaWRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhJZHMgPSBbXG4gICAgICAgICcnLFxuICAgICAgICAnYml0Z28tc3RhY2tzJyxcbiAgICAgICAgJzB4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3JyxcbiAgICAgICAgJzZhNTkwMzc4YzA1OWY3OGZiNjk4ZWMwYWYxZmY2MTA1ODZjYjUyZWU3OWZkYWU2OWU1NjQzMGZkZTA4Y2Y0JyxcbiAgICAgICAgJzF4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3OScsXG4gICAgICAgICc2YTU5MDM3OGMwNTlmNzhmYjY5OGVjMGFmMWZmNjEwNTg2Y2IxYXp6MmVlNzlmZGFlNjllNTY0MzBmZGUwOGNmNCcsXG4gICAgICAgICcwZTAxNDliYzJjODE5ZjNhZTQwY2VmOTVjYTU4OTU1YzgwYmJjOWUxICAgNWY4YzdjNjUxYzdiODZjMjIxNGI3ZjAyJyxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdHhJZCBvZiB0eElkcykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIG1lbW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2NoZWNrIGZvciB2YWxpZCBtZW1vIHN0cmluZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZW1vU3RyaW5ncyA9IFsnJywgJ1RoaXMgaXMgYSB0ZXN0LicsICdPa2F5JywgJyEhVGhpcyBpcyB0aGlydHkgZm91ciBieXRlcyBsb25nISEnXTtcbiAgICAgIGZvciAoY29uc3QgbWVtbyBvZiBtZW1vU3RyaW5ncykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkTWVtbyhtZW1vKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGl0KCdjaGVjayBmb3IgdmFsaWQgbWVtbyBzdHJpbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVtb1N0cmluZ3MgPSBbJ+qcn+qcn1RoaXMgaXMgdGhpcnR5IGZvdXIgY2hhcnMgbG9uZyEhJywgJ0l0IHdhcyB0aGUgYmVzdCBvZiB0aW1lcywgaXQgd2FzIHRoZSB3b3JzdCBvZiB0aW1lcyddO1xuICAgICAgZm9yIChjb25zdCBtZW1vIG9mIG1lbW9TdHJpbmdzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRNZW1vKG1lbW8pLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbiBhbmQgdmVyaWZ5JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleVBhaXIxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnNlY3JldEtleTEgfSk7XG4gICAgY29uc3Qga2V5UGFpcjIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuc2VjcmV0S2V5MiB9KTtcblxuICAgIGl0KCdzaWduIGEgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5zaWduTWVzc2FnZShrZXlQYWlyMSwgdGVzdERhdGEubWVzc2FnZTEpLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLnNpZ25NZXNzYWdlKGtleVBhaXIyLCB0ZXN0RGF0YS5tZXNzYWdlMiksIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMik7XG4gICAgfSk7XG5cbiAgICBpdCgndmVyaWZ5IGEgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKHRlc3REYXRhLm1lc3NhZ2UxLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIxLmdldEtleXMoKS5wdWIpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIC8vIGhhbmRsZSBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgcHVibGljIGtleXMgcHJvcGVybHlcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEubWVzc2FnZTIsXG4gICAgICAgIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMixcbiAgICAgICAga2V5UGFpcjIuZ2V0S2V5cyhmYWxzZSkucHViXG4gICAgICApLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEubWVzc2FnZTIsXG4gICAgICAgIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMixcbiAgICAgICAga2V5UGFpcjIuZ2V0S2V5cyh0cnVlKS5wdWJcbiAgICAgICkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZlcmlmeSBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZW1wdHkgbWVzc2FnZVxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gVXRpbHMudmVyaWZ5U2lnbmF0dXJlKCcnLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIxLmdldEtleXMoKS5wdWIpLFxuICAgICAgICBuZXcgUmVnRXhwKCdDYW5ub3QgdmVyaWZ5IGVtcHR5IG1lc3NhZ2VzJylcbiAgICAgICk7XG5cbiAgICAgIC8vIHdyb25nIHB1YmxpYyBrZXlcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZSh0ZXN0RGF0YS5tZXNzYWdlMSwgdGVzdERhdGEuZXhwZWN0ZWRTaWduYXR1cmUxLCBrZXlQYWlyMi5nZXRLZXlzKCkucHViKS5zaG91bGQuYmUuZmFsc2UoKTtcblxuICAgICAgLy8gd3Jvbmcgc2lnbmF0dXJlXG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUodGVzdERhdGEubWVzc2FnZTIsIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMSwga2V5UGFpcjIuZ2V0S2V5cygpLnB1Yikuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpbmdpZnlDdicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnSW50IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLkludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKHsgdHlwZTogMCwgdmFsdWU6ICcxMDAwMDAnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1VJbnQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBVSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiBCaWdJbnQoJzEwMDAwMCcpIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IDEsIHZhbHVlOiAnMTAwMDAwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbE5vbmUgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBOb25lQ1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ09wdGlvbmFsU29tZSB0eXBlIHdpdGggdWludCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBTb21lQ1YgPSB7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSxcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfSxcbiAgICAgIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IDEwLCB2YWx1ZTogeyB0eXBlOiAxLCB2YWx1ZTogJzEwMDAwMCcgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbFNvbWUgdHlwZSB3aXRoIHR1cGxlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQ6IFNvbWVDViA9IHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlR1cGxlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhc2hieXRlczogeyB0eXBlOiBDbGFyaXR5VHlwZS5CdWZmZXIsIGJ1ZmZlcjogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7IHR5cGU6IENsYXJpdHlUeXBlLkJ1ZmZlciwgYnVmZmVyOiBuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKGlucHV0KTtcbiAgICB9KTtcblxuICAgIGl0KCdMaXN0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbeyB0eXBlOiBDbGFyaXR5VHlwZS5VSW50LCB2YWx1ZTogQmlnSW50KCcxMDAwMDAnKSB9XSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiAxMSwgbGlzdDogW3sgdHlwZTogMSwgdmFsdWU6ICcxMDAwMDAnIH1dIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ0xpc3QgdHlwZSB3aXRoIGVtcHR5IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbXSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiAxMSwgbGlzdDogW10gfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnUmVzcG9uc2VPayB0eXBlIHdpdGggdWludCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBSZXNwb25zZU9rQ1YgPSB7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlJlc3BvbnNlT2ssXG4gICAgICAgIHZhbHVlOiB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiBCaWdJbnQoJzEwMDAwMCcpIH0sXG4gICAgICB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiA3LCB2YWx1ZTogeyB0eXBlOiAxLCB2YWx1ZTogJzEwMDAwMCcgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdSZXNwb25zZUVyciB0eXBlIHdpdGggdWludCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBSZXNwb25zZUVycm9yQ1YgPSB7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyLFxuICAgICAgICB2YWx1ZTogeyB0eXBlOiBDbGFyaXR5VHlwZS5VSW50LCB2YWx1ZTogQmlnSW50KCcxMDAwMCcpIH0sXG4gICAgICB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiA4LCB2YWx1ZTogeyB0eXBlOiAxLCB2YWx1ZTogJzEwMDAwJyB9IH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzc1ZlcnNpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIGZvciB2YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBNYWlubmV0IHNpbmdsZSBzaWdcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTUDFETjJOR1JCMlIzVzc1U1QwR0FBN0RCVjFWRUJCV1laMUQzM0RFUScpLnNob3VsZC5lcXVhbCgyMik7XG4gICAgICAvLyBNYWlubmV0IG11bHRpIHNpZ1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NNNDY4VkVUS0E1REIxNUhXRzJRTTdZMDRFRlFLVjQ0UjlENkQwUUMnKS5zaG91bGQuZXF1YWwoMjApO1xuICAgICAgLy8gVGVzdG5ldCBzaW5nbGUgc2lnXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU1QxU1JDQTkzQ0UxV0Q4VEVHMjhCU1dCRlI2OEoyNFpUQUIyRkFKMCcpLnNob3VsZC5lcXVhbCgyNik7XG4gICAgICAvLyBUZXN0bmV0IG11bHRpIHNpZ1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJykuc2hvdWxkLmVxdWFsKDIxKTtcbiAgICAgIC8vIFdpdGggTWVtbyBJZFxuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NQMUROMk5HUkIyUjNXNzVTVDBHQUE3REJWMVZFQkJXWVoxRDMzREVRP21lbW9JZD0wJykuc2hvdWxkLmVxdWFsKDIyKTtcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWD9tZW1vSWQ9MjU1Jykuc2hvdWxkLmVxdWFsKDIxKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEVuY29kZWRQcmluY2lwYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgYSB0ZXN0bmV0IHN0YW5kYXJkIHByaW5jaXBhbCBhcyB0aGUgMjItYnl0ZSBDbGFyaXR5IGJsb2InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBVdGlscy5nZXRFbmNvZGVkUHJpbmNpcGFsKCdTVDM5MEQwV0JGNjBUMjVQMzZLTUNQNldOMUJYUTdUVE1NUUtOVjE1QycpLnNob3VsZC5lcXVhbChcbiAgICAgICAgJzA1MWFkMjA2ODM4Yjc5ODFhMTE2YzMzNGU4Y2IxYjk1MGFmYjczZWI1NGE1J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGNvbnRyYWN0IHByaW5jaXBhbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBVdGlscy5nZXRFbmNvZGVkUHJpbmNpcGFsKCdTVDM5MEQwV0JGNjBUMjVQMzZLTUNQNldOMUJYUTdUVE1NUUtOVjE1Qy5teS1jb250cmFjdCcpLFxuICAgICAgICAvY29udHJhY3QgcHJpbmNpcGFscyBhcmUgbm90IHN1cHBvcnRlZC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzZXMgd2l0aCBhIG1lbW9JZCBzdWZmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBVdGlscy5nZXRFbmNvZGVkUHJpbmNpcGFsKCdTVDM5MEQwV0JGNjBUMjVQMzZLTUNQNldOMUJYUTdUVE1NUUtOVjE1Qz9tZW1vSWQ9MCcpLFxuICAgICAgICAvbXVzdCBub3QgaW5jbHVkZSBhIHF1ZXJ5IHN0cmluZy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gVXRpbHMuZ2V0RW5jb2RlZFByaW5jaXBhbCgnbm90LWEtc3RhY2tzLWFkZHJlc3MnKSwgL2ludmFsaWQgU3RhY2tzIGFkZHJlc3MvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3hwdWJUb1NUWFB1YmtleScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gY29udmVydCBmb3IgdmFsaWQgeHB1YnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBVdGlscy54cHViVG9TVFhQdWJrZXkoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjR1MySE1kdkFOTjdvOEVTV3F3dnI1VTRyeTVmWmREOVZIaHltV3lmb0RRRjR2emZLb3RYZ0d0SlRyd3JGUno3WGJHRm92NEZxZEtLbzZtUllOV3ZNcDdQMjNEanVKblMnXG4gICAgICApLnNob3VsZC5lcXVhbCgnMDNmMGYzNTgxYTQyNTY3OTdmYTg0NzhjYjZiMWRhNjU4OGY0YzRiZWRjODBhYjI2MDFlM2ExNTcyY2Y1N2I2MTU2Jyk7XG4gICAgICBVdGlscy54cHViVG9TVFhQdWJrZXkoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRkV6cjVDY3BGelBHNDVybVBmNzVEVHZEb2JONWdKaW1DYXRiSHR6UjUzU2JIekRaMUo1NmJ5S1NzZGM4dlN1akd1UXB5UGpiN0xzdWEyTmZBREpld1B4TnpMM042VGonXG4gICAgICApLnNob3VsZC5lcXVhbCgnMDI2MmI3ZTg2YzFlMzZlNDVkNDUxMjYzYjU0YTFjM2Q3NDBhYmVhYjYxZDIyMWQxMTc1ZmMzZmRhZDc1Mjg1M2FiJyk7XG4gICAgICBVdGlscy54cHViVG9TVFhQdWJrZXkoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjR1AxYWRrMzRWelJRSkVNWDI1ckN4akV5VTlZRkZXTmhXTnp3UG9xZ2pMb0tmbnFvdEx3cno3a0JldldiUlpucVRTUXJRRHVKdVlVUWFEUTVERFBFekVYTXdQUzlQRWYnXG4gICAgICApLnNob3VsZC5lcXVhbCgnMDM2NTI5YTBlNDFjZmQxYTlkMjY1Yjc0ZjhkMDAwMmM5MmM1YWVjMTBkNDIzOTAwMDI2MGEyNWNmZDU0ZTQ3MjZjJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRCYXNlQWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgYmFzZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYP21lbW9JZD0yNTUnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3MgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgVXRpbHMuZ2V0QmFzZUFkZHJlc3MoYWRkcmVzc1dpdGhNZW1vKS5zaG91bGQuZXF1YWwoYmFzZUFkZHJlc3MpO1xuICAgICAgVXRpbHMuZ2V0QmFzZUFkZHJlc3MoYmFzZUFkZHJlc3MpLnNob3VsZC5lcXVhbChiYXNlQWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1NhbWVCYXNlQWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGlmIGJhc2UgYWRkcmVzcyBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFg/bWVtb0lkPTI1NSc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzcyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBVdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzLCBiYXNlQWRkcmVzcykuc2hvdWxkLnRydWUoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczIgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3MyID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJztcbiAgICAgIFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3MyLCBiYXNlQWRkcmVzczIpLnNob3VsZC50cnVlKCk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MzID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYP21lbW9JZD0yNTUnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3MzID0gJ1NUMVNSQ0E5M0NFMVdEOFRFRzI4QlNXQkZSNjhKMjRaVEFCMkZBSjAnO1xuICAgICAgVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczMsIGJhc2VBZGRyZXNzMykuc2hvdWxkLmZhbHNlKCk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3M0ID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzNCA9ICdTVDFTUkNBOTNDRTFXRDhURUcyOEJTV0JGUjY4SjI0WlRBQjJGQUowJztcbiAgICAgIFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3M0LCBiYXNlQWRkcmVzczQpLnNob3VsZC5mYWxzZSgpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzNSA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5ERic7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzczUgPSAnU1QxU1JDQTkzQ0UxV0Q4VEVHMjhCU1dCRlI2OEoyNFpUQUIyRkFKMCc7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBVdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzNSwgYmFzZUFkZHJlc3M1KS5zaG91bGQuZmFsc2UoKSxcbiAgICAgICAgbmV3IFJlZ0V4cChgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3M1fWApXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|