dcdx 1.3.0-next.1 → 1.3.0-next.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/versions.json +1 -1
- package/lib/commands/apt.js +1347 -1243
- package/lib/commands/build.js +1126 -1090
- package/lib/commands/database.js +1126 -1090
- package/lib/commands/debug.js +1126 -1090
- package/lib/commands/install.js +1126 -1090
- package/lib/commands/reset.js +1126 -1090
- package/lib/commands/run.js +1126 -1090
- package/lib/commands/stop.js +1126 -1090
- package/lib/commands/update.js +1126 -1090
- package/lib/index.js +1 -1
- package/lib/types/src/apt/helpers/getOutputDirectory.d.ts +1 -1
- package/lib/types/src/types/DCAPT.d.ts +21 -9
- package/package.json +1 -1
package/lib/commands/apt.js
CHANGED
|
@@ -21,14 +21,6 @@ import { z } from 'zod';
|
|
|
21
21
|
|
|
22
22
|
const capitalize = (value) => value.charAt(0).toUpperCase() + value.slice(1);
|
|
23
23
|
|
|
24
|
-
const getNodeNumberForStage = (stage) => {
|
|
25
|
-
switch (stage) {
|
|
26
|
-
case 'one-node': return 1;
|
|
27
|
-
case 'two-node': return 2;
|
|
28
|
-
case 'four-node': return 4;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
24
|
const getRunForStage = (stage) => {
|
|
33
25
|
switch (stage) {
|
|
34
26
|
case 'baseline': return 1;
|
|
@@ -298,7 +290,7 @@ ${stage === 'one-node' ? `
|
|
|
298
290
|
|__|__|_____|_|___| |___|
|
|
299
291
|
`}
|
|
300
292
|
|
|
301
|
-
We will now start the scalability benchmark for ${stage} ${capitalize(product)} DC cluster with app-specific actions: (run ${
|
|
293
|
+
We will now start the scalability benchmark for ${stage} ${capitalize(product)} DC cluster with app-specific actions: (run ${getRunForStage(stage)})
|
|
302
294
|
|
|
303
295
|
The ${toNumber(stage)} run consists of the following steps:
|
|
304
296
|
1. Adjust the environment to a ${stage} cluster
|
|
@@ -377,6 +369,7 @@ const Teardown = {
|
|
|
377
369
|
const install = async (cwd) => {
|
|
378
370
|
console.log(`
|
|
379
371
|
Start provisioning AWS using the Atlassian Data Center App Performace Toolkit (DCAPT) Terraform configuration
|
|
372
|
+
Using DCAPT configuration from ${cwd}
|
|
380
373
|
`);
|
|
381
374
|
const baseDir = join(cwd, 'app/util/k8s');
|
|
382
375
|
writeFileSync(join(baseDir, 'outputs.json'), '# terraform output', 'utf-8');
|
|
@@ -390,7 +383,7 @@ const install = async (cwd) => {
|
|
|
390
383
|
'-v', `${baseDir}/dcapt-snapshots.json:/data-center-terraform/dcapt-snapshots.json`,
|
|
391
384
|
'-v', `${baseDir}/logs:/data-center-terraform/logs`,
|
|
392
385
|
'-v', `${baseDir}/outputs.json:/data-center-terraform/outputs.json`,
|
|
393
|
-
'atlassianlabs/terraform:
|
|
386
|
+
'atlassianlabs/terraform:latest',
|
|
394
387
|
'./install.sh', '-c', 'conf.tfvars'
|
|
395
388
|
], { cwd: baseDir, stdio: 'inherit' });
|
|
396
389
|
docker.on('exit', (code) => (code === 0) ? resolve() : reject(new Error(`Docker exited with code ${code}`)));
|
|
@@ -409,7 +402,7 @@ const runTest = async (cwd, environment, product) => {
|
|
|
409
402
|
'-e', `ENVIRONMENT_NAME=${environment}`,
|
|
410
403
|
'-v', `${cwd}:/data-center-terraform/dc-app-performance-toolkit`,
|
|
411
404
|
'-v', `${cwd}/app/util/k8s/bzt_on_pod.sh:/data-center-terraform/bzt_on_pod.sh`,
|
|
412
|
-
'atlassianlabs/terraform:
|
|
405
|
+
'atlassianlabs/terraform:latest',
|
|
413
406
|
'bash', 'bzt_on_pod.sh', `${product}.yml`
|
|
414
407
|
], { cwd, stdio: 'inherit' });
|
|
415
408
|
docker.on('exit', (code) => (code === 0) ? resolve() : reject(new Error(`Docker exited with code ${code}`)));
|
|
@@ -552,11 +545,15 @@ const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
|
|
|
552
545
|
else if (mustUseDefaultConfiguration) {
|
|
553
546
|
if (cwd$1.endsWith('.dcdx/dcapt')) {
|
|
554
547
|
console.log(' Using default configuration of DCAPT from source (non-interactive mode)');
|
|
548
|
+
console.log(` ${cwd$1}`);
|
|
549
|
+
emptyLine();
|
|
555
550
|
return cwd$1;
|
|
556
551
|
}
|
|
557
|
-
console.log(' Installing default configuration of DCAPT from source (non-interactive mode)');
|
|
558
552
|
// Use a temporary directory to ensure a fresh non-persistent checkout
|
|
559
553
|
result = join(homedir(), '.dcdx', 'dcapt');
|
|
554
|
+
console.log(' Installing default configuration of DCAPT from source (non-interactive mode)');
|
|
555
|
+
console.log(` ${result}`);
|
|
556
|
+
// Make sure the directory is empty
|
|
560
557
|
rmSync(result, { force: true, recursive: true });
|
|
561
558
|
// Retrieve DCAPT from github
|
|
562
559
|
await simpleGit().clone('https://github.com/atlassian/dc-app-performance-toolkit.git', result);
|
|
@@ -568,9 +565,11 @@ const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
|
|
|
568
565
|
const isCurrentDirectoryEligable = existsSync(join(cwd$1, 'app/util/k8s/dcapt.tfvars'));
|
|
569
566
|
// If this is not a DCAPT directory, we cannot continue
|
|
570
567
|
if (!isCurrentDirectoryEligable) {
|
|
571
|
-
throw new Error(
|
|
568
|
+
throw new Error(`Could not find App Performance Toolkit in the current directory ${cwd$1}`);
|
|
572
569
|
}
|
|
573
570
|
console.log(' Using DCAPT from current directory (non-interactive mode)');
|
|
571
|
+
console.log(` ${cwd$1}`);
|
|
572
|
+
emptyLine();
|
|
574
573
|
result = cwd$1;
|
|
575
574
|
}
|
|
576
575
|
// This should not occur, because either we have established the current directory has DCAPT
|
|
@@ -784,11 +783,13 @@ ${output}
|
|
|
784
783
|
await move(reportDir, join(options.outputDir, 'scale_profile'), { overwrite: true });
|
|
785
784
|
};
|
|
786
785
|
|
|
787
|
-
const getOutputDirectory = (timestamp) => {
|
|
786
|
+
const getOutputDirectory = (cwd, timestamp) => {
|
|
788
787
|
// Create the test run ID (used in the output directory)
|
|
789
788
|
const runId = timestamp || format(new Date(), 'yyyy-MM-dd-HH-mm');
|
|
789
|
+
// Either use the provided output directory, or default to the home directory
|
|
790
|
+
const baseDir = cwd || join(homedir(), '.dcdx', 'apt');
|
|
790
791
|
// Return the output directory for the test results
|
|
791
|
-
return join(
|
|
792
|
+
return join(baseDir, runId);
|
|
792
793
|
};
|
|
793
794
|
|
|
794
795
|
const getProduct = async () => {
|
|
@@ -803,6 +804,130 @@ const getProduct = async () => {
|
|
|
803
804
|
});
|
|
804
805
|
};
|
|
805
806
|
|
|
807
|
+
const getAWSCredentials = async (product, force) => {
|
|
808
|
+
// Try getting the AWS credentials from environment variables
|
|
809
|
+
const { AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY } = process.env;
|
|
810
|
+
// If they exists as environment variables, return them immediately
|
|
811
|
+
if (AWS_ACCESS_KEY_ID && AWS_SECRET_ACCESS_KEY) {
|
|
812
|
+
return [AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY];
|
|
813
|
+
}
|
|
814
|
+
// If we are not in non-interactive mode, we should ask for them
|
|
815
|
+
if (!force) {
|
|
816
|
+
// Show a message asking nicely
|
|
817
|
+
console.log(provisioning.askForAWSCredentials(product));
|
|
818
|
+
const aws_access_key_id = await password({
|
|
819
|
+
message: `AWS Access Key ID`,
|
|
820
|
+
validate: (input) => typeof input === 'string' && input.length > 0
|
|
821
|
+
});
|
|
822
|
+
const aws_secret_access_key = await password({
|
|
823
|
+
message: `AWS Secret Access Key`,
|
|
824
|
+
validate: (input) => typeof input === 'string' && input.length > 0
|
|
825
|
+
});
|
|
826
|
+
return [aws_access_key_id, aws_secret_access_key];
|
|
827
|
+
}
|
|
828
|
+
// If we are in non-interactive mode, and the credentials have not been found, we should throw an error
|
|
829
|
+
throw new Error(`The AWS credentials could not be found. Please provide the 'AWS_ACCESS_KEY_ID' and 'AWS_SECRET_ACCESS_KEY' environment variables`);
|
|
830
|
+
};
|
|
831
|
+
|
|
832
|
+
const getEnvironmentName = async () => {
|
|
833
|
+
console.log(provisioning.askForEnvironment);
|
|
834
|
+
return input({
|
|
835
|
+
message: `Environment name`,
|
|
836
|
+
required: true
|
|
837
|
+
});
|
|
838
|
+
};
|
|
839
|
+
|
|
840
|
+
const timebomb = {
|
|
841
|
+
'jira': 'AAACBA0ODAoPeNp9kl1v2jAUhu/zK460OyQHSLuVIkUaTbwNVBKUhEnbugsTDuA2sSPbgbFfPxOC1i+4yEXO5+vnPR+yGiGSW/CuoXc7vBoMvT4ENAOv5/WctUIUG1lVqNx7nqPQSJfccCl8GmU0mSXjlDpRXS5Qxau5RqV90ncCKQzLTcRK9Eu944Ip/cQ/M1MwrTkTbi5LZ1arfMM0hsyg7/X6A9LvE89z2j3ZvsJmQBBPpzQJxqP7U4r+qbjaN32zG+/baR2dMl6c35ei2qIah/4dvaHkOvzpkU/x5IZ8vbodOI9cMbdSclnnxj38EC1XZscUunYy36JvVI3OxGZmbZXdzwIU5lVJWi90rnjVQGoi70B873GNhPOQO51OFGfkS5yQWRKH8yAbxxGZp9Qm/EChpbGExR7MBqGdAlTkcokK7MMeMTfwa2NM9TDsdtfSfQGnWxw7CB47frsQShDSwJJro/iiNmgncw1GQl5rI0trtetY4sKgYCJ/Y4qVFSR0lNGQ3P04aDxrTKvWOjMXT0LuxCU33txaSiPffuRjr3fsO/mC6og/VmsmuGYN0Ij93TFYcVXunQaaDb4+wJbFd7vg0OI5If53NENtoK2AlVQwGScjSFt5lrjdWymu8WEIgSwtppyzAsLgxRk8P5hG9PMA3bKiPspdsULjJRwX7ukf5/NX7TAtAhUAhQSHz9DgycOX7wcwERMJb3TLGb4CFGkB/xUWSRK3BZLrPF9Rn6ZmrUqJX02oc',
|
|
842
|
+
'confluence': 'AAACzg0ODAoPeNp9VO9v2jAQ/Z6/wtK+IYWGsEKHFGmQmJau/GgIm9iYJhMOYprYke1A4a+fSchGKtqPPvvevXv3zp/6gqLHLEb2HbKsTvNzp9lC98MA2ZbdNKYgdiAGntPDQ2z688HcdH/aM7P5o2kZTzQEJiE4pDAiCTgBngaD0b0RCr5f1S9uHfcUWXSQBzuIeQrCCDlb10mo6A4cJTLQSVlIlzFUggpI8ickMbAVEbI+ypIliPG6R5Il5z4kXEF3A0xJp1Gywa8pFQePKHAmDdt6+A9cJVQEK5yWmhMV8HGZLRWkwrF8PZMgpGPfGh7IUNBUUc6cAKRCcVEYrblAaZxtKEOrsqj8V/US85zxXd+fUGwD70ickRwyf7ARACziqUYo+8Irmt/jUYD9iT+YYmNIKFPACAuvyHIaQEUSHYgz0G8rorgC8rp5qvaEZVp3pt0u8sve3TiTCsSIr0A6llGr1VwfdwPsmb25PjjbVwq2EcZcm6nS6DKX+I3iT1yP/Cy42TBe4FAK0WhZVtu6azYbZeZlB0U2wrpnkQoqq40Uyst67RqB9zU8k64olYeqKnGmNCzWiseOUoKwhLLoK1ExkZISVg95cr3ZN/YqdueSYW649/mdrfJAZOQM3b3b96DRuhVk3261kkFvexwe41UQtJN12u5Gz6GcPT7Pn71H70t69CPcbx/a9rcj3rDuwlk4xprKCA5VN+oJjsaB2R/75sQfezM3GIxH5myKT6PN/QErtDwgFQE6E9VDCLUZtN8F30Ko0K9IqXTRubnZ8HpFlZtzAyYUGb/ryOOIcYVWVCpBl5kCjUwlUhyF2mY80WaoXxdzEhOWe2YsNoRRWWxMt6xX/hH6P5uxF8b3rLJIlz1LpQW95pQPvqfLq0kmwohIeLs2l9PMzfQ48LvvWTbfMY1AXDg9KJDLCV2C9HUMH+CaJfOfudi/v0kIGVswLAIUEMQ9X77gqGBdfH0HIzBaV8NadPUCFBn+RiUA4D+IqVQpTTouLVY66aCGX02121',
|
|
843
|
+
'bitbucket': 'AAABmg0ODAoPeNp9Ul1v0zAUfc+vsMRbJadJtjGpUiS2JJRONOlaB4SAB9e9W0xTu7JvCv33eImDOoR4vefe4/PhN59hR5bckPiWRNezKJ5FCZkvGUmiJA4yrZALLPkBUrHXotEnu5eBRW6b8KMUoCyw8xH6BVZs2KKce3TJpUJQXAkofh2lOeccIV1dfRhJC7fRXrJuwJzALPL0/qF+pI9XGaPz+uGGspvbkdRx8Awcr0nRdOCnlXnmSlqOUqv0DltureTKg6vOiIZb6J9PoviaRm9pHHs0M9Cf/Rv1Dv/SP5lMyorR99WartZVXmdsUZW03hQOSHtCF+n2TLAB4hlIoYTegSFHo3+AQPK1QTx+m02nzzrko+JQ6MO0HS4oDBffQ5JrojSSnbRo5LZDcMzSEtREdBb1AYwNRzsXff0JgjCwLjG/4mB5giE+JzhbF3esyOn9lxf1F2145a6OWu2V/qmC/2dVdoctmOqptk5PGid+XJx42w3NPPHWQuD9fXJbL8PktfLhU2Av+N2rYMY6uUEFpncY/AYCgfFAMCwCFHzkBlkGH/vRdTeeBSfUMzUDb4W2AhQyM893WPg2Q8oQAYRdBSyKeVUdog==X02jr',
|
|
844
|
+
'bamboo': 'AAAB3w0ODAoPeNp9Ultr2zAYffevEOwtoMR10qYLGJbYWsno7GA7g90eZPlrotWWjCSnzX79FF8IYWkfDPJ3Oedwzvch2zdoWSvkzpF7v5jdLrwpCkiaIc/1POeRMxAasmMNEa3Az2xnHT04gQJquBQhNeB77vQGuzPs3jk5rXIpx5QZfgDfqAaGUtRUOaj4adX+PkpGy+UOhNE+vnGG5laDags9L3mtuToOJF5Pkja5ZorXJwEXHG+pJQdaNvS/cYtLAysBVFfu19ehvxXPQr4IJwV1AGULKzIneBb+8PBd/GWOH6Yf751No9ieaujleYMHKYl8++Fb13VGo1EUZ/hznOBNEofbIFvHEd6mxDb81kQoUH5EZg+op0dEMFmAQrWSf4AZ9HNvTP1rMZnsrLGmpFpzKsZMVpOy28DQbfweo1AiIQ0quDaK540Bi8w1MhKxRhtZWXvHTghn+zLQBvU46Ela1rLZcYEKOEApazvvfKXceiSoYG/kcTXhTUlFG+XVbgKVNHA+gF7BN8t3UuU5sdpRwXUXGnmlVV0CCmRVU3G8Evf5MKUw9vqIFV36tX7moNjfo7CPTxfenZIJErLMSIhX309pvDd8SUgK3smKMpJsknVKBtr26t4D+gd3AC5qMCwCFHOaTWfFvLCLJPft3qktVo3FafmZAhRojb9IAxj8KEqPDQy0stos394SQQ==X02mq'
|
|
845
|
+
};
|
|
846
|
+
const app3hour = 'AAABCA0ODAoPeNpdj01PwkAURffzKyZxZ1IyUzARkllQ24gRaQMtGnaP8VEmtjPNfFT59yJVFyzfubkn796Ux0Bz6SmbUM5nbDzj97RISxozHpMUnbSq88poUaLztFEStUN6MJZ2TaiVpu/YY2M6tI6sQrtHmx8qd74EZ+TBIvyUU/AoYs7jiE0jzknWQxMuifA2IBlUbnQ7AulVjwN9AaU9atASs69O2dNFU4wXJLc1aOUGw9w34JwCTTZoe7RPqUgep2X0Vm0n0fNut4gSxl/Jcnj9nFb6Q5tP/Ueu3L+0PHW4ghZFmm2zZV5k6/95CbR7Y9bYGo/zGrV3Ir4jRbDyCA6vt34DO8p3SDAsAhQnJjLD5k9Fr3uaIzkXKf83o5vDdQIUe4XequNCC3D+9ht9ZYhNZFKmnhc=X02dh';
|
|
847
|
+
|
|
848
|
+
const getHostLicense = (product, force) => {
|
|
849
|
+
if (force) {
|
|
850
|
+
return timebomb[product];
|
|
851
|
+
}
|
|
852
|
+
console.log(provisioning.askForLicense);
|
|
853
|
+
return input({
|
|
854
|
+
message: `License`,
|
|
855
|
+
default: timebomb[product],
|
|
856
|
+
required: true
|
|
857
|
+
});
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
const replaceLinesInFile = (path, replacer) => {
|
|
861
|
+
const contents = readFileSync(path, 'utf-8');
|
|
862
|
+
const lines = contents.split('\n');
|
|
863
|
+
const result = lines.map(replacer);
|
|
864
|
+
writeFileSync(path, result.join('\n'), 'utf-8');
|
|
865
|
+
};
|
|
866
|
+
|
|
867
|
+
const persistClusterConfiguration = (cwd, environment, product, license, nodes = 1) => {
|
|
868
|
+
replaceLinesInFile(join(cwd, 'app/util/k8s/dcapt.tfvars'), (line) => {
|
|
869
|
+
if (line.startsWith('environment_name =')) {
|
|
870
|
+
return `environment_name = "${environment}"`;
|
|
871
|
+
}
|
|
872
|
+
else if (line.startsWith('products = ')) {
|
|
873
|
+
return `products = ["${product}"]`;
|
|
874
|
+
}
|
|
875
|
+
else if (line.startsWith(`${product}_license =`)) {
|
|
876
|
+
return `${product}_license = "${license}"`;
|
|
877
|
+
}
|
|
878
|
+
else if (line.startsWith(`${product}_replica_count =`)) {
|
|
879
|
+
return `${product}_replica_count = ${nodes}`;
|
|
880
|
+
}
|
|
881
|
+
else if (line.startsWith(`${product}_additional_jvm_args = `)) {
|
|
882
|
+
return `${product}_additional_jvm_args = ["-Dupm.plugin.upload.enabled=true","-Dpassword.confirmation.disabled=true"]`;
|
|
883
|
+
}
|
|
884
|
+
return line;
|
|
885
|
+
});
|
|
886
|
+
console.log(provisioning.terraformConfigurationPersisted);
|
|
887
|
+
};
|
|
888
|
+
|
|
889
|
+
const persistAWSCredentials = (cwd, aws_access_key_id, aws_secret_access_key) => {
|
|
890
|
+
writeFileSync(join(cwd, 'app/util/k8s/aws_envs'), `
|
|
891
|
+
# aws_envs file should contain AWS variables needed for authorization (without quotes)
|
|
892
|
+
AWS_ACCESS_KEY_ID=${aws_access_key_id}
|
|
893
|
+
AWS_SECRET_ACCESS_KEY=${aws_secret_access_key}
|
|
894
|
+
`.trim(), 'utf-8');
|
|
895
|
+
console.log(provisioning.awsCredentialsPersisted);
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
const provisionCluster = async (options, mustUseDefaultConfiguration) => {
|
|
899
|
+
// Show the provisioning welcome message
|
|
900
|
+
console.log(provisioning.header);
|
|
901
|
+
// Ask for the proper directory of APT
|
|
902
|
+
const directory = await getAptDictory(options.cwd, mustUseDefaultConfiguration, options.force);
|
|
903
|
+
// Ask for the AWS credentials
|
|
904
|
+
const [aws_access_key_id, aws_secret_access_key] = await getAWSCredentials(options.product, options.force);
|
|
905
|
+
// Ask for the environment name
|
|
906
|
+
const environment = options.environment || await getEnvironmentName();
|
|
907
|
+
// Ask for the license
|
|
908
|
+
const license = await getHostLicense(options.product, options.force);
|
|
909
|
+
// Let's do this
|
|
910
|
+
console.log(provisioning.ready);
|
|
911
|
+
await waitForUserInput('Press a key to start provisiong the AWS environment...', options.force);
|
|
912
|
+
emptyLine();
|
|
913
|
+
// Write AWS credentials to disk
|
|
914
|
+
persistAWSCredentials(directory, aws_access_key_id, aws_secret_access_key);
|
|
915
|
+
// Write Terraform variables to disk
|
|
916
|
+
persistClusterConfiguration(directory, environment, options.product, license);
|
|
917
|
+
// Run the DCAPT install script
|
|
918
|
+
await install(directory);
|
|
919
|
+
// Ask permission to continue with the next step
|
|
920
|
+
await waitForUserInput('Press a key to continue with the next step...', options.force);
|
|
921
|
+
// Return all the questions we asked the user for use in other steps
|
|
922
|
+
return {
|
|
923
|
+
cwd: directory,
|
|
924
|
+
environment,
|
|
925
|
+
aws_access_key_id,
|
|
926
|
+
aws_secret_access_key,
|
|
927
|
+
license
|
|
928
|
+
};
|
|
929
|
+
};
|
|
930
|
+
|
|
806
931
|
const getClusterURL = async (cwd, product) => {
|
|
807
932
|
// Change the working directory to the Kubernetes utils directory
|
|
808
933
|
const baseDir = join(cwd, 'app/util/k8s');
|
|
@@ -923,14 +1048,6 @@ const getResultsDirectory = async (cwd, product, force) => {
|
|
|
923
1048
|
return path;
|
|
924
1049
|
};
|
|
925
1050
|
|
|
926
|
-
const timebomb = {
|
|
927
|
-
'jira': 'AAACBA0ODAoPeNp9kl1v2jAUhu/zK460OyQHSLuVIkUaTbwNVBKUhEnbugsTDuA2sSPbgbFfPxOC1i+4yEXO5+vnPR+yGiGSW/CuoXc7vBoMvT4ENAOv5/WctUIUG1lVqNx7nqPQSJfccCl8GmU0mSXjlDpRXS5Qxau5RqV90ncCKQzLTcRK9Eu944Ip/cQ/M1MwrTkTbi5LZ1arfMM0hsyg7/X6A9LvE89z2j3ZvsJmQBBPpzQJxqP7U4r+qbjaN32zG+/baR2dMl6c35ei2qIah/4dvaHkOvzpkU/x5IZ8vbodOI9cMbdSclnnxj38EC1XZscUunYy36JvVI3OxGZmbZXdzwIU5lVJWi90rnjVQGoi70B873GNhPOQO51OFGfkS5yQWRKH8yAbxxGZp9Qm/EChpbGExR7MBqGdAlTkcokK7MMeMTfwa2NM9TDsdtfSfQGnWxw7CB47frsQShDSwJJro/iiNmgncw1GQl5rI0trtetY4sKgYCJ/Y4qVFSR0lNGQ3P04aDxrTKvWOjMXT0LuxCU33txaSiPffuRjr3fsO/mC6og/VmsmuGYN0Ij93TFYcVXunQaaDb4+wJbFd7vg0OI5If53NENtoK2AlVQwGScjSFt5lrjdWymu8WEIgSwtppyzAsLgxRk8P5hG9PMA3bKiPspdsULjJRwX7ukf5/NX7TAtAhUAhQSHz9DgycOX7wcwERMJb3TLGb4CFGkB/xUWSRK3BZLrPF9Rn6ZmrUqJX02oc',
|
|
928
|
-
'confluence': 'AAACzg0ODAoPeNp9VO9v2jAQ/Z6/wtK+IYWGsEKHFGmQmJau/GgIm9iYJhMOYprYke1A4a+fSchGKtqPPvvevXv3zp/6gqLHLEb2HbKsTvNzp9lC98MA2ZbdNKYgdiAGntPDQ2z688HcdH/aM7P5o2kZTzQEJiE4pDAiCTgBngaD0b0RCr5f1S9uHfcUWXSQBzuIeQrCCDlb10mo6A4cJTLQSVlIlzFUggpI8ickMbAVEbI+ypIliPG6R5Il5z4kXEF3A0xJp1Gywa8pFQePKHAmDdt6+A9cJVQEK5yWmhMV8HGZLRWkwrF8PZMgpGPfGh7IUNBUUc6cAKRCcVEYrblAaZxtKEOrsqj8V/US85zxXd+fUGwD70ickRwyf7ARACziqUYo+8Irmt/jUYD9iT+YYmNIKFPACAuvyHIaQEUSHYgz0G8rorgC8rp5qvaEZVp3pt0u8sve3TiTCsSIr0A6llGr1VwfdwPsmb25PjjbVwq2EcZcm6nS6DKX+I3iT1yP/Cy42TBe4FAK0WhZVtu6azYbZeZlB0U2wrpnkQoqq40Uyst67RqB9zU8k64olYeqKnGmNCzWiseOUoKwhLLoK1ExkZISVg95cr3ZN/YqdueSYW649/mdrfJAZOQM3b3b96DRuhVk3261kkFvexwe41UQtJN12u5Gz6GcPT7Pn71H70t69CPcbx/a9rcj3rDuwlk4xprKCA5VN+oJjsaB2R/75sQfezM3GIxH5myKT6PN/QErtDwgFQE6E9VDCLUZtN8F30Ko0K9IqXTRubnZ8HpFlZtzAyYUGb/ryOOIcYVWVCpBl5kCjUwlUhyF2mY80WaoXxdzEhOWe2YsNoRRWWxMt6xX/hH6P5uxF8b3rLJIlz1LpQW95pQPvqfLq0kmwohIeLs2l9PMzfQ48LvvWTbfMY1AXDg9KJDLCV2C9HUMH+CaJfOfudi/v0kIGVswLAIUEMQ9X77gqGBdfH0HIzBaV8NadPUCFBn+RiUA4D+IqVQpTTouLVY66aCGX02121',
|
|
929
|
-
'bitbucket': 'AAABmg0ODAoPeNp9Ul1v0zAUfc+vsMRbJadJtjGpUiS2JJRONOlaB4SAB9e9W0xTu7JvCv33eImDOoR4vefe4/PhN59hR5bckPiWRNezKJ5FCZkvGUmiJA4yrZALLPkBUrHXotEnu5eBRW6b8KMUoCyw8xH6BVZs2KKce3TJpUJQXAkofh2lOeccIV1dfRhJC7fRXrJuwJzALPL0/qF+pI9XGaPz+uGGspvbkdRx8Awcr0nRdOCnlXnmSlqOUqv0DltureTKg6vOiIZb6J9PoviaRm9pHHs0M9Cf/Rv1Dv/SP5lMyorR99WartZVXmdsUZW03hQOSHtCF+n2TLAB4hlIoYTegSFHo3+AQPK1QTx+m02nzzrko+JQ6MO0HS4oDBffQ5JrojSSnbRo5LZDcMzSEtREdBb1AYwNRzsXff0JgjCwLjG/4mB5giE+JzhbF3esyOn9lxf1F2145a6OWu2V/qmC/2dVdoctmOqptk5PGid+XJx42w3NPPHWQuD9fXJbL8PktfLhU2Av+N2rYMY6uUEFpncY/AYCgfFAMCwCFHzkBlkGH/vRdTeeBSfUMzUDb4W2AhQyM893WPg2Q8oQAYRdBSyKeVUdog==X02jr',
|
|
930
|
-
'bamboo': 'AAAB3w0ODAoPeNp9Ultr2zAYffevEOwtoMR10qYLGJbYWsno7GA7g90eZPlrotWWjCSnzX79FF8IYWkfDPJ3Oedwzvch2zdoWSvkzpF7v5jdLrwpCkiaIc/1POeRMxAasmMNEa3Az2xnHT04gQJquBQhNeB77vQGuzPs3jk5rXIpx5QZfgDfqAaGUtRUOaj4adX+PkpGy+UOhNE+vnGG5laDags9L3mtuToOJF5Pkja5ZorXJwEXHG+pJQdaNvS/cYtLAysBVFfu19ehvxXPQr4IJwV1AGULKzIneBb+8PBd/GWOH6Yf751No9ieaujleYMHKYl8++Fb13VGo1EUZ/hznOBNEofbIFvHEd6mxDb81kQoUH5EZg+op0dEMFmAQrWSf4AZ9HNvTP1rMZnsrLGmpFpzKsZMVpOy28DQbfweo1AiIQ0quDaK540Bi8w1MhKxRhtZWXvHTghn+zLQBvU46Ela1rLZcYEKOEApazvvfKXceiSoYG/kcTXhTUlFG+XVbgKVNHA+gF7BN8t3UuU5sdpRwXUXGnmlVV0CCmRVU3G8Evf5MKUw9vqIFV36tX7moNjfo7CPTxfenZIJErLMSIhX309pvDd8SUgK3smKMpJsknVKBtr26t4D+gd3AC5qMCwCFHOaTWfFvLCLJPft3qktVo3FafmZAhRojb9IAxj8KEqPDQy0stos394SQQ==X02mq'
|
|
931
|
-
};
|
|
932
|
-
const app3hour = 'AAABCA0ODAoPeNpdj01PwkAURffzKyZxZ1IyUzARkllQ24gRaQMtGnaP8VEmtjPNfFT59yJVFyzfubkn796Ux0Bz6SmbUM5nbDzj97RISxozHpMUnbSq88poUaLztFEStUN6MJZ2TaiVpu/YY2M6tI6sQrtHmx8qd74EZ+TBIvyUU/AoYs7jiE0jzknWQxMuifA2IBlUbnQ7AulVjwN9AaU9atASs69O2dNFU4wXJLc1aOUGw9w34JwCTTZoe7RPqUgep2X0Vm0n0fNut4gSxl/Jcnj9nFb6Q5tP/Ueu3L+0PHW4ghZFmm2zZV5k6/95CbR7Y9bYGo/zGrV3Ir4jRbDyCA6vt34DO8p3SDAsAhQnJjLD5k9Fr3uaIzkXKf83o5vDdQIUe4XequNCC3D+9ht9ZYhNZFKmnhc=X02dh';
|
|
933
|
-
|
|
934
1051
|
const uploadToUPM = async (baseUrl, path, username, password, verbose = true) => {
|
|
935
1052
|
const credentials = username && password ? Buffer.from(`${username}:${password}`).toString('base64') : null;
|
|
936
1053
|
const response = await axios.get(`${baseUrl}/rest/plugins/1.0/?os_authType=basic`, credentials ? {
|
|
@@ -1125,13 +1242,6 @@ const installApp = async (baseUrl, appKey, license = app3hour, force) => {
|
|
|
1125
1242
|
}
|
|
1126
1243
|
};
|
|
1127
1244
|
|
|
1128
|
-
const replaceLinesInFile = (path, replacer) => {
|
|
1129
|
-
const contents = readFileSync(path, 'utf-8');
|
|
1130
|
-
const lines = contents.split('\n');
|
|
1131
|
-
const result = lines.map(replacer);
|
|
1132
|
-
writeFileSync(path, result.join('\n'), 'utf-8');
|
|
1133
|
-
};
|
|
1134
|
-
|
|
1135
1245
|
const persistTestConfiguration = async (cwd, product, baseUrl, duration, withAppSpecificActions, force) => {
|
|
1136
1246
|
const productURI = new URL(baseUrl);
|
|
1137
1247
|
const protocol = productURI.protocol.startsWith('https') ? 'https' : 'http';
|
|
@@ -1283,6 +1393,11 @@ const reindex = async (baseUrl, outputDir, force) => {
|
|
|
1283
1393
|
// Now throw a hissy fit anyway
|
|
1284
1394
|
throw new Error('Lucence Index Timing test failed');
|
|
1285
1395
|
}
|
|
1396
|
+
else {
|
|
1397
|
+
console.log(`
|
|
1398
|
+
✔ Lucence re-index of Jira has completed
|
|
1399
|
+
`);
|
|
1400
|
+
}
|
|
1286
1401
|
// Update the loop variable
|
|
1287
1402
|
isFinished = finished;
|
|
1288
1403
|
}
|
|
@@ -1382,6 +1497,7 @@ const runPerformanceTest = async (stage, options, messages) => {
|
|
|
1382
1497
|
// If we need to overwrite the test results, we should do so
|
|
1383
1498
|
if (overwriteExistingResults) {
|
|
1384
1499
|
console.log('Removing existing test results');
|
|
1500
|
+
// Remove the directory
|
|
1385
1501
|
rmSync(runOutputDir, { force: true });
|
|
1386
1502
|
// If we are not allowed to overwrite the test results, there is no point in running this test
|
|
1387
1503
|
}
|
|
@@ -1392,6 +1508,7 @@ const runPerformanceTest = async (stage, options, messages) => {
|
|
|
1392
1508
|
// If the test run was not successful, we are going to overwrite it without asking
|
|
1393
1509
|
}
|
|
1394
1510
|
else {
|
|
1511
|
+
// Remove the directory
|
|
1395
1512
|
rmSync(runOutputDir, { force: true });
|
|
1396
1513
|
}
|
|
1397
1514
|
}
|
|
@@ -1410,6 +1527,10 @@ const runPerformanceTest = async (stage, options, messages) => {
|
|
|
1410
1527
|
console.log(messages.startPerformanceTest);
|
|
1411
1528
|
// Allow users to set a different test duration (for validation purposes)
|
|
1412
1529
|
const duration = await getDuration(options.force);
|
|
1530
|
+
// Ask for the AWS credentials
|
|
1531
|
+
const [aws_access_key_id, aws_secret_access_key] = await getAWSCredentials(options.product, options.force);
|
|
1532
|
+
// Write AWS credentials to disk
|
|
1533
|
+
persistAWSCredentials(cwd, aws_access_key_id, aws_secret_access_key);
|
|
1413
1534
|
// Write test configuration to disk
|
|
1414
1535
|
await persistTestConfiguration(cwd, options.product, baseUrl, duration, false, options.force);
|
|
1415
1536
|
// Get the results directory (and make sure it is empty)
|
|
@@ -1432,26 +1553,12 @@ const runPerformanceTest = async (stage, options, messages) => {
|
|
|
1432
1553
|
await waitForUserInput('Press a key to continue with the next step...', options.force);
|
|
1433
1554
|
};
|
|
1434
1555
|
|
|
1435
|
-
const
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
return `products = ["${product}"]`;
|
|
1442
|
-
}
|
|
1443
|
-
else if (line.startsWith(`${product}_license =`)) {
|
|
1444
|
-
return `${product}_license = "${license}"`;
|
|
1445
|
-
}
|
|
1446
|
-
else if (line.startsWith(`${product}_replica_count =`)) {
|
|
1447
|
-
return `${product}_replica_count = ${nodes}`;
|
|
1448
|
-
}
|
|
1449
|
-
else if (line.startsWith(`${product}_additional_jvm_args = `)) {
|
|
1450
|
-
return `${product}_additional_jvm_args = ["-Dupm.plugin.upload.enabled=true","-Dpassword.confirmation.disabled=true"]`;
|
|
1451
|
-
}
|
|
1452
|
-
return line;
|
|
1453
|
-
});
|
|
1454
|
-
console.log(provisioning.terraformConfigurationPersisted);
|
|
1556
|
+
const getNodeNumberForStage = (stage) => {
|
|
1557
|
+
switch (stage) {
|
|
1558
|
+
case 'one-node': return 1;
|
|
1559
|
+
case 'two-node': return 2;
|
|
1560
|
+
case 'four-node': return 4;
|
|
1561
|
+
}
|
|
1455
1562
|
};
|
|
1456
1563
|
|
|
1457
1564
|
const runScalabilityTest = async (stage, options) => {
|
|
@@ -1475,6 +1582,7 @@ const runScalabilityTest = async (stage, options) => {
|
|
|
1475
1582
|
// If we need to overwrite the test results, we should do so
|
|
1476
1583
|
if (overwriteExistingResults) {
|
|
1477
1584
|
console.log('Removing existing test results');
|
|
1585
|
+
// Remove the directry
|
|
1478
1586
|
rmSync(runOutputDir, { force: true });
|
|
1479
1587
|
// If we are not allowed to overwrite the test results, there is no point in running this test
|
|
1480
1588
|
}
|
|
@@ -1485,15 +1593,20 @@ const runScalabilityTest = async (stage, options) => {
|
|
|
1485
1593
|
// If the test run was not successful, we are going to overwrite it without asking
|
|
1486
1594
|
}
|
|
1487
1595
|
else {
|
|
1596
|
+
// Remove the directory
|
|
1488
1597
|
rmSync(runOutputDir, { force: true });
|
|
1489
1598
|
}
|
|
1490
1599
|
}
|
|
1491
1600
|
// Make sure the output directory exists
|
|
1492
1601
|
mkdirSync(options.outputDir, { recursive: true });
|
|
1602
|
+
// Ask for the AWS credentials
|
|
1603
|
+
const [aws_access_key_id, aws_secret_access_key] = await getAWSCredentials(options.product, options.force);
|
|
1493
1604
|
// Inform the user that we will now start the scalability benchmark
|
|
1494
1605
|
console.log(ScalabilityTestMessages.readyForProvisioning);
|
|
1495
1606
|
await waitForUserInput('Press a key to prepare the AWS environment for scalability benchmark testing...', options.force);
|
|
1496
1607
|
emptyLine();
|
|
1608
|
+
// Write AWS credentials to disk
|
|
1609
|
+
persistAWSCredentials(cwd, aws_access_key_id, aws_secret_access_key);
|
|
1497
1610
|
// Write Terraform variables to disk (one-node cluster)
|
|
1498
1611
|
persistClusterConfiguration(cwd, options.environment, options.product, options.license, nodes);
|
|
1499
1612
|
// Run the DCAPT install script
|
|
@@ -1528,40 +1641,6 @@ const runScalabilityTest = async (stage, options) => {
|
|
|
1528
1641
|
await waitForUserInput('Press a key to continue with the next step...', options.force);
|
|
1529
1642
|
};
|
|
1530
1643
|
|
|
1531
|
-
const getAWSCredentials = async (product, force) => {
|
|
1532
|
-
// Try getting the AWS credentials from environment variables
|
|
1533
|
-
const { AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY } = process.env;
|
|
1534
|
-
// If they exists as environment variables, return them immediately
|
|
1535
|
-
if (AWS_ACCESS_KEY_ID && AWS_SECRET_ACCESS_KEY) {
|
|
1536
|
-
return [AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY];
|
|
1537
|
-
}
|
|
1538
|
-
// If we are not in non-interactive mode, we should ask for them
|
|
1539
|
-
if (!force) {
|
|
1540
|
-
// Show a message asking nicely
|
|
1541
|
-
console.log(provisioning.askForAWSCredentials(product));
|
|
1542
|
-
const aws_access_key_id = await password({
|
|
1543
|
-
message: `AWS Access Key ID`,
|
|
1544
|
-
validate: (input) => typeof input === 'string' && input.length > 0
|
|
1545
|
-
});
|
|
1546
|
-
const aws_secret_access_key = await password({
|
|
1547
|
-
message: `AWS Secret Access Key`,
|
|
1548
|
-
validate: (input) => typeof input === 'string' && input.length > 0
|
|
1549
|
-
});
|
|
1550
|
-
return [aws_access_key_id, aws_secret_access_key];
|
|
1551
|
-
}
|
|
1552
|
-
// If we are in non-interactive mode, and the credentials have not been found, we should throw an error
|
|
1553
|
-
throw new Error(`The AWS credentials could not be found. Please provide the 'AWS_ACCESS_KEY_ID' and 'AWS_SECRET_ACCESS_KEY' environment variables`);
|
|
1554
|
-
};
|
|
1555
|
-
|
|
1556
|
-
const persistAWSCredentials = (cwd, aws_access_key_id, aws_secret_access_key) => {
|
|
1557
|
-
writeFileSync(join(cwd, 'app/util/k8s/aws_envs'), `
|
|
1558
|
-
# aws_envs file should contain AWS variables needed for authorization (without quotes)
|
|
1559
|
-
AWS_ACCESS_KEY_ID=${aws_access_key_id}
|
|
1560
|
-
AWS_SECRET_ACCESS_KEY=${aws_secret_access_key}
|
|
1561
|
-
`.trim(), 'utf-8');
|
|
1562
|
-
console.log(provisioning.awsCredentialsPersisted);
|
|
1563
|
-
};
|
|
1564
|
-
|
|
1565
1644
|
const teardownCluster = async (options) => {
|
|
1566
1645
|
// Show nice little welcome message
|
|
1567
1646
|
console.log(Teardown.header);
|
|
@@ -1575,571 +1654,571 @@ const teardownCluster = async (options) => {
|
|
|
1575
1654
|
await waitForUserInput('Press a key to continue...', options.force);
|
|
1576
1655
|
emptyLine();
|
|
1577
1656
|
// Terminate it!
|
|
1578
|
-
await terminate(
|
|
1657
|
+
await terminate(directory, options.environment);
|
|
1579
1658
|
// Ask the user to quit the program
|
|
1580
1659
|
await waitForUserInput('Press a key to exit...', options.force);
|
|
1581
1660
|
};
|
|
1582
1661
|
|
|
1583
1662
|
var jira = [
|
|
1584
|
-
"
|
|
1585
|
-
"10.
|
|
1586
|
-
"10.
|
|
1587
|
-
"
|
|
1588
|
-
"
|
|
1589
|
-
"
|
|
1590
|
-
"10.
|
|
1591
|
-
"10.
|
|
1592
|
-
"10.
|
|
1593
|
-
"10
|
|
1594
|
-
"
|
|
1595
|
-
"10.
|
|
1596
|
-
"
|
|
1597
|
-
"
|
|
1598
|
-
"
|
|
1599
|
-
"
|
|
1600
|
-
"
|
|
1601
|
-
"
|
|
1602
|
-
"
|
|
1603
|
-
"
|
|
1604
|
-
"
|
|
1605
|
-
"
|
|
1606
|
-
"
|
|
1607
|
-
"
|
|
1608
|
-
"
|
|
1609
|
-
"
|
|
1610
|
-
"9
|
|
1611
|
-
"9.9.0",
|
|
1612
|
-
"9-ubuntu-jdk11",
|
|
1613
|
-
"9-jdk17",
|
|
1614
|
-
"9-jdk11",
|
|
1615
|
-
"9.9-ubuntu-jdk17",
|
|
1616
|
-
"9.9-ubuntu-jdk11",
|
|
1617
|
-
"9.9.2-ubuntu-jdk17",
|
|
1618
|
-
"9.9-jdk17",
|
|
1619
|
-
"9.9-jdk11",
|
|
1620
|
-
"9.9.2-ubi9-jdk17",
|
|
1621
|
-
"9.9.2-ubuntu-jdk11",
|
|
1622
|
-
"9.9.2-ubi9",
|
|
1623
|
-
"9.9.2-jdk17",
|
|
1624
|
-
"9.9.2",
|
|
1625
|
-
"9.9.2-jdk11",
|
|
1626
|
-
"9.9.1-ubuntu-jdk17",
|
|
1627
|
-
"9.9.1-ubuntu-jdk11",
|
|
1628
|
-
"9.9.1-ubi9-jdk17",
|
|
1629
|
-
"9.9.1-ubi9",
|
|
1630
|
-
"9.9.1-jdk17",
|
|
1631
|
-
"9.9.1-jdk11",
|
|
1632
|
-
"9.9.0-ubuntu-jdk17",
|
|
1633
|
-
"9.9.1",
|
|
1634
|
-
"9.5.0-ubi9-jdk17",
|
|
1635
|
-
"9.8-jdk17",
|
|
1636
|
-
"9.9.0-ubuntu-jdk11",
|
|
1637
|
-
"9.9.0-ubi9-jdk17",
|
|
1638
|
-
"9.9.0-ubi9",
|
|
1639
|
-
"9.9.0-jdk17",
|
|
1640
|
-
"9.9.0-jdk11",
|
|
1641
|
-
"9.9",
|
|
1642
|
-
"9.8-ubuntu-jdk17",
|
|
1643
|
-
"9.8-ubuntu-jdk11",
|
|
1644
|
-
"9.8-jdk11",
|
|
1645
|
-
"9.8.2-ubuntu-jdk17",
|
|
1646
|
-
"9.8.2-ubuntu-jdk11",
|
|
1647
|
-
"9.8.2-ubi9-jdk17",
|
|
1648
|
-
"9.8.2-ubi9",
|
|
1649
|
-
"9.8.2-jdk17",
|
|
1650
|
-
"9.8.2-jdk11",
|
|
1651
|
-
"9.8.1-ubuntu-jdk17",
|
|
1652
|
-
"9.8.2",
|
|
1653
|
-
"9.8.1-ubuntu-jdk11",
|
|
1654
|
-
"9.8.1-ubi9-jdk17",
|
|
1655
|
-
"9.8.1-ubi9",
|
|
1656
|
-
"9.8.1-jdk11",
|
|
1657
|
-
"9.8.1-jdk17",
|
|
1658
|
-
"9.8.1",
|
|
1659
|
-
"9.8.0-ubuntu-jdk17",
|
|
1660
|
-
"9.8.0-ubuntu-jdk11",
|
|
1661
|
-
"9.8.0-ubi9-jdk17",
|
|
1662
|
-
"9.8.0-jdk17",
|
|
1663
|
-
"9.8.0-ubi9",
|
|
1664
|
-
"9.8.0-jdk11",
|
|
1665
|
-
"9.8.0",
|
|
1666
|
-
"9.8",
|
|
1667
|
-
"9.7-ubuntu-jdk17",
|
|
1668
|
-
"9.7-ubuntu-jdk11",
|
|
1669
|
-
"9.7-jdk17",
|
|
1670
|
-
"9.7-jdk11",
|
|
1671
|
-
"9.7.2-ubuntu-jdk17",
|
|
1672
|
-
"9.7.2-ubuntu-jdk11",
|
|
1673
|
-
"9.7.2-ubi9-jdk17",
|
|
1674
|
-
"9.7.2-ubi9",
|
|
1675
|
-
"9.7.2-jdk17",
|
|
1676
|
-
"9.7.2-jdk11",
|
|
1677
|
-
"9.7.1-ubuntu-jdk17",
|
|
1678
|
-
"9.7.2",
|
|
1663
|
+
"10.0.0-ubuntu-jdk17",
|
|
1664
|
+
"10.0.0",
|
|
1665
|
+
"10.0.0-jdk17",
|
|
1666
|
+
"9.15.1-jdk17",
|
|
1667
|
+
"9.15.1",
|
|
1668
|
+
"9.15.1-ubuntu-jdk17",
|
|
1669
|
+
"10.0.1-jdk17",
|
|
1670
|
+
"10.0.1",
|
|
1671
|
+
"10.0-ubuntu-jdk17",
|
|
1672
|
+
"10.0",
|
|
1673
|
+
"10.0-jdk17",
|
|
1674
|
+
"10.0.1-ubuntu-jdk17",
|
|
1675
|
+
"9.12.5",
|
|
1676
|
+
"9.15.2-ubuntu-jdk17",
|
|
1677
|
+
"9.15",
|
|
1678
|
+
"9.12.5-jdk17",
|
|
1679
|
+
"9.12.5-ubuntu-jdk17",
|
|
1680
|
+
"9.15.2-jdk17",
|
|
1681
|
+
"9.15-jdk17",
|
|
1682
|
+
"9.15.2",
|
|
1683
|
+
"9.15-ubuntu-jdk17",
|
|
1684
|
+
"9.12.1",
|
|
1685
|
+
"9.12.1-ubuntu-jdk17",
|
|
1686
|
+
"9.12.1-jdk17",
|
|
1687
|
+
"9.12.6-ubuntu-jdk17",
|
|
1688
|
+
"9.12.6-jdk17",
|
|
1689
|
+
"9.12.11",
|
|
1679
1690
|
"9.7.1-ubuntu-jdk11",
|
|
1680
|
-
"9.
|
|
1681
|
-
"9.7.1-ubi9",
|
|
1682
|
-
"9.7.1-jdk17",
|
|
1691
|
+
"9.12.6",
|
|
1683
1692
|
"9.7.1-jdk11",
|
|
1693
|
+
"10.1",
|
|
1694
|
+
"10.1.2",
|
|
1695
|
+
"10.1-ubuntu-jdk17",
|
|
1684
1696
|
"9.7.1",
|
|
1685
|
-
"9.
|
|
1686
|
-
"
|
|
1687
|
-
"9.
|
|
1688
|
-
"9.
|
|
1689
|
-
"
|
|
1690
|
-
"9.
|
|
1691
|
-
"9.
|
|
1697
|
+
"9.14-ubuntu-jdk11",
|
|
1698
|
+
"10.1.2-jdk17",
|
|
1699
|
+
"9.12.10-ubuntu-jdk17",
|
|
1700
|
+
"9.14-jdk11",
|
|
1701
|
+
"10.1.2-ubuntu-jdk17",
|
|
1702
|
+
"9.12.10",
|
|
1703
|
+
"9.12.10-jdk17",
|
|
1704
|
+
"9.12.11-ubuntu-jdk17",
|
|
1705
|
+
"9.14.1-jdk11",
|
|
1706
|
+
"9.14.1-ubuntu-jdk11",
|
|
1707
|
+
"10.1-jdk17",
|
|
1708
|
+
"9.12.7-jdk17",
|
|
1709
|
+
"10.1.1",
|
|
1710
|
+
"9.12.11-jdk17",
|
|
1711
|
+
"10.1.1-ubuntu-jdk17",
|
|
1712
|
+
"9.16.0-jdk17",
|
|
1713
|
+
"9.7-jdk11",
|
|
1692
1714
|
"9.7",
|
|
1693
|
-
"9.
|
|
1694
|
-
"
|
|
1695
|
-
"9.
|
|
1696
|
-
"9.
|
|
1697
|
-
"9.6.0-ubuntu-jdk17",
|
|
1698
|
-
"9.6.0-ubi9-jdk17",
|
|
1699
|
-
"9.6.0-ubuntu-jdk11",
|
|
1700
|
-
"9.6.0-ubi9",
|
|
1701
|
-
"9.6.0-jdk17",
|
|
1702
|
-
"9.6.0-jdk11",
|
|
1703
|
-
"9.6.0",
|
|
1704
|
-
"9.6",
|
|
1705
|
-
"9.5-ubuntu-jdk17",
|
|
1706
|
-
"9.5-ubuntu-jdk11",
|
|
1707
|
-
"9.5-jdk17",
|
|
1708
|
-
"9.5-jdk11",
|
|
1709
|
-
"9.5.1-ubuntu-jdk17",
|
|
1710
|
-
"9.5.1-ubuntu-jdk11",
|
|
1711
|
-
"9.5.1-ubi9-jdk17",
|
|
1712
|
-
"9.5.1-ubi9",
|
|
1713
|
-
"9.5.1-jdk17",
|
|
1714
|
-
"9.5.1-jdk11",
|
|
1715
|
-
"9.5.1",
|
|
1716
|
-
"9.5.0-ubuntu-jdk17",
|
|
1717
|
-
"9.5.0-ubuntu-jdk11",
|
|
1718
|
-
"9.5.0-ubi9",
|
|
1719
|
-
"9.5.0-jdk17",
|
|
1720
|
-
"9.5.0-jdk11",
|
|
1721
|
-
"9.5.0",
|
|
1722
|
-
"9.5",
|
|
1723
|
-
"9.4-jdk11",
|
|
1724
|
-
"9.4-ubuntu-jdk11",
|
|
1725
|
-
"9.4.9-ubuntu-jdk11",
|
|
1726
|
-
"9.4.9-jdk11",
|
|
1727
|
-
"9.4.9",
|
|
1728
|
-
"9.4.8-ubuntu-jdk11",
|
|
1729
|
-
"9.4.8",
|
|
1730
|
-
"9.4.8-jdk11",
|
|
1731
|
-
"9.4.7-ubuntu-jdk11",
|
|
1732
|
-
"9.4.7-jdk11",
|
|
1733
|
-
"9.4.7",
|
|
1734
|
-
"9.4.6-ubuntu-jdk11",
|
|
1735
|
-
"9.4.6-jdk11",
|
|
1736
|
-
"9.4.6",
|
|
1737
|
-
"9.4.5-ubuntu-jdk11",
|
|
1738
|
-
"9.4.5-jdk11",
|
|
1739
|
-
"9.4.5",
|
|
1740
|
-
"9.4.4-ubuntu-jdk11",
|
|
1741
|
-
"9.4.4-jdk11",
|
|
1742
|
-
"9.4.4",
|
|
1743
|
-
"9.4.3-ubuntu-jdk11",
|
|
1744
|
-
"9.4.3-jdk11",
|
|
1745
|
-
"9.4.3",
|
|
1715
|
+
"9.12.7-ubuntu-jdk17",
|
|
1716
|
+
"10.1.1-jdk17",
|
|
1717
|
+
"9.16.1",
|
|
1718
|
+
"9.7.2",
|
|
1746
1719
|
"9.4.2-ubuntu-jdk11",
|
|
1747
|
-
"9.4.
|
|
1720
|
+
"9.4.2",
|
|
1721
|
+
"9.12.7",
|
|
1722
|
+
"9.16-jdk17",
|
|
1723
|
+
"9.7.2-jdk11",
|
|
1724
|
+
"9.16.0-ubuntu-jdk17",
|
|
1725
|
+
"9.7-ubuntu-jdk11",
|
|
1726
|
+
"9.4.26",
|
|
1727
|
+
"9.4.26-jdk11",
|
|
1728
|
+
"9.16-ubuntu-jdk17",
|
|
1729
|
+
"9.16.0",
|
|
1730
|
+
"9.15.0-jdk11",
|
|
1731
|
+
"9.7.2-ubuntu-jdk11",
|
|
1732
|
+
"9.12.12-jdk17",
|
|
1733
|
+
"9.12.7-jdk11",
|
|
1734
|
+
"9.4.7",
|
|
1735
|
+
"9.16.1-jdk17",
|
|
1736
|
+
"9.12.7-ubuntu-jdk11",
|
|
1737
|
+
"9.16.1-ubuntu-jdk17",
|
|
1748
1738
|
"9.4.2-jdk11",
|
|
1749
|
-
"9.
|
|
1750
|
-
"9.
|
|
1751
|
-
"9.
|
|
1752
|
-
"9.4.27-jdk11",
|
|
1753
|
-
"9.4.27",
|
|
1739
|
+
"9.12.12",
|
|
1740
|
+
"9.10.0-ubuntu-jdk11",
|
|
1741
|
+
"9.16",
|
|
1754
1742
|
"9.4.26-ubuntu-jdk11",
|
|
1755
|
-
"9.
|
|
1756
|
-
"9.
|
|
1757
|
-
"9.
|
|
1758
|
-
"9.
|
|
1759
|
-
"9.4.
|
|
1760
|
-
"9.
|
|
1761
|
-
"9.4.
|
|
1762
|
-
"9.4.
|
|
1763
|
-
"9.
|
|
1764
|
-
"9.
|
|
1765
|
-
"9.
|
|
1766
|
-
"9.
|
|
1767
|
-
"9.
|
|
1768
|
-
"9.4.
|
|
1769
|
-
"9.
|
|
1770
|
-
"9.
|
|
1771
|
-
"9.
|
|
1743
|
+
"9.12.8",
|
|
1744
|
+
"9.10.0-jdk11",
|
|
1745
|
+
"9.12.12-ubuntu-jdk17",
|
|
1746
|
+
"9.12.8-jdk17",
|
|
1747
|
+
"9.4.12-jdk11",
|
|
1748
|
+
"9.8.0-jdk11",
|
|
1749
|
+
"9.4.7-jdk11",
|
|
1750
|
+
"9.4.7-ubuntu-jdk11",
|
|
1751
|
+
"9.15.0-ubuntu-jdk11",
|
|
1752
|
+
"9.12.8-ubuntu-jdk17",
|
|
1753
|
+
"9.17.0-ubuntu-jdk11",
|
|
1754
|
+
"9.12-jdk11",
|
|
1755
|
+
"9.12.15-jdk11",
|
|
1756
|
+
"9.4.12",
|
|
1757
|
+
"9.12.9-jdk17",
|
|
1758
|
+
"9.12-ubuntu-jdk11",
|
|
1759
|
+
"9.10.0",
|
|
1760
|
+
"9.12.9-ubuntu-jdk17",
|
|
1761
|
+
"9.12.15-ubuntu-jdk11",
|
|
1762
|
+
"9.8.0",
|
|
1763
|
+
"latest",
|
|
1764
|
+
"9.4.12-ubuntu-jdk11",
|
|
1765
|
+
"9.8.0-ubuntu-jdk11",
|
|
1766
|
+
"9.12.9",
|
|
1767
|
+
"9.4.8-ubuntu-jdk11",
|
|
1768
|
+
"9.4.8-jdk11",
|
|
1769
|
+
"ubuntu-jdk17",
|
|
1770
|
+
"9.17.0-jdk11",
|
|
1771
|
+
"9.12.13-jdk17",
|
|
1772
|
+
"9.12.13-ubuntu-jdk17",
|
|
1773
|
+
"10-jdk17",
|
|
1774
|
+
"9.4.27",
|
|
1775
|
+
"10.2-ubuntu-jdk17",
|
|
1776
|
+
"9.4.27-jdk11",
|
|
1777
|
+
"9.12.1-ubuntu-jdk11",
|
|
1772
1778
|
"9.4.20-ubuntu-jdk11",
|
|
1773
1779
|
"9.4.20-jdk11",
|
|
1780
|
+
"9.4.27-ubuntu-jdk11",
|
|
1774
1781
|
"9.4.20",
|
|
1775
|
-
"
|
|
1776
|
-
"
|
|
1777
|
-
"
|
|
1778
|
-
"
|
|
1779
|
-
"
|
|
1780
|
-
"9.4.
|
|
1781
|
-
"9.
|
|
1782
|
-
"9.
|
|
1783
|
-
"
|
|
1784
|
-
"9.
|
|
1785
|
-
"
|
|
1786
|
-
"9.
|
|
1787
|
-
"9.
|
|
1788
|
-
"
|
|
1789
|
-
"9.
|
|
1790
|
-
"9.4.
|
|
1791
|
-
"9.
|
|
1792
|
-
"9.
|
|
1793
|
-
"9.
|
|
1794
|
-
"9.
|
|
1782
|
+
"10",
|
|
1783
|
+
"10-ubuntu-jdk17",
|
|
1784
|
+
"10.2-jdk17",
|
|
1785
|
+
"10.2.0-jdk17",
|
|
1786
|
+
"10.2",
|
|
1787
|
+
"9.4.8",
|
|
1788
|
+
"9.12.13",
|
|
1789
|
+
"9.12.8-jdk11",
|
|
1790
|
+
"10.2.0",
|
|
1791
|
+
"9.12.8-ubuntu-jdk11",
|
|
1792
|
+
"10.2.0-ubuntu-jdk17",
|
|
1793
|
+
"9.17.0-jdk17",
|
|
1794
|
+
"9.15.1-jdk11",
|
|
1795
|
+
"jdk17",
|
|
1796
|
+
"9.12.9-ubi9",
|
|
1797
|
+
"9.4.9",
|
|
1798
|
+
"9.17.0-ubuntu-jdk17",
|
|
1799
|
+
"9.17.0",
|
|
1800
|
+
"9.10.1",
|
|
1801
|
+
"9.12.1-jdk11",
|
|
1802
|
+
"9.4.9-jdk11",
|
|
1803
|
+
"9.15.1-ubuntu-jdk11",
|
|
1804
|
+
"9.10.1-jdk11",
|
|
1805
|
+
"10.0.0-ubi9-jdk17",
|
|
1806
|
+
"9.12.9-ubi9-jdk17",
|
|
1807
|
+
"9.7.2-ubi9",
|
|
1808
|
+
"9.7.2-ubi9-jdk17",
|
|
1809
|
+
"9.4.9-ubuntu-jdk11",
|
|
1795
1810
|
"9.4.14-jdk11",
|
|
1796
|
-
"9.
|
|
1797
|
-
"9.4.12-ubuntu-jdk11",
|
|
1798
|
-
"9.4.12",
|
|
1799
|
-
"9.4.11-ubuntu-jdk11",
|
|
1800
|
-
"9.4.11-jdk11",
|
|
1801
|
-
"9.4.11",
|
|
1802
|
-
"9.4.10-ubuntu-jdk11",
|
|
1803
|
-
"9.4.10-jdk11",
|
|
1804
|
-
"9.4.1",
|
|
1805
|
-
"9.4.10",
|
|
1806
|
-
"9.4.0-ubuntu-jdk11",
|
|
1807
|
-
"9.4.0-jdk11",
|
|
1808
|
-
"9.4.0",
|
|
1809
|
-
"9.4",
|
|
1810
|
-
"9.17-ubuntu-jdk17",
|
|
1811
|
-
"9.17-ubuntu-jdk11",
|
|
1812
|
-
"9.17-jdk17",
|
|
1813
|
-
"9.17.5-ubuntu-jdk11",
|
|
1814
|
-
"9.17-jdk11",
|
|
1815
|
-
"9.17.5-ubuntu-jdk17",
|
|
1816
|
-
"9.17.5-jdk17",
|
|
1817
|
-
"9.17.5-ubi9",
|
|
1818
|
-
"9.17.5-ubi9-jdk17",
|
|
1819
|
-
"9.17.5-jdk11",
|
|
1820
|
-
"9.17.5",
|
|
1821
|
-
"9.17.4-ubuntu-jdk11",
|
|
1822
|
-
"9.17.4-ubuntu-jdk17",
|
|
1811
|
+
"9.10.1-ubi9",
|
|
1823
1812
|
"9.17.4-ubi9-jdk17",
|
|
1824
|
-
"9.17.4-jdk17",
|
|
1825
1813
|
"9.17.4-ubi9",
|
|
1826
|
-
"9.
|
|
1827
|
-
"9.
|
|
1828
|
-
"9.
|
|
1829
|
-
"9.
|
|
1830
|
-
"9.
|
|
1831
|
-
"9.
|
|
1832
|
-
"9.17.3-jdk17",
|
|
1833
|
-
"9.17.3",
|
|
1834
|
-
"9.17.3-jdk11",
|
|
1835
|
-
"9.17.2-ubuntu-jdk17",
|
|
1836
|
-
"9.16.0-ubuntu-jdk11",
|
|
1837
|
-
"9.17.2-ubuntu-jdk11",
|
|
1838
|
-
"9.17.2-ubi9-jdk17",
|
|
1839
|
-
"9.17.2-ubi9",
|
|
1840
|
-
"9.17.2-jdk17",
|
|
1841
|
-
"9.17.2-jdk11",
|
|
1842
|
-
"9.17.2",
|
|
1843
|
-
"9.17.1-ubuntu-jdk17",
|
|
1814
|
+
"9.4.14-ubuntu-jdk11",
|
|
1815
|
+
"9.10.1-ubuntu-jdk11",
|
|
1816
|
+
"9.8.1-ubuntu-jdk11",
|
|
1817
|
+
"9.8.1-jdk11",
|
|
1818
|
+
"9.15.2-ubi9-jdk17",
|
|
1819
|
+
"9.4.14",
|
|
1844
1820
|
"9.17.1-ubuntu-jdk11",
|
|
1845
|
-
"9.
|
|
1846
|
-
"9.
|
|
1821
|
+
"9.4-ubuntu-jdk11",
|
|
1822
|
+
"9.10.1-ubi9-jdk17",
|
|
1823
|
+
"9.8.1",
|
|
1824
|
+
"10.0.0-ubi9",
|
|
1825
|
+
"9.15.2-ubi9",
|
|
1826
|
+
"9.8.2-ubuntu-jdk17",
|
|
1827
|
+
"9.12.14",
|
|
1828
|
+
"9.12.14-ubuntu-jdk17",
|
|
1829
|
+
"9.4-jdk11",
|
|
1830
|
+
"9.17.1-ubuntu-jdk17",
|
|
1831
|
+
"9.8-jdk11",
|
|
1832
|
+
"9.12.14-jdk17",
|
|
1833
|
+
"9.4.28",
|
|
1834
|
+
"9.8.2",
|
|
1835
|
+
"9.12.2-jdk11",
|
|
1836
|
+
"9.13.0",
|
|
1837
|
+
"9.13.0-jdk17",
|
|
1838
|
+
"9.10.2-ubuntu-jdk11",
|
|
1839
|
+
"9.10-ubuntu-jdk11",
|
|
1840
|
+
"9.13.0-ubuntu-jdk17",
|
|
1847
1841
|
"9.17.1-jdk17",
|
|
1842
|
+
"9.4.28-ubuntu-jdk11",
|
|
1843
|
+
"9.4",
|
|
1844
|
+
"9.11.0-ubuntu-jdk11",
|
|
1845
|
+
"9.4.28-jdk11",
|
|
1848
1846
|
"9.17.1-jdk11",
|
|
1849
|
-
"9.
|
|
1847
|
+
"9.15.2-jdk11",
|
|
1848
|
+
"9.8-ubuntu-jdk11",
|
|
1850
1849
|
"9.17.1",
|
|
1851
|
-
"9.
|
|
1852
|
-
"9.
|
|
1853
|
-
"9.
|
|
1854
|
-
"9.
|
|
1855
|
-
"9.
|
|
1856
|
-
"9.
|
|
1857
|
-
"9.
|
|
1858
|
-
"9.
|
|
1859
|
-
"9.
|
|
1860
|
-
"9.
|
|
1861
|
-
"9.
|
|
1862
|
-
"9.
|
|
1863
|
-
"9.
|
|
1864
|
-
"9.
|
|
1865
|
-
"9.
|
|
1866
|
-
"9.
|
|
1867
|
-
"9.
|
|
1868
|
-
"9.
|
|
1869
|
-
"9.16.0-ubuntu-jdk17",
|
|
1870
|
-
"9.16.0-ubi9-jdk17",
|
|
1871
|
-
"9.16.0-ubi9",
|
|
1872
|
-
"9.16.0-jdk11",
|
|
1873
|
-
"9.16.0-jdk17",
|
|
1874
|
-
"9.16.0",
|
|
1850
|
+
"9.4.21",
|
|
1851
|
+
"9.12.10-ubuntu-jdk11",
|
|
1852
|
+
"9.8.2-jdk11",
|
|
1853
|
+
"9.12.2-ubuntu-jdk11",
|
|
1854
|
+
"9.4.21-ubuntu-jdk11",
|
|
1855
|
+
"9.4.21-jdk11",
|
|
1856
|
+
"9.8",
|
|
1857
|
+
"9.8.2-ubuntu-jdk11",
|
|
1858
|
+
"9.8-ubuntu-jdk17",
|
|
1859
|
+
"9.10.2-ubi9-jdk17",
|
|
1860
|
+
"9.17.5-ubi9",
|
|
1861
|
+
"9.8-jdk17",
|
|
1862
|
+
"9.8.2-jdk17",
|
|
1863
|
+
"9.10.2",
|
|
1864
|
+
"9.10.2-jdk11",
|
|
1865
|
+
"9.12.1-ubi9-jdk17",
|
|
1866
|
+
"9.10-jdk11",
|
|
1867
|
+
"9.11.0",
|
|
1875
1868
|
"9.15-ubuntu-jdk11",
|
|
1876
|
-
"9.16",
|
|
1877
|
-
"9.15-ubuntu-jdk17",
|
|
1878
|
-
"9.15-jdk17",
|
|
1879
|
-
"9.15-jdk11",
|
|
1880
|
-
"9.15.2-ubuntu-jdk17",
|
|
1881
1869
|
"9.15.2-ubuntu-jdk11",
|
|
1882
|
-
"9.
|
|
1883
|
-
"9.
|
|
1884
|
-
"9.15
|
|
1885
|
-
"9.15.2-jdk11",
|
|
1886
|
-
"9.15.2",
|
|
1887
|
-
"9.15.1-ubuntu-jdk17",
|
|
1888
|
-
"9.15.1-ubuntu-jdk11",
|
|
1889
|
-
"9.15.1-ubi9-jdk17",
|
|
1890
|
-
"9.15.1-ubi9",
|
|
1891
|
-
"9.15.1-jdk17",
|
|
1892
|
-
"9.15.1-jdk11",
|
|
1893
|
-
"9.15.1",
|
|
1894
|
-
"9.15.0-ubuntu-jdk17",
|
|
1895
|
-
"9.15.0-ubi9-jdk17",
|
|
1896
|
-
"9.15.0-ubuntu-jdk11",
|
|
1897
|
-
"9.15.0-ubi9",
|
|
1898
|
-
"9.15.0-jdk17",
|
|
1899
|
-
"9.15.0",
|
|
1900
|
-
"9.15.0-jdk11",
|
|
1901
|
-
"9.15",
|
|
1902
|
-
"9.14-ubuntu-jdk17",
|
|
1903
|
-
"9.14-ubuntu-jdk11",
|
|
1904
|
-
"9.14-jdk17",
|
|
1905
|
-
"9.14.1-ubuntu-jdk17",
|
|
1906
|
-
"9.14-jdk11",
|
|
1907
|
-
"9.14.1-ubuntu-jdk11",
|
|
1908
|
-
"9.14.1-ubi9",
|
|
1909
|
-
"9.14.1-ubi9-jdk17",
|
|
1910
|
-
"9.14.1-jdk17",
|
|
1911
|
-
"9.14.1",
|
|
1912
|
-
"9.14.1-jdk11",
|
|
1913
|
-
"9.14.0-ubuntu-jdk17",
|
|
1914
|
-
"9.14.0-ubuntu-jdk11",
|
|
1915
|
-
"9.14.0-ubi9-jdk17",
|
|
1916
|
-
"9.14.0-ubi9",
|
|
1917
|
-
"9.14.0-jdk17",
|
|
1918
|
-
"9.14.0-jdk11",
|
|
1919
|
-
"9.14.0",
|
|
1920
|
-
"9.14",
|
|
1921
|
-
"9.13-ubuntu-jdk17",
|
|
1922
|
-
"9.13-ubuntu-jdk11",
|
|
1923
|
-
"9.13-jdk11",
|
|
1924
|
-
"9.13-jdk17",
|
|
1925
|
-
"9.13.1-ubuntu-jdk17",
|
|
1926
|
-
"9.13.1-ubi9-jdk17",
|
|
1927
|
-
"9.13.1-ubuntu-jdk11",
|
|
1928
|
-
"9.13.1-ubi9",
|
|
1929
|
-
"9.13.1-jdk17",
|
|
1930
|
-
"9.13.1-jdk11",
|
|
1870
|
+
"9.12.10-jdk11",
|
|
1871
|
+
"9.12.9-ubuntu-jdk11",
|
|
1872
|
+
"9.15-jdk11",
|
|
1931
1873
|
"9.13.1",
|
|
1932
|
-
"9.
|
|
1933
|
-
"9.
|
|
1874
|
+
"9.11.0-jdk11",
|
|
1875
|
+
"9.12.1-ubi9",
|
|
1876
|
+
"9.13.1-jdk17",
|
|
1877
|
+
"9.13.1-ubuntu-jdk17",
|
|
1878
|
+
"9.4.15",
|
|
1879
|
+
"9.12.9-jdk11",
|
|
1880
|
+
"9.10",
|
|
1881
|
+
"9.10.2-ubi9",
|
|
1882
|
+
"9.17.5-ubi9-jdk17",
|
|
1883
|
+
"9.11.0-jdk17",
|
|
1884
|
+
"9.12",
|
|
1885
|
+
"9.11.0-ubuntu-jdk17",
|
|
1886
|
+
"9.5.0-jdk17",
|
|
1887
|
+
"9.13-jdk17",
|
|
1888
|
+
"9.4.15-jdk11",
|
|
1889
|
+
"9.5.0-ubuntu-jdk17",
|
|
1890
|
+
"9.12.15",
|
|
1891
|
+
"9.12-jdk17",
|
|
1892
|
+
"9.5.0-jdk11",
|
|
1893
|
+
"9.4.15-ubuntu-jdk11",
|
|
1894
|
+
"9.13",
|
|
1895
|
+
"9.5.0",
|
|
1896
|
+
"9.12.2-ubi9",
|
|
1897
|
+
"9.12-ubuntu-jdk17",
|
|
1898
|
+
"10.0.1-ubi9",
|
|
1899
|
+
"9.13-ubuntu-jdk17",
|
|
1900
|
+
"9.17.2-jdk11",
|
|
1934
1901
|
"9.13.0-ubi9-jdk17",
|
|
1902
|
+
"9.8.0-ubi9-jdk17",
|
|
1903
|
+
"9.12.15-ubuntu-jdk17",
|
|
1935
1904
|
"9.13.0-ubi9",
|
|
1936
|
-
"9.
|
|
1905
|
+
"9.5.0-ubuntu-jdk11",
|
|
1906
|
+
"9.7.1-jdk17",
|
|
1907
|
+
"10.0.1-ubi9-jdk17",
|
|
1908
|
+
"9.17.2-ubuntu-jdk17",
|
|
1909
|
+
"9.8.0-ubi9",
|
|
1910
|
+
"9.12.15-jdk17",
|
|
1911
|
+
"9.4.22-jdk11",
|
|
1912
|
+
"9.4.22-ubuntu-jdk11",
|
|
1913
|
+
"9.4.22",
|
|
1914
|
+
"9.17.2-ubuntu-jdk11",
|
|
1915
|
+
"9.12.2-ubi9-jdk17",
|
|
1916
|
+
"9.7.1-ubuntu-jdk17",
|
|
1917
|
+
"9.17.2",
|
|
1918
|
+
"9.17.2-jdk17",
|
|
1919
|
+
"9.12.3-ubuntu-jdk11",
|
|
1920
|
+
"9.16.0-ubi9",
|
|
1921
|
+
"9.12.3-jdk11",
|
|
1922
|
+
"9.12.10-ubi9-jdk17",
|
|
1923
|
+
"9.12.11-ubuntu-jdk11",
|
|
1924
|
+
"9.11.1-ubuntu-jdk17",
|
|
1925
|
+
"9.12.3-ubi9",
|
|
1926
|
+
"9.12.10-ubi9",
|
|
1927
|
+
"9.9.0-jdk17",
|
|
1928
|
+
"9.17.3-jdk11",
|
|
1929
|
+
"9.17.3-ubuntu-jdk11",
|
|
1930
|
+
"9.4.16",
|
|
1931
|
+
"9.12.3-ubi9-jdk17",
|
|
1932
|
+
"9.9.0-ubuntu-jdk17",
|
|
1933
|
+
"9.5.0-ubi9-jdk17",
|
|
1934
|
+
"9.12.11-jdk11",
|
|
1935
|
+
"9.4.16-ubuntu-jdk11",
|
|
1936
|
+
"9.5.1-ubuntu-jdk17",
|
|
1937
|
+
"9.5-ubuntu-jdk17",
|
|
1938
|
+
"9.13.1-ubi9-jdk17",
|
|
1939
|
+
"9.4.16-jdk11",
|
|
1940
|
+
"9.16.0-ubi9-jdk17",
|
|
1941
|
+
"9.5.0-ubi9",
|
|
1942
|
+
"9.11.1-ubuntu-jdk11",
|
|
1943
|
+
"9.11.1-jdk11",
|
|
1944
|
+
"9.11.1",
|
|
1945
|
+
"9.11.1-jdk17",
|
|
1946
|
+
"9.5.1-jdk17",
|
|
1947
|
+
"9.5-jdk17",
|
|
1948
|
+
"9.7-jdk17",
|
|
1949
|
+
"9.5",
|
|
1950
|
+
"9.4.3",
|
|
1951
|
+
"9.8.1-ubi9-jdk17",
|
|
1952
|
+
"9.8.1-ubi9",
|
|
1953
|
+
"9.5.1",
|
|
1954
|
+
"9.5-jdk11",
|
|
1955
|
+
"9.5-ubuntu-jdk11",
|
|
1956
|
+
"9.7-ubuntu-jdk17",
|
|
1957
|
+
"9.4.3-jdk11",
|
|
1958
|
+
"9.5.1-jdk11",
|
|
1959
|
+
"9.7.2-ubuntu-jdk17",
|
|
1960
|
+
"9.5.1-ubuntu-jdk11",
|
|
1961
|
+
"9.7.2-jdk17",
|
|
1962
|
+
"9.13.1-ubi9",
|
|
1963
|
+
"9.4.3-ubuntu-jdk11",
|
|
1964
|
+
"9.17.3",
|
|
1965
|
+
"9.9.0-ubuntu-jdk11",
|
|
1966
|
+
"9.9.0-jdk11",
|
|
1937
1967
|
"9.13.0-jdk11",
|
|
1938
|
-
"9.
|
|
1939
|
-
"9.13",
|
|
1940
|
-
"9.
|
|
1941
|
-
"9.
|
|
1942
|
-
"9.
|
|
1943
|
-
"9.
|
|
1944
|
-
"9.
|
|
1945
|
-
"9.
|
|
1946
|
-
"9.
|
|
1947
|
-
"9.
|
|
1948
|
-
"9.
|
|
1949
|
-
"9.12.
|
|
1950
|
-
"9.
|
|
1951
|
-
"9.
|
|
1952
|
-
"9.12.8-ubuntu-jdk11",
|
|
1953
|
-
"9.12.8-ubi9-jdk17",
|
|
1954
|
-
"9.12.8-ubi9",
|
|
1955
|
-
"9.12.8-jdk17",
|
|
1956
|
-
"9.12.8-jdk11",
|
|
1957
|
-
"9.12.5-ubuntu-jdk17",
|
|
1958
|
-
"9.12.8",
|
|
1959
|
-
"9.12.7-ubuntu-jdk17",
|
|
1960
|
-
"9.12.7-ubuntu-jdk11",
|
|
1961
|
-
"9.12.7-ubi9-jdk17",
|
|
1962
|
-
"9.12.7-ubi9",
|
|
1963
|
-
"9.12.7-jdk17",
|
|
1964
|
-
"9.12.7-jdk11",
|
|
1965
|
-
"9.12.7",
|
|
1966
|
-
"9.12.6-ubuntu-jdk17",
|
|
1967
|
-
"9.12.6-ubuntu-jdk11",
|
|
1968
|
-
"9.12.6-ubi9-jdk17",
|
|
1969
|
-
"9.12.6-ubi9",
|
|
1970
|
-
"9.12.6-jdk17",
|
|
1971
|
-
"9.12.6-jdk11",
|
|
1972
|
-
"9.12.6",
|
|
1973
|
-
"9.12.5-ubuntu-jdk11",
|
|
1974
|
-
"9.12.5-ubi9-jdk17",
|
|
1975
|
-
"9.12.5-ubi9",
|
|
1976
|
-
"9.12.5-jdk17",
|
|
1977
|
-
"9.12.5-jdk11",
|
|
1978
|
-
"9.12.5",
|
|
1979
|
-
"9.12.4-ubuntu-jdk17",
|
|
1980
|
-
"9.12.4-ubuntu-jdk11",
|
|
1981
|
-
"9.12.4-ubi9-jdk17",
|
|
1968
|
+
"9.17.3-jdk17",
|
|
1969
|
+
"9.13.0-ubuntu-jdk11",
|
|
1970
|
+
"9.4.0",
|
|
1971
|
+
"9.4.0-jdk11",
|
|
1972
|
+
"9.11.0-ubi9-jdk17",
|
|
1973
|
+
"9.4.23",
|
|
1974
|
+
"9.9.0",
|
|
1975
|
+
"9.4.0-ubuntu-jdk11",
|
|
1976
|
+
"9.11.2",
|
|
1977
|
+
"9.17.3-ubuntu-jdk17",
|
|
1978
|
+
"9.4.23-jdk11",
|
|
1979
|
+
"9.12.2",
|
|
1980
|
+
"9.14.0-jdk17",
|
|
1981
|
+
"9.14.0",
|
|
1982
1982
|
"9.12.4-ubi9",
|
|
1983
|
+
"9.12.11-ubi9",
|
|
1984
|
+
"9.4.23-ubuntu-jdk11",
|
|
1985
|
+
"9.17.4-ubuntu-jdk11",
|
|
1986
|
+
"9.11.2-jdk17",
|
|
1987
|
+
"9.12.11-ubi9-jdk17",
|
|
1988
|
+
"9.16.1-ubi9",
|
|
1989
|
+
"9.16.1-ubi9-jdk17",
|
|
1990
|
+
"9.11.2-ubuntu-jdk17",
|
|
1991
|
+
"9.12.12-ubuntu-jdk11",
|
|
1992
|
+
"9.16.0-jdk11",
|
|
1993
|
+
"9.12.4-ubi9-jdk17",
|
|
1994
|
+
"9.12.12-jdk11",
|
|
1995
|
+
"9.11.0-ubi9",
|
|
1996
|
+
"9.12.2-jdk17",
|
|
1997
|
+
"9.12.2-ubuntu-jdk17",
|
|
1998
|
+
"9.10.0-jdk17",
|
|
1983
1999
|
"9.12.4-jdk11",
|
|
1984
|
-
"9.
|
|
1985
|
-
"9.
|
|
1986
|
-
"
|
|
1987
|
-
"
|
|
1988
|
-
"9.
|
|
1989
|
-
"9.
|
|
2000
|
+
"9.8.2-ubi9-jdk17",
|
|
2001
|
+
"9.14.0-ubuntu-jdk17",
|
|
2002
|
+
"10.1.1-ubi9-jdk17",
|
|
2003
|
+
"10.1.1-ubi9",
|
|
2004
|
+
"9.8.2-ubi9",
|
|
2005
|
+
"9.11.2-ubuntu-jdk11",
|
|
2006
|
+
"9.10.0-ubuntu-jdk17",
|
|
2007
|
+
"9.12.4-ubuntu-jdk11",
|
|
2008
|
+
"9.17.4-jdk11",
|
|
2009
|
+
"9.16.0-ubuntu-jdk11",
|
|
2010
|
+
"9.12.12-ubi9",
|
|
2011
|
+
"9.12.12-ubi9-jdk17",
|
|
2012
|
+
"9.5.1-ubi9",
|
|
2013
|
+
"9.5.1-ubi9-jdk17",
|
|
2014
|
+
"9.11.2-jdk11",
|
|
2015
|
+
"9.4.17",
|
|
2016
|
+
"9.6.0-ubuntu-jdk17",
|
|
2017
|
+
"9.4.17-jdk11",
|
|
2018
|
+
"9.9.1-ubuntu-jdk17",
|
|
2019
|
+
"9.9.1-jdk17",
|
|
2020
|
+
"9.6-ubuntu-jdk17",
|
|
2021
|
+
"9.6-jdk17",
|
|
2022
|
+
"9.6.0-jdk17",
|
|
2023
|
+
"9.4.17-ubuntu-jdk11",
|
|
2024
|
+
"9.4.4-ubuntu-jdk11",
|
|
2025
|
+
"9.9.1-jdk11",
|
|
2026
|
+
"9.13-jdk11",
|
|
2027
|
+
"9.13-ubuntu-jdk11",
|
|
1990
2028
|
"9.12.3-jdk17",
|
|
1991
|
-
"9.
|
|
2029
|
+
"9.13.1-jdk11",
|
|
2030
|
+
"9.11.1-ubi9",
|
|
2031
|
+
"9.13.1-ubuntu-jdk11",
|
|
1992
2032
|
"9.12.3",
|
|
1993
|
-
"9.
|
|
1994
|
-
"9.
|
|
1995
|
-
"9.
|
|
1996
|
-
"9.
|
|
1997
|
-
"9.
|
|
1998
|
-
"9.
|
|
1999
|
-
"9.
|
|
2000
|
-
"9.
|
|
2001
|
-
"9.
|
|
2002
|
-
"9.12.
|
|
2003
|
-
"9.
|
|
2004
|
-
"9.
|
|
2005
|
-
"9.
|
|
2006
|
-
"9.
|
|
2007
|
-
"9.
|
|
2008
|
-
"9.
|
|
2009
|
-
"9.
|
|
2010
|
-
"9.
|
|
2011
|
-
"9.
|
|
2012
|
-
"9.
|
|
2013
|
-
"
|
|
2014
|
-
"9.
|
|
2015
|
-
"9.
|
|
2016
|
-
"9.
|
|
2017
|
-
"9.
|
|
2018
|
-
"9.
|
|
2019
|
-
"9.
|
|
2020
|
-
"9.
|
|
2021
|
-
"9.
|
|
2033
|
+
"9.4.4-jdk11",
|
|
2034
|
+
"9.9.1",
|
|
2035
|
+
"9.4.1",
|
|
2036
|
+
"9.4.4",
|
|
2037
|
+
"9.10.1-ubuntu-jdk17",
|
|
2038
|
+
"9.6.0",
|
|
2039
|
+
"9.10.1-jdk17",
|
|
2040
|
+
"9.14",
|
|
2041
|
+
"9.17.4-ubuntu-jdk17",
|
|
2042
|
+
"9.12.3-ubuntu-jdk17",
|
|
2043
|
+
"9.11.1-ubi9-jdk17",
|
|
2044
|
+
"9.4.1-jdk11",
|
|
2045
|
+
"9.6.0-ubuntu-jdk11",
|
|
2046
|
+
"9.9.1-ubuntu-jdk11",
|
|
2047
|
+
"9.4.24",
|
|
2048
|
+
"9.4.24-ubuntu-jdk11",
|
|
2049
|
+
"9.17.4",
|
|
2050
|
+
"9.17.4-jdk17",
|
|
2051
|
+
"9.14.1",
|
|
2052
|
+
"9.17.5-jdk11",
|
|
2053
|
+
"10.1.2-ubi9",
|
|
2054
|
+
"9.4.24-jdk11",
|
|
2055
|
+
"9.17-ubuntu-jdk11",
|
|
2056
|
+
"9.6-ubuntu-jdk11",
|
|
2057
|
+
"9.6",
|
|
2058
|
+
"9.6-jdk11",
|
|
2059
|
+
"9.14-ubuntu-jdk17",
|
|
2060
|
+
"9.4.1-ubuntu-jdk11",
|
|
2061
|
+
"9.6.0-jdk11",
|
|
2062
|
+
"9.12.5-ubi9-jdk17",
|
|
2022
2063
|
"9.12.13-ubi9-jdk17",
|
|
2064
|
+
"9.17.5-ubuntu-jdk11",
|
|
2065
|
+
"9.11-jdk17",
|
|
2066
|
+
"9.11.3",
|
|
2067
|
+
"9.14.1-ubuntu-jdk17",
|
|
2068
|
+
"9-jdk11",
|
|
2069
|
+
"9-ubuntu-jdk11",
|
|
2070
|
+
"9.9.0-ubi9-jdk17",
|
|
2071
|
+
"10.1.2-ubi9-jdk17",
|
|
2072
|
+
"9.14.1-jdk17",
|
|
2023
2073
|
"9.12.13-ubi9",
|
|
2024
|
-
"9.12.
|
|
2025
|
-
"9.
|
|
2026
|
-
"9.
|
|
2027
|
-
"9.
|
|
2028
|
-
"9.
|
|
2029
|
-
"9.
|
|
2030
|
-
"9.
|
|
2031
|
-
"9.12.12-jdk17",
|
|
2032
|
-
"9.12.12-jdk11",
|
|
2033
|
-
"9.12.12",
|
|
2034
|
-
"9.12.11-ubuntu-jdk17",
|
|
2035
|
-
"9.12.11-ubuntu-jdk11",
|
|
2036
|
-
"9.12.11-ubi9-jdk17",
|
|
2037
|
-
"9.12.11-ubi9",
|
|
2038
|
-
"9.12.11-jdk11",
|
|
2039
|
-
"9.12.11-jdk17",
|
|
2040
|
-
"9.12.10-ubuntu-jdk17",
|
|
2041
|
-
"9.12.11",
|
|
2042
|
-
"9.12.10-ubi9-jdk17",
|
|
2043
|
-
"9.12.10-ubuntu-jdk11",
|
|
2044
|
-
"9.12.10-ubi9",
|
|
2045
|
-
"9.12.10-jdk17",
|
|
2046
|
-
"9.12.10-jdk11",
|
|
2047
|
-
"9.12.10",
|
|
2048
|
-
"9.12.1",
|
|
2049
|
-
"9.12.0-ubuntu-jdk17",
|
|
2050
|
-
"9.12.0-ubuntu-jdk11",
|
|
2051
|
-
"9.12.0-jdk17",
|
|
2052
|
-
"9.12.0-jdk11",
|
|
2053
|
-
"9.12.0",
|
|
2054
|
-
"9.12",
|
|
2055
|
-
"9.11-ubuntu-jdk17",
|
|
2074
|
+
"9.12.5-ubi9",
|
|
2075
|
+
"9.8.0-ubuntu-jdk17",
|
|
2076
|
+
"9.17-jdk11",
|
|
2077
|
+
"9.14-jdk17",
|
|
2078
|
+
"9.8.0-jdk17",
|
|
2079
|
+
"9.9.2-ubuntu-jdk17",
|
|
2080
|
+
"9.9.0-ubi9",
|
|
2056
2081
|
"9.11-ubuntu-jdk11",
|
|
2057
|
-
"9.11-jdk17",
|
|
2058
|
-
"9.11-jdk11",
|
|
2059
|
-
"9.11.3-ubuntu-jdk17",
|
|
2060
2082
|
"9.11.3-ubuntu-jdk11",
|
|
2061
|
-
"9.
|
|
2062
|
-
"9.11
|
|
2063
|
-
"9.
|
|
2083
|
+
"9.4.10-jdk11",
|
|
2084
|
+
"9.11-jdk11",
|
|
2085
|
+
"9.9.2-jdk17",
|
|
2064
2086
|
"9.11.3-jdk11",
|
|
2065
|
-
"9.
|
|
2066
|
-
"9.
|
|
2067
|
-
"9.
|
|
2087
|
+
"9.4.10",
|
|
2088
|
+
"9.9-ubuntu-jdk17",
|
|
2089
|
+
"9.9-jdk17",
|
|
2090
|
+
"9.11.3-jdk17",
|
|
2091
|
+
"9.11-ubuntu-jdk17",
|
|
2092
|
+
"9.16.1-jdk11",
|
|
2093
|
+
"9.4.10-ubuntu-jdk11",
|
|
2094
|
+
"9.11.3-ubuntu-jdk17",
|
|
2095
|
+
"9.11",
|
|
2096
|
+
"9.4.5-ubuntu-jdk11",
|
|
2097
|
+
"9.4.5-jdk11",
|
|
2098
|
+
"9.4.5",
|
|
2099
|
+
"9.4.18-jdk11",
|
|
2100
|
+
"9.4.18-ubuntu-jdk11",
|
|
2101
|
+
"9.16-ubuntu-jdk11",
|
|
2102
|
+
"9.16-jdk11",
|
|
2103
|
+
"9.16.1-ubuntu-jdk11",
|
|
2104
|
+
"9.12.5-jdk11",
|
|
2105
|
+
"9.14.0-ubi9",
|
|
2106
|
+
"9.12.13-ubuntu-jdk11",
|
|
2068
2107
|
"9.11.2-ubi9-jdk17",
|
|
2108
|
+
"9.12.13-jdk11",
|
|
2109
|
+
"9.12.5-ubuntu-jdk11",
|
|
2110
|
+
"9.17.0-ubi9-jdk17",
|
|
2111
|
+
"9.4.18",
|
|
2112
|
+
"9.14.0-ubi9-jdk17",
|
|
2113
|
+
"9.12.6-ubi9-jdk17",
|
|
2114
|
+
"9.6.0-ubi9",
|
|
2115
|
+
"9.12.6-ubi9",
|
|
2116
|
+
"9.9.2-ubuntu-jdk11",
|
|
2069
2117
|
"9.11.2-ubi9",
|
|
2070
|
-
"9.
|
|
2071
|
-
"9.
|
|
2072
|
-
"9.
|
|
2073
|
-
"9.
|
|
2074
|
-
"9.
|
|
2075
|
-
"9.
|
|
2076
|
-
"9.
|
|
2077
|
-
"9.
|
|
2078
|
-
"9.
|
|
2079
|
-
"9.
|
|
2080
|
-
"9.
|
|
2081
|
-
"9.11.0-ubi9-jdk17",
|
|
2082
|
-
"9.11.0-ubuntu-jdk11",
|
|
2083
|
-
"9.11.0-ubi9",
|
|
2084
|
-
"9.11.0-jdk17",
|
|
2085
|
-
"9.11.0-jdk11",
|
|
2086
|
-
"9.11.0",
|
|
2087
|
-
"9.11",
|
|
2118
|
+
"9.6.0-ubi9-jdk17",
|
|
2119
|
+
"9.12.14-ubi9-jdk17",
|
|
2120
|
+
"9.9.2-jdk11",
|
|
2121
|
+
"9.12.4",
|
|
2122
|
+
"9.12.14-ubi9",
|
|
2123
|
+
"9.9-ubuntu-jdk11",
|
|
2124
|
+
"9.17.0-ubi9",
|
|
2125
|
+
"9.10.2-ubuntu-jdk17",
|
|
2126
|
+
"9.9.2",
|
|
2127
|
+
"9.9-jdk11",
|
|
2128
|
+
"9.12.4-ubuntu-jdk17",
|
|
2088
2129
|
"9.10-ubuntu-jdk17",
|
|
2089
|
-
"9.
|
|
2130
|
+
"9.8.1-ubuntu-jdk17",
|
|
2131
|
+
"9.4.25",
|
|
2090
2132
|
"9.10-jdk17",
|
|
2091
|
-
"9.
|
|
2092
|
-
"9.
|
|
2093
|
-
"9.
|
|
2094
|
-
"9.
|
|
2095
|
-
"9.
|
|
2133
|
+
"9.4.25-jdk11",
|
|
2134
|
+
"9.8.1-jdk17",
|
|
2135
|
+
"9.9",
|
|
2136
|
+
"9.17.5-jdk17",
|
|
2137
|
+
"9.12.4-jdk17",
|
|
2138
|
+
"9-ubuntu-jdk17",
|
|
2139
|
+
"9.17",
|
|
2140
|
+
"9.17.5-ubuntu-jdk17",
|
|
2141
|
+
"9.17-jdk17",
|
|
2142
|
+
"9.9.1-ubi9-jdk17",
|
|
2096
2143
|
"9.10.2-jdk17",
|
|
2097
|
-
"9
|
|
2098
|
-
"9.
|
|
2099
|
-
"9.
|
|
2100
|
-
"9.
|
|
2101
|
-
"9.
|
|
2102
|
-
"9.
|
|
2103
|
-
"9.
|
|
2104
|
-
"9.
|
|
2105
|
-
"9.
|
|
2106
|
-
"9.10.0-ubuntu-jdk17",
|
|
2107
|
-
"9.10.0-ubuntu-jdk11",
|
|
2108
|
-
"9.10.0-ubi9-jdk17",
|
|
2109
|
-
"9.10.0-ubi9",
|
|
2110
|
-
"9.10.0-jdk17",
|
|
2111
|
-
"9.10.0-jdk11",
|
|
2112
|
-
"9.10.0",
|
|
2113
|
-
"9.10",
|
|
2144
|
+
"9-jdk17",
|
|
2145
|
+
"9.14.1-ubi9-jdk17",
|
|
2146
|
+
"9.12.6-ubuntu-jdk11",
|
|
2147
|
+
"9.9.1-ubi9",
|
|
2148
|
+
"9.12.6-jdk11",
|
|
2149
|
+
"9.12.0-jdk17",
|
|
2150
|
+
"9.14.1-ubi9",
|
|
2151
|
+
"9.12.0-ubuntu-jdk17",
|
|
2152
|
+
"9.12.0",
|
|
2114
2153
|
"9",
|
|
2115
|
-
"
|
|
2116
|
-
"
|
|
2117
|
-
"
|
|
2118
|
-
"
|
|
2119
|
-
"
|
|
2120
|
-
"
|
|
2121
|
-
"
|
|
2122
|
-
"
|
|
2123
|
-
"
|
|
2124
|
-
"
|
|
2125
|
-
"
|
|
2126
|
-
"
|
|
2127
|
-
"
|
|
2128
|
-
"
|
|
2129
|
-
"
|
|
2130
|
-
"
|
|
2131
|
-
"
|
|
2132
|
-
"
|
|
2133
|
-
"
|
|
2134
|
-
"
|
|
2135
|
-
"
|
|
2136
|
-
"
|
|
2137
|
-
"
|
|
2138
|
-
"
|
|
2139
|
-
"
|
|
2140
|
-
"
|
|
2141
|
-
"9.
|
|
2154
|
+
"9.17.5",
|
|
2155
|
+
"9.17-ubuntu-jdk17",
|
|
2156
|
+
"9.4.25-ubuntu-jdk11",
|
|
2157
|
+
"9.4.19-ubuntu-jdk11",
|
|
2158
|
+
"9.4.19",
|
|
2159
|
+
"9.7.0",
|
|
2160
|
+
"9.4.19-jdk11",
|
|
2161
|
+
"9.7.0-jdk17",
|
|
2162
|
+
"9.14.0-jdk11",
|
|
2163
|
+
"9.7.0-ubuntu-jdk11",
|
|
2164
|
+
"9.7.0-ubuntu-jdk17",
|
|
2165
|
+
"9.7.0-ubi9-jdk17",
|
|
2166
|
+
"9.7.0-ubi9",
|
|
2167
|
+
"9.15.0-jdk17",
|
|
2168
|
+
"9.7.0-jdk11",
|
|
2169
|
+
"9.14.0-ubuntu-jdk11",
|
|
2170
|
+
"9.4.6-ubuntu-jdk11",
|
|
2171
|
+
"9.15.0-ubuntu-jdk17",
|
|
2172
|
+
"ubi9-jdk17",
|
|
2173
|
+
"9.15.0",
|
|
2174
|
+
"9.9.2-ubi9-jdk17",
|
|
2175
|
+
"9.12.14-jdk11",
|
|
2176
|
+
"9.12.15-ubi9-jdk17",
|
|
2177
|
+
"9.12.15-ubi9",
|
|
2178
|
+
"9.12.7-ubi9",
|
|
2179
|
+
"9.4.11",
|
|
2180
|
+
"9.4.11-jdk11",
|
|
2181
|
+
"9.12.14-ubuntu-jdk11",
|
|
2182
|
+
"ubi9",
|
|
2183
|
+
"9.12.7-ubi9-jdk17",
|
|
2184
|
+
"9.17.1-ubi9",
|
|
2185
|
+
"9.12.0-ubuntu-jdk11",
|
|
2186
|
+
"10.2.0-ubi9-jdk17",
|
|
2187
|
+
"10.2.0-ubi9",
|
|
2188
|
+
"9.9.2-ubi9",
|
|
2189
|
+
"9.4.6",
|
|
2190
|
+
"9.4.6-jdk11",
|
|
2191
|
+
"9.12.0-jdk11",
|
|
2192
|
+
"9.11.3-ubi9",
|
|
2193
|
+
"9.17.1-ubi9-jdk17",
|
|
2194
|
+
"9.4.11-ubuntu-jdk11",
|
|
2195
|
+
"9.11.3-ubi9-jdk17",
|
|
2196
|
+
"9.15.0-ubi9",
|
|
2197
|
+
"9.12.8-ubi9-jdk17",
|
|
2198
|
+
"9.7.1-ubi9-jdk17",
|
|
2199
|
+
"9.15.0-ubi9-jdk17",
|
|
2200
|
+
"9.12.8-ubi9",
|
|
2201
|
+
"9.17.2-ubi9-jdk17",
|
|
2202
|
+
"9.7.1-ubi9",
|
|
2203
|
+
"9.17.2-ubi9",
|
|
2142
2204
|
"9.12.0-ubi9",
|
|
2205
|
+
"9.12.0-ubi9-jdk17",
|
|
2206
|
+
"9.17.3-ubi9-jdk17",
|
|
2207
|
+
"9.15.1-ubi9",
|
|
2208
|
+
"9.15.1-ubi9-jdk17",
|
|
2209
|
+
"9.17.3-ubi9",
|
|
2210
|
+
"9.10.0-ubi9",
|
|
2211
|
+
"9.10.0-ubi9-jdk17",
|
|
2212
|
+
"10.3.0-EAP01-jdk17",
|
|
2213
|
+
"10.3.0-EAP01",
|
|
2214
|
+
"10.3.0-EAP01-ubuntu-jdk17",
|
|
2215
|
+
"10.3.0-EAP01-ubi9",
|
|
2216
|
+
"10.3.0-EAP01-ubi9-jdk17",
|
|
2217
|
+
"10.2.0-RC",
|
|
2218
|
+
"10.2.0-RC-ubuntu-jdk17",
|
|
2219
|
+
"10.2.0-RC-jdk17",
|
|
2220
|
+
"10.2.0-RC-ubi9",
|
|
2221
|
+
"10.2.0-RC-ubi9-jdk17",
|
|
2143
2222
|
"10.2.0-EAP02-jdk17",
|
|
2144
2223
|
"10.2.0-EAP02",
|
|
2145
2224
|
"10.2.0-EAP02-ubuntu-jdk17",
|
|
@@ -3573,582 +3652,582 @@ var jira = [
|
|
|
3573
3652
|
"8.8.0-RC02"
|
|
3574
3653
|
];
|
|
3575
3654
|
var confluence = [
|
|
3576
|
-
"
|
|
3577
|
-
"
|
|
3578
|
-
"9.
|
|
3579
|
-
"
|
|
3580
|
-
"
|
|
3581
|
-
"9.2.0-beta2",
|
|
3582
|
-
"eap",
|
|
3583
|
-
"9.2.0-beta2-ubuntu-jdk17",
|
|
3584
|
-
"9.2.0-beta2-ubi9-jdk17",
|
|
3585
|
-
"9.2.0-beta2-ubi9-jdk21",
|
|
3586
|
-
"9.2.0-beta2-ubi9",
|
|
3587
|
-
"9.1.1-jdk21",
|
|
3588
|
-
"9.1.1-jdk17",
|
|
3589
|
-
"9.1.1",
|
|
3590
|
-
"9.1.0-ubuntu-jdk21",
|
|
3591
|
-
"9.1.0-ubi9-jdk21",
|
|
3592
|
-
"9.1.0-ubuntu-jdk17",
|
|
3593
|
-
"9.1.0-ubi9-jdk17",
|
|
3594
|
-
"9.1.0-ubi9",
|
|
3595
|
-
"9.1.0-jdk21",
|
|
3596
|
-
"9.1.0-jdk17",
|
|
3597
|
-
"9.1",
|
|
3598
|
-
"9.1.0",
|
|
3599
|
-
"9.0-ubuntu-jdk21",
|
|
3600
|
-
"9.0-jdk21",
|
|
3601
|
-
"9.0-ubuntu-jdk17",
|
|
3602
|
-
"9.0-jdk17",
|
|
3603
|
-
"9.0.3-ubuntu-jdk21",
|
|
3604
|
-
"9.0.3-ubuntu-jdk17",
|
|
3605
|
-
"9.0.3-ubi9-jdk21",
|
|
3606
|
-
"9.0.3-ubi9-jdk17",
|
|
3607
|
-
"9.0.3-ubi9",
|
|
3608
|
-
"9.0.3-jdk21",
|
|
3609
|
-
"9.0.3-jdk17",
|
|
3610
|
-
"9.0.3",
|
|
3611
|
-
"9.0.2-ubuntu-jdk21",
|
|
3612
|
-
"9.0.2-ubi9-jdk21",
|
|
3613
|
-
"9.0.2-ubuntu-jdk17",
|
|
3614
|
-
"9.0.2-ubi9-jdk17",
|
|
3615
|
-
"9.0.2-jdk21",
|
|
3616
|
-
"9.0.2-ubi9",
|
|
3617
|
-
"9.0.2-jdk17",
|
|
3618
|
-
"9.0.2",
|
|
3619
|
-
"9.0.1-ubuntu-jdk21",
|
|
3620
|
-
"9.0.1-ubuntu-jdk17",
|
|
3621
|
-
"9.0.1-ubi9-jdk21",
|
|
3622
|
-
"9.0.1-ubi9",
|
|
3623
|
-
"9.0.1-jdk21",
|
|
3624
|
-
"9.0.1",
|
|
3625
|
-
"9.0",
|
|
3626
|
-
"9.0.1-jdk17",
|
|
3627
|
-
"8-ubuntu-jdk17",
|
|
3628
|
-
"9",
|
|
3629
|
-
"8-jdk17",
|
|
3630
|
-
"8-ubuntu-jdk11",
|
|
3631
|
-
"8-jdk11",
|
|
3655
|
+
"8.9.7-jdk17",
|
|
3656
|
+
"8.9.7",
|
|
3657
|
+
"8.9.7-ubuntu-jdk17",
|
|
3658
|
+
"8.7.2-jdk11",
|
|
3659
|
+
"8.7-jdk11",
|
|
3632
3660
|
"8.9-ubuntu-jdk17",
|
|
3633
|
-
"8.9-ubuntu-jdk11",
|
|
3634
3661
|
"8.9-jdk17",
|
|
3635
|
-
"8.9.8-ubuntu-jdk11",
|
|
3636
|
-
"8.9-jdk11",
|
|
3637
3662
|
"8.9.8-ubuntu-jdk17",
|
|
3638
|
-
"8.
|
|
3639
|
-
"8.
|
|
3663
|
+
"8.6.2-jdk17",
|
|
3664
|
+
"8.6.2",
|
|
3665
|
+
"8.6.2-ubuntu-jdk17",
|
|
3666
|
+
"8.6-jdk17",
|
|
3667
|
+
"8-jdk17",
|
|
3668
|
+
"8-ubuntu-jdk17",
|
|
3640
3669
|
"8.9.8-jdk17",
|
|
3641
|
-
"
|
|
3670
|
+
"7.19.24-jdk11",
|
|
3671
|
+
"8",
|
|
3672
|
+
"8.6",
|
|
3673
|
+
"8.6-ubuntu-jdk17",
|
|
3674
|
+
"8.7-ubuntu-jdk11",
|
|
3642
3675
|
"8.9.8",
|
|
3643
|
-
"8.
|
|
3644
|
-
"
|
|
3645
|
-
"8.9
|
|
3646
|
-
"
|
|
3647
|
-
"8.9.7-jdk17",
|
|
3648
|
-
"8.9.7-ubi9",
|
|
3649
|
-
"8.9.7",
|
|
3650
|
-
"8.9.6-ubuntu-jdk17",
|
|
3651
|
-
"8.9.6-ubi9-jdk17",
|
|
3652
|
-
"8.9.6-ubuntu-jdk11",
|
|
3653
|
-
"8.9.6-ubi9",
|
|
3654
|
-
"8.9.6-jdk17",
|
|
3655
|
-
"8.9.5-ubuntu-jdk11",
|
|
3656
|
-
"8.9.6",
|
|
3657
|
-
"8.9.6-jdk11",
|
|
3658
|
-
"8.9.5-ubuntu-jdk17",
|
|
3659
|
-
"8.9.5-jdk17",
|
|
3660
|
-
"8.9.5-jdk11",
|
|
3661
|
-
"8.9.5",
|
|
3662
|
-
"8.9.4-ubuntu-jdk17",
|
|
3663
|
-
"8.9.4-ubuntu-jdk11",
|
|
3664
|
-
"8.9.4-ubi9-jdk17",
|
|
3665
|
-
"8.9.4-ubi9",
|
|
3666
|
-
"8.9.4-jdk17",
|
|
3667
|
-
"8.9.4-jdk11",
|
|
3668
|
-
"8.9.4",
|
|
3669
|
-
"8.9.3-ubuntu-jdk11",
|
|
3670
|
-
"8.9.3-ubuntu-jdk17",
|
|
3671
|
-
"8.9.3-ubi9-jdk17",
|
|
3672
|
-
"8.9.3-ubi9",
|
|
3673
|
-
"8.9.3-jdk17",
|
|
3676
|
+
"8.7.2-ubuntu-jdk11",
|
|
3677
|
+
"7.19.24-ubuntu-jdk11",
|
|
3678
|
+
"8.9",
|
|
3679
|
+
"7.19.24",
|
|
3674
3680
|
"8.9.3-jdk11",
|
|
3675
|
-
"8.9.3",
|
|
3681
|
+
"8.9.3-ubuntu-jdk11",
|
|
3682
|
+
"8.5.8-jdk11",
|
|
3683
|
+
"7.19.19",
|
|
3684
|
+
"8.5.8-ubuntu-jdk11",
|
|
3685
|
+
"8.1.3-jdk11",
|
|
3686
|
+
"7.19.9-jdk11",
|
|
3687
|
+
"7.19.19-ubuntu-jdk11",
|
|
3688
|
+
"7.19.9",
|
|
3689
|
+
"8.1.3-ubuntu-jdk11",
|
|
3690
|
+
"8.5.2-jdk11",
|
|
3691
|
+
"8.5.2-ubuntu-jdk11",
|
|
3692
|
+
"7.19.9-ubuntu-jdk11",
|
|
3693
|
+
"8.9.1",
|
|
3694
|
+
"7.19.19-jdk11",
|
|
3695
|
+
"8.5.16-ubuntu-jdk17",
|
|
3696
|
+
"8.4.1-jdk17",
|
|
3697
|
+
"8.9.4-jdk11",
|
|
3698
|
+
"8.1.3",
|
|
3699
|
+
"8.0.1",
|
|
3700
|
+
"8.5.16",
|
|
3701
|
+
"8.5.16-jdk17",
|
|
3702
|
+
"8.4.1-ubuntu-jdk17",
|
|
3703
|
+
"8.9.1-ubuntu-jdk17",
|
|
3704
|
+
"8.9.4-ubuntu-jdk11",
|
|
3705
|
+
"8.9.1-jdk17",
|
|
3706
|
+
"8.8.0-ubuntu-jdk11",
|
|
3707
|
+
"8.5.1-ubuntu-jdk17",
|
|
3708
|
+
"9.0.1-ubuntu-jdk17",
|
|
3709
|
+
"8.7.1-ubuntu-jdk17",
|
|
3710
|
+
"8.0.1-ubuntu-jdk11",
|
|
3711
|
+
"8.5.1-jdk17",
|
|
3712
|
+
"8.5.1",
|
|
3713
|
+
"8.4-jdk11",
|
|
3714
|
+
"8.3.0-jdk17",
|
|
3715
|
+
"9.0.1",
|
|
3716
|
+
"8.4.1",
|
|
3717
|
+
"8.0.1-jdk11",
|
|
3718
|
+
"8.3.0",
|
|
3719
|
+
"7.19.25-ubuntu-jdk11",
|
|
3720
|
+
"7.19.25",
|
|
3721
|
+
"8.3.0-ubuntu-jdk17",
|
|
3722
|
+
"8.8.0-jdk11",
|
|
3723
|
+
"7.19.3-ubuntu-jdk11",
|
|
3724
|
+
"7.19.3",
|
|
3725
|
+
"8.5.9-jdk11",
|
|
3726
|
+
"8.7.1",
|
|
3727
|
+
"8.4.5-ubuntu-jdk11",
|
|
3728
|
+
"7.19.3-jdk11",
|
|
3729
|
+
"8.7.1-jdk17",
|
|
3730
|
+
"8.5.9-ubuntu-jdk11",
|
|
3731
|
+
"8.4-ubuntu-jdk11",
|
|
3732
|
+
"8.1-jdk11",
|
|
3733
|
+
"8.4.5-jdk11",
|
|
3734
|
+
"8.9.2",
|
|
3735
|
+
"7.19.25-jdk11",
|
|
3736
|
+
"9.0.1-jdk17",
|
|
3737
|
+
"8.3.0-ubuntu-jdk11",
|
|
3738
|
+
"8.5.6",
|
|
3739
|
+
"8.1.4-ubuntu-jdk11",
|
|
3740
|
+
"8.5.12-ubuntu-jdk11",
|
|
3741
|
+
"8.1",
|
|
3742
|
+
"8.5.6-jdk17",
|
|
3743
|
+
"8.5.12-jdk11",
|
|
3744
|
+
"8.3.0-jdk11",
|
|
3745
|
+
"8.5.6-ubuntu-jdk17",
|
|
3746
|
+
"8.1.4",
|
|
3676
3747
|
"8.9.2-ubuntu-jdk17",
|
|
3677
|
-
"8.
|
|
3678
|
-
"8.
|
|
3679
|
-
"
|
|
3748
|
+
"8.1-ubuntu-jdk11",
|
|
3749
|
+
"8.1.4-jdk11",
|
|
3750
|
+
"7.19.14",
|
|
3751
|
+
"9.0.2-jdk17",
|
|
3752
|
+
"7.19.14-jdk11",
|
|
3753
|
+
"7.20.0",
|
|
3754
|
+
"8.4.2-ubuntu-jdk17",
|
|
3680
3755
|
"8.9.2-jdk17",
|
|
3681
|
-
"
|
|
3682
|
-
"8.
|
|
3683
|
-
"8.
|
|
3684
|
-
"8.
|
|
3685
|
-
"8.
|
|
3686
|
-
"8.
|
|
3687
|
-
"
|
|
3688
|
-
"8.
|
|
3689
|
-
"
|
|
3690
|
-
"
|
|
3691
|
-
"
|
|
3692
|
-
"8.
|
|
3693
|
-
"8.
|
|
3694
|
-
"8.
|
|
3695
|
-
"
|
|
3696
|
-
"8.
|
|
3756
|
+
"9.0.2-ubuntu-jdk17",
|
|
3757
|
+
"8.5.10-jdk17",
|
|
3758
|
+
"8.0.2",
|
|
3759
|
+
"8.0.2-ubuntu-jdk11",
|
|
3760
|
+
"8.4.2-jdk17",
|
|
3761
|
+
"8.4.2",
|
|
3762
|
+
"7.20.0-ubuntu-jdk11",
|
|
3763
|
+
"8.0.2-jdk11",
|
|
3764
|
+
"9.0.2",
|
|
3765
|
+
"7.20.0-jdk11",
|
|
3766
|
+
"7.19.2",
|
|
3767
|
+
"8.5.3-jdk11",
|
|
3768
|
+
"8.3.1-ubuntu-jdk17",
|
|
3769
|
+
"8.3.1-jdk17",
|
|
3770
|
+
"7.19.2-jdk11",
|
|
3771
|
+
"8.4.0-ubuntu-jdk11",
|
|
3772
|
+
"7.19.2-ubuntu-jdk11",
|
|
3773
|
+
"8.5.3-ubuntu-jdk11",
|
|
3774
|
+
"8.6.0-jdk11",
|
|
3775
|
+
"7.19.14-ubuntu-jdk11",
|
|
3776
|
+
"8.5",
|
|
3697
3777
|
"8.8-ubuntu-jdk11",
|
|
3698
|
-
"8.
|
|
3699
|
-
"8.
|
|
3700
|
-
"8.
|
|
3701
|
-
"8.
|
|
3702
|
-
"8.
|
|
3703
|
-
"
|
|
3704
|
-
"8.8.1-jdk17",
|
|
3705
|
-
"8.8.1",
|
|
3778
|
+
"8.5.17",
|
|
3779
|
+
"8.5.17-ubuntu-jdk17",
|
|
3780
|
+
"8.5.10-ubuntu-jdk17",
|
|
3781
|
+
"8.5-jdk17",
|
|
3782
|
+
"8.3.1",
|
|
3783
|
+
"7.19.4",
|
|
3706
3784
|
"8.8.1-jdk11",
|
|
3707
|
-
"
|
|
3708
|
-
"8.
|
|
3709
|
-
"8.
|
|
3710
|
-
"
|
|
3711
|
-
"8.
|
|
3712
|
-
"8.
|
|
3713
|
-
"8.
|
|
3714
|
-
"8.
|
|
3715
|
-
"8.7-ubuntu-jdk17",
|
|
3716
|
-
"8.7-jdk17",
|
|
3717
|
-
"8.7-ubuntu-jdk11",
|
|
3718
|
-
"8.7-jdk11",
|
|
3785
|
+
"7.19.0-jdk11",
|
|
3786
|
+
"8.5-ubuntu-jdk17",
|
|
3787
|
+
"8.9.5-jdk11",
|
|
3788
|
+
"7.19.0-ubuntu-jdk11",
|
|
3789
|
+
"8.5.17-jdk17",
|
|
3790
|
+
"8.5.10",
|
|
3791
|
+
"8.4.0-jdk11",
|
|
3792
|
+
"8.5.14-ubuntu-jdk11",
|
|
3719
3793
|
"8.7.2-ubuntu-jdk17",
|
|
3720
|
-
"8.7.2-ubuntu-jdk11",
|
|
3721
|
-
"8.7.2-jdk11",
|
|
3722
3794
|
"8.7.2-jdk17",
|
|
3795
|
+
"7.19.4-jdk11",
|
|
3796
|
+
"8.7-ubuntu-jdk17",
|
|
3797
|
+
"8.6.0-ubuntu-jdk11",
|
|
3798
|
+
"8.8.1-ubuntu-jdk11",
|
|
3799
|
+
"8.5.7",
|
|
3800
|
+
"8.8-jdk11",
|
|
3723
3801
|
"8.7.2",
|
|
3724
|
-
"
|
|
3725
|
-
"8.7.1-ubuntu-jdk11",
|
|
3726
|
-
"8.7.1-ubi9-jdk17",
|
|
3727
|
-
"8.7.1-ubi9",
|
|
3728
|
-
"8.7.1-jdk11",
|
|
3729
|
-
"8.7.1-jdk17",
|
|
3730
|
-
"8.7.1",
|
|
3802
|
+
"7.19.26-jdk11",
|
|
3731
3803
|
"8.7",
|
|
3732
|
-
"8.
|
|
3733
|
-
"
|
|
3734
|
-
"
|
|
3735
|
-
"8.
|
|
3736
|
-
"
|
|
3737
|
-
"
|
|
3738
|
-
"8.
|
|
3739
|
-
"8.6.2-jdk17",
|
|
3740
|
-
"8.6.2-ubi9",
|
|
3741
|
-
"8.6.2-jdk11",
|
|
3742
|
-
"8.6.1-ubuntu-jdk17",
|
|
3743
|
-
"8.6.2",
|
|
3744
|
-
"8.6.1-ubi9-jdk17",
|
|
3745
|
-
"8.6.1-ubuntu-jdk11",
|
|
3746
|
-
"8.6.1-ubi9",
|
|
3747
|
-
"8.6.1-jdk17",
|
|
3748
|
-
"8.6.1",
|
|
3749
|
-
"8.6.1-jdk11",
|
|
3750
|
-
"8.6.0-ubuntu-jdk11",
|
|
3751
|
-
"8.6.0-ubuntu-jdk17",
|
|
3752
|
-
"8.6.0",
|
|
3753
|
-
"8.6.0-jdk11",
|
|
3754
|
-
"8.6.0-jdk17",
|
|
3755
|
-
"8.6",
|
|
3756
|
-
"8.5-ubuntu-jdk17",
|
|
3757
|
-
"8.5-jdk17",
|
|
3758
|
-
"8.5-ubuntu-jdk11",
|
|
3759
|
-
"8.5-jdk11",
|
|
3760
|
-
"8.5.9-ubuntu-jdk17",
|
|
3761
|
-
"8.5.9-ubuntu-jdk11",
|
|
3762
|
-
"8.5.9-ubi9-jdk17",
|
|
3763
|
-
"8.5.9-ubi9",
|
|
3764
|
-
"8.5.9-jdk17",
|
|
3765
|
-
"8.5.9-jdk11",
|
|
3766
|
-
"8.5.9",
|
|
3767
|
-
"8.5.8-ubuntu-jdk17",
|
|
3768
|
-
"8.5.8-ubuntu-jdk11",
|
|
3769
|
-
"8.5.8-ubi9-jdk17",
|
|
3770
|
-
"8.5.8-ubi9",
|
|
3771
|
-
"8.5.8-jdk17",
|
|
3772
|
-
"8.5.8-jdk11",
|
|
3773
|
-
"8.5.8",
|
|
3774
|
-
"8.5.7-ubuntu-jdk11",
|
|
3775
|
-
"8.5.7-ubuntu-jdk17",
|
|
3776
|
-
"8.5.7-ubi9-jdk17",
|
|
3777
|
-
"8.5.7-ubi9",
|
|
3778
|
-
"8.5.7-jdk11",
|
|
3804
|
+
"8.9.5-ubuntu-jdk11",
|
|
3805
|
+
"7.19.26",
|
|
3806
|
+
"7.19.4-ubuntu-jdk11",
|
|
3807
|
+
"8.4.3-jdk17",
|
|
3808
|
+
"7.19.0",
|
|
3809
|
+
"7.19.26-ubuntu-jdk11",
|
|
3810
|
+
"8.7-jdk17",
|
|
3779
3811
|
"8.5.7-jdk17",
|
|
3780
|
-
"8.5.
|
|
3781
|
-
"8.
|
|
3782
|
-
"8.
|
|
3783
|
-
"8.
|
|
3784
|
-
"8.
|
|
3785
|
-
"
|
|
3786
|
-
"8.5.
|
|
3787
|
-
"8.
|
|
3788
|
-
"8.
|
|
3789
|
-
"8.
|
|
3790
|
-
"8.5.
|
|
3791
|
-
"
|
|
3792
|
-
"
|
|
3793
|
-
"8.
|
|
3794
|
-
"8.
|
|
3812
|
+
"8.5.14-jdk11",
|
|
3813
|
+
"8.3.1-ubuntu-jdk11",
|
|
3814
|
+
"8.9.3-jdk17",
|
|
3815
|
+
"8.0.3",
|
|
3816
|
+
"8.0.3-ubuntu-jdk11",
|
|
3817
|
+
"7.20.1-ubuntu-jdk11",
|
|
3818
|
+
"8.5.0-jdk11",
|
|
3819
|
+
"8.4.3",
|
|
3820
|
+
"8.4.3-ubuntu-jdk17",
|
|
3821
|
+
"8.9.3",
|
|
3822
|
+
"8.5.7-ubuntu-jdk17",
|
|
3823
|
+
"7.20.1-jdk11",
|
|
3824
|
+
"7.20.1",
|
|
3825
|
+
"8.3.1-jdk11",
|
|
3826
|
+
"8.4.1-ubuntu-jdk11",
|
|
3827
|
+
"8.2.0",
|
|
3828
|
+
"8.2.0-jdk11",
|
|
3795
3829
|
"8.5.4-ubuntu-jdk11",
|
|
3796
|
-
"8.
|
|
3797
|
-
"8.
|
|
3830
|
+
"8.4.1-jdk11",
|
|
3831
|
+
"8.9.3-ubuntu-jdk17",
|
|
3832
|
+
"7.19.20-ubuntu-jdk11",
|
|
3833
|
+
"8.3.2",
|
|
3834
|
+
"8.2.0-ubuntu-jdk11",
|
|
3835
|
+
"8.3.2-ubuntu-jdk17",
|
|
3836
|
+
"8.5.0-ubuntu-jdk11",
|
|
3837
|
+
"8.0.3-jdk11",
|
|
3798
3838
|
"8.5.4-jdk11",
|
|
3799
|
-
"8.
|
|
3800
|
-
"
|
|
3801
|
-
"
|
|
3802
|
-
"
|
|
3803
|
-
"
|
|
3804
|
-
"8.5.2-ubuntu-jdk11",
|
|
3805
|
-
"8.5.2-ubuntu-jdk17",
|
|
3806
|
-
"8.5.2-jdk11",
|
|
3807
|
-
"8.5.2",
|
|
3808
|
-
"8.5.1-ubuntu-jdk17",
|
|
3809
|
-
"8.5.1-ubuntu-jdk11",
|
|
3810
|
-
"8.5.17-ubi9-jdk17",
|
|
3811
|
-
"8.5.1-jdk17",
|
|
3812
|
-
"8.5.1-jdk11",
|
|
3813
|
-
"8.5.17-ubi9",
|
|
3814
|
-
"8.5.17-ubuntu-jdk17",
|
|
3815
|
-
"8.5.17-ubuntu-jdk11",
|
|
3816
|
-
"8.5.17-jdk17",
|
|
3817
|
-
"8.5.17-jdk11",
|
|
3818
|
-
"8.5.16-ubuntu-jdk17",
|
|
3819
|
-
"8.5.17",
|
|
3820
|
-
"8.5.16-ubuntu-jdk11",
|
|
3821
|
-
"8.5.16-jdk17",
|
|
3822
|
-
"8.5.16-ubi9-jdk17",
|
|
3823
|
-
"8.5.16-ubi9",
|
|
3824
|
-
"8.5.16-jdk11",
|
|
3825
|
-
"8.5.16",
|
|
3826
|
-
"8.5.15-ubuntu-jdk17",
|
|
3827
|
-
"8.5.15-ubi9-jdk17",
|
|
3828
|
-
"8.5.15-ubuntu-jdk11",
|
|
3829
|
-
"8.5.15-jdk17",
|
|
3830
|
-
"8.5.15-jdk11",
|
|
3831
|
-
"8.5.15-ubi9",
|
|
3832
|
-
"8.5.15",
|
|
3833
|
-
"8.5.14-ubuntu-jdk17",
|
|
3834
|
-
"8.5.14-ubuntu-jdk11",
|
|
3835
|
-
"8.5.14-jdk17",
|
|
3836
|
-
"8.5.14-jdk11",
|
|
3837
|
-
"8.5.14",
|
|
3838
|
-
"8.5.12-ubuntu-jdk17",
|
|
3839
|
-
"8.5.12-ubuntu-jdk11",
|
|
3840
|
-
"8.5.12-ubi9-jdk17",
|
|
3841
|
-
"8.5.12-ubi9",
|
|
3842
|
-
"8.5.12-jdk17",
|
|
3843
|
-
"8.5.12-jdk11",
|
|
3844
|
-
"8.2.3-ubuntu-jdk11",
|
|
3839
|
+
"8.3.2-jdk17",
|
|
3840
|
+
"9.0.1-ubuntu-jdk21",
|
|
3841
|
+
"7.19.15-jdk11",
|
|
3842
|
+
"9.0.1-jdk21",
|
|
3843
|
+
"7.19.1-ubuntu-jdk11",
|
|
3845
3844
|
"8.5.11-ubuntu-jdk17",
|
|
3846
|
-
"
|
|
3847
|
-
"
|
|
3848
|
-
"
|
|
3849
|
-
"
|
|
3850
|
-
"
|
|
3845
|
+
"7.19.20-jdk11",
|
|
3846
|
+
"7.19.20",
|
|
3847
|
+
"9.0.3",
|
|
3848
|
+
"7.19.15",
|
|
3849
|
+
"7.19.15-ubuntu-jdk11",
|
|
3850
|
+
"7.19.1-jdk11",
|
|
3851
3851
|
"8.5.11-jdk17",
|
|
3852
|
-
"
|
|
3853
|
-
"
|
|
3854
|
-
"8.
|
|
3855
|
-
"
|
|
3852
|
+
"9.0.3-jdk17",
|
|
3853
|
+
"7.19.1",
|
|
3854
|
+
"8.3.2-ubuntu-jdk11",
|
|
3855
|
+
"7.19.5",
|
|
3856
|
+
"7.19.27-jdk11",
|
|
3857
|
+
"7.19.27",
|
|
3858
|
+
"9.0-ubuntu-jdk17",
|
|
3856
3859
|
"8.5.11",
|
|
3857
|
-
"
|
|
3858
|
-
"
|
|
3859
|
-
"
|
|
3860
|
-
"
|
|
3861
|
-
"
|
|
3862
|
-
"8.5.
|
|
3863
|
-
"
|
|
3864
|
-
"8.
|
|
3865
|
-
"8.5.
|
|
3866
|
-
"
|
|
3867
|
-
"8.5.
|
|
3868
|
-
"8.
|
|
3869
|
-
"8.
|
|
3870
|
-
"8.
|
|
3871
|
-
"
|
|
3872
|
-
"8.
|
|
3873
|
-
"8.
|
|
3874
|
-
"8.
|
|
3875
|
-
"8.
|
|
3876
|
-
"8.
|
|
3877
|
-
"8.4.4-ubuntu-jdk17",
|
|
3878
|
-
"8.4.4-ubuntu-jdk11",
|
|
3860
|
+
"7.19.5-ubuntu-jdk11",
|
|
3861
|
+
"7.19.27-ubuntu-jdk11",
|
|
3862
|
+
"9.0",
|
|
3863
|
+
"9.0.2-ubi9-jdk17",
|
|
3864
|
+
"9.0.3-ubuntu-jdk17",
|
|
3865
|
+
"8.5.2",
|
|
3866
|
+
"9.0-jdk17",
|
|
3867
|
+
"8.9.6-jdk11",
|
|
3868
|
+
"8.5.2-jdk17",
|
|
3869
|
+
"7.19.5-jdk11",
|
|
3870
|
+
"8.5.15-ubuntu-jdk11",
|
|
3871
|
+
"8.5.2-ubuntu-jdk17",
|
|
3872
|
+
"8.9.6-ubuntu-jdk11",
|
|
3873
|
+
"8.3.2-jdk11",
|
|
3874
|
+
"9.0.2-ubi9",
|
|
3875
|
+
"8.5.8",
|
|
3876
|
+
"8.5.8-ubuntu-jdk17",
|
|
3877
|
+
"8.6.1-ubuntu-jdk11",
|
|
3878
|
+
"8.6.1-ubi9",
|
|
3879
|
+
"8.5.8-jdk17",
|
|
3879
3880
|
"8.4.4-jdk17",
|
|
3880
|
-
"8.
|
|
3881
|
-
"8.
|
|
3881
|
+
"8.5.15-jdk11",
|
|
3882
|
+
"8.8.0-jdk17",
|
|
3883
|
+
"8.8.0",
|
|
3884
|
+
"8.6.1-jdk11",
|
|
3885
|
+
"8.6.1-ubi9-jdk17",
|
|
3886
|
+
"8.8.0-ubuntu-jdk17",
|
|
3882
3887
|
"8.4.4",
|
|
3883
|
-
"8.4.
|
|
3884
|
-
"8.
|
|
3885
|
-
"8.
|
|
3886
|
-
"8.
|
|
3887
|
-
"
|
|
3888
|
-
"8.
|
|
3889
|
-
"8.4
|
|
3890
|
-
"8.
|
|
3888
|
+
"8.4.4-ubuntu-jdk17",
|
|
3889
|
+
"8.9.0-jdk11",
|
|
3890
|
+
"8.9.0-ubuntu-jdk11",
|
|
3891
|
+
"8.0-ubuntu-jdk11",
|
|
3892
|
+
"7.20.2",
|
|
3893
|
+
"8.0-jdk11",
|
|
3894
|
+
"8.0.4-jdk11",
|
|
3895
|
+
"8.3.3-jdk17",
|
|
3896
|
+
"8.0.4-ubuntu-jdk11",
|
|
3897
|
+
"8.0.4",
|
|
3898
|
+
"8.5.1-ubuntu-jdk11",
|
|
3899
|
+
"8.9.4-jdk17",
|
|
3900
|
+
"8.9.4",
|
|
3901
|
+
"8.0",
|
|
3902
|
+
"8.9.4-ubuntu-jdk17",
|
|
3903
|
+
"8.9.6-ubi9-jdk17",
|
|
3904
|
+
"8.9.6-ubi9",
|
|
3905
|
+
"8.8.0-ubi9-jdk17",
|
|
3891
3906
|
"8.4.2-jdk11",
|
|
3892
|
-
"8.4.1-jdk17",
|
|
3893
|
-
"8.4.1-ubuntu-jdk11",
|
|
3894
|
-
"8.4.1-jdk11",
|
|
3895
|
-
"8.4.1",
|
|
3896
|
-
"8.4.0-jdk17",
|
|
3897
|
-
"8.4.0-ubuntu-jdk17",
|
|
3898
|
-
"8.4.0-ubuntu-jdk11",
|
|
3899
|
-
"8.4.0-jdk11",
|
|
3900
|
-
"8.4.0",
|
|
3901
|
-
"8.3-ubuntu-jdk11",
|
|
3902
|
-
"8.4",
|
|
3903
|
-
"8.3-jdk17",
|
|
3904
|
-
"8.3-ubuntu-jdk17",
|
|
3905
|
-
"8.3-jdk11",
|
|
3906
|
-
"8.3.4-ubuntu-jdk17",
|
|
3907
|
-
"8.3.4-ubuntu-jdk11",
|
|
3908
|
-
"8.3.4-jdk17",
|
|
3909
|
-
"8.3.4",
|
|
3910
|
-
"8.3.4-jdk11",
|
|
3911
3907
|
"8.3.3-ubuntu-jdk17",
|
|
3912
|
-
"8.3.3-jdk11",
|
|
3913
|
-
"8.3.3-ubuntu-jdk11",
|
|
3914
|
-
"8.3.3-jdk17",
|
|
3915
3908
|
"8.3.3",
|
|
3916
|
-
"
|
|
3917
|
-
"8.
|
|
3918
|
-
"
|
|
3919
|
-
"8.
|
|
3920
|
-
"8.
|
|
3921
|
-
"8.
|
|
3922
|
-
"
|
|
3923
|
-
"
|
|
3924
|
-
"8.
|
|
3925
|
-
"8.
|
|
3926
|
-
"8.3.1",
|
|
3927
|
-
"8.3.0-ubuntu-jdk11",
|
|
3928
|
-
"8.3.0-jdk17",
|
|
3929
|
-
"8.3.0-jdk11",
|
|
3930
|
-
"8.2-ubuntu-jdk17",
|
|
3931
|
-
"8.3",
|
|
3932
|
-
"8.3.0",
|
|
3933
|
-
"8.2-ubuntu-jdk11",
|
|
3934
|
-
"8.2-jdk17",
|
|
3935
|
-
"8.2-jdk11",
|
|
3936
|
-
"8.2.3-ubuntu-jdk17",
|
|
3937
|
-
"8.2.3-jdk17",
|
|
3938
|
-
"8.2.3-jdk11",
|
|
3939
|
-
"8.2.3",
|
|
3940
|
-
"8.2.2-ubuntu-jdk17",
|
|
3941
|
-
"8.2.2-ubuntu-jdk11",
|
|
3942
|
-
"8.2.2-jdk17",
|
|
3943
|
-
"8.2.2-jdk11",
|
|
3944
|
-
"8.2.2",
|
|
3945
|
-
"8.2.1-ubuntu-jdk17",
|
|
3946
|
-
"8.2.1-jdk17",
|
|
3909
|
+
"7.19.16-ubuntu-jdk11",
|
|
3910
|
+
"8.8.0-ubi9",
|
|
3911
|
+
"7.19.10-ubuntu-jdk11",
|
|
3912
|
+
"8.5.15-ubi9",
|
|
3913
|
+
"8.5.1-jdk11",
|
|
3914
|
+
"8.2.1",
|
|
3915
|
+
"7.20.2-jdk11",
|
|
3916
|
+
"7.20.2-ubuntu-jdk11",
|
|
3917
|
+
"8.5.5-jdk11",
|
|
3918
|
+
"8.5.15-ubi9-jdk17",
|
|
3947
3919
|
"8.2.1-ubuntu-jdk11",
|
|
3948
3920
|
"8.2.1-jdk11",
|
|
3949
|
-
"
|
|
3950
|
-
"8.2
|
|
3951
|
-
"8.2
|
|
3952
|
-
"8.
|
|
3953
|
-
"
|
|
3954
|
-
"8.
|
|
3955
|
-
"
|
|
3956
|
-
"
|
|
3957
|
-
"8.
|
|
3958
|
-
"
|
|
3959
|
-
"
|
|
3960
|
-
"
|
|
3961
|
-
"8.
|
|
3962
|
-
"8.
|
|
3963
|
-
"
|
|
3964
|
-
"8.
|
|
3921
|
+
"7.19.21-ubuntu-jdk11",
|
|
3922
|
+
"8.4.2-ubuntu-jdk11",
|
|
3923
|
+
"8.9.2-ubi9-jdk17",
|
|
3924
|
+
"8.5.12-jdk17",
|
|
3925
|
+
"7.19.10",
|
|
3926
|
+
"8.5.9-jdk17",
|
|
3927
|
+
"7.19.10-jdk11",
|
|
3928
|
+
"7.19.16-jdk11",
|
|
3929
|
+
"8.5.5-ubuntu-jdk11",
|
|
3930
|
+
"7.19.6",
|
|
3931
|
+
"7.19.21-jdk11",
|
|
3932
|
+
"7.19.6-jdk11",
|
|
3933
|
+
"8.5.3",
|
|
3934
|
+
"8.5.12",
|
|
3935
|
+
"7.19.6-ubuntu-jdk11",
|
|
3936
|
+
"8.5.12-ubuntu-jdk17",
|
|
3937
|
+
"8.5.9-ubuntu-jdk17",
|
|
3938
|
+
"7.19.16",
|
|
3939
|
+
"7.19.21",
|
|
3940
|
+
"8.5.3-jdk17",
|
|
3941
|
+
"8.5.3-ubuntu-jdk17",
|
|
3942
|
+
"8.9.2-ubi9",
|
|
3943
|
+
"8.5.16-jdk11",
|
|
3944
|
+
"8.5.16-ubuntu-jdk11",
|
|
3945
|
+
"8.6-jdk11",
|
|
3946
|
+
"8.3.3-ubuntu-jdk11",
|
|
3947
|
+
"8.5.9",
|
|
3948
|
+
"9.1.0",
|
|
3949
|
+
"8.3.3-jdk11",
|
|
3950
|
+
"8.6.2-jdk11",
|
|
3951
|
+
"9.1.0-ubuntu-jdk17",
|
|
3952
|
+
"8.6-ubuntu-jdk11",
|
|
3953
|
+
"8.6.2-ubuntu-jdk11",
|
|
3954
|
+
"9.1.0-jdk17",
|
|
3955
|
+
"8.6.2-ubi9-jdk17",
|
|
3956
|
+
"9.0.3-ubi9-jdk21",
|
|
3957
|
+
"8.9.7-jdk11",
|
|
3965
3958
|
"8.1.3-ubuntu-jdk17",
|
|
3966
|
-
"
|
|
3967
|
-
"
|
|
3959
|
+
"7.19.28-ubuntu-jdk11",
|
|
3960
|
+
"7.19.28-jdk11",
|
|
3961
|
+
"8.9.1-jdk11",
|
|
3962
|
+
"8.5.10-ubi9-jdk17",
|
|
3963
|
+
"9.0.2-jdk21",
|
|
3964
|
+
"7.19.28",
|
|
3965
|
+
"8.5.10-ubi9",
|
|
3966
|
+
"8.9.7-ubuntu-jdk11",
|
|
3967
|
+
"9.0.2-ubuntu-jdk21",
|
|
3968
|
+
"8.2.2-ubuntu-jdk17",
|
|
3969
|
+
"8.2.2-jdk17",
|
|
3970
|
+
"8.6.2-ubi9",
|
|
3971
|
+
"8.9.1-ubuntu-jdk11",
|
|
3972
|
+
"8.5.7-ubi9-jdk17",
|
|
3973
|
+
"8.8-ubuntu-jdk17",
|
|
3974
|
+
"8.8.1-jdk17",
|
|
3975
|
+
"8.8.1-ubuntu-jdk17",
|
|
3968
3976
|
"8.1.3-jdk17",
|
|
3969
|
-
"8.
|
|
3970
|
-
"8.
|
|
3971
|
-
"8.
|
|
3972
|
-
"8.
|
|
3973
|
-
"8.
|
|
3974
|
-
"8.
|
|
3975
|
-
"8.
|
|
3976
|
-
"
|
|
3977
|
-
"8.
|
|
3978
|
-
"8.
|
|
3979
|
-
"8.
|
|
3980
|
-
"8.
|
|
3981
|
-
"
|
|
3982
|
-
"8.
|
|
3983
|
-
"8.
|
|
3984
|
-
"8.
|
|
3985
|
-
"8.
|
|
3986
|
-
"8.
|
|
3987
|
-
"8.
|
|
3988
|
-
"8.
|
|
3989
|
-
"
|
|
3990
|
-
"8.0.3-jdk17",
|
|
3991
|
-
"8.0.3-ubuntu-jdk17",
|
|
3992
|
-
"8.0.3-ubuntu-jdk11",
|
|
3993
|
-
"8.0.2-ubuntu-jdk11",
|
|
3994
|
-
"8.0.2-ubuntu-jdk17",
|
|
3995
|
-
"8.0.3-jdk11",
|
|
3996
|
-
"8.0.3",
|
|
3997
|
-
"8.0.2-jdk17",
|
|
3998
|
-
"8.0.2-jdk11",
|
|
3999
|
-
"8.0.2",
|
|
4000
|
-
"8.0.1-ubuntu-jdk17",
|
|
4001
|
-
"8.0.1-ubuntu-jdk11",
|
|
4002
|
-
"8.0.1-jdk17",
|
|
4003
|
-
"8.0.0-ubuntu-jdk17",
|
|
4004
|
-
"8.0.1-jdk11",
|
|
4005
|
-
"8.0.1",
|
|
4006
|
-
"8.0.0-ubuntu-jdk11",
|
|
4007
|
-
"8.0.0-jdk11",
|
|
4008
|
-
"8.0.0-jdk17",
|
|
4009
|
-
"7-jdk11",
|
|
4010
|
-
"8.0.0",
|
|
4011
|
-
"8.0",
|
|
3977
|
+
"8.5.7-ubi9",
|
|
3978
|
+
"8.8.1",
|
|
3979
|
+
"8.3.4-ubuntu-jdk17",
|
|
3980
|
+
"8.4.5-jdk17",
|
|
3981
|
+
"8.3.4",
|
|
3982
|
+
"8.0.3-ubuntu-jdk17",
|
|
3983
|
+
"8.8",
|
|
3984
|
+
"9.0.3-ubi9-jdk17",
|
|
3985
|
+
"8.5.10-ubuntu-jdk11",
|
|
3986
|
+
"8.8-jdk17",
|
|
3987
|
+
"8.9.5-jdk17",
|
|
3988
|
+
"8.4.3-jdk11",
|
|
3989
|
+
"9.0.3-ubi9",
|
|
3990
|
+
"8.5.16-ubi9-jdk17",
|
|
3991
|
+
"8.3-jdk17",
|
|
3992
|
+
"8.3.4-jdk17",
|
|
3993
|
+
"8.2.2-jdk11",
|
|
3994
|
+
"8.4.5",
|
|
3995
|
+
"8.4-jdk17",
|
|
3996
|
+
"8.5.16-ubi9",
|
|
3997
|
+
"7.20",
|
|
4012
3998
|
"7-ubuntu-jdk11",
|
|
4013
|
-
"8",
|
|
4014
|
-
"
|
|
3999
|
+
"8.3",
|
|
4000
|
+
"8.3-ubuntu-jdk17",
|
|
4001
|
+
"8.4-ubuntu-jdk17",
|
|
4002
|
+
"8.4",
|
|
4015
4003
|
"7.20-jdk11",
|
|
4004
|
+
"8.4.5-ubuntu-jdk17",
|
|
4016
4005
|
"7.20.3-ubuntu-jdk11",
|
|
4017
|
-
"
|
|
4006
|
+
"8.5.14-jdk17",
|
|
4007
|
+
"8.0.3-jdk17",
|
|
4008
|
+
"8.5.4",
|
|
4018
4009
|
"7.20.3",
|
|
4019
|
-
"7.20
|
|
4020
|
-
"
|
|
4021
|
-
"
|
|
4022
|
-
"
|
|
4023
|
-
"7
|
|
4024
|
-
"
|
|
4025
|
-
"
|
|
4026
|
-
"
|
|
4027
|
-
"
|
|
4028
|
-
"
|
|
4029
|
-
"7.20",
|
|
4030
|
-
"
|
|
4031
|
-
"
|
|
4032
|
-
"
|
|
4033
|
-
"
|
|
4034
|
-
"
|
|
4035
|
-
"7.19.8-jdk11",
|
|
4036
|
-
"7.19.9",
|
|
4037
|
-
"7.19.7-jdk11",
|
|
4038
|
-
"7.19.7-ubuntu-jdk11",
|
|
4039
|
-
"7.19.7",
|
|
4040
|
-
"7.19.6-ubuntu-jdk11",
|
|
4041
|
-
"7.19.6-jdk11",
|
|
4042
|
-
"7.19.6",
|
|
4043
|
-
"7.19.5-ubuntu-jdk11",
|
|
4044
|
-
"7.19.5-jdk11",
|
|
4045
|
-
"7.19.5",
|
|
4046
|
-
"7.19.4-ubuntu-jdk11",
|
|
4047
|
-
"7.19.4-jdk11",
|
|
4048
|
-
"7.19.4",
|
|
4049
|
-
"7.19.3-ubuntu-jdk11",
|
|
4050
|
-
"7.19.3-jdk11",
|
|
4051
|
-
"7.19.3",
|
|
4052
|
-
"7.19.2-ubuntu-jdk11",
|
|
4053
|
-
"7.19.2-jdk11",
|
|
4054
|
-
"7.19.29-ubuntu-jdk11",
|
|
4055
|
-
"7.19.29-jdk11",
|
|
4056
|
-
"7.19.29",
|
|
4057
|
-
"7.19.28-ubuntu-jdk11",
|
|
4058
|
-
"7.19.28-jdk11",
|
|
4059
|
-
"7.19.28",
|
|
4060
|
-
"7.19.27-ubuntu-jdk11",
|
|
4061
|
-
"7.19.27-jdk11",
|
|
4062
|
-
"7.19.27",
|
|
4063
|
-
"7.19.26-ubuntu-jdk11",
|
|
4064
|
-
"7.19.26-jdk11",
|
|
4065
|
-
"7.19.25-jdk11",
|
|
4066
|
-
"7.19.26",
|
|
4067
|
-
"7.19.25-ubuntu-jdk11",
|
|
4068
|
-
"7.19.25",
|
|
4069
|
-
"7.19.24-ubuntu-jdk11",
|
|
4070
|
-
"7.19.24-jdk11",
|
|
4071
|
-
"7.19.24",
|
|
4072
|
-
"7.19.23-ubuntu-jdk11",
|
|
4073
|
-
"7.19.14",
|
|
4074
|
-
"7.19.23-jdk11",
|
|
4075
|
-
"7.19.23",
|
|
4076
|
-
"latest",
|
|
4077
|
-
"7.19.22-jdk11",
|
|
4078
|
-
"7.19.22-ubuntu-jdk11",
|
|
4010
|
+
"7.20-ubuntu-jdk11",
|
|
4011
|
+
"8.5.10-jdk11",
|
|
4012
|
+
"8.2.2",
|
|
4013
|
+
"8.5.4-ubuntu-jdk17",
|
|
4014
|
+
"7-jdk11",
|
|
4015
|
+
"8.9.5",
|
|
4016
|
+
"8.5.6-jdk11",
|
|
4017
|
+
"8.5.6-ubuntu-jdk11",
|
|
4018
|
+
"8.5.14",
|
|
4019
|
+
"8.9.5-ubuntu-jdk17",
|
|
4020
|
+
"7.20.3-jdk11",
|
|
4021
|
+
"8.5.14-ubuntu-jdk17",
|
|
4022
|
+
"8.4.3-ubuntu-jdk11",
|
|
4023
|
+
"8.5.4-jdk17",
|
|
4024
|
+
"8.1.0-jdk17",
|
|
4025
|
+
"8.2.0-ubuntu-jdk17",
|
|
4079
4026
|
"7.19.22",
|
|
4080
|
-
"
|
|
4081
|
-
"7.19.
|
|
4082
|
-
"
|
|
4083
|
-
"7.19.20",
|
|
4084
|
-
"7.19.20-ubuntu-jdk11",
|
|
4085
|
-
"7.19.20-jdk11",
|
|
4086
|
-
"7.19.15-jdk11",
|
|
4087
|
-
"7.19.2",
|
|
4088
|
-
"7.19.1-ubuntu-jdk11",
|
|
4089
|
-
"7.19.19-jdk11",
|
|
4090
|
-
"7.19.19-ubuntu-jdk11",
|
|
4091
|
-
"7.19.1-jdk11",
|
|
4092
|
-
"7.19.19",
|
|
4093
|
-
"7.19.18-ubuntu-jdk11",
|
|
4094
|
-
"7.19.18-jdk11",
|
|
4095
|
-
"7.19.18",
|
|
4096
|
-
"7.19.17-ubuntu-jdk11",
|
|
4097
|
-
"7.19.17",
|
|
4098
|
-
"7.19.17-jdk11",
|
|
4099
|
-
"7.19.16-ubuntu-jdk11",
|
|
4100
|
-
"7.19.16-jdk11",
|
|
4101
|
-
"7.19.16",
|
|
4102
|
-
"7.19.14-ubuntu-jdk11",
|
|
4103
|
-
"7.19.14-jdk11",
|
|
4104
|
-
"7.19.15-ubuntu-jdk11",
|
|
4105
|
-
"7.19.15",
|
|
4106
|
-
"7.19.12-ubuntu-jdk11",
|
|
4107
|
-
"7.19.12-jdk11",
|
|
4027
|
+
"8.9.7-ubi9",
|
|
4028
|
+
"7.19.22-ubuntu-jdk11",
|
|
4029
|
+
"8.9.7-ubi9-jdk17",
|
|
4108
4030
|
"7.19.11-ubuntu-jdk11",
|
|
4031
|
+
"8.1.0-jdk11",
|
|
4032
|
+
"7.19.17-jdk11",
|
|
4033
|
+
"8.8.1-ubi9-jdk17",
|
|
4034
|
+
"8.9.3-ubi9",
|
|
4035
|
+
"8.1.0-ubuntu-jdk11",
|
|
4036
|
+
"8.1.0-ubuntu-jdk17",
|
|
4109
4037
|
"7.19.11-jdk11",
|
|
4038
|
+
"8.2.0-jdk17",
|
|
4039
|
+
"8.9.3-ubi9-jdk17",
|
|
4110
4040
|
"7.19.11",
|
|
4111
|
-
"7.19.10-jdk11",
|
|
4112
|
-
"7.19.12",
|
|
4113
|
-
"7.19.10-ubuntu-jdk11",
|
|
4114
|
-
"7.19",
|
|
4115
|
-
"7.19.10",
|
|
4116
|
-
"7.19.0-ubuntu-jdk11",
|
|
4117
4041
|
"7",
|
|
4118
|
-
"
|
|
4119
|
-
"
|
|
4120
|
-
"
|
|
4042
|
+
"8.1.0",
|
|
4043
|
+
"8.2.2-ubuntu-jdk11",
|
|
4044
|
+
"8.6.0-jdk17",
|
|
4045
|
+
"7.19.7",
|
|
4046
|
+
"8.6.0-ubuntu-jdk17",
|
|
4047
|
+
"7.19.22-jdk11",
|
|
4048
|
+
"8.3.4-ubuntu-jdk11",
|
|
4049
|
+
"7.19.17",
|
|
4050
|
+
"8.6.0",
|
|
4051
|
+
"7.19.17-ubuntu-jdk11",
|
|
4052
|
+
"7.19.29",
|
|
4053
|
+
"7.19",
|
|
4054
|
+
"8.3.4-jdk11",
|
|
4055
|
+
"latest",
|
|
4056
|
+
"8.3-jdk11",
|
|
4057
|
+
"8.1.4-jdk17",
|
|
4058
|
+
"8.5.17-ubuntu-jdk11",
|
|
4059
|
+
"8.5.17-jdk11",
|
|
4060
|
+
"8.8.1-ubi9",
|
|
4061
|
+
"7.19.29-ubuntu-jdk11",
|
|
4062
|
+
"8.1-ubuntu-jdk17",
|
|
4063
|
+
"7.19-jdk11",
|
|
4064
|
+
"8.9-jdk11",
|
|
4065
|
+
"8.5-ubuntu-jdk11",
|
|
4066
|
+
"9.1-jdk17",
|
|
4067
|
+
"7.19.7-ubuntu-jdk11",
|
|
4068
|
+
"7.19.29-jdk11",
|
|
4069
|
+
"7.19-ubuntu-jdk11",
|
|
4070
|
+
"8.5-jdk11",
|
|
4071
|
+
"8.1-jdk17",
|
|
4072
|
+
"9.0-ubuntu-jdk21",
|
|
4073
|
+
"9.0-jdk21",
|
|
4074
|
+
"8.9.8-jdk11",
|
|
4075
|
+
"8-jdk11",
|
|
4076
|
+
"9.1.1",
|
|
4077
|
+
"8.3-ubuntu-jdk11",
|
|
4078
|
+
"8.9.2-jdk11",
|
|
4079
|
+
"8.1.4-ubuntu-jdk17",
|
|
4080
|
+
"7.19.7-jdk11",
|
|
4081
|
+
"8.9.2-ubuntu-jdk11",
|
|
4082
|
+
"8.9.8-ubuntu-jdk11",
|
|
4083
|
+
"9.0.3-ubuntu-jdk21",
|
|
4084
|
+
"9-jdk17",
|
|
4085
|
+
"8.5.11-ubi9-jdk17",
|
|
4086
|
+
"8.5.8-ubi9-jdk17",
|
|
4087
|
+
"8.5.11-ubi9",
|
|
4088
|
+
"8-ubuntu-jdk11",
|
|
4089
|
+
"8.9-ubuntu-jdk11",
|
|
4090
|
+
"8.2.3",
|
|
4091
|
+
"9.1.1-ubuntu-jdk17",
|
|
4092
|
+
"ubuntu-jdk21",
|
|
4093
|
+
"8.5.8-ubi9",
|
|
4094
|
+
"8.2.3-ubuntu-jdk17",
|
|
4095
|
+
"9-ubuntu-jdk17",
|
|
4096
|
+
"9-jdk21",
|
|
4097
|
+
"9.1.1-jdk17",
|
|
4098
|
+
"jdk17",
|
|
4099
|
+
"9-ubuntu-jdk21",
|
|
4100
|
+
"9.1-ubuntu-jdk17",
|
|
4101
|
+
"ubuntu-jdk17",
|
|
4121
4102
|
"jdk21",
|
|
4103
|
+
"9.1.1-jdk21",
|
|
4104
|
+
"8.2-jdk17",
|
|
4105
|
+
"9.1",
|
|
4122
4106
|
"9.1-jdk21",
|
|
4123
|
-
"
|
|
4124
|
-
"9.1.1-ubuntu-jdk21",
|
|
4107
|
+
"9",
|
|
4125
4108
|
"9.1-ubuntu-jdk21",
|
|
4126
|
-
"
|
|
4127
|
-
"
|
|
4109
|
+
"8.0.4-jdk17",
|
|
4110
|
+
"8.0-jdk17",
|
|
4111
|
+
"9.1.1-ubuntu-jdk21",
|
|
4112
|
+
"9.0.3-jdk21",
|
|
4113
|
+
"8.2.3-jdk17",
|
|
4114
|
+
"8.7.1-ubi9-jdk17",
|
|
4115
|
+
"8.2.3-jdk11",
|
|
4116
|
+
"8.4.4-ubuntu-jdk11",
|
|
4117
|
+
"8.2-ubuntu-jdk11",
|
|
4118
|
+
"9.1.0-jdk21",
|
|
4119
|
+
"8.2-ubuntu-jdk17",
|
|
4120
|
+
"8.9.6",
|
|
4121
|
+
"7.19.23-ubuntu-jdk11",
|
|
4122
|
+
"8.9.0",
|
|
4123
|
+
"8.7.1-ubi9",
|
|
4124
|
+
"8.5.7-jdk11",
|
|
4125
|
+
"8.0.4-ubuntu-jdk17",
|
|
4126
|
+
"8.2-jdk11",
|
|
4127
|
+
"8.0-ubuntu-jdk17",
|
|
4128
|
+
"8.2.3-ubuntu-jdk11",
|
|
4129
|
+
"7.19.12",
|
|
4130
|
+
"8.2",
|
|
4131
|
+
"8.5.7-ubuntu-jdk11",
|
|
4132
|
+
"8.9.0-jdk17",
|
|
4133
|
+
"7.19.12-ubuntu-jdk11",
|
|
4134
|
+
"8.9.6-jdk17",
|
|
4135
|
+
"7.19.12-jdk11",
|
|
4136
|
+
"8.7.1-ubuntu-jdk11",
|
|
4137
|
+
"8.4.4-jdk11",
|
|
4138
|
+
"8.5.15",
|
|
4139
|
+
"8.9.8-ubi9",
|
|
4140
|
+
"8.5.0",
|
|
4141
|
+
"9.1.0-ubi9-jdk21",
|
|
4142
|
+
"9.1.0-ubi9",
|
|
4143
|
+
"8.5.15-jdk17",
|
|
4144
|
+
"8.9.6-ubuntu-jdk17",
|
|
4145
|
+
"7.19.23-jdk11",
|
|
4146
|
+
"8.9.0-ubuntu-jdk17",
|
|
4147
|
+
"7.19.18",
|
|
4148
|
+
"9.1.0-ubuntu-jdk21",
|
|
4149
|
+
"7.19.8-jdk11",
|
|
4150
|
+
"7.19.23",
|
|
4151
|
+
"8.5.5-jdk17",
|
|
4152
|
+
"8.5.0-jdk17",
|
|
4153
|
+
"8.5.15-ubuntu-jdk17",
|
|
4154
|
+
"9.1.0-ubi9-jdk17",
|
|
4155
|
+
"8.7.1-jdk11",
|
|
4156
|
+
"8.0.2-ubuntu-jdk17",
|
|
4157
|
+
"8.5.5-ubuntu-jdk17",
|
|
4158
|
+
"8.5.11-ubuntu-jdk11",
|
|
4159
|
+
"8.9.8-ubi9-jdk17",
|
|
4160
|
+
"7.19.18-jdk11",
|
|
4161
|
+
"8.0.0-jdk11",
|
|
4162
|
+
"8.5.11-jdk11",
|
|
4163
|
+
"8.4.0",
|
|
4164
|
+
"8.1.1-jdk11",
|
|
4165
|
+
"8.5.17-ubi9-jdk17",
|
|
4166
|
+
"8.0.0-ubuntu-jdk11",
|
|
4167
|
+
"8.1.1",
|
|
4168
|
+
"8.5.0-ubuntu-jdk17",
|
|
4169
|
+
"8.5.5",
|
|
4170
|
+
"8.1.1-ubuntu-jdk17",
|
|
4171
|
+
"7.19.18-ubuntu-jdk11",
|
|
4172
|
+
"8.6.1-jdk17",
|
|
4173
|
+
"8.1.1-ubuntu-jdk11",
|
|
4174
|
+
"8.5.17-ubi9",
|
|
4175
|
+
"8.0.2-jdk17",
|
|
4176
|
+
"8.1.1-jdk17",
|
|
4177
|
+
"8.2.1-ubuntu-jdk17",
|
|
4178
|
+
"8.0.0",
|
|
4179
|
+
"7.19.8",
|
|
4180
|
+
"7.19.8-ubuntu-jdk11",
|
|
4181
|
+
"8.4.0-ubuntu-jdk17",
|
|
4182
|
+
"8.4.0-jdk17",
|
|
4183
|
+
"8.6.1-ubuntu-jdk17",
|
|
4184
|
+
"8.6.1",
|
|
4185
|
+
"8.2.1-jdk17",
|
|
4186
|
+
"8.0.0-ubuntu-jdk17",
|
|
4187
|
+
"8.9.4-ubi9",
|
|
4188
|
+
"8.0.0-jdk17",
|
|
4189
|
+
"8.0.1-ubuntu-jdk17",
|
|
4190
|
+
"8.0.1-jdk17",
|
|
4191
|
+
"8.9.4-ubi9-jdk17",
|
|
4192
|
+
"8.5.9-ubi9",
|
|
4193
|
+
"9.0.1-ubi9-jdk21",
|
|
4194
|
+
"8.5.12-ubi9-jdk17",
|
|
4195
|
+
"8.5.12-ubi9",
|
|
4196
|
+
"9.0.1-ubi9",
|
|
4197
|
+
"8.5.9-ubi9-jdk17",
|
|
4198
|
+
"8.9.0-ubi9-jdk17",
|
|
4199
|
+
"8.9.0-ubi9",
|
|
4200
|
+
"ubi9-jdk17",
|
|
4201
|
+
"9.1.1-ubi9-jdk17",
|
|
4202
|
+
"9.1.1-ubi9-jdk21",
|
|
4203
|
+
"8.7.2-ubi9",
|
|
4128
4204
|
"9.1.1-ubi9",
|
|
4129
4205
|
"ubi9",
|
|
4130
4206
|
"ubi9-jdk21",
|
|
4131
|
-
"
|
|
4132
|
-
"9.1-jdk17",
|
|
4133
|
-
"jdk17",
|
|
4134
|
-
"ubuntu-jdk17",
|
|
4135
|
-
"9-jdk17",
|
|
4136
|
-
"9.1.1-ubuntu-jdk17",
|
|
4137
|
-
"9-ubuntu-jdk17",
|
|
4138
|
-
"9.1-ubuntu-jdk17",
|
|
4139
|
-
"ubi9-jdk17",
|
|
4140
|
-
"9.1.1-ubi9-jdk17",
|
|
4141
|
-
"9.0.1-ubi9-jdk17",
|
|
4207
|
+
"8.7.2-ubi9-jdk17",
|
|
4142
4208
|
"8.9.5-ubi9-jdk17",
|
|
4143
4209
|
"8.9.5-ubi9",
|
|
4144
|
-
"8.9.1-ubi9-jdk17",
|
|
4145
4210
|
"8.9.1-ubi9",
|
|
4146
|
-
"8.
|
|
4147
|
-
"8.
|
|
4211
|
+
"8.5.6-ubi9-jdk17",
|
|
4212
|
+
"8.9.1-ubi9-jdk17",
|
|
4148
4213
|
"8.6.0-ubi9-jdk17",
|
|
4214
|
+
"8.5.6-ubi9",
|
|
4215
|
+
"8.5.14-ubi9",
|
|
4216
|
+
"9.0.1-ubi9-jdk17",
|
|
4149
4217
|
"8.6.0-ubi9",
|
|
4218
|
+
"9.0.2-ubi9-jdk21",
|
|
4150
4219
|
"8.5.14-ubi9-jdk17",
|
|
4151
|
-
"
|
|
4220
|
+
"eap-ubuntu-jdk17",
|
|
4221
|
+
"eap-jdk17",
|
|
4222
|
+
"9.2.0-beta2-ubuntu-jdk21",
|
|
4223
|
+
"9.2.0-beta2-jdk21",
|
|
4224
|
+
"9.2.0-beta2-jdk17",
|
|
4225
|
+
"9.2.0-beta2",
|
|
4226
|
+
"eap",
|
|
4227
|
+
"9.2.0-beta2-ubuntu-jdk17",
|
|
4228
|
+
"9.2.0-beta2-ubi9-jdk17",
|
|
4229
|
+
"9.2.0-beta2-ubi9-jdk21",
|
|
4230
|
+
"9.2.0-beta2-ubi9",
|
|
4152
4231
|
"9.2.0-m07-ubuntu-jdk21",
|
|
4153
4232
|
"9.2.0-m07-jdk17",
|
|
4154
4233
|
"9.2.0-m07",
|
|
@@ -9226,83 +9305,119 @@ var mysql = [
|
|
|
9226
9305
|
];
|
|
9227
9306
|
var postgresql = [
|
|
9228
9307
|
"latest",
|
|
9229
|
-
"12.
|
|
9230
|
-
"12.
|
|
9308
|
+
"12.22-bookworm",
|
|
9309
|
+
"12.22",
|
|
9231
9310
|
"12-bookworm",
|
|
9232
9311
|
"12",
|
|
9312
|
+
"15.10-bookworm",
|
|
9313
|
+
"15.10",
|
|
9314
|
+
"15-bookworm",
|
|
9315
|
+
"15",
|
|
9316
|
+
"14.15-bookworm",
|
|
9317
|
+
"14.15-alpine3.20",
|
|
9318
|
+
"14.15-alpine",
|
|
9319
|
+
"14.15",
|
|
9320
|
+
"14-bookworm",
|
|
9321
|
+
"14-alpine3.20",
|
|
9322
|
+
"14-alpine",
|
|
9323
|
+
"14",
|
|
9324
|
+
"13.18-bullseye",
|
|
9325
|
+
"13.18-bookworm",
|
|
9326
|
+
"13.18-alpine3.20",
|
|
9327
|
+
"13.18-alpine3.19",
|
|
9328
|
+
"13.18-alpine",
|
|
9329
|
+
"13.18",
|
|
9330
|
+
"13-bullseye",
|
|
9331
|
+
"13-bookworm",
|
|
9332
|
+
"13-alpine3.20",
|
|
9333
|
+
"13-alpine3.19",
|
|
9334
|
+
"13-alpine",
|
|
9335
|
+
"13",
|
|
9336
|
+
"12.22-bullseye",
|
|
9337
|
+
"12.22-alpine3.20",
|
|
9338
|
+
"12.22-alpine3.19",
|
|
9339
|
+
"12.22-alpine",
|
|
9340
|
+
"12-bullseye",
|
|
9341
|
+
"12-alpine3.20",
|
|
9342
|
+
"12-alpine3.19",
|
|
9343
|
+
"12-alpine",
|
|
9344
|
+
"bullseye",
|
|
9345
|
+
"bookworm",
|
|
9346
|
+
"alpine3.20",
|
|
9347
|
+
"alpine3.19",
|
|
9348
|
+
"alpine",
|
|
9349
|
+
"17.2-bullseye",
|
|
9350
|
+
"17.2-bookworm",
|
|
9351
|
+
"17.2-alpine3.20",
|
|
9352
|
+
"17.2-alpine3.19",
|
|
9353
|
+
"17.2-alpine",
|
|
9354
|
+
"17.2",
|
|
9355
|
+
"17-bullseye",
|
|
9356
|
+
"17-bookworm",
|
|
9357
|
+
"17-alpine3.20",
|
|
9358
|
+
"17-alpine3.19",
|
|
9359
|
+
"17-alpine",
|
|
9360
|
+
"17",
|
|
9361
|
+
"16.6-bullseye",
|
|
9362
|
+
"16.6-bookworm",
|
|
9363
|
+
"16.6-alpine3.20",
|
|
9364
|
+
"16.6-alpine3.19",
|
|
9365
|
+
"16.6-alpine",
|
|
9366
|
+
"16.6",
|
|
9367
|
+
"16-bullseye",
|
|
9368
|
+
"16-bookworm",
|
|
9369
|
+
"16-alpine3.20",
|
|
9370
|
+
"16-alpine3.19",
|
|
9371
|
+
"16-alpine",
|
|
9372
|
+
"16",
|
|
9373
|
+
"15.10-bullseye",
|
|
9374
|
+
"15.10-alpine3.20",
|
|
9375
|
+
"15.10-alpine3.19",
|
|
9376
|
+
"15.10-alpine",
|
|
9377
|
+
"15-bullseye",
|
|
9378
|
+
"15-alpine3.20",
|
|
9379
|
+
"15-alpine3.19",
|
|
9380
|
+
"15-alpine",
|
|
9381
|
+
"14.15-bullseye",
|
|
9382
|
+
"14.15-alpine3.19",
|
|
9383
|
+
"14-bullseye",
|
|
9384
|
+
"14-alpine3.19",
|
|
9385
|
+
"12.21-bookworm",
|
|
9386
|
+
"12.21",
|
|
9233
9387
|
"15.9-bullseye",
|
|
9234
9388
|
"15.9-bookworm",
|
|
9235
9389
|
"15.9-alpine3.20",
|
|
9236
9390
|
"15.9-alpine3.19",
|
|
9237
9391
|
"15.9-alpine",
|
|
9238
9392
|
"15.9",
|
|
9239
|
-
"15-bullseye",
|
|
9240
|
-
"15-bookworm",
|
|
9241
|
-
"15-alpine3.20",
|
|
9242
|
-
"15-alpine3.19",
|
|
9243
|
-
"15-alpine",
|
|
9244
|
-
"15",
|
|
9245
9393
|
"14.14-bullseye",
|
|
9246
9394
|
"14.14-bookworm",
|
|
9247
9395
|
"14.14-alpine3.20",
|
|
9248
9396
|
"14.14-alpine3.19",
|
|
9249
9397
|
"14.14-alpine",
|
|
9250
9398
|
"14.14",
|
|
9251
|
-
"14-bullseye",
|
|
9252
|
-
"14-bookworm",
|
|
9253
|
-
"14-alpine3.20",
|
|
9254
|
-
"14-alpine3.19",
|
|
9255
|
-
"14-alpine",
|
|
9256
|
-
"14",
|
|
9257
9399
|
"13.17-bullseye",
|
|
9258
9400
|
"13.17-bookworm",
|
|
9259
9401
|
"13.17-alpine3.20",
|
|
9260
9402
|
"13.17-alpine3.19",
|
|
9261
9403
|
"13.17-alpine",
|
|
9262
9404
|
"13.17",
|
|
9263
|
-
"13-bullseye",
|
|
9264
|
-
"13-bookworm",
|
|
9265
|
-
"13-alpine3.20",
|
|
9266
|
-
"13-alpine3.19",
|
|
9267
|
-
"13-alpine",
|
|
9268
|
-
"13",
|
|
9269
9405
|
"12.21-bullseye",
|
|
9270
9406
|
"12.21-alpine3.20",
|
|
9271
9407
|
"12.21-alpine3.19",
|
|
9272
9408
|
"12.21-alpine",
|
|
9273
|
-
"12-bullseye",
|
|
9274
|
-
"12-alpine3.20",
|
|
9275
|
-
"12-alpine3.19",
|
|
9276
|
-
"12-alpine",
|
|
9277
|
-
"bullseye",
|
|
9278
|
-
"bookworm",
|
|
9279
|
-
"alpine3.20",
|
|
9280
|
-
"alpine3.19",
|
|
9281
|
-
"alpine",
|
|
9282
9409
|
"17.1-bullseye",
|
|
9283
9410
|
"17.1-bookworm",
|
|
9284
9411
|
"17.1-alpine3.20",
|
|
9285
9412
|
"17.1-alpine3.19",
|
|
9286
9413
|
"17.1-alpine",
|
|
9287
9414
|
"17.1",
|
|
9288
|
-
"17-bullseye",
|
|
9289
|
-
"17-bookworm",
|
|
9290
|
-
"17-alpine3.20",
|
|
9291
|
-
"17-alpine3.19",
|
|
9292
|
-
"17-alpine",
|
|
9293
|
-
"17",
|
|
9294
9415
|
"16.5-bullseye",
|
|
9295
9416
|
"16.5-bookworm",
|
|
9296
9417
|
"16.5-alpine3.20",
|
|
9297
9418
|
"16.5-alpine3.19",
|
|
9298
9419
|
"16.5-alpine",
|
|
9299
9420
|
"16.5",
|
|
9300
|
-
"16-bullseye",
|
|
9301
|
-
"16-bookworm",
|
|
9302
|
-
"16-alpine3.20",
|
|
9303
|
-
"16-alpine3.19",
|
|
9304
|
-
"16-alpine",
|
|
9305
|
-
"16",
|
|
9306
9421
|
"14.13-alpine3.20",
|
|
9307
9422
|
"14.13-alpine",
|
|
9308
9423
|
"13.16-alpine3.20",
|
|
@@ -10520,7 +10635,10 @@ const ReportTypes = z.enum([
|
|
|
10520
10635
|
z.object({
|
|
10521
10636
|
type: ReportTypes,
|
|
10522
10637
|
timestamp: z.string(),
|
|
10638
|
+
outputDir: z.string(),
|
|
10523
10639
|
cwd: z.string()
|
|
10640
|
+
}).partial({
|
|
10641
|
+
outputDir: true
|
|
10524
10642
|
});
|
|
10525
10643
|
const APTProvisionOptions = z.object({
|
|
10526
10644
|
product: SupportedApplications,
|
|
@@ -10536,12 +10654,14 @@ const APTProvisionOptions = z.object({
|
|
|
10536
10654
|
const APTPerformanceTestArgs = z.object({
|
|
10537
10655
|
product: SupportedApplications,
|
|
10538
10656
|
cwd: z.string(),
|
|
10657
|
+
outputDir: z.string(),
|
|
10539
10658
|
environment: z.string(),
|
|
10540
10659
|
appKey: z.string(),
|
|
10541
10660
|
appLicense: z.string(),
|
|
10542
10661
|
timestamp: z.string(),
|
|
10543
10662
|
force: z.boolean()
|
|
10544
10663
|
}).partial({
|
|
10664
|
+
outputDir: true,
|
|
10545
10665
|
timestamp: true,
|
|
10546
10666
|
force: true
|
|
10547
10667
|
});
|
|
@@ -10577,12 +10697,14 @@ z.object({
|
|
|
10577
10697
|
const APTScalabilityTestArgs = z.object({
|
|
10578
10698
|
product: SupportedApplications,
|
|
10579
10699
|
cwd: z.string(),
|
|
10700
|
+
outputDir: z.string(),
|
|
10580
10701
|
environment: z.string(),
|
|
10581
10702
|
appKey: z.string(),
|
|
10582
10703
|
appLicense: z.string(),
|
|
10583
10704
|
timestamp: z.string(),
|
|
10584
10705
|
force: z.boolean()
|
|
10585
10706
|
}).partial({
|
|
10707
|
+
outputDir: true,
|
|
10586
10708
|
appLicense: true,
|
|
10587
10709
|
timestamp: true,
|
|
10588
10710
|
force: true
|
|
@@ -10637,62 +10759,9 @@ z.object({
|
|
|
10637
10759
|
});
|
|
10638
10760
|
z.intersection(APTProvisionOptions, APTPerformanceTestArgs, APTScalabilityTestArgs);
|
|
10639
10761
|
|
|
10640
|
-
const getEnvironmentName = async () => {
|
|
10641
|
-
console.log(provisioning.askForEnvironment);
|
|
10642
|
-
return input({
|
|
10643
|
-
message: `Environment name`,
|
|
10644
|
-
required: true
|
|
10645
|
-
});
|
|
10646
|
-
};
|
|
10647
|
-
|
|
10648
|
-
const getHostLicense = (product, force) => {
|
|
10649
|
-
if (force) {
|
|
10650
|
-
return timebomb[product];
|
|
10651
|
-
}
|
|
10652
|
-
console.log(provisioning.askForLicense);
|
|
10653
|
-
return input({
|
|
10654
|
-
message: `License`,
|
|
10655
|
-
default: timebomb[product],
|
|
10656
|
-
required: true
|
|
10657
|
-
});
|
|
10658
|
-
};
|
|
10659
|
-
|
|
10660
|
-
const provisionCluster = async (options, mustUseDefaultConfiguration) => {
|
|
10661
|
-
// Show the provisioning welcome message
|
|
10662
|
-
console.log(provisioning.header);
|
|
10663
|
-
// Ask for the proper directory of APT
|
|
10664
|
-
const directory = await getAptDictory(options.cwd, mustUseDefaultConfiguration, options.force);
|
|
10665
|
-
// Ask for the AWS credentials
|
|
10666
|
-
const [aws_access_key_id, aws_secret_access_key] = await getAWSCredentials(options.product, options.force);
|
|
10667
|
-
// Ask for the environment name
|
|
10668
|
-
const environment = options.environment || await getEnvironmentName();
|
|
10669
|
-
// Ask for the license
|
|
10670
|
-
const license = await getHostLicense(options.product, options.force);
|
|
10671
|
-
// Let's do this
|
|
10672
|
-
console.log(provisioning.ready);
|
|
10673
|
-
await waitForUserInput('Press a key to start provisiong the AWS environment...', options.force);
|
|
10674
|
-
emptyLine();
|
|
10675
|
-
// Write AWS credentials to disk
|
|
10676
|
-
persistAWSCredentials(directory, aws_access_key_id, aws_secret_access_key);
|
|
10677
|
-
// Write Terraform variables to disk
|
|
10678
|
-
persistClusterConfiguration(directory, environment, options.product, license);
|
|
10679
|
-
// Run the DCAPT install script
|
|
10680
|
-
await install(directory);
|
|
10681
|
-
// Ask permission to continue with the next step
|
|
10682
|
-
await waitForUserInput('Press a key to continue with the next step...', options.force);
|
|
10683
|
-
// Return all the questions we asked the user for use in other steps
|
|
10684
|
-
return {
|
|
10685
|
-
cwd: directory,
|
|
10686
|
-
environment,
|
|
10687
|
-
aws_access_key_id,
|
|
10688
|
-
aws_secret_access_key,
|
|
10689
|
-
license
|
|
10690
|
-
};
|
|
10691
|
-
};
|
|
10692
|
-
|
|
10693
10762
|
const Performance = async (options) => {
|
|
10694
10763
|
// Get the output directory for the test results
|
|
10695
|
-
const outputDir = getOutputDirectory(options.timestamp);
|
|
10764
|
+
const outputDir = getOutputDirectory(options.outputDir, options.timestamp);
|
|
10696
10765
|
// Provision the cluster
|
|
10697
10766
|
const { cwd, environment, } = await provisionCluster({
|
|
10698
10767
|
product: options.product,
|
|
@@ -10729,7 +10798,7 @@ const Performance = async (options) => {
|
|
|
10729
10798
|
|
|
10730
10799
|
const Scalability = async (options) => {
|
|
10731
10800
|
// Get the output directory for the test results
|
|
10732
|
-
const outputDir = getOutputDirectory(options.timestamp);
|
|
10801
|
+
const outputDir = getOutputDirectory(options.outputDir, options.timestamp);
|
|
10733
10802
|
// Provision the cluster
|
|
10734
10803
|
const { cwd, environment, license } = await provisionCluster({
|
|
10735
10804
|
product: options.product,
|
|
@@ -10844,6 +10913,7 @@ const DefaultCommand = () => ({
|
|
|
10844
10913
|
await Performance({
|
|
10845
10914
|
product: product,
|
|
10846
10915
|
cwd: options.cwd,
|
|
10916
|
+
outputDir: options.outputDir,
|
|
10847
10917
|
environment: options.environment,
|
|
10848
10918
|
appKey: options.appKey,
|
|
10849
10919
|
appLicense: options.appLicense,
|
|
@@ -10854,6 +10924,7 @@ const DefaultCommand = () => ({
|
|
|
10854
10924
|
await Scalability({
|
|
10855
10925
|
product,
|
|
10856
10926
|
cwd: options.cwd,
|
|
10927
|
+
outputDir: options.outputDir,
|
|
10857
10928
|
environment: options.environment,
|
|
10858
10929
|
appKey: options.appKey,
|
|
10859
10930
|
appLicense: options.appLicense,
|
|
@@ -10876,13 +10947,13 @@ const ReportCommand = () => ({
|
|
|
10876
10947
|
if (options.type === 'performance') {
|
|
10877
10948
|
await generatePerformanceReport({
|
|
10878
10949
|
...options,
|
|
10879
|
-
outputDir: getOutputDirectory(options.timestamp)
|
|
10950
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp)
|
|
10880
10951
|
});
|
|
10881
10952
|
}
|
|
10882
10953
|
else {
|
|
10883
10954
|
await generateScalabilityReport({
|
|
10884
10955
|
...options,
|
|
10885
|
-
outputDir: getOutputDirectory(options.timestamp)
|
|
10956
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp)
|
|
10886
10957
|
});
|
|
10887
10958
|
}
|
|
10888
10959
|
},
|
|
@@ -10897,6 +10968,7 @@ const PerformanceTestCommand = () => ({
|
|
|
10897
10968
|
await Performance({
|
|
10898
10969
|
product: options.product,
|
|
10899
10970
|
cwd: options.cwd,
|
|
10971
|
+
outputDir: options.outputDir,
|
|
10900
10972
|
environment: options.environment,
|
|
10901
10973
|
appKey: options.appKey,
|
|
10902
10974
|
appLicense: options.appLicense,
|
|
@@ -10920,7 +10992,7 @@ const Run1Command = () => ({
|
|
|
10920
10992
|
action: async (options) => {
|
|
10921
10993
|
await runPerformanceTest('baseline', {
|
|
10922
10994
|
...options,
|
|
10923
|
-
outputDir: getOutputDirectory(options.timestamp)
|
|
10995
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp)
|
|
10924
10996
|
}, Run1);
|
|
10925
10997
|
},
|
|
10926
10998
|
errorHandler: async () => {
|
|
@@ -10930,7 +11002,7 @@ const Run2Command = () => ({
|
|
|
10930
11002
|
action: async (options) => {
|
|
10931
11003
|
await runPerformanceTest('baseline', {
|
|
10932
11004
|
...options,
|
|
10933
|
-
outputDir: getOutputDirectory(options.timestamp)
|
|
11005
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp)
|
|
10934
11006
|
}, Run2);
|
|
10935
11007
|
},
|
|
10936
11008
|
errorHandler: async () => {
|
|
@@ -10942,6 +11014,7 @@ const ScalabilityTestCommand = () => ({
|
|
|
10942
11014
|
await Scalability({
|
|
10943
11015
|
product: options.product,
|
|
10944
11016
|
cwd: options.cwd,
|
|
11017
|
+
outputDir: options.outputDir,
|
|
10945
11018
|
environment: options.environment,
|
|
10946
11019
|
appKey: options.appKey,
|
|
10947
11020
|
appLicense: options.appLicense,
|
|
@@ -10965,7 +11038,7 @@ const Run3Command = () => ({
|
|
|
10965
11038
|
action: async (options) => {
|
|
10966
11039
|
await runScalabilityTest('one-node', {
|
|
10967
11040
|
...options,
|
|
10968
|
-
outputDir: getOutputDirectory(options.timestamp),
|
|
11041
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp),
|
|
10969
11042
|
license: timebomb[options.product],
|
|
10970
11043
|
});
|
|
10971
11044
|
},
|
|
@@ -10976,7 +11049,7 @@ const Run4Command = () => ({
|
|
|
10976
11049
|
action: async (options) => {
|
|
10977
11050
|
await runScalabilityTest('two-node', {
|
|
10978
11051
|
...options,
|
|
10979
|
-
outputDir: getOutputDirectory(options.timestamp),
|
|
11052
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp),
|
|
10980
11053
|
license: timebomb[options.product],
|
|
10981
11054
|
});
|
|
10982
11055
|
},
|
|
@@ -10987,13 +11060,25 @@ const Run5Command = () => ({
|
|
|
10987
11060
|
action: async (options) => {
|
|
10988
11061
|
await runScalabilityTest('four-node', {
|
|
10989
11062
|
...options,
|
|
10990
|
-
outputDir: getOutputDirectory(options.timestamp),
|
|
11063
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp),
|
|
10991
11064
|
license: timebomb[options.product],
|
|
10992
11065
|
});
|
|
10993
11066
|
},
|
|
10994
11067
|
errorHandler: async () => {
|
|
10995
11068
|
}
|
|
10996
11069
|
});
|
|
11070
|
+
const ProvisionCommand = () => ({
|
|
11071
|
+
action: async (options) => {
|
|
11072
|
+
await provisionCluster({
|
|
11073
|
+
product: options.product,
|
|
11074
|
+
cwd: options.cwd,
|
|
11075
|
+
environment: options.environment,
|
|
11076
|
+
force: options.force
|
|
11077
|
+
}, true);
|
|
11078
|
+
},
|
|
11079
|
+
errorHandler: async () => {
|
|
11080
|
+
}
|
|
11081
|
+
});
|
|
10997
11082
|
const TeardownCommand = () => ({
|
|
10998
11083
|
action: async (options) => {
|
|
10999
11084
|
await teardownCluster({
|
|
@@ -11015,24 +11100,29 @@ program
|
|
|
11015
11100
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11016
11101
|
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11017
11102
|
.addOption(new Option('--ts, --timestamp <timestamp>', 'The timestamp of the test run, which can be used to continue an existing test execution'))
|
|
11103
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11018
11104
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11019
11105
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11020
11106
|
.action(options => ActionHandler(program, DefaultCommand(), options));
|
|
11021
11107
|
program
|
|
11022
11108
|
.command('performance')
|
|
11023
11109
|
.description('Run the Data Center App Performance Toolkit performance regression test')
|
|
11024
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11110
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11025
11111
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11112
|
+
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11026
11113
|
.addOption(new Option('--ts, --timestamp <timestamp>', 'The timestamp of the test run, which can be used to continue an existing test execution'))
|
|
11114
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11027
11115
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11028
11116
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11029
11117
|
.action(options => ActionHandler(program, PerformanceTestCommand(), options));
|
|
11030
11118
|
program
|
|
11031
11119
|
.command('scalability')
|
|
11032
11120
|
.description('Run the Data Center App Performance Toolkit scalability test')
|
|
11033
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11121
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11034
11122
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11123
|
+
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11035
11124
|
.addOption(new Option('--ts, --timestamp <timestamp>', 'The timestamp of the test run, which can be used to continue an existing test execution'))
|
|
11125
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11036
11126
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11037
11127
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11038
11128
|
.action(options => ActionHandler(program, ScalabilityTestCommand(), options));
|
|
@@ -11041,58 +11131,72 @@ program
|
|
|
11041
11131
|
.description('Generate a Data Center App Performance Testing report')
|
|
11042
11132
|
.addOption(new Option('--type <type>', 'The type of report to generate').choices(Object.values(ReportTypes.Values)).makeOptionMandatory(true))
|
|
11043
11133
|
.addOption(new Option('--ts, --timestamp <timestamp>', 'The timestamp of the test run, which can be used to continue an existing test execution').makeOptionMandatory(true))
|
|
11134
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11044
11135
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()).makeOptionMandatory(true))
|
|
11045
11136
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11046
11137
|
.action(options => ActionHandler(program, ReportCommand(), options));
|
|
11047
11138
|
program
|
|
11048
11139
|
.command('run1')
|
|
11049
11140
|
.description('Start the Data Center App Performance Testing Performance Regression test (run 1)')
|
|
11050
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11141
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11051
11142
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11052
11143
|
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11144
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11053
11145
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11054
11146
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11055
11147
|
.action(options => ActionHandler(program, Run1Command(), options));
|
|
11056
11148
|
program
|
|
11057
11149
|
.command('run2')
|
|
11058
11150
|
.description('Continue the Data Center App Performance Testing with run 2')
|
|
11059
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11151
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11060
11152
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11061
11153
|
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11154
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11062
11155
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11063
11156
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11064
11157
|
.action(options => ActionHandler(program, Run2Command(), options));
|
|
11065
11158
|
program
|
|
11066
11159
|
.command('run3')
|
|
11067
11160
|
.description('Continue the Data Center App Performance Testing with run 3')
|
|
11068
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11161
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11069
11162
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11070
11163
|
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11164
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11071
11165
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11072
11166
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11073
11167
|
.action(options => ActionHandler(program, Run3Command(), options));
|
|
11074
11168
|
program
|
|
11075
11169
|
.command('run4')
|
|
11076
11170
|
.description('Continue the Data Center App Performance Testing with run 4')
|
|
11077
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11171
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11078
11172
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11079
11173
|
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11174
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11080
11175
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11081
11176
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11082
11177
|
.action(options => ActionHandler(program, Run4Command(), options));
|
|
11083
11178
|
program
|
|
11084
11179
|
.command('run5')
|
|
11085
11180
|
.description('Continue the Data Center App Performance Testing with run 5')
|
|
11086
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11181
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11087
11182
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11088
11183
|
.addOption(new Option('--appKey <appKey>', 'The key of the app (for automated installation)'))
|
|
11184
|
+
.addOption(new Option('-O, --outputDir <directory>', 'Specify the directory where to store the results of the App Performance Toolkit'))
|
|
11089
11185
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11090
11186
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11091
11187
|
.action(options => ActionHandler(program, Run5Command(), options));
|
|
11188
|
+
program
|
|
11189
|
+
.command('provision')
|
|
11190
|
+
.description('Provision the Data Center App Performance Testing cluster on AWS')
|
|
11191
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11192
|
+
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11193
|
+
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11194
|
+
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
11195
|
+
.action(options => ActionHandler(program, ProvisionCommand(), options));
|
|
11092
11196
|
program
|
|
11093
11197
|
.command('teardown')
|
|
11094
11198
|
.description('Terminate the Data Center App Performance Testing cluster on AWS')
|
|
11095
|
-
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)))
|
|
11199
|
+
.addOption(new Option('--product <name>', 'The host product').choices(Object.values(SupportedApplications.Values)).makeOptionMandatory(true))
|
|
11096
11200
|
.addOption(new Option('--environment <name>', 'The environment name'))
|
|
11097
11201
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the App Performance Toolkit').default(cwd()))
|
|
11098
11202
|
.addOption(new Option('-y, --force', 'Use default values for input questions when available').default(false))
|
|
@@ -11102,4 +11206,4 @@ process.on('SIGINT', () => {
|
|
|
11102
11206
|
console.log(`Received term signal, trying to stop gracefully 💪`);
|
|
11103
11207
|
gracefulExit();
|
|
11104
11208
|
});
|
|
11105
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2NhcGl0YWxpemUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXROb2RlTnVtYmVyRm9yU3RhZ2UuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSdW5Gb3JTdGFnZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2RjYXB0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVwb3J0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldENsdXN0ZXJVUkwuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXREdXJhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UmVzdWx0cy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlc3VsdHNEaXJlY3RvcnkuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2xpY2VuY2VzLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy91cG0uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9pbnN0YWxsQXBwLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZWluZGV4UHJvZ3Jlc3MuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZWluZGV4LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QVdTQ3JlZGVudGlhbHMuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvRGF0YWJhc2UuanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9BcHBsaWNhdGlvbi5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RDQVBULmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0SG9zdExpY2Vuc2UuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wcm92aXNpb25DbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L3BlcmZvcm1hbmNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L3NjYWxhYmlsaXR5LmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9BY3Rpb25IYW5kbGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvY29tbWFuZHMvYXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHZhbHVlKSA9PiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuIiwiZXhwb3J0IGNvbnN0IGdldE5vZGVOdW1iZXJGb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gMjtcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuIDQ7XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBnZXRSdW5Gb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnYmFzZWxpbmUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAncmVncmVzc2lvbic6IHJldHVybiAyO1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAzO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiA0O1xuICAgICAgICBjYXNlICdmb3VyLW5vZGUnOiByZXR1cm4gNTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJy4uL2hlbHBlcnMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXROb2RlTnVtYmVyRm9yU3RhZ2UgfSBmcm9tICcuL2hlbHBlcnMvZ2V0Tm9kZU51bWJlckZvclN0YWdlJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmNvbnN0IHRvTnVtYmVyID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAndGhpcmQnO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAnZm91cnRoJztcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuICdmaWZ0aCc7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbXB0eUxpbmUgPSAoKSA9PiBjb25zb2xlLmxvZygn4oCLJyk7XG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgIF8gICAgICAgICAgX19fX18gICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIFxcXFwgX19ffCB8XyBfX18gICB8ICAgICB8X19fIF9fX3wgfF8gX19fIF9fXyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8IC4nfCAgX3wgLid8ICB8ICAgLS18IC1ffCAgIHwgIF98IC1ffCAgX3wgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fXy98X18sfF98IHxfXyx8ICB8X19fX198X19ffF98X3xffCB8X19ffF98ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgX19fX18gICAgICAgICAgICBfX19fXyAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgIF8gXyAgIF8gXyAgIFxuICB8ICBfICB8X19fIF9fXyAgIHwgIF8gIHxfX18gX19ffCAgX3xfX18gX19fIF9fX19fIF9fXyBfX18gX19fIF9fXyAgIHxfICAgX3xfX18gX19ffCB8IHxffF98IHxfIFxuICB8ICAgICB8IC4gfCAuIHwgIHwgICBfX3wgLV98ICBffCAgX3wgLiB8ICBffCAgICAgfCAuJ3wgICB8ICBffCAtX3wgICAgfCB8IHwgLiB8IC4gfCB8ICdffCB8ICBffFxuICB8X198X198ICBffCAgX3wgIHxfX3wgIHxfX198X3wgfF98IHxfX198X3wgfF98X3xffF9fLHxffF98X19ffF9fX3wgICAgfF98IHxfX198X19ffF98XyxffF98X3wgIFxuICAgICAgICB8X3wgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFdlbGNvbWUgdG8gdGhlIGF1dG9tYXRlZCBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCAoRENBUFQpLlxuICBUaGlzIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggYWxsIHRoZSBzdGVwcyB0byBwcm9kdWNlIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlc3VsdHNcbiAgZm9yIHlvdXIgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwcm92YWwuXG5gXG59O1xuZXhwb3J0IGNvbnN0IGluaXQgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBXZSB3aWxsIG5vdyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBhcyBkb2N1bWVudGVkIGluIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBVc2VyIEd1aWRlIEZvciAke2NhcGl0YWxpemUocHJvZHVjdCl9LlxuICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBwcmlvciB0byBzdGFydGluZyB0aGUgdGVzdCBydW46XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9L1xuXG4gIE9uY2UgeW91IHN0YXJ0IHRoZSB0ZXN0IHJ1biB3ZSB3aWxsIHByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnQgb24gQVdTLiBcbiAgSU1QT1JUQU5UOiBUaGlzIGNhbiBpbmN1ciBjb3N0cy5cbiAgXG4gIFlvdSBjYW4gc3RvcCB0aGlzIHByb2Nlc3MgYXQgYW55IHRpbWUgYnkgZXhpdGluZyB0aGlzIHByb2dyYW0uIEJlIHN1cmUgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZXNldCBcbiAgdGhlIEFXUyBlbnZpcm9ubWVudCBhbmQgcHJldmVudCB1bmV4cGVjdGVkIGNvc3RzLlxuXG4gICQgZGNkeCBhcHQgdGVhcmRvd25cblxuICBZb3UgY2FuIGFsc28gcmVzdW1lL3Jlc3RhcnQgZXZlcnkgcGFydCBvZiB0aGUgdGVzdCBydW4gdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG5cbiAgJCBkY2R4IGFwdCBpbml0IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcHJvdmlzaW9uIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4zIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjUgLS1wcm9kdWN0ICR7cHJvZHVjdH1cblxuICBXZSB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiAgUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiAgTHVjZW5lIEluZGV4IHRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDUuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDYuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDcuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA4LiAgR2VuZXJhdGUgcmVwb3J0c1xuICA5LiAgVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgMTAuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmAgOiBgXG4gIDEuIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNS4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA2LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA3LiBHZW5lcmF0ZSByZXBvcnRzXG4gIDguIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDkuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmB9YCxcbn07XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uaW5nID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCAgXyAgfCBfXyAgfCAgICAgfCAgfCAgfCAgICAgfCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICAgfCAgIHwgfCAgIF9ffFxuICB8ICAgX198ICAgIC18ICB8ICB8ICB8ICB8LSAgIC18X18gICB8LSAgIC18ICB8ICB8IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gIHxfX3wgIHxfX3xfX3xfX19fX3xcXFxcX19fL3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbi5cblxuICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBvbiB5b3VyIGRpc2tcbiAgMi4gQVdTIGNyZWRlbnRpYWxzXG4gIDMuIFByb2R1Y3QgbGljZW5zZVxuYCxcbiAgICBhc2tGb3JBV1NDcmVkZW50aWFsczogKHByb2R1Y3QpID0+IGBcbiAgSW4gb3JkZXIgdG8gcHJvdmlzaW9uIHRoZSAke2NhcGl0YWxpemUocHJvZHVjdCl9IGNsdXN0ZXIsIHdlIG5lZWQgQWRtaW5pc3RyYXRvciBjcmVkZW50aWFscyBmb3IgQVdTLlxuICBQbGVhc2UgcmVmZXIgdG8gdGhlIERDQVBUIGRvY3VtZW50YXRpb24gdG8gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgdGhlIEFXUyBhY2Nlc3Mga2V5czpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vI3NldHVwLSR7cHJvZHVjdH0tZGF0YS1jZW50ZXItZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQtb24tazhzLVxuYCxcbiAgICBhc2tGb3JFbnZpcm9ubWVudDogYFxuICBXaGVuIHByb3Zpc2lvbmluZyB0aGUgY2x1c3Rlciwgd2UgbmVlZCBhIHVuaXF1ZSBlbnZpcm9ubWVudCBuYW1lLlxuICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBjbHVzdGVycyAoaS5lLiBmb3IgZGlmZmVyZW50IGhvc3QgcHJvZHVjdHMpIGFuZCB0byBpZGVudGlmeSB3aGljaCBjbHVzdGVyIHRvIHVzZSBkdXJpbmcgdGVzdGluZyAmIHRlYXJkb3duLlxuYCxcbiAgICBhc2tGb3JMaWNlbnNlOiBgXG4gIFRoZSBob3N0IHByb2R1Y3QgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG4gIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSA3MmggZGV2ZWxvcGVyIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG4gIHlvdSBjYW4gZ2VuZXJhdGUgYW4gZXZhbHVhdGlvbiBsaWNlbnNlIGZyb20gbXkuYXRsYXNzaWFuLmNvbSBvciBhc2sgQXRsYXNzaWFuIE1hcmtldHBsYWNlIERldmVsb3BlciBTdXBwb3J0IGZvciBhIHRlc3QgbGljZW5zZS5cbmAsXG4gICAgcmVhZHk6IGBcbiAgV2UgaGF2ZSBub3cgZ2F0aGVyZWQgYWxsIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwcm92aXNpb24gdGhlIGNsdXN0ZXIuXG5cbiAgISEgSU1QT1JUQU5UICEhXG4gIFxuICBXZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuICBQbGVhc2Ugbm90ZSB0aGF0IHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQgd2lsbCBpbmN1ciBBV1MgdXNhZ2UgY29zdHMuXG5gLFxuICAgIGF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkOiAn4pyUIEFXUyBjcmVkZW50aWFscyB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgdGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZDogYOKclCBUZXJyYWZvcm0gY29uZmlndXJhdGlvbiB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnNgXG59O1xuZXhwb3J0IGNvbnN0IFJ1bjEgPSB7XG4gICAgaGVhZGVyOiAoKSA9PiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyAgIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfCAgXG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgICBffCB8XyBcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX19ffFxuXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgVGhpcyB3aWxsIHByb2R1Y2UgdGhlIHBlcmZvcm1hbmNlIGJhc2VsaW5lIHJlc3VsdHMuXG5cbiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBiYXNlbGluZSB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICBzdGFydFBlcmZvcm1hbmNlVGVzdDogYFxuV2Ugd2lsbCBub3cgc3RhcnQgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gdGVzdFxuYCxcbiAgICBzdWNjZXNzOiBgXG7inJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuYCxcbiAgICBmYWlsdXJlOiAoY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFJ1bjIgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHxfICB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHwgIF98XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIFRoaXMgd2lsbCBhbGxvdyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVwb3J0LlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIEluIGFkZGl0aW9uLCBhIEx1Y2VuZSBJbmRleCBUaW1pbmcgVGVzdCBpcyBhbHNvIHBhcnQgb2YgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdHMuYCA6ICcnfVxuICBUaGUgc2Vjb25kIHJ1biBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIEJlbmNobWFyayB0aGUgcmUtaW5kZXggdGltZSB3aXRoIHlvdXIgYXBwIGluc3RhbGxlZFxuICAzLiBQZXJmb3JtYW5jZSByZXN1bHRzIGdlbmVyYXRpb24gd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuYCA6IGBcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMi4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmB9XG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICBzdGFydEx1Y2VuZUluZGV4aW5nOiBgXG4gIE5vdyB0aGF0IHRoZSBhcHAgaXMgaW5zdGFsbGVkLCB3ZSBjYW4gc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCB0aW1pbmcgdGVzdFxuICBPbmNlIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCBhIGJyb3dzZXIgd2luZG93IGlzIG9wZW5lZCB0byBjYXB0dXJlIHRoZSB0ZXN0IHJlc3VsdHMuIFxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN0YXJ0UGVyZm9ybWFuY2VUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG4gIOKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldE5vZGVOdW1iZXJGb3JTdGFnZShzdGFnZSl9KVxuXG4gIFRoZSAke3RvTnVtYmVyKHN0YWdlKX0gcnVuIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gIDEuIEFkanVzdCB0aGUgZW52aXJvbm1lbnQgdG8gYSAke3N0YWdlfSBjbHVzdGVyXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDMuIFNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0aW5nIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcblxuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IG9uIGEgRENBUFQgdmVyc2lvbiB0aGF0IGhhcyBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuICBNb3JlIGluZm9ybWF0aW9uIG9uIGRldmVsb3BpbmcgYXBwLXNwZWNpZmljIGFjdGlvbnMgY2FuIGJlIGZvdW5kIGhlcmU6XG5cbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID9cbiAgICAgICAgYCAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1qaXJhLyMzLS1kZXZlbG9wLWFuZC10ZXN0LWFwcC1zcGVjaWZpYy1hY3Rpb24tbG9jYWxseWBcbiAgICAgICAgOiBwcm9kdWN0ID09PSAnY29uZmx1ZW5jZScgP1xuICAgICAgICAgICAgYCAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1jb25mbHVlbmNlLyMzLS1kZXZlbG9wLWFuZC10ZXN0LWFwcC1zcGVjaWZpYy1hY3Rpb25zLWxvY2FsbHlgXG4gICAgICAgICAgICA6IHByb2R1Y3QgPT09ICdiYW1ib28nID9cbiAgICAgICAgICAgICAgICAnICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWJhbWJvby8jMi0tYXBwLXNwZWNpZmljLWFjdGlvbnMtZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9PT0gJ2JpdGJ1Y2tldCdcbiAgICAgICAgICAgICAgICA6ICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYml0YnVja2V0LyMzLS1kZXZlbG9wLWFuZC10ZXN0LWFwcC1zcGVjaWZpYy1hY3Rpb24tbG9jYWxseSd9XG5gLFxuICAgIHJlYWR5Rm9yUHJvdmlzaW9uaW5nOiBgXG4gIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyaywgd2Ugd2lsbCBub3cgcmVjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiAgISEgSU1QT1JUQU5UICEhXG4gIFxuICBXZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuICBQbGVhc2Ugbm90ZSB0aGF0IHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQgd2lsbCBpbmN1ciBBV1MgdXNhZ2UgY29zdHMuXG5gLFxuICAgIHN0YXJ0U2NhbGFiaWxpdHlUZXN0OiBgXG4gIFJlYWR5IHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG7inJQgRmluaXNoZWQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fIF9fIFxuICB8ICAgX198ICAgICB8ICBfICB8ICB8ICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8XyAgIF98ICB8ICB8XG4gIHxfXyAgIHwgICAtLXwgICAgIHwgIHxfX3wgICAgIHwgX18gLXwtICAgLXwgIHxfX3wtICAgLXwgfCB8IHxfICAgX3xcbiAgfF9fX19ffF9fX19ffF9ffF9ffF9fX19ffF9ffF9ffF9fX19ffF9fX19ffF9fX19ffF9fX19ffCB8X3wgICB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8X198X198X19fX198X198ICB8X19fX198X198X198IHxffCAgICAgICAgICAgICAgICAgICAgXG5gXG59O1xuZXhwb3J0IGNvbnN0IFRlYXJkb3duID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fICBfX19fXyBfIF8gXyBfX19fXyBcbiAgfF8gICBffCAgIF9ffCAgXyAgfCBfXyAgfCAgICBcXFxcfCAgICAgfCB8IHwgfCAgIHwgfFxuICAgIHwgfCB8ICAgX198ICAgICB8ICAgIC18ICB8ICB8ICB8ICB8IHwgfCB8IHwgfCB8XG4gICAgfF98IHxfX19fX3xfX3xfX3xfX3xfX3xfX19fL3xfX19fX3xfX19fX3xffF9fX3xcblxuICBXZSB3aWxsIG5vdyB0ZXJtaW5hdGUgdGhlIGNsdXN0ZXIgdXNlZCBpbiB0aGUgRGF0YSBDZW50ZXIgQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgdGVzdGluZy5cbmBcbn07XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBpbnN0YWxsID0gYXN5bmMgKGN3ZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBcbiAgU3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuYCk7XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJyMgdGVycmFmb3JtIG91dHB1dCcsICd1dGYtOCcpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICdhd3NfZW52cycsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC50ZnZhcnM6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9jb25mLnRmdmFyc2AsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC1zbmFwc2hvdHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RjYXB0LXNuYXBzaG90cy5qc29uYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2xvZ3M6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9sb2dzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L291dHB1dHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL291dHB1dHMuanNvbmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06Mi43LjknLFxuICAgICAgICAgICAgJy4vaW5zdGFsbC5zaCcsICctYycsICdjb25mLnRmdmFycydcbiAgICAgICAgXSwgeyBjd2Q6IGJhc2VEaXIsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgRmluaXNoZWQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbmV4cG9ydCBjb25zdCBydW5UZXN0ID0gYXN5bmMgKGN3ZCwgZW52aXJvbm1lbnQsIHByb2R1Y3QpID0+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICctaXQnLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnLi9hcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgICAgICAgICAgJy1lJywgYFJFR0lPTj11cy1lYXN0LTJgLFxuICAgICAgICAgICAgJy1lJywgYEVOVklST05NRU5UX05BTUU9JHtlbnZpcm9ubWVudH1gLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfTovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH0vYXBwL3V0aWwvazhzL2J6dF9vbl9wb2Quc2g6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9ienRfb25fcG9kLnNoYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW5sYWJzL3RlcnJhZm9ybToyLjcuOScsXG4gICAgICAgICAgICAnYmFzaCcsICdienRfb25fcG9kLnNoJywgYCR7cHJvZHVjdH0ueW1sYFxuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCByZWdyZXNzaW9uUmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuMURpciwgcnVuMkRpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4xRGlyfTovcmVzdWx0cy9ydW4xYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjJEaXJ9Oi9yZXN1bHRzL3J1bjJgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbi9kY2FwdCcsXG4gICAgICAgICAgICAnY3N2X2NoYXJ0X2dlbmVyYXRvci5weScsICdwZXJmb3JtYW5jZV9wcm9maWxlLnltbCdcbiAgICAgICAgXSwgeyBjd2QsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGdlbmVyYXRpbmcgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuM0RpciwgcnVuNERpciwgcnVuNURpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4zRGlyfTovcmVzdWx0cy9ydW4zYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjREaXJ9Oi9yZXN1bHRzL3J1bjRgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuNURpcn06L3Jlc3VsdHMvcnVuNWAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3NjYWxlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgU2NhbGFiaWxpdHkgQmVuY2htYXJrIFJlcG9ydGApO1xufTtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdGUgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCkgPT4ge1xuICAgIGNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy0td29ya2RpcicsICcvL2RhdGEtY2VudGVyLXRlcnJhZm9ybScsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS90ZXJtaW5hdGVfY2x1c3Rlci5weTovZGF0YS1jZW50ZXItdGVycmFmb3JtL3Rlcm1pbmF0ZV9jbHVzdGVyLnB5YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ3Rlcm1pbmF0ZV9jbHVzdGVyLnB5JywgJy0tY2x1c3Rlcl9uYW1lJywgYGF0bGFzLSR7ZW52aXJvbm1lbnR9LWNsdXN0ZXJgLCAnLS1hd3NfcmVnaW9uJywgJ3VzLWVhc3QtMidcbiAgICAgICAgXSwgeyBjd2Q6IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIHRlcm1pbmF0aW5nIHRoZSBEQyBjbHVzdGVyIG9uIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCBhcyBwd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBzaW1wbGVHaXQgZnJvbSAnc2ltcGxlLWdpdCc7XG5leHBvcnQgY29uc3QgZ2V0QXB0RGljdG9yeSA9IGFzeW5jIChjd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgZm9yY2UpID0+IHtcbiAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IHJlc3VsdCA9IGN3ZC5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgID8gY3dkLnJlcGxhY2UoJ34vJywgaG9tZWRpcigpKVxuICAgICAgICA6IGN3ZC5zdGFydHNXaXRoKCcuLycpXG4gICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgOiBjd2QgPT09ICcuJ1xuICAgICAgICAgICAgICAgID8gcHdkKClcbiAgICAgICAgICAgICAgICA6IGN3ZDtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBxdWVzdGlvbnMgZmlyc3RcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgQVBUIGRpcmVjdG9yeSwgd2Ugd2lsbCBiZSB1c2luZyB0aGUgY3VycmVudCBkaXJlY3RvcnkuLi5cbiAgICAgICAgbGV0IHVzZUN1cnJlbnREaXJlY3RvcnkgPSBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZTtcbiAgICAgICAgLy8gLi4udW5sZXNzIHRvbGQgb3RoZXJ3aXNlXG4gICAgICAgIGlmIChpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgV2UndmUgZm91bmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5OlxuICAke2N3ZH1cbmApO1xuICAgICAgICAgICAgdXNlQ3VycmVudERpcmVjdG9yeSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEbyB5b3Ugd2lzaCB0byB1c2UgdGhpcyBkaXJlY3Rvcnk/YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBnb2luZyB0byB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBhc2sgZm9yIHRoZSBhbHRlcm5hdGl2ZVxuICAgICAgICBsZXQgZGlyZWN0b3J5ID0gY3dkO1xuICAgICAgICBpZiAoIXVzZUN1cnJlbnREaXJlY3RvcnkpIHtcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0IGlzIGxvY2F0ZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN3ZCxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhbnNsYXRlIGNvbW1vbiByZWxhdGl2ZSBwYXRocyB0byBhYnNvbHV0ZSBwYXRoc1xuICAgICAgICBkaXJlY3RvcnkgPSBkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnfi8nKVxuICAgICAgICAgICAgPyBkaXJlY3RvcnkucmVwbGFjZSgnfi8nLCBob21lZGlyKCkgKyAnLycpXG4gICAgICAgICAgICA6IGRpcmVjdG9yeS5zdGFydHNXaXRoKCcuLycpXG4gICAgICAgICAgICAgICAgPyBkaXJlY3RvcnkucmVwbGFjZSgnLi8nLCBwd2QoKSArICcvJylcbiAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeSA9PT0gJy4nXG4gICAgICAgICAgICAgICAgICAgID8gcHdkKClcbiAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rvcnk7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm92aWRlZCBhbHRlcm5hdGl2ZSBpcyBhIERDQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0RpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhyZXNvbHZlKGpvaW4oZGlyZWN0b3J5LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKSk7XG4gICAgICAgIGlmICghaXNEaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCBhc2sgaWYgd2UgbmVlZCB0byBjbG9uZSBpdCBmcm9tIEdpdGh1YlxuICAgICAgICAgICAgY29uc3QgbXVzdENsb25lQVBUID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBkaXJlY3RvcnkgZWl0aGVyIGRvZXNuJ3QgZXhpc3QsIG9yIGl0IGRvZXNuJ3QgY29udGFpbiB0aGUgQXBwIFBlZm9ybWFuY2UgVG9vbGtpdC4gRG8geW91IHdhbnQgdG8gY2xvbmUgRENBUFQgZnJvbSBzb3VyY2U/YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbXVzdCBjbG9uZSBpdCBmcm9tIEdpdGh1Yiwgd2Ugc2hvdWxkIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBpZiAobXVzdENsb25lQVBUKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2ltcGxlR2l0KCkuY2xvbmUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQuZ2l0JywgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG5lZWRzIHRvIGJlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIChmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nKVxuICAgICAgICBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0RlZmF1bHRDb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBjb25maXJtIHRoYXQgdGhlIGNob3NlbiBkaXJlY3RvcnkgaXMgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgRENBUFQgKG1hc3RlciBicmFuY2gpJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIG1hc3RlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseS4uLlxuICAgICAgICAgICAgY29uc3QgaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBoYXMgYSBEQ0FQVCBpbnN0YWxsYXRpb24gd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gLi4uYnV0IGFsc28sIE5vIGlzIG5vdCBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmICghaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGhhdmUgYXBwLXNwZWNpZmljIGFjdGlvbnMgaW4gb3JkZXIgdG8gY29udGludWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIHJlc3VsdCB0byB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5XG4gICAgICAgIHJlc3VsdCA9IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB3ZSB3aWxsIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgfVxuICAgIGVsc2UgaWYgKG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY3dkLmVuZHNXaXRoKCcuZGNkeC9kY2FwdCcpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAgICAgcmV0dXJuIGN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnICBJbnN0YWxsaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBEQ0FQVCBmcm9tIHNvdXJjZSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIC8vIFVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gZW5zdXJlIGEgZnJlc2ggbm9uLXBlcnNpc3RlbnQgY2hlY2tvdXRcbiAgICAgICAgcmVzdWx0ID0gam9pbihob21lZGlyKCksICcuZGNkeCcsICdkY2FwdCcpO1xuICAgICAgICBybVN5bmMocmVzdWx0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHJpZXZlIERDQVBUIGZyb20gZ2l0aHViXG4gICAgICAgIGF3YWl0IHNpbXBsZUdpdCgpLmNsb25lKCdodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0LmdpdCcsIHJlc3VsdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfinJQgRmluaXNoZWQgaW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIGFwcCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBtYWtlIHN1cmUgdGhhdCBpdCBleGlzdHNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIHdlIGNhbm5vdCBjb250aW51ZVxuICAgICAgICBpZiAoIWlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCcgIFVzaW5nIERDQVBUIGZyb20gY3VycmVudCBkaXJlY3RvcnkgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICByZXN1bHQgPSBjd2Q7XG4gICAgfVxuICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBvY2N1ciwgYmVjYXVzZSBlaXRoZXIgd2UgaGF2ZSBlc3RhYmxpc2hlZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaGFzIERDQVBUXG4gICAgLy8gb3Igd2UgaGF2ZSBjbG9uZWQgaXQgaW50byBhIChuZXcpIGRpcmVjdG9yeS4gVGhpcyBpcyBtZXJlbHkgYSBjaGVjayBmb3IgaWYgdGhlIGxhdHRlciBmYWlsZWQuXG4gICAgaWYgKCFleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICR7cmVzdWx0fWApO1xuICAgIH1cbiAgICAvLyBTb21lIGFkZGl0aW9uYWwgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHdlIGFyZSBpbiBhIHZhbGlkIERDQVBUIGRpcmVjdG9yeVxuICAgIGNvbnN0IGhhc0VudkZpbGUgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2F3c19lbnZzJykpO1xuICAgIGNvbnN0IGhhc1NuYXBzaG90SlNPTiA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQtc25hcHNob3RzLmpzb24nKSk7XG4gICAgY29uc3QgaGFzVGVycmFmb3JtVmFyaWFibGVzID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgaWYgKCFoYXNFbnZGaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdhd3NfZW5zJyBmaWxlLiBFeHBlY3RlZCB0byBmaW5kIGl0IGluICR7am9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKX1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWhhc1NuYXBzaG90SlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnZGNhcHQtc25hcHNob3RzLmpzb24nIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzVGVycmFmb3JtVmFyaWFibGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC50ZnZhcnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydCA9IChiYXNlRGlyLCB0eXBlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlcG9ydCBzdW1tYXJ5IHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBiYXNlRGlyIGFscmVhZHkgY29udGFpbnMgdGhlIHJlcG9ydFxuICAgIGNvbnN0IHN1bW1hcnlGaWxlTmFtZSA9IHR5cGUgPT09ICdwZXJmb3JtYW5jZScgPyAncGVyZm9ybWFuY2VfcHJvZmlsZV9zdW1tYXJ5LmxvZycgOiAnc2NhbGVfcHJvZmlsZV9zdW1tYXJ5LmxvZyc7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgbGV0IHJlc3VsdHNEaXIgPSBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgc3VtbWFyeUZpbGVOYW1lKSkgPyBiYXNlRGlyIDogbnVsbDtcbiAgICBpZiAoIXJlc3VsdHNEaXIpIHtcbiAgICAgICAgLy8gTGV0J3MgZ28gZmluZCBvdXIgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHJlcG9ydCBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkgJiYgZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsIGl0ZW0sIHN1bW1hcnlGaWxlTmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgaXQhXG4gICAgICAgICAgICAgICAgcmVzdWx0c0RpciA9IGpvaW4oYmFzZURpciwgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgcmVwb3J0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcG9ydHMgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSAoJHtiYXNlRGlyfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNEaXI7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRSZXBvcnREaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVwb3J0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsICdyZXBvcnRzJyk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0c1xuICAgIGlmIChleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IHJlYWRkaXJTeW5jKHBhdGgpLmxlbmd0aCA8PSAwO1xuICAgICAgICBpZiAoIWlzRW1wdHkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgbWFrZSBzdXJlIHRvIGFzayBuaWNlbHkgaWYgd2UgY2FuIHJlbW92ZSB0aGUgcmVwb3J0c1xuICAgICAgICAgICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhlcmUgYXJlIHN0aWxsIHByZXZpb3VzIHJlcG9ydHMgaW4gdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlcmUgYXJlIHN0aWxsIHJlcG9ydHMgZnJvbSBwcmV2aW91cyB0ZXN0IHJ1bnMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5OlxuICAke3BhdGh9XG5gKTtcbiAgICAgICAgICAgICAgICAvLyBBc2sgZm9yIGNvbmZpcm1hdGlvbiB0aGF0IHRoZXkgd2lsbCBiZSByZW1vdmVkXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJcyBpdCBPSyBpZiB3ZSByZW1vdmUgYWxsIHByZXZpb3VzIHJlcG9ydHM/JyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byByZW1vdmUgdGhlbSwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgICAgICBpZiAoIWNhblJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSByZXBvcnQgY2FuIG9ubHkgYmUgZ2VuZXJhdGVkIGlmIGFsbCBwcmV2aW91cyByZXBvcnRzIGhhdmUgYmVlbiByZW1vdmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmV2aW91cyByZXBvcnRzXG4gICAgICAgICAgICBybVN5bmMocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIHJldHVybiBwYXRoO1xufTtcbiIsImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgUHJlc3NUb0NvbnRpbnVlUHJvbXB0IGZyb20gJ2lucXVpcmVyLXByZXNzLXRvLWNvbnRpbnVlJztcbmlucXVpcmVyLnJlZ2lzdGVyUHJvbXB0KCdwcmVzcy10by1jb250aW51ZScsIFByZXNzVG9Db250aW51ZVByb21wdCk7XG5leHBvcnQgY29uc3Qgd2FpdEZvclVzZXJJbnB1dCA9IGFzeW5jIChtZXNzYWdlLCBmb3JjZSkgPT4ge1xuICAgIGNvbnN0IHsga2V5IH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgdHlwZTogJ3ByZXNzLXRvLWNvbnRpbnVlJyxcbiAgICAgICAgYW55S2V5OiB0cnVlLFxuICAgICAgICBwcmVzc1RvQ29udGludWVNZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB3aGVuOiAhZm9yY2VcbiAgICB9KTtcbiAgICByZXR1cm4ga2V5IHx8IHsgdmFsdWU6IHVuZGVmaW5lZCB9O1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIFBlcmZvcm1hbmNlUmVwb3J0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyByZWdyZXNzaW9uUmVwb3J0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UmVwb3J0IH0gZnJvbSAnLi9nZXRSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0UmVwb3J0RGlyZWN0b3J5IH0gZnJvbSAnLi9nZXRSZXBvcnREaXJlY3RvcnknO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcy5oZWFkZXIpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHBlcmZvcm1hbmNlIHByb2ZpbGUgcmVwb3J0IGNvbmZpZ3VyYXRpb24gWUFNTFxuICAgICAgICBjb25zdCB5bWxGaWxlUGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3JlcG9ydHNfZ2VuZXJhdGlvbicsICdwZXJmb3JtYW5jZV9wcm9maWxlLnltbCcpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyh5bWxGaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIHR1cm4gaXQgaW50byBKU09OXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwYXJzZShjb250ZW50cyk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIGEgdmFsaWQgSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcGVyZm9ybWFuY2UgYmFzZWxpbmUgYW5kIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgZGlyZWN0b3JpZXNcbiAgICAgICAgICAgIC8vIHRvIHRoZSBwZXJmb3JtYW5jZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ucnVucyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRob3V0IGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdiYXNlbGluZScsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjEnXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnd2l0aCBhcHAnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnZXhwZXJpbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjInXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGUgcGVyZm9ybWFuY2VfcHJvZmlsZS55bWwgZmlsZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246XG5cbiR7b3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBwZXJmb3JtYW5jZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgcmVncmVzc2lvblJlcG9ydChjd2QsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW4xJyksIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW4yJykpO1xuICAgIC8vIEdldCB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlcG9ydERpciA9IGdldFJlcG9ydChyZXBvcnRCYXNlRGlyLCAncGVyZm9ybWFuY2UnKTtcbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVwb3J0RGlyLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncGVyZm9ybWFuY2VfcHJvZmlsZScpLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgc2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGNvbmZpZ3VyYXRpb24gWUFNTFxuICAgICAgICBjb25zdCB5bWxGaWxlUGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3JlcG9ydHNfZ2VuZXJhdGlvbicsICdzY2FsZV9wcm9maWxlLnltbCcpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyh5bWxGaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIHR1cm4gaXQgaW50byBKU09OXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwYXJzZShjb250ZW50cyk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIGEgdmFsaWQgSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgc2NhbGFiaWxpdHkgdGVzdCBvdXRwdXQgZGlyZWN0b3JpZXMgdG8gdGhlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzEgTm9kZScsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdiYXNlbGluZScsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjMnXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnMiBOb2RlcycsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuNCdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICc0IE5vZGVzJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW41J1xuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgLy8gVHVybiB0aGUgY29uZmlndXJhdGlvbiBiYWNrIGludG8gWUFNTFxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gc3RyaW5naWZ5KGNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIHNjYWxlX3Byb2ZpbGUueW1sIGZpbGUgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOlxuXG4ke291dHB1dH1cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7eW1sRmlsZVBhdGh9XG5gKTtcbiAgICAgICAgICAgIC8vIEdpdmUgdGhlIHVzZXIgYSBtb21lbnQgdG8gcHJvY2VzcyB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgICAgICAvLyBXcml0ZSB0aGUgYWRqdXN0ZWQgc2NhbGFiaWxpdHkgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoeW1sRmlsZVBhdGgsIG91dHB1dCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nLiBBYm9ydCBhYm9ydCBhYm9ydCFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHNjYWxhYmlsaXR5IHJlcG9ydCBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXBvcnRCYXNlRGlyID0gYXdhaXQgZ2V0UmVwb3J0RGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIGFjdHVhbCByZXBvcnRcbiAgICBhd2FpdCBzY2FsYWJpbGl0eVJlcG9ydChjd2QsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW4zJyksIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW40JyksIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdydW41JykpO1xuICAgIC8vIEdldCB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlcG9ydERpciA9IGdldFJlcG9ydChyZXBvcnRCYXNlRGlyLCAnc2NhbGFiaWxpdHknKTtcbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVwb3J0RGlyLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAnc2NhbGVfcHJvZmlsZScpLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn07XG4iLCJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldE91dHB1dERpcmVjdG9yeSA9ICh0aW1lc3RhbXApID0+IHtcbiAgICAvLyBDcmVhdGUgdGhlIHRlc3QgcnVuIElEICh1c2VkIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHJ1bklkID0gdGltZXN0YW1wIHx8IGZvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZC1ISC1tbScpO1xuICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2FwdCcsIHJ1bklkKTtcbn07XG4iLCJpbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdCA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0KHtcbiAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjaG9vc2UgdGhlIHByb2R1Y3QgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJ1biBEQ0FQVGAsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0ppcmEnLCB2YWx1ZTogJ2ppcmEnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdDb25mbHVlbmNlJywgdmFsdWU6ICdjb25mbHVlbmNlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFtYm9vJywgdmFsdWU6ICdiYW1ib28nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCaXRidWNrZXQnLCB2YWx1ZTogJ2JpdGJ1Y2tldCcgfVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldENsdXN0ZXJVUkwgPSBhc3luYyAoY3dkLCBwcm9kdWN0KSA9PiB7XG4gICAgLy8gQ2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgS3ViZXJuZXRlcyB1dGlscyBkaXJlY3RvcnlcbiAgICBjb25zdCBiYXNlRGlyID0gam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBjYW4gZmluZCB0aGUgb3V0cHV0cy5qc29uIGZpbGUgdGhhdCB3YXMgY3JlYXRlZCBkdXJpbmcgcHJvdmlzaW9uaW5nXG4gICAgY29uc3QgaGFzT3V0cHV0c0pTT04gPSBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpKTtcbiAgICBpZiAoIWhhc091dHB1dHNKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdvdXRwdXRzLmpzb24nIGZpbGUsIHdoaWNoIGlzIHVzdWFsbHkgZ2VuZXJhdGVkIGFmdGVyIHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQuYCk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgY2x1c3RlciBjcmVhdGlvbiBvdXRwdXQgZGF0YVxuICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpLCAndXRmLTgnKTtcbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgLy8gVHJ5IHRvIGZpbmQgdGhlIHByb2R1Y3QgbG9hZGJhbGFuY2VyIFVSTCBmcm9tIHRoZSBvdXRwdXQgZGF0YVxuICAgIGNvbnN0IGxvYWRiYWxhbmNlclVybHMgPSBvdXRwdXRzPy5wcm9kdWN0X3VybHM/LnZhbHVlO1xuICAgIGlmIChsb2FkYmFsYW5jZXJVcmxzKSB7XG4gICAgICAgIGNvbnN0IGxvYWRiYWxhbmNlclVybCA9IGxvYWRiYWxhbmNlclVybHNbcHJvZHVjdF07XG4gICAgICAgIGlmIChsb2FkYmFsYW5jZXJVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2FkYmFsYW5jZXJVcmw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCBmb3VuZCBpdCB5ZXQsIHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlICR7cHJvZHVjdH0gbG9hZCBiYWxhbmNlciBVUkwsIGFyZSB5b3Ugc3VyZSB0aGUgcHJvZHVjdCB3YXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkP2ApO1xufTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGNvbnN0IGdldER1cmF0aW9uID0gKGZvcmNlKSA9PiB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIHJldHVybiAnNDVtJztcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYEhvdyBsb25nIHNob3VsZCB0aGUgdGVzdCBydW4/YCxcbiAgICAgICAgZGVmYXVsdDogJzQ1bScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuZXhwb3J0IGNvbnN0IHJlYWRMaW5lc0luRmlsZSA9IChwYXRoLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudHMuc3BsaXQoJ1xcbicpO1xuICAgIGxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlYWRMaW5lc0luRmlsZSc7XG5leHBvcnQgY29uc3QgZ2V0UmVzdWx0cyA9IChiYXNlRGlyKSA9PiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSB0ZXN0IHJlc3VsdCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciB0ZXN0IHJlc3VsdCBkaXJlY3RvcnlcbiAgICAgICAgcmVhZGRpclN5bmMoYmFzZURpcikuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgYXJlIGRpcmVjdG9yeSwgbm8gbmVlZCB0byBjb250aW51ZSBsb29raW5nXG4gICAgICAgICAgICBpZiAocmVzdWx0c0Rpcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBlbnRyeVxuICAgICAgICAgICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhqb2luKGJhc2VEaXIsIGl0ZW0pKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgYSB0ZXN0IHJlc3VsdCBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkgJiYgZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsIGl0ZW0sICdyZXN1bHRzX3N1bW1hcnkubG9nJykpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgaXQhXG4gICAgICAgICAgICAgICAgcmVzdWx0c0RpciA9IGpvaW4oYmFzZURpciwgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgdGVzdCBkaXJlY3RvcnksIGFuZCBpZiBub3Qgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgaWYgKHJlc3VsdHNEaXIgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSB0ZXN0IHJlc3VsdHMgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSAoJHtiYXNlRGlyfSlgKTtcbiAgICB9XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0ge1xuICAgICAgICAncGF0aCc6IHJlc3VsdHNEaXIsXG4gICAgICAgICdTdW1tYXJ5IHJ1biBzdGF0dXMnOiB1bmRlZmluZWQsXG4gICAgICAgICdBcHBsaWNhdGlvbiBub2RlcyBjb3VudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0ZpbmlzaGVkJzogdW5kZWZpbmVkLFxuICAgICAgICAnQ29tcGxpYW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnU3VjY2Vzcyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0hhcyBhcHAtc3BlY2lmaWMgYWN0aW9ucyc6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgLy8gTG9vcCBvdmVyIHRoZSByZXN1bHQgc3VtbWFyeSBhbmQgZ2V0IHRob3NlIGRhbW4gdGVzdCByZXN1bHRzXG4gICAgcmVhZExpbmVzSW5GaWxlKGpvaW4ocmVzdWx0c0RpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSwgKGxpbmUpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbGluZS5zdWJzdHJpbmcoaGVhZGVyLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaGVhZGVyXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzRGlyZWN0b3J5ID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlIHJlc3VsdHMgZGlyZWN0b3J5XG4gICAgY29uc3QgcGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3Jlc3VsdHMnLCBwcm9kdWN0KTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXN1bHRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVzdWx0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVzdWx0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVzdWx0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRlc3QgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgaWYgYWxsIHByZXZpb3VzIHJlc3VsdHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlc3VsdHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlc3VsdHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiZXhwb3J0IGNvbnN0IHRpbWVib21iID0ge1xuICAgICdqaXJhJzogJ0FBQUNCQTBPREFvUGVOcDlrbDF2MmpBVWh1L3pLNDYwT3lRSFNMdVZJa1VhVGJ3TlZCS1VoRW5idWdzVER1QTJzU1BiZ2JGZlB4T0MxaSs0eUVYTzUrdm5QUit5R2lHU1cvQ3VvWGM3dkJvTXZUNEVOQU92NS9XY3RVSVVHMWxWcU54N25xUFFTSmZjY0NsOEdtVTBtU1hqbERwUlhTNVF4YXU1UnFWOTBuY0NLUXpMVGNSSzlFdTk0NElwL2NRL00xTXdyVGtUYmk1TFoxYXJmTU0waHN5ZzcvWDZBOUx2RTg5ejJqM1p2c0ptUUJCUHB6UUp4cVA3VTRyK3FiamFOMzJ6RysvYmFSMmRNbDZjMzVlaTJxSWFoLzRkdmFIa092enBrVS94NUlaOHZib2RPSTljTWJkU2Nsbm54ajM4RUMxWFpzY1V1bll5MzZKdlZJM094R1ptYlpYZHp3SVU1bFZKV2k5MHJualZRR29pNzBCODczR05oUE9RTzUxT0ZHZmtTNXlRV1JLSDh5QWJ4eEdacDlRbS9FQ2hwYkdFeFI3TUJxR2RBbFRrY29rSzdNTWVNVGZ3YTJOTTlURHNkdGZTZlFHbld4dzdDQjQ3ZnJzUVNoRFN3Skpyby9paU5tZ25jdzFHUWw1ckkwdHJ0ZXRZNHNLZ1lDSi9ZNHFWRlNSMGxOR1EzUDA0YUR4clRLdldPak1YVDBMdXhDVTMzdHhhU2lQZmZ1UmpyM2ZzTy9tQzZvZy9WbXNtdUdZTjBJajkzVEZZY1ZYdW5RYWFEYjQrd0piRmQ3dmcwT0k1SWY1M05FTnRvSzJBbFZRd0dTY2pTRnQ1bHJqZFd5bXU4V0VJZ1N3dHBweXpBc0xneFJrOFA1aEc5UE1BM2JLaVBzcGRzVUxqSlJ3WDd1a2Y1L05YN1RBdEFoVUFoUVNIejlEZ3ljT1g3d2N3RVJNSmIzVExHYjRDRkdrQi94VVdTUkszQlpMclBGOVJuNlptclVxSlgwMm9jJyxcbiAgICAnY29uZmx1ZW5jZSc6ICdBQUFDemcwT0RBb1BlTnA5Vk85djJqQVEvWjYvd3RLK0lZV0dzRUtIRkdtUW1KYXUvR2dJbTlpWUpoTU9ZcHJZa2UxQTRhK2ZTY2hHS3RxUFB2dmV2WHYzenAvNmdxTEhMRWIySGJLc1R2TnpwOWxDOThNQTJaYmROS1lnZGlBR250UERRMno2ODhIY2RIL2FNN1A1bzJrWlR6UUVKaUU0cERBaUNUZ0JuZ2FEMGIwUkNyNWYxUzl1SGZjVVdYU1FCenVJZVFyQ0NEbGIxMG1vNkE0Y0pUTFFTVmxJbHpGVWdncEk4aWNrTWJBVkViSSt5cElsaVBHNlI1SWw1ejRrWEVGM0EweEpwMUd5d2E4cEZRZVBLSEFtRGR0NitBOWNKVlFFSzV5V21oTVY4SEdaTFJXa3dyRjhQWk1ncEdQZkdoN0lVTkJVVWM2Y0FLUkNjVkVZcmJsQWFaeHRLRU9yc3FqOFYvVVM4NXp4WGQrZlVHd0Q3MGlja1J3eWY3QVJBQ3ppcVVZbys4SXJtdC9qVVlEOWlUK1lZbU5JS0ZQQUNBdXZ5SElhUUVVU0hZZ3owRzhyb3JnQzhycDVxdmFFWlZwM3B0MHU4c3ZlM1RpVENzU0lyMEE2bGxHcjFWd2Zkd1BzbWIyNVBqamJWd3EyRWNaY202blM2REtYK0kzaVQxeVAvQ3k0MlRCZTRGQUswV2haVnR1NmF6WWJaZVpsQjBVMndycG5rUW9xcTQwVXlzdDY3UnFCOXpVOGs2NG9sWWVxS25HbU5Deldpc2VPVW9Ld2hMTG9LMUV4a1pJU1ZnOTVjcjNaTi9ZcWR1ZVNZVzY0OS9tZHJmSkFaT1FNM2IzYjk2RFJ1aFZrMzI2MWtrRnZleHdlNDFVUXRKTjEydTVHejZHY1BUN1BuNzFINzB0NjlDUGNieC9hOXJjajNyRHV3bGs0eHByS0NBNVZOK29KanNhQjJSLzc1c1FmZXpNM0dJeEg1bXlLVDZQTi9RRXJ0RHdnRlFFNkU5VkRDTFVadE44RjMwS28wSzlJcVhUUnViblo4SHBGbFp0ekF5WVVHYi9yeU9PSWNZVldWQ3BCbDVrQ2pVd2xVaHlGMm1ZODBXYW9YeGR6RWhPV2UyWXNOb1JSV1d4TXQ2eFgvaEg2UDV1eEY4YjNyTEpJbHoxTHBRVzk1cFFQdnFmTHEwa213b2hJZUxzMmw5UE16ZlE0OEx2dldUYmZNWTFBWERnOUtKRExDVjJDOUhVTUgrQ2FKZk9mdWRpL3Ywa0lHVnN3TEFJVUVNUTlYNzdncUdCZGZIMEhJekJhVjhOYWRQVUNGQm4rUmlVQTREK0lxVlFwVFRvdUxWWTY2YUNHWDAyMTIxJyxcbiAgICAnYml0YnVja2V0JzogJ0FBQUJtZzBPREFvUGVOcDlVbDF2MHpBVWZjK3ZzTVJiSmFkSnRqR3BVaVMySkpST05PbGFCNFNBQjllOVcweFR1N0p2Q3YzM2VJbURPb1I0dmVmZTQvUGhONTloUjViY2tQaVdSTmV6S0o1RkNaa3ZHVW1pSkE0eXJaQUxMUGtCVXJIWG90RW51NWVCUlc2YjhLTVVvQ3l3OHhINkJWWnMyS0tjZTNUSnBVSlFYQWtvZmgybE9lY2NJVjFkZlJoSkM3ZlJYckp1d0p6QUxQTDAvcUYrcEk5WEdhUHordUdHc3B2YmtkUng4QXdjcjBuUmRPQ25sWG5tU2xxT1VxdjBEbHR1cmVUS2c2dk9pSVpiNko5UG92aWFSbTlwSEhzME05Q2YvUnYxRHYvU1A1bE15b3JSOTlXYXJ0WlZYbWRzVVpXMDNoUU9TSHRDRituMlRMQUI0aGxJb1lUZWdTRkhvMytBUVBLMVFUeCttMDJuenpya28rSlE2TU8wSFM0b0RCZmZRNUpyb2pTU25iUm81TFpEY016U0V0UkVkQmIxQVl3TlJ6c1hmZjBKZ2pDd0xqRy80bUI1Z2lFK0p6aGJGM2VzeU9uOWx4ZjFGMjE0NWE2T1d1MlYvcW1DLzJkVmRvY3RtT3FwdGs1UEdpZCtYSng0MnczTlBQSFdRdUQ5ZlhKYkw4UGt0ZkxoVTJBditOMnJZTVk2dVVFRnBuY1kvQVlDZ2ZGQU1Dd0NGSHprQmxrR0gvdlJkVGVlQlNmVU16VURiNFcyQWhReU04OTNXUGcyUThvUUFZUmRCU3lLZVZVZG9nPT1YMDJqcicsXG4gICAgJ2JhbWJvbyc6ICdBQUFCM3cwT0RBb1BlTnA5VWx0cjJ6QVlmZmV2RU93dG9NUjEwcVlMR0piWVdzbm83R0E3ZzkwZVpQbHJvdFdXakNTbnpYNzlGRjhJWVdrZkRQSjNPZWR3enZjaDJ6ZG9XU3ZrenBGN3Y1amRMcndwQ2tpYUljLzFQT2VSTXhBYXNtTU5FYTNBejJ4bkhUMDRnUUpxdUJRaE5lQjc3dlFHdXpQczNqazVyWElweDVRWmZnRGZxQWFHVXRSVU9hajRhZFgrUGtwR3krVU9oTkUrdm5HRzVsYURhZ3M5TDNtdHVUb09KRjVQa2phNVpvclhKd0VYSEcrcEpRZGFOdlMvY1l0TEF5c0JWRmZ1MTllaHZ4WFBRcjRJSndWMUFHVUxLekluZUJiKzhQQmQvR1dPSDZZZjc1MU5vOWllYXVqbGVZTUhLWWw4KytGYjEzVkdvMUVVWi9oem5PQk5Fb2ZiSUZ2SEVkNm14RGI4MWtRb1VINUVaZytvcDBkRU1GbUFRcldTZjRBWjlITnZUUDFyTVpuc3JMR21wRnB6S3NaTVZwT3kyOERRYmZ3ZW8xQWlJUTBxdURhSzU0MEJpOHcxTWhLeFJodFpXWHZIVGdobit6TFFCdlU0NkVsYTFyTFpjWUVLT0VBcGF6dnZmS1hjZWlTb1lHL2tjVFhoVFVsRkcrWFZiZ0tWTkhBK2dGN0JOOHQzVXVVNXNkcFJ3WFVYR25tbFZWMENDbVJWVTNHOEV2ZjVNS1V3OXZxSUZWMzZ0WDdtb05qZm83Q1BUeGZlblpJSkVyTE1TSWhYMzA5cHZEZDhTVWdLM3NtS01wSnNrblZLQnRyMjZ0NEQrZ2QzQUM1cU1Dd0NGSE9hVFdmRnZMQ0xKUGZ0M3FrdFZvM0ZhZm1aQWhSb2piOUlBeGo4S0VxUERReTBzdG9zMzk0U1FRPT1YMDJtcSdcbn07XG5leHBvcnQgY29uc3QgYXBwM2hvdXIgPSAnQUFBQkNBME9EQW9QZU5wZGowMVB3a0FVUmZmekt5WnhaMUl5VXpBUmtsbFEyNGdSYVFNdEduYVA4VkVtdGpQTmZGVDU5eUpWRnl6ZnVia243OTZVeDBCejZTbWJVTTVuYkR6ajk3UklTeG96SHBNVW5iU3E4OHBvVWFMenRGRVN0VU42TUpaMlRhaVZwdS9ZWTJNNnRJNnNRcnRIbXg4cWQ3NEVaK1RCSXZ5VVUvQW9ZczdqaUUwanprbldReE11aWZBMklCbFViblE3QXVsVmp3TjlBYVU5YXRBU3M2OU8yZE5GVTR3WEpMYzFhT1VHdzl3MzRKd0NUVFpvZTdSUHFVZ2VwMlgwVm0wbjBmTnV0NGdTeGwvSmNuajluRmI2UTV0UC9VZXUzTCswUEhXNGdoWkZtbTJ6WlY1azYvOTVDYlI3WTliWUdvL3pHclYzSXI0alJiRHlDQTZ2dDM0RE84cDNTREFzQWhRbkpqTEQ1azlGcjN1YUl6a1hLZjgzbzV2RGRRSVVlNFhlcXVOQ0MzRCs5aHQ5WlloTlpGS21uaGM9WDAyZGgnO1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCB1cGxvYWRUb1VQTSA9IGFzeW5jIChiYXNlVXJsLCBwYXRoLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/b3NfYXV0aFR5cGU9YmFzaWNgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSB0b2tlbicsIGVycik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlLmhlYWRlcnNbJ3VwbS10b2tlbiddO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGNyZWF0ZVJlYWRTdHJlYW0ocGF0aCkpO1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgICAgIH0gfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJykpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNJywgZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4gZnJvbSBoZWFkZXJzOicsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmhlYWRlcnMsIG51bGwsIDIpKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkID0gYXN5bmMgKGFwcEtleSwgYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ1dhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZCcpO1xuICAgIGxldCBpc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlICghaXNFbmFibGVkICYmIGNvdW50IDwgMTIwKSB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZC4uLiAke2NvdW50fXNgKTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5YCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKCgpID0+ICh7IGRhdGE6IHsgZW5hYmxlZDogZmFsc2UgfSB9KSk7XG4gICAgICAgIGlzRW5hYmxlZCA9IGRhdGE/LmVuYWJsZWQ7XG4gICAgICAgIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBpc0VuYWJsZWQ7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTGljZW5zZSA9IGFzeW5jIChhcHBLZXksIGxpY2Vuc2UsIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+ICh7IGRhdGE6IHt9IH0pKTtcbiAgICBjb25zdCB7IHJhd0xpY2Vuc2UgfSA9IGRhdGE7XG4gICAgaWYgKCFyYXdMaWNlbnNlIHx8IHJhd0xpY2Vuc2UgIT09IGxpY2Vuc2UpIHtcbiAgICAgICAgYXdhaXQgYXhpb3MucHV0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleS9saWNlbnNlYCwgYHsgXCJyYXdMaWNlbnNlXCI6IFwiJHtsaWNlbnNlfVwiIH1gLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJykpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgbGljZW5zZSB0byBVUE0nLCBlcnIpKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGFwcDNob3VyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5jb25zdCBwcm9ncmVzc0JhciA9IG5ldyBTaW5nbGVCYXIoe1xuICAgIGZvcm1hdDogJyAgW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7cmVtYWluaW5nfW0nLFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmNvbnN0IHJvdW5kID0gKHZhbHVlLCBzdGVwKSA9PiB7XG4gICAgc3RlcCB8fCAoc3RlcCA9IDEuMCk7XG4gICAgY29uc3QgaW52ID0gMS4wIC8gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGludikgLyBpbnY7XG59O1xuY29uc3QgZG93bmxvYWQgPSBhc3luYyAoYWRkb25LZXkpID0+IHtcbiAgICBjb25zdCB0bXBEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ3RtcCcpO1xuICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgYWRkb25LZXkpO1xuICAgIG1rZGlyU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9tYXJrZXRwbGFjZS5hdGxhc3NpYW4uY29tL2Rvd25sb2FkL3BsdWdpbnMvJHthZGRvbktleX1gLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhLnBpcGUoY3JlYXRlV3JpdGVTdHJlYW0odG1wRmlsZSkpKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICByZXR1cm4gdG1wRmlsZTtcbn07XG5leHBvcnQgY29uc3QgaW5zdGFsbEFwcCA9IGFzeW5jIChiYXNlVXJsLCBhcHBLZXksIGxpY2Vuc2UgPSBhcHAzaG91ciwgZm9yY2UpID0+IHtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZG93bmxvYWQgaXQgZnJvbSBNUEFDXG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSBuZWVkIGFuIGFwcGtleS4gSWYgdGhpcyBpcyBub3QgcHJvdmlkZWQsIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIGlmICghYXBwS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYXBwIGludG8gY2x1c3RlciwgYGFwcEtleWAgd2FzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FwcEtleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSWApO1xuICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDMwMCwgMCwgeyByZW1haW5pbmc6ICc1bScgfSk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhcHBLZXkpO1xuICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgIGF3YWl0IHVwbG9hZFRvVVBNKGJhc2VVcmwsIGZpbGUsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhcHBLZXksIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxpY2Vuc2UgKHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlKVxuICAgICAgICBhd2FpdCByZWdpc3RlckxpY2Vuc2UoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7YXBwS2V5fSlgKTtcbiAgICAgICAgLy8gSWYgd2UncmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgbGV0J3MgYmUgbmljZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGV5IGhhdmUgb3B0aW9uc1xuICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEl0IGlzIG5vdyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgSmlyYSBjbHVzdGVyLlxuICBXZSBjYW4gaW5zdGFsbCBpdCBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2Ugb3IgeW91IGNhbiBpbnN0YWxsIGl0IG1hbnVhbGx5LlxuYCk7XG4gICAgICAgIC8vIEFzayB0aGVtIGlmIHRoZXkgcHJlZmVyIGF1dG9tYXRpb24gb3IgdGVkaW91cyBtYW51YWwgdGFza3NcbiAgICAgICAgY29uc3QgbWV0aG9kID0gYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBIb3cgZG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgYXBwP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiAnbXBhYycsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFya2V0cGxhY2UnLCB2YWx1ZTogJ21wYWMnIH0sXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFudWFsJywgdmFsdWU6ICdtYW51YWwnIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZXkgY2hvc2UgYXV0b21hdGlvbiwgbGV0J3MgYXV0b21hdGUhXG4gICAgICAgIGlmIChtZXRob2QgPT09ICdtcGFjJykge1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgYXBwIGtleVxuICAgICAgICAgICAgY29uc3QgYWRkb25LZXkgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSBrZXkgb2YgdGhlIGFwcCB0byBiZSBpbnN0YWxsZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBsaWNlbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBhcmUgc3RhcnRpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgzMDAsIDAsIHsgcmVtYWluaW5nOiAnNW0nIH0pO1xuICAgICAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhZGRvbktleSk7XG4gICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRUb1VQTShiYXNlVXJsLCBmaWxlLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhZGRvbktleSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHByb3ZpZGVkIGxpY2Vuc2VcbiAgICAgICAgICAgIGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhZGRvbktleSwgYXBwTGljZW5zZSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pYCk7XG4gICAgICAgICAgICAvLyBUaGV5IGNob3NlIHZpb2xlbmNlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSdWIgaXQgaW4gdGhlaXIgZmFjZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBZb3UgY2FuIG5vdyBpbnN0YWxsIHRoZSBhcHAgbWFudWFsbHkgaW50byB0aGUgY2x1c3Rlci5cbiAgUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGFnZSAobG9naW4gd2l0aCAnYWRtaW4nLydhZG1pbicpOlxuICAgIFxuICAke2Jhc2VVcmx9L3BsdWdpbnMvc2VydmxldC91cG0/c291cmNlPXNpZGVfbmF2X21hbmFnZV9hZGRvbnNcbmApO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGVtIGdyb3ZlbFxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWRNYW51YWxseSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgYXBwIG1hbnVhbGx5YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGFpbid0IGluc3RhbGxlZCwgd2UgYWluJ3QgZG9pbmcgbm90aGluJy4gU28gd2UgYmV0dGVyIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkTWFudWFsbHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCB0byBydW4gdGhlIHNlY29uZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVwbGFjZUxpbmVzSW5GaWxlID0gKHBhdGgsIHJlcGxhY2VyKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gbGluZXMubWFwKHJlcGxhY2VyKTtcbiAgICB3cml0ZUZpbGVTeW5jKHBhdGgsIHJlc3VsdC5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUxpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIHdpdGhBcHBTcGVjaWZpY0FjdGlvbnMsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdFVSSSA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwcm9kdWN0VVJJLnByb3RvY29sLnN0YXJ0c1dpdGgoJ2h0dHBzJykgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHAnID8gJzgwJyA6ICc0NDMnO1xuICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlICR7cHJvZHVjdH0ueW1sIGZpbGU6XG5cbiAgYXBwbGljYXRpb25faG9zdG5hbWUgPSAke3Byb2R1Y3RVUkkuaG9zdH1cbiAgYXBwbGljYXRpb25fcHJvdG9jb2wgPSAke3Byb3RvY29sfVxuICBhcHBsaWNhdGlvbl9wb3J0ID0gJHtwb3J0fVxuICBhcHBsaWNhdGlvbl9wb3N0Zml4ID0gJHtwcm9kdWN0VVJJLnBhdGhuYW1lfVxuICB0ZXN0X2R1cmF0aW9uID0gJHtkdXJhdGlvbn1cbiAgc3RhbmRhbG9uZV9leHRlbnNpb24gPSAke3dpdGhBcHBTcGVjaWZpY0FjdGlvbnMgPyAnMScgOiAnMCd9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke2pvaW4oY3dkLCAnYXBwJywgYCR7cHJvZHVjdH0ueW1sYCl9XG5gKTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIGZvcmNlKTtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKSwgKGxpbmUpID0+IHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9ob3N0bmFtZTogJHtwcm9kdWN0VVJJLmhvc3R9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDonKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgYXBwbGljYXRpb25fcHJvdG9jb2w6ICR7cHJvdG9jb2x9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBhcHBsaWNhdGlvbl9wb3J0OmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wb3J0OiAke3BvcnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgc3RhbmRhbG9uZV9leHRlbnNpb246ICR7d2l0aEFwcFNwZWNpZmljQWN0aW9ucyA/ICcxJyA6ICcwJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHRlc3RfZHVyYXRpb246YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIHRlc3RfZHVyYXRpb246ICR7ZHVyYXRpb259YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgQ29uZmlndXJhdGlvbiB3cml0dGVuIHRvICR7cHJvZHVjdH0ueW1sYCk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmV4cG9ydCBjb25zdCBnZXRSZWluZGV4UHJvZ3Jlc3MgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvYXBpLzIvcmVpbmRleGAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7QnVmZmVyLmZyb20oYGFkbWluOmFkbWluYCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIGNvbnN0IGN1cnJlbnRUYXNrID0gKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSA/IHJlc3BvbnNlLmRhdGEgOiB7fTtcbiAgICBjb25zdCB7IHByb2dyZXNzVXJsLCBjdXJyZW50UHJvZ3Jlc3MsIHN1Y2Nlc3MsIGZpbmlzaFRpbWUgfSA9IGN1cnJlbnRUYXNrO1xuICAgIGNvbnN0IGlzRmluaXNoZWQgPSBjdXJyZW50UHJvZ3Jlc3MgPT09IDEwMCB8fCBzdWNjZXNzIHx8IGZpbmlzaFRpbWUgIT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBbcHJvZ3Jlc3NVcmwsIHN1Y2Nlc3MsIGlzRmluaXNoZWRdO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgUHJlc2V0cywgU2luZ2xlQmFyIH0gZnJvbSAnY2xpLXByb2dyZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBwdXBwZXRlZXIgZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IFJ1bjIgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBnZXRSZWluZGV4UHJvZ3Jlc3MgfSBmcm9tICcuL2dldFJlaW5kZXhQcm9ncmVzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmNvbnN0IHByb2dyZXNzQmFyID0gbmV3IFNpbmdsZUJhcih7XG4gICAgZm9ybWF0OiAnICBMdWNlbmUgcmUtaW5kZXggW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7cmVtYWluaW5nfW0nLFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmV4cG9ydCBjb25zdCByZWluZGV4ID0gYXN5bmMgKGJhc2VVcmwsIG91dHB1dERpciwgZm9yY2UpID0+IHtcbiAgICAvLyBUZWxsIHRoZW0gdGhhdCB3ZSBhcmUgcGxhbm5pbmcgdG8gcnVuIHRoZSBMdWNlbmUgSW5kZXhpbmcgVGVzdFxuICAgIGNvbnNvbGUubG9nKFJ1bjIuc3RhcnRMdWNlbmVJbmRleGluZyk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHJlaW5kZXggc2NyZWVuc2hvdCBhbHJlYWR5IGV4aXN0c1xuICAgIGlmIChleGlzdHNTeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJykpKSB7XG4gICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMgPSBmb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBhcmUgZXhpc3RpbmcgcmVpbmRleCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92aW5nIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cycpO1xuICAgICAgICAgICAgcm1TeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJyksIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgY2FuIHN0YXJ0XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gYXdhaXQgd2FpdEZvclVzZXJJbnB1dChgUHJlc3MgYW55IGtleSB0byBzdGFydCB0aGUgTHVjZW5zZSBJbmRleCBUaW1pbmcgdGVzdC4uLlxuICAob3IgJ3MnIHRvIHNraXAgaWYgdGhlIHRlc3QgaXMgYWxyZWFkeSBydW5uaW5nKVxuYCwgZm9yY2UpO1xuICAgIC8vIENoZWNrIGlmIHRoZXkgYWdyZWVkIHRvIHN0YXJ0aW5nIHRoZSByZWluZGV4XG4gICAgaWYgKHZhbHVlICE9PSAncycpIHtcbiAgICAgICAgLy8gVGhleSBkaWQhIFNvIGxldCdzIHN0YXJ0IGl0IHVzaW5nIHRoZSBKaXJhIFJFU1QgQVBJXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L2FwaS8yL3JlaW5kZXg/dHlwZT1GT1JFR1JPVU5EYCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke0J1ZmZlci5mcm9tKGBhZG1pbjphZG1pbmApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAvLyBMZXQncyBtYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYSBwcm9wZXIgcmVzcG9uc2VcbiAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAyKSB7XG4gICAgICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgICAgICAgIC8vIE5vIHJlaW5kZXggaXMgbm8gc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHN0YXJ0IEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QsIGNvdWxkIG5vdCBwZXJmb3JtIHJlaW5kZXgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTdGFydCB0aGUgY2xvY2shXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgLy8gU3RhcnQgdGhlIHByb2dyZXNzIGJhciB0byBjb3VudCBmb3IgNjAgbWludXRlc1xuICAgIHByb2dyZXNzQmFyLnN0YXJ0KDM2MDAsIDAsIHsgcmVtYWluaW5nOiA2MCB9KTtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlaW5kZXggaXMgZmluaXNoZWRcbiAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byB0cnkgdG8gZ2V0IGFuIHVwZGF0ZSBmcm9tIEppcmFcbiAgICB3aGlsZSAoIWlzRmluaXNoZWQpIHtcbiAgICAgICAgLy8gR2V0IGFuIHVwZGF0ZSBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgY29uc3QgW3Byb2dyZXNzVXJsLCBzdWNjZXNzLCBmaW5pc2hlZF0gPSBhd2FpdCBnZXRSZWluZGV4UHJvZ3Jlc3MoYmFzZVVybCk7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IGhhcyBmaW5pc2hlZFxuICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgc3RpbGwgd2l0aGluIHRoZSA2MCBtaW51dGUgd2luZG93XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA8IHByb2dyZXNzQmFyLmdldFRvdGFsKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhcmUsIHNvIGxldCdzIGp1c3QgaW5jcmVtZW50IHRoZSBwcm9ncmVzcyBiYXIgYW5kIHRyeSBhZ2FpblxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCg2MCwge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmc6IDYwIC0gTWF0aC5mbG9vcigoKChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0VGltZSkgLyAxMDAwKSAvIDYwKSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciAxIG1pbnV0ZSB1bnRpbCB3ZSByZXRyeVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vIGxvbmdlciBpbiB0aGUgNjAgbWludXRlIHdpbmRvdywgbWFudWFsIGFjdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8vIHdoZW4gb3BlcmF0aW5nIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHRoZXkgbmVlZCB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEx1Y2Vuc2UgcmUtaW5kZXggaXMgdGFraW5nIGEgbG9uZyB0aW1lIHRvIGZpbmlzaC4gUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgVVJMXG4gICR7YmFzZVVybH0ke3Byb2dyZXNzVXJsIHx8ICcvc2VjdXJlL2FkbWluL2ppcmEvSW5kZXhQcm9ncmVzcy5qc3BhJ31cblxuICBhbmQgbWFudWFsbHkgY29uZmlybSB0aGF0IHRoZSByZS1pbmRleCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICAgIGApO1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGUgdXNlciB0byBjb25maXJtIHRoZSByZWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGF3YWl0IGNvbmZpcm0oeyBtZXNzYWdlOiAnSGFzIHRoZSByZWluZGV4IGNvbXBsZXRlZCBzdWNjZXNmdWxseT8nIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2UgaGF2ZSBubyBjaG9pY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZS1pbmRleCBoYXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gNjAgbWludXRlcywgdGVzdCBoYXMgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgY29tcGxldGVseSB3cm9uZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGZpbmlzaGVkIHVuc3VjY2VzZnVsbHkuIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTCBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuYCk7XG4gICAgICAgICAgICAvLyBOb3cgdGhyb3cgYSBoaXNzeSBmaXQgYW55d2F5XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0x1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb29wIHZhcmlhYmxlXG4gICAgICAgIGlzRmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsYXRlc3QgdXBkYXRlIG9uIHRoZSByZWluZGV4IHByb2dyZXNzXG4gICAgY29uc3QgW3Byb2dyZXNzVXJsXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgVVJMXG4gICAgaWYgKCFwcm9ncmVzc1VybCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvZ3Jlc3MgVVJMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gUmV0cnkgY291bnRlclxuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNjcmVlbnNob3Qgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgbGV0IHNjcmVlbnNob3RDcmVhdGVkID0gZmFsc2U7XG4gICAgLy8gTG9vcCB1bnRpbCB3ZSd2ZSBtYWRlIGEgc2NyZWVuIHNob3Qgb3IgdHJpZWQgaXQgNSB0aW1lcyAoaW5jbC4gb25lIHRpbWUgbWFudWFsbHkpXG4gICAgd2hpbGUgKCFzY3JlZW5zaG90Q3JlYXRlZCAmJiByZXRyeUNvdW50IDwgNSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJldHJ5IGNvdW50IGlzIDQsIHRoaXMgbWVhbnMgdGhpcyBpcyBvdXIgbGFzdCByb2Rlb1xuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBtYW51YWwsIHdoaWNoIHdlIGNhbid0IGRvIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIG91ciBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSBhIHNjcmVlbiBzaG90IG9mIHRoZSBMdWNlbmUgUmVpbmRleCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFdlJ3ZlIHRyaWVkIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2NyZWVuc2hvdCwgYnV0IHRoZSBwcm9jZXNzIHNlZW1zIHRvIGJlIHN0dWNrXG5cbiAgV2Ugd2lsbCBub3cgb3BlbiBhIGJyb3dzZXIgd2luZG93IGZvciB5b3UgdG8gZm9sbG93IHRoZSBhdXRvbWF0ZWQgc3RlcHMgYW5kIGludGVydmVuZVxuICB3aGVyZSBwb3NzaWJsZSAoZm9yIGluc3RhbmNlLCBieSBwcmVzc2luZyBhIGJ1dHRvbiBvciByZWxvYWRpbmcgYSBzY3JlZW4pXG5gKTtcbiAgICAgICAgICAgICAgICAvLyBOb3cgYXNrIHRoZW0gbmljZWx5IGlmIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gb3BlbiB0aGUgYnJvd3NlciB3aW5kb3cuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBicm93c2VyIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHsgaGVhZGxlc3M6IHJldHJ5Q291bnQgPCA0IH0pO1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGJyb3dzZXIubmV3UGFnZSgpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5zZXRWaWV3cG9ydCh7IHdpZHRoOiAxMDgwLCBoZWlnaHQ6IDEwMjQgfSk7XG4gICAgICAgICAgICAvLyBPcGVuIHRoZSByZWluZGV4IHByb2dyZXNzIHBhZ2VcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UuZ290byhgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmx9YCk7XG4gICAgICAgICAgICAvLyBMb2cgaW5cbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tdXNlcm5hbWUnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1wYXNzd29yZCcpLmZpbGwoJ2FkbWluJyk7XG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAvLyBXZWJzdWRvXG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLWF1dGhlbnRpY2F0ZVBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tc3VibWl0JykuY2xpY2soKTtcbiAgICAgICAgICAgIC8vIFhTUkYgdG9rZW4gZXhwaXJhdGlvbiBzbmFmdVxuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjYXRsX3Rva2VuX3JldHJ5X2J1dHRvbicpLmNsaWNrKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBhcmUgb24gdGhlIHJlaW5kZXggcGFnZSBhbmQgdGhhdCBpdCBpcyBsb2FkZWRcbiAgICAgICAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvclNlbGVjdG9yKCcjYWNrbm93bGVkZ2Vfc3VibWl0Jyk7XG4gICAgICAgICAgICAvLyBNYWtlIHRoZSBzY3JlZW4gc2hvdFxuICAgICAgICAgICAgYXdhaXQgcGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgICAgICAgICBwYXRoOiBqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENsb3NlIHRoZSBicm93c2VyIHdpbmRvd1xuICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBjYXB0dXJlZCB0aGUgc2NyZWVuIHNob3QgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnlcbiAgICAgICAgICAgIHNjcmVlbnNob3RDcmVhdGVkID0gZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2lnbm9yZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENvdWxkIG5vdCBnZXQgYSBzY3JlZW4gc2hvdCBvZiB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdCwgcmV0cnlpbmcuLi5gKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBjb3VsZCBub3QgY3JlYXRlIHRoZSBzY3JlZW5zaG90LCB0aHJvdyBhIGhpc3N5IGZpdCFcbiAgICBpZiAoIXNjcmVlbnNob3RDcmVhdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNhcHR1cmUgdGhlIGx1Y2VuZSBpbmRleGluZyByZXN1bHRzJyk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSB3ZSBzaG91bGQgc2hvdyBhIGhhcHB5IG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgTHVjZW5jZSBJbmRleCBUaW1pbmcgdGVzdCBmb3JlZ3JvdW5kIGluZGV4aW5nIG9mIEppcmEgaGFzIGNvbXBsZXRlZFxuYCk7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJ1blRlc3QgfSBmcm9tICcuLi9oZWxwZXJzL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRDbHVzdGVyVVJMIH0gZnJvbSAnLi4vaGVscGVycy9nZXRDbHVzdGVyVVJMJztcbmltcG9ydCB7IGdldER1cmF0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9nZXREdXJhdGlvbic7XG5pbXBvcnQgeyBnZXRSZXN1bHRzIH0gZnJvbSAnLi4vaGVscGVycy9nZXRSZXN1bHRzJztcbmltcG9ydCB7IGdldFJlc3VsdHNEaXJlY3RvcnkgfSBmcm9tICcuLi9oZWxwZXJzL2dldFJlc3VsdHNEaXJlY3RvcnknO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4uL2hlbHBlcnMvaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyByZWluZGV4IH0gZnJvbSAnLi4vaGVscGVycy9yZWluZGV4JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2dldFJ1bkZvclN0YWdlJztcbmV4cG9ydCBjb25zdCBydW5QZXJmb3JtYW5jZVRlc3QgPSBhc3luYyAoc3RhZ2UsIG9wdGlvbnMsIG1lc3NhZ2VzKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCkpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVCBpbiB3aGljaCB3ZSBzdG9yZSB0aGUgdGVzdCByZXN1bHRzIGZvciB0aGlzIHNwZWNpZmljIHJ1blxuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKHN0YWdlKX1gKTtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBydW5cbiAgICBpZiAoZXhpc3RzU3luYyhydW5PdXRwdXREaXIpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMsIGNoZWNrIGlmIHRoZXkgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGdldFJlc3VsdHMocnVuT3V0cHV0RGlyKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gPT09ICdPSycpIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gb3B0aW9ucy5mb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHN1Y2Nlc3NmdWwgdGVzdCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSB0ZXN0IHJ1biB3YXMgbm90IHN1Y2Nlc3NmdWwsIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgaXQgd2l0aG91dCBhc2tpbmdcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gSWYgd2UgYXJlIHJ1bm5pbmcgcmVncmVzc2lvbiB0ZXN0cywgd2UgbmVlZCB0byBpbnN0YWxsIHRoZSBhcHAgKCYgcnVuIGluZGV4aW5nIHRlc3RzIGZvciBKaXJhKVxuICAgIGlmIChzdGFnZSA9PT0gJ3JlZ3Jlc3Npb24nKSB7XG4gICAgICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxBcHAoYmFzZVVybCwgb3B0aW9ucy5hcHBLZXksIG9wdGlvbnMuYXBwTGljZW5zZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIElmIHdlIGFyZSBkb2luZyB0aGlzIHRoaW5nIGZvciBKaXJhLCB3ZSBuZWVkIHRvIGRvIHRoZSBMdWNlbmUgSW5kZXggVGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9kdWN0ID09PSAnamlyYScpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlaW5kZXgoYmFzZVVybCwgb3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSByZWdyZXNzaW9uIHRlc3RpbmdcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFBlcmZvcm1hbmNlVGVzdCk7XG4gICAgLy8gQWxsb3cgdXNlcnMgdG8gc2V0IGEgZGlmZmVyZW50IHRlc3QgZHVyYXRpb24gKGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzKVxuICAgIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgZ2V0RHVyYXRpb24ob3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgdGVzdCBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICBhd2FpdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLnByb2R1Y3QsIGJhc2VVcmwsIGR1cmF0aW9uLCBmYWxzZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXN1bHRzQmFzZURpciA9IGF3YWl0IGdldFJlc3VsdHNEaXJlY3RvcnkoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgZGFtbiB0ZXN0XG4gICAgYXdhaXQgcnVuVGVzdChjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0gZ2V0UmVzdWx0cyhyZXN1bHRzQmFzZURpcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGlmIChyZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSAhPT0gJ09LJykge1xuICAgICAgICAvLyBJZiBub3QsIGxldCB0aGUgcGVvcGxlIGtub3cgYW5kIHRlcm1pbmF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5mYWlsdXJlKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUxpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiA9IChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0LCBsaWNlbnNlLCBub2RlcyA9IDEpID0+IHtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJyksIChsaW5lKSA9PiB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ2Vudmlyb25tZW50X25hbWUgPScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYGVudmlyb25tZW50X25hbWUgPSBcIiR7ZW52aXJvbm1lbnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgncHJvZHVjdHMgPSAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBwcm9kdWN0cyA9IFtcIiR7cHJvZHVjdH1cIl1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgJHtwcm9kdWN0fV9saWNlbnNlID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Byb2R1Y3R9X2xpY2Vuc2UgPSBcIiR7bGljZW5zZX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAke3Byb2R1Y3R9X3JlcGxpY2FfY291bnQgPWApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fcmVwbGljYV9jb3VudCA9ICR7bm9kZXN9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IGApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IFtcIi1EdXBtLnBsdWdpbi51cGxvYWQuZW5hYmxlZD10cnVlXCIsXCItRHBhc3N3b3JkLmNvbmZpcm1hdGlvbi5kaXNhYmxlZD10cnVlXCJdYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcudGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVtcHR5TGluZSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsLCBydW5UZXN0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0Q2x1c3RlclVSTCB9IGZyb20gJy4vZ2V0Q2x1c3RlclVSTCc7XG5pbXBvcnQgeyBnZXREdXJhdGlvbiB9IGZyb20gJy4vZ2V0RHVyYXRpb24nO1xuaW1wb3J0IHsgZ2V0Tm9kZU51bWJlckZvclN0YWdlIH0gZnJvbSAnLi9nZXROb2RlTnVtYmVyRm9yU3RhZ2UnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0cyB9IGZyb20gJy4vZ2V0UmVzdWx0cyc7XG5pbXBvcnQgeyBnZXRSZXN1bHRzRGlyZWN0b3J5IH0gZnJvbSAnLi9nZXRSZXN1bHRzRGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9nZXRSdW5Gb3JTdGFnZSc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwIH0gZnJvbSAnLi9pbnN0YWxsQXBwJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHJ1blNjYWxhYmlsaXR5VGVzdCA9IGFzeW5jIChzdGFnZSwgb3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgY29ycmVjdCBhbW91bnQgb2Ygbm9kZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhZ2VcbiAgICBjb25zdCBub2RlcyA9IGdldE5vZGVOdW1iZXJGb3JTdGFnZShzdGFnZSk7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgc2NhbGFiaWxpdHkgJHtzdGFnZX0gY2x1c3RlciB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSB0ZXN0IHJ1biB3YXMgbm90IHN1Y2Nlc3NmdWwsIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgaXQgd2l0aG91dCBhc2tpbmdcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLnJlYWR5Rm9yUHJvdmlzaW9uaW5nKTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBwcmVwYXJlIHRoZSBBV1MgZW52aXJvbm1lbnQgZm9yIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0aW5nLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgZW1wdHlMaW5lKCk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrIChvbmUtbm9kZSBjbHVzdGVyKVxuICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCBub2Rlcyk7XG4gICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuc3RhcnRTY2FsYWJpbGl0eVRlc3QpO1xuICAgIC8vIEdldCB0aGUgbG9hZCBiYWxhbmNlciBVUkwgZm9yIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgYXdhaXQgaW5zdGFsbEFwcChiYXNlVXJsLCBvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5hcHBMaWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBbGxvdyB1c2VycyB0byBzZXQgYSBkaWZmZXJlbnQgdGVzdCBkdXJhdGlvbiAoZm9yIHZhbGlkYXRpb24gcHVycG9zZXMpXG4gICAgY29uc3QgZHVyYXRpb24gPSBhd2FpdCBnZXREdXJhdGlvbihvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSB0ZXN0IGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgIGF3YWl0IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMucHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVzdWx0c0Jhc2VEaXIgPSBhd2FpdCBnZXRSZXN1bHRzRGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIGRhbW4gdGVzdFxuICAgIGF3YWl0IHJ1blRlc3QoY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEdldCB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcmVzdWx0cyA9IGdldFJlc3VsdHMocmVzdWx0c0Jhc2VEaXIpO1xuICAgIC8vIENoZWNrIGlmIHRoZSB0ZXN0IHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBpZiAocmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gIT09ICdPSycpIHtcbiAgICAgICAgLy8gSWYgbm90LCBsZXQgdGhlIHBlb3BsZSBrbm93IGFuZCB0ZXJtaW5hdGVcbiAgICAgICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuZmFpbHVyZShzdGFnZSwgY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3QgZmFpbGVkJyk7XG4gICAgfVxuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXN1bHRzLnBhdGgsIHJ1bk91dHB1dERpciwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgLy8gQ2VsZWJyYXRlIG91ciBzdWNjZXNzIVxuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLnN1Y2Nlc3MpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xufTtcbiIsImltcG9ydCB7IHBhc3N3b3JkIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFXU0NyZWRlbnRpYWxzID0gYXN5bmMgKHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgLy8gVHJ5IGdldHRpbmcgdGhlIEFXUyBjcmVkZW50aWFscyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgQVdTX0FDQ0VTU19LRVlfSUQsIEFXU19TRUNSRVRfQUNDRVNTX0tFWSB9ID0gcHJvY2Vzcy5lbnY7XG4gICAgLy8gSWYgdGhleSBleGlzdHMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCByZXR1cm4gdGhlbSBpbW1lZGlhdGVseVxuICAgIGlmIChBV1NfQUNDRVNTX0tFWV9JRCAmJiBBV1NfU0VDUkVUX0FDQ0VTU19LRVkpIHtcbiAgICAgICAgcmV0dXJuIFtBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBmb3IgdGhlbVxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gU2hvdyBhIG1lc3NhZ2UgYXNraW5nIG5pY2VseVxuICAgICAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yQVdTQ3JlZGVudGlhbHMocHJvZHVjdCkpO1xuICAgICAgICBjb25zdCBhd3NfYWNjZXNzX2tleV9pZCA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgQWNjZXNzIEtleSBJRGAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF3c19zZWNyZXRfYWNjZXNzX2tleSA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgU2VjcmV0IEFjY2VzcyBLZXlgLFxuICAgICAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGggPiAwXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIGFuZCB0aGUgY3JlZGVudGlhbHMgaGF2ZSBub3QgYmVlbiBmb3VuZCwgd2Ugc2hvdWxkIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVdTIGNyZWRlbnRpYWxzIGNvdWxkIG5vdCBiZSBmb3VuZC4gUGxlYXNlIHByb3ZpZGUgdGhlICdBV1NfQUNDRVNTX0tFWV9JRCcgYW5kICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknIGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xufTtcbiIsImltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgcGVyc2lzdEFXU0NyZWRlbnRpYWxzID0gKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSkgPT4ge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSwgYFxuIyBhd3NfZW52cyBmaWxlIHNob3VsZCBjb250YWluIEFXUyB2YXJpYWJsZXMgbmVlZGVkIGZvciBhdXRob3JpemF0aW9uICh3aXRob3V0IHF1b3RlcylcbkFXU19BQ0NFU1NfS0VZX0lEPSR7YXdzX2FjY2Vzc19rZXlfaWR9XG5BV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHthd3Nfc2VjcmV0X2FjY2Vzc19rZXl9XG5gLnRyaW0oKSwgJ3V0Zi04Jyk7XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkKTtcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUxpbmUsIFRlYXJkb3duIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgdGVybWluYXRlIH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCB0ZWFyZG93bkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgbmljZSBsaXR0bGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coVGVhcmRvd24uaGVhZGVyKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBwcm9wZXIgZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoZGlyZWN0b3J5LCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgaWYgdGhleSBhcmUgcmVhZHkgdG8gc2F5IGdvb2RieWUgdG8gdGhlaXIgY2x1c3RlclxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgZW1wdHlMaW5lKCk7XG4gICAgLy8gVGVybWluYXRlIGl0IVxuICAgIGF3YWl0IHRlcm1pbmF0ZShvcHRpb25zLmN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIHRvIHF1aXQgdGhlIHByb2dyYW1cbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBleGl0Li4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdmVyc2lvbnMgZnJvbSAnLi4vLi4vYXNzZXRzL3ZlcnNpb25zLmpzb24nO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyA9IHouZW51bShbXG4gICAgJ3Bvc3RncmVzcWwnLFxuICAgICdteXNxbCcsXG4gICAgJ21zc3FsJ1xuXSk7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkTVNTUUxFZGl0aW9ucyA9IHouZW51bShbXG4gICAgJ0RldmVsb3BlcicsXG4gICAgJ0V4cHJlc3MnLFxuICAgICdTdGFuZGFyZCcsXG4gICAgJ0VudGVycHJpc2UnLFxuICAgICdFbnRlcnByaXNlQ29yZSdcbl0pO1xuZXhwb3J0IGNvbnN0IERhdGFiYXNlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMsXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLFxuICAgIGRhdGFiYXNlOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIGNsZWFuOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBwcnVuZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgdmVyYm9zZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpXG59KTtcbmV4cG9ydCBjb25zdCBQb3N0Z3JlU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoNTQzMiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKS5kZWZhdWx0KCdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTXlTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgzMzA2KSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpLmRlZmF1bHQoJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNU1NRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGVkaXRpb246IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMuZGVmYXVsdCgnRGV2ZWxvcGVyJyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMTQzMyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ3NhJykuZGVmYXVsdCgnc2EnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdEYXRhQ2VudGVyRFghJyksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpLmRlZmF1bHQoJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJylcbn0pO1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgfSBmcm9tICcuL0RhdGFiYXNlJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgPSB6LmVudW0oW1xuICAgICdqaXJhJyxcbiAgICAnY29uZmx1ZW5jZScsXG4gICAgJ2JpdGJ1Y2tldCcsXG4gICAgJ2JhbWJvbydcbl0pO1xuZXhwb3J0IGNvbnN0IEFwcGxpY2F0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgdGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGRhdGFiYXNlOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuZGVmYXVsdCgncG9zdGdyZXNxbCcpLFxuICAgIGRhdGFiYXNlVGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKS5kZWZhdWx0KCc4MCcpLFxuICAgIGNvbnRleHRQYXRoOiB6LnN0cmluZygpLFxuICAgIHhtczogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHhteDogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHdhdGNoOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBleHQ6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgaW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHouc3RyaW5nKCksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkZWJ1Zzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGNvbnRleHRQYXRoOiB0cnVlLFxuICAgIGV4dDogdHJ1ZSxcbiAgICBpbnN0YWxsOiB0cnVlLFxuICAgIG91dHB1dERpcmVjdG9yeTogdHJ1ZSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB0cnVlLFxuICAgIGN3ZDogdHJ1ZVxufSk7XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyB9IGZyb20gJy4vQXBwbGljYXRpb24nO1xuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlVGVzdFR5cGVzID0gei5lbnVtKFtcbiAgICAnYmFzZWxpbmUnLFxuICAgICdyZWdyZXNzaW9uJ1xuXSk7XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHlUZXN0VHlwZXMgPSB6LmVudW0oW1xuICAgICdvbmUtbm9kZScsXG4gICAgJ3R3by1ub2RlJyxcbiAgICAnZm91ci1ub2RlJ1xuXSk7XG5leHBvcnQgY29uc3QgVGVzdFJlc3VsdHMgPSB6LmVudW0oW1xuICAgICdwYXRoJyxcbiAgICAnU3VtbWFyeSBydW4gc3RhdHVzJyxcbiAgICAnQXBwbGljYXRpb24gbm9kZXMgY291bnQnLFxuICAgICdGaW5pc2hlZCcsXG4gICAgJ0NvbXBsaWFudCcsXG4gICAgJ1N1Y2Nlc3MnLFxuICAgICdIYXMgYXBwLXNwZWNpZmljIGFjdGlvbnMnXG5dKTtcbmV4cG9ydCBjb25zdCBSZXBvcnRUeXBlcyA9IHouZW51bShbXG4gICAgJ3BlcmZvcm1hbmNlJyxcbiAgICAnc2NhbGFiaWxpdHknXG5dKTtcbmV4cG9ydCBjb25zdCBBUFRSZXBvcnRBcmdzID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IFJlcG9ydFR5cGVzLFxuICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFByb3Zpc2lvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBlbnZpcm9ubWVudDogdHJ1ZSxcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICB0aW1lc3RhbXA6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0TWVzc2FnZXMgPSB6Lm9iamVjdCh7XG4gICAgaGVhZGVyOiB6LmZ1bmN0aW9uKCkuYXJncyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMpLnJldHVybnMoei5zdHJpbmcoKSksXG4gICAgc3RhcnRQZXJmb3JtYW5jZVRlc3Q6IHouc3RyaW5nKCksXG4gICAgc3RhcnRMdWNlbmVJbmRleGluZzogei5zdHJpbmcoKSxcbiAgICBzdWNjZXNzOiB6LnN0cmluZygpLFxuICAgIGZhaWx1cmU6IHouZnVuY3Rpb24oKS5hcmdzKHouc3RyaW5nKCksIFN1cHBvcnRlZEFwcGxpY2F0aW9ucywgei5zdHJpbmcoKSwgei5zdHJpbmcoKSwgei5yZWNvcmQoVGVzdFJlc3VsdHMsIHouc3RyaW5nKCkub3Ioei51bmRlZmluZWQoKSkpKVxufSkucGFydGlhbCh7XG4gICAgc3RhcnRMdWNlbmVJbmRleGluZzogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VSZXBvcnRPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpLFxufSkucGFydGlhbCh7XG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzID0gei5vYmplY3Qoe1xuICAgIGhlYWRlcjogei5mdW5jdGlvbigpLmFyZ3MoU3VwcG9ydGVkQXBwbGljYXRpb25zLCBTY2FsYWJpbGl0eVRlc3RUeXBlcykucmV0dXJucyh6LnN0cmluZygpKSxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogei5zdHJpbmcoKSxcbiAgICBzdGFydFNjYWxhYmlsaXR5VGVzdDogei5zdHJpbmcoKSxcbiAgICBzdWNjZXNzOiB6LnN0cmluZygpLFxuICAgIGZhaWx1cmU6IHouZnVuY3Rpb24oKS5hcmdzKFNjYWxhYmlsaXR5VGVzdFR5cGVzLCB6LnN0cmluZygpLCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIHouc3RyaW5nKCksIHouc3RyaW5nKCksIHoucmVjb3JkKFRlc3RSZXN1bHRzLCB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpKSlcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bkFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogei5zdHJpbmcoKSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVEFyZ3MgPSB6LmludGVyc2VjdGlvbihBUFRQcm92aXNpb25PcHRpb25zLCBBUFRQZXJmb3JtYW5jZVRlc3RBcmdzLCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzKTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEVudmlyb25tZW50TmFtZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yRW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBFbnZpcm9ubWVudCBuYW1lYCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0SG9zdExpY2Vuc2UgPSAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVib21iW3Byb2R1Y3RdO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yTGljZW5zZSk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYExpY2Vuc2VgLFxuICAgICAgICBkZWZhdWx0OiB0aW1lYm9tYltwcm9kdWN0XSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldEVudmlyb25tZW50TmFtZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lJztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vaGVscGVycy9nZXRIb3N0TGljZW5zZSc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwcm92aXNpb25DbHVzdGVyID0gYXN5bmMgKG9wdGlvbnMsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikgPT4ge1xuICAgIC8vIFNob3cgdGhlIHByb3Zpc2lvbmluZyB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuaGVhZGVyKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBwcm9wZXIgZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBlbnZpcm9ubWVudCBuYW1lXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBvcHRpb25zLmVudmlyb25tZW50IHx8IGF3YWl0IGdldEVudmlyb25tZW50TmFtZSgpO1xuICAgIC8vIEFzayBmb3IgdGhlIGxpY2Vuc2VcbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgZ2V0SG9zdExpY2Vuc2Uob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBMZXQncyBkbyB0aGlzXG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLnJlYWR5KTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBzdGFydCBwcm92aXNpb25nIHRoZSBBV1MgZW52aXJvbm1lbnQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhkaXJlY3RvcnksIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlza1xuICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbihkaXJlY3RvcnksIGVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QsIGxpY2Vuc2UpO1xuICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICBhd2FpdCBpbnN0YWxsKGRpcmVjdG9yeSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUmV0dXJuIGFsbCB0aGUgcXVlc3Rpb25zIHdlIGFza2VkIHRoZSB1c2VyIGZvciB1c2UgaW4gb3RoZXIgc3RlcHNcbiAgICByZXR1cm4ge1xuICAgICAgICBjd2Q6IGRpcmVjdG9yeSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgIGxpY2Vuc2VcbiAgICB9O1xufTtcbiIsImltcG9ydCB7IFBlcmZvcm1hbmNlVGVzdFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvRENBUFQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4vaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0JztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4vaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4vaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4vaGVscGVycy9ydW5QZXJmb3JtYW5jZVRlc3QnO1xuaW1wb3J0IHsgUnVuMSwgUnVuMiB9IGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy50aW1lc3RhbXApO1xuICAgIC8vIFByb3Zpc2lvbiB0aGUgY2x1c3RlclxuICAgIGNvbnN0IHsgY3dkLCBlbnZpcm9ubWVudCwgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIHRydWUpO1xuICAgIC8vIFJ1biB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2UgdGVzdFxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMuYmFzZWxpbmUsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgUnVuMSk7XG4gICAgLy8gUnVuIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgUnVuMik7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHBlcmZvcm1hbmNlIHJlcG9ydFxuICAgIGF3YWl0IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQoe1xuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuU2NhbGFiaWxpdHlUZXN0IH0gZnJvbSAnLi9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdCc7XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHkgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIEdldCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IG91dHB1dERpciA9IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLnRpbWVzdGFtcCk7XG4gICAgLy8gUHJvdmlzaW9uIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgeyBjd2QsIGVudmlyb25tZW50LCBsaWNlbnNlIH0gPSBhd2FpdCBwcm92aXNpb25DbHVzdGVyKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBmYWxzZSk7XG4gICAgLy8gUnVuIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IHdpdGggYSBvbmUtbm9kZSBjbHVzdGVyXG4gICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdvbmUtbm9kZScsIHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIHR3by1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ3R3by1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xuICAgIC8vIFJ1biB0aGUgc2NhbGFiaWxpdHkgdGVzdCB3aXRoIGEgb25lLW5vZGUgY2x1c3RlclxuICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnZm91ci1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnRcbiAgICBhd2FpdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0KHtcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgYXN5bmNFeGl0SG9vaywgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkhhbmRsZXIgPSBhc3luYyAocHJvZ3JhbSwgeyBhY3Rpb24sIGVycm9ySGFuZGxlciB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgb3BzID0gb3B0aW9ucyB8fCBwcm9ncmFtLm9wdHMoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgYXN5bmNFeGl0SG9vayhhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlcnJvckhhbmRsZXIob3BzKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmVqZWN0aW5nIHRoZSBwcm9taXNlIHRvIGF2b2lkIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBcIkNhbGxpbmcgcHJvY2Vzcy5leGl0XCIgbG9nIG1lc3NhZ2UgZnJvbSBleGl0LWhvb2tcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycjtcbiAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHdhaXQ6IDYwICogMSAqIDEwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbihvcHMpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5pc3N1ZXMuZm9yRWFjaChpc3N1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgVW5hYmxlIHRvIHBhcnNlIG9wdGlvbiAke2lzc3VlLnBhdGguam9pbignLCcpfTogJHtpc3N1ZS5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVyci50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDEpO1xuICAgICAgICB9KTtcbiAgICB9KS5jYXRjaChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLFxuICAgICAgICAgICAgLy8gd2UgY2FuIGFzc3VtZSBhIGNsZWFuIGV4aXRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFByb2R1Y3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZXRQcm9kdWN0JztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdCc7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5TY2FsYWJpbGl0eVRlc3QnO1xuaW1wb3J0IHsgdGVhcmRvd25DbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9hcHQvaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IGVtcHR5TGluZSwgZ2VuZXJpYywgaW5pdCwgUnVuMSwgUnVuMiB9IGZyb20gJy4uL2FwdC9tZXNzYWdlcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZSB9IGZyb20gJy4uL2FwdC9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eSB9IGZyb20gJy4uL2FwdC9zY2FsYWJpbGl0eSc7XG5pbXBvcnQgeyBBY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vaGVscGVycy9BY3Rpb25IYW5kbGVyJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuLi90eXBlcy9BcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBSZXBvcnRUeXBlcyB9IGZyb20gJy4uL3R5cGVzL0RDQVBUJztcbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZGVyKCk7XG5jb25zdCBEZWZhdWx0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBDbGVhciB0aGUgY29uc29sZSBhbmQgc2hvdyBhIHdlbGNvbWUgbWVzc2FnZVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFx4MUJjJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdlbmVyaWMuaGVhZGVyKTtcbiAgICAgICAgLy8gR2V0IHRoZSBwcm9kdWN0IGZyb20gdGhlIGFyZ3Mgb3IgYXNrIGZvciBpdCBuaWNlbHlcbiAgICAgICAgY29uc3QgcHJvZHVjdCA9IG9wdGlvbnMucHJvZHVjdCB8fCBhd2FpdCBnZXRQcm9kdWN0KCk7XG4gICAgICAgIC8vIFNob3cgdGhlIGluaXQgbWVzc2FnZVxuICAgICAgICBjb25zb2xlLmxvZyhpbml0LmhlYWRlcihwcm9kdWN0KSk7XG4gICAgICAgIC8vIEFzayBmb3IgdGhlIHVzZXIgdG8gY29uZmlybSB0aGV5IGFyZSByZWFkeVxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBzdGFydCB3aXRoIHRoZSBmaXJzdCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAvLyBTdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZ1xuICAgICAgICBhd2FpdCBQZXJmb3JtYW5jZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUmVwb3J0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAncGVyZm9ybWFuY2UnKSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0KHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0KHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPIGltcHJvdmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfVxufSk7XG5jb25zdCBQZXJmb3JtYW5jZVRlc3RDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFBlcmZvcm1hbmNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPIGltcHJvdmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfVxufSk7XG5jb25zdCBSdW4xQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoJ2Jhc2VsaW5lJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICB9LCBSdW4xKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuMkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KCdiYXNlbGluZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLnRpbWVzdGFtcClcbiAgICAgICAgfSwgUnVuMik7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFNjYWxhYmlsaXR5VGVzdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE8gaW1wcm92ZSBlcnJvciBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjNDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnb25lLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgndHdvLW5vZGUnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjVDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnZm91ci1ub2RlJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IHRpbWVib21iW29wdGlvbnMucHJvZHVjdF0sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBUZWFyZG93bkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggYXB0JylcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKHRydWUpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdkZWZhdWx0JywgeyBpc0RlZmF1bHQ6IHRydWUsIGhpZGRlbjogdHJ1ZSB9KVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBEZWZhdWx0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3BlcmZvcm1hbmNlJylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBQZXJmb3JtYW5jZVRlc3RDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgnc2NhbGFiaWxpdHknKVxuICAgIC5kZXNjcmlwdGlvbignUnVuIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBzY2FsYWJpbGl0eSB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBTY2FsYWJpbGl0eVRlc3RDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncmVwb3J0JylcbiAgICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIGEgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgcmVwb3J0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHlwZSA8dHlwZT4nLCAnVGhlIHR5cGUgb2YgcmVwb3J0IHRvIGdlbmVyYXRlJykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFJlcG9ydFR5cGVzLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSZXBvcnRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMScpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0IChydW4gMSknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuMUNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4yJylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbnRpbnVlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyB3aXRoIHJ1biAyJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjJDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMycpXG4gICAgLmRlc2NyaXB0aW9uKCdDb250aW51ZSB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3Rpbmcgd2l0aCBydW4gMycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW4zQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjQnKVxuICAgIC5kZXNjcmlwdGlvbignQ29udGludWUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHdpdGggcnVuIDQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuNENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW41JylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbnRpbnVlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyB3aXRoIHJ1biA1JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjVDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgndGVhcmRvd24nKVxuICAgIC5kZXNjcmlwdGlvbignVGVybWluYXRlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFRlYXJkb3duQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KS5jYXRjaCgoKSA9PiBncmFjZWZ1bEV4aXQoMSkpO1xucHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBSZWNlaXZlZCB0ZXJtIHNpZ25hbCwgdHJ5aW5nIHRvIHN0b3AgZ3JhY2VmdWxseSDwn5KqYCk7XG4gICAgZ3JhY2VmdWxFeGl0KCk7XG59KTtcbiJdLCJuYW1lcyI6WyJjd2QiLCJwd2QiLCJwcm9ncmVzc0JhciIsIkNvbW1hbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7QUNBNUUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQUssS0FBSztBQUNoRCxJQUFJLFFBQVEsS0FBSztBQUNqQixRQUFRLEtBQUssVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuQyxLQUFLO0FBQ0wsQ0FBQzs7QUNOTSxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssS0FBSztBQUN6QyxJQUFJLFFBQVEsS0FBSztBQUNqQixRQUFRLEtBQUssVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
11209
|
+
//# 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/YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbXVzdCBjbG9uZSBpdCBmcm9tIEdpdGh1Yiwgd2Ugc2hvdWxkIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBpZiAobXVzdENsb25lQVBUKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2ltcGxlR2l0KCkuY2xvbmUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQuZ2l0JywgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG5lZWRzIHRvIGJlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIChmb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nKVxuICAgICAgICBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0RlZmF1bHRDb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBjb25maXJtIHRoYXQgdGhlIGNob3NlbiBkaXJlY3RvcnkgaXMgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgRENBUFQgKG1hc3RlciBicmFuY2gpJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIG1hc3RlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseS4uLlxuICAgICAgICAgICAgY29uc3QgaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBoYXMgYSBEQ0FQVCBpbnN0YWxsYXRpb24gd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gLi4uYnV0IGFsc28sIE5vIGlzIG5vdCBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmICghaXNBcHBTcGVjaWZpY0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGhhdmUgYXBwLXNwZWNpZmljIGFjdGlvbnMgaW4gb3JkZXIgdG8gY29udGludWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIHJlc3VsdCB0byB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5XG4gICAgICAgIHJlc3VsdCA9IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB3ZSB3aWxsIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgfVxuICAgIGVsc2UgaWYgKG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY3dkLmVuZHNXaXRoKCcuZGNkeC9kY2FwdCcpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjd2R9YCk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIHJldHVybiBjd2Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBlbnN1cmUgYSBmcmVzaCBub24tcGVyc2lzdGVudCBjaGVja291dFxuICAgICAgICByZXN1bHQgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2RjYXB0Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgIEluc3RhbGxpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIERDQVBUIGZyb20gc291cmNlIChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHR9YCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIHJtU3luYyhyZXN1bHQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgLy8gUmV0cmlldmUgRENBUFQgZnJvbSBnaXRodWJcbiAgICAgICAgYXdhaXQgc2ltcGxlR2l0KCkuY2xvbmUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQuZ2l0JywgcmVzdWx0KTtcbiAgICAgICAgY29uc29sZS5sb2coJ+KclCBGaW5pc2hlZCBpbnN0YWxsaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBEQ0FQVCBmcm9tIHNvdXJjZSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSBhbmQgd2UgbmVlZCB0byB1c2UgYXBwIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIG1ha2Ugc3VyZSB0aGF0IGl0IGV4aXN0c1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIERDQVBUIGRpcmVjdG9yeSwgd2UgY2Fubm90IGNvbnRpbnVlXG4gICAgICAgIGlmICghaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICR7Y3dkfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCcgIFVzaW5nIERDQVBUIGZyb20gY3VycmVudCBkaXJlY3RvcnkgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N3ZH1gKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIHJlc3VsdCA9IGN3ZDtcbiAgICB9XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IG9jY3VyLCBiZWNhdXNlIGVpdGhlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgRENBUFRcbiAgICAvLyBvciB3ZSBoYXZlIGNsb25lZCBpdCBpbnRvIGEgKG5ldykgZGlyZWN0b3J5LiBUaGlzIGlzIG1lcmVseSBhIGNoZWNrIGZvciBpZiB0aGUgbGF0dGVyIGZhaWxlZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgfVxuICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGluIGEgdmFsaWQgRENBUFQgZGlyZWN0b3J5XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSk7XG4gICAgY29uc3QgaGFzU25hcHNob3RKU09OID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpKTtcbiAgICBjb25zdCBoYXNUZXJyYWZvcm1WYXJpYWJsZXMgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICBpZiAoIWhhc0VudkZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2F3c19lbnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzU25hcHNob3RKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC1zbmFwc2hvdHMuanNvbicgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNUZXJyYWZvcm1WYXJpYWJsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LnRmdmFycycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVwb3J0ID0gKGJhc2VEaXIsIHR5cGUpID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVwb3J0IHN1bW1hcnkgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGJhc2VEaXIgYWxyZWFkeSBjb250YWlucyB0aGUgcmVwb3J0XG4gICAgY29uc3Qgc3VtbWFyeUZpbGVOYW1lID0gdHlwZSA9PT0gJ3BlcmZvcm1hbmNlJyA/ICdwZXJmb3JtYW5jZV9wcm9maWxlX3N1bW1hcnkubG9nJyA6ICdzY2FsZV9wcm9maWxlX3N1bW1hcnkubG9nJztcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBzdW1tYXJ5RmlsZU5hbWUpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciByZXBvcnQgZGlyZWN0b3J5XG4gICAgICAgIHJlYWRkaXJTeW5jKGJhc2VEaXIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGFyZSBkaXJlY3RvcnksIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xuICAgICAgICAgICAgaWYgKHJlc3VsdHNEaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoam9pbihiYXNlRGlyLCBpdGVtKSk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGEgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgc3VtbWFyeUZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSByZXBvcnQgZGlyZWN0b3J5LCBhbmQgaWYgbm90IHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIGlmIChyZXN1bHRzRGlyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVwb3J0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c0Rpcjtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydERpcmVjdG9yeSA9IGFzeW5jIChjd2QsIGZvcmNlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXN1bHRzJywgJ3JlcG9ydHMnKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXBvcnRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVwb3J0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVwb3J0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVwb3J0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlcG9ydCBjYW4gb25seSBiZSBnZW5lcmF0ZWQgaWYgYWxsIHByZXZpb3VzIHJlcG9ydHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlcG9ydHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlcG9ydHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBQcmVzc1RvQ29udGludWVQcm9tcHQgZnJvbSAnaW5xdWlyZXItcHJlc3MtdG8tY29udGludWUnO1xuaW5xdWlyZXIucmVnaXN0ZXJQcm9tcHQoJ3ByZXNzLXRvLWNvbnRpbnVlJywgUHJlc3NUb0NvbnRpbnVlUHJvbXB0KTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yVXNlcklucHV0ID0gYXN5bmMgKG1lc3NhZ2UsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICB0eXBlOiAncHJlc3MtdG8tY29udGludWUnLFxuICAgICAgICBhbnlLZXk6IHRydWUsXG4gICAgICAgIHByZXNzVG9Db250aW51ZU1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHdoZW46ICFmb3JjZVxuICAgIH0pO1xuICAgIHJldHVybiBrZXkgfHwgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnkgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGVtcHR5TGluZSwgUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHJlZ3Jlc3Npb25SZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSBhbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgLy8gdG8gdGhlIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGhvdXQgYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMSdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMidcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gYmFjayBpbnRvIFlBTUxcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ2lmeShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBwZXJmb3JtYW5jZV9wcm9maWxlLnltbCBmaWxlIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjpcblxuJHtvdXRwdXR9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke3ltbEZpbGVQYXRofVxuYCk7XG4gICAgICAgICAgICAvLyBHaXZlIHRoZSB1c2VyIGEgbW9tZW50IHRvIHByb2Nlc3MgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFkanVzdGVkIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHltbEZpbGVQYXRoLCBvdXRwdXQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZy4gQWJvcnQgYWJvcnQgYWJvcnQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlcG9ydCBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXBvcnRCYXNlRGlyID0gYXdhaXQgZ2V0UmVwb3J0RGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIGFjdHVhbCByZXBvcnRcbiAgICBhd2FpdCByZWdyZXNzaW9uUmVwb3J0KGN3ZCwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjEnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjInKSk7XG4gICAgLy8gR2V0IHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVwb3J0RGlyID0gZ2V0UmVwb3J0KHJlcG9ydEJhc2VEaXIsICdwZXJmb3JtYW5jZScpO1xuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXBvcnREaXIsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdwZXJmb3JtYW5jZV9wcm9maWxlJyksIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBzY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJlcG9ydCB9IGZyb20gJy4vZ2V0UmVwb3J0JztcbmltcG9ydCB7IGdldFJlcG9ydERpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVwb3J0RGlyZWN0b3J5JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMuaGVhZGVyKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3NjYWxlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IG91dHB1dCBkaXJlY3RvcmllcyB0byB0aGUgcmVwb3J0IGdlbmVyYXRvciBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnJ1bnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICBydW5OYW1lOiAnMSBOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMydcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICcyIE5vZGVzJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6ICcvcmVzdWx0cy9ydW40J1xuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzQgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnZXhwZXJpbWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9yZXN1bHRzL3J1bjUnXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGUgc2NhbGVfcHJvZmlsZS55bWwgZmlsZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb246XG5cbiR7b3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBzY2FsYWJpbGl0eSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGdlbmVyYXRpb24gY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlcG9ydEJhc2VEaXIgPSBhd2FpdCBnZXRSZXBvcnREaXJlY3RvcnkoY3dkLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgYWN0dWFsIHJlcG9ydFxuICAgIGF3YWl0IHNjYWxhYmlsaXR5UmVwb3J0KGN3ZCwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjMnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjQnKSwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3J1bjUnKSk7XG4gICAgLy8gR2V0IHRoZSByZXBvcnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVwb3J0RGlyID0gZ2V0UmVwb3J0KHJlcG9ydEJhc2VEaXIsICdzY2FsYWJpbGl0eScpO1xuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgYXdhaXQgbW92ZShyZXBvcnREaXIsIGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsICdzY2FsZV9wcm9maWxlJyksIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufTtcbiIsImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0T3V0cHV0RGlyZWN0b3J5ID0gKGN3ZCwgdGltZXN0YW1wKSA9PiB7XG4gICAgLy8gQ3JlYXRlIHRoZSB0ZXN0IHJ1biBJRCAodXNlZCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSlcbiAgICBjb25zdCBydW5JZCA9IHRpbWVzdGFtcCB8fCBmb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0nKTtcbiAgICAvLyBFaXRoZXIgdXNlIHRoZSBwcm92aWRlZCBvdXRwdXQgZGlyZWN0b3J5LCBvciBkZWZhdWx0IHRvIHRoZSBob21lIGRpcmVjdG9yeVxuICAgIGNvbnN0IGJhc2VEaXIgPSBjd2QgfHwgam9pbihob21lZGlyKCksICcuZGNkeCcsICdhcHQnKTtcbiAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICByZXR1cm4gam9pbihiYXNlRGlyLCBydW5JZCk7XG59O1xuIiwiaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGNvbnN0IGdldFByb2R1Y3QgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIHNlbGVjdCh7XG4gICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY2hvb3NlIHRoZSBwcm9kdWN0IGZvciB3aGljaCB5b3Ugd2lzaCB0byBydW4gRENBUFRgLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdKaXJhJywgdmFsdWU6ICdqaXJhJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQ29uZmx1ZW5jZScsIHZhbHVlOiAnY29uZmx1ZW5jZScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JhbWJvbycsIHZhbHVlOiAnYmFtYm9vJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQml0YnVja2V0JywgdmFsdWU6ICdiaXRidWNrZXQnIH1cbiAgICAgICAgXVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHBhc3N3b3JkIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFXU0NyZWRlbnRpYWxzID0gYXN5bmMgKHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgLy8gVHJ5IGdldHRpbmcgdGhlIEFXUyBjcmVkZW50aWFscyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgQVdTX0FDQ0VTU19LRVlfSUQsIEFXU19TRUNSRVRfQUNDRVNTX0tFWSB9ID0gcHJvY2Vzcy5lbnY7XG4gICAgLy8gSWYgdGhleSBleGlzdHMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCByZXR1cm4gdGhlbSBpbW1lZGlhdGVseVxuICAgIGlmIChBV1NfQUNDRVNTX0tFWV9JRCAmJiBBV1NfU0VDUkVUX0FDQ0VTU19LRVkpIHtcbiAgICAgICAgcmV0dXJuIFtBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBmb3IgdGhlbVxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gU2hvdyBhIG1lc3NhZ2UgYXNraW5nIG5pY2VseVxuICAgICAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yQVdTQ3JlZGVudGlhbHMocHJvZHVjdCkpO1xuICAgICAgICBjb25zdCBhd3NfYWNjZXNzX2tleV9pZCA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgQWNjZXNzIEtleSBJRGAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF3c19zZWNyZXRfYWNjZXNzX2tleSA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgU2VjcmV0IEFjY2VzcyBLZXlgLFxuICAgICAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGggPiAwXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIGFuZCB0aGUgY3JlZGVudGlhbHMgaGF2ZSBub3QgYmVlbiBmb3VuZCwgd2Ugc2hvdWxkIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVdTIGNyZWRlbnRpYWxzIGNvdWxkIG5vdCBiZSBmb3VuZC4gUGxlYXNlIHByb3ZpZGUgdGhlICdBV1NfQUNDRVNTX0tFWV9JRCcgYW5kICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknIGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xufTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEVudmlyb25tZW50TmFtZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yRW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBFbnZpcm9ubWVudCBuYW1lYCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJleHBvcnQgY29uc3QgdGltZWJvbWIgPSB7XG4gICAgJ2ppcmEnOiAnQUFBQ0JBME9EQW9QZU5wOWtsMXYyakFVaHUveks0NjBPeVFIU0x1VklrVWFUYndOVkJLVWhFbmJ1Z3NURHVBMnNTUGJnYkZmUHhPQzFpKzR5RVhPNSt2blBSK3lHaUdTVy9DdW9YYzd2Qm9NdlQ0RU5BT3Y1L1djdFVJVUcxbFZxTng3bnFQUVNKZmNjQ2w4R21VMG1TWGpsRHBSWFM1UXhhdTVScVY5MG5jQ0tRekxUY1JLOUV1OTQ0SXAvY1EvTTFNd3JUa1RiaTVMWjFhcmZNTTBoc3lnNy9YNkE5THZFODl6MmozWnZzSm1RQkJQcHpRSnhxUDdVNHIrcWJqYU4zMnpHKy9iYVIyZE1sNmMzNWVpMnFJYWgvNGR2YUhrT3Z6cGtVL3g1SVo4dmJvZE9JOWNNYmRTY2xubnhqMzhFQzFYWnNjVXVuWXkzNkp2VkkzT3hHWm1iWlhkendJVTVsVkpXaTkwcm5qVlFHb2k3MEI4NzNHTmhQT1FPNTFPRkdma1M1eVFXUktIOHlBYnh4R1pwOVFtL0VDaHBiR0V4UjdNQnFHZEFsVGtjb2tLN01NZU1UZndhMk5NOVREc2R0ZlNmUUduV3h3N0NCNDdmcnNRU2hEU3dKSnJvL2lpTm1nbmN3MUdRbDVySTB0cnRldFk0c0tnWUNKL1k0cVZGU1IwbE5HUTNQMDRhRHhyVEt2V09qTVhUMEx1eENVMzN0eGFTaVBmZnVSanIzZnNPL21DNm9nL1Ztc211R1lOMElqOTNURlljVlh1blFhYURiNCt3SmJGZDd2ZzBPSTVJZjUzTkVOdG9LMkFsVlF3R1NjalNGdDVscmpkV3ltdThXRUlnU3d0cHB5ekFzTGd4Ums4UDVoRzlQTUEzYktpUHNwZHNVTGpKUndYN3VrZjUvTlg3VEF0QWhVQWhRU0h6OURneWNPWDd3Y3dFUk1KYjNUTEdiNENGR2tCL3hVV1NSSzNCWkxyUEY5Um42Wm1yVXFKWDAyb2MnLFxuICAgICdjb25mbHVlbmNlJzogJ0FBQUN6ZzBPREFvUGVOcDlWTzl2MmpBUS9aNi93dEsrSVlXR3NFS0hGR21RbUphdS9HZ0ltOWlZSmhNT1lwcllrZTFBNGErZlNjaEdLdHFQUHZ2ZXZYdjN6cC82Z3FMSExFYjJIYktzVHZOenA5bEM5OE1BMlpiZE5LWWdkaUFHbnRQRFEyejY4OEhjZEgvYU03UDVvMmtaVHpRRUppRTRwREFpQ1RnQm5nYUQwYjBSQ3I1ZjFTOXVIZmNVV1hTUUJ6dUllUXJDQ0RsYjEwbW82QTRjSlRMUVNWbElsekZVZ2dwSThpY2tNYkFWRWJJK3lwSWxpUEc2UjVJbDV6NGtYRUYzQTB4SnAxR3l3YThwRlFlUEtIQW1EZHQ2K0E5Y0pWUUVLNXlXbWhNVjhIR1pMUldrd3JGOFBaTWdwR1BmR2g3SVVOQlVVYzZjQUtSQ2NWRVlyYmxBYVp4dEtFT3JzcWo4Vi9VUzg1enhYZCtmVUd3RDcwaWNrUnd5ZjdBUkFDemlxVVlvKzhJcm10L2pVWUQ5aVQrWVltTklLRlBBQ0F1dnlISWFRRVVTSFlnejBHOHJvcmdDOHJwNXF2YUVaVnAzcHQwdThzdmUzVGlUQ3NTSXIwQTZsbEdyMVZ3ZmR3UHNtYjI1UGpqYlZ3cTJFY1pjbTZuUzZES1grSTNpVDF5UC9DeTQyVEJlNEZBSzBXaFpWdHU2YXpZYlplWmxCMFUyd3JwbmtRb3FxNDBVeXN0NjdScUI5elU4azY0b2xZZXFLbkdtTkN6V2lzZU9Vb0t3aExMb0sxRXhrWklTVmc5NWNyM1pOL1lxZHVlU1lXNjQ5L21kcmZKQVpPUU0zYjNiOTZEUnVoVmszMjYxa2tGdmV4d2U0MVVRdEpOMTJ1NUd6NkdjUFQ3UG43MUg3MHQ2OUNQY2J4L2E5cmNqM3JEdXdsazR4cHJLQ0E1Vk4rb0pqc2FCMlIvNzVzUWZlek0zR0l4SDVteUtUNlBOL1FFcnREd2dGUUU2RTlWRENMVVp0TjhGMzBLbzBLOUlxWFRSdWJuWjhIcEZsWnR6QXlZVUdiL3J5T09JY1lWV1ZDcEJsNWtDalV3bFVoeUYybVk4MFdhb1h4ZHpFaE9XZTJZc05vUlJXV3hNdDZ4WC9oSDZQNXV4RjhiM3JMSklsejFMcFFXOTVwUVB2cWZMcTBrbXdvaEllTHMybDlQTXpmUTQ4THZ2V1RiZk1ZMUFYRGc5S0pETENWMkM5SFVNSCtDYUpmT2Z1ZGkvdjBrSUdWc3dMQUlVRU1ROVg3N2dxR0JkZkgwSEl6QmFWOE5hZFBVQ0ZCbitSaVVBNEQrSXFWUXBUVG91TFZZNjZhQ0dYMDIxMjEnLFxuICAgICdiaXRidWNrZXQnOiAnQUFBQm1nME9EQW9QZU5wOVVsMXYwekFVZmMrdnNNUmJKYWRKdGpHcFVpUzJKSlJPTk9sYUI0U0FCOWU5VzB4VHU3SnZDdjMzZUltRE9vUjR2ZWZlNC9QaE41OWhSNWJja1BpV1JOZXpLSjVGQ1prdkdVbWlKQTR5clpBTExQa0JVckhYb3RFbnU1ZUJSVzZiOEtNVW9DeXc4eEg2QlZaczJLS2NlM1RKcFVKUVhBa29maDJsT2VjY0lWMWRmUmhKQzdmUlhySnV3SnpBTFBMMC9xRitwSTlYR2FQeit1R0dzcHZia2RSeDhBd2NyMG5SZE9DbmxYbm1TbHFPVXF2MERsdHVyZVRLZzZ2T2lJWmI2SjlQb3ZpYVJtOXBISHMwTTlDZi9SdjFEdi9TUDVsTXlvclI5OVdhcnRaVlhtZHNVWlcwM2hRT1NIdENGK24yVExBQjRobElvWVRlZ1NGSG8zK0FRUEsxUVR4K20wMm56enJrbytKUTZNTzBIUzRvREJmZlE1SnJvalNTbmJSbzVMWkRjTXpTRXRSRWRCYjFBWXdOUnpzWGZmMEpnakN3TGpHLzRtQjVnaUUrSnpoYkYzZXN5T245bHhmMUYyMTQ1YTZPV3UyVi9xbUMvMmRWZG9jdG1PcXB0azVQR2lkK1hKeDQydzNOUFBIV1F1RDlmWEpiTDhQa3RmTGhVMkF2K04ycllNWTZ1VUVGcG5jWS9BWUNnZkZBTUN3Q0ZIemtCbGtHSC92UmRUZWVCU2ZVTXpVRGI0VzJBaFF5TTg5M1dQZzJROG9RQVlSZEJTeUtlVlVkb2c9PVgwMmpyJyxcbiAgICAnYmFtYm9vJzogJ0FBQUIzdzBPREFvUGVOcDlVbHRyMnpBWWZmZXZFT3d0b01SMTBxWUxHSmJZV3NubzdHQTdnOTBlWlBscm90V1dqQ1Nuelg3OUZGOElZV2tmRFBKM09lZHd6dmNoMnpkb1dTdmt6cEY3djVqZExyd3BDa2lhSWMvMVBPZVJNeEFhc21NTkVhM0F6MnhuSFQwNGdRSnF1QlFoTmVCNzd2UUd1elBzM2prNXJYSXB4NVFaZmdEZnFBYUdVdFJVT2FqNGFkWCtQa3BHeStVT2hORSt2bkdHNWxhRGFnczlMM210dVRvT0pGNVBramE1Wm9yWEp3RVhIRytwSlFkYU52Uy9jWXRMQXlzQlZGZnUxOWVodnhYUFFyNElKd1YxQUdVTEt6SW5lQmIrOFBCZC9HV09INllmNzUxTm85aWVhdWpsZVlNSEtZbDgrK0ZiMTNWR28xRVVaL2h6bk9CTkVvZmJJRnZIRWQ2bXhEYjgxa1FvVUg1RVpnK29wMGRFTUZtQVFyV1NmNEFaOUhOdlRQMXJNWm5zckxHbXBGcHpLc1pNVnBPeTI4RFFiZndlbzFBaUlRMHF1RGFLNTQwQmk4dzFNaEt4Umh0WldYdkhUZ2huK3pMUUJ2VTQ2RWxhMXJMWmNZRUtPRUFwYXp2dmZLWGNlaVNvWUcva2NUWGhUVWxGRytYVmJnS1ZOSEErZ0Y3Qk44dDNVdVU1c2RwUndYVVhHbm1sVlYwQ0NtUlZVM0c4RXZmNU1LVXc5dnFJRlYzNnRYN21vTmpmbzdDUFR4ZmVuWklKRXJMTVNJaFgzMDlwdkRkOFNVZ0szc21LTXBKc2tuVktCdHIyNnQ0RCtnZDNBQzVxTUN3Q0ZIT2FUV2ZGdkxDTEpQZnQzcWt0Vm8zRmFmbVpBaFJvamI5SUF4ajhLRXFQRFF5MHN0b3MzOTRTUVE9PVgwMm1xJ1xufTtcbmV4cG9ydCBjb25zdCBhcHAzaG91ciA9ICdBQUFCQ0EwT0RBb1BlTnBkajAxUHdrQVVSZmZ6S3laeFoxSXlVekFSa2xsUTI0Z1JhUU10R25hUDhWRW10alBOZkZUNTl5SlZGeXpmdWJrbjc5NlV4MEJ6NlNtYlVNNW5iRHpqOTdSSVN4b3pIcE1VbmJTcTg4cG9VYUx6dEZFU3RVTjZNSloyVGFpVnB1L1lZMk02dEk2c1FydEhteDhxZDc0RVorVEJJdnlVVS9Bb1lzN2ppRTBqemtuV1F4TXVpZkEySUJsVWJuUTdBdWxWandOOUFhVTlhdEFTczY5TzJkTkZVNHdYSkxjMWFPVUd3OXczNEp3Q1RUWm9lN1JQcVVnZXAyWDBWbTBuMGZOdXQ0Z1N4bC9KY25qOW5GYjZRNXRQL1VldTNMKzBQSFc0Z2haRm1tMnpaVjVrNi85NUNiUjdZOWJZR28vekdyVjNJcjRqUmJEeUNBNnZ0MzRETzhwM1NEQXNBaFFuSmpMRDVrOUZyM3VhSXprWEtmODNvNXZEZFFJVWU0WGVxdU5DQzNEKzlodDlaWWhOWkZLbW5oYz1YMDJkaCc7XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0SG9zdExpY2Vuc2UgPSAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVib21iW3Byb2R1Y3RdO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yTGljZW5zZSk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYExpY2Vuc2VgLFxuICAgICAgICBkZWZhdWx0OiB0aW1lYm9tYltwcm9kdWN0XSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVwbGFjZUxpbmVzSW5GaWxlID0gKHBhdGgsIHJlcGxhY2VyKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVzdWx0ID0gbGluZXMubWFwKHJlcGxhY2VyKTtcbiAgICB3cml0ZUZpbGVTeW5jKHBhdGgsIHJlc3VsdC5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59O1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUxpbmVzSW5GaWxlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiA9IChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0LCBsaWNlbnNlLCBub2RlcyA9IDEpID0+IHtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJyksIChsaW5lKSA9PiB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ2Vudmlyb25tZW50X25hbWUgPScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYGVudmlyb25tZW50X25hbWUgPSBcIiR7ZW52aXJvbm1lbnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgncHJvZHVjdHMgPSAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBwcm9kdWN0cyA9IFtcIiR7cHJvZHVjdH1cIl1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgJHtwcm9kdWN0fV9saWNlbnNlID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Byb2R1Y3R9X2xpY2Vuc2UgPSBcIiR7bGljZW5zZX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAke3Byb2R1Y3R9X3JlcGxpY2FfY291bnQgPWApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fcmVwbGljYV9jb3VudCA9ICR7bm9kZXN9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IGApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7cHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IFtcIi1EdXBtLnBsdWdpbi51cGxvYWQuZW5hYmxlZD10cnVlXCIsXCItRHBhc3N3b3JkLmNvbmZpcm1hdGlvbi5kaXNhYmxlZD10cnVlXCJdYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcudGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgPSAoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KSA9PiB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpLCBgXG4jIGF3c19lbnZzIGZpbGUgc2hvdWxkIGNvbnRhaW4gQVdTIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGF1dGhvcml6YXRpb24gKHdpdGhvdXQgcXVvdGVzKVxuQVdTX0FDQ0VTU19LRVlfSUQ9JHthd3NfYWNjZXNzX2tleV9pZH1cbkFXU19TRUNSRVRfQUNDRVNTX0tFWT0ke2F3c19zZWNyZXRfYWNjZXNzX2tleX1cbmAudHJpbSgpLCAndXRmLTgnKTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXdzQ3JlZGVudGlhbHNQZXJzaXN0ZWQpO1xufTtcbiIsImltcG9ydCB7IGluc3RhbGwgfSBmcm9tICcuLi9oZWxwZXJzL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnROYW1lIH0gZnJvbSAnLi4vaGVscGVycy9nZXRFbnZpcm9ubWVudE5hbWUnO1xuaW1wb3J0IHsgZ2V0SG9zdExpY2Vuc2UgfSBmcm9tICcuLi9oZWxwZXJzL2dldEhvc3RMaWNlbnNlJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4uL2hlbHBlcnMvcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi4vaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IGVtcHR5TGluZSwgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucywgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgcHJvdmlzaW9uaW5nIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgYXdhaXQgZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgLy8gQXNrIGZvciB0aGUgbGljZW5zZVxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIExldCdzIGRvIHRoaXNcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcucmVhZHkpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHByb3Zpc2lvbmcgdGhlIEFXUyBlbnZpcm9ubWVudC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrXG4gICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKGRpcmVjdG9yeSwgZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCwgbGljZW5zZSk7XG4gICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgIGF3YWl0IGluc3RhbGwoZGlyZWN0b3J5KTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSZXR1cm4gYWxsIHRoZSBxdWVzdGlvbnMgd2UgYXNrZWQgdGhlIHVzZXIgZm9yIHVzZSBpbiBvdGhlciBzdGVwc1xuICAgIHJldHVybiB7XG4gICAgICAgIGN3ZDogZGlyZWN0b3J5LFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgbGljZW5zZVxuICAgIH07XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldENsdXN0ZXJVUkwgPSBhc3luYyAoY3dkLCBwcm9kdWN0KSA9PiB7XG4gICAgLy8gQ2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgS3ViZXJuZXRlcyB1dGlscyBkaXJlY3RvcnlcbiAgICBjb25zdCBiYXNlRGlyID0gam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBjYW4gZmluZCB0aGUgb3V0cHV0cy5qc29uIGZpbGUgdGhhdCB3YXMgY3JlYXRlZCBkdXJpbmcgcHJvdmlzaW9uaW5nXG4gICAgY29uc3QgaGFzT3V0cHV0c0pTT04gPSBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpKTtcbiAgICBpZiAoIWhhc091dHB1dHNKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdvdXRwdXRzLmpzb24nIGZpbGUsIHdoaWNoIGlzIHVzdWFsbHkgZ2VuZXJhdGVkIGFmdGVyIHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQuYCk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgY2x1c3RlciBjcmVhdGlvbiBvdXRwdXQgZGF0YVxuICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpLCAndXRmLTgnKTtcbiAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgLy8gVHJ5IHRvIGZpbmQgdGhlIHByb2R1Y3QgbG9hZGJhbGFuY2VyIFVSTCBmcm9tIHRoZSBvdXRwdXQgZGF0YVxuICAgIGNvbnN0IGxvYWRiYWxhbmNlclVybHMgPSBvdXRwdXRzPy5wcm9kdWN0X3VybHM/LnZhbHVlO1xuICAgIGlmIChsb2FkYmFsYW5jZXJVcmxzKSB7XG4gICAgICAgIGNvbnN0IGxvYWRiYWxhbmNlclVybCA9IGxvYWRiYWxhbmNlclVybHNbcHJvZHVjdF07XG4gICAgICAgIGlmIChsb2FkYmFsYW5jZXJVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2FkYmFsYW5jZXJVcmw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCBmb3VuZCBpdCB5ZXQsIHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlICR7cHJvZHVjdH0gbG9hZCBiYWxhbmNlciBVUkwsIGFyZSB5b3Ugc3VyZSB0aGUgcHJvZHVjdCB3YXMgY29ycmVjdGx5IHByb3Zpc2lvbmVkP2ApO1xufTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGNvbnN0IGdldER1cmF0aW9uID0gKGZvcmNlKSA9PiB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIHJldHVybiAnNDVtJztcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYEhvdyBsb25nIHNob3VsZCB0aGUgdGVzdCBydW4/YCxcbiAgICAgICAgZGVmYXVsdDogJzQ1bScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuZXhwb3J0IGNvbnN0IHJlYWRMaW5lc0luRmlsZSA9IChwYXRoLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudHMuc3BsaXQoJ1xcbicpO1xuICAgIGxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlYWRMaW5lc0luRmlsZSc7XG5leHBvcnQgY29uc3QgZ2V0UmVzdWx0cyA9IChiYXNlRGlyKSA9PiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSB0ZXN0IHJlc3VsdCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciB0ZXN0IHJlc3VsdCBkaXJlY3RvcnlcbiAgICAgICAgcmVhZGRpclN5bmMoYmFzZURpcikuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZm91bmQgYXJlIGRpcmVjdG9yeSwgbm8gbmVlZCB0byBjb250aW51ZSBsb29raW5nXG4gICAgICAgICAgICBpZiAocmVzdWx0c0Rpcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBlbnRyeVxuICAgICAgICAgICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhqb2luKGJhc2VEaXIsIGl0ZW0pKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgYSB0ZXN0IHJlc3VsdCBkaXJlY3RvcnlcbiAgICAgICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkgJiYgZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsIGl0ZW0sICdyZXN1bHRzX3N1bW1hcnkubG9nJykpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgaXQhXG4gICAgICAgICAgICAgICAgcmVzdWx0c0RpciA9IGpvaW4oYmFzZURpciwgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgdGVzdCBkaXJlY3RvcnksIGFuZCBpZiBub3Qgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgaWYgKHJlc3VsdHNEaXIgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSB0ZXN0IHJlc3VsdHMgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSAoJHtiYXNlRGlyfSlgKTtcbiAgICB9XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0ge1xuICAgICAgICAncGF0aCc6IHJlc3VsdHNEaXIsXG4gICAgICAgICdTdW1tYXJ5IHJ1biBzdGF0dXMnOiB1bmRlZmluZWQsXG4gICAgICAgICdBcHBsaWNhdGlvbiBub2RlcyBjb3VudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0ZpbmlzaGVkJzogdW5kZWZpbmVkLFxuICAgICAgICAnQ29tcGxpYW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnU3VjY2Vzcyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0hhcyBhcHAtc3BlY2lmaWMgYWN0aW9ucyc6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgLy8gTG9vcCBvdmVyIHRoZSByZXN1bHQgc3VtbWFyeSBhbmQgZ2V0IHRob3NlIGRhbW4gdGVzdCByZXN1bHRzXG4gICAgcmVhZExpbmVzSW5GaWxlKGpvaW4ocmVzdWx0c0RpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSwgKGxpbmUpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbGluZS5zdWJzdHJpbmcoaGVhZGVyLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaGVhZGVyXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzRGlyZWN0b3J5ID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlIHJlc3VsdHMgZGlyZWN0b3J5XG4gICAgY29uc3QgcGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3Jlc3VsdHMnLCBwcm9kdWN0KTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXN1bHRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVzdWx0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVzdWx0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVzdWx0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRlc3QgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgaWYgYWxsIHByZXZpb3VzIHJlc3VsdHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlc3VsdHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlc3VsdHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCB1cGxvYWRUb1VQTSA9IGFzeW5jIChiYXNlVXJsLCBwYXRoLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/b3NfYXV0aFR5cGU9YmFzaWNgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSB0b2tlbicsIGVycik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlLmhlYWRlcnNbJ3VwbS10b2tlbiddO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGNyZWF0ZVJlYWRTdHJlYW0ocGF0aCkpO1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgICAgIH0gfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJykpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNJywgZXJyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4gZnJvbSBoZWFkZXJzOicsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmhlYWRlcnMsIG51bGwsIDIpKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkID0gYXN5bmMgKGFwcEtleSwgYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ1dhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZCcpO1xuICAgIGxldCBpc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlICghaXNFbmFibGVkICYmIGNvdW50IDwgMTIwKSB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZC4uLiAke2NvdW50fXNgKTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5YCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKCgpID0+ICh7IGRhdGE6IHsgZW5hYmxlZDogZmFsc2UgfSB9KSk7XG4gICAgICAgIGlzRW5hYmxlZCA9IGRhdGE/LmVuYWJsZWQ7XG4gICAgICAgIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBpc0VuYWJsZWQ7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTGljZW5zZSA9IGFzeW5jIChhcHBLZXksIGxpY2Vuc2UsIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+ICh7IGRhdGE6IHt9IH0pKTtcbiAgICBjb25zdCB7IHJhd0xpY2Vuc2UgfSA9IGRhdGE7XG4gICAgaWYgKCFyYXdMaWNlbnNlIHx8IHJhd0xpY2Vuc2UgIT09IGxpY2Vuc2UpIHtcbiAgICAgICAgYXdhaXQgYXhpb3MucHV0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleS9saWNlbnNlYCwgYHsgXCJyYXdMaWNlbnNlXCI6IFwiJHtsaWNlbnNlfVwiIH1gLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJykpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgbGljZW5zZSB0byBVUE0nLCBlcnIpKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGFwcDNob3VyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5jb25zdCBwcm9ncmVzc0JhciA9IG5ldyBTaW5nbGVCYXIoe1xuICAgIGZvcm1hdDogJyAgW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7cmVtYWluaW5nfW0nLFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmNvbnN0IHJvdW5kID0gKHZhbHVlLCBzdGVwKSA9PiB7XG4gICAgc3RlcCB8fCAoc3RlcCA9IDEuMCk7XG4gICAgY29uc3QgaW52ID0gMS4wIC8gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGludikgLyBpbnY7XG59O1xuY29uc3QgZG93bmxvYWQgPSBhc3luYyAoYWRkb25LZXkpID0+IHtcbiAgICBjb25zdCB0bXBEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ3RtcCcpO1xuICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgYWRkb25LZXkpO1xuICAgIG1rZGlyU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9tYXJrZXRwbGFjZS5hdGxhc3NpYW4uY29tL2Rvd25sb2FkL3BsdWdpbnMvJHthZGRvbktleX1gLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhLnBpcGUoY3JlYXRlV3JpdGVTdHJlYW0odG1wRmlsZSkpKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICByZXR1cm4gdG1wRmlsZTtcbn07XG5leHBvcnQgY29uc3QgaW5zdGFsbEFwcCA9IGFzeW5jIChiYXNlVXJsLCBhcHBLZXksIGxpY2Vuc2UgPSBhcHAzaG91ciwgZm9yY2UpID0+IHtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZG93bmxvYWQgaXQgZnJvbSBNUEFDXG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSBuZWVkIGFuIGFwcGtleS4gSWYgdGhpcyBpcyBub3QgcHJvdmlkZWQsIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIGlmICghYXBwS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYXBwIGludG8gY2x1c3RlciwgYGFwcEtleWAgd2FzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FwcEtleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSWApO1xuICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDMwMCwgMCwgeyByZW1haW5pbmc6ICc1bScgfSk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhcHBLZXkpO1xuICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgIGF3YWl0IHVwbG9hZFRvVVBNKGJhc2VVcmwsIGZpbGUsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhcHBLZXksIGJhc2VVcmwsICdhZG1pbicsICdhZG1pbicsIGZhbHNlKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxpY2Vuc2UgKHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlKVxuICAgICAgICBhd2FpdCByZWdpc3RlckxpY2Vuc2UoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7YXBwS2V5fSlgKTtcbiAgICAgICAgLy8gSWYgd2UncmUgaW4gaW50ZXJhY3RpdmUgbW9kZSwgbGV0J3MgYmUgbmljZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGV5IGhhdmUgb3B0aW9uc1xuICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEl0IGlzIG5vdyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgSmlyYSBjbHVzdGVyLlxuICBXZSBjYW4gaW5zdGFsbCBpdCBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2Ugb3IgeW91IGNhbiBpbnN0YWxsIGl0IG1hbnVhbGx5LlxuYCk7XG4gICAgICAgIC8vIEFzayB0aGVtIGlmIHRoZXkgcHJlZmVyIGF1dG9tYXRpb24gb3IgdGVkaW91cyBtYW51YWwgdGFza3NcbiAgICAgICAgY29uc3QgbWV0aG9kID0gYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBIb3cgZG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgYXBwP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiAnbXBhYycsXG4gICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFya2V0cGxhY2UnLCB2YWx1ZTogJ21wYWMnIH0sXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnTWFudWFsJywgdmFsdWU6ICdtYW51YWwnIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHRoZXkgY2hvc2UgYXV0b21hdGlvbiwgbGV0J3MgYXV0b21hdGUhXG4gICAgICAgIGlmIChtZXRob2QgPT09ICdtcGFjJykge1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgYXBwIGtleVxuICAgICAgICAgICAgY29uc3QgYWRkb25LZXkgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSBrZXkgb2YgdGhlIGFwcCB0byBiZSBpbnN0YWxsZWQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBsaWNlbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBhcmUgc3RhcnRpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgzMDAsIDAsIHsgcmVtYWluaW5nOiAnNW0nIH0pO1xuICAgICAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0UHJvZ3Jlc3MoKSA+PSAzMDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmluY3JlbWVudCgxLCB7IHJlbWFpbmluZzogcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSBwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpKSAvIDYwLCAwLjUpIH0pO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChhZGRvbktleSk7XG4gICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRUb1VQTShiYXNlVXJsLCBmaWxlLCAnYWRtaW4nLCAnYWRtaW4nLCBmYWxzZSk7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhZGRvbktleSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHByb3ZpZGVkIGxpY2Vuc2VcbiAgICAgICAgICAgIGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhZGRvbktleSwgYXBwTGljZW5zZSwgYmFzZVVybCwgJ2FkbWluJywgJ2FkbWluJywgZmFsc2UpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pYCk7XG4gICAgICAgICAgICAvLyBUaGV5IGNob3NlIHZpb2xlbmNlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSdWIgaXQgaW4gdGhlaXIgZmFjZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBZb3UgY2FuIG5vdyBpbnN0YWxsIHRoZSBhcHAgbWFudWFsbHkgaW50byB0aGUgY2x1c3Rlci5cbiAgUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGFnZSAobG9naW4gd2l0aCAnYWRtaW4nLydhZG1pbicpOlxuICAgIFxuICAke2Jhc2VVcmx9L3BsdWdpbnMvc2VydmxldC91cG0/c291cmNlPXNpZGVfbmF2X21hbmFnZV9hZGRvbnNcbmApO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGVtIGdyb3ZlbFxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWRNYW51YWxseSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgYXBwIG1hbnVhbGx5YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGFpbid0IGluc3RhbGxlZCwgd2UgYWluJ3QgZG9pbmcgbm90aGluJy4gU28gd2UgYmV0dGVyIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkTWFudWFsbHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCB0byBydW4gdGhlIHNlY29uZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlcGxhY2VMaW5lc0luRmlsZSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgd2l0aEFwcFNwZWNpZmljQWN0aW9ucywgZm9yY2UpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0VVJJID0gbmV3IFVSTChiYXNlVXJsKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHByb2R1Y3RVUkkucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cHMnKSA/ICdodHRwcycgOiAnaHR0cCc7XG4gICAgY29uc3QgcG9ydCA9IHByb3RvY29sID09PSAnaHR0cCcgPyAnODAnIDogJzQ0Myc7XG4gICAgY29uc29sZS5sb2coYFxuICBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBpbiB0aGUgJHtwcm9kdWN0fS55bWwgZmlsZTpcblxuICBhcHBsaWNhdGlvbl9ob3N0bmFtZSA9ICR7cHJvZHVjdFVSSS5ob3N0fVxuICBhcHBsaWNhdGlvbl9wcm90b2NvbCA9ICR7cHJvdG9jb2x9XG4gIGFwcGxpY2F0aW9uX3BvcnQgPSAke3BvcnR9XG4gIGFwcGxpY2F0aW9uX3Bvc3RmaXggPSAke3Byb2R1Y3RVUkkucGF0aG5hbWV9XG4gIHRlc3RfZHVyYXRpb24gPSAke2R1cmF0aW9ufVxuICBzdGFuZGFsb25lX2V4dGVuc2lvbiA9ICR7d2l0aEFwcFNwZWNpZmljQWN0aW9ucyA/ICcxJyA6ICcwJ31cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7am9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKX1cbmApO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgZm9yY2UpO1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKGN3ZCwgJ2FwcCcsIGAke3Byb2R1Y3R9LnltbGApLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCcgICAgYXBwbGljYXRpb25faG9zdG5hbWU6JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOiAke3Byb2R1Y3RVUkkuaG9zdH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX3Byb3RvY29sOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDogJHtwcm90b2NvbH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIGFwcGxpY2F0aW9uX3BvcnQ6YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX3BvcnQ6ICR7cG9ydH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHN0YW5kYWxvbmVfZXh0ZW5zaW9uOmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjogJHt3aXRoQXBwU3BlY2lmaWNBY3Rpb25zID8gJzEnIDogJzAnfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAgICAgdGVzdF9kdXJhdGlvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgdGVzdF9kdXJhdGlvbjogJHtkdXJhdGlvbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcbuKclCBDb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJHtwcm9kdWN0fS55bWxgKTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuZXhwb3J0IGNvbnN0IGdldFJlaW5kZXhQcm9ncmVzcyA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgY29uc3QgY3VycmVudFRhc2sgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApID8gcmVzcG9uc2UuZGF0YSA6IHt9O1xuICAgIGNvbnN0IHsgcHJvZ3Jlc3NVcmwsIGN1cnJlbnRQcm9ncmVzcywgc3VjY2VzcywgZmluaXNoVGltZSB9ID0gY3VycmVudFRhc2s7XG4gICAgY29uc3QgaXNGaW5pc2hlZCA9IGN1cnJlbnRQcm9ncmVzcyA9PT0gMTAwIHx8IHN1Y2Nlc3MgfHwgZmluaXNoVGltZSAhPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtwcm9ncmVzc1VybCwgc3VjY2VzcywgaXNGaW5pc2hlZF07XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHB1cHBldGVlciBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgUnVuMiB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGdldFJlaW5kZXhQcm9ncmVzcyB9IGZyb20gJy4vZ2V0UmVpbmRleFByb2dyZXNzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIEx1Y2VuZSByZS1pbmRleCBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtyZW1haW5pbmd9bScsXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuZXhwb3J0IGNvbnN0IHJlaW5kZXggPSBhc3luYyAoYmFzZVVybCwgb3V0cHV0RGlyLCBmb3JjZSkgPT4ge1xuICAgIC8vIFRlbGwgdGhlbSB0aGF0IHdlIGFyZSBwbGFubmluZyB0byBydW4gdGhlIEx1Y2VuZSBJbmRleGluZyBUZXN0XG4gICAgY29uc29sZS5sb2coUnVuMi5zdGFydEx1Y2VuZUluZGV4aW5nKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgcmVpbmRleCBzY3JlZW5zaG90IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihvdXRwdXREaXIsICdsdWNlbmUtcmVpbmRleC5wbmcnKSkpIHtcbiAgICAgICAgLy8gQXNrIG5pY2VseSBpZiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgZXhpc3RpbmcgdGVzdCByZXN1bHRzXG4gICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IGZvcmNlIHx8IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyByZWluZGV4IHJlc3VsdHMsIGRvIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSB0aGVzZSByZXN1bHRzPydcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICBpZiAob3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgcmVpbmRleCByZXN1bHRzJyk7XG4gICAgICAgICAgICBybVN5bmMoam9pbihvdXRwdXREaXIsICdsdWNlbmUtcmVpbmRleC5wbmcnKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBMdWNlbmUgSW5kZXggVGltaW5nIHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNrIG5pY2VseSBpZiB3ZSBjYW4gc3RhcnRcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KGBQcmVzcyBhbnkga2V5IHRvIHN0YXJ0IHRoZSBMdWNlbnNlIEluZGV4IFRpbWluZyB0ZXN0Li4uXG4gIChvciAncycgdG8gc2tpcCBpZiB0aGUgdGVzdCBpcyBhbHJlYWR5IHJ1bm5pbmcpXG5gLCBmb3JjZSk7XG4gICAgLy8gQ2hlY2sgaWYgdGhleSBhZ3JlZWQgdG8gc3RhcnRpbmcgdGhlIHJlaW5kZXhcbiAgICBpZiAodmFsdWUgIT09ICdzJykge1xuICAgICAgICAvLyBUaGV5IGRpZCEgU28gbGV0J3Mgc3RhcnQgaXQgdXNpbmcgdGhlIEppcmEgUkVTVCBBUElcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KGAke2Jhc2VVcmx9L3Jlc3QvYXBpLzIvcmVpbmRleD90eXBlPUZPUkVHUk9VTkRgLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7QnVmZmVyLmZyb20oYGFkbWluOmFkbWluYCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgIC8vIExldCdzIG1ha2Ugc3VyZSB0aGF0IHdlIGdvdCBhIHByb3BlciByZXNwb25zZVxuICAgICAgICBpZiAocmVzcG9uc2UgPT09IG51bGwgfHwgcmVzcG9uc2Uuc3RhdHVzICE9PSAyMDIpIHtcbiAgICAgICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICAgICAgLy8gTm8gcmVpbmRleCBpcyBubyBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc3RhcnQgTHVjZW5zZSBJbmRleCBUaW1pbmcgdGVzdCwgY291bGQgbm90IHBlcmZvcm0gcmVpbmRleCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFN0YXJ0IHRoZSBjbG9jayFcbiAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAvLyBTdGFydCB0aGUgcHJvZ3Jlc3MgYmFyIHRvIGNvdW50IGZvciA2MCBtaW51dGVzXG4gICAgcHJvZ3Jlc3NCYXIuc3RhcnQoMzYwMCwgMCwgeyByZW1haW5pbmc6IDYwIH0pO1xuICAgIC8vIFBsYWNlaG9sZGVyIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVpbmRleCBpcyBmaW5pc2hlZFxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHRyeSB0byBnZXQgYW4gdXBkYXRlIGZyb20gSmlyYVxuICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xuICAgICAgICAvLyBHZXQgYW4gdXBkYXRlIGZyb20gdGhlIHNlcnZlclxuICAgICAgICBjb25zdCBbcHJvZ3Jlc3NVcmwsIHN1Y2Nlc3MsIGZpbmlzaGVkXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlaW5kZXggaGFzIGZpbmlzaGVkXG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBzdGlsbCB3aXRoaW4gdGhlIDYwIG1pbnV0ZSB3aW5kb3dcbiAgICAgICAgICAgIGlmIChwcm9ncmVzc0Jhci5nZXRQcm9ncmVzcygpIDwgcHJvZ3Jlc3NCYXIuZ2V0VG90YWwoKSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSwgc28gbGV0J3MganVzdCBpbmNyZW1lbnQgdGhlIHByb2dyZXNzIGJhciBhbmQgdHJ5IGFnYWluXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuaW5jcmVtZW50KDYwLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZzogNjAgLSBNYXRoLmZsb29yKCgoKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lKSAvIDEwMDApIC8gNjApKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIDEgbWludXRlIHVudGlsIHdlIHJldHJ5XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm8gbG9uZ2VyIGluIHRoZSA2MCBtaW51dGUgd2luZG93LCBtYW51YWwgYWN0aW9uIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgLy8gd2hlbiBvcGVyYXRpbmcgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFmb3JjZSkge1xuICAgICAgICAgICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoYXQgdGhleSBuZWVkIHRvIGRvIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgTHVjZW5zZSByZS1pbmRleCBpcyB0YWtpbmcgYSBsb25nIHRpbWUgdG8gZmluaXNoLiBQbGVhc2UgZ28gdG8gdGhlIGZvbGxvd2luZyBVUkxcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuXG4gIGFuZCBtYW51YWxseSBjb25maXJtIHRoYXQgdGhlIHJlLWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIHRoZSB1c2VyIHRvIGNvbmZpcm0gdGhlIHJlaW5kZXggaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgICAgICAgICBpc0ZpbmlzaGVkID0gYXdhaXQgY29uZmlybSh7IG1lc3NhZ2U6ICdIYXMgdGhlIHJlaW5kZXggY29tcGxldGVkIHN1Y2Nlc2Z1bGx5PycgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB3ZSBoYXZlIG5vIGNob2ljZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgb3B0aW9uIGxlZnQgaXMgdG8gdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlLWluZGV4IGhhcyBub3QgY29tcGxldGVkIHdpdGhpbiA2MCBtaW51dGVzLCB0ZXN0IGhhcyBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBjb21wbGV0ZWx5IHdyb25nXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEx1Y2Vuc2UgcmUtaW5kZXggZmluaXNoZWQgdW5zdWNjZXNmdWxseS4gUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgVVJMIGZvciBtb3JlIGluZm9ybWF0aW9uOlxuICAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybCB8fCAnL3NlY3VyZS9hZG1pbi9qaXJhL0luZGV4UHJvZ3Jlc3MuanNwYSd9XG5gKTtcbiAgICAgICAgICAgIC8vIE5vdyB0aHJvdyBhIGhpc3N5IGZpdCBhbnl3YXlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTHVjZW5jZSBJbmRleCBUaW1pbmcgdGVzdCBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAg4pyUIEx1Y2VuY2UgcmUtaW5kZXggb2YgSmlyYSBoYXMgY29tcGxldGVkXG5gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgdGhlIGxvb3AgdmFyaWFibGVcbiAgICAgICAgaXNGaW5pc2hlZCA9IGZpbmlzaGVkO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGxhdGVzdCB1cGRhdGUgb24gdGhlIHJlaW5kZXggcHJvZ3Jlc3NcbiAgICBjb25zdCBbcHJvZ3Jlc3NVcmxdID0gYXdhaXQgZ2V0UmVpbmRleFByb2dyZXNzKGJhc2VVcmwpO1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcm9ncmVzcyBVUkxcbiAgICBpZiAoIXByb2dyZXNzVXJsKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBwcm9ncmVzcyBVUkwsIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCB0aGUgbGF0ZXN0IEx1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgcmVzdWx0cycpO1xuICAgIH1cbiAgICAvLyBSZXRyeSBjb3VudGVyXG4gICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgIC8vIFBsYWNlaG9sZGVyIGluZGljYXRpbmcgd2hldGhlciB0aGUgc2NyZWVuc2hvdCB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcbiAgICBsZXQgc2NyZWVuc2hvdENyZWF0ZWQgPSBmYWxzZTtcbiAgICAvLyBMb29wIHVudGlsIHdlJ3ZlIG1hZGUgYSBzY3JlZW4gc2hvdCBvciB0cmllZCBpdCA1IHRpbWVzIChpbmNsLiBvbmUgdGltZSBtYW51YWxseSlcbiAgICB3aGlsZSAoIXNjcmVlbnNob3RDcmVhdGVkICYmIHJldHJ5Q291bnQgPCA1KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgcmV0cnkgY291bnQgaXMgNCwgdGhpcyBtZWFucyB0aGlzIGlzIG91ciBsYXN0IHJvZGVvXG4gICAgICAgICAgICBpZiAocmV0cnlDb3VudCA9PT0gNCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBzdGVwIGlzIG1hbnVhbCwgd2hpY2ggd2UgY2FuJ3QgZG8gaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gb3VyIG9ubHkgb3B0aW9uIGxlZnQgaXMgdG8gdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYXV0b21hdGljYWxseSBjYXB0dXJlIGEgc2NyZWVuIHNob3Qgb2YgdGhlIEx1Y2VuZSBSZWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhleSBoYXZlIHRvIGRvIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgV2UndmUgdHJpZWQgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgYSBzY3JlZW5zaG90LCBidXQgdGhlIHByb2Nlc3Mgc2VlbXMgdG8gYmUgc3R1Y2tcblxuICBXZSB3aWxsIG5vdyBvcGVuIGEgYnJvd3NlciB3aW5kb3cgZm9yIHlvdSB0byBmb2xsb3cgdGhlIGF1dG9tYXRlZCBzdGVwcyBhbmQgaW50ZXJ2ZW5lXG4gIHdoZXJlIHBvc3NpYmxlIChmb3IgaW5zdGFuY2UsIGJ5IHByZXNzaW5nIGEgYnV0dG9uIG9yIHJlbG9hZGluZyBhIHNjcmVlbilcbmApO1xuICAgICAgICAgICAgICAgIC8vIE5vdyBhc2sgdGhlbSBuaWNlbHkgaWYgdGhleSBhcmUgcmVhZHlcbiAgICAgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBvcGVuIHRoZSBicm93c2VyIHdpbmRvdy4uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGJyb3dzZXIgc2Vzc2lvblxuICAgICAgICAgICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHB1cHBldGVlci5sYXVuY2goeyBoZWFkbGVzczogcmV0cnlDb3VudCA8IDQgfSk7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgYnJvd3Nlci5uZXdQYWdlKCk7XG4gICAgICAgICAgICBhd2FpdCBwYWdlLnNldFZpZXdwb3J0KHsgd2lkdGg6IDEwODAsIGhlaWdodDogMTAyNCB9KTtcbiAgICAgICAgICAgIC8vIE9wZW4gdGhlIHJlaW5kZXggcHJvZ3Jlc3MgcGFnZVxuICAgICAgICAgICAgYXdhaXQgcGFnZS5nb3RvKGAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybH1gKTtcbiAgICAgICAgICAgIC8vIExvZyBpblxuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS11c2VybmFtZScpLmZpbGwoJ2FkbWluJyk7XG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tc3VibWl0JykuY2xpY2soKTtcbiAgICAgICAgICAgIC8vIFdlYnN1ZG9cbiAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tYXV0aGVudGljYXRlUGFzc3dvcmQnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1zdWJtaXQnKS5jbGljaygpO1xuICAgICAgICAgICAgLy8gWFNSRiB0b2tlbiBleHBpcmF0aW9uIHNuYWZ1XG4gICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNhdGxfdG9rZW5fcmV0cnlfYnV0dG9uJykuY2xpY2soKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBvbiB0aGUgcmVpbmRleCBwYWdlIGFuZCB0aGF0IGl0IGlzIGxvYWRlZFxuICAgICAgICAgICAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoJyNhY2tub3dsZWRnZV9zdWJtaXQnKTtcbiAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNjcmVlbiBzaG90XG4gICAgICAgICAgICBhd2FpdCBwYWdlLnNjcmVlbnNob3Qoe1xuICAgICAgICAgICAgICAgIHBhdGg6IGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGJyb3dzZXIgd2luZG93XG4gICAgICAgICAgICBhd2FpdCBicm93c2VyLmNsb3NlKCk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGNhcHR1cmVkIHRoZSBzY3JlZW4gc2hvdCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICAgICAgICAgICAgc2NyZWVuc2hvdENyZWF0ZWQgPSBleGlzdHNTeW5jKGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfaWdub3JlZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHNjcmVlbnNob3QsIHRocm93IGEgaGlzc3kgZml0IVxuICAgIGlmICghc2NyZWVuc2hvdENyZWF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FwdHVyZSB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBzaG93IGEgaGFwcHkgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKGBcbuKclCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IGZvcmVncm91bmQgaW5kZXhpbmcgb2YgSmlyYSBoYXMgY29tcGxldGVkXG5gKTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcnVuVGVzdCB9IGZyb20gJy4uL2hlbHBlcnMvZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuLi9oZWxwZXJzL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgZ2V0RHVyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL2dldER1cmF0aW9uJztcbmltcG9ydCB7IGdldFJlc3VsdHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldFJlc3VsdHMnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0c0RpcmVjdG9yeSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0UmVzdWx0c0RpcmVjdG9yeSc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwIH0gZnJvbSAnLi4vaGVscGVycy9pbnN0YWxsQXBwJztcbmltcG9ydCB7IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHJlaW5kZXggfSBmcm9tICcuLi9oZWxwZXJzL3JlaW5kZXgnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5leHBvcnQgY29uc3QgcnVuUGVyZm9ybWFuY2VUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmhlYWRlcihvcHRpb25zLnByb2R1Y3QpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgbG9hZCBiYWxhbmNlciBVUkwgZm9yIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFQgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIHRlc3QgcmVzdWx0cyBmb3IgdGhpcyBzcGVjaWZpYyBydW5cbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSB0ZXN0IHJ1biB3YXMgbm90IHN1Y2Nlc3NmdWwsIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgaXQgd2l0aG91dCBhc2tpbmdcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMob3B0aW9ucy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIElmIHdlIGFyZSBydW5uaW5nIHJlZ3Jlc3Npb24gdGVzdHMsIHdlIG5lZWQgdG8gaW5zdGFsbCB0aGUgYXBwICgmIHJ1biBpbmRleGluZyB0ZXN0cyBmb3IgSmlyYSlcbiAgICBpZiAoc3RhZ2UgPT09ICdyZWdyZXNzaW9uJykge1xuICAgICAgICAvLyBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCBpbnN0YWxsQXBwKGJhc2VVcmwsIG9wdGlvbnMuYXBwS2V5LCBvcHRpb25zLmFwcExpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBJZiB3ZSBhcmUgZG9pbmcgdGhpcyB0aGluZyBmb3IgSmlyYSwgd2UgbmVlZCB0byBkbyB0aGUgTHVjZW5lIEluZGV4IFRlc3RpbmdcbiAgICAgICAgaWYgKG9wdGlvbnMucHJvZHVjdCA9PT0gJ2ppcmEnKSB7XG4gICAgICAgICAgICBhd2FpdCByZWluZGV4KGJhc2VVcmwsIG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgcmVncmVzc2lvbiB0ZXN0aW5nXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3RhcnRQZXJmb3JtYW5jZVRlc3QpO1xuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNldCBhIGRpZmZlcmVudCB0ZXN0IGR1cmF0aW9uIChmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcylcbiAgICBjb25zdCBkdXJhdGlvbiA9IGF3YWl0IGdldER1cmF0aW9uKG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBXcml0ZSB0ZXN0IGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgIGF3YWl0IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbihjd2QsIG9wdGlvbnMucHJvZHVjdCwgYmFzZVVybCwgZHVyYXRpb24sIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlc3VsdHNCYXNlRGlyID0gYXdhaXQgZ2V0UmVzdWx0c0RpcmVjdG9yeShjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBkYW1uIHRlc3RcbiAgICBhd2FpdCBydW5UZXN0KGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKHJlc3VsdHNCYXNlRGlyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVzdCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKHJlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddICE9PSAnT0snKSB7XG4gICAgICAgIC8vIElmIG5vdCwgbGV0IHRoZSBwZW9wbGUga25vdyBhbmQgdGVybWluYXRlXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmZhaWx1cmUoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IGZhaWxlZCcpO1xuICAgIH1cbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVzdWx0cy5wYXRoLCBydW5PdXRwdXREaXIsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIC8vIENlbGVicmF0ZSBvdXIgc3VjY2VzcyFcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdWNjZXNzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJleHBvcnQgY29uc3QgZ2V0Tm9kZU51bWJlckZvclN0YWdlID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAxO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAyO1xuICAgICAgICBjYXNlICdmb3VyLW5vZGUnOiByZXR1cm4gNDtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVtcHR5TGluZSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsLCBydW5UZXN0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgZ2V0RHVyYXRpb24gfSBmcm9tICcuL2dldER1cmF0aW9uJztcbmltcG9ydCB7IGdldE5vZGVOdW1iZXJGb3JTdGFnZSB9IGZyb20gJy4vZ2V0Tm9kZU51bWJlckZvclN0YWdlJztcbmltcG9ydCB7IGdldFJlc3VsdHMgfSBmcm9tICcuL2dldFJlc3VsdHMnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0c0RpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVzdWx0c0RpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vZ2V0UnVuRm9yU3RhZ2UnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4vaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcnVuU2NhbGFiaWxpdHlUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFtb3VudCBvZiBub2RlcyBmb3IgdGhlIHNwZWNpZmllZCBzdGFnZVxuICAgIGNvbnN0IG5vZGVzID0gZ2V0Tm9kZU51bWJlckZvclN0YWdlKHN0YWdlKTtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcy5oZWFkZXIob3B0aW9ucy5wcm9kdWN0LCBzdGFnZSkpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgZmFsc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFQgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKHN0YWdlKX1gKTtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBydW5cbiAgICBpZiAoZXhpc3RzU3luYyhydW5PdXRwdXREaXIpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMsIGNoZWNrIGlmIHRoZXkgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGdldFJlc3VsdHMocnVuT3V0cHV0RGlyKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gPT09ICdPSycpIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gb3B0aW9ucy5mb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHN1Y2Nlc3NmdWwgdGVzdCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdHJ5XG4gICAgICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgc2NhbGFiaWxpdHkgJHtzdGFnZX0gY2x1c3RlciB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSB0ZXN0IHJ1biB3YXMgbm90IHN1Y2Nlc3NmdWwsIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgaXQgd2l0aG91dCBhc2tpbmdcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMob3B0aW9ucy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzLnJlYWR5Rm9yUHJvdmlzaW9uaW5nKTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBwcmVwYXJlIHRoZSBBV1MgZW52aXJvbm1lbnQgZm9yIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0aW5nLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgZW1wdHlMaW5lKCk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBXcml0ZSBUZXJyYWZvcm0gdmFyaWFibGVzIHRvIGRpc2sgKG9uZS1ub2RlIGNsdXN0ZXIpXG4gICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmxpY2Vuc2UsIG5vZGVzKTtcbiAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgYXdhaXQgaW5zdGFsbChjd2QpO1xuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcy5zdGFydFNjYWxhYmlsaXR5VGVzdCk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgICBhd2FpdCBpbnN0YWxsQXBwKGJhc2VVcmwsIG9wdGlvbnMuYXBwS2V5LCBvcHRpb25zLmFwcExpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNldCBhIGRpZmZlcmVudCB0ZXN0IGR1cmF0aW9uIChmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcylcbiAgICBjb25zdCBkdXJhdGlvbiA9IGF3YWl0IGdldER1cmF0aW9uKG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIHRlc3QgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgYXdhaXQgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXN1bHRzQmFzZURpciA9IGF3YWl0IGdldFJlc3VsdHNEaXJlY3RvcnkoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgZGFtbiB0ZXN0XG4gICAgYXdhaXQgcnVuVGVzdChjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0gZ2V0UmVzdWx0cyhyZXN1bHRzQmFzZURpcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGlmIChyZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSAhPT0gJ09LJykge1xuICAgICAgICAvLyBJZiBub3QsIGxldCB0aGUgcGVvcGxlIGtub3cgYW5kIHRlcm1pbmF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcy5mYWlsdXJlKHN0YWdlLCBjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2coU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMuc3VjY2Vzcyk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiaW1wb3J0IHsgZW1wdHlMaW5lLCBUZWFyZG93biB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHRlcm1pbmF0ZSB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgdGVhcmRvd25DbHVzdGVyID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IG5pY2UgbGl0dGxlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKFRlYXJkb3duLmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIGlmIHRoZXkgYXJlIHJlYWR5IHRvIHNheSBnb29kYnllIHRvIHRoZWlyIGNsdXN0ZXJcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFRlcm1pbmF0ZSBpdCFcbiAgICBhd2FpdCB0ZXJtaW5hdGUoZGlyZWN0b3J5LCBvcHRpb25zLmVudmlyb25tZW50KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgdG8gcXVpdCB0aGUgcHJvZ3JhbVxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGV4aXQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB2ZXJzaW9ucyBmcm9tICcuLi8uLi9hc3NldHMvdmVyc2lvbnMuanNvbic7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzID0gei5lbnVtKFtcbiAgICAncG9zdGdyZXNxbCcsXG4gICAgJ215c3FsJyxcbiAgICAnbXNzcWwnXG5dKTtcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zID0gei5lbnVtKFtcbiAgICAnRGV2ZWxvcGVyJyxcbiAgICAnRXhwcmVzcycsXG4gICAgJ1N0YW5kYXJkJyxcbiAgICAnRW50ZXJwcmlzZScsXG4gICAgJ0VudGVycHJpc2VDb3JlJ1xuXSk7XG5leHBvcnQgY29uc3QgRGF0YWJhc2VPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSksXG4gICAgZGF0YWJhc2U6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICB2ZXJib3NlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKClcbn0pO1xuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCg1NDMyKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpLmRlZmF1bHQoJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNeVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDMzMDYpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm15c3FsLmpkYmMuRHJpdmVyJykuZGVmYXVsdCgnY29tLm15c3FsLmpkYmMuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE1TU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZWRpdGlvbjogU3VwcG9ydGVkTVNTUUxFZGl0aW9ucy5kZWZhdWx0KCdEZXZlbG9wZXInKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgxNDMzKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnc2EnKS5kZWZhdWx0KCdzYScpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ0RhdGFDZW50ZXJEWCEnKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJykuZGVmYXVsdCgnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKVxufSk7XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyB9IGZyb20gJy4vRGF0YWJhc2UnO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyA9IHouZW51bShbXG4gICAgJ2ppcmEnLFxuICAgICdjb25mbHVlbmNlJyxcbiAgICAnYml0YnVja2V0JyxcbiAgICAnYmFtYm9vJ1xuXSk7XG5leHBvcnQgY29uc3QgQXBwbGljYXRpb25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZGF0YWJhc2U6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5kZWZhdWx0KCdwb3N0Z3Jlc3FsJyksXG4gICAgZGF0YWJhc2VUYWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpLmRlZmF1bHQoJzgwJyksXG4gICAgY29udGV4dFBhdGg6IHouc3RyaW5nKCksXG4gICAgeG1zOiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgeG14OiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgd2F0Y2g6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGV4dDogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBpbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHouc3RyaW5nKCksXG4gICAgYWN0aXZhdGVQcm9maWxlczogei5zdHJpbmcoKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRlYnVnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgY29udGV4dFBhdGg6IHRydWUsXG4gICAgZXh0OiB0cnVlLFxuICAgIGluc3RhbGw6IHRydWUsXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB0cnVlLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHRydWUsXG4gICAgY3dkOiB0cnVlXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi9BcHBsaWNhdGlvbic7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2VUZXN0VHlwZXMgPSB6LmVudW0oW1xuICAgICdiYXNlbGluZScsXG4gICAgJ3JlZ3Jlc3Npb24nXG5dKTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RUeXBlcyA9IHouZW51bShbXG4gICAgJ29uZS1ub2RlJyxcbiAgICAndHdvLW5vZGUnLFxuICAgICdmb3VyLW5vZGUnXG5dKTtcbmV4cG9ydCBjb25zdCBUZXN0UmVzdWx0cyA9IHouZW51bShbXG4gICAgJ3BhdGgnLFxuICAgICdTdW1tYXJ5IHJ1biBzdGF0dXMnLFxuICAgICdBcHBsaWNhdGlvbiBub2RlcyBjb3VudCcsXG4gICAgJ0ZpbmlzaGVkJyxcbiAgICAnQ29tcGxpYW50JyxcbiAgICAnU3VjY2VzcycsXG4gICAgJ0hhcyBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbl0pO1xuZXhwb3J0IGNvbnN0IFJlcG9ydFR5cGVzID0gei5lbnVtKFtcbiAgICAncGVyZm9ybWFuY2UnLFxuICAgICdzY2FsYWJpbGl0eSdcbl0pO1xuZXhwb3J0IGNvbnN0IEFQVFJlcG9ydEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogUmVwb3J0VHlwZXMsXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUHJvdmlzaW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGVudmlyb25tZW50OiB0cnVlLFxuICAgIGFwcEtleTogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0QXJncyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBvdXRwdXREaXI6IHRydWUsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdE1lc3NhZ2VzID0gei5vYmplY3Qoe1xuICAgIGhlYWRlcjogei5mdW5jdGlvbigpLmFyZ3MoU3VwcG9ydGVkQXBwbGljYXRpb25zKS5yZXR1cm5zKHouc3RyaW5nKCkpLFxuICAgIHN0YXJ0UGVyZm9ybWFuY2VUZXN0OiB6LnN0cmluZygpLFxuICAgIHN0YXJ0THVjZW5lSW5kZXhpbmc6IHouc3RyaW5nKCksXG4gICAgc3VjY2Vzczogei5zdHJpbmcoKSxcbiAgICBmYWlsdXJlOiB6LmZ1bmN0aW9uKCkuYXJncyh6LnN0cmluZygpLCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIHouc3RyaW5nKCksIHouc3RyaW5nKCksIHoucmVjb3JkKFRlc3RSZXN1bHRzLCB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpKSlcbn0pLnBhcnRpYWwoe1xuICAgIHN0YXJ0THVjZW5lSW5kZXhpbmc6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIHRpbWVzdGFtcDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzID0gei5vYmplY3Qoe1xuICAgIGhlYWRlcjogei5mdW5jdGlvbigpLmFyZ3MoU3VwcG9ydGVkQXBwbGljYXRpb25zLCBTY2FsYWJpbGl0eVRlc3RUeXBlcykucmV0dXJucyh6LnN0cmluZygpKSxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogei5zdHJpbmcoKSxcbiAgICBzdGFydFNjYWxhYmlsaXR5VGVzdDogei5zdHJpbmcoKSxcbiAgICBzdWNjZXNzOiB6LnN0cmluZygpLFxuICAgIGZhaWx1cmU6IHouZnVuY3Rpb24oKS5hcmdzKFNjYWxhYmlsaXR5VGVzdFR5cGVzLCB6LnN0cmluZygpLCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIHouc3RyaW5nKCksIHouc3RyaW5nKCksIHoucmVjb3JkKFRlc3RSZXN1bHRzLCB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpKSlcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKSxcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bkFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogei5zdHJpbmcoKSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVEFyZ3MgPSB6LmludGVyc2VjdGlvbihBUFRQcm92aXNpb25PcHRpb25zLCBBUFRQZXJmb3JtYW5jZVRlc3RBcmdzLCBBUFRTY2FsYWJpbGl0eVRlc3RBcmdzKTtcbiIsImltcG9ydCB7IFBlcmZvcm1hbmNlVGVzdFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvRENBUFQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4vaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0JztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4vaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4vaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4vaGVscGVycy9ydW5QZXJmb3JtYW5jZVRlc3QnO1xuaW1wb3J0IHsgUnVuMSwgUnVuMiB9IGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKTtcbiAgICAvLyBQcm92aXNpb24gdGhlIGNsdXN0ZXJcbiAgICBjb25zdCB7IGN3ZCwgZW52aXJvbm1lbnQsIH0gPSBhd2FpdCBwcm92aXNpb25DbHVzdGVyKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCB0cnVlKTtcbiAgICAvLyBSdW4gdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIHRlc3RcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLmJhc2VsaW5lLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFJ1bjEpO1xuICAgIC8vIFJ1biB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0XG4gICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5yZWdyZXNzaW9uLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIFJ1bjIpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZXBvcnRcbiAgICBhd2FpdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0KHtcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4vaGVscGVycy9nZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0JztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4vaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4vaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJ1blNjYWxhYmlsaXR5VGVzdCB9IGZyb20gJy4vaGVscGVycy9ydW5TY2FsYWJpbGl0eVRlc3QnO1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKTtcbiAgICAvLyBQcm92aXNpb24gdGhlIGNsdXN0ZXJcbiAgICBjb25zdCB7IGN3ZCwgZW52aXJvbm1lbnQsIGxpY2Vuc2UgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0sIGZhbHNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ29uZS1ub2RlJywge1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xuICAgIC8vIFJ1biB0aGUgc2NhbGFiaWxpdHkgdGVzdCB3aXRoIGEgdHdvLW5vZGUgY2x1c3RlclxuICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgndHdvLW5vZGUnLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG4gICAgLy8gUnVuIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IHdpdGggYSBvbmUtbm9kZSBjbHVzdGVyXG4gICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdmb3VyLW5vZGUnLCB7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHNjYWxhYmlsaXR5IHJlcG9ydFxuICAgIGF3YWl0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQoe1xuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBhc3luY0V4aXRIb29rLCBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5leHBvcnQgY29uc3QgQWN0aW9uSGFuZGxlciA9IGFzeW5jIChwcm9ncmFtLCB7IGFjdGlvbiwgZXJyb3JIYW5kbGVyIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBvcHMgPSBvcHRpb25zIHx8IHByb2dyYW0ub3B0cygpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBhc3luY0V4aXRIb29rKGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGVycm9ySGFuZGxlcihvcHMpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSByZWplY3RpbmcgdGhlIHByb21pc2UgdG8gYXZvaWQgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIFwiQ2FsbGluZyBwcm9jZXNzLmV4aXRcIiBsb2cgbWVzc2FnZSBmcm9tIGV4aXQtaG9va1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyO1xuICAgICAgICAgICAgICAgIHJlamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgd2FpdDogNjAgKiAxICogMTAwMFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uKG9wcykuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLmlzc3Vlcy5mb3JFYWNoKGlzc3VlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBVbmFibGUgdG8gcGFyc2Ugb3B0aW9uICR7aXNzdWUucGF0aC5qb2luKCcsJyl9OiAke2lzc3VlLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncmFjZWZ1bEV4aXQoMSk7XG4gICAgICAgIH0pO1xuICAgIH0pLmNhdGNoKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gYXNzdW1lIGEgY2xlYW4gZXhpdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgQ29tbWFuZCBhcyBDb21tYW5kZXIsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZXRPdXRwdXREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dldFByb2R1Y3QnO1xuaW1wb3J0IHsgcHJvdmlzaW9uQ2x1c3RlciB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuUGVyZm9ybWFuY2VUZXN0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0JztcbmltcG9ydCB7IHJ1blNjYWxhYmlsaXR5VGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdCc7XG5pbXBvcnQgeyB0ZWFyZG93bkNsdXN0ZXIgfSBmcm9tICcuLi9hcHQvaGVscGVycy90ZWFyZG93bkNsdXN0ZXInO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBnZW5lcmljLCBpbml0LCBSdW4xLCBSdW4yIH0gZnJvbSAnLi4vYXB0L21lc3NhZ2VzJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlIH0gZnJvbSAnLi4vYXB0L3BlcmZvcm1hbmNlJztcbmltcG9ydCB7IFNjYWxhYmlsaXR5IH0gZnJvbSAnLi4vYXB0L3NjYWxhYmlsaXR5JztcbmltcG9ydCB7IEFjdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9oZWxwZXJzL0FjdGlvbkhhbmRsZXInO1xuaW1wb3J0IHsgdGltZWJvbWIgfSBmcm9tICcuLi9oZWxwZXJzL2xpY2VuY2VzJztcbmltcG9ydCB7IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyB9IGZyb20gJy4uL3R5cGVzL0FwcGxpY2F0aW9uJztcbmltcG9ydCB7IFJlcG9ydFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvRENBUFQnO1xuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kZXIoKTtcbmNvbnN0IERlZmF1bHRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHRoZSBjb25zb2xlIGFuZCBzaG93IGEgd2VsY29tZSBtZXNzYWdlXG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXHgxQmMnKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2VuZXJpYy5oZWFkZXIpO1xuICAgICAgICAvLyBHZXQgdGhlIHByb2R1Y3QgZnJvbSB0aGUgYXJncyBvciBhc2sgZm9yIGl0IG5pY2VseVxuICAgICAgICBjb25zdCBwcm9kdWN0ID0gb3B0aW9ucy5wcm9kdWN0IHx8IGF3YWl0IGdldFByb2R1Y3QoKTtcbiAgICAgICAgLy8gU2hvdyB0aGUgaW5pdCBtZXNzYWdlXG4gICAgICAgIGNvbnNvbGUubG9nKGluaXQuaGVhZGVyKHByb2R1Y3QpKTtcbiAgICAgICAgLy8gQXNrIGZvciB0aGUgdXNlciB0byBjb25maXJtIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFBlcmZvcm1hbmNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IHByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJlcG9ydENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3BlcmZvcm1hbmNlJykge1xuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPIGltcHJvdmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfVxufSk7XG5jb25zdCBQZXJmb3JtYW5jZVRlc3RDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFBlcmZvcm1hbmNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICAgIH1cbn0pO1xuY29uc3QgUnVuMUNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KCdiYXNlbGluZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApXG4gICAgICAgIH0sIFJ1bjEpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW4yQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoJ2Jhc2VsaW5lJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcClcbiAgICAgICAgfSwgUnVuMik7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFNjYWxhYmlsaXR5VGVzdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3Rlcih7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPIGltcHJvdmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfVxufSk7XG5jb25zdCBSdW4zQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ29uZS1ub2RlJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiB0aW1lYm9tYltvcHRpb25zLnByb2R1Y3RdLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuNENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCd0d28tbm9kZScsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogdGltZWJvbWJbb3B0aW9ucy5wcm9kdWN0XSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjVDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnZm91ci1ub2RlJywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiB0aW1lYm9tYltvcHRpb25zLnByb2R1Y3RdLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUHJvdmlzaW9uQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBwcm92aXNpb25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0sIHRydWUpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBUZWFyZG93bkNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggYXB0JylcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKHRydWUpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdkZWZhdWx0JywgeyBpc0RlZmF1bHQ6IHRydWUsIGhpZGRlbjogdHJ1ZSB9KVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgRGVmYXVsdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwZXJmb3JtYW5jZScpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFBlcmZvcm1hbmNlVGVzdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdzY2FsYWJpbGl0eScpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IHNjYWxhYmlsaXR5IHRlc3QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBTY2FsYWJpbGl0eVRlc3RDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncmVwb3J0JylcbiAgICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIGEgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgcmVwb3J0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHlwZSA8dHlwZT4nLCAnVGhlIHR5cGUgb2YgcmVwb3J0IHRvIGdlbmVyYXRlJykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFJlcG9ydFR5cGVzLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUmVwb3J0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjEnKVxuICAgIC5kZXNjcmlwdGlvbignU3RhcnQgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gdGVzdCAocnVuIDEpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjFDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMicpXG4gICAgLmRlc2NyaXB0aW9uKCdDb250aW51ZSB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3Rpbmcgd2l0aCBydW4gMicpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW4yQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjMnKVxuICAgIC5kZXNjcmlwdGlvbignQ29udGludWUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHdpdGggcnVuIDMnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuM0NvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW40JylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbnRpbnVlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyB3aXRoIHJ1biA0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuNScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb250aW51ZSB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3Rpbmcgd2l0aCBydW4gNScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW41Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdQcm92aXNpb24gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGNsdXN0ZXIgb24gQVdTJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBQcm92aXNpb25Db21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgndGVhcmRvd24nKVxuICAgIC5kZXNjcmlwdGlvbignVGVybWluYXRlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgVGVhcmRvd25Db21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpLmNhdGNoKCgpID0+IGdyYWNlZnVsRXhpdCgxKSk7XG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFJlY2VpdmVkIHRlcm0gc2lnbmFsLCB0cnlpbmcgdG8gc3RvcCBncmFjZWZ1bGx5IPCfkqpgKTtcbiAgICBncmFjZWZ1bEV4aXQoKTtcbn0pO1xuIl0sIm5hbWVzIjpbImN3ZCIsInB3ZCIsInByb2dyZXNzQmFyIiwiQ29tbWFuZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOztBQ0E1RSxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssS0FBSztBQUN6QyxJQUFJLFFBQVEsS0FBSztBQUNqQixRQUFRLEtBQUssVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsS0FBSyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEMsUUFBUSxLQUFLLFVBQVUsRUFBRSxPQUFPLENB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|