@bitgo/sdk-coin-eth 25.15.2 → 26.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,6 +118,86 @@ describe('Sign ETH Transaction', async function () {
118
118
  sinon_1.default.restore();
119
119
  });
120
120
  });
121
+ describe('Sign ETH Transaction – txInfo fallback', async function () {
122
+ let bitgo;
123
+ let ethWallet;
124
+ const recipients = [{ address: '0xe59dfe5c67114b39a5662cc856be536c614124c0', amount: '100000' }];
125
+ before(function () {
126
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
127
+ bitgo.initializeTestVars();
128
+ bitgo.safeRegister('teth', src_1.Teth.createInstance);
129
+ const coin = bitgo.coin('teth');
130
+ ethWallet = coin.newWalletObject({});
131
+ });
132
+ afterEach(function () {
133
+ sinon_1.default.restore();
134
+ });
135
+ it('should read recipients from txPrebuild.txInfo.recipients when txPrebuild.recipients is absent', async function () {
136
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
137
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
138
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
139
+ const txPrebuild = { txInfo: { recipients, nextContractSequenceId: 1 } };
140
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
141
+ halfSigned.should.have.property('recipients', recipients);
142
+ });
143
+ it('should prefer txPrebuild.recipients over txPrebuild.txInfo.recipients', async function () {
144
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
145
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
146
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
147
+ const txInfoRecipients = [{ address: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef', amount: '1' }];
148
+ const txPrebuild = { recipients, nextContractSequenceId: 0, txInfo: { recipients: txInfoRecipients } };
149
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
150
+ halfSigned.should.have.property('recipients', recipients);
151
+ });
152
+ it('should use txPrebuild.txInfo.nextContractSequenceId when nextContractSequenceId is absent', async function () {
153
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
154
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
155
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
156
+ const txPrebuild = { recipients, txInfo: { nextContractSequenceId: 5 } };
157
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
158
+ halfSigned.should.have.property('contractSequenceId', 5);
159
+ });
160
+ it('should throw when nextContractSequenceId is absent from both txPrebuild and txInfo', async function () {
161
+ await ethWallet
162
+ .signTransaction({ txPrebuild: { recipients }, prv: 'my_user_prv' })
163
+ .should.be.rejectedWith('transaction prebuild missing required property nextContractSequenceId');
164
+ });
165
+ it('should use txPrebuild.txInfo.eip1559 when txPrebuild.eip1559 is absent', async function () {
166
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
167
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
168
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
169
+ const eip1559 = { maxFeePerGas: '100', maxPriorityFeePerGas: '10' };
170
+ const txPrebuild = { recipients, nextContractSequenceId: 0, txInfo: { eip1559 } };
171
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
172
+ halfSigned.should.have.property('eip1559', eip1559);
173
+ });
174
+ it('should prefer txPrebuild.eip1559 over txPrebuild.txInfo.eip1559', async function () {
175
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
176
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
177
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
178
+ const eip1559 = { maxFeePerGas: '200', maxPriorityFeePerGas: '20' };
179
+ const txInfoEip1559 = { maxFeePerGas: '999', maxPriorityFeePerGas: '99' };
180
+ const txPrebuild = { recipients, nextContractSequenceId: 0, eip1559, txInfo: { eip1559: txInfoEip1559 } };
181
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
182
+ halfSigned.should.have.property('eip1559', eip1559);
183
+ });
184
+ it('should use txPrebuild.txInfo.isBatch when txPrebuild.isBatch is absent', async function () {
185
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
186
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
187
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
188
+ const txPrebuild = { recipients, nextContractSequenceId: 0, txInfo: { isBatch: true } };
189
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
190
+ halfSigned.should.have.property('isBatch', true);
191
+ });
192
+ it('should prefer txPrebuild.isBatch over txPrebuild.txInfo.isBatch', async function () {
193
+ sinon_1.default.stub(sdk_core_1.Util, 'xprvToEthPrivateKey');
194
+ sinon_1.default.stub(sdk_core_1.Util, 'ethSignMsgHash');
195
+ sinon_1.default.stub(ethWallet.getOperationSha3ForExecuteAndConfirm);
196
+ const txPrebuild = { recipients, nextContractSequenceId: 0, isBatch: false, txInfo: { isBatch: true } };
197
+ const { halfSigned } = (await ethWallet.signTransaction({ txPrebuild, prv: 'my_user_prv' }));
198
+ halfSigned.should.have.property('isBatch', false);
199
+ });
200
+ });
121
201
  describe('Ethereum Hop Transactions', function () {
122
202
  let bitgo;
123
203
  let ethWallet;
@@ -229,11 +309,11 @@ describe('Ethereum Hop Transactions', function () {
229
309
  let sendAmount;
230
310
  let gasLimitEstimate;
231
311
  let gasPrice;
232
- const nockUserKey = function () {
312
+ const nockUserKey = async function () {
233
313
  (0, nock_1.default)(bgUrl)
234
314
  .get(`/api/v2/teth/key/user`)
235
315
  .reply(200, {
236
- encryptedPrv: bitgo.encrypt({ input: userKeypair.xprv, password: sdk_test_1.TestBitGo.TEST_WALLET1_PASSCODE }),
316
+ encryptedPrv: await bitgo.encrypt({ input: userKeypair.xprv, password: sdk_test_1.TestBitGo.TEST_WALLET1_PASSCODE }),
237
317
  path: userKeypair.path + userKeypair.walletSubPath,
238
318
  });
239
319
  };
@@ -274,7 +354,7 @@ describe('Ethereum Hop Transactions', function () {
274
354
  };
275
355
  });
276
356
  it('should prebuild a hop transaction if given the correct args', async function () {
277
- nockUserKey();
357
+ await nockUserKey();
278
358
  const feeScope = nockFees();
279
359
  nockBuild(ethWallet.id());
280
360
  const res = (await ethWallet.prebuildTransaction(buildParams));
@@ -469,4 +549,4 @@ describe('final-sign transaction from WRW', function () {
469
549
  outputs[0].amount.should.equal(fixtures.WRWUnsignedSweepERC20Tx.recipient.amount);
470
550
  });
471
551
  });
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2V0aFdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBeUM7QUFDekMscURBQXVDO0FBQ3ZDLGdEQUF3QjtBQUN4QixrREFBMEI7QUFDMUIsOENBQStDO0FBRS9DLDhDQUEwRDtBQUUxRCx1Q0FBa0U7QUFDbEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFNUMsNENBQTBDO0FBQzFDLG1DQUFxRTtBQUNyRSw2Q0FBMEM7QUFFMUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEtBQUs7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksU0FBUyxDQUFDO0lBQ2QsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLEVBQUUsQ0FBQztJQUVQLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsVUFBVSxHQUFHO1lBQ1g7Z0JBQ0UsT0FBTyxFQUFFLDRDQUE0QztnQkFDckQsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRixDQUFDO1FBQ0YsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFD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RSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFR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aW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vc2VjcDI1NmsxJztcbmltcG9ydCAqIGFzIHNlY3AyNTZrMSBmcm9tICdzZWNwMjU2azEnO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgY29tbW9uLCBVdGlsIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuXG5pbXBvcnQgeyBDYXBhYmlsaXR5LCBUcmFuc2FjdGlvbiBhcyBFdGhUeCB9IGZyb20gJ0BldGhlcmV1bWpzL3R4JztcbmNvbnN0IGZpeHR1cmVzID0gcmVxdWlyZSgnLi4vZml4dHVyZXMvZXRoJyk7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgRXJjMjBUb2tlbiwgU2lnblRyYW5zYWN0aW9uT3B0aW9ucywgVGV0aCB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi9nZXRCdWlsZGVyJztcblxuZGVzY3JpYmUoJ1NpZ24gRVRIIFRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGV0aFdhbGxldDtcbiAgbGV0IHJlY2lwaWVudHM7XG4gIGxldCB0eDtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgZXRoV2FsbGV0ID0gY29pbi5uZXdXYWxsZXRPYmplY3Qoe30pO1xuICAgIHJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6ICcweGU1OWRmZTVjNjcxMTRiMzlhNTY2MmNjODU2YmU1MzZjNjE0MTI0YzAnLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHR4ID0geyByZWNpcGllbnRzLCBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwIH07XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVhZCB0cmFuc2FjdGlvbiByZWNpcGllbnRzIGZyb20gdHhQcmVidWlsZCBldmVuIGlmIG5vbmUgYXJlIHNwZWNpZmllZCBhcyB0b3AtbGV2ZWwgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ3hwcnZUb0V0aFByaXZhdGVLZXknKTtcbiAgICBzaW5vbi5zdHViKFV0aWwsICdldGhTaWduTXNnSGFzaCcpO1xuICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LmdldE9wZXJhdGlvblNoYTNGb3JFeGVjdXRlQW5kQ29uZmlybSk7XG5cbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogdHgsIHBydjogJ215X3VzZXJfcHJ2JyB9KSkgYXMgYW55O1xuICAgIGhhbGZTaWduZWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCByZWNpcGllbnRzKTtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgbm8gcmVjaXBpZW50cyBhcmUgaW4gdGhlIHR4UHJlYnVpbGQgYW5kIG5vbmUgYXJlIHNwZWNpZmllZCBhcyBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDoge30sIHBydjogJ215X3VzZXJfcHJ2JyB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3JlY2lwaWVudHMgbWlzc2luZyBvciBub3QgYXJyYXknKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcmVjaXBpZW50cyBwYXJhbSBpcyBub3QgYW4gYXJyYXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyByZWNpcGllbnRzOiAnbm90LWFycmF5JyB9LCBwcnY6ICdteV91c2VyX3BydicgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyZWNpcGllbnRzIG1pc3Npbmcgb3Igbm90IGFycmF5Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2V0IGlzQmF0Y2ggdG8gZmFsc2UgaWYgc2luZ2xlIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5zdHViKFV0aWwsICd4cHJ2VG9FdGhQcml2YXRlS2V5Jyk7XG4gICAgc2lub24uc3R1YihVdGlsLCAnZXRoU2lnbk1zZ0hhc2gnKTtcbiAgICBzaW5vbi5zdHViKGV0aFdhbGxldC5nZXRPcGVyYXRpb25TaGEzRm9yRXhlY3V0ZUFuZENvbmZpcm0pO1xuICAgIGNvbnN0IHNpbmdsZVJlY2lwaWVudHNUeCA9IHsgcmVjaXBpZW50czogcmVjaXBpZW50cywgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCwgaXNCYXRjaDogZmFsc2UgfTtcbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHNpbmdsZVJlY2lwaWVudHNUeCxcbiAgICAgIHBydjogJ215X3VzZXJfcHJ2JyxcbiAgICB9KSkgYXMgYW55O1xuICAgIGhhbGZTaWduZWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCByZWNpcGllbnRzKTtcbiAgICBoYWxmU2lnbmVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc0JhdGNoJywgZmFsc2UpO1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzZXQgaXNCYXRjaCB0byB0cnVlIGlmIG11bHRpcGxlIHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbXVsdGlwbGVSZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnMHgwYzdmM2JjNWQyYjJjMGRiZWUxYjQ1NTM2YjgyNTY5ZjQxYjU0MzMxJyxcbiAgICAgICAgYW1vdW50OiAnMjAwJyxcbiAgICAgICAgZGF0YTogJzB4Y2Y0YzU4ZTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MzE3NDViODllNzMyMzBiM2JjOGExOWUwMTkxOTRlZmI0Yjk5ZWZkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMxNzQ1Yjg5ZTczMjMwYjNiYzhhMTllMDE5MTk0ZWZiNGI5OWVmZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NCcsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBtdWx0aXBsZVJlY2lwaWVudHNUeCA9IHsgcmVjaXBpZW50czogbXVsdGlwbGVSZWNpcGllbnRzLCBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLCBpc0JhdGNoOiB0cnVlIH07XG5cbiAgICBzaW5vbi5zdHViKFV0aWwsICd4cHJ2VG9FdGhQcml2YXRlS2V5Jyk7XG4gICAgc2lub24uc3R1YihVdGlsLCAnZXRoU2lnbk1zZ0hhc2gnKTtcbiAgICBzaW5vbi5zdHViKGV0aFdhbGxldC5nZXRPcGVyYXRpb25TaGEzRm9yRXhlY3V0ZUFuZENvbmZpcm0pO1xuICAgIGNvbnN0IHsgaGFsZlNpZ25lZCB9ID0gKGF3YWl0IGV0aFdhbGxldC5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogbXVsdGlwbGVSZWNpcGllbnRzVHgsXG4gICAgICBwcnY6ICdteV91c2VyX3BydicsXG4gICAgfSkpIGFzIGFueTtcbiAgICBoYWxmU2lnbmVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc0JhdGNoJywgdHJ1ZSk7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRXRoZXJldW0gSG9wIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBldGhXYWxsZXQ7XG4gIGxldCB0eDtcbiAgbGV0IHR4aWQ7XG4gIGxldCBiaXRnb1NpZ25hdHVyZTtcbiAgbGV0IGJpdGdvS2V5WHBydjtcbiAgbGV0IGJnVXJsO1xuICBsZXQgZW52O1xuXG4gIGNvbnN0IHVzZXJLZXlwYWlyID0ge1xuICAgIHhwcnY6ICd4cHJ2OXMyMVpyUUgxNDNLMmZKOTFTNEJSc3VwY1lyRTZtbVk5NmZjWDVIa2hvVHJyd213amQxNkNuODdjV2luSmpCeXJmcG9qang3ZXpzSkx4N1RBS0xUOG04aE01S2F4OVljb3huQmVKWjN0MmsnLFxuICAgIHhwdWI6ICd4cHViNjYxTXlNd0FxUmJjRjlOYzdUYkJvMXJaQWFnaVdFVlBXS2JES1RoTkc4enFqazc2SEFLTGthU2JUbjZkSzJkUVBmdUQ3eGppY3hDWlZXdmo2N2ZQNW5ROVc3UVVSbW9NVkFYOG02alpzR3AnLFxuICAgIHJhd1B1YjogJzAyYzEwM2FjNzQ0ODE4NzRiNWVmMGYzODVkMTI3MjVlNGYxNGFlZGM5ZTAwYmM4MTRjZTk2ZjQ3ZjYyY2U3YWRmMicsXG4gICAgcmF3UHJ2OiAnOTM2YzVhZjNmOGFmODFmNzVjZGFkMWIwOGYyOWU3ZDljMDFlNTk4ZTJkYjJkN2JlMThiOWU1YTg2NDZlODdjNicsXG4gICAgcGF0aDogJ20nLFxuICAgIHdhbGxldFN1YlBhdGg6ICcvMC8wJyxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIHR4ID1cbiAgICAgICcweGY4NmM4MjAxNTI4NTAxMmEwNWYyMDA4MjUyMDg5NDUyMDhkOGU4MGM2ZDFhZWY5YmUzN2I0YmQxOWE5Y2Y3NWVkOTNkYzg4NmI1ZTYyMGY0ODAwMDgwMjZhMDBlMTNmOWUwZTExMzM3YjJiMDIyN2UzNDEyMjExZDM2MjVlNDNmMTA4M2ZkYTM5OWNjMzYxZGQ0YmY4OTA4M2JhMDZjODAxYTc2MWUwYWEzYmM4ZGIwYWMyNTY4ZDU3NWIwZmIzMDZhMWYwNGY0ZDViYTgyYmEzY2MwZWEwYTgzYmQnO1xuICAgIHR4aWQgPSAnMHgwYWM2NjljNWZlZjgyOTQ0NDNjNzVhMzFlMzJjNDRiOTdiYmM5ZTQzYTE4ZWE4YmVhYmNjMmEzYjQ1ZWI2ZmZhJztcbiAgICBiaXRnb0tleVhwcnYgPVxuICAgICAgJ3hwcnY5czIxWnJRSDE0M0szdHBXQkhXZTMxc0xvWE5SUTlBdlJZSmdpdGtLeFE0QVRGUU13dnI3aEhOcVlSVW5TN1BzanpCN2FLMVZ4cUhMdU5Ramoxc2NrSjJKd28ycXhtc3ZlandFQ1NwRk1mQyc7XG4gICAgY29uc3QgYml0Z29LZXkgPSBiaXAzMi5mcm9tQmFzZTU4KGJpdGdvS2V5WHBydik7XG4gICAgaWYgKCFiaXRnb0tleS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByaXZhdGVLZXknKTtcbiAgICB9XG4gICAgY29uc3QgYml0Z29YcHViID0gYml0Z29LZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgIGJpdGdvU2lnbmF0dXJlID1cbiAgICAgICcweGFhJyArXG4gICAgICBCdWZmZXIuZnJvbShzZWNwMjU2azEuZWNkc2FTaWduKEJ1ZmZlci5mcm9tKHR4aWQuc2xpY2UoMiksICdoZXgnKSwgYml0Z29LZXkucHJpdmF0ZUtleSkuc2lnbmF0dXJlKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG5cbiAgICBlbnYgPSAndGVzdCc7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52IH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGNvbW1vbi5FbnZpcm9ubWVudHNbZW52XS5oc21YcHViID0gYml0Z29YcHViO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgZXRoV2FsbGV0ID0gY29pbi5uZXdXYWxsZXRPYmplY3QoeyBrZXlzOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10gfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgSFNNIEhvcCBwcmVidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHJlYnVpbGQ7XG4gICAgbGV0IGJ1aWxkUGFyYW1zO1xuICAgIGxldCBmaW5hbFJlY2lwaWVudDtcbiAgICBsZXQgc2VuZEFtb3VudDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBmaW5hbFJlY2lwaWVudCA9ICcweDUyMDhkOGU4MGM2ZDFhZWY5YmUzN2I0YmQxOWE5Y2Y3NWVkOTNkYzgnO1xuICAgICAgc2VuZEFtb3VudCA9ICcyMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgcHJlYnVpbGQgPSB7XG4gICAgICAgIHR4LFxuICAgICAgICBpZDogdHhpZCxcbiAgICAgICAgc2lnbmF0dXJlOiBiaXRnb1NpZ25hdHVyZSxcbiAgICAgIH07XG4gICAgICBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGZpbmFsUmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBzZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSB2YWxpZCBob3AgcHJlYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW4udmFsaWRhdGVIb3BQcmVidWlsZChldGhXYWxsZXQsIHByZWJ1aWxkLCBidWlsZFBhcmFtcykuc2hvdWxkLmJlLnJlc29sdmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIEhTTSBwcmVidWlsZCByZWNpcGllbnQgaXMgd3JvbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiYWRCdWlsZFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYnVpbGRQYXJhbXMpKTtcbiAgICAgIGJhZEJ1aWxkUGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICcweDU0YmYxNjA5YWVlZDgwNGFhMjMxZjA4YzUzZGJiMThmN2QzNzQ2MTUnO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW5cbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQoZXRoV2FsbGV0LCBwcmVidWlsZCwgYmFkQnVpbGRQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCByZWNpcGllbnQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgSFNNIHByZWJ1aWxkIHR4IGFtb3VudCBpcyB3cm9uZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJhZEJ1aWxkUGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShidWlsZFBhcmFtcykpO1xuICAgICAgYmFkQnVpbGRQYXJhbXMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnNTAwMDAwMDAnO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW5cbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQoZXRoV2FsbGV0LCBwcmVidWlsZCwgYmFkQnVpbGRQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCBhbW91bnQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgSFNNIHNpZ25hdHVyZSBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTW9ja2luZyBhIGRpZmZlcmVudCBCaXRHbyBrZXkgbWVhbnMgdGhlIHNpZ25pbmcga2V5IHNob3VsZCBiZSB3cm9uZyAoaXQgbWFwcyB0byBhIGRpZmZlcmVudCBhZGRyZXNzIHRoYW4gdGhpcyB4cHViKVxuICAgICAgY29uc3QgZ29vZFhwdWIgPSBjb21tb24uRW52aXJvbm1lbnRzW2Vudl0uaHNtWHB1YjtcbiAgICAgIGNvbW1vbi5FbnZpcm9ubWVudHNbZW52XS5oc21YcHViID1cbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNFckZxVlhHaVVGdjlZZW9QYmhONzJVaU5DVWRqOW5qM1Q2TThoN2lLTm1iQ1lwTVZXVlpQN0xBMm1hM0hXY1BuZ3oxZ1JUbTRGUGR0bTltSGZyTnZVOTNNQ29zenNHTCc7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldC5iYXNlQ29pblxuICAgICAgICAudmFsaWRhdGVIb3BQcmVidWlsZChldGhXYWxsZXQsIHByZWJ1aWxkLCBidWlsZFBhcmFtcylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0hvcCB0eGlkIHNpZ25hdHVyZSBpbnZhbGlkLyk7XG4gICAgICBjb21tb24uRW52aXJvbm1lbnRzW2Vudl0uaHNtWHB1YiA9IGdvb2RYcHViO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBIU00gc2lnbmF0dXJlIHNpZ25lZCB0aGUgd3JvbmcgSFNNIGNvbW1pdG1lbnQgZGlnZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmFkVHhpZCA9ICcweGI0YjM4MjdhNTI5YzkxNjY3ODZlNzk2NTI4MDE3ODg5YWM1MDI3MjU1YjY1YjNmYTJhM2QzYWQ5MTI0NGExMmInO1xuICAgICAgY29uc3QgYmFkVHhpZEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhZFR4aWQuc2xpY2UoMiksICdoZXgnKTtcbiAgICAgIGNvbnN0IHhwcnZOb2RlID0gYmlwMzIuZnJvbUJhc2U1OChiaXRnb0tleVhwcnYpO1xuICAgICAgaWYgKCF4cHJ2Tm9kZS5wcml2YXRlS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFkU2lnbmF0dXJlID1cbiAgICAgICAgJzB4YWEnICsgQnVmZmVyLmZyb20oc2VjcDI1NmsxLmVjZHNhU2lnbihiYWRUeGlkQnVmZmVyLCB4cHJ2Tm9kZS5wcml2YXRlS2V5KS5zaWduYXR1cmUpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJhZFByZWJ1aWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwcmVidWlsZCkpO1xuICAgICAgYmFkUHJlYnVpbGQuc2lnbmF0dXJlID0gYmFkU2lnbmF0dXJlO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW5cbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQoZXRoV2FsbGV0LCBiYWRQcmVidWlsZCwgYnVpbGRQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9Ib3AgdHhpZCBzaWduYXR1cmUgaW52YWxpZC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJlYnVpbGQgaG9wIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwcmVidWlsZDtcbiAgICBsZXQgYnVpbGRQYXJhbXM7XG4gICAgbGV0IGZpbmFsUmVjaXBpZW50O1xuICAgIGxldCBzZW5kQW1vdW50O1xuICAgIGxldCBnYXNMaW1pdEVzdGltYXRlO1xuICAgIGxldCBnYXNQcmljZTtcblxuICAgIGNvbnN0IG5vY2tVc2VyS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi90ZXRoL2tleS91c2VyYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGVuY3J5cHRlZFBydjogYml0Z28uZW5jcnlwdCh7IGlucHV0OiB1c2VyS2V5cGFpci54cHJ2LCBwYXNzd29yZDogVGVzdEJpdEdvLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSB9KSxcbiAgICAgICAgICBwYXRoOiB1c2VyS2V5cGFpci5wYXRoICsgdXNlcktleXBhaXIud2FsbGV0U3ViUGF0aCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBub2NrRmVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldCgnL2FwaS92Mi90ZXRoL3R4L2ZlZScpXG4gICAgICAgIC5xdWVyeSh0cnVlKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogZ2FzTGltaXRFc3RpbWF0ZSxcbiAgICAgICAgICBmZWVFc3RpbWF0ZTogZ2FzTGltaXRFc3RpbWF0ZSAqIGdhc1ByaWNlLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiBzY29wZTtcbiAgICB9O1xuXG4gICAgY29uc3Qgbm9ja0J1aWxkID0gZnVuY3Rpb24gKHdhbGxldElkKSB7XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92Mi90ZXRoL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4L2J1aWxkJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBob3BUcmFuc2FjdGlvbjogcHJlYnVpbGQsIGJ1aWxkUGFyYW1zIH0pO1xuICAgIH07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgZ2FzTGltaXRFc3RpbWF0ZSA9IDEwMDAwMDtcbiAgICAgIGdhc1ByaWNlID0gNTAwMDAwMDA7XG4gICAgICBmaW5hbFJlY2lwaWVudCA9ICcweDUyMDhkOGU4MGM2ZDFhZWY5YmUzN2I0YmQxOWE5Y2Y3NWVkOTNkYzgnO1xuICAgICAgc2VuZEFtb3VudCA9ICcyMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgcHJlYnVpbGQgPSB7XG4gICAgICAgIHR4LFxuICAgICAgICBpZDogdHhpZCxcbiAgICAgICAgc2lnbmF0dXJlOiBiaXRnb1NpZ25hdHVyZSxcbiAgICAgIH07XG4gICAgICBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGZpbmFsUmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBzZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZWJ1aWxkIGEgaG9wIHRyYW5zYWN0aW9uIGlmIGdpdmVuIHRoZSBjb3JyZWN0IGFyZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrVXNlcktleSgpO1xuICAgICAgY29uc3QgZmVlU2NvcGUgPSBub2NrRmVlcygpO1xuICAgICAgbm9ja0J1aWxkKGV0aFdhbGxldC5pZCgpKTtcbiAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihidWlsZFBhcmFtcykpIGFzIGFueTtcbiAgICAgIHNob3VsZC5leGlzdChyZXMuaG9wVHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ob3BUcmFuc2FjdGlvbi50eCk7XG4gICAgICBzaG91bGQuZXhpc3QocmVzLmhvcFRyYW5zYWN0aW9uLnR4KTtcbiAgICAgIHNob3VsZC5leGlzdChyZXMuaG9wVHJhbnNhY3Rpb24uaWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ob3BUcmFuc2FjdGlvbi5zaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChyZXMud2FsbGV0KTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVzLmJ1aWxkUGFyYW1zKTtcbiAgICAgIGZlZVNjb3BlLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGNvbnN0IGZlZVJlcSA9IChmZWVTY29wZSBhcyBhbnkpLmludGVyY2VwdG9yc1swXS5yZXE7XG4gICAgICBmZWVSZXEucGF0aC5zaG91bGQuY29udGFpbkVxbCgnaG9wPXRydWUnKTtcbiAgICAgIGZlZVJlcS5wYXRoLnNob3VsZC5jb250YWluRXFsKCdyZWNpcGllbnQ9JyArIGZpbmFsUmVjaXBpZW50KTtcbiAgICAgIGZlZVJlcS5wYXRoLnNob3VsZC5jb250YWluRXFsKCdhbW91bnQ9JyArIHNlbmRBbW91bnQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQWRkIGZpbmFsIHNpZ25hdHVyZSB0byBFVEggdHggZnJvbSBvZmZsaW5lIHZhdWx0JywgZnVuY3Rpb24gKCkge1xuICBsZXQgcGFyYW1zRnJvbVZhdWx0LCBleHBlY3RlZFJlc3VsdCwgYml0Z28sIGNvaW47XG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmFscyA9IGZpeHR1cmVzLmdldEhhbGZTaWduZWRUZXRoRnJvbVZhdWx0KCk7XG4gICAgcGFyYW1zRnJvbVZhdWx0ID0gdmFscy5wYXJhbXNGcm9tVmF1bHQ7XG4gICAgZXhwZWN0ZWRSZXN1bHQgPSB2YWxzLmV4cGVjdGVkUmVzdWx0O1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IGZ1bGx5IHNpZ24gYSBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIHRoZSBvZmZsaW5lIHZhdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtc0Zyb21WYXVsdCkpIGFzIGFueTtcbiAgICBjb25zdCBleHBlY3RlZFR4ID0gRXRoVHguZnJvbVNlcmlhbGl6ZWRUeChCdWZmZXIuZnJvbShleHBlY3RlZFJlc3VsdC50eEhleCwgJ2hleCcpKTtcbiAgICBjb25zdCBhY3R1YWxUeCA9IEV0aFR4LmZyb21TZXJpYWxpemVkVHgoQnVmZmVyLmZyb20ocmVzcG9uc2UudHhIZXgsICdoZXgnKSk7XG4gICAgYWN0dWFsVHgubm9uY2UudG9TdHJpbmcoKS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkVHgubm9uY2UudG9TdHJpbmcoKSk7XG4gICAgc2hvdWxkLmV4aXN0KGFjdHVhbFR4LnRvKTtcbiAgICBhY3R1YWxUeC50bz8uc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4LnRvKTtcbiAgICBhY3R1YWxUeC52YWx1ZS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkVHgudmFsdWUpO1xuICAgIGFjdHVhbFR4LmRhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4LmRhdGEpO1xuICAgIGFjdHVhbFR4LmlzU2lnbmVkKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGFjdHVhbFR4LnN1cHBvcnRzKENhcGFiaWxpdHkuRUlQMTU1UmVwbGF5UHJvdGVjdGlvbikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICBhY3R1YWxUeC52ZXJpZnlTaWduYXR1cmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgc2hvdWxkLmV4aXN0KGFjdHVhbFR4LnYpO1xuICAgIGFjdHVhbFR4Py52Py50b1N0cmluZygpLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRUeD8udj8udG9TdHJpbmcoKSk7XG4gICAgYWN0dWFsVHg/LnI/LnRvU3RyaW5nKCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4Py5yPy50b1N0cmluZygpKTtcbiAgICBhY3R1YWxUeD8ucz8udG9TdHJpbmcoKS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkVHg/LnM/LnRvU3RyaW5nKCkpO1xuICAgIGFjdHVhbFR4Lmdhc1ByaWNlLnRvU3RyaW5nKCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4Lmdhc1ByaWNlLnRvU3RyaW5nKCkpO1xuICAgIGFjdHVhbFR4Lmdhc0xpbWl0LnRvU3RyaW5nKCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4Lmdhc0xpbWl0LnRvU3RyaW5nKCkpO1xuICAgIHJlc3BvbnNlLnR4SGV4LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkUmVzdWx0LnR4SGV4LnRvU3RyaW5nKCkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQWRkIHNpZ25hdHVyZSB0byBFSVAxNTU5IHR4IGZyb20gb2ZmbGluZSB2YXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBwYXJhbXNGcm9tVmF1bHQsIGV4cGVjdGVkUmVzdWx0LCBjb2luO1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZhbHMgPSBmaXh0dXJlcy5nZXRVbnNpZ25lZEVpcDE1NTlUZXRoRnJvbVZhdWx0KCk7XG4gICAgcGFyYW1zRnJvbVZhdWx0ID0gdmFscy5wYXJhbXNGcm9tVmF1bHQ7XG4gICAgZXhwZWN0ZWRSZXN1bHQgPSB2YWxzLmV4cGVjdGVkUmVzdWx0O1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHNpZ24gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gZnJvbSB0aGUgb2ZmbGluZSB2YXVsdCcsIGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXNGcm9tVmF1bHQpO1xuICAgIHNob3VsZC5leGlzdChyZXNwb25zZS5oYWxmU2lnbmVkKTtcbiAgICByZXNwb25zZS5oYWxmU2lnbmVkLmVpcDE1NTkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFJlc3VsdC5oYWxmU2lnbmVkLmVpcDE1NTkpO1xuICAgIHJlc3BvbnNlLmhhbGZTaWduZWQucmVjaXBpZW50cy5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkUmVzdWx0LmhhbGZTaWduZWQucmVjaXBpZW50cyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwcmVidWlsZFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGV0aFdhbGxldDtcbiAgbGV0IHJlY2lwaWVudHM7XG4gIGxldCBiZ1VybDtcbiAgbGV0IGdhc0xpbWl0O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGJpdGdvLnNhZmVSZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgZXRoV2FsbGV0ID0gY29pbi5uZXdXYWxsZXRPYmplY3Qoe30pO1xuICAgIGdhc0xpbWl0ID0gMjEwMDAwMDtcbiAgICByZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnMHhlNTlkZmU1YzY3MTE0YjM5YTU2NjJjYzg1NmJlNTM2YzYxNDEyNGMwJyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgYWNjZXB0IGdhc0xpbWl0IGFzIGEgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoJy9hcGkvdjIvdGV0aC93YWxsZXQvJyArIGV0aFdhbGxldC5pZCgpICsgJy90eC9idWlsZCcsIHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgZ2FzTGltaXQsXG4gICAgICB9KVxuICAgICAgLnJlcGx5KDIwMCwgeyBzdWNjZXNzOiB0cnVlIH0pO1xuICAgIGNvbnN0IHByZWJ1aWxkID0gYXdhaXQgZXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCBnYXNMaW1pdCB9KTtcbiAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgcHJlYnVpbGQuc3VjY2Vzcy5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IGhvcCBwYXJhbSBmb3IgYW4gZXJjMjAgdG9rZW4gYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKCd0ZXJjJyk7XG4gICAgY29uc3QgdG9rZW5XYWxsZXQgPSB0b2tlbi5uZXdXYWxsZXRPYmplY3Qoe30pO1xuICAgIHJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6ICcweGU1OWRmZTVjNjcxMTRiMzlhNTY2MmNjODU2YmU1MzZjNjE0MTI0YzAnLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGF3YWl0IHRva2VuV2FsbGV0XG4gICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMsIGhvcDogdHJ1ZSwgd2FsbGV0UGFzc3BocmFzZTogJ2hpJyB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgIGBIb3AgdHJhbnNhY3Rpb25zIGFyZSBub3QgZW5hYmxlZCBmb3IgRVJDLTIwIHRva2Vucywgbm9yIGFyZSB0aGV5IG5lY2Vzc2FyeS4gUGxlYXNlIHJlbW92ZSB0aGUgJ2hvcCcgcGFyYW1ldGVyIGFuZCB0cnkgYWdhaW4uYFxuICAgICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2ZpbmFsLXNpZ24gdHJhbnNhY3Rpb24gZnJvbSBXUlcnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgYWRkIGEgc2Vjb25kIHNpZ25hdHVyZSB0byB1bnNpZ25lZCBzd2VlcCBmb3IgdGV0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcblxuICAgIGNvbnN0IGJhc2Vjb2luOiBhbnkgPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgY29uc3QgZ2FzUHJpY2UgPSAyMDAwMDAwMDAwMDA7XG4gICAgY29uc3QgZ2FzTGltaXQgPSA1MDAwMDA7XG4gICAgY29uc3QgcHJ2ID1cbiAgICAgICd4cHJ2OXMyMVpyUUgxNDNLM0Q4VFhmdkFKZ0hWZlRFZVFOVzVZczl3WnRuVVprcVB6RnpTamJFSnJXQzF2WjRHblhDdlI3clFMMlVGWDNSU3VZZVU5TXJFUm0xWEJ2QUNvdzdjMzZ2bno1aVl5ajInOyAvLyBwbGFjZWhvbGRlciB0ZXN0IHBydlxuICAgIGNvbnN0IHR4ID0ge1xuICAgICAgdHhQcmVidWlsZDogZml4dHVyZXMuV1JXVW5zaWduZWRTd2VlcEVUSFR4LFxuICAgICAgcHJ2LFxuICAgIH07XG4gICAgLy8gc2lnbiB0cmFuc2FjdGlvbiBvbmNlXG4gICAgY29uc3QgaGFsZlNpZ25lZCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih0eCk7XG5cbiAgICBjb25zdCB3cmFwcGVyID0ge30gYXMgU2lnblRyYW5zYWN0aW9uT3B0aW9ucztcbiAgICB3cmFwcGVyLnR4UHJlYnVpbGQgPSBoYWxmU2lnbmVkO1xuICAgIHdyYXBwZXIudHhQcmVidWlsZC5yZWNpcGllbnRzID0gaGFsZlNpZ25lZC5oYWxmU2lnbmVkLnJlY2lwaWVudHM7XG4gICAgd3JhcHBlci50eFByZWJ1aWxkLmdhc1ByaWNlID0gZ2FzUHJpY2UudG9TdHJpbmcoKTtcbiAgICB3cmFwcGVyLnR4UHJlYnVpbGQuZ2FzTGltaXQgPSBnYXNMaW1pdC50b1N0cmluZygpO1xuICAgIHdyYXBwZXIuaXNMYXN0U2lnbmF0dXJlID0gdHJ1ZTtcbiAgICB3cmFwcGVyLndhbGxldENvbnRyYWN0QWRkcmVzcyA9IGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFVEhUeC53YWxsZXRDb250cmFjdEFkZHJlc3M7XG4gICAgd3JhcHBlci5wcnYgPSBwcnY7XG5cbiAgICAvLyBzaWduIHRyYW5zYWN0aW9uIHR3aWNlIHdpdGggdGhlIFwiaXNMYXN0U2lnbmF0dXJlXCIgZmxhZ1xuICAgIGNvbnN0IGZpbmFsU2lnbmVkVHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24od3JhcHBlcik7XG4gICAgZmluYWxTaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdldGgnKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSgnMHgnICsgZmluYWxTaWduZWRUeC50eEhleCk7IC8vIGFkZCBhIDB4IGluIGZyb250IG9mIHRoaXMgdHhoZXhcbiAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBvdXRwdXRzID0gcmVidWlsdFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmVidWlsdFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIG91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBvdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFVEhUeC5yZWNpcGllbnQuYWRkcmVzcyk7XG4gICAgb3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFVEhUeC5yZWNpcGllbnQuYW1vdW50KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhZGQgYSBzZWNvbmQgc2lnbmF0dXJlIHRvIHVuc2lnbmVkIHN3ZWVwIGZvciBlcmMyMCB0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgYml0Z28uc2FmZVJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfSk7XG4gICAgY29uc3QgYmFzZWNvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RkYWknKTtcbiAgICBjb25zdCBnYXNQcmljZSA9IDIwMDAwMDAwMDAwMDtcbiAgICBjb25zdCBnYXNMaW1pdCA9IDUwMDAwMDtcbiAgICBjb25zdCBwcnYgPVxuICAgICAgJ3hwcnY5czIxWnJRSDE0M0szMzk5UUJWdmJtaHM0UkI1UXpYRDhYaVczTnd0YWVUZW05M1FHZDVWTmp1a1Vud0pROTRuVWd1Z0hTVnpTVlZlM1JQMTZVcnYxWnlpanBZZHlEYW1zeGYyU2hicTR3MSc7IC8vIHBsYWNlaG9sZGVyIHRlc3QgcHJ2XG4gICAgY29uc3QgdHggPSB7XG4gICAgICB0eFByZWJ1aWxkOiBmaXh0dXJlcy5XUldVbnNpZ25lZFN3ZWVwRVJDMjBUeCxcbiAgICAgIHBydixcbiAgICB9O1xuICAgIC8vIHNpZ24gdHJhbnNhY3Rpb24gb25jZVxuICAgIGNvbnN0IGhhbGZTaWduZWQgPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24odHgpO1xuXG4gICAgY29uc3Qgd3JhcHBlciA9IHt9IGFzIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM7XG4gICAgd3JhcHBlci50eFByZWJ1aWxkID0gaGFsZlNpZ25lZDtcbiAgICB3cmFwcGVyLnR4UHJlYnVpbGQucmVjaXBpZW50cyA9IGhhbGZTaWduZWQuaGFsZlNpZ25lZC5yZWNpcGllbnRzO1xuICAgIHdyYXBwZXIudHhQcmVidWlsZC5nYXNQcmljZSA9IGdhc1ByaWNlLnRvU3RyaW5nKCk7XG4gICAgd3JhcHBlci50eFByZWJ1aWxkLmdhc0xpbWl0ID0gZ2FzTGltaXQudG9TdHJpbmcoKTtcbiAgICB3cmFwcGVyLmlzTGFzdFNpZ25hdHVyZSA9IHRydWU7XG4gICAgd3JhcHBlci53YWxsZXRDb250cmFjdEFkZHJlc3MgPSBmaXh0dXJlcy5XUldVbnNpZ25lZFN3ZWVwRVJDMjBUeC53YWxsZXRDb250cmFjdEFkZHJlc3M7XG4gICAgd3JhcHBlci5wcnYgPSBwcnY7XG5cbiAgICAvLyBzaWduIHRyYW5zYWN0aW9uIHR3aWNlIHdpdGggdGhlIFwiaXNMYXN0U2lnbmF0dXJlXCIgZmxhZ1xuICAgIGNvbnN0IGZpbmFsU2lnbmVkVHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24od3JhcHBlcik7XG4gICAgZmluYWxTaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdldGgnKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSgnMHgnICsgZmluYWxTaWduZWRUeC50eEhleCk7IC8vIGFkZCBhIDB4IGluIGZyb250IG9mIHRoaXMgdHhoZXhcbiAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBvdXRwdXRzID0gcmVidWlsdFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmVidWlsdFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIG91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBvdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFUkMyMFR4LnJlY2lwaWVudC5hZGRyZXNzKTtcbiAgICBvdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoZml4dHVyZXMuV1JXVW5zaWduZWRTd2VlcEVSQzIwVHgucmVjaXBpZW50LmFtb3VudCk7XG4gIH0pO1xufSk7XG4iXX0=
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2V0aFdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBeUM7QUFDekMscURBQXVDO0FBQ3ZDLGdEQUF3QjtBQUN4QixrREFBMEI7QUFDMUIsOENBQStDO0FBRS9DLDhDQUEwRDtBQUUxRCx1Q0FBa0U7QUFDbEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFNUMsNENBQTBDO0FBQzFDLG1DQUFxRTtBQUNyRSw2Q0FBMEM7QUFFMUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEtBQUs7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksU0FBUyxDQUFDO0lBQ2QsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLEVBQUUsQ0FBQztJQUVQLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsVUFBVSxHQUFHO1lBQ1g7Z0JBQ0UsT0FBTyxFQUFFLDRDQUE0QztnQkFDckQsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRixDQUFDO1FBQ0YsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFD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QUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVB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ZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyBzZWNwMjU2azEgZnJvbSAnc2VjcDI1NmsxJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGNvbW1vbiwgVXRpbCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcblxuaW1wb3J0IHsgQ2FwYWJpbGl0eSwgVHJhbnNhY3Rpb24gYXMgRXRoVHggfSBmcm9tICdAZXRoZXJldW1qcy90eCc7XG5jb25zdCBmaXh0dXJlcyA9IHJlcXVpcmUoJy4uL2ZpeHR1cmVzL2V0aCcpO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IEVyYzIwVG9rZW4sIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsIFRldGggfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4vZ2V0QnVpbGRlcic7XG5cbmRlc2NyaWJlKCdTaWduIEVUSCBUcmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBldGhXYWxsZXQ7XG4gIGxldCByZWNpcGllbnRzO1xuICBsZXQgdHg7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RldGgnLCBUZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGV0aCcpO1xuICAgIGV0aFdhbGxldCA9IGNvaW4ubmV3V2FsbGV0T2JqZWN0KHt9KTtcbiAgICByZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnMHhlNTlkZmU1YzY3MTE0YjM5YTU2NjJjYzg1NmJlNTM2YzYxNDEyNGMwJyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0eCA9IHsgcmVjaXBpZW50cywgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCB9O1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlYWQgdHJhbnNhY3Rpb24gcmVjaXBpZW50cyBmcm9tIHR4UHJlYnVpbGQgZXZlbiBpZiBub25lIGFyZSBzcGVjaWZpZWQgYXMgdG9wLWxldmVsIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5zdHViKFV0aWwsICd4cHJ2VG9FdGhQcml2YXRlS2V5Jyk7XG4gICAgc2lub24uc3R1YihVdGlsLCAnZXRoU2lnbk1zZ0hhc2gnKTtcbiAgICBzaW5vbi5zdHViKGV0aFdhbGxldC5nZXRPcGVyYXRpb25TaGEzRm9yRXhlY3V0ZUFuZENvbmZpcm0pO1xuXG4gICAgY29uc3QgeyBoYWxmU2lnbmVkIH0gPSAoYXdhaXQgZXRoV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHR4LCBwcnY6ICdteV91c2VyX3BydicgfSkpIGFzIGFueTtcbiAgICBoYWxmU2lnbmVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgcmVjaXBpZW50cyk7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIG5vIHJlY2lwaWVudHMgYXJlIGluIHRoZSB0eFByZWJ1aWxkIGFuZCBub25lIGFyZSBzcGVjaWZpZWQgYXMgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgLnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHt9LCBwcnY6ICdteV91c2VyX3BydicgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyZWNpcGllbnRzIG1pc3Npbmcgb3Igbm90IGFycmF5Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHJlY2lwaWVudHMgcGFyYW0gaXMgbm90IGFuIGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgLnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgcmVjaXBpZW50czogJ25vdC1hcnJheScgfSwgcHJ2OiAnbXlfdXNlcl9wcnYnIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgncmVjaXBpZW50cyBtaXNzaW5nIG9yIG5vdCBhcnJheScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNldCBpc0JhdGNoIHRvIGZhbHNlIGlmIHNpbmdsZSByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcbiAgICBjb25zdCBzaW5nbGVSZWNpcGllbnRzVHggPSB7IHJlY2lwaWVudHM6IHJlY2lwaWVudHMsIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDAsIGlzQmF0Y2g6IGZhbHNlIH07XG4gICAgY29uc3QgeyBoYWxmU2lnbmVkIH0gPSAoYXdhaXQgZXRoV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiBzaW5nbGVSZWNpcGllbnRzVHgsXG4gICAgICBwcnY6ICdteV91c2VyX3BydicsXG4gICAgfSkpIGFzIGFueTtcbiAgICBoYWxmU2lnbmVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgcmVjaXBpZW50cyk7XG4gICAgaGFsZlNpZ25lZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaXNCYXRjaCcsIGZhbHNlKTtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2V0IGlzQmF0Y2ggdG8gdHJ1ZSBpZiBtdWx0aXBsZSByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG11bHRpcGxlUmVjaXBpZW50cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogJzB4MGM3ZjNiYzVkMmIyYzBkYmVlMWI0NTUzNmI4MjU2OWY0MWI1NDMzMScsXG4gICAgICAgIGFtb3VudDogJzIwMCcsXG4gICAgICAgIGRhdGE6ICcweGNmNGM1OGUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMxNzQ1Yjg5ZTczMjMwYjNiYzhhMTllMDE5MTk0ZWZiNGI5OWVmZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzMTc0NWI4OWU3MzIzMGIzYmM4YTE5ZTAxOTE5NGVmYjRiOTllZmQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQnLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgbXVsdGlwbGVSZWNpcGllbnRzVHggPSB7IHJlY2lwaWVudHM6IG11bHRpcGxlUmVjaXBpZW50cywgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCwgaXNCYXRjaDogdHJ1ZSB9O1xuXG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IG11bHRpcGxlUmVjaXBpZW50c1R4LFxuICAgICAgcHJ2OiAnbXlfdXNlcl9wcnYnLFxuICAgIH0pKSBhcyBhbnk7XG4gICAgaGFsZlNpZ25lZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaXNCYXRjaCcsIHRydWUpO1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1NpZ24gRVRIIFRyYW5zYWN0aW9uIOKAkyB0eEluZm8gZmFsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgZXRoV2FsbGV0O1xuICBjb25zdCByZWNpcGllbnRzID0gW3sgYWRkcmVzczogJzB4ZTU5ZGZlNWM2NzExNGIzOWE1NjYyY2M4NTZiZTUzNmM2MTQxMjRjMCcsIGFtb3VudDogJzEwMDAwMCcgfV07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RldGgnLCBUZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGV0aCcpO1xuICAgIGV0aFdhbGxldCA9IGNvaW4ubmV3V2FsbGV0T2JqZWN0KHt9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVhZCByZWNpcGllbnRzIGZyb20gdHhQcmVidWlsZC50eEluZm8ucmVjaXBpZW50cyB3aGVuIHR4UHJlYnVpbGQucmVjaXBpZW50cyBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcblxuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SW5mbzogeyByZWNpcGllbnRzLCBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAxIH0gfTtcbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgcHJ2OiAnbXlfdXNlcl9wcnYnIH0pKSBhcyBhbnk7XG4gICAgaGFsZlNpZ25lZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHJlY2lwaWVudHMpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByZWZlciB0eFByZWJ1aWxkLnJlY2lwaWVudHMgb3ZlciB0eFByZWJ1aWxkLnR4SW5mby5yZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ3hwcnZUb0V0aFByaXZhdGVLZXknKTtcbiAgICBzaW5vbi5zdHViKFV0aWwsICdldGhTaWduTXNnSGFzaCcpO1xuICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LmdldE9wZXJhdGlvblNoYTNGb3JFeGVjdXRlQW5kQ29uZmlybSk7XG5cbiAgICBjb25zdCB0eEluZm9SZWNpcGllbnRzID0gW3sgYWRkcmVzczogJzB4ZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZicsIGFtb3VudDogJzEnIH1dO1xuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHJlY2lwaWVudHMsIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDAsIHR4SW5mbzogeyByZWNpcGllbnRzOiB0eEluZm9SZWNpcGllbnRzIH0gfTtcbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgcHJ2OiAnbXlfdXNlcl9wcnYnIH0pKSBhcyBhbnk7XG4gICAgaGFsZlNpZ25lZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHJlY2lwaWVudHMpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSB0eFByZWJ1aWxkLnR4SW5mby5uZXh0Q29udHJhY3RTZXF1ZW5jZUlkIHdoZW4gbmV4dENvbnRyYWN0U2VxdWVuY2VJZCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcblxuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHJlY2lwaWVudHMsIHR4SW5mbzogeyBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiA1IH0gfTtcbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgcHJ2OiAnbXlfdXNlcl9wcnYnIH0pKSBhcyBhbnk7XG4gICAgaGFsZlNpZ25lZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29udHJhY3RTZXF1ZW5jZUlkJywgNSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkIGlzIGFic2VudCBmcm9tIGJvdGggdHhQcmVidWlsZCBhbmQgdHhJbmZvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgLnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgcmVjaXBpZW50cyB9LCBwcnY6ICdteV91c2VyX3BydicgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IG5leHRDb250cmFjdFNlcXVlbmNlSWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgdHhQcmVidWlsZC50eEluZm8uZWlwMTU1OSB3aGVuIHR4UHJlYnVpbGQuZWlwMTU1OSBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcblxuICAgIGNvbnN0IGVpcDE1NTkgPSB7IG1heEZlZVBlckdhczogJzEwMCcsIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMTAnIH07XG4gICAgY29uc3QgdHhQcmVidWlsZCA9IHsgcmVjaXBpZW50cywgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCwgdHhJbmZvOiB7IGVpcDE1NTkgfSB9O1xuICAgIGNvbnN0IHsgaGFsZlNpZ25lZCB9ID0gKGF3YWl0IGV0aFdhbGxldC5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCBwcnY6ICdteV91c2VyX3BydicgfSkpIGFzIGFueTtcbiAgICBoYWxmU2lnbmVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlaXAxNTU5JywgZWlwMTU1OSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJlZmVyIHR4UHJlYnVpbGQuZWlwMTU1OSBvdmVyIHR4UHJlYnVpbGQudHhJbmZvLmVpcDE1NTknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcblxuICAgIGNvbnN0IGVpcDE1NTkgPSB7IG1heEZlZVBlckdhczogJzIwMCcsIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMjAnIH07XG4gICAgY29uc3QgdHhJbmZvRWlwMTU1OSA9IHsgbWF4RmVlUGVyR2FzOiAnOTk5JywgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICc5OScgfTtcbiAgICBjb25zdCB0eFByZWJ1aWxkID0geyByZWNpcGllbnRzLCBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLCBlaXAxNTU5LCB0eEluZm86IHsgZWlwMTU1OTogdHhJbmZvRWlwMTU1OSB9IH07XG4gICAgY29uc3QgeyBoYWxmU2lnbmVkIH0gPSAoYXdhaXQgZXRoV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHBydjogJ215X3VzZXJfcHJ2JyB9KSkgYXMgYW55O1xuICAgIGhhbGZTaWduZWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VpcDE1NTknLCBlaXAxNTU5KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB1c2UgdHhQcmVidWlsZC50eEluZm8uaXNCYXRjaCB3aGVuIHR4UHJlYnVpbGQuaXNCYXRjaCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgc2lub24uc3R1YihVdGlsLCAneHBydlRvRXRoUHJpdmF0ZUtleScpO1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ2V0aFNpZ25Nc2dIYXNoJyk7XG4gICAgc2lub24uc3R1YihldGhXYWxsZXQuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKTtcblxuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHJlY2lwaWVudHMsIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDAsIHR4SW5mbzogeyBpc0JhdGNoOiB0cnVlIH0gfTtcbiAgICBjb25zdCB7IGhhbGZTaWduZWQgfSA9IChhd2FpdCBldGhXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgcHJ2OiAnbXlfdXNlcl9wcnYnIH0pKSBhcyBhbnk7XG4gICAgaGFsZlNpZ25lZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaXNCYXRjaCcsIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByZWZlciB0eFByZWJ1aWxkLmlzQmF0Y2ggb3ZlciB0eFByZWJ1aWxkLnR4SW5mby5pc0JhdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnN0dWIoVXRpbCwgJ3hwcnZUb0V0aFByaXZhdGVLZXknKTtcbiAgICBzaW5vbi5zdHViKFV0aWwsICdldGhTaWduTXNnSGFzaCcpO1xuICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LmdldE9wZXJhdGlvblNoYTNGb3JFeGVjdXRlQW5kQ29uZmlybSk7XG5cbiAgICBjb25zdCB0eFByZWJ1aWxkID0geyByZWNpcGllbnRzLCBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLCBpc0JhdGNoOiBmYWxzZSwgdHhJbmZvOiB7IGlzQmF0Y2g6IHRydWUgfSB9O1xuICAgIGNvbnN0IHsgaGFsZlNpZ25lZCB9ID0gKGF3YWl0IGV0aFdhbGxldC5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCBwcnY6ICdteV91c2VyX3BydicgfSkpIGFzIGFueTtcbiAgICBoYWxmU2lnbmVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc0JhdGNoJywgZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRXRoZXJldW0gSG9wIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBldGhXYWxsZXQ7XG4gIGxldCB0eDtcbiAgbGV0IHR4aWQ7XG4gIGxldCBiaXRnb1NpZ25hdHVyZTtcbiAgbGV0IGJpdGdvS2V5WHBydjtcbiAgbGV0IGJnVXJsO1xuICBsZXQgZW52O1xuXG4gIGNvbnN0IHVzZXJLZXlwYWlyID0ge1xuICAgIHhwcnY6ICd4cHJ2OXMyMVpyUUgxNDNLMmZKOTFTNEJSc3VwY1lyRTZtbVk5NmZjWDVIa2hvVHJyd213amQxNkNuODdjV2luSmpCeXJmcG9qang3ZXpzSkx4N1RBS0xUOG04aE01S2F4OVljb3huQmVKWjN0MmsnLFxuICAgIHhwdWI6ICd4cHViNjYxTXlNd0FxUmJjRjlOYzdUYkJvMXJaQWFnaVdFVlBXS2JES1RoTkc4enFqazc2SEFLTGthU2JUbjZkSzJkUVBmdUQ3eGppY3hDWlZXdmo2N2ZQNW5ROVc3UVVSbW9NVkFYOG02alpzR3AnLFxuICAgIHJhd1B1YjogJzAyYzEwM2FjNzQ0ODE4NzRiNWVmMGYzODVkMTI3MjVlNGYxNGFlZGM5ZTAwYmM4MTRjZTk2ZjQ3ZjYyY2U3YWRmMicsXG4gICAgcmF3UHJ2OiAnOTM2YzVhZjNmOGFmODFmNzVjZGFkMWIwOGYyOWU3ZDljMDFlNTk4ZTJkYjJkN2JlMThiOWU1YTg2NDZlODdjNicsXG4gICAgcGF0aDogJ20nLFxuICAgIHdhbGxldFN1YlBhdGg6ICcvMC8wJyxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIHR4ID1cbiAgICAgICcweGY4NmM4MjAxNTI4NTAxMmEwNWYyMDA4MjUyMDg5NDUyMDhkOGU4MGM2ZDFhZWY5YmUzN2I0YmQxOWE5Y2Y3NWVkOTNkYzg4NmI1ZTYyMGY0ODAwMDgwMjZhMDBlMTNmOWUwZTExMzM3YjJiMDIyN2UzNDEyMjExZDM2MjVlNDNmMTA4M2ZkYTM5OWNjMzYxZGQ0YmY4OTA4M2JhMDZjODAxYTc2MWUwYWEzYmM4ZGIwYWMyNTY4ZDU3NWIwZmIzMDZhMWYwNGY0ZDViYTgyYmEzY2MwZWEwYTgzYmQnO1xuICAgIHR4aWQgPSAnMHgwYWM2NjljNWZlZjgyOTQ0NDNjNzVhMzFlMzJjNDRiOTdiYmM5ZTQzYTE4ZWE4YmVhYmNjMmEzYjQ1ZWI2ZmZhJztcbiAgICBiaXRnb0tleVhwcnYgPVxuICAgICAgJ3hwcnY5czIxWnJRSDE0M0szdHBXQkhXZTMxc0xvWE5SUTlBdlJZSmdpdGtLeFE0QVRGUU13dnI3aEhOcVlSVW5TN1BzanpCN2FLMVZ4cUhMdU5Ramoxc2NrSjJKd28ycXhtc3ZlandFQ1NwRk1mQyc7XG4gICAgY29uc3QgYml0Z29LZXkgPSBiaXAzMi5mcm9tQmFzZTU4KGJpdGdvS2V5WHBydik7XG4gICAgaWYgKCFiaXRnb0tleS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByaXZhdGVLZXknKTtcbiAgICB9XG4gICAgY29uc3QgYml0Z29YcHViID0gYml0Z29LZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgIGJpdGdvU2lnbmF0dXJlID1cbiAgICAgICcweGFhJyArXG4gICAgICBCdWZmZXIuZnJvbShzZWNwMjU2azEuZWNkc2FTaWduKEJ1ZmZlci5mcm9tKHR4aWQuc2xpY2UoMiksICdoZXgnKSwgYml0Z29LZXkucHJpdmF0ZUtleSkuc2lnbmF0dXJlKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG5cbiAgICBlbnYgPSAndGVzdCc7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52IH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGNvbW1vbi5FbnZpcm9ubWVudHNbZW52XS5oc21YcHViID0gYml0Z29YcHViO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgZXRoV2FsbGV0ID0gY29pbi5uZXdXYWxsZXRPYmplY3QoeyBrZXlzOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10gfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgSFNNIEhvcCBwcmVidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHJlYnVpbGQ7XG4gICAgbGV0IGJ1aWxkUGFyYW1zO1xuICAgIGxldCBmaW5hbFJlY2lwaWVudDtcbiAgICBsZXQgc2VuZEFtb3VudDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBmaW5hbFJlY2lwaWVudCA9ICcweDUyMDhkOGU4MGM2ZDFhZWY5YmUzN2I0YmQxOWE5Y2Y3NWVkOTNkYzgnO1xuICAgICAgc2VuZEFtb3VudCA9ICcyMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgcHJlYnVpbGQgPSB7XG4gICAgICAgIHR4LFxuICAgICAgICBpZDogdHhpZCxcbiAgICAgICAgc2lnbmF0dXJlOiBiaXRnb1NpZ25hdHVyZSxcbiAgICAgIH07XG4gICAgICBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGZpbmFsUmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBzZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSB2YWxpZCBob3AgcHJlYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW4udmFsaWRhdGVIb3BQcmVidWlsZChldGhXYWxsZXQsIHByZWJ1aWxkLCBidWlsZFBhcmFtcykuc2hvdWxkLmJlLnJlc29sdmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIEhTTSBwcmVidWlsZCByZWNpcGllbnQgaXMgd3JvbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiYWRCdWlsZFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYnVpbGRQYXJhbXMpKTtcbiAgICAgIGJhZEJ1aWxkUGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICcweDU0YmYxNjA5YWVlZDgwNGFhMjMxZjA4YzUzZGJiMThmN2QzNzQ2MTUnO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW5cbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQoZXRoV2FsbGV0LCBwcmVidWlsZCwgYmFkQnVpbGRQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCByZWNpcGllbnQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgSFNNIHByZWJ1aWxkIHR4IGFtb3VudCBpcyB3cm9uZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJhZEJ1aWxkUGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShidWlsZFBhcmFtcykpO1xuICAgICAgYmFkQnVpbGRQYXJhbXMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnNTAwMDAwMDAnO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW5cbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQoZXRoV2FsbGV0LCBwcmVidWlsZCwgYmFkQnVpbGRQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCBhbW91bnQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgSFNNIHNpZ25hdHVyZSBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTW9ja2luZyBhIGRpZmZlcmVudCBCaXRHbyBrZXkgbWVhbnMgdGhlIHNpZ25pbmcga2V5IHNob3VsZCBiZSB3cm9uZyAoaXQgbWFwcyB0byBhIGRpZmZlcmVudCBhZGRyZXNzIHRoYW4gdGhpcyB4cHViKVxuICAgICAgY29uc3QgZ29vZFhwdWIgPSBjb21tb24uRW52aXJvbm1lbnRzW2Vudl0uaHNtWHB1YjtcbiAgICAgIGNvbW1vbi5FbnZpcm9ubWVudHNbZW52XS5oc21YcHViID1cbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNFckZxVlhHaVVGdjlZZW9QYmhONzJVaU5DVWRqOW5qM1Q2TThoN2lLTm1iQ1lwTVZXVlpQN0xBMm1hM0hXY1BuZ3oxZ1JUbTRGUGR0bTltSGZyTnZVOTNNQ29zenNHTCc7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldC5iYXNlQ29pblxuICAgICAgICAudmFsaWRhdGVIb3BQcmVidWlsZChldGhXYWxsZXQsIHByZWJ1aWxkLCBidWlsZFBhcmFtcylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0hvcCB0eGlkIHNpZ25hdHVyZSBpbnZhbGlkLyk7XG4gICAgICBjb21tb24uRW52aXJvbm1lbnRzW2Vudl0uaHNtWHB1YiA9IGdvb2RYcHViO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBIU00gc2lnbmF0dXJlIHNpZ25lZCB0aGUgd3JvbmcgSFNNIGNvbW1pdG1lbnQgZGlnZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmFkVHhpZCA9ICcweGI0YjM4MjdhNTI5YzkxNjY3ODZlNzk2NTI4MDE3ODg5YWM1MDI3MjU1YjY1YjNmYTJhM2QzYWQ5MTI0NGExMmInO1xuICAgICAgY29uc3QgYmFkVHhpZEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhZFR4aWQuc2xpY2UoMiksICdoZXgnKTtcbiAgICAgIGNvbnN0IHhwcnZOb2RlID0gYmlwMzIuZnJvbUJhc2U1OChiaXRnb0tleVhwcnYpO1xuICAgICAgaWYgKCF4cHJ2Tm9kZS5wcml2YXRlS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFkU2lnbmF0dXJlID1cbiAgICAgICAgJzB4YWEnICsgQnVmZmVyLmZyb20oc2VjcDI1NmsxLmVjZHNhU2lnbihiYWRUeGlkQnVmZmVyLCB4cHJ2Tm9kZS5wcml2YXRlS2V5KS5zaWduYXR1cmUpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJhZFByZWJ1aWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwcmVidWlsZCkpO1xuICAgICAgYmFkUHJlYnVpbGQuc2lnbmF0dXJlID0gYmFkU2lnbmF0dXJlO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXQuYmFzZUNvaW5cbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQoZXRoV2FsbGV0LCBiYWRQcmVidWlsZCwgYnVpbGRQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9Ib3AgdHhpZCBzaWduYXR1cmUgaW52YWxpZC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJlYnVpbGQgaG9wIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwcmVidWlsZDtcbiAgICBsZXQgYnVpbGRQYXJhbXM7XG4gICAgbGV0IGZpbmFsUmVjaXBpZW50O1xuICAgIGxldCBzZW5kQW1vdW50O1xuICAgIGxldCBnYXNMaW1pdEVzdGltYXRlO1xuICAgIGxldCBnYXNQcmljZTtcblxuICAgIGNvbnN0IG5vY2tVc2VyS2V5ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi90ZXRoL2tleS91c2VyYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiB1c2VyS2V5cGFpci54cHJ2LCBwYXNzd29yZDogVGVzdEJpdEdvLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSB9KSxcbiAgICAgICAgICBwYXRoOiB1c2VyS2V5cGFpci5wYXRoICsgdXNlcktleXBhaXIud2FsbGV0U3ViUGF0aCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBub2NrRmVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldCgnL2FwaS92Mi90ZXRoL3R4L2ZlZScpXG4gICAgICAgIC5xdWVyeSh0cnVlKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogZ2FzTGltaXRFc3RpbWF0ZSxcbiAgICAgICAgICBmZWVFc3RpbWF0ZTogZ2FzTGltaXRFc3RpbWF0ZSAqIGdhc1ByaWNlLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiBzY29wZTtcbiAgICB9O1xuXG4gICAgY29uc3Qgbm9ja0J1aWxkID0gZnVuY3Rpb24gKHdhbGxldElkKSB7XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92Mi90ZXRoL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4L2J1aWxkJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBob3BUcmFuc2FjdGlvbjogcHJlYnVpbGQsIGJ1aWxkUGFyYW1zIH0pO1xuICAgIH07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgZ2FzTGltaXRFc3RpbWF0ZSA9IDEwMDAwMDtcbiAgICAgIGdhc1ByaWNlID0gNTAwMDAwMDA7XG4gICAgICBmaW5hbFJlY2lwaWVudCA9ICcweDUyMDhkOGU4MGM2ZDFhZWY5YmUzN2I0YmQxOWE5Y2Y3NWVkOTNkYzgnO1xuICAgICAgc2VuZEFtb3VudCA9ICcyMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgcHJlYnVpbGQgPSB7XG4gICAgICAgIHR4LFxuICAgICAgICBpZDogdHhpZCxcbiAgICAgICAgc2lnbmF0dXJlOiBiaXRnb1NpZ25hdHVyZSxcbiAgICAgIH07XG4gICAgICBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGZpbmFsUmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBzZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZWJ1aWxkIGEgaG9wIHRyYW5zYWN0aW9uIGlmIGdpdmVuIHRoZSBjb3JyZWN0IGFyZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBub2NrVXNlcktleSgpO1xuICAgICAgY29uc3QgZmVlU2NvcGUgPSBub2NrRmVlcygpO1xuICAgICAgbm9ja0J1aWxkKGV0aFdhbGxldC5pZCgpKTtcbiAgICAgIGNvbnN0IHJlcyA9IChhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihidWlsZFBhcmFtcykpIGFzIGFueTtcbiAgICAgIHNob3VsZC5leGlzdChyZXMuaG9wVHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ob3BUcmFuc2FjdGlvbi50eCk7XG4gICAgICBzaG91bGQuZXhpc3QocmVzLmhvcFRyYW5zYWN0aW9uLnR4KTtcbiAgICAgIHNob3VsZC5leGlzdChyZXMuaG9wVHJhbnNhY3Rpb24uaWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ob3BUcmFuc2FjdGlvbi5zaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChyZXMud2FsbGV0KTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVzLmJ1aWxkUGFyYW1zKTtcbiAgICAgIGZlZVNjb3BlLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGNvbnN0IGZlZVJlcSA9IChmZWVTY29wZSBhcyBhbnkpLmludGVyY2VwdG9yc1swXS5yZXE7XG4gICAgICBmZWVSZXEucGF0aC5zaG91bGQuY29udGFpbkVxbCgnaG9wPXRydWUnKTtcbiAgICAgIGZlZVJlcS5wYXRoLnNob3VsZC5jb250YWluRXFsKCdyZWNpcGllbnQ9JyArIGZpbmFsUmVjaXBpZW50KTtcbiAgICAgIGZlZVJlcS5wYXRoLnNob3VsZC5jb250YWluRXFsKCdhbW91bnQ9JyArIHNlbmRBbW91bnQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQWRkIGZpbmFsIHNpZ25hdHVyZSB0byBFVEggdHggZnJvbSBvZmZsaW5lIHZhdWx0JywgZnVuY3Rpb24gKCkge1xuICBsZXQgcGFyYW1zRnJvbVZhdWx0LCBleHBlY3RlZFJlc3VsdCwgYml0Z28sIGNvaW47XG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmFscyA9IGZpeHR1cmVzLmdldEhhbGZTaWduZWRUZXRoRnJvbVZhdWx0KCk7XG4gICAgcGFyYW1zRnJvbVZhdWx0ID0gdmFscy5wYXJhbXNGcm9tVmF1bHQ7XG4gICAgZXhwZWN0ZWRSZXN1bHQgPSB2YWxzLmV4cGVjdGVkUmVzdWx0O1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IGZ1bGx5IHNpZ24gYSBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIHRoZSBvZmZsaW5lIHZhdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtc0Zyb21WYXVsdCkpIGFzIGFueTtcbiAgICBjb25zdCBleHBlY3RlZFR4ID0gRXRoVHguZnJvbVNlcmlhbGl6ZWRUeChCdWZmZXIuZnJvbShleHBlY3RlZFJlc3VsdC50eEhleCwgJ2hleCcpKTtcbiAgICBjb25zdCBhY3R1YWxUeCA9IEV0aFR4LmZyb21TZXJpYWxpemVkVHgoQnVmZmVyLmZyb20ocmVzcG9uc2UudHhIZXgsICdoZXgnKSk7XG4gICAgYWN0dWFsVHgubm9uY2UudG9TdHJpbmcoKS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkVHgubm9uY2UudG9TdHJpbmcoKSk7XG4gICAgc2hvdWxkLmV4aXN0KGFjdHVhbFR4LnRvKTtcbiAgICBhY3R1YWxUeC50bz8uc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4LnRvKTtcbiAgICBhY3R1YWxUeC52YWx1ZS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkVHgudmFsdWUpO1xuICAgIGFjdHVhbFR4LmRhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4LmRhdGEpO1xuICAgIGFjdHVhbFR4LmlzU2lnbmVkKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGFjdHVhbFR4LnN1cHBvcnRzKENhcGFiaWxpdHkuRUlQMTU1UmVwbGF5UHJvdGVjdGlvbikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICBhY3R1YWxUeC52ZXJpZnlTaWduYXR1cmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgc2hvdWxkLmV4aXN0KGFjdHVhbFR4LnYpO1xuICAgIGFjdHVhbFR4Py52Py50b1N0cmluZygpLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRUeD8udj8udG9TdHJpbmcoKSk7XG4gICAgYWN0dWFsVHg/LnI/LnRvU3RyaW5nKCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4Py5yPy50b1N0cmluZygpKTtcbiAgICBhY3R1YWxUeD8ucz8udG9TdHJpbmcoKS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkVHg/LnM/LnRvU3RyaW5nKCkpO1xuICAgIGFjdHVhbFR4Lmdhc1ByaWNlLnRvU3RyaW5nKCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4Lmdhc1ByaWNlLnRvU3RyaW5nKCkpO1xuICAgIGFjdHVhbFR4Lmdhc0xpbWl0LnRvU3RyaW5nKCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR4Lmdhc0xpbWl0LnRvU3RyaW5nKCkpO1xuICAgIHJlc3BvbnNlLnR4SGV4LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkUmVzdWx0LnR4SGV4LnRvU3RyaW5nKCkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQWRkIHNpZ25hdHVyZSB0byBFSVAxNTU5IHR4IGZyb20gb2ZmbGluZSB2YXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBwYXJhbXNGcm9tVmF1bHQsIGV4cGVjdGVkUmVzdWx0LCBjb2luO1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZhbHMgPSBmaXh0dXJlcy5nZXRVbnNpZ25lZEVpcDE1NTlUZXRoRnJvbVZhdWx0KCk7XG4gICAgcGFyYW1zRnJvbVZhdWx0ID0gdmFscy5wYXJhbXNGcm9tVmF1bHQ7XG4gICAgZXhwZWN0ZWRSZXN1bHQgPSB2YWxzLmV4cGVjdGVkUmVzdWx0O1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHNpZ24gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gZnJvbSB0aGUgb2ZmbGluZSB2YXVsdCcsIGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXNGcm9tVmF1bHQpO1xuICAgIHNob3VsZC5leGlzdChyZXNwb25zZS5oYWxmU2lnbmVkKTtcbiAgICByZXNwb25zZS5oYWxmU2lnbmVkLmVpcDE1NTkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFJlc3VsdC5oYWxmU2lnbmVkLmVpcDE1NTkpO1xuICAgIHJlc3BvbnNlLmhhbGZTaWduZWQucmVjaXBpZW50cy5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkUmVzdWx0LmhhbGZTaWduZWQucmVjaXBpZW50cyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwcmVidWlsZFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGV0aFdhbGxldDtcbiAgbGV0IHJlY2lwaWVudHM7XG4gIGxldCBiZ1VybDtcbiAgbGV0IGdhc0xpbWl0O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGJpdGdvLnNhZmVSZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGV0aCcsIFRldGguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgZXRoV2FsbGV0ID0gY29pbi5uZXdXYWxsZXRPYmplY3Qoe30pO1xuICAgIGdhc0xpbWl0ID0gMjEwMDAwMDtcbiAgICByZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnMHhlNTlkZmU1YzY3MTE0YjM5YTU2NjJjYzg1NmJlNTM2YzYxNDEyNGMwJyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgYWNjZXB0IGdhc0xpbWl0IGFzIGEgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoJy9hcGkvdjIvdGV0aC93YWxsZXQvJyArIGV0aFdhbGxldC5pZCgpICsgJy90eC9idWlsZCcsIHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgZ2FzTGltaXQsXG4gICAgICB9KVxuICAgICAgLnJlcGx5KDIwMCwgeyBzdWNjZXNzOiB0cnVlIH0pO1xuICAgIGNvbnN0IHByZWJ1aWxkID0gYXdhaXQgZXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCBnYXNMaW1pdCB9KTtcbiAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgcHJlYnVpbGQuc3VjY2Vzcy5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IGhvcCBwYXJhbSBmb3IgYW4gZXJjMjAgdG9rZW4gYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKCd0ZXJjJyk7XG4gICAgY29uc3QgdG9rZW5XYWxsZXQgPSB0b2tlbi5uZXdXYWxsZXRPYmplY3Qoe30pO1xuICAgIHJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6ICcweGU1OWRmZTVjNjcxMTRiMzlhNTY2MmNjODU2YmU1MzZjNjE0MTI0YzAnLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGF3YWl0IHRva2VuV2FsbGV0XG4gICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMsIGhvcDogdHJ1ZSwgd2FsbGV0UGFzc3BocmFzZTogJ2hpJyB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgIGBIb3AgdHJhbnNhY3Rpb25zIGFyZSBub3QgZW5hYmxlZCBmb3IgRVJDLTIwIHRva2Vucywgbm9yIGFyZSB0aGV5IG5lY2Vzc2FyeS4gUGxlYXNlIHJlbW92ZSB0aGUgJ2hvcCcgcGFyYW1ldGVyIGFuZCB0cnkgYWdhaW4uYFxuICAgICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2ZpbmFsLXNpZ24gdHJhbnNhY3Rpb24gZnJvbSBXUlcnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgYWRkIGEgc2Vjb25kIHNpZ25hdHVyZSB0byB1bnNpZ25lZCBzd2VlcCBmb3IgdGV0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcblxuICAgIGNvbnN0IGJhc2Vjb2luOiBhbnkgPSBiaXRnby5jb2luKCd0ZXRoJyk7XG4gICAgY29uc3QgZ2FzUHJpY2UgPSAyMDAwMDAwMDAwMDA7XG4gICAgY29uc3QgZ2FzTGltaXQgPSA1MDAwMDA7XG4gICAgY29uc3QgcHJ2ID1cbiAgICAgICd4cHJ2OXMyMVpyUUgxNDNLM0Q4VFhmdkFKZ0hWZlRFZVFOVzVZczl3WnRuVVprcVB6RnpTamJFSnJXQzF2WjRHblhDdlI3clFMMlVGWDNSU3VZZVU5TXJFUm0xWEJ2QUNvdzdjMzZ2bno1aVl5ajInOyAvLyBwbGFjZWhvbGRlciB0ZXN0IHBydlxuICAgIGNvbnN0IHR4ID0ge1xuICAgICAgdHhQcmVidWlsZDogZml4dHVyZXMuV1JXVW5zaWduZWRTd2VlcEVUSFR4LFxuICAgICAgcHJ2LFxuICAgIH07XG4gICAgLy8gc2lnbiB0cmFuc2FjdGlvbiBvbmNlXG4gICAgY29uc3QgaGFsZlNpZ25lZCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih0eCk7XG5cbiAgICBjb25zdCB3cmFwcGVyID0ge30gYXMgU2lnblRyYW5zYWN0aW9uT3B0aW9ucztcbiAgICB3cmFwcGVyLnR4UHJlYnVpbGQgPSBoYWxmU2lnbmVkO1xuICAgIHdyYXBwZXIudHhQcmVidWlsZC5yZWNpcGllbnRzID0gaGFsZlNpZ25lZC5oYWxmU2lnbmVkLnJlY2lwaWVudHM7XG4gICAgd3JhcHBlci50eFByZWJ1aWxkLmdhc1ByaWNlID0gZ2FzUHJpY2UudG9TdHJpbmcoKTtcbiAgICB3cmFwcGVyLnR4UHJlYnVpbGQuZ2FzTGltaXQgPSBnYXNMaW1pdC50b1N0cmluZygpO1xuICAgIHdyYXBwZXIuaXNMYXN0U2lnbmF0dXJlID0gdHJ1ZTtcbiAgICB3cmFwcGVyLndhbGxldENvbnRyYWN0QWRkcmVzcyA9IGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFVEhUeC53YWxsZXRDb250cmFjdEFkZHJlc3M7XG4gICAgd3JhcHBlci5wcnYgPSBwcnY7XG5cbiAgICAvLyBzaWduIHRyYW5zYWN0aW9uIHR3aWNlIHdpdGggdGhlIFwiaXNMYXN0U2lnbmF0dXJlXCIgZmxhZ1xuICAgIGNvbnN0IGZpbmFsU2lnbmVkVHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24od3JhcHBlcik7XG4gICAgZmluYWxTaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdldGgnKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSgnMHgnICsgZmluYWxTaWduZWRUeC50eEhleCk7IC8vIGFkZCBhIDB4IGluIGZyb250IG9mIHRoaXMgdHhoZXhcbiAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBvdXRwdXRzID0gcmVidWlsdFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmVidWlsdFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIG91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBvdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFVEhUeC5yZWNpcGllbnQuYWRkcmVzcyk7XG4gICAgb3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFVEhUeC5yZWNpcGllbnQuYW1vdW50KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhZGQgYSBzZWNvbmQgc2lnbmF0dXJlIHRvIHVuc2lnbmVkIHN3ZWVwIGZvciBlcmMyMCB0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgYml0Z28uc2FmZVJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfSk7XG4gICAgY29uc3QgYmFzZWNvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RkYWknKTtcbiAgICBjb25zdCBnYXNQcmljZSA9IDIwMDAwMDAwMDAwMDtcbiAgICBjb25zdCBnYXNMaW1pdCA9IDUwMDAwMDtcbiAgICBjb25zdCBwcnYgPVxuICAgICAgJ3hwcnY5czIxWnJRSDE0M0szMzk5UUJWdmJtaHM0UkI1UXpYRDhYaVczTnd0YWVUZW05M1FHZDVWTmp1a1Vud0pROTRuVWd1Z0hTVnpTVlZlM1JQMTZVcnYxWnlpanBZZHlEYW1zeGYyU2hicTR3MSc7IC8vIHBsYWNlaG9sZGVyIHRlc3QgcHJ2XG4gICAgY29uc3QgdHggPSB7XG4gICAgICB0eFByZWJ1aWxkOiBmaXh0dXJlcy5XUldVbnNpZ25lZFN3ZWVwRVJDMjBUeCxcbiAgICAgIHBydixcbiAgICB9O1xuICAgIC8vIHNpZ24gdHJhbnNhY3Rpb24gb25jZVxuICAgIGNvbnN0IGhhbGZTaWduZWQgPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24odHgpO1xuXG4gICAgY29uc3Qgd3JhcHBlciA9IHt9IGFzIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM7XG4gICAgd3JhcHBlci50eFByZWJ1aWxkID0gaGFsZlNpZ25lZDtcbiAgICB3cmFwcGVyLnR4UHJlYnVpbGQucmVjaXBpZW50cyA9IGhhbGZTaWduZWQuaGFsZlNpZ25lZC5yZWNpcGllbnRzO1xuICAgIHdyYXBwZXIudHhQcmVidWlsZC5nYXNQcmljZSA9IGdhc1ByaWNlLnRvU3RyaW5nKCk7XG4gICAgd3JhcHBlci50eFByZWJ1aWxkLmdhc0xpbWl0ID0gZ2FzTGltaXQudG9TdHJpbmcoKTtcbiAgICB3cmFwcGVyLmlzTGFzdFNpZ25hdHVyZSA9IHRydWU7XG4gICAgd3JhcHBlci53YWxsZXRDb250cmFjdEFkZHJlc3MgPSBmaXh0dXJlcy5XUldVbnNpZ25lZFN3ZWVwRVJDMjBUeC53YWxsZXRDb250cmFjdEFkZHJlc3M7XG4gICAgd3JhcHBlci5wcnYgPSBwcnY7XG5cbiAgICAvLyBzaWduIHRyYW5zYWN0aW9uIHR3aWNlIHdpdGggdGhlIFwiaXNMYXN0U2lnbmF0dXJlXCIgZmxhZ1xuICAgIGNvbnN0IGZpbmFsU2lnbmVkVHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24od3JhcHBlcik7XG4gICAgZmluYWxTaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdldGgnKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSgnMHgnICsgZmluYWxTaWduZWRUeC50eEhleCk7IC8vIGFkZCBhIDB4IGluIGZyb250IG9mIHRoaXMgdHhoZXhcbiAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBvdXRwdXRzID0gcmVidWlsdFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmVidWlsdFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIG91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBvdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGZpeHR1cmVzLldSV1Vuc2lnbmVkU3dlZXBFUkMyMFR4LnJlY2lwaWVudC5hZGRyZXNzKTtcbiAgICBvdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoZml4dHVyZXMuV1JXVW5zaWduZWRTd2VlcEVSQzIwVHgucmVjaXBpZW50LmFtb3VudCk7XG4gIH0pO1xufSk7XG4iXX0=