dcdx 1.3.0-next.12 → 1.3.0-next.13

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.
@@ -475,13 +475,13 @@ const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
475
475
  // If we are in interactive mode, we should ask questions first
476
476
  if (!force) {
477
477
  // Check if we are currently in the APT directory
478
- const isCurrentDirectoryEligable = existsSync(join(cwd$1, 'app/util/k8s/dcapt.tfvars'));
478
+ const isCurrentDirectoryEligable = existsSync(join(result, 'app/util/k8s/dcapt.tfvars'));
479
479
  // If this is the APT directory, we will be using the current directory...
480
480
  let useCurrentDirectory = isCurrentDirectoryEligable;
481
481
  // ...unless told otherwise
482
482
  if (isCurrentDirectoryEligable) {
483
483
  console.log(` We've found the App Performance Toolkit in the specified directory:
484
- ${cwd$1}
484
+ ${result}
485
485
  `);
486
486
  useCurrentDirectory = await confirm({
487
487
  message: `Do you wish to use this directory?`,
@@ -489,11 +489,11 @@ const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
489
489
  });
490
490
  }
491
491
  // If we are not going to use the current directory, ask for the alternative
492
- let directory = cwd$1;
492
+ let directory = result;
493
493
  if (!useCurrentDirectory) {
494
494
  directory = await input({
495
495
  message: 'Please specify the location where the App Peformance Toolkit is located',
496
- default: cwd$1,
496
+ default: result,
497
497
  required: true
498
498
  });
499
499
  }
@@ -543,16 +543,16 @@ const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
543
543
  // If we are in non-interactive mode and we need to use the default configuration, we will clone it from Github
544
544
  }
545
545
  else if (mustUseDefaultConfiguration) {
546
- if (cwd$1.endsWith('.dcdx/dcapt')) {
546
+ if (result.endsWith('.dcdx/dcapt')) {
547
547
  console.log(' Using default configuration of DCAPT from source (non-interactive mode)');
548
- console.log(` ${cwd$1}`);
548
+ console.log(` ${result}`);
549
549
  emptyLine();
550
- return cwd$1;
550
+ return result;
551
551
  }
552
552
  // If the provided directory does not exists we can use it
553
553
  // Otherwise use a temporary directory to ensure a fresh non-persistent checkout
554
- result = !existsSync(cwd$1)
555
- ? cwd$1
554
+ result = !existsSync(result)
555
+ ? result
556
556
  : join(homedir(), '.dcdx', 'dcapt');
557
557
  // Inform the user of the chosen directory
558
558
  console.log(' Installing default configuration of DCAPT from source (non-interactive mode)');
@@ -566,15 +566,14 @@ const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
566
566
  }
567
567
  else {
568
568
  // Check if we are currently in the APT directory
569
- const isCurrentDirectoryEligable = existsSync(join(cwd$1, 'app/util/k8s/dcapt.tfvars'));
569
+ const isCurrentDirectoryEligable = existsSync(join(result, 'app/util/k8s/dcapt.tfvars'));
570
570
  // If this is not a DCAPT directory, we cannot continue
571
571
  if (!isCurrentDirectoryEligable) {
572
- throw new Error(`Could not find App Performance Toolkit in the current directory ${cwd$1}`);
572
+ throw new Error(`Could not find App Performance Toolkit in the current directory ${result}`);
573
573
  }
574
574
  console.log(' Using DCAPT from current directory (non-interactive mode)');
575
- console.log(` ${cwd$1}`);
575
+ console.log(` ${result}`);
576
576
  emptyLine();
577
- result = cwd$1;
578
577
  }
579
578
  // This should not occur, because either we have established the current directory has DCAPT
580
579
  // or we have cloned it into a (new) directory. This is merely a check for if the latter failed.
@@ -1550,6 +1549,7 @@ const runPerformanceTest = async (stage, options, messages) => {
1550
1549
  throw new Error('Performance regression test failed');
1551
1550
  }
1552
1551
  // We have a successful test, so we should store the results in a 'private' subdirectory of APT
1552
+ console.log(` Copying test results to ${runOutputDir}`);
1553
1553
  await move(results.path, runOutputDir, { overwrite: true });
1554
1554
  // Celebrate our success!
1555
1555
  console.log(messages.success);
@@ -1638,6 +1638,7 @@ const runScalabilityTest = async (stage, options) => {
1638
1638
  throw new Error('Scalability benchmark test failed');
1639
1639
  }
1640
1640
  // We have a successful test, so we should store the results in a 'private' subdirectory of APT
1641
+ console.log(` Copying test results to ${runOutputDir}`);
1641
1642
  await move(results.path, runOutputDir, { overwrite: true });
1642
1643
  // Celebrate our success!
1643
1644
  console.log(ScalabilityTestMessages.success);
@@ -3656,6 +3657,17 @@ var jira = [
3656
3657
  "8.8.0-RC02"
3657
3658
  ];
3658
3659
  var confluence = [
3660
+ "9.2.0-beta3-ubuntu-jdk17",
3661
+ "9.2.0-beta3-jdk17",
3662
+ "eap-ubuntu-jdk17",
3663
+ "eap",
3664
+ "9.2.0-beta3",
3665
+ "eap-jdk17",
3666
+ "9.2.0-beta3-jdk21",
3667
+ "9.2.0-beta3-ubuntu-jdk21",
3668
+ "9.2.0-beta3-ubi9",
3669
+ "9.2.0-beta3-ubi9-jdk21",
3670
+ "9.2.0-beta3-ubi9-jdk17",
3659
3671
  "8.9.7-jdk17",
3660
3672
  "8.9.7",
3661
3673
  "8.9.7-ubuntu-jdk17",
@@ -4045,6 +4057,7 @@ var confluence = [
4045
4057
  "7",
4046
4058
  "8.1.0",
4047
4059
  "8.2.2-ubuntu-jdk11",
4060
+ "latest",
4048
4061
  "8.6.0-jdk17",
4049
4062
  "7.19.7",
4050
4063
  "8.6.0-ubuntu-jdk17",
@@ -4056,7 +4069,6 @@ var confluence = [
4056
4069
  "7.19.29",
4057
4070
  "7.19",
4058
4071
  "8.3.4-jdk11",
4059
- "latest",
4060
4072
  "8.3-jdk11",
4061
4073
  "8.1.4-jdk17",
4062
4074
  "8.5.17-ubuntu-jdk11",
@@ -4221,13 +4233,10 @@ var confluence = [
4221
4233
  "8.6.0-ubi9",
4222
4234
  "9.0.2-ubi9-jdk21",
4223
4235
  "8.5.14-ubi9-jdk17",
4224
- "eap-ubuntu-jdk17",
4225
- "eap-jdk17",
4226
4236
  "9.2.0-beta2-ubuntu-jdk21",
4227
4237
  "9.2.0-beta2-jdk21",
4228
4238
  "9.2.0-beta2-jdk17",
4229
4239
  "9.2.0-beta2",
4230
- "eap",
4231
4240
  "9.2.0-beta2-ubuntu-jdk17",
4232
4241
  "9.2.0-beta2-ubi9-jdk17",
4233
4242
  "9.2.0-beta2-ubi9-jdk21",
@@ -11210,4 +11219,4 @@ process.on('SIGINT', () => {
11210
11219
  console.log(`Received term signal, trying to stop gracefully 💪`);
11211
11220
  gracefulExit();
11212
11221
  });
11213
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2NhcGl0YWxpemUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSdW5Gb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2RjYXB0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldENsdXN0ZXJVUkwuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXREdXJhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVzdWx0cy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlc3VsdHNEaXJlY3RvcnkuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2luc3RhbGxBcHAuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZWluZGV4UHJvZ3Jlc3MuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZWluZGV4LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Tm9kZU51bWJlckZvclN0YWdlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvRGF0YWJhc2UuanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9BcHBsaWNhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RDQVBULmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L3BlcmZvcm1hbmNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L3NjYWxhYmlsaXR5LmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9BY3Rpb25IYW5kbGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvY29tbWFuZHMvYXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHZhbHVlKSA9PiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuIiwiZXhwb3J0IGNvbnN0IGdldFJ1bkZvclN0YWdlID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdiYXNlbGluZSc6IHJldHVybiAxO1xuICAgICAgICBjYXNlICdyZWdyZXNzaW9uJzogcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgJ29uZS1ub2RlJzogcmV0dXJuIDM7XG4gICAgICAgIGNhc2UgJ3R3by1ub2RlJzogcmV0dXJuIDQ7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiA1O1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi4vaGVscGVycy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmNvbnN0IHRvTnVtYmVyID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAndGhpcmQnO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAnZm91cnRoJztcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuICdmaWZ0aCc7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbXB0eUxpbmUgPSAoKSA9PiBjb25zb2xlLmxvZygn4oCLJyk7XG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgIF8gICAgICAgICAgX19fX18gICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIFxcXFwgX19ffCB8XyBfX18gICB8ICAgICB8X19fIF9fX3wgfF8gX19fIF9fXyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8IC4nfCAgX3wgLid8ICB8ICAgLS18IC1ffCAgIHwgIF98IC1ffCAgX3wgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fXy98X18sfF98IHxfXyx8ICB8X19fX198X19ffF98X3xffCB8X19ffF98ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgX19fX18gICAgICAgICAgICBfX19fXyAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgIF8gXyAgIF8gXyAgIFxuICB8ICBfICB8X19fIF9fXyAgIHwgIF8gIHxfX18gX19ffCAgX3xfX18gX19fIF9fX19fIF9fXyBfX18gX19fIF9fXyAgIHxfICAgX3xfX18gX19ffCB8IHxffF98IHxfIFxuICB8ICAgICB8IC4gfCAuIHwgIHwgICBfX3wgLV98ICBffCAgX3wgLiB8ICBffCAgICAgfCAuJ3wgICB8ICBffCAtX3wgICAgfCB8IHwgLiB8IC4gfCB8ICdffCB8ICBffFxuICB8X198X198ICBffCAgX3wgIHxfX3wgIHxfX198X3wgfF98IHxfX198X3wgfF98X3xffF9fLHxffF98X19ffF9fX3wgICAgfF98IHxfX198X19ffF98XyxffF98X3wgIFxuICAgICAgICB8X3wgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFdlbGNvbWUgdG8gdGhlIGF1dG9tYXRlZCBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCAoRENBUFQpLlxuICBUaGlzIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggYWxsIHRoZSBzdGVwcyB0byBwcm9kdWNlIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlc3VsdHNcbiAgZm9yIHlvdXIgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwcm92YWwuXG5gXG59O1xuZXhwb3J0IGNvbnN0IGluaXQgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBXZSB3aWxsIG5vdyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBhcyBkb2N1bWVudGVkIGluIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBVc2VyIEd1aWRlIEZvciAke2NhcGl0YWxpemUocHJvZHVjdCl9LlxuICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBwcmlvciB0byBzdGFydGluZyB0aGUgdGVzdCBydW46XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9L1xuXG4gIE9uY2UgeW91IHN0YXJ0IHRoZSB0ZXN0IHJ1biB3ZSB3aWxsIHByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnQgb24gQVdTLiBcbiAgSU1QT1JUQU5UOiBUaGlzIGNhbiBpbmN1ciBjb3N0cy5cbiAgXG4gIFlvdSBjYW4gc3RvcCB0aGlzIHByb2Nlc3MgYXQgYW55IHRpbWUgYnkgZXhpdGluZyB0aGlzIHByb2dyYW0uIEJlIHN1cmUgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZXNldCBcbiAgdGhlIEFXUyBlbnZpcm9ubWVudCBhbmQgcHJldmVudCB1bmV4cGVjdGVkIGNvc3RzLlxuXG4gICQgZGNkeCBhcHQgdGVhcmRvd25cblxuICBZb3UgY2FuIGFsc28gcmVzdW1lL3Jlc3RhcnQgZXZlcnkgcGFydCBvZiB0aGUgdGVzdCBydW4gdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG5cbiAgJCBkY2R4IGFwdCBpbml0IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcHJvdmlzaW9uIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4zIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjUgLS1wcm9kdWN0ICR7cHJvZHVjdH1cblxuICBXZSB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiAgUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiAgTHVjZW5lIEluZGV4IHRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDUuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDYuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDcuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA4LiAgR2VuZXJhdGUgcmVwb3J0c1xuICA5LiAgVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgMTAuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmAgOiBgXG4gIDEuIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNS4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA2LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA3LiBHZW5lcmF0ZSByZXBvcnRzXG4gIDguIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDkuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmB9YCxcbn07XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uaW5nID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCAgXyAgfCBfXyAgfCAgICAgfCAgfCAgfCAgICAgfCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICAgfCAgIHwgfCAgIF9ffFxuICB8ICAgX198ICAgIC18ICB8ICB8ICB8ICB8LSAgIC18X18gICB8LSAgIC18ICB8ICB8IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gIHxfX3wgIHxfX3xfX3xfX19fX3xcXFxcX19fL3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbi5cblxuICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBvbiB5b3VyIGRpc2tcbiAgMi4gQVdTIGNyZWRlbnRpYWxzXG4gIDMuIFByb2R1Y3QgbGljZW5zZVxuYCxcbiAgICBhc2tGb3JBV1NDcmVkZW50aWFsczogKHByb2R1Y3QpID0+IGBcbiAgSW4gb3JkZXIgdG8gcHJvdmlzaW9uIHRoZSAke2NhcGl0YWxpemUocHJvZHVjdCl9IGNsdXN0ZXIsIHdlIG5lZWQgQWRtaW5pc3RyYXRvciBjcmVkZW50aWFscyBmb3IgQVdTLlxuICBQbGVhc2UgcmVmZXIgdG8gdGhlIERDQVBUIGRvY3VtZW50YXRpb24gdG8gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgdGhlIEFXUyBhY2Nlc3Mga2V5czpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vI3NldHVwLSR7cHJvZHVjdH0tZGF0YS1jZW50ZXItZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQtb24tazhzLVxuYCxcbiAgICBhc2tGb3JFbnZpcm9ubWVudDogYFxuICBXaGVuIHByb3Zpc2lvbmluZyB0aGUgY2x1c3Rlciwgd2UgbmVlZCBhIHVuaXF1ZSBlbnZpcm9ubWVudCBuYW1lLlxuICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBjbHVzdGVycyAoaS5lLiBmb3IgZGlmZmVyZW50IGhvc3QgcHJvZHVjdHMpIGFuZCB0byBpZGVudGlmeSB3aGljaCBjbHVzdGVyIHRvIHVzZSBkdXJpbmcgdGVzdGluZyAmIHRlYXJkb3duLlxuYCxcbiAgICBhc2tGb3JMaWNlbnNlOiBgXG4gIFRoZSBob3N0IHByb2R1Y3QgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG4gIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSA3MmggZGV2ZWxvcGVyIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG4gIHlvdSBjYW4gZ2VuZXJhdGUgYW4gZXZhbHVhdGlvbiBsaWNlbnNlIGZyb20gbXkuYXRsYXNzaWFuLmNvbSBvciBhc2sgQXRsYXNzaWFuIE1hcmtldHBsYWNlIERldmVsb3BlciBTdXBwb3J0IGZvciBhIHRlc3QgbGljZW5zZS5cbmAsXG4gICAgcmVhZHk6IGBcbiAgV2UgaGF2ZSBub3cgZ2F0aGVyZWQgYWxsIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwcm92aXNpb24gdGhlIGNsdXN0ZXIuXG5cbiAgISEgSU1QT1JUQU5UICEhXG4gIFxuICBXZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuICBQbGVhc2Ugbm90ZSB0aGF0IHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQgd2lsbCBpbmN1ciBBV1MgdXNhZ2UgY29zdHMuXG5gLFxuICAgIGF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkOiAn4pyUIEFXUyBjcmVkZW50aWFscyB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgdGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZDogYOKclCBUZXJyYWZvcm0gY29uZmlndXJhdGlvbiB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnNgXG59O1xuZXhwb3J0IGNvbnN0IFJ1bjEgPSB7XG4gICAgaGVhZGVyOiAoKSA9PiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyAgIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfCAgXG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgICBffCB8XyBcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX19ffFxuXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgVGhpcyB3aWxsIHByb2R1Y2UgdGhlIHBlcmZvcm1hbmNlIGJhc2VsaW5lIHJlc3VsdHMuXG5cbiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBiYXNlbGluZSB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICBzdGFydFBlcmZvcm1hbmNlVGVzdDogYFxuV2Ugd2lsbCBub3cgc3RhcnQgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gdGVzdFxuYCxcbiAgICBzdWNjZXNzOiBgXG7inJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuYCxcbiAgICBmYWlsdXJlOiAoY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFJ1bjIgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHxfICB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHwgIF98XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIFRoaXMgd2lsbCBhbGxvdyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVwb3J0LlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIEluIGFkZGl0aW9uLCBhIEx1Y2VuZSBJbmRleCBUaW1pbmcgVGVzdCBpcyBhbHNvIHBhcnQgb2YgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdHMuYCA6ICcnfVxuICBUaGUgc2Vjb25kIHJ1biBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIEJlbmNobWFyayB0aGUgcmUtaW5kZXggdGltZSB3aXRoIHlvdXIgYXBwIGluc3RhbGxlZFxuICAzLiBQZXJmb3JtYW5jZSByZXN1bHRzIGdlbmVyYXRpb24gd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuYCA6IGBcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMi4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmB9XG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICBzdGFydEx1Y2VuZUluZGV4aW5nOiBgXG4gIE5vdyB0aGF0IHRoZSBhcHAgaXMgaW5zdGFsbGVkLCB3ZSBjYW4gc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCB0aW1pbmcgdGVzdFxuICBPbmNlIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCBhIGJyb3dzZXIgd2luZG93IGlzIG9wZW5lZCB0byBjYXB0dXJlIHRoZSB0ZXN0IHJlc3VsdHMuIFxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN0YXJ0UGVyZm9ybWFuY2VUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG4gIOKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRTY2FsYWJpbGl0eVRlc3Q6IGBcbiAgUmVhZHkgdG8gc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuXG4gIFVuZm9ydHVuYXRlbHksIHRoZSB0ZXN0IHJ1biB3YXMgZmluaXNoZWQgdW5zdWNjZXNmdWwuIFxuICBQbGVhc2UgcmV2aWV3IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbiBpZiByZXF1aXJlZC5cbmA7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gb3V0cHV0ICs9IGAgICR7a2V5fTogJHt2YWx1ZX1cXG5gKTtcbiAgICAgICAgb3V0cHV0ICs9IGBcbiAgRnVsbCByZXBvcnQgY2FuIGJlIGZvdW5kIGhlcmU6XG4gICR7am9pbihyZXN1bHRzQmFzZURpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKX1cblxuICBZb3UgY2FuIHJlc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9IC0tcHJvZHVjdCAke3Byb2R1Y3R9IC0tY3dkICR7Y3dkfSAtLWVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XG5gO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHlSZXBvcnRNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX18gICAgX19fX18gX19fX18gX19fX18gX18gICAgX19fX18gX19fX18gX18gX18gXG4gIHwgICBfX3wgICAgIHwgIF8gIHwgIHwgIHwgIF8gIHwgX18gIHwgICAgIHwgIHwgIHwgICAgIHxfICAgX3wgIHwgIHxcbiAgfF9fICAgfCAgIC0tfCAgICAgfCAgfF9ffCAgICAgfCBfXyAtfC0gICAtfCAgfF9ffC0gICAtfCB8IHwgfF8gICBffFxuICB8X19fX198X19fX198X198X198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198IHxffCAgIHxffCAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCBfXyAgfCAgIF9ffCAgXyAgfCAgICAgfCBfXyAgfF8gICBffCAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8ICAgIC18ICAgX198ICAgX198ICB8ICB8ICAgIC18IHwgfCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICBcbmBcbn07XG5leHBvcnQgY29uc3QgVGVhcmRvd24gPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX18gIF9fX19fIF8gXyBfIF9fX19fIFxuICB8XyAgIF98ICAgX198ICBfICB8IF9fICB8ICAgIFxcXFx8ICAgICB8IHwgfCB8ICAgfCB8XG4gICAgfCB8IHwgICBfX3wgICAgIHwgICAgLXwgIHwgIHwgIHwgIHwgfCB8IHwgfCB8IHxcbiAgICB8X3wgfF9fX19ffF9ffF9ffF9ffF9ffF9fX18vfF9fX19ffF9fX19ffF98X19ffFxuXG4gIFdlIHdpbGwgbm93IHRlcm1pbmF0ZSB0aGUgY2x1c3RlciB1c2VkIGluIHRoZSBEYXRhIENlbnRlciBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSB0ZXN0aW5nLlxuYFxufTtcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGluc3RhbGwgPSBhc3luYyAoY3dkKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFxuICBTdGFydCBwcm92aXNpb25pbmcgQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uXG4gIFVzaW5nIERDQVBUIGNvbmZpZ3VyYXRpb24gZnJvbSAke2N3ZH1cbmApO1xuICAgIGNvbnN0IGJhc2VEaXIgPSBqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cycpO1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihiYXNlRGlyLCAnb3V0cHV0cy5qc29uJyksICcjIHRlcnJhZm9ybSBvdXRwdXQnLCAndXRmLTgnKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICctaXQnLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vZGNhcHQudGZ2YXJzOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vY29uZi50ZnZhcnNgLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vZGNhcHQtc25hcHNob3RzLmpzb246L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9kY2FwdC1zbmFwc2hvdHMuanNvbmAsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9sb2dzOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vbG9nc2AsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9vdXRwdXRzLmpzb246L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9vdXRwdXRzLmpzb25gLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnLi9pbnN0YWxsLnNoJywgJy1jJywgJ2NvbmYudGZ2YXJzJ1xuICAgICAgICBdLCB7IGN3ZDogYmFzZURpciwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcbuKclCBGaW5pc2hlZCBwcm92aXNpb25pbmcgQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uYCk7XG59O1xuZXhwb3J0IGNvbnN0IHJ1blRlc3QgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICcuL2FwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgICAgICAgICAnLWUnLCBgUkVHSU9OPXVzLWVhc3QtMmAsXG4gICAgICAgICAgICAnLWUnLCBgRU5WSVJPTk1FTlRfTkFNRT0ke2Vudmlyb25tZW50fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvYnp0X29uX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2J6dF9vbl9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdienRfb25fcG9kLnNoJywgYCR7cHJvZHVjdH0ueW1sYFxuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCByZWdyZXNzaW9uUmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuMURpciwgcnVuMkRpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4xRGlyfTovcmVzdWx0cy9ydW4xYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjJEaXJ9Oi9yZXN1bHRzL3J1bjJgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbi9kY2FwdCcsXG4gICAgICAgICAgICAnY3N2X2NoYXJ0X2dlbmVyYXRvci5weScsICdwZXJmb3JtYW5jZV9wcm9maWxlLnltbCdcbiAgICAgICAgXSwgeyBjd2QsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGdlbmVyYXRpbmcgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuM0RpciwgcnVuNERpciwgcnVuNURpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4zRGlyfTovcmVzdWx0cy9ydW4zYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjREaXJ9Oi9yZXN1bHRzL3J1bjRgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuNURpcn06L3Jlc3VsdHMvcnVuNWAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3NjYWxlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgU2NhbGFiaWxpdHkgQmVuY2htYXJrIFJlcG9ydGApO1xufTtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdGUgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCkgPT4ge1xuICAgIGNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy0td29ya2RpcicsICcvL2RhdGEtY2VudGVyLXRlcnJhZm9ybScsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS90ZXJtaW5hdGVfY2x1c3Rlci5weTovZGF0YS1jZW50ZXItdGVycmFmb3JtL3Rlcm1pbmF0ZV9jbHVzdGVyLnB5YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ3Rlcm1pbmF0ZV9jbHVzdGVyLnB5JywgJy0tY2x1c3Rlcl9uYW1lJywgYGF0bGFzLSR7ZW52aXJvbm1lbnR9LWNsdXN0ZXJgLCAnLS1hd3NfcmVnaW9uJywgJ3VzLWVhc3QtMidcbiAgICAgICAgXSwgeyBjd2Q6IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIHRlcm1pbmF0aW5nIHRoZSBEQyBjbHVzdGVyIG9uIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCBhcyBwd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBzaW1wbGVHaXQgZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QXB0RGljdG9yeSA9IGFzeW5jIChjd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgZm9yY2UpID0+IHtcbiAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IHJlc3VsdCA9IGN3ZC5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgID8gY3dkLnJlcGxhY2UoJ34vJywgaG9tZWRpcigpKVxuICAgICAgICA6IGN3ZC5zdGFydHNXaXRoKCcuLycpXG4gICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgOiBjd2QgPT09ICcuJ1xuICAgICAgICAgICAgICAgID8gcHdkKClcbiAgICAgICAgICAgICAgICA6IGN3ZDtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBxdWVzdGlvbnMgZmlyc3RcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgQVBUIGRpcmVjdG9yeSwgd2Ugd2lsbCBiZSB1c2luZyB0aGUgY3VycmVudCBkaXJlY3RvcnkuLi5cbiAgICAgICAgbGV0IHVzZUN1cnJlbnREaXJlY3RvcnkgPSBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZTtcbiAgICAgICAgLy8gLi4udW5sZXNzIHRvbGQgb3RoZXJ3aXNlXG4gICAgICAgIGlmIChpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgV2UndmUgZm91bmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5OlxuICAke2N3ZH1cbmApO1xuICAgICAgICAgICAgdXNlQ3VycmVudERpcmVjdG9yeSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEbyB5b3Ugd2lzaCB0byB1c2UgdGhpcyBkaXJlY3Rvcnk/YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBnb2luZyB0byB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBhc2sgZm9yIHRoZSBhbHRlcm5hdGl2ZVxuICAgICAgICBsZXQgZGlyZWN0b3J5ID0gY3dkO1xuICAgICAgICBpZiAoIXVzZUN1cnJlbnREaXJlY3RvcnkpIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0IGlzIGxvY2F0ZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN3ZCxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNsYXRlIGNvbW1vbiByZWxhdGl2ZSBwYXRocyB0byBhYnNvbHV0ZSBwYXRoc1xuICAgICAgICBkaXJlY3RvcnkgPSBkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnfi8nKVxuICAgICAgICAgICAgPyBkaXJlY3RvcnkucmVwbGFjZSgnfi8nLCBob21lZGlyKCkgKyAnLycpXG4gICAgICAgICAgICA6IGRpcmVjdG9yeS5zdGFydHNXaXRoKCcuLycpXG4gICAgICAgICAgICAgICAgPyBkaXJlY3RvcnkucmVwbGFjZSgnLi8nLCBwd2QoKSArICcvJylcbiAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeSA9PT0gJy4nXG4gICAgICAgICAgICAgICAgICAgID8gcHdkKClcbiAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rvcnk7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm92aWRlZCBhbHRlcm5hdGl2ZSBpcyBhIERDQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0RpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhyZXNvbHZlKGpvaW4oZGlyZWN0b3J5LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKSk7XG4gICAgICAgIGlmICghaXNEaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCBhc2sgaWYgd2UgbmVlZCB0byBjbG9uZSBpdCBmcm9tIEdpdGh1YlxuICAgICAgICAgICAgY29uc3QgbXVzdENsb25lQVBUID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBkaXJlY3RvcnkgZWl0aGVyIGRvZXNuJ3QgZXhpc3QsIG9yIGl0IGRvZXNuJ3QgY29udGFpbiB0aGUgQXBwIFBlZm9ybWFuY2UgVG9vbGtpdC4gRG8geW91IHdhbnQgdG8gY2xvbmUgRENBUFQgZnJvbSBzb3VyY2U/YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbXVzdCBjbG9uZSBpdCBmcm9tIEdpdGh1Yiwgd2Ugc2hvdWxkIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBpZiAobXVzdENsb25lQVBUKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2ltcGxlR2l0KCkuY2xvbmUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQuZ2l0JywgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG5lZWRzIHRvIGJlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIChmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nKVxuICAgICAgICBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0RlZmF1bHRDb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBjb25maXJtIHRoYXQgdGhlIGNob3NlbiBkaXJlY3RvcnkgaXMgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgRENBUFQgKG1hc3RlciBicmFuY2gpJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIG1hc3RlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseS4uLlxuICAgICAgICAgICAgY29uc3QgaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBoYXMgYSBEQ0FQVCBpbnN0YWxsYXRpb24gd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gLi4uYnV0IGFsc28sIE5vIGlzIG5vdCBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmICghaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGhhdmUgYXBwLXNwZWNpZmljIGFjdGlvbnMgaW4gb3JkZXIgdG8gY29udGludWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIHJlc3VsdCB0byB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5XG4gICAgICAgIHJlc3VsdCA9IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB3ZSB3aWxsIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgfVxuICAgIGVsc2UgaWYgKG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY3dkLmVuZHNXaXRoKCcuZGNkeC9kY2FwdCcpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjd2R9YCk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIHJldHVybiBjd2Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdHMgd2UgY2FuIHVzZSBpdFxuICAgICAgICAvLyBPdGhlcndpc2UgdXNlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBlbnN1cmUgYSBmcmVzaCBub24tcGVyc2lzdGVudCBjaGVja291dFxuICAgICAgICByZXN1bHQgPSAhZXhpc3RzU3luYyhjd2QpXG4gICAgICAgICAgICA/IGN3ZFxuICAgICAgICAgICAgOiBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2RjYXB0Jyk7XG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciBvZiB0aGUgY2hvc2VuIGRpcmVjdG9yeVxuICAgICAgICBjb25zb2xlLmxvZygnICBJbnN0YWxsaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBEQ0FQVCBmcm9tIHNvdXJjZSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBybVN5bmMocmVzdWx0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHJpZXZlIERDQVBUIGZyb20gZ2l0aHViXG4gICAgICAgIGF3YWl0IHNpbXBsZUdpdCgpLmNsb25lKCdodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0LmdpdCcsIHJlc3VsdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfinJQgRmluaXNoZWQgaW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIGFwcCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBtYWtlIHN1cmUgdGhhdCBpdCBleGlzdHNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIHdlIGNhbm5vdCBjb250aW51ZVxuICAgICAgICBpZiAoIWlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAke2N3ZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBEQ0FQVCBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5IChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjd2R9YCk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICByZXN1bHQgPSBjd2Q7XG4gICAgfVxuICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBvY2N1ciwgYmVjYXVzZSBlaXRoZXIgd2UgaGF2ZSBlc3RhYmxpc2hlZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaGFzIERDQVBUXG4gICAgLy8gb3Igd2UgaGF2ZSBjbG9uZWQgaXQgaW50byBhIChuZXcpIGRpcmVjdG9yeS4gVGhpcyBpcyBtZXJlbHkgYSBjaGVjayBmb3IgaWYgdGhlIGxhdHRlciBmYWlsZWQuXG4gICAgaWYgKCFleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICR7cmVzdWx0fWApO1xuICAgIH1cbiAgICAvLyBTb21lIGFkZGl0aW9uYWwgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHdlIGFyZSBpbiBhIHZhbGlkIERDQVBUIGRpcmVjdG9yeVxuICAgIGNvbnN0IGhhc0VudkZpbGUgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2F3c19lbnZzJykpO1xuICAgIGNvbnN0IGhhc1NuYXBzaG90SlNPTiA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQtc25hcHNob3RzLmpzb24nKSk7XG4gICAgY29uc3QgaGFzVGVycmFmb3JtVmFyaWFibGVzID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgaWYgKCFoYXNFbnZGaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdhd3NfZW5zJyBmaWxlLiBFeHBlY3RlZCB0byBmaW5kIGl0IGluICR7am9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKX1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWhhc1NuYXBzaG90SlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnZGNhcHQtc25hcHNob3RzLmpzb24nIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzVGVycmFmb3JtVmFyaWFibGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC50ZnZhcnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydCA9IChiYXNlRGlyLCB0eXBlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlcG9ydCBzdW1tYXJ5IHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBiYXNlRGlyIGFscmVhZHkgY29udGFpbnMgdGhlIHJlcG9ydFxuICAgIGNvbnN0IHN1bW1hcnlGaWxlTmFtZSA9IHR5cGUgPT09ICdwZXJmb3JtYW5jZScgPyAncGVyZm9ybWFuY2VfcHJvZmlsZV9zdW1tYXJ5LmxvZycgOiAnc2NhbGVfcHJvZmlsZV9zdW1tYXJ5LmxvZyc7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgbGV0IHJlc3VsdHNEaXIgPSBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgc3VtbWFyeUZpbGVOYW1lKSkgPyBiYXNlRGlyIDogbnVsbDtcbiAgICBpZiAoIXJlc3VsdHNEaXIpIHtcbiAgICAgICAgLy8gTGV0J3MgZ28gZmluZCBvdXIgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHJlcG9ydCBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkgJiYgZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsIGl0ZW0sIHN1bW1hcnlGaWxlTmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgaXQhXG4gICAgICAgICAgICAgICAgcmVzdWx0c0RpciA9IGpvaW4oYmFzZURpciwgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgcmVwb3J0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcG9ydHMgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSAoJHtiYXNlRGlyfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNEaXI7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRSZXBvcnREaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVwb3J0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsICdyZXBvcnRzJyk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuICAgIGlmIChleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IHJlYWRkaXJTeW5jKHBhdGgpLmxlbmd0aCA8PSAwO1xuICAgICAgICBpZiAoIWlzRW1wdHkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgbWFrZSBzdXJlIHRvIGFzayBuaWNlbHkgaWYgd2UgY2FuIHJlbW92ZSB0aGUgcmVwb3J0c1xuICAgICAgICAgICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhlcmUgYXJlIHN0aWxsIHByZXZpb3VzIHJlcG9ydHMgaW4gdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlcmUgYXJlIHN0aWxsIHJlcG9ydHMgZnJvbSBwcmV2aW91cyB0ZXN0IHJ1bnMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5OlxuICAke3BhdGh9XG5gKTtcbiAgICAgICAgICAgICAgICAvLyBBc2sgZm9yIGNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgd2lsbCBiZSByZW1vdmVkXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJcyBpdCBPSyBpZiB3ZSByZW1vdmUgYWxsIHByZXZpb3VzIHJlcG9ydHM/JyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byByZW1vdmUgdGhlbSwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgICAgICBpZiAoIWNhblJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSByZXBvcnQgY2FuIG9ubHkgYmUgZ2VuZXJhdGVkIGlmIGFsbCBwcmV2aW91cyByZXBvcnRzIGhhdmUgYmVlbiByZW1vdmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmV2aW91cyByZXBvcnRzXG4gICAgICAgICAgICBybVN5bmMocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIHJldHVybiBwYXRoO1xufTtcbiIsImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgUHJlc3NUb0NvbnRpbnVlUHJvbXB0IGZyb20gJ2lucXVpcmVyLXByZXNzLXRvLWNvbnRpbnVlJztcbmlucXVpcmVyLnJlZ2lzdGVyUHJvbXB0KCdwcmVzcy10by1jb250aW51ZScsIFByZXNzVG9Db250aW51ZVByb21wdCk7XG5leHBvcnQgY29uc3Qgd2FpdEZvclVzZXJJbnB1dCA9IGFzeW5jIChtZXNzYWdlLCBmb3JjZSkgPT4ge1xuICAgIGNvbnN0IHsga2V5IH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgdHlwZTogJ3ByZXNzLXRvLWNvbnRpbnVlJyxcbiAgICAgICAgYW55S2V5OiB0cnVlLFxuICAgICAgICBwcmVzc1RvQ29udGludWVNZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB3aGVuOiAhZm9yY2VcbiAgICB9KTtcbiAgICByZXR1cm4ga2V5IHx8IHsgdmFsdWU6IHVuZGVmaW5lZCB9O1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIFBlcmZvcm1hbmNlUmVwb3J0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyByZWdyZXNzaW9uUmVwb3J0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UmVwb3J0IH0gZnJvbSAnLi9nZXRSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0UmVwb3J0RGlyZWN0b3J5IH0gZnJvbSAnLi9nZXRSZXBvcnREaXJlY3RvcnknO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcy5oZWFkZXIpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHBlcmZvcm1hbmNlIHByb2ZpbGUgcmVwb3J0IGNvbmZpZ3VyYXRpb24gWUFNTFxuICAgICAgICBjb25zdCB5bWxGaWxlUGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3JlcG9ydHNfZ2VuZXJhdGlvbicsICdwZXJmb3JtYW5jZV9wcm9maWxlLnltbCcpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyh5bWxGaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIHR1cm4gaXQgaW50byBKU09OXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwYXJzZShjb250ZW50cyk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIGEgdmFsaWQgSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcGVyZm9ybWFuY2UgYmFzZWxpbmUgYW5kIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgZGlyZWN0b3JpZXNcbiAgICAgICAgICAgIC8vIHRvIHRoZSBwZXJmb3JtYW5jZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ucnVucyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRob3V0IGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdiYXNlbGluZScsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjEnXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnd2l0aCBhcHAnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnZXhwZXJpbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjInXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGUgcGVyZm9ybWFuY2VfcHJvZmlsZS55bWwgZmlsZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246XG5cbiR7b3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBwZXJmb3JtYW5jZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgcmVncmVzc2lvblJlcG9ydChjd2QsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW4xJyksIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW4yJykpO1xuICAgIC8vIEdldCB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlcG9ydERpciA9IGdldFJlcG9ydChyZXBvcnRCYXNlRGlyLCAncGVyZm9ybWFuY2UnKTtcbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVwb3J0RGlyLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncGVyZm9ybWFuY2VfcHJvZmlsZScpLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgc2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGNvbmZpZ3VyYXRpb24gWUFNTFxuICAgICAgICBjb25zdCB5bWxGaWxlUGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3JlcG9ydHNfZ2VuZXJhdGlvbicsICdzY2FsZV9wcm9maWxlLnltbCcpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyh5bWxGaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIHR1cm4gaXQgaW50byBKU09OXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwYXJzZShjb250ZW50cyk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIGEgdmFsaWQgSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgc2NhbGFiaWxpdHkgdGVzdCBvdXRwdXQgZGlyZWN0b3JpZXMgdG8gdGhlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzEgTm9kZScsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdiYXNlbGluZScsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjMnXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnMiBOb2RlcycsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuNCdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICc0IE5vZGVzJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW41J1xuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgLy8gVHVybiB0aGUgY29uZmlndXJhdGlvbiBiYWNrIGludG8gWUFNTFxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gc3RyaW5naWZ5KGNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIHNjYWxlX3Byb2ZpbGUueW1sIGZpbGUgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOlxuXG4ke291dHB1dH1cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7eW1sRmlsZVBhdGh9XG5gKTtcbiAgICAgICAgICAgIC8vIEdpdmUgdGhlIHVzZXIgYSBtb21lbnQgdG8gcHJvY2VzcyB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgICAgICAvLyBXcml0ZSB0aGUgYWRqdXN0ZWQgc2NhbGFiaWxpdHkgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoeW1sRmlsZVBhdGgsIG91dHB1dCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nLiBBYm9ydCBhYm9ydCBhYm9ydCFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHNjYWxhYmlsaXR5IHJlcG9ydCBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXBvcnRCYXNlRGlyID0gYXdhaXQgZ2V0UmVwb3J0RGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIGFjdHVhbCByZXBvcnRcbiAgICBhd2FpdCBzY2FsYWJpbGl0eVJlcG9ydChjd2QsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW4zJyksIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW40JyksIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW41JykpO1xuICAgIC8vIEdldCB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlcG9ydERpciA9IGdldFJlcG9ydChyZXBvcnRCYXNlRGlyLCAnc2NhbGFiaWxpdHknKTtcbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVwb3J0RGlyLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAnc2NhbGVfcHJvZmlsZScpLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn07XG4iLCJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldE91dHB1dERpcmVjdG9yeSA9IChjd2QsIHRpbWVzdGFtcCkgPT4ge1xuICAgIC8vIENyZWF0ZSB0aGUgdGVzdCBydW4gSUQgKHVzZWQgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkpXG4gICAgY29uc3QgcnVuSWQgPSB0aW1lc3RhbXAgfHwgZm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkLUhILW1tJyk7XG4gICAgLy8gRWl0aGVyIHVzZSB0aGUgcHJvdmlkZWQgb3V0cHV0IGRpcmVjdG9yeSwgb3IgZGVmYXVsdCB0byB0aGUgaG9tZSBkaXJlY3RvcnlcbiAgICBjb25zdCBiYXNlRGlyID0gY3dkIHx8IGpvaW4oaG9tZWRpcigpLCAnLmRjZHgnLCAnYXB0Jyk7XG4gICAgLy8gUmV0dXJuIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgdGVzdCByZXN1bHRzXG4gICAgcmV0dXJuIGpvaW4oYmFzZURpciwgcnVuSWQpO1xufTtcbiIsImltcG9ydCB7IHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmV4cG9ydCBjb25zdCBnZXRQcm9kdWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBzZWxlY3Qoe1xuICAgICAgICBtZXNzYWdlOiBgUGxlYXNlIGNob29zZSB0aGUgcHJvZHVjdCBmb3Igd2hpY2ggeW91IHdpc2ggdG8gcnVuIERDQVBUYCxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnSmlyYScsIHZhbHVlOiAnamlyYScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0NvbmZsdWVuY2UnLCB2YWx1ZTogJ2NvbmZsdWVuY2UnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCYW1ib28nLCB2YWx1ZTogJ2JhbWJvbycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JpdGJ1Y2tldCcsIHZhbHVlOiAnYml0YnVja2V0JyB9XG4gICAgICAgIF1cbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBwYXNzd29yZCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBnZXRBV1NDcmVkZW50aWFscyA9IGFzeW5jIChwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIC8vIFRyeSBnZXR0aW5nIHRoZSBBV1MgY3JlZGVudGlhbHMgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBjb25zdCB7IEFXU19BQ0NFU1NfS0VZX0lELCBBV1NfU0VDUkVUX0FDQ0VTU19LRVkgfSA9IHByb2Nlc3MuZW52O1xuICAgIC8vIElmIHRoZXkgZXhpc3RzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgcmV0dXJuIHRoZW0gaW1tZWRpYXRlbHlcbiAgICBpZiAoQVdTX0FDQ0VTU19LRVlfSUQgJiYgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZKSB7XG4gICAgICAgIHJldHVybiBbQVdTX0FDQ0VTU19LRVlfSUQsIEFXU19TRUNSRVRfQUNDRVNTX0tFWV07XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBub3QgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHNob3VsZCBhc2sgZm9yIHRoZW1cbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgIC8vIFNob3cgYSBtZXNzYWdlIGFza2luZyBuaWNlbHlcbiAgICAgICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmFza0ZvckFXU0NyZWRlbnRpYWxzKHByb2R1Y3QpKTtcbiAgICAgICAgY29uc3QgYXdzX2FjY2Vzc19rZXlfaWQgPSBhd2FpdCBwYXNzd29yZCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgQVdTIEFjY2VzcyBLZXkgSURgLFxuICAgICAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGggPiAwXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkgPSBhd2FpdCBwYXNzd29yZCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgQVdTIFNlY3JldCBBY2Nlc3MgS2V5YCxcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoaW5wdXQpID0+IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQubGVuZ3RoID4gMFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBhbmQgdGhlIGNyZWRlbnRpYWxzIGhhdmUgbm90IGJlZW4gZm91bmQsIHdlIHNob3VsZCB0aHJvdyBhbiBlcnJvclxuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFXUyBjcmVkZW50aWFscyBjb3VsZCBub3QgYmUgZm91bmQuIFBsZWFzZSBwcm92aWRlIHRoZSAnQVdTX0FDQ0VTU19LRVlfSUQnIGFuZCAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyBlbnZpcm9ubWVudCB2YXJpYWJsZXNgKTtcbn07XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBnZXRFbnZpcm9ubWVudE5hbWUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmFza0ZvckVudmlyb25tZW50KTtcbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgRW52aXJvbm1lbnQgbmFtZWAsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IHRpbWVib21iID0ge1xuICAgICdqaXJhJzogJ0FBQUNCQTBPREFvUGVOcDlrbDF2MmpBVWh1L3pLNDYwT3lRSFNMdVZJa1VhVGJ3TlZCS1VoRW5idWdzVER1QTJzU1BiZ2JGZlB4T0MxaSs0eUVYTzUrdm5QUit5R2lHU1cvQ3VvWGM3dkJvTXZUNEVOQU92NS9XY3RVSVVHMWxWcU54N25xUFFTSmZjY0NsOEdtVTBtU1hqbERwUlhTNVF4YXU1UnFWOTBuY0NLUXpMVGNSSzlFdTk0NElwL2NRL00xTXdyVGtUYmk1TFoxYXJmTU0waHN5ZzcvWDZBOUx2RTg5ejJqM1p2c0ptUUJCUHB6UUp4cVA3VTRyK3FiamFOMzJ6RysvYmFSMmRNbDZjMzVlaTJxSWFoLzRkdmFIa092enBrVS94NUlaOHZib2RPSTljTWJkU2Nsbm54ajM4RUMxWFpzY1V1bll5MzZKdlZJM094R1ptYlpYZHp3SVU1bFZKV2k5MHJualZRR29pNzBCODczR05oUE9RTzUxT0ZHZmtTNXlRV1JLSDh5QWJ4eEdacDlRbS9FQ2hwYkdFeFI3TUJxR2RBbFRrY29rSzdNTWVNVGZ3YTJOTTlURHNkdGZTZlFHbld4dzdDQjQ3ZnJzUVNoRFN3Skpyby9paU5tZ25jdzFHUWw1ckkwdHJ0ZXRZNHNLZ1lDSi9ZNHFWRlNSMGxOR1EzUDA0YUR4clRLdldPak1YVDBMdXhDVTMzdHhhU2lQZmZ1UmpyM2ZzTy9tQzZvZy9WbXNtdUdZTjBJajkzVEZZY1ZYdW5RYWFEYjQrd0piRmQ3dmcwT0k1SWY1M05FTnRvSzJBbFZRd0dTY2pTRnQ1bHJqZFd5bXU4V0VJZ1N3dHBweXpBc0xneFJrOFA1aEc5UE1BM2JLaVBzcGRzVUxqSlJ3WDd1a2Y1L05YN1RBdEFoVUFoUVNIejlEZ3ljT1g3d2N3RVJNSmIzVExHYjRDRkdrQi94VVdTUkszQlpMclBGOVJuNlptclVxSlgwMm9jJyxcbiAgICAnY29uZmx1ZW5jZSc6ICdBQUFDemcwT0RBb1BlTnA5Vk85djJqQVEvWjYvd3RLK0lZV0dzRUtIRkdtUW1KYXUvR2dJbTlpWUpoTU9ZcHJZa2UxQTRhK2ZTY2hHS3RxUFB2dmV2WHYzenAvNmdxTEhMRWIySGJLc1R2TnpwOWxDOThNQTJaYmROS1lnZGlBR250UERRMno2ODhIY2RIL2FNN1A1bzJrWlR6UUVKaUU0cERBaUNUZ0JuZ2FEMGIwUkNyNWYxUzl1SGZjVVdYU1FCenVJZVFyQ0NEbGIxMG1vNkE0Y0pUTFFTVmxJbHpGVWdncEk4aWNrTWJBVkViSSt5cElsaVBHNlI1SWw1ejRrWEVGM0EweEpwMUd5d2E4cEZRZVBLSEFtRGR0NitBOWNKVlFFSzV5V21oTVY4SEdaTFJXa3dyRjhQWk1ncEdQZkdoN0lVTkJVVWM2Y0FLUkNjVkVZcmJsQWFaeHRLRU9yc3FqOFYvVVM4NXp4WGQrZlVHd0Q3MGlja1J3eWY3QVJBQ3ppcVVZbys4SXJtdC9qVVlEOWlUK1lZbU5JS0ZQQUNBdXZ5SElhUUVVU0hZZ3owRzhyb3JnQzhycDVxdmFFWlZwM3B0MHU4c3ZlM1RpVENzU0lyMEE2bGxHcjFWd2Zkd1BzbWIyNVBqamJWd3EyRWNaY202blM2REtYK0kzaVQxeVAvQ3k0MlRCZTRGQUswV2haVnR1NmF6WWJaZVpsQjBVMndycG5rUW9xcTQwVXlzdDY3UnFCOXpVOGs2NG9sWWVxS25HbU5Deldpc2VPVW9Ld2hMTG9LMUV4a1pJU1ZnOTVjcjNaTi9ZcWR1ZVNZVzY0OS9tZHJmSkFaT1FNM2IzYjk2RFJ1aFZrMzI2MWtrRnZleHdlNDFVUXRKTjEydTVHejZHY1BUN1BuNzFINzB0NjlDUGNieC9hOXJjajNyRHV3bGs0eHByS0NBNVZOK29KanNhQjJSLzc1c1FmZXpNM0dJeEg1bXlLVDZQTi9RRXJ0RHdnRlFFNkU5VkRDTFVadE44RjMwS28wSzlJcVhUUnViblo4SHBGbFp0ekF5WVVHYi9yeU9PSWNZVldWQ3BCbDVrQ2pVd2xVaHlGMm1ZODBXYW9YeGR6RWhPV2UyWXNOb1JSV1d4TXQ2eFgvaEg2UDV1eEY4YjNyTEpJbHoxTHBRVzk1cFFQdnFmTHEwa213b2hJZUxzMmw5UE16ZlE0OEx2dldUYmZNWTFBWERnOUtKRExDVjJDOUhVTUgrQ2FKZk9mdWRpL3Ywa0lHVnN3TEFJVUVNUTlYNzdncUdCZGZIMEhJekJhVjhOYWRQVUNGQm4rUmlVQTREK0lxVlFwVFRvdUxWWTY2YUNHWDAyMTIxJyxcbiAgICAnYml0YnVja2V0JzogJ0FBQUJtZzBPREFvUGVOcDlVbDF2MHpBVWZjK3ZzTVJiSmFkSnRqR3BVaVMySkpST05PbGFCNFNBQjllOVcweFR1N0p2Q3YzM2VJbURPb1I0dmVmZTQvUGhONTloUjViY2tQaVdSTmV6S0o1RkNaa3ZHVW1pSkE0eXJaQUxMUGtCVXJIWG90RW51NWVCUlc2YjhLTVVvQ3l3OHhINkJWWnMyS0tjZTNUSnBVSlFYQWtvZmgybE9lY2NJVjFkZlJoSkM3ZlJYckp1d0p6QUxQTDAvcUYrcEk5WEdhUHordUdHc3B2YmtkUng4QXdjcjBuUmRPQ25sWG5tU2xxT1VxdjBEbHR1cmVUS2c2dk9pSVpiNko5UG92aWFSbTlwSEhzME05Q2YvUnYxRHYvU1A1bE15b3JSOTlXYXJ0WlZYbWRzVVpXMDNoUU9TSHRDRituMlRMQUI0aGxJb1lUZWdTRkhvMytBUVBLMVFUeCttMDJuenpya28rSlE2TU8wSFM0b0RCZmZRNUpyb2pTU25iUm81TFpEY016U0V0UkVkQmIxQVl3TlJ6c1hmZjBKZ2pDd0xqRy80bUI1Z2lFK0p6aGJGM2VzeU9uOWx4ZjFGMjE0NWE2T1d1MlYvcW1DLzJkVmRvY3RtT3FwdGs1UEdpZCtYSng0MnczTlBQSFdRdUQ5ZlhKYkw4UGt0ZkxoVTJBditOMnJZTVk2dVVFRnBuY1kvQVlDZ2ZGQU1Dd0NGSHprQmxrR0gvdlJkVGVlQlNmVU16VURiNFcyQWhReU04OTNXUGcyUThvUUFZUmRCU3lLZVZVZG9nPT1YMDJqcicsXG4gICAgJ2JhbWJvbyc6ICdBQUFCM3cwT0RBb1BlTnA5VWx0cjJ6QVlmZmV2RU93dG9NUjEwcVlMR0piWVdzbm83R0E3ZzkwZVpQbHJvdFdXakNTbnpYNzlGRjhJWVdrZkRQSjNPZWR3enZjaDJ6ZG9XU3ZrenBGN3Y1amRMcndwQ2tpYUljLzFQT2VSTXhBYXNtTU5FYTNBejJ4bkhUMDRnUUpxdUJRaE5lQjc3dlFHdXpQczNqazVyWElweDVRWmZnRGZxQWFHVXRSVU9hajRhZFgrUGtwR3krVU9oTkUrdm5HRzVsYURhZ3M5TDNtdHVUb09KRjVQa2phNVpvclhKd0VYSEcrcEpRZGFOdlMvY1l0TEF5c0JWRmZ1MTllaHZ4WFBRcjRJSndWMUFHVUxLekluZUJiKzhQQmQvR1dPSDZZZjc1MU5vOWllYXVqbGVZTUhLWWw4KytGYjEzVkdvMUVVWi9oem5PQk5Fb2ZiSUZ2SEVkNm14RGI4MWtRb1VINUVaZytvcDBkRU1GbUFRcldTZjRBWjlITnZUUDFyTVpuc3JMR21wRnB6S3NaTVZwT3kyOERRYmZ3ZW8xQWlJUTBxdURhSzU0MEJpOHcxTWhLeFJodFpXWHZIVGdobit6TFFCdlU0NkVsYTFyTFpjWUVLT0VBcGF6dnZmS1hjZWlTb1lHL2tjVFhoVFVsRkcrWFZiZ0tWTkhBK2dGN0JOOHQzVXVVNXNkcFJ3WFVYR25tbFZWMENDbVJWVTNHOEV2ZjVNS1V3OXZxSUZWMzZ0WDdtb05qZm83Q1BUeGZlblpJSkVyTE1TSWhYMzA5cHZEZDhTVWdLM3NtS01wSnNrblZLQnRyMjZ0NEQrZ2QzQUM1cU1Dd0NGSE9hVFdmRnZMQ0xKUGZ0M3FrdFZvM0ZhZm1aQWhSb2piOUlBeGo4S0VxUERReTBzdG9zMzk0U1FRPT1YMDJtcSdcbn07XG5leHBvcnQgY29uc3QgYXBwM2hvdXIgPSAnQUFBQkNBME9EQW9QZU5wZGowMVB3a0FVUmZmekt5WnhaMUl5VXpBUmtsbFEyNGdSYVFNdEduYVA4VkVtdGpQTmZGVDU5eUpWRnl6ZnVia243OTZVeDBCejZTbWJVTTVuYkR6ajk3UklTeG96SHBNVW5iU3E4OHBvVWFMenRGRVN0VU42TUpaMlRhaVZwdS9ZWTJNNnRJNnNRcnRIbXg4cWQ3NEVaK1RCSXZ5VVUvQW9ZczdqaUUwanprbldReE11aWZBMklCbFViblE3QXVsVmp3TjlBYVU5YXRBU3M2OU8yZE5GVTR3WEpMYzFhT1VHdzl3MzRKd0NUVFpvZTdSUHFVZ2VwMlgwVm0wbjBmTnV0NGdTeGwvSmNuajluRmI2UTV0UC9VZXUzTCswUEhXNGdoWkZtbTJ6WlY1azYvOTVDYlI3WTliWUdvL3pHclYzSXI0alJiRHlDQTZ2dDM0RE84cDNTREFzQWhRbkpqTEQ1azlGcjN1YUl6a1hLZjgzbzV2RGRRSVVlNFhlcXVOQ0MzRCs5aHQ5WlloTlpGS21uaGM9WDAyZGgnO1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyB0aW1lYm9tYiB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEhvc3RMaWNlbnNlID0gKHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIHJldHVybiB0aW1lYm9tYltwcm9kdWN0XTtcbiAgICB9XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmFza0ZvckxpY2Vuc2UpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgZGVmYXVsdDogdGltZWJvbWJbcHJvZHVjdF0sXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VMaW5lc0luRmlsZSA9IChwYXRoLCByZXBsYWNlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudHMuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGxpbmVzLm1hcChyZXBsYWNlcik7XG4gICAgd3JpdGVGaWxlU3luYyhwYXRoLCByZXN1bHQuam9pbignXFxuJyksICd1dGYtOCcpO1xufTtcbiIsImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlcGxhY2VMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVwbGFjZUxpbmVzSW5GaWxlJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gPSAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCwgbGljZW5zZSwgbm9kZXMgPSAxKSA9PiB7XG4gICAgcmVwbGFjZUxpbmVzSW5GaWxlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdlbnZpcm9ubWVudF9uYW1lID0nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBlbnZpcm9ubWVudF9uYW1lID0gXCIke2Vudmlyb25tZW50fVwiYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ3Byb2R1Y3RzID0gJykpIHtcbiAgICAgICAgICAgIHJldHVybiBgcHJvZHVjdHMgPSBbXCIke3Byb2R1Y3R9XCJdYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCR7cHJvZHVjdH1fbGljZW5zZSA9YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtwcm9kdWN0fV9saWNlbnNlID0gXCIke2xpY2Vuc2V9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgJHtwcm9kdWN0fV9yZXBsaWNhX2NvdW50ID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Byb2R1Y3R9X3JlcGxpY2FfY291bnQgPSAke25vZGVzfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAke3Byb2R1Y3R9X2FkZGl0aW9uYWxfanZtX2FyZ3MgPSBgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Byb2R1Y3R9X2FkZGl0aW9uYWxfanZtX2FyZ3MgPSBbXCItRHVwbS5wbHVnaW4udXBsb2FkLmVuYWJsZWQ9dHJ1ZVwiLFwiLURwYXNzd29yZC5jb25maXJtYXRpb24uZGlzYWJsZWQ9dHJ1ZVwiXWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLnRlcnJhZm9ybUNvbmZpZ3VyYXRpb25QZXJzaXN0ZWQpO1xufTtcbiIsImltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgcGVyc2lzdEFXU0NyZWRlbnRpYWxzID0gKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSkgPT4ge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSwgYFxuIyBhd3NfZW52cyBmaWxlIHNob3VsZCBjb250YWluIEFXUyB2YXJpYWJsZXMgbmVlZGVkIGZvciBhdXRob3JpemF0aW9uICh3aXRob3V0IHF1b3RlcylcbkFXU19BQ0NFU1NfS0VZX0lEPSR7YXdzX2FjY2Vzc19rZXlfaWR9XG5BV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHthd3Nfc2VjcmV0X2FjY2Vzc19rZXl9XG5gLnRyaW0oKSwgJ3V0Zi04Jyk7XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkKTtcbn07XG4iLCJpbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldEVudmlyb25tZW50TmFtZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lJztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vaGVscGVycy9nZXRIb3N0TGljZW5zZSc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwcm92aXNpb25DbHVzdGVyID0gYXN5bmMgKG9wdGlvbnMsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikgPT4ge1xuICAgIC8vIFNob3cgdGhlIHByb3Zpc2lvbmluZyB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuaGVhZGVyKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBwcm9wZXIgZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBlbnZpcm9ubWVudCBuYW1lXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBvcHRpb25zLmVudmlyb25tZW50IHx8IGF3YWl0IGdldEVudmlyb25tZW50TmFtZSgpO1xuICAgIC8vIEFzayBmb3IgdGhlIGxpY2Vuc2VcbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgZ2V0SG9zdExpY2Vuc2Uob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBMZXQncyBkbyB0aGlzXG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLnJlYWR5KTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBzdGFydCBwcm92aXNpb25nIHRoZSBBV1MgZW52aXJvbm1lbnQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhkaXJlY3RvcnksIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlza1xuICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbihkaXJlY3RvcnksIGVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QsIGxpY2Vuc2UpO1xuICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICBhd2FpdCBpbnN0YWxsKGRpcmVjdG9yeSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUmV0dXJuIGFsbCB0aGUgcXVlc3Rpb25zIHdlIGFza2VkIHRoZSB1c2VyIGZvciB1c2UgaW4gb3RoZXIgc3RlcHNcbiAgICByZXR1cm4ge1xuICAgICAgICBjd2Q6IGRpcmVjdG9yeSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgIGxpY2Vuc2VcbiAgICB9O1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRDbHVzdGVyVVJMID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCkgPT4ge1xuICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIEt1YmVybmV0ZXMgdXRpbHMgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIG91dHB1dHMuanNvbiBmaWxlIHRoYXQgd2FzIGNyZWF0ZWQgZHVyaW5nIHByb3Zpc2lvbmluZ1xuICAgIGNvbnN0IGhhc091dHB1dHNKU09OID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSk7XG4gICAgaWYgKCFoYXNPdXRwdXRzSlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnb3V0cHV0cy5qc29uJyBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGdlbmVyYXRlZCBhZnRlciBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50LmApO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgY3JlYXRpb24gb3V0cHV0IGRhdGFcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBwcm9kdWN0IGxvYWRiYWxhbmNlciBVUkwgZnJvbSB0aGUgb3V0cHV0IGRhdGFcbiAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmxzID0gb3V0cHV0cz8ucHJvZHVjdF91cmxzPy52YWx1ZTtcbiAgICBpZiAobG9hZGJhbGFuY2VyVXJscykge1xuICAgICAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmwgPSBsb2FkYmFsYW5jZXJVcmxzW3Byb2R1Y3RdO1xuICAgICAgICBpZiAobG9hZGJhbGFuY2VyVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGJhbGFuY2VyVXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgaXQgeWV0LCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSAke3Byb2R1Y3R9IGxvYWQgYmFsYW5jZXIgVVJMLCBhcmUgeW91IHN1cmUgdGhlIHByb2R1Y3Qgd2FzIGNvcnJlY3RseSBwcm92aXNpb25lZD9gKTtcbn07XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmV4cG9ydCBjb25zdCBnZXREdXJhdGlvbiA9IChmb3JjZSkgPT4ge1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICByZXR1cm4gJzQ1bSc7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBIb3cgbG9uZyBzaG91bGQgdGhlIHRlc3QgcnVuP2AsXG4gICAgICAgIGRlZmF1bHQ6ICc0NW0nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCByZWFkTGluZXNJbkZpbGUgPSAocGF0aCwgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KCdcXG4nKTtcbiAgICBsaW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbn07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVhZExpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZWFkTGluZXNJbkZpbGUnO1xuZXhwb3J0IGNvbnN0IGdldFJlc3VsdHMgPSAoYmFzZURpcikgPT4ge1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgdGVzdCByZXN1bHQgZGlyZWN0b3J5XG4gICAgbGV0IHJlc3VsdHNEaXIgPSBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSkgPyBiYXNlRGlyIDogbnVsbDtcbiAgICBpZiAoIXJlc3VsdHNEaXIpIHtcbiAgICAgICAgLy8gTGV0J3MgZ28gZmluZCBvdXIgdGVzdCByZXN1bHQgZGlyZWN0b3J5XG4gICAgICAgIHJlYWRkaXJTeW5jKGJhc2VEaXIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGFyZSBkaXJlY3RvcnksIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xuICAgICAgICAgICAgaWYgKHJlc3VsdHNEaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoam9pbihiYXNlRGlyLCBpdGVtKSk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGEgdGVzdCByZXN1bHQgZGlyZWN0b3J5XG4gICAgICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpICYmIGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBpdGVtLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpKSkge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGZvdW5kIGl0IVxuICAgICAgICAgICAgICAgIHJlc3VsdHNEaXIgPSBqb2luKGJhc2VEaXIsIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBmb3VuZCBhIHRlc3QgZGlyZWN0b3J5LCBhbmQgaWYgbm90IHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIGlmIChyZXN1bHRzRGlyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgdGVzdCByZXN1bHRzIGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgKCR7YmFzZURpcn0pYCk7XG4gICAgfVxuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcmVzdWx0cyA9IHtcbiAgICAgICAgJ3BhdGgnOiByZXN1bHRzRGlyLFxuICAgICAgICAnU3VtbWFyeSBydW4gc3RhdHVzJzogdW5kZWZpbmVkLFxuICAgICAgICAnQXBwbGljYXRpb24gbm9kZXMgY291bnQnOiB1bmRlZmluZWQsXG4gICAgICAgICdGaW5pc2hlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0NvbXBsaWFudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ1N1Y2Nlc3MnOiB1bmRlZmluZWQsXG4gICAgICAgICdIYXMgYXBwLXNwZWNpZmljIGFjdGlvbnMnOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIC8vIExvb3Agb3ZlciB0aGUgcmVzdWx0IHN1bW1hcnkgYW5kIGdldCB0aG9zZSBkYW1uIHRlc3QgcmVzdWx0c1xuICAgIHJlYWRMaW5lc0luRmlsZShqb2luKHJlc3VsdHNEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyksIChsaW5lKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdHMpLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGxpbmUuc3Vic3RyaW5nKGhlYWRlci5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2hlYWRlcl0gPSByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJlYWRkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVzdWx0c0RpcmVjdG9yeSA9IGFzeW5jIChjd2QsIHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSByZXN1bHRzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXN1bHRzJywgcHJvZHVjdCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuICAgIGlmIChleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IHJlYWRkaXJTeW5jKHBhdGgpLmxlbmd0aCA8PSAwO1xuICAgICAgICBpZiAoIWlzRW1wdHkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgbWFrZSBzdXJlIHRvIGFzayBuaWNlbHkgaWYgd2UgY2FuIHJlbW92ZSB0aGUgcmVzdWx0c1xuICAgICAgICAgICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhlcmUgYXJlIHN0aWxsIHByZXZpb3VzIHJlc3VsdHMgaW4gdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlcmUgYXJlIHN0aWxsIHJlc3VsdHMgZnJvbSBwcmV2aW91cyB0ZXN0IHJ1bnMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5OlxuICAke3BhdGh9XG5gKTtcbiAgICAgICAgICAgICAgICAvLyBBc2sgZm9yIGNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgd2lsbCBiZSByZW1vdmVkXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJcyBpdCBPSyBpZiB3ZSByZW1vdmUgYWxsIHByZXZpb3VzIHJlc3VsdHM/JyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byByZW1vdmUgdGhlbSwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgICAgICBpZiAoIWNhblJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0ZXN0IGNhbiBvbmx5IGJlIGV4ZWN1dGVkIGlmIGFsbCBwcmV2aW91cyByZXN1bHRzIGhhdmUgYmVlbiByZW1vdmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmV2aW91cyByZXN1bHRzXG4gICAgICAgICAgICBybVN5bmMocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSByZXN1bHRzIGRpcmVjdG9yeVxuICAgIHJldHVybiBwYXRoO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgdXBsb2FkVG9VUE0gPSBhc3luYyAoYmFzZVVybCwgcGF0aCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvP29zX2F1dGhUeXBlPWJhc2ljYCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH1cbiAgICB9IDogdW5kZWZpbmVkKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4nLCBlcnIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXNwb25zZS5oZWFkZXJzWyd1cG0tdG9rZW4nXTtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBjcmVhdGVSZWFkU3RyZWFtKHBhdGgpKTtcbiAgICAgICAgICAgIGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/dG9rZW49JHt0b2tlbn1gLCBmb3JtRGF0YSwgeyBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgICAgICAgICB9IH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIHBsdWdpbiBhcmNoaXZlIHRvIFVQTScpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTScsIGVycikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTSwgdW5hYmxlIHRvIHJldHJpZXZlIHRva2VuIGZyb20gaGVhZGVyczonLCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5oZWFkZXJzLCBudWxsLCAyKSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZCA9IGFzeW5jIChhcHBLZXksIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQnKTtcbiAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAoIWlzRW5hYmxlZCAmJiBjb3VudCA8IDEyMCkge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQuLi4gJHtjb3VudH1zYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleWAsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgICAgICB9IDogdW5kZWZpbmVkKS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7IGVuYWJsZWQ6IGZhbHNlIH0gfSkpO1xuICAgICAgICBpc0VuYWJsZWQgPSBkYXRhPy5lbmFibGVkO1xuICAgICAgICBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmFibGVkO1xufTtcbmV4cG9ydCBjb25zdCByZWdpc3RlckxpY2Vuc2UgPSBhc3luYyAoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7fSB9KSk7XG4gICAgY29uc3QgeyByYXdMaWNlbnNlIH0gPSBkYXRhO1xuICAgIGlmICghcmF3TGljZW5zZSB8fCByYXdMaWNlbnNlICE9PSBsaWNlbnNlKSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLnB1dChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIGB7IFwicmF3TGljZW5zZVwiOiBcIiR7bGljZW5zZX1cIiB9YCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi92bmQuYXRsLnBsdWdpbnMranNvbicsXG4gICAgICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZpbmlzaGVkIHVwbG9hZGluZyBsaWNlbnNlIHRvIFVQTScpKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIGxpY2Vuc2UgdG8gVVBNJywgZXJyKSk7XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0LCBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgUHJlc2V0cywgU2luZ2xlQmFyIH0gZnJvbSAnY2xpLXByb2dyZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhcHAzaG91ciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJMaWNlbnNlLCB1cGxvYWRUb1VQTSwgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkIH0gZnJvbSAnLi4vLi4vaGVscGVycy91cG0nO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIFt7YmFyfV0ge3BlcmNlbnRhZ2V9JSB8IEVUQToge3JlbWFpbmluZ31tJyxcbiAgICBoaWRlQ3Vyc29yOiB0cnVlXG59LCBQcmVzZXRzLmxlZ2FjeSk7XG5jb25zdCByb3VuZCA9ICh2YWx1ZSwgc3RlcCkgPT4ge1xuICAgIHN0ZXAgfHwgKHN0ZXAgPSAxLjApO1xuICAgIGNvbnN0IGludiA9IDEuMCAvIHN0ZXA7XG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBpbnYpIC8gaW52O1xufTtcbmNvbnN0IGRvd25sb2FkID0gYXN5bmMgKGFkZG9uS2V5KSA9PiB7XG4gICAgY29uc3QgdG1wRGlyID0gam9pbihob21lZGlyKCksICcuZGNkeCcsICd0bXAnKTtcbiAgICBjb25zdCB0bXBGaWxlID0gam9pbih0bXBEaXIsIGFkZG9uS2V5KTtcbiAgICBta2RpclN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBheGlvcyh7XG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgIHVybDogYGh0dHBzOi8vbWFya2V0cGxhY2UuYXRsYXNzaWFuLmNvbS9kb3dubG9hZC9wbHVnaW5zLyR7YWRkb25LZXl9YCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YS5waXBlKGNyZWF0ZVdyaXRlU3RyZWFtKHRtcEZpbGUpKSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgcmV0dXJuIHRtcEZpbGU7XG59O1xuZXhwb3J0IGNvbnN0IGluc3RhbGxBcHAgPSBhc3luYyAoYmFzZVVybCwgYXBwS2V5LCBsaWNlbnNlID0gYXBwM2hvdXIsIGZvcmNlKSA9PiB7XG4gICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB3ZSB3aWxsIGRvd25sb2FkIGl0IGZyb20gTVBBQ1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICAvLyBJbiBvcmRlciB0byBkbyBzbywgd2UgbmVlZCBhbiBhcHBrZXkuIElmIHRoaXMgaXMgbm90IHByb3ZpZGVkLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICBpZiAoIWFwcEtleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIGFwcCBpbnRvIGNsdXN0ZXIsIGBhcHBLZXlgIHdhcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEluc3RhbGxpbmcgdGhlIGFwcCAoJHthcHBLZXl9KSBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUElgKTtcbiAgICAgICAgLy8gU2hvdyBhIHByb2dyZXNzIGJhclxuICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgzMDAsIDAsIHsgcmVtYWluaW5nOiAnNW0nIH0pO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPj0gMzAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoMSwgeyByZW1haW5pbmc6IHJvdW5kKChwcm9ncmVzc0Jhci5nZXRUb3RhbCgpIC0gcHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSkgLyA2MCwgMC41KSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZG93bmxvYWQoYXBwS2V5KTtcbiAgICAgICAgLy8gVXBsb2FkIGl0IGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVQTSBSRVNUIEFQSVxuICAgICAgICBhd2FpdCB1cGxvYWRUb1VQTShiYXNlVXJsLCBmaWxlLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBwbHVnaW4gdG8gYmUgZW5hYmxlZFxuICAgICAgICBhd2FpdCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQoYXBwS2V5LCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsaWNlbnNlICh1c2UgdGhlIDMgaG91ciB0aW1lYm9tYiBpbiBub24taW50ZXJhY3RpdmUgbW9kZSlcbiAgICAgICAgYXdhaXQgcmVnaXN0ZXJMaWNlbnNlKGFwcEtleSwgbGljZW5zZSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlXG4gICAgICAgIHJtU3luYyhmaWxlLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgaW5zdGFsbGluZyB0aGUgYXBwICgke2FwcEtleX0pYCk7XG4gICAgICAgIC8vIElmIHdlJ3JlIGluIGludGVyYWN0aXZlIG1vZGUsIGxldCdzIGJlIG5pY2VcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhleSBoYXZlIG9wdGlvbnNcbiAgICAgICAgY29uc29sZS5sb2coYFxuICBJdCBpcyBub3cgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIEppcmEgY2x1c3Rlci5cbiAgV2UgY2FuIGluc3RhbGwgaXQgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlIG9yIHlvdSBjYW4gaW5zdGFsbCBpdCBtYW51YWxseS5cbmApO1xuICAgICAgICAvLyBBc2sgdGhlbSBpZiB0aGV5IHByZWZlciBhdXRvbWF0aW9uIG9yIHRlZGlvdXMgbWFudWFsIHRhc2tzXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGF3YWl0IHNlbGVjdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgSG93IGRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIGFwcD9gLFxuICAgICAgICAgICAgZGVmYXVsdDogJ21wYWMnLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hcmtldHBsYWNlJywgdmFsdWU6ICdtcGFjJyB9LFxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hbnVhbCcsIHZhbHVlOiAnbWFudWFsJyB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB0aGV5IGNob3NlIGF1dG9tYXRpb24sIGxldCdzIGF1dG9tYXRlIVxuICAgICAgICBpZiAobWV0aG9kID09PSAnbXBhYycpIHtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIGFwcCBrZXlcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uS2V5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUga2V5IG9mIHRoZSBhcHAgdG8gYmUgaW5zdGFsbGVkJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBhcHBLZXksXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgYXBwIGxpY2Vuc2UgdG8gYmUgdXNlZFxuICAgICAgICAgICAgY29uc3QgYXBwTGljZW5zZSA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgTGljZW5zZWAsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbGljZW5zZSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2UgYXJlIHN0YXJ0aW5nXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSWApO1xuICAgICAgICAgICAgLy8gU2hvdyBhIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RhcnQoMzAwLCAwLCB7IHJlbWFpbmluZzogJzVtJyB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPj0gMzAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoMSwgeyByZW1haW5pbmc6IHJvdW5kKChwcm9ncmVzc0Jhci5nZXRUb3RhbCgpIC0gcHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSkgLyA2MCwgMC41KSB9KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZG93bmxvYWQoYWRkb25LZXkpO1xuICAgICAgICAgICAgLy8gVXBsb2FkIGl0IGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVQTSBSRVNUIEFQSVxuICAgICAgICAgICAgYXdhaXQgdXBsb2FkVG9VUE0oYmFzZVVybCwgZmlsZSwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgICAgICBhd2FpdCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQoYWRkb25LZXksIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwcm92aWRlZCBsaWNlbnNlXG4gICAgICAgICAgICBhd2FpdCByZWdpc3RlckxpY2Vuc2UoYWRkb25LZXksIGFwcExpY2Vuc2UsIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgICAgIHJtU3luYyhmaWxlLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHdlIHN1Y2NlZWRlZFxuICAgICAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7YWRkb25LZXl9KWApO1xuICAgICAgICAgICAgLy8gVGhleSBjaG9zZSB2aW9sZW5jZVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUnViIGl0IGluIHRoZWlyIGZhY2VcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgWW91IGNhbiBub3cgaW5zdGFsbCB0aGUgYXBwIG1hbnVhbGx5IGludG8gdGhlIGNsdXN0ZXIuXG4gIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIHBhZ2UgKGxvZ2luIHdpdGggJ2FkbWluJy8nYWRtaW4nKTpcbiAgICBcbiAgJHtiYXNlVXJsfS9wbHVnaW5zL3NlcnZsZXQvdXBtP3NvdXJjZT1zaWRlX25hdl9tYW5hZ2VfYWRkb25zXG5gKTtcbiAgICAgICAgICAgIC8vIE1ha2UgdGhlbSBncm92ZWxcbiAgICAgICAgICAgIGNvbnN0IGlzSW5zdGFsbGVkTWFudWFsbHkgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGFwcCBtYW51YWxseWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGFwcCBhaW4ndCBpbnN0YWxsZWQsIHdlIGFpbid0IGRvaW5nIG5vdGhpbicuIFNvIHdlIGJldHRlciB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgaWYgKCFpc0luc3RhbGxlZE1hbnVhbGx5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBhcHAgdG8gcnVuIHRoZSBzZWNvbmQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUxpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIHdpdGhBcHBTcGVjaWZpY0FjdGlvbnMsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdFVSSSA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwcm9kdWN0VVJJLnByb3RvY29sLnN0YXJ0c1dpdGgoJ2h0dHBzJykgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHAnID8gJzgwJyA6ICc0NDMnO1xuICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlICR7cHJvZHVjdH0ueW1sIGZpbGU6XG5cbiAgYXBwbGljYXRpb25faG9zdG5hbWUgPSAke3Byb2R1Y3RVUkkuaG9zdH1cbiAgYXBwbGljYXRpb25fcHJvdG9jb2wgPSAke3Byb3RvY29sfVxuICBhcHBsaWNhdGlvbl9wb3J0ID0gJHtwb3J0fVxuICBhcHBsaWNhdGlvbl9wb3N0Zml4ID0gJHtwcm9kdWN0VVJJLnBhdGhuYW1lfVxuICB0ZXN0X2R1cmF0aW9uID0gJHtkdXJhdGlvbn1cbiAgc3RhbmRhbG9uZV9leHRlbnNpb24gPSAke3dpdGhBcHBTcGVjaWZpY0FjdGlvbnMgPyAnMScgOiAnMCd9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke2pvaW4oY3dkLCAnYXBwJywgYCR7cHJvZHVjdH0ueW1sYCl9XG5gKTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIGZvcmNlKTtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKSwgKGxpbmUpID0+IHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9ob3N0bmFtZTogJHtwcm9kdWN0VVJJLmhvc3R9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDonKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgYXBwbGljYXRpb25fcHJvdG9jb2w6ICR7cHJvdG9jb2x9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBhcHBsaWNhdGlvbl9wb3J0OmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wb3J0OiAke3BvcnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgc3RhbmRhbG9uZV9leHRlbnNpb246ICR7d2l0aEFwcFNwZWNpZmljQWN0aW9ucyA/ICcxJyA6ICcwJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHRlc3RfZHVyYXRpb246YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIHRlc3RfZHVyYXRpb246ICR7ZHVyYXRpb259YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgQ29uZmlndXJhdGlvbiB3cml0dGVuIHRvICR7cHJvZHVjdH0ueW1sYCk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmV4cG9ydCBjb25zdCBnZXRSZWluZGV4UHJvZ3Jlc3MgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvYXBpLzIvcmVpbmRleGAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7QnVmZmVyLmZyb20oYGFkbWluOmFkbWluYCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIGNvbnN0IGN1cnJlbnRUYXNrID0gKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSA/IHJlc3BvbnNlLmRhdGEgOiB7fTtcbiAgICBjb25zdCB7IHByb2dyZXNzVXJsLCBjdXJyZW50UHJvZ3Jlc3MsIHN1Y2Nlc3MsIGZpbmlzaFRpbWUgfSA9IGN1cnJlbnRUYXNrO1xuICAgIGNvbnN0IGlzRmluaXNoZWQgPSBjdXJyZW50UHJvZ3Jlc3MgPT09IDEwMCB8fCBzdWNjZXNzIHx8IGZpbmlzaFRpbWUgIT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBbcHJvZ3Jlc3NVcmwsIHN1Y2Nlc3MsIGlzRmluaXNoZWRdO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgUHJlc2V0cywgU2luZ2xlQmFyIH0gZnJvbSAnY2xpLXByb2dyZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBwdXBwZXRlZXIgZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IFJ1bjIgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBnZXRSZWluZGV4UHJvZ3Jlc3MgfSBmcm9tICcuL2dldFJlaW5kZXhQcm9ncmVzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmNvbnN0IHByb2dyZXNzQmFyID0gbmV3IFNpbmdsZUJhcih7XG4gICAgZm9ybWF0OiAnICBMdWNlbmUgcmUtaW5kZXggW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7cmVtYWluaW5nfW0nLFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmV4cG9ydCBjb25zdCByZWluZGV4ID0gYXN5bmMgKGJhc2VVcmwsIG91dHB1dERpciwgZm9yY2UpID0+IHtcbiAgICAvLyBUZWxsIHRoZW0gdGhhdCB3ZSBhcmUgcGxhbm5pbmcgdG8gcnVuIHRoZSBMdWNlbmUgSW5kZXhpbmcgVGVzdFxuICAgIGNvbnNvbGUubG9nKFJ1bjIuc3RhcnRMdWNlbmVJbmRleGluZyk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHJlaW5kZXggc2NyZWVuc2hvdCBhbHJlYWR5IGV4aXN0c1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJykpKSB7XG4gICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMgPSBmb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBhcmUgZXhpc3RpbmcgcmVpbmRleCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92aW5nIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cycpO1xuICAgICAgICAgICAgcm1TeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJyksIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgY2FuIHN0YXJ0XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gYXdhaXQgd2FpdEZvclVzZXJJbnB1dChgUHJlc3MgYW55IGtleSB0byBzdGFydCB0aGUgTHVjZW5zZSBJbmRleCBUaW1pbmcgdGVzdC4uLlxuICAob3IgJ3MnIHRvIHNraXAgaWYgdGhlIHRlc3QgaXMgYWxyZWFkeSBydW5uaW5nKVxuYCwgZm9yY2UpO1xuICAgIC8vIENoZWNrIGlmIHRoZXkgYWdyZWVkIHRvIHN0YXJ0aW5nIHRoZSByZWluZGV4XG4gICAgaWYgKHZhbHVlICE9PSAncycpIHtcbiAgICAgICAgLy8gVGhleSBkaWQhIFNvIGxldCdzIHN0YXJ0IGl0IHVzaW5nIHRoZSBKaXJhIFJFU1QgQVBJXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L2FwaS8yL3JlaW5kZXg/dHlwZT1GT1JFR1JPVU5EYCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBhZG1pbjphZG1pbmApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAvLyBMZXQncyBtYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYSBwcm9wZXIgcmVzcG9uc2VcbiAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAyKSB7XG4gICAgICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgICAgICAgIC8vIE5vIHJlaW5kZXggaXMgbm8gc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHN0YXJ0IEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QsIGNvdWxkIG5vdCBwZXJmb3JtIHJlaW5kZXgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTdGFydCB0aGUgY2xvY2shXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgLy8gU3RhcnQgdGhlIHByb2dyZXNzIGJhciB0byBjb3VudCBmb3IgNjAgbWludXRlc1xuICAgIHByb2dyZXNzQmFyLnN0YXJ0KDM2MDAsIDAsIHsgcmVtYWluaW5nOiA2MCB9KTtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlaW5kZXggaXMgZmluaXNoZWRcbiAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byB0cnkgdG8gZ2V0IGFuIHVwZGF0ZSBmcm9tIEppcmFcbiAgICB3aGlsZSAoIWlzRmluaXNoZWQpIHtcbiAgICAgICAgLy8gR2V0IGFuIHVwZGF0ZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgY29uc3QgW3Byb2dyZXNzVXJsLCBzdWNjZXNzLCBmaW5pc2hlZF0gPSBhd2FpdCBnZXRSZWluZGV4UHJvZ3Jlc3MoYmFzZVVybCk7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IGhhcyBmaW5pc2hlZFxuICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgc3RpbGwgd2l0aGluIHRoZSA2MCBtaW51dGUgd2luZG93XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA8IHByb2dyZXNzQmFyLmdldFRvdGFsKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhcmUsIHNvIGxldCdzIGp1c3QgaW5jcmVtZW50IHRoZSBwcm9ncmVzcyBiYXIgYW5kIHRyeSBhZ2FpblxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCg2MCwge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmc6IDYwIC0gTWF0aC5mbG9vcigoKChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0VGltZSkgLyAxMDAwKSAvIDYwKSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciAxIG1pbnV0ZSB1bnRpbCB3ZSByZXRyeVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vIGxvbmdlciBpbiB0aGUgNjAgbWludXRlIHdpbmRvdywgbWFudWFsIGFjdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8vIHdoZW4gb3BlcmF0aW5nIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHRoZXkgbmVlZCB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEx1Y2Vuc2UgcmUtaW5kZXggaXMgdGFraW5nIGEgbG9uZyB0aW1lIHRvIGZpbmlzaC4gUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgVVJMXG4gICR7YmFzZVVybH0ke3Byb2dyZXNzVXJsIHx8ICcvc2VjdXJlL2FkbWluL2ppcmEvSW5kZXhQcm9ncmVzcy5qc3BhJ31cblxuICBhbmQgbWFudWFsbHkgY29uZmlybSB0aGF0IHRoZSByZS1pbmRleCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgIGApO1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGUgdXNlciB0byBjb25maXJtIHRoZSByZWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGF3YWl0IGNvbmZpcm0oeyBtZXNzYWdlOiAnSGFzIHRoZSByZWluZGV4IGNvbXBsZXRlZCBzdWNjZXNmdWxseT8nIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2UgaGF2ZSBubyBjaG9pY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZS1pbmRleCBoYXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gNjAgbWludXRlcywgdGVzdCBoYXMgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgY29tcGxldGVseSB3cm9uZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGZpbmlzaGVkIHVuc3VjY2VzZnVsbHkuIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTCBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuYCk7XG4gICAgICAgICAgICAvLyBOb3cgdGhyb3cgYSBoaXNzeSBmaXQgYW55d2F5XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0x1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIOKclCBMdWNlbmNlIHJlLWluZGV4IG9mIEppcmEgaGFzIGNvbXBsZXRlZFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb29wIHZhcmlhYmxlXG4gICAgICAgIGlzRmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsYXRlc3QgdXBkYXRlIG9uIHRoZSByZWluZGV4IHByb2dyZXNzXG4gICAgY29uc3QgW3Byb2dyZXNzVXJsXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgVVJMXG4gICAgaWYgKCFwcm9ncmVzc1VybCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvZ3Jlc3MgVVJMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gUmV0cnkgY291bnRlclxuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNjcmVlbnNob3Qgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgbGV0IHNjcmVlbnNob3RDcmVhdGVkID0gZmFsc2U7XG4gICAgLy8gTG9vcCB1bnRpbCB3ZSd2ZSBtYWRlIGEgc2NyZWVuIHNob3Qgb3IgdHJpZWQgaXQgNSB0aW1lcyAoaW5jbC4gb25lIHRpbWUgbWFudWFsbHkpXG4gICAgd2hpbGUgKCFzY3JlZW5zaG90Q3JlYXRlZCAmJiByZXRyeUNvdW50IDwgNSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJldHJ5IGNvdW50IGlzIDQsIHRoaXMgbWVhbnMgdGhpcyBpcyBvdXIgbGFzdCByb2Rlb1xuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBtYW51YWwsIHdoaWNoIHdlIGNhbid0IGRvIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIG91ciBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSBhIHNjcmVlbiBzaG90IG9mIHRoZSBMdWNlbmUgUmVpbmRleCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFdlJ3ZlIHRyaWVkIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2NyZWVuc2hvdCwgYnV0IHRoZSBwcm9jZXNzIHNlZW1zIHRvIGJlIHN0dWNrXG5cbiAgV2Ugd2lsbCBub3cgb3BlbiBhIGJyb3dzZXIgd2luZG93IGZvciB5b3UgdG8gZm9sbG93IHRoZSBhdXRvbWF0ZWQgc3RlcHMgYW5kIGludGVydmVuZVxuICB3aGVyZSBwb3NzaWJsZSAoZm9yIGluc3RhbmNlLCBieSBwcmVzc2luZyBhIGJ1dHRvbiBvciByZWxvYWRpbmcgYSBzY3JlZW4pXG5gKTtcbiAgICAgICAgICAgICAgICAvLyBOb3cgYXNrIHRoZW0gbmljZWx5IGlmIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gb3BlbiB0aGUgYnJvd3NlciB3aW5kb3cuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBicm93c2VyIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHsgaGVhZGxlc3M6IHJldHJ5Q291bnQgPCA0IH0pO1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGJyb3dzZXIubmV3UGFnZSgpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5zZXRWaWV3cG9ydCh7IHdpZHRoOiAxMDgwLCBoZWlnaHQ6IDEwMjQgfSk7XG4gICAgICAgICAgICAvLyBPcGVuIHRoZSByZWluZGV4IHByb2dyZXNzIHBhZ2VcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UuZ290byhgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmx9YCk7XG4gICAgICAgICAgICAvLyBMb2cgaW5cbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tdXNlcm5hbWUnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1wYXNzd29yZCcpLmZpbGwoJ2FkbWluJyk7XG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAvLyBXZWJzdWRvXG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLWF1dGhlbnRpY2F0ZVBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tc3VibWl0JykuY2xpY2soKTtcbiAgICAgICAgICAgIC8vIFhTUkYgdG9rZW4gZXhwaXJhdGlvbiBzbmFmdVxuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjYXRsX3Rva2VuX3JldHJ5X2J1dHRvbicpLmNsaWNrKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgb24gdGhlIHJlaW5kZXggcGFnZSBhbmQgdGhhdCBpdCBpcyBsb2FkZWRcbiAgICAgICAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvclNlbGVjdG9yKCcjYWNrbm93bGVkZ2Vfc3VibWl0Jyk7XG4gICAgICAgICAgICAvLyBNYWtlIHRoZSBzY3JlZW4gc2hvdFxuICAgICAgICAgICAgYXdhaXQgcGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgICAgICAgICBwYXRoOiBqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENsb3NlIHRoZSBicm93c2VyIHdpbmRvd1xuICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBjYXB0dXJlZCB0aGUgc2NyZWVuIHNob3QgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnlcbiAgICAgICAgICAgIHNjcmVlbnNob3RDcmVhdGVkID0gZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2lnbm9yZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENvdWxkIG5vdCBnZXQgYSBzY3JlZW4gc2hvdCBvZiB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdCwgcmV0cnlpbmcuLi5gKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBjb3VsZCBub3QgY3JlYXRlIHRoZSBzY3JlZW5zaG90LCB0aHJvdyBhIGhpc3N5IGZpdCFcbiAgICBpZiAoIXNjcmVlbnNob3RDcmVhdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNhcHR1cmUgdGhlIGx1Y2VuZSBpbmRleGluZyByZXN1bHRzJyk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSB3ZSBzaG91bGQgc2hvdyBhIGhhcHB5IG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgTHVjZW5jZSBJbmRleCBUaW1pbmcgdGVzdCBmb3JlZ3JvdW5kIGluZGV4aW5nIG9mIEppcmEgaGFzIGNvbXBsZXRlZFxuYCk7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJ1blRlc3QgfSBmcm9tICcuLi9oZWxwZXJzL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRDbHVzdGVyVVJMIH0gZnJvbSAnLi4vaGVscGVycy9nZXRDbHVzdGVyVVJMJztcbmltcG9ydCB7IGdldER1cmF0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9nZXREdXJhdGlvbic7XG5pbXBvcnQgeyBnZXRSZXN1bHRzIH0gZnJvbSAnLi4vaGVscGVycy9nZXRSZXN1bHRzJztcbmltcG9ydCB7IGdldFJlc3VsdHNEaXJlY3RvcnkgfSBmcm9tICcuLi9oZWxwZXJzL2dldFJlc3VsdHNEaXJlY3RvcnknO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4uL2hlbHBlcnMvaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyByZWluZGV4IH0gZnJvbSAnLi4vaGVscGVycy9yZWluZGV4JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9nZXRSdW5Gb3JTdGFnZSc7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuZXhwb3J0IGNvbnN0IHJ1blBlcmZvcm1hbmNlVGVzdCA9IGFzeW5jIChzdGFnZSwgb3B0aW9ucywgbWVzc2FnZXMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5oZWFkZXIob3B0aW9ucy5wcm9kdWN0KSk7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIGxvYWQgYmFsYW5jZXIgVVJMIGZvciB0aGUgY2x1c3RlclxuICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRDbHVzdGVyVVJMKGN3ZCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHMgZm9yIHRoaXMgc3BlY2lmaWMgcnVuXG4gICAgY29uc3QgcnVuT3V0cHV0RGlyID0gam9pbihvcHRpb25zLm91dHB1dERpciwgYHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfWApO1xuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHJ1blxuICAgIGlmIChleGlzdHNTeW5jKHJ1bk91dHB1dERpcikpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cywgY2hlY2sgaWYgdGhleSB3ZXJlIHN1Y2Nlc3NmdWxcbiAgICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHRzID0gZ2V0UmVzdWx0cyhydW5PdXRwdXREaXIpO1xuICAgICAgICBpZiAoZXhpc3RpbmdSZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSA9PT0gJ09LJykge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseSBpZiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgZXhpc3RpbmcgdGVzdCByZXN1bHRzXG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMgPSBvcHRpb25zLmZvcmNlIHx8IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBhcmUgZXhpc3Rpbmcgc3VjY2Vzc2Z1bCB0ZXN0IHJlc3VsdHMsIGRvIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSB0aGVzZSByZXN1bHRzPydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92aW5nIGV4aXN0aW5nIHRlc3QgcmVzdWx0cycpO1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgcGVyZm9ybWFuY2UgJHtzdGFnZX0gdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGUgdGVzdCBydW4gd2FzIG5vdCBzdWNjZXNzZnVsLCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIGl0IHdpdGhvdXQgYXNraW5nXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhlIG91dHB1dCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKG9wdGlvbnMub3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBJZiB3ZSBhcmUgcnVubmluZyByZWdyZXNzaW9uIHRlc3RzLCB3ZSBuZWVkIHRvIGluc3RhbGwgdGhlIGFwcCAoJiBydW4gaW5kZXhpbmcgdGVzdHMgZm9yIEppcmEpXG4gICAgaWYgKHN0YWdlID09PSAncmVncmVzc2lvbicpIHtcbiAgICAgICAgLy8gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgaW5zdGFsbEFwcChiYXNlVXJsLCBvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5hcHBMaWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGRvaW5nIHRoaXMgdGhpbmcgZm9yIEppcmEsIHdlIG5lZWQgdG8gZG8gdGhlIEx1Y2VuZSBJbmRleCBUZXN0aW5nXG4gICAgICAgIGlmIChvcHRpb25zLnByb2R1Y3QgPT09ICdqaXJhJykge1xuICAgICAgICAgICAgYXdhaXQgcmVpbmRleChiYXNlVXJsLCBvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHJlZ3Jlc3Npb24gdGVzdGluZ1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN0YXJ0UGVyZm9ybWFuY2VUZXN0KTtcbiAgICAvLyBBbGxvdyB1c2VycyB0byBzZXQgYSBkaWZmZXJlbnQgdGVzdCBkdXJhdGlvbiAoZm9yIHZhbGlkYXRpb24gcHVycG9zZXMpXG4gICAgY29uc3QgZHVyYXRpb24gPSBhd2FpdCBnZXREdXJhdGlvbihvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgdGVzdCBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICBhd2FpdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLnByb2R1Y3QsIGJhc2VVcmwsIGR1cmF0aW9uLCBmYWxzZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXN1bHRzQmFzZURpciA9IGF3YWl0IGdldFJlc3VsdHNEaXJlY3RvcnkoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgZGFtbiB0ZXN0XG4gICAgYXdhaXQgcnVuVGVzdChjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0gZ2V0UmVzdWx0cyhyZXN1bHRzQmFzZURpcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGlmIChyZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSAhPT0gJ09LJykge1xuICAgICAgICAvLyBJZiBub3QsIGxldCB0aGUgcGVvcGxlIGtub3cgYW5kIHRlcm1pbmF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5mYWlsdXJlKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldE5vZGVOdW1iZXJGb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gMjtcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuIDQ7XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgaW5zdGFsbCwgcnVuVGVzdCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRDbHVzdGVyVVJMIH0gZnJvbSAnLi9nZXRDbHVzdGVyVVJMJztcbmltcG9ydCB7IGdldER1cmF0aW9uIH0gZnJvbSAnLi9nZXREdXJhdGlvbic7XG5pbXBvcnQgeyBnZXROb2RlTnVtYmVyRm9yU3RhZ2UgfSBmcm9tICcuL2dldE5vZGVOdW1iZXJGb3JTdGFnZSc7XG5pbXBvcnQgeyBnZXRSZXN1bHRzIH0gZnJvbSAnLi9nZXRSZXN1bHRzJztcbmltcG9ydCB7IGdldFJlc3VsdHNEaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlc3VsdHNEaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IGluc3RhbGxBcHAgfSBmcm9tICcuL2luc3RhbGxBcHAnO1xuaW1wb3J0IHsgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcGVyc2lzdEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHJ1blNjYWxhYmlsaXR5VGVzdCA9IGFzeW5jIChzdGFnZSwgb3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgY29ycmVjdCBhbW91bnQgb2Ygbm9kZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhZ2VcbiAgICBjb25zdCBub2RlcyA9IGdldE5vZGVOdW1iZXJGb3JTdGFnZShzdGFnZSk7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RyeVxuICAgICAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHNjYWxhYmlsaXR5ICR7c3RhZ2V9IGNsdXN0ZXIgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGUgdGVzdCBydW4gd2FzIG5vdCBzdWNjZXNzZnVsLCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIGl0IHdpdGhvdXQgYXNraW5nXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhlIG91dHB1dCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKG9wdGlvbnMub3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gcHJlcGFyZSB0aGUgQVdTIGVudmlyb25tZW50IGZvciBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdGluZy4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrIChvbmUtbm9kZSBjbHVzdGVyKVxuICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCBub2Rlcyk7XG4gICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuc3RhcnRTY2FsYWJpbGl0eVRlc3QpO1xuICAgIC8vIEdldCB0aGUgbG9hZCBiYWxhbmNlciBVUkwgZm9yIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgYXdhaXQgaW5zdGFsbEFwcChiYXNlVXJsLCBvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5hcHBMaWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBbGxvdyB1c2VycyB0byBzZXQgYSBkaWZmZXJlbnQgdGVzdCBkdXJhdGlvbiAoZm9yIHZhbGlkYXRpb24gcHVycG9zZXMpXG4gICAgY29uc3QgZHVyYXRpb24gPSBhd2FpdCBnZXREdXJhdGlvbihvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSB0ZXN0IGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgIGF3YWl0IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMucHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVzdWx0c0Jhc2VEaXIgPSBhd2FpdCBnZXRSZXN1bHRzRGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIGRhbW4gdGVzdFxuICAgIGF3YWl0IHJ1blRlc3QoY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEdldCB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcmVzdWx0cyA9IGdldFJlc3VsdHMocmVzdWx0c0Jhc2VEaXIpO1xuICAgIC8vIENoZWNrIGlmIHRoZSB0ZXN0IHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBpZiAocmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gIT09ICdPSycpIHtcbiAgICAgICAgLy8gSWYgbm90LCBsZXQgdGhlIHBlb3BsZSBrbm93IGFuZCB0ZXJtaW5hdGVcbiAgICAgICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuZmFpbHVyZShzdGFnZSwgY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3QgZmFpbGVkJyk7XG4gICAgfVxuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXN1bHRzLnBhdGgsIHJ1bk91dHB1dERpciwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgLy8gQ2VsZWJyYXRlIG91ciBzdWNjZXNzIVxuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLnN1Y2Nlc3MpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xufTtcbiIsImltcG9ydCB7IGVtcHR5TGluZSwgVGVhcmRvd24gfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyB0ZXJtaW5hdGUgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHRlYXJkb3duQ2x1c3RlciA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyBuaWNlIGxpdHRsZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhUZWFyZG93bi5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhkaXJlY3RvcnksIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIEFzayB0aGUgdXNlciBpZiB0aGV5IGFyZSByZWFkeSB0byBzYXkgZ29vZGJ5ZSB0byB0aGVpciBjbHVzdGVyXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBUZXJtaW5hdGUgaXQhXG4gICAgYXdhaXQgdGVybWluYXRlKGRpcmVjdG9yeSwgb3B0aW9ucy5lbnZpcm9ubWVudCk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIHRvIHF1aXQgdGhlIHByb2dyYW1cbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBleGl0Li4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdmVyc2lvbnMgZnJvbSAnLi4vLi4vYXNzZXRzL3ZlcnNpb25zLmpzb24nO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyA9IHouZW51bShbXG4gICAgJ3Bvc3RncmVzcWwnLFxuICAgICdteXNxbCcsXG4gICAgJ21zc3FsJ1xuXSk7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkTVNTUUxFZGl0aW9ucyA9IHouZW51bShbXG4gICAgJ0RldmVsb3BlcicsXG4gICAgJ0V4cHJlc3MnLFxuICAgICdTdGFuZGFyZCcsXG4gICAgJ0VudGVycHJpc2UnLFxuICAgICdFbnRlcnByaXNlQ29yZSdcbl0pO1xuZXhwb3J0IGNvbnN0IERhdGFiYXNlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMsXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLFxuICAgIGRhdGFiYXNlOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIGNsZWFuOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBwcnVuZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgdmVyYm9zZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpXG59KTtcbmV4cG9ydCBjb25zdCBQb3N0Z3JlU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoNTQzMiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKS5kZWZhdWx0KCdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTXlTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgzMzA2KSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpLmRlZmF1bHQoJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNU1NRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGVkaXRpb246IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMuZGVmYXVsdCgnRGV2ZWxvcGVyJyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMTQzMyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ3NhJykuZGVmYXVsdCgnc2EnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdEYXRhQ2VudGVyRFghJyksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpLmRlZmF1bHQoJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJylcbn0pO1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgfSBmcm9tICcuL0RhdGFiYXNlJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgPSB6LmVudW0oW1xuICAgICdqaXJhJyxcbiAgICAnY29uZmx1ZW5jZScsXG4gICAgJ2JpdGJ1Y2tldCcsXG4gICAgJ2JhbWJvbydcbl0pO1xuZXhwb3J0IGNvbnN0IEFwcGxpY2F0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgdGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGRhdGFiYXNlOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuZGVmYXVsdCgncG9zdGdyZXNxbCcpLFxuICAgIGRhdGFiYXNlVGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKS5kZWZhdWx0KCc4MCcpLFxuICAgIGNvbnRleHRQYXRoOiB6LnN0cmluZygpLFxuICAgIHhtczogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHhteDogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHdhdGNoOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBleHQ6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgaW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHouc3RyaW5nKCksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkZWJ1Zzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGNvbnRleHRQYXRoOiB0cnVlLFxuICAgIGV4dDogdHJ1ZSxcbiAgICBpbnN0YWxsOiB0cnVlLFxuICAgIG91dHB1dERpcmVjdG9yeTogdHJ1ZSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB0cnVlLFxuICAgIGN3ZDogdHJ1ZVxufSk7XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyB9IGZyb20gJy4vQXBwbGljYXRpb24nO1xuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlVGVzdFR5cGVzID0gei5lbnVtKFtcbiAgICAnYmFzZWxpbmUnLFxuICAgICdyZWdyZXNzaW9uJ1xuXSk7XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHlUZXN0VHlwZXMgPSB6LmVudW0oW1xuICAgICdvbmUtbm9kZScsXG4gICAgJ3R3by1ub2RlJyxcbiAgICAnZm91ci1ub2RlJ1xuXSk7XG5leHBvcnQgY29uc3QgVGVzdFJlc3VsdHMgPSB6LmVudW0oW1xuICAgICdwYXRoJyxcbiAgICAnU3VtbWFyeSBydW4gc3RhdHVzJyxcbiAgICAnQXBwbGljYXRpb24gbm9kZXMgY291bnQnLFxuICAgICdGaW5pc2hlZCcsXG4gICAgJ0NvbXBsaWFudCcsXG4gICAgJ1N1Y2Nlc3MnLFxuICAgICdIYXMgYXBwLXNwZWNpZmljIGFjdGlvbnMnXG5dKTtcbmV4cG9ydCBjb25zdCBSZXBvcnRUeXBlcyA9IHouZW51bShbXG4gICAgJ3BlcmZvcm1hbmNlJyxcbiAgICAnc2NhbGFiaWxpdHknXG5dKTtcbmV4cG9ydCBjb25zdCBBUFRSZXBvcnRBcmdzID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IFJlcG9ydFR5cGVzLFxuICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpXG59KS5wYXJ0aWFsKHtcbiAgICBvdXRwdXREaXI6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFByb3Zpc2lvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBlbnZpcm9ubWVudDogdHJ1ZSxcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgb3V0cHV0RGlyOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGFwcEtleTogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVRlc3RNZXNzYWdlcyA9IHoub2JqZWN0KHtcbiAgICBoZWFkZXI6IHouZnVuY3Rpb24oKS5hcmdzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucykucmV0dXJucyh6LnN0cmluZygpKSxcbiAgICBzdGFydFBlcmZvcm1hbmNlVGVzdDogei5zdHJpbmcoKSxcbiAgICBzdGFydEx1Y2VuZUluZGV4aW5nOiB6LnN0cmluZygpLFxuICAgIHN1Y2Nlc3M6IHouc3RyaW5nKCksXG4gICAgZmFpbHVyZTogei5mdW5jdGlvbigpLmFyZ3Moei5zdHJpbmcoKSwgU3VwcG9ydGVkQXBwbGljYXRpb25zLCB6LnN0cmluZygpLCB6LnN0cmluZygpLCB6LnJlY29yZChUZXN0UmVzdWx0cywgei5zdHJpbmcoKS5vcih6LnVuZGVmaW5lZCgpKSkpXG59KS5wYXJ0aWFsKHtcbiAgICBzdGFydEx1Y2VuZUluZGV4aW5nOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVJlcG9ydE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKCksXG59KS5wYXJ0aWFsKHtcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0QXJncyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBvdXRwdXREaXI6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICB0aW1lc3RhbXA6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgbGljZW5zZTogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGFwcEtleTogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHoub2JqZWN0KHtcbiAgICBoZWFkZXI6IHouZnVuY3Rpb24oKS5hcmdzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucywgU2NhbGFiaWxpdHlUZXN0VHlwZXMpLnJldHVybnMoei5zdHJpbmcoKSksXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IHouc3RyaW5nKCksXG4gICAgc3RhcnRTY2FsYWJpbGl0eVRlc3Q6IHouc3RyaW5nKCksXG4gICAgc3VjY2Vzczogei5zdHJpbmcoKSxcbiAgICBmYWlsdXJlOiB6LmZ1bmN0aW9uKCkuYXJncyhTY2FsYWJpbGl0eVRlc3RUeXBlcywgei5zdHJpbmcoKSwgU3VwcG9ydGVkQXBwbGljYXRpb25zLCB6LnN0cmluZygpLCB6LnN0cmluZygpLCB6LnJlY29yZChUZXN0UmVzdWx0cywgei5zdHJpbmcoKS5vcih6LnVuZGVmaW5lZCgpKSkpXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVJlcG9ydE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKCksXG59KS5wYXJ0aWFsKHtcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUVGVhcmRvd25BcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUVGVhcmRvd25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXdzX2FjY2Vzc19rZXlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXdzX2FjY2Vzc19rZXlfaWQ6IHRydWUsXG4gICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRBcmdzID0gei5pbnRlcnNlY3Rpb24oQVBUUHJvdmlzaW9uT3B0aW9ucywgQVBUUGVyZm9ybWFuY2VUZXN0QXJncywgQVBUU2NhbGFiaWxpdHlUZXN0QXJncyk7XG4iLCJpbXBvcnQgeyBQZXJmb3JtYW5jZVRlc3RUeXBlcyB9IGZyb20gJy4uL3R5cGVzL0RDQVBUJztcbmltcG9ydCB7IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQgfSBmcm9tICcuL2hlbHBlcnMvZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuL2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuL2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5QZXJmb3JtYW5jZVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0JztcbmltcG9ydCB7IFJ1bjEsIFJ1bjIgfSBmcm9tICcuL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZSA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCk7XG4gICAgLy8gUHJvdmlzaW9uIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgeyBjd2QsIGVudmlyb25tZW50LCB9ID0gYXdhaXQgcHJvdmlzaW9uQ2x1c3Rlcih7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgdHJ1ZSk7XG4gICAgLy8gUnVuIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSB0ZXN0XG4gICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5iYXNlbGluZSwge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBSdW4xKTtcbiAgICAvLyBSdW4gdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdFxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbiwge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBSdW4yKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0XG4gICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCh7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuL2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuL2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0JztcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eSA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCk7XG4gICAgLy8gUHJvdmlzaW9uIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgeyBjd2QsIGVudmlyb25tZW50LCBsaWNlbnNlIH0gPSBhd2FpdCBwcm92aXNpb25DbHVzdGVyKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBmYWxzZSk7XG4gICAgLy8gUnVuIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IHdpdGggYSBvbmUtbm9kZSBjbHVzdGVyXG4gICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdvbmUtbm9kZScsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIHR3by1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ3R3by1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xuICAgIC8vIFJ1biB0aGUgc2NhbGFiaWxpdHkgdGVzdCB3aXRoIGEgb25lLW5vZGUgY2x1c3RlclxuICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnZm91ci1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnRcbiAgICBhd2FpdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0KHtcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgYXN5bmNFeGl0SG9vaywgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkhhbmRsZXIgPSBhc3luYyAocHJvZ3JhbSwgeyBhY3Rpb24sIGVycm9ySGFuZGxlciB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgb3BzID0gb3B0aW9ucyB8fCBwcm9ncmFtLm9wdHMoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgYXN5bmNFeGl0SG9vayhhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlcnJvckhhbmRsZXIob3BzKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmVqZWN0aW5nIHRoZSBwcm9taXNlIHRvIGF2b2lkIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBcIkNhbGxpbmcgcHJvY2Vzcy5leGl0XCIgbG9nIG1lc3NhZ2UgZnJvbSBleGl0LWhvb2tcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycjtcbiAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHdhaXQ6IDYwICogMSAqIDEwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbihvcHMpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5pc3N1ZXMuZm9yRWFjaChpc3N1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgVW5hYmxlIHRvIHBhcnNlIG9wdGlvbiAke2lzc3VlLnBhdGguam9pbignLCcpfTogJHtpc3N1ZS5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVyci50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDEpO1xuICAgICAgICB9KTtcbiAgICB9KS5jYXRjaChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLFxuICAgICAgICAgICAgLy8gd2UgY2FuIGFzc3VtZSBhIGNsZWFuIGV4aXRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFByb2R1Y3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZXRQcm9kdWN0JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuLi9hcHQvaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdCc7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5TY2FsYWJpbGl0eVRlc3QnO1xuaW1wb3J0IHsgdGVhcmRvd25DbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9hcHQvaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IGVtcHR5TGluZSwgZ2VuZXJpYywgaW5pdCwgUnVuMSwgUnVuMiB9IGZyb20gJy4uL2FwdC9tZXNzYWdlcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZSB9IGZyb20gJy4uL2FwdC9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eSB9IGZyb20gJy4uL2FwdC9zY2FsYWJpbGl0eSc7XG5pbXBvcnQgeyBBY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vaGVscGVycy9BY3Rpb25IYW5kbGVyJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuLi90eXBlcy9BcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBSZXBvcnRUeXBlcyB9IGZyb20gJy4uL3R5cGVzL0RDQVBUJztcbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZGVyKCk7XG5jb25zdCBEZWZhdWx0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBDbGVhciB0aGUgY29uc29sZSBhbmQgc2hvdyBhIHdlbGNvbWUgbWVzc2FnZVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFx4MUJjJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdlbmVyaWMuaGVhZGVyKTtcbiAgICAgICAgLy8gR2V0IHRoZSBwcm9kdWN0IGZyb20gdGhlIGFyZ3Mgb3IgYXNrIGZvciBpdCBuaWNlbHlcbiAgICAgICAgY29uc3QgcHJvZHVjdCA9IG9wdGlvbnMucHJvZHVjdCB8fCBhd2FpdCBnZXRQcm9kdWN0KCk7XG4gICAgICAgIC8vIFNob3cgdGhlIGluaXQgbWVzc2FnZVxuICAgICAgICBjb25zb2xlLmxvZyhpbml0LmhlYWRlcihwcm9kdWN0KSk7XG4gICAgICAgIC8vIEFzayBmb3IgdGhlIHVzZXIgdG8gY29uZmlybSB0aGV5IGFyZSByZWFkeVxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBzdGFydCB3aXRoIHRoZSBmaXJzdCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAvLyBTdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZ1xuICAgICAgICBhd2FpdCBQZXJmb3JtYW5jZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBzY2FsYWJpbGl0eSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFNjYWxhYmlsaXR5KHtcbiAgICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSZXBvcnRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUgPT09ICdwZXJmb3JtYW5jZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0KHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICAgIH1cbn0pO1xuY29uc3QgUGVyZm9ybWFuY2VUZXN0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBTdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZ1xuICAgICAgICBhd2FpdCBQZXJmb3JtYW5jZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE8gaW1wcm92ZSBlcnJvciBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjFDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdCgnYmFzZWxpbmUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICB9LCBSdW4xKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuMkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KCdiYXNlbGluZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApXG4gICAgICAgIH0sIFJ1bjIpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBTY2FsYWJpbGl0eVRlc3RDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBzY2FsYWJpbGl0eSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFNjYWxhYmlsaXR5KHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICAgIH1cbn0pO1xuY29uc3QgUnVuM0NvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdvbmUtbm9kZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgndHdvLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW41Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFByb3Zpc2lvbkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcHJvdmlzaW9uQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgVGVhcmRvd25Db21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xucHJvZ3JhbVxuICAgIC5uYW1lKCdkY2R4IGFwdCcpXG4gICAgLnNob3dIZWxwQWZ0ZXJFcnJvcih0cnVlKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgnZGVmYXVsdCcsIHsgaXNEZWZhdWx0OiB0cnVlLCBoaWRkZW46IHRydWUgfSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIERlZmF1bHRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncGVyZm9ybWFuY2UnKVxuICAgIC5kZXNjcmlwdGlvbignUnVuIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBQZXJmb3JtYW5jZVRlc3RDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgnc2NhbGFiaWxpdHknKVxuICAgIC5kZXNjcmlwdGlvbignUnVuIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBzY2FsYWJpbGl0eSB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgU2NhbGFiaWxpdHlUZXN0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3JlcG9ydCcpXG4gICAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBhIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHJlcG9ydCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXR5cGUgPHR5cGU+JywgJ1RoZSB0eXBlIG9mIHJlcG9ydCB0byBnZW5lcmF0ZScpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhSZXBvcnRUeXBlcy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJlcG9ydENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4xJylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3QgKHJ1biAxKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW4xQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjInKVxuICAgIC5kZXNjcmlwdGlvbignQ29udGludWUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHdpdGggcnVuIDInKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuMkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4zJylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbnRpbnVlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyB3aXRoIHJ1biAzJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjNDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuNCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDb250aW51ZSB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3Rpbmcgd2l0aCBydW4gNCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW40Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29udGludWUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHdpdGggcnVuIDUnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuNUNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignUHJvdmlzaW9uIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUHJvdmlzaW9uQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3RlYXJkb3duJylcbiAgICAuZGVzY3JpcHRpb24oJ1Rlcm1pbmF0ZSB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgY2x1c3RlciBvbiBBV1MnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFRlYXJkb3duQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KS5jYXRjaCgoKSA9PiBncmFjZWZ1bEV4aXQoMSkpO1xucHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBSZWNlaXZlZCB0ZXJtIHNpZ25hbCwgdHJ5aW5nIHRvIHN0b3AgZ3JhY2VmdWxseSDwn5KqYCk7XG4gICAgZ3JhY2VmdWxFeGl0KCk7XG59KTtcbiJdLCJuYW1lcyI6WyJjd2QiLCJwd2QiLCJwcm9ncmVzc0JhciIsIkNvbW1hbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQk0sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWTtBQUNoQixJQUFJLE9BQU87QUFDWCxJQUFJLE9BQU87QUFDWCxDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3QyxJQUFJLFdBQVc7QUFDZixJQUFJLFNBQVM7QUFDYixJQUFJLFVBQVU7QUFDZCxJQUFJLFlBQVk7QUFDaEIsSUFBSSxnQkFBZ0I7QUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDSSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksSUFBSSxFQUFFLHdCQUF3QjtBQUNsQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDOEIsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUN4RCxJQUFJLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDMUosSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FB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
11222
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2NhcGl0YWxpemUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSdW5Gb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2RjYXB0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldENsdXN0ZXJVUkwuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXREdXJhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVzdWx0cy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlc3VsdHNEaXJlY3RvcnkuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2luc3RhbGxBcHAuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZWluZGV4UHJvZ3Jlc3MuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZWluZGV4LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Tm9kZU51bWJlckZvclN0YWdlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvRGF0YWJhc2UuanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9BcHBsaWNhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RDQVBULmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L3BlcmZvcm1hbmNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L3NjYWxhYmlsaXR5LmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9BY3Rpb25IYW5kbGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvY29tbWFuZHMvYXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHZhbHVlKSA9PiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuIiwiZXhwb3J0IGNvbnN0IGdldFJ1bkZvclN0YWdlID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdiYXNlbGluZSc6IHJldHVybiAxO1xuICAgICAgICBjYXNlICdyZWdyZXNzaW9uJzogcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgJ29uZS1ub2RlJzogcmV0dXJuIDM7XG4gICAgICAgIGNhc2UgJ3R3by1ub2RlJzogcmV0dXJuIDQ7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiA1O1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi4vaGVscGVycy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmNvbnN0IHRvTnVtYmVyID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAndGhpcmQnO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAnZm91cnRoJztcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuICdmaWZ0aCc7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbXB0eUxpbmUgPSAoKSA9PiBjb25zb2xlLmxvZygn4oCLJyk7XG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgIF8gICAgICAgICAgX19fX18gICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIFxcXFwgX19ffCB8XyBfX18gICB8ICAgICB8X19fIF9fX3wgfF8gX19fIF9fXyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8IC4nfCAgX3wgLid8ICB8ICAgLS18IC1ffCAgIHwgIF98IC1ffCAgX3wgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fXy98X18sfF98IHxfXyx8ICB8X19fX198X19ffF98X3xffCB8X19ffF98ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgX19fX18gICAgICAgICAgICBfX19fXyAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgIF8gXyAgIF8gXyAgIFxuICB8ICBfICB8X19fIF9fXyAgIHwgIF8gIHxfX18gX19ffCAgX3xfX18gX19fIF9fX19fIF9fXyBfX18gX19fIF9fXyAgIHxfICAgX3xfX18gX19ffCB8IHxffF98IHxfIFxuICB8ICAgICB8IC4gfCAuIHwgIHwgICBfX3wgLV98ICBffCAgX3wgLiB8ICBffCAgICAgfCAuJ3wgICB8ICBffCAtX3wgICAgfCB8IHwgLiB8IC4gfCB8ICdffCB8ICBffFxuICB8X198X198ICBffCAgX3wgIHxfX3wgIHxfX198X3wgfF98IHxfX198X3wgfF98X3xffF9fLHxffF98X19ffF9fX3wgICAgfF98IHxfX198X19ffF98XyxffF98X3wgIFxuICAgICAgICB8X3wgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFdlbGNvbWUgdG8gdGhlIGF1dG9tYXRlZCBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCAoRENBUFQpLlxuICBUaGlzIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggYWxsIHRoZSBzdGVwcyB0byBwcm9kdWNlIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlc3VsdHNcbiAgZm9yIHlvdXIgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwcm92YWwuXG5gXG59O1xuZXhwb3J0IGNvbnN0IGluaXQgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBXZSB3aWxsIG5vdyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBhcyBkb2N1bWVudGVkIGluIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBVc2VyIEd1aWRlIEZvciAke2NhcGl0YWxpemUocHJvZHVjdCl9LlxuICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBwcmlvciB0byBzdGFydGluZyB0aGUgdGVzdCBydW46XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9L1xuXG4gIE9uY2UgeW91IHN0YXJ0IHRoZSB0ZXN0IHJ1biB3ZSB3aWxsIHByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnQgb24gQVdTLiBcbiAgSU1QT1JUQU5UOiBUaGlzIGNhbiBpbmN1ciBjb3N0cy5cbiAgXG4gIFlvdSBjYW4gc3RvcCB0aGlzIHByb2Nlc3MgYXQgYW55IHRpbWUgYnkgZXhpdGluZyB0aGlzIHByb2dyYW0uIEJlIHN1cmUgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZXNldCBcbiAgdGhlIEFXUyBlbnZpcm9ubWVudCBhbmQgcHJldmVudCB1bmV4cGVjdGVkIGNvc3RzLlxuXG4gICQgZGNkeCBhcHQgdGVhcmRvd25cblxuICBZb3UgY2FuIGFsc28gcmVzdW1lL3Jlc3RhcnQgZXZlcnkgcGFydCBvZiB0aGUgdGVzdCBydW4gdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG5cbiAgJCBkY2R4IGFwdCBpbml0IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcHJvdmlzaW9uIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4zIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjUgLS1wcm9kdWN0ICR7cHJvZHVjdH1cblxuICBXZSB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiAgUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiAgTHVjZW5lIEluZGV4IHRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDUuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDYuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDcuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA4LiAgR2VuZXJhdGUgcmVwb3J0c1xuICA5LiAgVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgMTAuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmAgOiBgXG4gIDEuIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNS4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA2LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA3LiBHZW5lcmF0ZSByZXBvcnRzXG4gIDguIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDkuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmB9YCxcbn07XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uaW5nID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCAgXyAgfCBfXyAgfCAgICAgfCAgfCAgfCAgICAgfCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICAgfCAgIHwgfCAgIF9ffFxuICB8ICAgX198ICAgIC18ICB8ICB8ICB8ICB8LSAgIC18X18gICB8LSAgIC18ICB8ICB8IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gIHxfX3wgIHxfX3xfX3xfX19fX3xcXFxcX19fL3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbi5cblxuICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBvbiB5b3VyIGRpc2tcbiAgMi4gQVdTIGNyZWRlbnRpYWxzXG4gIDMuIFByb2R1Y3QgbGljZW5zZVxuYCxcbiAgICBhc2tGb3JBV1NDcmVkZW50aWFsczogKHByb2R1Y3QpID0+IGBcbiAgSW4gb3JkZXIgdG8gcHJvdmlzaW9uIHRoZSAke2NhcGl0YWxpemUocHJvZHVjdCl9IGNsdXN0ZXIsIHdlIG5lZWQgQWRtaW5pc3RyYXRvciBjcmVkZW50aWFscyBmb3IgQVdTLlxuICBQbGVhc2UgcmVmZXIgdG8gdGhlIERDQVBUIGRvY3VtZW50YXRpb24gdG8gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgdGhlIEFXUyBhY2Nlc3Mga2V5czpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vI3NldHVwLSR7cHJvZHVjdH0tZGF0YS1jZW50ZXItZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQtb24tazhzLVxuYCxcbiAgICBhc2tGb3JFbnZpcm9ubWVudDogYFxuICBXaGVuIHByb3Zpc2lvbmluZyB0aGUgY2x1c3Rlciwgd2UgbmVlZCBhIHVuaXF1ZSBlbnZpcm9ubWVudCBuYW1lLlxuICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBjbHVzdGVycyAoaS5lLiBmb3IgZGlmZmVyZW50IGhvc3QgcHJvZHVjdHMpIGFuZCB0byBpZGVudGlmeSB3aGljaCBjbHVzdGVyIHRvIHVzZSBkdXJpbmcgdGVzdGluZyAmIHRlYXJkb3duLlxuYCxcbiAgICBhc2tGb3JMaWNlbnNlOiBgXG4gIFRoZSBob3N0IHByb2R1Y3QgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG4gIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSA3MmggZGV2ZWxvcGVyIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG4gIHlvdSBjYW4gZ2VuZXJhdGUgYW4gZXZhbHVhdGlvbiBsaWNlbnNlIGZyb20gbXkuYXRsYXNzaWFuLmNvbSBvciBhc2sgQXRsYXNzaWFuIE1hcmtldHBsYWNlIERldmVsb3BlciBTdXBwb3J0IGZvciBhIHRlc3QgbGljZW5zZS5cbmAsXG4gICAgcmVhZHk6IGBcbiAgV2UgaGF2ZSBub3cgZ2F0aGVyZWQgYWxsIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwcm92aXNpb24gdGhlIGNsdXN0ZXIuXG5cbiAgISEgSU1QT1JUQU5UICEhXG4gIFxuICBXZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuICBQbGVhc2Ugbm90ZSB0aGF0IHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQgd2lsbCBpbmN1ciBBV1MgdXNhZ2UgY29zdHMuXG5gLFxuICAgIGF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkOiAn4pyUIEFXUyBjcmVkZW50aWFscyB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgdGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZDogYOKclCBUZXJyYWZvcm0gY29uZmlndXJhdGlvbiB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnNgXG59O1xuZXhwb3J0IGNvbnN0IFJ1bjEgPSB7XG4gICAgaGVhZGVyOiAoKSA9PiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyAgIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfCAgXG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgICBffCB8XyBcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX19ffFxuXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgVGhpcyB3aWxsIHByb2R1Y2UgdGhlIHBlcmZvcm1hbmNlIGJhc2VsaW5lIHJlc3VsdHMuXG5cbiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBiYXNlbGluZSB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICBzdGFydFBlcmZvcm1hbmNlVGVzdDogYFxuV2Ugd2lsbCBub3cgc3RhcnQgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gdGVzdFxuYCxcbiAgICBzdWNjZXNzOiBgXG7inJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuYCxcbiAgICBmYWlsdXJlOiAoY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFJ1bjIgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHxfICB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHwgIF98XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIFRoaXMgd2lsbCBhbGxvdyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVwb3J0LlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIEluIGFkZGl0aW9uLCBhIEx1Y2VuZSBJbmRleCBUaW1pbmcgVGVzdCBpcyBhbHNvIHBhcnQgb2YgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdHMuYCA6ICcnfVxuICBUaGUgc2Vjb25kIHJ1biBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIEJlbmNobWFyayB0aGUgcmUtaW5kZXggdGltZSB3aXRoIHlvdXIgYXBwIGluc3RhbGxlZFxuICAzLiBQZXJmb3JtYW5jZSByZXN1bHRzIGdlbmVyYXRpb24gd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuYCA6IGBcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMi4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmB9XG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICBzdGFydEx1Y2VuZUluZGV4aW5nOiBgXG4gIE5vdyB0aGF0IHRoZSBhcHAgaXMgaW5zdGFsbGVkLCB3ZSBjYW4gc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCB0aW1pbmcgdGVzdFxuICBPbmNlIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCBhIGJyb3dzZXIgd2luZG93IGlzIG9wZW5lZCB0byBjYXB0dXJlIHRoZSB0ZXN0IHJlc3VsdHMuIFxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN0YXJ0UGVyZm9ybWFuY2VUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG4gIOKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRTY2FsYWJpbGl0eVRlc3Q6IGBcbiAgUmVhZHkgdG8gc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuXG4gIFVuZm9ydHVuYXRlbHksIHRoZSB0ZXN0IHJ1biB3YXMgZmluaXNoZWQgdW5zdWNjZXNmdWwuIFxuICBQbGVhc2UgcmV2aWV3IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbiBpZiByZXF1aXJlZC5cbmA7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gb3V0cHV0ICs9IGAgICR7a2V5fTogJHt2YWx1ZX1cXG5gKTtcbiAgICAgICAgb3V0cHV0ICs9IGBcbiAgRnVsbCByZXBvcnQgY2FuIGJlIGZvdW5kIGhlcmU6XG4gICR7am9pbihyZXN1bHRzQmFzZURpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKX1cblxuICBZb3UgY2FuIHJlc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9IC0tcHJvZHVjdCAke3Byb2R1Y3R9IC0tY3dkICR7Y3dkfSAtLWVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XG5gO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHlSZXBvcnRNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX18gICAgX19fX18gX19fX18gX19fX18gX18gICAgX19fX18gX19fX18gX18gX18gXG4gIHwgICBfX3wgICAgIHwgIF8gIHwgIHwgIHwgIF8gIHwgX18gIHwgICAgIHwgIHwgIHwgICAgIHxfICAgX3wgIHwgIHxcbiAgfF9fICAgfCAgIC0tfCAgICAgfCAgfF9ffCAgICAgfCBfXyAtfC0gICAtfCAgfF9ffC0gICAtfCB8IHwgfF8gICBffFxuICB8X19fX198X19fX198X198X198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198IHxffCAgIHxffCAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCBfXyAgfCAgIF9ffCAgXyAgfCAgICAgfCBfXyAgfF8gICBffCAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8ICAgIC18ICAgX198ICAgX198ICB8ICB8ICAgIC18IHwgfCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICBcbmBcbn07XG5leHBvcnQgY29uc3QgVGVhcmRvd24gPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX18gIF9fX19fIF8gXyBfIF9fX19fIFxuICB8XyAgIF98ICAgX198ICBfICB8IF9fICB8ICAgIFxcXFx8ICAgICB8IHwgfCB8ICAgfCB8XG4gICAgfCB8IHwgICBfX3wgICAgIHwgICAgLXwgIHwgIHwgIHwgIHwgfCB8IHwgfCB8IHxcbiAgICB8X3wgfF9fX19ffF9ffF9ffF9ffF9ffF9fX18vfF9fX19ffF9fX19ffF98X19ffFxuXG4gIFdlIHdpbGwgbm93IHRlcm1pbmF0ZSB0aGUgY2x1c3RlciB1c2VkIGluIHRoZSBEYXRhIENlbnRlciBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSB0ZXN0aW5nLlxuYFxufTtcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGluc3RhbGwgPSBhc3luYyAoY3dkKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFxuICBTdGFydCBwcm92aXNpb25pbmcgQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uXG4gIFVzaW5nIERDQVBUIGNvbmZpZ3VyYXRpb24gZnJvbSAke2N3ZH1cbmApO1xuICAgIGNvbnN0IGJhc2VEaXIgPSBqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cycpO1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihiYXNlRGlyLCAnb3V0cHV0cy5qc29uJyksICcjIHRlcnJhZm9ybSBvdXRwdXQnLCAndXRmLTgnKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICctaXQnLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vZGNhcHQudGZ2YXJzOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vY29uZi50ZnZhcnNgLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vZGNhcHQtc25hcHNob3RzLmpzb246L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9kY2FwdC1zbmFwc2hvdHMuanNvbmAsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9sb2dzOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vbG9nc2AsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9vdXRwdXRzLmpzb246L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9vdXRwdXRzLmpzb25gLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnLi9pbnN0YWxsLnNoJywgJy1jJywgJ2NvbmYudGZ2YXJzJ1xuICAgICAgICBdLCB7IGN3ZDogYmFzZURpciwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcbuKclCBGaW5pc2hlZCBwcm92aXNpb25pbmcgQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uYCk7XG59O1xuZXhwb3J0IGNvbnN0IHJ1blRlc3QgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICcuL2FwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgICAgICAgICAnLWUnLCBgUkVHSU9OPXVzLWVhc3QtMmAsXG4gICAgICAgICAgICAnLWUnLCBgRU5WSVJPTk1FTlRfTkFNRT0ke2Vudmlyb25tZW50fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvYnp0X29uX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2J6dF9vbl9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdienRfb25fcG9kLnNoJywgYCR7cHJvZHVjdH0ueW1sYFxuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCByZWdyZXNzaW9uUmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuMURpciwgcnVuMkRpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4xRGlyfTovcmVzdWx0cy9ydW4xYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjJEaXJ9Oi9yZXN1bHRzL3J1bjJgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbi9kY2FwdCcsXG4gICAgICAgICAgICAnY3N2X2NoYXJ0X2dlbmVyYXRvci5weScsICdwZXJmb3JtYW5jZV9wcm9maWxlLnltbCdcbiAgICAgICAgXSwgeyBjd2QsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGdlbmVyYXRpbmcgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuM0RpciwgcnVuNERpciwgcnVuNURpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4zRGlyfTovcmVzdWx0cy9ydW4zYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjREaXJ9Oi9yZXN1bHRzL3J1bjRgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuNURpcn06L3Jlc3VsdHMvcnVuNWAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3NjYWxlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgU2NhbGFiaWxpdHkgQmVuY2htYXJrIFJlcG9ydGApO1xufTtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdGUgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCkgPT4ge1xuICAgIGNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy0td29ya2RpcicsICcvL2RhdGEtY2VudGVyLXRlcnJhZm9ybScsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS90ZXJtaW5hdGVfY2x1c3Rlci5weTovZGF0YS1jZW50ZXItdGVycmFmb3JtL3Rlcm1pbmF0ZV9jbHVzdGVyLnB5YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ3Rlcm1pbmF0ZV9jbHVzdGVyLnB5JywgJy0tY2x1c3Rlcl9uYW1lJywgYGF0bGFzLSR7ZW52aXJvbm1lbnR9LWNsdXN0ZXJgLCAnLS1hd3NfcmVnaW9uJywgJ3VzLWVhc3QtMidcbiAgICAgICAgXSwgeyBjd2Q6IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIHRlcm1pbmF0aW5nIHRoZSBEQyBjbHVzdGVyIG9uIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCBhcyBwd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBzaW1wbGVHaXQgZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QXB0RGljdG9yeSA9IGFzeW5jIChjd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgZm9yY2UpID0+IHtcbiAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IHJlc3VsdCA9IGN3ZC5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgID8gY3dkLnJlcGxhY2UoJ34vJywgaG9tZWRpcigpKVxuICAgICAgICA6IGN3ZC5zdGFydHNXaXRoKCcuLycpXG4gICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgOiBjd2QgPT09ICcuJ1xuICAgICAgICAgICAgICAgID8gcHdkKClcbiAgICAgICAgICAgICAgICA6IGN3ZDtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBxdWVzdGlvbnMgZmlyc3RcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgQVBUIGRpcmVjdG9yeSwgd2Ugd2lsbCBiZSB1c2luZyB0aGUgY3VycmVudCBkaXJlY3RvcnkuLi5cbiAgICAgICAgbGV0IHVzZUN1cnJlbnREaXJlY3RvcnkgPSBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZTtcbiAgICAgICAgLy8gLi4udW5sZXNzIHRvbGQgb3RoZXJ3aXNlXG4gICAgICAgIGlmIChpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgV2UndmUgZm91bmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5OlxuICAke3Jlc3VsdH1cbmApO1xuICAgICAgICAgICAgdXNlQ3VycmVudERpcmVjdG9yeSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEbyB5b3Ugd2lzaCB0byB1c2UgdGhpcyBkaXJlY3Rvcnk/YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBnb2luZyB0byB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBhc2sgZm9yIHRoZSBhbHRlcm5hdGl2ZVxuICAgICAgICBsZXQgZGlyZWN0b3J5ID0gcmVzdWx0O1xuICAgICAgICBpZiAoIXVzZUN1cnJlbnREaXJlY3RvcnkpIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0IGlzIGxvY2F0ZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNsYXRlIGNvbW1vbiByZWxhdGl2ZSBwYXRocyB0byBhYnNvbHV0ZSBwYXRoc1xuICAgICAgICBkaXJlY3RvcnkgPSBkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnfi8nKVxuICAgICAgICAgICAgPyBkaXJlY3RvcnkucmVwbGFjZSgnfi8nLCBob21lZGlyKCkgKyAnLycpXG4gICAgICAgICAgICA6IGRpcmVjdG9yeS5zdGFydHNXaXRoKCcuLycpXG4gICAgICAgICAgICAgICAgPyBkaXJlY3RvcnkucmVwbGFjZSgnLi8nLCBwd2QoKSArICcvJylcbiAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeSA9PT0gJy4nXG4gICAgICAgICAgICAgICAgICAgID8gcHdkKClcbiAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rvcnk7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm92aWRlZCBhbHRlcm5hdGl2ZSBpcyBhIERDQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0RpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhyZXNvbHZlKGpvaW4oZGlyZWN0b3J5LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKSk7XG4gICAgICAgIGlmICghaXNEaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCBhc2sgaWYgd2UgbmVlZCB0byBjbG9uZSBpdCBmcm9tIEdpdGh1YlxuICAgICAgICAgICAgY29uc3QgbXVzdENsb25lQVBUID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBkaXJlY3RvcnkgZWl0aGVyIGRvZXNuJ3QgZXhpc3QsIG9yIGl0IGRvZXNuJ3QgY29udGFpbiB0aGUgQXBwIFBlZm9ybWFuY2UgVG9vbGtpdC4gRG8geW91IHdhbnQgdG8gY2xvbmUgRENBUFQgZnJvbSBzb3VyY2U/YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbXVzdCBjbG9uZSBpdCBmcm9tIEdpdGh1Yiwgd2Ugc2hvdWxkIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBpZiAobXVzdENsb25lQVBUKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2ltcGxlR2l0KCkuY2xvbmUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQuZ2l0JywgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG5lZWRzIHRvIGJlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIChmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nKVxuICAgICAgICBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0RlZmF1bHRDb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBjb25maXJtIHRoYXQgdGhlIGNob3NlbiBkaXJlY3RvcnkgaXMgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgRENBUFQgKG1hc3RlciBicmFuY2gpJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIG1hc3RlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseS4uLlxuICAgICAgICAgICAgY29uc3QgaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBoYXMgYSBEQ0FQVCBpbnN0YWxsYXRpb24gd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gLi4uYnV0IGFsc28sIE5vIGlzIG5vdCBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmICghaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGhhdmUgYXBwLXNwZWNpZmljIGFjdGlvbnMgaW4gb3JkZXIgdG8gY29udGludWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIHJlc3VsdCB0byB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5XG4gICAgICAgIHJlc3VsdCA9IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB3ZSB3aWxsIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgfVxuICAgIGVsc2UgaWYgKG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAocmVzdWx0LmVuZHNXaXRoKCcuZGNkeC9kY2FwdCcpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdHMgd2UgY2FuIHVzZSBpdFxuICAgICAgICAvLyBPdGhlcndpc2UgdXNlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBlbnN1cmUgYSBmcmVzaCBub24tcGVyc2lzdGVudCBjaGVja291dFxuICAgICAgICByZXN1bHQgPSAhZXhpc3RzU3luYyhyZXN1bHQpXG4gICAgICAgICAgICA/IHJlc3VsdFxuICAgICAgICAgICAgOiBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2RjYXB0Jyk7XG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciBvZiB0aGUgY2hvc2VuIGRpcmVjdG9yeVxuICAgICAgICBjb25zb2xlLmxvZygnICBJbnN0YWxsaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBEQ0FQVCBmcm9tIHNvdXJjZSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBybVN5bmMocmVzdWx0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHJpZXZlIERDQVBUIGZyb20gZ2l0aHViXG4gICAgICAgIGF3YWl0IHNpbXBsZUdpdCgpLmNsb25lKCdodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0LmdpdCcsIHJlc3VsdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfinJQgRmluaXNoZWQgaW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIGFwcCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBtYWtlIHN1cmUgdGhhdCBpdCBleGlzdHNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIHdlIGNhbm5vdCBjb250aW51ZVxuICAgICAgICBpZiAoIWlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAke3Jlc3VsdH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBEQ0FQVCBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5IChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHR9YCk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgIH1cbiAgICAvLyBUaGlzIHNob3VsZCBub3Qgb2NjdXIsIGJlY2F1c2UgZWl0aGVyIHdlIGhhdmUgZXN0YWJsaXNoZWQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGhhcyBEQ0FQVFxuICAgIC8vIG9yIHdlIGhhdmUgY2xvbmVkIGl0IGludG8gYSAobmV3KSBkaXJlY3RvcnkuIFRoaXMgaXMgbWVyZWx5IGEgY2hlY2sgZm9yIGlmIHRoZSBsYXR0ZXIgZmFpbGVkLlxuICAgIGlmICghZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSAke3Jlc3VsdH1gKTtcbiAgICB9XG4gICAgLy8gU29tZSBhZGRpdGlvbmFsIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB3ZSBhcmUgaW4gYSB2YWxpZCBEQ0FQVCBkaXJlY3RvcnlcbiAgICBjb25zdCBoYXNFbnZGaWxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpKTtcbiAgICBjb25zdCBoYXNTbmFwc2hvdEpTT04gPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJykpO1xuICAgIGNvbnN0IGhhc1RlcnJhZm9ybVZhcmlhYmxlcyA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgIGlmICghaGFzRW52RmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnYXdzX2VucycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2F3c19lbnZzJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNTbmFwc2hvdEpTT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LXNuYXBzaG90cy5qc29uJyBmaWxlLiBFeHBlY3RlZCB0byBmaW5kIGl0IGluICR7am9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQtc25hcHNob3RzLmpzb24nKX1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWhhc1RlcnJhZm9ybVZhcmlhYmxlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnZGNhcHQudGZ2YXJzJyBmaWxlLiBFeHBlY3RlZCB0byBmaW5kIGl0IGluICR7am9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJyl9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRSZXBvcnQgPSAoYmFzZURpciwgdHlwZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXBvcnQgc3VtbWFyeSB0byBjaGVjayBpZiB0aGUgcHJvdmlkZWQgYmFzZURpciBhbHJlYWR5IGNvbnRhaW5zIHRoZSByZXBvcnRcbiAgICBjb25zdCBzdW1tYXJ5RmlsZU5hbWUgPSB0eXBlID09PSAncGVyZm9ybWFuY2UnID8gJ3BlcmZvcm1hbmNlX3Byb2ZpbGVfc3VtbWFyeS5sb2cnIDogJ3NjYWxlX3Byb2ZpbGVfc3VtbWFyeS5sb2cnO1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGxldCByZXN1bHRzRGlyID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsIHN1bW1hcnlGaWxlTmFtZSkpID8gYmFzZURpciA6IG51bGw7XG4gICAgaWYgKCFyZXN1bHRzRGlyKSB7XG4gICAgICAgIC8vIExldCdzIGdvIGZpbmQgb3VyIHJlcG9ydCBkaXJlY3RvcnlcbiAgICAgICAgcmVhZGRpclN5bmMoYmFzZURpcikuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgYXJlIGRpcmVjdG9yeSwgbm8gbmVlZCB0byBjb250aW51ZSBsb29raW5nXG4gICAgICAgICAgICBpZiAocmVzdWx0c0Rpcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBlbnRyeVxuICAgICAgICAgICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhqb2luKGJhc2VEaXIsIGl0ZW0pKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgYSByZXBvcnQgZGlyZWN0b3J5XG4gICAgICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpICYmIGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBpdGVtLCBzdW1tYXJ5RmlsZU5hbWUpKSkge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGZvdW5kIGl0IVxuICAgICAgICAgICAgICAgIHJlc3VsdHNEaXIgPSBqb2luKGJhc2VEaXIsIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBmb3VuZCBhIHJlcG9ydCBkaXJlY3RvcnksIGFuZCBpZiBub3Qgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgaWYgKHJlc3VsdHNEaXIgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXBvcnRzIGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgKCR7YmFzZURpcn0pYCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzRGlyO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJlYWRkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVwb3J0RGlyZWN0b3J5ID0gYXN5bmMgKGN3ZCwgZm9yY2UpID0+IHtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlIHJlcG9ydHMgZGlyZWN0b3J5XG4gICAgY29uc3QgcGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3Jlc3VsdHMnLCAncmVwb3J0cycpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSByZWFkZGlyU3luYyhwYXRoKS5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIG1ha2Ugc3VyZSB0byBhc2sgbmljZWx5IGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlcG9ydHNcbiAgICAgICAgICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXJlIGFyZSBzdGlsbCBwcmV2aW91cyByZXBvcnRzIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZXJlIGFyZSBzdGlsbCByZXBvcnRzIGZyb20gcHJldmlvdXMgdGVzdCBydW5zIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTpcbiAgJHtwYXRofVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBjb25maXJtYXRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSXMgaXQgT0sgaWYgd2UgcmVtb3ZlIGFsbCBwcmV2aW91cyByZXBvcnRzPycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZW0sIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcmVwb3J0IGNhbiBvbmx5IGJlIGdlbmVyYXRlZCBpZiBhbGwgcHJldmlvdXMgcmVwb3J0cyBoYXZlIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgcmVwb3J0c1xuICAgICAgICAgICAgcm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIFJldHVybiB0aGUgcGF0aCB0byB0aGUgcmVwb3J0cyBkaXJlY3RvcnlcbiAgICByZXR1cm4gcGF0aDtcbn07XG4iLCJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IFByZXNzVG9Db250aW51ZVByb21wdCBmcm9tICdpbnF1aXJlci1wcmVzcy10by1jb250aW51ZSc7XG5pbnF1aXJlci5yZWdpc3RlclByb21wdCgncHJlc3MtdG8tY29udGludWUnLCBQcmVzc1RvQ29udGludWVQcm9tcHQpO1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JVc2VySW5wdXQgPSBhc3luYyAobWVzc2FnZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCB7IGtleSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgIHR5cGU6ICdwcmVzcy10by1jb250aW51ZScsXG4gICAgICAgIGFueUtleTogdHJ1ZSxcbiAgICAgICAgcHJlc3NUb0NvbnRpbnVlTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgd2hlbjogIWZvcmNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGtleSB8fCB7IHZhbHVlOiB1bmRlZmluZWQgfTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgcmVncmVzc2lvblJlcG9ydCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJlcG9ydCB9IGZyb20gJy4vZ2V0UmVwb3J0JztcbmltcG9ydCB7IGdldFJlcG9ydERpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVwb3J0RGlyZWN0b3J5JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFBlcmZvcm1hbmNlUmVwb3J0TWVzc2FnZXMuaGVhZGVyKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBwZXJmb3JtYW5jZSBwcm9maWxlIHJlcG9ydCBjb25maWd1cmF0aW9uIFlBTUxcbiAgICAgICAgY29uc3QgeW1sRmlsZVBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXBvcnRzX2dlbmVyYXRpb24nLCAncGVyZm9ybWFuY2VfcHJvZmlsZS55bWwnKTtcbiAgICAgICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMoeW1sRmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uLCBzbyBsZXQncyB0dXJuIGl0IGludG8gSlNPTlxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gcGFyc2UoY29udGVudHMpO1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBtYW5hZ2VkIHRvIGNyZWF0ZSBhIHZhbGlkIEpTT04gb3V0cHV0XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAvLyBBZGQgdGhlIHBlcmZvcm1hbmNlIGJhc2VsaW5lIGFuZCByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAvLyB0byB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnJ1bnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnd2l0aG91dCBhcHAnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW4xJ1xuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGggYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW4yJ1xuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgLy8gVHVybiB0aGUgY29uZmlndXJhdGlvbiBiYWNrIGludG8gWUFNTFxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gc3RyaW5naWZ5KGNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIHBlcmZvcm1hbmNlX3Byb2ZpbGUueW1sIGZpbGUgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOlxuXG4ke291dHB1dH1cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7eW1sRmlsZVBhdGh9XG5gKTtcbiAgICAgICAgICAgIC8vIEdpdmUgdGhlIHVzZXIgYSBtb21lbnQgdG8gcHJvY2VzcyB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgICAgICAvLyBXcml0ZSB0aGUgYWRqdXN0ZWQgcGVyZm9ybWFuY2UgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoeW1sRmlsZVBhdGgsIG91dHB1dCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nLiBBYm9ydCBhYm9ydCBhYm9ydCFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmcgcmVwb3J0IGdlbmVyYXRpb24gY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlcG9ydEJhc2VEaXIgPSBhd2FpdCBnZXRSZXBvcnREaXJlY3RvcnkoY3dkLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgYWN0dWFsIHJlcG9ydFxuICAgIGF3YWl0IHJlZ3Jlc3Npb25SZXBvcnQoY3dkLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncnVuMScpLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncnVuMicpKTtcbiAgICAvLyBHZXQgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBjb25zdCByZXBvcnREaXIgPSBnZXRSZXBvcnQocmVwb3J0QmFzZURpciwgJ3BlcmZvcm1hbmNlJyk7XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlcG9ydERpciwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUnKSwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnkgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGVtcHR5TGluZSwgU2NhbGFiaWxpdHlSZXBvcnRNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UmVwb3J0IH0gZnJvbSAnLi9nZXRSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0UmVwb3J0RGlyZWN0b3J5IH0gZnJvbSAnLi9nZXRSZXBvcnREaXJlY3RvcnknO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlSZXBvcnRNZXNzYWdlcy5oZWFkZXIpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHNjYWxhYmlsaXR5IHJlcG9ydCBjb25maWd1cmF0aW9uIFlBTUxcbiAgICAgICAgY29uc3QgeW1sRmlsZVBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXBvcnRzX2dlbmVyYXRpb24nLCAnc2NhbGVfcHJvZmlsZS55bWwnKTtcbiAgICAgICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMoeW1sRmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uLCBzbyBsZXQncyB0dXJuIGl0IGludG8gSlNPTlxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gcGFyc2UoY29udGVudHMpO1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBtYW5hZ2VkIHRvIGNyZWF0ZSBhIHZhbGlkIEpTT04gb3V0cHV0XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAvLyBBZGQgdGhlIHNjYWxhYmlsaXR5IHRlc3Qgb3V0cHV0IGRpcmVjdG9yaWVzIHRvIHRoZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ucnVucyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICcxIE5vZGUnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW4zJ1xuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzIgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnZXhwZXJpbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjQnXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnNCBOb2RlcycsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuNSdcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gYmFjayBpbnRvIFlBTUxcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ2lmeShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBzY2FsZV9wcm9maWxlLnltbCBmaWxlIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjpcblxuJHtvdXRwdXR9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke3ltbEZpbGVQYXRofVxuYCk7XG4gICAgICAgICAgICAvLyBHaXZlIHRoZSB1c2VyIGEgbW9tZW50IHRvIHByb2Nlc3MgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFkanVzdGVkIHNjYWxhYmlsaXR5IHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHltbEZpbGVQYXRoLCBvdXRwdXQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZy4gQWJvcnQgYWJvcnQgYWJvcnQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgc2NhbGFiaWxpdHlSZXBvcnQoY3dkLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncnVuMycpLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncnVuNCcpLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncnVuNScpKTtcbiAgICAvLyBHZXQgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBjb25zdCByZXBvcnREaXIgPSBnZXRSZXBvcnQocmVwb3J0QmFzZURpciwgJ3NjYWxhYmlsaXR5Jyk7XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlcG9ydERpciwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3NjYWxlX3Byb2ZpbGUnKSwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG59O1xuIiwiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRPdXRwdXREaXJlY3RvcnkgPSAoY3dkLCB0aW1lc3RhbXApID0+IHtcbiAgICAvLyBDcmVhdGUgdGhlIHRlc3QgcnVuIElEICh1c2VkIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHJ1bklkID0gdGltZXN0YW1wIHx8IGZvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZC1ISC1tbScpO1xuICAgIC8vIEVpdGhlciB1c2UgdGhlIHByb3ZpZGVkIG91dHB1dCBkaXJlY3RvcnksIG9yIGRlZmF1bHQgdG8gdGhlIGhvbWUgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGN3ZCB8fCBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2FwdCcpO1xuICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIHJldHVybiBqb2luKGJhc2VEaXIsIHJ1bklkKTtcbn07XG4iLCJpbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdCA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0KHtcbiAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjaG9vc2UgdGhlIHByb2R1Y3QgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJ1biBEQ0FQVGAsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0ppcmEnLCB2YWx1ZTogJ2ppcmEnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdDb25mbHVlbmNlJywgdmFsdWU6ICdjb25mbHVlbmNlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFtYm9vJywgdmFsdWU6ICdiYW1ib28nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCaXRidWNrZXQnLCB2YWx1ZTogJ2JpdGJ1Y2tldCcgfVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcGFzc3dvcmQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QVdTQ3JlZGVudGlhbHMgPSBhc3luYyAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICAvLyBUcnkgZ2V0dGluZyB0aGUgQVdTIGNyZWRlbnRpYWxzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgeyBBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIH0gPSBwcm9jZXNzLmVudjtcbiAgICAvLyBJZiB0aGV5IGV4aXN0cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHJldHVybiB0aGVtIGltbWVkaWF0ZWx5XG4gICAgaWYgKEFXU19BQ0NFU1NfS0VZX0lEICYmIEFXU19TRUNSRVRfQUNDRVNTX0tFWSkge1xuICAgICAgICByZXR1cm4gW0FXU19BQ0NFU1NfS0VZX0lELCBBV1NfU0VDUkVUX0FDQ0VTU19LRVldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgbm90IGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIGZvciB0aGVtXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAvLyBTaG93IGEgbWVzc2FnZSBhc2tpbmcgbmljZWx5XG4gICAgICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JBV1NDcmVkZW50aWFscyhwcm9kdWN0KSk7XG4gICAgICAgIGNvbnN0IGF3c19hY2Nlc3Nfa2V5X2lkID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBBY2Nlc3MgS2V5IElEYCxcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoaW5wdXQpID0+IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQubGVuZ3RoID4gMFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5ID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBTZWNyZXQgQWNjZXNzIEtleWAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV07XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgYW5kIHRoZSBjcmVkZW50aWFscyBoYXZlIG5vdCBiZWVuIGZvdW5kLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3JcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBV1MgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLiBQbGVhc2UgcHJvdmlkZSB0aGUgJ0FXU19BQ0NFU1NfS0VZX0lEJyBhbmQgJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGVzYCk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0RW52aXJvbm1lbnROYW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JFbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYEVudmlyb25tZW50IG5hbWVgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImV4cG9ydCBjb25zdCB0aW1lYm9tYiA9IHtcbiAgICAnamlyYSc6ICdBQUFDQkEwT0RBb1BlTnA5a2wxdjJqQVVodS96SzQ2ME95UUhTTHVWSWtVYVRid05WQktVaEVuYnVnc1REdUEyc1NQYmdiRmZQeE9DMWkrNHlFWE81K3ZuUFIreUdpR1NXL0N1b1hjN3ZCb012VDRFTkFPdjUvV2N0VUlVRzFsVnFOeDducVBRU0pmY2NDbDhHbVUwbVNYamxEcFJYUzVReGF1NVJxVjkwbmNDS1F6TFRjUks5RXU5NDRJcC9jUS9NMU13clRrVGJpNUxaMWFyZk1NMGhzeWc3L1g2QTlMdkU4OXoyajNadnNKbVFCQlBwelFKeHFQN1U0citxYmphTjMyekcrL2JhUjJkTWw2YzM1ZWkycUlhaC80ZHZhSGtPdnpwa1UveDVJWjh2Ym9kT0k5Y01iZFNjbG5ueGozOEVDMVhac2NVdW5ZeTM2SnZWSTNPeEdabWJaWGR6d0lVNWxWSldpOTBybmpWUUdvaTcwQjg3M0dOaFBPUU81MU9GR2ZrUzV5UVdSS0g4eUFieHhHWnA5UW0vRUNocGJHRXhSN01CcUdkQWxUa2Nva0s3TU1lTVRmd2EyTk05VERzZHRmU2ZRR25XeHc3Q0I0N2Zyc1FTaERTd0pKcm8vaWlObWduY3cxR1FsNXJJMHRydGV0WTRzS2dZQ0ovWTRxVkZTUjBsTkdRM1AwNGFEeHJUS3ZXT2pNWFQwTHV4Q1UzM3R4YVNpUGZmdVJqcjNmc08vbUM2b2cvVm1zbXVHWU4wSWo5M1RGWWNWWHVuUWFhRGI0K3dKYkZkN3ZnME9JNUlmNTNORU50b0syQWxWUXdHU2NqU0Z0NWxyamRXeW11OFdFSWdTd3RwcHl6QXNMZ3hSazhQNWhHOVBNQTNiS2lQc3Bkc1VMakpSd1g3dWtmNS9OWDdUQXRBaFVBaFFTSHo5RGd5Y09YN3djd0VSTUpiM1RMR2I0Q0ZHa0IveFVXU1JLM0JaTHJQRjlSbjZabXJVcUpYMDJvYycsXG4gICAgJ2NvbmZsdWVuY2UnOiAnQUFBQ3pnME9EQW9QZU5wOVZPOXYyakFRL1o2L3d0SytJWVdHc0VLSEZHbVFtSmF1L0dnSW05aVlKaE1PWXByWWtlMUE0YStmU2NoR0t0cVBQdnZldlh2M3pwLzZncUxITEViMkhiS3NUdk56cDlsQzk4TUEyWmJkTktZZ2RpQUdudFBEUTJ6Njg4SGNkSC9hTTdQNW8ya1pUelFFSmlFNHBEQWlDVGdCbmdhRDBiMFJDcjVmMVM5dUhmY1VXWFNRQnp1SWVRckNDRGxiMTBtbzZBNGNKVExRU1ZsSWx6RlVnZ3BJOGlja01iQVZFYkkreXBJbGlQRzZSNUlsNXo0a1hFRjNBMHhKcDFHeXdhOHBGUWVQS0hBbURkdDYrQTljSlZRRUs1eVdtaE1WOEhHWkxSV2t3ckY4UFpNZ3BHUGZHaDdJVU5CVVVjNmNBS1JDY1ZFWXJibEFhWnh0S0VPcnNxajhWL1VTODV6eFhkK2ZVR3dENzBpY2tSd3lmN0FSQUN6aXFVWW8rOElybXQvalVZRDlpVCtZWW1OSUtGUEFDQXV2eUhJYVFFVVNIWWd6MEc4cm9yZ0M4cnA1cXZhRVpWcDNwdDB1OHN2ZTNUaVRDc1NJcjBBNmxsR3IxVndmZHdQc21iMjVQampiVndxMkVjWmNtNm5TNkRLWCtJM2lUMXlQL0N5NDJUQmU0RkFLMFdoWlZ0dTZhelliWmVabEIwVTJ3cnBua1FvcXE0MFV5c3Q2N1JxQjl6VThrNjRvbFllcUtuR21OQ3pXaXNlT1VvS3doTExvSzFFeGtaSVNWZzk1Y3IzWk4vWXFkdWVTWVc2NDkvbWRyZkpBWk9RTTNiM2I5NkRSdWhWazMyNjFra0Z2ZXh3ZTQxVVF0Sk4xMnU1R3o2R2NQVDdQbjcxSDcwdDY5Q1BjYngvYTlyY2ozckR1d2xrNHhwcktDQTVWTitvSmpzYUIyUi83NXNRZmV6TTNHSXhINW15S1Q2UE4vUUVydER3Z0ZRRTZFOVZEQ0xVWnROOEYzMEtvMEs5SXFYVFJ1Ym5aOEhwRmxadHpBeVlVR2IvcnlPT0ljWVZXVkNwQmw1a0NqVXdsVWh5RjJtWTgwV2FvWHhkekVoT1dlMllzTm9SUldXeE10NnhYL2hINlA1dXhGOGIzckxKSWx6MUxwUVc5NXBRUHZxZkxxMGttd29oSWVMczJsOVBNemZRNDhMdnZXVGJmTVkxQVhEZzlLSkRMQ1YyQzlIVU1IK0NhSmZPZnVkaS92MGtJR1Zzd0xBSVVFTVE5WDc3Z3FHQmRmSDBISXpCYVY4TmFkUFVDRkJuK1JpVUE0RCtJcVZRcFRUb3VMVlk2NmFDR1gwMjEyMScsXG4gICAgJ2JpdGJ1Y2tldCc6ICdBQUFCbWcwT0RBb1BlTnA5VWwxdjB6QVVmYyt2c01SYkphZEp0akdwVWlTMkpKUk9OT2xhQjRTQUI5ZTlXMHhUdTdKdkN2MzNlSW1ET29SNHZlZmU0L1BoTjU5aFI1YmNrUGlXUk5lektKNUZDWmt2R1VtaUpBNHlyWkFMTFBrQlVySFhvdEVudTVlQlJXNmI4S01Vb0N5dzh4SDZCVlpzMktLY2UzVEpwVUpRWEFrb2ZoMmxPZWNjSVYxZGZSaEpDN2ZSWHJKdXdKekFMUEwwL3FGK3BJOVhHYVB6K3VHR3NwdmJrZFJ4OEF3Y3IwblJkT0NubFhubVNscU9VcXYwRGx0dXJlVEtnNnZPaUlaYjZKOVBvdmlhUm05cEhIczBNOUNmL1J2MUR2L1NQNWxNeW9yUjk5V2FydFpWWG1kc1VaVzAzaFFPU0h0Q0YrbjJUTEFCNGhsSW9ZVGVnU0ZIbzMrQVFQSzFRVHgrbTAybnp6cmtvK0pRNk1PMEhTNG9EQmZmUTVKcm9qU1NuYlJvNUxaRGNNelNFdFJFZEJiMUFZd05SenNYZmYwSmdqQ3dMakcvNG1CNWdpRStKemhiRjNlc3lPbjlseGYxRjIxNDVhNk9XdTJWL3FtQy8yZFZkb2N0bU9xcHRrNVBHaWQrWEp4NDJ3M05QUEhXUXVEOWZYSmJMOFBrdGZMaFUyQXYrTjJyWU1ZNnVVRUZwbmNZL0FZQ2dmRkFNQ3dDRkh6a0Jsa0dIL3ZSZFRlZUJTZlVNelVEYjRXMkFoUXlNODkzV1BnMlE4b1FBWVJkQlN5S2VWVWRvZz09WDAyanInLFxuICAgICdiYW1ib28nOiAnQUFBQjN3ME9EQW9QZU5wOVVsdHIyekFZZmZldkVPd3RvTVIxMHFZTEdKYllXc25vN0dBN2c5MGVaUGxyb3RXV2pDU256WDc5RkY4SVlXa2ZEUEozT2Vkd3p2Y2gyemRvV1N2a3pwRjd2NWpkTHJ3cENraWFJYy8xUE9lUk14QWFzbU1ORWEzQXoyeG5IVDA0Z1FKcXVCUWhOZUI3N3ZRR3V6UHMzams1clhJcHg1UVpmZ0RmcUFhR1V0UlVPYWo0YWRYK1BrcEd5K1VPaE5FK3ZuR0c1bGFEYWdzOUwzbXR1VG9PSkY1UGtqYTVab3JYSndFWEhHK3BKUWRhTnZTL2NZdExBeXNCVkZmdTE5ZWh2eFhQUXI0SUp3VjFBR1VMS3pJbmVCYis4UEJkL0dXT0g2WWY3NTFObzlpZWF1amxlWU1IS1lsOCsrRmIxM1ZHbzFFVVovaHpuT0JORW9mYklGdkhFZDZteERiODFrUW9VSDVFWmcrb3AwZEVNRm1BUXJXU2Y0QVo5SE52VFAxck1abnNyTEdtcEZwektzWk1WcE95MjhEUWJmd2VvMUFpSVEwcXVEYUs1NDBCaTh3MU1oS3hSaHRaV1h2SFRnaG4rekxRQnZVNDZFbGExckxaY1lFS09FQXBhenZ2ZktYY2VpU29ZRy9rY1RYaFRVbEZHK1hWYmdLVk5IQStnRjdCTjh0M1V1VTVzZHBSd1hVWEdubWxWVjBDQ21SVlUzRzhFdmY1TUtVdzl2cUlGVjM2dFg3bW9OamZvN0NQVHhmZW5aSUpFckxNU0loWDMwOXB2RGQ4U1VnSzNzbUtNcEpza25WS0J0cjI2dDREK2dkM0FDNXFNQ3dDRkhPYVRXZkZ2TENMSlBmdDNxa3RWbzNGYWZtWkFoUm9qYjlJQXhqOEtFcVBEUXkwc3RvczM5NFNRUT09WDAybXEnXG59O1xuZXhwb3J0IGNvbnN0IGFwcDNob3VyID0gJ0FBQUJDQTBPREFvUGVOcGRqMDFQd2tBVVJmZnpLeVp4WjFJeVV6QVJrbGxRMjRnUmFRTXRHbmFQOFZFbXRqUE5mRlQ1OXlKVkZ5emZ1YmtuNzk2VXgwQno2U21iVU01bmJEemo5N1JJU3hvekhwTVVuYlNxODhwb1VhTHp0RkVTdFVONk1KWjJUYWlWcHUvWVkyTTZ0STZzUXJ0SG14OHFkNzRFWitUQkl2eVVVL0FvWXM3amlFMGp6a25XUXhNdWlmQTJJQmxVYm5RN0F1bFZqd045QWFVOWF0QVNzNjlPMmRORlU0d1hKTGMxYU9VR3c5dzM0SndDVFRab2U3UlBxVWdlcDJYMFZtMG4wZk51dDRnU3hsL0pjbmo5bkZiNlE1dFAvVWV1M0wrMFBIVzRnaFpGbW0yelpWNWs2Lzk1Q2JSN1k5YllHby96R3JWM0lyNGpSYkR5Q0E2dnQzNERPOHAzU0RBc0FoUW5KakxENWs5RnIzdWFJemtYS2Y4M281dkRkUUlVZTRYZXF1TkNDM0QrOWh0OVpZaE5aRkttbmhjPVgwMmRoJztcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgdGltZWJvbWIgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2xpY2VuY2VzJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBnZXRIb3N0TGljZW5zZSA9IChwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICByZXR1cm4gdGltZWJvbWJbcHJvZHVjdF07XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JMaWNlbnNlKTtcbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgTGljZW5zZWAsXG4gICAgICAgIGRlZmF1bHQ6IHRpbWVib21iW3Byb2R1Y3RdLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCByZXBsYWNlTGluZXNJbkZpbGUgPSAocGF0aCwgcmVwbGFjZXIpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZXN1bHQgPSBsaW5lcy5tYXAocmVwbGFjZXIpO1xuICAgIHdyaXRlRmlsZVN5bmMocGF0aCwgcmVzdWx0LmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlcGxhY2VMaW5lc0luRmlsZSc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uID0gKGN3ZCwgZW52aXJvbm1lbnQsIHByb2R1Y3QsIGxpY2Vuc2UsIG5vZGVzID0gMSkgPT4ge1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSwgKGxpbmUpID0+IHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnZW52aXJvbm1lbnRfbmFtZSA9JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgZW52aXJvbm1lbnRfbmFtZSA9IFwiJHtlbnZpcm9ubWVudH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCdwcm9kdWN0cyA9ICcpKSB7XG4gICAgICAgICAgICByZXR1cm4gYHByb2R1Y3RzID0gW1wiJHtwcm9kdWN0fVwiXWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAke3Byb2R1Y3R9X2xpY2Vuc2UgPWApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fbGljZW5zZSA9IFwiJHtsaWNlbnNlfVwiYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCR7cHJvZHVjdH1fcmVwbGljYV9jb3VudCA9YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtwcm9kdWN0fV9yZXBsaWNhX2NvdW50ID0gJHtub2Rlc31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgJHtwcm9kdWN0fV9hZGRpdGlvbmFsX2p2bV9hcmdzID0gYCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtwcm9kdWN0fV9hZGRpdGlvbmFsX2p2bV9hcmdzID0gW1wiLUR1cG0ucGx1Z2luLnVwbG9hZC5lbmFibGVkPXRydWVcIixcIi1EcGFzc3dvcmQuY29uZmlybWF0aW9uLmRpc2FibGVkPXRydWVcIl1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy50ZXJyYWZvcm1Db25maWd1cmF0aW9uUGVyc2lzdGVkKTtcbn07XG4iLCJpbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RBV1NDcmVkZW50aWFscyA9IChjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpID0+IHtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2F3c19lbnZzJyksIGBcbiMgYXdzX2VudnMgZmlsZSBzaG91bGQgY29udGFpbiBBV1MgdmFyaWFibGVzIG5lZWRlZCBmb3IgYXV0aG9yaXphdGlvbiAod2l0aG91dCBxdW90ZXMpXG5BV1NfQUNDRVNTX0tFWV9JRD0ke2F3c19hY2Nlc3Nfa2V5X2lkfVxuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSR7YXdzX3NlY3JldF9hY2Nlc3Nfa2V5fVxuYC50cmltKCksICd1dGYtOCcpO1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hd3NDcmVkZW50aWFsc1BlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgaW5zdGFsbCB9IGZyb20gJy4uL2hlbHBlcnMvZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi4vaGVscGVycy9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRFbnZpcm9ubWVudE5hbWUgfSBmcm9tICcuLi9oZWxwZXJzL2dldEVudmlyb25tZW50TmFtZSc7XG5pbXBvcnQgeyBnZXRIb3N0TGljZW5zZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0SG9zdExpY2Vuc2UnO1xuaW1wb3J0IHsgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcGVyc2lzdEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi4vaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uQ2x1c3RlciA9IGFzeW5jIChvcHRpb25zLCBtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAvLyBTaG93IHRoZSBwcm92aXNpb25pbmcgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCBtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24sIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgZW52aXJvbm1lbnQgbmFtZVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBhd2FpdCBnZXRFbnZpcm9ubWVudE5hbWUoKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBsaWNlbnNlXG4gICAgY29uc3QgbGljZW5zZSA9IGF3YWl0IGdldEhvc3RMaWNlbnNlKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gTGV0J3MgZG8gdGhpc1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5yZWFkeSk7XG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gc3RhcnQgcHJvdmlzaW9uZyB0aGUgQVdTIGVudmlyb25tZW50Li4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgZW1wdHlMaW5lKCk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoZGlyZWN0b3J5LCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBXcml0ZSBUZXJyYWZvcm0gdmFyaWFibGVzIHRvIGRpc2tcbiAgICBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24oZGlyZWN0b3J5LCBlbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0LCBsaWNlbnNlKTtcbiAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgYXdhaXQgaW5zdGFsbChkaXJlY3RvcnkpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJldHVybiBhbGwgdGhlIHF1ZXN0aW9ucyB3ZSBhc2tlZCB0aGUgdXNlciBmb3IgdXNlIGluIG90aGVyIHN0ZXBzXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3dkOiBkaXJlY3RvcnksXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBsaWNlbnNlXG4gICAgfTtcbn07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0Q2x1c3RlclVSTCA9IGFzeW5jIChjd2QsIHByb2R1Y3QpID0+IHtcbiAgICAvLyBDaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBLdWJlcm5ldGVzIHV0aWxzIGRpcmVjdG9yeVxuICAgIGNvbnN0IGJhc2VEaXIgPSBqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cycpO1xuICAgIC8vIENoZWNrIGlmIHdlIGNhbiBmaW5kIHRoZSBvdXRwdXRzLmpzb24gZmlsZSB0aGF0IHdhcyBjcmVhdGVkIGR1cmluZyBwcm92aXNpb25pbmdcbiAgICBjb25zdCBoYXNPdXRwdXRzSlNPTiA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCAnb3V0cHV0cy5qc29uJykpO1xuICAgIGlmICghaGFzT3V0cHV0c0pTT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ291dHB1dHMuanNvbicgZmlsZSwgd2hpY2ggaXMgdXN1YWxseSBnZW5lcmF0ZWQgYWZ0ZXIgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudC5gKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBjbHVzdGVyIGNyZWF0aW9uIG91dHB1dCBkYXRhXG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMoam9pbihiYXNlRGlyLCAnb3V0cHV0cy5qc29uJyksICd1dGYtOCcpO1xuICAgIGNvbnN0IG91dHB1dHMgPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgcHJvZHVjdCBsb2FkYmFsYW5jZXIgVVJMIGZyb20gdGhlIG91dHB1dCBkYXRhXG4gICAgY29uc3QgbG9hZGJhbGFuY2VyVXJscyA9IG91dHB1dHM/LnByb2R1Y3RfdXJscz8udmFsdWU7XG4gICAgaWYgKGxvYWRiYWxhbmNlclVybHMpIHtcbiAgICAgICAgY29uc3QgbG9hZGJhbGFuY2VyVXJsID0gbG9hZGJhbGFuY2VyVXJsc1twcm9kdWN0XTtcbiAgICAgICAgaWYgKGxvYWRiYWxhbmNlclVybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvYWRiYWxhbmNlclVybDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBoYXZlbid0IGZvdW5kIGl0IHlldCwgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgJHtwcm9kdWN0fSBsb2FkIGJhbGFuY2VyIFVSTCwgYXJlIHlvdSBzdXJlIHRoZSBwcm9kdWN0IHdhcyBjb3JyZWN0bHkgcHJvdmlzaW9uZWQ/YCk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0RHVyYXRpb24gPSAoZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuICc0NW0nO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgSG93IGxvbmcgc2hvdWxkIHRoZSB0ZXN0IHJ1bj9gLFxuICAgICAgICBkZWZhdWx0OiAnNDVtJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVhZExpbmVzSW5GaWxlID0gKHBhdGgsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgbGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlYWRMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzID0gKGJhc2VEaXIpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgIGxldCByZXN1bHRzRGlyID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJykpID8gYmFzZURpciA6IG51bGw7XG4gICAgaWYgKCFyZXN1bHRzRGlyKSB7XG4gICAgICAgIC8vIExldCdzIGdvIGZpbmQgb3VyIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSB0ZXN0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHRlc3QgcmVzdWx0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSB7XG4gICAgICAgICdwYXRoJzogcmVzdWx0c0RpcixcbiAgICAgICAgJ1N1bW1hcnkgcnVuIHN0YXR1cyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnRmluaXNoZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICdDb21wbGlhbnQnOiB1bmRlZmluZWQsXG4gICAgICAgICdTdWNjZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJzogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIHJlc3VsdCBzdW1tYXJ5IGFuZCBnZXQgdGhvc2UgZGFtbiB0ZXN0IHJlc3VsdHNcbiAgICByZWFkTGluZXNJbkZpbGUoam9pbihyZXN1bHRzRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpLCAobGluZSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBsaW5lLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1toZWFkZXJdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlc3VsdHNEaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsIHByb2R1Y3QpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSByZWFkZGlyU3luYyhwYXRoKS5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIG1ha2Ugc3VyZSB0byBhc2sgbmljZWx5IGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXJlIGFyZSBzdGlsbCBwcmV2aW91cyByZXN1bHRzIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZXJlIGFyZSBzdGlsbCByZXN1bHRzIGZyb20gcHJldmlvdXMgdGVzdCBydW5zIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTpcbiAgJHtwYXRofVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBjb25maXJtYXRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSXMgaXQgT0sgaWYgd2UgcmVtb3ZlIGFsbCBwcmV2aW91cyByZXN1bHRzPycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZW0sIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGVzdCBjYW4gb25seSBiZSBleGVjdXRlZCBpZiBhbGwgcHJldmlvdXMgcmVzdWx0cyBoYXZlIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICAgICAgICAgICAgcm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIFJldHVybiB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICByZXR1cm4gcGF0aDtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSAnZnMnO1xuZXhwb3J0IGNvbnN0IHVwbG9hZFRvVVBNID0gYXN5bmMgKGJhc2VVcmwsIHBhdGgsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz9vc19hdXRoVHlwZT1iYXNpY2AsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgfSA6IHVuZGVmaW5lZCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTSwgdW5hYmxlIHRvIHJldHJpZXZlIHRva2VuJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gcmVzcG9uc2UuaGVhZGVyc1sndXBtLXRva2VuJ107XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncGx1Z2luJywgY3JlYXRlUmVhZFN0cmVhbShwYXRoKSk7XG4gICAgICAgICAgICBhd2FpdCBheGlvcy5wb3N0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvP3Rva2VuPSR7dG9rZW59YCwgZm9ybURhdGEsIHsgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5mb3JtRGF0YS5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgICAgICAgICAgfSB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZpbmlzaGVkIHVwbG9hZGluZyBwbHVnaW4gYXJjaGl2ZSB0byBVUE0nKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0nLCBlcnIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSB0b2tlbiBmcm9tIGhlYWRlcnM6JywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuaGVhZGVycywgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgPSBhc3luYyAoYXBwS2V5LCBiYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnV2FpdGluZyBmb3IgcGx1Z2luIHRvIGJlY29tZSBlbmFibGVkJyk7XG4gICAgbGV0IGlzRW5hYmxlZCA9IGZhbHNlO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgd2hpbGUgKCFpc0VuYWJsZWQgJiYgY291bnQgPCAxMjApIHtcbiAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZyhgV2FpdGluZyBmb3IgcGx1Z2luIHRvIGJlY29tZSBlbmFibGVkLi4uICR7Y291bnR9c2ApO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXlgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH1cbiAgICAgICAgfSA6IHVuZGVmaW5lZCkuY2F0Y2goKCkgPT4gKHsgZGF0YTogeyBlbmFibGVkOiBmYWxzZSB9IH0pKTtcbiAgICAgICAgaXNFbmFibGVkID0gZGF0YT8uZW5hYmxlZDtcbiAgICAgICAgY291bnQrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzRW5hYmxlZDtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJMaWNlbnNlID0gYXN5bmMgKGFwcEtleSwgbGljZW5zZSwgYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleS9saWNlbnNlYCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnWC1BdGxhc3NpYW4tVG9rZW4nOiAnbm8tY2hlY2snLFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi92bmQuYXRsLnBsdWdpbnMranNvbicsXG4gICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4gKHsgZGF0YToge30gfSkpO1xuICAgIGNvbnN0IHsgcmF3TGljZW5zZSB9ID0gZGF0YTtcbiAgICBpZiAoIXJhd0xpY2Vuc2UgfHwgcmF3TGljZW5zZSAhPT0gbGljZW5zZSkge1xuICAgICAgICBhd2FpdCBheGlvcy5wdXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCBgeyBcInJhd0xpY2Vuc2VcIjogXCIke2xpY2Vuc2V9XCIgfWAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnWC1BdGxhc3NpYW4tVG9rZW4nOiAnbm8tY2hlY2snLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgbGljZW5zZSB0byBVUE0nKSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBsaWNlbnNlIHRvIFVQTScsIGVycikpO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBjb25maXJtLCBpbnB1dCwgc2VsZWN0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByZXNldHMsIFNpbmdsZUJhciB9IGZyb20gJ2NsaS1wcm9ncmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSwgbWtkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgYXBwM2hvdXIgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2xpY2VuY2VzJztcbmltcG9ydCB7IHJlZ2lzdGVyTGljZW5zZSwgdXBsb2FkVG9VUE0sIHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXBtJztcbmNvbnN0IHByb2dyZXNzQmFyID0gbmV3IFNpbmdsZUJhcih7XG4gICAgZm9ybWF0OiAnICBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtyZW1haW5pbmd9bScsXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuY29uc3Qgcm91bmQgPSAodmFsdWUsIHN0ZXApID0+IHtcbiAgICBzdGVwIHx8IChzdGVwID0gMS4wKTtcbiAgICBjb25zdCBpbnYgPSAxLjAgLyBzdGVwO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogaW52KSAvIGludjtcbn07XG5jb25zdCBkb3dubG9hZCA9IGFzeW5jIChhZGRvbktleSkgPT4ge1xuICAgIGNvbnN0IHRtcERpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRjZHgnLCAndG1wJyk7XG4gICAgY29uc3QgdG1wRmlsZSA9IGpvaW4odG1wRGlyLCBhZGRvbktleSk7XG4gICAgbWtkaXJTeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgYXhpb3Moe1xuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICB1cmw6IGBodHRwczovL21hcmtldHBsYWNlLmF0bGFzc2lhbi5jb20vZG93bmxvYWQvcGx1Z2lucy8ke2FkZG9uS2V5fWAsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3N0cmVhbSdcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEucGlwZShjcmVhdGVXcml0ZVN0cmVhbSh0bXBGaWxlKSkpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIHJldHVybiB0bXBGaWxlO1xufTtcbmV4cG9ydCBjb25zdCBpbnN0YWxsQXBwID0gYXN5bmMgKGJhc2VVcmwsIGFwcEtleSwgbGljZW5zZSA9IGFwcDNob3VyLCBmb3JjZSkgPT4ge1xuICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugd2lsbCBkb3dubG9hZCBpdCBmcm9tIE1QQUNcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gZG8gc28sIHdlIG5lZWQgYW4gYXBwa2V5LiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgaWYgKCFhcHBLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhcHAgaW50byBjbHVzdGVyLCBgYXBwS2V5YCB3YXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYFxuICBJbnN0YWxsaW5nIHRoZSBhcHAgKCR7YXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgIC8vIFNob3cgYSBwcm9ncmVzcyBiYXJcbiAgICAgICAgcHJvZ3Jlc3NCYXIuc3RhcnQoMzAwLCAwLCB7IHJlbWFpbmluZzogJzVtJyB9KTtcbiAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpID49IDMwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuaW5jcmVtZW50KDEsIHsgcmVtYWluaW5nOiByb3VuZCgocHJvZ3Jlc3NCYXIuZ2V0VG90YWwoKSAtIHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkpIC8gNjAsIDAuNSkgfSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGRvd25sb2FkKGFwcEtleSk7XG4gICAgICAgIC8vIFVwbG9hZCBpdCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVUE0gUkVTVCBBUElcbiAgICAgICAgYXdhaXQgdXBsb2FkVG9VUE0oYmFzZVVybCwgZmlsZSwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgYXdhaXQgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkKGFwcEtleSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAvLyBSZWdpc3RlciB0aGUgbGljZW5zZSAodXNlIHRoZSAzIGhvdXIgdGltZWJvbWIgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUpXG4gICAgICAgIGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhcHBLZXksIGxpY2Vuc2UsIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICBybVN5bmMoZmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgLy8gVGVsbCB0aGVtIHdlIHN1Y2NlZWRlZFxuICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthcHBLZXl9KWApO1xuICAgICAgICAvLyBJZiB3ZSdyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBsZXQncyBiZSBuaWNlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSBvcHRpb25zXG4gICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSXQgaXMgbm93IHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBKaXJhIGNsdXN0ZXIuXG4gIFdlIGNhbiBpbnN0YWxsIGl0IGZyb20gdGhlIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBvciB5b3UgY2FuIGluc3RhbGwgaXQgbWFudWFsbHkuXG5gKTtcbiAgICAgICAgLy8gQXNrIHRoZW0gaWYgdGhleSBwcmVmZXIgYXV0b21hdGlvbiBvciB0ZWRpb3VzIG1hbnVhbCB0YXNrc1xuICAgICAgICBjb25zdCBtZXRob2QgPSBhd2FpdCBzZWxlY3Qoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEhvdyBkbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoZSBhcHA/YCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdtcGFjJyxcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdNYXJrZXRwbGFjZScsIHZhbHVlOiAnbXBhYycgfSxcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdNYW51YWwnLCB2YWx1ZTogJ21hbnVhbCcgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgdGhleSBjaG9zZSBhdXRvbWF0aW9uLCBsZXQncyBhdXRvbWF0ZSFcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ21wYWMnKSB7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAga2V5XG4gICAgICAgICAgICBjb25zdCBhZGRvbktleSA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHByb3ZpZGUgdGhlIGtleSBvZiB0aGUgYXBwIHRvIGJlIGluc3RhbGxlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYXBwS2V5LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIGFwcCBsaWNlbnNlIHRvIGJlIHVzZWRcbiAgICAgICAgICAgIGNvbnN0IGFwcExpY2Vuc2UgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYExpY2Vuc2VgLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGxpY2Vuc2UsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHdlIGFyZSBzdGFydGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBJbnN0YWxsaW5nIHRoZSBhcHAgKCR7YWRkb25LZXl9KSBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUElgKTtcbiAgICAgICAgICAgIC8vIFNob3cgYSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDMwMCwgMCwgeyByZW1haW5pbmc6ICc1bScgfSk7XG4gICAgICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpID49IDMwMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuaW5jcmVtZW50KDEsIHsgcmVtYWluaW5nOiByb3VuZCgocHJvZ3Jlc3NCYXIuZ2V0VG90YWwoKSAtIHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkpIC8gNjAsIDAuNSkgfSk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGRvd25sb2FkKGFkZG9uS2V5KTtcbiAgICAgICAgICAgIC8vIFVwbG9hZCBpdCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVUE0gUkVTVCBBUElcbiAgICAgICAgICAgIGF3YWl0IHVwbG9hZFRvVVBNKGJhc2VVcmwsIGZpbGUsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBwbHVnaW4gdG8gYmUgZW5hYmxlZFxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkKGFkZG9uS2V5LCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgcHJvdmlkZWQgbGljZW5zZVxuICAgICAgICAgICAgYXdhaXQgcmVnaXN0ZXJMaWNlbnNlKGFkZG9uS2V5LCBhcHBMaWNlbnNlLCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlXG4gICAgICAgICAgICBybVN5bmMoZmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgaW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSlgKTtcbiAgICAgICAgICAgIC8vIFRoZXkgY2hvc2UgdmlvbGVuY2VcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJ1YiBpdCBpbiB0aGVpciBmYWNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFlvdSBjYW4gbm93IGluc3RhbGwgdGhlIGFwcCBtYW51YWxseSBpbnRvIHRoZSBjbHVzdGVyLlxuICBQbGVhc2UgZ28gdG8gdGhlIGZvbGxvd2luZyBwYWdlIChsb2dpbiB3aXRoICdhZG1pbicvJ2FkbWluJyk6XG4gICAgXG4gICR7YmFzZVVybH0vcGx1Z2lucy9zZXJ2bGV0L3VwbT9zb3VyY2U9c2lkZV9uYXZfbWFuYWdlX2FkZG9uc1xuYCk7XG4gICAgICAgICAgICAvLyBNYWtlIHRoZW0gZ3JvdmVsXG4gICAgICAgICAgICBjb25zdCBpc0luc3RhbGxlZE1hbnVhbGx5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBhcHAgbWFudWFsbHlgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBhcHAgYWluJ3QgaW5zdGFsbGVkLCB3ZSBhaW4ndCBkb2luZyBub3RoaW4nLiBTbyB3ZSBiZXR0ZXIgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgIGlmICghaXNJbnN0YWxsZWRNYW51YWxseSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgYXBwIHRvIHJ1biB0aGUgc2Vjb25kIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlcGxhY2VMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVwbGFjZUxpbmVzSW5GaWxlJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbiA9IGFzeW5jIChjd2QsIHByb2R1Y3QsIGJhc2VVcmwsIGR1cmF0aW9uLCB3aXRoQXBwU3BlY2lmaWNBY3Rpb25zLCBmb3JjZSkgPT4ge1xuICAgIGNvbnN0IHByb2R1Y3RVUkkgPSBuZXcgVVJMKGJhc2VVcmwpO1xuICAgIGNvbnN0IHByb3RvY29sID0gcHJvZHVjdFVSSS5wcm90b2NvbC5zdGFydHNXaXRoKCdodHRwcycpID8gJ2h0dHBzJyA6ICdodHRwJztcbiAgICBjb25zdCBwb3J0ID0gcHJvdG9jb2wgPT09ICdodHRwJyA/ICc4MCcgOiAnNDQzJztcbiAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSB1cGRhdGVkIGluIHRoZSAke3Byb2R1Y3R9LnltbCBmaWxlOlxuXG4gIGFwcGxpY2F0aW9uX2hvc3RuYW1lID0gJHtwcm9kdWN0VVJJLmhvc3R9XG4gIGFwcGxpY2F0aW9uX3Byb3RvY29sID0gJHtwcm90b2NvbH1cbiAgYXBwbGljYXRpb25fcG9ydCA9ICR7cG9ydH1cbiAgYXBwbGljYXRpb25fcG9zdGZpeCA9ICR7cHJvZHVjdFVSSS5wYXRobmFtZX1cbiAgdGVzdF9kdXJhdGlvbiA9ICR7ZHVyYXRpb259XG4gIHN0YW5kYWxvbmVfZXh0ZW5zaW9uID0gJHt3aXRoQXBwU3BlY2lmaWNBY3Rpb25zID8gJzEnIDogJzAnfVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHtqb2luKGN3ZCwgJ2FwcCcsIGAke3Byb2R1Y3R9LnltbGApfVxuYCk7XG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBmb3JjZSk7XG4gICAgcmVwbGFjZUxpbmVzSW5GaWxlKGpvaW4oY3dkLCAnYXBwJywgYCR7cHJvZHVjdH0ueW1sYCksIChsaW5lKSA9PiB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAgICBhcHBsaWNhdGlvbl9ob3N0bmFtZTonKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgYXBwbGljYXRpb25faG9zdG5hbWU6ICR7cHJvZHVjdFVSSS5ob3N0fWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCcgICAgYXBwbGljYXRpb25fcHJvdG9jb2w6JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX3Byb3RvY29sOiAke3Byb3RvY29sfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAgICAgYXBwbGljYXRpb25fcG9ydDpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgYXBwbGljYXRpb25fcG9ydDogJHtwb3J0fWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAgICAgc3RhbmRhbG9uZV9leHRlbnNpb246YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIHN0YW5kYWxvbmVfZXh0ZW5zaW9uOiAke3dpdGhBcHBTcGVjaWZpY0FjdGlvbnMgPyAnMScgOiAnMCd9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICB0ZXN0X2R1cmF0aW9uOmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICB0ZXN0X2R1cmF0aW9uOiAke2R1cmF0aW9ufWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYFxu4pyUIENvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAke3Byb2R1Y3R9LnltbGApO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5leHBvcnQgY29uc3QgZ2V0UmVpbmRleFByb2dyZXNzID0gYXN5bmMgKGJhc2VVcmwpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L2FwaS8yL3JlaW5kZXhgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBhZG1pbjphZG1pbmApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBjb25zdCBjdXJyZW50VGFzayA9IChyZXNwb25zZSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDIwMCkgPyByZXNwb25zZS5kYXRhIDoge307XG4gICAgY29uc3QgeyBwcm9ncmVzc1VybCwgY3VycmVudFByb2dyZXNzLCBzdWNjZXNzLCBmaW5pc2hUaW1lIH0gPSBjdXJyZW50VGFzaztcbiAgICBjb25zdCBpc0ZpbmlzaGVkID0gY3VycmVudFByb2dyZXNzID09PSAxMDAgfHwgc3VjY2VzcyB8fCBmaW5pc2hUaW1lICE9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gW3Byb2dyZXNzVXJsLCBzdWNjZXNzLCBpc0ZpbmlzaGVkXTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByZXNldHMsIFNpbmdsZUJhciB9IGZyb20gJ2NsaS1wcm9ncmVzcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcHVwcGV0ZWVyIGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBSdW4yIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgZ2V0UmVpbmRleFByb2dyZXNzIH0gZnJvbSAnLi9nZXRSZWluZGV4UHJvZ3Jlc3MnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5jb25zdCBwcm9ncmVzc0JhciA9IG5ldyBTaW5nbGVCYXIoe1xuICAgIGZvcm1hdDogJyAgTHVjZW5lIHJlLWluZGV4IFt7YmFyfV0ge3BlcmNlbnRhZ2V9JSB8IEVUQToge3JlbWFpbmluZ31tJyxcbiAgICBoaWRlQ3Vyc29yOiB0cnVlXG59LCBQcmVzZXRzLmxlZ2FjeSk7XG5leHBvcnQgY29uc3QgcmVpbmRleCA9IGFzeW5jIChiYXNlVXJsLCBvdXRwdXREaXIsIGZvcmNlKSA9PiB7XG4gICAgLy8gVGVsbCB0aGVtIHRoYXQgd2UgYXJlIHBsYW5uaW5nIHRvIHJ1biB0aGUgTHVjZW5lIEluZGV4aW5nIFRlc3RcbiAgICBjb25zb2xlLmxvZyhSdW4yLnN0YXJ0THVjZW5lSW5kZXhpbmcpO1xuICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IHNjcmVlbnNob3QgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKSkge1xuICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyByZWluZGV4IHJlc3VsdHMnKTtcbiAgICAgICAgICAgIHJtU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBc2sgbmljZWx5IGlmIHdlIGNhbiBzdGFydFxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoYFByZXNzIGFueSBrZXkgdG8gc3RhcnQgdGhlIEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QuLi5cbiAgKG9yICdzJyB0byBza2lwIGlmIHRoZSB0ZXN0IGlzIGFscmVhZHkgcnVubmluZylcbmAsIGZvcmNlKTtcbiAgICAvLyBDaGVjayBpZiB0aGV5IGFncmVlZCB0byBzdGFydGluZyB0aGUgcmVpbmRleFxuICAgIGlmICh2YWx1ZSAhPT0gJ3MnKSB7XG4gICAgICAgIC8vIFRoZXkgZGlkISBTbyBsZXQncyBzdGFydCBpdCB1c2luZyB0aGUgSmlyYSBSRVNUIEFQSVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4P3R5cGU9Rk9SRUdST1VORGAsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgZ290IGEgcHJvcGVyIHJlc3BvbnNlXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZS5zdGF0dXMgIT09IDIwMikge1xuICAgICAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgICAgICAvLyBObyByZWluZGV4IGlzIG5vIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBMdWNlbnNlIEluZGV4IFRpbWluZyB0ZXN0LCBjb3VsZCBub3QgcGVyZm9ybSByZWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU3RhcnQgdGhlIGNsb2NrIVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzcyBiYXIgdG8gY291bnQgZm9yIDYwIG1pbnV0ZXNcbiAgICBwcm9ncmVzc0Jhci5zdGFydCgzNjAwLCAwLCB7IHJlbWFpbmluZzogNjAgfSk7XG4gICAgLy8gUGxhY2Vob2xkZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWluZGV4IGlzIGZpbmlzaGVkXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gdHJ5IHRvIGdldCBhbiB1cGRhdGUgZnJvbSBKaXJhXG4gICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgIC8vIEdldCBhbiB1cGRhdGUgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIGNvbnN0IFtwcm9ncmVzc1VybCwgc3VjY2VzcywgZmluaXNoZWRdID0gYXdhaXQgZ2V0UmVpbmRleFByb2dyZXNzKGJhc2VVcmwpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVpbmRleCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIHdpdGhpbiB0aGUgNjAgbWludXRlIHdpbmRvd1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPCBwcm9ncmVzc0Jhci5nZXRUb3RhbCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlLCBzbyBsZXQncyBqdXN0IGluY3JlbWVudCB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoNjAsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nOiA2MCAtIE1hdGguZmxvb3IoKCgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUpIC8gMTAwMCkgLyA2MCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgMSBtaW51dGUgdW50aWwgd2UgcmV0cnlcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMSAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgaW4gdGhlIDYwIG1pbnV0ZSB3aW5kb3csIG1hbnVhbCBhY3Rpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG9wZXJhdGluZyBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB0aGV5IG5lZWQgdG8gZG8gc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGlzIHRha2luZyBhIGxvbmcgdGltZSB0byBmaW5pc2guIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTFxuICAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybCB8fCAnL3NlY3VyZS9hZG1pbi9qaXJhL0luZGV4UHJvZ3Jlc3MuanNwYSd9XG5cbiAgYW5kIG1hbnVhbGx5IGNvbmZpcm0gdGhhdCB0aGUgcmUtaW5kZXggaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgICBgKTtcbiAgICAgICAgICAgICAgICAvLyBBc2sgdGhlIHVzZXIgdG8gY29uZmlybSB0aGUgcmVpbmRleCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgICAgICAgIGlzRmluaXNoZWQgPSBhd2FpdCBjb25maXJtKHsgbWVzc2FnZTogJ0hhcyB0aGUgcmVpbmRleCBjb21wbGV0ZWQgc3VjY2VzZnVsbHk/JyB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIGhhdmUgbm8gY2hvaWNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBvcHRpb24gbGVmdCBpcyB0byB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmUtaW5kZXggaGFzIG5vdCBjb21wbGV0ZWQgd2l0aGluIDYwIG1pbnV0ZXMsIHRlc3QgaGFzIGZhaWxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBmaW5pc2hlZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgc29tZXRoaW5nIGhhcyBnb25lIGNvbXBsZXRlbHkgd3JvbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgTHVjZW5zZSByZS1pbmRleCBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bGx5LiBQbGVhc2UgZ28gdG8gdGhlIGZvbGxvd2luZyBVUkwgZm9yIG1vcmUgaW5mb3JtYXRpb246XG4gICR7YmFzZVVybH0ke3Byb2dyZXNzVXJsIHx8ICcvc2VjdXJlL2FkbWluL2ppcmEvSW5kZXhQcm9ncmVzcy5qc3BhJ31cbmApO1xuICAgICAgICAgICAgLy8gTm93IHRocm93IGEgaGlzc3kgZml0IGFueXdheVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICDinJQgTHVjZW5jZSByZS1pbmRleCBvZiBKaXJhIGhhcyBjb21wbGV0ZWRcbmApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9vcCB2YXJpYWJsZVxuICAgICAgICBpc0ZpbmlzaGVkID0gZmluaXNoZWQ7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgbGF0ZXN0IHVwZGF0ZSBvbiB0aGUgcmVpbmRleCBwcm9ncmVzc1xuICAgIGNvbnN0IFtwcm9ncmVzc1VybF0gPSBhd2FpdCBnZXRSZWluZGV4UHJvZ3Jlc3MoYmFzZVVybCk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByb2dyZXNzIFVSTFxuICAgIGlmICghcHJvZ3Jlc3NVcmwpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHByb2dyZXNzIFVSTCwgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHRoZSBsYXRlc3QgTHVjZW5jZSBJbmRleCBUaW1pbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgfVxuICAgIC8vIFJldHJ5IGNvdW50ZXJcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgLy8gUGxhY2Vob2xkZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzY3JlZW5zaG90IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZFxuICAgIGxldCBzY3JlZW5zaG90Q3JlYXRlZCA9IGZhbHNlO1xuICAgIC8vIExvb3AgdW50aWwgd2UndmUgbWFkZSBhIHNjcmVlbiBzaG90IG9yIHRyaWVkIGl0IDUgdGltZXMgKGluY2wuIG9uZSB0aW1lIG1hbnVhbGx5KVxuICAgIHdoaWxlICghc2NyZWVuc2hvdENyZWF0ZWQgJiYgcmV0cnlDb3VudCA8IDUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIElmIHRoZSByZXRyeSBjb3VudCBpcyA0LCB0aGlzIG1lYW5zIHRoaXMgaXMgb3VyIGxhc3Qgcm9kZW9cbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID09PSA0KSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IHN0ZXAgaXMgbWFudWFsLCB3aGljaCB3ZSBjYW4ndCBkbyBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgICAgICAgICAvLyBzbyBvdXIgb25seSBvcHRpb24gbGVmdCBpcyB0byB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvbWF0aWNhbGx5IGNhcHR1cmUgYSBzY3JlZW4gc2hvdCBvZiB0aGUgTHVjZW5lIFJlaW5kZXgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGV5IGhhdmUgdG8gZG8gc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBXZSd2ZSB0cmllZCB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHNjcmVlbnNob3QsIGJ1dCB0aGUgcHJvY2VzcyBzZWVtcyB0byBiZSBzdHVja1xuXG4gIFdlIHdpbGwgbm93IG9wZW4gYSBicm93c2VyIHdpbmRvdyBmb3IgeW91IHRvIGZvbGxvdyB0aGUgYXV0b21hdGVkIHN0ZXBzIGFuZCBpbnRlcnZlbmVcbiAgd2hlcmUgcG9zc2libGUgKGZvciBpbnN0YW5jZSwgYnkgcHJlc3NpbmcgYSBidXR0b24gb3IgcmVsb2FkaW5nIGEgc2NyZWVuKVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gTm93IGFzayB0aGVtIG5pY2VseSBpZiB0aGV5IGFyZSByZWFkeVxuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIG9wZW4gdGhlIGJyb3dzZXIgd2luZG93Li4uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCB0aGUgYnJvd3NlciBzZXNzaW9uXG4gICAgICAgICAgICBjb25zdCBicm93c2VyID0gYXdhaXQgcHVwcGV0ZWVyLmxhdW5jaCh7IGhlYWRsZXNzOiByZXRyeUNvdW50IDwgNCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBicm93c2VyLm5ld1BhZ2UoKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2Uuc2V0Vmlld3BvcnQoeyB3aWR0aDogMTA4MCwgaGVpZ2h0OiAxMDI0IH0pO1xuICAgICAgICAgICAgLy8gT3BlbiB0aGUgcmVpbmRleCBwcm9ncmVzcyBwYWdlXG4gICAgICAgICAgICBhd2FpdCBwYWdlLmdvdG8oYCR7YmFzZVVybH0ke3Byb2dyZXNzVXJsfWApO1xuICAgICAgICAgICAgLy8gTG9nIGluXG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXVzZXJuYW1lJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tcGFzc3dvcmQnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1zdWJtaXQnKS5jbGljaygpO1xuICAgICAgICAgICAgLy8gV2Vic3Vkb1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1hdXRoZW50aWNhdGVQYXNzd29yZCcpLmZpbGwoJ2FkbWluJyk7XG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAvLyBYU1JGIHRva2VuIGV4cGlyYXRpb24gc25hZnVcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2F0bF90b2tlbl9yZXRyeV9idXR0b24nKS5jbGljaygpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgYXJlIG9uIHRoZSByZWluZGV4IHBhZ2UgYW5kIHRoYXQgaXQgaXMgbG9hZGVkXG4gICAgICAgICAgICBhd2FpdCBwYWdlLndhaXRGb3JTZWxlY3RvcignI2Fja25vd2xlZGdlX3N1Ym1pdCcpO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGUgc2NyZWVuIHNob3RcbiAgICAgICAgICAgIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7XG4gICAgICAgICAgICAgICAgcGF0aDogam9pbihvdXRwdXREaXIsICdsdWNlbmUtcmVpbmRleC5wbmcnKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDbG9zZSB0aGUgYnJvd3NlciB3aW5kb3dcbiAgICAgICAgICAgIGF3YWl0IGJyb3dzZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgY2FwdHVyZWQgdGhlIHNjcmVlbiBzaG90IGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5XG4gICAgICAgICAgICBzY3JlZW5zaG90Q3JlYXRlZCA9IGV4aXN0c1N5bmMoam9pbihvdXRwdXREaXIsICdsdWNlbmUtcmVpbmRleC5wbmcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9pZ25vcmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBDb3VsZCBub3QgZ2V0IGEgc2NyZWVuIHNob3Qgb2YgdGhlIGx1Y2VuZSBpbmRleGluZyByZXN1bHQsIHJldHJ5aW5nLi4uYCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgY291bGQgbm90IGNyZWF0ZSB0aGUgc2NyZWVuc2hvdCwgdGhyb3cgYSBoaXNzeSBmaXQhXG4gICAgaWYgKCFzY3JlZW5zaG90Q3JlYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjYXB0dXJlIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0cycpO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2Ugd2Ugc2hvdWxkIHNob3cgYSBoYXBweSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coYFxu4pyUIEx1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZm9yZWdyb3VuZCBpbmRleGluZyBvZiBKaXJhIGhhcyBjb21wbGV0ZWRcbmApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBydW5UZXN0IH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0Q2x1c3RlclVSTCB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0Q2x1c3RlclVSTCc7XG5pbXBvcnQgeyBnZXREdXJhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RHVyYXRpb24nO1xuaW1wb3J0IHsgZ2V0UmVzdWx0cyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0UmVzdWx0cyc7XG5pbXBvcnQgeyBnZXRSZXN1bHRzRGlyZWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRSZXN1bHRzRGlyZWN0b3J5JztcbmltcG9ydCB7IGluc3RhbGxBcHAgfSBmcm9tICcuLi9oZWxwZXJzL2luc3RhbGxBcHAnO1xuaW1wb3J0IHsgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcmVpbmRleCB9IGZyb20gJy4uL2hlbHBlcnMvcmVpbmRleCc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi4vaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vZ2V0UnVuRm9yU3RhZ2UnO1xuaW1wb3J0IHsgcGVyc2lzdEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzJztcbmV4cG9ydCBjb25zdCBydW5QZXJmb3JtYW5jZVRlc3QgPSBhc3luYyAoc3RhZ2UsIG9wdGlvbnMsIG1lc3NhZ2VzKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCkpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVCBpbiB3aGljaCB3ZSBzdG9yZSB0aGUgdGVzdCByZXN1bHRzIGZvciB0aGlzIHNwZWNpZmljIHJ1blxuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKHN0YWdlKX1gKTtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBydW5cbiAgICBpZiAoZXhpc3RzU3luYyhydW5PdXRwdXREaXIpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMsIGNoZWNrIGlmIHRoZXkgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGdldFJlc3VsdHMocnVuT3V0cHV0RGlyKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gPT09ICdPSycpIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gb3B0aW9ucy5mb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHN1Y2Nlc3NmdWwgdGVzdCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gSWYgd2UgYXJlIHJ1bm5pbmcgcmVncmVzc2lvbiB0ZXN0cywgd2UgbmVlZCB0byBpbnN0YWxsIHRoZSBhcHAgKCYgcnVuIGluZGV4aW5nIHRlc3RzIGZvciBKaXJhKVxuICAgIGlmIChzdGFnZSA9PT0gJ3JlZ3Jlc3Npb24nKSB7XG4gICAgICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxBcHAoYmFzZVVybCwgb3B0aW9ucy5hcHBLZXksIG9wdGlvbnMuYXBwTGljZW5zZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIElmIHdlIGFyZSBkb2luZyB0aGlzIHRoaW5nIGZvciBKaXJhLCB3ZSBuZWVkIHRvIGRvIHRoZSBMdWNlbmUgSW5kZXggVGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9kdWN0ID09PSAnamlyYScpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlaW5kZXgoYmFzZVVybCwgb3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSByZWdyZXNzaW9uIHRlc3RpbmdcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFBlcmZvcm1hbmNlVGVzdCk7XG4gICAgLy8gQWxsb3cgdXNlcnMgdG8gc2V0IGEgZGlmZmVyZW50IHRlc3QgZHVyYXRpb24gKGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzKVxuICAgIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgZ2V0RHVyYXRpb24ob3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIHRlc3QgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgYXdhaXQgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgZmFsc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVzdWx0c0Jhc2VEaXIgPSBhd2FpdCBnZXRSZXN1bHRzRGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIGRhbW4gdGVzdFxuICAgIGF3YWl0IHJ1blRlc3QoY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEdldCB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcmVzdWx0cyA9IGdldFJlc3VsdHMocmVzdWx0c0Jhc2VEaXIpO1xuICAgIC8vIENoZWNrIGlmIHRoZSB0ZXN0IHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBpZiAocmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gIT09ICdPSycpIHtcbiAgICAgICAgLy8gSWYgbm90LCBsZXQgdGhlIHBlb3BsZSBrbm93IGFuZCB0ZXJtaW5hdGVcbiAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZXMuZmFpbHVyZShjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QgZmFpbGVkJyk7XG4gICAgfVxuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc29sZS5sb2coYCAgQ29weWluZyB0ZXN0IHJlc3VsdHMgdG8gJHtydW5PdXRwdXREaXJ9YCk7XG4gICAgYXdhaXQgbW92ZShyZXN1bHRzLnBhdGgsIHJ1bk91dHB1dERpciwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgLy8gQ2VsZWJyYXRlIG91ciBzdWNjZXNzIVxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN1Y2Nlc3MpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xufTtcbiIsImV4cG9ydCBjb25zdCBnZXROb2RlTnVtYmVyRm9yU3RhZ2UgPSAoc3RhZ2UpID0+IHtcbiAgICBzd2l0Y2ggKHN0YWdlKSB7XG4gICAgICAgIGNhc2UgJ29uZS1ub2RlJzogcmV0dXJuIDE7XG4gICAgICAgIGNhc2UgJ3R3by1ub2RlJzogcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiA0O1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGluc3RhbGwsIHJ1blRlc3QgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0Q2x1c3RlclVSTCB9IGZyb20gJy4vZ2V0Q2x1c3RlclVSTCc7XG5pbXBvcnQgeyBnZXREdXJhdGlvbiB9IGZyb20gJy4vZ2V0RHVyYXRpb24nO1xuaW1wb3J0IHsgZ2V0Tm9kZU51bWJlckZvclN0YWdlIH0gZnJvbSAnLi9nZXROb2RlTnVtYmVyRm9yU3RhZ2UnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0cyB9IGZyb20gJy4vZ2V0UmVzdWx0cyc7XG5pbXBvcnQgeyBnZXRSZXN1bHRzRGlyZWN0b3J5IH0gZnJvbSAnLi9nZXRSZXN1bHRzRGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9nZXRSdW5Gb3JTdGFnZSc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwIH0gZnJvbSAnLi9pbnN0YWxsQXBwJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBydW5TY2FsYWJpbGl0eVRlc3QgPSBhc3luYyAoc3RhZ2UsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYW1vdW50IG9mIG5vZGVzIGZvciB0aGUgc3BlY2lmaWVkIHN0YWdlXG4gICAgY29uc3Qgbm9kZXMgPSBnZXROb2RlTnVtYmVyRm9yU3RhZ2Uoc3RhZ2UpO1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLmhlYWRlcihvcHRpb25zLnByb2R1Y3QsIHN0YWdlKSk7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCBmYWxzZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVCBpbiB3aGljaCB3ZSBzdG9yZSB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcnVuT3V0cHV0RGlyID0gam9pbihvcHRpb25zLm91dHB1dERpciwgYHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfWApO1xuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHJ1blxuICAgIGlmIChleGlzdHNTeW5jKHJ1bk91dHB1dERpcikpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cywgY2hlY2sgaWYgdGhleSB3ZXJlIHN1Y2Nlc3NmdWxcbiAgICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHRzID0gZ2V0UmVzdWx0cyhydW5PdXRwdXREaXIpO1xuICAgICAgICBpZiAoZXhpc3RpbmdSZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSA9PT0gJ09LJykge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseSBpZiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgZXhpc3RpbmcgdGVzdCByZXN1bHRzXG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMgPSBvcHRpb25zLmZvcmNlIHx8IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBhcmUgZXhpc3Rpbmcgc3VjY2Vzc2Z1bCB0ZXN0IHJlc3VsdHMsIGRvIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSB0aGVzZSByZXN1bHRzPydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92aW5nIGV4aXN0aW5nIHRlc3QgcmVzdWx0cycpO1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlyZWN0cnlcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBzY2FsYWJpbGl0eSAke3N0YWdlfSBjbHVzdGVyIHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMucmVhZHlGb3JQcm92aXNpb25pbmcpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3Igc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgbm9kZXMpO1xuICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICBhd2FpdCBpbnN0YWxsKGN3ZCk7XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLnN0YXJ0U2NhbGFiaWxpdHlUZXN0KTtcbiAgICAvLyBHZXQgdGhlIGxvYWQgYmFsYW5jZXIgVVJMIGZvciB0aGUgY2x1c3RlclxuICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRDbHVzdGVyVVJMKGN3ZCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAgIGF3YWl0IGluc3RhbGxBcHAoYmFzZVVybCwgb3B0aW9ucy5hcHBLZXksIG9wdGlvbnMuYXBwTGljZW5zZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQWxsb3cgdXNlcnMgdG8gc2V0IGEgZGlmZmVyZW50IHRlc3QgZHVyYXRpb24gKGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzKVxuICAgIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgZ2V0RHVyYXRpb24ob3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgdGVzdCBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICBhd2FpdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLnByb2R1Y3QsIGJhc2VVcmwsIGR1cmF0aW9uLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlc3VsdHNCYXNlRGlyID0gYXdhaXQgZ2V0UmVzdWx0c0RpcmVjdG9yeShjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBkYW1uIHRlc3RcbiAgICBhd2FpdCBydW5UZXN0KGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKHJlc3VsdHNCYXNlRGlyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVzdCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKHJlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddICE9PSAnT0snKSB7XG4gICAgICAgIC8vIElmIG5vdCwgbGV0IHRoZSBwZW9wbGUga25vdyBhbmQgdGVybWluYXRlXG4gICAgICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLmZhaWx1cmUoc3RhZ2UsIGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IGZhaWxlZCcpO1xuICAgIH1cbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnNvbGUubG9nKGAgIENvcHlpbmcgdGVzdCByZXN1bHRzIHRvICR7cnVuT3V0cHV0RGlyfWApO1xuICAgIGF3YWl0IG1vdmUocmVzdWx0cy5wYXRoLCBydW5PdXRwdXREaXIsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIC8vIENlbGVicmF0ZSBvdXIgc3VjY2VzcyFcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcy5zdWNjZXNzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUxpbmUsIFRlYXJkb3duIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgdGVybWluYXRlIH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCB0ZWFyZG93bkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgbmljZSBsaXR0bGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coVGVhcmRvd24uaGVhZGVyKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBwcm9wZXIgZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoZGlyZWN0b3J5LCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgaWYgdGhleSBhcmUgcmVhZHkgdG8gc2F5IGdvb2RieWUgdG8gdGhlaXIgY2x1c3RlclxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgZW1wdHlMaW5lKCk7XG4gICAgLy8gVGVybWluYXRlIGl0IVxuICAgIGF3YWl0IHRlcm1pbmF0ZShkaXJlY3RvcnksIG9wdGlvbnMuZW52aXJvbm1lbnQpO1xuICAgIC8vIEFzayB0aGUgdXNlciB0byBxdWl0IHRoZSBwcm9ncmFtXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gZXhpdC4uLicsIG9wdGlvbnMuZm9yY2UpO1xufTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHZlcnNpb25zIGZyb20gJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgPSB6LmVudW0oW1xuICAgICdwb3N0Z3Jlc3FsJyxcbiAgICAnbXlzcWwnLFxuICAgICdtc3NxbCdcbl0pO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMgPSB6LmVudW0oW1xuICAgICdEZXZlbG9wZXInLFxuICAgICdFeHByZXNzJyxcbiAgICAnU3RhbmRhcmQnLFxuICAgICdFbnRlcnByaXNlJyxcbiAgICAnRW50ZXJwcmlzZUNvcmUnXG5dKTtcbmV4cG9ydCBjb25zdCBEYXRhYmFzZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKSxcbiAgICBkYXRhYmFzZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHZlcmJvc2U6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKVxufSk7XG5leHBvcnQgY29uc3QgUG9zdGdyZVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDU0MzIpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnb3JnLnBvc3RncmVzcWwuRHJpdmVyJykuZGVmYXVsdCgnb3JnLnBvc3RncmVzcWwuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE15U1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMzMwNiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubXlzcWwuamRiYy5Ecml2ZXInKS5kZWZhdWx0KCdjb20ubXlzcWwuamRiYy5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTVNTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBlZGl0aW9uOiBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zLmRlZmF1bHQoJ0RldmVsb3BlcicpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDE0MzMpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdzYScpLmRlZmF1bHQoJ3NhJyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnRGF0YUNlbnRlckRYIScpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKS5kZWZhdWx0KCdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzIH0gZnJvbSAnLi9EYXRhYmFzZSc7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkQXBwbGljYXRpb25zID0gei5lbnVtKFtcbiAgICAnamlyYScsXG4gICAgJ2NvbmZsdWVuY2UnLFxuICAgICdiaXRidWNrZXQnLFxuICAgICdiYW1ib28nXG5dKTtcbmV4cG9ydCBjb25zdCBBcHBsaWNhdGlvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBkYXRhYmFzZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLmRlZmF1bHQoJ3Bvc3RncmVzcWwnKSxcbiAgICBkYXRhYmFzZVRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkuZGVmYXVsdCgnODAnKSxcbiAgICBjb250ZXh0UGF0aDogei5zdHJpbmcoKSxcbiAgICB4bXM6IHouc3RyaW5nKCkuZGVmYXVsdCgnMTAyNG0nKSxcbiAgICB4bXg6IHouc3RyaW5nKCkuZGVmYXVsdCgnMTAyNG0nKSxcbiAgICB3YXRjaDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZXh0OiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGluc3RhbGw6IHouYm9vbGVhbigpLFxuICAgIG91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB6LnN0cmluZygpLFxuICAgIGNsZWFuOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBwcnVuZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZGVidWc6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gICAgY3dkOiB6LnN0cmluZygpXG59KS5wYXJ0aWFsKHtcbiAgICBjb250ZXh0UGF0aDogdHJ1ZSxcbiAgICBleHQ6IHRydWUsXG4gICAgaW5zdGFsbDogdHJ1ZSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHRydWUsXG4gICAgYWN0aXZhdGVQcm9maWxlczogdHJ1ZSxcbiAgICBjd2Q6IHRydWVcbn0pO1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuL0FwcGxpY2F0aW9uJztcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVRlc3RUeXBlcyA9IHouZW51bShbXG4gICAgJ2Jhc2VsaW5lJyxcbiAgICAncmVncmVzc2lvbidcbl0pO1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5VGVzdFR5cGVzID0gei5lbnVtKFtcbiAgICAnb25lLW5vZGUnLFxuICAgICd0d28tbm9kZScsXG4gICAgJ2ZvdXItbm9kZSdcbl0pO1xuZXhwb3J0IGNvbnN0IFRlc3RSZXN1bHRzID0gei5lbnVtKFtcbiAgICAncGF0aCcsXG4gICAgJ1N1bW1hcnkgcnVuIHN0YXR1cycsXG4gICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JyxcbiAgICAnRmluaXNoZWQnLFxuICAgICdDb21wbGlhbnQnLFxuICAgICdTdWNjZXNzJyxcbiAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuXSk7XG5leHBvcnQgY29uc3QgUmVwb3J0VHlwZXMgPSB6LmVudW0oW1xuICAgICdwZXJmb3JtYW5jZScsXG4gICAgJ3NjYWxhYmlsaXR5J1xuXSk7XG5leHBvcnQgY29uc3QgQVBUUmVwb3J0QXJncyA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiBSZXBvcnRUeXBlcyxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgb3V0cHV0RGlyOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQcm92aXNpb25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgZW52aXJvbm1lbnQ6IHRydWUsXG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVRlc3RBcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZSxcbiAgICB0aW1lc3RhbXA6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0TWVzc2FnZXMgPSB6Lm9iamVjdCh7XG4gICAgaGVhZGVyOiB6LmZ1bmN0aW9uKCkuYXJncyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMpLnJldHVybnMoei5zdHJpbmcoKSksXG4gICAgc3RhcnRQZXJmb3JtYW5jZVRlc3Q6IHouc3RyaW5nKCksXG4gICAgc3RhcnRMdWNlbmVJbmRleGluZzogei5zdHJpbmcoKSxcbiAgICBzdWNjZXNzOiB6LnN0cmluZygpLFxuICAgIGZhaWx1cmU6IHouZnVuY3Rpb24oKS5hcmdzKHouc3RyaW5nKCksIFN1cHBvcnRlZEFwcGxpY2F0aW9ucywgei5zdHJpbmcoKSwgei5zdHJpbmcoKSwgei5yZWNvcmQoVGVzdFJlc3VsdHMsIHouc3RyaW5nKCkub3Ioei51bmRlZmluZWQoKSkpKVxufSkucGFydGlhbCh7XG4gICAgc3RhcnRMdWNlbmVJbmRleGluZzogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VSZXBvcnRPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpLFxufSkucGFydGlhbCh7XG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgb3V0cHV0RGlyOiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVRlc3RPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMgPSB6Lm9iamVjdCh7XG4gICAgaGVhZGVyOiB6LmZ1bmN0aW9uKCkuYXJncyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIFNjYWxhYmlsaXR5VGVzdFR5cGVzKS5yZXR1cm5zKHouc3RyaW5nKCkpLFxuICAgIHJlYWR5Rm9yUHJvdmlzaW9uaW5nOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0U2NhbGFiaWxpdHlUZXN0OiB6LnN0cmluZygpLFxuICAgIHN1Y2Nlc3M6IHouc3RyaW5nKCksXG4gICAgZmFpbHVyZTogei5mdW5jdGlvbigpLmFyZ3MoU2NhbGFiaWxpdHlUZXN0VHlwZXMsIHouc3RyaW5nKCksIFN1cHBvcnRlZEFwcGxpY2F0aW9ucywgei5zdHJpbmcoKSwgei5zdHJpbmcoKSwgei5yZWNvcmQoVGVzdFJlc3VsdHMsIHouc3RyaW5nKCkub3Ioei51bmRlZmluZWQoKSkpKVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlSZXBvcnRPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpLFxufSkucGFydGlhbCh7XG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFRlYXJkb3duQXJncyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFRlYXJkb3duT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiB6LnN0cmluZygpLFxuICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiB0cnVlLFxuICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUQXJncyA9IHouaW50ZXJzZWN0aW9uKEFQVFByb3Zpc2lvbk9wdGlvbnMsIEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MsIEFQVFNjYWxhYmlsaXR5VGVzdEFyZ3MpO1xuIiwiaW1wb3J0IHsgUGVyZm9ybWFuY2VUZXN0VHlwZXMgfSBmcm9tICcuLi90eXBlcy9EQ0FQVCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0IH0gZnJvbSAnLi9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuUGVyZm9ybWFuY2VUZXN0IH0gZnJvbSAnLi9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdCc7XG5pbXBvcnQgeyBSdW4xLCBSdW4yIH0gZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2UgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IG91dHB1dERpciA9IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApO1xuICAgIC8vIFByb3Zpc2lvbiB0aGUgY2x1c3RlclxuICAgIGNvbnN0IHsgY3dkLCBlbnZpcm9ubWVudCwgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIHRydWUpO1xuICAgIC8vIFJ1biB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2UgdGVzdFxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMuYmFzZWxpbmUsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgUnVuMSk7XG4gICAgLy8gUnVuIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgUnVuMik7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHBlcmZvcm1hbmNlIHJlcG9ydFxuICAgIGF3YWl0IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQoe1xuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuU2NhbGFiaWxpdHlUZXN0IH0gZnJvbSAnLi9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdCc7XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHkgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IG91dHB1dERpciA9IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApO1xuICAgIC8vIFByb3Zpc2lvbiB0aGUgY2x1c3RlclxuICAgIGNvbnN0IHsgY3dkLCBlbnZpcm9ubWVudCwgbGljZW5zZSB9ID0gYXdhaXQgcHJvdmlzaW9uQ2x1c3Rlcih7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgZmFsc2UpO1xuICAgIC8vIFJ1biB0aGUgc2NhbGFiaWxpdHkgdGVzdCB3aXRoIGEgb25lLW5vZGUgY2x1c3RlclxuICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnb25lLW5vZGUnLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG4gICAgLy8gUnVuIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IHdpdGggYSB0d28tbm9kZSBjbHVzdGVyXG4gICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCd0d28tbm9kZScsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0XG4gICAgYXdhaXQgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCh7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IGFzeW5jRXhpdEhvb2ssIGdyYWNlZnVsRXhpdCB9IGZyb20gJ2V4aXQtaG9vayc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmV4cG9ydCBjb25zdCBBY3Rpb25IYW5kbGVyID0gYXN5bmMgKHByb2dyYW0sIHsgYWN0aW9uLCBlcnJvckhhbmRsZXIgfSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IG9wcyA9IG9wdGlvbnMgfHwgcHJvZ3JhbS5vcHRzKCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIGFzeW5jRXhpdEhvb2soYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXJyb3JIYW5kbGVyKG9wcykuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZS50cmltKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHJlamVjdGluZyB0aGUgcHJvbWlzZSB0byBhdm9pZCB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gXCJDYWxsaW5nIHByb2Nlc3MuZXhpdFwiIGxvZyBtZXNzYWdlIGZyb20gZXhpdC1ob29rXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnI7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB3YWl0OiA2MCAqIDEgKiAxMDAwXG4gICAgICAgIH0pO1xuICAgICAgICBhY3Rpb24ob3BzKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIuaXNzdWVzLmZvckVhY2goaXNzdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFVuYWJsZSB0byBwYXJzZSBvcHRpb24gJHtpc3N1ZS5wYXRoLmpvaW4oJywnKX06ICR7aXNzdWUubWVzc2FnZX1cXG5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyYWNlZnVsRXhpdCgxKTtcbiAgICAgICAgfSk7XG4gICAgfSkuY2F0Y2gobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZSxcbiAgICAgICAgICAgIC8vIHdlIGNhbiBhc3N1bWUgYSBjbGVhbiBleGl0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQgeyBDb21tYW5kIGFzIENvbW1hbmRlciwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGdyYWNlZnVsRXhpdCB9IGZyb20gJ2V4aXQtaG9vayc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0JztcbmltcG9ydCB7IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0JztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRQcm9kdWN0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdCc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5QZXJmb3JtYW5jZVRlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5QZXJmb3JtYW5jZVRlc3QnO1xuaW1wb3J0IHsgcnVuU2NhbGFiaWxpdHlUZXN0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0JztcbmltcG9ydCB7IHRlYXJkb3duQ2x1c3RlciB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3RlYXJkb3duQ2x1c3Rlcic7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIGdlbmVyaWMsIGluaXQsIFJ1bjEsIFJ1bjIgfSBmcm9tICcuLi9hcHQvbWVzc2FnZXMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2UgfSBmcm9tICcuLi9hcHQvcGVyZm9ybWFuY2UnO1xuaW1wb3J0IHsgU2NhbGFiaWxpdHkgfSBmcm9tICcuLi9hcHQvc2NhbGFiaWxpdHknO1xuaW1wb3J0IHsgQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL2hlbHBlcnMvQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgeyB0aW1lYm9tYiB9IGZyb20gJy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMvQXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUmVwb3J0VHlwZXMgfSBmcm9tICcuLi90eXBlcy9EQ0FQVCc7XG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmRlcigpO1xuY29uc3QgRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGNvbnNvbGUgYW5kIHNob3cgYSB3ZWxjb21lIG1lc3NhZ2VcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xceDFCYycpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZW5lcmljLmhlYWRlcik7XG4gICAgICAgIC8vIEdldCB0aGUgcHJvZHVjdCBmcm9tIHRoZSBhcmdzIG9yIGFzayBmb3IgaXQgbmljZWx5XG4gICAgICAgIGNvbnN0IHByb2R1Y3QgPSBvcHRpb25zLnByb2R1Y3QgfHwgYXdhaXQgZ2V0UHJvZHVjdCgpO1xuICAgICAgICAvLyBTaG93IHRoZSBpbml0IG1lc3NhZ2VcbiAgICAgICAgY29uc29sZS5sb2coaW5pdC5oZWFkZXIocHJvZHVjdCkpO1xuICAgICAgICAvLyBBc2sgZm9yIHRoZSB1c2VyIHRvIGNvbmZpcm0gdGhleSBhcmUgcmVhZHlcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gc3RhcnQgd2l0aCB0aGUgZmlyc3Qgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmdcbiAgICAgICAgYXdhaXQgUGVyZm9ybWFuY2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBTdGFydCB0aGUgc2NhbGFiaWxpdHkgdGVzdGluZ1xuICAgICAgICBhd2FpdCBTY2FsYWJpbGl0eSh7XG4gICAgICAgICAgICBwcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUmVwb3J0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAncGVyZm9ybWFuY2UnKSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0KHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE8gaW1wcm92ZSBlcnJvciBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9XG59KTtcbmNvbnN0IFBlcmZvcm1hbmNlVGVzdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmdcbiAgICAgICAgYXdhaXQgUGVyZm9ybWFuY2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPIGltcHJvdmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfVxufSk7XG5jb25zdCBSdW4xQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoJ2Jhc2VsaW5lJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcClcbiAgICAgICAgfSwgUnVuMSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjJDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdCgnYmFzZWxpbmUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICB9LCBSdW4yKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgU2NhbGFiaWxpdHlUZXN0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBTdGFydCB0aGUgc2NhbGFiaWxpdHkgdGVzdGluZ1xuICAgICAgICBhd2FpdCBTY2FsYWJpbGl0eSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE8gaW1wcm92ZSBlcnJvciBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjNDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnb25lLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW40Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ3R3by1ub2RlJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiB0aW1lYm9tYltvcHRpb25zLnByb2R1Y3RdLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuNUNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdmb3VyLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBQcm92aXNpb25Db21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFRlYXJkb3duQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbnByb2dyYW1cbiAgICAubmFtZSgnZGNkeCBhcHQnKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IodHJ1ZSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2RlZmF1bHQnLCB7IGlzRGVmYXVsdDogdHJ1ZSwgaGlkZGVuOiB0cnVlIH0pXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBEZWZhdWx0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3BlcmZvcm1hbmNlJylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUGVyZm9ybWFuY2VUZXN0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3NjYWxhYmlsaXR5JylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgc2NhbGFiaWxpdHkgdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFNjYWxhYmlsaXR5VGVzdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdyZXBvcnQnKVxuICAgIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgYSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyByZXBvcnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10eXBlIDx0eXBlPicsICdUaGUgdHlwZSBvZiByZXBvcnQgdG8gZ2VuZXJhdGUnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoUmVwb3J0VHlwZXMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSZXBvcnRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMScpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0IChydW4gMSknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuMUNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4yJylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbnRpbnVlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyB3aXRoIHJ1biAyJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjJDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMycpXG4gICAgLmRlc2NyaXB0aW9uKCdDb250aW51ZSB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3Rpbmcgd2l0aCBydW4gMycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW4zQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjQnKVxuICAgIC5kZXNjcmlwdGlvbignQ29udGludWUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHdpdGggcnVuIDQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuNENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW41JylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbnRpbnVlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyB3aXRoIHJ1biA1JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjVDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ1Byb3Zpc2lvbiB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgY2x1c3RlciBvbiBBV1MnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFByb3Zpc2lvbkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCd0ZWFyZG93bicpXG4gICAgLmRlc2NyaXB0aW9uKCdUZXJtaW5hdGUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGNsdXN0ZXIgb24gQVdTJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBUZWFyZG93bkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndikuY2F0Y2goKCkgPT4gZ3JhY2VmdWxFeGl0KDEpKTtcbnByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgUmVjZWl2ZWQgdGVybSBzaWduYWwsIHRyeWluZyB0byBzdG9wIGdyYWNlZnVsbHkg8J+SqmApO1xuICAgIGdyYWNlZnVsRXhpdCgpO1xufSk7XG4iXSwibmFtZXMiOlsiY3dkIiwicHdkIiwicHJvZ3Jlc3NCYXIiLCJDb21tYW5kZXIiXSwi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QUFNLGdCQUFnQixDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQk0sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9DLElBQUks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