deployable-awscdk-app-ts 0.1.778 → 0.1.779

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 CHANGED
@@ -887,29 +887,34 @@
887
887
  },
888
888
  {
889
889
  "docs": {
890
- "returns": "JobStep",
890
+ "returns": "The job definition for annotating the PR with the diff output",
891
891
  "stability": "experimental",
892
- "summary": "Step to check if there is an active deployment for a specific environment."
892
+ "summary": "Get the job to annotate the PR with the diff output for all environments."
893
893
  },
894
894
  "locationInModule": {
895
895
  "filename": "src/steps.ts",
896
896
  "line": 717
897
897
  },
898
- "name": "getAnnotateDiffStepForEnvironment",
898
+ "name": "getAnnotateDiffJob",
899
899
  "parameters": [
900
900
  {
901
901
  "docs": {
902
- "summary": "The environment to check."
902
+ "summary": "The names of the jobs that the annotation job depends on."
903
903
  },
904
- "name": "environment",
904
+ "name": "dependentJobNames",
905
905
  "type": {
906
- "primitive": "string"
906
+ "collection": {
907
+ "elementtype": {
908
+ "primitive": "string"
909
+ },
910
+ "kind": "array"
911
+ }
907
912
  }
908
913
  }
909
914
  ],
910
915
  "returns": {
911
916
  "type": {
912
- "fqn": "projen.github.workflows.JobStep"
917
+ "fqn": "projen.github.workflows.Job"
913
918
  }
914
919
  }
915
920
  },
@@ -1076,7 +1081,7 @@
1076
1081
  },
1077
1082
  "locationInModule": {
1078
1083
  "filename": "src/steps.ts",
1079
- "line": 764
1084
+ "line": 784
1080
1085
  },
1081
1086
  "name": "getDiffAnnotationJobForEnvironment",
1082
1087
  "parameters": [
@@ -1114,7 +1119,7 @@
1114
1119
  },
1115
1120
  "locationInModule": {
1116
1121
  "filename": "src/steps.ts",
1117
- "line": 734
1122
+ "line": 753
1118
1123
  },
1119
1124
  "name": "getFormattedDiffAnnotationCommentStepForEnvironment",
1120
1125
  "parameters": [
@@ -1565,7 +1570,7 @@
1565
1570
  "immutable": true,
1566
1571
  "locationInModule": {
1567
1572
  "filename": "src/steps.ts",
1568
- "line": 810
1573
+ "line": 834
1569
1574
  },
1570
1575
  "name": "diffAnnotationJobs",
1571
1576
  "type": {
@@ -1962,6 +1967,6 @@
1962
1967
  "symbolId": "src/types:EnvironmentOptions"
1963
1968
  }
1964
1969
  },
1965
- "version": "0.1.778",
1966
- "fingerprint": "tzfUhA66FkzNOrGem8f8WcCgfgHbILEFUbIvMdZbe9A="
1970
+ "version": "0.1.779",
1971
+ "fingerprint": "/EHTMvIqiCE8q2b3PFM51TiB7cZrNjnkhW6aq16qtKE="
1967
1972
  }
package/API.md CHANGED
@@ -5069,7 +5069,7 @@ The factory properties.
5069
5069
 
5070
5070
  | **Name** | **Description** |
5071
5071
  | --- | --- |
5072
- | <code><a href="#deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAnnotateDiffStepForEnvironment">getAnnotateDiffStepForEnvironment</a></code> | Step to check if there is an active deployment for a specific environment. |
5072
+ | <code><a href="#deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAnnotateDiffJob">getAnnotateDiffJob</a></code> | Get the job to annotate the PR with the diff output for all environments. |
5073
5073
  | <code><a href="#deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAssumeAwsRoleStepForEnvironment">getAssumeAwsRoleStepForEnvironment</a></code> | Step to assume an AWS role for a specific environment. |
5074
5074
  | <code><a href="#deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getCheckActiveDeploymentStepForEnvironment">getCheckActiveDeploymentStepForEnvironment</a></code> | Step to check if there is an active deployment for a specific environment. |
5075
5075
  | <code><a href="#deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDeploymentJobPrerequisiteJobIds">getDeploymentJobPrerequisiteJobIds</a></code> | Get the IDs of the jobs that must be completed before the specified environment's deployment job. |
@@ -5085,19 +5085,19 @@ The factory properties.
5085
5085
 
5086
5086
  ---
5087
5087
 
5088
- ##### `getAnnotateDiffStepForEnvironment` <a name="getAnnotateDiffStepForEnvironment" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAnnotateDiffStepForEnvironment"></a>
5088
+ ##### `getAnnotateDiffJob` <a name="getAnnotateDiffJob" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAnnotateDiffJob"></a>
5089
5089
 
5090
5090
  ```typescript
5091
- public getAnnotateDiffStepForEnvironment(environment: string): JobStep
5091
+ public getAnnotateDiffJob(dependentJobNames: string[]): Job
5092
5092
  ```
5093
5093
 
5094
- Step to check if there is an active deployment for a specific environment.
5094
+ Get the job to annotate the PR with the diff output for all environments.
5095
5095
 
5096
- ###### `environment`<sup>Required</sup> <a name="environment" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAnnotateDiffStepForEnvironment.parameter.environment"></a>
5096
+ ###### `dependentJobNames`<sup>Required</sup> <a name="dependentJobNames" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getAnnotateDiffJob.parameter.dependentJobNames"></a>
5097
5097
 
5098
- - *Type:* string
5098
+ - *Type:* string[]
5099
5099
 
5100
- The environment to check.
5100
+ The names of the jobs that the annotation job depends on.
5101
5101
 
5102
5102
  ---
5103
5103
 
package/lib/index.js CHANGED
@@ -215,5 +215,5 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
215
215
  }
216
216
  exports.DeployableAwsCdkTypeScriptApp = DeployableAwsCdkTypeScriptApp;
217
217
  _a = JSII_RTTI_SYMBOL_1;
218
- DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.778" };
218
+ DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.779" };
219
219
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBNEQ7QUFFNUQsbUNBQW9FO0FBQ3BFLG1DQUF3TTtBQUN4TSxtQ0FBOEM7QUFFOUMsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUNqQywwQ0FBd0I7QUFFeEIsTUFBYSw2QkFBOEIsU0FBUSxlQUFNLENBQUMsbUJBQW1CO0lBa0IzRSxZQUFZLE9BQTZDO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQzNDLEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQUM7UUFDcEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUkseUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksS0FBSztZQUMzQyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7U0FDOUYsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUV2SCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7UUFBQSxDQUFDO1FBRTVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFFLENBQUM7WUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLGdHQUFnRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUFBLENBQUM7UUFFbE4sTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25HLE1BQU0sYUFBYSxHQUFHLGFBQWEsY0FBYyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSwyQkFBMkIsQ0FBQztRQUN6RyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNwSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN4RCxXQUFXO1lBQ1gsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3QixXQUFXO1lBQ1gsSUFBSSxFQUFFLEdBQUcsYUFBYSxZQUFZO1NBQ25DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsT0FBTyxZQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUFBLE9BQU87UUFBQSxDQUFDO1FBRTdDLElBQUksQ0FBQyxVQUFVLENBQ2Isc0JBQXNCLEVBQ3RCLDhCQUE4QixDQUMvQixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFckUsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxVQUFVLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDeEQsVUFBVSxDQUFDLElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ25GLFVBQVUsQ0FBQyxJQUFJLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNqRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNoRCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMzQyxVQUFVLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEksVUFBVSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3pELFVBQVUsQ0FBQyxJQUFJLENBQUMseURBQXlELENBQUMsQ0FBQztRQUMzRSxVQUFVLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7UUFDMUUsVUFBVSxDQUFDLElBQUksQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQzFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNwRCxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzFCLElBQUksRUFBRSw0QkFBNEIsUUFBUSxFQUFFO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFBQSxPQUFPO1FBQUEsQ0FBQztRQUV0RCxNQUFNLFdBQVcsR0FBRyxJQUFJLGlEQUF5QyxDQUFDLElBQUksRUFBRTtZQUN0RSxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCO1lBQ2pELGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQjtZQUMxRCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQjtZQUM3RCxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNuQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQ3JELFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsWUFBWTtTQUNyRCxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUFBLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUFBLENBQUM7UUFFNUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQzNCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEdBQUcsS0FBMkI7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLGtCQUFrQixDQUFDLGVBQXFDO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsR0FBRyxJQUFJLENBQUMsYUFBYTtZQUNyQixZQUFZLEVBQUUsZUFBZTtTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw0Q0FBNEMsQ0FBQyxNQUFjLEVBQUUscUJBQWdDO1FBQzNGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN4RSxJQUFJLHFCQUFxQixJQUFJLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQUEsT0FBTyxXQUFXLENBQUM7WUFBQSxDQUFDO1lBRXpJLE9BQU87Z0JBQ0wsR0FBRyxXQUFXO2dCQUNkLHdCQUF3QixFQUFFLE1BQU07YUFDakMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkNBQTJDLENBQUMsTUFBYyxFQUFFLHFCQUFnQztRQUMxRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDeEUsSUFBSSxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUFBLE9BQU8sV0FBVyxDQUFDO1lBQUEsQ0FBQztZQUV6SSxPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCx1QkFBdUIsRUFBRSxNQUFNO2FBQ2hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sYUFBYTtRQUVuQixNQUFNLFdBQVcsR0FBRyxJQUFJLGlEQUF5QyxDQUFDLElBQUksRUFBRTtZQUN0RSxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVk7WUFDcEQscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUI7WUFDMUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0I7WUFDN0QsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDbkMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtTQUN0RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVDQUF1QyxDQUFDLHVCQUEwRDtRQUN2RyxpREFBeUMsQ0FBQyx5Q0FBeUMsQ0FDakYsSUFBSSxDQUFDLGFBQWEsRUFDbEIsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQzs7QUEvTkgsc0VBZ09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c2NkaywgU291cmNlQ29kZSwgVGFzaywgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0T3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB9IGZyb20gJy4vc3RlcHMnO1xuaW1wb3J0IHsgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBEaWZmT3V0cHV0T3B0aW9ucywgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zLCBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldE1ham9yTm9kZVZlcnNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RlcHMnO1xuXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHAgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG5cbiAgLyoqXG4gICAqIFRhc2sgdG8gZGVwbG95IHlvdXIgYXBwLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlcGxveVdvcmtmbG93VGFzazogVGFzaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlcGxveWFibGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJhdGVOdm1yYzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dOb2RlVmVyc2lvbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlQXJ0aWZhY3RPcHRpb25zPzogQ29kZUFydGlmYWN0T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lKb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlmZk91dHB1dE9wdGlvbnM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwRGlmZk91dHB1dE9wdGlvbnM7XG5cbiAgcHJvdGVjdGVkIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnM7XG4gIHByb3RlY3RlZCBlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucykge1xuICAgIGNvbnN0IGRlcGxveWFibGUgPSBvcHRpb25zLnJlbGVhc2UgPz8gdHJ1ZTtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVsZWFzZTogZGVwbG95YWJsZSxcbiAgICB9KTtcbiAgICB0aGlzLmRlcGxveWFibGUgPSBkZXBsb3lhYmxlO1xuICAgIHRoaXMuZ2VuZXJhdGVOdm1yYyA9IG9wdGlvbnMuZ2VuZXJhdGVOdm1yYyA/PyB0cnVlO1xuICAgIHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID0gb3B0aW9ucy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPz8gZmFsc2U7XG4gICAgdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uO1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucyA9IG9wdGlvbnMuZGVwbG95T3B0aW9ucyA/PyB7IGVudmlyb25tZW50czogW10gfTtcbiAgICB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnMgPSBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM7XG4gICAgdGhpcy5kZXBsb3lKb2JTdHJhdGVneSA9IHRoaXMuZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSA/PyBEZXBsb3lKb2JTdHJhdGVneS5NQVRSSVg7XG4gICAgdGhpcy5kaWZmT3V0cHV0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZTogb3B0aW9ucy5kaWZmT3V0cHV0Py5lbmFibGUgPz8gZmFsc2UsXG4gICAgICBhbm5vdGF0ZU9uQnVpbGQ6IChvcHRpb25zLmRpZmZPdXRwdXQ/LmFubm90YXRlT25CdWlsZCA/PyBvcHRpb25zLmRpZmZPdXRwdXQ/LmVuYWJsZSA/PyBmYWxzZSksXG4gICAgfTtcblxuICAgIHRoaXMuYWRkRGV2RGVwcygnZGVwbG95YWJsZS1hd3NjZGstYXBwLXRzJyk7XG4gICAgdGhpcy5hZGREaWZmT3V0cHV0U2NyaXB0KCk7XG5cbiAgICBpZiAoIWRlcGxveWFibGUpIHt0aGlzLmxvZ2dlci53YXJuKCdUaGUgcHJvamVjdCBpcyBleHBsaWNpdGx5IHNldCB0byBub3QgcmVsZWFzZSwgbWFrZSBzdXJlIHRoaXMgaXMgZGVzaXJlZCBzZXR0aW5nJyk7fVxuXG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVOdm1yYyAmJiAhdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uKSB7dGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gJzE0LjE4LjEnO31cblxuICAgIGlmICh0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnQgJiYgdGhpcy5tYWpvck5vZGVWZXJzaW9uID49IDE4KSB7dGhyb3cgbmV3IEVycm9yKGBucG1Db25maWdFbnZpcm9ubWVudCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIHZlcnNpb24gMTguIEN1cnJlbnQgdmVyc2lvbiBpcyAke3RoaXMubm9kZVZlcnNpb259YCk7fVxuXG4gICAgY29uc3QgZGVwbG95QXJndW1lbnQgPSB0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJuID8gYCAke3RoaXMuZGVwbG95T3B0aW9ucy5zdGFja1BhdHRlcm59YDogJyc7XG4gICAgY29uc3QgZGVwbG95Q29tbWFuZCA9IGBjZGsgZGVwbG95JHtkZXBsb3lBcmd1bWVudH0gJHt0aGlzLmdldE1ldGhvZEFyZ3VtZW50KCl9IC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlcmA7XG4gICAgY29uc3QgcmVxdWlyZWRFbnYgPSB0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnQgPyBbYG5wbV9jb25maWdfJHt0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnR9YF0gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXBsb3lXb3JrZmxvd1Rhc2sgPSB0aGlzLmFkZFRhc2soJ2RlcGxveTp3b3JrZmxvdycsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogZGVwbG95Q29tbWFuZCxcbiAgICB9KTtcbiAgICB0aGlzLmFkZFRhc2soJ2RlcGxveTpob3Rzd2FwJywge1xuICAgICAgcmVxdWlyZWRFbnYsXG4gICAgICBleGVjOiBgJHtkZXBsb3lDb21tYW5kfSAtLWhvdHN3YXBgLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgbWFqb3Igbm9kZSB2ZXJzaW9uIHNldCBmb3IgdGhlIHByb2plY3RcbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIGdldCBtYWpvck5vZGVWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGdldE1ham9yTm9kZVZlcnNpb24odGhpcy5ub2RlVmVyc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGhvZEFyZ3VtZW50KCkge1xuICAgIHJldHVybiBgLS1tZXRob2QgJHt0aGlzLmRlcGxveU9wdGlvbnMubWV0aG9kID8/ICdjaGFuZ2Utc2V0J31gO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBkaWZmIG91dHB1dCBpcyBlbmFibGVkLCBhZGRzIGEgc2NyaXB0IGFuZCBhIGpvYiBzdGVwIHRvIGdlbmVyYXRlIHRoZSBDREsgZGlmZiBvdXRwdXQgdG8gYSBmaWxlIGluIGNkay5vdXRcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHJpdmF0ZSBhZGREaWZmT3V0cHV0U2NyaXB0KCkge1xuICAgIGlmICghdGhpcy5kaWZmT3V0cHV0T3B0aW9ucy5lbmFibGUpIHtyZXR1cm47fVxuXG4gICAgdGhpcy5hZGREZXZEZXBzKFxuICAgICAgJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJyxcbiAgICAgICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJyxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oJ3NjcmlwdHMnLCAnZ2VuZXJhdGVEaWZmT3V0cHV0LnRzJyk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gbmV3IFNvdXJjZUNvZGUodGhpcywgZmlsZVBhdGgpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImltcG9ydCB7Y3JlYXRlV3JpdGVTdHJlYW19IGZyb20gJ2ZzJ1wiKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoXCJpbXBvcnQge2Zvcm1hdERpZmZlcmVuY2VzfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcIik7XG4gICAgc291cmNlQ29kZS5saW5lKFwiaW1wb3J0IHtUb29sa2l0fSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XCIpO1xuICAgIHNvdXJjZUNvZGUubGluZSgnJyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdjb25zdCBjZGsgPSBuZXcgVG9vbGtpdCh7fSk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCcnKTtcbiAgICBzb3VyY2VDb2RlLm9wZW4oJ2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKGBjb25zdCBjeCA9IGF3YWl0IGNkay5mcm9tQ2RrQXBwKCd0cy1ub2RlLXRyYW5zcGlsZS1vbmx5ICR7cGF0aC5wb3NpeC5qb2luKHRoaXMuc3JjZGlyLCB0aGlzLmFwcEVudHJ5cG9pbnQpfScpO2ApO1xuICAgIHNvdXJjZUNvZGUubGluZSgnY29uc3QgZGlmZnMgPSBhd2FpdCBjZGsuZGlmZihjeCwge30pOycpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKCcuL2Nkay5vdXQvZGlmZi5sb2cnKTtcIik7XG4gICAgc291cmNlQ29kZS5vcGVuKCdPYmplY3QuZW50cmllcyhkaWZmcykuZm9yRWFjaCgoW3N0YWNrTmFtZSwgZGlmZl0pID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3N0cmVhbS53cml0ZShgRGlmZmVyZW5jZSBmb3Igc3RhY2sgJHtzdGFja05hbWV9OlxcXFxuYCk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdmb3JtYXREaWZmZXJlbmNlcyhzdHJlYW0sIGRpZmYpOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30pOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30nKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJycpO1xuICAgIHNvdXJjZUNvZGUub3BlbignbWFpbigpLmNhdGNoKChlcnIpID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ2NvbnNvbGUuZXJyb3IoZXJyKTsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3Byb2Nlc3MuZXhpdCgxKTsnKTtcbiAgICBzb3VyY2VDb2RlLmNsb3NlKCd9KTsnKTtcblxuICAgIHRoaXMuYWRkVGFzaygnZGlmZjpvdXRwdXQnLCB7XG4gICAgICBleGVjOiBgdHMtbm9kZSAtLXRyYW5zcGlsZS1vbmx5ICR7ZmlsZVBhdGh9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZGlmZiBvdXRwdXQgaXMgZW5hYmxlZCB3aXRoIGFubm90YXRpb24sIGFkZHMgdGhlIGRpZmYgb3V0cHV0IGdlbmVyYXRpb24gc3RlcCBhbmQgdGhlIGFubm90YXRpb24gc3RlcHMgdG8gdGhlIGJ1aWxkIGpvYnNcbiAgICogVGhlIGFubm90YXRpb24gc3RlcHMgd2lsbCBhZGQgYSBjb21tZW50IHRvIHRoZSBHaXRIdWIgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXQsIGFuZCBhbHNvIGFkZCBhbiBhbm5vdGF0aW9uIHRvIHRoZSBsaW5lcyBvZiBjb2RlIHRoYXQgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBkZXBsb3llZCBzdGFjayBhbmQgdGhlIGNoYW5nZXMgbWFkZSBvbiBQUlxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwcml2YXRlIGFkZERpZmZBbm5vdGF0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaWZmT3V0cHV0T3B0aW9ucy5hbm5vdGF0ZU9uQnVpbGQpIHtyZXR1cm47fVxuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCxcbiAgICAgIGRlcGxveU9wdGlvbnM6IHRoaXMuZGVwbG95T3B0aW9ucyxcbiAgICAgIHByZUluc3RhbGxUYXNrTmFtZTogdGhpcy5kZXBsb3lPcHRpb25zLnRhc2tUb1J1blByZUluc3RhbGwsXG4gICAgICBucG1Db25maWdFbnZpcm9ubWVudDogdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50LFxuICAgICAgam9iU3RyYXRlZ3k6IHRoaXMuZGVwbG95Sm9iU3RyYXRlZ3ksXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llczogdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICAgIGF1dGhQcm92aWRlcjogdGhpcy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hdXRoUHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZW50cmllcyhzdGVwRmFjdG9yeS5kaWZmQW5ub3RhdGlvbkpvYnMpLmZvckVhY2goKFtuYW1lLCBqb2JdKSA9PiB7XG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3c/LmFkZFBvc3RCdWlsZEpvYihuYW1lLCBqb2IpO1xuICAgIH0pO1xuICB9XG5cbiAgc3ludGgoKSB7XG4gICAgaWYgKHRoaXMuZGVwbG95YWJsZSkge3RoaXMuYWRkRGVwbG95Sm9icygpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMpIHtcbiAgICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLm52bXJjJywge1xuICAgICAgICBsaW5lczogW3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyAnJ10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERpZmZBbm5vdGF0aW9uKCk7XG5cbiAgICBzdXBlci5zeW50aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgZW52aXJvbm1lbnRzIHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKiBAcGFyYW0gaXRlbXMgbGlzdCBvZiBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqL1xuICBhZGRFbnZpcm9ubWVudHMoLi4uaXRlbXM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5wdXNoKC4uLml0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRW52aXJvbm1lbnRzKG5ld0Vudmlyb25tZW50czogRW52aXJvbm1lbnRPcHRpb25zW10pIHtcbiAgICB0aGlzLmRlcGxveU9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudHM6IG5ld0Vudmlyb25tZW50cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwb3N0OmRlcGxveVwiXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE5hbWVGaWx0ZXIgdGhlIG5hbWUgb2YgZW52aXJvbm1lbnRzIHRvIGFkZCB0aGUgc2NyaXB0cyB0bywgaWYgbm90IHByb3ZpZGVkIG9yIGVtcHR5IHdpbGwgdXBkYXRlIGFsbFxuICAgKi9cbiAgdXBkYXRlUG9zdERlcGxveVdvcmtmbG93U2NyaXB0VG9FbnZpcm9ubWVudHMoc2NyaXB0OiBzdHJpbmcsIGVudmlyb25tZW50TmFtZUZpbHRlcj86IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3RW52aXJvbm1lbnRzID0gdGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgaWYgKGVudmlyb25tZW50TmFtZUZpbHRlciAmJiBlbnZpcm9ubWVudE5hbWVGaWx0ZXIubGVuZ3RoID4gMCAmJiAhZW52aXJvbm1lbnROYW1lRmlsdGVyLmluY2x1ZGVzKGVudmlyb25tZW50Lm5hbWUpKSB7cmV0dXJuIGVudmlyb25tZW50O31cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZW52aXJvbm1lbnQsXG4gICAgICAgIHBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHByZURlcGxveVdvcmtmbG93U2NyaXB0IGZvciBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIHNjcmlwdCB0aGUgc2NyaXB0IHRvIGJlIGFkZGVkLCBmb3IgZXhhbXBsZSBcInByZTpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVByZURlcGxveVdvcmtmbG93U2NyaXB0VG9FbnZpcm9ubWVudHMoc2NyaXB0OiBzdHJpbmcsIGVudmlyb25tZW50TmFtZUZpbHRlcj86IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3RW52aXJvbm1lbnRzID0gdGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgaWYgKGVudmlyb25tZW50TmFtZUZpbHRlciAmJiBlbnZpcm9ubWVudE5hbWVGaWx0ZXIubGVuZ3RoID4gMCAmJiAhZW52aXJvbm1lbnROYW1lRmlsdGVyLmluY2x1ZGVzKGVudmlyb25tZW50Lm5hbWUpKSB7cmV0dXJuIGVudmlyb25tZW50O31cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZW52aXJvbm1lbnQsXG4gICAgICAgIHByZURlcGxveVdvcmtmbG93U2NyaXB0OiBzY3JpcHQsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRW52aXJvbm1lbnRzKG5ld0Vudmlyb25tZW50cyk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlcGxveUpvYnMoKSB7XG5cbiAgICBjb25zdCBzdGVwRmFjdG9yeSA9IG5ldyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSh0aGlzLCB7XG4gICAgICBhdXRoUHJvdmlkZXI6IHRoaXMuY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyLFxuICAgICAgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCxcbiAgICAgIGRlcGxveU9wdGlvbnM6IHRoaXMuZGVwbG95T3B0aW9ucyxcbiAgICAgIHByZUluc3RhbGxUYXNrTmFtZTogdGhpcy5kZXBsb3lPcHRpb25zLnRhc2tUb1J1blByZUluc3RhbGwsXG4gICAgICBucG1Db25maWdFbnZpcm9ubWVudDogdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50LFxuICAgICAgam9iU3RyYXRlZ3k6IHRoaXMuZGVwbG95Sm9iU3RyYXRlZ3ksXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llczogdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICB9KTtcblxuICAgIHRoaXMucmVsZWFzZT8uYWRkSm9icyhzdGVwRmFjdG9yeS5kZXBsb3ltZW50Sm9icyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudERlcGVuZGVuY2llcyBhbiBvYmplY3QgZGVmaW5pbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gZW52aXJvbm1lbnRzXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKGVudmlyb25tZW50RGVwZW5kZW5jaWVzOiBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeS52YWxpZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhcbiAgICAgIHRoaXMuZGVwbG95T3B0aW9ucyxcbiAgICAgIGVudmlyb25tZW50RGVwZW5kZW5jaWVzLFxuICAgICk7XG5cbiAgICB0aGlzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzID0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0iXX0=
package/lib/steps.d.ts CHANGED
@@ -201,11 +201,11 @@ export declare class DeployableAwsCdkTypeScriptAppStepsFactory {
201
201
  */
202
202
  get generateDiffStep(): JobStep;
203
203
  /**
204
- * Step to check if there is an active deployment for a specific environment
205
- * @param environment The environment to check
206
- * @returns JobStep
204
+ * Get the job to annotate the PR with the diff output for all environments
205
+ * @param dependentJobNames The names of the jobs that the annotation job depends on
206
+ * @returns The job definition for annotating the PR with the diff output
207
207
  */
208
- getAnnotateDiffStepForEnvironment(environment: string): JobStep;
208
+ getAnnotateDiffJob(dependentJobNames: string[]): Job;
209
209
  /**
210
210
  * Get the step to format the diff output into a GitHub annotation comment for a specific environment
211
211
  * @param environment The environment to format the diff for
package/lib/steps.js CHANGED
@@ -517,20 +517,39 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
517
517
  return this.getRunScriptStep('diff:output', 'Generate Diff Output', true);
518
518
  }
519
519
  /**
520
- * Step to check if there is an active deployment for a specific environment
521
- * @param environment The environment to check
522
- * @returns JobStep
520
+ * Get the job to annotate the PR with the diff output for all environments
521
+ * @param dependentJobNames The names of the jobs that the annotation job depends on
522
+ * @returns The job definition for annotating the PR with the diff output
523
523
  */
524
- getAnnotateDiffStepForEnvironment(environment) {
524
+ getAnnotateDiffJob(dependentJobNames) {
525
525
  return {
526
- name: 'Annotate PR with Diff Output',
527
- uses: 'mshick/add-pr-comment@v3',
528
- with: {
529
- 'message-id': `diff-output-${environment}`,
530
- 'refresh-message-position': true,
531
- 'message': `\${{ steps.${formattedDiffAnnotationCommentStepId}.outputs.data }}`,
526
+ runsOn: ['ubuntu-latest'],
527
+ needs: dependentJobNames,
528
+ permissions: {
529
+ contents: workflows_model_1.JobPermission.READ,
530
+ pullRequests: workflows_model_1.JobPermission.WRITE,
532
531
  },
532
+ steps: [
533
+ {
534
+ name: 'Annotate PR with Diff Output',
535
+ uses: 'mshick/add-pr-comment@v3',
536
+ with: {
537
+ 'message-id': 'diff-output',
538
+ 'refresh-message-position': true,
539
+ 'message': dependentJobNames.map(jobName => `\${{ steps.${jobName}.outputs.${formattedDiffAnnotationCommentStepId} }}`).join('\n'),
540
+ },
541
+ },
542
+ ],
533
543
  };
544
+ // return {
545
+ // name: 'Annotate PR with Diff Output',
546
+ // uses: 'mshick/add-pr-comment@v3',
547
+ // with: {
548
+ // 'message-id': `diff-output-${environment}`,
549
+ // 'refresh-message-position': true,
550
+ // 'message': `\${{ steps.${formattedDiffAnnotationCommentStepId}.outputs.data }}`,
551
+ // },
552
+ // };
534
553
  }
535
554
  /**
536
555
  * Get the step to format the diff output into a GitHub annotation comment for a specific environment
@@ -556,6 +575,7 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
556
575
  'done',
557
576
  "echo '\`\`\`' >> $GITHUB_OUTPUT",
558
577
  'echo "</details>" >> $GITHUB_OUTPUT',
578
+ 'echo "" >> $GITHUB_OUTPUT',
559
579
  'echo "EOF" >> $GITHUB_OUTPUT',
560
580
  ].join('\n'),
561
581
  };
@@ -577,10 +597,15 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
577
597
  permissions: {
578
598
  contents: workflows_model_1.JobPermission.READ,
579
599
  idToken: this.props.authProvider === javascript_1.CodeArtifactAuthProvider.GITHUB_OIDC ? workflows_model_1.JobPermission.WRITE : undefined,
580
- pullRequests: workflows_model_1.JobPermission.WRITE,
581
600
  },
582
601
  env: deployJobEnv,
583
602
  steps: [],
603
+ outputs: {
604
+ [formattedDiffAnnotationCommentStepId]: {
605
+ stepId: formattedDiffAnnotationCommentStepId,
606
+ outputName: 'data',
607
+ },
608
+ },
584
609
  };
585
610
  jobDefinition.steps.push(this.checkoutStep);
586
611
  const preInstallDependenciesStep = this.preInstallDependenciesStep;
@@ -595,7 +620,6 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
595
620
  }
596
621
  jobDefinition.steps.push(this.generateDiffStep);
597
622
  jobDefinition.steps.push(this.getFormattedDiffAnnotationCommentStepForEnvironment(name));
598
- jobDefinition.steps.push(this.getAnnotateDiffStepForEnvironment(name));
599
623
  return jobDefinition;
600
624
  }
601
625
  /**
@@ -604,15 +628,17 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
604
628
  */
605
629
  get diffAnnotationJobs() {
606
630
  const { environmentVariableName, environments } = this.props.deployOptions;
607
- const jobs = environments.map((environmentOptions) => {
631
+ const jobEntries = environments.map((environmentOptions) => {
608
632
  return [getDiffAnnotationJobId(environmentOptions.name), this.getDiffAnnotationJobForEnvironment(environmentOptions, environmentVariableName)];
609
633
  });
610
- return Object.fromEntries(jobs);
634
+ const jobs = Object.fromEntries(jobEntries);
635
+ jobs['Diff-Annotation-Comment'] = this.getAnnotateDiffJob(Object.keys(jobs));
636
+ return jobs;
611
637
  }
612
638
  }
613
639
  exports.DeployableAwsCdkTypeScriptAppStepsFactory = DeployableAwsCdkTypeScriptAppStepsFactory;
614
640
  _a = JSII_RTTI_SYMBOL_1;
615
- DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.778" };
641
+ DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.779" };
616
642
  /**
617
643
  * Get the deploy job ID for a specific environment
618
644
  * @param environmentName The name of the environment
@@ -629,4 +655,4 @@ function getDeployJobId(environmentName) {
629
655
  function getDiffAnnotationJobId(environmentName) {
630
656
  return `Diff-Annotation-${environmentName}`;
631
657
  }
632
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXd6QkEsd0NBRUM7QUFPRCx3REFFQzs7QUFsMEJELDhDQUFrRDtBQUNsRCx1RUFBZ0Y7QUFDaEYsc0RBQWlFO0FBQ2pFLG1DQUFrSDtBQUVsSCxNQUFNLDJCQUEyQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELE1BQU0sc0NBQXNDLEdBQUUsU0FBUywyQkFBMkIsMENBQTBDLENBQUM7QUFDN0gsTUFBTSxvQ0FBb0MsR0FBRyxtQ0FBbUMsQ0FBQztBQXdDakY7OztHQUdHO0FBQ0gsTUFBYSx5Q0FBeUM7SUFFcEQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FDckQsYUFBNEIsRUFDNUIsdUJBQTBEO1FBRzFELElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyx5QkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsd0VBQXdFLENBQUMsQ0FBQztZQUMvRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENB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UUFDakosQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7QUEzdkJILDhGQTZ2QkM7OztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsZUFBdUI7SUFDcEQsT0FBTyxVQUFVLGVBQWUsRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsZUFBdUI7SUFDNUQsT0FBTyxtQkFBbUIsZUFBZSxFQUFFLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgV29ya2Zsb3dTdGVwcyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAsIEpvYiB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgRGVwbG95Sm9iU3RyYXRlZ3ksIERlcGxveU9wdGlvbnMsIEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcywgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCA9ICdkZXBsb3ltZW50LWNoZWNrJztcbmNvbnN0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uPSBgc3RlcHMuJHtjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWR9Lm91dHB1dHMuaGFzX2FjdGl2ZV9kZXBsb3ltZW50ICE9ICd0cnVlJ2A7XG5jb25zdCBmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWQgPSAnZm9ybWF0dGVkX2RpZmZfYW5ub3RhdGlvbl9jb21tZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVByb3BzIHtcbiAgLyoqXG4gICAqIERlcGxveW1lbnQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciB0byBjaGVjayBmb3IgYWN0aXZlIGRlcGxveW1lbnRzIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFzayB0byBydW4gYmVmb3JlIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IHByZUluc3RhbGxUYXNrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIGZvciBDb2RlQXJ0aWZhY3QsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFByb3ZpZGVyPzogQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnBtIGNvbmZpZyB0byBzZXQgd2l0aCB0aGUgZW52aXJvbm1lbnQgdGhhdCBpcyBiZWluZyBkZXBsb3llZCwgaWYgYW55XG4gICAqIE5vdGU6IFRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSAxOFxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQ29uZmlnRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlcGxveW1lbnQgam9iIHN0cmF0ZWd5LCB3aGV0aGVyIHRvIHVzZSBhIG1hdHJpeCBqb2Igb3IgbXVsdGlwbGUgam9icyBmb3IgZWFjaCBlbnZpcm9ubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgam9iU3RyYXRlZ3k6IERlcGxveUpvYlN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcywgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudERlcGVuZGVuY2llcz86IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcztcbn1cblxuLyoqXG4gKiBGYWN0b3J5IHRvIGNyZWF0ZSByZXVzYWJsZSBzdGVwcyBmb3IgdGhlIGRlcGxveW1lbnQgd29ya2Zsb3dcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5IHtcblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgcHJvdmlkZWQgZW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgYXJlIHZhbGlkXG4gICAqIEBwYXJhbSBkZXBsb3lPcHRpb25zIFRoZSBkZXBsb3ltZW50IG9wdGlvbnNcbiAgICogQHBhcmFtIGVudmlyb25tZW50RGVwZW5kZW5jaWVzIFRoZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhcbiAgICBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zLFxuICAgIGVudmlyb25tZW50RGVwZW5kZW5jaWVzOiBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMsXG4gICk6IHZvaWQge1xuXG4gICAgaWYgKGRlcGxveU9wdGlvbnMuam9iU3RyYXRlZ3kgIT09IERlcGxveUpvYlN0cmF0ZWd5Lk1VTFRJX0pPQikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIE1VTFRJX0pPQiBzdHJhdGVneScpO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGVudmlyb25tZW50RGVwZW5kZW5jaWVzKS5mb3JFYWNoKChbZW52LCBkZXBzXSkgPT4ge1xuICAgICAgY29uc3QgaGFzRW52aXJvbm1lbnQgPSBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5zb21lKGUgPT4gZS5uYW1lID09PSBlbnYpO1xuICAgICAgaWYgKCFoYXNFbnZpcm9ubWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudmlyb25tZW50IFwiJHtlbnZ9XCIgZGVmaW5lZCBpbiBkZXBlbmRlbmNpZXMgZG9lcyBub3QgZXhpc3QgaW4gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNgKTtcbiAgICAgIH1cbiAgICAgIGRlcHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICBjb25zdCBoYXNEZXBFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGRlcCk7XG4gICAgICAgIGlmICghaGFzRGVwRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlcGVuZGVuY3kgZW52aXJvbm1lbnQgXCIke2RlcH1cIiBmb3IgZW52aXJvbm1lbnQgXCIke2Vudn1cIiBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlcbiAgICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3RcbiAgICogQHBhcmFtIHByb3BzIFRoZSBmYWN0b3J5IHByb3BlcnRpZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdDogamF2YXNjcmlwdC5Ob2RlUHJvamVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVByb3BzLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIENvbmRpdGlvbiB0byBza2lwIGEgc3RlcCBpZiBhbiBhY3RpdmUgZGVwbG95bWVudCBpcyBhbHJlYWR5IHByZXNlbnRcbiAgICogQHJldHVybnMgSm9iU3RlcCBjb25kaXRpb24gb3IgdW5kZWZpbmVkIGlmIGNoZWNrQWN0aXZlRGVwbG95bWVudCBpcyBmYWxzZVxuICAgKi9cbiAgcHVibGljIGdldCBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbigpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyB7IGlmOiBgXFwke3sgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoZWNrb3V0U3RlcCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gV29ya2Zsb3dTdGVwcy5jaGVja291dCh7XG4gICAgICB3aXRoOiB7XG4gICAgICAgIGZldGNoRGVwdGg6IDAsXG4gICAgICAgIHJlZjogJyR7eyBnaXRodWIuc2hhIH19JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBydW4gYmVmb3JlIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGlmIGV4aXN0c1xuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBwcmVJbnN0YWxsVGFza05hbWUgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5za2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbixcbiAgICAgIG5hbWU6IHRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lLFxuICAgICAgcnVuOiBgbnB4IHByb2plbiAke3RoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciB0aGUgZW52aXJvbm1lbnQgaW4gdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KCcke3sgbWF0cml4LmVudmlyb25tZW50IH19Jyk7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgZGVwbG95bWVudCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgVGhlIGVudmlyb25tZW50IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWQsXG4gICAgICB1c2VzOiAnQW1pbkZhemxNb25kby9jaGVjay1kZXBsb3llZC1lbnZpcm9ubWVudEB2MScsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBlbnY6IHtcbiAgICAgICAgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFtdXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCgpOiBKb2JTdGVwW10ge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4LFxuICAgICAgdGhpcy5hc3N1bWVBd3NSb2xlU3RlcEZvck1hdHJpeCxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcHMgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE9wdGlvbnMgVGhlIGVudmlyb25tZW50IG9wdGlvbnNcbiAgICogQHJldHVybnMgSm9iU3RlcFtdXG4gICAqL1xuICBwdWJsaWMgZ2V0U2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMpOiBKb2JTdGVwW10ge1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gPSBbXTtcblxuICAgIGNvbnN0IGZyb21FbnZWYXJpYWJsZVN0ZXAgPSB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICk7XG5cbiAgICBpZiAoZnJvbUVudlZhcmlhYmxlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChmcm9tRW52VmFyaWFibGVTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3N1bWVSb2xlU3RlcCA9IHRoaXMuZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8/ICcnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgPz8gOTAwLFxuICAgICk7XG5cbiAgICBpZiAoYXNzdW1lUm9sZVN0ZXApIHtcbiAgICAgIHN0ZXBzLnB1c2goYXNzdW1lUm9sZVN0ZXApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5hc3N1bWVSb2xlJyxcbiAgICAgICdtYXRyaXguYWNjZXNzS2V5SWRTZWNyZXROYW1lJyxcbiAgICAgICdtYXRyaXguc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZScsXG4gICAgICAnJHt7IG1hdHJpeC5yZWdpb24gfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUZsYWcgV2hldGhlciB0byBhc3N1bWUgYSByb2xlLCBjYW4gYmUgYSBib29sZWFuIG9yIGEgc3RyaW5nIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHBhcmFtIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgYWNjZXNzIGtleSBJRFxuICAgKiBAcGFyYW0gc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgc2VjcmV0IGFjY2VzcyBrZXlcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIEFXUyBjcmVkZW50aWFscyBhcmUgcHJvdmlkZWQsXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybiBhIEpvYlN0ZXAgb25seSBpZiBmYWxzZVxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgIGFzc3VtZVJvbGVGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIGFjY2Vzc0tleUlkU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICdmYWxzZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICdmYWxzZScgfX1gO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgJ2VjaG8gXCJBV1NfQUNDRVNTX0tFWV9JRD0kYWNjZXNzS2V5SWRcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWT0kc2VjcmV0QWNjZXNzS2V5XCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgICAgJ2VjaG8gXCJBV1NfUkVHSU9OPSRyZWdpb25cIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgXTtcblxuICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJyAmJiBhc3N1bWVSb2xlRmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6ICdDb25maWd1cmUgQVdTIENyZWRlbnRpYWxzJyxcbiAgICAgIHJ1bjogYCR7Y29tbWFuZHMuam9pbignXFxuJyl9YCxcbiAgICAgIGVudjoge1xuICAgICAgICBhY2Nlc3NLZXlJZDogYFxcJHt7IHNlY3JldHNbJHthY2Nlc3NLZXlJZFNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleTogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICByZWdpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBhc3N1bWVBd3NSb2xlU3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5hc3N1bWVSb2xlJyxcbiAgICAgICdtYXRyaXguYWNjZXNzS2V5SWRTZWNyZXROYW1lJyxcbiAgICAgICdtYXRyaXguc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZScsXG4gICAgICAnJHt7IG1hdHJpeC5yZWdpb24gfX0nLFxuICAgICAgJyR7eyBtYXRyaXgucm9sZVRvQXNzdW1lIH19JyxcbiAgICAgICcke3sgbWF0cml4LmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gYXNzdW1lIGFuIEFXUyByb2xlIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHBhcmFtIHJvbGVUb0Fzc3VtZSBUaGUgcm9sZSB0byBhc3N1bWVcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgVGhlIGR1cmF0aW9uIGZvciBhc3N1bWluZyB0aGUgcm9sZVxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBhc3N1bWVSb2xlRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZVxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgIGFzc3VtZVJvbGVGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIGFjY2Vzc0tleUlkU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICByb2xlVG9Bc3N1bWU6IHN0cmluZyxcbiAgICBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzPzogc3RyaW5nIHwgbnVtYmVyLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyB9fWA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmICFhc3N1bWVSb2xlRmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICBjb25zdCBzZWNyZXRzUGFyYW1zID1cbiAgICAgIHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuQUNDRVNTX0FORF9TRUNSRVRfS0VZX1BBSVIgP1xuICAgICAgICB7XG4gICAgICAgICAgJ2F3cy1hY2Nlc3Mta2V5LWlkJzogYFxcJHt7IHNlY3JldHNbJHthY2Nlc3NLZXlJZFNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgICAgJ2F3cy1zZWNyZXQtYWNjZXNzLWtleSc6IGBcXCR7eyBzZWNyZXRzWyR7c2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6ICdBc3N1bWUgQVdTIFJvbGUnLFxuICAgICAgdXNlczogJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjQnLFxuICAgICAgd2l0aDoge1xuICAgICAgICAuLi5zZWNyZXRzUGFyYW1zLFxuICAgICAgICAncm9sZS10by1hc3N1bWUnOiByb2xlVG9Bc3N1bWUsXG4gICAgICAgICdhd3MtcmVnaW9uJzogcmVnaW9uLFxuICAgICAgICAncm9sZS1kdXJhdGlvbi1zZWNvbmRzJzogYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIE5QTSBjb25maWcgaWYgcHJvdmlkZWRcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gbnBtQ29uZmlnIGlzIHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwTnBtQ29uZmlnRm9yTWF0cml4KCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB7IG5wbUNvbmZpZ0Vudmlyb25tZW50IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghbnBtQ29uZmlnRW52aXJvbm1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPSAnQ09ORklHX1ZBTFVFJztcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5za2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbixcbiAgICAgIG5hbWU6ICdTZXR0aW5nIE5QTSBDb25maWcnLFxuICAgICAgZW52OiB7XG4gICAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIHJ1bjogYG5wbSBjb25maWcgc2V0ICR7bnBtQ29uZmlnRW52aXJvbm1lbnR9ICQke2Vudmlyb25tZW50VmFyaWFibGVOYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXAgdG8gcnVuIGEgc3BlY2lmaWMgc2NyaXB0XG4gICAqIEBwYXJhbSBzY3JpcHROYW1lIFRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEBwYXJhbSBzdGVwTmFtZSBUaGUgbmFtZSBvZiB0aGUgc3RlcCBpbiB0aGUgd29ya2Zsb3dcbiAgICogQHBhcmFtIGhhc1NjcmlwdEZsYWcgV2hldGhlciB0aGUgc2NyaXB0IHNob3VsZCBiZSBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNTY3JpcHRGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNTY3JpcHRGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFJ1blNjcmlwdFN0ZXAoXG4gICAgc2NyaXB0TmFtZTogc3RyaW5nLFxuICAgIHN0ZXBOYW1lOiBzdHJpbmcsXG4gICAgaGFzU2NyaXB0RmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGhhc1NjcmlwdEZsYWcgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2hhc1NjcmlwdEZsYWd9ID09ICd0cnVlJyB9fWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nICYmICFoYXNTY3JpcHRGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogYFJ1biAke3N0ZXBOYW1lfWAsXG4gICAgICBydW46IGAke3RoaXMucHJvamVjdC5ydW5TY3JpcHRDb21tYW5kfSAke3NjcmlwdE5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gZGVwbG95IHRoZSB3b3JrZmxvd1xuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICAnZGVwbG95OndvcmtmbG93JyxcbiAgICAgICdEZXBsb3ltZW50JyxcbiAgICAgIHRydWUsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBydW4gcG9zdCBkZXBsb3ltZW50IHNjcmlwdCBpbiBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5oYXNQcmVEZXBsb3lUYXNrJyxcbiAgICAgICcke3sgbWF0cml4LnByZURlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlLWRlcGxveW1lbnQgc3RlcCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gaGFzUHJlRGVwbG95VGFza0ZsYWcgV2hldGhlciB0aGUgcHJlLWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwcmVEZXBsb3ltZW50U2NyaXB0IFRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHByZS1kZXBsb3ltZW50IHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1ByZURlcGxveVRhc2tGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgaGFzUHJlRGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcHJlRGVwbG95bWVudFNjcmlwdDogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICBwcmVEZXBsb3ltZW50U2NyaXB0LFxuICAgICAgJ1ByZSBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1ByZURlcGxveVRhc2tGbGFnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBydW4gcG9zdCBkZXBsb3ltZW50IHNjcmlwdCBpbiBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBwb3N0RGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UG9zdERlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1Bvc3REZXBsb3lUYXNrJyxcbiAgICAgICcke3sgbWF0cml4LnBvc3REZXBsb3ltZW50U2NyaXB0IH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc3QtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQb3N0RGVwbG95VGFza0ZsYWcgV2hldGhlciB0aGUgcG9zdC1kZXBsb3ltZW50IHRhc2sgc2hvdWxkIGJlIHJ1blxuICAgKiBAcGFyYW0gcG9zdERlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcG9zdC1kZXBsb3ltZW50IHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzUG9zdERlcGxveVRhc2tGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UG9zdERlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgaGFzUG9zdERlcGxveVRhc2tGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIHBvc3REZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHBvc3REZXBsb3ltZW50U2NyaXB0LFxuICAgICAgJ1Bvc3QgRGVwbG95bWVudCcsXG4gICAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGRlcGxveW1lbnQgam9icyB3aGV0aGVyIGZvciBtYXRyaXggc3RyYXRlZ3kgb3Igbm90XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzKCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oJ1RoZSBwcm9qZWN0IGRvZXMgbm90IGhhdmUgYW55IGVudmlyb25tZW50IHNldCwgbWFrZSBzdXJlIHRoaXMgaXMgZGVzaXJlZCBzZXR0aW5nJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmpvYlN0cmF0ZWd5ID09PSBEZXBsb3lKb2JTdHJhdGVneS5NQVRSSVggPyB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTWF0cml4IDogdGhpcy5kZXBsb3ltZW50Sm9ic0Zvck11bHRpSm9iO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXBsb3ltZW50IGpvYnMgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9ic0Zvck1hdHJpeCgpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcblxuICAgIGNvbnN0IHsgZW52aXJvbm1lbnRzLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSB9ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zO1xuXG4gICAgY29uc3QgaW5jbHVkZSA9IGVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnRPcHRpb25zID0+IHtcbiAgICAgIGNvbnN0IHsgYXdzQ3JlZGVudGlhbHMgfSA9IGVudmlyb25tZW50T3B0aW9ucztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZSA9IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICAgIGNvbnN0IGFzc3VtZVJvbGVTZXR0aW5ncyA9IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHtcbiAgICAgICAgcm9sZVRvQXNzdW1lOiBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUsXG4gICAgICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM6IGF3c0NyZWRlbnRpYWxzLmFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMgfHwgOTAwLFxuICAgICAgfTogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgPSBhd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJztcbiAgICAgIGNvbnN0IHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPSBhd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknO1xuXG4gICAgICBjb25zdCBoYXNQb3N0RGVwbG95VGFzayA9IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgICAgY29uc3QgaGFzUHJlRGVwbG95VGFzayA9IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudE9wdGlvbnMubmFtZSxcbiAgICAgICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lLFxuICAgICAgICByZWdpb246IGF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgICAgYXNzdW1lUm9sZSxcbiAgICAgICAgaGFzUG9zdERlcGxveVRhc2ssXG4gICAgICAgIHBvc3REZXBsb3ltZW50U2NyaXB0OiBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICAgICBoYXNQcmVEZXBsb3lUYXNrLFxuICAgICAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIC4uLmFzc3VtZVJvbGVTZXR0aW5ncyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JyxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbjogSm9iID0ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIGNvbmN1cnJlbmN5OiB7XG4gICAgICAgICdncm91cCc6ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19LWRlcGxveScsXG4gICAgICAgICdjYW5jZWwtaW4tcHJvZ3Jlc3MnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuZWVkczogW1xuICAgICAgICAncmVsZWFzZV9naXRodWInLFxuICAgICAgXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGRlcGxveW1lbnRzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICBpZFRva2VuOiB0aGlzLnByb3BzLmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBzdHJhdGVneToge1xuICAgICAgICBtYXhQYXJhbGxlbDogMSxcbiAgICAgICAgbWF0cml4OiB7XG4gICAgICAgICAgZG9tYWluOiB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudDogaW5jbHVkZS5tYXAoZSA9PiBlLmVudmlyb25tZW50KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgICAgfSxcbiAgICAgIGVudjogZGVwbG95Sm9iRW52LFxuICAgICAgc3RlcHM6IFtdLFxuICAgIH07XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcblxuICAgIGNvbnN0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXggPSB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXg7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5zZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JNYXRyaXgpO1xuXG4gICAgY29uc3Qgc2V0dXBOcG1Db25maWdTdGVwID0gdGhpcy5zZXR1cE5wbUNvbmZpZ0Zvck1hdHJpeDtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5wcmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuZGVwbG95bWVudFN0ZXApO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnBvc3REZXBsb3ltZW50U3RlcEZvck1hdHJpeCk7XG5cbiAgICByZXR1cm4geyBkZXBsb3k6IGpvYkRlZmluaXRpb24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIElEcyBvZiB0aGUgam9icyB0aGF0IG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGVudmlyb25tZW50J3MgZGVwbG95bWVudCBqb2JcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygam9iIElEc1xuICAgKi9cbiAgcHVibGljIGdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWydyZWxlYXNlX2dpdGh1YiddO1xuICAgIGlmICghdGhpcy5wcm9wcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLmZpbmRJbmRleChlbnYgPT4gZW52Lm5hbWUgPT09IGVudmlyb25tZW50TmFtZSk7XG4gICAgICBjb25zdCBwcmVyZXF1aXNpdGVFbnZpcm9ubWVudCA9IGluZGV4ID4gMCA/IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNbaW5kZXggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcmVyZXF1aXNpdGVFbnZpcm9ubWVudCkge1xuICAgICAgICByZXN1bHQucHVzaChnZXREZXBsb3lKb2JJZChwcmVyZXF1aXNpdGVFbnZpcm9ubWVudC5uYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXNbZW52aXJvbm1lbnROYW1lXTtcbiAgICAgIGlmIChkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwID0+IHtcbiAgICAgICAgICByZXN1bHQucHVzaChnZXREZXBsb3lKb2JJZChkZXApKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbXVsdGktam9iIHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2IoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE9wdGlvbnMubmFtZSksIHRoaXMuZ2V0Sm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoam9icyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldEpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogYCR7bmFtZX0tZGVwbG95YCxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiB0aGlzLmdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMobmFtZSksXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGdlbmVyYXRlIHRoZSBkaWZmIG91dHB1dFxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdlbmVyYXRlRGlmZlN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkaWZmOm91dHB1dCcsXG4gICAgICAnR2VuZXJhdGUgRGlmZiBPdXRwdXQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gY2hlY2tcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldEFubm90YXRlRGlmZlN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdBbm5vdGF0ZSBQUiB3aXRoIERpZmYgT3V0cHV0JyxcbiAgICAgIHVzZXM6ICdtc2hpY2svYWRkLXByLWNvbW1lbnRAdjMnLFxuICAgICAgd2l0aDoge1xuICAgICAgICAnbWVzc2FnZS1pZCc6IGBkaWZmLW91dHB1dC0ke2Vudmlyb25tZW50fWAsXG4gICAgICAgICdyZWZyZXNoLW1lc3NhZ2UtcG9zaXRpb24nOiB0cnVlLFxuICAgICAgICAnbWVzc2FnZSc6IGBcXCR7eyBzdGVwcy4ke2Zvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZH0ub3V0cHV0cy5kYXRhIH19YCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXAgdG8gZm9ybWF0IHRoZSBkaWZmIG91dHB1dCBpbnRvIGEgR2l0SHViIGFubm90YXRpb24gY29tbWVudCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgVGhlIGVudmlyb25tZW50IHRvIGZvcm1hdCB0aGUgZGlmZiBmb3JcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldEZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdHZXQgZm9ybWF0dGVkIGRpZmYgYW5ub3RhdGlvbiBjb21tZW50JyxcbiAgICAgIGlkOiBmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWQsXG4gICAgICBydW46IFtcbiAgICAgICAgJ2VjaG8gXCJkYXRhPDxFT0ZcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgIGBlY2hvIFwiIyMjIENoYW5nZXMgZm9yIGVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XCIgPj4gJEdJVEhVQl9PVVRQVVRgLFxuICAgICAgICAnZWNobyBcIlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCI8ZGV0YWlscz5cIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCJcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgIFwiZWNobyAnXFxgXFxgXFxgJyA+PiAkR0lUSFVCX09VVFBVVFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICcgIHNlZCBcXCdzL1xcXFx4MUJcXFxcW1swLTk7XSpbbUdLSEZdLy9nXFwnIFwiJGZpbGVcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICcgIGVjaG8gXCJcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+ICRHSVRIVUJfT1VUUFVUXCIsXG4gICAgICAgICdlY2hvIFwiPC9kZXRhaWxzPlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCJFT0ZcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXBsb3ltZW50IG1ldGhvZCBhcmd1bWVudCBmb3IgdGhlIGRlcGxveSBjb21tYW5kXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE9wdGlvbnMgVGhlIGVudmlyb25tZW50IG9wdGlvbnNcbiAgICogQHBhcmFtIGVudmlyb25tZW50VmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSwgaWYgYW55XG4gICAqIEByZXR1cm5zIFRoZSBkaWZmIGFubm90YXRpb24gam9iIGZvciB0aGUgZW52aXJvbm1lbnRcbiAgICovXG4gIHB1YmxpYyBnZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgbmVlZHM6IFsnYnVpbGQnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgICBwdWxsUmVxdWVzdHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZW5lcmF0ZURpZmZTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSkpO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmdldEFubm90YXRlRGlmZlN0ZXBGb3JFbnZpcm9ubWVudChuYW1lKSk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGpvYnMpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlcGxveSBqb2IgSUQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAqIEBwYXJhbSBlbnZpcm9ubWVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50XG4gKiBAcmV0dXJucyBUaGUgZGVwbG95IGpvYiBJRFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwbG95Sm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERlcGxveS0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZGlmZiBhbm5vdGF0aW9uIGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkaWZmIGFubm90YXRpb24gam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBEaWZmLUFubm90YXRpb24tJHtlbnZpcm9ubWVudE5hbWV9YDtcbn1cbiJdfQ==
658
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQWsxQkEsd0NBRUM7QUFPRCx3REFFQzs7QUE1MUJELDhDQUFrRDtBQUNsRCx1RUFBZ0Y7QUFDaEYsc0RBQWlFO0FBQ2pFLG1DQUFrSDtBQUVsSCxNQUFNLDJCQUEyQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELE1BQU0sc0NBQXNDLEdBQUUsU0FBUywyQkFBMkIsMENBQTBDLENBQUM7QUFDN0gsTUFBTSxvQ0FBb0MsR0FBRyxtQ0FBbUMsQ0FBQztBQXdDakY7OztHQUdHO0FBQ0gsTUFBYSx5Q0FBeUM7SUFFcEQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FDckQsYUFBNEIsRUFDNUIsdUJBQTBEO1FBRzFELElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyx5QkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsd0VBQXdFLENBQUMsQ0FBQztZQUMvRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENB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Q0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV6RixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxrQkFBa0I7UUFDcEIsTUFBTSxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBaUIsRUFBRTtZQUN4RSxPQUFPLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUNqSixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBcnhCSCw4RkF1eEJDOzs7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLGVBQXVCO0lBQ3BELE9BQU8sVUFBVSxlQUFlLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLGVBQXVCO0lBQzVELE9BQU8sbUJBQW1CLGVBQWUsRUFBRSxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IFdvcmtmbG93U3RlcHMgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uLCBKb2JTdGVwLCBKb2IgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyIH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IERlcGxveUpvYlN0cmF0ZWd5LCBEZXBsb3lPcHRpb25zLCBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMsIEVudmlyb25tZW50T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWQgPSAnZGVwbG95bWVudC1jaGVjayc7XG5jb25zdCBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbj0gYHN0ZXBzLiR7Y2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkfS5vdXRwdXRzLmhhc19hY3RpdmVfZGVwbG95bWVudCAhPSAndHJ1ZSdgO1xuY29uc3QgZm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcElkID0gJ2Zvcm1hdHRlZF9kaWZmX2Fubm90YXRpb25fY29tbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGFjdGl2ZSBkZXBsb3ltZW50cyBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGRlcGxveW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuIGJlZm9yZSBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcywgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBwcmVJbnN0YWxsVGFza05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBmb3IgQ29kZUFydGlmYWN0LCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhQcm92aWRlcj86IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlcjtcblxuICAvKipcbiAgICogVGhlIG5wbSBjb25maWcgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IHRoYXQgaXMgYmVpbmcgZGVwbG95ZWQsIGlmIGFueVxuICAgKiBOb3RlOiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vZGUgdmVyc2lvbnMgYWJvdmUgMThcbiAgICovXG4gIHJlYWRvbmx5IG5wbUNvbmZpZ0Vudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IGpvYiBzdHJhdGVneSwgd2hldGhlciB0byB1c2UgYSBtYXRyaXggam9iIG9yIG11bHRpcGxlIGpvYnMgZm9yIGVhY2ggZW52aXJvbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGpvYlN0cmF0ZWd5OiBEZXBsb3lKb2JTdHJhdGVneTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM/OiBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogRmFjdG9yeSB0byBjcmVhdGUgcmV1c2FibGUgc3RlcHMgZm9yIHRoZSBkZXBsb3ltZW50IHdvcmtmbG93XG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjbGFzcyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIHByb3ZpZGVkIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSB2YWxpZFxuICAgKiBAcGFyYW0gZGVwbG95T3B0aW9ucyBUaGUgZGVwbG95bWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudERlcGVuZGVuY2llcyBUaGUgZW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgdG8gdmFsaWRhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLFxuICApOiB2b2lkIHtcblxuICAgIGlmIChkZXBsb3lPcHRpb25zLmpvYlN0cmF0ZWd5ICE9PSBEZXBsb3lKb2JTdHJhdGVneS5NVUxUSV9KT0IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBNVUxUSV9KT0Igc3RyYXRlZ3knKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhlbnZpcm9ubWVudERlcGVuZGVuY2llcykuZm9yRWFjaCgoW2VudiwgZGVwc10pID0+IHtcbiAgICAgIGNvbnN0IGhhc0Vudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZW52KTtcbiAgICAgIGlmICghaGFzRW52aXJvbm1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRlZmluZWQgaW4gZGVwZW5kZW5jaWVzIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkZXBzLmZvckVhY2goZGVwID0+IHtcbiAgICAgICAgY29uc3QgaGFzRGVwRW52aXJvbm1lbnQgPSBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5zb21lKGUgPT4gZS5uYW1lID09PSBkZXApO1xuICAgICAgICBpZiAoIWhhc0RlcEVudmlyb25tZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBlbmRlbmN5IGVudmlyb25tZW50IFwiJHtkZXB9XCIgZm9yIGVudmlyb25tZW50IFwiJHtlbnZ9XCIgZG9lcyBub3QgZXhpc3QgaW4gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5XG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZmFjdG9yeSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3Q6IGphdmFzY3JpcHQuTm9kZVByb2plY3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlQcm9wcyxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDb25kaXRpb24gdG8gc2tpcCBhIHN0ZXAgaWYgYW4gYWN0aXZlIGRlcGxveW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgY29uZGl0aW9uIG9yIHVuZGVmaW5lZCBpZiBjaGVja0FjdGl2ZURlcGxveW1lbnQgaXMgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8geyBpZjogYFxcJHt7ICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGVja291dFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIFdvcmtmbG93U3RlcHMuY2hlY2tvdXQoe1xuICAgICAgd2l0aDoge1xuICAgICAgICBmZXRjaERlcHRoOiAwLFxuICAgICAgICByZWY6ICcke3sgZ2l0aHViLnNoYSB9fScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIGJlZm9yZSBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpZiBleGlzdHNcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gcHJlSW5zdGFsbFRhc2tOYW1lIGlzIHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24sXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZSxcbiAgICAgIHJ1bjogYG5weCBwcm9qZW4gJHt0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgZGVwbG95bWVudCBmb3IgdGhlIGVudmlyb25tZW50IGluIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50IFRoZSBlbnZpcm9ubWVudCB0byBjaGVja1xuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkLFxuICAgICAgdXNlczogJ0FtaW5GYXpsTW9uZG8vY2hlY2stZGVwbG95ZWQtZW52aXJvbm1lbnRAdjEnLFxuICAgICAgd2l0aDoge1xuICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgZW52OiB7XG4gICAgICAgIEdJVEhVQl9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBbXVxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JNYXRyaXgoKTogSm9iU3RlcFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5zZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvck1hdHJpeCxcbiAgICAgIHRoaXMuYXNzdW1lQXdzUm9sZVN0ZXBGb3JNYXRyaXgsXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXBzIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEByZXR1cm5zIEpvYlN0ZXBbXVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0ZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zKTogSm9iU3RlcFtdIHtcbiAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdID0gW107XG5cbiAgICBjb25zdCBmcm9tRW52VmFyaWFibGVTdGVwID0gdGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICApO1xuXG4gICAgaWYgKGZyb21FbnZWYXJpYWJsZVN0ZXApIHtcbiAgICAgIHN0ZXBzLnB1c2goZnJvbUVudlZhcmlhYmxlU3RlcCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1lUm9sZVN0ZXAgPSB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/PyAnJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzID8/IDkwMCxcbiAgICApO1xuXG4gICAgaWYgKGFzc3VtZVJvbGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGFzc3VtZVJvbGVTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguYXNzdW1lUm9sZScsXG4gICAgICAnbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZScsXG4gICAgICAnbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUnLFxuICAgICAgJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBBV1MgY3JlZGVudGlhbHMgYXJlIHByb3ZpZGVkLFxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBib29sZWFuIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm4gYSBKb2JTdGVwIG9ubHkgaWYgZmFsc2VcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICBhc3N1bWVSb2xlRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAnZmFsc2UnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAnZmFsc2UnIH19YDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tYW5kcyA9IFtcbiAgICAgICdlY2hvIFwiQVdTX0FDQ0VTU19LRVlfSUQ9JGFjY2Vzc0tleUlkXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgICAgJ2VjaG8gXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHNlY3JldEFjY2Vzc0tleVwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1JFR0lPTj0kcmVnaW9uXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgIF07XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiAnQ29uZmlndXJlIEFXUyBDcmVkZW50aWFscycsXG4gICAgICBydW46IGAke2NvbW1hbmRzLmpvaW4oJ1xcbicpfWAsXG4gICAgICBlbnY6IHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGBcXCR7eyBzZWNyZXRzWyR7YWNjZXNzS2V5SWRTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGBcXCR7eyBzZWNyZXRzWyR7c2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gYXNzdW1lIGFuIEFXUyByb2xlIGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgYXNzdW1lQXdzUm9sZVN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguYXNzdW1lUm9sZScsXG4gICAgICAnbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZScsXG4gICAgICAnbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUnLFxuICAgICAgJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICAgICcke3sgbWF0cml4LnJvbGVUb0Fzc3VtZSB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUZsYWcgV2hldGhlciB0byBhc3N1bWUgYSByb2xlLCBjYW4gYmUgYSBib29sZWFuIG9yIGEgc3RyaW5nIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHBhcmFtIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgYWNjZXNzIGtleSBJRFxuICAgKiBAcGFyYW0gc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgc2VjcmV0IGFjY2VzcyBrZXlcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uXG4gICAqIEBwYXJhbSByb2xlVG9Bc3N1bWUgVGhlIHJvbGUgdG8gYXNzdW1lXG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIFRoZSBkdXJhdGlvbiBmb3IgYXNzdW1pbmcgdGhlIHJvbGVcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2VcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBhc3N1bWVSb2xlRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcm9sZVRvQXNzdW1lOiBzdHJpbmcsXG4gICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcz86IHN0cmluZyB8IG51bWJlcixcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAndHJ1ZScgfX1gO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJyAmJiAhYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgY29uc3Qgc2VjcmV0c1BhcmFtcyA9XG4gICAgICB0aGlzLnByb3BzLmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSID9cbiAgICAgICAge1xuICAgICAgICAgICdhd3MtYWNjZXNzLWtleS1pZCc6IGBcXCR7eyBzZWNyZXRzWyR7YWNjZXNzS2V5SWRTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICAgICdhd3Mtc2VjcmV0LWFjY2Vzcy1rZXknOiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiAnQXNzdW1lIEFXUyBSb2xlJyxcbiAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0JyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uc2VjcmV0c1BhcmFtcyxcbiAgICAgICAgJ3JvbGUtdG8tYXNzdW1lJzogcm9sZVRvQXNzdW1lLFxuICAgICAgICAnYXdzLXJlZ2lvbic6IHJlZ2lvbixcbiAgICAgICAgJ3JvbGUtZHVyYXRpb24tc2Vjb25kcyc6IGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBOUE0gY29uZmlnIGlmIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIG5wbUNvbmZpZyBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cE5wbUNvbmZpZ0Zvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KCcke3sgbWF0cml4LmVudmlyb25tZW50IH19Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBucG1Db25maWdFbnZpcm9ubWVudCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIW5wbUNvbmZpZ0Vudmlyb25tZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVOYW1lID0gJ0NPTkZJR19WQUxVRSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24sXG4gICAgICBuYW1lOiAnU2V0dGluZyBOUE0gQ29uZmlnJyxcbiAgICAgIGVudjoge1xuICAgICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBydW46IGBucG0gY29uZmlnIHNldCAke25wbUNvbmZpZ0Vudmlyb25tZW50fSAkJHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwIHRvIHJ1biBhIHNwZWNpZmljIHNjcmlwdFxuICAgKiBAcGFyYW0gc2NyaXB0TmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcGFyYW0gc3RlcE5hbWUgVGhlIG5hbWUgb2YgdGhlIHN0ZXAgaW4gdGhlIHdvcmtmbG93XG4gICAqIEBwYXJhbSBoYXNTY3JpcHRGbGFnIFdoZXRoZXIgdGhlIHNjcmlwdCBzaG91bGQgYmUgcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzU2NyaXB0RmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzU2NyaXB0RmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRSdW5TY3JpcHRTdGVwKFxuICAgIHNjcmlwdE5hbWU6IHN0cmluZyxcbiAgICBzdGVwTmFtZTogc3RyaW5nLFxuICAgIGhhc1NjcmlwdEZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFoYXNTY3JpcHRGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2hhc1NjcmlwdEZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgfX1gO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhhc1NjcmlwdEZsYWcgPT09ICdib29sZWFuJyAmJiAhaGFzU2NyaXB0RmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6IGBSdW4gJHtzdGVwTmFtZX1gLFxuICAgICAgcnVuOiBgJHt0aGlzLnByb2plY3QucnVuU2NyaXB0Q29tbWFuZH0gJHtzY3JpcHROYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGRlcGxveSB0aGUgd29ya2Zsb3dcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50U3RlcCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgJ2RlcGxveTp3b3JrZmxvdycsXG4gICAgICAnRGVwbG95bWVudCcsXG4gICAgICB0cnVlLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIHBvc3QgZGVwbG95bWVudCBzY3JpcHQgaW4gbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUHJlRGVwbG95VGFzaycsXG4gICAgICAnJHt7IG1hdHJpeC5wcmVEZXBsb3ltZW50U2NyaXB0IH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZS1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1ByZURlcGxveVRhc2tGbGFnIFdoZXRoZXIgdGhlIHByZS1kZXBsb3ltZW50IHRhc2sgc2hvdWxkIGJlIHJ1blxuICAgKiBAcGFyYW0gcHJlRGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwcmUtZGVwbG95bWVudCBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1ByZURlcGxveVRhc2tGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQcmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgIGhhc1ByZURlcGxveVRhc2tGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcHJlRGVwbG95bWVudFNjcmlwdCxcbiAgICAgICdQcmUgRGVwbG95bWVudCcsXG4gICAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIHBvc3QgZGVwbG95bWVudCBzY3JpcHQgaW4gbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5oYXNQb3N0RGVwbG95VGFzaycsXG4gICAgICAnJHt7IG1hdHJpeC5wb3N0RGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb3N0LWRlcGxveW1lbnQgc3RlcCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gaGFzUG9zdERlcGxveVRhc2tGbGFnIFdoZXRoZXIgdGhlIHBvc3QtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHBvc3REZXBsb3ltZW50U2NyaXB0IFRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHBvc3QtZGVwbG95bWVudCBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUG9zdERlcGxveVRhc2tGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwb3N0RGVwbG95bWVudFNjcmlwdDogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICBwb3N0RGVwbG95bWVudFNjcmlwdCxcbiAgICAgICdQb3N0IERlcGxveW1lbnQnLFxuICAgICAgaGFzUG9zdERlcGxveVRhc2tGbGFnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBkZXBsb3ltZW50IGpvYnMgd2hldGhlciBmb3IgbWF0cml4IHN0cmF0ZWd5IG9yIG5vdFxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9icygpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcblxuICAgIGlmICh0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci53YXJuKCdUaGUgcHJvamVjdCBkb2VzIG5vdCBoYXZlIGFueSBlbnZpcm9ubWVudCBzZXQsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5qb2JTdHJhdGVneSA9PT0gRGVwbG95Sm9iU3RyYXRlZ3kuTUFUUklYID8gdGhpcy5kZXBsb3ltZW50Sm9ic0Zvck1hdHJpeCA6IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNdWx0aUpvYjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVwbG95bWVudCBqb2JzIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnNGb3JNYXRyaXgoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBjb25zdCB7IGVudmlyb25tZW50cywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgfSA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucztcblxuICAgIGNvbnN0IGluY2x1ZGUgPSBlbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50T3B0aW9ucyA9PiB7XG4gICAgICBjb25zdCB7IGF3c0NyZWRlbnRpYWxzIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGFzc3VtZVJvbGUgPSBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlU2V0dGluZ3MgPSBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB7XG4gICAgICAgIHJvbGVUb0Fzc3VtZTogYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lLFxuICAgICAgICBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzOiBhd3NDcmVkZW50aWFscy5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIHx8IDkwMCxcbiAgICAgIH06IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYWNjZXNzS2V5SWRTZWNyZXROYW1lID0gYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCc7XG4gICAgICBjb25zdCBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID0gYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJztcblxuICAgICAgY29uc3QgaGFzUG9zdERlcGxveVRhc2sgPSBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgIGNvbnN0IGhhc1ByZURlcGxveVRhc2sgPSBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnRPcHRpb25zLm5hbWUsXG4gICAgICAgIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSxcbiAgICAgICAgcmVnaW9uOiBhd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgICAgIGFzc3VtZVJvbGUsXG4gICAgICAgIGhhc1Bvc3REZXBsb3lUYXNrLFxuICAgICAgICBwb3N0RGVwbG95bWVudFNjcmlwdDogZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgaGFzUHJlRGVwbG95VGFzayxcbiAgICAgICAgcHJlRGVwbG95bWVudFNjcmlwdDogZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICAgICAuLi5hc3N1bWVSb2xlU2V0dGluZ3MsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBjb25jdXJyZW5jeToge1xuICAgICAgICAnZ3JvdXAnOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fS1kZXBsb3knLFxuICAgICAgICAnY2FuY2VsLWluLXByb2dyZXNzJzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IFtcbiAgICAgICAgJ3JlbGVhc2VfZ2l0aHViJyxcbiAgICAgIF0sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgc3RyYXRlZ3k6IHtcbiAgICAgICAgbWF4UGFyYWxsZWw6IDEsXG4gICAgICAgIG1hdHJpeDoge1xuICAgICAgICAgIGRvbWFpbjoge1xuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGluY2x1ZGUubWFwKGUgPT4gZS5lbnZpcm9ubWVudCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmNsdWRlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5hbWU6ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JyxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4ID0gdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4O1xuICAgIGlmIChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLnRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuc2V0dXBOcG1Db25maWdGb3JNYXRyaXg7XG4gICAgaWYgKHNldHVwTnBtQ29uZmlnU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHNldHVwTnBtQ29uZmlnU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucHJlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmRlcGxveW1lbnRTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5wb3N0RGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHsgZGVwbG95OiBqb2JEZWZpbml0aW9uIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJRHMgb2YgdGhlIGpvYnMgdGhhdCBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBlbnZpcm9ubWVudCdzIGRlcGxveW1lbnQgam9iXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGpvYiBJRHNcbiAgICovXG4gIHB1YmxpYyBnZXREZXBsb3ltZW50Sm9iUHJlcmVxdWlzaXRlSm9iSWRzKGVudmlyb25tZW50TmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFsncmVsZWFzZV9naXRodWInXTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5maW5kSW5kZXgoZW52ID0+IGVudi5uYW1lID09PSBlbnZpcm9ubWVudE5hbWUpO1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlRW52aXJvbm1lbnQgPSBpbmRleCA+IDAgPyB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzW2luZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQubmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzW2Vudmlyb25tZW50TmFtZV07XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQoZGVwKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXBsb3ltZW50IGpvYnMgZm9yIG11bHRpLWpvYiBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9ic0Zvck11bHRpSm9iKCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuICAgIGNvbnN0IHsgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUsIGVudmlyb25tZW50cyB9ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zO1xuICAgIGNvbnN0IGpvYnMgPSBlbnZpcm9ubWVudHMubWFwKChlbnZpcm9ubWVudE9wdGlvbnMpOiBbc3RyaW5nLCBKb2JdID0+IHtcbiAgICAgIHJldHVybiBbZ2V0RGVwbG95Sm9iSWQoZW52aXJvbm1lbnRPcHRpb25zLm5hbWUpLCB0aGlzLmdldEpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgam9iIGRlZmluaXRpb24gZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHJldHVybnMgVGhlIGpvYiBkZWZpbml0aW9uIGZvciB0aGUgZW52aXJvbm1lbnRcbiAgICovXG4gIHB1YmxpYyBnZXRKb2JGb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApOiBKb2Ige1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogbmFtZSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbjogSm9iID0ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIGNvbmN1cnJlbmN5OiB7XG4gICAgICAgICdncm91cCc6IGAke25hbWV9LWRlcGxveWAsXG4gICAgICAgICdjYW5jZWwtaW4tcHJvZ3Jlc3MnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuZWVkczogdGhpcy5nZXREZXBsb3ltZW50Sm9iUHJlcmVxdWlzaXRlSm9iSWRzKG5hbWUpLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KG5hbWUpO1xuICAgIGlmIChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLnRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zKSk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLmdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKHNldHVwTnBtQ29uZmlnU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHNldHVwTnBtQ29uZmlnU3RlcCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlRGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocHJlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVEZXBsb3ltZW50U3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuZGVwbG95bWVudFN0ZXApO1xuXG4gICAgY29uc3QgcG9zdERlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICk7XG4gICAgaWYgKHBvc3REZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHBvc3REZXBsb3ltZW50U3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYkRlZmluaXRpb247XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBnZW5lcmF0ZSB0aGUgZGlmZiBvdXRwdXRcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBnZW5lcmF0ZURpZmZTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICAnZGlmZjpvdXRwdXQnLFxuICAgICAgJ0dlbmVyYXRlIERpZmYgT3V0cHV0JyxcbiAgICAgIHRydWUsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgdG8gYW5ub3RhdGUgdGhlIFBSIHdpdGggdGhlIGRpZmYgb3V0cHV0IGZvciBhbGwgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBkZXBlbmRlbnRKb2JOYW1lcyBUaGUgbmFtZXMgb2YgdGhlIGpvYnMgdGhhdCB0aGUgYW5ub3RhdGlvbiBqb2IgZGVwZW5kcyBvblxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIGFubm90YXRpbmcgdGhlIFBSIHdpdGggdGhlIGRpZmYgb3V0cHV0XG4gICAqL1xuICBwdWJsaWMgZ2V0QW5ub3RhdGVEaWZmSm9iKGRlcGVuZGVudEpvYk5hbWVzOiBzdHJpbmdbXSk6IEpvYiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBuZWVkczogZGVwZW5kZW50Sm9iTmFtZXMsXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBwdWxsUmVxdWVzdHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdBbm5vdGF0ZSBQUiB3aXRoIERpZmYgT3V0cHV0JyxcbiAgICAgICAgICB1c2VzOiAnbXNoaWNrL2FkZC1wci1jb21tZW50QHYzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAnbWVzc2FnZS1pZCc6ICdkaWZmLW91dHB1dCcsXG4gICAgICAgICAgICAncmVmcmVzaC1tZXNzYWdlLXBvc2l0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdtZXNzYWdlJzogZGVwZW5kZW50Sm9iTmFtZXMubWFwKGpvYk5hbWUgPT4gYFxcJHt7IHN0ZXBzLiR7am9iTmFtZX0ub3V0cHV0cy4ke2Zvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZH0gfX1gKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIC8vIHJldHVybiB7XG4gICAgLy8gICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgLy8gICB1c2VzOiAnbXNoaWNrL2FkZC1wci1jb21tZW50QHYzJyxcbiAgICAvLyAgIHdpdGg6IHtcbiAgICAvLyAgICAgJ21lc3NhZ2UtaWQnOiBgZGlmZi1vdXRwdXQtJHtlbnZpcm9ubWVudH1gLFxuICAgIC8vICAgICAncmVmcmVzaC1tZXNzYWdlLXBvc2l0aW9uJzogdHJ1ZSxcbiAgICAvLyAgICAgJ21lc3NhZ2UnOiBgXFwke3sgc3RlcHMuJHtmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWR9Lm91dHB1dHMuZGF0YSB9fWAsXG4gICAgLy8gICB9LFxuICAgIC8vIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwIHRvIGZvcm1hdCB0aGUgZGlmZiBvdXRwdXQgaW50byBhIEdpdEh1YiBhbm5vdGF0aW9uIGNvbW1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50IFRoZSBlbnZpcm9ubWVudCB0byBmb3JtYXQgdGhlIGRpZmYgZm9yXG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnR2V0IGZvcm1hdHRlZCBkaWZmIGFubm90YXRpb24gY29tbWVudCcsXG4gICAgICBpZDogZm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcElkLFxuICAgICAgcnVuOiBbXG4gICAgICAgICdlY2hvIFwiZGF0YTw8RU9GXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICBgZWNobyBcIiMjIyBDaGFuZ2VzIGZvciBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVwiID4+ICRHSVRIVUJfT1VUUFVUYCxcbiAgICAgICAgJ2VjaG8gXCJcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiPGRldGFpbHM+XCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAnZWNobyBcIjxzdW1tYXJ5PlNob3cgZGlmZjwvc3VtbWFyeT5cIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICBcImVjaG8gJ1xcYFxcYFxcYCcgPj4gJEdJVEhVQl9PVVRQVVRcIixcbiAgICAgICAgJ2ZvciBmaWxlIGluICQoZmluZCAuIC1wYXRoIFwiKiovY2RrLm91dC9kaWZmLmxvZ1wiIDI+L2Rldi9udWxsKTsgZG8nLFxuICAgICAgICAnICBlY2hvIFwiPT09PT09PT09PSAkZmlsZSA9PT09PT09PT09XCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAnICBzZWQgXFwncy9cXFxceDFCXFxcXFtbMC05O10qW21HS0hGXS8vZ1xcJyBcIiRmaWxlXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAnICBlY2hvIFwiXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAnZG9uZScsXG4gICAgICAgIFwiZWNobyAnXFxgXFxgXFxgJyA+PiAkR0lUSFVCX09VVFBVVFwiLFxuICAgICAgICAnZWNobyBcIjwvZGV0YWlscz5cIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAnZWNobyBcIkVPRlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGFyZ3VtZW50IGZvciB0aGUgZGVwbG95IGNvbW1hbmRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldERpZmZBbm5vdGF0aW9uSm9iRm9yRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBuZWVkczogWydidWlsZCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgICBvdXRwdXRzOiB7XG4gICAgICAgIFtmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWRdOiB7XG4gICAgICAgICAgc3RlcElkOiBmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWQsXG4gICAgICAgICAgb3V0cHV0TmFtZTogJ2RhdGEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0ZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucykpO1xuXG4gICAgY29uc3Qgc2V0dXBOcG1Db25maWdTdGVwID0gdGhpcy5nZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KG5hbWUpO1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmdlbmVyYXRlRGlmZlN0ZXApO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmdldEZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBGb3JFbnZpcm9ubWVudChuYW1lKSk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9iRW50cmllcyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICBjb25zdCBqb2JzID0gT2JqZWN0LmZyb21FbnRyaWVzKGpvYkVudHJpZXMpO1xuICAgIGpvYnNbJ0RpZmYtQW5ub3RhdGlvbi1Db21tZW50J10gPSB0aGlzLmdldEFubm90YXRlRGlmZkpvYihPYmplY3Qua2V5cyhqb2JzKSk7XG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaWZmIGFubm90YXRpb24gam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERpZmYtQW5ub3RhdGlvbi0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuIl19
package/package.json CHANGED
@@ -88,7 +88,7 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "version": "0.1.778",
91
+ "version": "0.1.779",
92
92
  "jest": {
93
93
  "coverageProvider": "v8",
94
94
  "testMatch": [