@bitgo-beta/sdk-coin-flr 1.0.1-beta.873 → 1.0.1-beta.875

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.
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const should = __importStar(require("should"));
40
40
  const sdk_test_1 = require("@bitgo-beta/sdk-test");
41
41
  const sdk_api_1 = require("@bitgo-beta/sdk-api");
42
+ const statics_1 = require("@bitgo-beta/statics");
42
43
  const index_1 = require("../../src/index");
43
44
  const resources_1 = require("../resources");
44
45
  const nock_1 = __importDefault(require("nock"));
@@ -547,9 +548,10 @@ describe('flr', function () {
547
548
  const wallet = new sdk_core_1.Wallet(bitgo, tflrCoin, {});
548
549
  const hopDestinationAddress = 'P-costwo15msvr27szvhhpmah0c38gcml7vm29xjh7tcek8~P-costwo1cwrdtrgf4xh80ncu7palrjw7gn4mpj0n4dxghh~P-costwo1zt9n96hey4fsvnde35n3k4kt5pu7c784dzewzd';
549
550
  const hopAddress = '0x28A05933dC76e4e6c25f35D5c9b2A58769700E76';
550
- const importTxFee = 200000; // Match FlarePTestnet txFee from networks.ts
551
- // Adjusted amount to work backwards from hop amount (50000000): 50000000 - 200000 = 49800000 nanoFLR
552
- const amount = 49800000000000000;
551
+ const flrpCoin = statics_1.coins.get('tflrp');
552
+ const importTxFee = Number(flrpCoin.network.minImportToPFee);
553
+ // Adjusted amount to work backwards from hop amount (50000000): 50000000 - importTxFee nanoFLR
554
+ const amount = (50000000 - importTxFee) * 1e9;
553
555
  const txParams = {
554
556
  recipients: [{ amount, address: hopDestinationAddress }],
555
557
  wallet: wallet,
@@ -606,7 +608,7 @@ describe('flr', function () {
606
608
  };
607
609
  await tflrCoin
608
610
  .verifyTransaction(verifyFlrTransactionOptions)
609
- .should.be.rejectedWith(`Hop amount: ${amount / 1e9 + importTxFee} does not equal original amount: ${amount / 1e9 + importTxFee + 1}`);
611
+ .should.be.rejectedWith(`Hop amount: ${amount / 1e9 + importTxFee} is less than required amount: ${amount / 1e9 + importTxFee + 1}`);
610
612
  });
611
613
  it('should fail verify for changed prebuild hop address', async function () {
612
614
  const verifyFlrTransactionOptions = {
@@ -714,10 +716,12 @@ describe('flr', function () {
714
716
  };
715
717
  await tflrCoin
716
718
  .validateHopPrebuild(wallet, hopPrebuild, originalParams)
717
- .should.be.rejectedWith(/Hop amount: .* does not equal original amount/);
719
+ .should.be.rejectedWith(/Hop amount: .* is less than required amount/);
718
720
  });
719
721
  it('should throw error for Export hop prebuild with mismatched destination', async function () {
720
722
  const wallet = new sdk_core_1.Wallet(bitgo, tflrCoin, {});
723
+ const flrpCoin = statics_1.coins.get('tflrp');
724
+ const minImportToPFee = Number(flrpCoin.network.minImportToPFee);
721
725
  const hopPrebuild = {
722
726
  tx: hopExportTx,
723
727
  id: hopExportTxId,
@@ -736,7 +740,7 @@ describe('flr', function () {
736
740
  recipients: [
737
741
  {
738
742
  address: 'P-costwo1different~P-costwo1address~P-costwo1here',
739
- amount: '49800000000000000', // 50000000 - 200000 (txFee) = 49800000 nanoFLR = 49800000000000000 wei
743
+ amount: String((50000000 - minImportToPFee) * 1e9), // Correct amount so destination check is reached
740
744
  },
741
745
  ],
742
746
  };
@@ -1038,4 +1042,4 @@ describe('Non Bitgo Recovery for Hot Wallets', function () {
1038
1042
  jsonTx.to?.should.equal(resources_1.mockDataNonBitGoRecovery.recoveryDestination);
1039
1043
  });
1040
1044
  });
1041
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Zsci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyxtREFBK0Q7QUFDL0QsaURBQStDO0FBRS9DLDJDQUE0QztBQUc1Qyw0Q0FBbUc7QUFDbkcsZ0RBQXdCO0FBQ3hCLG1EQUF1RTtBQUN2RSx1Q0FBNkQ7QUFDN0QsMkNBQWtEO0FBQ2xELDZDQUErQjtBQUMvQixxREFBOEM7QUFDOUMscURBQXVDO0FBQ3ZDLG9EQUE0QjtBQUU1QixpREFBaUQ7QUFDakQsU0FBUyxTQUFTLENBQUMsRUFBVTtJQUMzQixNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkIsQ0FBQztBQUVELFFBQVEsQ0FBQyxLQUFLLEVBQUU7SUFDZCxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLE9BQU8sQ0FBQztJQUNaLElBQUkseUJBQXlCLENBQUM7SUFFOUIsTUFBTSxRQUFRLEdBQUcsNENBQTRDLENBQUM7SUFDOUQsTUFBTSxXQUFXLEdBQUcsOEJBQWtCLENBQUMsYUFBYSxDQUFDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBFLE1BQU0sQ0FBQztRQUNMLE1BQU0sWUFBWSxHQUNoQixpSEFBaUgsQ0FBQztRQUNwSCxNQUFNLFFBQVEsR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqRCx5QkFBeUI7WUFDdkIsTUFBTTtnQkFDTixNQUFNLENBQUMsSUFBSSxDQUNULFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQy9GLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBCLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxpQkFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDO1FBQ1QsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUM7UUFDdEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFRLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7UUFDMUIsRUFBRSxDQUFDLHNDQUFzQyxFQUFFO1lBQ3pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFHLENBQUMsQ0FBQztZQUNqQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7UUFDMUIsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1lBQ2xDLE9BQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1lBQ25DLFFBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLE9BQU8sR0FBRyw0Q0FBNEMsQ0FBQztZQUM3RCxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFO1lBQ3RDLE1BQU0sVUFBVSxHQUFHLDhCQUFrQixDQUFDLFVBQVUsQ0FBQztZQUNqRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUU7WUFDdEQsTUFBTSxPQUFPLEdBQUcsOEJBQWtCLENBQUMsZ0JBQWdCLENBQUM7WUFDcEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDRCQUE0QixFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QyxTQUFTLENBQUM7WUFDUixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxNQUFNLGVBQWUsR0FBRztnQkFDdEIsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLGdCQUFnQixFQUFFLE1BQU07YUFDekIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRSxNQUFNLFVBQVUsR0FBRztnQkFDakI7b0JBQ0UsT0FBTyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQjtvQkFDNUMsTUFBTSxFQUFFLG9CQUFvQjtpQkFDN0I7YUFDRixDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTyxRQUFnQixDQUFDLDBCQUEwQixDQUFDO2dCQUNoRSxVQUFVO2dCQUNWLElBQUksRUFBRSxRQUF3QzthQUMvQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDaEcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRCxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7WUFDdEQsTUFBTyxRQUFnQjtpQkFDcEIsMEJBQTBCLENBQUM7Z0JBQzFCLFVBQVUsRUFBRSxFQUFFO2dCQUNkLElBQUksRUFBRSxRQUF3QzthQUMvQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSztZQUM5RCxNQUFNLFVBQVUsR0FBRztnQkFDakI7b0JBQ0UsT0FBTyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQjtvQkFDNUMsTUFBTSxFQUFFLG9CQUFvQjtpQkFDN0I7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLDhCQUFrQixDQUFDLFdBQVc7b0JBQ3ZDLE1BQU0sRUFBRSxtQkFBbUI7aUJBQzVCO2FBQ0YsQ0FBQztZQUVGLE1BQU8sUUFBZ0I7aUJBQ3BCLDBCQUEwQixDQUFDO2dCQUMxQixVQUFVO2dCQUNWLElBQUksRUFBRSxRQUF3QzthQUMvQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM5QixFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLFFBQVEsR0FBRyw4QkFBa0IsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUM3QixjQUFjLEVBQUUsUUFBUTthQUN6QixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMzRiwrREFBK0Q7WUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDNUQsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSztZQUN6RCxNQUFNLFFBQVEsR0FBRyw4QkFBa0IsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUM3QixjQUFjLEVBQUUsUUFBUTthQUN6QixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMzRiwrREFBK0Q7WUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDNUQsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUUsS0FBSztZQUMvQyxNQUFNLFFBQVE7aUJBQ1gsa0JBQWtCLENBQUMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUErQixDQUFDO2lCQUM3RSxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEtBQUs7WUFDaEYsTUFBTSxRQUFRO2lCQUNYLGtCQUFrQixDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBK0IsQ0FBQztpQkFDbkUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1FBQ25DLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLO1lBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztZQUV0QixNQUFNLFVBQVUsR0FBRztnQkFDakIsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO2dCQUNoRyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixxQkFBcUIsRUFBRSwyQkFBMkI7YUFDbkQsQ0FBQztZQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixNQUFNLFFBQVE7aUJBQ1gsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFpQixFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztpQkFDckcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxLQUFLO1lBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFVBQVUsRUFBRTtvQkFDVixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFO29CQUNsRixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFO2lCQUNuRjtnQkFDRCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7Z0JBQ3hDLEdBQUcsRUFBRSxJQUFJO2FBQ1YsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLENBQUM7Z0JBQ2hHLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHFCQUFxQixFQUFFLDJCQUEyQjtnQkFDbEQsY0FBYyxFQUFFO29CQUNkLEVBQUUsRUFBRSxLQUFLO29CQUNULEVBQUUsRUFBRSxLQUFLO29CQUNULFNBQVMsRUFBRSxLQUFLO29CQUNoQixTQUFTLEVBQUUsR0FBRztvQkFDZCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxnQkFBZ0I7b0JBQ3hCLFNBQVMsRUFBRSw0Q0FBNEM7b0JBQ3ZELEtBQUssRUFBRSxDQUFDO29CQUNSLFVBQVUsRUFBRSxLQUFLO29CQUNqQixXQUFXLEVBQUUsWUFBWTtpQkFDMUI7YUFDRixDQUFDO1lBRUYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXhCLE1BQU0sUUFBUTtpQkFDWCxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQ3BGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSztZQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUvQyxNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1YsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRTtvQkFDbEYsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRTtpQkFDbkY7Z0JBQ0QsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2FBQ3pDLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRztnQkFDakIsVUFBVSxFQUFFO29CQUNWLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUU7b0JBQ2xGLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUU7aUJBQ25GO2dCQUNELHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHFCQUFxQixFQUFFLDJCQUEyQjthQUNuRCxDQUFDO1lBRUYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXhCLE1BQU0sUUFBUTtpQkFDWCxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQ3BGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNyQix3SUFBd0ksQ0FDekksQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEtBQUs7WUFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFL0MsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO2dCQUNoRyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7YUFDekMsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLENBQUM7Z0JBQ2hHLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHFCQUFxQixFQUFFLDJCQUEyQjthQUNuRCxDQUFDO1lBRUYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXhCLE1BQU0sUUFBUTtpQkFDWCxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQ3BGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsOEJBQThCLEVBQUU7WUFDdkMsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEtBQUs7Z0JBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUUvQyxNQUFNLFFBQVEsR0FBRztvQkFDZixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsQ0FBQztvQkFDckcsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEtBQUssRUFBRSxJQUFJO2lCQUNaLENBQUM7Z0JBRUYsa0ZBQWtGO2dCQUNsRixNQUFNLFVBQVUsR0FBRztvQkFDakIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7b0JBQ2pDLEtBQUssRUFDSCx3R0FBd0c7b0JBQzFHLFdBQVcsRUFBRTt3QkFDWCxVQUFVLEVBQUUsTUFBTTt3QkFDbEIsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUM7d0JBQ3JHLElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFO29CQUNuRSxJQUFJLEVBQUUsTUFBTTtpQkFDYixDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsNkVBQTZFO2dCQUM3RSx5RUFBeUU7Z0JBQ3pFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUM7b0JBQzdELFFBQVE7b0JBQ1IsVUFBVSxFQUFFLFVBQWlCO29CQUM3QixNQUFNO29CQUNOLFlBQVk7b0JBQ1osVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEtBQUs7Z0JBQ3ZGLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO29CQUN6QyxZQUFZLEVBQUU7d0JBQ1osV0FBVyxFQUFFLDRDQUE0QztxQkFDMUQ7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILHlEQUF5RDtnQkFDekQsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLE1BQU07b0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2lCQUN6QyxDQUFDO2dCQUVGLDJFQUEyRTtnQkFDM0UsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLGFBQWEsRUFBRSxrQ0FBa0M7b0JBQ2pELEtBQUssRUFBRSxJQUFJO29CQUNYLElBQUksRUFBRSxNQUFNO29CQUNaLFFBQVEsRUFBRSxjQUFjO2lCQUN6QixDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDN0QsUUFBUSxFQUFFLFFBQWU7b0JBQ3pCLFVBQVUsRUFBRSxVQUFpQjtvQkFDN0IsTUFBTTtvQkFDTixZQUFZO29CQUNaLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO2dCQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDekMsWUFBWSxFQUFFO3dCQUNaLFdBQVcsRUFBRSw0Q0FBNEM7cUJBQzFEO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxNQUFNLFFBQVEsR0FBRztvQkFDZixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2lCQUN6QyxDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixLQUFLLEVBQUUsSUFBSTtvQkFDWCxJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsY0FBYztpQkFDekIsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXhCLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUM7b0JBQzdELFFBQVEsRUFBRSxRQUFlO29CQUN6QixVQUFVLEVBQUUsVUFBaUI7b0JBQzdCLE1BQU07b0JBQ04sWUFBWTtvQkFDWixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSztnQkFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7b0JBQ3pDLFlBQVksRUFBRTt3QkFDWixXQUFXLEVBQUUsNENBQTRDO3FCQUMxRDtpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLE1BQU0sRUFBRSxNQUFNO29CQUNkLGdCQUFnQixFQUFFLHNCQUFzQjtpQkFDekMsQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRztvQkFDakIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsSUFBSSxFQUFFLE1BQU07b0JBQ1osUUFBUSxFQUFFLGNBQWM7aUJBQ3pCLENBQUM7Z0JBRUYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUV4QixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUM3RCxRQUFRLEVBQUUsUUFBZTtvQkFDekIsVUFBVSxFQUFFLFVBQWlCO29CQUM3QixNQUFNO29CQUNOLFlBQVk7b0JBQ1osVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEtBQUs7Z0JBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO29CQUN6QyxZQUFZLEVBQUU7d0JBQ1osV0FBVyxFQUFFLDRDQUE0QztxQkFDMUQ7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE1BQU0sUUFBUSxHQUFHO29CQUNmLElBQUksRUFBRSxXQUFXO29CQUNqQixNQUFNLEVBQUUsTUFBTTtvQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7aUJBQ3pDLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLEtBQUssRUFBRSxJQUFJO29CQUNYLElBQUksRUFBRSxNQUFNO29CQUNaLFFBQVEsRUFBRSxjQUFjO2lCQUN6QixDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDN0QsUUFBUSxFQUFFLFFBQWU7b0JBQ3pCLFVBQVUsRUFBRSxVQUFpQjtvQkFDN0IsTUFBTTtvQkFDTixZQUFZO29CQUNaLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxLQUFLO2dCQUN4RixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDekMsWUFBWSxFQUFFO3dCQUNaLFdBQVcsRUFBRSw0Q0FBNEM7cUJBQzFEO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxNQUFNLFFBQVEsR0FBRztvQkFDZixNQUFNLEVBQUUsTUFBTTtvQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7aUJBQ3pDLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLEtBQUssRUFBRSxJQUFJO29CQUNYLElBQUksRUFBRSxNQUFNO29CQUNaLFFBQVEsRUFBRSxjQUFjO2lCQUN6QixDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDO29CQUNqQixRQUFRLEVBQUUsUUFBZTtvQkFDekIsVUFBVSxFQUFFLFVBQWlCO29CQUM3QixNQUFNO29CQUNOLFlBQVk7b0JBQ1osVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUM7cUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNoRCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLO2dCQUN4RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFL0MsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO29CQUNoRyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7aUJBQ3pDLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsQ0FBQztvQkFDaEcsc0JBQXNCLEVBQUUsQ0FBQztvQkFDekIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsY0FBYztvQkFDeEIscUJBQXFCLEVBQUUsMkJBQTJCO2lCQUNuRCxDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsc0ZBQXNGO2dCQUN0RixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUM3RCxRQUFRO29CQUNSLFVBQVUsRUFBRSxVQUFpQjtvQkFDN0IsTUFBTTtvQkFDTixZQUFZO29CQUNaLFVBQVUsRUFBRSxTQUFTO2lCQUN0QixDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQyxNQUFNLHFCQUFxQixHQUN6QixpSkFBaUosQ0FBQztZQUNwSixNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQztZQUNoRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyw2Q0FBNkM7WUFDekUscUdBQXFHO1lBQ3JHLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7Z0JBQ3hDLEdBQUcsRUFBRSxJQUFJO2dCQUNULElBQUksRUFBRSxRQUFRO2FBQ2YsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ2xFLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHFCQUFxQixFQUFFLDJCQUEyQjtnQkFDbEQsY0FBYyxFQUFFO29CQUNkLEVBQUUsRUFBRSxXQUFXO29CQUNmLEVBQUUsRUFBRSxhQUFhO29CQUNqQixTQUFTLEVBQUUseUJBQXlCO29CQUNwQyxTQUFTLEVBQUUsWUFBWTtvQkFDdkIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFNBQVMsRUFBRSxxQkFBcUI7b0JBQ2hDLEtBQUssRUFBRSxDQUFDO29CQUNSLFVBQVUsRUFDUixvSUFBb0k7b0JBQ3RJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsUUFBUTtpQkFDZjthQUNGLENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXRDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcseUJBQXlCLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBZSxFQUFFLHFDQUFxQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUUsS0FBSztnQkFDcEMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUNuRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzVGLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSztnQkFDOUMsTUFBTSwyQkFBMkIsR0FBRztvQkFDbEMsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFO29CQUNqRyxVQUFVO29CQUNWLE1BQU07b0JBQ04sWUFBWTtpQkFDYixDQUFDO2dCQUVGLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQztxQkFDOUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLGVBQWUsTUFBTSxHQUFHLEdBQUcsR0FBRyxXQUFXLG9DQUN2QyxNQUFNLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxDQUMvQixFQUFFLENBQ0gsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUs7Z0JBQzdELE1BQU0sMkJBQTJCLEdBQUc7b0JBQ2xDLFFBQVE7b0JBQ1IsVUFBVSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUU7b0JBQy9GLE1BQU07b0JBQ04sWUFBWTtpQkFDYixDQUFDO2dCQUNGLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQztxQkFDOUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztZQUMxRixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLO2dCQUNoRCxNQUFNLHlCQUF5QixHQUM3QixpSkFBaUosQ0FBQztnQkFDcEosTUFBTSwyQkFBMkIsR0FBRztvQkFDbEMsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLEVBQUU7b0JBQy9GLFVBQVU7b0JBQ1YsTUFBTTtvQkFDTixZQUFZO2lCQUNiLENBQUM7Z0JBQ0YsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDO3FCQUM5QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDckIsb0JBQW9CLHFCQUFxQix1Q0FBdUMseUJBQXlCLEVBQUUsQ0FDNUcsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7Z0JBQzlELE1BQU0sMkJBQTJCLEdBQUc7b0JBQ2xDLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRTtvQkFDcEYsVUFBVTtvQkFDVixNQUFNO29CQUNOLFlBQVk7aUJBQ2IsQ0FBQztnQkFDRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzVGLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFO1FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWpELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO1lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQjtnQkFDdkQsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsU0FBUyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQjtnQkFDOUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixJQUFJLEVBQUUsUUFBaUI7YUFDeEIsQ0FBQztZQUVGLE1BQU8sUUFBZ0I7aUJBQ3BCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7aUJBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSztZQUMxRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBZSxFQUFFLHFDQUFxQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9GLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixtQkFBbUI7WUFDbkIsTUFBTyxRQUFnQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxLQUFLO1lBQzNFLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRztnQkFDckIsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7d0JBQzVDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxlQUFlO3FCQUM5QztpQkFDRjthQUNGLENBQUM7WUFFRixNQUFPLFFBQWdCO2lCQUNwQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQztpQkFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLO1lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRztnQkFDckIsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxtREFBbUQ7d0JBQzVELE1BQU0sRUFBRSxtQkFBbUIsRUFBRSx1RUFBdUU7cUJBQ3JHO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU8sUUFBZ0I7aUJBQ3BCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDO2lCQUN4RCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTthQUNoQyxDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBYSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSztZQUN4RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFlLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVyRixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRztnQkFDckIsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsRUFBRSxFQUFFLGFBQWE7Z0JBQ2pCLFNBQVMsRUFBRSx5QkFBeUI7Z0JBQ3BDLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixTQUFTLEVBQUUsOEJBQWtCLENBQUMsZ0JBQWdCO2dCQUM5QyxLQUFLLEVBQUUsQ0FBQztnQkFDUixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsV0FBVyxFQUFFLFlBQVk7Z0JBQ3pCLElBQUksRUFBRSxRQUFpQjthQUN4QixDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtnQkFDL0IsY0FBYyxFQUFFLGNBQWM7YUFDL0IsQ0FBQztZQUVGLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLE1BQWEsQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM5QixFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSztZQUMvRCxNQUFNLE1BQU0sR0FBRztnQkFDYixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFhLENBQUMsQ0FBQztZQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLO1lBQ3hFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXJGLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRztnQkFDYixLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtnQkFDcEcsY0FBYyxFQUFFLGNBQWM7Z0JBQzlCLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQztZQUVGLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDLE1BQWEsQ0FBQyxDQUFDO1lBQ2xELFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdEMsU0FBUyxDQUFDO1lBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUs7WUFDeEQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDdkQsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7WUFDdEQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxLQUFLO2dCQUNWLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sRUFBRSxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7YUFDeEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEtBQUs7WUFDM0QsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDdkQsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULE1BQU0sRUFBRSxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7YUFDeEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtGQUFrRixFQUFFLEtBQUs7WUFDMUYsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFaEUsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULE1BQU0sRUFBRSxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1RixJQUFJLEVBQUUsUUFBaUI7YUFDeEIsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLG1CQUFtQixHQUFHO2dCQUMxQixXQUFXLEVBQUUsTUFBTTtnQkFDbkIsZ0JBQWdCLEVBQUUsTUFBTTthQUN6QixDQUFDO1lBRUYsSUFBQSxjQUFJLEVBQUMsNEJBQTRCLENBQUM7aUJBQy9CLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDMUIsS0FBSyxDQUFDO2dCQUNMLEdBQUcsRUFBRSxJQUFJO2dCQUNULFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUVuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQ3hDLEdBQUcsRUFBRSxJQUFJO2dCQUNULFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLO1lBQ2xELE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUM7WUFFRixJQUFBLGNBQUksRUFBQyw0QkFBNEIsQ0FBQztpQkFDL0IsR0FBRyxDQUFDLHFCQUFxQixDQUFDO2lCQUMxQixLQUFLLENBQUM7Z0JBQ0wsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDeEMsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ3BCLEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLEtBQUssR0FBRyw4QkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDL0MsTUFBTSxJQUFJLEdBQUksUUFBUSxDQUFDLFdBQTBCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5FLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFN0Isd0NBQXdDO1lBQ3hDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxHQUFJLFFBQVEsQ0FBQyxXQUEwQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUksUUFBUSxDQUFDLFdBQTBCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5FLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLDhEQUE4RCxFQUFFO0lBQ3ZFLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxrQkFBNEIsQ0FBQztJQUNyRixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztJQUN0QyxNQUFNLHlCQUF5QixHQUFHLFdBQVcsQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDckIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBRTdCLEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RSxJQUFBLGNBQUksRUFBQyxXQUFXLENBQUM7YUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDO2FBQ1gsS0FBSyxFQUFFO2FBQ1AsS0FBSyxDQUFDLGlDQUFxQixDQUFDLGdCQUFnQixDQUFDO2FBQzdDLEtBQUssQ0FBQyxHQUFHLEVBQUUsaUNBQXFCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN2RCxJQUFBLGNBQUksRUFBQyxXQUFXLENBQUM7YUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDO2FBQ1gsS0FBSyxDQUFDLGlDQUFxQixDQUFDLGlCQUFpQixDQUFDO2FBQzlDLEtBQUssQ0FBQyxHQUFHLEVBQUUsaUNBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4RCxNQUFNLFFBQVEsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQzFDLE9BQU8sRUFBRSxpQ0FBcUIsQ0FBQyxPQUFPO1lBQ3RDLFNBQVMsRUFBRSxpQ0FBcUIsQ0FBQyxTQUFTO1lBQzFDLHFCQUFxQixFQUFFLGlDQUFxQixDQUFDLGlCQUFpQjtZQUM5RCxtQkFBbUIsRUFBRSxpQ0FBcUIsQ0FBQyxtQkFBbUI7WUFDOUQsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUU7WUFDN0YsUUFBUSxFQUFFLGFBQWE7WUFDdkIsdUJBQXVCLEVBQUU7Z0JBQ3ZCLEtBQUssRUFBRSxRQUFRO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2FBQ25CO1NBQ0YsQ0FBQyxDQUF5QixDQUFDO1FBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUU7SUFDN0MsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sV0FBVyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGtCQUE0QixDQUFDO0lBQ3JGLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDO0lBQ3RDLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDO0lBQzlDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUNyQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlELElBQUEsY0FBSSxFQUFDLFdBQVcsQ0FBQzthQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7YUFDWCxLQUFLLEVBQUU7YUFDUCxLQUFLLENBQUMsb0NBQXdCLENBQUMsZ0JBQWdCLENBQUM7YUFDaEQsS0FBSyxDQUFDLEdBQUcsRUFBRSxvQ0FBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFELElBQUEsY0FBSSxFQUFDLFdBQVcsQ0FBQzthQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7YUFDWCxLQUFLLENBQUMsb0NBQXdCLENBQUMsaUJBQWlCLENBQUM7YUFDakQsS0FBSyxDQUFDLEdBQUcsRUFBRSxvQ0FBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTNELE1BQU0sUUFBUSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3pDLE9BQU8sRUFBRSxvQ0FBd0IsQ0FBQyxXQUFXO1lBQzdDLFNBQVMsRUFBRSxvQ0FBd0IsQ0FBQyxhQUFhO1lBQ2pELHFCQUFxQixFQUFFLG9DQUF3QixDQUFDLGlCQUFpQjtZQUNqRSxnQkFBZ0IsRUFBRSxvQ0FBd0IsQ0FBQyxnQkFBZ0I7WUFDM0QsbUJBQW1CLEVBQUUsb0NBQXdCLENBQUMsbUJBQW1CO1lBQ2pFLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFO1lBQzdGLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLHVCQUF1QixFQUFFO2dCQUN2QixLQUFLLEVBQUUsUUFBUTtnQkFDZixRQUFRLEVBQUUsUUFBUTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxnQ0FBMkIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEscUJBQWMsRUFBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUF3QixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuXG5pbXBvcnQgeyBGbHIsIFRmbHIgfSBmcm9tICcuLi8uLi9zcmMvaW5kZXgnO1xuaW1wb3J0IHsgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NyYy9pZmFjZSc7XG5pbXBvcnQgeyBVbnNpZ25lZFN3ZWVwVHhNUEN2MiB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBtb2NrRGF0YVVuc2lnbmVkU3dlZXAsIG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeSwgRVhQT1JUX0NfVEVTVF9EQVRBIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0IHsgY29tbW9uLCBUcmFuc2FjdGlvblR5cGUsIFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEZlZU1hcmtldEVJUDE1NTlUcmFuc2FjdGlvbiB9IGZyb20gJ0BldGhlcmV1bWpzL3R4JztcbmltcG9ydCB7IHN0cmlwSGV4UHJlZml4IH0gZnJvbSAnQGV0aGVyZXVtanMvdXRpbCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyBzZWNwMjU2azEgZnJvbSAnc2VjcDI1NmsxJztcbmltcG9ydCBLZWNjYWsgZnJvbSAna2VjY2FrJztcblxuLy8gSGVscGVyIHRvIGNhbGN1bGF0ZSB0eCBoYXNoIGxpa2UgRmxyLmdldFR4SGFzaFxuZnVuY3Rpb24gZ2V0VHhIYXNoKHR4OiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBoYXNoID0gS2VjY2FrKCdrZWNjYWsyNTYnKTtcbiAgaGFzaC51cGRhdGUodHguc3RhcnRzV2l0aCgnMHgnKSA/IHR4LnNsaWNlKDIpIDogdHgsICdoZXgnKTtcbiAgcmV0dXJuIGhhc2guZGlnZXN0KCk7XG59XG5cbmRlc2NyaWJlKCdmbHInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgdGZsckNvaW47XG4gIGxldCBmbHJDb2luO1xuICBsZXQgaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZTtcblxuICBjb25zdCBhZGRyZXNzMiA9ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnO1xuICBjb25zdCBob3BFeHBvcnRUeCA9IEVYUE9SVF9DX1RFU1RfREFUQS5mdWxsc2lnbnR4SGV4O1xuICBjb25zdCBob3BFeHBvcnRUeElkID0gJzB4JyArIGdldFR4SGFzaChob3BFeHBvcnRUeCkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29LZXlYcHJ2ID1cbiAgICAgICd4cHJ2OXMyMVpyUUgxNDNLM3RwV0JIV2UzMXNMb1hOUlE5QXZSWUpnaXRrS3hRNEFURlFNd3ZyN2hITnFZUlVuUzdQc2p6QjdhSzFWeHFITHVOUWpqMXNja0oySndvMnF4bXN2ZWp3RUNTcEZNZkMnO1xuICAgIGNvbnN0IGJpdGdvS2V5ID0gYmlwMzIuZnJvbUJhc2U1OChiaXRnb0tleVhwcnYpO1xuICAgIGlmICghYml0Z29LZXkucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcml2YXRlS2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IGJpdGdvWHB1YiA9IGJpdGdvS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcblxuICAgIGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmUgPVxuICAgICAgJzB4YWEnICtcbiAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICBzZWNwMjU2azEuZWNkc2FTaWduKEJ1ZmZlci5mcm9tKGhvcEV4cG9ydFR4SWQuc2xpY2UoMiksICdoZXgnKSwgYml0Z29LZXkucHJpdmF0ZUtleSkuc2lnbmF0dXJlXG4gICAgICApLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcignZmxyJywgRmxyLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RmbHInLCBUZmxyLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS5oc21YcHViID0gYml0Z29YcHViO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICB0ZmxyQ29pbiA9IGJpdGdvLmNvaW4oJ3RmbHInKSBhcyBUZmxyO1xuICAgIGZsckNvaW4gPSBiaXRnby5jb2luKCdmbHInKSBhcyBGbHI7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCYXNpYyBDb2luIEluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8gZm9yIGZscicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZsciA9IGJpdGdvLmNvaW4oJ2ZscicpO1xuXG4gICAgICBmbHIuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRmxyKTtcbiAgICAgIGZsci5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgnZmxyJyk7XG4gICAgICBmbHIuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdmbHInKTtcbiAgICAgIGZsci5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnRmxhcmUnKTtcbiAgICAgIGZsci5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuICAgICAgZmxyLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgZmxyLmFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbyBmb3IgdGZscicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRmbHIgPSBiaXRnby5jb2luKCd0ZmxyJyk7XG5cbiAgICAgIHRmbHIuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGZscik7XG4gICAgICB0ZmxyLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0ZmxyJyk7XG4gICAgICB0ZmxyLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnZmxyJyk7XG4gICAgICB0ZmxyLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IGZsYXJlJyk7XG4gICAgICB0ZmxyLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWUxOCk7XG4gICAgICB0ZmxyLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgdGZsci5hbGxvd3NBY2NvdW50Q29uc29saWRhdGlvbnMoKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUC1DaGFpbiBNZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZscnAgZm9yIG1haW5uZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoZmxyQ29pbiBhcyBhbnkpLmdldEZsclAoKS5zaG91bGQuZXF1YWwoJ2ZscnAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRmbHJwIGZvciB0ZXN0bmV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgKHRmbHJDb2luIGFzIGFueSkuZ2V0RmxyUCgpLnNob3VsZC5lcXVhbCgndGZscnAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHZhbGlkIGV0aCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknO1xuICAgICAgdGZsckNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGZsckNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBQLWNoYWluIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwQWRkcmVzc2VzID0gRVhQT1JUX0NfVEVTVF9EQVRBLnBBZGRyZXNzZXM7XG4gICAgICBmb3IgKGNvbnN0IGFkZHIgb2YgcEFkZHJlc3Nlcykge1xuICAgICAgICB0ZmxyQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBmbHJDb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgUC1jaGFpbiBtdWx0aXNpZyBhZGRyZXNzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcztcbiAgICAgIHRmbHJDb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBmbHJDb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgZW1wdHkgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRmbHJDb2luLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIGZsckNvaW4uaXNWYWxpZEFkZHJlc3MoJycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9rZW4gQ2hlY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGlzVG9rZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZmxyQ29pbi5pc1Rva2VuKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICBmbHJDb2luLmlzVG9rZW4oKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hvcCBUcmFuc2FjdGlvbiBQYXJhbWV0ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBob3AgdHJhbnNhY3Rpb24gcGFyYW1ldGVycyB3aXRoIGdhc1ByaWNlTWF4ID4gMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tGZWVFc3RpbWF0ZSA9IHtcbiAgICAgICAgZmVlRXN0aW1hdGU6IDEyMDAwMCxcbiAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogNTAwMDAwLFxuICAgICAgfTtcbiAgICAgIHNhbmRib3guc3R1Yih0ZmxyQ29pbiwgJ2ZlZUVzdGltYXRlJykucmVzb2x2ZXMobW9ja0ZlZUVzdGltYXRlKTtcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKHRmbHJDb2luIGFzIGFueSkuY3JlYXRlSG9wVHJhbnNhY3Rpb25QYXJhbXMoe1xuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBrZXlvZiB0eXBlb2YgVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaG9wUGFyYW1zJyk7XG4gICAgICByZXN1bHQuaG9wUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnRpZXMoWyd1c2VyUmVxU2lnJywgJ2dhc1ByaWNlTWF4JywgJ3BheW1lbnRJZCcsICdnYXNMaW1pdCddKTtcbiAgICAgIHJlc3VsdC5ob3BQYXJhbXMudXNlclJlcVNpZy5zaG91bGQuZXF1YWwoJzB4Jyk7XG4gICAgICByZXN1bHQuaG9wUGFyYW1zLmdhc1ByaWNlTWF4LnNob3VsZC5iZS5hYm92ZSgwKTtcbiAgICAgIHJlc3VsdC5ob3BQYXJhbXMucGF5bWVudElkLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgcmVzdWx0LmhvcFBhcmFtcy5nYXNMaW1pdC5zaG91bGQuZXF1YWwoNTAwMDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgbm8gcmVjaXBpZW50cyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0ICh0ZmxyQ29pbiBhcyBhbnkpXG4gICAgICAgIC5jcmVhdGVIb3BUcmFuc2FjdGlvblBhcmFtcyh7XG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMga2V5b2YgdHlwZW9mIFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ211c3Qgc2VuZCB0byBleGFjdGx5IDEgcmVjaXBpZW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIG1vcmUgdGhhbiAxIHJlY2lwaWVudCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogRVhQT1JUX0NfVEVTVF9EQVRBLmNIZXhBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogJzUwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGF3YWl0ICh0ZmxyQ29pbiBhcyBhbnkpXG4gICAgICAgIC5jcmVhdGVIb3BUcmFuc2FjdGlvblBhcmFtcyh7XG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBrZXlvZiB0eXBlb2YgVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbXVzdCBzZW5kIHRvIGV4YWN0bHkgMSByZWNpcGllbnQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGFuIHVuc2lnbmVkIGV4cG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBFWFBPUlRfQ19URVNUX0RBVEE7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCB0ZmxyQ29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogdGVzdERhdGEudW5zaWduZWRUeEhleCxcbiAgICAgICAgY3Jvc3NDaGFpblR5cGU6ICdleHBvcnQnLFxuICAgICAgfSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwodGVzdERhdGEuY0hleEFkZHJlc3MudG9Mb3dlckNhc2UoKSk7XG4gICAgICAvLyBPdXRwdXQgYWRkcmVzcyBpcyB0aGUgc29ydGVkIFAtY2hhaW4gYWRkcmVzc2VzIGpvaW5lZCB3aXRoIH5cbiAgICAgIGNvbnN0IHNvcnRlZFBBZGRyZXNzZXMgPSB0ZXN0RGF0YS5wQWRkcmVzc2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oJ34nKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHNvcnRlZFBBZGRyZXNzZXMpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEV4cGxhaW4uZmVlKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mZWUpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgZXhwb3J0IGluIEMgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9DX1RFU1RfREFUQTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IHRmbHJDb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4LFxuICAgICAgICBjcm9zc0NoYWluVHlwZTogJ2V4cG9ydCcsXG4gICAgICB9KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5pbnB1dHNbMF0uYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5jSGV4QWRkcmVzcy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIC8vIE91dHB1dCBhZGRyZXNzIGlzIHRoZSBzb3J0ZWQgUC1jaGFpbiBhZGRyZXNzZXMgam9pbmVkIHdpdGggflxuICAgICAgY29uc3Qgc29ydGVkUEFkZHJlc3NlcyA9IHRlc3REYXRhLnBBZGRyZXNzZXMuc2xpY2UoKS5zb3J0KCkuam9pbignficpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoc29ydGVkUEFkZHJlc3Nlcyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hbW91bnQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4RXhwbGFpbi5mZWUpO1xuICAgICAgdHhFeHBsYWluLmZlZS5mZWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZlZSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtaXNzaW5nIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgLmV4cGxhaW5UcmFuc2FjdGlvbih7IGNyb3NzQ2hhaW5UeXBlOiAnZXhwb3J0JyB9IGFzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHR4SGV4IGluIGV4cGxhaW4gdHggcGFyYW1ldGVycycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1pc3NpbmcgZmVlSW5mbyBmb3Igbm9uLWNyb3NzQ2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAuZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6ICcweDEyMycgfSBhcyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyBmZWVJbmZvIGluIGV4cGxhaW4gdHggcGFyYW1ldGVycycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gVmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IHdoZW4gY2xpZW50IHR4UGFyYW1zIGFyZSBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcblxuICAgICAgY29uc3QgdHhQYXJhbXMgPSBudWxsO1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfV0sXG4gICAgICAgIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDAsXG4gICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgaXNCYXRjaDogZmFsc2UsXG4gICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICdmYWtlV2FsbGV0Q29udHJhY3RBZGRyZXNzJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtczogdHhQYXJhbXMgYXMgYW55LCB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB0eFByZWJ1aWxkIHRoYXQgaXMgYm90aCBiYXRjaCBhbmQgaG9wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcblxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHgxMzc0YTIwNDY2NjFmOTE0ZDE2ODdkODVkYmJjZWI5YWM3OTEwYTI5JyB9LFxuICAgICAgICAgIHsgYW1vdW50OiAnMjUwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgICBob3A6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICczNTAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfV0sXG4gICAgICAgIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDAsXG4gICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgaXNCYXRjaDogdHJ1ZSxcbiAgICAgICAgY29pbjogJ3RmbHInLFxuICAgICAgICB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcsXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogJ2Zha2VXYWxsZXRDb250cmFjdEFkZHJlc3MnLFxuICAgICAgICBob3BUcmFuc2FjdGlvbjoge1xuICAgICAgICAgIHR4OiAnMHgwJyxcbiAgICAgICAgICBpZDogJzB4MCcsXG4gICAgICAgICAgc2lnbmF0dXJlOiAnMHgwJyxcbiAgICAgICAgICBwYXltZW50SWQ6ICcwJyxcbiAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwMDAwMDAwMDAwMDAsXG4gICAgICAgICAgcmVjaXBpZW50OiAnMHgxMzc0YTIwNDY2NjFmOTE0ZDE2ODdkODVkYmJjZWI5YWM3OTEwYTI5JyxcbiAgICAgICAgICBub25jZTogMCxcbiAgICAgICAgICB1c2VyUmVxU2lnOiAnMHgwJyxcbiAgICAgICAgICBnYXNQcmljZU1heDogNTAwMDAwMDAwMDAwLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG5cbiAgICAgIGF3YWl0IHRmbHJDb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4IGNhbm5vdCBiZSBib3RoIGEgYmF0Y2ggYW5kIGhvcCB0cmFuc2FjdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYSB0eFByZWJ1aWxkIHdpdGggbW9yZSB0aGFuIG9uZSByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHsgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH0sXG4gICAgICAgICAgeyBhbW91bnQ6ICcyNTAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4N2U4NWJkYzI3YzA1MGUzOTA1ZWJmNGI4ZTYzNGQ5YWQ2ZWRkMGRlNicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfSxcbiAgICAgICAgICB7IGFtb3VudDogJzI1MDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JyB9LFxuICAgICAgICBdLFxuICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGlzQmF0Y2g6IHRydWUsXG4gICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICdmYWtlV2FsbGV0Q29udHJhY3RBZGRyZXNzJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZDogdHhQcmVidWlsZCBhcyBhbnksIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGB0ZmxyIGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgdHhQcmVidWlsZCBmcm9tIHRoZSBiaXRnbyBzZXJ2ZXIgd2l0aCB0aGUgd3JvbmcgY29pbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfV0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH1dLFxuICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGlzQmF0Y2g6IGZhbHNlLFxuICAgICAgICBjb2luOiAnYnRjJyxcbiAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICdmYWtlV2FsbGV0Q29udHJhY3RBZGRyZXNzJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZDogdHhQcmVidWlsZCBhcyBhbnksIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdjb2luIGluIHR4UHJlYnVpbGQgZGlkIG5vdCBtYXRjaCB0aGF0IGluIHR4UGFyYW1zIHN1cHBsaWVkIGJ5IGNsaWVudCcpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RTUyBUcmFuc2FjdGlvbiBWZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIFRTUyB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRob3V0IHR4UHJlYnVpbGQucmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcblxuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHg0ZTFlM2Q0ODU2YWQ4YjMzMzUyZWIzYWRkNWZmMTJlYTMyMDYxNjlhJyB9XSxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRTUyB0eFByZWJ1aWxkIHR5cGljYWxseSBoYXMgYnVpbGRQYXJhbXMucmVjaXBpZW50cyBidXQgbm90IHJlY2lwaWVudHMgZGlyZWN0bHlcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdmYWtlLXR4LXJlcXVlc3QtaWQnLFxuICAgICAgICAgIHR4SGV4OlxuICAgICAgICAgICAgJzAyZjE3MjgxZDkwMjg1MGJhNDNiNzQwMjgzMDYxYTgwOTQ0ZTFlM2Q0ODU2YWQ4YjMzMzUyZWIzYWRkNWZmMTJlYTMyMDYxNjlhODgwMTYzNDU3ODVkOGEwMDAwODBjMDgwODA4MCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweDRlMWUzZDQ4NTZhZDhiMzMzNTJlYjNhZGQ1ZmYxMmVhMzIwNjE2OWEnLCBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnIH1dLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHsgZmVlOiAxMDAwMDAwMDAwMDgwMDAwMCwgZmVlU3RyaW5nOiAnMTAwMDAwMDAwMDA4MDAwMDAnIH0sXG4gICAgICAgICAgY29pbjogJ3RmbHInLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIC8vIFdoZW4gd2FsbGV0VHlwZSBpcyAndHNzJywgaXQgc2hvdWxkIGRlbGVnYXRlIHRvIHBhcmVudCdzIHZlcmlmeVRyYW5zYWN0aW9uXG4gICAgICAgIC8vIHdoaWNoIGhhbmRsZXMgVFNTIHRyYW5zYWN0aW9ucyB3aXRob3V0IHJlcXVpcmluZyB0eFByZWJ1aWxkLnJlY2lwaWVudHNcbiAgICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgdGZsckNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IFRTUyBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uIHdoZW4gdHhQcmVidWlsZCBoYXMgY29uc29saWRhdGVJZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHtcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0eFBhcmFtcyB3aXRob3V0IHJlY2lwaWVudHMgKGFzIGluIGNvbnNvbGlkYXRpb24gZmxvdylcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0eFByZWJ1aWxkIHdpdGggY29uc29saWRhdGVJZCAoc2V0IGJ5IHNlcnZlciBkdXJpbmcgY29uc29saWRhdGlvbiBidWlsZClcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNjhhN2Q1ZDBjNjZlNzRlMjE2Yjk3MTczYmQ1NThjNmQnLFxuICAgICAgICAgIHR4SGV4OiAnMHgnLFxuICAgICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgICB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG5cbiAgICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgdGZsckNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyBhcyBhbnksXG4gICAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZCBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgVFNTIHRyYW5zYWN0aW9uIHdoZW4gdHhQYXJhbXMudHlwZSBpcyBjb25zb2xpZGF0ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHtcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICB0eXBlOiAnY29uc29saWRhdGUnLFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB0eEhleDogJzB4JyxcbiAgICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMgYXMgYW55LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IFRTUyB0cmFuc2FjdGlvbiB3aXRoIGFjY2VsZXJhdGlvbiB0eXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge1xuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgYmFzZUFkZHJlc3M6ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB0eEhleDogJzB4JyxcbiAgICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMgYXMgYW55LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IFRTUyB0cmFuc2FjdGlvbiB3aXRoIGZpbGxOb25jZSB0eXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge1xuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgYmFzZUFkZHJlc3M6ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHR5cGU6ICdmaWxsTm9uY2UnLFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB0eEhleDogJzB4JyxcbiAgICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMgYXMgYW55LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IFRTUyB0cmFuc2FjdGlvbiB3aXRob3V0IHJlY2lwaWVudHMsIGNvbnNvbGlkYXRlSWQsIG9yIHZhbGlkIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7XG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBiYXNlQWRkcmVzczogJzB4MTc0Y2ZkODIzYWY4Y2UyN2VkMGFmZWUzZmNmM2MzYmEyNTkxMTZiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiAnMHgnLFxuICAgICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgICB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG5cbiAgICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zIGFzIGFueSxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyB0eFBhcmFtcycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3RpbGwgdXNlIEZMUi1zcGVjaWZpYyB2ZXJpZmljYXRpb24gZm9yIG5vbi1UU1Mgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcblxuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfV0sXG4gICAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHgxMzc0YTIwNDY2NjFmOTE0ZDE2ODdkODVkYmJjZWI5YWM3OTEwYTI5JyB9XSxcbiAgICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLFxuICAgICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICAgIGlzQmF0Y2g6IGZhbHNlLFxuICAgICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgICB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcsXG4gICAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnZmFrZVdhbGxldENvbnRyYWN0QWRkcmVzcycsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG5cbiAgICAgICAgLy8gV2l0aG91dCB3YWxsZXRUeXBlIG9yIHdpdGggd2FsbGV0VHlwZTogJ29uY2hhaW4nLCBzaG91bGQgdXNlIEZMUidzIG93biB2ZXJpZmljYXRpb25cbiAgICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgdGZsckNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ29uY2hhaW4nLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hvcCBleHBvcnQgdHggdmVyaWZ5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IGhvcERlc3RpbmF0aW9uQWRkcmVzcyA9XG4gICAgICAgICdQLWNvc3R3bzE1bXN2cjI3c3p2aGhwbWFoMGMzOGdjbWw3dm0yOXhqaDd0Y2VrOH5QLWNvc3R3bzFjd3JkdHJnZjR4aDgwbmN1N3BhbHJqdzdnbjRtcGowbjRkeGdoaH5QLWNvc3R3bzF6dDluOTZoZXk0ZnN2bmRlMzVuM2s0a3Q1cHU3Yzc4NGR6ZXd6ZCc7XG4gICAgICBjb25zdCBob3BBZGRyZXNzID0gJzB4MjhBMDU5MzNkQzc2ZTRlNmMyNWYzNUQ1YzliMkE1ODc2OTcwMEU3Nic7XG4gICAgICBjb25zdCBpbXBvcnRUeEZlZSA9IDIwMDAwMDsgLy8gTWF0Y2ggRmxhcmVQVGVzdG5ldCB0eEZlZSBmcm9tIG5ldHdvcmtzLnRzXG4gICAgICAvLyBBZGp1c3RlZCBhbW91bnQgdG8gd29yayBiYWNrd2FyZHMgZnJvbSBob3AgYW1vdW50ICg1MDAwMDAwMCk6IDUwMDAwMDAwIC0gMjAwMDAwID0gNDk4MDAwMDAgbmFub0ZMUlxuICAgICAgY29uc3QgYW1vdW50ID0gNDk4MDAwMDAwMDAwMDAwMDA7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50LCBhZGRyZXNzOiBob3BEZXN0aW5hdGlvbkFkZHJlc3MgfV0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgICBob3A6IHRydWUsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnNTEwMDAwNTAwMDAwMDAwMDAnLCBhZGRyZXNzOiBob3BBZGRyZXNzIH1dLFxuICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGlzQmF0Y2g6IGZhbHNlLFxuICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnZmFrZVdhbGxldENvbnRyYWN0QWRkcmVzcycsXG4gICAgICAgIGhvcFRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgdHg6IGhvcEV4cG9ydFR4LFxuICAgICAgICAgIGlkOiBob3BFeHBvcnRUeElkLFxuICAgICAgICAgIHNpZ25hdHVyZTogaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZSxcbiAgICAgICAgICBwYXltZW50SWQ6ICc0OTMzMzQ5OTg0JyxcbiAgICAgICAgICBnYXNQcmljZTogJzUwJyxcbiAgICAgICAgICBnYXNMaW1pdDogMSxcbiAgICAgICAgICBhbW91bnQ6ICc1MDAwMDAwMCcsXG4gICAgICAgICAgcmVjaXBpZW50OiBob3BEZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgICAgbm9uY2U6IDAsXG4gICAgICAgICAgdXNlclJlcVNpZzpcbiAgICAgICAgICAgICcweDA2ZmQwYjFmODg1OWE0MGQ5ZmIyZDFhNjVkNTRkYTVkNjQ1YTFkODFiYmI4YzFjNWIwMzcwNTE4NDNlYzBkM2MyMjQzM2VjN2Y1MGNjOTdmYTA0MWNiZjhkOWZmNWRkZjdlZDQxZjcyYTA4ZmEzZjE5ODNmZDY1MWEzM2E0NDQxJyxcbiAgICAgICAgICBnYXNQcmljZU1heDogNzE4NzUwMDAwMCxcbiAgICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAgICAgYmVmb3JlKCgpID0+IHtcbiAgICAgICAgdHhQcmVidWlsZC5ob3BUcmFuc2FjdGlvbi5zaWduYXR1cmUgPSBob3BFeHBvcnRUeEJpdGdvU2lnbmF0dXJlO1xuICAgICAgfSk7XG5cbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBzYW5kYm94LnN0dWIodGZsckNvaW4gYXMgYW55LCAndmVyaWZ5U2lnbmF0dXJlRm9yQXRvbWljVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBzdWNjZXNzZnVsbHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucyA9IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH07XG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSBmb3IgYW1vdW50IHBsdXMgMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5RmxyVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgIHR4UGFyYW1zOiB7IC4uLnR4UGFyYW1zLCByZWNpcGllbnRzOiBbeyBhbW91bnQ6IGFtb3VudCArIDFlOSwgYWRkcmVzczogaG9wRGVzdGluYXRpb25BZGRyZXNzIH1dIH0sXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IHRmbHJDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgIGBIb3AgYW1vdW50OiAke2Ftb3VudCAvIDFlOSArIGltcG9ydFR4RmVlfSBkb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCBhbW91bnQ6ICR7XG4gICAgICAgICAgICAgIGFtb3VudCAvIDFlOSArIGltcG9ydFR4RmVlICsgMVxuICAgICAgICAgICAgfWBcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZm9yIGNoYW5nZWQgcHJlYnVpbGQgaG9wIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IC4uLnR4UHJlYnVpbGQsIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IGFkZHJlc3MyLCBhbW91bnQ6ICc1MTAwMDA1MDAwMDAwMDAwMCcgfV0gfSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih2ZXJpZnlGbHJUcmFuc2FjdGlvbk9wdGlvbnMpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYHJlY2lwaWVudCBhZGRyZXNzIG9mIHR4UHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggaG9wIGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IGZvciBjaGFuZ2VkIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGhvcERlc3RpbmF0aW9uQWRkcmVzc0RpZmYgPVxuICAgICAgICAgICdQLWNvc3R3bzE1bXN2cjI3c3p2aGhwbWFoMGMzOGdjbWw3dm0yOXhqaDd0Y2VrOX5QLWNvc3R3bzFjd3JkdHJnZjR4aDgwbmN1N3BhbHJqdzdnbjRtcGowbjRkeGdoaH5QLWNvc3R3bzF6dDluOTZoZXk0ZnN2bmRlMzVuM2s0a3Q1cHU3Yzc4NGR6ZXd6ZCc7XG4gICAgICAgIGNvbnN0IHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICB0eFBhcmFtczogeyAuLi50eFBhcmFtcywgcmVjaXBpZW50czogW3sgYW1vdW50OiBhbW91bnQsIGFkZHJlc3M6IGhvcERlc3RpbmF0aW9uQWRkcmVzc0RpZmYgfV0gfSxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRmbHJDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgIGBIb3AgZGVzdGluYXRpb246ICR7aG9wRGVzdGluYXRpb25BZGRyZXNzfSBkb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCByZWNpcGllbnQ6ICR7aG9wRGVzdGluYXRpb25BZGRyZXNzRGlmZn1gXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBpZiB3YWxsZXRJZCBpcyB1c2VkIGluc3RlYWQgb2YgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5RmxyVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgIHR4UGFyYW1zOiB7IC4uLnR4UGFyYW1zLCByZWNpcGllbnRzOiBbeyBhbW91bnQ6IGFtb3VudCwgd2FsbGV0SWQ6ICdzYW1lIHdhbGxldCcgfV0gfSxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlSG9wUHJlYnVpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmFsaWRhdGVIb3BTYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHZhbGlkYXRlSG9wU2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIEhTTSBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuICAgICAgY29uc3QgaG9wUHJlYnVpbGQgPSB7XG4gICAgICAgIHR4OiBob3BFeHBvcnRUeCxcbiAgICAgICAgaWQ6IGhvcEV4cG9ydFR4SWQsXG4gICAgICAgIHNpZ25hdHVyZTogJzB4JyArICdhYScucmVwZWF0KDY1KSwgLy8gSW52YWxpZCBzaWduYXR1cmVcbiAgICAgICAgcGF5bWVudElkOiAnMTIzNDUnLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGFtb3VudDogMTAwMDAwMDAwMDAwMDAwMCxcbiAgICAgICAgcmVjaXBpZW50OiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcyxcbiAgICAgICAgbm9uY2U6IDAsXG4gICAgICAgIHVzZXJSZXFTaWc6ICcweCcsXG4gICAgICAgIGdhc1ByaWNlTWF4OiA1MDAwMDAwMDAwMDAsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnIGFzIGNvbnN0LFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgKHRmbHJDb2luIGFzIGFueSlcbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQod2FsbGV0LCBob3BQcmVidWlsZClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0hvcCB0eGlkIHNpZ25hdHVyZSBpbnZhbGlkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIEV4cG9ydCBob3AgcHJlYnVpbGQgc3VjY2Vzc2Z1bGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdmFsaWRhdGVIb3BTYW5kYm94LnN0dWIodGZsckNvaW4gYXMgYW55LCAndmVyaWZ5U2lnbmF0dXJlRm9yQXRvbWljVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IGhvcFByZWJ1aWxkID0ge1xuICAgICAgICB0eDogaG9wRXhwb3J0VHgsXG4gICAgICAgIGlkOiBob3BFeHBvcnRUeElkLFxuICAgICAgICBzaWduYXR1cmU6IGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmUsXG4gICAgICAgIHBheW1lbnRJZDogJzEyMzQ1JyxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBhbW91bnQ6IDUwMDAwMDAwLFxuICAgICAgICByZWNpcGllbnQ6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLFxuICAgICAgICBub25jZTogMCxcbiAgICAgICAgdXNlclJlcVNpZzogJzB4JyxcbiAgICAgICAgZ2FzUHJpY2VNYXg6IDUwMDAwMDAwMDAwMCxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMgY29uc3QsXG4gICAgICB9O1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhd2FpdCAodGZsckNvaW4gYXMgYW55KS52YWxpZGF0ZUhvcFByZWJ1aWxkKHdhbGxldCwgaG9wUHJlYnVpbGQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgRXhwb3J0IGhvcCBwcmVidWlsZCB3aXRoIG1pc21hdGNoZWQgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IGhvcFByZWJ1aWxkID0ge1xuICAgICAgICB0eDogaG9wRXhwb3J0VHgsXG4gICAgICAgIGlkOiBob3BFeHBvcnRUeElkLFxuICAgICAgICBzaWduYXR1cmU6IGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmUsXG4gICAgICAgIHBheW1lbnRJZDogJzEyMzQ1JyxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBhbW91bnQ6IDUwMDAwMDAwLFxuICAgICAgICByZWNpcGllbnQ6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLFxuICAgICAgICBub25jZTogMCxcbiAgICAgICAgdXNlclJlcVNpZzogJzB4JyxcbiAgICAgICAgZ2FzUHJpY2VNYXg6IDUwMDAwMDAwMDAwMCxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMgY29uc3QsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnOTk5OTk5OTk5OTk5OTk5OTk5JywgLy8gV3JvbmcgYW1vdW50XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0ICh0ZmxyQ29pbiBhcyBhbnkpXG4gICAgICAgIC52YWxpZGF0ZUhvcFByZWJ1aWxkKHdhbGxldCwgaG9wUHJlYnVpbGQsIG9yaWdpbmFsUGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSG9wIGFtb3VudDogLiogZG9lcyBub3QgZXF1YWwgb3JpZ2luYWwgYW1vdW50Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBFeHBvcnQgaG9wIHByZWJ1aWxkIHdpdGggbWlzbWF0Y2hlZCBkZXN0aW5hdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG4gICAgICBjb25zdCBob3BQcmVidWlsZCA9IHtcbiAgICAgICAgdHg6IGhvcEV4cG9ydFR4LFxuICAgICAgICBpZDogaG9wRXhwb3J0VHhJZCxcbiAgICAgICAgc2lnbmF0dXJlOiBob3BFeHBvcnRUeEJpdGdvU2lnbmF0dXJlLFxuICAgICAgICBwYXltZW50SWQ6ICcxMjM0NScsXG4gICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgYW1vdW50OiA1MDAwMDAwMCxcbiAgICAgICAgcmVjaXBpZW50OiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcyxcbiAgICAgICAgbm9uY2U6IDAsXG4gICAgICAgIHVzZXJSZXFTaWc6ICcweCcsXG4gICAgICAgIGdhc1ByaWNlTWF4OiA1MDAwMDAwMDAwMDAsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnIGFzIGNvbnN0LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnUC1jb3N0d28xZGlmZmVyZW50flAtY29zdHdvMWFkZHJlc3N+UC1jb3N0d28xaGVyZScsXG4gICAgICAgICAgICBhbW91bnQ6ICc0OTgwMDAwMDAwMDAwMDAwMCcsIC8vIDUwMDAwMDAwIC0gMjAwMDAwICh0eEZlZSkgPSA0OTgwMDAwMCBuYW5vRkxSID0gNDk4MDAwMDAwMDAwMDAwMDAgd2VpXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0ICh0ZmxyQ29pbiBhcyBhbnkpXG4gICAgICAgIC52YWxpZGF0ZUhvcFByZWJ1aWxkKHdhbGxldCwgaG9wUHJlYnVpbGQsIG9yaWdpbmFsUGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSG9wIGRlc3RpbmF0aW9uOiAuKiBkb2VzIG5vdCBlcXVhbCBvcmlnaW5hbCByZWNpcGllbnQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ByZXNpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBwYXJhbXMgdW5jaGFuZ2VkIHdoZW4gbm8gaG9wVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjMnLFxuICAgICAgICB3YWxsZXQ6IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSksXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFtdIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5wcmVzaWduVHJhbnNhY3Rpb24ocGFyYW1zIGFzIGFueSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNhbGwgdmFsaWRhdGVIb3BQcmVidWlsZCB3aGVuIGhvcFRyYW5zYWN0aW9uIGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgY29uc3QgdmFsaWRhdGVTdHViID0gc2FuZGJveC5zdHViKHRmbHJDb2luIGFzIGFueSwgJ3ZhbGlkYXRlSG9wUHJlYnVpbGQnKS5yZXNvbHZlcygpO1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuICAgICAgY29uc3QgaG9wVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIHR4OiBob3BFeHBvcnRUeCxcbiAgICAgICAgaWQ6IGhvcEV4cG9ydFR4SWQsXG4gICAgICAgIHNpZ25hdHVyZTogaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZSxcbiAgICAgICAgcGF5bWVudElkOiAnMTIzNDUnLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGFtb3VudDogNTAwMDAwMDAsXG4gICAgICAgIHJlY2lwaWVudDogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgIG5vbmNlOiAwLFxuICAgICAgICB1c2VyUmVxU2lnOiAnMHgnLFxuICAgICAgICBnYXNQcmljZU1heDogNTAwMDAwMDAwMDAwLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBjb25zdCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMycsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbXSB9LFxuICAgICAgICBob3BUcmFuc2FjdGlvbjogaG9wVHJhbnNhY3Rpb24sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB0ZmxyQ29pbi5wcmVzaWduVHJhbnNhY3Rpb24ocGFyYW1zIGFzIGFueSk7XG4gICAgICB2YWxpZGF0ZVN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwb3N0UHJvY2Vzc1ByZWJ1aWxkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHBhcmFtcyB1bmNoYW5nZWQgd2hlbiBubyBob3BUcmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMycsXG4gICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRmbHJDb2luLnBvc3RQcm9jZXNzUHJlYnVpbGQocGFyYW1zIGFzIGFueSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNhbGwgdmFsaWRhdGVIb3BQcmVidWlsZCB3aGVuIGhvcFRyYW5zYWN0aW9uIGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgY29uc3QgdmFsaWRhdGVTdHViID0gc2FuZGJveC5zdHViKHRmbHJDb2luIGFzIGFueSwgJ3ZhbGlkYXRlSG9wUHJlYnVpbGQnKS5yZXNvbHZlcygpO1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuICAgICAgY29uc3QgaG9wVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIHR4OiBob3BFeHBvcnRUeCxcbiAgICAgICAgaWQ6IGhvcEV4cG9ydFR4SWQsXG4gICAgICAgIHNpZ25hdHVyZTogaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZSxcbiAgICAgICAgcGF5bWVudElkOiAnMTIzNDUnLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGFtb3VudDogNTAwMDAwMDAsXG4gICAgICAgIHJlY2lwaWVudDogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgIG5vbmNlOiAwLFxuICAgICAgICB1c2VyUmVxU2lnOiAnMHgnLFxuICAgICAgICBnYXNQcmljZU1heDogNTAwMDAwMDAwMDAwLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBjb25zdCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMycsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcywgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSB9LFxuICAgICAgICBob3BUcmFuc2FjdGlvbjogaG9wVHJhbnNhY3Rpb24sXG4gICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHRmbHJDb2luLnBvc3RQcm9jZXNzUHJlYnVpbGQocGFyYW1zIGFzIGFueSk7XG4gICAgICB2YWxpZGF0ZVN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFeHRyYVByZWJ1aWxkUGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBvYmplY3Qgd2hlbiBob3AgaXMgbm90IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHgxMjM0JywgYW1vdW50OiAnMTAwMDAwMCcgfV0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCB3aGVuIGhvcCBpcyBmYWxzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgICBob3A6IGZhbHNlLFxuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHgxMjM0JywgYW1vdW50OiAnMTAwMDAwMCcgfV0sXG4gICAgICAgIHdhbGxldDogbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRmbHJDb2luLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgb2JqZWN0IHdoZW4gd2FsbGV0IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHgxMjM0JywgYW1vdW50OiAnMTAwMDAwMCcgfV0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCB3aGVuIHJlY2lwaWVudHMgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgICBob3A6IHRydWUsXG4gICAgICAgIHdhbGxldDogbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRmbHJDb2luLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxsIGNyZWF0ZUhvcFRyYW5zYWN0aW9uUGFyYW1zIHdoZW4gaG9wIGlzIHRydWUgd2l0aCBhbGwgcmVxdWlyZWQgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja0ZlZUVzdGltYXRlID0ge1xuICAgICAgICBmZWVFc3RpbWF0ZTogMTIwMDAwLFxuICAgICAgICBnYXNMaW1pdEVzdGltYXRlOiA1MDAwMDAsXG4gICAgICB9O1xuICAgICAgc2FuZGJveC5zdHViKHRmbHJDb2luLCAnZmVlRXN0aW1hdGUnKS5yZXNvbHZlcyhtb2NrRmVlRXN0aW1hdGUpO1xuXG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgICB3YWxsZXQ6IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSksXG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLCBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnIH1dLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBjb25zdCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRmbHJDb2luLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdob3BQYXJhbXMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZlZUVzdGltYXRlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgbWFrZSBBUEkgY2FsbCB3aXRoIGNvcnJlY3QgcXVlcnkgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkRmVlRXN0aW1hdGUgPSB7XG4gICAgICAgIGZlZUVzdGltYXRlOiAxMjAwMDAsXG4gICAgICAgIGdhc0xpbWl0RXN0aW1hdGU6IDUwMDAwMCxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBwLmJpdGdvLXRlc3QuY29tJylcbiAgICAgICAgLmdldCgnL2FwaS92Mi90ZmxyL3R4L2ZlZScpXG4gICAgICAgIC5xdWVyeSh7XG4gICAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgICAgIHJlY2lwaWVudDogJzB4MTIzNCcsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIGV4cGVjdGVkRmVlRXN0aW1hdGUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5mZWVFc3RpbWF0ZSh7XG4gICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgcmVjaXBpZW50OiAnMHgxMjM0JyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5mZWVFc3RpbWF0ZS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRGZWVFc3RpbWF0ZS5mZWVFc3RpbWF0ZSk7XG4gICAgICByZXN1bHQuZ2FzTGltaXRFc3RpbWF0ZS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRGZWVFc3RpbWF0ZS5nYXNMaW1pdEVzdGltYXRlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFrZSBBUEkgY2FsbCB3aXRoIGRhdGEgcGFyYW1ldGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwZWN0ZWRGZWVFc3RpbWF0ZSA9IHtcbiAgICAgICAgZmVlRXN0aW1hdGU6IDE1MDAwMCxcbiAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogNjAwMDAwLFxuICAgICAgfTtcblxuICAgICAgbm9jaygnaHR0cHM6Ly9hcHAuYml0Z28tdGVzdC5jb20nKVxuICAgICAgICAuZ2V0KCcvYXBpL3YyL3RmbHIvdHgvZmVlJylcbiAgICAgICAgLnF1ZXJ5KHtcbiAgICAgICAgICByZWNpcGllbnQ6ICcweDU2NzgnLFxuICAgICAgICAgIGRhdGE6ICcweGFiY2RlZicsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIGV4cGVjdGVkRmVlRXN0aW1hdGUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5mZWVFc3RpbWF0ZSh7XG4gICAgICAgIHJlY2lwaWVudDogJzB4NTY3OCcsXG4gICAgICAgIGRhdGE6ICcweGFiY2RlZicsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LmZlZUVzdGltYXRlLnNob3VsZC5lcXVhbChleHBlY3RlZEZlZUVzdGltYXRlLmZlZUVzdGltYXRlKTtcbiAgICAgIHJlc3VsdC5nYXNMaW1pdEVzdGltYXRlLnNob3VsZC5lcXVhbChleHBlY3RlZEZlZUVzdGltYXRlLmdhc0xpbWl0RXN0aW1hdGUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VHhIYXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2FsY3VsYXRlIGNvcnJlY3Qga2VjY2FrMjU2IGhhc2ggZm9yIHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gRVhQT1JUX0NfVEVTVF9EQVRBLmZ1bGxzaWdudHhIZXg7XG4gICAgICBjb25zdCBoYXNoID0gKHRmbHJDb2luLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBGbHIpLmdldFR4SGFzaCh0eEhleCk7XG5cbiAgICAgIGhhc2guc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgIGhhc2gubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG5cbiAgICAgIC8vIFZlcmlmeSBpdCBtYXRjaGVzIG91ciBoZWxwZXIgZnVuY3Rpb25cbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaCA9IGdldFR4SGFzaCh0eEhleCk7XG4gICAgICBoYXNoLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRIYXNoLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0eCBoZXggd2l0aCAweCBwcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9ICcweCcgKyAnYWJjZCcucmVwZWF0KDEwKTtcbiAgICAgIGNvbnN0IGhhc2ggPSAodGZsckNvaW4uY29uc3RydWN0b3IgYXMgdHlwZW9mIEZscikuZ2V0VHhIYXNoKHR4SGV4KTtcblxuICAgICAgaGFzaC5zaG91bGQuYmUuaW5zdGFuY2VPZihCdWZmZXIpO1xuICAgICAgaGFzaC5sZW5ndGguc2hvdWxkLmVxdWFsKDMyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHR4IGhleCB3aXRob3V0IDB4IHByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gJ2FiY2QnLnJlcGVhdCgxMCk7XG4gICAgICBjb25zdCBoYXNoID0gKHRmbHJDb2luLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBGbHIpLmdldFR4SGFzaCh0eEhleCk7XG5cbiAgICAgIGhhc2guc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgIGhhc2gubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdCdWlsZCBVbnNpZ25lZCBTd2VlcCBmb3IgU2VsZi1DdXN0b2R5IENvbGQgV2FsbGV0cyAtIChNUEN2MiknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICBjb25zdCBleHBsb3JlclVybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLmZsckV4cGxvcmVyQmFzZVVybCBhcyBzdHJpbmc7XG4gIGNvbnN0IG1heEZlZVBlckdhc3ZhbHVlID0gMzAwMDAwMDAwMDA7XG4gIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzVmFsdWUgPSAxNTAwMDAwMDAwMDtcbiAgY29uc3QgY2hhaW5faWQgPSAxMTQ7XG4gIGNvbnN0IGdhc0xpbWl0dmFsdWUgPSA1MDAwMDA7XG5cbiAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhbiB1bnNpZ25lZCBzd2VlcCB3aXRob3V0IGRlcml2YXRpb24gcGF0aCcsIGFzeW5jICgpID0+IHtcbiAgICBub2NrKGV4cGxvcmVyVXJsKVxuICAgICAgLmdldCgnL2FwaScpXG4gICAgICAudHdpY2UoKVxuICAgICAgLnF1ZXJ5KG1vY2tEYXRhVW5zaWduZWRTd2VlcC5nZXRUeExpc3RSZXF1ZXN0KVxuICAgICAgLnJlcGx5KDIwMCwgbW9ja0RhdGFVbnNpZ25lZFN3ZWVwLmdldFR4TGlzdFJlc3BvbnNlKTtcbiAgICBub2NrKGV4cGxvcmVyVXJsKVxuICAgICAgLmdldCgnL2FwaScpXG4gICAgICAucXVlcnkobW9ja0RhdGFVbnNpZ25lZFN3ZWVwLmdldEJhbGFuY2VSZXF1ZXN0KVxuICAgICAgLnJlcGx5KDIwMCwgbW9ja0RhdGFVbnNpZ25lZFN3ZWVwLmdldEJhbGFuY2VSZXNwb25zZSk7XG5cbiAgICBjb25zdCBiYXNlQ29pbjogYW55ID0gYml0Z28uY29pbigndGZscicpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gKGF3YWl0IGJhc2VDb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleTogbW9ja0RhdGFVbnNpZ25lZFN3ZWVwLnVzZXJLZXksXG4gICAgICBiYWNrdXBLZXk6IG1vY2tEYXRhVW5zaWduZWRTd2VlcC5iYWNrdXBLZXksXG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IG1vY2tEYXRhVW5zaWduZWRTd2VlcC53YWxsZXRCYXNlQWRkcmVzcyxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IG1vY2tEYXRhVW5zaWduZWRTd2VlcC5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgaXNUc3M6IHRydWUsXG4gICAgICBlaXAxNTU5OiB7IG1heEZlZVBlckdhczogbWF4RmVlUGVyR2FzdmFsdWUsIG1heFByaW9yaXR5RmVlUGVyR2FzOiBtYXhQcmlvcml0eUZlZVBlckdhc1ZhbHVlIH0sXG4gICAgICBnYXNMaW1pdDogZ2FzTGltaXR2YWx1ZSxcbiAgICAgIHJlcGxheVByb3RlY3Rpb25PcHRpb25zOiB7XG4gICAgICAgIGNoYWluOiBjaGFpbl9pZCxcbiAgICAgICAgaGFyZGZvcms6ICdsb25kb24nLFxuICAgICAgfSxcbiAgICB9KSkgYXMgVW5zaWduZWRTd2VlcFR4TVBDdjI7XG4gICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uKTtcbiAgICB0cmFuc2FjdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhSZXF1ZXN0cycpO1xuICAgIHRyYW5zYWN0aW9uLnR4UmVxdWVzdHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBjb25zdCB0eFJlcXVlc3QgPSB0cmFuc2FjdGlvbi50eFJlcXVlc3RzWzBdO1xuICAgIHR4UmVxdWVzdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0Q29pbicpO1xuICAgIHR4UmVxdWVzdC53YWxsZXRDb2luLnNob3VsZC5lcXVhbCgndGZscicpO1xuICAgIHR4UmVxdWVzdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25zJyk7XG4gICAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGNvbnN0IHR4ID0gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXTtcbiAgICB0eC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbm9uY2UnKTtcbiAgICB0eC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndW5zaWduZWRUeCcpO1xuICAgIHR4LnVuc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NlcmlhbGl6ZWRUeEhleCcpO1xuICAgIHR4LnVuc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hYmxlSGV4Jyk7XG4gICAgdHgudW5zaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZGVyaXZhdGlvblBhdGgnKTtcbiAgICB0eC51bnNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWVJbmZvJyk7XG4gICAgdHgudW5zaWduZWRUeC5mZWVJbmZvPy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlJyk7XG4gICAgdHgudW5zaWduZWRUeC5mZWVJbmZvPy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlU3RyaW5nJyk7XG4gICAgdHgudW5zaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGFyc2VkVHgnKTtcbiAgICB0eC51bnNpZ25lZFR4LnBhcnNlZFR4Py5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc3BlbmRBbW91bnQnKTtcbiAgICB0eC51bnNpZ25lZFR4LnBhcnNlZFR4Py5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnb3V0cHV0cycpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnTm9uIEJpdGdvIFJlY292ZXJ5IGZvciBIb3QgV2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gIGNvbnN0IGV4cGxvcmVyVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0uZmxyRXhwbG9yZXJCYXNlVXJsIGFzIHN0cmluZztcbiAgY29uc3QgbWF4RmVlUGVyR2FzdmFsdWUgPSAzMDAwMDAwMDAwMDtcbiAgY29uc3QgbWF4UHJpb3JpdHlGZWVQZXJHYXNWYWx1ZSA9IDE1MDAwMDAwMDAwO1xuICBjb25zdCBjaGFpbl9pZCA9IDExNDtcbiAgY29uc3QgZ2FzTGltaXR2YWx1ZSA9IDUwMDAwMDtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgc2lnbmVkIG5vbi1iaXRnbyByZWNvdmVyeSB0eCcsIGFzeW5jICgpID0+IHtcbiAgICBub2NrKGV4cGxvcmVyVXJsKVxuICAgICAgLmdldCgnL2FwaScpXG4gICAgICAudHdpY2UoKVxuICAgICAgLnF1ZXJ5KG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5nZXRUeExpc3RSZXF1ZXN0KVxuICAgICAgLnJlcGx5KDIwMCwgbW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LmdldFR4TGlzdFJlc3BvbnNlKTtcbiAgICBub2NrKGV4cGxvcmVyVXJsKVxuICAgICAgLmdldCgnL2FwaScpXG4gICAgICAucXVlcnkobW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LmdldEJhbGFuY2VSZXF1ZXN0KVxuICAgICAgLnJlcGx5KDIwMCwgbW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LmdldEJhbGFuY2VSZXNwb25zZSk7XG5cbiAgICBjb25zdCBiYXNlQ29pbjogYW55ID0gYml0Z28uY29pbigndGZscicpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZUNvaW4ucmVjb3Zlcih7XG4gICAgICB1c2VyS2V5OiBtb2NrRGF0YU5vbkJpdEdvUmVjb3ZlcnkudXNlcktleURhdGEsXG4gICAgICBiYWNrdXBLZXk6IG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5iYWNrdXBLZXlEYXRhLFxuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBtb2NrRGF0YU5vbkJpdEdvUmVjb3Zlcnkud2FsbGV0Um9vdEFkZHJlc3MsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBtb2NrRGF0YU5vbkJpdEdvUmVjb3Zlcnkud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgaXNUc3M6IHRydWUsXG4gICAgICBlaXAxNTU5OiB7IG1heEZlZVBlckdhczogbWF4RmVlUGVyR2FzdmFsdWUsIG1heFByaW9yaXR5RmVlUGVyR2FzOiBtYXhQcmlvcml0eUZlZVBlckdhc1ZhbHVlIH0sXG4gICAgICBnYXNMaW1pdDogZ2FzTGltaXR2YWx1ZSxcbiAgICAgIHJlcGxheVByb3RlY3Rpb25PcHRpb25zOiB7XG4gICAgICAgIGNoYWluOiBjaGFpbl9pZCxcbiAgICAgICAgaGFyZGZvcms6ICdsb25kb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBzaG91bGQuZXhpc3QodHJhbnNhY3Rpb24pO1xuICAgIHRyYW5zYWN0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpZCcpO1xuICAgIHRyYW5zYWN0aW9uLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eCcpO1xuICAgIGNvbnN0IHR4ID0gRmVlTWFya2V0RUlQMTU1OVRyYW5zYWN0aW9uLmZyb21TZXJpYWxpemVkVHgoQnVmZmVyLmZyb20oc3RyaXBIZXhQcmVmaXgodHJhbnNhY3Rpb24udHgpLCAnaGV4JykpO1xuICAgIHR4LmdldFNlbmRlckFkZHJlc3MoKS50b1N0cmluZygpLnNob3VsZC5lcXVhbChtb2NrRGF0YU5vbkJpdEdvUmVjb3Zlcnkud2FsbGV0Um9vdEFkZHJlc3MpO1xuICAgIGNvbnN0IGpzb25UeCA9IHR4LnRvSlNPTigpO1xuICAgIGpzb25UeC50bz8uc2hvdWxkLmVxdWFsKG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgfSk7XG59KTtcbiJdfQ==
1045
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Zsci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyxtREFBK0Q7QUFDL0QsaURBQStDO0FBQy9DLGlEQUE0QztBQUU1QywyQ0FBNEM7QUFHNUMsNENBQW1HO0FBQ25HLGdEQUF3QjtBQUN4QixtREFBdUU7QUFDdkUsdUNBQTZEO0FBQzdELDJDQUFrRDtBQUNsRCw2Q0FBK0I7QUFDL0IscURBQThDO0FBQzlDLHFEQUF1QztBQUN2QyxvREFBNEI7QUFFNUIsaURBQWlEO0FBQ2pELFNBQVMsU0FBUyxDQUFDLEVBQVU7SUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxRQUFRLENBQUMsS0FBSyxFQUFFO0lBQ2QsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLHlCQUF5QixDQUFDO0lBRTlCLE1BQU0sUUFBUSxHQUFHLDRDQUE0QyxDQUFDO0lBQzlELE1BQU0sV0FBVyxHQUFHLDhCQUFrQixDQUFDLGFBQWEsQ0FBQztJQUNyRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVwRSxNQUFNLENBQUM7UUFDTCxNQUFNLFlBQVksR0FDaEIsaUhBQWlILENBQUM7UUFDcEgsTUFBTSxRQUFRLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakQseUJBQXlCO1lBQ3ZCLE1BQU07Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FDVCxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUMvRixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQixLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsaUJBQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN4RCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQztRQUNULFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBUyxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBUSxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtZQUN6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBRyxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNsQyxPQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtZQUNuQyxRQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxPQUFPLEdBQUcsNENBQTRDLENBQUM7WUFDN0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDakQsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDOUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFO1lBQ3RELE1BQU0sT0FBTyxHQUFHLDhCQUFrQixDQUFDLGdCQUFnQixDQUFDO1lBQ3BELFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRCxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtRQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdEMsU0FBUyxDQUFDO1lBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7WUFDdkUsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEUsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCO29CQUNFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7b0JBQzVDLE1BQU0sRUFBRSxvQkFBb0I7aUJBQzdCO2FBQ0YsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU8sUUFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztnQkFDaEUsVUFBVTtnQkFDVixJQUFJLEVBQUUsUUFBd0M7YUFDL0MsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO1lBQ3RELE1BQU8sUUFBZ0I7aUJBQ3BCLDBCQUEwQixDQUFDO2dCQUMxQixVQUFVLEVBQUUsRUFBRTtnQkFDZCxJQUFJLEVBQUUsUUFBd0M7YUFDL0MsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7WUFDOUQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCO29CQUNFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7b0JBQzVDLE1BQU0sRUFBRSxvQkFBb0I7aUJBQzdCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxXQUFXO29CQUN2QyxNQUFNLEVBQUUsbUJBQW1CO2lCQUM1QjthQUNGLENBQUM7WUFFRixNQUFPLFFBQWdCO2lCQUNwQiwwQkFBMEIsQ0FBQztnQkFDMUIsVUFBVTtnQkFDVixJQUFJLEVBQUUsUUFBd0M7YUFDL0MsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMscUJBQXFCLEVBQUU7UUFDOUIsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUs7WUFDNUQsTUFBTSxRQUFRLEdBQUcsOEJBQWtCLENBQUM7WUFDcEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYTtnQkFDN0IsY0FBYyxFQUFFLFFBQVE7YUFDekIsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDM0YsK0RBQStEO1lBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVELFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEtBQUs7WUFDekQsTUFBTSxRQUFRLEdBQUcsOEJBQWtCLENBQUM7WUFDcEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYTtnQkFDN0IsY0FBYyxFQUFFLFFBQVE7YUFDekIsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDM0YsK0RBQStEO1lBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVELFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUs7WUFDL0MsTUFBTSxRQUFRO2lCQUNYLGtCQUFrQixDQUFDLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBK0IsQ0FBQztpQkFDN0UsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLO1lBQ2hGLE1BQU0sUUFBUTtpQkFDWCxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQStCLENBQUM7aUJBQ25FLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSztZQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFdEIsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsQ0FBQztnQkFDaEcsc0JBQXNCLEVBQUUsQ0FBQztnQkFDekIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixPQUFPLEVBQUUsS0FBSztnQkFDZCxJQUFJLEVBQUUsTUFBTTtnQkFDWixRQUFRLEVBQUUsY0FBYztnQkFDeEIscUJBQXFCLEVBQUUsMkJBQTJCO2FBQ25ELENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFeEIsTUFBTSxRQUFRO2lCQUNYLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQWUsRUFBRSxVQUFVLEVBQUUsVUFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQ3JHLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSztZQUM3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUvQyxNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1YsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRTtvQkFDbEYsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRTtpQkFDbkY7Z0JBQ0QsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2dCQUN4QyxHQUFHLEVBQUUsSUFBSTthQUNWLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRztnQkFDakIsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO2dCQUNoRyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixxQkFBcUIsRUFBRSwyQkFBMkI7Z0JBQ2xELGNBQWMsRUFBRTtvQkFDZCxFQUFFLEVBQUUsS0FBSztvQkFDVCxFQUFFLEVBQUUsS0FBSztvQkFDVCxTQUFTLEVBQUUsS0FBSztvQkFDaEIsU0FBUyxFQUFFLEdBQUc7b0JBQ2QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixNQUFNLEVBQUUsZ0JBQWdCO29CQUN4QixTQUFTLEVBQUUsNENBQTRDO29CQUN2RCxLQUFLLEVBQUUsQ0FBQztvQkFDUixVQUFVLEVBQUUsS0FBSztvQkFDakIsV0FBVyxFQUFFLFlBQVk7aUJBQzFCO2FBQ0YsQ0FBQztZQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixNQUFNLFFBQVE7aUJBQ1gsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO2lCQUNwRixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEtBQUs7WUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFL0MsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUU7b0JBQ2xGLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUU7aUJBQ25GO2dCQUNELE1BQU0sRUFBRSxNQUFNO2dCQUNkLGdCQUFnQixFQUFFLHNCQUFzQjthQUN6QyxDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRTtvQkFDVixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFO29CQUNsRixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFO2lCQUNuRjtnQkFDRCxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixxQkFBcUIsRUFBRSwyQkFBMkI7YUFDbkQsQ0FBQztZQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixNQUFNLFFBQVE7aUJBQ1gsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO2lCQUNwRixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDckIsd0lBQXdJLENBQ3pJLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLO1lBQzlFLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsQ0FBQztnQkFDaEcsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2FBQ3pDLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRztnQkFDakIsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO2dCQUNoRyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxLQUFLO2dCQUNYLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixxQkFBcUIsRUFBRSwyQkFBMkI7YUFDbkQsQ0FBQztZQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixNQUFNLFFBQVE7aUJBQ1gsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO2lCQUNwRixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFO1lBQ3ZDLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLO2dCQUNoRixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFL0MsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLENBQUM7b0JBQ3JHLElBQUksRUFBRSxVQUFVO29CQUNoQixLQUFLLEVBQUUsSUFBSTtpQkFDWixDQUFDO2dCQUVGLGtGQUFrRjtnQkFDbEYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixXQUFXLEVBQUUsb0JBQW9CO29CQUNqQyxLQUFLLEVBQ0gsd0dBQXdHO29CQUMxRyxXQUFXLEVBQUU7d0JBQ1gsVUFBVSxFQUFFLE1BQU07d0JBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUFDO3dCQUNyRyxJQUFJLEVBQUUsVUFBVTtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRTtvQkFDbkUsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXhCLDZFQUE2RTtnQkFDN0UseUVBQXlFO2dCQUN6RSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUM3RCxRQUFRO29CQUNSLFVBQVUsRUFBRSxVQUFpQjtvQkFDN0IsTUFBTTtvQkFDTixZQUFZO29CQUNaLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxLQUFLO2dCQUN2RixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDekMsWUFBWSxFQUFFO3dCQUNaLFdBQVcsRUFBRSw0Q0FBNEM7cUJBQzFEO2lCQUNGLENBQUMsQ0FBQztnQkFFSCx5REFBeUQ7Z0JBQ3pELE1BQU0sUUFBUSxHQUFHO29CQUNmLE1BQU0sRUFBRSxNQUFNO29CQUNkLGdCQUFnQixFQUFFLHNCQUFzQjtpQkFDekMsQ0FBQztnQkFFRiwyRUFBMkU7Z0JBQzNFLE1BQU0sVUFBVSxHQUFHO29CQUNqQixhQUFhLEVBQUUsa0NBQWtDO29CQUNqRCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsY0FBYztpQkFDekIsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXhCLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUM7b0JBQzdELFFBQVEsRUFBRSxRQUFlO29CQUN6QixVQUFVLEVBQUUsVUFBaUI7b0JBQzdCLE1BQU07b0JBQ04sWUFBWTtvQkFDWixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztnQkFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7b0JBQ3pDLFlBQVksRUFBRTt3QkFDWixXQUFXLEVBQUUsNENBQTRDO3FCQUMxRDtpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxNQUFNO29CQUNkLGdCQUFnQixFQUFFLHNCQUFzQjtpQkFDekMsQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRztvQkFDakIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsSUFBSSxFQUFFLE1BQU07b0JBQ1osUUFBUSxFQUFFLGNBQWM7aUJBQ3pCLENBQUM7Z0JBRUYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUV4QixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUM3RCxRQUFRLEVBQUUsUUFBZTtvQkFDekIsVUFBVSxFQUFFLFVBQWlCO29CQUM3QixNQUFNO29CQUNOLFlBQVk7b0JBQ1osVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7Z0JBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO29CQUN6QyxZQUFZLEVBQUU7d0JBQ1osV0FBVyxFQUFFLDRDQUE0QztxQkFDMUQ7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE1BQU0sUUFBUSxHQUFHO29CQUNmLElBQUksRUFBRSxjQUFjO29CQUNwQixNQUFNLEVBQUUsTUFBTTtvQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7aUJBQ3pDLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUc7b0JBQ2pCLEtBQUssRUFBRSxJQUFJO29CQUNYLElBQUksRUFBRSxNQUFNO29CQUNaLFFBQVEsRUFBRSxjQUFjO2lCQUN6QixDQUFDO2dCQUVGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDN0QsUUFBUSxFQUFFLFFBQWU7b0JBQ3pCLFVBQVUsRUFBRSxVQUFpQjtvQkFDN0IsTUFBTTtvQkFDTixZQUFZO29CQUNaLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLO2dCQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDekMsWUFBWSxFQUFFO3dCQUNaLFdBQVcsRUFBRSw0Q0FBNEM7cUJBQzFEO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxNQUFNLFFBQVEsR0FBRztvQkFDZixJQUFJLEVBQUUsV0FBVztvQkFDakIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2lCQUN6QyxDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixLQUFLLEVBQUUsSUFBSTtvQkFDWCxJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsY0FBYztpQkFDekIsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXhCLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUM7b0JBQzdELFFBQVEsRUFBRSxRQUFlO29CQUN6QixVQUFVLEVBQUUsVUFBaUI7b0JBQzdCLE1BQU07b0JBQ04sWUFBWTtvQkFDWixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsZ0ZBQWdGLEVBQUUsS0FBSztnQkFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7b0JBQ3pDLFlBQVksRUFBRTt3QkFDWixXQUFXLEVBQUUsNENBQTRDO3FCQUMxRDtpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLE1BQU07b0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2lCQUN6QyxDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixLQUFLLEVBQUUsSUFBSTtvQkFDWCxJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsY0FBYztpQkFDekIsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXhCLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQztvQkFDakIsUUFBUSxFQUFFLFFBQWU7b0JBQ3pCLFVBQVUsRUFBRSxVQUFpQjtvQkFDN0IsTUFBTTtvQkFDTixZQUFZO29CQUNaLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDO3FCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSztnQkFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRS9DLE1BQU0sUUFBUSxHQUFHO29CQUNmLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsQ0FBQztvQkFDaEcsTUFBTSxFQUFFLE1BQU07b0JBQ2QsZ0JBQWdCLEVBQUUsc0JBQXNCO2lCQUN6QyxDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHO29CQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLENBQUM7b0JBQ2hHLHNCQUFzQixFQUFFLENBQUM7b0JBQ3pCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsTUFBTTtvQkFDaEIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsSUFBSSxFQUFFLE1BQU07b0JBQ1osUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLHFCQUFxQixFQUFFLDJCQUEyQjtpQkFDbkQsQ0FBQztnQkFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXhCLHNGQUFzRjtnQkFDdEYsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDN0QsUUFBUTtvQkFDUixVQUFVLEVBQUUsVUFBaUI7b0JBQzdCLE1BQU07b0JBQ04sWUFBWTtvQkFDWixVQUFVLEVBQUUsU0FBUztpQkFDdEIsQ0FBQyxDQUFDO2dCQUNILHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0MsTUFBTSxxQkFBcUIsR0FDekIsaUpBQWlKLENBQUM7WUFDcEosTUFBTSxVQUFVLEdBQUcsNENBQTRDLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUUsUUFBUSxDQUFDLE9BQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN0RSwrRkFBK0Y7WUFDL0YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxnQkFBZ0IsRUFBRSxzQkFBc0I7Z0JBQ3hDLEdBQUcsRUFBRSxJQUFJO2dCQUNULElBQUksRUFBRSxRQUFRO2FBQ2YsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ2xFLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHFCQUFxQixFQUFFLDJCQUEyQjtnQkFDbEQsY0FBYyxFQUFFO29CQUNkLEVBQUUsRUFBRSxXQUFXO29CQUNmLEVBQUUsRUFBRSxhQUFhO29CQUNqQixTQUFTLEVBQUUseUJBQXlCO29CQUNwQyxTQUFTLEVBQUUsWUFBWTtvQkFDdkIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFNBQVMsRUFBRSxxQkFBcUI7b0JBQ2hDLEtBQUssRUFBRSxDQUFDO29CQUNSLFVBQVUsRUFDUixvSUFBb0k7b0JBQ3RJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsUUFBUTtpQkFDZjthQUNGLENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXRDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcseUJBQXlCLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBZSxFQUFFLHFDQUFxQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUUsS0FBSztnQkFDcEMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUNuRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzVGLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSztnQkFDOUMsTUFBTSwyQkFBMkIsR0FBRztvQkFDbEMsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFO29CQUNqRyxVQUFVO29CQUNWLE1BQU07b0JBQ04sWUFBWTtpQkFDYixDQUFDO2dCQUVGLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQztxQkFDOUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLGVBQWUsTUFBTSxHQUFHLEdBQUcsR0FBRyxXQUFXLGtDQUFrQyxNQUFNLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FDNUcsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUs7Z0JBQzdELE1BQU0sMkJBQTJCLEdBQUc7b0JBQ2xDLFFBQVE7b0JBQ1IsVUFBVSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUU7b0JBQy9GLE1BQU07b0JBQ04sWUFBWTtpQkFDYixDQUFDO2dCQUNGLE1BQU0sUUFBUTtxQkFDWCxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQztxQkFDOUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztZQUMxRixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLO2dCQUNoRCxNQUFNLHlCQUF5QixHQUM3QixpSkFBaUosQ0FBQztnQkFDcEosTUFBTSwyQkFBMkIsR0FBRztvQkFDbEMsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLEVBQUU7b0JBQy9GLFVBQVU7b0JBQ1YsTUFBTTtvQkFDTixZQUFZO2lCQUNiLENBQUM7Z0JBQ0YsTUFBTSxRQUFRO3FCQUNYLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDO3FCQUM5QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDckIsb0JBQW9CLHFCQUFxQix1Q0FBdUMseUJBQXlCLEVBQUUsQ0FDNUcsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7Z0JBQzlELE1BQU0sMkJBQTJCLEdBQUc7b0JBQ2xDLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRTtvQkFDcEYsVUFBVTtvQkFDVixNQUFNO29CQUNOLFlBQVk7aUJBQ2IsQ0FBQztnQkFDRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzVGLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFO1FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWpELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO1lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQjtnQkFDdkQsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsU0FBUyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQjtnQkFDOUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixJQUFJLEVBQUUsUUFBaUI7YUFDeEIsQ0FBQztZQUVGLE1BQU8sUUFBZ0I7aUJBQ3BCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7aUJBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSztZQUMxRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBZSxFQUFFLHFDQUFxQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9GLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixtQkFBbUI7WUFDbkIsTUFBTyxRQUFnQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxLQUFLO1lBQzNFLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRztnQkFDckIsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7d0JBQzVDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxlQUFlO3FCQUM5QztpQkFDRjthQUNGLENBQUM7WUFFRixNQUFPLFFBQWdCO2lCQUNwQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQztpQkFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLO1lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFFLFFBQVEsQ0FBQyxPQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEVBQUUsRUFBRSxXQUFXO2dCQUNmLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixTQUFTLEVBQUUseUJBQXlCO2dCQUNwQyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsU0FBUyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQjtnQkFDOUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixJQUFJLEVBQUUsUUFBaUI7YUFDeEIsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsT0FBTyxFQUFFLG1EQUFtRDt3QkFDNUQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxpREFBaUQ7cUJBQ3RHO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU8sUUFBZ0I7aUJBQ3BCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDO2lCQUN4RCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTthQUNoQyxDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBYSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSztZQUN4RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFlLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVyRixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRztnQkFDckIsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsRUFBRSxFQUFFLGFBQWE7Z0JBQ2pCLFNBQVMsRUFBRSx5QkFBeUI7Z0JBQ3BDLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixTQUFTLEVBQUUsOEJBQWtCLENBQUMsZ0JBQWdCO2dCQUM5QyxLQUFLLEVBQUUsQ0FBQztnQkFDUixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsV0FBVyxFQUFFLFlBQVk7Z0JBQ3pCLElBQUksRUFBRSxRQUFpQjthQUN4QixDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtnQkFDL0IsY0FBYyxFQUFFLGNBQWM7YUFDL0IsQ0FBQztZQUVGLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLE1BQWEsQ0FBQyxDQUFDO1lBQ2pELFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM5QixFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSztZQUMvRCxNQUFNLE1BQU0sR0FBRztnQkFDYixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFhLENBQUMsQ0FBQztZQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLO1lBQ3hFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXJGLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLHlCQUF5QjtnQkFDcEMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0I7Z0JBQzlDLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsWUFBWTtnQkFDekIsSUFBSSxFQUFFLFFBQWlCO2FBQ3hCLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRztnQkFDYixLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtnQkFDcEcsY0FBYyxFQUFFLGNBQWM7Z0JBQzlCLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQztZQUVGLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDLE1BQWEsQ0FBQyxDQUFDO1lBQ2xELFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdEMsU0FBUyxDQUFDO1lBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUs7WUFDeEQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDdkQsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7WUFDdEQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxLQUFLO2dCQUNWLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sRUFBRSxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7YUFDeEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEtBQUs7WUFDM0QsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDdkQsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUs7WUFDL0QsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULE1BQU0sRUFBRSxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7YUFDeEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtGQUFrRixFQUFFLEtBQUs7WUFDMUYsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFaEUsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxJQUFJO2dCQUNULE1BQU0sRUFBRSxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDhCQUFrQixDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1RixJQUFJLEVBQUUsUUFBaUI7YUFDeEIsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLG1CQUFtQixHQUFHO2dCQUMxQixXQUFXLEVBQUUsTUFBTTtnQkFDbkIsZ0JBQWdCLEVBQUUsTUFBTTthQUN6QixDQUFDO1lBRUYsSUFBQSxjQUFJLEVBQUMsNEJBQTRCLENBQUM7aUJBQy9CLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDMUIsS0FBSyxDQUFDO2dCQUNMLEdBQUcsRUFBRSxJQUFJO2dCQUNULFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUVuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQ3hDLEdBQUcsRUFBRSxJQUFJO2dCQUNULFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLO1lBQ2xELE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUM7WUFFRixJQUFBLGNBQUksRUFBQyw0QkFBNEIsQ0FBQztpQkFDL0IsR0FBRyxDQUFDLHFCQUFxQixDQUFDO2lCQUMxQixLQUFLLENBQUM7Z0JBQ0wsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDeEMsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ3BCLEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLEtBQUssR0FBRyw4QkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDL0MsTUFBTSxJQUFJLEdBQUksUUFBUSxDQUFDLFdBQTBCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5FLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFN0Isd0NBQXdDO1lBQ3hDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxHQUFJLFFBQVEsQ0FBQyxXQUEwQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUksUUFBUSxDQUFDLFdBQTBCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5FLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLDhEQUE4RCxFQUFFO0lBQ3ZFLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxrQkFBNEIsQ0FBQztJQUNyRixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztJQUN0QyxNQUFNLHlCQUF5QixHQUFHLFdBQVcsQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDckIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBRTdCLEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RSxJQUFBLGNBQUksRUFBQyxXQUFXLENBQUM7YUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDO2FBQ1gsS0FBSyxFQUFFO2FBQ1AsS0FBSyxDQUFDLGlDQUFxQixDQUFDLGdCQUFnQixDQUFDO2FBQzdDLEtBQUssQ0FBQyxHQUFHLEVBQUUsaUNBQXFCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN2RCxJQUFBLGNBQUksRUFBQyxXQUFXLENBQUM7YUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDO2FBQ1gsS0FBSyxDQUFDLGlDQUFxQixDQUFDLGlCQUFpQixDQUFDO2FBQzlDLEtBQUssQ0FBQyxHQUFHLEVBQUUsaUNBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4RCxNQUFNLFFBQVEsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQzFDLE9BQU8sRUFBRSxpQ0FBcUIsQ0FBQyxPQUFPO1lBQ3RDLFNBQVMsRUFBRSxpQ0FBcUIsQ0FBQyxTQUFTO1lBQzFDLHFCQUFxQixFQUFFLGlDQUFxQixDQUFDLGlCQUFpQjtZQUM5RCxtQkFBbUIsRUFBRSxpQ0FBcUIsQ0FBQyxtQkFBbUI7WUFDOUQsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUU7WUFDN0YsUUFBUSxFQUFFLGFBQWE7WUFDdkIsdUJBQXVCLEVBQUU7Z0JBQ3ZCLEtBQUssRUFBRSxRQUFRO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2FBQ25CO1NBQ0YsQ0FBQyxDQUF5QixDQUFDO1FBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUU7SUFDN0MsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sV0FBVyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGtCQUE0QixDQUFDO0lBQ3JGLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDO0lBQ3RDLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDO0lBQzlDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUNyQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlELElBQUEsY0FBSSxFQUFDLFdBQVcsQ0FBQzthQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7YUFDWCxLQUFLLEVBQUU7YUFDUCxLQUFLLENBQUMsb0NBQXdCLENBQUMsZ0JBQWdCLENBQUM7YUFDaEQsS0FBSyxDQUFDLEdBQUcsRUFBRSxvQ0FBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFELElBQUEsY0FBSSxFQUFDLFdBQVcsQ0FBQzthQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7YUFDWCxLQUFLLENBQUMsb0NBQXdCLENBQUMsaUJBQWlCLENBQUM7YUFDakQsS0FBSyxDQUFDLEdBQUcsRUFBRSxvQ0FBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTNELE1BQU0sUUFBUSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3pDLE9BQU8sRUFBRSxvQ0FBd0IsQ0FBQyxXQUFXO1lBQzdDLFNBQVMsRUFBRSxvQ0FBd0IsQ0FBQyxhQUFhO1lBQ2pELHFCQUFxQixFQUFFLG9DQUF3QixDQUFDLGlCQUFpQjtZQUNqRSxnQkFBZ0IsRUFBRSxvQ0FBd0IsQ0FBQyxnQkFBZ0I7WUFDM0QsbUJBQW1CLEVBQUUsb0NBQXdCLENBQUMsbUJBQW1CO1lBQ2pFLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFO1lBQzdGLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLHVCQUF1QixFQUFFO2dCQUN2QixLQUFLLEVBQUUsUUFBUTtnQkFDZixRQUFRLEVBQUUsUUFBUTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxnQ0FBMkIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEscUJBQWMsRUFBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUF3QixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuaW1wb3J0IHsgRmxyLCBUZmxyIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCB7IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMvaWZhY2UnO1xuaW1wb3J0IHsgVW5zaWduZWRTd2VlcFR4TVBDdjIgfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgbW9ja0RhdGFVbnNpZ25lZFN3ZWVwLCBtb2NrRGF0YU5vbkJpdEdvUmVjb3ZlcnksIEVYUE9SVF9DX1RFU1RfREFUQSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgbm9jayBmcm9tICdub2NrJztcbmltcG9ydCB7IGNvbW1vbiwgVHJhbnNhY3Rpb25UeXBlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBGZWVNYXJrZXRFSVAxNTU5VHJhbnNhY3Rpb24gfSBmcm9tICdAZXRoZXJldW1qcy90eCc7XG5pbXBvcnQgeyBzdHJpcEhleFByZWZpeCB9IGZyb20gJ0BldGhlcmV1bWpzL3V0aWwnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0ICogYXMgc2VjcDI1NmsxIGZyb20gJ3NlY3AyNTZrMSc7XG5pbXBvcnQgS2VjY2FrIGZyb20gJ2tlY2Nhayc7XG5cbi8vIEhlbHBlciB0byBjYWxjdWxhdGUgdHggaGFzaCBsaWtlIEZsci5nZXRUeEhhc2hcbmZ1bmN0aW9uIGdldFR4SGFzaCh0eDogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgaGFzaCA9IEtlY2Nhaygna2VjY2FrMjU2Jyk7XG4gIGhhc2gudXBkYXRlKHR4LnN0YXJ0c1dpdGgoJzB4JykgPyB0eC5zbGljZSgyKSA6IHR4LCAnaGV4Jyk7XG4gIHJldHVybiBoYXNoLmRpZ2VzdCgpO1xufVxuXG5kZXNjcmliZSgnZmxyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IHRmbHJDb2luO1xuICBsZXQgZmxyQ29pbjtcbiAgbGV0IGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmU7XG5cbiAgY29uc3QgYWRkcmVzczIgPSAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JztcbiAgY29uc3QgaG9wRXhwb3J0VHggPSBFWFBPUlRfQ19URVNUX0RBVEEuZnVsbHNpZ250eEhleDtcbiAgY29uc3QgaG9wRXhwb3J0VHhJZCA9ICcweCcgKyBnZXRUeEhhc2goaG9wRXhwb3J0VHgpLnRvU3RyaW5nKCdoZXgnKTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvS2V5WHBydiA9XG4gICAgICAneHBydjlzMjFaclFIMTQzSzN0cFdCSFdlMzFzTG9YTlJROUF2UllKZ2l0a0t4UTRBVEZRTXd2cjdoSE5xWVJVblM3UHNqekI3YUsxVnhxSEx1TlFqajFzY2tKMkp3bzJxeG1zdmVqd0VDU3BGTWZDJztcbiAgICBjb25zdCBiaXRnb0tleSA9IGJpcDMyLmZyb21CYXNlNTgoYml0Z29LZXlYcHJ2KTtcbiAgICBpZiAoIWJpdGdvS2V5LnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgIH1cbiAgICBjb25zdCBiaXRnb1hwdWIgPSBiaXRnb0tleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG5cbiAgICBob3BFeHBvcnRUeEJpdGdvU2lnbmF0dXJlID1cbiAgICAgICcweGFhJyArXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgc2VjcDI1NmsxLmVjZHNhU2lnbihCdWZmZXIuZnJvbShob3BFeHBvcnRUeElkLnNsaWNlKDIpLCAnaGV4JyksIGJpdGdvS2V5LnByaXZhdGVLZXkpLnNpZ25hdHVyZVxuICAgICAgKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2ZscicsIEZsci5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0ZmxyJywgVGZsci5jcmVhdGVJbnN0YW5jZSk7XG4gICAgY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0uaHNtWHB1YiA9IGJpdGdvWHB1YjtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgdGZsckNvaW4gPSBiaXRnby5jb2luKCd0ZmxyJykgYXMgVGZscjtcbiAgICBmbHJDb2luID0gYml0Z28uY29pbignZmxyJykgYXMgRmxyO1xuICB9KTtcblxuICBkZXNjcmliZSgnQmFzaWMgQ29pbiBJbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvIGZvciBmbHInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmbHIgPSBiaXRnby5jb2luKCdmbHInKTtcblxuICAgICAgZmxyLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZscik7XG4gICAgICBmbHIuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ2ZscicpO1xuICAgICAgZmxyLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnZmxyJyk7XG4gICAgICBmbHIuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ZsYXJlJyk7XG4gICAgICBmbHIuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTE4KTtcbiAgICAgIGZsci5zdXBwb3J0c1RzcygpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGZsci5hbGxvd3NBY2NvdW50Q29uc29saWRhdGlvbnMoKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8gZm9yIHRmbHInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZmxyID0gYml0Z28uY29pbigndGZscicpO1xuXG4gICAgICB0ZmxyLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKFRmbHIpO1xuICAgICAgdGZsci5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGZscicpO1xuICAgICAgdGZsci5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ZscicpO1xuICAgICAgdGZsci5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBmbGFyZScpO1xuICAgICAgdGZsci5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlMTgpO1xuICAgICAgdGZsci5zdXBwb3J0c1RzcygpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHRmbHIuYWxsb3dzQWNjb3VudENvbnNvbGlkYXRpb25zKCkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1AtQ2hhaW4gTWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmbHJwIGZvciBtYWlubmV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgKGZsckNvaW4gYXMgYW55KS5nZXRGbHJQKCkuc2hvdWxkLmVxdWFsKCdmbHJwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0ZmxycCBmb3IgdGVzdG5ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICh0ZmxyQ29pbiBhcyBhbnkpLmdldEZsclAoKS5zaG91bGQuZXF1YWwoJ3RmbHJwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZCBldGggYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHgxMzc0YTIwNDY2NjFmOTE0ZDE2ODdkODVkYmJjZWI5YWM3OTEwYTI5JztcbiAgICAgIHRmbHJDb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBmbHJDb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgUC1jaGFpbiBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcEFkZHJlc3NlcyA9IEVYUE9SVF9DX1RFU1RfREFUQS5wQWRkcmVzc2VzO1xuICAgICAgZm9yIChjb25zdCBhZGRyIG9mIHBBZGRyZXNzZXMpIHtcbiAgICAgICAgdGZsckNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcikuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgZmxyQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIFAtY2hhaW4gbXVsdGlzaWcgYWRkcmVzcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3M7XG4gICAgICB0ZmxyQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgZmxyQ29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGVtcHR5IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZmxyQ29pbi5pc1ZhbGlkQWRkcmVzcygnJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICBmbHJDb2luLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Rva2VuIENoZWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpc1Rva2VuJywgZnVuY3Rpb24gKCkge1xuICAgICAgdGZsckNvaW4uaXNUb2tlbigpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgZmxyQ29pbi5pc1Rva2VuKCkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdIb3AgVHJhbnNhY3Rpb24gUGFyYW1ldGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgaG9wIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnMgd2l0aCBnYXNQcmljZU1heCA+IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtb2NrRmVlRXN0aW1hdGUgPSB7XG4gICAgICAgIGZlZUVzdGltYXRlOiAxMjAwMDAsXG4gICAgICAgIGdhc0xpbWl0RXN0aW1hdGU6IDUwMDAwMCxcbiAgICAgIH07XG4gICAgICBzYW5kYm94LnN0dWIodGZsckNvaW4sICdmZWVFc3RpbWF0ZScpLnJlc29sdmVzKG1vY2tGZWVFc3RpbWF0ZSk7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICh0ZmxyQ29pbiBhcyBhbnkpLmNyZWF0ZUhvcFRyYW5zYWN0aW9uUGFyYW1zKHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMga2V5b2YgdHlwZW9mIFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2hvcFBhcmFtcycpO1xuICAgICAgcmVzdWx0LmhvcFBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0aWVzKFsndXNlclJlcVNpZycsICdnYXNQcmljZU1heCcsICdwYXltZW50SWQnLCAnZ2FzTGltaXQnXSk7XG4gICAgICByZXN1bHQuaG9wUGFyYW1zLnVzZXJSZXFTaWcuc2hvdWxkLmVxdWFsKCcweCcpO1xuICAgICAgcmVzdWx0LmhvcFBhcmFtcy5nYXNQcmljZU1heC5zaG91bGQuYmUuYWJvdmUoMCk7XG4gICAgICByZXN1bHQuaG9wUGFyYW1zLnBheW1lbnRJZC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHJlc3VsdC5ob3BQYXJhbXMuZ2FzTGltaXQuc2hvdWxkLmVxdWFsKDUwMDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIG5vIHJlY2lwaWVudHMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCAodGZsckNvaW4gYXMgYW55KVxuICAgICAgICAuY3JlYXRlSG9wVHJhbnNhY3Rpb25QYXJhbXMoe1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICAgIHR5cGU6ICdFeHBvcnQnIGFzIGtleW9mIHR5cGVvZiBUcmFuc2FjdGlvblR5cGUsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtdXN0IHNlbmQgdG8gZXhhY3RseSAxIHJlY2lwaWVudCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBtb3JlIHRoYW4gMSByZWNpcGllbnQgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9DX1RFU1RfREFUQS5jSGV4QWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6ICc1MDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhd2FpdCAodGZsckNvaW4gYXMgYW55KVxuICAgICAgICAuY3JlYXRlSG9wVHJhbnNhY3Rpb25QYXJhbXMoe1xuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMga2V5b2YgdHlwZW9mIFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ211c3Qgc2VuZCB0byBleGFjdGx5IDEgcmVjaXBpZW50Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFeHBsYWluIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhbiB1bnNpZ25lZCBleHBvcnQgaW4gQyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX0NfVEVTVF9EQVRBO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgdGZsckNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IHRlc3REYXRhLnVuc2lnbmVkVHhIZXgsXG4gICAgICAgIGNyb3NzQ2hhaW5UeXBlOiAnZXhwb3J0JyxcbiAgICAgIH0pO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1swXS5hZGRyZXNzLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmNIZXhBZGRyZXNzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgLy8gT3V0cHV0IGFkZHJlc3MgaXMgdGhlIHNvcnRlZCBQLWNoYWluIGFkZHJlc3NlcyBqb2luZWQgd2l0aCB+XG4gICAgICBjb25zdCBzb3J0ZWRQQWRkcmVzc2VzID0gdGVzdERhdGEucEFkZHJlc3Nlcy5zbGljZSgpLnNvcnQoKS5qb2luKCd+Jyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChzb3J0ZWRQQWRkcmVzc2VzKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICBzaG91bGQuZXhpc3QodHhFeHBsYWluLmZlZSk7XG4gICAgICB0eEV4cGxhaW4uZmVlLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZmVlKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBFWFBPUlRfQ19URVNUX0RBVEE7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCB0ZmxyQ29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogdGVzdERhdGEuZnVsbHNpZ250eEhleCxcbiAgICAgICAgY3Jvc3NDaGFpblR5cGU6ICdleHBvcnQnLFxuICAgICAgfSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwodGVzdERhdGEuY0hleEFkZHJlc3MudG9Mb3dlckNhc2UoKSk7XG4gICAgICAvLyBPdXRwdXQgYWRkcmVzcyBpcyB0aGUgc29ydGVkIFAtY2hhaW4gYWRkcmVzc2VzIGpvaW5lZCB3aXRoIH5cbiAgICAgIGNvbnN0IHNvcnRlZFBBZGRyZXNzZXMgPSB0ZXN0RGF0YS5wQWRkcmVzc2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oJ34nKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHNvcnRlZFBBZGRyZXNzZXMpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEV4cGxhaW4uZmVlKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mZWUpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbWlzc2luZyB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHRmbHJDb2luXG4gICAgICAgIC5leHBsYWluVHJhbnNhY3Rpb24oeyBjcm9zc0NoYWluVHlwZTogJ2V4cG9ydCcgfSBhcyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyB0eEhleCBpbiBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtaXNzaW5nIGZlZUluZm8gZm9yIG5vbi1jcm9zc0NoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAnMHgxMjMnIH0gYXMgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgZmVlSW5mbyBpbiBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIGNsaWVudCB0eFBhcmFtcyBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbnVsbDtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH1dLFxuICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGlzQmF0Y2g6IGZhbHNlLFxuICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnZmFrZVdhbGxldENvbnRyYWN0QWRkcmVzcycsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXM6IHR4UGFyYW1zIGFzIGFueSwgdHhQcmVidWlsZDogdHhQcmVidWlsZCBhcyBhbnksIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHBhcmFtcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgdHhQcmVidWlsZCB0aGF0IGlzIGJvdGggYmF0Y2ggYW5kIGhvcCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfSxcbiAgICAgICAgICB7IGFtb3VudDogJzI1MDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JyB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMzUwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH1dLFxuICAgICAgICBuZXh0Q29udHJhY3RTZXF1ZW5jZUlkOiAwLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGlzQmF0Y2g6IHRydWUsXG4gICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICdmYWtlV2FsbGV0Q29udHJhY3RBZGRyZXNzJyxcbiAgICAgICAgaG9wVHJhbnNhY3Rpb246IHtcbiAgICAgICAgICB0eDogJzB4MCcsXG4gICAgICAgICAgaWQ6ICcweDAnLFxuICAgICAgICAgIHNpZ25hdHVyZTogJzB4MCcsXG4gICAgICAgICAgcGF5bWVudElkOiAnMCcsXG4gICAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgICAgYW1vdW50OiAxMDAwMDAwMDAwMDAwMDAwLFxuICAgICAgICAgIHJlY2lwaWVudDogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScsXG4gICAgICAgICAgbm9uY2U6IDAsXG4gICAgICAgICAgdXNlclJlcVNpZzogJzB4MCcsXG4gICAgICAgICAgZ2FzUHJpY2VNYXg6IDUwMDAwMDAwMDAwMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZDogdHhQcmVidWlsZCBhcyBhbnksIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eCBjYW5ub3QgYmUgYm90aCBhIGJhdGNoIGFuZCBob3AgdHJhbnNhY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgdHhQcmVidWlsZCB3aXRoIG1vcmUgdGhhbiBvbmUgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcblxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHgxMzc0YTIwNDY2NjFmOTE0ZDE2ODdkODVkYmJjZWI5YWM3OTEwYTI5JyB9LFxuICAgICAgICAgIHsgYW1vdW50OiAnMjUwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHsgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH0sXG4gICAgICAgICAgeyBhbW91bnQ6ICcyNTAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4N2U4NWJkYzI3YzA1MGUzOTA1ZWJmNGI4ZTYzNGQ5YWQ2ZWRkMGRlNicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBpc0JhdGNoOiB0cnVlLFxuICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnZmFrZVdhbGxldENvbnRyYWN0QWRkcmVzcycsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgdGZsciBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhIHR4UHJlYnVpbGQgZnJvbSB0aGUgYml0Z28gc2VydmVyIHdpdGggdGhlIHdyb25nIGNvaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH1dLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiAnMHgxMzc0YTIwNDY2NjFmOTE0ZDE2ODdkODVkYmJjZWI5YWM3OTEwYTI5JyB9XSxcbiAgICAgICAgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBpc0JhdGNoOiBmYWxzZSxcbiAgICAgICAgY29pbjogJ2J0YycsXG4gICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiAnZmFrZVdhbGxldENvbnRyYWN0QWRkcmVzcycsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnY29pbiBpbiB0eFByZWJ1aWxkIGRpZCBub3QgbWF0Y2ggdGhhdCBpbiB0eFBhcmFtcyBzdXBwbGllZCBieSBjbGllbnQnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUU1MgVHJhbnNhY3Rpb24gVmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSBUU1MgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aG91dCB0eFByZWJ1aWxkLnJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG5cbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4NGUxZTNkNDg1NmFkOGIzMzM1MmViM2FkZDVmZjEyZWEzMjA2MTY5YScgfV0sXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUU1MgdHhQcmVidWlsZCB0eXBpY2FsbHkgaGFzIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMgYnV0IG5vdCByZWNpcGllbnRzIGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnZmFrZS10eC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICB0eEhleDpcbiAgICAgICAgICAgICcwMmYxNzI4MWQ5MDI4NTBiYTQzYjc0MDI4MzA2MWE4MDk0NGUxZTNkNDg1NmFkOGIzMzM1MmViM2FkZDVmZjEyZWEzMjA2MTY5YTg4MDE2MzQ1Nzg1ZDhhMDAwMDgwYzA4MDgwODAnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHg0ZTFlM2Q0ODU2YWQ4YjMzMzUyZWIzYWRkNWZmMTJlYTMyMDYxNjlhJywgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwJyB9XSxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7IGZlZTogMTAwMDAwMDAwMDA4MDAwMDAsIGZlZVN0cmluZzogJzEwMDAwMDAwMDAwODAwMDAwJyB9LFxuICAgICAgICAgIGNvaW46ICd0ZmxyJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgICAvLyBXaGVuIHdhbGxldFR5cGUgaXMgJ3RzcycsIGl0IHNob3VsZCBkZWxlZ2F0ZSB0byBwYXJlbnQncyB2ZXJpZnlUcmFuc2FjdGlvblxuICAgICAgICAvLyB3aGljaCBoYW5kbGVzIFRTUyB0cmFuc2FjdGlvbnMgd2l0aG91dCByZXF1aXJpbmcgdHhQcmVidWlsZC5yZWNpcGllbnRzXG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBUU1MgY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbiB3aGVuIHR4UHJlYnVpbGQgaGFzIGNvbnNvbGlkYXRlSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7XG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBiYXNlQWRkcmVzczogJzB4MTc0Y2ZkODIzYWY4Y2UyN2VkMGFmZWUzZmNmM2MzYmEyNTkxMTZiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdHhQYXJhbXMgd2l0aG91dCByZWNpcGllbnRzIChhcyBpbiBjb25zb2xpZGF0aW9uIGZsb3cpXG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdHhQcmVidWlsZCB3aXRoIGNvbnNvbGlkYXRlSWQgKHNldCBieSBzZXJ2ZXIgZHVyaW5nIGNvbnNvbGlkYXRpb24gYnVpbGQpXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgY29uc29saWRhdGVJZDogJzY4YTdkNWQwYzY2ZTc0ZTIxNmI5NzE3M2JkNTU4YzZkJyxcbiAgICAgICAgICB0eEhleDogJzB4JyxcbiAgICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMgYXMgYW55LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQgYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IFRTUyB0cmFuc2FjdGlvbiB3aGVuIHR4UGFyYW1zLnR5cGUgaXMgY29uc29saWRhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7XG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBiYXNlQWRkcmVzczogJzB4MTc0Y2ZkODIzYWY4Y2UyN2VkMGFmZWUzZmNmM2MzYmEyNTkxMTZiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgdHlwZTogJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6ICcweCcsXG4gICAgICAgICAgY29pbjogJ3RmbHInLFxuICAgICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCB0ZmxyQ29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zIGFzIGFueSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBUU1MgdHJhbnNhY3Rpb24gd2l0aCBhY2NlbGVyYXRpb24gdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHtcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICB0eXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6ICcweCcsXG4gICAgICAgICAgY29pbjogJ3RmbHInLFxuICAgICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCB0ZmxyQ29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zIGFzIGFueSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBUU1MgdHJhbnNhY3Rpb24gd2l0aCBmaWxsTm9uY2UgdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHtcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICB0eXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6ICcweCcsXG4gICAgICAgICAgY29pbjogJ3RmbHInLFxuICAgICAgICAgIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCB0ZmxyQ29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zIGFzIGFueSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBUU1MgdHJhbnNhY3Rpb24gd2l0aG91dCByZWNpcGllbnRzLCBjb25zb2xpZGF0ZUlkLCBvciB2YWxpZCB0eXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge1xuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgYmFzZUFkZHJlc3M6ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB0eEhleDogJzB4JyxcbiAgICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIGF3YWl0IHRmbHJDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyBhcyBhbnksXG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSxcbiAgICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgdHhQYXJhbXMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN0aWxsIHVzZSBGTFItc3BlY2lmaWMgdmVyaWZpY2F0aW9uIGZvciBub24tVFNTIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG5cbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6ICcweDEzNzRhMjA0NjY2MWY5MTRkMTY4N2Q4NWRiYmNlYjlhYzc5MTBhMjknIH1dLFxuICAgICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOScgfV0sXG4gICAgICAgICAgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCxcbiAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgICBpc0JhdGNoOiBmYWxzZSxcbiAgICAgICAgICBjb2luOiAndGZscicsXG4gICAgICAgICAgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnLFxuICAgICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogJ2Zha2VXYWxsZXRDb250cmFjdEFkZHJlc3MnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICAgIC8vIFdpdGhvdXQgd2FsbGV0VHlwZSBvciB3aXRoIHdhbGxldFR5cGU6ICdvbmNoYWluJywgc2hvdWxkIHVzZSBGTFIncyBvd24gdmVyaWZpY2F0aW9uXG4gICAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IHRmbHJDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIb3AgZXhwb3J0IHR4IHZlcmlmeScsICgpID0+IHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG4gICAgICBjb25zdCBob3BEZXN0aW5hdGlvbkFkZHJlc3MgPVxuICAgICAgICAnUC1jb3N0d28xNW1zdnIyN3N6dmhocG1haDBjMzhnY21sN3ZtMjl4amg3dGNlazh+UC1jb3N0d28xY3dyZHRyZ2Y0eGg4MG5jdTdwYWxyanc3Z240bXBqMG40ZHhnaGh+UC1jb3N0d28xenQ5bjk2aGV5NGZzdm5kZTM1bjNrNGt0NXB1N2M3ODRkemV3emQnO1xuICAgICAgY29uc3QgaG9wQWRkcmVzcyA9ICcweDI4QTA1OTMzZEM3NmU0ZTZjMjVmMzVENWM5YjJBNTg3Njk3MDBFNzYnO1xuICAgICAgY29uc3QgZmxycENvaW4gPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gICAgICBjb25zdCBpbXBvcnRUeEZlZSA9IE51bWJlcigoZmxycENvaW4ubmV0d29yayBhcyBhbnkpLm1pbkltcG9ydFRvUEZlZSk7XG4gICAgICAvLyBBZGp1c3RlZCBhbW91bnQgdG8gd29yayBiYWNrd2FyZHMgZnJvbSBob3AgYW1vdW50ICg1MDAwMDAwMCk6IDUwMDAwMDAwIC0gaW1wb3J0VHhGZWUgbmFub0ZMUlxuICAgICAgY29uc3QgYW1vdW50ID0gKDUwMDAwMDAwIC0gaW1wb3J0VHhGZWUpICogMWU5O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudCwgYWRkcmVzczogaG9wRGVzdGluYXRpb25BZGRyZXNzIH1dLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzUxMDAwMDUwMDAwMDAwMDAwJywgYWRkcmVzczogaG9wQWRkcmVzcyB9XSxcbiAgICAgICAgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBpc0JhdGNoOiBmYWxzZSxcbiAgICAgICAgY29pbjogJ3RmbHInLFxuICAgICAgICB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcsXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogJ2Zha2VXYWxsZXRDb250cmFjdEFkZHJlc3MnLFxuICAgICAgICBob3BUcmFuc2FjdGlvbjoge1xuICAgICAgICAgIHR4OiBob3BFeHBvcnRUeCxcbiAgICAgICAgICBpZDogaG9wRXhwb3J0VHhJZCxcbiAgICAgICAgICBzaWduYXR1cmU6IGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmUsXG4gICAgICAgICAgcGF5bWVudElkOiAnNDkzMzM0OTk4NCcsXG4gICAgICAgICAgZ2FzUHJpY2U6ICc1MCcsXG4gICAgICAgICAgZ2FzTGltaXQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAnLFxuICAgICAgICAgIHJlY2lwaWVudDogaG9wRGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICAgIG5vbmNlOiAwLFxuICAgICAgICAgIHVzZXJSZXFTaWc6XG4gICAgICAgICAgICAnMHgwNmZkMGIxZjg4NTlhNDBkOWZiMmQxYTY1ZDU0ZGE1ZDY0NWExZDgxYmJiOGMxYzViMDM3MDUxODQzZWMwZDNjMjI0MzNlYzdmNTBjYzk3ZmEwNDFjYmY4ZDlmZjVkZGY3ZWQ0MWY3MmEwOGZhM2YxOTgzZmQ2NTFhMzNhNDQ0MScsXG4gICAgICAgICAgZ2FzUHJpY2VNYXg6IDcxODc1MDAwMDAsXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICAgIHR4UHJlYnVpbGQuaG9wVHJhbnNhY3Rpb24uc2lnbmF0dXJlID0gaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZTtcbiAgICAgIH0pO1xuXG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgc2FuZGJveC5zdHViKHRmbHJDb2luIGFzIGFueSwgJ3ZlcmlmeVNpZ25hdHVyZUZvckF0b21pY1RyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgc3VjY2Vzc2Z1bGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2ZXJpZnlGbHJUcmFuc2FjdGlvbk9wdGlvbnMgPSB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9O1xuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCB0ZmxyQ29pbi52ZXJpZnlUcmFuc2FjdGlvbih2ZXJpZnlGbHJUcmFuc2FjdGlvbk9wdGlvbnMpO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZm9yIGFtb3VudCBwbHVzIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICB0eFBhcmFtczogeyAuLi50eFBhcmFtcywgcmVjaXBpZW50czogW3sgYW1vdW50OiBhbW91bnQgKyAxZTksIGFkZHJlc3M6IGhvcERlc3RpbmF0aW9uQWRkcmVzcyB9XSB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCB0ZmxyQ29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih2ZXJpZnlGbHJUcmFuc2FjdGlvbk9wdGlvbnMpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICBgSG9wIGFtb3VudDogJHthbW91bnQgLyAxZTkgKyBpbXBvcnRUeEZlZX0gaXMgbGVzcyB0aGFuIHJlcXVpcmVkIGFtb3VudDogJHthbW91bnQgLyAxZTkgKyBpbXBvcnRUeEZlZSArIDF9YFxuICAgICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSBmb3IgY2hhbmdlZCBwcmVidWlsZCBob3AgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5RmxyVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgLi4udHhQcmVidWlsZCwgcmVjaXBpZW50czogW3sgYWRkcmVzczogYWRkcmVzczIsIGFtb3VudDogJzUxMDAwMDUwMDAwMDAwMDAwJyB9XSB9LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRmbHJDb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHZlcmlmeUZsclRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgcmVjaXBpZW50IGFkZHJlc3Mgb2YgdHhQcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBob3AgYWRkcmVzc2ApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZm9yIGNoYW5nZWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaG9wRGVzdGluYXRpb25BZGRyZXNzRGlmZiA9XG4gICAgICAgICAgJ1AtY29zdHdvMTVtc3ZyMjdzenZoaHBtYWgwYzM4Z2NtbDd2bTI5eGpoN3RjZWs5flAtY29zdHdvMWN3cmR0cmdmNHhoODBuY3U3cGFscmp3N2duNG1wajBuNGR4Z2hoflAtY29zdHdvMXp0OW45NmhleTRmc3ZuZGUzNW4zazRrdDVwdTdjNzg0ZHpld3pkJztcbiAgICAgICAgY29uc3QgdmVyaWZ5RmxyVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgIHR4UGFyYW1zOiB7IC4uLnR4UGFyYW1zLCByZWNpcGllbnRzOiBbeyBhbW91bnQ6IGFtb3VudCwgYWRkcmVzczogaG9wRGVzdGluYXRpb25BZGRyZXNzRGlmZiB9XSB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdGZsckNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24odmVyaWZ5RmxyVHJhbnNhY3Rpb25PcHRpb25zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgYEhvcCBkZXN0aW5hdGlvbjogJHtob3BEZXN0aW5hdGlvbkFkZHJlc3N9IGRvZXMgbm90IGVxdWFsIG9yaWdpbmFsIHJlY2lwaWVudDogJHtob3BEZXN0aW5hdGlvbkFkZHJlc3NEaWZmfWBcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGlmIHdhbGxldElkIGlzIHVzZWQgaW5zdGVhZCBvZiBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2ZXJpZnlGbHJUcmFuc2FjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgdHhQYXJhbXM6IHsgLi4udHhQYXJhbXMsIHJlY2lwaWVudHM6IFt7IGFtb3VudDogYW1vdW50LCB3YWxsZXRJZDogJ3NhbWUgd2FsbGV0JyB9XSB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgdGZsckNvaW4udmVyaWZ5VHJhbnNhY3Rpb24odmVyaWZ5RmxyVHJhbnNhY3Rpb25PcHRpb25zKTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGVIb3BQcmVidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB2YWxpZGF0ZUhvcFNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgdmFsaWRhdGVIb3BTYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgSFNNIHNpZ25hdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG4gICAgICBjb25zdCBob3BQcmVidWlsZCA9IHtcbiAgICAgICAgdHg6IGhvcEV4cG9ydFR4LFxuICAgICAgICBpZDogaG9wRXhwb3J0VHhJZCxcbiAgICAgICAgc2lnbmF0dXJlOiAnMHgnICsgJ2FhJy5yZXBlYXQoNjUpLCAvLyBJbnZhbGlkIHNpZ25hdHVyZVxuICAgICAgICBwYXltZW50SWQ6ICcxMjM0NScsXG4gICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgYW1vdW50OiAxMDAwMDAwMDAwMDAwMDAwLFxuICAgICAgICByZWNpcGllbnQ6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLFxuICAgICAgICBub25jZTogMCxcbiAgICAgICAgdXNlclJlcVNpZzogJzB4JyxcbiAgICAgICAgZ2FzUHJpY2VNYXg6IDUwMDAwMDAwMDAwMCxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMgY29uc3QsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCAodGZsckNvaW4gYXMgYW55KVxuICAgICAgICAudmFsaWRhdGVIb3BQcmVidWlsZCh3YWxsZXQsIGhvcFByZWJ1aWxkKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSG9wIHR4aWQgc2lnbmF0dXJlIGludmFsaWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgRXhwb3J0IGhvcCBwcmVidWlsZCBzdWNjZXNzZnVsbHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB2YWxpZGF0ZUhvcFNhbmRib3guc3R1Yih0ZmxyQ29pbiBhcyBhbnksICd2ZXJpZnlTaWduYXR1cmVGb3JBdG9taWNUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuICAgICAgY29uc3QgaG9wUHJlYnVpbGQgPSB7XG4gICAgICAgIHR4OiBob3BFeHBvcnRUeCxcbiAgICAgICAgaWQ6IGhvcEV4cG9ydFR4SWQsXG4gICAgICAgIHNpZ25hdHVyZTogaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZSxcbiAgICAgICAgcGF5bWVudElkOiAnMTIzNDUnLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGFtb3VudDogNTAwMDAwMDAsXG4gICAgICAgIHJlY2lwaWVudDogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgIG5vbmNlOiAwLFxuICAgICAgICB1c2VyUmVxU2lnOiAnMHgnLFxuICAgICAgICBnYXNQcmljZU1heDogNTAwMDAwMDAwMDAwLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBjb25zdCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0ICh0ZmxyQ29pbiBhcyBhbnkpLnZhbGlkYXRlSG9wUHJlYnVpbGQod2FsbGV0LCBob3BQcmVidWlsZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBFeHBvcnQgaG9wIHByZWJ1aWxkIHdpdGggbWlzbWF0Y2hlZCBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pO1xuICAgICAgY29uc3QgaG9wUHJlYnVpbGQgPSB7XG4gICAgICAgIHR4OiBob3BFeHBvcnRUeCxcbiAgICAgICAgaWQ6IGhvcEV4cG9ydFR4SWQsXG4gICAgICAgIHNpZ25hdHVyZTogaG9wRXhwb3J0VHhCaXRnb1NpZ25hdHVyZSxcbiAgICAgICAgcGF5bWVudElkOiAnMTIzNDUnLFxuICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIGFtb3VudDogNTAwMDAwMDAsXG4gICAgICAgIHJlY2lwaWVudDogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgIG5vbmNlOiAwLFxuICAgICAgICB1c2VyUmVxU2lnOiAnMHgnLFxuICAgICAgICBnYXNQcmljZU1heDogNTAwMDAwMDAwMDAwLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyBhcyBjb25zdCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsUGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6ICc5OTk5OTk5OTk5OTk5OTk5OTknLCAvLyBXcm9uZyBhbW91bnRcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgKHRmbHJDb2luIGFzIGFueSlcbiAgICAgICAgLnZhbGlkYXRlSG9wUHJlYnVpbGQod2FsbGV0LCBob3BQcmVidWlsZCwgb3JpZ2luYWxQYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9Ib3AgYW1vdW50OiAuKiBpcyBsZXNzIHRoYW4gcmVxdWlyZWQgYW1vdW50Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBFeHBvcnQgaG9wIHByZWJ1aWxkIHdpdGggbWlzbWF0Y2hlZCBkZXN0aW5hdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSk7XG4gICAgICBjb25zdCBmbHJwQ29pbiA9IGNvaW5zLmdldCgndGZscnAnKTtcbiAgICAgIGNvbnN0IG1pbkltcG9ydFRvUEZlZSA9IE51bWJlcigoZmxycENvaW4ubmV0d29yayBhcyBhbnkpLm1pbkltcG9ydFRvUEZlZSk7XG4gICAgICBjb25zdCBob3BQcmVidWlsZCA9IHtcbiAgICAgICAgdHg6IGhvcEV4cG9ydFR4LFxuICAgICAgICBpZDogaG9wRXhwb3J0VHhJZCxcbiAgICAgICAgc2lnbmF0dXJlOiBob3BFeHBvcnRUeEJpdGdvU2lnbmF0dXJlLFxuICAgICAgICBwYXltZW50SWQ6ICcxMjM0NScsXG4gICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgZ2FzTGltaXQ6IDUwMDAwMCxcbiAgICAgICAgYW1vdW50OiA1MDAwMDAwMCxcbiAgICAgICAgcmVjaXBpZW50OiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcyxcbiAgICAgICAgbm9uY2U6IDAsXG4gICAgICAgIHVzZXJSZXFTaWc6ICcweCcsXG4gICAgICAgIGdhc1ByaWNlTWF4OiA1MDAwMDAwMDAwMDAsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnIGFzIGNvbnN0LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnUC1jb3N0d28xZGlmZmVyZW50flAtY29zdHdvMWFkZHJlc3N+UC1jb3N0d28xaGVyZScsXG4gICAgICAgICAgICBhbW91bnQ6IFN0cmluZygoNTAwMDAwMDAgLSBtaW5JbXBvcnRUb1BGZWUpICogMWU5KSwgLy8gQ29ycmVjdCBhbW91bnQgc28gZGVzdGluYXRpb24gY2hlY2sgaXMgcmVhY2hlZFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCAodGZsckNvaW4gYXMgYW55KVxuICAgICAgICAudmFsaWRhdGVIb3BQcmVidWlsZCh3YWxsZXQsIGhvcFByZWJ1aWxkLCBvcmlnaW5hbFBhcmFtcylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0hvcCBkZXN0aW5hdGlvbjogLiogZG9lcyBub3QgZXF1YWwgb3JpZ2luYWwgcmVjaXBpZW50Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcmVzaWduVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcGFyYW1zIHVuY2hhbmdlZCB3aGVuIG5vIGhvcFRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzJyxcbiAgICAgICAgd2FsbGV0OiBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pLFxuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbXSB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGZsckNvaW4ucHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtcyBhcyBhbnkpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChwYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxsIHZhbGlkYXRlSG9wUHJlYnVpbGQgd2hlbiBob3BUcmFuc2FjdGlvbiBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3R1YiA9IHNhbmRib3guc3R1Yih0ZmxyQ29pbiBhcyBhbnksICd2YWxpZGF0ZUhvcFByZWJ1aWxkJykucmVzb2x2ZXMoKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IGhvcFRyYW5zYWN0aW9uID0ge1xuICAgICAgICB0eDogaG9wRXhwb3J0VHgsXG4gICAgICAgIGlkOiBob3BFeHBvcnRUeElkLFxuICAgICAgICBzaWduYXR1cmU6IGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmUsXG4gICAgICAgIHBheW1lbnRJZDogJzEyMzQ1JyxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBhbW91bnQ6IDUwMDAwMDAwLFxuICAgICAgICByZWNpcGllbnQ6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLFxuICAgICAgICBub25jZTogMCxcbiAgICAgICAgdXNlclJlcVNpZzogJzB4JyxcbiAgICAgICAgZ2FzUHJpY2VNYXg6IDUwMDAwMDAwMDAwMCxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMgY29uc3QsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjMnLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgaG9wVHJhbnNhY3Rpb246IGhvcFRyYW5zYWN0aW9uLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGZsckNvaW4ucHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtcyBhcyBhbnkpO1xuICAgICAgdmFsaWRhdGVTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncG9zdFByb2Nlc3NQcmVidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBwYXJhbXMgdW5jaGFuZ2VkIHdoZW4gbm8gaG9wVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjMnLFxuICAgICAgICBjb2luOiAndGZscicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5wb3N0UHJvY2Vzc1ByZWJ1aWxkKHBhcmFtcyBhcyBhbnkpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChwYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxsIHZhbGlkYXRlSG9wUHJlYnVpbGQgd2hlbiBob3BUcmFuc2FjdGlvbiBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3R1YiA9IHNhbmRib3guc3R1Yih0ZmxyQ29pbiBhcyBhbnksICd2YWxpZGF0ZUhvcFByZWJ1aWxkJykucmVzb2x2ZXMoKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGZsckNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IGhvcFRyYW5zYWN0aW9uID0ge1xuICAgICAgICB0eDogaG9wRXhwb3J0VHgsXG4gICAgICAgIGlkOiBob3BFeHBvcnRUeElkLFxuICAgICAgICBzaWduYXR1cmU6IGhvcEV4cG9ydFR4Qml0Z29TaWduYXR1cmUsXG4gICAgICAgIHBheW1lbnRJZDogJzEyMzQ1JyxcbiAgICAgICAgZ2FzUHJpY2U6IDIwMDAwMDAwMDAwLFxuICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICBhbW91bnQ6IDUwMDAwMDAwLFxuICAgICAgICByZWNpcGllbnQ6IEVYUE9SVF9DX1RFU1RfREFUQS5wTXVsdGlzaWdBZGRyZXNzLFxuICAgICAgICBub25jZTogMCxcbiAgICAgICAgdXNlclJlcVNpZzogJzB4JyxcbiAgICAgICAgZ2FzUHJpY2VNYXg6IDUwMDAwMDAwMDAwMCxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMgY29uc3QsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjMnLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogRVhQT1JUX0NfVEVTVF9EQVRBLnBNdWx0aXNpZ0FkZHJlc3MsIGFtb3VudDogJzEwMDAwMDAwMCcgfV0gfSxcbiAgICAgICAgaG9wVHJhbnNhY3Rpb246IGhvcFRyYW5zYWN0aW9uLFxuICAgICAgICBjb2luOiAndGZscicsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB0ZmxyQ29pbi5wb3N0UHJvY2Vzc1ByZWJ1aWxkKHBhcmFtcyBhcyBhbnkpO1xuICAgICAgdmFsaWRhdGVTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RXh0cmFQcmVidWlsZFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgb2JqZWN0IHdoZW4gaG9wIGlzIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJzB4MTIzNCcsIGFtb3VudDogJzEwMDAwMDAnIH1dLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGZsckNvaW4uZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBvYmplY3Qgd2hlbiBob3AgaXMgZmFsc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgaG9wOiBmYWxzZSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJzB4MTIzNCcsIGFtb3VudDogJzEwMDAwMDAnIH1dLFxuICAgICAgICB3YWxsZXQ6IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCB3aGVuIHdhbGxldCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRQYXJhbXMgPSB7XG4gICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJzB4MTIzNCcsIGFtb3VudDogJzEwMDAwMDAnIH1dLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGZsckNvaW4uZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBvYmplY3Qgd2hlbiByZWNpcGllbnRzIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgICAgaG9wOiB0cnVlLFxuICAgICAgICB3YWxsZXQ6IG5ldyBXYWxsZXQoYml0Z28sIHRmbHJDb2luLCB7fSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2FsbCBjcmVhdGVIb3BUcmFuc2FjdGlvblBhcmFtcyB3aGVuIGhvcCBpcyB0cnVlIHdpdGggYWxsIHJlcXVpcmVkIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tGZWVFc3RpbWF0ZSA9IHtcbiAgICAgICAgZmVlRXN0aW1hdGU6IDEyMDAwMCxcbiAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogNTAwMDAwLFxuICAgICAgfTtcbiAgICAgIHNhbmRib3guc3R1Yih0ZmxyQ29pbiwgJ2ZlZUVzdGltYXRlJykucmVzb2x2ZXMobW9ja0ZlZUVzdGltYXRlKTtcblxuICAgICAgY29uc3QgYnVpbGRQYXJhbXMgPSB7XG4gICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgd2FsbGV0OiBuZXcgV2FsbGV0KGJpdGdvLCB0ZmxyQ29pbiwge30pLFxuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBFWFBPUlRfQ19URVNUX0RBVEEucE11bHRpc2lnQWRkcmVzcywgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwJyB9XSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcgYXMgY29uc3QsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZmxyQ29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaG9wUGFyYW1zJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmZWVFc3RpbWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIG1ha2UgQVBJIGNhbGwgd2l0aCBjb3JyZWN0IHF1ZXJ5IHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBlY3RlZEZlZUVzdGltYXRlID0ge1xuICAgICAgICBmZWVFc3RpbWF0ZTogMTIwMDAwLFxuICAgICAgICBnYXNMaW1pdEVzdGltYXRlOiA1MDAwMDAsXG4gICAgICB9O1xuXG4gICAgICBub2NrKCdodHRwczovL2FwcC5iaXRnby10ZXN0LmNvbScpXG4gICAgICAgIC5nZXQoJy9hcGkvdjIvdGZsci90eC9mZWUnKVxuICAgICAgICAucXVlcnkoe1xuICAgICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgICByZWNpcGllbnQ6ICcweDEyMzQnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAnLFxuICAgICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCBleHBlY3RlZEZlZUVzdGltYXRlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGZsckNvaW4uZmVlRXN0aW1hdGUoe1xuICAgICAgICBob3A6IHRydWUsXG4gICAgICAgIHJlY2lwaWVudDogJzB4MTIzNCcsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAnLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuZmVlRXN0aW1hdGUuc2hvdWxkLmVxdWFsKGV4cGVjdGVkRmVlRXN0aW1hdGUuZmVlRXN0aW1hdGUpO1xuICAgICAgcmVzdWx0Lmdhc0xpbWl0RXN0aW1hdGUuc2hvdWxkLmVxdWFsKGV4cGVjdGVkRmVlRXN0aW1hdGUuZ2FzTGltaXRFc3RpbWF0ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1ha2UgQVBJIGNhbGwgd2l0aCBkYXRhIHBhcmFtZXRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkRmVlRXN0aW1hdGUgPSB7XG4gICAgICAgIGZlZUVzdGltYXRlOiAxNTAwMDAsXG4gICAgICAgIGdhc0xpbWl0RXN0aW1hdGU6IDYwMDAwMCxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBwLmJpdGdvLXRlc3QuY29tJylcbiAgICAgICAgLmdldCgnL2FwaS92Mi90ZmxyL3R4L2ZlZScpXG4gICAgICAgIC5xdWVyeSh7XG4gICAgICAgICAgcmVjaXBpZW50OiAnMHg1Njc4JyxcbiAgICAgICAgICBkYXRhOiAnMHhhYmNkZWYnLFxuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCBleHBlY3RlZEZlZUVzdGltYXRlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGZsckNvaW4uZmVlRXN0aW1hdGUoe1xuICAgICAgICByZWNpcGllbnQ6ICcweDU2NzgnLFxuICAgICAgICBkYXRhOiAnMHhhYmNkZWYnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5mZWVFc3RpbWF0ZS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRGZWVFc3RpbWF0ZS5mZWVFc3RpbWF0ZSk7XG4gICAgICByZXN1bHQuZ2FzTGltaXRFc3RpbWF0ZS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRGZWVFc3RpbWF0ZS5nYXNMaW1pdEVzdGltYXRlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFR4SGFzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNhbGN1bGF0ZSBjb3JyZWN0IGtlY2NhazI1NiBoYXNoIGZvciB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IEVYUE9SVF9DX1RFU1RfREFUQS5mdWxsc2lnbnR4SGV4O1xuICAgICAgY29uc3QgaGFzaCA9ICh0ZmxyQ29pbi5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgRmxyKS5nZXRUeEhhc2godHhIZXgpO1xuXG4gICAgICBoYXNoLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICBoYXNoLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuXG4gICAgICAvLyBWZXJpZnkgaXQgbWF0Y2hlcyBvdXIgaGVscGVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCBleHBlY3RlZEhhc2ggPSBnZXRUeEhhc2godHhIZXgpO1xuICAgICAgaGFzaC50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKGV4cGVjdGVkSGFzaC50b1N0cmluZygnaGV4JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdHggaGV4IHdpdGggMHggcHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSAnMHgnICsgJ2FiY2QnLnJlcGVhdCgxMCk7XG4gICAgICBjb25zdCBoYXNoID0gKHRmbHJDb2luLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBGbHIpLmdldFR4SGFzaCh0eEhleCk7XG5cbiAgICAgIGhhc2guc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgIGhhc2gubGVuZ3RoLnNob3VsZC5lcXVhbCgzMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0eCBoZXggd2l0aG91dCAweCBwcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9ICdhYmNkJy5yZXBlYXQoMTApO1xuICAgICAgY29uc3QgaGFzaCA9ICh0ZmxyQ29pbi5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgRmxyKS5nZXRUeEhhc2godHhIZXgpO1xuXG4gICAgICBoYXNoLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICBoYXNoLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQnVpbGQgVW5zaWduZWQgU3dlZXAgZm9yIFNlbGYtQ3VzdG9keSBDb2xkIFdhbGxldHMgLSAoTVBDdjIpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgY29uc3QgZXhwbG9yZXJVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS5mbHJFeHBsb3JlckJhc2VVcmwgYXMgc3RyaW5nO1xuICBjb25zdCBtYXhGZWVQZXJHYXN2YWx1ZSA9IDMwMDAwMDAwMDAwO1xuICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhc1ZhbHVlID0gMTUwMDAwMDAwMDA7XG4gIGNvbnN0IGNoYWluX2lkID0gMTE0O1xuICBjb25zdCBnYXNMaW1pdHZhbHVlID0gNTAwMDAwO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgYW4gdW5zaWduZWQgc3dlZXAgd2l0aG91dCBkZXJpdmF0aW9uIHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgbm9jayhleHBsb3JlclVybClcbiAgICAgIC5nZXQoJy9hcGknKVxuICAgICAgLnR3aWNlKClcbiAgICAgIC5xdWVyeShtb2NrRGF0YVVuc2lnbmVkU3dlZXAuZ2V0VHhMaXN0UmVxdWVzdClcbiAgICAgIC5yZXBseSgyMDAsIG1vY2tEYXRhVW5zaWduZWRTd2VlcC5nZXRUeExpc3RSZXNwb25zZSk7XG4gICAgbm9jayhleHBsb3JlclVybClcbiAgICAgIC5nZXQoJy9hcGknKVxuICAgICAgLnF1ZXJ5KG1vY2tEYXRhVW5zaWduZWRTd2VlcC5nZXRCYWxhbmNlUmVxdWVzdClcbiAgICAgIC5yZXBseSgyMDAsIG1vY2tEYXRhVW5zaWduZWRTd2VlcC5nZXRCYWxhbmNlUmVzcG9uc2UpO1xuXG4gICAgY29uc3QgYmFzZUNvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RmbHInKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IChhd2FpdCBiYXNlQ29pbi5yZWNvdmVyKHtcbiAgICAgIHVzZXJLZXk6IG1vY2tEYXRhVW5zaWduZWRTd2VlcC51c2VyS2V5LFxuICAgICAgYmFja3VwS2V5OiBtb2NrRGF0YVVuc2lnbmVkU3dlZXAuYmFja3VwS2V5LFxuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBtb2NrRGF0YVVuc2lnbmVkU3dlZXAud2FsbGV0QmFzZUFkZHJlc3MsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBtb2NrRGF0YVVuc2lnbmVkU3dlZXAucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgZWlwMTU1OTogeyBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhc3ZhbHVlLCBtYXhQcmlvcml0eUZlZVBlckdhczogbWF4UHJpb3JpdHlGZWVQZXJHYXNWYWx1ZSB9LFxuICAgICAgZ2FzTGltaXQ6IGdhc0xpbWl0dmFsdWUsXG4gICAgICByZXBsYXlQcm90ZWN0aW9uT3B0aW9uczoge1xuICAgICAgICBjaGFpbjogY2hhaW5faWQsXG4gICAgICAgIGhhcmRmb3JrOiAnbG9uZG9uJyxcbiAgICAgIH0sXG4gICAgfSkpIGFzIFVuc2lnbmVkU3dlZXBUeE1QQ3YyO1xuICAgIHNob3VsZC5leGlzdCh0cmFuc2FjdGlvbik7XG4gICAgdHJhbnNhY3Rpb24uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4UmVxdWVzdHMnKTtcbiAgICB0cmFuc2FjdGlvbi50eFJlcXVlc3RzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgY29uc3QgdHhSZXF1ZXN0ID0gdHJhbnNhY3Rpb24udHhSZXF1ZXN0c1swXTtcbiAgICB0eFJlcXVlc3Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ3dhbGxldENvaW4nKTtcbiAgICB0eFJlcXVlc3Qud2FsbGV0Q29pbi5zaG91bGQuZXF1YWwoJ3RmbHInKTtcbiAgICB0eFJlcXVlc3Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ3RyYW5zYWN0aW9ucycpO1xuICAgIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBjb25zdCB0eCA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF07XG4gICAgdHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ25vbmNlJyk7XG4gICAgdHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Vuc2lnbmVkVHgnKTtcbiAgICB0eC51bnNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXJpYWxpemVkVHhIZXgnKTtcbiAgICB0eC51bnNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYWJsZUhleCcpO1xuICAgIHR4LnVuc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Rlcml2YXRpb25QYXRoJyk7XG4gICAgdHgudW5zaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlSW5mbycpO1xuICAgIHR4LnVuc2lnbmVkVHguZmVlSW5mbz8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZScpO1xuICAgIHR4LnVuc2lnbmVkVHguZmVlSW5mbz8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZVN0cmluZycpO1xuICAgIHR4LnVuc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BhcnNlZFR4Jyk7XG4gICAgdHgudW5zaWduZWRUeC5wYXJzZWRUeD8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NwZW5kQW1vdW50Jyk7XG4gICAgdHgudW5zaWduZWRUeC5wYXJzZWRUeD8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ291dHB1dHMnKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ05vbiBCaXRnbyBSZWNvdmVyeSBmb3IgSG90IFdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICBjb25zdCBleHBsb3JlclVybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLmZsckV4cGxvcmVyQmFzZVVybCBhcyBzdHJpbmc7XG4gIGNvbnN0IG1heEZlZVBlckdhc3ZhbHVlID0gMzAwMDAwMDAwMDA7XG4gIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzVmFsdWUgPSAxNTAwMDAwMDAwMDtcbiAgY29uc3QgY2hhaW5faWQgPSAxMTQ7XG4gIGNvbnN0IGdhc0xpbWl0dmFsdWUgPSA1MDAwMDA7XG5cbiAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHNpZ25lZCBub24tYml0Z28gcmVjb3ZlcnkgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgbm9jayhleHBsb3JlclVybClcbiAgICAgIC5nZXQoJy9hcGknKVxuICAgICAgLnR3aWNlKClcbiAgICAgIC5xdWVyeShtb2NrRGF0YU5vbkJpdEdvUmVjb3ZlcnkuZ2V0VHhMaXN0UmVxdWVzdClcbiAgICAgIC5yZXBseSgyMDAsIG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5nZXRUeExpc3RSZXNwb25zZSk7XG4gICAgbm9jayhleHBsb3JlclVybClcbiAgICAgIC5nZXQoJy9hcGknKVxuICAgICAgLnF1ZXJ5KG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5nZXRCYWxhbmNlUmVxdWVzdClcbiAgICAgIC5yZXBseSgyMDAsIG1vY2tEYXRhTm9uQml0R29SZWNvdmVyeS5nZXRCYWxhbmNlUmVzcG9uc2UpO1xuXG4gICAgY29uc3QgYmFzZUNvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RmbHInKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IGJhc2VDb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleTogbW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LnVzZXJLZXlEYXRhLFxuICAgICAgYmFja3VwS2V5OiBtb2NrRGF0YU5vbkJpdEdvUmVjb3ZlcnkuYmFja3VwS2V5RGF0YSxcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogbW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LndhbGxldFJvb3RBZGRyZXNzLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogbW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LndhbGxldFBhc3NwaHJhc2UsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBtb2NrRGF0YU5vbkJpdEdvUmVjb3ZlcnkucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgZWlwMTU1OTogeyBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhc3ZhbHVlLCBtYXhQcmlvcml0eUZlZVBlckdhczogbWF4UHJpb3JpdHlGZWVQZXJHYXNWYWx1ZSB9LFxuICAgICAgZ2FzTGltaXQ6IGdhc0xpbWl0dmFsdWUsXG4gICAgICByZXBsYXlQcm90ZWN0aW9uT3B0aW9uczoge1xuICAgICAgICBjaGFpbjogY2hhaW5faWQsXG4gICAgICAgIGhhcmRmb3JrOiAnbG9uZG9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uKTtcbiAgICB0cmFuc2FjdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnKTtcbiAgICB0cmFuc2FjdGlvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHgnKTtcbiAgICBjb25zdCB0eCA9IEZlZU1hcmtldEVJUDE1NTlUcmFuc2FjdGlvbi5mcm9tU2VyaWFsaXplZFR4KEJ1ZmZlci5mcm9tKHN0cmlwSGV4UHJlZml4KHRyYW5zYWN0aW9uLnR4KSwgJ2hleCcpKTtcbiAgICB0eC5nZXRTZW5kZXJBZGRyZXNzKCkudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwobW9ja0RhdGFOb25CaXRHb1JlY292ZXJ5LndhbGxldFJvb3RBZGRyZXNzKTtcbiAgICBjb25zdCBqc29uVHggPSB0eC50b0pTT04oKTtcbiAgICBqc29uVHgudG8/LnNob3VsZC5lcXVhbChtb2NrRGF0YU5vbkJpdEdvUmVjb3ZlcnkucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gIH0pO1xufSk7XG4iXX0=