@mikarinneoracle/oci-cdk-code-only-preview 0.0.35 → 0.0.36

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/README.md CHANGED
@@ -67,12 +67,15 @@ Only **`OCI_COMPARTMENT_ID`** (or `OCI_COMPARTMENT_OCID`) is required for deploy
67
67
  | `OCI_PUBLIC_SUBNET_ID`, `OCI_PUBLIC_SUBNET_OCID`, or `OCI_APIGATEWAY_SUBNET_ID` | Use existing public subnet for API Gateway | — |
68
68
  | **Terraform state** | | |
69
69
  | `OCI_STATE_BACKEND_TYPE` | Backend type | `local` |
70
+ | `OCI_STATE_LOCAL_PATH` | Local state file path, relative to the project unless absolute | `.ocdk/terraform.tfstate` |
70
71
  | `OCI_STATE_BUCKET` | Bucket name (for `oci` backend) | — |
71
72
  | `OCI_STATE_KEY` | State file key (for `oci` backend) | — |
72
73
  | `OCI_STATE_HTTP_ADDRESS` | State URL (for `http` backend; e.g. PAR URL) | — |
73
74
  | `OCI_STATE_HTTP_UPDATE_METHOD` | Update method (for `http` backend) | `PUT` |
74
75
  | `OCI_STATE_HTTP_LOCK_ADDRESS` | Lock endpoint URL | — |
75
76
  | `OCI_STATE_HTTP_UNLOCK_ADDRESS` | Unlock endpoint URL | — |
77
+
78
+ With the default local backend, OCDK stores Terraform state in your project at `.ocdk/terraform.tfstate` (which is gitignored), not under `node_modules`. Removing and reinstalling dependencies therefore preserves the state. Use an OCI or HTTP backend for shared or durable remote state.
76
79
  | **Log tail (.ocdk/tail-function-logs.js / tail:execution-log)** | | |
77
80
  | `OCI_COMPARTMENT_ID` or `OCI_COMPARTMENT_OCID` | Required for tail | — |
78
81
  | `OCI_LOG_GROUP_ID` | Log group OCID | terraform output / `write-log-config` |
@@ -18,6 +18,7 @@
18
18
  * - OCI_PROJECT_DIR (set by ocdk CLI to caller cwd; used to discover func.yaml and target/)
19
19
  * - OCI_STATE_BUCKET (for remote state)
20
20
  * - OCI_STATE_BACKEND_TYPE (oci|http|local)
21
+ * - OCI_STATE_LOCAL_PATH (local state path; default .ocdk/terraform.tfstate in the project directory)
21
22
  *
22
23
  * When OCI_PROJECT_DIR is set (e.g. running `npx ocdk deploy` from a Java project), config
23
24
  * discovers either target/*.jar or pom.xml+src/ (and optionally func.yaml name, version, cmd/handler).
@@ -26,6 +27,7 @@
26
27
  */
27
28
  export interface OciBackendConfig {
28
29
  type: 'oci' | 'http' | 'local';
30
+ path?: string;
29
31
  bucket?: string;
30
32
  key?: string;
31
33
  address?: string;
@@ -19,6 +19,7 @@
19
19
  * - OCI_PROJECT_DIR (set by ocdk CLI to caller cwd; used to discover func.yaml and target/)
20
20
  * - OCI_STATE_BUCKET (for remote state)
21
21
  * - OCI_STATE_BACKEND_TYPE (oci|http|local)
22
+ * - OCI_STATE_LOCAL_PATH (local state path; default .ocdk/terraform.tfstate in the project directory)
22
23
  *
23
24
  * When OCI_PROJECT_DIR is set (e.g. running `npx ocdk deploy` from a Java project), config
24
25
  * discovers either target/*.jar or pom.xml+src/ (and optionally func.yaml name, version, cmd/handler).
@@ -506,8 +507,16 @@ function discoverFromFuncYamlAndTarget() {
506
507
  };
507
508
  }
508
509
  const backendType = (process.env.OCI_STATE_BACKEND_TYPE || 'local');
510
+ const localStateProjectDir = path.resolve(process.env.OCI_PROJECT_DIR?.trim() || process.cwd());
511
+ const configuredLocalStatePath = process.env.OCI_STATE_LOCAL_PATH?.trim();
512
+ const localStatePath = configuredLocalStatePath
513
+ ? path.resolve(localStateProjectDir, configuredLocalStatePath)
514
+ : path.join(localStateProjectDir, '.ocdk', 'terraform.tfstate');
509
515
  const backendConfig = backendType === 'local'
510
- ? undefined
516
+ ? (() => {
517
+ fs.mkdirSync(path.dirname(localStatePath), { recursive: true });
518
+ return { type: 'local', path: localStatePath };
519
+ })()
511
520
  : backendType === 'oci'
512
521
  ? {
513
522
  type: 'oci',
@@ -19,6 +19,7 @@
19
19
  * - OCI_PROJECT_DIR (set by ocdk CLI to caller cwd; used to discover func.yaml and target/)
20
20
  * - OCI_STATE_BUCKET (for remote state)
21
21
  * - OCI_STATE_BACKEND_TYPE (oci|http|local)
22
+ * - OCI_STATE_LOCAL_PATH (local state path; default .ocdk/terraform.tfstate in the project directory)
22
23
  *
23
24
  * When OCI_PROJECT_DIR is set (e.g. running `npx ocdk deploy` from a Java project), config
24
25
  * discovers either target/*.jar or pom.xml+src/ (and optionally func.yaml name, version, cmd/handler).
@@ -34,6 +35,7 @@ import * as objectstorage from 'oci-objectstorage';
34
35
 
35
36
  export interface OciBackendConfig {
36
37
  type: 'oci' | 'http' | 'local';
38
+ path?: string;
37
39
  bucket?: string;
38
40
  key?: string;
39
41
  address?: string;
@@ -520,8 +522,17 @@ function discoverFromFuncYamlAndTarget(): {
520
522
 
521
523
  const backendType = (process.env.OCI_STATE_BACKEND_TYPE || 'local') as 'oci' | 'http' | 'local';
522
524
 
523
- const backendConfig: OciBackendConfig | undefined = backendType === 'local'
524
- ? undefined
525
+ const localStateProjectDir = path.resolve(process.env.OCI_PROJECT_DIR?.trim() || process.cwd());
526
+ const configuredLocalStatePath = process.env.OCI_STATE_LOCAL_PATH?.trim();
527
+ const localStatePath = configuredLocalStatePath
528
+ ? path.resolve(localStateProjectDir, configuredLocalStatePath)
529
+ : path.join(localStateProjectDir, '.ocdk', 'terraform.tfstate');
530
+
531
+ const backendConfig: OciBackendConfig = backendType === 'local'
532
+ ? (() => {
533
+ fs.mkdirSync(path.dirname(localStatePath), { recursive: true });
534
+ return { type: 'local', path: localStatePath };
535
+ })()
525
536
  : backendType === 'oci'
526
537
  ? {
527
538
  type: 'oci',
@@ -18,6 +18,7 @@
18
18
  * - OCI_PROJECT_DIR (set by ocdk CLI to caller cwd; used to discover func.yaml and target/)
19
19
  * - OCI_STATE_BUCKET (for remote state)
20
20
  * - OCI_STATE_BACKEND_TYPE (oci|http|local)
21
+ * - OCI_STATE_LOCAL_PATH (local state path; default .ocdk/terraform.tfstate in the project directory)
21
22
  *
22
23
  * When OCI_PROJECT_DIR is set (e.g. running `npx ocdk deploy` from a Java project), config
23
24
  * discovers either target/*.jar or pom.xml+src/ (and optionally func.yaml name, version, cmd/handler).
@@ -26,6 +27,7 @@
26
27
  */
27
28
  export interface OciBackendConfig {
28
29
  type: 'oci' | 'http' | 'local';
30
+ path?: string;
29
31
  bucket?: string;
30
32
  key?: string;
31
33
  address?: string;
@@ -19,6 +19,7 @@
19
19
  * - OCI_PROJECT_DIR (set by ocdk CLI to caller cwd; used to discover func.yaml and target/)
20
20
  * - OCI_STATE_BUCKET (for remote state)
21
21
  * - OCI_STATE_BACKEND_TYPE (oci|http|local)
22
+ * - OCI_STATE_LOCAL_PATH (local state path; default .ocdk/terraform.tfstate in the project directory)
22
23
  *
23
24
  * When OCI_PROJECT_DIR is set (e.g. running `npx ocdk deploy` from a Java project), config
24
25
  * discovers either target/*.jar or pom.xml+src/ (and optionally func.yaml name, version, cmd/handler).
@@ -506,8 +507,16 @@ function discoverFromFuncYamlAndTarget() {
506
507
  };
507
508
  }
508
509
  const backendType = (process.env.OCI_STATE_BACKEND_TYPE || 'local');
510
+ const localStateProjectDir = path.resolve(process.env.OCI_PROJECT_DIR?.trim() || process.cwd());
511
+ const configuredLocalStatePath = process.env.OCI_STATE_LOCAL_PATH?.trim();
512
+ const localStatePath = configuredLocalStatePath
513
+ ? path.resolve(localStateProjectDir, configuredLocalStatePath)
514
+ : path.join(localStateProjectDir, '.ocdk', 'terraform.tfstate');
509
515
  const backendConfig = backendType === 'local'
510
- ? undefined
516
+ ? (() => {
517
+ fs.mkdirSync(path.dirname(localStatePath), { recursive: true });
518
+ return { type: 'local', path: localStatePath };
519
+ })()
511
520
  : backendType === 'oci'
512
521
  ? {
513
522
  type: 'oci',
@@ -19,6 +19,7 @@
19
19
  * - OCI_PROJECT_DIR (set by ocdk CLI to caller cwd; used to discover func.yaml and target/)
20
20
  * - OCI_STATE_BUCKET (for remote state)
21
21
  * - OCI_STATE_BACKEND_TYPE (oci|http|local)
22
+ * - OCI_STATE_LOCAL_PATH (local state path; default .ocdk/terraform.tfstate in the project directory)
22
23
  *
23
24
  * When OCI_PROJECT_DIR is set (e.g. running `npx ocdk deploy` from a Java project), config
24
25
  * discovers either target/*.jar or pom.xml+src/ (and optionally func.yaml name, version, cmd/handler).
@@ -34,6 +35,7 @@ import * as objectstorage from 'oci-objectstorage';
34
35
 
35
36
  export interface OciBackendConfig {
36
37
  type: 'oci' | 'http' | 'local';
38
+ path?: string;
37
39
  bucket?: string;
38
40
  key?: string;
39
41
  address?: string;
@@ -520,8 +522,17 @@ function discoverFromFuncYamlAndTarget(): {
520
522
 
521
523
  const backendType = (process.env.OCI_STATE_BACKEND_TYPE || 'local') as 'oci' | 'http' | 'local';
522
524
 
523
- const backendConfig: OciBackendConfig | undefined = backendType === 'local'
524
- ? undefined
525
+ const localStateProjectDir = path.resolve(process.env.OCI_PROJECT_DIR?.trim() || process.cwd());
526
+ const configuredLocalStatePath = process.env.OCI_STATE_LOCAL_PATH?.trim();
527
+ const localStatePath = configuredLocalStatePath
528
+ ? path.resolve(localStateProjectDir, configuredLocalStatePath)
529
+ : path.join(localStateProjectDir, '.ocdk', 'terraform.tfstate');
530
+
531
+ const backendConfig: OciBackendConfig = backendType === 'local'
532
+ ? (() => {
533
+ fs.mkdirSync(path.dirname(localStatePath), { recursive: true });
534
+ return { type: 'local', path: localStatePath };
535
+ })()
525
536
  : backendType === 'oci'
526
537
  ? {
527
538
  type: 'oci',
@@ -121,9 +121,14 @@ const GRAALVM_POM_BUILD_BLOCK = ` <build>
121
121
  class OciStack extends cdktf_1.TerraformStack {
122
122
  constructor(scope, id, config) {
123
123
  super(scope, id);
124
- // Configure Terraform backend (if not local)
125
- if (config.backend && config.backend.type !== 'local') {
126
- if (config.backend.type === 'oci') {
124
+ // Keep local state in the caller's project, never under this npm package.
125
+ if (config.backend) {
126
+ if (config.backend.type === 'local') {
127
+ this.addOverride('terraform.backend', {
128
+ local: { path: config.backend.path },
129
+ });
130
+ }
131
+ else if (config.backend.type === 'oci') {
127
132
  // OCI native backend
128
133
  this.addOverride('terraform.backend', {
129
134
  oci: {
@@ -551,4 +556,4 @@ tail-function-logs.js
551
556
  }
552
557
  }
553
558
  exports.OciStack = OciStack;
554
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vb2NpLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlDQUF3RDtBQUN4RCw2REFBNkQ7QUFDN0QseUdBQW9HO0FBQ3BHLDZEQUF5RDtBQUN6RCxtRUFBK0Q7QUFDL0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUNoRix5RkFBbUY7QUFDbkYsNkVBQXdFO0FBQ3hFLHVGQUFrRjtBQUNsRixpRkFBNkU7QUFDN0UsdUZBQW1GO0FBQ25GLHVGQUFtRjtBQUNuRixpRkFBNkU7QUFDN0UscUdBQStGO0FBQy9GLCtFQUEwRTtBQUMxRSxtRUFBK0Q7QUFDL0QsMkVBQXVFO0FBQ3ZFLHFEQUFxRjtBQUNyRix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLE1BQU0sdUJBQXVCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJCL0IsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQUc7Ozs7Ozs7O0VBUTlCLENBQUM7QUFFSCxNQUFNLHVCQUF1QixHQUFHOzs7OztDQUsvQixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CL0IsQ0FBQztBQTBDRixNQUFhLFFBQVMsU0FBUSxzQkFBYztJQUMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN0RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNsQyxxQkFBcUI7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1C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RUFBRSxXQUFXLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pILElBQUksdUJBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBQzdILENBQUM7UUFFRCx5SEFBeUg7UUFDekgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNuRCxNQUFNLEVBQUUsWUFBWTtZQUNwQiwrRUFBK0U7WUFDL0UsT0FBTyxFQUFFLG9CQUFvQjtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEvYkQsNEJBK2JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjaywgVGVycmFmb3JtT3V0cHV0IH0gZnJvbSAnY2RrdGYnO1xuaW1wb3J0IHsgT2NpUHJvdmlkZXIgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvcHJvdmlkZXInO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcnRpZmFjdHMtY29udGFpbmVyLXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQ29yZVZjbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXZjbic7XG5pbXBvcnQgeyBDb3JlU3VibmV0IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtc3VibmV0JztcbmltcG9ydCB7IENvcmVTZWN1cml0eUxpc3QgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1zZWN1cml0eS1saXN0JztcbmltcG9ydCB7IENvcmVTZXJ2aWNlR2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXNlcnZpY2UtZ2F0ZXdheSc7XG5pbXBvcnQgeyBEYXRhT2NpQ29yZVNlcnZpY2VzIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2RhdGEtb2NpLWNvcmUtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZVJvdXRlVGFibGUgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1yb3V0ZS10YWJsZSc7XG5pbXBvcnQgeyBDb3JlSW50ZXJuZXRHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtaW50ZXJuZXQtZ2F0ZXdheSc7XG5pbXBvcnQgeyBBcGlnYXRld2F5R2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcGlnYXRld2F5LWdhdGV3YXknO1xuaW1wb3J0IHsgQXBpZ2F0ZXdheURlcGxveW1lbnQgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvYXBpZ2F0ZXdheS1kZXBsb3ltZW50JztcbmltcG9ydCB7IEZ1bmN0aW9uc0FwcGxpY2F0aW9uIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2Z1bmN0aW9ucy1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBGdW5jdGlvbnNGdW5jdGlvbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9mdW5jdGlvbnMtZnVuY3Rpb24nO1xuaW1wb3J0IHsgRGF0YU9jaUZ1bmN0aW9uc0Z1bmN0aW9ucyB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9kYXRhLW9jaS1mdW5jdGlvbnMtZnVuY3Rpb25zJztcbmltcG9ydCB7IExvZ2dpbmdMb2dHcm91cCB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9sb2dnaW5nLWxvZy1ncm91cCc7XG5pbXBvcnQgeyBMb2dnaW5nTG9nIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2xvZ2dpbmctbG9nJztcbmltcG9ydCB7IElkZW50aXR5UG9saWN5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2lkZW50aXR5LXBvbGljeSc7XG5pbXBvcnQgeyBPY2lCYWNrZW5kQ29uZmlnLCBvY2lySG9zdEtleSwgZ2V0T2NpSW1hZ2VVcmwgfSBmcm9tICcuLi9jb25maWcvb2NpLWNvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5jb25zdCBHUkFBTFZNX0pBVkFfRE9DS0VSRklMRSA9IGBGUk9NIGRvY2tlci5pby9mbnByb2plY3QvZm4tamF2YS1mZGstYnVpbGQ6amRrMTctMS4wLWxhdGVzdCBhcyBidWlsZC1zdGFnZVxuV09SS0RJUiAvZnVuY3Rpb25cbkVOViBNQVZFTl9PUFRTIC1EaHR0cC5wcm94eUhvc3Q9IC1EaHR0cC5wcm94eVBvcnQ9IC1EaHR0cHMucHJveHlIb3N0PSAtRGh0dHBzLnByb3h5UG9ydD0gLURodHRwLm5vblByb3h5SG9zdHM9IC1EbWF2ZW4ucmVwby5sb2NhbD0vdXNyL3NoYXJlL21hdmVuL3JlZi9yZXBvc2l0b3J5XG5BREQgcG9tLnhtbCAvZnVuY3Rpb24vcG9tLnhtbFxuUlVOIFtcIm12blwiLCBcInBhY2thZ2VcIiwgXCJkZXBlbmRlbmN5OmNvcHktZGVwZW5kZW5jaWVzXCIsIFwiLURpbmNsdWRlU2NvcGU9cnVudGltZVwiLCBcIi1Ec2tpcFRlc3RzPXRydWVcIiwgXCItRG1kZXAucHJlcGVuZEdyb3VwSWQ9dHJ1ZVwiLCBcIi1Eb3V0cHV0RGlyZWN0b3J5PXRhcmdldFwiLCBcIi0tZmFpbC1uZXZlclwiXVxuQUREIHNyYyAvZnVuY3Rpb24vc3JjXG5SVU4gW1wibXZuXCIsIFwicGFja2FnZVwiXVxuXG5GUk9NIGNvbnRhaW5lci1yZWdpc3RyeS5vcmFjbGUuY29tL2dyYWFsdm0vbmF0aXZlLWltYWdlOjIzLW9sOCBBUyBuYXRpdmVcbldPUktESVIgL2FwcFxuQ09QWSAtLWZyb209YnVpbGQtc3RhZ2UgL2Z1bmN0aW9uL3RhcmdldCAuXG5BREQgcmVmbGVjdGlvbi5qc29uIC5cblxuUlVOIG5hdGl2ZS1pbWFnZSBcXFxcXG4gICAgIC1IOlJlZmxlY3Rpb25Db25maWd1cmF0aW9uRmlsZXM9L2FwcC9yZWZsZWN0aW9uLmpzb24gXFxcXFxuICAgICAtT2IgXFxcXFxuICAgICAtSDpOYW1lPUhlbGxvIFxcXFxcbiAgICAgLWNwIFwiL2FwcC9oZWxsby0xLjAuMC5qYXI6L2FwcC8qXCIgIFxcXFxcbiAgICAgICAgY29tLmZucHJvamVjdC5mbi5ydW50aW1lLkVudHJ5UG9pbnRcblxuRlJPTSBkb2NrZXIuaW8vZm5wcm9qZWN0L2ZuLWphdmEtZmRrOmpyZTE3LWxhdGVzdCBhcyBmZGtcblxuRlJPTSBjb250YWluZXItcmVnaXN0cnkub3JhY2xlLmNvbS9vcy9vcmFjbGVsaW51eDo4LXNsaW1cbkNPUFkgLS1mcm9tPW5hdGl2ZSAvYXBwL0hlbGxvIC5cbkNPUFkgLS1mcm9tPWZkayAvZnVuY3Rpb24vcnVudGltZS8qIC4vXG5FTlRSWVBPSU5UIFsgXCIuL0hlbGxvXCIgXVxuQ01EIFsgXCJjb20uZXhhbXBsZS5mbi5IZWxsb0Z1bmN0aW9uOjpoYW5kbGVSZXF1ZXN0XCIsIFwiLURqYXZhLmxpYnJhcnkucGF0aD0vbGliXCJdXG5gO1xuXG5jb25zdCBHUkFBTFZNX1JFRkxFQ1RJT05fSlNPTiA9IGBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiY29tLmV4YW1wbGUuZm4uSGVsbG9GdW5jdGlvblwiLFxuICAgICAgXCJhbGxEZWNsYXJlZE1ldGhvZHNcIjogdHJ1ZSxcbiAgICAgIFwibWV0aG9kc1wiOiBbXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiPGluaXQ+XCIsIFwicGFyYW1ldGVyVHlwZXNcIjogW10gfVxuICAgICAgXVxuICAgIH1cbl1gO1xuXG5jb25zdCBHUkFBTFZNX1BPTV9SVU5USU1FX0RFUCA9IGAgICAgICAgIDxkZXBlbmRlbmN5PlxuICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmZucHJvamVjdC5mbjwvZ3JvdXBJZD5cbiAgICAgICAgICAgIDxhcnRpZmFjdElkPnJ1bnRpbWU8L2FydGlmYWN0SWQ+XG4gICAgICAgICAgICA8dmVyc2lvbj5cXCR7ZmRrLnZlcnNpb259PC92ZXJzaW9uPlxuICAgICAgICA8L2RlcGVuZGVuY3k+XG5gO1xuXG5jb25zdCBHUkFBTFZNX1BPTV9CVUlMRF9CTE9DSyA9IGAgICAgPGJ1aWxkPlxuICAgICAgICA8cGx1Z2lucz5cbiAgICAgICAgICAgIDxwbHVnaW4+XG4gICAgICAgICAgICAgICAgPCEtLSBDb3B5IGRlcGVuZGVuY2llcyAtLT5cbiAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD5cbiAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5pbnN0YWxsPC9waGFzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jb3B5LWRlcGVuZGVuY2llczwvZ29hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PlxcJHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vbGliPC9vdXRwdXREaXJlY3Rvcnk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPlxuICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz5cbiAgICAgICAgICAgIDwvcGx1Z2luPlxuICAgICAgICA8L3BsdWdpbnM+XG4gICAgPC9idWlsZD5cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2NpU3RhY2tDb25maWcge1xuICBjb21wYXJ0bWVudElkOiBzdHJpbmc7XG4gIG9jaXJDb21wYXJ0bWVudElkPzogc3RyaW5nO1xuICB0ZW5hbmN5SWQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBjcmVhdGUgSUFNIHBvbGljeSBzbyBBUEkgR2F0ZXdheSBjYW4gaW52b2tlIEZ1bmN0aW9ucy4gKi9cbiAgY3JlYXRlQXBpZ3dQb2xpY3k/OiBib29sZWFuO1xuICAvKiogT0NJIEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lIChlLmcuIG15LWFwcCkuIFNldCB2aWEgT0NJX0ZVTkNUSU9OX0FQUF9OQU1FIG9yIHBhc3MgaW4gY29uZmlnLiAqL1xuICBmdW5jdGlvbkFwcE5hbWU6IHN0cmluZztcbiAgLyoqIE9DSSBGdW5jdGlvbiBuYW1lIChlLmcuIG15LWZ1bmN0aW9uKS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fTkFNRSBvciBwYXNzIGluIGNvbmZpZy4gKi9cbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBwYXRoIHRvIEpBUiAob3IgRG9ja2VyZmlsZSBjb250ZXh0KSB0byBidWlsZCBhbmQgZGVwbG95IGFzIHRoZSBmdW5jdGlvbiBpbWFnZS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEguIEVtcHR5ID0gbm8gZnVuY3Rpb24vaW1hZ2UgYnVpbGQuICovXG4gIGZ1bmN0aW9uSmFyUGF0aD86IHN0cmluZztcbiAgLyoqIERpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiBXaGVuIHNldCB3aXRoIGZ1bmN0aW9uTmFtZSwgY3JlYXRlcyBWQ04sIEZ1bmN0aW9uLCBBUEkgR2F0ZXdheS4gKi9cbiAgZG9ja2VyQ29udGV4dFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSB0YWcgZm9yIE9DSVIgKGZyb20gZnVuYy55YW1sIHZlcnNpb24gb3IgT0NJX0lNQUdFX1RBRzsgZGVmYXVsdCAnbGF0ZXN0JykuICovXG4gIGltYWdlVGFnPzogc3RyaW5nO1xuICAvKiogSmF2YSBGREsgQ01EIGhhbmRsZXIgKGZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9IQU5ETEVSKS4gKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgb2NpclJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuICAvKiogQVBJIEdhdGV3YXkgZGVwbG95bWVudCBwYXRoIHByZWZpeC4gRGVmYXVsdCAnLycuICovXG4gIGFwaUd3UGF0aFByZWZpeD86IHN0cmluZztcbiAgLyoqIEFQSSBHYXRld2F5IHJvdXRlIHBhdGguIERlZmF1bHQgJy97cGF0aCp9Jy4gKi9cbiAgYXBpR3dSb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBBUEkgR2F0ZXdheSByb3V0ZSBtZXRob2RzLiBEZWZhdWx0IFsnR0VUJywgJ1BPU1QnLCAnT1BUSU9OUyddLiAqL1xuICBhcGlHd01ldGhvZHM/OiBzdHJpbmdbXTtcbiAgLyoqIEZ1bmN0aW9uIG1lbW9yeSBpbiBNQiAoZS5nLiAnMjU2JykuIEZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9NRU1PUllfTUIuICovXG4gIGZ1bmN0aW9uTWVtb3J5TWI/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHMuIEZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMuICovXG4gIGZ1bmN0aW9uVGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKiBGdW5jdGlvbiBjb25maWcvZW52IGtleS12YWx1ZS4gRnJvbSBmdW5jLnlhbWwgY29uZmlnIG9yIE9DSV9GVU5DVElPTl9DT05GSUcuICovXG4gIGZ1bmN0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT04gKHJvdXRlcykuIERlZmF1bHQgb2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uIGluIHByb2plY3Qgcm9vdC4gKi9cbiAgYXBpR3dEZXBsb3ltZW50SnNvblBhdGg/OiBzdHJpbmc7XG4gIC8qKiBSdW50aW1lIGZyb20gZnVuYy55YW1sIChlLmcuICdqYXZhJywgJ3B5dGhvbicpOyBjb250cm9scyBEb2NrZXJmaWxlIGdlbmVyYXRpb24uICovXG4gIHJ1bnRpbWU/OiBzdHJpbmc7XG4gIGJhY2tlbmQ/OiBPY2lCYWNrZW5kQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgT2NpU3RhY2sgZXh0ZW5kcyBUZXJyYWZvcm1TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogT2NpU3RhY2tDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQ29uZmlndXJlIFRlcnJhZm9ybSBiYWNrZW5kIChpZiBub3QgbG9jYWwpXG4gICAgaWYgKGNvbmZpZy5iYWNrZW5kICYmIGNvbmZpZy5iYWNrZW5kLnR5cGUgIT09ICdsb2NhbCcpIHtcbiAgICAgIGlmIChjb25maWcuYmFja2VuZC50eXBlID09PSAnb2NpJykge1xuICAgICAgICAvLyBPQ0kgbmF0aXZlIGJhY2tlbmRcbiAgICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLmJhY2tlbmQnLCB7XG4gICAgICAgICAgb2NpOiB7XG4gICAgICAgICAgICBidWNrZXQ6IGNvbmZpZy5iYWNrZW5kLmJ1Y2tldCxcbiAgICAgICAgICAgIG5hbWVzcGFjZTogY29uZmlnLm5hbWVzcGFjZSxcbiAgICAgICAgICAgIGtleTogY29uZmlnLmJhY2tlbmQua2V5IHx8IGAke2lkfS90ZXJyYWZvcm0udGZzdGF0ZWAsXG4gICAgICAgICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5iYWNrZW5kLnR5cGUgPT09ICdodHRwJykge1xuICAgICAgICAvLyBIVFRQIGJhY2tlbmQgKGZvciBPQ0kgT2JqZWN0IFN0b3JhZ2UgdmlhIFJFU1QgQVBJKVxuICAgICAgICBjb25zdCBodHRwQmFja2VuZDogYW55ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGNvbmZpZy5iYWNrZW5kLmFkZHJlc3MsXG4gICAgICAgICAgdXBkYXRlX21ldGhvZDogY29uZmlnLmJhY2tlbmQudXBkYXRlTWV0aG9kIHx8ICdQVVQnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29uZmlnLmJhY2tlbmQubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgICBodHRwQmFja2VuZC5sb2NrX2FkZHJlc3MgPSBjb25maWcuYmFja2VuZC5sb2NrQWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmJhY2tlbmQudW5sb2NrQWRkcmVzcykge1xuICAgICAgICAgIGh0dHBCYWNrZW5kLnVubG9ja19hZGRyZXNzID0gY29uZmlnLmJhY2tlbmQudW5sb2NrQWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0uYmFja2VuZCcsIHtcbiAgICAgICAgICBodHRwOiBodHRwQmFja2VuZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT0NJIFByb3ZpZGVyXG4gICAgbmV3IE9jaVByb3ZpZGVyKHRoaXMsICdvY2knLCB7XG4gICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICB0ZW5hbmN5T2NpZDogY29uZmlnLnRlbmFuY3lJZCxcbiAgICB9KTtcblxuICAgIC8vIE9DSV9TVEFDS19BQ1RJT046IFwiZnVuY3Rpb24tb25seVwiIChvciBsZWdhY3kgXCJmdW5jdGlvblwiKSA9PiBubyBBUEkgR2F0ZXdheTsgXCJmdWxsLXN0YWNrXCIgb3IgdW5zZXQgPT4gZnVsbCBzdGFjayBpbmNsdWRpbmcgQVBJIEdhdGV3YXkuXG4gICAgY29uc3Qgc3RhY2tBY3Rpb25SYXcgPSAocHJvY2Vzcy5lbnYuT0NJX1NUQUNLX0FDVElPTiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY29kZU9ubHkgPSBwcm9jZXNzLmVudi5PQ0lfQ09ERV9PTkxZID09PSAnMScgfHwgcHJvY2Vzcy5lbnZbJ2NvZGUtb25seSddID09PSAnMSc7XG4gICAgLy8gQ29kZS1vbmx5IGZ1bmN0aW9ucyBhcmUgY3JlYXRlZCBieSBPQ0kgQ0xJLiBXaGVuIHRoZSBmdWxsIHN0YWNrIGlzIHJlcXVlc3RlZCxcbiAgICAvLyB0aGVpciBPQ0lEIGlzIGxvb2tlZCB1cCBieSBUZXJyYWZvcm0gYmVmb3JlIHdpcmluZyB0aGUgQVBJIEdhdGV3YXkgcm91dGUuXG4gICAgY29uc3Qgc3RhY2tBY3Rpb24gPSBzdGFja0FjdGlvblJhdyA9PT0gJ2Z1bmN0aW9uLW9ubHknIHx8IHN0YWNrQWN0aW9uUmF3ID09PSAnZnVuY3Rpb24nID8gJ2Z1bmN0aW9uLW9ubHknIDogJ2Z1bGwtc3RhY2snO1xuXG4gICAgLy8gT0NJUiBDb250YWluZXIgUmVwb3NpdG9yeSAocm9vdCBjb21wYXJ0bWVudCBhbGxvd2VkIGlmIGV4cGxpY2l0bHkgc2V0KS5cbiAgICBjb25zdCBvY2lyQ29tcGFydG1lbnRJZCA9IGNvbmZpZy5vY2lyQ29tcGFydG1lbnRJZCB8fCBjb25maWcuY29tcGFydG1lbnRJZDtcbiAgICBjb25zdCBvY2lyUmVwb05hbWUgPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gICAgY29uc3Qgb2NpclJlcG9zaXRvcnkgPSBjb2RlT25seSA/IHVuZGVmaW5lZCA6IG5ldyBBcnRpZmFjdHNDb250YWluZXJSZXBvc2l0b3J5KHRoaXMsICdPY2lyUmVwb3NpdG9yeScsIHtcbiAgICAgIGNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkLFxuICAgICAgZGlzcGxheU5hbWU6IG9jaXJSZXBvTmFtZSxcbiAgICAgIGlzUHVibGljOiBmYWxzZSxcbiAgICAgIGlzSW1tdXRhYmxlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvY2tlckNvbnRleHRQYXRoID0gKGNvbmZpZy5kb2NrZXJDb250ZXh0UGF0aCB8fCBjb25maWcuZnVuY3Rpb25KYXJQYXRoKT8udHJpbSgpO1xuICAgIGNvbnN0IGNyZWF0ZUZ1bGxTdGFjayA9IGNvbmZpZy5mdW5jdGlvbk5hbWUgJiYgKGRvY2tlckNvbnRleHRQYXRoIHx8IGNvZGVPbmx5KTtcblxuICAgIGlmIChjcmVhdGVGdWxsU3RhY2spIHtcbiAgICAgIGlmICghY29kZU9ubHkgJiYgb2NpckNvbXBhcnRtZW50SWQuaW5jbHVkZXMoJ3Jvb3QnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Z1bGwgc3RhY2sgKEZ1bmN0aW9uICsgQVBJIEdhdGV3YXkpIHJlcXVpcmVzIGEgbm9uLXJvb3QgY29tcGFydG1lbnQgZm9yIE9DSVIuIFNldCBPQ0lfT0NJUl9DT01QQVJUTUVOVF9JRCB0byB5b3VyIGhvbWUgY29tcGFydG1lbnQgT0NJRC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gY29uZmlnLmZ1bmN0aW9uQXBwTmFtZSB8fCBjb25maWcuZnVuY3Rpb25OYW1lITtcbiAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFwcE5hbWU7XG5cbiAgICAgIGNvbnN0IHByaXZhdGVTdWJuZXRJZEZyb21FbnYgPSAocHJvY2Vzcy5lbnYuT0NJX1BSSVZBVEVfU1VCTkVUX0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9QUklWQVRFX1NVQk5FVF9PQ0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9TVUJORVRfSUQgfHwgJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHB1YmxpY1N1Ym5ldElkRnJvbUVudiA9IChwcm9jZXNzLmVudi5PQ0lfUFVCTElDX1NVQk5FVF9JRCB8fCBwcm9jZXNzLmVudi5PQ0lfUFVCTElDX1NVQk5FVF9PQ0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX1NVQk5FVF9JRCB8fCAnJykudHJpbSgpO1xuXG4gICAgICBsZXQgaW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBidWlsZEFuZFB1c2hJbWFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWNvZGVPbmx5KSB7XG4gICAgICBjb25zdCBmdW5jdGlvbkNvZGVQYXRoID0gcGF0aC5yZXNvbHZlKGRvY2tlckNvbnRleHRQYXRoISk7XG4gICAgICBjb25zdCBpbWFnZVRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgICAgIGNvbnN0IG9jaXJSZWdpc3RyeSA9IGAke29jaXJIb3N0S2V5KGNvbmZpZy5yZWdpb24pfS5vY2lyLmlvYDtcbiAgICAgIGltYWdlVXJsID0gZ2V0T2NpSW1hZ2VVcmwoY29uZmlnKTtcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMubnVsbCcsIHtcbiAgICAgICAgc291cmNlOiAnaGFzaGljb3JwL251bGwnLFxuICAgICAgICB2ZXJzaW9uOiAnfj4gMy4wJyxcbiAgICAgIH0pO1xuICAgICAgYnVpbGRBbmRQdXNoSW1hZ2VJZCA9ICdCdWlsZEFuZFB1c2hJbWFnZSc7XG4gICAgICB0aGlzLmFkZE92ZXJyaWRlKGByZXNvdXJjZS5udWxsX3Jlc291cmNlLiR7YnVpbGRBbmRQdXNoSW1hZ2VJZH0uZGVwZW5kc19vbmAsIFtcbiAgICAgICAgJ29jaV9hcnRpZmFjdHNfY29udGFpbmVyX3JlcG9zaXRvcnkuT2NpclJlcG9zaXRvcnknLFxuICAgICAgXSk7XG4gICAgICB0aGlzLmFkZE92ZXJyaWRlKGByZXNvdXJjZS5udWxsX3Jlc291cmNlLiR7YnVpbGRBbmRQdXNoSW1hZ2VJZH0udHJpZ2dlcnNgLCB7XG4gICAgICAgIHJlcG9fbmFtZTogb2NpclJlcG9OYW1lLFxuICAgICAgICBpbWFnZV91cmw6IGltYWdlVXJsLFxuICAgICAgICBpbWFnZV90YWc6IGltYWdlVGFnLFxuICAgICAgICBoYW5kbGVyOiBjb25maWcuaGFuZGxlciB8fCAnJyxcbiAgICAgICAgbmFtZXNwYWNlOiBjb25maWcubmFtZXNwYWNlLFxuICAgICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlZ2lvblAgPSBjb25maWcucmVnaW9uO1xuICAgICAgY29uc3QgbmFtZXNwYWNlUCA9IGNvbmZpZy5uYW1lc3BhY2U7XG4gICAgICBjb25zdCBvY2lyVXNlciA9IHByb2Nlc3MuZW52Lk9DSV9PQ0lSX1VTRVJOQU1FIHx8ICdBVVRPX0RFVEVDVCc7XG4gICAgICBjb25zdCBvY2lDbGlQYXRoID0gKHByb2Nlc3MuZW52Lk9DSV9DTElfUEFUSCB8fCAnb2NpJykudHJpbSgpIHx8ICdvY2knO1xuICAgICAgY29uc3Qgb2NpQ2xpQ29tbWFuZCA9IGAnJHtvY2lDbGlQYXRoLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfSdgO1xuICAgICAgY29uc3QgbG9naW5TY3JpcHQgPSBwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTlxuICAgICAgICA/IGBleHBvcnQgT0NJUl9BVVRIX1RPS0VOPVwiJHtwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTn1cIjsgT0NJUl9VU0VSPVwiJHtvY2lyVXNlcn1cIjsgWyBcIiRPQ0lSX1VTRVJcIiA9IFwiQVVUT19ERVRFQ1RcIiBdICYmIE9DSVJfVVNFUj1cIiR7bmFtZXNwYWNlUH0vdXNlclwiOyBlY2hvIFwiJE9DSVJfQVVUSF9UT0tFTlwiIHwgZG9ja2VyIGxvZ2luICR7b2NpclJlZ2lzdHJ5fSAtdSBcIiRPQ0lSX1VTRVJcIiAtLXBhc3N3b3JkLXN0ZGluIHx8IGV4aXQgMWBcbiAgICAgICAgOiBgJHtvY2lDbGlDb21tYW5kfSByYXctcmVxdWVzdCAtLXJlZ2lvbiAke3JlZ2lvblB9IC0taHR0cC1tZXRob2QgR0VUIC0tdGFyZ2V0LXVyaSBcImh0dHBzOi8vJHtvY2lyUmVnaXN0cnl9LzIwMTgwNDE5L2RvY2tlci90b2tlblwiIDI+L2Rldi9udWxsIHwgKGNvbW1hbmQgLXYganEgPi9kZXYvbnVsbCAmJiBqcSAtciAuZGF0YS50b2tlbiB8fCBncmVwIC1vICdcInRva2VuXCI6XCJbXlwiXSpcIicgfCBjdXQgLWQnXCInIC1mNCkgfCBkb2NrZXIgbG9naW4gLXUgQkVBUkVSX1RPS0VOIC0tcGFzc3dvcmQtc3RkaW4gJHtvY2lyUmVnaXN0cnl9IHx8IChlY2hvIFwiU2V0IE9DSV9BVVRIX1RPS0VOIG9yIGNvbmZpZ3VyZSBPQ0kgQ0xJXCIgPiYyOyBleGl0IDEpYDtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBjb25maWcuaGFuZGxlciB8fCAnY29tLmV4YW1wbGUuZm4uSGVsbG9GdW5jdGlvbjo6aGFuZGxlUmVxdWVzdCc7XG4gICAgICBjb25zdCBydW50aW1lID0gY29uZmlnLnJ1bnRpbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgZG9ja2VyZmlsZUNvbnRlbnQgPSAnJztcbiAgICAgIGlmIChydW50aW1lICYmIHJ1bnRpbWUuc3RhcnRzV2l0aCgncHl0aG9uJykpIHtcbiAgICAgICAgZG9ja2VyZmlsZUNvbnRlbnQgPSBgRlJPTSBkb2NrZXIuaW8vZm5wcm9qZWN0L3B5dGhvbjozLjEyLWRldiBhcyBidWlsZC1zdGFnZVxuV09SS0RJUiAvZnVuY3Rpb25cbkFERCByZXF1aXJlbWVudHMudHh0IC9mdW5jdGlvbi9cblJVTiBwaXAzIGluc3RhbGwgLS10YXJnZXQgL3B5dGhvbi8gLS1uby1jYWNoZSAtLW5vLWNhY2hlLWRpciAtciByZXF1aXJlbWVudHMudHh0ICYmXFxcblx0XHRcdCAgICBybSAtZnIgfi8uY2FjaGUvcGlwIC90bXAqIHJlcXVpcmVtZW50cy50eHQgZnVuYy55YW1sIERvY2tlcmZpbGUgLnZlbnYgJiZcXFxuXHRcdFx0ICAgIGNobW9kIC1SIG8rciAvcHl0aG9uXG5BREQgLiAvZnVuY3Rpb24vXG5SVU4gcm0gLWZyIC9mdW5jdGlvbi8ucGlwX2NhY2hlXG5GUk9NIGRvY2tlci5pby9mbnByb2plY3QvcHl0aG9uOjMuMTJcbldPUktESVIgL2Z1bmN0aW9uXG5DT1BZIC0tZnJvbT1idWlsZC1zdGFnZSAvcHl0aG9uIC9weXRob25cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9mdW5jdGlvbiAvZnVuY3Rpb25cblJVTiBjaG1vZCAtUiBvK3IgL2Z1bmN0aW9uXG5FTlYgUFlUSE9OUEFUSD0vZnVuY3Rpb246L3B5dGhvblxuRU5UUllQT0lOVCBbXCIvcHl0aG9uL2Jpbi9mZGtcIiwgXCIvZnVuY3Rpb24vZnVuYy5weVwiLCBcImhhbmRsZXJcIl1cbmA7XG4gICAgICB9IGVsc2UgaWYgKHJ1bnRpbWUgJiYgcnVudGltZS5zdGFydHNXaXRoKCdub2RlJykpIHtcbiAgICAgICAgZG9ja2VyZmlsZUNvbnRlbnQgPSBgRlJPTSBkb2NrZXIuaW8vZm5wcm9qZWN0L25vZGU6MjQtZGV2IGFzIGJ1aWxkLXN0YWdlXG5XT1JLRElSIC9mdW5jdGlvblxuQUREIHBhY2thZ2UuanNvbiAvZnVuY3Rpb24vXG5SVU4gbnBtIHBrZyBkZWxldGUgXCJkZXBlbmRlbmNpZXMuQG1pa2FyaW5uZW9yYWNsZS9vY2ktY2RrXCJcblJVTiBucG0gaW5zdGFsbCAgJiYgY2hvd24gLVIgJChpZCAtdSk6JChpZCAtZykgbm9kZV9tb2R1bGVzXG5GUk9NIGRvY2tlci5pby9mbnByb2plY3Qvbm9kZToyNFxuV09SS0RJUiAvZnVuY3Rpb25cbkFERCAuIC9mdW5jdGlvbi9cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9mdW5jdGlvbi9ub2RlX21vZHVsZXMvIC9mdW5jdGlvbi9ub2RlX21vZHVsZXMvXG5SVU4gY2htb2QgLVIgbytyIC9mdW5jdGlvblxuRU5UUllQT0lOVCBbXCJub2RlXCIsIFwiZnVuYy5qc1wiXVxuYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVzZUdyYWFsVm0gPSAocHJvY2Vzcy5lbnYuT0NJX1VTRV9HUkFBTFZNX0pBVkEgfHwgJycpLnRyaW0oKSA9PT0gJzEnO1xuICAgICAgICBpZiAodXNlR3JhYWxWbSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBVc2UgYmFrZWQtaW4gR3JhYWxWTSBEb2NrZXJmaWxlIHRlbXBsYXRlXG4gICAgICAgICAgICBkb2NrZXJmaWxlQ29udGVudCA9IEdSQUFMVk1fSkFWQV9ET0NLRVJGSUxFO1xuXG4gICAgICAgICAgICAvLyBFbnN1cmUgcmVmbGVjdGlvbi5qc29uIGV4aXN0cyBpbiBwcm9qZWN0IHJvb3RcbiAgICAgICAgICAgIGNvbnN0IHJlZmxlY3Rpb25UYXJnZXRQYXRoID0gcGF0aC5qb2luKGZ1bmN0aW9uQ29kZVBhdGgsICdyZWZsZWN0aW9uLmpzb24nKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhyZWZsZWN0aW9uVGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhyZWZsZWN0aW9uVGFyZ2V0UGF0aCwgR1JBQUxWTV9SRUZMRUNUSU9OX0pTT04sICd1dGY4Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVuc3VyZSBwb20ueG1sIGhhcyBydW50aW1lIGRlcGVuZGVuY3kgZm9yIEdyYWFsVk0gbmF0aXZlIGltYWdlXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0UG9tUGF0aCA9IHBhdGguam9pbihmdW5jdGlvbkNvZGVQYXRoLCAncG9tLnhtbCcpO1xuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocHJvamVjdFBvbVBhdGgpKSB7XG4gICAgICAgICAgICAgIGxldCBwb21Db250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHByb2plY3RQb21QYXRoLCAndXRmOCcpO1xuXG4gICAgICAgICAgICAgIGlmICghcG9tQ29udGVudC5pbmNsdWRlcygnPGFydGlmYWN0SWQ+cnVudGltZTwvYXJ0aWZhY3RJZD4nKSAmJiBwb21Db250ZW50LmluY2x1ZGVzKCc8L2RlcGVuZGVuY2llcz4nKSkge1xuICAgICAgICAgICAgICAgIHBvbUNvbnRlbnQgPSBwb21Db250ZW50LnJlcGxhY2UoJzwvZGVwZW5kZW5jaWVzPicsIGAke0dSQUFMVk1fUE9NX1JVTlRJTUVfREVQfSAgICA8L2RlcGVuZGVuY2llcz5gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHByb2plY3RQb21QYXRoLCBwb21Db250ZW50LCAndXRmOCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gSWdub3JlIGFuZCBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgSmF2YSBEb2NrZXJmaWxlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZG9ja2VyZmlsZUNvbnRlbnQpIHtcbiAgICAgICAgICBkb2NrZXJmaWxlQ29udGVudCA9IGBGUk9NIGRvY2tlci5pby9mbnByb2plY3QvZm4tamF2YS1mZGstYnVpbGQ6amRrMTctMS4xLjcgYXMgYnVpbGQtc3RhZ2VcbldPUktESVIgL2Z1bmN0aW9uXG5FTlYgTUFWRU5fT1BUUyAtRGh0dHAucHJveHlIb3N0PSAtRGh0dHAucHJveHlQb3J0PSAtRGh0dHBzLnByb3h5SG9zdD0gLURodHRwcy5wcm94eVBvcnQ9IC1EaHR0cC5ub25Qcm94eUhvc3RzPSAtRG1hdmVuLnJlcG8ubG9jYWw9L3Vzci9zaGFyZS9tYXZlbi9yZWYvcmVwb3NpdG9yeVxuQUREIHBvbS54bWwgL2Z1bmN0aW9uL3BvbS54bWxcblJVTiBbXCJtdm5cIiwgXCJwYWNrYWdlXCIsIFwiZGVwZW5kZW5jeTpjb3B5LWRlcGVuZGVuY2llc1wiLCBcIi1EaW5jbHVkZVNjb3BlPXJ1bnRpbWVcIiwgXCItRHNraXBUZXN0cz10cnVlXCIsIFwiLURtZGVwLnByZXBlbmRHcm91cElkPXRydWVcIiwgXCItRG91dHB1dERpcmVjdG9yeT10YXJnZXRcIiwgXCItLWZhaWwtbmV2ZXJcIl1cbkFERCBzcmMgL2Z1bmN0aW9uL3NyY1xuUlVOIFtcIm12blwiLCBcInBhY2thZ2VcIl1cbkZST00gZG9ja2VyLmlvL2ZucHJvamVjdC9mbi1qYXZhLWZkazpqcmUxNy0xLjEuN1xuV09SS0RJUiAvZnVuY3Rpb25cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9mdW5jdGlvbi90YXJnZXQvKi5qYXIgL2Z1bmN0aW9uL2FwcC9cbkNNRCBbXCIke2hhbmRsZXIucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiXWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY2tlcmlnbm9yZUNvbnRlbnQgPSBgbm9kZV9tb2R1bGVzXG4uZ2l0XG4qLm1kXG4uZW52XG4uaWRlYVxuLnZzY29kZVxuKi5sb2dcbm9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvblxuLm9jZGstb3V0cHV0cy5qc29uXG50YWlsLWZ1bmN0aW9uLWxvZ3MuanNcbmA7XG4gICAgICBjb25zdCBkb2NrZXJmaWxlQjY0ID0gQnVmZmVyLmZyb20oZG9ja2VyZmlsZUNvbnRlbnQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgY29uc3QgZG9ja2VyaWdub3JlQjY0ID0gQnVmZmVyLmZyb20oZG9ja2VyaWdub3JlQ29udGVudCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAvLyBHZW5lcmF0ZSBEb2NrZXJmaWxlIGFuZCAuZG9ja2VyaWdub3JlIGluIGxvY2FsLWV4ZWMgb25seSBpZiBtaXNzaW5nOyBpZiB0aGV5IGV4aXN0IHVzZSBhcy1pcy4gVGhlbiBsb2dpbiwgYnVpbGQsIHB1c2guXG4gICAgICB0aGlzLmFkZE92ZXJyaWRlKGByZXNvdXJjZS5udWxsX3Jlc291cmNlLiR7YnVpbGRBbmRQdXNoSW1hZ2VJZH0ucHJvdmlzaW9uZXJgLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAnbG9jYWwtZXhlYyc6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdjZCBcIiRGVU5DVElPTl9DT0RFX1BBVEhcIiAmJiAoWyAtZiBEb2NrZXJmaWxlIF0gfHwgKGVjaG8gXCIkRE9DS0VSRklMRV9CNjRcIiB8IGJhc2U2NCAtZCA+IERvY2tlcmZpbGUpKSAmJiAoWyAtZiAuZG9ja2VyaWdub3JlIF0gfHwgKGVjaG8gXCIkRE9DS0VSSUdOT1JFX0I2NFwiIHwgYmFzZTY0IC1kID4gLmRvY2tlcmlnbm9yZSkpJyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgIEZVTkNUSU9OX0NPREVfUEFUSDogZnVuY3Rpb25Db2RlUGF0aCxcbiAgICAgICAgICAgICAgRE9DS0VSRklMRV9CNjQ6IGRvY2tlcmZpbGVCNjQsXG4gICAgICAgICAgICAgIERPQ0tFUklHTk9SRV9CNjQ6IGRvY2tlcmlnbm9yZUI2NCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyAnbG9jYWwtZXhlYyc6IHsgY29tbWFuZDogbG9naW5TY3JpcHQsIG9uX2ZhaWx1cmU6ICdjb250aW51ZScgfSB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBgY2QgXCIke2Z1bmN0aW9uQ29kZVBhdGgucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiICYmIGRvY2tlciBidWlsZCAtLXBsYXRmb3JtIGxpbnV4L2FtZDY0IC10ICR7aW1hZ2VVcmx9IC5gIH0gfSxcbiAgICAgICAgeyAnbG9jYWwtZXhlYyc6IHsgY29tbWFuZDogYGRvY2tlciBwdXNoICR7aW1hZ2VVcmx9YCB9IH0sXG4gICAgICBdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHB1YmxpY1N1Ym5ldDogQ29yZVN1Ym5ldCB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBwcml2YXRlU3VibmV0OiBDb3JlU3VibmV0IHwgdW5kZWZpbmVkO1xuICAgICAgLy8gRnVuY3Rpb24tb25seTogY3JlYXRlIFZDTiBvbmx5IHdoZW4gd2UgbmVlZCB0byBjcmVhdGUgdGhlIHByaXZhdGUgc3VibmV0LiBGdWxsLXN0YWNrOiBjcmVhdGUgd2hlbiB3ZSBuZWVkIGVpdGhlciBzdWJuZXQuXG4gICAgICBjb25zdCBjcmVhdGVOZXR3b3JraW5nID1cbiAgICAgICAgc3RhY2tBY3Rpb24gPT09ICdmdW5jdGlvbi1vbmx5J1xuICAgICAgICAgID8gIXByaXZhdGVTdWJuZXRJZEZyb21FbnZcbiAgICAgICAgICA6ICFwcml2YXRlU3VibmV0SWRGcm9tRW52IHx8ICFwdWJsaWNTdWJuZXRJZEZyb21FbnY7XG4gICAgICBpZiAoY3JlYXRlTmV0d29ya2luZykge1xuICAgICAgICBjb25zdCB2Y24gPSBuZXcgQ29yZVZjbih0aGlzLCAnVmNuJywge1xuICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXZjbmAsXG4gICAgICAgICAgY2lkckJsb2NrczogWycxMC4wLjAuMC8xNiddLFxuICAgICAgICAgIGRuc0xhYmVsOiAnYXBwZm4nLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN0YWNrQWN0aW9uID09PSAnZnVsbC1zdGFjaycgJiYgIXB1YmxpY1N1Ym5ldElkRnJvbUVudikge1xuICAgICAgICAgIHB1YmxpY1N1Ym5ldCA9IG5ldyBDb3JlU3VibmV0KHRoaXMsICdQdWJsaWNTdWJuZXQnLCB7XG4gICAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWNgLFxuICAgICAgICAgICAgY2lkckJsb2NrOiAnMTAuMC4xLjAvMjQnLFxuICAgICAgICAgICAgZG5zTGFiZWw6ICdwdWJsaWMnLFxuICAgICAgICAgICAgcHJvaGliaXRQdWJsaWNJcE9uVm5pYzogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcHVibGljU2wgPSBuZXcgQ29yZVNlY3VyaXR5TGlzdCh0aGlzLCAnUHVibGljU2VjdXJpdHlMaXN0Jywge1xuICAgICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHVibGljLXNsYCxcbiAgICAgICAgICAgIGluZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbXG4gICAgICAgICAgICAgIHsgcHJvdG9jb2w6ICc2Jywgc291cmNlOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdIVFRQJywgdGNwT3B0aW9uczogeyBtaW46IDgwLCBtYXg6IDgwIH0gfSxcbiAgICAgICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0hUVFBTJywgdGNwT3B0aW9uczogeyBtaW46IDQ0MywgbWF4OiA0NDMgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGVncmVzc1NlY3VyaXR5UnVsZXM6IFt7IHByb3RvY29sOiAnYWxsJywgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0FsbCcgfV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHVibGljU3VibmV0LmFkZE92ZXJyaWRlKCdzZWN1cml0eV9saXN0X2lkcycsIFtwdWJsaWNTbC5pZF0pO1xuICAgICAgICAgIGNvbnN0IGlndyA9IG5ldyBDb3JlSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJbnRlcm5ldEdhdGV3YXknLCB7XG4gICAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1pZ3dgLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBwdWJSdCA9IG5ldyBDb3JlUm91dGVUYWJsZSh0aGlzLCAnUHVibGljUm91dGVUYWJsZScsIHtcbiAgICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXB1YmxpYy1ydGAsXG4gICAgICAgICAgICByb3V0ZVJ1bGVzOiBbXG4gICAgICAgICAgICAgIHsgbmV0d29ya0VudGl0eUlkOiBpZ3cuaWQsIGRlc3RpbmF0aW9uOiAnMC4wLjAuMC8wJywgZGVzdGluYXRpb25UeXBlOiAnQ0lEUl9CTE9DSycsIGRlc2NyaXB0aW9uOiAnSW50ZXJuZXQnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHB1YmxpY1N1Ym5ldC5hZGRPdmVycmlkZSgncm91dGVfdGFibGVfaWQnLCBwdWJSdC5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwcml2YXRlU3VibmV0SWRGcm9tRW52KSB7XG4gICAgICAgICAgcHJpdmF0ZVN1Ym5ldCA9IG5ldyBDb3JlU3VibmV0KHRoaXMsICdQcml2YXRlU3VibmV0Jywge1xuICAgICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZWAsXG4gICAgICAgICAgICBjaWRyQmxvY2s6ICcxMC4wLjIuMC8yNCcsXG4gICAgICAgICAgICBkbnNMYWJlbDogJ3ByaXZhdGUnLFxuICAgICAgICAgICAgcHJvaGliaXRQdWJsaWNJcE9uVm5pYzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBwcml2YXRlU2wgPSBuZXcgQ29yZVNlY3VyaXR5TGlzdCh0aGlzLCAnUHJpdmF0ZVNlY3VyaXR5TGlzdCcsIHtcbiAgICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXByaXZhdGUtc2xgLFxuICAgICAgICAgICAgaW5ncmVzc1NlY3VyaXR5UnVsZXM6IFtcbiAgICAgICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcxMC4wLjIuMC8yNCcsIGRlc2NyaXB0aW9uOiAnUEcnLCB0Y3BPcHRpb25zOiB7IG1pbjogNTQzMiwgbWF4OiA1NDMyIH0gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBlZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbeyBwcm90b2NvbDogJ2FsbCcsIGRlc3RpbmF0aW9uOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdBbGwnIH1dLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByaXZhdGVTdWJuZXQuYWRkT3ZlcnJpZGUoJ3NlY3VyaXR5X2xpc3RfaWRzJywgW3ByaXZhdGVTbC5pZF0pO1xuICAgICAgICAgIGNvbnN0IGFsbFNlcnZpY2VzID0gbmV3IERhdGFPY2lDb3JlU2VydmljZXModGhpcywgJ0FsbFNlcnZpY2VzJywge30pO1xuICAgICAgICAgIGNvbnN0IHN2Y0d3ID0gbmV3IENvcmVTZXJ2aWNlR2F0ZXdheSh0aGlzLCAnU2VydmljZUdhdGV3YXknLCB7XG4gICAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1zZ3dgLFxuICAgICAgICAgICAgc2VydmljZXM6IFt7IHNlcnZpY2VJZDogYWxsU2VydmljZXMuc2VydmljZXMuZ2V0KDApLmlkIH1dLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHByaXZSdCA9IG5ldyBDb3JlUm91dGVUYWJsZSh0aGlzLCAnUHJpdmF0ZVJvdXRlVGFibGUnLCB7XG4gICAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wcml2YXRlLXJ0YCxcbiAgICAgICAgICAgIHJvdXRlUnVsZXM6IFtcbiAgICAgICAgICAgICAgeyBuZXR3b3JrRW50aXR5SWQ6IHN2Y0d3LmlkLCBkZXN0aW5hdGlvbjogYWxsU2VydmljZXMuc2VydmljZXMuZ2V0KDApLmNpZHJCbG9jaywgZGVzdGluYXRpb25UeXBlOiAnU0VSVklDRV9DSURSX0JMT0NLJywgZGVzY3JpcHRpb246ICdPQ0lSJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcml2YXRlU3VibmV0LmFkZE92ZXJyaWRlKCdyb3V0ZV90YWJsZV9pZCcsIHByaXZSdC5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZnVuY3Rpb25BcHBTdWJuZXRJZCA9IHByaXZhdGVTdWJuZXRJZEZyb21FbnYgfHwgKHByaXZhdGVTdWJuZXQ/LmlkID8/ICcnKTtcbiAgICAgIGNvbnN0IHB1YmxpY1N1Ym5ldElkRm9yQXBpR3cgPSBwdWJsaWNTdWJuZXRJZEZyb21FbnYgfHwgKHB1YmxpY1N1Ym5ldD8uaWQgPz8gJycpO1xuXG4gICAgICBsZXQgYXBpR2F0ZXdheTogQXBpZ2F0ZXdheUdhdGV3YXkgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoc3RhY2tBY3Rpb24gPT09ICdmdWxsLXN0YWNrJyAmJiBwdWJsaWNTdWJuZXRJZEZvckFwaUd3KSB7XG4gICAgICAgIGFwaUdhdGV3YXkgPSBuZXcgQXBpZ2F0ZXdheUdhdGV3YXkodGhpcywgJ0FwaUdhdGV3YXknLCB7XG4gICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgc3VibmV0SWQ6IHB1YmxpY1N1Ym5ldElkRm9yQXBpR3csXG4gICAgICAgICAgZW5kcG9pbnRUeXBlOiAnUFVCTElDJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1hcGktZ2F0ZXdheWAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBPcHRpb25hbCBJQU06IGFsbG93IEFQSSBHYXRld2F5IHRvIGludm9rZSBGdW5jdGlvbnMgaW4gdGhpcyBjb21wYXJ0bWVudC5cbiAgICAgIC8vIE9DSSBkb2NzOiBBTExPVyBhbnktdXNlciB0byB1c2UgZnVuY3Rpb25zLWZhbWlseSBpbiBjb21wYXJ0bWVudCA8ZnVuY3Rpb25zLWNvbXBhcnRtZW50PlxuICAgICAgLy8gICB3aGVyZSBBTEwge3JlcXVlc3QucHJpbmNpcGFsLnR5cGU9J0FwaUdhdGV3YXknLCByZXF1ZXN0LnJlc291cmNlLmNvbXBhcnRtZW50LmlkPSc8YXBpZ3ctY29tcGFydG1lbnQtb2NpZD4nfVxuICAgICAgY29uc3QgY3JlYXRlQXBpZ3dQb2xpY3kgPSAhIWNvbmZpZy5jcmVhdGVBcGlnd1BvbGljeSB8fCAocHJvY2Vzcy5lbnYuT0NJX0NSRUFURV9BUElHV19QT0xJQ1kgfHwgJycpLnRyaW0oKSA9PT0gJzEnO1xuICAgICAgaWYgKGNyZWF0ZUFwaWd3UG9saWN5ICYmIHN0YWNrQWN0aW9uID09PSAnZnVsbC1zdGFjaycpIHtcbiAgICAgICAgY29uc3QgYXBpZ3dQb2xpY3lOYW1lID0gYCR7cmVzb3VyY2VOYW1lfS1hcGlndy1mdW5jdGlvbnMtYWNjZXNzYDtcbiAgICAgICAgbmV3IElkZW50aXR5UG9saWN5KHRoaXMsICdBcGlHYXRld2F5RnVuY3Rpb25zUG9saWN5Jywge1xuICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy50ZW5hbmN5SWQsXG4gICAgICAgICAgbmFtZTogYXBpZ3dQb2xpY3lOYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQWxsb3cgQVBJIEdhdGV3YXlzIGluICR7Y29uZmlnLmNvbXBhcnRtZW50SWR9IHRvIGludm9rZSBGdW5jdGlvbnMgaW4gJHtjb25maWcuY29tcGFydG1lbnRJZH1gLFxuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIGBBTExPVyBhbnktdXNlciB0byB1c2UgZnVuY3Rpb25zLWZhbWlseSBpbiBjb21wYXJ0bWVudCBpZCAke2NvbmZpZy5jb21wYXJ0bWVudElkfSB3aGVyZSBBTEwge3JlcXVlc3QucHJpbmNpcGFsLnR5cGU9ICdBcGlHYXRld2F5JywgcmVxdWVzdC5yZXNvdXJjZS5jb21wYXJ0bWVudC5pZCA9ICcke2NvbmZpZy5jb21wYXJ0bWVudElkfSd9YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ2dpbmdMb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYXBwTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBMb2cgZ3JvdXAgZm9yICR7YXBwTmFtZX1gLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmdW5jdGlvbkFwcCA9IG5ldyBGdW5jdGlvbnNBcHBsaWNhdGlvbih0aGlzLCAnRnVuY3Rpb25BcHAnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYXBwTmFtZSxcbiAgICAgICAgc3VibmV0SWRzOiBbZnVuY3Rpb25BcHBTdWJuZXRJZF0sXG4gICAgICB9KTtcbiAgICAgIGxldCBvY2lGdW5jdGlvbjogRnVuY3Rpb25zRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWNvZGVPbmx5KSB7XG4gICAgICAgIG9jaUZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uc0Z1bmN0aW9uKHRoaXMsICdGdW5jdGlvbicsIHtcbiAgICAgICAgICBhcHBsaWNhdGlvbklkOiBmdW5jdGlvbkFwcC5pZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSEsXG4gICAgICAgICAgaW1hZ2U6IGltYWdlVXJsISxcbiAgICAgICAgICBtZW1vcnlJbk1iczogY29uZmlnLmZ1bmN0aW9uTWVtb3J5TWIgPz8gJzI1NicsXG4gICAgICAgICAgdGltZW91dEluU2Vjb25kczogY29uZmlnLmZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gMzAsXG4gICAgICAgICAgLi4uKGNvbmZpZy5mdW5jdGlvbkNvbmZpZyAmJiBPYmplY3Qua2V5cyhjb25maWcuZnVuY3Rpb25Db25maWcpLmxlbmd0aCA+IDAgPyB7IGNvbmZpZzogY29uZmlnLmZ1bmN0aW9uQ29uZmlnIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICBvY2lGdW5jdGlvbi5hZGRPdmVycmlkZSgnZGVwZW5kc19vbicsIFtgbnVsbF9yZXNvdXJjZS4ke2J1aWxkQW5kUHVzaEltYWdlSWQhfWBdKTtcbiAgICAgIH1cbiAgICAgIGxldCBmdW5jdGlvbklkRm9yR2F0ZXdheTogc3RyaW5nIHwgdW5kZWZpbmVkID0gb2NpRnVuY3Rpb24/LmlkO1xuICAgICAgaWYgKHN0YWNrQWN0aW9uID09PSAnZnVsbC1zdGFjaycgJiYgYXBpR2F0ZXdheSAmJiBjb2RlT25seSkge1xuICAgICAgICBjb25zdCBjb2RlT25seUZ1bmN0aW9uID0gbmV3IERhdGFPY2lGdW5jdGlvbnNGdW5jdGlvbnModGhpcywgJ0NvZGVPbmx5RnVuY3Rpb24nLCB7XG4gICAgICAgICAgYXBwbGljYXRpb25JZDogZnVuY3Rpb25BcHAuaWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGNvbmZpZy5mdW5jdGlvbk5hbWUhLFxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb25JZEZvckdhdGV3YXkgPSBjb2RlT25seUZ1bmN0aW9uLmZ1bmN0aW9ucy5nZXQoMCkuaWQ7XG4gICAgICB9XG4gICAgICBpZiAoc3RhY2tBY3Rpb24gPT09ICdmdWxsLXN0YWNrJyAmJiBhcGlHYXRld2F5ICYmIGZ1bmN0aW9uSWRGb3JHYXRld2F5KSB7XG4gICAgICAgIGNvbnN0IHBhdGhQcmVmaXggPSBjb25maWcuYXBpR3dQYXRoUHJlZml4ID8/ICcvJztcbiAgICAgICAgbGV0IHJvdXRlczogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1ldGhvZHM6IHN0cmluZ1tdOyBiYWNrZW5kOiB7IHR5cGU6IHN0cmluZzsgZnVuY3Rpb25JZDogc3RyaW5nOyByZWFkVGltZW91dEluU2Vjb25kcz86IG51bWJlciB9IH0+O1xuICAgICAgICBpZiAoY29uZmlnLmFwaUd3RGVwbG95bWVudEpzb25QYXRoICYmIGZzLmV4aXN0c1N5bmMoY29uZmlnLmFwaUd3RGVwbG95bWVudEpzb25QYXRoKSkge1xuICAgICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhjb25maWcuYXBpR3dEZXBsb3ltZW50SnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UocmF3KSBhcyB7IHJvdXRlcz86IEFycmF5PHsgcGF0aD86IHN0cmluZzsgbWV0aG9kcz86IHN0cmluZ1tdOyBiYWNrZW5kPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4gfTtcbiAgICAgICAgICBjb25zdCByb3V0ZUxpc3QgPSBzcGVjPy5yb3V0ZXMgPz8gW107XG4gICAgICAgICAgcm91dGVzID0gcm91dGVMaXN0Lm1hcCgocikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYiA9IHIuYmFja2VuZCA/PyB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSWRSYXcgPSAoYi5mdW5jdGlvbklkID8/IGIuZnVuY3Rpb25faWQpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0eXBlb2YgZnVuY3Rpb25JZFJhdyA9PT0gJ3N0cmluZycgJiYgZnVuY3Rpb25JZFJhdy5pbmNsdWRlcygnJHtmdW5jdGlvbl9pZH0nKVxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uSWRGb3JHYXRld2F5XG4gICAgICAgICAgICAgIDogKGZ1bmN0aW9uSWRSYXcgPz8gZnVuY3Rpb25JZEZvckdhdGV3YXkpO1xuICAgICAgICAgICAgY29uc3QgcmVhZFRpbWVvdXQgPSAoYi5yZWFkVGltZW91dEluU2Vjb25kcyA/PyBiLnJlYWRfdGltZW91dF9pbl9zZWNvbmRzKSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwYXRoOiByLnBhdGggPz8gJy97cGF0aCp9JyxcbiAgICAgICAgICAgICAgbWV0aG9kczogQXJyYXkuaXNBcnJheShyLm1ldGhvZHMpID8gci5tZXRob2RzIDogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ10sXG4gICAgICAgICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAoYi50eXBlIGFzIHN0cmluZykgPz8gJ09SQUNMRV9GVU5DVElPTlNfQkFDS0VORCcsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25JZCxcbiAgICAgICAgICAgICAgICAuLi4ocmVhZFRpbWVvdXQgIT0gbnVsbCA/IHsgcmVhZFRpbWVvdXRJblNlY29uZHM6IHJlYWRUaW1lb3V0IH0gOiB7fSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IGNvbmZpZy5hcGlHd1JvdXRlUGF0aCA/PyAnL3twYXRoKn0nO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBjb25maWcuYXBpR3dNZXRob2RzPy5sZW5ndGggPyBjb25maWcuYXBpR3dNZXRob2RzIDogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ107XG4gICAgICAgICAgcm91dGVzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICAgICAgICAgIG1ldGhvZHMsXG4gICAgICAgICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbklkOiBmdW5jdGlvbklkRm9yR2F0ZXdheSxcbiAgICAgICAgICAgICAgICByZWFkVGltZW91dEluU2Vjb25kczogY29uZmlnLmZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gMzAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBpRGVwbG95bWVudCA9IG5ldyBBcGlnYXRld2F5RGVwbG95bWVudCh0aGlzLCAnQXBpRGVwbG95bWVudCcsIHtcbiAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICBnYXRld2F5SWQ6IGFwaUdhdGV3YXkuaWQsXG4gICAgICAgICAgcGF0aFByZWZpeCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1kZXBsb3ltZW50YCxcbiAgICAgICAgICBzcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvY2lGdW5jdGlvbikgYXBpRGVwbG95bWVudC5ub2RlLmFkZERlcGVuZGVuY3kob2NpRnVuY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICAvLyBGdW5jdGlvbnMgZXhlY3V0aW9uIGxvZzogU0VSVklDRSBsb2cgZm9yIHRoZSBGdW5jdGlvbnMgYXBwbGljYXRpb24gKGNhdGVnb3J5IGludm9rZSlcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbkxvZyA9IG5ldyBMb2dnaW5nTG9nKHRoaXMsICdFeGVjdXRpb25Mb2cnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHthcHBOYW1lfS1pbnZva2VgLFxuICAgICAgICBsb2dHcm91cElkOiBsb2dHcm91cC5pZCxcbiAgICAgICAgbG9nVHlwZTogJ1NFUlZJQ0UnLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICBjYXRlZ29yeTogJ2ludm9rZScsXG4gICAgICAgICAgICAvLyBBc3NvY2lhdGUgdGhpcyBzZXJ2aWNlIGxvZyB3aXRoIHRoZSBGdW5jdGlvbnMgYXBwbGljYXRpb25cbiAgICAgICAgICAgIHJlc291cmNlOiBmdW5jdGlvbkFwcC5pZCxcbiAgICAgICAgICAgIHNlcnZpY2U6ICdmdW5jdGlvbnMnLFxuICAgICAgICAgICAgc291cmNlVHlwZTogJ09DSVNFUlZJQ0UnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGV4ZWN1dGlvbkxvZy5ub2RlLmFkZERlcGVuZGVuY3koZnVuY3Rpb25BcHApO1xuXG4gICAgICAvLyB0YWlsLWZ1bmN0aW9uLWxvZ3MuanMgaXMgd3JpdHRlbiBieTogbnB4IG9jZGsgd3JpdGUtbG9nLWNvbmZpZyAocnVuIGFmdGVyIGRlcGxveSkuXG5cbiAgICAgIGlmIChvY2lyUmVwb3NpdG9yeSkge1xuICAgICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdvY2lyX3JlcG9zaXRvcnlfbmFtZScsIHsgdmFsdWU6IG9jaXJSZXBvc2l0b3J5LmRpc3BsYXlOYW1lLCBkZXNjcmlwdGlvbjogJ09DSVIgcmVwb3NpdG9yeSBuYW1lJyB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChhcGlHYXRld2F5KSB7XG4gICAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2FwaV9nYXRld2F5X2hvc3QnLCB7IHZhbHVlOiBhcGlHYXRld2F5Lmhvc3RuYW1lLCBkZXNjcmlwdGlvbjogJ0FQSSBHYXRld2F5IGhvc3RuYW1lJyB9KTtcbiAgICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnZnVuY3Rpb25faW52b2tlX3VybCcsIHsgdmFsdWU6IGBodHRwczovLyR7YXBpR2F0ZXdheS5ob3N0bmFtZX1gLCBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIHRvIGludm9rZSB0aGUgZnVuY3Rpb24nIH0pO1xuICAgICAgfVxuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnZnVuY3Rpb25fYXBwX2lkJywgeyB2YWx1ZTogZnVuY3Rpb25BcHAuaWQsIGRlc2NyaXB0aW9uOiAnT0NJIEZ1bmN0aW9ucyBBcHBsaWNhdGlvbiBPQ0lEJyB9KTtcbiAgICAgIGlmIChvY2lGdW5jdGlvbikge1xuICAgICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9pZCcsIHsgdmFsdWU6IG9jaUZ1bmN0aW9uLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBGdW5jdGlvbiBPQ0lEJyB9KTtcbiAgICAgIH1cbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2xvZ19ncm91cF9pZCcsIHsgdmFsdWU6IGxvZ0dyb3VwLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBMb2cgR3JvdXAgT0NJRCBmb3IgdGhlIGFwcGxpY2F0aW9uJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2V4ZWN1dGlvbl9sb2dfaWQnLCB7IHZhbHVlOiBleGVjdXRpb25Mb2cuaWQsIGRlc2NyaXB0aW9uOiAnT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9nIE9DSUQnIH0pO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIG9yYWNsZS9vY2kgKFRlcnJhZm9ybSBSZWdpc3RyeSkgc28gdGVycmFmb3JtIGluaXQgdXNlcyBpdCBvbiBPTDggYW5kIGVsc2V3aGVyZTsgbXVzdCBydW4gYWZ0ZXIgcHJvdmlkZXIgaXMgYWRkZWRcbiAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzLm9jaScsIHtcbiAgICAgIHNvdXJjZTogJ29yYWNsZS9vY2knLFxuICAgICAgLy8gUGluIHRvIDwgNS40Ny4wOiA1LjQ3LjAgY3Jhc2hlcyBvbiBkYXJ3aW5fYXJtNjQ7IDUuNDYueCBhbmQgTGludXggKE9MOCkgd29ya1xuICAgICAgdmVyc2lvbjogJz49IDUuMC4wLCA8IDUuNDcuMCcsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
559
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vb2NpLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlDQUF3RDtBQUN4RCw2REFBNkQ7QUFDN0QseUdBQW9HO0FBQ3BHLDZEQUF5RDtBQUN6RCxtRUFBK0Q7QUFDL0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUNoRix5RkFBbUY7QUFDbkYsNkVBQXdFO0FBQ3hFLHVGQUFrRjtBQUNsRixpRkFBNkU7QUFDN0UsdUZBQW1GO0FBQ25GLHVGQUFtRjtBQUNuRixpRkFBNkU7QUFDN0UscUdBQStGO0FBQy9GLCtFQUEwRTtBQUMxRSxtRUFBK0Q7QUFDL0QsMkVBQXVFO0FBQ3ZFLHFEQUFxRjtBQUNyRix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLE1BQU0sdUJBQXVCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJCL0IsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQUc7Ozs7Ozs7O0VBUTlCLENBQUM7QUFFSCxNQUFNLHVCQUF1QixHQUFHOzs7OztDQUsvQixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CL0IsQ0FBQztBQTBDRixNQUFhLFFBQVMsU0FBUSxzQkFBYztJQUMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMEVBQTBFO1FBQzFFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUU7b0JBQ3BDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxD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S0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztZQUN4RyxDQUFDO1lBQ0QsSUFBSSx1QkFBZSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pILElBQUksdUJBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBQzdILENBQUM7UUFFRCx5SEFBeUg7UUFDekgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNuRCxNQUFNLEVBQUUsWUFBWTtZQUNwQiwrRUFBK0U7WUFDL0UsT0FBTyxFQUFFLG9CQUFvQjtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFuY0QsNEJBbWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjaywgVGVycmFmb3JtT3V0cHV0IH0gZnJvbSAnY2RrdGYnO1xuaW1wb3J0IHsgT2NpUHJvdmlkZXIgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvcHJvdmlkZXInO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcnRpZmFjdHMtY29udGFpbmVyLXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQ29yZVZjbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXZjbic7XG5pbXBvcnQgeyBDb3JlU3VibmV0IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtc3VibmV0JztcbmltcG9ydCB7IENvcmVTZWN1cml0eUxpc3QgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1zZWN1cml0eS1saXN0JztcbmltcG9ydCB7IENvcmVTZXJ2aWNlR2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXNlcnZpY2UtZ2F0ZXdheSc7XG5pbXBvcnQgeyBEYXRhT2NpQ29yZVNlcnZpY2VzIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2RhdGEtb2NpLWNvcmUtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZVJvdXRlVGFibGUgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1yb3V0ZS10YWJsZSc7XG5pbXBvcnQgeyBDb3JlSW50ZXJuZXRHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtaW50ZXJuZXQtZ2F0ZXdheSc7XG5pbXBvcnQgeyBBcGlnYXRld2F5R2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcGlnYXRld2F5LWdhdGV3YXknO1xuaW1wb3J0IHsgQXBpZ2F0ZXdheURlcGxveW1lbnQgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvYXBpZ2F0ZXdheS1kZXBsb3ltZW50JztcbmltcG9ydCB7IEZ1bmN0aW9uc0FwcGxpY2F0aW9uIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2Z1bmN0aW9ucy1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBGdW5jdGlvbnNGdW5jdGlvbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9mdW5jdGlvbnMtZnVuY3Rpb24nO1xuaW1wb3J0IHsgRGF0YU9jaUZ1bmN0aW9uc0Z1bmN0aW9ucyB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9kYXRhLW9jaS1mdW5jdGlvbnMtZnVuY3Rpb25zJztcbmltcG9ydCB7IExvZ2dpbmdMb2dHcm91cCB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9sb2dnaW5nLWxvZy1ncm91cCc7XG5pbXBvcnQgeyBMb2dnaW5nTG9nIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2xvZ2dpbmctbG9nJztcbmltcG9ydCB7IElkZW50aXR5UG9saWN5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2lkZW50aXR5LXBvbGljeSc7XG5pbXBvcnQgeyBPY2lCYWNrZW5kQ29uZmlnLCBvY2lySG9zdEtleSwgZ2V0T2NpSW1hZ2VVcmwgfSBmcm9tICcuLi9jb25maWcvb2NpLWNvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5jb25zdCBHUkFBTFZNX0pBVkFfRE9DS0VSRklMRSA9IGBGUk9NIGRvY2tlci5pby9mbnByb2plY3QvZm4tamF2YS1mZGstYnVpbGQ6amRrMTctMS4wLWxhdGVzdCBhcyBidWlsZC1zdGFnZVxuV09SS0RJUiAvZnVuY3Rpb25cbkVOViBNQVZFTl9PUFRTIC1EaHR0cC5wcm94eUhvc3Q9IC1EaHR0cC5wcm94eVBvcnQ9IC1EaHR0cHMucHJveHlIb3N0PSAtRGh0dHBzLnByb3h5UG9ydD0gLURodHRwLm5vblByb3h5SG9zdHM9IC1EbWF2ZW4ucmVwby5sb2NhbD0vdXNyL3NoYXJlL21hdmVuL3JlZi9yZXBvc2l0b3J5XG5BREQgcG9tLnhtbCAvZnVuY3Rpb24vcG9tLnhtbFxuUlVOIFtcIm12blwiLCBcInBhY2thZ2VcIiwgXCJkZXBlbmRlbmN5OmNvcHktZGVwZW5kZW5jaWVzXCIsIFwiLURpbmNsdWRlU2NvcGU9cnVudGltZVwiLCBcIi1Ec2tpcFRlc3RzPXRydWVcIiwgXCItRG1kZXAucHJlcGVuZEdyb3VwSWQ9dHJ1ZVwiLCBcIi1Eb3V0cHV0RGlyZWN0b3J5PXRhcmdldFwiLCBcIi0tZmFpbC1uZXZlclwiXVxuQUREIHNyYyAvZnVuY3Rpb24vc3JjXG5SVU4gW1wibXZuXCIsIFwicGFja2FnZVwiXVxuXG5GUk9NIGNvbnRhaW5lci1yZWdpc3RyeS5vcmFjbGUuY29tL2dyYWFsdm0vbmF0aXZlLWltYWdlOjIzLW9sOCBBUyBuYXRpdmVcbldPUktESVIgL2FwcFxuQ09QWSAtLWZyb209YnVpbGQtc3RhZ2UgL2Z1bmN0aW9uL3RhcmdldCAuXG5BREQgcmVmbGVjdGlvbi5qc29uIC5cblxuUlVOIG5hdGl2ZS1pbWFnZSBcXFxcXG4gICAgIC1IOlJlZmxlY3Rpb25Db25maWd1cmF0aW9uRmlsZXM9L2FwcC9yZWZsZWN0aW9uLmpzb24gXFxcXFxuICAgICAtT2IgXFxcXFxuICAgICAtSDpOYW1lPUhlbGxvIFxcXFxcbiAgICAgLWNwIFwiL2FwcC9oZWxsby0xLjAuMC5qYXI6L2FwcC8qXCIgIFxcXFxcbiAgICAgICAgY29tLmZucHJvamVjdC5mbi5ydW50aW1lLkVudHJ5UG9pbnRcblxuRlJPTSBkb2NrZXIuaW8vZm5wcm9qZWN0L2ZuLWphdmEtZmRrOmpyZTE3LWxhdGVzdCBhcyBmZGtcblxuRlJPTSBjb250YWluZXItcmVnaXN0cnkub3JhY2xlLmNvbS9vcy9vcmFjbGVsaW51eDo4LXNsaW1cbkNPUFkgLS1mcm9tPW5hdGl2ZSAvYXBwL0hlbGxvIC5cbkNPUFkgLS1mcm9tPWZkayAvZnVuY3Rpb24vcnVudGltZS8qIC4vXG5FTlRSWVBPSU5UIFsgXCIuL0hlbGxvXCIgXVxuQ01EIFsgXCJjb20uZXhhbXBsZS5mbi5IZWxsb0Z1bmN0aW9uOjpoYW5kbGVSZXF1ZXN0XCIsIFwiLURqYXZhLmxpYnJhcnkucGF0aD0vbGliXCJdXG5gO1xuXG5jb25zdCBHUkFBTFZNX1JFRkxFQ1RJT05fSlNPTiA9IGBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiY29tLmV4YW1wbGUuZm4uSGVsbG9GdW5jdGlvblwiLFxuICAgICAgXCJhbGxEZWNsYXJlZE1ldGhvZHNcIjogdHJ1ZSxcbiAgICAgIFwibWV0aG9kc1wiOiBbXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiPGluaXQ+XCIsIFwicGFyYW1ldGVyVHlwZXNcIjogW10gfVxuICAgICAgXVxuICAgIH1cbl1gO1xuXG5jb25zdCBHUkFBTFZNX1BPTV9SVU5USU1FX0RFUCA9IGAgICAgICAgIDxkZXBlbmRlbmN5PlxuICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmZucHJvamVjdC5mbjwvZ3JvdXBJZD5cbiAgICAgICAgICAgIDxhcnRpZmFjdElkPnJ1bnRpbWU8L2FydGlmYWN0SWQ+XG4gICAgICAgICAgICA8dmVyc2lvbj5cXCR7ZmRrLnZlcnNpb259PC92ZXJzaW9uPlxuICAgICAgICA8L2RlcGVuZGVuY3k+XG5gO1xuXG5jb25zdCBHUkFBTFZNX1BPTV9CVUlMRF9CTE9DSyA9IGAgICAgPGJ1aWxkPlxuICAgICAgICA8cGx1Z2lucz5cbiAgICAgICAgICAgIDxwbHVnaW4+XG4gICAgICAgICAgICAgICAgPCEtLSBDb3B5IGRlcGVuZGVuY2llcyAtLT5cbiAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD5cbiAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5pbnN0YWxsPC9waGFzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jb3B5LWRlcGVuZGVuY2llczwvZ29hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PlxcJHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vbGliPC9vdXRwdXREaXJlY3Rvcnk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPlxuICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz5cbiAgICAgICAgICAgIDwvcGx1Z2luPlxuICAgICAgICA8L3BsdWdpbnM+XG4gICAgPC9idWlsZD5cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2NpU3RhY2tDb25maWcge1xuICBjb21wYXJ0bWVudElkOiBzdHJpbmc7XG4gIG9jaXJDb21wYXJ0bWVudElkPzogc3RyaW5nO1xuICB0ZW5hbmN5SWQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBjcmVhdGUgSUFNIHBvbGljeSBzbyBBUEkgR2F0ZXdheSBjYW4gaW52b2tlIEZ1bmN0aW9ucy4gKi9cbiAgY3JlYXRlQXBpZ3dQb2xpY3k/OiBib29sZWFuO1xuICAvKiogT0NJIEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lIChlLmcuIG15LWFwcCkuIFNldCB2aWEgT0NJX0ZVTkNUSU9OX0FQUF9OQU1FIG9yIHBhc3MgaW4gY29uZmlnLiAqL1xuICBmdW5jdGlvbkFwcE5hbWU6IHN0cmluZztcbiAgLyoqIE9DSSBGdW5jdGlvbiBuYW1lIChlLmcuIG15LWZ1bmN0aW9uKS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fTkFNRSBvciBwYXNzIGluIGNvbmZpZy4gKi9cbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBwYXRoIHRvIEpBUiAob3IgRG9ja2VyZmlsZSBjb250ZXh0KSB0byBidWlsZCBhbmQgZGVwbG95IGFzIHRoZSBmdW5jdGlvbiBpbWFnZS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEguIEVtcHR5ID0gbm8gZnVuY3Rpb24vaW1hZ2UgYnVpbGQuICovXG4gIGZ1bmN0aW9uSmFyUGF0aD86IHN0cmluZztcbiAgLyoqIERpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiBXaGVuIHNldCB3aXRoIGZ1bmN0aW9uTmFtZSwgY3JlYXRlcyBWQ04sIEZ1bmN0aW9uLCBBUEkgR2F0ZXdheS4gKi9cbiAgZG9ja2VyQ29udGV4dFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSB0YWcgZm9yIE9DSVIgKGZyb20gZnVuYy55YW1sIHZlcnNpb24gb3IgT0NJX0lNQUdFX1RBRzsgZGVmYXVsdCAnbGF0ZXN0JykuICovXG4gIGltYWdlVGFnPzogc3RyaW5nO1xuICAvKiogSmF2YSBGREsgQ01EIGhhbmRsZXIgKGZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9IQU5ETEVSKS4gKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgb2NpclJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuICAvKiogQVBJIEdhdGV3YXkgZGVwbG95bWVudCBwYXRoIHByZWZpeC4gRGVmYXVsdCAnLycuICovXG4gIGFwaUd3UGF0aFByZWZpeD86IHN0cmluZztcbiAgLyoqIEFQSSBHYXRld2F5IHJvdXRlIHBhdGguIERlZmF1bHQgJy97cGF0aCp9Jy4gKi9cbiAgYXBpR3dSb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBBUEkgR2F0ZXdheSByb3V0ZSBtZXRob2RzLiBEZWZhdWx0IFsnR0VUJywgJ1BPU1QnLCAnT1BUSU9OUyddLiAqL1xuICBhcGlHd01ldGhvZHM/OiBzdHJpbmdbXTtcbiAgLyoqIEZ1bmN0aW9uIG1lbW9yeSBpbiBNQiAoZS5nLiAnMjU2JykuIEZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9NRU1PUllfTUIuICovXG4gIGZ1bmN0aW9uTWVtb3J5TWI/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHMuIEZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMuICovXG4gIGZ1bmN0aW9uVGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKiBGdW5jdGlvbiBjb25maWcvZW52IGtleS12YWx1ZS4gRnJvbSBmdW5jLnlhbWwgY29uZmlnIG9yIE9DSV9GVU5DVElPTl9DT05GSUcuICovXG4gIGZ1bmN0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT04gKHJvdXRlcykuIERlZmF1bHQgb2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uIGluIHByb2plY3Qgcm9vdC4gKi9cbiAgYXBpR3dEZXBsb3ltZW50SnNvblBhdGg/OiBzdHJpbmc7XG4gIC8qKiBSdW50aW1lIGZyb20gZnVuYy55YW1sIChlLmcuICdqYXZhJywgJ3B5dGhvbicpOyBjb250cm9scyBEb2NrZXJmaWxlIGdlbmVyYXRpb24uICovXG4gIHJ1bnRpbWU/OiBzdHJpbmc7XG4gIGJhY2tlbmQ/OiBPY2lCYWNrZW5kQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgT2NpU3RhY2sgZXh0ZW5kcyBUZXJyYWZvcm1TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogT2NpU3RhY2tDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gS2VlcCBsb2NhbCBzdGF0ZSBpbiB0aGUgY2FsbGVyJ3MgcHJvamVjdCwgbmV2ZXIgdW5kZXIgdGhpcyBucG0gcGFja2FnZS5cbiAgICBpZiAoY29uZmlnLmJhY2tlbmQpIHtcbiAgICAgIGlmIChjb25maWcuYmFja2VuZC50eXBlID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5iYWNrZW5kJywge1xuICAgICAgICAgIGxvY2FsOiB7IHBhdGg6IGNvbmZpZy5iYWNrZW5kLnBhdGggfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5iYWNrZW5kLnR5cGUgPT09ICdvY2knKSB7XG4gICAgICAgIC8vIE9DSSBuYXRpdmUgYmFja2VuZFxuICAgICAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0uYmFja2VuZCcsIHtcbiAgICAgICAgICBvY2k6IHtcbiAgICAgICAgICAgIGJ1Y2tldDogY29uZmlnLmJhY2tlbmQuYnVja2V0LFxuICAgICAgICAgICAgbmFtZXNwYWNlOiBjb25maWcubmFtZXNwYWNlLFxuICAgICAgICAgICAga2V5OiBjb25maWcuYmFja2VuZC5rZXkgfHwgYCR7aWR9L3RlcnJhZm9ybS50ZnN0YXRlYCxcbiAgICAgICAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmJhY2tlbmQudHlwZSA9PT0gJ2h0dHAnKSB7XG4gICAgICAgIC8vIEhUVFAgYmFja2VuZCAoZm9yIE9DSSBPYmplY3QgU3RvcmFnZSB2aWEgUkVTVCBBUEkpXG4gICAgICAgIGNvbnN0IGh0dHBCYWNrZW5kOiBhbnkgPSB7XG4gICAgICAgICAgYWRkcmVzczogY29uZmlnLmJhY2tlbmQuYWRkcmVzcyxcbiAgICAgICAgICB1cGRhdGVfbWV0aG9kOiBjb25maWcuYmFja2VuZC51cGRhdGVNZXRob2QgfHwgJ1BVVCcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb25maWcuYmFja2VuZC5sb2NrQWRkcmVzcykge1xuICAgICAgICAgIGh0dHBCYWNrZW5kLmxvY2tfYWRkcmVzcyA9IGNvbmZpZy5iYWNrZW5kLmxvY2tBZGRyZXNzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuYmFja2VuZC51bmxvY2tBZGRyZXNzKSB7XG4gICAgICAgICAgaHR0cEJhY2tlbmQudW5sb2NrX2FkZHJlc3MgPSBjb25maWcuYmFja2VuZC51bmxvY2tBZGRyZXNzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5iYWNrZW5kJywge1xuICAgICAgICAgIGh0dHA6IGh0dHBCYWNrZW5kLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPQ0kgUHJvdmlkZXJcbiAgICBuZXcgT2NpUHJvdmlkZXIodGhpcywgJ29jaScsIHtcbiAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgIHRlbmFuY3lPY2lkOiBjb25maWcudGVuYW5jeUlkLFxuICAgIH0pO1xuXG4gICAgLy8gT0NJX1NUQUNLX0FDVElPTjogXCJmdW5jdGlvbi1vbmx5XCIgKG9yIGxlZ2FjeSBcImZ1bmN0aW9uXCIpID0+IG5vIEFQSSBHYXRld2F5OyBcImZ1bGwtc3RhY2tcIiBvciB1bnNldCA9PiBmdWxsIHN0YWNrIGluY2x1ZGluZyBBUEkgR2F0ZXdheS5cbiAgICBjb25zdCBzdGFja0FjdGlvblJhdyA9IChwcm9jZXNzLmVudi5PQ0lfU1RBQ0tfQUNUSU9OIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjb2RlT25seSA9IHByb2Nlc3MuZW52Lk9DSV9DT0RFX09OTFkgPT09ICcxJyB8fCBwcm9jZXNzLmVudlsnY29kZS1vbmx5J10gPT09ICcxJztcbiAgICAvLyBDb2RlLW9ubHkgZnVuY3Rpb25zIGFyZSBjcmVhdGVkIGJ5IE9DSSBDTEkuIFdoZW4gdGhlIGZ1bGwgc3RhY2sgaXMgcmVxdWVzdGVkLFxuICAgIC8vIHRoZWlyIE9DSUQgaXMgbG9va2VkIHVwIGJ5IFRlcnJhZm9ybSBiZWZvcmUgd2lyaW5nIHRoZSBBUEkgR2F0ZXdheSByb3V0ZS5cbiAgICBjb25zdCBzdGFja0FjdGlvbiA9IHN0YWNrQWN0aW9uUmF3ID09PSAnZnVuY3Rpb24tb25seScgfHwgc3RhY2tBY3Rpb25SYXcgPT09ICdmdW5jdGlvbicgPyAnZnVuY3Rpb24tb25seScgOiAnZnVsbC1zdGFjayc7XG5cbiAgICAvLyBPQ0lSIENvbnRhaW5lciBSZXBvc2l0b3J5IChyb290IGNvbXBhcnRtZW50IGFsbG93ZWQgaWYgZXhwbGljaXRseSBzZXQpLlxuICAgIGNvbnN0IG9jaXJDb21wYXJ0bWVudElkID0gY29uZmlnLm9jaXJDb21wYXJ0bWVudElkIHx8IGNvbmZpZy5jb21wYXJ0bWVudElkO1xuICAgIGNvbnN0IG9jaXJSZXBvTmFtZSA9IGNvbmZpZy5vY2lyUmVwb3NpdG9yeU5hbWUgfHwgY29uZmlnLmZ1bmN0aW9uTmFtZSB8fCAnb2NpLWZ1bmN0aW9uJztcbiAgICBjb25zdCBvY2lyUmVwb3NpdG9yeSA9IGNvZGVPbmx5ID8gdW5kZWZpbmVkIDogbmV3IEFydGlmYWN0c0NvbnRhaW5lclJlcG9zaXRvcnkodGhpcywgJ09jaXJSZXBvc2l0b3J5Jywge1xuICAgICAgY29tcGFydG1lbnRJZDogb2NpckNvbXBhcnRtZW50SWQsXG4gICAgICBkaXNwbGF5TmFtZTogb2NpclJlcG9OYW1lLFxuICAgICAgaXNQdWJsaWM6IGZhbHNlLFxuICAgICAgaXNJbW11dGFibGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZG9ja2VyQ29udGV4dFBhdGggPSAoY29uZmlnLmRvY2tlckNvbnRleHRQYXRoIHx8IGNvbmZpZy5mdW5jdGlvbkphclBhdGgpPy50cmltKCk7XG4gICAgY29uc3QgY3JlYXRlRnVsbFN0YWNrID0gY29uZmlnLmZ1bmN0aW9uTmFtZSAmJiAoZG9ja2VyQ29udGV4dFBhdGggfHwgY29kZU9ubHkpO1xuXG4gICAgaWYgKGNyZWF0ZUZ1bGxTdGFjaykge1xuICAgICAgaWYgKCFjb2RlT25seSAmJiBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRnVsbCBzdGFjayAoRnVuY3Rpb24gKyBBUEkgR2F0ZXdheSkgcmVxdWlyZXMgYSBub24tcm9vdCBjb21wYXJ0bWVudCBmb3IgT0NJUi4gU2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcE5hbWUgPSBjb25maWcuZnVuY3Rpb25BcHBOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUhO1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXBwTmFtZTtcblxuICAgICAgY29uc3QgcHJpdmF0ZVN1Ym5ldElkRnJvbUVudiA9IChwcm9jZXNzLmVudi5PQ0lfUFJJVkFURV9TVUJORVRfSUQgfHwgcHJvY2Vzcy5lbnYuT0NJX1BSSVZBVEVfU1VCTkVUX09DSUQgfHwgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1NVQk5FVF9JRCB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgcHVibGljU3VibmV0SWRGcm9tRW52ID0gKHByb2Nlc3MuZW52Lk9DSV9QVUJMSUNfU1VCTkVUX0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9QVUJMSUNfU1VCTkVUX09DSUQgfHwgcHJvY2Vzcy5lbnYuT0NJX0FQSUdBVEVXQVlfU1VCTkVUX0lEIHx8ICcnKS50cmltKCk7XG5cbiAgICAgIGxldCBpbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGJ1aWxkQW5kUHVzaEltYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICghY29kZU9ubHkpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uQ29kZVBhdGggPSBwYXRoLnJlc29sdmUoZG9ja2VyQ29udGV4dFBhdGghKTtcbiAgICAgIGNvbnN0IGltYWdlVGFnID0gY29uZmlnLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuICAgICAgY29uc3Qgb2NpclJlZ2lzdHJ5ID0gYCR7b2Npckhvc3RLZXkoY29uZmlnLnJlZ2lvbil9Lm9jaXIuaW9gO1xuICAgICAgaW1hZ2VVcmwgPSBnZXRPY2lJbWFnZVVybChjb25maWcpO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycy5udWxsJywge1xuICAgICAgICBzb3VyY2U6ICdoYXNoaWNvcnAvbnVsbCcsXG4gICAgICAgIHZlcnNpb246ICd+PiAzLjAnLFxuICAgICAgfSk7XG4gICAgICBidWlsZEFuZFB1c2hJbWFnZUlkID0gJ0J1aWxkQW5kUHVzaEltYWdlJztcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5kZXBlbmRzX29uYCwgW1xuICAgICAgICAnb2NpX2FydGlmYWN0c19jb250YWluZXJfcmVwb3NpdG9yeS5PY2lyUmVwb3NpdG9yeScsXG4gICAgICBdKTtcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS50cmlnZ2Vyc2AsIHtcbiAgICAgICAgcmVwb19uYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICAgIGltYWdlX3VybDogaW1hZ2VVcmwsXG4gICAgICAgIGltYWdlX3RhZzogaW1hZ2VUYWcsXG4gICAgICAgIGhhbmRsZXI6IGNvbmZpZy5oYW5kbGVyIHx8ICcnLFxuICAgICAgICBuYW1lc3BhY2U6IGNvbmZpZy5uYW1lc3BhY2UsXG4gICAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVnaW9uUCA9IGNvbmZpZy5yZWdpb247XG4gICAgICBjb25zdCBuYW1lc3BhY2VQID0gY29uZmlnLm5hbWVzcGFjZTtcbiAgICAgIGNvbnN0IG9jaXJVc2VyID0gcHJvY2Vzcy5lbnYuT0NJX09DSVJfVVNFUk5BTUUgfHwgJ0FVVE9fREVURUNUJztcbiAgICAgIGNvbnN0IG9jaUNsaVBhdGggPSAocHJvY2Vzcy5lbnYuT0NJX0NMSV9QQVRIIHx8ICdvY2knKS50cmltKCkgfHwgJ29jaSc7XG4gICAgICBjb25zdCBvY2lDbGlDb21tYW5kID0gYCcke29jaUNsaVBhdGgucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9J2A7XG4gICAgICBjb25zdCBsb2dpblNjcmlwdCA9IHByb2Nlc3MuZW52Lk9DSV9BVVRIX1RPS0VOXG4gICAgICAgID8gYGV4cG9ydCBPQ0lSX0FVVEhfVE9LRU49XCIke3Byb2Nlc3MuZW52Lk9DSV9BVVRIX1RPS0VOfVwiOyBPQ0lSX1VTRVI9XCIke29jaXJVc2VyfVwiOyBbIFwiJE9DSVJfVVNFUlwiID0gXCJBVVRPX0RFVEVDVFwiIF0gJiYgT0NJUl9VU0VSPVwiJHtuYW1lc3BhY2VQfS91c2VyXCI7IGVjaG8gXCIkT0NJUl9BVVRIX1RPS0VOXCIgfCBkb2NrZXIgbG9naW4gJHtvY2lyUmVnaXN0cnl9IC11IFwiJE9DSVJfVVNFUlwiIC0tcGFzc3dvcmQtc3RkaW4gfHwgZXhpdCAxYFxuICAgICAgICA6IGAke29jaUNsaUNvbW1hbmR9IHJhdy1yZXF1ZXN0IC0tcmVnaW9uICR7cmVnaW9uUH0gLS1odHRwLW1ldGhvZCBHRVQgLS10YXJnZXQtdXJpIFwiaHR0cHM6Ly8ke29jaXJSZWdpc3RyeX0vMjAxODA0MTkvZG9ja2VyL3Rva2VuXCIgMj4vZGV2L251bGwgfCAoY29tbWFuZCAtdiBqcSA+L2Rldi9udWxsICYmIGpxIC1yIC5kYXRhLnRva2VuIHx8IGdyZXAgLW8gJ1widG9rZW5cIjpcIlteXCJdKlwiJyB8IGN1dCAtZCdcIicgLWY0KSB8IGRvY2tlciBsb2dpbiAtdSBCRUFSRVJfVE9LRU4gLS1wYXNzd29yZC1zdGRpbiAke29jaXJSZWdpc3RyeX0gfHwgKGVjaG8gXCJTZXQgT0NJX0FVVEhfVE9LRU4gb3IgY29uZmlndXJlIE9DSSBDTElcIiA+JjI7IGV4aXQgMSlgO1xuICAgICAgY29uc3QgaGFuZGxlciA9IGNvbmZpZy5oYW5kbGVyIHx8ICdjb20uZXhhbXBsZS5mbi5IZWxsb0Z1bmN0aW9uOjpoYW5kbGVSZXF1ZXN0JztcbiAgICAgIGNvbnN0IHJ1bnRpbWUgPSBjb25maWcucnVudGltZT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGxldCBkb2NrZXJmaWxlQ29udGVudCA9ICcnO1xuICAgICAgaWYgKHJ1bnRpbWUgJiYgcnVudGltZS5zdGFydHNXaXRoKCdweXRob24nKSkge1xuICAgICAgICBkb2NrZXJmaWxlQ29udGVudCA9IGBGUk9NIGRvY2tlci5pby9mbnByb2plY3QvcHl0aG9uOjMuMTItZGV2IGFzIGJ1aWxkLXN0YWdlXG5XT1JLRElSIC9mdW5jdGlvblxuQUREIHJlcXVpcmVtZW50cy50eHQgL2Z1bmN0aW9uL1xuUlVOIHBpcDMgaW5zdGFsbCAtLXRhcmdldCAvcHl0aG9uLyAtLW5vLWNhY2hlIC0tbm8tY2FjaGUtZGlyIC1yIHJlcXVpcmVtZW50cy50eHQgJiZcXFxuXHRcdFx0ICAgIHJtIC1mciB+Ly5jYWNoZS9waXAgL3RtcCogcmVxdWlyZW1lbnRzLnR4dCBmdW5jLnlhbWwgRG9ja2VyZmlsZSAudmVudiAmJlxcXG5cdFx0XHQgICAgY2htb2QgLVIgbytyIC9weXRob25cbkFERCAuIC9mdW5jdGlvbi9cblJVTiBybSAtZnIgL2Z1bmN0aW9uLy5waXBfY2FjaGVcbkZST00gZG9ja2VyLmlvL2ZucHJvamVjdC9weXRob246My4xMlxuV09SS0RJUiAvZnVuY3Rpb25cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9weXRob24gL3B5dGhvblxuQ09QWSAtLWZyb209YnVpbGQtc3RhZ2UgL2Z1bmN0aW9uIC9mdW5jdGlvblxuUlVOIGNobW9kIC1SIG8rciAvZnVuY3Rpb25cbkVOViBQWVRIT05QQVRIPS9mdW5jdGlvbjovcHl0aG9uXG5FTlRSWVBPSU5UIFtcIi9weXRob24vYmluL2Zka1wiLCBcIi9mdW5jdGlvbi9mdW5jLnB5XCIsIFwiaGFuZGxlclwiXVxuYDtcbiAgICAgIH0gZWxzZSBpZiAocnVudGltZSAmJiBydW50aW1lLnN0YXJ0c1dpdGgoJ25vZGUnKSkge1xuICAgICAgICBkb2NrZXJmaWxlQ29udGVudCA9IGBGUk9NIGRvY2tlci5pby9mbnByb2plY3Qvbm9kZToyNC1kZXYgYXMgYnVpbGQtc3RhZ2VcbldPUktESVIgL2Z1bmN0aW9uXG5BREQgcGFja2FnZS5qc29uIC9mdW5jdGlvbi9cblJVTiBucG0gcGtnIGRlbGV0ZSBcImRlcGVuZGVuY2llcy5AbWlrYXJpbm5lb3JhY2xlL29jaS1jZGtcIlxuUlVOIG5wbSBpbnN0YWxsICAmJiBjaG93biAtUiAkKGlkIC11KTokKGlkIC1nKSBub2RlX21vZHVsZXNcbkZST00gZG9ja2VyLmlvL2ZucHJvamVjdC9ub2RlOjI0XG5XT1JLRElSIC9mdW5jdGlvblxuQUREIC4gL2Z1bmN0aW9uL1xuQ09QWSAtLWZyb209YnVpbGQtc3RhZ2UgL2Z1bmN0aW9uL25vZGVfbW9kdWxlcy8gL2Z1bmN0aW9uL25vZGVfbW9kdWxlcy9cblJVTiBjaG1vZCAtUiBvK3IgL2Z1bmN0aW9uXG5FTlRSWVBPSU5UIFtcIm5vZGVcIiwgXCJmdW5jLmpzXCJdXG5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXNlR3JhYWxWbSA9IChwcm9jZXNzLmVudi5PQ0lfVVNFX0dSQUFMVk1fSkFWQSB8fCAnJykudHJpbSgpID09PSAnMSc7XG4gICAgICAgIGlmICh1c2VHcmFhbFZtKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFVzZSBiYWtlZC1pbiBHcmFhbFZNIERvY2tlcmZpbGUgdGVtcGxhdGVcbiAgICAgICAgICAgIGRvY2tlcmZpbGVDb250ZW50ID0gR1JBQUxWTV9KQVZBX0RPQ0tFUkZJTEU7XG5cbiAgICAgICAgICAgIC8vIEVuc3VyZSByZWZsZWN0aW9uLmpzb24gZXhpc3RzIGluIHByb2plY3Qgcm9vdFxuICAgICAgICAgICAgY29uc3QgcmVmbGVjdGlvblRhcmdldFBhdGggPSBwYXRoLmpvaW4oZnVuY3Rpb25Db2RlUGF0aCwgJ3JlZmxlY3Rpb24uanNvbicpO1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHJlZmxlY3Rpb25UYXJnZXRQYXRoKSkge1xuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJlZmxlY3Rpb25UYXJnZXRQYXRoLCBHUkFBTFZNX1JFRkxFQ1RJT05fSlNPTiwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW5zdXJlIHBvbS54bWwgaGFzIHJ1bnRpbWUgZGVwZW5kZW5jeSBmb3IgR3JhYWxWTSBuYXRpdmUgaW1hZ2VcbiAgICAgICAgICAgIGNvbnN0IHByb2plY3RQb21QYXRoID0gcGF0aC5qb2luKGZ1bmN0aW9uQ29kZVBhdGgsICdwb20ueG1sJyk7XG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwcm9qZWN0UG9tUGF0aCkpIHtcbiAgICAgICAgICAgICAgbGV0IHBvbUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocHJvamVjdFBvbVBhdGgsICd1dGY4Jyk7XG5cbiAgICAgICAgICAgICAgaWYgKCFwb21Db250ZW50LmluY2x1ZGVzKCc8YXJ0aWZhY3RJZD5ydW50aW1lPC9hcnRpZmFjdElkPicpICYmIHBvbUNvbnRlbnQuaW5jbHVkZXMoJzwvZGVwZW5kZW5jaWVzPicpKSB7XG4gICAgICAgICAgICAgICAgcG9tQ29udGVudCA9IHBvbUNvbnRlbnQucmVwbGFjZSgnPC9kZXBlbmRlbmNpZXM+JywgYCR7R1JBQUxWTV9QT01fUlVOVElNRV9ERVB9ICAgIDwvZGVwZW5kZW5jaWVzPmApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocHJvamVjdFBvbVBhdGgsIHBvbUNvbnRlbnQsICd1dGY4Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgYW5kIGZhbGwgYmFjayB0byBzdGFuZGFyZCBKYXZhIERvY2tlcmZpbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkb2NrZXJmaWxlQ29udGVudCkge1xuICAgICAgICAgIGRvY2tlcmZpbGVDb250ZW50ID0gYEZST00gZG9ja2VyLmlvL2ZucHJvamVjdC9mbi1qYXZhLWZkay1idWlsZDpqZGsxNy0xLjEuNyBhcyBidWlsZC1zdGFnZVxuV09SS0RJUiAvZnVuY3Rpb25cbkVOViBNQVZFTl9PUFRTIC1EaHR0cC5wcm94eUhvc3Q9IC1EaHR0cC5wcm94eVBvcnQ9IC1EaHR0cHMucHJveHlIb3N0PSAtRGh0dHBzLnByb3h5UG9ydD0gLURodHRwLm5vblByb3h5SG9zdHM9IC1EbWF2ZW4ucmVwby5sb2NhbD0vdXNyL3NoYXJlL21hdmVuL3JlZi9yZXBvc2l0b3J5XG5BREQgcG9tLnhtbCAvZnVuY3Rpb24vcG9tLnhtbFxuUlVOIFtcIm12blwiLCBcInBhY2thZ2VcIiwgXCJkZXBlbmRlbmN5OmNvcHktZGVwZW5kZW5jaWVzXCIsIFwiLURpbmNsdWRlU2NvcGU9cnVudGltZVwiLCBcIi1Ec2tpcFRlc3RzPXRydWVcIiwgXCItRG1kZXAucHJlcGVuZEdyb3VwSWQ9dHJ1ZVwiLCBcIi1Eb3V0cHV0RGlyZWN0b3J5PXRhcmdldFwiLCBcIi0tZmFpbC1uZXZlclwiXVxuQUREIHNyYyAvZnVuY3Rpb24vc3JjXG5SVU4gW1wibXZuXCIsIFwicGFja2FnZVwiXVxuRlJPTSBkb2NrZXIuaW8vZm5wcm9qZWN0L2ZuLWphdmEtZmRrOmpyZTE3LTEuMS43XG5XT1JLRElSIC9mdW5jdGlvblxuQ09QWSAtLWZyb209YnVpbGQtc3RhZ2UgL2Z1bmN0aW9uL3RhcmdldC8qLmphciAvZnVuY3Rpb24vYXBwL1xuQ01EIFtcIiR7aGFuZGxlci5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJdYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZG9ja2VyaWdub3JlQ29udGVudCA9IGBub2RlX21vZHVsZXNcbi5naXRcbioubWRcbi5lbnZcbi5pZGVhXG4udnNjb2RlXG4qLmxvZ1xub2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uXG4ub2Nkay1vdXRwdXRzLmpzb25cbnRhaWwtZnVuY3Rpb24tbG9ncy5qc1xuYDtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVCNjQgPSBCdWZmZXIuZnJvbShkb2NrZXJmaWxlQ29udGVudCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBjb25zdCBkb2NrZXJpZ25vcmVCNjQgPSBCdWZmZXIuZnJvbShkb2NrZXJpZ25vcmVDb250ZW50LCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIC8vIEdlbmVyYXRlIERvY2tlcmZpbGUgYW5kIC5kb2NrZXJpZ25vcmUgaW4gbG9jYWwtZXhlYyBvbmx5IGlmIG1pc3Npbmc7IGlmIHRoZXkgZXhpc3QgdXNlIGFzLWlzLiBUaGVuIGxvZ2luLCBidWlsZCwgcHVzaC5cbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5wcm92aXNpb25lcmAsIFtcbiAgICAgICAge1xuICAgICAgICAgICdsb2NhbC1leGVjJzoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2NkIFwiJEZVTkNUSU9OX0NPREVfUEFUSFwiICYmIChbIC1mIERvY2tlcmZpbGUgXSB8fCAoZWNobyBcIiRET0NLRVJGSUxFX0I2NFwiIHwgYmFzZTY0IC1kID4gRG9ja2VyZmlsZSkpICYmIChbIC1mIC5kb2NrZXJpZ25vcmUgXSB8fCAoZWNobyBcIiRET0NLRVJJR05PUkVfQjY0XCIgfCBiYXNlNjQgLWQgPiAuZG9ja2VyaWdub3JlKSknLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgRlVOQ1RJT05fQ09ERV9QQVRIOiBmdW5jdGlvbkNvZGVQYXRoLFxuICAgICAgICAgICAgICBET0NLRVJGSUxFX0I2NDogZG9ja2VyZmlsZUI2NCxcbiAgICAgICAgICAgICAgRE9DS0VSSUdOT1JFX0I2NDogZG9ja2VyaWdub3JlQjY0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBsb2dpblNjcmlwdCwgb25fZmFpbHVyZTogJ2NvbnRpbnVlJyB9IH0sXG4gICAgICAgIHsgJ2xvY2FsLWV4ZWMnOiB7IGNvbW1hbmQ6IGBjZCBcIiR7ZnVuY3Rpb25Db2RlUGF0aC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCIgJiYgZG9ja2VyIGJ1aWxkIC0tcGxhdGZvcm0gbGludXgvYW1kNjQgLXQgJHtpbWFnZVVybH0gLmAgfSB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBgZG9ja2VyIHB1c2ggJHtpbWFnZVVybH1gIH0gfSxcbiAgICAgIF0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcHVibGljU3VibmV0OiBDb3JlU3VibmV0IHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHByaXZhdGVTdWJuZXQ6IENvcmVTdWJuZXQgfCB1bmRlZmluZWQ7XG4gICAgICAvLyBGdW5jdGlvbi1vbmx5OiBjcmVhdGUgVkNOIG9ubHkgd2hlbiB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgcHJpdmF0ZSBzdWJuZXQuIEZ1bGwtc3RhY2s6IGNyZWF0ZSB3aGVuIHdlIG5lZWQgZWl0aGVyIHN1Ym5ldC5cbiAgICAgIGNvbnN0IGNyZWF0ZU5ldHdvcmtpbmcgPVxuICAgICAgICBzdGFja0FjdGlvbiA9PT0gJ2Z1bmN0aW9uLW9ubHknXG4gICAgICAgICAgPyAhcHJpdmF0ZVN1Ym5ldElkRnJvbUVudlxuICAgICAgICAgIDogIXByaXZhdGVTdWJuZXRJZEZyb21FbnYgfHwgIXB1YmxpY1N1Ym5ldElkRnJvbUVudjtcbiAgICAgIGlmIChjcmVhdGVOZXR3b3JraW5nKSB7XG4gICAgICAgIGNvbnN0IHZjbiA9IG5ldyBDb3JlVmNuKHRoaXMsICdWY24nLCB7XG4gICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tdmNuYCxcbiAgICAgICAgICBjaWRyQmxvY2tzOiBbJzEwLjAuMC4wLzE2J10sXG4gICAgICAgICAgZG5zTGFiZWw6ICdhcHBmbicsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RhY2tBY3Rpb24gPT09ICdmdWxsLXN0YWNrJyAmJiAhcHVibGljU3VibmV0SWRGcm9tRW52KSB7XG4gICAgICAgICAgcHVibGljU3VibmV0ID0gbmV3IENvcmVTdWJuZXQodGhpcywgJ1B1YmxpY1N1Ym5ldCcsIHtcbiAgICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXB1YmxpY2AsXG4gICAgICAgICAgICBjaWRyQmxvY2s6ICcxMC4wLjEuMC8yNCcsXG4gICAgICAgICAgICBkbnNMYWJlbDogJ3B1YmxpYycsXG4gICAgICAgICAgICBwcm9oaWJpdFB1YmxpY0lwT25WbmljOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBwdWJsaWNTbCA9IG5ldyBDb3JlU2VjdXJpdHlMaXN0KHRoaXMsICdQdWJsaWNTZWN1cml0eUxpc3QnLCB7XG4gICAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWMtc2xgLFxuICAgICAgICAgICAgaW5ncmVzc1NlY3VyaXR5UnVsZXM6IFtcbiAgICAgICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0hUVFAnLCB0Y3BPcHRpb25zOiB7IG1pbjogODAsIG1heDogODAgfSB9LFxuICAgICAgICAgICAgICB7IHByb3RvY29sOiAnNicsIHNvdXJjZTogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnSFRUUFMnLCB0Y3BPcHRpb25zOiB7IG1pbjogNDQzLCBtYXg6IDQ0MyB9IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZWdyZXNzU2VjdXJpdHlSdWxlczogW3sgcHJvdG9jb2w6ICdhbGwnLCBkZXN0aW5hdGlvbjogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnQWxsJyB9XSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwdWJsaWNTdWJuZXQuYWRkT3ZlcnJpZGUoJ3NlY3VyaXR5X2xpc3RfaWRzJywgW3B1YmxpY1NsLmlkXSk7XG4gICAgICAgICAgY29uc3QgaWd3ID0gbmV3IENvcmVJbnRlcm5ldEdhdGV3YXkodGhpcywgJ0ludGVybmV0R2F0ZXdheScsIHtcbiAgICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWlnd2AsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHB1YlJ0ID0gbmV3IENvcmVSb3V0ZVRhYmxlKHRoaXMsICdQdWJsaWNSb3V0ZVRhYmxlJywge1xuICAgICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHVibGljLXJ0YCxcbiAgICAgICAgICAgIHJvdXRlUnVsZXM6IFtcbiAgICAgICAgICAgICAgeyBuZXR3b3JrRW50aXR5SWQ6IGlndy5pZCwgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXN0aW5hdGlvblR5cGU6ICdDSURSX0JMT0NLJywgZGVzY3JpcHRpb246ICdJbnRlcm5ldCcgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHVibGljU3VibmV0LmFkZE92ZXJyaWRlKCdyb3V0ZV90YWJsZV9pZCcsIHB1YlJ0LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXByaXZhdGVTdWJuZXRJZEZyb21FbnYpIHtcbiAgICAgICAgICBwcml2YXRlU3VibmV0ID0gbmV3IENvcmVTdWJuZXQodGhpcywgJ1ByaXZhdGVTdWJuZXQnLCB7XG4gICAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wcml2YXRlYCxcbiAgICAgICAgICAgIGNpZHJCbG9jazogJzEwLjAuMi4wLzI0JyxcbiAgICAgICAgICAgIGRuc0xhYmVsOiAncHJpdmF0ZScsXG4gICAgICAgICAgICBwcm9oaWJpdFB1YmxpY0lwT25WbmljOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHByaXZhdGVTbCA9IG5ldyBDb3JlU2VjdXJpdHlMaXN0KHRoaXMsICdQcml2YXRlU2VjdXJpdHlMaXN0Jywge1xuICAgICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZS1zbGAsXG4gICAgICAgICAgICBpbmdyZXNzU2VjdXJpdHlSdWxlczogW1xuICAgICAgICAgICAgICB7IHByb3RvY29sOiAnNicsIHNvdXJjZTogJzEwLjAuMi4wLzI0JywgZGVzY3JpcHRpb246ICdQRycsIHRjcE9wdGlvbnM6IHsgbWluOiA1NDMyLCBtYXg6IDU0MzIgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGVncmVzc1NlY3VyaXR5UnVsZXM6IFt7IHByb3RvY29sOiAnYWxsJywgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0FsbCcgfV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJpdmF0ZVN1Ym5ldC5hZGRPdmVycmlkZSgnc2VjdXJpdHlfbGlzdF9pZHMnLCBbcHJpdmF0ZVNsLmlkXSk7XG4gICAgICAgICAgY29uc3QgYWxsU2VydmljZXMgPSBuZXcgRGF0YU9jaUNvcmVTZXJ2aWNlcyh0aGlzLCAnQWxsU2VydmljZXMnLCB7fSk7XG4gICAgICAgICAgY29uc3Qgc3ZjR3cgPSBuZXcgQ29yZVNlcnZpY2VHYXRld2F5KHRoaXMsICdTZXJ2aWNlR2F0ZXdheScsIHtcbiAgICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXNnd2AsXG4gICAgICAgICAgICBzZXJ2aWNlczogW3sgc2VydmljZUlkOiBhbGxTZXJ2aWNlcy5zZXJ2aWNlcy5nZXQoMCkuaWQgfV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcHJpdlJ0ID0gbmV3IENvcmVSb3V0ZVRhYmxlKHRoaXMsICdQcml2YXRlUm91dGVUYWJsZScsIHtcbiAgICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXByaXZhdGUtcnRgLFxuICAgICAgICAgICAgcm91dGVSdWxlczogW1xuICAgICAgICAgICAgICB7IG5ldHdvcmtFbnRpdHlJZDogc3ZjR3cuaWQsIGRlc3RpbmF0aW9uOiBhbGxTZXJ2aWNlcy5zZXJ2aWNlcy5nZXQoMCkuY2lkckJsb2NrLCBkZXN0aW5hdGlvblR5cGU6ICdTRVJWSUNFX0NJRFJfQkxPQ0snLCBkZXNjcmlwdGlvbjogJ09DSVInIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByaXZhdGVTdWJuZXQuYWRkT3ZlcnJpZGUoJ3JvdXRlX3RhYmxlX2lkJywgcHJpdlJ0LmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmdW5jdGlvbkFwcFN1Ym5ldElkID0gcHJpdmF0ZVN1Ym5ldElkRnJvbUVudiB8fCAocHJpdmF0ZVN1Ym5ldD8uaWQgPz8gJycpO1xuICAgICAgY29uc3QgcHVibGljU3VibmV0SWRGb3JBcGlHdyA9IHB1YmxpY1N1Ym5ldElkRnJvbUVudiB8fCAocHVibGljU3VibmV0Py5pZCA/PyAnJyk7XG5cbiAgICAgIGxldCBhcGlHYXRld2F5OiBBcGlnYXRld2F5R2F0ZXdheSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChzdGFja0FjdGlvbiA9PT0gJ2Z1bGwtc3RhY2snICYmIHB1YmxpY1N1Ym5ldElkRm9yQXBpR3cpIHtcbiAgICAgICAgYXBpR2F0ZXdheSA9IG5ldyBBcGlnYXRld2F5R2F0ZXdheSh0aGlzLCAnQXBpR2F0ZXdheScsIHtcbiAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICBzdWJuZXRJZDogcHVibGljU3VibmV0SWRGb3JBcGlHdyxcbiAgICAgICAgICBlbmRwb2ludFR5cGU6ICdQVUJMSUMnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWFwaS1nYXRld2F5YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9wdGlvbmFsIElBTTogYWxsb3cgQVBJIEdhdGV3YXkgdG8gaW52b2tlIEZ1bmN0aW9ucyBpbiB0aGlzIGNvbXBhcnRtZW50LlxuICAgICAgLy8gT0NJIGRvY3M6IEFMTE9XIGFueS11c2VyIHRvIHVzZSBmdW5jdGlvbnMtZmFtaWx5IGluIGNvbXBhcnRtZW50IDxmdW5jdGlvbnMtY29tcGFydG1lbnQ+XG4gICAgICAvLyAgIHdoZXJlIEFMTCB7cmVxdWVzdC5wcmluY2lwYWwudHlwZT0nQXBpR2F0ZXdheScsIHJlcXVlc3QucmVzb3VyY2UuY29tcGFydG1lbnQuaWQ9JzxhcGlndy1jb21wYXJ0bWVudC1vY2lkPid9XG4gICAgICBjb25zdCBjcmVhdGVBcGlnd1BvbGljeSA9ICEhY29uZmlnLmNyZWF0ZUFwaWd3UG9saWN5IHx8IChwcm9jZXNzLmVudi5PQ0lfQ1JFQVRFX0FQSUdXX1BPTElDWSB8fCAnJykudHJpbSgpID09PSAnMSc7XG4gICAgICBpZiAoY3JlYXRlQXBpZ3dQb2xpY3kgJiYgc3RhY2tBY3Rpb24gPT09ICdmdWxsLXN0YWNrJykge1xuICAgICAgICBjb25zdCBhcGlnd1BvbGljeU5hbWUgPSBgJHtyZXNvdXJjZU5hbWV9LWFwaWd3LWZ1bmN0aW9ucy1hY2Nlc3NgO1xuICAgICAgICBuZXcgSWRlbnRpdHlQb2xpY3kodGhpcywgJ0FwaUdhdGV3YXlGdW5jdGlvbnNQb2xpY3knLCB7XG4gICAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLnRlbmFuY3lJZCxcbiAgICAgICAgICBuYW1lOiBhcGlnd1BvbGljeU5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBBbGxvdyBBUEkgR2F0ZXdheXMgaW4gJHtjb25maWcuY29tcGFydG1lbnRJZH0gdG8gaW52b2tlIEZ1bmN0aW9ucyBpbiAke2NvbmZpZy5jb21wYXJ0bWVudElkfWAsXG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgYEFMTE9XIGFueS11c2VyIHRvIHVzZSBmdW5jdGlvbnMtZmFtaWx5IGluIGNvbXBhcnRtZW50IGlkICR7Y29uZmlnLmNvbXBhcnRtZW50SWR9IHdoZXJlIEFMTCB7cmVxdWVzdC5wcmluY2lwYWwudHlwZT0gJ0FwaUdhdGV3YXknLCByZXF1ZXN0LnJlc291cmNlLmNvbXBhcnRtZW50LmlkID0gJyR7Y29uZmlnLmNvbXBhcnRtZW50SWR9J31gLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgTG9nZ2luZ0xvZ0dyb3VwKHRoaXMsICdMb2dHcm91cCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBhcHBOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYExvZyBncm91cCBmb3IgJHthcHBOYW1lfWAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uQXBwID0gbmV3IEZ1bmN0aW9uc0FwcGxpY2F0aW9uKHRoaXMsICdGdW5jdGlvbkFwcCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBhcHBOYW1lLFxuICAgICAgICBzdWJuZXRJZHM6IFtmdW5jdGlvbkFwcFN1Ym5ldElkXSxcbiAgICAgIH0pO1xuICAgICAgbGV0IG9jaUZ1bmN0aW9uOiBGdW5jdGlvbnNGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICghY29kZU9ubHkpIHtcbiAgICAgICAgb2NpRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25zRnVuY3Rpb24odGhpcywgJ0Z1bmN0aW9uJywge1xuICAgICAgICAgIGFwcGxpY2F0aW9uSWQ6IGZ1bmN0aW9uQXBwLmlkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBjb25maWcuZnVuY3Rpb25OYW1lISxcbiAgICAgICAgICBpbWFnZTogaW1hZ2VVcmwhLFxuICAgICAgICAgIG1lbW9yeUluTWJzOiBjb25maWcuZnVuY3Rpb25NZW1vcnlNYiA/PyAnMjU2JyxcbiAgICAgICAgICB0aW1lb3V0SW5TZWNvbmRzOiBjb25maWcuZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgICAuLi4oY29uZmlnLmZ1bmN0aW9uQ29uZmlnICYmIE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbkNvbmZpZykubGVuZ3RoID4gMCA/IHsgY29uZmlnOiBjb25maWcuZnVuY3Rpb25Db25maWcgfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9jaUZ1bmN0aW9uLmFkZE92ZXJyaWRlKCdkZXBlbmRzX29uJywgW2BudWxsX3Jlc291cmNlLiR7YnVpbGRBbmRQdXNoSW1hZ2VJZCF9YF0pO1xuICAgICAgfVxuICAgICAgbGV0IGZ1bmN0aW9uSWRGb3JHYXRld2F5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvY2lGdW5jdGlvbj8uaWQ7XG4gICAgICBpZiAoc3RhY2tBY3Rpb24gPT09ICdmdWxsLXN0YWNrJyAmJiBhcGlHYXRld2F5ICYmIGNvZGVPbmx5KSB7XG4gICAgICAgIGNvbnN0IGNvZGVPbmx5RnVuY3Rpb24gPSBuZXcgRGF0YU9jaUZ1bmN0aW9uc0Z1bmN0aW9ucyh0aGlzLCAnQ29kZU9ubHlGdW5jdGlvbicsIHtcbiAgICAgICAgICBhcHBsaWNhdGlvbklkOiBmdW5jdGlvbkFwcC5pZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSEsXG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbklkRm9yR2F0ZXdheSA9IGNvZGVPbmx5RnVuY3Rpb24uZnVuY3Rpb25zLmdldCgwKS5pZDtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFja0FjdGlvbiA9PT0gJ2Z1bGwtc3RhY2snICYmIGFwaUdhdGV3YXkgJiYgZnVuY3Rpb25JZEZvckdhdGV3YXkpIHtcbiAgICAgICAgY29uc3QgcGF0aFByZWZpeCA9IGNvbmZpZy5hcGlHd1BhdGhQcmVmaXggPz8gJy8nO1xuICAgICAgICBsZXQgcm91dGVzOiBBcnJheTx7IHBhdGg6IHN0cmluZzsgbWV0aG9kczogc3RyaW5nW107IGJhY2tlbmQ6IHsgdHlwZTogc3RyaW5nOyBmdW5jdGlvbklkOiBzdHJpbmc7IHJlYWRUaW1lb3V0SW5TZWNvbmRzPzogbnVtYmVyIH0gfT47XG4gICAgICAgIGlmIChjb25maWcuYXBpR3dEZXBsb3ltZW50SnNvblBhdGggJiYgZnMuZXhpc3RzU3luYyhjb25maWcuYXBpR3dEZXBsb3ltZW50SnNvblBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICBjb25zdCBzcGVjID0gSlNPTi5wYXJzZShyYXcpIGFzIHsgcm91dGVzPzogQXJyYXk8eyBwYXRoPzogc3RyaW5nOyBtZXRob2RzPzogc3RyaW5nW107IGJhY2tlbmQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB9O1xuICAgICAgICAgIGNvbnN0IHJvdXRlTGlzdCA9IHNwZWM/LnJvdXRlcyA/PyBbXTtcbiAgICAgICAgICByb3V0ZXMgPSByb3V0ZUxpc3QubWFwKChyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiID0gci5iYWNrZW5kID8/IHt9O1xuICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25JZFJhdyA9IChiLmZ1bmN0aW9uSWQgPz8gYi5mdW5jdGlvbl9pZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IHR5cGVvZiBmdW5jdGlvbklkUmF3ID09PSAnc3RyaW5nJyAmJiBmdW5jdGlvbklkUmF3LmluY2x1ZGVzKCcke2Z1bmN0aW9uX2lkfScpXG4gICAgICAgICAgICAgID8gZnVuY3Rpb25JZEZvckdhdGV3YXlcbiAgICAgICAgICAgICAgOiAoZnVuY3Rpb25JZFJhdyA/PyBmdW5jdGlvbklkRm9yR2F0ZXdheSk7XG4gICAgICAgICAgICBjb25zdCByZWFkVGltZW91dCA9IChiLnJlYWRUaW1lb3V0SW5TZWNvbmRzID8/IGIucmVhZF90aW1lb3V0X2luX3NlY29uZHMpIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBhdGg6IHIucGF0aCA/PyAnL3twYXRoKn0nLFxuICAgICAgICAgICAgICBtZXRob2RzOiBBcnJheS5pc0FycmF5KHIubWV0aG9kcykgPyByLm1ldGhvZHMgOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IChiLnR5cGUgYXMgc3RyaW5nKSA/PyAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbklkLFxuICAgICAgICAgICAgICAgIC4uLihyZWFkVGltZW91dCAhPSBudWxsID8geyByZWFkVGltZW91dEluU2Vjb25kczogcmVhZFRpbWVvdXQgfSA6IHt9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gY29uZmlnLmFwaUd3Um91dGVQYXRoID8/ICcve3BhdGgqfSc7XG4gICAgICAgICAgY29uc3QgbWV0aG9kcyA9IGNvbmZpZy5hcGlHd01ldGhvZHM/Lmxlbmd0aCA/IGNvbmZpZy5hcGlHd01ldGhvZHMgOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXTtcbiAgICAgICAgICByb3V0ZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhdGg6IHJvdXRlUGF0aCxcbiAgICAgICAgICAgICAgbWV0aG9kcyxcbiAgICAgICAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IGZ1bmN0aW9uSWRGb3JHYXRld2F5LFxuICAgICAgICAgICAgICAgIHJlYWRUaW1lb3V0SW5TZWNvbmRzOiBjb25maWcuZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlEZXBsb3ltZW50ID0gbmV3IEFwaWdhdGV3YXlEZXBsb3ltZW50KHRoaXMsICdBcGlEZXBsb3ltZW50Jywge1xuICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgIGdhdGV3YXlJZDogYXBpR2F0ZXdheS5pZCxcbiAgICAgICAgICBwYXRoUHJlZml4LFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWRlcGxveW1lbnRgLFxuICAgICAgICAgIHNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9jaUZ1bmN0aW9uKSBhcGlEZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeShvY2lGdW5jdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9nOiBTRVJWSUNFIGxvZyBmb3IgdGhlIEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiAoY2F0ZWdvcnkgaW52b2tlKVxuICAgICAgY29uc3QgZXhlY3V0aW9uTG9nID0gbmV3IExvZ2dpbmdMb2codGhpcywgJ0V4ZWN1dGlvbkxvZycsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke2FwcE5hbWV9LWludm9rZWAsXG4gICAgICAgIGxvZ0dyb3VwSWQ6IGxvZ0dyb3VwLmlkLFxuICAgICAgICBsb2dUeXBlOiAnU0VSVklDRScsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnaW52b2tlJyxcbiAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGlzIHNlcnZpY2UgbG9nIHdpdGggdGhlIEZ1bmN0aW9ucyBhcHBsaWNhdGlvblxuICAgICAgICAgICAgcmVzb3VyY2U6IGZ1bmN0aW9uQXBwLmlkLFxuICAgICAgICAgICAgc2VydmljZTogJ2Z1bmN0aW9ucycsXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAnT0NJU0VSVklDRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZXhlY3V0aW9uTG9nLm5vZGUuYWRkRGVwZW5kZW5jeShmdW5jdGlvbkFwcCk7XG5cbiAgICAgIC8vIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBpcyB3cml0dGVuIGJ5OiBucHggb2NkayB3cml0ZS1sb2ctY29uZmlnIChydW4gYWZ0ZXIgZGVwbG95KS5cblxuICAgICAgaWYgKG9jaXJSZXBvc2l0b3J5KSB7XG4gICAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ29jaXJfcmVwb3NpdG9yeV9uYW1lJywgeyB2YWx1ZTogb2NpclJlcG9zaXRvcnkuZGlzcGxheU5hbWUsIGRlc2NyaXB0aW9uOiAnT0NJUiByZXBvc2l0b3J5IG5hbWUnIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGFwaUdhdGV3YXkpIHtcbiAgICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnYXBpX2dhdGV3YXlfaG9zdCcsIHsgdmFsdWU6IGFwaUdhdGV3YXkuaG9zdG5hbWUsIGRlc2NyaXB0aW9uOiAnQVBJIEdhdGV3YXkgaG9zdG5hbWUnIH0pO1xuICAgICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9pbnZva2VfdXJsJywgeyB2YWx1ZTogYGh0dHBzOi8vJHthcGlHYXRld2F5Lmhvc3RuYW1lfWAsIGRlc2NyaXB0aW9uOiAnQmFzZSBVUkwgdG8gaW52b2tlIHRoZSBmdW5jdGlvbicgfSk7XG4gICAgICB9XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9hcHBfaWQnLCB7IHZhbHVlOiBmdW5jdGlvbkFwcC5pZCwgZGVzY3JpcHRpb246ICdPQ0kgRnVuY3Rpb25zIEFwcGxpY2F0aW9uIE9DSUQnIH0pO1xuICAgICAgaWYgKG9jaUZ1bmN0aW9uKSB7XG4gICAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2Z1bmN0aW9uX2lkJywgeyB2YWx1ZTogb2NpRnVuY3Rpb24uaWQsIGRlc2NyaXB0aW9uOiAnT0NJIEZ1bmN0aW9uIE9DSUQnIH0pO1xuICAgICAgfVxuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnbG9nX2dyb3VwX2lkJywgeyB2YWx1ZTogbG9nR3JvdXAuaWQsIGRlc2NyaXB0aW9uOiAnT0NJIExvZyBHcm91cCBPQ0lEIGZvciB0aGUgYXBwbGljYXRpb24nIH0pO1xuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnZXhlY3V0aW9uX2xvZ19pZCcsIHsgdmFsdWU6IGV4ZWN1dGlvbkxvZy5pZCwgZGVzY3JpcHRpb246ICdPQ0kgRnVuY3Rpb25zIGV4ZWN1dGlvbiBsb2cgT0NJRCcgfSk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2Ugb3JhY2xlL29jaSAoVGVycmFmb3JtIFJlZ2lzdHJ5KSBzbyB0ZXJyYWZvcm0gaW5pdCB1c2VzIGl0IG9uIE9MOCBhbmQgZWxzZXdoZXJlOyBtdXN0IHJ1biBhZnRlciBwcm92aWRlciBpcyBhZGRlZFxuICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMub2NpJywge1xuICAgICAgc291cmNlOiAnb3JhY2xlL29jaScsXG4gICAgICAvLyBQaW4gdG8gPCA1LjQ3LjA6IDUuNDcuMCBjcmFzaGVzIG9uIGRhcndpbl9hcm02NDsgNS40Ni54IGFuZCBMaW51eCAoT0w4KSB3b3JrXG4gICAgICB2ZXJzaW9uOiAnPj0gNS4wLjAsIDwgNS40Ny4wJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
package/lib/oci-stack.ts CHANGED
@@ -132,9 +132,13 @@ export class OciStack extends TerraformStack {
132
132
  constructor(scope: Construct, id: string, config: OciStackConfig) {
133
133
  super(scope, id);
134
134
 
135
- // Configure Terraform backend (if not local)
136
- if (config.backend && config.backend.type !== 'local') {
137
- if (config.backend.type === 'oci') {
135
+ // Keep local state in the caller's project, never under this npm package.
136
+ if (config.backend) {
137
+ if (config.backend.type === 'local') {
138
+ this.addOverride('terraform.backend', {
139
+ local: { path: config.backend.path },
140
+ });
141
+ } else if (config.backend.type === 'oci') {
138
142
  // OCI native backend
139
143
  this.addOverride('terraform.backend', {
140
144
  oci: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikarinneoracle/oci-cdk-code-only-preview",
3
- "version": "0.0.35",
3
+ "version": "0.0.36",
4
4
  "description": "OCI CDK stack for OCI Functions, API Gateway, and related infrastructure",
5
5
  "main": "lib/index.js",
6
6
  "bin": {