construct-hub 0.4.430 → 0.4.432
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/.jsii +9 -9
- package/docs/operator-runbook.md +96 -0
- package/lib/backend/orchestration/index.d.ts +5 -1
- package/lib/backend/orchestration/index.js +9 -2
- package/lib/backend/orchestration/read-uninstallable-report.d.ts +7 -0
- package/lib/backend/orchestration/read-uninstallable-report.js +20 -0
- package/lib/backend/orchestration/read-uninstallable-report.lambda.bundle/index.js +60016 -0
- package/lib/backend/orchestration/read-uninstallable-report.lambda.bundle/index.js.map +7 -0
- package/lib/backend/orchestration/read-uninstallable-report.lambda.d.ts +13 -0
- package/lib/backend/orchestration/read-uninstallable-report.lambda.js +33 -0
- package/lib/backend/orchestration/retry-uninstallable-packages.d.ts +19 -0
- package/lib/backend/orchestration/retry-uninstallable-packages.js +100 -0
- package/lib/backend/package-stats/index.d.ts +15 -2
- package/lib/backend/package-stats/index.js +79 -21
- package/lib/backend/package-stats/package-stats-aggregator.d.ts +7 -0
- package/lib/backend/package-stats/package-stats-aggregator.js +20 -0
- package/lib/backend/package-stats/package-stats-aggregator.lambda.bundle/index.js +62489 -0
- package/lib/backend/package-stats/{package-stats.lambda.bundle → package-stats-aggregator.lambda.bundle}/index.js.map +4 -4
- package/lib/backend/package-stats/package-stats-aggregator.lambda.d.ts +13 -0
- package/lib/backend/package-stats/package-stats-aggregator.lambda.js +78 -0
- package/lib/backend/package-stats/package-stats-chunker.d.ts +7 -0
- package/lib/backend/package-stats/package-stats-chunker.js +20 -0
- package/lib/backend/package-stats/package-stats-chunker.lambda.bundle/index.js +60075 -0
- package/lib/backend/package-stats/package-stats-chunker.lambda.bundle/index.js.map +7 -0
- package/lib/backend/package-stats/package-stats-chunker.lambda.d.ts +6 -0
- package/lib/backend/package-stats/package-stats-chunker.lambda.js +25 -0
- package/lib/backend/package-stats/package-stats-processor.d.ts +7 -0
- package/lib/backend/package-stats/package-stats-processor.js +20 -0
- package/lib/backend/package-stats/{package-stats.lambda.bundle → package-stats-processor.lambda.bundle}/index.js +36 -2556
- package/lib/backend/package-stats/package-stats-processor.lambda.bundle/index.js.map +7 -0
- package/lib/backend/package-stats/package-stats-processor.lambda.d.ts +10 -0
- package/lib/backend/package-stats/package-stats-processor.lambda.js +41 -0
- package/lib/backend-dashboard.js +11 -6
- package/lib/construct-hub.d.ts +1 -1
- package/lib/construct-hub.js +12 -4
- package/lib/package-sources/code-artifact.js +1 -1
- package/lib/package-sources/npmjs.js +1 -1
- package/lib/package-tag/index.js +3 -3
- package/lib/package-tag-group/index.js +2 -2
- package/lib/preload-file/index.js +1 -1
- package/lib/s3/storage.js +1 -1
- package/lib/spdx-license.js +1 -1
- package/package.json +9 -3
- package/lib/backend/package-stats/package-stats.d.ts +0 -7
- package/lib/backend/package-stats/package-stats.js +0 -20
- package/lib/backend/package-stats/package-stats.lambda.d.ts +0 -25
- package/lib/backend/package-stats/package-stats.lambda.js +0 -79
package/.jsii
CHANGED
|
@@ -4438,7 +4438,7 @@
|
|
|
4438
4438
|
"immutable": true,
|
|
4439
4439
|
"locationInModule": {
|
|
4440
4440
|
"filename": "src/construct-hub.ts",
|
|
4441
|
-
"line":
|
|
4441
|
+
"line": 596
|
|
4442
4442
|
},
|
|
4443
4443
|
"name": "allAlarms",
|
|
4444
4444
|
"type": {
|
|
@@ -4458,7 +4458,7 @@
|
|
|
4458
4458
|
"immutable": true,
|
|
4459
4459
|
"locationInModule": {
|
|
4460
4460
|
"filename": "src/construct-hub.ts",
|
|
4461
|
-
"line":
|
|
4461
|
+
"line": 604
|
|
4462
4462
|
},
|
|
4463
4463
|
"name": "grantPrincipal",
|
|
4464
4464
|
"overrides": "aws-cdk-lib.aws_iam.IGrantable",
|
|
@@ -4475,7 +4475,7 @@
|
|
|
4475
4475
|
"immutable": true,
|
|
4476
4476
|
"locationInModule": {
|
|
4477
4477
|
"filename": "src/construct-hub.ts",
|
|
4478
|
-
"line":
|
|
4478
|
+
"line": 566
|
|
4479
4479
|
},
|
|
4480
4480
|
"name": "highSeverityAlarms",
|
|
4481
4481
|
"type": {
|
|
@@ -4494,7 +4494,7 @@
|
|
|
4494
4494
|
"immutable": true,
|
|
4495
4495
|
"locationInModule": {
|
|
4496
4496
|
"filename": "src/construct-hub.ts",
|
|
4497
|
-
"line":
|
|
4497
|
+
"line": 608
|
|
4498
4498
|
},
|
|
4499
4499
|
"name": "ingestionQueue",
|
|
4500
4500
|
"type": {
|
|
@@ -4510,7 +4510,7 @@
|
|
|
4510
4510
|
"immutable": true,
|
|
4511
4511
|
"locationInModule": {
|
|
4512
4512
|
"filename": "src/construct-hub.ts",
|
|
4513
|
-
"line":
|
|
4513
|
+
"line": 588
|
|
4514
4514
|
},
|
|
4515
4515
|
"name": "lowSeverityAlarms",
|
|
4516
4516
|
"type": {
|
|
@@ -4531,7 +4531,7 @@
|
|
|
4531
4531
|
"immutable": true,
|
|
4532
4532
|
"locationInModule": {
|
|
4533
4533
|
"filename": "src/construct-hub.ts",
|
|
4534
|
-
"line":
|
|
4534
|
+
"line": 577
|
|
4535
4535
|
},
|
|
4536
4536
|
"name": "mediumSeverityAlarms",
|
|
4537
4537
|
"type": {
|
|
@@ -6098,7 +6098,7 @@
|
|
|
6098
6098
|
"kind": "enum",
|
|
6099
6099
|
"locationInModule": {
|
|
6100
6100
|
"filename": "src/construct-hub.ts",
|
|
6101
|
-
"line":
|
|
6101
|
+
"line": 745
|
|
6102
6102
|
},
|
|
6103
6103
|
"members": [
|
|
6104
6104
|
{
|
|
@@ -21425,6 +21425,6 @@
|
|
|
21425
21425
|
"symbolId": "src/package-sources/npmjs:NpmJsProps"
|
|
21426
21426
|
}
|
|
21427
21427
|
},
|
|
21428
|
-
"version": "0.4.
|
|
21429
|
-
"fingerprint": "
|
|
21428
|
+
"version": "0.4.432",
|
|
21429
|
+
"fingerprint": "rl51E6Mkx5C9N2x3ZQYKrcBHY03wV20sXu8XVJqtrDQ="
|
|
21430
21430
|
}
|
package/docs/operator-runbook.md
CHANGED
|
@@ -681,6 +681,57 @@ Two workflows are available for reprocessing of individual items:
|
|
|
681
681
|
}
|
|
682
682
|
```
|
|
683
683
|
|
|
684
|
+
## :package: Missing Package Documentation
|
|
685
|
+
|
|
686
|
+
### Description
|
|
687
|
+
|
|
688
|
+
When documentation for a package is not available, it could be due to several reasons:
|
|
689
|
+
|
|
690
|
+
1. **Uninstallable Package**: The package cannot be installed during the documentation generation process
|
|
691
|
+
2. **Corrupt Assembly**: The package's assembly.json file is corrupted or invalid
|
|
692
|
+
3. **Transliteration Error**: The documentation generation process failed for a specific language
|
|
693
|
+
4. **Missing Dependencies**: Required dependencies are not available
|
|
694
|
+
|
|
695
|
+
### Investigation
|
|
696
|
+
|
|
697
|
+
1. **Check the Uninstallable Packages Report**: In the backend dashboard, review the "Package Versions Report | Uninstallable" section to see if the package is listed as uninstallable.
|
|
698
|
+
|
|
699
|
+
2. **Review Package Directory**: Check the package's S3 directory (`data/<package-name>/v<version>/`) for error marker files:
|
|
700
|
+
- `uninstallable` - Package cannot be installed
|
|
701
|
+
- `*.corruptassembly` - Assembly file is corrupted
|
|
702
|
+
- `*.transliteration-failed` - Transliteration failed for a language
|
|
703
|
+
|
|
704
|
+
3. **Check Orchestration Logs**: Review the orchestration state machine execution logs for the specific package to identify the failure point.
|
|
705
|
+
|
|
706
|
+
4. **Examine ECS Task Logs**: If the failure occurred during documentation generation, check the ECS task logs in CloudWatch for detailed error messages.
|
|
707
|
+
|
|
708
|
+
### Resolution
|
|
709
|
+
|
|
710
|
+
1. **For Uninstallable Packages**: Use the "Retry Uninstallable Packages" button in the backend dashboard to automatically retry all uninstallable packages. This will:
|
|
711
|
+
- Read the current uninstallable packages report
|
|
712
|
+
- Trigger reprocessing for each uninstallable package
|
|
713
|
+
- Note: The inventory report will be updated automatically by the scheduled inventory canary, but it processes packages incrementally, so it may take a few hours for all changes to be fully reflected in the dashboard
|
|
714
|
+
- Warning: This may trigger `Orchestration/Resource/ExecutionsFailed` and `Orchestration/DLQ/NotEmpty` alarms since some packages may still fail on retry and be sent to the dead letter queue
|
|
715
|
+
|
|
716
|
+
2. **For Individual Packages**: Use the "ReprocessDocumentationPerPackage" state machine to retry a specific package:
|
|
717
|
+
```json
|
|
718
|
+
{
|
|
719
|
+
"Prefix": "data/<package-name>/v<package-version>"
|
|
720
|
+
}
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
3. **For Systematic Issues**: If many packages are failing, investigate the root cause:
|
|
724
|
+
- Check if there are issues with the documentation generation tooling
|
|
725
|
+
- Verify that all required dependencies and services are available
|
|
726
|
+
- Review recent changes to the transliterator or documentation generator
|
|
727
|
+
|
|
728
|
+
### Prevention
|
|
729
|
+
|
|
730
|
+
- Monitor the uninstallable packages count metric regularly
|
|
731
|
+
- Set up alerts for increases in missing documentation
|
|
732
|
+
- Regularly review and update the documentation generation tooling
|
|
733
|
+
- Ensure proper testing of changes to the transliterator pipeline
|
|
734
|
+
|
|
684
735
|
--------------------------------------------------------------------------------
|
|
685
736
|
|
|
686
737
|
### `ConstructHub/Sources/NpmJs/Canary/SLA-Breached`
|
|
@@ -769,6 +820,51 @@ to determine what is happening and resolve the problem.
|
|
|
769
820
|
Once the canary starts running normally again, the alarm will clear itself
|
|
770
821
|
without requiring any further intervention.
|
|
771
822
|
|
|
823
|
+
### `ConstructHub/PackageStats/Failures`
|
|
824
|
+
|
|
825
|
+
#### Description
|
|
826
|
+
|
|
827
|
+
The package stats state machine has failed. This means the `stats.json` file
|
|
828
|
+
containing NPM download statistics was not updated successfully. The stats are
|
|
829
|
+
used to display download counts on package pages.
|
|
830
|
+
|
|
831
|
+
#### Investigation
|
|
832
|
+
|
|
833
|
+
The package stats feature uses a Step Functions state machine that orchestrates
|
|
834
|
+
three Lambda functions:
|
|
835
|
+
|
|
836
|
+
1. **Chunker** - Splits the package list into chunks for parallel processing
|
|
837
|
+
2. **Processor** - Fetches NPM download stats for each chunk of packages
|
|
838
|
+
3. **Aggregator** - Combines all chunks into the final `stats.json` file
|
|
839
|
+
|
|
840
|
+
In the backend dashboard under *Package Stats*, click the *Package Stats State
|
|
841
|
+
Machine* button to access the Step Functions console. Review failed executions
|
|
842
|
+
to identify which step failed:
|
|
843
|
+
|
|
844
|
+
- If the **ChunkPackages** step failed, check the Chunker function logs
|
|
845
|
+
- If the **ProcessChunksMap** step failed, check the Processor function logs
|
|
846
|
+
- If the **AggregateResults** step failed, check the Aggregator function logs
|
|
847
|
+
|
|
848
|
+
Common failure causes:
|
|
849
|
+
- NPM API throttling or unavailability (affects Processor)
|
|
850
|
+
- Large number of packages causing timeout (should be handled by chunking)
|
|
851
|
+
- S3 access issues (affects all functions)
|
|
852
|
+
- Temporary chunk files not cleaned up properly (affects Aggregator)
|
|
853
|
+
|
|
854
|
+
For additional recommendations for diving into CloudWatch Logs, refer to the
|
|
855
|
+
[Diving into Lambda Function logs in CloudWatch Logs][#lambda-log-dive] section.
|
|
856
|
+
|
|
857
|
+
#### Resolution
|
|
858
|
+
|
|
859
|
+
The alarm will automatically go back to green once the next scheduled execution
|
|
860
|
+
of the state machine succeeds. The state machine runs daily by default.
|
|
861
|
+
|
|
862
|
+
If the failure was transient, no action is needed. If the issue persists,
|
|
863
|
+
manually trigger a new execution of the state machine from the Step Functions
|
|
864
|
+
console after addressing the root cause.
|
|
865
|
+
|
|
866
|
+
--------------------------------------------------------------------------------
|
|
867
|
+
|
|
772
868
|
## :information_source: General Recommendations
|
|
773
869
|
|
|
774
870
|
### Diving into Lambda Function logs in CloudWatch Logs
|
|
@@ -7,6 +7,7 @@ import { IBucket } from 'aws-cdk-lib/aws-s3';
|
|
|
7
7
|
import { IQueue } from 'aws-cdk-lib/aws-sqs';
|
|
8
8
|
import { IStateMachine } from 'aws-cdk-lib/aws-stepfunctions';
|
|
9
9
|
import { Construct } from 'constructs';
|
|
10
|
+
import { AlarmSeverities } from '../../api';
|
|
10
11
|
import { Repository } from '../../codeartifact/repository';
|
|
11
12
|
import { Monitoring } from '../../monitoring';
|
|
12
13
|
import { OverviewDashboard } from '../../overview-dashboard';
|
|
@@ -15,7 +16,6 @@ import { DenyList } from '../deny-list';
|
|
|
15
16
|
import { EcsTaskMonitor } from '../ecs-task-monitor';
|
|
16
17
|
import { FeedBuilder } from '../feed-builder';
|
|
17
18
|
import { Transliterator, TransliteratorVpcEndpoints } from '../transliterator';
|
|
18
|
-
import { AlarmSeverities } from '../../api';
|
|
19
19
|
export interface OrchestrationProps {
|
|
20
20
|
/**
|
|
21
21
|
* The bucket in which to source assemblies to transliterate.
|
|
@@ -97,6 +97,10 @@ export declare class Orchestration extends Construct {
|
|
|
97
97
|
* through the backend data pipeline.
|
|
98
98
|
*/
|
|
99
99
|
readonly regenerateAllDocumentationPerPackage: IStateMachine;
|
|
100
|
+
/**
|
|
101
|
+
* The state machine operators can use to retry processing uninstallable packages.
|
|
102
|
+
*/
|
|
103
|
+
readonly retryUninstallablePackages: IStateMachine;
|
|
100
104
|
/**
|
|
101
105
|
* The function that builds the catalog.
|
|
102
106
|
*/
|
|
@@ -11,6 +11,8 @@ const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
|
|
|
11
11
|
const constructs_1 = require("constructs");
|
|
12
12
|
const needs_catalog_update_1 = require("./needs-catalog-update");
|
|
13
13
|
const redrive_state_machine_1 = require("./redrive-state-machine");
|
|
14
|
+
const retry_uninstallable_packages_1 = require("./retry-uninstallable-packages");
|
|
15
|
+
const api_1 = require("../../api");
|
|
14
16
|
const deep_link_1 = require("../../deep-link");
|
|
15
17
|
const monitoring_1 = require("../../monitoring");
|
|
16
18
|
const runbook_url_1 = require("../../runbook-url");
|
|
@@ -19,7 +21,6 @@ const catalog_builder_1 = require("../catalog-builder");
|
|
|
19
21
|
const ecs_task_monitor_1 = require("../ecs-task-monitor");
|
|
20
22
|
const constants_1 = require("../shared/constants");
|
|
21
23
|
const transliterator_1 = require("../transliterator");
|
|
22
|
-
const api_1 = require("../../api");
|
|
23
24
|
const REPROCESS_PER_PACKAGE_STATE_MACHINE_NAME = 'ReprocessDocumentationPerPackage';
|
|
24
25
|
/**
|
|
25
26
|
* This retry policy is used for all items in the state machine and allows ample
|
|
@@ -328,6 +329,12 @@ class Orchestration extends constructs_1.Construct {
|
|
|
328
329
|
this.regenerateAllDocumentation = regenerateAllDocumentation.stateMachine;
|
|
329
330
|
this.regenerateAllDocumentationPerPackage =
|
|
330
331
|
regenerateAllDocumentation.processPackageVersions;
|
|
332
|
+
// Create retry uninstallable packages workflow
|
|
333
|
+
const retryUninstallable = new retry_uninstallable_packages_1.RetryUninstallablePackages(this, 'RetryUninstallablePackages', {
|
|
334
|
+
bucket: props.bucket,
|
|
335
|
+
orchestrationStateMachine: this.stateMachine,
|
|
336
|
+
});
|
|
337
|
+
this.retryUninstallablePackages = retryUninstallable.stateMachine;
|
|
331
338
|
props.overviewDashboard.addConcurrentExecutionMetricToDashboard(needsCatalogUpdateFunction, 'NeedsCatalogUpdateLambda');
|
|
332
339
|
}
|
|
333
340
|
metricStatesExecutionFailureRate(opts) {
|
|
@@ -621,4 +628,4 @@ function stateMachineNameFrom(nodePath) {
|
|
|
621
628
|
// Poor man's replace all...
|
|
622
629
|
return nodePath.split(/[^a-z0-9+!@.()=_'-]+/i).join('.');
|
|
623
630
|
}
|
|
624
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9vcmNoZXN0cmF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1QztBQUN2QywrREFRb0M7QUFFcEMsaURBQXdEO0FBQ3hELHVEQUE0RDtBQUc1RCxpREFBcUU7QUFDckUscUVBWXVDO0FBQ3ZDLDZEQUE2RDtBQUM3RCwyQ0FBdUM7QUFDdkMsaUVBQTREO0FBQzVELG1FQUE4RDtBQUU5RCwrQ0FBK0Q7QUFDL0QsaURBQXdEO0FBRXhELG1EQUFnRDtBQUNoRCxrRUFBb0U7QUFDcEUsd0RBQW9EO0FBRXBELDBEQUFxRDtBQUVyRCxtREFPNkI7QUFDN0Isc0RBQStFO0FBQy9FLG1DQUEyRDtBQUUzRCxNQUFNLHdDQUF3QyxHQUM1QyxrQ0FBa0MsQ0FBQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0IsV0FBVyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSw0QkFBNEIsR0FBRztJQUNuQyxRQUFRLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdCLHVFQUF1RTtJQUN2RSxXQUFXLEVBQUUsR0FBRztJQUNoQixXQUFXLEVBQUUsRUFBRTtDQUNoQixDQUFDO0FBa0VGOztHQUVHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFtRDFDLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lB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QUs7WUFDakIsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEQsT0FBTyxFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxQixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQy9DLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQjtJQUM1Qyw0QkFBNEI7SUFDNUIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgTWF0aEV4cHJlc3Npb24sXG4gIE1hdGhFeHByZXNzaW9uT3B0aW9ucyxcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBTdGF0aXN0aWMsXG4gIFRyZWF0TWlzc2luZ0RhdGEsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IFN1Ym5ldFNlbGVjdGlvbiwgVnBjLCBJU2VjdXJpdHlHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2x1c3RlciwgSUNsdXN0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IElGdW5jdGlvbiwgVHJhY2luZyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVF1ZXVlLCBRdWV1ZSwgUXVldWVFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQge1xuICBDaG9pY2UsXG4gIENvbmRpdGlvbixcbiAgSW50ZWdyYXRpb25QYXR0ZXJuLFxuICBJU3RhdGVNYWNoaW5lLFxuICBKc29uUGF0aCxcbiAgTWFwLFxuICBQYXNzLFxuICBTdGF0ZU1hY2hpbmUsXG4gIFN1Y2NlZWQsXG4gIEZhaWwsXG4gIFRhc2tJbnB1dCxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBOZWVkc0NhdGFsb2dVcGRhdGUgfSBmcm9tICcuL25lZWRzLWNhdGFsb2ctdXBkYXRlJztcbmltcG9ydCB7IFJlZHJpdmVTdGF0ZU1hY2hpbmUgfSBmcm9tICcuL3JlZHJpdmUtc3RhdGUtbWFjaGluZSc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vY29kZWFydGlmYWN0L3JlcG9zaXRvcnknO1xuaW1wb3J0IHsgc3FzUXVldWVVcmwsIHN0YXRlTWFjaGluZVVybCB9IGZyb20gJy4uLy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBNb25pdG9yaW5nLCBhZGRBbGFybSB9IGZyb20gJy4uLy4uL21vbml0b3JpbmcnO1xuaW1wb3J0IHsgT3ZlcnZpZXdEYXNoYm9hcmQgfSBmcm9tICcuLi8uLi9vdmVydmlldy1kYXNoYm9hcmQnO1xuaW1wb3J0IHsgUlVOQk9PS19VUkwgfSBmcm9tICcuLi8uLi9ydW5ib29rLXVybCc7XG5pbXBvcnQgeyBncmF2aXRvbkxhbWJkYUlmQXZhaWxhYmxlIH0gZnJvbSAnLi4vX2xhbWJkYS1hcmNoaXRlY3R1cmUnO1xuaW1wb3J0IHsgQ2F0YWxvZ0J1aWxkZXIgfSBmcm9tICcuLi9jYXRhbG9nLWJ1aWxkZXInO1xuaW1wb3J0IHsgRGVueUxpc3QgfSBmcm9tICcuLi9kZW55LWxpc3QnO1xuaW1wb3J0IHsgRWNzVGFza01vbml0b3IgfSBmcm9tICcuLi9lY3MtdGFzay1tb25pdG9yJztcbmltcG9ydCB7IEZlZWRCdWlsZGVyIH0gZnJvbSAnLi4vZmVlZC1idWlsZGVyJztcbmltcG9ydCB7XG4gIEFTU0VNQkxZX0tFWV9TVUZGSVgsXG4gIE1FVEFEQVRBX0tFWV9TVUZGSVgsXG4gIFBBQ0tBR0VfS0VZX1NVRkZJWCxcbiAgU1RPUkFHRV9LRVlfUFJFRklYLFxuICBDQVRBTE9HX0tFWSxcbiAgVU5QUk9DRVNTQUJMRV9QQUNLQUdFX0VSUk9SX05BTUUsXG59IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xuaW1wb3J0IHsgVHJhbnNsaXRlcmF0b3IsIFRyYW5zbGl0ZXJhdG9yVnBjRW5kcG9pbnRzIH0gZnJvbSAnLi4vdHJhbnNsaXRlcmF0b3InO1xuaW1wb3J0IHsgQWxhcm1TZXZlcml0aWVzLCBBbGFybVNldmVyaXR5IH0gZnJvbSAnLi4vLi4vYXBpJztcblxuY29uc3QgUkVQUk9DRVNTX1BFUl9QQUNLQUdFX1NUQVRFX01BQ0hJTkVfTkFNRSA9XG4gICdSZXByb2Nlc3NEb2N1bWVudGF0aW9uUGVyUGFja2FnZSc7XG5cbi8qKlxuICogVGhpcyByZXRyeSBwb2xpY3kgaXMgdXNlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBhbGxvd3MgYW1wbGVcbiAqIHJldHJ5IGF0dGVtcHRzIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBpbXBsZW1lbnQgYSBjdXN0b20gYmFja3ByZXNzdXJlXG4gKiBoYW5kbGluZyBtZWhhbmlzbS5cbiAqXG4gKiBUaGlzIGlzIG1lYW50IGFzIGEgc3RvcC1nYXAgdW50aWwgd2UgY2FuIGltcGxlbWVudCBhIG1vcmUgcmVzaWxpZW50IHN5c3RlbSxcbiAqIHdoaWNoIGxpa2VseSB3aWxsIGludm9sdmUgbW9yZSBTUVMgcXVldWVzLCBidXQgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJlXG4gKiB0aHJvdWdob3V0bHkgdmV0dGVkIGJlZm9yZSBpdCBpcyByb2xsZWQgb3V0IGV2ZXJ5d2hlcmUuXG4gKlxuICogQWZ0ZXIgMzAgYXR0ZW1wdHMsIGdpdmVuIHRoZSBwYXJhbWV0ZXJzLCB0aGUgbGFzdCBhdHRlbXB0IHdpbGwgd2FpdCBqdXN0XG4gKiB1bmRlciAxNiBtaW51dGVzLCB3aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciBjdXJyZW50bHkgcnVubmluZyBMYW1iZGFcbiAqIGZ1bmN0aW9ucyB0byBjb21wbGV0ZSAob3IgdGltZSBvdXQgYWZ0ZXIgMTUgbWludXRlcykuIFRoZSB0b3RhbCB0aW1lIHNwZW50XG4gKiB3YWl0aW5nIGJldHdlZW4gcmV0cmllcyBieSB0aGlzIHRpbWUgaXMganVzdCBvdmVyIDMgaG91cnMuIFRoaXMgaXMgYSBsb3Qgb2ZcbiAqIHRpbWUsIGJ1dCBpbiBleHRyZW1lIGJ1cnN0IHNpdHVhdGlvbnMgKGkuZTogcmVwcm9jZXNzaW5nIGV2ZXJ5dGhpbmcpLCB0aGlzXG4gKiBpcyBhY3R1YWxseSBhIGdvb2QgdGhpbmcuXG4gKi9cbmNvbnN0IFRIUk9UVExFX1JFVFJZX1BPTElDWSA9IHtcbiAgYmFja29mZlJhdGU6IDEuMSxcbiAgaW50ZXJ2YWw6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gIG1heEF0dGVtcHRzOiAzMCxcbn07XG5cbi8qKlxuICogVGhpcyByZXRyeSBwb2xpY3kgaXMgdXNlZCBmb3IgdHJhbnNsaXRlcmF0aW9uIHRhc2tzIGFuZCBhbGxvd3MgYW1wbGVcbiAqIHJldHJ5IGF0dGVtcHRzIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBpbXBsZW1lbnQgYSBjdXN0b20gYmFja3ByZXNzdXJlXG4gKiBoYW5kbGluZyBtZWhhbmlzbS5cbiAqXG4gKiBUaGlzIGlzIG1lYW50IGFzIGEgc3RvcC1nYXAgdW50aWwgd2UgY2FuIGltcGxlbWVudCBhIG1vcmUgcmVzaWxpZW50IHN5c3RlbSxcbiAqIHdoaWNoIGxpa2VseSB3aWxsIGludm9sdmUgbW9yZSBTUVMgcXVldWVzLCBidXQgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJlXG4gKiB0aHJvdWdob3V0bHkgdmV0dGVkIGJlZm9yZSBpdCBpcyByb2xsZWQgb3V0IGV2ZXJ5d2hlcmUuXG4gKlxuICogVGhlIGludGVydmFsIGlzIGRldGVybWluZWQgYnkgdGhlIGV4ZWN1dGlvbiBkdXJhdGlvbiB3ZSBjdXJyZW50bHkgZXhwZWN0IGZyb20ganNpaS1kb2NnZW4uXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvanNpaS1kb2NnZW4vYmxvYi9tYWluL3Rlc3QvZG9jZ2VuL3ZpZXcvZG9jdW1lbnRhdGlvbi50ZXN0LnRzI0wxMy5cbiAqXG4gKiBBcHBseSBhIGJpdCBvZiBiYWNrb2ZmIGJlY2F1c2Ugb3RoZXJ3aXNlIGluIGNhc2VzIG9mIGNvbnRlbnRpb24gd2UncmUgaGFtbWVyaW5nIHRoZSBFQ1NcbiAqIGZyb250ZW5kIHNlcnZpY2UuXG4gKi9cbmNvbnN0IERPQ0dFTl9USFJPVFRMRV9SRVRSWV9QT0xJQ1kgPSB7XG4gIGludGVydmFsOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAvLyAxIG1pbnV0ZSAqIDEuMV40NSAvIGxuKDEuMSkgfj0gbWF4IDEzIGhvdXJzIHRvdGFsIHRpbWUgZm9yIGEgcGFja2FnZVxuICBiYWNrb2ZmUmF0ZTogMS4xLFxuICBtYXhBdHRlbXB0czogNDUsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2hlc3RyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIHRvIHNvdXJjZSBhc3NlbWJsaWVzIHRvIHRyYW5zbGl0ZXJhdGUuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2RlQXJ0aWZhY3QgcmVnaXN0cnkgdG8gdXNlIGZvciByZWd1bGFyIG9wZXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjb2RlQXJ0aWZhY3Q/OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9uaXRvcmluZyBoYW5kbGVyIHRvIHJlZ2lzdGVyIGFsYXJtcyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZzogTW9uaXRvcmluZztcblxuICAvKipcbiAgICogVGhlIG92ZXJ2aWV3IGRhc2hib2FyZCB0byByZWdpc3RlciBkYXNoYm9hcmRzIHdpdGguXG4gICAqL1xuICByZWFkb25seSBvdmVydmlld0Rhc2hib2FyZDogT3ZlcnZpZXdEYXNoYm9hcmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgaW4gd2hpY2ggdG8gcGxhY2UgbmV0d29ya2VkIHJlc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IFZwYztcblxuICAvKipcbiAgICogVGhlIFZQQyBzdWJuZXQgc2VsZWN0aW9uIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFZQQyBlbmRwb2ludHMgdG8gdXNlIGZvciBpbnRlcmFjdGluZyB3aXRoIENvZGVBcnRpZmFjdCBhbmQgUzMuXG4gICAqL1xuICByZWFkb25seSB2cGNFbmRwb2ludHM/OiBUcmFuc2xpdGVyYXRvclZwY0VuZHBvaW50cztcblxuICAvKipcbiAgICogVlBDIFNlY3VyaXR5IGdyb3VwcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgRUNTIHRhc2tzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU2VjdXJpdHlHcm91cHM/OiBJU2VjdXJpdHlHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyBzaG91bGQgZXhlY3V0aW9uIGxvZ3MgYmUgcmV0YWluZWQ/XG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVEVOX1lFQVJTXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVueSBsaXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVueUxpc3Q6IERlbnlMaXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RydWN0IHRoYXQgZ2VuZXJhdGVzIFJTUy9BVE9NIGZlZWRcbiAgICovXG4gIHJlYWRvbmx5IGZlZWRCdWlsZGVyOiBGZWVkQnVpbGRlcjtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGFsYXJtIHNldmVyaXRpZXMuXG4gICAqL1xuICByZWFkb25seSBhbGFybVNldmVyaXRpZXM/OiBBbGFybVNldmVyaXRpZXM7XG59XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIHRoZSBiYWNrZW5kIHByb2Nlc3NpbmcgdGFza3MgdXNpbmcgYSBTdGVwRnVuY3Rpb25zIFN0YXRlIE1hY2hpbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcmNoZXN0cmF0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBtYWNoaW5lIHRoYXQgc2hvdWxkIGJlIHRyaWdnZXJlZCBmb3Igc3RhcnRpbmcgYmFjay1lbmQgcHJvY2Vzc2luZ1xuICAgKiBmb3IgYSBuZXdseSBkaXNjb3ZlcmVkIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBJU3RhdGVNYWNoaW5lO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVhZCBsZXR0ZXIgcXVldWUgZnJvbSB0aGUgc3RhdGUgbWFjaGluZS4gSW5wdXRzIGFuZCBlcnJvcnMgYXJlIHdyaXR0ZW5cbiAgICogdGhlcmUgaWYgdGhlIHN0YXRlIG1hY2hpbmUgZmFpbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlOiBJUXVldWU7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBvcGVyYXRvcnMgY2FuIHVzZSB0byByZWRyaXZlIG1lc3NhZ2VzIGZyb20gdGhlIGRlYWQgbGV0dGVyXG4gICAqIHF1ZXVlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlZHJpdmVGdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gb3BlcmF0b3JzIGNhbiB1c2UgdG8gcmVwcm9jZXNzIGFsbCBpbmRleGVkIHBhY2thZ2VzIHRocm91Z2hcbiAgICogdGhlIGJhY2tlbmQgZGF0YSBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbjogSVN0YXRlTWFjaGluZTtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdG9ycyBjYW4gdXNlIHRvIHJlcHJvY2VzcyBhIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvblxuICAgKiB0aHJvdWdoIHRoZSBiYWNrZW5kIGRhdGEgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb25QZXJQYWNrYWdlOiBJU3RhdGVNYWNoaW5lO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBidWlsZHMgdGhlIGNhdGFsb2cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0J1aWxkZXI6IENhdGFsb2dCdWlsZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgRUNTIGNsdXN0ZXIgdXNlZCB0byBydW4gdGFza3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWNzQ2x1c3RlcjogSUNsdXN0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBFQ1MgdGFzayBtb25pdG9yIHRoYXQgd2F0Y2hlcyBvdmVyIHRoZSBgZWNzQ2x1c3RlcmAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWNzVGFza01vbml0b3I6IEVjc1Rhc2tNb25pdG9yO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNsaXRlcmF0b3IgdXNlZCBieSB0aGlzIG9yY2hlc3RyYXRpb24gd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsaXRlcmF0b3I6IFRyYW5zbGl0ZXJhdG9yO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT3JjaGVzdHJhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuZGVhZExldHRlclF1ZXVlID0gbmV3IFF1ZXVlKHRoaXMsICdETFEnLCB7XG4gICAgICBlbmNyeXB0aW9uOiBRdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgICByZXRlbnRpb25QZXJpb2Q6IER1cmF0aW9uLmRheXMoMTQpLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgcHJvcHMubW9uaXRvcmluZy5hZGRMb3dTZXZlcml0eUFsYXJtKFxuICAgICAgJ0JhY2tlbmQgT3JjaGVzdHJhdGlvbiBEZWFkLUxldHRlciBRdWV1ZSBpcyBub3QgZW1wdHknLFxuICAgICAgbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgZXhwcmVzc2lvbjogJ20xICsgbTInLFxuICAgICAgICBsYWJlbDogJ0RlYWQtTGV0dGVyIFF1ZXVlIG5vdCBlbXB0eScsXG4gICAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICAgIG0xOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZS5tZXRyaWNBcHByb3hpbWF0ZU51bWJlck9mTWVzc2FnZXNWaXNpYmxlKHtcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtMjogdGhpcy5kZWFkTGV0dGVyUXVldWUubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzTm90VmlzaWJsZSh7XG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCAnRExRQWxhcm0nLCB7XG4gICAgICAgIGFsYXJtTmFtZTogYCR7dGhpcy5kZWFkTGV0dGVyUXVldWUubm9kZS5wYXRofS9Ob3RFbXB0eWAsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICAnQmFja2VuZCBvcmNoZXN0cmF0aW9uIGRlYWQtbGV0dGVyIHF1ZXVlIGlzIG5vdCBlbXB0eS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSdW5Cb29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYERpcmVjdCBsaW5rIHRvIHF1ZXVlOiAke3Nxc1F1ZXVlVXJsKHRoaXMuZGVhZExldHRlclF1ZXVlKX1gLFxuICAgICAgICAgICdXYXJuaW5nOiBTdGF0ZSBNYWNoaW5lcyBleGVjdXRpb25zIHRoYXQgc2VudCBtZXNzYWdlcyB0byB0aGUgRExRIHdpbGwgbm90IHNob3cgYXMgXCJmYWlsZWRcIi4nLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAyLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIC8vIFNRUyBkb2VzIG5vdCBlbWl0IG1ldHJpY3MgaWYgdGhlIHF1ZXVlIGhhcyBiZWVuIGVtcHR5IGZvciBhIHdoaWxlLCB3aGljaCBpcyBHT09ELlxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBzZW5kVG9EZWFkTGV0dGVyUXVldWUgPSBuZXcgdGFza3MuU3FzU2VuZE1lc3NhZ2UoXG4gICAgICB0aGlzLFxuICAgICAgJ1NlbmQgdG8gRGVhZCBMZXR0ZXIgUXVldWUnLFxuICAgICAge1xuICAgICAgICBtZXNzYWdlQm9keTogVGFza0lucHV0LmZyb21Kc29uUGF0aEF0KCckJyksXG4gICAgICAgIHF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH1cbiAgICApLm5leHQobmV3IEZhaWwodGhpcywgJ1NlbnQgdG8gRExRJykpO1xuXG4gICAgY29uc3QgaWdub3JlID0gbmV3IFBhc3ModGhpcywgJ0lnbm9yZScpO1xuXG4gICAgdGhpcy5jYXRhbG9nQnVpbGRlciA9IG5ldyBDYXRhbG9nQnVpbGRlcih0aGlzLCAnQ2F0YWxvZ0J1aWxkZXInLCBwcm9wcyk7XG5cbiAgICBjb25zdCBhZGRUb0NhdGFsb2cgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKHRoaXMsICdBZGQgdG8gY2F0YWxvZy5qc29uJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY2F0YWxvZ0J1aWxkZXIuZnVuY3Rpb24sXG4gICAgICByZXN1bHRQYXRoOiAnJC5jYXRhbG9nQnVpbGRlck91dHB1dCcsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAnRVRhZy4kJzogJyQuUGF5bG9hZC5FVGFnJyxcbiAgICAgICAgJ1ZlcnNpb25JZC4kJzogJyQuUGF5bG9hZC5WZXJzaW9uSWQnLFxuICAgICAgfSxcbiAgICB9KVxuICAgICAgLy8gVGhpcyBoYXMgYSBjb25jdXJyZW5jeSBvZiAxLCBzbyB3ZSB3YW50IHRvIGFnZ3Jlc3NpdmVseSByZXRyeSBiZWluZyB0aHJvdHRsZWQgaGVyZS5cbiAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgIGVycm9yczogWydMYW1iZGEuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uJ10sXG4gICAgICAgIC4uLlRIUk9UVExFX1JFVFJZX1BPTElDWSxcbiAgICAgIH0pXG4gICAgICAuYWRkQ2F0Y2goc2VuZFRvRGVhZExldHRlclF1ZXVlLCB7XG4gICAgICAgIGVycm9yczogWydMYW1iZGEuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uJ10sXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgIH0pXG4gICAgICAuYWRkQ2F0Y2goc2VuZFRvRGVhZExldHRlclF1ZXVlLCB7XG4gICAgICAgIGVycm9yczogWydTdGF0ZXMuVGFza0ZhaWxlZCddLFxuICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvcicsXG4gICAgICB9KVxuICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICBlcnJvcnM6IFsnU3RhdGVzLkFMTCddLFxuICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvcicsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IG5lZWRzQ2F0YWxvZ1VwZGF0ZUZ1bmN0aW9uID0gbmV3IE5lZWRzQ2F0YWxvZ1VwZGF0ZShcbiAgICAgIHRoaXMsXG4gICAgICAnTmVlZHNDYXRhbG9nVXBkYXRlJyxcbiAgICAgIHtcbiAgICAgICAgYXJjaGl0ZWN0dXJlOiBncmF2aXRvbkxhbWJkYUlmQXZhaWxhYmxlKHRoaXMpLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnW0NvbnN0cnVjdEh1Yi9PcmNoZXN0cmF0aW9uL05lZWRzQ2F0YWxvZ1VwZGF0ZV0gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcGFja2FnZSB2ZXJzaW9uIHJlcXVpcmVzIGEgY2F0YWxvZyB1cGRhdGUnLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIENBVEFMT0dfQlVDS0VUX05BTUU6IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIENBVEFMT0dfT0JKRUNUX0tFWTogQ0FUQUxPR19LRVksXG4gICAgICAgIH0sXG4gICAgICAgIG1lbW9yeVNpemU6IDFfMDI0LFxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgfVxuICAgICk7XG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZChuZWVkc0NhdGFsb2dVcGRhdGVGdW5jdGlvbik7XG5cbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBjYXRhbG9nIG5lZWRzIHVwZGF0aW5nLiBJZiBzbywgdHJpZ2dlciBhZGRUb0NhdGFsb2cuXG4gICAgY29uc3QgYWRkVG9DYXRhbG9nSWZOZWVkZWQgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKFxuICAgICAgdGhpcyxcbiAgICAgICdDaGVjayB3aGV0aGVyIGNhdGFsb2cgbmVlZHMgdWRwYXRpbmcnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogbmVlZHNDYXRhbG9nVXBkYXRlRnVuY3Rpb24sXG4gICAgICAgIHBheWxvYWRSZXNwb25zZU9ubHk6IHRydWUsXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmNhdGFsb2dOZWVkc1VwZGF0aW5nJyxcbiAgICAgIH1cbiAgICApXG4gICAgICAuYWRkUmV0cnkoe1xuICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICAnTGFtYmRhLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbicsXG4gICAgICAgICAgJ0xhbWJkYS5Vbmtub3duJywgLy8gaGFwcGVucyB3aGVuIGEgbGFtYmRhIHRpbWVzIG91dC5cbiAgICAgICAgXSxcbiAgICAgICAgLi4uVEhST1RUTEVfUkVUUllfUE9MSUNZLFxuICAgICAgfSlcbiAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgZXJyb3JzOiBbJ0xhbWJkYS5Ub29NYW55UmVxdWVzdHNFeGNlcHRpb24nLCAnTGFtYmRhLlVua25vd24nXSxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgfSlcbiAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5UYXNrRmFpbGVkJ10sXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgIH0pXG4gICAgICAuYWRkQ2F0Y2goc2VuZFRvRGVhZExldHRlclF1ZXVlLCB7XG4gICAgICAgIGVycm9yczogWydTdGF0ZXMuQUxMJ10sXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgIH0pXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IENob2ljZSh0aGlzLCAnSXMgY2F0YWxvZyB1cGRhdGUgbmVlZGVkPycpXG4gICAgICAgICAgLndoZW4oXG4gICAgICAgICAgICBDb25kaXRpb24uYm9vbGVhbkVxdWFscygnJC5jYXRhbG9nTmVlZHNVcGRhdGluZycsIHRydWUpLFxuICAgICAgICAgICAgYWRkVG9DYXRhbG9nXG4gICAgICAgICAgKVxuICAgICAgICAgIC5vdGhlcndpc2UobmV3IFN1Y2NlZWQodGhpcywgJ0RvbmUnKSlcbiAgICAgICk7XG5cbiAgICAvLyBhd3MtY2RrLWxpYiBpcyBvbmUgb2YgdGhlIGJpZ2dlc3QgbGlicyBhbmQgcnVucyBpbiB+OG1pblxuICAgIC8vIFdlIGdpdmUgdGhlIHRhc2sgc29tZSBnZW5lcm91cyBleHRyYSBhbGxvd2FuY2UgdG8gY29tcGxldGUuXG4gICAgLy8gSWYgdGhlIHRhc2sgZXhjZWVkcyB0aGUgcnVudGltZSwgaXQncyB2ZXJ5IGxpa2VseSB0aGF0IHRoZXJlIGlzIGFuIGlzc3VlIHdpdGggdGhlIHRhc2sgZXhlY3V0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhlIHRpbWVvdXQgdmFsdWUgaXMgZGVsaWJlcmF0ZWx5IHNldCBjbG9zZSB0byB0aGUgZXhwZWN0ZWQgZXhlY3V0aW9uIHRpbWUsXG4gICAgLy8gdG8gYXZvaWQgYW4gZXhjZXNzaXZlIGN1bXVsYXRpdmUgcnVudGltZSB3aXRoIHJldHJpZXMgYW5kIHRvIG5vdCBub3JtYWxpemUgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IHJ1bnRpbWUuXG4gICAgY29uc3QgdHJhbnNsaXRlcmF0b3JUaW1lb3V0ID0gRHVyYXRpb24ubWludXRlcygxNSk7XG5cbiAgICB0aGlzLmVjc0NsdXN0ZXIgPSBuZXcgQ2x1c3Rlcih0aGlzLCAnQ2x1c3RlcicsIHtcbiAgICAgIGNvbnRhaW5lckluc2lnaHRzOiB0cnVlLFxuICAgICAgZW5hYmxlRmFyZ2F0ZUNhcGFjaXR5UHJvdmlkZXJzOiB0cnVlLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgfSk7XG4gICAgdGhpcy5lY3NUYXNrTW9uaXRvciA9IG5ldyBFY3NUYXNrTW9uaXRvcih0aGlzLmVjc0NsdXN0ZXIsICdNb25pdG9yJywge1xuICAgICAgY2x1c3RlcjogdGhpcy5lY3NDbHVzdGVyLFxuICAgICAgdGltZW91dDogdHJhbnNsaXRlcmF0b3JUaW1lb3V0LnBsdXMoRHVyYXRpb24ubWludXRlcygxMCkpLFxuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2xpdGVyYXRvciA9IG5ldyBUcmFuc2xpdGVyYXRvcih0aGlzLCAnVHJhbnNsaXRlcmF0b3InLCBwcm9wcyk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uID0gbmV3IFBhc3ModGhpcywgJ1RyYWNrIEV4ZWN1dGlvbiBJbmZvcycsIHtcbiAgICAgIGlucHV0UGF0aDogJyQkLkV4ZWN1dGlvbicsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICdJZC4kJzogJyQuSWQnLFxuICAgICAgICAnTmFtZS4kJzogJyQuTmFtZScsXG4gICAgICAgICdSb2xlQXJuLiQnOiAnJC5Sb2xlQXJuJyxcbiAgICAgICAgJ1N0YXJ0VGltZS4kJzogJyQuU3RhcnRUaW1lJyxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC4kVGFza0V4ZWN1dGlvbicsXG4gICAgfSlcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgUGFzcyh0aGlzLCAnUHJlcGFyZSBkb2MtZ2VuIEVDUyBDb21tYW5kJywge1xuICAgICAgICAgIHBhcmFtZXRlcnM6IHsgJ2NvbW1hbmQuJCc6ICdTdGF0ZXMuQXJyYXkoU3RhdGVzLkpzb25Ub1N0cmluZygkKSknIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuZG9jR2VuJyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5uZXh0KFxuICAgICAgICB0aGlzLnRyYW5zbGl0ZXJhdG9yXG4gICAgICAgICAgLmNyZWF0ZUVjc1J1blRhc2sodGhpcywgJ0dlbmVyYXRlIGRvY3MnLCB7XG4gICAgICAgICAgICBjbHVzdGVyOiB0aGlzLmVjc0NsdXN0ZXIsXG4gICAgICAgICAgICBpbnB1dFBhdGg6ICckLmRvY0dlbi5jb21tYW5kJyxcbiAgICAgICAgICAgIC8vIHRoZSBvdXRwdXQgZnJvbSB0aGUgdHJhbnNsaXRlcmF0b3IgdGFzayBpcyBub3QgdXNlZFxuICAgICAgICAgICAgLy8gd2UganVzdCBuZWVkIHRvIGtub3cgaWYgaXQgc3VjY2VlZGVkXG4gICAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICAgICAgLy8gYXdzLWNkay1saWIgc3VjY2VlZHMgaW4gcm91Z2hseSAxIGhvdXIsIHNvIHRoaXMgc2hvdWxkIGdpdmUgdXNcbiAgICAgICAgICAgIC8vIGVub3VnaCBvZiBhIGJ1ZmZlciBhbmQgcHJvYmFibHkgYWNjb3VudCBmb3IgYWxsIG90aGVyIGxpYnJhcmllcyBvdXQgdGhlcmUuXG4gICAgICAgICAgICB0aW1lb3V0OiB0cmFuc2xpdGVyYXRvclRpbWVvdXQsXG4gICAgICAgICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHByb3BzLnZwY1NlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgICAgLy8gVGhlIHRhc2sgY29kZSBzZW5kcyBhIGhlYXJ0YmVhdCBiYWNrIGV2ZXJ5IG1pbnV0ZSwgYnV0IGluIHJhcmVcbiAgICAgICAgICAgIC8vIGNhc2VzIHRoZSBmaXJzdCBoZWFydGJlYXQgbWF5IHRha2UgYSB3aGlsZSB0byBjb21lIGJhY2sgZHVlIHRvXG4gICAgICAgICAgICAvLyB0aGUgdGltZSBpdCB0YWtlcyB0byBwcm92aXNpb24gdGhlIHRhc2sgaW4gdGhlIGNsdXN0ZXIsIHNvIHdlXG4gICAgICAgICAgICAvLyBnaXZlIGEgbW9yZSBnZW5lcm91cyBidWZmZXIgaGVyZS5cbiAgICAgICAgICAgIGhlYXJ0YmVhdDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIERvIG5vdCByZXRyeSBOb1NwYWNlTGVmdE9uRGV2aWNlIGVycm9ycywgdGhlc2UgYXJlIHR5cGljYWxseSBub3QgdHJhbnNpZW50LlxuICAgICAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgICAgICBlcnJvcnM6IFsnanNpaS1kb2NnZW4uTm9TcGFjZUxlZnRPbkRldmljZSddLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDAsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWRkUmV0cnkoe1xuICAgICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICAgICdFQ1MuQW1hem9uRUNTRXhjZXB0aW9uJywgLy8gVGFzayBmYWlsZWQgc3RhcnRpbmcsIHVzdWFsbHkgZHVlIHRvIHRocm90dGxlIC8gb3V0IG9mIGNhcGFjaXR5XG4gICAgICAgICAgICAgICdFQ1MuSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvbicsIC8vIFRoaXMgaXMgcmV0dXJuZWQgd2hlbiBFQ1MgZ2V0cyB0aHJvdHRsZWQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIFZQQy9TR3MuXG4gICAgICAgICAgICAgICdqc2lpLWRvY2dlbi5OcG1FcnJvci5FNDI5JywgLy8gSFRUUCA0MjkgKFwiVG9vIE1hbnkgUmVxdWVzdHNcIikgZnJvbSBDb2RlQXJ0aWZhY3QncyBTMyBidWNrZXRcbiAgICAgICAgICAgICAgJ2pzaWktY29kZ2VuLk5wbUVycm9yLkVQUk9UTycsIC8vIFNwb3JhZGljIFRMUyBuZWdvdGlhdGlvbiBmYWlsdXJlcyB3ZSBzZWUgaW4gbG9ncywgdHJhbnNpZW50XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgLi4uRE9DR0VOX1RIUk9UVExFX1JFVFJZX1BPTElDWSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgICAgICBlcnJvcnM6IFsnanNpaS1kb2NnZW4uTnBtRXJyb3IuRVRBUkdFVCddLCAvLyBTZWVuIHdoZW4gZGVwZW5kZW5jaWVzIGFyZW4ndCBhdmFpbGFibGUgeWV0XG4gICAgICAgICAgICAvLyBXZSdsbCB3YWl0IGxvbmdlciBiZXR3ZWVuIHJldHJpZXMuIFRoaXMgaXMgdG8gYWNjb3VudCBmb3IgQ29kZUFydGlmYWN0J3MgbGFnIGJlaGluZCBucG1cbiAgICAgICAgICAgIGJhY2tvZmZSYXRlOiAyLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgICAgICAvLyBUaGUgdGFzayBoYXMgZmFpbGVkIGZvciBhbiB1bmtub3duIHJlYXNvbiwgb3Igc3RvcHBlZCByZXNwb25kaW5nLCBvciBpcyBqdXN0IHRha2luZyBhIGxvbmcgdGltZSB0byBwcm92aXNpb25cbiAgICAgICAgICAgIC8vIFdlIHdpbGwgYXR0ZW1wdCBhIGNvdXBsZSBvZiByZXRyaWVzIHdpdGggc29tZSB0aW1lIGluIGJldHdlZW4uXG4gICAgICAgICAgICAvLyBUaGlzIGFsc28gY292ZXJzIHRoZSAnU3RhdGVzLlRpbWVvdXQnIGVycm9yLCBidXQgd2UgYXJlIG5vdCBnaXZpbmcgdGltZW91dCBlcnJvciBhbnkgc3BlY2lhbCB0cmVhdG1lbnQuXG4gICAgICAgICAgICAvLyBJZiB0aGUgdGFzayB0aW1lb3V0IGlzIHJlYWNoZWQsIGl0IGlzIG1vc3QgbGlrZWx5IGFuIGlzc3VlIHdpdGggdGhlIHRhc2sgdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLlxuICAgICAgICAgICAgYmFja29mZlJhdGU6IDIsXG4gICAgICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGRDYXRjaChpZ25vcmUsIHtcbiAgICAgICAgICAgIGVycm9yczogW1VOUFJPQ0VTU0FCTEVfUEFDS0FHRV9FUlJPUl9OQU1FXSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgICAgIGVycm9yczogWydTdGF0ZXMuVGltZW91dCddLFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICAgICAgZXJyb3JzOiBbJ0VDUy5BbWF6b25FQ1NFeGNlcHRpb24nLCAnRUNTLkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24nXSxcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgICAgIGVycm9yczogWydTdGF0ZXMuVGFza0ZhaWxlZCddLFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5BTEwnXSxcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5uZXh0KGFkZFRvQ2F0YWxvZ0lmTmVlZGVkKVxuICAgICAgKTtcblxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBkZWZpbml0aW9uLFxuICAgICAgc3RhdGVNYWNoaW5lTmFtZTogc3RhdGVNYWNoaW5lTmFtZUZyb20odGhpcy5ub2RlLnBhdGgpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uZGF5cygxKSwgLy8gQW1wbGUgdGltZSBmb3IgcmV0cmllcywgZXRjLi4uXG4gICAgICB0cmFjaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIC8vIEVuc3VyZSB0aGUgU3RhdGUgTWFjaGluZSBkb2VzIG5vdCBnZXQgdG8gcnVuIGJlZm9yZSB0aGUgVlBDIGNhbiBiZSB1c2VkLlxuICAgICAgdGhpcy5zdGF0ZU1hY2hpbmUubm9kZS5hZGREZXBlbmRlbmN5KFxuICAgICAgICBwcm9wcy52cGMuaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRBbGFybShcbiAgICAgICdCYWNrZW5kIE9yY2hlc3RyYXRpb24gRmFpbGVkJyxcbiAgICAgIHRoaXMuc3RhdGVNYWNoaW5lXG4gICAgICAgIC5tZXRyaWNGYWlsZWQoKVxuICAgICAgICAuY3JlYXRlQWxhcm0odGhpcywgJ09yY2hlc3RyYXRpb25GYWlsZWQnLCB7XG4gICAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLnN0YXRlTWFjaGluZS5ub2RlLnBhdGh9LyR7dGhpcy5zdGF0ZU1hY2hpbmUubWV0cmljRmFpbGVkKCkubWV0cmljTmFtZVxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICAgJ0JhY2tlbmQgb3JjaGVzdHJhdGlvbiBmYWlsZWQhJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYERpcmVjdCBsaW5rIHRvIHN0YXRlIG1hY2hpbmU6ICR7c3RhdGVNYWNoaW5lVXJsKFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlTWFjaGluZVxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgJ1dhcm5pbmc6IG1lc3NhZ2VzIHRoYXQgcmVzdWx0ZWQgaW4gYSBmYWlsZWQgZXhlY3R1aW9uIHdpbGwgTk9UIGJlIGluIHRoZSBETFEhJyxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgfSksXG4gICAgICBwcm9wcy5hbGFybVNldmVyaXRpZXM/LmJhY2tlbmRPcmNoZXN0cmF0aW9uRmFpbGVkID8/IEFsYXJtU2V2ZXJpdHkuSElHSCxcbiAgICAgIHByb3BzLm1vbml0b3JpbmcpO1xuXG4gICAgcHJvcHMubW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgICdFeGVjdXRpb24gRmFpbHVyZSBSYXRlIGFib3ZlIDc1JScsXG4gICAgICB0aGlzLm1ldHJpY1N0YXRlc0V4ZWN1dGlvbkZhaWx1cmVSYXRlKCkuY3JlYXRlQWxhcm0oXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdGYWlsdXJlUmF0ZUFsYXJtJyxcbiAgICAgICAge1xuICAgICAgICAgIGFsYXJtTmFtZTogYCR7dGhpcy5zdGF0ZU1hY2hpbmUubm9kZS5wYXRofS9FeGVjdXRpb25GYWlsdXJlUmF0ZWAsXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogJ0V4ZWN1dGlvbiBGYWlsdXJlIFJhdGUgYWJvdmUgNzUlJyxcbiAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDc1LFxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgbWFudWFsbHkgdHJpZ2dlcmVkIGJ5IGFuIG9wZXJyYXRvciB0b1xuICAgIC8vIGF0dGVtcHQgcmVkcml2aW5nIG1lc3NhZ2VzIGZyb20gdGhlIERMUS5cbiAgICB0aGlzLnJlZHJpdmVGdW5jdGlvbiA9IG5ldyBSZWRyaXZlU3RhdGVNYWNoaW5lKHRoaXMsICdSZWRyaXZlJywge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdbQ29uc3RydWN0SHViL1JlZHJpdmVdIE1hbnVhbGx5IHJlZHJpdmVzIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBiYWNrZW5kIGRlYWQgbGV0dGVyIHF1ZXVlJyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNUQVRFX01BQ0hJTkVfQVJOOiB0aGlzLnN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgIFFVRVVFX1VSTDogdGhpcy5kZWFkTGV0dGVyUXVldWUucXVldWVVcmwsXG4gICAgICB9LFxuICAgICAgbWVtb3J5U2l6ZTogMV8wMjQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHRyYWNpbmc6IFRyYWNpbmcuQUNUSVZFLFxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGVNYWNoaW5lLmdyYW50U3RhcnRFeGVjdXRpb24odGhpcy5yZWRyaXZlRnVuY3Rpb24pO1xuICAgIHRoaXMuZGVhZExldHRlclF1ZXVlLmdyYW50Q29uc3VtZU1lc3NhZ2VzKHRoaXMucmVkcml2ZUZ1bmN0aW9uKTtcbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRETFFNZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgICdPcmNoZXN0cmF0aW9uIERMUScsXG4gICAgICB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSxcbiAgICAgIHRoaXMucmVkcml2ZUZ1bmN0aW9uXG4gICAgKTtcblxuICAgIC8vIFRoZSB3b3JrZmxvdyBpcyBpbnRlbmRlZCB0byBiZSBtYW51YWxseSB0cmlnZ2VyZWQgYnkgYW4gb3BlcmF0b3IgdG9cbiAgICAvLyByZXByb2Nlc3MgYWxsIHBhY2thZ2UgdmVyc2lvbnMgY3VycmVudGx5IGluIHN0b3JlIHRocm91Z2ggdGhlIG9yY2hlc3RyYXRvci5cbiAgICBjb25zdCByZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbiA9IG5ldyBSZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnUmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb24nLFxuICAgICAge1xuICAgICAgICBidWNrZXQ6IHByb3BzLmJ1Y2tldCxcbiAgICAgICAgc3RhdGVNYWNoaW5lOiB0aGlzLnN0YXRlTWFjaGluZSxcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb24gPSByZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbi5zdGF0ZU1hY2hpbmU7XG4gICAgdGhpcy5yZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvblBlclBhY2thZ2UgPVxuICAgICAgcmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb24ucHJvY2Vzc1BhY2thZ2VWZXJzaW9ucztcblxuICAgIHByb3BzLm92ZXJ2aWV3RGFzaGJvYXJkLmFkZENvbmN1cnJlbnRFeGVjdXRpb25NZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgIG5lZWRzQ2F0YWxvZ1VwZGF0ZUZ1bmN0aW9uLFxuICAgICAgJ05lZWRzQ2F0YWxvZ1VwZGF0ZUxhbWJkYSdcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1N0YXRlc0V4ZWN1dGlvbkZhaWx1cmVSYXRlKFxuICAgIG9wdHM/OiBNYXRoRXhwcmVzc2lvbk9wdGlvbnNcbiAgKTogTWF0aEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIC8vIENhbGN1bGF0ZXMgdGhlICUgRXhlY3V0aW9uc0ZhaWxlZCBmcm9tIHRoZSBFeGVjdXRpb25zU3RhcnRlZC5cbiAgICAgIGV4cHJlc3Npb246ICcxMDAgKiBtZXhlY3V0aW9uc0ZhaWxlZCAvIG1leGVjdXRpb25zU3RhcnRlZCcsXG4gICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgbWV4ZWN1dGlvbnNGYWlsZWQ6IHRoaXMubWV0cmljU3RhdGVzRXhlY3V0aW9uc0ZhaWxlZCgpLFxuICAgICAgICBtZXhlY3V0aW9uc1N0YXJ0ZWQ6IHRoaXMubWV0cmljU3RhdGVzRXhlY3V0aW9uc1N0YXJ0ZWQoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljU3RhdGVzRXhlY3V0aW9uc0ZhaWxlZChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgQ2x1c3Rlck5hbWU6IHRoaXMuZWNzQ2x1c3Rlci5jbHVzdGVyTmFtZSB9LFxuICAgICAgbWV0cmljTmFtZTogJ0V4ZWN1dGlvbnNGYWlsZWQnLFxuICAgICAgbmFtZXNwYWNlOiAnQVdTL1N0YXRlcycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljU3RhdGVzRXhlY3V0aW9uc1N0YXJ0ZWQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IEV4ZWN1dGlvbk1ldHJpY3M6IHRoaXMuc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybiB9LFxuICAgICAgbWV0cmljTmFtZTogJ0V4ZWN1dGlvbnNTdGFydGVkJyxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9TdGF0ZXMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Vjc1Rhc2tDb3VudChvcHRzOiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBFeGVjdXRpb25NZXRyaWNzOiB0aGlzLnN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4gfSxcbiAgICAgIG1ldHJpY05hbWU6ICdUYXNrQ291bnQnLFxuICAgICAgbmFtZXNwYWNlOiAnRUNTL0NvbnRhaW5lckluc2lnaHRzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NDcHVSZXNlcnZlZChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENsdXN0ZXJOYW1lOiB0aGlzLmVjc0NsdXN0ZXIuY2x1c3Rlck5hbWUgfSxcbiAgICAgIG1ldHJpY05hbWU6ICdDcHVSZXNlcnZlZCcsXG4gICAgICBuYW1lc3BhY2U6ICdFQ1MvQ29udGFpbmVySW5zaWdodHMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Vjc0NwdVV0aWxpemVkKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgQ2x1c3Rlck5hbWU6IHRoaXMuZWNzQ2x1c3Rlci5jbHVzdGVyTmFtZSB9LFxuICAgICAgbWV0cmljTmFtZTogJ0NwdVV0aWxpemVkJyxcbiAgICAgIG5hbWVzcGFjZTogJ0VDUy9Db250YWluZXJJbnNpZ2h0cycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljRWNzQ3B1VXRpbGl6YXRpb24ob3B0cz86IE1hdGhFeHByZXNzaW9uT3B0aW9ucyk6IE1hdGhFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICAvLyBDYWxjdWxhdGVzIHRoZSAlIENQVSB1dGlsaXphdGlvbiBmcm9tIHRoZSBDUFUgdW5pdHMgdXRpbGl6YXRpb24gJlxuICAgICAgLy8gcmVzZXJ2YXRpb24uIEZJTEwgaXMgdXNlZCB0byBtYWtlIGEgbm9uLXNwYXJzZSB0aW1lLXNlcmllcyAodGhlIG1ldHJpY3NcbiAgICAgIC8vIGFyZSBub3QgZW1pdHRlZCBpZiBubyB0YXNrIHJ1bnMpXG4gICAgICBleHByZXNzaW9uOiAnMTAwICogRklMTChtQ3B1VXRpbGl6ZWQsIDApIC8gRklMTChtQ3B1UmVzZXJ2ZWQsIFJFUEVBVCknLFxuICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgIG1DcHVSZXNlcnZlZDogdGhpcy5tZXRyaWNFY3NDcHVSZXNlcnZlZCgpLFxuICAgICAgICBtQ3B1VXRpbGl6ZWQ6IHRoaXMubWV0cmljRWNzQ3B1VXRpbGl6ZWQoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljRWNzTWVtb3J5UmVzZXJ2ZWQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDbHVzdGVyTmFtZTogdGhpcy5lY3NDbHVzdGVyLmNsdXN0ZXJOYW1lIH0sXG4gICAgICBtZXRyaWNOYW1lOiAnTWVtb3J5UmVzZXJ2ZWQnLFxuICAgICAgbmFtZXNwYWNlOiAnRUNTL0NvbnRhaW5lckluc2lnaHRzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NNZW1vcnlVdGlsaXplZChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENsdXN0ZXJOYW1lOiB0aGlzLmVjc0NsdXN0ZXIuY2x1c3Rlck5hbWUgfSxcbiAgICAgIG1ldHJpY05hbWU6ICdNZW1vcnlVdGlsaXplZCcsXG4gICAgICBuYW1lc3BhY2U6ICdFQ1MvQ29udGFpbmVySW5zaWdodHMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Vjc01lbW9yeVV0aWxpemF0aW9uKFxuICAgIG9wdHM/OiBNYXRoRXhwcmVzc2lvbk9wdGlvbnNcbiAgKTogTWF0aEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIC8vIENhbGN1bGF0ZXMgdGhlICUgbWVtb3J5IHV0aWxpemF0aW9uIGZyb20gdGhlIFJBTSB1dGlsaXphdGlvbiAmXG4gICAgICAvLyByZXNlcnZhdGlvbi4gRklMTCBpcyB1c2VkIHRvIG1ha2UgYSBub24tc3BhcnNlIHRpbWUtc2VyaWVzICh0aGUgbWV0cmljc1xuICAgICAgLy8gYXJlIG5vdCBlbWl0dGVkIGlmIG5vIHRhc2sgcnVucylcbiAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICcxMDAgKiBGSUxMKG1NZW1vcnlVdGlsaXplZCwgMCkgLyBGSUxMKG1NZW1vcnlSZXNlcnZlZCwgUkVQRUFUKScsXG4gICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgbU1lbW9yeVJlc2VydmVkOiB0aGlzLm1ldHJpY0Vjc01lbW9yeVJlc2VydmVkKCksXG4gICAgICAgIG1NZW1vcnlVdGlsaXplZDogdGhpcy5tZXRyaWNFY3NNZW1vcnlVdGlsaXplZCgpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NOZXR3b3JrUnhCeXRlcyhvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENsdXN0ZXJOYW1lOiB0aGlzLmVjc0NsdXN0ZXIuY2x1c3Rlck5hbWUgfSxcbiAgICAgIG1ldHJpY05hbWU6ICdOZXR3b3JrUnhCeXRlcycsXG4gICAgICBuYW1lc3BhY2U6ICdFQ1MvQ29udGFpbmVySW5zaWdodHMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Vjc05ldHdvcmtUeEJ5dGVzKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgQ2x1c3Rlck5hbWU6IHRoaXMuZWNzQ2x1c3Rlci5jbHVzdGVyTmFtZSB9LFxuICAgICAgbWV0cmljTmFtZTogJ05ldHdvcmtUeEJ5dGVzJyxcbiAgICAgIG5hbWVzcGFjZTogJ0VDUy9Db250YWluZXJJbnNpZ2h0cycsXG4gICAgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uUHJvcHMge1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZTogSVN0YXRlTWFjaGluZTtcbn1cblxuY2xhc3MgUmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmU7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzUGFja2FnZVZlcnNpb25zOiBTdGF0ZU1hY2hpbmU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogUmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb25Qcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcHJvY2Vzc1ZlcnNpb25zID0gbmV3IENob2ljZSh0aGlzLCAnR2V0IHBhY2thZ2UgdmVyc2lvbnMgcGFnZScpXG4gICAgICAud2hlbihcbiAgICAgICAgQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nKSxcbiAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdOZXh0IHZlcnNpb25zIHBhZ2UnLCB7XG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICBhY3Rpb246ICdsaXN0T2JqZWN0c1YyJyxcbiAgICAgICAgICBpYW1BY3Rpb246ICdzMzpMaXN0QnVja2V0JyxcbiAgICAgICAgICBpYW1SZXNvdXJjZXM6IFtwcm9wcy5idWNrZXQuYnVja2V0QXJuXSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBCdWNrZXQ6IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgICAgQ29udGludWF0aW9uVG9rZW46IEpzb25QYXRoLnN0cmluZ0F0KFxuICAgICAgICAgICAgICAnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgRGVsaW1pdGVyOiAnLycsXG4gICAgICAgICAgICBQcmVmaXg6IEpzb25QYXRoLnN0cmluZ0F0KCckLlByZWZpeCcpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzcG9uc2UnLFxuICAgICAgICB9KS5hZGRSZXRyeSh7IGVycm9yczogWydTMy5TZGtDbGllbnRFeGNlcHRpb24nXSB9KVxuICAgICAgKVxuICAgICAgLm90aGVyd2lzZShcbiAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdGaXJzdCB2ZXJzaW9ucyBwYWdlJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIERlbGltaXRlcjogJy8nLFxuICAgICAgICAgICAgUHJlZml4OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5QcmVmaXgnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3BvbnNlJyxcbiAgICAgICAgfSkuYWRkUmV0cnkoeyBlcnJvcnM6IFsnUzMuU2RrQ2xpZW50RXhjZXB0aW9uJ10gfSlcbiAgICAgIClcbiAgICAgIC5hZnRlcndhcmRzKClcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgTWFwKHRoaXMsICdGb3IgZWFjaCBrZXkgcHJlZml4Jywge1xuICAgICAgICAgIGl0ZW1zUGF0aDogJyQucmVzcG9uc2UuQ29tbW9uUHJlZml4ZXMnLFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLml0ZXJhdG9yKFxuICAgICAgICAgIG5ldyB0YXNrcy5TdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb24oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgJ1N0YXJ0IE9yY2hlc3RyYXRpb24gV29ya2Zsb3cnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmU6IHByb3BzLnN0YXRlTWFjaGluZSxcbiAgICAgICAgICAgICAgYXNzb2NpYXRlV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaW5wdXQ6IFRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBidWNrZXQ6IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiB7XG4gICAgICAgICAgICAgICAgICBrZXk6IEpzb25QYXRoLnN0cmluZ0F0KFxuICAgICAgICAgICAgICAgICAgICBgU3RhdGVzLkZvcm1hdCgne30ke0FTU0VNQkxZX0tFWV9TVUZGSVguc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKX0nLCAkLlByZWZpeClgXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGtleTogSnNvblBhdGguc3RyaW5nQXQoXG4gICAgICAgICAgICAgICAgICAgIGBTdGF0ZXMuRm9ybWF0KCd7fSR7TUVUQURBVEFfS0VZX1NVRkZJWC5zdWJzdHIoXG4gICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApfScsICQuUHJlZml4KWBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYWNrYWdlOiB7XG4gICAgICAgICAgICAgICAgICBrZXk6IEpzb25QYXRoLnN0cmluZ0F0KFxuICAgICAgICAgICAgICAgICAgICBgU3RhdGVzLkZvcm1hdCgne30ke1BBQ0tBR0VfS0VZX1NVRkZJWC5zdWJzdHIoXG4gICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApfScsICQuUHJlZml4KWBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGludGVncmF0aW9uUGF0dGVybjogSW50ZWdyYXRpb25QYXR0ZXJuLlJFUVVFU1RfUkVTUE9OU0UsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1N0ZXBGdW5jdGlvbnMuRXhlY3V0aW9uTGltaXRFeGNlZWRlZCddIH0pXG4gICAgICAgICAgICAuYWRkQ2F0Y2gobmV3IFN1Y2NlZWQocHJvcHMuc3RhdGVNYWNoaW5lLCAnU3RhdGVNYWNoaW5lIFN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICBlcnJvcnM6IFsnU3RhdGVzLlRhc2tGYWlsZWQnXSxcbiAgICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIHByb2Nlc3NWZXJzaW9ucy5uZXh0KFxuICAgICAgbmV3IENob2ljZSh0aGlzLCAnSGFzIG1vcmUgdmVyc2lvbnM/JylcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nKSxcbiAgICAgICAgICBwcm9jZXNzVmVyc2lvbnNcbiAgICAgICAgKVxuICAgICAgICAub3RoZXJ3aXNlKG5ldyBTdWNjZWVkKHRoaXMsICdTdWNjZXNzJykpXG4gICAgKTtcbiAgICBjb25zdCBwcm9jZXNzUGFja2FnZVZlcnNpb25zID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCAnUGVyUGFja2FnZScsIHtcbiAgICAgIHN0YXRlTWFjaGluZU5hbWU6IFJFUFJPQ0VTU19QRVJfUEFDS0FHRV9TVEFURV9NQUNISU5FX05BTUUsXG4gICAgICBkZWZpbml0aW9uOiBwcm9jZXNzVmVyc2lvbnMsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5ob3VycygxKSxcbiAgICAgIHRyYWNpbmdFbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJvY2Vzc1BhY2thZ2VWZXJzaW9ucyA9IHByb2Nlc3NQYWNrYWdlVmVyc2lvbnM7XG5cbiAgICAvLyBUaGlzIHdvcmtmbG93IGlzIGJyb2tlbiBpbnRvIHR3byBzdWItd29ya2Zsb3dzIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGhpdHMgdGhlIDI1SyBldmVudHMgbGltaXRcbiAgICAvLyBvZiBTdGVwRnVuY3Rpb24gZXhlY3V0aW9ucyByZWxhdGl2ZWx5IHF1aWNrbHkuXG4gICAgY29uc3QgcHJvY2Vzc05hbWVzcGFjZSA9IG5ldyBDaG9pY2UodGhpcywgJ0dldCBAc2NvcGUgcGFnZScpXG4gICAgICAud2hlbihcbiAgICAgICAgQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nKSxcbiAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdOZXh0IEBzY29wZSBwYWdlJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBKc29uUGF0aC5zdHJpbmdBdChcbiAgICAgICAgICAgICAgJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIERlbGltaXRlcjogJy8nLFxuICAgICAgICAgICAgUHJlZml4OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5QcmVmaXgnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3BvbnNlJyxcbiAgICAgICAgfSkuYWRkUmV0cnkoeyBlcnJvcnM6IFsnUzMuU2RrQ2xpZW50RXhjZXB0aW9uJ10gfSlcbiAgICAgIClcbiAgICAgIC5vdGhlcndpc2UoXG4gICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnRmlyc3QgQHNjb3BlIHBhZ2UnLCB7XG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICBhY3Rpb246ICdsaXN0T2JqZWN0c1YyJyxcbiAgICAgICAgICBpYW1BY3Rpb246ICdzMzpMaXN0QnVja2V0JyxcbiAgICAgICAgICBpYW1SZXNvdXJjZXM6IFtwcm9wcy5idWNrZXQuYnVja2V0QXJuXSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBCdWNrZXQ6IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgICAgRGVsaW1pdGVyOiAnLycsXG4gICAgICAgICAgICBQcmVmaXg6IEpzb25QYXRoLnN0cmluZ0F0KCckLlByZWZpeCcpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzcG9uc2UnLFxuICAgICAgICB9KS5hZGRSZXRyeSh7IGVycm9yczogWydTMy5TZGtDbGllbnRFeGNlcHRpb24nXSB9KVxuICAgICAgKVxuICAgICAgLmFmdGVyd2FyZHMoKVxuICAgICAgLm5leHQoXG4gICAgICAgIG5ldyBNYXAodGhpcywgJ0ZvciBlYWNoIEBzY29wZS9wa2cnLCB7XG4gICAgICAgICAgaXRlbXNQYXRoOiAnJC5yZXNwb25zZS5Db21tb25QcmVmaXhlcycsXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSkuaXRlcmF0b3IoXG4gICAgICAgICAgbmV3IHRhc2tzLlN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAnUHJvY2VzcyBzY29wZWQgcGFja2FnZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRlTWFjaGluZTogcHJvY2Vzc1BhY2thZ2VWZXJzaW9ucyxcbiAgICAgICAgICAgICAgYXNzb2NpYXRlV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaW5wdXQ6IFRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBQcmVmaXg6IEpzb25QYXRoLnN0cmluZ0F0KCckLlByZWZpeCcpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgaW50ZWdyYXRpb25QYXR0ZXJuOiBJbnRlZ3JhdGlvblBhdHRlcm4uUlVOX0pPQixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1N0ZXBGdW5jdGlvbnMuRXhlY3V0aW9uTGltaXRFeGNlZWRlZCddIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgcHJvY2Vzc05hbWVzcGFjZS5uZXh0KFxuICAgICAgbmV3IENob2ljZSh0aGlzLCAnSGFzIG1vcmUgcGFja2FnZXM/JylcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nKSxcbiAgICAgICAgICBwcm9jZXNzTmFtZXNwYWNlXG4gICAgICAgIClcbiAgICAgICAgLm90aGVyd2lzZShuZXcgU3VjY2VlZCh0aGlzLCAnQWxsIERvbmUnKSlcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgQ2hvaWNlKHRoaXMsICdHZXQgcHJlZml4IHBhZ2UnKVxuICAgICAgLndoZW4oXG4gICAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJyksXG4gICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnTmV4dCBwcmVmaXhlcyBwYWdlJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBKc29uUGF0aC5zdHJpbmdBdChcbiAgICAgICAgICAgICAgJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIERlbGltaXRlcjogJy8nLFxuICAgICAgICAgICAgUHJlZml4OiBTVE9SQUdFX0tFWV9QUkVGSVgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXNwb25zZScsXG4gICAgICAgIH0pLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1MzLlNka0NsaWVudEV4Y2VwdGlvbiddIH0pXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKFxuICAgICAgICBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0ZpcnN0IHByZWZpeCBwYWdlJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIERlbGltaXRlcjogJy8nLFxuICAgICAgICAgICAgUHJlZml4OiBTVE9SQUdFX0tFWV9QUkVGSVgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXNwb25zZScsXG4gICAgICAgIH0pLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1MzLlNka0NsaWVudEV4Y2VwdGlvbiddIH0pXG4gICAgICApXG4gICAgICAuYWZ0ZXJ3YXJkcygpXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IE1hcCh0aGlzLCAnRm9yIGVhY2ggcHJlZml4Jywge1xuICAgICAgICAgIGl0ZW1zUGF0aDogJyQucmVzcG9uc2UuQ29tbW9uUHJlZml4ZXMnLFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLml0ZXJhdG9yKFxuICAgICAgICAgIG5ldyBDaG9pY2UodGhpcywgJ0lzIHRoaXMgYSBAc2NvcGUvIHByZWZpeD8nKVxuICAgICAgICAgICAgLndoZW4oXG4gICAgICAgICAgICAgIENvbmRpdGlvbi5zdHJpbmdNYXRjaGVzKCckLlByZWZpeCcsIGAke1NUT1JBR0VfS0VZX1BSRUZJWH1AKmApLFxuICAgICAgICAgICAgICBwcm9jZXNzTmFtZXNwYWNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAub3RoZXJ3aXNlKFxuICAgICAgICAgICAgICBuZXcgdGFza3MuU3RlcEZ1bmN0aW9uc1N0YXJ0RXhlY3V0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgJ1Byb2Nlc3MgdW5zY29wZWQgcGFja2FnZScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lOiBwcm9jZXNzUGFja2FnZVZlcnNpb25zLFxuICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGlucHV0OiBUYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIFByZWZpeDogSnNvblBhdGguc3RyaW5nQXQoJyQuUHJlZml4JyksXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIGludGVncmF0aW9uUGF0dGVybjogSW50ZWdyYXRpb25QYXR0ZXJuLlJVTl9KT0IsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1N0ZXBGdW5jdGlvbnMuRXhlY3V0aW9uTGltaXRFeGNlZWRlZCddIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWZ0ZXJ3YXJkcygpXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICBzdGFydC5uZXh0KFxuICAgICAgbmV3IENob2ljZSh0aGlzLCAnSGFzIG1vcmUgcHJlZml4ZXM/JylcbiAgICAgICAgLndoZW4oQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nKSwgc3RhcnQpXG4gICAgICAgIC5vdGhlcndpc2UobmV3IFN1Y2NlZWQodGhpcywgJ0RvbmUnKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUgPSBuZXcgU3RhdGVNYWNoaW5lKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGRlZmluaXRpb246IHN0YXJ0LFxuICAgICAgc3RhdGVNYWNoaW5lTmFtZTogc3RhdGVNYWNoaW5lTmFtZUZyb20odGhpcy5ub2RlLnBhdGgpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uaG91cnMoNCksXG4gICAgICB0cmFjaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHByb3BzLmJ1Y2tldC5ncmFudFJlYWQocHJvY2Vzc1BhY2thZ2VWZXJzaW9ucyk7XG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZCh0aGlzLnN0YXRlTWFjaGluZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHR1cm5zIGEgbm9kZSBwYXRoIGludG8gYSB2YWxpZCBzdGF0ZSBtYWNoaW5lIG5hbWUsIHRvIHRyeSBhbmQgaW1wcm92ZVxuICogdGhlIFN0ZXBGdW5jdGlvbidzIEFXUyBjb25zb2xlIGV4cGVyaWVuY2Ugd2hpbGUgbWluaW1pemluZyB0aGUgcmlzayBmb3JcbiAqIGNvbGxpc29ucy5cbiAqL1xuZnVuY3Rpb24gc3RhdGVNYWNoaW5lTmFtZUZyb20obm9kZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFBvb3IgbWFuJ3MgcmVwbGFjZSBhbGwuLi5cbiAgcmV0dXJuIG5vZGVQYXRoLnNwbGl0KC9bXmEtejAtOSshQC4oKT1fJy1dKy9pKS5qb2luKCcuJyk7XG59XG4iXX0=
|
|
631
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9vcmNoZXN0cmF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1QztBQUN2QywrREFRb0M7QUFFcEMsaURBQXdEO0FBQ3hELHVEQUE0RDtBQUc1RCxpREFBcUU7QUFDckUscUVBWXVDO0FBQ3ZDLDZEQUE2RDtBQUM3RCwyQ0FBdUM7QUFDdkMsaUVBQTREO0FBQzVELG1FQUE4RDtBQUM5RCxpRkFBNEU7QUFDNUUsbUNBQTJEO0FBRTNELCtDQUErRDtBQUMvRCxpREFBd0Q7QUFFeEQsbURBQWdEO0FBQ2hELGtFQUFvRTtBQUNwRSx3REFBb0Q7QUFFcEQsMERBQXFEO0FBRXJELG1EQU82QjtBQUM3QixzREFBK0U7QUFFL0UsTUFBTSx3Q0FBd0MsR0FDNUMsa0NBQWtDLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixXQUFXLEVBQUUsR0FBRztJQUNoQixRQUFRLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdCLFdBQVcsRUFBRSxFQUFFO0NBQ2hCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sNEJBQTRCLEdBQUc7SUFDbkMsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3Qix1RUFBdUU7SUFDdkUsV0FBVyxFQUFFLEdBQUc7SUFDaEIsV0FBVyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQztBQWtFRjs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLHNCQUFTO0lBd0QxQyxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxFQUFF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b0IsQ0FBQzthQUNuQyxJQUFJLENBQUMsNkJBQVMsQ0FBQyxTQUFTLENBQUMsa0NBQWtDLENBQUMsRUFBRSxLQUFLLENBQUM7YUFDcEUsU0FBUyxDQUFDLElBQUksMkJBQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxnQ0FBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDckQsVUFBVSxFQUFFLEtBQUs7WUFDakIsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEQsT0FBTyxFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxQixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQy9DLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQjtJQUM1Qyw0QkFBNEI7SUFDNUIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgTWF0aEV4cHJlc3Npb24sXG4gIE1hdGhFeHByZXNzaW9uT3B0aW9ucyxcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBTdGF0aXN0aWMsXG4gIFRyZWF0TWlzc2luZ0RhdGEsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IFN1Ym5ldFNlbGVjdGlvbiwgVnBjLCBJU2VjdXJpdHlHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2x1c3RlciwgSUNsdXN0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IElGdW5jdGlvbiwgVHJhY2luZyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVF1ZXVlLCBRdWV1ZSwgUXVldWVFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQge1xuICBDaG9pY2UsXG4gIENvbmRpdGlvbixcbiAgSW50ZWdyYXRpb25QYXR0ZXJuLFxuICBJU3RhdGVNYWNoaW5lLFxuICBKc29uUGF0aCxcbiAgTWFwLFxuICBQYXNzLFxuICBTdGF0ZU1hY2hpbmUsXG4gIFN1Y2NlZWQsXG4gIEZhaWwsXG4gIFRhc2tJbnB1dCxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBOZWVkc0NhdGFsb2dVcGRhdGUgfSBmcm9tICcuL25lZWRzLWNhdGFsb2ctdXBkYXRlJztcbmltcG9ydCB7IFJlZHJpdmVTdGF0ZU1hY2hpbmUgfSBmcm9tICcuL3JlZHJpdmUtc3RhdGUtbWFjaGluZSc7XG5pbXBvcnQgeyBSZXRyeVVuaW5zdGFsbGFibGVQYWNrYWdlcyB9IGZyb20gJy4vcmV0cnktdW5pbnN0YWxsYWJsZS1wYWNrYWdlcyc7XG5pbXBvcnQgeyBBbGFybVNldmVyaXRpZXMsIEFsYXJtU2V2ZXJpdHkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2NvZGVhcnRpZmFjdC9yZXBvc2l0b3J5JztcbmltcG9ydCB7IHNxc1F1ZXVlVXJsLCBzdGF0ZU1hY2hpbmVVcmwgfSBmcm9tICcuLi8uLi9kZWVwLWxpbmsnO1xuaW1wb3J0IHsgTW9uaXRvcmluZywgYWRkQWxhcm0gfSBmcm9tICcuLi8uLi9tb25pdG9yaW5nJztcbmltcG9ydCB7IE92ZXJ2aWV3RGFzaGJvYXJkIH0gZnJvbSAnLi4vLi4vb3ZlcnZpZXctZGFzaGJvYXJkJztcbmltcG9ydCB7IFJVTkJPT0tfVVJMIH0gZnJvbSAnLi4vLi4vcnVuYm9vay11cmwnO1xuaW1wb3J0IHsgZ3Jhdml0b25MYW1iZGFJZkF2YWlsYWJsZSB9IGZyb20gJy4uL19sYW1iZGEtYXJjaGl0ZWN0dXJlJztcbmltcG9ydCB7IENhdGFsb2dCdWlsZGVyIH0gZnJvbSAnLi4vY2F0YWxvZy1idWlsZGVyJztcbmltcG9ydCB7IERlbnlMaXN0IH0gZnJvbSAnLi4vZGVueS1saXN0JztcbmltcG9ydCB7IEVjc1Rhc2tNb25pdG9yIH0gZnJvbSAnLi4vZWNzLXRhc2stbW9uaXRvcic7XG5pbXBvcnQgeyBGZWVkQnVpbGRlciB9IGZyb20gJy4uL2ZlZWQtYnVpbGRlcic7XG5pbXBvcnQge1xuICBBU1NFTUJMWV9LRVlfU1VGRklYLFxuICBNRVRBREFUQV9LRVlfU1VGRklYLFxuICBQQUNLQUdFX0tFWV9TVUZGSVgsXG4gIFNUT1JBR0VfS0VZX1BSRUZJWCxcbiAgQ0FUQUxPR19LRVksXG4gIFVOUFJPQ0VTU0FCTEVfUEFDS0FHRV9FUlJPUl9OQU1FLFxufSBmcm9tICcuLi9zaGFyZWQvY29uc3RhbnRzJztcbmltcG9ydCB7IFRyYW5zbGl0ZXJhdG9yLCBUcmFuc2xpdGVyYXRvclZwY0VuZHBvaW50cyB9IGZyb20gJy4uL3RyYW5zbGl0ZXJhdG9yJztcblxuY29uc3QgUkVQUk9DRVNTX1BFUl9QQUNLQUdFX1NUQVRFX01BQ0hJTkVfTkFNRSA9XG4gICdSZXByb2Nlc3NEb2N1bWVudGF0aW9uUGVyUGFja2FnZSc7XG5cbi8qKlxuICogVGhpcyByZXRyeSBwb2xpY3kgaXMgdXNlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBhbGxvd3MgYW1wbGVcbiAqIHJldHJ5IGF0dGVtcHRzIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBpbXBsZW1lbnQgYSBjdXN0b20gYmFja3ByZXNzdXJlXG4gKiBoYW5kbGluZyBtZWhhbmlzbS5cbiAqXG4gKiBUaGlzIGlzIG1lYW50IGFzIGEgc3RvcC1nYXAgdW50aWwgd2UgY2FuIGltcGxlbWVudCBhIG1vcmUgcmVzaWxpZW50IHN5c3RlbSxcbiAqIHdoaWNoIGxpa2VseSB3aWxsIGludm9sdmUgbW9yZSBTUVMgcXVldWVzLCBidXQgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJlXG4gKiB0aHJvdWdob3V0bHkgdmV0dGVkIGJlZm9yZSBpdCBpcyByb2xsZWQgb3V0IGV2ZXJ5d2hlcmUuXG4gKlxuICogQWZ0ZXIgMzAgYXR0ZW1wdHMsIGdpdmVuIHRoZSBwYXJhbWV0ZXJzLCB0aGUgbGFzdCBhdHRlbXB0IHdpbGwgd2FpdCBqdXN0XG4gKiB1bmRlciAxNiBtaW51dGVzLCB3aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciBjdXJyZW50bHkgcnVubmluZyBMYW1iZGFcbiAqIGZ1bmN0aW9ucyB0byBjb21wbGV0ZSAob3IgdGltZSBvdXQgYWZ0ZXIgMTUgbWludXRlcykuIFRoZSB0b3RhbCB0aW1lIHNwZW50XG4gKiB3YWl0aW5nIGJldHdlZW4gcmV0cmllcyBieSB0aGlzIHRpbWUgaXMganVzdCBvdmVyIDMgaG91cnMuIFRoaXMgaXMgYSBsb3Qgb2ZcbiAqIHRpbWUsIGJ1dCBpbiBleHRyZW1lIGJ1cnN0IHNpdHVhdGlvbnMgKGkuZTogcmVwcm9jZXNzaW5nIGV2ZXJ5dGhpbmcpLCB0aGlzXG4gKiBpcyBhY3R1YWxseSBhIGdvb2QgdGhpbmcuXG4gKi9cbmNvbnN0IFRIUk9UVExFX1JFVFJZX1BPTElDWSA9IHtcbiAgYmFja29mZlJhdGU6IDEuMSxcbiAgaW50ZXJ2YWw6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gIG1heEF0dGVtcHRzOiAzMCxcbn07XG5cbi8qKlxuICogVGhpcyByZXRyeSBwb2xpY3kgaXMgdXNlZCBmb3IgdHJhbnNsaXRlcmF0aW9uIHRhc2tzIGFuZCBhbGxvd3MgYW1wbGVcbiAqIHJldHJ5IGF0dGVtcHRzIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB0byBpbXBsZW1lbnQgYSBjdXN0b20gYmFja3ByZXNzdXJlXG4gKiBoYW5kbGluZyBtZWhhbmlzbS5cbiAqXG4gKiBUaGlzIGlzIG1lYW50IGFzIGEgc3RvcC1nYXAgdW50aWwgd2UgY2FuIGltcGxlbWVudCBhIG1vcmUgcmVzaWxpZW50IHN5c3RlbSxcbiAqIHdoaWNoIGxpa2VseSB3aWxsIGludm9sdmUgbW9yZSBTUVMgcXVldWVzLCBidXQgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJlXG4gKiB0aHJvdWdob3V0bHkgdmV0dGVkIGJlZm9yZSBpdCBpcyByb2xsZWQgb3V0IGV2ZXJ5d2hlcmUuXG4gKlxuICogVGhlIGludGVydmFsIGlzIGRldGVybWluZWQgYnkgdGhlIGV4ZWN1dGlvbiBkdXJhdGlvbiB3ZSBjdXJyZW50bHkgZXhwZWN0IGZyb20ganNpaS1kb2NnZW4uXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvanNpaS1kb2NnZW4vYmxvYi9tYWluL3Rlc3QvZG9jZ2VuL3ZpZXcvZG9jdW1lbnRhdGlvbi50ZXN0LnRzI0wxMy5cbiAqXG4gKiBBcHBseSBhIGJpdCBvZiBiYWNrb2ZmIGJlY2F1c2Ugb3RoZXJ3aXNlIGluIGNhc2VzIG9mIGNvbnRlbnRpb24gd2UncmUgaGFtbWVyaW5nIHRoZSBFQ1NcbiAqIGZyb250ZW5kIHNlcnZpY2UuXG4gKi9cbmNvbnN0IERPQ0dFTl9USFJPVFRMRV9SRVRSWV9QT0xJQ1kgPSB7XG4gIGludGVydmFsOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAvLyAxIG1pbnV0ZSAqIDEuMV40NSAvIGxuKDEuMSkgfj0gbWF4IDEzIGhvdXJzIHRvdGFsIHRpbWUgZm9yIGEgcGFja2FnZVxuICBiYWNrb2ZmUmF0ZTogMS4xLFxuICBtYXhBdHRlbXB0czogNDUsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2hlc3RyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIHRvIHNvdXJjZSBhc3NlbWJsaWVzIHRvIHRyYW5zbGl0ZXJhdGUuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2RlQXJ0aWZhY3QgcmVnaXN0cnkgdG8gdXNlIGZvciByZWd1bGFyIG9wZXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjb2RlQXJ0aWZhY3Q/OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9uaXRvcmluZyBoYW5kbGVyIHRvIHJlZ2lzdGVyIGFsYXJtcyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZzogTW9uaXRvcmluZztcblxuICAvKipcbiAgICogVGhlIG92ZXJ2aWV3IGRhc2hib2FyZCB0byByZWdpc3RlciBkYXNoYm9hcmRzIHdpdGguXG4gICAqL1xuICByZWFkb25seSBvdmVydmlld0Rhc2hib2FyZDogT3ZlcnZpZXdEYXNoYm9hcmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgaW4gd2hpY2ggdG8gcGxhY2UgbmV0d29ya2VkIHJlc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IFZwYztcblxuICAvKipcbiAgICogVGhlIFZQQyBzdWJuZXQgc2VsZWN0aW9uIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFZQQyBlbmRwb2ludHMgdG8gdXNlIGZvciBpbnRlcmFjdGluZyB3aXRoIENvZGVBcnRpZmFjdCBhbmQgUzMuXG4gICAqL1xuICByZWFkb25seSB2cGNFbmRwb2ludHM/OiBUcmFuc2xpdGVyYXRvclZwY0VuZHBvaW50cztcblxuICAvKipcbiAgICogVlBDIFNlY3VyaXR5IGdyb3VwcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgRUNTIHRhc2tzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU2VjdXJpdHlHcm91cHM/OiBJU2VjdXJpdHlHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyBzaG91bGQgZXhlY3V0aW9uIGxvZ3MgYmUgcmV0YWluZWQ/XG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVEVOX1lFQVJTXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVueSBsaXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVueUxpc3Q6IERlbnlMaXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RydWN0IHRoYXQgZ2VuZXJhdGVzIFJTUy9BVE9NIGZlZWRcbiAgICovXG4gIHJlYWRvbmx5IGZlZWRCdWlsZGVyOiBGZWVkQnVpbGRlcjtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGFsYXJtIHNldmVyaXRpZXMuXG4gICAqL1xuICByZWFkb25seSBhbGFybVNldmVyaXRpZXM/OiBBbGFybVNldmVyaXRpZXM7XG59XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIHRoZSBiYWNrZW5kIHByb2Nlc3NpbmcgdGFza3MgdXNpbmcgYSBTdGVwRnVuY3Rpb25zIFN0YXRlIE1hY2hpbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcmNoZXN0cmF0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBtYWNoaW5lIHRoYXQgc2hvdWxkIGJlIHRyaWdnZXJlZCBmb3Igc3RhcnRpbmcgYmFjay1lbmQgcHJvY2Vzc2luZ1xuICAgKiBmb3IgYSBuZXdseSBkaXNjb3ZlcmVkIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBJU3RhdGVNYWNoaW5lO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVhZCBsZXR0ZXIgcXVldWUgZnJvbSB0aGUgc3RhdGUgbWFjaGluZS4gSW5wdXRzIGFuZCBlcnJvcnMgYXJlIHdyaXR0ZW5cbiAgICogdGhlcmUgaWYgdGhlIHN0YXRlIG1hY2hpbmUgZmFpbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlOiBJUXVldWU7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBvcGVyYXRvcnMgY2FuIHVzZSB0byByZWRyaXZlIG1lc3NhZ2VzIGZyb20gdGhlIGRlYWQgbGV0dGVyXG4gICAqIHF1ZXVlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlZHJpdmVGdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gb3BlcmF0b3JzIGNhbiB1c2UgdG8gcmVwcm9jZXNzIGFsbCBpbmRleGVkIHBhY2thZ2VzIHRocm91Z2hcbiAgICogdGhlIGJhY2tlbmQgZGF0YSBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbjogSVN0YXRlTWFjaGluZTtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdG9ycyBjYW4gdXNlIHRvIHJlcHJvY2VzcyBhIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvblxuICAgKiB0aHJvdWdoIHRoZSBiYWNrZW5kIGRhdGEgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVnZW5lcmF0ZUFsbERvY3VtZW50YXRpb25QZXJQYWNrYWdlOiBJU3RhdGVNYWNoaW5lO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgbWFjaGluZSBvcGVyYXRvcnMgY2FuIHVzZSB0byByZXRyeSBwcm9jZXNzaW5nIHVuaW5zdGFsbGFibGUgcGFja2FnZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlVbmluc3RhbGxhYmxlUGFja2FnZXM6IElTdGF0ZU1hY2hpbmU7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyB0aGUgY2F0YWxvZy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQnVpbGRlcjogQ2F0YWxvZ0J1aWxkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBFQ1MgY2x1c3RlciB1c2VkIHRvIHJ1biB0YXNrcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlY3NDbHVzdGVyOiBJQ2x1c3RlcjtcblxuICAvKipcbiAgICogVGhlIEVDUyB0YXNrIG1vbml0b3IgdGhhdCB3YXRjaGVzIG92ZXIgdGhlIGBlY3NDbHVzdGVyYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlY3NUYXNrTW9uaXRvcjogRWNzVGFza01vbml0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2xpdGVyYXRvciB1c2VkIGJ5IHRoaXMgb3JjaGVzdHJhdGlvbiB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2xpdGVyYXRvcjogVHJhbnNsaXRlcmF0b3I7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPcmNoZXN0cmF0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5kZWFkTGV0dGVyUXVldWUgPSBuZXcgUXVldWUodGhpcywgJ0RMUScsIHtcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCxcbiAgICAgIHJldGVudGlvblBlcmlvZDogRHVyYXRpb24uZGF5cygxNCksXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG5cbiAgICBwcm9wcy5tb25pdG9yaW5nLmFkZExvd1NldmVyaXR5QWxhcm0oXG4gICAgICAnQmFja2VuZCBPcmNoZXN0cmF0aW9uIERlYWQtTGV0dGVyIFF1ZXVlIGlzIG5vdCBlbXB0eScsXG4gICAgICBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiAnbTEgKyBtMicsXG4gICAgICAgIGxhYmVsOiAnRGVhZC1MZXR0ZXIgUXVldWUgbm90IGVtcHR5JyxcbiAgICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgICAgbTE6IHRoaXMuZGVhZExldHRlclF1ZXVlLm1ldHJpY0FwcHJveGltYXRlTnVtYmVyT2ZNZXNzYWdlc1Zpc2libGUoe1xuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG0yOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZS5tZXRyaWNBcHByb3hpbWF0ZU51bWJlck9mTWVzc2FnZXNOb3RWaXNpYmxlKHtcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pLmNyZWF0ZUFsYXJtKHRoaXMsICdETFFBbGFybScsIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLmRlYWRMZXR0ZXJRdWV1ZS5ub2RlLnBhdGh9L05vdEVtcHR5YCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdCYWNrZW5kIG9yY2hlc3RyYXRpb24gZGVhZC1sZXR0ZXIgcXVldWUgaXMgbm90IGVtcHR5LicsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gcXVldWU6ICR7c3FzUXVldWVVcmwodGhpcy5kZWFkTGV0dGVyUXVldWUpfWAsXG4gICAgICAgICAgJ1dhcm5pbmc6IFN0YXRlIE1hY2hpbmVzIGV4ZWN1dGlvbnMgdGhhdCBzZW50IG1lc3NhZ2VzIHRvIHRoZSBETFEgd2lsbCBub3Qgc2hvdyBhcyBcImZhaWxlZFwiLicsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgLy8gU1FTIGRvZXMgbm90IGVtaXQgbWV0cmljcyBpZiB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdHkgZm9yIGEgd2hpbGUsIHdoaWNoIGlzIEdPT0QuXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSA9IG5ldyB0YXNrcy5TcXNTZW5kTWVzc2FnZShcbiAgICAgIHRoaXMsXG4gICAgICAnU2VuZCB0byBEZWFkIExldHRlciBRdWV1ZScsXG4gICAgICB7XG4gICAgICAgIG1lc3NhZ2VCb2R5OiBUYXNrSW5wdXQuZnJvbUpzb25QYXRoQXQoJyQnKSxcbiAgICAgICAgcXVldWU6IHRoaXMuZGVhZExldHRlclF1ZXVlLFxuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfVxuICAgICkubmV4dChuZXcgRmFpbCh0aGlzLCAnU2VudCB0byBETFEnKSk7XG5cbiAgICBjb25zdCBpZ25vcmUgPSBuZXcgUGFzcyh0aGlzLCAnSWdub3JlJyk7XG5cbiAgICB0aGlzLmNhdGFsb2dCdWlsZGVyID0gbmV3IENhdGFsb2dCdWlsZGVyKHRoaXMsICdDYXRhbG9nQnVpbGRlcicsIHByb3BzKTtcblxuICAgIGNvbnN0IGFkZFRvQ2F0YWxvZyA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UodGhpcywgJ0FkZCB0byBjYXRhbG9nLmpzb24nLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jYXRhbG9nQnVpbGRlci5mdW5jdGlvbixcbiAgICAgIHJlc3VsdFBhdGg6ICckLmNhdGFsb2dCdWlsZGVyT3V0cHV0JyxcbiAgICAgIHJlc3VsdFNlbGVjdG9yOiB7XG4gICAgICAgICdFVGFnLiQnOiAnJC5QYXlsb2FkLkVUYWcnLFxuICAgICAgICAnVmVyc2lvbklkLiQnOiAnJC5QYXlsb2FkLlZlcnNpb25JZCcsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAvLyBUaGlzIGhhcyBhIGNvbmN1cnJlbmN5IG9mIDEsIHNvIHdlIHdhbnQgdG8gYWdncmVzc2l2ZWx5IHJldHJ5IGJlaW5nIHRocm90dGxlZCBoZXJlLlxuICAgICAgLmFkZFJldHJ5KHtcbiAgICAgICAgZXJyb3JzOiBbJ0xhbWJkYS5Ub29NYW55UmVxdWVzdHNFeGNlcHRpb24nXSxcbiAgICAgICAgLi4uVEhST1RUTEVfUkVUUllfUE9MSUNZLFxuICAgICAgfSlcbiAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgZXJyb3JzOiBbJ0xhbWJkYS5Ub29NYW55UmVxdWVzdHNFeGNlcHRpb24nXSxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgfSlcbiAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5UYXNrRmFpbGVkJ10sXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgIH0pXG4gICAgICAuYWRkQ2F0Y2goc2VuZFRvRGVhZExldHRlclF1ZXVlLCB7XG4gICAgICAgIGVycm9yczogWydTdGF0ZXMuQUxMJ10sXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgbmVlZHNDYXRhbG9nVXBkYXRlRnVuY3Rpb24gPSBuZXcgTmVlZHNDYXRhbG9nVXBkYXRlKFxuICAgICAgdGhpcyxcbiAgICAgICdOZWVkc0NhdGFsb2dVcGRhdGUnLFxuICAgICAge1xuICAgICAgICBhcmNoaXRlY3R1cmU6IGdyYXZpdG9uTGFtYmRhSWZBdmFpbGFibGUodGhpcyksXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICdbQ29uc3RydWN0SHViL09yY2hlc3RyYXRpb24vTmVlZHNDYXRhbG9nVXBkYXRlXSBEZXRlcm1pbmVzIHdoZXRoZXIgYSBwYWNrYWdlIHZlcnNpb24gcmVxdWlyZXMgYSBjYXRhbG9nIHVwZGF0ZScsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgQ0FUQUxPR19CVUNLRVRfTkFNRTogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgQ0FUQUxPR19PQkpFQ1RfS0VZOiBDQVRBTE9HX0tFWSxcbiAgICAgICAgfSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMV8wMjQsXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICB9XG4gICAgKTtcbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkKG5lZWRzQ2F0YWxvZ1VwZGF0ZUZ1bmN0aW9uKTtcblxuICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGNhdGFsb2cgbmVlZHMgdXBkYXRpbmcuIElmIHNvLCB0cmlnZ2VyIGFkZFRvQ2F0YWxvZy5cbiAgICBjb25zdCBhZGRUb0NhdGFsb2dJZk5lZWRlZCA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UoXG4gICAgICB0aGlzLFxuICAgICAgJ0NoZWNrIHdoZXRoZXIgY2F0YWxvZyBuZWVkcyB1ZHBhdGluZycsXG4gICAgICB7XG4gICAgICAgIGxhbWJkYUZ1bmN0aW9uOiBuZWVkc0NhdGFsb2dVcGRhdGVGdW5jdGlvbixcbiAgICAgICAgcGF5bG9hZFJlc3BvbnNlT25seTogdHJ1ZSxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQuY2F0YWxvZ05lZWRzVXBkYXRpbmcnLFxuICAgICAgfVxuICAgIClcbiAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgIGVycm9yczogW1xuICAgICAgICAgICdMYW1iZGEuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uJyxcbiAgICAgICAgICAnTGFtYmRhLlVua25vd24nLCAvLyBoYXBwZW5zIHdoZW4gYSBsYW1iZGEgdGltZXMgb3V0LlxuICAgICAgICBdLFxuICAgICAgICAuLi5USFJPVFRMRV9SRVRSWV9QT0xJQ1ksXG4gICAgICB9KVxuICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICBlcnJvcnM6IFsnTGFtYmRhLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbicsICdMYW1iZGEuVW5rbm93biddLFxuICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvcicsXG4gICAgICB9KVxuICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICBlcnJvcnM6IFsnU3RhdGVzLlRhc2tGYWlsZWQnXSxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgfSlcbiAgICAgIC5hZGRDYXRjaChzZW5kVG9EZWFkTGV0dGVyUXVldWUsIHtcbiAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5BTEwnXSxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgfSlcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgQ2hvaWNlKHRoaXMsICdJcyBjYXRhbG9nIHVwZGF0ZSBuZWVkZWQ/JylcbiAgICAgICAgICAud2hlbihcbiAgICAgICAgICAgIENvbmRpdGlvbi5ib29sZWFuRXF1YWxzKCckLmNhdGFsb2dOZWVkc1VwZGF0aW5nJywgdHJ1ZSksXG4gICAgICAgICAgICBhZGRUb0NhdGFsb2dcbiAgICAgICAgICApXG4gICAgICAgICAgLm90aGVyd2lzZShuZXcgU3VjY2VlZCh0aGlzLCAnRG9uZScpKVxuICAgICAgKTtcblxuICAgIC8vIGF3cy1jZGstbGliIGlzIG9uZSBvZiB0aGUgYmlnZ2VzdCBsaWJzIGFuZCBydW5zIGluIH44bWluXG4gICAgLy8gV2UgZ2l2ZSB0aGUgdGFzayBzb21lIGdlbmVyb3VzIGV4dHJhIGFsbG93YW5jZSB0byBjb21wbGV0ZS5cbiAgICAvLyBJZiB0aGUgdGFzayBleGNlZWRzIHRoZSBydW50aW1lLCBpdCdzIHZlcnkgbGlrZWx5IHRoYXQgdGhlcmUgaXMgYW4gaXNzdWUgd2l0aCB0aGUgdGFzayBleGVjdXRpb24uXG4gICAgLy9cbiAgICAvLyBUaGUgdGltZW91dCB2YWx1ZSBpcyBkZWxpYmVyYXRlbHkgc2V0IGNsb3NlIHRvIHRoZSBleHBlY3RlZCBleGVjdXRpb24gdGltZSxcbiAgICAvLyB0byBhdm9pZCBhbiBleGNlc3NpdmUgY3VtdWxhdGl2ZSBydW50aW1lIHdpdGggcmV0cmllcyBhbmQgdG8gbm90IG5vcm1hbGl6ZSBsb25nZXIgdGhhbiBuZWNlc3NhcnkgcnVudGltZS5cbiAgICBjb25zdCB0cmFuc2xpdGVyYXRvclRpbWVvdXQgPSBEdXJhdGlvbi5taW51dGVzKDE1KTtcblxuICAgIHRoaXMuZWNzQ2x1c3RlciA9IG5ldyBDbHVzdGVyKHRoaXMsICdDbHVzdGVyJywge1xuICAgICAgY29udGFpbmVySW5zaWdodHM6IHRydWUsXG4gICAgICBlbmFibGVGYXJnYXRlQ2FwYWNpdHlQcm92aWRlcnM6IHRydWUsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KTtcbiAgICB0aGlzLmVjc1Rhc2tNb25pdG9yID0gbmV3IEVjc1Rhc2tNb25pdG9yKHRoaXMuZWNzQ2x1c3RlciwgJ01vbml0b3InLCB7XG4gICAgICBjbHVzdGVyOiB0aGlzLmVjc0NsdXN0ZXIsXG4gICAgICB0aW1lb3V0OiB0cmFuc2xpdGVyYXRvclRpbWVvdXQucGx1cyhEdXJhdGlvbi5taW51dGVzKDEwKSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zbGl0ZXJhdG9yID0gbmV3IFRyYW5zbGl0ZXJhdG9yKHRoaXMsICdUcmFuc2xpdGVyYXRvcicsIHByb3BzKTtcblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBuZXcgUGFzcyh0aGlzLCAnVHJhY2sgRXhlY3V0aW9uIEluZm9zJywge1xuICAgICAgaW5wdXRQYXRoOiAnJCQuRXhlY3V0aW9uJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgJ0lkLiQnOiAnJC5JZCcsXG4gICAgICAgICdOYW1lLiQnOiAnJC5OYW1lJyxcbiAgICAgICAgJ1JvbGVBcm4uJCc6ICckLlJvbGVBcm4nLFxuICAgICAgICAnU3RhcnRUaW1lLiQnOiAnJC5TdGFydFRpbWUnLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLiRUYXNrRXhlY3V0aW9uJyxcbiAgICB9KVxuICAgICAgLm5leHQoXG4gICAgICAgIG5ldyBQYXNzKHRoaXMsICdQcmVwYXJlIGRvYy1nZW4gRUNTIENvbW1hbmQnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyczogeyAnY29tbWFuZC4kJzogJ1N0YXRlcy5BcnJheShTdGF0ZXMuSnNvblRvU3RyaW5nKCQpKScgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5kb2NHZW4nLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLm5leHQoXG4gICAgICAgIHRoaXMudHJhbnNsaXRlcmF0b3JcbiAgICAgICAgICAuY3JlYXRlRWNzUnVuVGFzayh0aGlzLCAnR2VuZXJhdGUgZG9jcycsIHtcbiAgICAgICAgICAgIGNsdXN0ZXI6IHRoaXMuZWNzQ2x1c3RlcixcbiAgICAgICAgICAgIGlucHV0UGF0aDogJyQuZG9jR2VuLmNvbW1hbmQnLFxuICAgICAgICAgICAgLy8gdGhlIG91dHB1dCBmcm9tIHRoZSB0cmFuc2xpdGVyYXRvciB0YXNrIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICAvLyB3ZSBqdXN0IG5lZWQgdG8ga25vdyBpZiBpdCBzdWNjZWVkZWRcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgICAvLyBhd3MtY2RrLWxpYiBzdWNjZWVkcyBpbiByb3VnaGx5IDEgaG91ciwgc28gdGhpcyBzaG91bGQgZ2l2ZSB1c1xuICAgICAgICAgICAgLy8gZW5vdWdoIG9mIGEgYnVmZmVyIGFuZCBwcm9iYWJseSBhY2NvdW50IGZvciBhbGwgb3RoZXIgbGlicmFyaWVzIG91dCB0aGVyZS5cbiAgICAgICAgICAgIHRpbWVvdXQ6IHRyYW5zbGl0ZXJhdG9yVGltZW91dCxcbiAgICAgICAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnZwY1N1Ym5ldHMsXG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwczogcHJvcHMudnBjU2VjdXJpdHlHcm91cHMsXG4gICAgICAgICAgICAvLyBUaGUgdGFzayBjb2RlIHNlbmRzIGEgaGVhcnRiZWF0IGJhY2sgZXZlcnkgbWludXRlLCBidXQgaW4gcmFyZVxuICAgICAgICAgICAgLy8gY2FzZXMgdGhlIGZpcnN0IGhlYXJ0YmVhdCBtYXkgdGFrZSBhIHdoaWxlIHRvIGNvbWUgYmFjayBkdWUgdG9cbiAgICAgICAgICAgIC8vIHRoZSB0aW1lIGl0IHRha2VzIHRvIHByb3Zpc2lvbiB0aGUgdGFzayBpbiB0aGUgY2x1c3Rlciwgc28gd2VcbiAgICAgICAgICAgIC8vIGdpdmUgYSBtb3JlIGdlbmVyb3VzIGJ1ZmZlciBoZXJlLlxuICAgICAgICAgICAgaGVhcnRiZWF0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gRG8gbm90IHJldHJ5IE5vU3BhY2VMZWZ0T25EZXZpY2UgZXJyb3JzLCB0aGVzZSBhcmUgdHlwaWNhbGx5IG5vdCB0cmFuc2llbnQuXG4gICAgICAgICAgLmFkZFJldHJ5KHtcbiAgICAgICAgICAgIGVycm9yczogWydqc2lpLWRvY2dlbi5Ob1NwYWNlTGVmdE9uRGV2aWNlJ10sXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICAgICAgJ0VDUy5BbWF6b25FQ1NFeGNlcHRpb24nLCAvLyBUYXNrIGZhaWxlZCBzdGFydGluZywgdXN1YWxseSBkdWUgdG8gdGhyb3R0bGUgLyBvdXQgb2YgY2FwYWNpdHlcbiAgICAgICAgICAgICAgJ0VDUy5JbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uJywgLy8gVGhpcyBpcyByZXR1cm5lZCB3aGVuIEVDUyBnZXRzIHRocm90dGxlZCB3aGVuIHRyeWluZyB0byBhY2Nlc3MgVlBDL1NHcy5cbiAgICAgICAgICAgICAgJ2pzaWktZG9jZ2VuLk5wbUVycm9yLkU0MjknLCAvLyBIVFRQIDQyOSAoXCJUb28gTWFueSBSZXF1ZXN0c1wiKSBmcm9tIENvZGVBcnRpZmFjdCdzIFMzIGJ1Y2tldFxuICAgICAgICAgICAgICAnanNpaS1jb2RnZW4uTnBtRXJyb3IuRVBST1RPJywgLy8gU3BvcmFkaWMgVExTIG5lZ290aWF0aW9uIGZhaWx1cmVzIHdlIHNlZSBpbiBsb2dzLCB0cmFuc2llbnRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAuLi5ET0NHRU5fVEhST1RUTEVfUkVUUllfUE9MSUNZLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZFJldHJ5KHtcbiAgICAgICAgICAgIGVycm9yczogWydqc2lpLWRvY2dlbi5OcG1FcnJvci5FVEFSR0VUJ10sIC8vIFNlZW4gd2hlbiBkZXBlbmRlbmNpZXMgYXJlbid0IGF2YWlsYWJsZSB5ZXRcbiAgICAgICAgICAgIC8vIFdlJ2xsIHdhaXQgbG9uZ2VyIGJldHdlZW4gcmV0cmllcy4gVGhpcyBpcyB0byBhY2NvdW50IGZvciBDb2RlQXJ0aWZhY3QncyBsYWcgYmVoaW5kIG5wbVxuICAgICAgICAgICAgYmFja29mZlJhdGU6IDIsXG4gICAgICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZFJldHJ5KHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXNrIGhhcyBmYWlsZWQgZm9yIGFuIHVua25vd24gcmVhc29uLCBvciBzdG9wcGVkIHJlc3BvbmRpbmcsIG9yIGlzIGp1c3QgdGFraW5nIGEgbG9uZyB0aW1lIHRvIHByb3Zpc2lvblxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBhdHRlbXB0IGEgY291cGxlIG9mIHJldHJpZXMgd2l0aCBzb21lIHRpbWUgaW4gYmV0d2Vlbi5cbiAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBjb3ZlcnMgdGhlICdTdGF0ZXMuVGltZW91dCcgZXJyb3IsIGJ1dCB3ZSBhcmUgbm90IGdpdmluZyB0aW1lb3V0IGVycm9yIGFueSBzcGVjaWFsIHRyZWF0bWVudC5cbiAgICAgICAgICAgIC8vIElmIHRoZSB0YXNrIHRpbWVvdXQgaXMgcmVhY2hlZCwgaXQgaXMgbW9zdCBsaWtlbHkgYW4gaXNzdWUgd2l0aCB0aGUgdGFzayB0aGF0IG5lZWRzIGludmVzdGlnYXRpb24uXG4gICAgICAgICAgICBiYWNrb2ZmUmF0ZTogMixcbiAgICAgICAgICAgIGludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAyLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZENhdGNoKGlnbm9yZSwge1xuICAgICAgICAgICAgZXJyb3JzOiBbVU5QUk9DRVNTQUJMRV9QQUNLQUdFX0VSUk9SX05BTUVdLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5UaW1lb3V0J10sXG4gICAgICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvcicsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWRkQ2F0Y2goc2VuZFRvRGVhZExldHRlclF1ZXVlLCB7XG4gICAgICAgICAgICBlcnJvcnM6IFsnRUNTLkFtYXpvbkVDU0V4Y2VwdGlvbicsICdFQ1MuSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvbiddLFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFkZENhdGNoKHNlbmRUb0RlYWRMZXR0ZXJRdWV1ZSwge1xuICAgICAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5UYXNrRmFpbGVkJ10sXG4gICAgICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvcicsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWRkQ2F0Y2goc2VuZFRvRGVhZExldHRlclF1ZXVlLCB7XG4gICAgICAgICAgICBlcnJvcnM6IFsnU3RhdGVzLkFMTCddLFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3InLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm5leHQoYWRkVG9DYXRhbG9nSWZOZWVkZWQpXG4gICAgICApO1xuXG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUgPSBuZXcgU3RhdGVNYWNoaW5lKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGRlZmluaXRpb24sXG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lOiBzdGF0ZU1hY2hpbmVOYW1lRnJvbSh0aGlzLm5vZGUucGF0aCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5kYXlzKDEpLCAvLyBBbXBsZSB0aW1lIGZvciByZXRyaWVzLCBldGMuLi5cbiAgICAgIHRyYWNpbmdFbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnZwYykge1xuICAgICAgLy8gRW5zdXJlIHRoZSBTdGF0ZSBNYWNoaW5lIGRvZXMgbm90IGdldCB0byBydW4gYmVmb3JlIHRoZSBWUEMgY2FuIGJlIHVzZWQuXG4gICAgICB0aGlzLnN0YXRlTWFjaGluZS5ub2RlLmFkZERlcGVuZGVuY3koXG4gICAgICAgIHByb3BzLnZwYy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkXG4gICAgICApO1xuICAgIH1cblxuICAgIGFkZEFsYXJtKFxuICAgICAgJ0JhY2tlbmQgT3JjaGVzdHJhdGlvbiBGYWlsZWQnLFxuICAgICAgdGhpcy5zdGF0ZU1hY2hpbmVcbiAgICAgICAgLm1ldHJpY0ZhaWxlZCgpXG4gICAgICAgIC5jcmVhdGVBbGFybSh0aGlzLCAnT3JjaGVzdHJhdGlvbkZhaWxlZCcsIHtcbiAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMuc3RhdGVNYWNoaW5lLm5vZGUucGF0aH0vJHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lLm1ldHJpY0ZhaWxlZCgpLm1ldHJpY05hbWVcbiAgICAgICAgICB9YCxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgICAnQmFja2VuZCBvcmNoZXN0cmF0aW9uIGZhaWxlZCEnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gc3RhdGUgbWFjaGluZTogJHtzdGF0ZU1hY2hpbmVVcmwoXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgICAnV2FybmluZzogbWVzc2FnZXMgdGhhdCByZXN1bHRlZCBpbiBhIGZhaWxlZCBleGVjdHVpb24gd2lsbCBOT1QgYmUgaW4gdGhlIERMUSEnLFxuICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICB9KSxcbiAgICAgIHByb3BzLmFsYXJtU2V2ZXJpdGllcz8uYmFja2VuZE9yY2hlc3RyYXRpb25GYWlsZWQgPz8gQWxhcm1TZXZlcml0eS5ISUdILFxuICAgICAgcHJvcHMubW9uaXRvcmluZ1xuICAgICk7XG5cbiAgICBwcm9wcy5tb25pdG9yaW5nLmFkZEhpZ2hTZXZlcml0eUFsYXJtKFxuICAgICAgJ0V4ZWN1dGlvbiBGYWlsdXJlIFJhdGUgYWJvdmUgNzUlJyxcbiAgICAgIHRoaXMubWV0cmljU3RhdGVzRXhlY3V0aW9uRmFpbHVyZVJhdGUoKS5jcmVhdGVBbGFybShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ0ZhaWx1cmVSYXRlQWxhcm0nLFxuICAgICAgICB7XG4gICAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLnN0YXRlTWFjaGluZS5ub2RlLnBhdGh9L0V4ZWN1dGlvbkZhaWx1cmVSYXRlYCxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiAnRXhlY3V0aW9uIEZhaWx1cmUgUmF0ZSBhYm92ZSA3NSUnLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICAgIHRocmVzaG9sZDogNzUsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBtYW51YWxseSB0cmlnZ2VyZWQgYnkgYW4gb3BlcnJhdG9yIHRvXG4gICAgLy8gYXR0ZW1wdCByZWRyaXZpbmcgbWVzc2FnZXMgZnJvbSB0aGUgRExRLlxuICAgIHRoaXMucmVkcml2ZUZ1bmN0aW9uID0gbmV3IFJlZHJpdmVTdGF0ZU1hY2hpbmUodGhpcywgJ1JlZHJpdmUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1tDb25zdHJ1Y3RIdWIvUmVkcml2ZV0gTWFudWFsbHkgcmVkcml2ZXMgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQgZGVhZCBsZXR0ZXIgcXVldWUnLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU1RBVEVfTUFDSElORV9BUk46IHRoaXMuc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgUVVFVUVfVVJMOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZS5xdWV1ZVVybCxcbiAgICAgIH0sXG4gICAgICBtZW1vcnlTaXplOiAxXzAyNCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgfSk7XG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUuZ3JhbnRTdGFydEV4ZWN1dGlvbih0aGlzLnJlZHJpdmVGdW5jdGlvbik7XG4gICAgdGhpcy5kZWFkTGV0dGVyUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXModGhpcy5yZWRyaXZlRnVuY3Rpb24pO1xuICAgIHByb3BzLm92ZXJ2aWV3RGFzaGJvYXJkLmFkZERMUU1ldHJpY1RvRGFzaGJvYXJkKFxuICAgICAgJ09yY2hlc3RyYXRpb24gRExRJyxcbiAgICAgIHRoaXMuZGVhZExldHRlclF1ZXVlLFxuICAgICAgdGhpcy5yZWRyaXZlRnVuY3Rpb25cbiAgICApO1xuXG4gICAgLy8gVGhlIHdvcmtmbG93IGlzIGludGVuZGVkIHRvIGJlIG1hbnVhbGx5IHRyaWdnZXJlZCBieSBhbiBvcGVyYXRvciB0b1xuICAgIC8vIHJlcHJvY2VzcyBhbGwgcGFja2FnZSB2ZXJzaW9ucyBjdXJyZW50bHkgaW4gc3RvcmUgdGhyb3VnaCB0aGUgb3JjaGVzdHJhdG9yLlxuICAgIGNvbnN0IHJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uID0gbmV3IFJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdSZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbicsXG4gICAgICB7XG4gICAgICAgIGJ1Y2tldDogcHJvcHMuYnVja2V0LFxuICAgICAgICBzdGF0ZU1hY2hpbmU6IHRoaXMuc3RhdGVNYWNoaW5lLFxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbiA9IHJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uLnN0YXRlTWFjaGluZTtcbiAgICB0aGlzLnJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uUGVyUGFja2FnZSA9XG4gICAgICByZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvbi5wcm9jZXNzUGFja2FnZVZlcnNpb25zO1xuXG4gICAgLy8gQ3JlYXRlIHJldHJ5IHVuaW5zdGFsbGFibGUgcGFja2FnZXMgd29ya2Zsb3dcbiAgICBjb25zdCByZXRyeVVuaW5zdGFsbGFibGUgPSBuZXcgUmV0cnlVbmluc3RhbGxhYmxlUGFja2FnZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ1JldHJ5VW5pbnN0YWxsYWJsZVBhY2thZ2VzJyxcbiAgICAgIHtcbiAgICAgICAgYnVja2V0OiBwcm9wcy5idWNrZXQsXG4gICAgICAgIG9yY2hlc3RyYXRpb25TdGF0ZU1hY2hpbmU6IHRoaXMuc3RhdGVNYWNoaW5lLFxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZXRyeVVuaW5zdGFsbGFibGVQYWNrYWdlcyA9IHJldHJ5VW5pbnN0YWxsYWJsZS5zdGF0ZU1hY2hpbmU7XG5cbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICBuZWVkc0NhdGFsb2dVcGRhdGVGdW5jdGlvbixcbiAgICAgICdOZWVkc0NhdGFsb2dVcGRhdGVMYW1iZGEnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNTdGF0ZXNFeGVjdXRpb25GYWlsdXJlUmF0ZShcbiAgICBvcHRzPzogTWF0aEV4cHJlc3Npb25PcHRpb25zXG4gICk6IE1hdGhFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICAvLyBDYWxjdWxhdGVzIHRoZSAlIEV4ZWN1dGlvbnNGYWlsZWQgZnJvbSB0aGUgRXhlY3V0aW9uc1N0YXJ0ZWQuXG4gICAgICBleHByZXNzaW9uOiAnMTAwICogbWV4ZWN1dGlvbnNGYWlsZWQgLyBtZXhlY3V0aW9uc1N0YXJ0ZWQnLFxuICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgIG1leGVjdXRpb25zRmFpbGVkOiB0aGlzLm1ldHJpY1N0YXRlc0V4ZWN1dGlvbnNGYWlsZWQoKSxcbiAgICAgICAgbWV4ZWN1dGlvbnNTdGFydGVkOiB0aGlzLm1ldHJpY1N0YXRlc0V4ZWN1dGlvbnNTdGFydGVkKCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1N0YXRlc0V4ZWN1dGlvbnNGYWlsZWQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENsdXN0ZXJOYW1lOiB0aGlzLmVjc0NsdXN0ZXIuY2x1c3Rlck5hbWUgfSxcbiAgICAgIG1ldHJpY05hbWU6ICdFeGVjdXRpb25zRmFpbGVkJyxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9TdGF0ZXMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1N0YXRlc0V4ZWN1dGlvbnNTdGFydGVkKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBFeGVjdXRpb25NZXRyaWNzOiB0aGlzLnN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4gfSxcbiAgICAgIG1ldHJpY05hbWU6ICdFeGVjdXRpb25zU3RhcnRlZCcsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvU3RhdGVzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NUYXNrQ291bnQob3B0czogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgRXhlY3V0aW9uTWV0cmljczogdGhpcy5zdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJuIH0sXG4gICAgICBtZXRyaWNOYW1lOiAnVGFza0NvdW50JyxcbiAgICAgIG5hbWVzcGFjZTogJ0VDUy9Db250YWluZXJJbnNpZ2h0cycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljRWNzQ3B1UmVzZXJ2ZWQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDbHVzdGVyTmFtZTogdGhpcy5lY3NDbHVzdGVyLmNsdXN0ZXJOYW1lIH0sXG4gICAgICBtZXRyaWNOYW1lOiAnQ3B1UmVzZXJ2ZWQnLFxuICAgICAgbmFtZXNwYWNlOiAnRUNTL0NvbnRhaW5lckluc2lnaHRzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NDcHVVdGlsaXplZChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENsdXN0ZXJOYW1lOiB0aGlzLmVjc0NsdXN0ZXIuY2x1c3Rlck5hbWUgfSxcbiAgICAgIG1ldHJpY05hbWU6ICdDcHVVdGlsaXplZCcsXG4gICAgICBuYW1lc3BhY2U6ICdFQ1MvQ29udGFpbmVySW5zaWdodHMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Vjc0NwdVV0aWxpemF0aW9uKG9wdHM/OiBNYXRoRXhwcmVzc2lvbk9wdGlvbnMpOiBNYXRoRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAuLi5vcHRzLFxuICAgICAgLy8gQ2FsY3VsYXRlcyB0aGUgJSBDUFUgdXRpbGl6YXRpb24gZnJvbSB0aGUgQ1BVIHVuaXRzIHV0aWxpemF0aW9uICZcbiAgICAgIC8vIHJlc2VydmF0aW9uLiBGSUxMIGlzIHVzZWQgdG8gbWFrZSBhIG5vbi1zcGFyc2UgdGltZS1zZXJpZXMgKHRoZSBtZXRyaWNzXG4gICAgICAvLyBhcmUgbm90IGVtaXR0ZWQgaWYgbm8gdGFzayBydW5zKVxuICAgICAgZXhwcmVzc2lvbjogJzEwMCAqIEZJTEwobUNwdVV0aWxpemVkLCAwKSAvIEZJTEwobUNwdVJlc2VydmVkLCBSRVBFQVQpJyxcbiAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICBtQ3B1UmVzZXJ2ZWQ6IHRoaXMubWV0cmljRWNzQ3B1UmVzZXJ2ZWQoKSxcbiAgICAgICAgbUNwdVV0aWxpemVkOiB0aGlzLm1ldHJpY0Vjc0NwdVV0aWxpemVkKCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0Vjc01lbW9yeVJlc2VydmVkKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgQ2x1c3Rlck5hbWU6IHRoaXMuZWNzQ2x1c3Rlci5jbHVzdGVyTmFtZSB9LFxuICAgICAgbWV0cmljTmFtZTogJ01lbW9yeVJlc2VydmVkJyxcbiAgICAgIG5hbWVzcGFjZTogJ0VDUy9Db250YWluZXJJbnNpZ2h0cycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljRWNzTWVtb3J5VXRpbGl6ZWQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDbHVzdGVyTmFtZTogdGhpcy5lY3NDbHVzdGVyLmNsdXN0ZXJOYW1lIH0sXG4gICAgICBtZXRyaWNOYW1lOiAnTWVtb3J5VXRpbGl6ZWQnLFxuICAgICAgbmFtZXNwYWNlOiAnRUNTL0NvbnRhaW5lckluc2lnaHRzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NNZW1vcnlVdGlsaXphdGlvbihcbiAgICBvcHRzPzogTWF0aEV4cHJlc3Npb25PcHRpb25zXG4gICk6IE1hdGhFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICAvLyBDYWxjdWxhdGVzIHRoZSAlIG1lbW9yeSB1dGlsaXphdGlvbiBmcm9tIHRoZSBSQU0gdXRpbGl6YXRpb24gJlxuICAgICAgLy8gcmVzZXJ2YXRpb24uIEZJTEwgaXMgdXNlZCB0byBtYWtlIGEgbm9uLXNwYXJzZSB0aW1lLXNlcmllcyAodGhlIG1ldHJpY3NcbiAgICAgIC8vIGFyZSBub3QgZW1pdHRlZCBpZiBubyB0YXNrIHJ1bnMpXG4gICAgICBleHByZXNzaW9uOlxuICAgICAgICAnMTAwICogRklMTChtTWVtb3J5VXRpbGl6ZWQsIDApIC8gRklMTChtTWVtb3J5UmVzZXJ2ZWQsIFJFUEVBVCknLFxuICAgICAgdXNpbmdNZXRyaWNzOiB7XG4gICAgICAgIG1NZW1vcnlSZXNlcnZlZDogdGhpcy5tZXRyaWNFY3NNZW1vcnlSZXNlcnZlZCgpLFxuICAgICAgICBtTWVtb3J5VXRpbGl6ZWQ6IHRoaXMubWV0cmljRWNzTWVtb3J5VXRpbGl6ZWQoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljRWNzTmV0d29ya1J4Qnl0ZXMob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDbHVzdGVyTmFtZTogdGhpcy5lY3NDbHVzdGVyLmNsdXN0ZXJOYW1lIH0sXG4gICAgICBtZXRyaWNOYW1lOiAnTmV0d29ya1J4Qnl0ZXMnLFxuICAgICAgbmFtZXNwYWNlOiAnRUNTL0NvbnRhaW5lckluc2lnaHRzJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFY3NOZXR3b3JrVHhCeXRlcyhvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENsdXN0ZXJOYW1lOiB0aGlzLmVjc0NsdXN0ZXIuY2x1c3Rlck5hbWUgfSxcbiAgICAgIG1ldHJpY05hbWU6ICdOZXR3b3JrVHhCeXRlcycsXG4gICAgICBuYW1lc3BhY2U6ICdFQ1MvQ29udGFpbmVySW5zaWdodHMnLFxuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBSZWdlbmVyYXRlQWxsRG9jdW1lbnRhdGlvblByb3BzIHtcbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSBzdGF0ZU1hY2hpbmU6IElTdGF0ZU1hY2hpbmU7XG59XG5cbmNsYXNzIFJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlTWFjaGluZTogU3RhdGVNYWNoaW5lO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc1BhY2thZ2VWZXJzaW9uczogU3RhdGVNYWNoaW5lO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJlZ2VuZXJhdGVBbGxEb2N1bWVudGF0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHByb2Nlc3NWZXJzaW9ucyA9IG5ldyBDaG9pY2UodGhpcywgJ0dldCBwYWNrYWdlIHZlcnNpb25zIHBhZ2UnKVxuICAgICAgLndoZW4oXG4gICAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJyksXG4gICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnTmV4dCB2ZXJzaW9ucyBwYWdlJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBKc29uUGF0aC5zdHJpbmdBdChcbiAgICAgICAgICAgICAgJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIERlbGltaXRlcjogJy8nLFxuICAgICAgICAgICAgUHJlZml4OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5QcmVmaXgnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3BvbnNlJyxcbiAgICAgICAgfSkuYWRkUmV0cnkoeyBlcnJvcnM6IFsnUzMuU2RrQ2xpZW50RXhjZXB0aW9uJ10gfSlcbiAgICAgIClcbiAgICAgIC5vdGhlcndpc2UoXG4gICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnRmlyc3QgdmVyc2lvbnMgcGFnZScsIHtcbiAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgIGFjdGlvbjogJ2xpc3RPYmplY3RzVjInLFxuICAgICAgICAgIGlhbUFjdGlvbjogJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgIGlhbVJlc291cmNlczogW3Byb3BzLmJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBEZWxpbWl0ZXI6ICcvJyxcbiAgICAgICAgICAgIFByZWZpeDogSnNvblBhdGguc3RyaW5nQXQoJyQuUHJlZml4JyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXNwb25zZScsXG4gICAgICAgIH0pLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1MzLlNka0NsaWVudEV4Y2VwdGlvbiddIH0pXG4gICAgICApXG4gICAgICAuYWZ0ZXJ3YXJkcygpXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IE1hcCh0aGlzLCAnRm9yIGVhY2gga2V5IHByZWZpeCcsIHtcbiAgICAgICAgICBpdGVtc1BhdGg6ICckLnJlc3BvbnNlLkNvbW1vblByZWZpeGVzJyxcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KS5pdGVyYXRvcihcbiAgICAgICAgICBuZXcgdGFza3MuU3RlcEZ1bmN0aW9uc1N0YXJ0RXhlY3V0aW9uKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdTdGFydCBPcmNoZXN0cmF0aW9uIFdvcmtmbG93JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lOiBwcm9wcy5zdGF0ZU1hY2hpbmUsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZVdpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgIGlucHV0OiBUYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgYnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgICAgICBhc3NlbWJseToge1xuICAgICAgICAgICAgICAgICAga2V5OiBKc29uUGF0aC5zdHJpbmdBdChcbiAgICAgICAgICAgICAgICAgICAgYFN0YXRlcy5Gb3JtYXQoJ3t9JHtBU1NFTUJMWV9LRVlfU1VGRklYLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICl9JywgJC5QcmVmaXgpYFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBrZXk6IEpzb25QYXRoLnN0cmluZ0F0KFxuICAgICAgICAgICAgICAgICAgICBgU3RhdGVzLkZvcm1hdCgne30ke01FVEFEQVRBX0tFWV9TVUZGSVguc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKX0nLCAkLlByZWZpeClgXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFja2FnZToge1xuICAgICAgICAgICAgICAgICAga2V5OiBKc29uUGF0aC5zdHJpbmdBdChcbiAgICAgICAgICAgICAgICAgICAgYFN0YXRlcy5Gb3JtYXQoJ3t9JHtQQUNLQUdFX0tFWV9TVUZGSVguc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKX0nLCAkLlByZWZpeClgXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBpbnRlZ3JhdGlvblBhdHRlcm46IEludGVncmF0aW9uUGF0dGVybi5SRVFVRVNUX1JFU1BPTlNFLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRSZXRyeSh7IGVycm9yczogWydTdGVwRnVuY3Rpb25zLkV4ZWN1dGlvbkxpbWl0RXhjZWVkZWQnXSB9KVxuICAgICAgICAgICAgLmFkZENhdGNoKG5ldyBTdWNjZWVkKHByb3BzLnN0YXRlTWFjaGluZSwgJ1N0YXRlTWFjaGluZSBTdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgZXJyb3JzOiBbJ1N0YXRlcy5UYXNrRmFpbGVkJ10sXG4gICAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9yJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICBwcm9jZXNzVmVyc2lvbnMubmV4dChcbiAgICAgIG5ldyBDaG9pY2UodGhpcywgJ0hhcyBtb3JlIHZlcnNpb25zPycpXG4gICAgICAgIC53aGVuKFxuICAgICAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJyksXG4gICAgICAgICAgcHJvY2Vzc1ZlcnNpb25zXG4gICAgICAgIClcbiAgICAgICAgLm90aGVyd2lzZShuZXcgU3VjY2VlZCh0aGlzLCAnU3VjY2VzcycpKVxuICAgICk7XG4gICAgY29uc3QgcHJvY2Vzc1BhY2thZ2VWZXJzaW9ucyA9IG5ldyBTdGF0ZU1hY2hpbmUodGhpcywgJ1BlclBhY2thZ2UnLCB7XG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lOiBSRVBST0NFU1NfUEVSX1BBQ0tBR0VfU1RBVEVfTUFDSElORV9OQU1FLFxuICAgICAgZGVmaW5pdGlvbjogcHJvY2Vzc1ZlcnNpb25zLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uaG91cnMoMSksXG4gICAgICB0cmFjaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb2Nlc3NQYWNrYWdlVmVyc2lvbnMgPSBwcm9jZXNzUGFja2FnZVZlcnNpb25zO1xuXG4gICAgLy8gVGhpcyB3b3JrZmxvdyBpcyBicm9rZW4gaW50byB0d28gc3ViLXdvcmtmbG93cyBiZWNhdXNlIG90aGVyd2lzZSBpdCBoaXRzIHRoZSAyNUsgZXZlbnRzIGxpbWl0XG4gICAgLy8gb2YgU3RlcEZ1bmN0aW9uIGV4ZWN1dGlvbnMgcmVsYXRpdmVseSBxdWlja2x5LlxuICAgIGNvbnN0IHByb2Nlc3NOYW1lc3BhY2UgPSBuZXcgQ2hvaWNlKHRoaXMsICdHZXQgQHNjb3BlIHBhZ2UnKVxuICAgICAgLndoZW4oXG4gICAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJyksXG4gICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnTmV4dCBAc2NvcGUgcGFnZScsIHtcbiAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgIGFjdGlvbjogJ2xpc3RPYmplY3RzVjInLFxuICAgICAgICAgIGlhbUFjdGlvbjogJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgIGlhbVJlc291cmNlczogW3Byb3BzLmJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogSnNvblBhdGguc3RyaW5nQXQoXG4gICAgICAgICAgICAgICckLnJlc3BvbnNlLk5leHRDb250aW51YXRpb25Ub2tlbidcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBEZWxpbWl0ZXI6ICcvJyxcbiAgICAgICAgICAgIFByZWZpeDogSnNvblBhdGguc3RyaW5nQXQoJyQuUHJlZml4JyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXNwb25zZScsXG4gICAgICAgIH0pLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1MzLlNka0NsaWVudEV4Y2VwdGlvbiddIH0pXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKFxuICAgICAgICBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0ZpcnN0IEBzY29wZSBwYWdlJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIERlbGltaXRlcjogJy8nLFxuICAgICAgICAgICAgUHJlZml4OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5QcmVmaXgnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3BvbnNlJyxcbiAgICAgICAgfSkuYWRkUmV0cnkoeyBlcnJvcnM6IFsnUzMuU2RrQ2xpZW50RXhjZXB0aW9uJ10gfSlcbiAgICAgIClcbiAgICAgIC5hZnRlcndhcmRzKClcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgTWFwKHRoaXMsICdGb3IgZWFjaCBAc2NvcGUvcGtnJywge1xuICAgICAgICAgIGl0ZW1zUGF0aDogJyQucmVzcG9uc2UuQ29tbW9uUHJlZml4ZXMnLFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLml0ZXJhdG9yKFxuICAgICAgICAgIG5ldyB0YXNrcy5TdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb24oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgJ1Byb2Nlc3Mgc2NvcGVkIHBhY2thZ2UnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmU6IHByb2Nlc3NQYWNrYWdlVmVyc2lvbnMsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZVdpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgIGlucHV0OiBUYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgUHJlZml4OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5QcmVmaXgnKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGludGVncmF0aW9uUGF0dGVybjogSW50ZWdyYXRpb25QYXR0ZXJuLlJVTl9KT0IsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKS5hZGRSZXRyeSh7IGVycm9yczogWydTdGVwRnVuY3Rpb25zLkV4ZWN1dGlvbkxpbWl0RXhjZWVkZWQnXSB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIHByb2Nlc3NOYW1lc3BhY2UubmV4dChcbiAgICAgIG5ldyBDaG9pY2UodGhpcywgJ0hhcyBtb3JlIHBhY2thZ2VzPycpXG4gICAgICAgIC53aGVuKFxuICAgICAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJyksXG4gICAgICAgICAgcHJvY2Vzc05hbWVzcGFjZVxuICAgICAgICApXG4gICAgICAgIC5vdGhlcndpc2UobmV3IFN1Y2NlZWQodGhpcywgJ0FsbCBEb25lJykpXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IENob2ljZSh0aGlzLCAnR2V0IHByZWZpeCBwYWdlJylcbiAgICAgIC53aGVuKFxuICAgICAgICBDb25kaXRpb24uaXNQcmVzZW50KCckLnJlc3BvbnNlLk5leHRDb250aW51YXRpb25Ub2tlbicpLFxuICAgICAgICBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ05leHQgcHJlZml4ZXMgcGFnZScsIHtcbiAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgIGFjdGlvbjogJ2xpc3RPYmplY3RzVjInLFxuICAgICAgICAgIGlhbUFjdGlvbjogJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgIGlhbVJlc291cmNlczogW3Byb3BzLmJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogSnNvblBhdGguc3RyaW5nQXQoXG4gICAgICAgICAgICAgICckLnJlc3BvbnNlLk5leHRDb250aW51YXRpb25Ub2tlbidcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBEZWxpbWl0ZXI6ICcvJyxcbiAgICAgICAgICAgIFByZWZpeDogU1RPUkFHRV9LRVlfUFJFRklYLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzcG9uc2UnLFxuICAgICAgICB9KS5hZGRSZXRyeSh7IGVycm9yczogWydTMy5TZGtDbGllbnRFeGNlcHRpb24nXSB9KVxuICAgICAgKVxuICAgICAgLm90aGVyd2lzZShcbiAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdGaXJzdCBwcmVmaXggcGFnZScsIHtcbiAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgIGFjdGlvbjogJ2xpc3RPYmplY3RzVjInLFxuICAgICAgICAgIGlhbUFjdGlvbjogJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgIGlhbVJlc291cmNlczogW3Byb3BzLmJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBEZWxpbWl0ZXI6ICcvJyxcbiAgICAgICAgICAgIFByZWZpeDogU1RPUkFHRV9LRVlfUFJFRklYLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzcG9uc2UnLFxuICAgICAgICB9KS5hZGRSZXRyeSh7IGVycm9yczogWydTMy5TZGtDbGllbnRFeGNlcHRpb24nXSB9KVxuICAgICAgKVxuICAgICAgLmFmdGVyd2FyZHMoKVxuICAgICAgLm5leHQoXG4gICAgICAgIG5ldyBNYXAodGhpcywgJ0ZvciBlYWNoIHByZWZpeCcsIHtcbiAgICAgICAgICBpdGVtc1BhdGg6ICckLnJlc3BvbnNlLkNvbW1vblByZWZpeGVzJyxcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KS5pdGVyYXRvcihcbiAgICAgICAgICBuZXcgQ2hvaWNlKHRoaXMsICdJcyB0aGlzIGEgQHNjb3BlLyBwcmVmaXg/JylcbiAgICAgICAgICAgIC53aGVuKFxuICAgICAgICAgICAgICBDb25kaXRpb24uc3RyaW5nTWF0Y2hlcygnJC5QcmVmaXgnLCBgJHtTVE9SQUdFX0tFWV9QUkVGSVh9QCpgKSxcbiAgICAgICAgICAgICAgcHJvY2Vzc05hbWVzcGFjZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm90aGVyd2lzZShcbiAgICAgICAgICAgICAgbmV3IHRhc2tzLlN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICdQcm9jZXNzIHVuc2NvcGVkIHBhY2thZ2UnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZTogcHJvY2Vzc1BhY2thZ2VWZXJzaW9ucyxcbiAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZVdpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBpbnB1dDogVGFza0lucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBQcmVmaXg6IEpzb25QYXRoLnN0cmluZ0F0KCckLlByZWZpeCcpLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvblBhdHRlcm46IEludGVncmF0aW9uUGF0dGVybi5SVU5fSk9CLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKS5hZGRSZXRyeSh7IGVycm9yczogWydTdGVwRnVuY3Rpb25zLkV4ZWN1dGlvbkxpbWl0RXhjZWVkZWQnXSB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFmdGVyd2FyZHMoKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgc3RhcnQubmV4dChcbiAgICAgIG5ldyBDaG9pY2UodGhpcywgJ0hhcyBtb3JlIHByZWZpeGVzPycpXG4gICAgICAgIC53aGVuKENvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJyksIHN0YXJ0KVxuICAgICAgICAub3RoZXJ3aXNlKG5ldyBTdWNjZWVkKHRoaXMsICdEb25lJykpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBkZWZpbml0aW9uOiBzdGFydCxcbiAgICAgIHN0YXRlTWFjaGluZU5hbWU6IHN0YXRlTWFjaGluZU5hbWVGcm9tKHRoaXMubm9kZS5wYXRoKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLmhvdXJzKDQpLFxuICAgICAgdHJhY2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkKHByb2Nlc3NQYWNrYWdlVmVyc2lvbnMpO1xuICAgIHByb3BzLmJ1Y2tldC5ncmFudFJlYWQodGhpcy5zdGF0ZU1hY2hpbmUpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyB0dXJucyBhIG5vZGUgcGF0aCBpbnRvIGEgdmFsaWQgc3RhdGUgbWFjaGluZSBuYW1lLCB0byB0cnkgYW5kIGltcHJvdmVcbiAqIHRoZSBTdGVwRnVuY3Rpb24ncyBBV1MgY29uc29sZSBleHBlcmllbmNlIHdoaWxlIG1pbmltaXppbmcgdGhlIHJpc2sgZm9yXG4gKiBjb2xsaXNvbnMuXG4gKi9cbmZ1bmN0aW9uIHN0YXRlTWFjaGluZU5hbWVGcm9tKG5vZGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQb29yIG1hbidzIHJlcGxhY2UgYWxsLi4uXG4gIHJldHVybiBub2RlUGF0aC5zcGxpdCgvW15hLXowLTkrIUAuKCk9XyctXSsvaSkuam9pbignLicpO1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
export interface ReadUninstallableReportProps extends lambda.FunctionOptions {
|
|
4
|
+
}
|
|
5
|
+
export declare class ReadUninstallableReport extends lambda.Function {
|
|
6
|
+
constructor(scope: Construct, id: string, props?: ReadUninstallableReportProps);
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReadUninstallableReport = void 0;
|
|
4
|
+
// ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
class ReadUninstallableReport extends lambda.Function {
|
|
8
|
+
constructor(scope, id, props) {
|
|
9
|
+
super(scope, id, {
|
|
10
|
+
description: 'backend/orchestration/read-uninstallable-report.lambda.ts',
|
|
11
|
+
...props,
|
|
12
|
+
architecture: lambda.Architecture.ARM_64,
|
|
13
|
+
runtime: lambda.Runtime.NODEJS_22_X,
|
|
14
|
+
handler: 'index.handler',
|
|
15
|
+
code: lambda.Code.fromAsset(path.join(__dirname, '/read-uninstallable-report.lambda.bundle')),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ReadUninstallableReport = ReadUninstallableReport;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC11bmluc3RhbGxhYmxlLXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kL29yY2hlc3RyYXRpb24vcmVhZC11bmluc3RhbGxhYmxlLXJlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2RUFBNkU7QUFDN0UsNkJBQTZCO0FBQzdCLGlEQUFpRDtBQU1qRCxNQUFhLHVCQUF3QixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzFELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsMkRBQTJEO1lBQ3hFLEdBQUcsS0FBSztZQUNSLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNuQyxPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsMENBQTBDLENBQUMsQ0FBQztTQUM5RixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFYRCwwREFXQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5weCBwcm9qZW5cIi5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFkVW5pbnN0YWxsYWJsZVJlcG9ydFByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFkVW5pbnN0YWxsYWJsZVJlcG9ydCBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUmVhZFVuaW5zdGFsbGFibGVSZXBvcnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdiYWNrZW5kL29yY2hlc3RyYXRpb24vcmVhZC11bmluc3RhbGxhYmxlLXJlcG9ydC5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy9yZWFkLXVuaW5zdGFsbGFibGUtcmVwb3J0LmxhbWJkYS5idW5kbGUnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
|