@bitgo-beta/sdk-coin-sol 7.6.4-beta.784 → 7.6.4-beta.786

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.
@@ -67,13 +67,12 @@ describe('Solana Confidential Transfer Builder', () => {
67
67
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
68
  const solTx = (tx) => tx.solTransaction;
69
69
  describe('ConfigureAccount', () => {
70
- it('should build a configure account instruction with correct 79-byte layout', async () => {
70
+ it('should build a configure account instruction with the 47-byte Token-2022 layout', async () => {
71
71
  const builder = ctBuilder();
72
72
  builder.configureAccount({
73
73
  tokenAddress,
74
74
  mintAddress,
75
75
  authorityAddress,
76
- elgamalPubkey: '11'.repeat(32),
77
76
  decryptableZeroBalance: zeroBytes36,
78
77
  maximumPendingBalanceCreditCounter: '65536',
79
78
  proofInstructionOffset: 1,
@@ -86,13 +85,15 @@ describe('Solana Confidential Transfer Builder', () => {
86
85
  const rawInstructions = solTx(tx).instructions;
87
86
  rawInstructions.should.have.length(1);
88
87
  const data = rawInstructions[0].data;
89
- data.length.should.equal(79);
88
+ // Token-2022 ConfigureAccount carries no ElGamal pubkey: the key travels in the
89
+ // VerifyPubkeyValidity proof instruction's context. Layout is
90
+ // [27][2] + decryptable_zero_balance(36) + maximum_pending_balance_credit_counter(u64) + proof_instruction_offset(i8).
91
+ data.length.should.equal(47);
90
92
  data[0].should.equal(27); // ConfidentialTransferExtension
91
93
  data[1].should.equal(2); // ConfigureAccount
92
- data.slice(2, 34).toString('hex').should.equal('11'.repeat(32)); // new_account_elgamal_pubkey
93
- data.slice(34, 70).toString('hex').should.equal(zeroBytes36); // decryptable_zero_balance
94
- data.readBigUInt64LE(70).toString().should.equal('65536'); // max pending balance credit counter
95
- data[78].should.equal(1); // proof_instruction_offset
94
+ data.slice(2, 38).toString('hex').should.equal(zeroBytes36); // decryptable_zero_balance
95
+ data.readBigUInt64LE(38).toString().should.equal('65536'); // max pending balance credit counter
96
+ data[46].should.equal(1); // proof_instruction_offset
96
97
  // Verify accounts
97
98
  const keys = rawInstructions[0].keys;
98
99
  keys.should.have.length(4);
@@ -111,7 +112,6 @@ describe('Solana Confidential Transfer Builder', () => {
111
112
  tokenAddress,
112
113
  mintAddress,
113
114
  authorityAddress,
114
- elgamalPubkey: '11'.repeat(32),
115
115
  instructionsSysvarOrContextStateAddress: contextStateAddress,
116
116
  decryptableZeroBalance: zeroBytes36,
117
117
  maximumPendingBalanceCreditCounter: '65536',
@@ -121,7 +121,50 @@ describe('Solana Confidential Transfer Builder', () => {
121
121
  const keys = solTx(tx).instructions[0].keys;
122
122
  keys[2].pubkey.toString().should.equal(contextStateAddress);
123
123
  const data = solTx(tx).instructions[0].data;
124
- data[78].should.equal(0); // proof_instruction_offset = 0 (context state)
124
+ data[46].should.equal(0); // proof_instruction_offset = 0 (context state)
125
+ });
126
+ });
127
+ describe('createAta reallocate extension list', () => {
128
+ const token2022ProgramId = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
129
+ // Reallocate data: [29][extensionType(u16 LE), ...]. ExtensionType values follow the
130
+ // Token-2022 enum: ConfidentialTransferAccount = 5, ConfidentialTransferFeeAmount = 17.
131
+ const REALLOCATE = 29;
132
+ const CONFIDENTIAL_TRANSFER_ACCOUNT = 5;
133
+ const CONFIDENTIAL_TRANSFER_FEE_AMOUNT = 17;
134
+ it('should reallocate only ConfidentialTransferAccount for a mint without TransferFeeConfig', async () => {
135
+ const builder = ctBuilder();
136
+ builder.createAta({
137
+ mintAddress,
138
+ ataAddress: tokenAddress,
139
+ ownerAddress: authorityAddress,
140
+ payerAddress: account.pub,
141
+ tokenName: 'tsol:ray',
142
+ programId: token2022ProgramId,
143
+ });
144
+ const tx = await builder.build();
145
+ solTx(tx).instructions.should.have.length(2);
146
+ const data = solTx(tx).instructions[1].data;
147
+ data.length.should.equal(3);
148
+ data[0].should.equal(REALLOCATE);
149
+ data.readUInt16LE(1).should.equal(CONFIDENTIAL_TRANSFER_ACCOUNT);
150
+ });
151
+ it('should also reserve ConfidentialTransferFeeAmount when the mint has TransferFeeConfig', async () => {
152
+ const builder = ctBuilder();
153
+ builder.createAta({
154
+ mintAddress,
155
+ ataAddress: tokenAddress,
156
+ ownerAddress: authorityAddress,
157
+ payerAddress: account.pub,
158
+ tokenName: 'tsol:usdc',
159
+ programId: token2022ProgramId,
160
+ mintHasTransferFeeConfig: true,
161
+ });
162
+ const tx = await builder.build();
163
+ const data = solTx(tx).instructions[1].data;
164
+ data.length.should.equal(5);
165
+ data[0].should.equal(REALLOCATE);
166
+ data.readUInt16LE(1).should.equal(CONFIDENTIAL_TRANSFER_ACCOUNT);
167
+ data.readUInt16LE(3).should.equal(CONFIDENTIAL_TRANSFER_FEE_AMOUNT);
125
168
  });
126
169
  });
127
170
  describe('ApplyPendingBalance', () => {
@@ -445,7 +488,6 @@ describe('Solana Confidential Transfer Builder', () => {
445
488
  tokenAddress,
446
489
  mintAddress,
447
490
  authorityAddress,
448
- elgamalPubkey: '11'.repeat(32),
449
491
  decryptableZeroBalance: zeroBytes36,
450
492
  maximumPendingBalanceCreditCounter: '65536',
451
493
  proofInstructionOffset: 1,
@@ -467,7 +509,6 @@ describe('Solana Confidential Transfer Builder', () => {
467
509
  tokenAddress,
468
510
  mintAddress,
469
511
  authorityAddress,
470
- elgamalPubkey: '11'.repeat(32),
471
512
  decryptableZeroBalance: zeroBytes36,
472
513
  maximumPendingBalanceCreditCounter: '65536',
473
514
  proofInstructionOffset: 1,
@@ -488,7 +529,6 @@ describe('Solana Confidential Transfer Builder', () => {
488
529
  tokenAddress: '',
489
530
  mintAddress,
490
531
  authorityAddress,
491
- elgamalPubkey: '11'.repeat(32),
492
532
  decryptableZeroBalance: zeroBytes36,
493
533
  maximumPendingBalanceCreditCounter: '65536',
494
534
  proofInstructionOffset: 1,
@@ -503,14 +543,13 @@ describe('Solana Confidential Transfer Builder', () => {
503
543
  tokenAddress,
504
544
  mintAddress,
505
545
  authorityAddress,
506
- elgamalPubkey: '11'.repeat(32),
507
546
  decryptableZeroBalance: zeroBytes36,
508
547
  maximumPendingBalanceCreditCounter: '65536',
509
548
  proofInstructionOffset: -1, // proof is the previous instruction
510
549
  });
511
550
  const tx = await builder.build();
512
551
  const data = solTx(tx).instructions[0].data;
513
- data[78].should.equal(255); // -1 as i8 = 255 as u8 (two's complement)
552
+ data[46].should.equal(255); // -1 as i8 = 255 as u8 (two's complement)
514
553
  });
515
554
  it('should correctly encode negative offset on Withdraw', async () => {
516
555
  const builder = ctBuilder();
@@ -678,7 +717,6 @@ describe('Solana Confidential Transfer Builder', () => {
678
717
  tokenAddress,
679
718
  mintAddress,
680
719
  authorityAddress,
681
- elgamalPubkey: '11'.repeat(32),
682
720
  decryptableZeroBalance: zeroBytes36,
683
721
  maximumPendingBalanceCreditCounter: 'foo',
684
722
  proofInstructionOffset: 1,
@@ -723,7 +761,6 @@ describe('Solana Confidential Transfer Builder', () => {
723
761
  tokenAddress,
724
762
  mintAddress,
725
763
  authorityAddress,
726
- elgamalPubkey: '11'.repeat(32),
727
764
  decryptableZeroBalance: zeroBytes36,
728
765
  maximumPendingBalanceCreditCounter: '65536',
729
766
  proofInstructionOffset: 1,
@@ -792,7 +829,6 @@ describe('Solana Confidential Transfer Builder', () => {
792
829
  tokenAddress,
793
830
  mintAddress,
794
831
  authorityAddress,
795
- elgamalPubkey: '11'.repeat(32),
796
832
  decryptableZeroBalance: zeroBytes36,
797
833
  maximumPendingBalanceCreditCounter: '65536',
798
834
  proofInstructionOffset: 128,
@@ -805,7 +841,6 @@ describe('Solana Confidential Transfer Builder', () => {
805
841
  tokenAddress,
806
842
  mintAddress,
807
843
  authorityAddress,
808
- elgamalPubkey: '11'.repeat(32),
809
844
  decryptableZeroBalance: zeroBytes36,
810
845
  maximumPendingBalanceCreditCounter: '65536',
811
846
  proofInstructionOffset: -129,
@@ -869,14 +904,13 @@ describe('Solana Confidential Transfer Builder', () => {
869
904
  tokenAddress,
870
905
  mintAddress,
871
906
  authorityAddress,
872
- elgamalPubkey: '11'.repeat(32),
873
907
  decryptableZeroBalance: zeroBytes36,
874
908
  maximumPendingBalanceCreditCounter: '65536',
875
909
  proofInstructionOffset: 127,
876
910
  });
877
911
  const tx = await builder.build();
878
912
  const data = solTx(tx).instructions[0].data;
879
- data[78].should.equal(127);
913
+ data[46].should.equal(127);
880
914
  });
881
915
  });
882
916
  describe('Fix #10: u64 overflow validation', () => {
@@ -910,7 +944,6 @@ describe('Solana Confidential Transfer Builder', () => {
910
944
  tokenAddress,
911
945
  mintAddress,
912
946
  authorityAddress,
913
- elgamalPubkey: '11'.repeat(32),
914
947
  decryptableZeroBalance: zeroBytes36,
915
948
  maximumPendingBalanceCreditCounter: '18446744073709551616', // 2^64
916
949
  proofInstructionOffset: 1,
@@ -919,4 +952,4 @@ describe('Solana Confidential Transfer Builder', () => {
919
952
  });
920
953
  });
921
954
  });
922
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBMkQ7QUFDM0Qsb0RBQTRCO0FBQzVCLDhEQUFnRDtBQUNoRCw0REFBeUQ7QUFFekQsUUFBUSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHFDQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwRixNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQztJQUV2RSwwQ0FBMEM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQztJQUN0RSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoRixNQUFNLHVCQUF1QixHQUFHLDhDQUE4QyxDQUFDO0lBQy9FLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNyQyw4RUFBOEU7SUFDOUUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM1RSxNQUFN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Q0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkIsWUFBWTtnQkFDWixXQUFXO2dCQUNYLGdCQUFnQjtnQkFDaEIsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM5QixzQkFBc0IsRUFBRSxXQUFXO2dCQUNuQyxrQ0FBa0MsRUFBRSxzQkFBc0IsRUFBRSxPQUFPO2dCQUNuRSxzQkFBc0IsRUFBRSxDQUFDO2FBQzFCLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFDcEgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5UGFpciwgVXRpbHMsIFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9zb2wnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi9nZXRCdWlsZGVyRmFjdG9yeSc7XG5cbmRlc2NyaWJlKCdTb2xhbmEgQ29uZmlkZW50aWFsIFRyYW5zZmVyIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgnc29sJyk7XG4gIGNvbnN0IGFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXSkuZ2V0S2V5cygpO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuXG4gIC8vIFRlc3QgYWRkcmVzc2VzIChUb2tlbi0yMDIyIG1pbnQgKyBBVEFzKVxuICBjb25zdCBtaW50QWRkcmVzcyA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzRm9yU29sMjAyMi5taW50SWQ7XG4gIGNvbnN0IHRva2VuQWRkcmVzcyA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzRm9yU29sMjAyMi5hY2NvdW50c1swXS5hdGE7XG4gIGNvbnN0IGRlc3RpbmF0aW9uVG9rZW5BZGRyZXNzID0gJ0VObjhhMnRHTVM5YlI1WFY3c21HSEp2Tmd6a3l4Sm1uRDJlVXZReFk1alNQJztcbiAgY29uc3QgYXV0aG9yaXR5QWRkcmVzcyA9IGFjY291bnQucHViO1xuICAvLyBWYWxpZCBiYXNlNTggYWRkcmVzc2VzIGZvciBjb250ZXh0IHN0YXRlIGFjY291bnRzIChhbnkgdmFsaWQgU29sYW5hIHB1YmtleSlcbiAgY29uc3QgZXFDdHhBZGRyZXNzID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0uYXRhO1xuICBjb25zdCB2YWxpZGl0eUN0eEFkZHJlc3MgPSB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXS5wdWI7XG4gIGNvbnN0IHJhbmdlQ3R4QWRkcmVzcyA9IHRlc3REYXRhLm5vbmNlQWNjb3VudC5wdWI7XG5cbiAgLy8gSGV4IHRlc3QgZGF0YVxuICBjb25zdCB6ZXJvQnl0ZXMzNiA9ICcwMCcucmVwZWF0KDM2KTtcbiAgY29uc3QgemVyb0J5dGVzNjQgPSAnMDAnLnJlcGVhdCg2NCk7XG4gIGNvbnN0IHByb29mRGF0YUhleCA9ICcwMCcucmVwZWF0KDMyMCk7IC8vIHR5cGljYWwgZXF1YWxpdHkgcHJvb2Ygc2l6ZVxuXG4gIGNvbnN0IGN0QnVpbGRlciA9ICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldENvbmZpZGVudGlhbFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgLyoqIEFjY2VzcyB0aGUgcmF3IFNvbGFuYSBUcmFuc2FjdGlvbiBmcm9tIHRoZSBidWlsdCB0eCAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBzb2xUeCA9ICh0eDogYW55KTogYW55ID0+ICh0eCBhcyBUcmFuc2FjdGlvbikuc29sVHJhbnNhY3Rpb247XG5cbiAgZGVzY3JpYmUoJ0NvbmZpZ3VyZUFjY291bnQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIGNvbmZpZ3VyZSBhY2NvdW50IGluc3RydWN0aW9uIHdpdGggY29ycmVjdCA3OS1ieXRlIGxheW91dCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGVsZ2FtYWxQdWJrZXk6ICcxMScucmVwZWF0KDMyKSxcbiAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICc2NTUzNicsXG4gICAgICAgIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDEsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50Jyk7XG5cbiAgICAgIC8vIFZlcmlmeSByYXcgaW5zdHJ1Y3Rpb24gZGF0YVxuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoNzkpO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMjcpOyAvLyBDb25maWRlbnRpYWxUcmFuc2ZlckV4dGVuc2lvblxuICAgICAgZGF0YVsxXS5zaG91bGQuZXF1YWwoMik7IC8vIENvbmZpZ3VyZUFjY291bnRcbiAgICAgIGRhdGEuc2xpY2UoMiwgMzQpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoJzExJy5yZXBlYXQoMzIpKTsgLy8gbmV3X2FjY291bnRfZWxnYW1hbF9wdWJrZXlcbiAgICAgIGRhdGEuc2xpY2UoMzQsIDcwKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHplcm9CeXRlczM2KTsgLy8gZGVjcnlwdGFibGVfemVyb19iYWxhbmNlXG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSg3MCkudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJzY1NTM2Jyk7IC8vIG1heCBwZW5kaW5nIGJhbGFuY2UgY3JlZGl0IGNvdW50ZXJcbiAgICAgIGRhdGFbNzhdLnNob3VsZC5lcXVhbCgxKTsgLy8gcHJvb2ZfaW5zdHJ1Y3Rpb25fb2Zmc2V0XG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50c1xuICAgICAgY29uc3Qga2V5cyA9IHJhd0luc3RydWN0aW9uc1swXS5rZXlzO1xuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNCk7XG4gICAgICBrZXlzWzBdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbCh0b2tlbkFkZHJlc3MpO1xuICAgICAga2V5c1swXS5pc1dyaXRhYmxlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXlzWzFdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChtaW50QWRkcmVzcyk7XG4gICAgICBrZXlzWzFdLmlzV3JpdGFibGUuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnU3lzdmFyMW5zdHJ1Y3Rpb25zMTExMTExMTExMTExMTExMTExMTExMTExMScpOyAvLyBpbnN0cnVjdGlvbnMgc3lzdmFyXG4gICAgICBrZXlzWzNdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbM10uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGNvbnRleHQgc3RhdGUgYWRkcmVzcyB3aGVuIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dFN0YXRlQWRkcmVzcyA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLnB1YjtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGVsZ2FtYWxQdWJrZXk6ICcxMScucmVwZWF0KDMyKSxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zU3lzdmFyT3JDb250ZXh0U3RhdGVBZGRyZXNzOiBjb250ZXh0U3RhdGVBZGRyZXNzLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGtleXMgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChjb250ZXh0U3RhdGVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhWzc4XS5zaG91bGQuZXF1YWwoMCk7IC8vIHByb29mX2luc3RydWN0aW9uX29mZnNldCA9IDAgKGNvbnRleHQgc3RhdGUpXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBcHBseVBlbmRpbmdCYWxhbmNlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gYXBwbHkgcGVuZGluZyBiYWxhbmNlIGluc3RydWN0aW9uIHdpdGggY29ycmVjdCA0Ni1ieXRlIGxheW91dCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuYXBwbHlQZW5kaW5nQmFsYW5jZSh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXhwZWN0ZWRQZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICczJyxcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICBpbnN0cnVjdGlvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdBcHBseVBlbmRpbmdCYWxhbmNlJyk7XG5cbiAgICAgIGNvbnN0IHJhd0luc3RydWN0aW9ucyA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnM7XG4gICAgICByYXdJbnN0cnVjdGlvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgY29uc3QgZGF0YSA9IHJhd0luc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDQ2KTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDI3KTsgLy8gQ29uZmlkZW50aWFsVHJhbnNmZXJFeHRlbnNpb25cbiAgICAgIGRhdGFbMV0uc2hvdWxkLmVxdWFsKDgpOyAvLyBBcHBseVBlbmRpbmdCYWxhbmNlXG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSgyKS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnMycpOyAvLyBleHBlY3RlZF9wZW5kaW5nX2JhbGFuY2VfY3JlZGl0X2NvdW50ZXJcbiAgICAgIGRhdGEuc2xpY2UoMTAsIDQ2KS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHplcm9CeXRlczM2KTsgLy8gbmV3X2RlY3J5cHRhYmxlX2F2YWlsYWJsZV9iYWxhbmNlXG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50czogW3Rva2VuKHdyaXRhYmxlKSwgYXV0aG9yaXR5KHNpZ25lcildXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1sxXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVwb3NpdCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgZGVwb3NpdCBpbnN0cnVjdGlvbiB3aXRoIGNvcnJlY3QgMTEtYnl0ZSBsYXlvdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsRGVwb3NpdCcpO1xuXG4gICAgICBjb25zdCByYXdJbnN0cnVjdGlvbnMgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zO1xuICAgICAgcmF3SW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByYXdJbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgxMSk7XG4gICAgICBkYXRhWzBdLnNob3VsZC5lcXVhbCgyNyk7IC8vIENvbmZpZGVudGlhbFRyYW5zZmVyRXh0ZW5zaW9uXG4gICAgICBkYXRhWzFdLnNob3VsZC5lcXVhbCg1KTsgLy8gRGVwb3NpdFxuICAgICAgZGF0YS5yZWFkQmlnVUludDY0TEUoMikudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJzEwMDAwMDAnKTsgLy8gYW1vdW50XG4gICAgICBkYXRhWzEwXS5zaG91bGQuZXF1YWwoNik7IC8vIGRlY2ltYWxzXG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50czogW3Rva2VuKHdyaXRhYmxlKSwgbWludCwgYXV0aG9yaXR5KHNpZ25lcildXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgzKTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKG1pbnRBZGRyZXNzKTtcbiAgICAgIGtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1syXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2l0aGRyYXcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHdpdGhkcmF3IGluc3RydWN0aW9uIHdpdGggY29ycmVjdCA0OS1ieXRlIGxheW91dCBhbmQgaW5saW5lIHByb29mcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsV2l0aGRyYXcoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICc1MDAwMDAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsV2l0aGRyYXcnKTtcblxuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoNDkpO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMjcpOyAvLyBDb25maWRlbnRpYWxUcmFuc2ZlckV4dGVuc2lvblxuICAgICAgZGF0YVsxXS5zaG91bGQuZXF1YWwoNik7IC8vIFdpdGhkcmF3XG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSgyKS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnNTAwMDAwJyk7IC8vIGFtb3VudFxuICAgICAgZGF0YVsxMF0uc2hvdWxkLmVxdWFsKDYpOyAvLyBkZWNpbWFsc1xuICAgICAgZGF0YS5zbGljZSgxMSwgNDcpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoemVyb0J5dGVzMzYpOyAvLyBuZXdfZGVjcnlwdGFibGVcbiAgICAgIGRhdGFbNDddLnNob3VsZC5lcXVhbCgxKTsgLy8gZXF1YWxpdHkgcHJvb2Ygb2Zmc2V0XG4gICAgICBkYXRhWzQ4XS5zaG91bGQuZXF1YWwoMik7IC8vIHJhbmdlIHByb29mIG9mZnNldFxuXG4gICAgICAvLyBWZXJpZnkgYWNjb3VudHM6IFt0b2tlbih3cml0YWJsZSksIG1pbnQsIHN5c3ZhciwgYXV0aG9yaXR5KHNpZ25lcildXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCg0KTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKG1pbnRBZGRyZXNzKTtcbiAgICAgIGtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCdTeXN2YXIxbnN0cnVjdGlvbnMxMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBrZXlzWzNdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbM10uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB3aXRoZHJhdyBpbnN0cnVjdGlvbiB3aXRoIGNvbnRleHQgc3RhdGUgYWNjb3VudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFdpdGhkcmF3KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgcmFuZ2VQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IHJhbmdlQ3R4QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnNTAwMDAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qga2V5cyA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0ua2V5cztcbiAgICAgIC8vIFt0b2tlbiwgbWludCwgZXFDdHgsIHJnQ3R4LCBhdXRob3JpdHldIOKAlCBubyBzeXN2YXIgc2luY2UgYWxsIHByb29mcyB1c2UgY29udGV4dCBzdGF0ZVxuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNSk7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChlcUN0eEFkZHJlc3MpO1xuICAgICAga2V5c1szXS5wdWJrZXkudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwocmFuZ2VDdHhBZGRyZXNzKTtcbiAgICAgIGtleXNbNF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1s0XS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29uZmlkZW50aWFsVHJhbnNmZXInLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zZmVyIGluc3RydWN0aW9uIHdpdGggY29ycmVjdCAxNjktYnl0ZSBsYXlvdXQgYW5kIGlubGluZSBwcm9vZnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgbmV3U291cmNlRGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dExvOiB6ZXJvQnl0ZXM2NCxcbiAgICAgICAgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpOiB6ZXJvQnl0ZXM2NCxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICBjaXBoZXJ0ZXh0VmFsaWRpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAyLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsVHJhbnNmZXInKTtcblxuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoMTY5KTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDI3KTsgLy8gQ29uZmlkZW50aWFsVHJhbnNmZXJFeHRlbnNpb25cbiAgICAgIGRhdGFbMV0uc2hvdWxkLmVxdWFsKDcpOyAvLyBUcmFuc2ZlclxuICAgICAgZGF0YS5zbGljZSgyLCAzOCkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh6ZXJvQnl0ZXMzNik7IC8vIG5ld19zb3VyY2VfZGVjcnlwdGFibGVcbiAgICAgIGRhdGEuc2xpY2UoMzgsIDEwMikudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh6ZXJvQnl0ZXM2NCk7IC8vIGF1ZGl0b3JfY3RfbG9cbiAgICAgIGRhdGEuc2xpY2UoMTAyLCAxNjYpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoemVyb0J5dGVzNjQpOyAvLyBhdWRpdG9yX2N0X2hpXG4gICAgICBkYXRhWzE2Nl0uc2hvdWxkLmVxdWFsKDEpOyAvLyBlcXVhbGl0eSBwcm9vZiBvZmZzZXRcbiAgICAgIGRhdGFbMTY3XS5zaG91bGQuZXF1YWwoMik7IC8vIHZhbGlkaXR5IHByb29mIG9mZnNldFxuICAgICAgZGF0YVsxNjhdLnNob3VsZC5lcXVhbCgzKTsgLy8gcmFuZ2UgcHJvb2Ygb2Zmc2V0XG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50czogW3NvdXJjZSh3cml0YWJsZSksIG1pbnQsIGRlc3Qod3JpdGFibGUpLCBzeXN2YXIsIGF1dGhvcml0eShzaWduZXIpXVxuICAgICAgY29uc3Qga2V5cyA9IHJhd0luc3RydWN0aW9uc1swXS5rZXlzO1xuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNSk7XG4gICAgICBrZXlzWzBdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbCh0b2tlbkFkZHJlc3MpO1xuICAgICAga2V5c1swXS5pc1dyaXRhYmxlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXlzWzFdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChtaW50QWRkcmVzcyk7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChkZXN0aW5hdGlvblRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzJdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbM10ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCdTeXN2YXIxbnN0cnVjdGlvbnMxMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBrZXlzWzRdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbNF0uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB0cmFuc2ZlciBpbnN0cnVjdGlvbiB3aXRoIGNvbnRleHQgc3RhdGUgYWNjb3VudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qga2V5cyA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0ua2V5cztcbiAgICAgIC8vIFtzb3VyY2UsIG1pbnQsIGRlc3QsIGVxQ3R4LCB2YWxpZGl0eUN0eCwgcmFuZ2VDdHgsIGF1dGhvcml0eV0g4oCUIG5vIHN5c3ZhclxuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNyk7XG4gICAgICBrZXlzWzNdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChlcUN0eEFkZHJlc3MpO1xuICAgICAga2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwodmFsaWRpdHlDdHhBZGRyZXNzKTtcbiAgICAgIGtleXNbNV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHJhbmdlQ3R4QWRkcmVzcyk7XG4gICAgICBrZXlzWzZdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbNl0uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeVB1YmtleVZhbGlkaXR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2ZXJpZnkgcHVia2V5IHZhbGlkaXR5IGluc3RydWN0aW9uIHdpdGggaW5saW5lIHByb29mIGRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeVB1YmtleVZhbGlkaXR5KHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhWzBdLnNob3VsZC5lcXVhbCg0KTsgLy8gVmVyaWZ5UHVia2V5VmFsaWRpdHkgZGlzY3JpbWluYXRvclxuICAgICAgZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAzMjApOyAvLyBkaXNjcmltaW5hdG9yICsgcHJvb2YgZGF0YVxuICAgICAgZGF0YS5zbGljZSgxKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHByb29mRGF0YUhleCk7XG5cbiAgICAgIC8vIE5vIGFjY291bnRzIGZvciBpbmxpbmUgcHJvb2ZcbiAgICAgIHJhd0luc3RydWN0aW9uc1swXS5rZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcblxuICAgICAgLy8gVmVyaWZ5IHByb2dyYW0gaWQgKGNhbm9uaWNhbCBvbi1jaGFpbiBpZClcbiAgICAgIHJhd0luc3RydWN0aW9uc1swXS5wcm9ncmFtSWQudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJ1prRTFHYW1hMVByb29mMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgd2l0aCBjb250ZXh0IHN0YXRlIGFjY291bnQgKGZpeCAjMyknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeVB1YmtleVZhbGlkaXR5KHtcbiAgICAgICAgY29udGV4dFN0YXRlQWNjb3VudEFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY29udGV4dFN0YXRlQXV0aG9yaXR5QWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd0l4ID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXTtcbiAgICAgIGNvbnN0IGRhdGEgPSByYXdJeC5kYXRhO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoNCk7IC8vIFZlcmlmeVB1YmtleVZhbGlkaXR5IGRpc2NyaW1pbmF0b3JcbiAgICAgIC8vIENvbnRleHQgc3RhdGUgYWNjb3VudHM6IFtjb250ZXh0U3RhdGUod3JpdGFibGUpLCBhdXRob3JpdHldXG4gICAgICByYXdJeC5rZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJhd0l4LmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGVxQ3R4QWRkcmVzcyk7XG4gICAgICByYXdJeC5rZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJhd0l4LmtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5RXF1YWxpdHlQcm9vZicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggaW5saW5lIHByb29mIGRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeUVxdWFsaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMyk7IC8vIFZlcmlmeUNpcGhlcnRleHRDb21taXRtZW50RXF1YWxpdHkgZGlzY3JpbWluYXRvclxuICAgICAgZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAzMjApO1xuICAgICAgZGF0YS5zbGljZSgxKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHByb29mRGF0YUhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggY29udGV4dCBzdGF0ZSBvZmZzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeUVxdWFsaXR5UHJvb2Yoe1xuICAgICAgICBjb250ZXh0U3RhdGVBY2NvdW50QWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICBjb250ZXh0U3RhdGVBdXRob3JpdHlBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdJeCA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF07XG4gICAgICBjb25zdCBkYXRhID0gcmF3SXguZGF0YTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgZGF0YS5yZWFkVUludDMyTEUoMSkuc2hvdWxkLmVxdWFsKDApOyAvLyBvZmZzZXQgYXMgdTMyXG5cbiAgICAgIC8vIENvbnRleHQgc3RhdGUgYWNjb3VudHM6IFtjb250ZXh0U3RhdGUod3JpdGFibGUpLCBhdXRob3JpdHldXG4gICAgICByYXdJeC5rZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJhd0l4LmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGVxQ3R4QWRkcmVzcyk7XG4gICAgICByYXdJeC5rZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJhd0l4LmtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5VmFsaWRpdHlQcm9vZicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggaW5saW5lIHByb29mIGRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeVZhbGlkaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMTIpOyAvLyBWZXJpZnlCYXRjaGVkR3JvdXBlZENpcGhlcnRleHQzSGFuZGxlc1ZhbGlkaXR5XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoMSArIDMyMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnlSYW5nZVByb29mJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgd2l0aCBpbmxpbmUgcHJvb2YgZGF0YScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmVyaWZ5UmFuZ2VQcm9vZih7IHByb29mRGF0YTogJzAwJy5yZXBlYXQoMTAwMCkgfSk7IC8vIHJhbmdlIHByb29mIGlzIH4xMDAwIGJ5dGVzXG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDcpOyAvLyBWZXJpZnlCYXRjaGVkUmFuZ2VQcm9vZlUxMjhcbiAgICAgIGRhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgxICsgMTAwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNdWx0aXBsZSBpbnN0cnVjdGlvbnMgKHYxIHR4IHNpbXVsYXRpb24pJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgQXBwbHlQZW5kaW5nQmFsYW5jZSArIDMgcHJvb2ZzICsgVHJhbnNmZXIgaW4gY29ycmVjdCBvcmRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFwcGx5UGVuZGluZ0JhbGFuY2Uoe1xuICAgICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICAgIGV4cGVjdGVkUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnMicsXG4gICAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgfSlcbiAgICAgICAgLnZlcmlmeUVxdWFsaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KVxuICAgICAgICAudmVyaWZ5VmFsaWRpdHlQcm9vZih7IHByb29mRGF0YTogcHJvb2ZEYXRhSGV4IH0pXG4gICAgICAgIC52ZXJpZnlSYW5nZVByb29mKHsgcHJvb2ZEYXRhOiAnMDAnLnJlcGVhdCgxMDAwKSB9KVxuICAgICAgICAuY29uZmlkZW50aWFsVHJhbnNmZXIoe1xuICAgICAgICAgIHNvdXJjZVRva2VuQWRkcmVzczogdG9rZW5BZGRyZXNzLFxuICAgICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICAgIGRlc3RpbmF0aW9uVG9rZW5BZGRyZXNzLFxuICAgICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgICAgbmV3U291cmNlRGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgICB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0TG86IHplcm9CeXRlczY0LFxuICAgICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICAgIGNpcGhlcnRleHRWYWxpZGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDIsXG4gICAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAzLFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCg1KTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQXBwbHlQZW5kaW5nQmFsYW5jZScpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnR5cGUuc2hvdWxkLmVxdWFsKCdWZXJpZnlFcXVhbGl0eVByb29mJyk7XG4gICAgICBpbnN0cnVjdGlvbnNbMl0udHlwZS5zaG91bGQuZXF1YWwoJ1ZlcmlmeVZhbGlkaXR5UHJvb2YnKTtcbiAgICAgIGluc3RydWN0aW9uc1szXS50eXBlLnNob3VsZC5lcXVhbCgnVmVyaWZ5UmFuZ2VQcm9vZicpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzRdLnR5cGUuc2hvdWxkLmVxdWFsKCdDb25maWRlbnRpYWxUcmFuc2ZlcicpO1xuXG4gICAgICAvLyBOb3RlOiBDYW5ub3QgdmVyaWZ5IHRvQnJvYWRjYXN0Rm9ybWF0KCkgaGVyZSBiZWNhdXNlIDMgcHJvb2ZzICgzMjArMzIwKzEwMDAgYnl0ZXMpXG4gICAgICAvLyArIHRyYW5zZmVyICgxNjlCKSBleGNlZWRzIHYwIHR4IHNpemUgbGltaXQgKDEyMzJCKS4gVGhlc2UgYXJlIHYxIHRyYW5zYWN0aW9ucyAoNDEzMkIpLlxuICAgICAgLy8gVGhlIGluc3RydWN0aW9uIGRhdGEgbGF5b3V0cyBhcmUgdmVyaWZpZWQgaW5kaXZpZHVhbGx5IGluIHRoZSB0ZXN0cyBhYm92ZS5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgQ29uZmlndXJlQWNjb3VudCArIFZlcmlmeVB1YmtleVZhbGlkaXR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICc2NTUzNicsXG4gICAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgICAgfSlcbiAgICAgICAgLnZlcmlmeVB1YmtleVZhbGlkaXR5KHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICAgIGluc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICBpbnN0cnVjdGlvbnNbMF0udHlwZS5zaG91bGQuZXF1YWwoJ0NvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudCcpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnR5cGUuc2hvdWxkLmVxdWFsKCdWZXJpZnlQdWJrZXlWYWxpZGl0eScpO1xuXG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JhdyB0cmFuc2FjdGlvbiB2YWxpZGl0eScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSB2YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlbGdhbWFsUHVia2V5OiAnMTEnLnJlcGVhdCgzMiksXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IGVtcHR5IGJ1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvY29uZmlkZW50aWFsIHRyYW5zZmVyIGluc3RydWN0aW9uLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBtaXNzaW5nIHRva2VuQWRkcmVzcyBvbiBjb25maWd1cmVBY2NvdW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PlxuICAgICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICAgIHRva2VuQWRkcmVzczogJycsXG4gICAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgICBlbGdhbWFsUHVia2V5OiAnMTEnLnJlcGVhdCgzMiksXG4gICAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSA4pSAIEZpeC1zcGVjaWZpYyB0ZXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBkZXNjcmliZSgnRml4ICMxOiBzaWduZWQgaTggcHJvb2YgaW5zdHJ1Y3Rpb24gb2Zmc2V0cycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBlbmNvZGUgbmVnYXRpdmUgb2Zmc2V0IG9uIENvbmZpZ3VyZUFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlbGdhbWFsUHVia2V5OiAnMTEnLnJlcGVhdCgzMiksXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMSwgLy8gcHJvb2YgaXMgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVs3OF0uc2hvdWxkLmVxdWFsKDI1NSk7IC8vIC0xIGFzIGk4ID0gMjU1IGFzIHU4ICh0d28ncyBjb21wbGVtZW50KVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZW5jb2RlIG5lZ2F0aXZlIG9mZnNldCBvbiBXaXRoZHJhdycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsV2l0aGRyYXcoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlcXVhbGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICByYW5nZVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogcmFuZ2VDdHhBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMSxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhWzQ3XS5zaG91bGQuZXF1YWwoMjU1KTsgLy8gLTEgYXMgaThcbiAgICAgIGRhdGFbNDhdLnNob3VsZC5lcXVhbCgyNTQpOyAvLyAtMiBhcyBpOFxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZW5jb2RlIG5lZ2F0aXZlIG9mZnNldHMgb24gVHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogLTMsXG4gICAgICAgIGNpcGhlcnRleHRWYWxpZGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IC0yLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IC0xLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGFbMTY2XS5zaG91bGQuZXF1YWwoMjUzKTsgLy8gLTMgYXMgaThcbiAgICAgIGRhdGFbMTY3XS5zaG91bGQuZXF1YWwoMjU0KTsgLy8gLTIgYXMgaThcbiAgICAgIGRhdGFbMTY4XS5zaG91bGQuZXF1YWwoMjU1KTsgLy8gLTEgYXMgaThcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZpeCAjMjogaW5zdHJ1Y3Rpb24gb3JkZXIgcHJlc2VydmF0aW9uIGluIHBhcnNlcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIGludGVybGVhdmVkIENUIGFuZCBjdXN0b20gaW5zdHJ1Y3Rpb24gb3JkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hcHBseVBlbmRpbmdCYWxhbmNlKHtcbiAgICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgICBleHBlY3RlZFBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzEnLFxuICAgICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIH0pXG4gICAgICAgIC52ZXJpZnlFcXVhbGl0eVByb29mKHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSlcbiAgICAgICAgLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgICBzb3VyY2VUb2tlbkFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICAgIGVxdWFsaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiBlcUN0eEFkZHJlc3MsXG4gICAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgICAgcmFuZ2VQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IHJhbmdlQ3R4QWRkcmVzcyxcbiAgICAgICAgICBuZXdTb3VyY2VEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgICAgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpOiB6ZXJvQnl0ZXM2NCxcbiAgICAgICAgICBlcXVhbGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICAvLyBPcmRlciBzaG91bGQgYmU6IEFwcGx5UGVuZGluZ0JhbGFuY2UsIFZlcmlmeUVxdWFsaXR5UHJvb2YsIENvbmZpZGVudGlhbFRyYW5zZmVyXG4gICAgICBpbnN0cnVjdGlvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDMpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdBcHBseVBlbmRpbmdCYWxhbmNlJyk7XG4gICAgICBpbnN0cnVjdGlvbnNbMV0udHlwZS5zaG91bGQuZXF1YWwoJ1ZlcmlmeUVxdWFsaXR5UHJvb2YnKTtcbiAgICAgIGluc3RydWN0aW9uc1syXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsVHJhbnNmZXInKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZpeCAjMzogVmVyaWZ5UHVia2V5VmFsaWRpdHkgY29udGV4dCBzdGF0ZSBtb2RlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbm90IHRocm93IHdoZW4gb25seSBjb250ZXh0IHN0YXRlIGFjY291bnRzIGFyZSBwcm92aWRlZCAobm8gcHJvb2ZEYXRhKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmVyaWZ5UHVia2V5VmFsaWRpdHkoe1xuICAgICAgICBjb250ZXh0U3RhdGVBY2NvdW50QWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICBjb250ZXh0U3RhdGVBdXRob3JpdHlBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3SXggPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdO1xuICAgICAgLy8gU2hvdWxkIHByb2R1Y2UgYW4gb2Zmc2V0LWJhc2VkIGluc3RydWN0aW9uLCBub3QgdGhyb3dcbiAgICAgIHJhd0l4LmRhdGFbMF0uc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmF3SXgua2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzQ6IGNvbnRleHQgc3RhdGUgYWRkcmVzcyByZXF1aXJlZCB3aGVuIG9mZnNldCA9PSAwJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IFdpdGhkcmF3IHdpdGggb2Zmc2V0IDAgYnV0IG1pc3NpbmcgZXF1YWxpdHkgY29udGV4dCBzdGF0ZSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxXaXRoZHJhdyh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzEwMCcsXG4gICAgICAgIGRlY2ltYWxzOiA2LFxuICAgICAgICBuZXdEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBlcXVhbGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsIC8vIGNvbnRleHQgc3RhdGUgbW9kZSBidXQgbm8gYWRkcmVzc1xuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9lcXVhbGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzcyBpcyByZXF1aXJlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgVHJhbnNmZXIgd2l0aCBvZmZzZXQgMCBidXQgbWlzc2luZyByYW5nZSBjb250ZXh0IHN0YXRlIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLCAvLyBjb250ZXh0IHN0YXRlIG1vZGUgYnV0IG5vIGFkZHJlc3NcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzIGlzIHJlcXVpcmVkLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzU6IG51bWVyaWMgc3RyaW5nIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLW51bWVyaWMgYW1vdW50IG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICdhYmMnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgYW1vdW50OiBleHBlY3RlZCBub24tbmVnYXRpdmUgaW50ZWdlciBzdHJpbmcvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGFtb3VudCBvbiBEZXBvc2l0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxEZXBvc2l0KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnLTEwMCcsXG4gICAgICAgIGRlY2ltYWxzOiA2LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBhbW91bnQ6IGV4cGVjdGVkIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHN0cmluZy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLW51bWVyaWMgY291bnRlciBvbiBBcHBseVBlbmRpbmdCYWxhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hcHBseVBlbmRpbmdCYWxhbmNlKHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBleHBlY3RlZFBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJ25vdC1hLW51bWJlcicsXG4gICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGV4cGVjdGVkUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tbnVtZXJpYyBjb3VudGVyIG9uIENvbmZpZ3VyZUFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlbGdhbWFsUHVia2V5OiAnMTEnLnJlcGVhdCgzMiksXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnZm9vJyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlci8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYW1vdW50IG9mIDAgb24gRGVwb3NpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsRGVwb3NpdCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSgyKS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRml4ICM2OiBjYW5vbmljYWwgWksgcHJvb2YgcHJvZ3JhbSBJRCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHVzZSBjYW5vbmljYWwgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtIGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci52ZXJpZnlFcXVhbGl0eVByb29mKHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5wcm9ncmFtSWQudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJ1prRTFHYW1hMVByb29mMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgb3ZlcnJpZGluZyBaSyBwcm9vZiBwcm9ncmFtIGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tUHJvZ3JhbUlkID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0ucHViOyAvLyBhbnkgdmFsaWQgcHVia2V5XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnprUHJvb2ZQcm9ncmFtSWQoY3VzdG9tUHJvZ3JhbUlkKTtcbiAgICAgIGJ1aWxkZXIudmVyaWZ5RXF1YWxpdHlQcm9vZih7IHByb29mRGF0YTogcHJvb2ZEYXRhSGV4IH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0ucHJvZ3JhbUlkLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGN1c3RvbVByb2dyYW1JZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzg6IGZyb20oKSByb3V0aW5nIGZvciBDVCB0cmFuc2FjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByb3V0ZSBDVCB0cmFuc2FjdGlvbiB0byBDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIgb24gZnJvbSgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgYSBDVCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gUGFyc2UgaXQgYmFjayB2aWEgZmFjdG9yeS5mcm9tKClcbiAgICAgIGNvbnN0IHBhcnNlZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocmF3VHgpO1xuICAgICAgLy8gU2hvdWxkIGJlIGEgQ29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLCBub3QgQ3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyXG4gICAgICBwYXJzZWRCdWlsZGVyLmNvbnN0cnVjdG9yLm5hbWUuc2hvdWxkLmVxdWFsKCdDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXInKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcm91dGUgbm9uLUNUIGN1c3RvbSB0cmFuc2FjdGlvbiB0byBDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIgb24gZnJvbSgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgYSBub24tQ1QgY3VzdG9tIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBjdXN0b21CdWlsZGVyID0gZmFjdG9yeS5nZXRDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGN1c3RvbUJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIGN1c3RvbUJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgIGN1c3RvbUJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24oe1xuICAgICAgICBwcm9ncmFtSWQ6ICdNZW1vU3E0Z3FBQkFYS2I5NnFuSDhUeXNOY1d4TXlXQ3FYZ0RMR21mY0hyJyxcbiAgICAgICAga2V5czogW10sXG4gICAgICAgIGRhdGE6ICdoZWxsbycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBjdXN0b21CdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFBhcnNlIGl0IGJhY2sgdmlhIGZhY3RvcnkuZnJvbSgpXG4gICAgICBjb25zdCBwYXJzZWRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgIHBhcnNlZEJ1aWxkZXIuY29uc3RydWN0b3IubmFtZS5zaG91bGQuZXF1YWwoJ0N1c3RvbUluc3RydWN0aW9uQnVpbGRlcicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRml4ICM5OiByYW5nZSB2YWxpZGF0aW9uIGZvciBkZWNpbWFscyBhbmQgcHJvb2Ygb2Zmc2V0cycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCBkZWNpbWFscyA+IDI1NSBvbiBEZXBvc2l0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxEZXBvc2l0KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMTAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDI1NixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgZGVjaW1hbHM6IGV4cGVjdGVkIHU4IFxcKDAtMjU1XFwpLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBkZWNpbWFscyBvbiBEZXBvc2l0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxEZXBvc2l0KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMTAwJyxcbiAgICAgICAgZGVjaW1hbHM6IC0xLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBkZWNpbWFsczogZXhwZWN0ZWQgdTggXFwoMC0yNTVcXCkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5vbi1pbnRlZ2VyIGRlY2ltYWxzIG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogNi41LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBkZWNpbWFsczogZXhwZWN0ZWQgdTggXFwoMC0yNTVcXCkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHByb29mIG9mZnNldCA+IDEyNyBvbiBDb25maWd1cmVBY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMTI4LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiBleHBlY3RlZCBpOCBcXCgtMTI4IHRvIDEyN1xcKS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgcHJvb2Ygb2Zmc2V0IDwgLTEyOCBvbiBDb25maWd1cmVBY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogLTEyOSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogZXhwZWN0ZWQgaTggXFwoLTEyOCB0byAxMjdcXCkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGVxdWFsaXR5IHByb29mIG9mZnNldCA+IDEyNyBvbiBXaXRoZHJhdycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsV2l0aGRyYXcoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlcXVhbGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICByYW5nZVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogcmFuZ2VDdHhBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAyMDAsXG4gICAgICAgIHJhbmdlUHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiBleHBlY3RlZCBpOC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgcmFuZ2UgcHJvb2Ygb2Zmc2V0IDwgLTEyOCBvbiBXaXRoZHJhdycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsV2l0aGRyYXcoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlcXVhbGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICByYW5nZVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogcmFuZ2VDdHhBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IC0yMDAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHJhbmdlUHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogZXhwZWN0ZWQgaTgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHZhbGlkaXR5IHByb29mIG9mZnNldCBvdXQgb2YgaTggcmFuZ2Ugb24gVHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMjU1LFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGNpcGhlcnRleHRWYWxpZGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IGV4cGVjdGVkIGk4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBib3VuZGFyeSBvZmZzZXQgdmFsdWVzICgtMTI4IGFuZCAxMjcpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMTI3LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGFbNzhdLnNob3VsZC5lcXVhbCgxMjcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRml4ICMxMDogdTY0IG92ZXJmbG93IHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW1vdW50IGV4Y2VlZGluZyB1NjQgbWF4IG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxODQ0Njc0NDA3MzcwOTU1MTYxNicsIC8vIDJeNjRcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGFtb3VudDogdmFsdWUgZXhjZWVkcyB1NjQgbWF4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhbW91bnQgYXQgdTY0IG1heCBvbiBEZXBvc2l0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxEZXBvc2l0KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMTg0NDY3NDQwNzM3MDk1NTE2MTUnLCAvLyAyXjY0IC0gMVxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSgyKS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnMTg0NDY3NDQwNzM3MDk1NTE2MTUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGNvdW50ZXIgZXhjZWVkaW5nIHU2NCBtYXggb24gQ29uZmlndXJlQWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGVsZ2FtYWxQdWJrZXk6ICcxMScucmVwZWF0KDMyKSxcbiAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICcxODQ0Njc0NDA3MzcwOTU1MTYxNicsIC8vIDJeNjRcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogdmFsdWUgZXhjZWVkcyB1NjQgbWF4Lyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
955
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBMkQ7QUFDM0Qsb0RBQTRCO0FBQzVCLDhEQUFnRDtBQUNoRCw0REFBeUQ7QUFFekQsUUFBUSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHFDQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwRixNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQztJQUV2RSwwQ0FBMEM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQztJQUN0RSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoRixNQUFNLHVCQUF1QixHQUFHLDhDQUE4QyxDQUFDO0lBQy9FLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNyQyw4RUFBOEU7SUFDOUUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM1RSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUVsRCxnQkFBZ0I7SUFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7SUFFckUsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQzNELFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsMERBQTBEO0lBQzFELDhEQUE4RDtJQUM5RCxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQU8sRUFBTyxFQUFFLENBQUUsRUFBa0IsQ0FBQyxjQUFjLENBQUM7SUFFbkUsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxFQUFFLENBQUMsaUZBQWlGLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0YsTUFBTSxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2dCQUN2QixZQUFZO2dCQUNaLFdBQVc7Z0JBQ1gsZ0JBQWdCO2dCQUNoQixzQkFBc0IsRUFBRSxXQUFXO2dCQUNuQyxrQ0FBa0MsRUFBRSxPQUFPO2dCQUMzQyxzQkFBc0IsRUFBRSxDQUFDO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNsRCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFFMUUsOEJBQThCO1lBQzlCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDL0MsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckMsZ0ZBQWdGO1lBQ2hGLDhEQUE4RDtZQUM5RCx1SEFBdUg7WUFDdkgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO1lBQzFELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1lBQ3hGLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztZQUNoRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUVyRCxrQkFBa0I7WUFDbEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1lBQzdHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RCxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzdFLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkIsWUFBWTtnQkFDWixXQUFXO2dCQUNYLGdCQUFnQjtnQkFDaEIsdUNBQXVDLEVBQUUsbUJBQW1CO2dCQUM1RCxzQkFBc0IsRUFBRSxXQUFXO2dCQUNuQyxrQ0FBa0MsRUFBRSxPQUFPO2dCQUMzQyxzQkFBc0IsRUFBRSxDQUFDO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsK0NBQStDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE1BQU0sa0JBQWtCLEdBQUcsNkNBQTZDLENBQUM7UUFDekUscUZBQXFGO1FBQ3JGLHdGQUF3RjtRQUN4RixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFFNUMsRUFBRSxDQUFDLHlGQUF5RixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZHLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ2hCLFdBQVc7Z0JBQ1gsVUFBVSxFQUFFLFlBQVk7Z0JBQ3hCLFlBQVksRUFBRSxnQkFBZ0I7Z0JBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDekIsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLFNBQVMsRUFBRSxrQkFBa0I7YUFDOUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUZBQXVGLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckcsTUFBTSxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDaEIsV0FBVztnQkFDWCxVQUFVLEVBQUUsWUFBWTtnQkFDeEIsWUFBWSxFQUFFLGdCQUFnQjtnQkFDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHO2dCQUN6QixTQUFTLEVBQUUsV0FBVztnQkFDdEIsU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0Isd0JBQXdCLEVBQUUsSUFBSTthQUMvQixDQUFDLENBQUM7WUFFSCxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7UUFDbkMsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdGLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztnQkFDMUIsWUFBWTtnQkFDWixnQkFBZ0I7Z0JBQ2hCLG1DQUFtQyxFQUFFLEdBQUc7Z0JBQ3hDLDhCQUE4QixFQUFFLFdBQVc7YUFDNUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQ2xELFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUV6RCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQy9DLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztZQUMxRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtZQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7WUFDaEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7WUFFbEcsd0RBQXdEO1lBQ3hELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUN2QixFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUUsTUFBTSxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2dCQUMxQixZQUFZO2dCQUNaLFdBQVc7Z0JBQ1gsZ0JBQWdCO2dCQUNoQixNQUFNLEVBQUUsU0FBUztnQkFDakIsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDLENBQUM7WUFFSCxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7WUFDbEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBRXpELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDL0MsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO1lBQzFELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3JFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUVyQyw4REFBOEQ7WUFDOUQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLENBQUMsQ0FB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Z0JBQzFCLFlBQVk7Z0JBQ1osV0FBVztnQkFDWCxnQkFBZ0I7Z0JBQ2hCLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxXQUFXO2dCQUMzQyxRQUFRLEVBQUUsQ0FBQzthQUNaLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkIsWUFBWTtnQkFDWixXQUFXO2dCQUNYLGdCQUFnQjtnQkFDaEIsc0JBQXNCLEVBQUUsV0FBVztnQkFDbkMsa0NBQWtDLEVBQUUsc0JBQXNCLEVBQUUsT0FBTztnQkFDbkUsc0JBQXNCLEVBQUUsQ0FBQzthQUMxQixDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ3BILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleVBhaXIsIFV0aWxzLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuXG5kZXNjcmliZSgnU29sYW5hIENvbmZpZGVudGlhbCBUcmFuc2ZlciBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3NvbCcpO1xuICBjb25zdCBhY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0pLmdldEtleXMoKTtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcblxuICAvLyBUZXN0IGFkZHJlc3NlcyAoVG9rZW4tMjAyMiBtaW50ICsgQVRBcylcbiAgY29uc3QgbWludEFkZHJlc3MgPSB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50c0ZvclNvbDIwMjIubWludElkO1xuICBjb25zdCB0b2tlbkFkZHJlc3MgPSB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50c0ZvclNvbDIwMjIuYWNjb3VudHNbMF0uYXRhO1xuICBjb25zdCBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyA9ICdFTm44YTJ0R01TOWJSNVhWN3NtR0hKdk5nemt5eEptbkQyZVV2UXhZNWpTUCc7XG4gIGNvbnN0IGF1dGhvcml0eUFkZHJlc3MgPSBhY2NvdW50LnB1YjtcbiAgLy8gVmFsaWQgYmFzZTU4IGFkZHJlc3NlcyBmb3IgY29udGV4dCBzdGF0ZSBhY2NvdW50cyAoYW55IHZhbGlkIFNvbGFuYSBwdWJrZXkpXG4gIGNvbnN0IGVxQ3R4QWRkcmVzcyA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLmF0YTtcbiAgY29uc3QgdmFsaWRpdHlDdHhBZGRyZXNzID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0ucHViO1xuICBjb25zdCByYW5nZUN0eEFkZHJlc3MgPSB0ZXN0RGF0YS5ub25jZUFjY291bnQucHViO1xuXG4gIC8vIEhleCB0ZXN0IGRhdGFcbiAgY29uc3QgemVyb0J5dGVzMzYgPSAnMDAnLnJlcGVhdCgzNik7XG4gIGNvbnN0IHplcm9CeXRlczY0ID0gJzAwJy5yZXBlYXQoNjQpO1xuICBjb25zdCBwcm9vZkRhdGFIZXggPSAnMDAnLnJlcGVhdCgzMjApOyAvLyB0eXBpY2FsIGVxdWFsaXR5IHByb29mIHNpemVcblxuICBjb25zdCBjdEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9O1xuXG4gIC8qKiBBY2Nlc3MgdGhlIHJhdyBTb2xhbmEgVHJhbnNhY3Rpb24gZnJvbSB0aGUgYnVpbHQgdHggKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3Qgc29sVHggPSAodHg6IGFueSk6IGFueSA9PiAodHggYXMgVHJhbnNhY3Rpb24pLnNvbFRyYW5zYWN0aW9uO1xuXG4gIGRlc2NyaWJlKCdDb25maWd1cmVBY2NvdW50JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjb25maWd1cmUgYWNjb3VudCBpbnN0cnVjdGlvbiB3aXRoIHRoZSA0Ny1ieXRlIFRva2VuLTIwMjIgbGF5b3V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICc2NTUzNicsXG4gICAgICAgIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDEsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50Jyk7XG5cbiAgICAgIC8vIFZlcmlmeSByYXcgaW5zdHJ1Y3Rpb24gZGF0YVxuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICAvLyBUb2tlbi0yMDIyIENvbmZpZ3VyZUFjY291bnQgY2FycmllcyBubyBFbEdhbWFsIHB1YmtleTogdGhlIGtleSB0cmF2ZWxzIGluIHRoZVxuICAgICAgLy8gVmVyaWZ5UHVia2V5VmFsaWRpdHkgcHJvb2YgaW5zdHJ1Y3Rpb24ncyBjb250ZXh0LiBMYXlvdXQgaXNcbiAgICAgIC8vIFsyN11bMl0gKyBkZWNyeXB0YWJsZV96ZXJvX2JhbGFuY2UoMzYpICsgbWF4aW11bV9wZW5kaW5nX2JhbGFuY2VfY3JlZGl0X2NvdW50ZXIodTY0KSArIHByb29mX2luc3RydWN0aW9uX29mZnNldChpOCkuXG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoNDcpO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMjcpOyAvLyBDb25maWRlbnRpYWxUcmFuc2ZlckV4dGVuc2lvblxuICAgICAgZGF0YVsxXS5zaG91bGQuZXF1YWwoMik7IC8vIENvbmZpZ3VyZUFjY291bnRcbiAgICAgIGRhdGEuc2xpY2UoMiwgMzgpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoemVyb0J5dGVzMzYpOyAvLyBkZWNyeXB0YWJsZV96ZXJvX2JhbGFuY2VcbiAgICAgIGRhdGEucmVhZEJpZ1VJbnQ2NExFKDM4KS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnNjU1MzYnKTsgLy8gbWF4IHBlbmRpbmcgYmFsYW5jZSBjcmVkaXQgY291bnRlclxuICAgICAgZGF0YVs0Nl0uc2hvdWxkLmVxdWFsKDEpOyAvLyBwcm9vZl9pbnN0cnVjdGlvbl9vZmZzZXRcblxuICAgICAgLy8gVmVyaWZ5IGFjY291bnRzXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCg0KTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKG1pbnRBZGRyZXNzKTtcbiAgICAgIGtleXNbMV0uaXNXcml0YWJsZS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIGtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCdTeXN2YXIxbnN0cnVjdGlvbnMxMTExMTExMTExMTExMTExMTExMTExMTExJyk7IC8vIGluc3RydWN0aW9ucyBzeXN2YXJcbiAgICAgIGtleXNbM10ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1szXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY29udGV4dCBzdGF0ZSBhZGRyZXNzIHdoZW4gcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0U3RhdGVBZGRyZXNzID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0ucHViO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgaW5zdHJ1Y3Rpb25zU3lzdmFyT3JDb250ZXh0U3RhdGVBZGRyZXNzOiBjb250ZXh0U3RhdGVBZGRyZXNzLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGtleXMgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChjb250ZXh0U3RhdGVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhWzQ2XS5zaG91bGQuZXF1YWwoMCk7IC8vIHByb29mX2luc3RydWN0aW9uX29mZnNldCA9IDAgKGNvbnRleHQgc3RhdGUpXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVBdGEgcmVhbGxvY2F0ZSBleHRlbnNpb24gbGlzdCcsICgpID0+IHtcbiAgICBjb25zdCB0b2tlbjIwMjJQcm9ncmFtSWQgPSAnVG9rZW56UWRCTmJMcVA1VkVoZGtBUzZFUEZMQzFQSG5CcUNYRXBQeHVFYic7XG4gICAgLy8gUmVhbGxvY2F0ZSBkYXRhOiBbMjldW2V4dGVuc2lvblR5cGUodTE2IExFKSwgLi4uXS4gRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZm9sbG93IHRoZVxuICAgIC8vIFRva2VuLTIwMjIgZW51bTogQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50ID0gNSwgQ29uZmlkZW50aWFsVHJhbnNmZXJGZWVBbW91bnQgPSAxNy5cbiAgICBjb25zdCBSRUFMTE9DQVRFID0gMjk7XG4gICAgY29uc3QgQ09ORklERU5USUFMX1RSQU5TRkVSX0FDQ09VTlQgPSA1O1xuICAgIGNvbnN0IENPTkZJREVOVElBTF9UUkFOU0ZFUl9GRUVfQU1PVU5UID0gMTc7XG5cbiAgICBpdCgnc2hvdWxkIHJlYWxsb2NhdGUgb25seSBDb25maWRlbnRpYWxUcmFuc2ZlckFjY291bnQgZm9yIGEgbWludCB3aXRob3V0IFRyYW5zZmVyRmVlQ29uZmlnJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jcmVhdGVBdGEoe1xuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXRhQWRkcmVzczogdG9rZW5BZGRyZXNzLFxuICAgICAgICBvd25lckFkZHJlc3M6IGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIHBheWVyQWRkcmVzczogYWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogJ3Rzb2w6cmF5JyxcbiAgICAgICAgcHJvZ3JhbUlkOiB0b2tlbjIwMjJQcm9ncmFtSWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzFdLmRhdGE7XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgICBkYXRhWzBdLnNob3VsZC5lcXVhbChSRUFMTE9DQVRFKTtcbiAgICAgIGRhdGEucmVhZFVJbnQxNkxFKDEpLnNob3VsZC5lcXVhbChDT05GSURFTlRJQUxfVFJBTlNGRVJfQUNDT1VOVCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsc28gcmVzZXJ2ZSBDb25maWRlbnRpYWxUcmFuc2ZlckZlZUFtb3VudCB3aGVuIHRoZSBtaW50IGhhcyBUcmFuc2ZlckZlZUNvbmZpZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY3JlYXRlQXRhKHtcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF0YUFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBwYXllckFkZHJlc3M6IGFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6ICd0c29sOnVzZGMnLFxuICAgICAgICBwcm9ncmFtSWQ6IHRva2VuMjAyMlByb2dyYW1JZCxcbiAgICAgICAgbWludEhhc1RyYW5zZmVyRmVlQ29uZmlnOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMV0uZGF0YTtcbiAgICAgIGRhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKFJFQUxMT0NBVEUpO1xuICAgICAgZGF0YS5yZWFkVUludDE2TEUoMSkuc2hvdWxkLmVxdWFsKENPTkZJREVOVElBTF9UUkFOU0ZFUl9BQ0NPVU5UKTtcbiAgICAgIGRhdGEucmVhZFVJbnQxNkxFKDMpLnNob3VsZC5lcXVhbChDT05GSURFTlRJQUxfVFJBTlNGRVJfRkVFX0FNT1VOVCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBcHBseVBlbmRpbmdCYWxhbmNlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gYXBwbHkgcGVuZGluZyBiYWxhbmNlIGluc3RydWN0aW9uIHdpdGggY29ycmVjdCA0Ni1ieXRlIGxheW91dCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuYXBwbHlQZW5kaW5nQmFsYW5jZSh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXhwZWN0ZWRQZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICczJyxcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICBpbnN0cnVjdGlvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdBcHBseVBlbmRpbmdCYWxhbmNlJyk7XG5cbiAgICAgIGNvbnN0IHJhd0luc3RydWN0aW9ucyA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnM7XG4gICAgICByYXdJbnN0cnVjdGlvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgY29uc3QgZGF0YSA9IHJhd0luc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDQ2KTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDI3KTsgLy8gQ29uZmlkZW50aWFsVHJhbnNmZXJFeHRlbnNpb25cbiAgICAgIGRhdGFbMV0uc2hvdWxkLmVxdWFsKDgpOyAvLyBBcHBseVBlbmRpbmdCYWxhbmNlXG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSgyKS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnMycpOyAvLyBleHBlY3RlZF9wZW5kaW5nX2JhbGFuY2VfY3JlZGl0X2NvdW50ZXJcbiAgICAgIGRhdGEuc2xpY2UoMTAsIDQ2KS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHplcm9CeXRlczM2KTsgLy8gbmV3X2RlY3J5cHRhYmxlX2F2YWlsYWJsZV9iYWxhbmNlXG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50czogW3Rva2VuKHdyaXRhYmxlKSwgYXV0aG9yaXR5KHNpZ25lcildXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1sxXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVwb3NpdCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgZGVwb3NpdCBpbnN0cnVjdGlvbiB3aXRoIGNvcnJlY3QgMTEtYnl0ZSBsYXlvdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsRGVwb3NpdCcpO1xuXG4gICAgICBjb25zdCByYXdJbnN0cnVjdGlvbnMgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zO1xuICAgICAgcmF3SW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByYXdJbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgxMSk7XG4gICAgICBkYXRhWzBdLnNob3VsZC5lcXVhbCgyNyk7IC8vIENvbmZpZGVudGlhbFRyYW5zZmVyRXh0ZW5zaW9uXG4gICAgICBkYXRhWzFdLnNob3VsZC5lcXVhbCg1KTsgLy8gRGVwb3NpdFxuICAgICAgZGF0YS5yZWFkQmlnVUludDY0TEUoMikudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJzEwMDAwMDAnKTsgLy8gYW1vdW50XG4gICAgICBkYXRhWzEwXS5zaG91bGQuZXF1YWwoNik7IC8vIGRlY2ltYWxzXG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50czogW3Rva2VuKHdyaXRhYmxlKSwgbWludCwgYXV0aG9yaXR5KHNpZ25lcildXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgzKTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKG1pbnRBZGRyZXNzKTtcbiAgICAgIGtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1syXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2l0aGRyYXcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHdpdGhkcmF3IGluc3RydWN0aW9uIHdpdGggY29ycmVjdCA0OS1ieXRlIGxheW91dCBhbmQgaW5saW5lIHByb29mcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsV2l0aGRyYXcoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICc1MDAwMDAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsV2l0aGRyYXcnKTtcblxuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoNDkpO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMjcpOyAvLyBDb25maWRlbnRpYWxUcmFuc2ZlckV4dGVuc2lvblxuICAgICAgZGF0YVsxXS5zaG91bGQuZXF1YWwoNik7IC8vIFdpdGhkcmF3XG4gICAgICBkYXRhLnJlYWRCaWdVSW50NjRMRSgyKS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnNTAwMDAwJyk7IC8vIGFtb3VudFxuICAgICAgZGF0YVsxMF0uc2hvdWxkLmVxdWFsKDYpOyAvLyBkZWNpbWFsc1xuICAgICAgZGF0YS5zbGljZSgxMSwgNDcpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoemVyb0J5dGVzMzYpOyAvLyBuZXdfZGVjcnlwdGFibGVcbiAgICAgIGRhdGFbNDddLnNob3VsZC5lcXVhbCgxKTsgLy8gZXF1YWxpdHkgcHJvb2Ygb2Zmc2V0XG4gICAgICBkYXRhWzQ4XS5zaG91bGQuZXF1YWwoMik7IC8vIHJhbmdlIHByb29mIG9mZnNldFxuXG4gICAgICAvLyBWZXJpZnkgYWNjb3VudHM6IFt0b2tlbih3cml0YWJsZSksIG1pbnQsIHN5c3ZhciwgYXV0aG9yaXR5KHNpZ25lcildXG4gICAgICBjb25zdCBrZXlzID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmtleXM7XG4gICAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCg0KTtcbiAgICAgIGtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKG1pbnRBZGRyZXNzKTtcbiAgICAgIGtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCdTeXN2YXIxbnN0cnVjdGlvbnMxMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBrZXlzWzNdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbM10uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB3aXRoZHJhdyBpbnN0cnVjdGlvbiB3aXRoIGNvbnRleHQgc3RhdGUgYWNjb3VudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFdpdGhkcmF3KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgcmFuZ2VQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IHJhbmdlQ3R4QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnNTAwMDAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qga2V5cyA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0ua2V5cztcbiAgICAgIC8vIFt0b2tlbiwgbWludCwgZXFDdHgsIHJnQ3R4LCBhdXRob3JpdHldIOKAlCBubyBzeXN2YXIgc2luY2UgYWxsIHByb29mcyB1c2UgY29udGV4dCBzdGF0ZVxuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNSk7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChlcUN0eEFkZHJlc3MpO1xuICAgICAga2V5c1szXS5wdWJrZXkudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwocmFuZ2VDdHhBZGRyZXNzKTtcbiAgICAgIGtleXNbNF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgICAga2V5c1s0XS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29uZmlkZW50aWFsVHJhbnNmZXInLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zZmVyIGluc3RydWN0aW9uIHdpdGggY29ycmVjdCAxNjktYnl0ZSBsYXlvdXQgYW5kIGlubGluZSBwcm9vZnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgbmV3U291cmNlRGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dExvOiB6ZXJvQnl0ZXM2NCxcbiAgICAgICAgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpOiB6ZXJvQnl0ZXM2NCxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICBjaXBoZXJ0ZXh0VmFsaWRpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAyLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsVHJhbnNmZXInKTtcblxuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoMTY5KTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDI3KTsgLy8gQ29uZmlkZW50aWFsVHJhbnNmZXJFeHRlbnNpb25cbiAgICAgIGRhdGFbMV0uc2hvdWxkLmVxdWFsKDcpOyAvLyBUcmFuc2ZlclxuICAgICAgZGF0YS5zbGljZSgyLCAzOCkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh6ZXJvQnl0ZXMzNik7IC8vIG5ld19zb3VyY2VfZGVjcnlwdGFibGVcbiAgICAgIGRhdGEuc2xpY2UoMzgsIDEwMikudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh6ZXJvQnl0ZXM2NCk7IC8vIGF1ZGl0b3JfY3RfbG9cbiAgICAgIGRhdGEuc2xpY2UoMTAyLCAxNjYpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoemVyb0J5dGVzNjQpOyAvLyBhdWRpdG9yX2N0X2hpXG4gICAgICBkYXRhWzE2Nl0uc2hvdWxkLmVxdWFsKDEpOyAvLyBlcXVhbGl0eSBwcm9vZiBvZmZzZXRcbiAgICAgIGRhdGFbMTY3XS5zaG91bGQuZXF1YWwoMik7IC8vIHZhbGlkaXR5IHByb29mIG9mZnNldFxuICAgICAgZGF0YVsxNjhdLnNob3VsZC5lcXVhbCgzKTsgLy8gcmFuZ2UgcHJvb2Ygb2Zmc2V0XG5cbiAgICAgIC8vIFZlcmlmeSBhY2NvdW50czogW3NvdXJjZSh3cml0YWJsZSksIG1pbnQsIGRlc3Qod3JpdGFibGUpLCBzeXN2YXIsIGF1dGhvcml0eShzaWduZXIpXVxuICAgICAgY29uc3Qga2V5cyA9IHJhd0luc3RydWN0aW9uc1swXS5rZXlzO1xuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNSk7XG4gICAgICBrZXlzWzBdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbCh0b2tlbkFkZHJlc3MpO1xuICAgICAga2V5c1swXS5pc1dyaXRhYmxlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXlzWzFdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChtaW50QWRkcmVzcyk7XG4gICAgICBrZXlzWzJdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChkZXN0aW5hdGlvblRva2VuQWRkcmVzcyk7XG4gICAgICBrZXlzWzJdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGtleXNbM10ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCdTeXN2YXIxbnN0cnVjdGlvbnMxMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBrZXlzWzRdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbNF0uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB0cmFuc2ZlciBpbnN0cnVjdGlvbiB3aXRoIGNvbnRleHQgc3RhdGUgYWNjb3VudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qga2V5cyA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0ua2V5cztcbiAgICAgIC8vIFtzb3VyY2UsIG1pbnQsIGRlc3QsIGVxQ3R4LCB2YWxpZGl0eUN0eCwgcmFuZ2VDdHgsIGF1dGhvcml0eV0g4oCUIG5vIHN5c3ZhclxuICAgICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoNyk7XG4gICAgICBrZXlzWzNdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChlcUN0eEFkZHJlc3MpO1xuICAgICAga2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwodmFsaWRpdHlDdHhBZGRyZXNzKTtcbiAgICAgIGtleXNbNV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHJhbmdlQ3R4QWRkcmVzcyk7XG4gICAgICBrZXlzWzZdLnB1YmtleS50b1N0cmluZygpLnNob3VsZC5lcXVhbChhdXRob3JpdHlBZGRyZXNzKTtcbiAgICAgIGtleXNbNl0uaXNTaWduZXIuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeVB1YmtleVZhbGlkaXR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2ZXJpZnkgcHVia2V5IHZhbGlkaXR5IGluc3RydWN0aW9uIHdpdGggaW5saW5lIHByb29mIGRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeVB1YmtleVZhbGlkaXR5KHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3SW5zdHJ1Y3Rpb25zID0gc29sVHgodHgpLmluc3RydWN0aW9ucztcbiAgICAgIHJhd0luc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBjb25zdCBkYXRhID0gcmF3SW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhWzBdLnNob3VsZC5lcXVhbCg0KTsgLy8gVmVyaWZ5UHVia2V5VmFsaWRpdHkgZGlzY3JpbWluYXRvclxuICAgICAgZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAzMjApOyAvLyBkaXNjcmltaW5hdG9yICsgcHJvb2YgZGF0YVxuICAgICAgZGF0YS5zbGljZSgxKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHByb29mRGF0YUhleCk7XG5cbiAgICAgIC8vIE5vIGFjY291bnRzIGZvciBpbmxpbmUgcHJvb2ZcbiAgICAgIHJhd0luc3RydWN0aW9uc1swXS5rZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcblxuICAgICAgLy8gVmVyaWZ5IHByb2dyYW0gaWQgKGNhbm9uaWNhbCBvbi1jaGFpbiBpZClcbiAgICAgIHJhd0luc3RydWN0aW9uc1swXS5wcm9ncmFtSWQudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJ1prRTFHYW1hMVByb29mMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgd2l0aCBjb250ZXh0IHN0YXRlIGFjY291bnQgKGZpeCAjMyknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeVB1YmtleVZhbGlkaXR5KHtcbiAgICAgICAgY29udGV4dFN0YXRlQWNjb3VudEFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY29udGV4dFN0YXRlQXV0aG9yaXR5QWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd0l4ID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXTtcbiAgICAgIGNvbnN0IGRhdGEgPSByYXdJeC5kYXRhO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoNCk7IC8vIFZlcmlmeVB1YmtleVZhbGlkaXR5IGRpc2NyaW1pbmF0b3JcbiAgICAgIC8vIENvbnRleHQgc3RhdGUgYWNjb3VudHM6IFtjb250ZXh0U3RhdGUod3JpdGFibGUpLCBhdXRob3JpdHldXG4gICAgICByYXdJeC5rZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJhd0l4LmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGVxQ3R4QWRkcmVzcyk7XG4gICAgICByYXdJeC5rZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJhd0l4LmtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5RXF1YWxpdHlQcm9vZicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggaW5saW5lIHByb29mIGRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeUVxdWFsaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMyk7IC8vIFZlcmlmeUNpcGhlcnRleHRDb21taXRtZW50RXF1YWxpdHkgZGlzY3JpbWluYXRvclxuICAgICAgZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAzMjApO1xuICAgICAgZGF0YS5zbGljZSgxKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHByb29mRGF0YUhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggY29udGV4dCBzdGF0ZSBvZmZzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeUVxdWFsaXR5UHJvb2Yoe1xuICAgICAgICBjb250ZXh0U3RhdGVBY2NvdW50QWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICBjb250ZXh0U3RhdGVBdXRob3JpdHlBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdJeCA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF07XG4gICAgICBjb25zdCBkYXRhID0gcmF3SXguZGF0YTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgZGF0YS5yZWFkVUludDMyTEUoMSkuc2hvdWxkLmVxdWFsKDApOyAvLyBvZmZzZXQgYXMgdTMyXG5cbiAgICAgIC8vIENvbnRleHQgc3RhdGUgYWNjb3VudHM6IFtjb250ZXh0U3RhdGUod3JpdGFibGUpLCBhdXRob3JpdHldXG4gICAgICByYXdJeC5rZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHJhd0l4LmtleXNbMF0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGVxQ3R4QWRkcmVzcyk7XG4gICAgICByYXdJeC5rZXlzWzBdLmlzV3JpdGFibGUuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHJhd0l4LmtleXNbMV0ucHVia2V5LnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKGF1dGhvcml0eUFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5VmFsaWRpdHlQcm9vZicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggaW5saW5lIHByb29mIGRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZlcmlmeVZhbGlkaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVswXS5zaG91bGQuZXF1YWwoMTIpOyAvLyBWZXJpZnlCYXRjaGVkR3JvdXBlZENpcGhlcnRleHQzSGFuZGxlc1ZhbGlkaXR5XG4gICAgICBkYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoMSArIDMyMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnlSYW5nZVByb29mJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgd2l0aCBpbmxpbmUgcHJvb2YgZGF0YScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmVyaWZ5UmFuZ2VQcm9vZih7IHByb29mRGF0YTogJzAwJy5yZXBlYXQoMTAwMCkgfSk7IC8vIHJhbmdlIHByb29mIGlzIH4xMDAwIGJ5dGVzXG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGFbMF0uc2hvdWxkLmVxdWFsKDcpOyAvLyBWZXJpZnlCYXRjaGVkUmFuZ2VQcm9vZlUxMjhcbiAgICAgIGRhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgxICsgMTAwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNdWx0aXBsZSBpbnN0cnVjdGlvbnMgKHYxIHR4IHNpbXVsYXRpb24pJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgQXBwbHlQZW5kaW5nQmFsYW5jZSArIDMgcHJvb2ZzICsgVHJhbnNmZXIgaW4gY29ycmVjdCBvcmRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFwcGx5UGVuZGluZ0JhbGFuY2Uoe1xuICAgICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICAgIGV4cGVjdGVkUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnMicsXG4gICAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgfSlcbiAgICAgICAgLnZlcmlmeUVxdWFsaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KVxuICAgICAgICAudmVyaWZ5VmFsaWRpdHlQcm9vZih7IHByb29mRGF0YTogcHJvb2ZEYXRhSGV4IH0pXG4gICAgICAgIC52ZXJpZnlSYW5nZVByb29mKHsgcHJvb2ZEYXRhOiAnMDAnLnJlcGVhdCgxMDAwKSB9KVxuICAgICAgICAuY29uZmlkZW50aWFsVHJhbnNmZXIoe1xuICAgICAgICAgIHNvdXJjZVRva2VuQWRkcmVzczogdG9rZW5BZGRyZXNzLFxuICAgICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICAgIGRlc3RpbmF0aW9uVG9rZW5BZGRyZXNzLFxuICAgICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgICAgbmV3U291cmNlRGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgICB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0TG86IHplcm9CeXRlczY0LFxuICAgICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICAgIGNpcGhlcnRleHRWYWxpZGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDIsXG4gICAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAzLFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCg1KTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQXBwbHlQZW5kaW5nQmFsYW5jZScpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnR5cGUuc2hvdWxkLmVxdWFsKCdWZXJpZnlFcXVhbGl0eVByb29mJyk7XG4gICAgICBpbnN0cnVjdGlvbnNbMl0udHlwZS5zaG91bGQuZXF1YWwoJ1ZlcmlmeVZhbGlkaXR5UHJvb2YnKTtcbiAgICAgIGluc3RydWN0aW9uc1szXS50eXBlLnNob3VsZC5lcXVhbCgnVmVyaWZ5UmFuZ2VQcm9vZicpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzRdLnR5cGUuc2hvdWxkLmVxdWFsKCdDb25maWRlbnRpYWxUcmFuc2ZlcicpO1xuXG4gICAgICAvLyBOb3RlOiBDYW5ub3QgdmVyaWZ5IHRvQnJvYWRjYXN0Rm9ybWF0KCkgaGVyZSBiZWNhdXNlIDMgcHJvb2ZzICgzMjArMzIwKzEwMDAgYnl0ZXMpXG4gICAgICAvLyArIHRyYW5zZmVyICgxNjlCKSBleGNlZWRzIHYwIHR4IHNpemUgbGltaXQgKDEyMzJCKS4gVGhlc2UgYXJlIHYxIHRyYW5zYWN0aW9ucyAoNDEzMkIpLlxuICAgICAgLy8gVGhlIGluc3RydWN0aW9uIGRhdGEgbGF5b3V0cyBhcmUgdmVyaWZpZWQgaW5kaXZpZHVhbGx5IGluIHRoZSB0ZXN0cyBhYm92ZS5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgQ29uZmlndXJlQWNjb3VudCArIFZlcmlmeVB1YmtleVZhbGlkaXR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgICB9KVxuICAgICAgICAudmVyaWZ5UHVia2V5VmFsaWRpdHkoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50Jyk7XG4gICAgICBpbnN0cnVjdGlvbnNbMV0udHlwZS5zaG91bGQuZXF1YWwoJ1ZlcmlmeVB1YmtleVZhbGlkaXR5Jyk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmF3IHRyYW5zYWN0aW9uIHZhbGlkaXR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIHZhbGlkIHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IGVtcHR5IGJ1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvY29uZmlkZW50aWFsIHRyYW5zZmVyIGluc3RydWN0aW9uLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBtaXNzaW5nIHRva2VuQWRkcmVzcyBvbiBjb25maWd1cmVBY2NvdW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PlxuICAgICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICAgIHRva2VuQWRkcmVzczogJycsXG4gICAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICAgIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDEsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyDilIDilIDilIAgRml4LXNwZWNpZmljIHRlc3RzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGRlc2NyaWJlKCdGaXggIzE6IHNpZ25lZCBpOCBwcm9vZiBpbnN0cnVjdGlvbiBvZmZzZXRzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGVuY29kZSBuZWdhdGl2ZSBvZmZzZXQgb24gQ29uZmlndXJlQWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMSwgLy8gcHJvb2YgaXMgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVs0Nl0uc2hvdWxkLmVxdWFsKDI1NSk7IC8vIC0xIGFzIGk4ID0gMjU1IGFzIHU4ICh0d28ncyBjb21wbGVtZW50KVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZW5jb2RlIG5lZ2F0aXZlIG9mZnNldCBvbiBXaXRoZHJhdycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsV2l0aGRyYXcoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBlcXVhbGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICByYW5nZVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogcmFuZ2VDdHhBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgICAgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgZXF1YWxpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMSxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLmRhdGE7XG4gICAgICBkYXRhWzQ3XS5zaG91bGQuZXF1YWwoMjU1KTsgLy8gLTEgYXMgaThcbiAgICAgIGRhdGFbNDhdLnNob3VsZC5lcXVhbCgyNTQpOyAvLyAtMiBhcyBpOFxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZW5jb2RlIG5lZ2F0aXZlIG9mZnNldHMgb24gVHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogLTMsXG4gICAgICAgIGNpcGhlcnRleHRWYWxpZGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IC0yLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IC0xLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGFbMTY2XS5zaG91bGQuZXF1YWwoMjUzKTsgLy8gLTMgYXMgaThcbiAgICAgIGRhdGFbMTY3XS5zaG91bGQuZXF1YWwoMjU0KTsgLy8gLTIgYXMgaThcbiAgICAgIGRhdGFbMTY4XS5zaG91bGQuZXF1YWwoMjU1KTsgLy8gLTEgYXMgaThcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZpeCAjMjogaW5zdHJ1Y3Rpb24gb3JkZXIgcHJlc2VydmF0aW9uIGluIHBhcnNlcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIGludGVybGVhdmVkIENUIGFuZCBjdXN0b20gaW5zdHJ1Y3Rpb24gb3JkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hcHBseVBlbmRpbmdCYWxhbmNlKHtcbiAgICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgICBleHBlY3RlZFBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzEnLFxuICAgICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIH0pXG4gICAgICAgIC52ZXJpZnlFcXVhbGl0eVByb29mKHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSlcbiAgICAgICAgLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgICBzb3VyY2VUb2tlbkFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICAgIGVxdWFsaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiBlcUN0eEFkZHJlc3MsXG4gICAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgICAgcmFuZ2VQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IHJhbmdlQ3R4QWRkcmVzcyxcbiAgICAgICAgICBuZXdTb3VyY2VEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgICAgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpOiB6ZXJvQnl0ZXM2NCxcbiAgICAgICAgICBlcXVhbGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICAvLyBPcmRlciBzaG91bGQgYmU6IEFwcGx5UGVuZGluZ0JhbGFuY2UsIFZlcmlmeUVxdWFsaXR5UHJvb2YsIENvbmZpZGVudGlhbFRyYW5zZmVyXG4gICAgICBpbnN0cnVjdGlvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDMpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdBcHBseVBlbmRpbmdCYWxhbmNlJyk7XG4gICAgICBpbnN0cnVjdGlvbnNbMV0udHlwZS5zaG91bGQuZXF1YWwoJ1ZlcmlmeUVxdWFsaXR5UHJvb2YnKTtcbiAgICAgIGluc3RydWN0aW9uc1syXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlkZW50aWFsVHJhbnNmZXInKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZpeCAjMzogVmVyaWZ5UHVia2V5VmFsaWRpdHkgY29udGV4dCBzdGF0ZSBtb2RlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbm90IHRocm93IHdoZW4gb25seSBjb250ZXh0IHN0YXRlIGFjY291bnRzIGFyZSBwcm92aWRlZCAobm8gcHJvb2ZEYXRhKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmVyaWZ5UHVia2V5VmFsaWRpdHkoe1xuICAgICAgICBjb250ZXh0U3RhdGVBY2NvdW50QWRkcmVzczogZXFDdHhBZGRyZXNzLFxuICAgICAgICBjb250ZXh0U3RhdGVBdXRob3JpdHlBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3SXggPSBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdO1xuICAgICAgLy8gU2hvdWxkIHByb2R1Y2UgYW4gb2Zmc2V0LWJhc2VkIGluc3RydWN0aW9uLCBub3QgdGhyb3dcbiAgICAgIHJhd0l4LmRhdGFbMF0uc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmF3SXgua2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzQ6IGNvbnRleHQgc3RhdGUgYWRkcmVzcyByZXF1aXJlZCB3aGVuIG9mZnNldCA9PSAwJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IFdpdGhkcmF3IHdpdGggb2Zmc2V0IDAgYnV0IG1pc3NpbmcgZXF1YWxpdHkgY29udGV4dCBzdGF0ZSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxXaXRoZHJhdyh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIHJhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiByYW5nZUN0eEFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzEwMCcsXG4gICAgICAgIGRlY2ltYWxzOiA2LFxuICAgICAgICBuZXdEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBlcXVhbGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsIC8vIGNvbnRleHQgc3RhdGUgbW9kZSBidXQgbm8gYWRkcmVzc1xuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9lcXVhbGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzcyBpcyByZXF1aXJlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgVHJhbnNmZXIgd2l0aCBvZmZzZXQgMCBidXQgbWlzc2luZyByYW5nZSBjb250ZXh0IHN0YXRlIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFRyYW5zZmVyKHtcbiAgICAgICAgc291cmNlVG9rZW5BZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRva2VuQWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiB2YWxpZGl0eUN0eEFkZHJlc3MsXG4gICAgICAgIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRMbzogemVyb0J5dGVzNjQsXG4gICAgICAgIHRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaTogemVyb0J5dGVzNjQsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgY2lwaGVydGV4dFZhbGlkaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLCAvLyBjb250ZXh0IHN0YXRlIG1vZGUgYnV0IG5vIGFkZHJlc3NcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JhbmdlUHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzIGlzIHJlcXVpcmVkLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzU6IG51bWVyaWMgc3RyaW5nIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLW51bWVyaWMgYW1vdW50IG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICdhYmMnLFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgYW1vdW50OiBleHBlY3RlZCBub24tbmVnYXRpdmUgaW50ZWdlciBzdHJpbmcvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGFtb3VudCBvbiBEZXBvc2l0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxEZXBvc2l0KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnLTEwMCcsXG4gICAgICAgIGRlY2ltYWxzOiA2LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBhbW91bnQ6IGV4cGVjdGVkIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHN0cmluZy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLW51bWVyaWMgY291bnRlciBvbiBBcHBseVBlbmRpbmdCYWxhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hcHBseVBlbmRpbmdCYWxhbmNlKHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBleHBlY3RlZFBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJ25vdC1hLW51bWJlcicsXG4gICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGV4cGVjdGVkUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tbnVtZXJpYyBjb3VudGVyIG9uIENvbmZpZ3VyZUFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJ2ZvbycsXG4gICAgICAgIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDEsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IGFtb3VudCBvZiAwIG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YS5yZWFkQmlnVUludDY0TEUoMikudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZpeCAjNjogY2Fub25pY2FsIFpLIHByb29mIHByb2dyYW0gSUQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB1c2UgY2Fub25pY2FsIHprLWVsZ2FtYWwtcHJvb2YgcHJvZ3JhbSBpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmVyaWZ5RXF1YWxpdHlQcm9vZih7IHByb29mRGF0YTogcHJvb2ZEYXRhSGV4IH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0ucHJvZ3JhbUlkLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCdaa0UxR2FtYTFQcm9vZjExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IG92ZXJyaWRpbmcgWksgcHJvb2YgcHJvZ3JhbSBpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbVByb2dyYW1JZCA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLnB1YjsgLy8gYW55IHZhbGlkIHB1YmtleVxuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci56a1Byb29mUHJvZ3JhbUlkKGN1c3RvbVByb2dyYW1JZCk7XG4gICAgICBidWlsZGVyLnZlcmlmeUVxdWFsaXR5UHJvb2YoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzb2xUeCh0eCkuaW5zdHJ1Y3Rpb25zWzBdLnByb2dyYW1JZC50b1N0cmluZygpLnNob3VsZC5lcXVhbChjdXN0b21Qcm9ncmFtSWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRml4ICM4OiBmcm9tKCkgcm91dGluZyBmb3IgQ1QgdHJhbnNhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcm91dGUgQ1QgdHJhbnNhY3Rpb24gdG8gQ29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyIG9uIGZyb20oKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEJ1aWxkIGEgQ1QgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBQYXJzZSBpdCBiYWNrIHZpYSBmYWN0b3J5LmZyb20oKVxuICAgICAgY29uc3QgcGFyc2VkQnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeCk7XG4gICAgICAvLyBTaG91bGQgYmUgYSBDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIsIG5vdCBDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXJcbiAgICAgIHBhcnNlZEJ1aWxkZXIuY29uc3RydWN0b3IubmFtZS5zaG91bGQuZXF1YWwoJ0NvbmZpZGVudGlhbFRyYW5zZmVyQnVpbGRlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByb3V0ZSBub24tQ1QgY3VzdG9tIHRyYW5zYWN0aW9uIHRvIEN1c3RvbUluc3RydWN0aW9uQnVpbGRlciBvbiBmcm9tKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBCdWlsZCBhIG5vbi1DVCBjdXN0b20gdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IGN1c3RvbUJ1aWxkZXIgPSBmYWN0b3J5LmdldEN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgY3VzdG9tQnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgY3VzdG9tQnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgICAgY3VzdG9tQnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbih7XG4gICAgICAgIHByb2dyYW1JZDogJ01lbW9TcTRncUFCQVhLYjk2cW5IOFR5c05jV3hNeVdDcVhnRExHbWZjSHInLFxuICAgICAgICBrZXlzOiBbXSxcbiAgICAgICAgZGF0YTogJ2hlbGxvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGN1c3RvbUJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gUGFyc2UgaXQgYmFjayB2aWEgZmFjdG9yeS5mcm9tKClcbiAgICAgIGNvbnN0IHBhcnNlZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocmF3VHgpO1xuICAgICAgcGFyc2VkQnVpbGRlci5jb25zdHJ1Y3Rvci5uYW1lLnNob3VsZC5lcXVhbCgnQ3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzk6IHJhbmdlIHZhbGlkYXRpb24gZm9yIGRlY2ltYWxzIGFuZCBwcm9vZiBvZmZzZXRzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVqZWN0IGRlY2ltYWxzID4gMjU1IG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogMjU2LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBkZWNpbWFsczogZXhwZWN0ZWQgdTggXFwoMC0yNTVcXCkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGRlY2ltYWxzIG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxMDAnLFxuICAgICAgICBkZWNpbWFsczogLTEsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGRlY2ltYWxzOiBleHBlY3RlZCB1OCBcXCgwLTI1NVxcKS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLWludGVnZXIgZGVjaW1hbHMgb24gRGVwb3NpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsRGVwb3NpdCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzEwMCcsXG4gICAgICAgIGRlY2ltYWxzOiA2LjUsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGRlY2ltYWxzOiBleHBlY3RlZCB1OCBcXCgwLTI1NVxcKS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgcHJvb2Ygb2Zmc2V0ID4gMTI3IG9uIENvbmZpZ3VyZUFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZ3VyZUFjY291bnQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzY1NTM2JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMTI4LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiBleHBlY3RlZCBpOCBcXCgtMTI4IHRvIDEyN1xcKS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgcHJvb2Ygb2Zmc2V0IDwgLTEyOCBvbiBDb25maWd1cmVBY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICc2NTUzNicsXG4gICAgICAgIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IC0xMjksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IGV4cGVjdGVkIGk4IFxcKC0xMjggdG8gMTI3XFwpLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBlcXVhbGl0eSBwcm9vZiBvZmZzZXQgPiAxMjcgb24gV2l0aGRyYXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFdpdGhkcmF3KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgcmFuZ2VQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IHJhbmdlQ3R4QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMTAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMjAwLFxuICAgICAgICByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogZXhwZWN0ZWQgaTgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHJhbmdlIHByb29mIG9mZnNldCA8IC0xMjggb24gV2l0aGRyYXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbFdpdGhkcmF3KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZXF1YWxpdHlQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IGVxQ3R4QWRkcmVzcyxcbiAgICAgICAgcmFuZ2VQcm9vZkNvbnRleHRTdGF0ZUFkZHJlc3M6IHJhbmdlQ3R4QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMTAwJyxcbiAgICAgICAgZGVjaW1hbHM6IDYsXG4gICAgICAgIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMCxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAtMjAwLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCByYW5nZVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IGV4cGVjdGVkIGk4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB2YWxpZGl0eSBwcm9vZiBvZmZzZXQgb3V0IG9mIGk4IHJhbmdlIG9uIFRyYW5zZmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWRlbnRpYWxUcmFuc2Zlcih7XG4gICAgICAgIHNvdXJjZVRva2VuQWRkcmVzczogdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Ub2tlbkFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGVxdWFsaXR5UHJvb2ZDb250ZXh0U3RhdGVBZGRyZXNzOiBlcUN0eEFkZHJlc3MsXG4gICAgICAgIGNpcGhlcnRleHRWYWxpZGl0eVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogdmFsaWRpdHlDdHhBZGRyZXNzLFxuICAgICAgICByYW5nZVByb29mQ29udGV4dFN0YXRlQWRkcmVzczogcmFuZ2VDdHhBZGRyZXNzLFxuICAgICAgICBuZXdTb3VyY2VEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0TG86IHplcm9CeXRlczY0LFxuICAgICAgICB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0SGk6IHplcm9CeXRlczY0LFxuICAgICAgICBlcXVhbGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDAsXG4gICAgICAgIGNpcGhlcnRleHRWYWxpZGl0eVByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDI1NSxcbiAgICAgICAgcmFuZ2VQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAwLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBjaXBoZXJ0ZXh0VmFsaWRpdHlQcm9vZkluc3RydWN0aW9uT2Zmc2V0OiBleHBlY3RlZCBpOC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYm91bmRhcnkgb2Zmc2V0IHZhbHVlcyAoLTEyOCBhbmQgMTI3KScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGRlY3J5cHRhYmxlWmVyb0JhbGFuY2U6IHplcm9CeXRlczM2LFxuICAgICAgICBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyOiAnNjU1MzYnLFxuICAgICAgICBwcm9vZkluc3RydWN0aW9uT2Zmc2V0OiAxMjcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBkYXRhID0gc29sVHgodHgpLmluc3RydWN0aW9uc1swXS5kYXRhO1xuICAgICAgZGF0YVs0Nl0uc2hvdWxkLmVxdWFsKDEyNyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGaXggIzEwOiB1NjQgb3ZlcmZsb3cgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbW91bnQgZXhjZWVkaW5nIHU2NCBtYXggb24gRGVwb3NpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuY29uZmlkZW50aWFsRGVwb3NpdCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzE4NDQ2NzQ0MDczNzA5NTUxNjE2JywgLy8gMl42NFxuICAgICAgICBkZWNpbWFsczogNixcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgYW1vdW50OiB2YWx1ZSBleGNlZWRzIHU2NCBtYXgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IGFtb3VudCBhdCB1NjQgbWF4IG9uIERlcG9zaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY3RCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmNvbmZpZGVudGlhbERlcG9zaXQoe1xuICAgICAgICB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcxODQ0Njc0NDA3MzcwOTU1MTYxNScsIC8vIDJeNjQgLSAxXG4gICAgICAgIGRlY2ltYWxzOiA2LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgZGF0YSA9IHNvbFR4KHR4KS5pbnN0cnVjdGlvbnNbMF0uZGF0YTtcbiAgICAgIGRhdGEucmVhZEJpZ1VJbnQ2NExFKDIpLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCcxODQ0Njc0NDA3MzcwOTU1MTYxNScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgY291bnRlciBleGNlZWRpbmcgdTY0IG1heCBvbiBDb25maWd1cmVBY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGN0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICcxODQ0Njc0NDA3MzcwOTU1MTYxNicsIC8vIDJeNjRcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogdmFsdWUgZXhjZWVkcyB1NjQgbWF4Lyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=