@alliander-opensource/aws-jwt-sts 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Use IAM roles to authenticate principals in workloads outside of AWS using JWT
2
+
2
3
  There is an inherent risk in maintaining and storing permanent credentials. In their lifetime, they are bound to be shared, compromised, and lost. When shared, it is often among a broader audience than initially intended. They can also be lost and found, sometimes by the wrong person. And when any of this occurs, it can put your systems, data or even organization at risk.
3
4
 
4
5
  Workloads running on AWS can communicate with each other or with AWS services without the need of storing permanent credentials by assuming roles or instance profiles. However, if one of the workloads lives outside of AWS, AWS principals can no longer be used for authentication.
@@ -6,6 +7,7 @@ Workloads running on AWS can communicate with each other or with AWS services wi
6
7
  An alternative to authenticating with external workloads is to use short-lived credentials issued by a trusted party, the issuer, that the target system can accept. JWTs (JSON Web Tokens), as used by the OIDC (OpenID Connect) standard, are an example of such credentials. JWTs are short-lived credentials that can be signed and verified using a public key in what is known as public-key cryptography.
7
8
 
8
9
  ## Secure Token Service (STS)
10
+
9
11
  Exchanging credentials from on form to the other is done with a Secure Token Service (STS) function. AWS also provides STS functions not the one we need. Only the other way around: to exchange a JWT to IAM Session which is called [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html).
10
12
  This repo contains a CDK Construct which will deploy a new function which adds the function to exchange an AWS IAM (Session) credential with a signed JWT.
11
13
 
@@ -21,13 +23,13 @@ On time based events, EventBridge will trigger a Step function rotation flow. Th
21
23
 
22
24
  ## Using the construct
23
25
 
24
- 1. Init a new typescript CDK project
26
+ 1. Init a new typescript CDK project
25
27
  `cdk init app --language typescript`
26
- 2. Config npm to retrieve packages from github package repository
28
+ 2. Config npm to retrieve packages from github package repository
27
29
  `echo @alliander-opensource:registry=https://npm.pkg.github.com > .npmrc`
28
- 3. Install the aws-jwt-sts construct
30
+ 3. Install the aws-jwt-sts construct
29
31
  `npm install @alliander-opensource/aws-jwt-sts`
30
- 4. Edit lib/my-sts-stack.ts to add the construct to the stack
32
+ 4. Edit lib/my-sts-stack.ts to add the construct to the stack
31
33
  See the comments in the code for possible options
32
34
 
33
35
  ```ts
@@ -102,6 +104,7 @@ export class MyStsStack extends cdk.Stack {
102
104
  The stack outputs the urls of the endpoints. So if no custom domain is provided observe the CDK Stack output.
103
105
 
104
106
  ## Using the STS function
107
+
105
108
  A token from the STS function can be obained by invoking the token endpoint.
106
109
  `GET https://$host/token`
107
110
  optionally an audience can be provided if this needs to be different than the installed default
@@ -110,6 +113,7 @@ optionally an audience can be provided if this needs to be different than the in
110
113
  > Note: The IAM Role / User invoking the endpoint must have *execute-api:Invoke* permissions
111
114
 
112
115
  In CDK these permission is added as followed:
116
+
113
117
  ```ts
114
118
  role.addToPolicy(new iam.PolicyStatement({
115
119
  actions: ['execute-api:Invoke'],
@@ -120,11 +124,13 @@ role.addToPolicy(new iam.PolicyStatement({
120
124
  > Note: keep in mind that *resource '\*'* should only be used if no other API GW's with IAM auth are used in that account.
121
125
 
122
126
  ### Test obtaining a JWT
123
- 1. Ensure the AWS IAM Role / User invoking the token endpoint has execute-api permissions. If you are using administrator access then that is more than sufficient.
124
- 2. Use a shell with AWS cli logged in, you can use your cli with which you deployed the stack or use cloudshell for this.
125
- 3. Install awscurl for authentication
127
+
128
+ 1. Ensure the AWS IAM Role / User invoking the token endpoint has execute-api permissions. If you are using administrator access then that is more than sufficient.
129
+ 2. Use a shell with AWS cli logged in, you can use your cli with which you deployed the stack or use cloudshell for this.
130
+ 3. Install awscurl for authentication
126
131
  `pip3 install awscurl`
127
- 4. Install jwt-cli for jwt formatting
132
+ 4. Install jwt-cli for jwt formatting
128
133
  `npm install -g jwt-cli`
129
- 5. Invoke the api: `awscurl {your token endpoint}/token --service execute-api --region {your_region} | jq -r .token | jwt decode – `
130
- 6. Observe the JWT
134
+ 5. Invoke the api
135
+ `awscurl {your_token_endpoint}/token --service execute-api --region {your_region} | jq -r .token | jwt decode –`
136
+ 6. Observe the JWT
package/dist/index.js CHANGED
@@ -33,10 +33,11 @@ var wafUsage;
33
33
  (function (wafUsage) {
34
34
  wafUsage[wafUsage["ConstructProvided"] = 0] = "ConstructProvided";
35
35
  wafUsage[wafUsage["ProvideWebAclArn"] = 1] = "ProvideWebAclArn";
36
- })(wafUsage = exports.wafUsage || (exports.wafUsage = {}));
36
+ })(wafUsage || (exports.wafUsage = wafUsage = {}));
37
37
  /* eslint-disable no-new */
38
38
  class AwsJwtSts extends constructs_1.Construct {
39
39
  constructor(app, id, props) {
40
+ var _a, _b, _c, _d;
40
41
  super(app, id);
41
42
  /** ---------------------- Custom domain thingies ----------------------- */
42
43
  let distributionDomainNames = [];
@@ -184,7 +185,7 @@ class AwsJwtSts extends constructs_1.Construct {
184
185
  snsFail.next(jobFailed);
185
186
  // Create state machine
186
187
  const rotateKeysMachine = new sfn.StateMachine(this, 'RotateKeys', {
187
- definition,
188
+ definitionBody: sfn.DefinitionBody.fromChainable(definition),
188
189
  timeout: cdk.Duration.minutes(5)
189
190
  });
190
191
  rotateKeys.grantInvoke(rotateKeysMachine.role);
@@ -220,7 +221,7 @@ class AwsJwtSts extends constructs_1.Construct {
220
221
  integrationPattern: sfn.IntegrationPattern.RUN_JOB
221
222
  });
222
223
  const populateKeys = new sfn.StateMachine(this, 'populateKeys', {
223
- definition: rotateOnce.next(rotateTwice),
224
+ definitionBody: sfn.DefinitionBody.fromChainable(rotateOnce.next(rotateTwice)),
224
225
  timeout: cdk.Duration.minutes(10)
225
226
  });
226
227
  const initialRunRule = new events.Rule(this, 'initialRunRule', {
@@ -404,7 +405,7 @@ class AwsJwtSts extends constructs_1.Construct {
404
405
  }
405
406
  /** ---------------------- Cloudwatch ----------------------- */
406
407
  new cloudwatch.Alarm(this, 'StepFunctionError', {
407
- alarmName: props.alarmNameKeyRotationStepFunctionFailed ?? 'sts-key_rotate_sfn-alarm',
408
+ alarmName: (_a = props.alarmNameKeyRotationStepFunctionFailed) !== null && _a !== void 0 ? _a : 'sts-key_rotate_sfn-alarm',
408
409
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
409
410
  threshold: 1,
410
411
  evaluationPeriods: 1,
@@ -413,7 +414,7 @@ class AwsJwtSts extends constructs_1.Construct {
413
414
  treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING
414
415
  });
415
416
  new cloudwatch.Alarm(this, 'ApiGateway5XXAlarm', {
416
- alarmName: props.alarmNameApiGateway5xx ?? 'sts-5xx_api_gw-alarm',
417
+ alarmName: (_b = props.alarmNameApiGateway5xx) !== null && _b !== void 0 ? _b : 'sts-5xx_api_gw-alarm',
417
418
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
418
419
  threshold: 1,
419
420
  evaluationPeriods: 1,
@@ -428,7 +429,7 @@ class AwsJwtSts extends constructs_1.Construct {
428
429
  period: cdk.Duration.minutes(1)
429
430
  });
430
431
  new cloudwatch.Alarm(this, 'LambdaSignError', {
431
- alarmName: props.alarmNameSignLambdaFailed ?? 'sts-sign_errors_lambda-alarm',
432
+ alarmName: (_c = props.alarmNameSignLambdaFailed) !== null && _c !== void 0 ? _c : 'sts-sign_errors_lambda-alarm',
432
433
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
433
434
  threshold: 1,
434
435
  evaluationPeriods: 1,
@@ -437,7 +438,7 @@ class AwsJwtSts extends constructs_1.Construct {
437
438
  treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING
438
439
  });
439
440
  new cloudwatch.Alarm(this, 'LambdaRotateError', {
440
- alarmName: props.alarmNameKeyRotationLambdaFailed ?? 'sts-key_rotate_errors_lambda-alarm',
441
+ alarmName: (_d = props.alarmNameKeyRotationLambdaFailed) !== null && _d !== void 0 ? _d : 'sts-key_rotate_errors_lambda-alarm',
441
442
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
442
443
  threshold: 1,
443
444
  evaluationPeriods: 1,
@@ -448,4 +449,4 @@ class AwsJwtSts extends constructs_1.Construct {
448
449
  }
449
450
  }
450
451
  exports.AwsJwtSts = AwsJwtSts;
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUE0QztBQUM1QyxFQUFFO0FBQ0Ysc0NBQXNDOzs7QUFFdEMsbUNBQW1DO0FBQ25DLG1DQUFrQztBQUNsQyxpREFBZ0Q7QUFDaEQscURBQW9EO0FBQ3BELDZEQUE0RDtBQUM1RCwyQ0FBMEM7QUFDMUMsaURBQTJFO0FBQzNFLHlDQUF3QztBQUN4QywrQ0FBcUQ7QUFDckQseURBQXdEO0FBQ3hELHdFQUF1RTtBQUN2RSxpREFBZ0Q7QUFDaEQsMERBQXlEO0FBQ3pELDBEQUF5RDtBQUN6RCxtREFBa0Q7QUFDbEQsa0VBQWlFO0FBQ2pFLHlEQUF3RDtBQUN4RCwrREFBK0Q7QUFDL0QsK0NBQThDO0FBQzlDLDJDQUEwQztBQUMxQyw2Q0FBNEM7QUFDNUMseURBQXdEO0FBQ3hELCtEQUE2RDtBQUM3RCw4REFBNkQ7QUFDN0QsMkNBQXNDO0FBSXRDLElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNsQixpRUFBaUIsQ0FBQTtJQUNqQiwrREFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFHbkI7QUFnRkQsMkJBQTJCO0FBQzNCLE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBTXRDLFlBQWEsR0FBYyxFQUFFLEVBQVUsRUFBRSxLQUFxQjtRQUM1RCxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWQsNEVBQTRFO1FBRTVFLElBQUksdUJBQXVCLEdBQWEsRUFBRSxDQUFBO1FBQzFDLElBQUksZUFBeUMsQ0FBQTtRQUM3QyxJQUFJLGdCQUEwQyxDQUFBO1FBQzlDLElBQUksVUFBbUMsQ0FBQTtRQUN2QyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7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Q0FBQyxhQUFhO1NBQ2pELENBQUMsQ0FBQTtRQUVGLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDOUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxnQ0FBZ0MsSUFBSSxvQ0FBb0M7WUFDekYsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQjtZQUN4RSxTQUFTLEVBQUUsQ0FBQztZQUNaLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsZ0JBQWdCLEVBQUUsNEJBQTRCO1lBQzlDLGdCQUFnQixFQUFFLGlDQUFnQixDQUFDLGFBQWE7U0FDakQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBaGVELDhCQWdlQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjMgQWxsaWFuZGVyIE5WXG4vL1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYidcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJ1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJ1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSdcbmltcG9ydCB7IE9yZ2FuaXphdGlvblByaW5jaXBhbCwgUG9saWN5RG9jdW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJ1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJ1xuaW1wb3J0IHsgQnVja2V0RW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMydcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnXG5pbXBvcnQgKiBhcyBjbG91ZGZyb250T3JpZ2lucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJ1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnXG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cydcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJ1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1MydcbmltcG9ydCAqIGFzIHJvdXRlNTN0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnXG5pbXBvcnQgKiBhcyBhcGlnYXRld2F5IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5J1xuaW1wb3J0IHsgTWV0aG9kTG9nZ2luZ0xldmVsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknXG5pbXBvcnQgKiBhcyB3YWZ2MiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtd2FmdjInXG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucydcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnXG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJ1xuaW1wb3J0IHsgVHJlYXRNaXNzaW5nRGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJ1xuaW1wb3J0ICogYXMgbGFtYmRhTm9kZWpzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzJ1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cydcbmltcG9ydCB7IElDZXJ0aWZpY2F0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInXG5pbXBvcnQgeyBJSG9zdGVkWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJ1xuXG5leHBvcnQgZW51bSB3YWZVc2FnZSB7XG4gIENvbnN0cnVjdFByb3ZpZGVkLFxuICBQcm92aWRlV2ViQWNsQXJuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzSnd0U3RzUHJvcHMge1xuICAvKipcbiAgICogZGVmYXVsdEF1ZGllbmNlIHdoaWNoIGlzIHVzZWQgaW4gZGUgSldUJ3NcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRBdWRpZW5jZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0ZWRab25lSWQgb2YgdGhlIGRvbWFpbiB1c2VkIGZvciBob3N0aW5nIHRoZSBzdHMgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaG9zdGVkWm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAqIE9wdGlvbmFsIHN1YmRvbWFpbiBuYW1lIG9mIG9pZGMgZGlzY292ZXJ5LCBkZWZhdWx0OiBvaWRjLlxuICAqL1xuICByZWFkb25seSBvaWRjU3ViZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAqIE9wdGlvbmFsIHN1YmRvbWFpbiBuYW1lIG9mIHRoZSB0b2tlbiBhcGkgKG9uIGFwaSBndyksIGRlZmF1bHQ6IHRva2VuLlxuICAqL1xuICByZWFkb25seSB0b2tlblN1YmRvbWFpbj86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgd2FmIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBBUEkgR1dcbiAgICpcbiAgICogTm9uZTogbm8gd2FmIGlzIHVzZWRcbiAgICogQ29uc3RydWN0UHJvdmlkZWQ6IHRoZSBjb25zdHJ1Y3Qgd2lsbCBkZXBsb3kgYSB3YWZBY2wgd2l0aCBvcGluaW9uYXRlZCBydWxlc1xuICAgKiBQcm92aWRlV2ViQWNsQXJuOiBwcm92aWRlIHlvdXIgb3duIGFyblxuICAgKi9cbiAgcmVhZG9ubHkgYXBpR3dXYWY/OiB3YWZVc2FnZTtcblxuICAvKipcbiAgICogQXJuIG9mIHRoZSB3YWYgd2ViQWNsIHJ1bGUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBBUEkgR1dcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGFwaUd3V2FmV2ViQWNsQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIEFXUyBPcmdhbml6YXRpb24gMC14eHh4XG4gICAqXG4gICAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQ1BVIEFyY2hpdGVjdHVyZVxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogbGFtYmRhLkFyY2hpdGVjdHVyZVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBib29sZWFuIHRvIHNwZWNpZnkgaWYga2V5IHJvdGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgb24gY3JlYXRpb24gb2YgdGhlIHN0YWNrLCBkZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUtleVJvdGF0ZU9uQ3JlYXRlPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gbmFtZSBmb3IgdGhlIENsb3VkV2F0Y2ggQWxhcm0gbW9uaXRvcmluZyBTdGVwIEZ1bmN0aW9uIGZhaWx1cmVzLCBkZWZhdWx0OiBzdHMta2V5X3JvdGF0ZV9zZm4tYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IGFsYXJtTmFtZUtleVJvdGF0aW9uU3RlcEZ1bmN0aW9uRmFpbGVkPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciB0aGUgQ2xvdWRXYXRjaCBBbGFybSBtb25pdG9yaW5nIDV4eCBlcnJvcnMgb24gdGhlIEFQSSBHYXRld2F5LCBkZWZhdWx0OiBzdHMtNXh4X2FwaV9ndy1hbGFybVxuICAgKi9cbiAgcmVhZG9ubHkgYWxhcm1OYW1lQXBpR2F0ZXdheTV4eD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gbmFtZSBmb3IgdGhlIENsb3VkV2F0Y2ggQWxhcm0gbW9uaXRvcmluZyBTaWduIExhbWJkYSBmYWlsdXJlcywgZGVmYXVsdDogc3RzLXNpZ25fZXJyb3JzX2xhbWJkYS1hbGFybVxuICAgKi9cbiAgcmVhZG9ubHkgYWxhcm1OYW1lU2lnbkxhbWJkYUZhaWxlZD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gbmFtZSBmb3IgdGhlIENsb3VkV2F0Y2ggQWxhcm0gbW9uaXRvcmluZyBLZXkgUm90YXRpb24gTGFtYmRhIGZhaWx1cmVzLCBkZWZhdWx0OiBzdHMta2V5X3JvdGF0ZV9lcnJvcnNfbGFtYmRhLWFsYXJtXG4gICAqL1xuICByZWFkb25seSBhbGFybU5hbWVLZXlSb3RhdGlvbkxhbWJkYUZhaWxlZD86IHN0cmluZ1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cbmV4cG9ydCBjbGFzcyBBd3NKd3RTdHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogU05TIHRvcGljIHVzZWQgdG8gcHVibGlzaCBlcnJvcnMgZnJvbSB0aGUgU3RlcCBGdW5jdGlvbiByb3RhdGlvbiBmbG93XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmFpbGVkUm90YXRpb25Ub3BpYzogc25zLlRvcGljXG5cbiAgY29uc3RydWN0b3IgKGFwcDogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzSnd0U3RzUHJvcHMpIHtcbiAgICBzdXBlcihhcHAsIGlkKVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ3VzdG9tIGRvbWFpbiB0aGluZ2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgbGV0IGRpc3RyaWJ1dGlvbkRvbWFpbk5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gICAgbGV0IG9pZGNDZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkXG4gICAgbGV0IHRva2VuQ2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZFxuICAgIGxldCBob3N0ZWRab25lOiBJSG9zdGVkWm9uZSB8IHVuZGVmaW5lZFxuICAgIGNvbnN0IG9pZGNTdWJkb21haW4gPSBwcm9wcy5vaWRjU3ViZG9tYWluID8gcHJvcHMub2lkY1N1YmRvbWFpbiA6ICdvaWRjJ1xuICAgIGNvbnN0IHRva2VuU3ViZG9tYWluID0gcHJvcHMudG9rZW5TdWJkb21haW4gPyBwcm9wcy50b2tlblN1YmRvbWFpbiA6ICd0b2tlbidcbiAgICBjb25zdCBhcmNoaXRlY3R1cmUgPSBwcm9wcy5hcmNoaXRlY3R1cmUgPyBwcm9wcy5hcmNoaXRlY3R1cmUgOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgIGxldCBvaWRjRG9tYWluTmFtZSA9ICcnXG4gICAgbGV0IHRva2VuRG9tYWluTmFtZSA9ICcnXG5cbiAgICBjb25zdCB1c2VDdXN0b21Eb21haW4gPSBwcm9wcy5ob3N0ZWRab25lSWQgJiYgcHJvcHMuaG9zdGVkWm9uZU5hbWVcblxuICAgIGlmICh1c2VDdXN0b21Eb21haW4pIHtcbiAgICAgIG9pZGNEb21haW5OYW1lID0gb2lkY1N1YmRvbWFpbiArICcuJyArIHByb3BzLmhvc3RlZFpvbmVOYW1lXG4gICAgICB0b2tlbkRvbWFpbk5hbWUgPSB0b2tlblN1YmRvbWFpbiArICcuJyArIHByb3BzLmhvc3RlZFpvbmVOYW1lXG5cbiAgICAgIGRpc3RyaWJ1dGlvbkRvbWFpbk5hbWVzID0gW29pZGNEb21haW5OYW1lXVxuXG4gICAgICBob3N0ZWRab25lID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ2hvc3RlZFpvbmUnLFxuICAgICAgICB7XG4gICAgICAgICAgem9uZU5hbWU6IHByb3BzLmhvc3RlZFpvbmVOYW1lISxcbiAgICAgICAgICBob3N0ZWRab25lSWQ6IHByb3BzLmhvc3RlZFpvbmVJZCFcbiAgICAgICAgfVxuICAgICAgKVxuXG4gICAgICBvaWRjQ2VydGlmaWNhdGUgPSBuZXcgYWNtLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDcm9zc1JlZ2lvbkNlcnRpZmljYXRlJywge1xuICAgICAgICBkb21haW5OYW1lOiBvaWRjRG9tYWluTmFtZSxcbiAgICAgICAgaG9zdGVkWm9uZSxcbiAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJ1xuICAgICAgfSlcblxuICAgICAgdG9rZW5DZXJ0aWZpY2F0ZSA9IG5ldyBhY20uQ2VydGlmaWNhdGUodGhpcywgJ3Rva2VuQ2VydGlmaWNhdGUnLCB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRva2VuRG9tYWluTmFtZSxcbiAgICAgICAgdmFsaWRhdGlvbjogYWNtLkNlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKGhvc3RlZFpvbmUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFMzIERlZmluaXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIC8vIENyZWF0ZSBidWNrZXQgd2hlcmUgb2lkYyBpbmZvcm1hdGlvbiBjYW4gYmUgc3RvcmVkXG4gICAgY29uc3Qgb2lkY2J1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ29pZGNidWNrZXQnLCB7XG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMXG4gICAgfSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENsb3VkZnJvbnQgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBjb25zdCBjbG91ZGZyb250T0FJID0gbmV3IGNsb3VkZnJvbnQuT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcywgJ2Nsb3VkZnJvbnQtT0FJJywge1xuICAgICAgY29tbWVudDogJ09BSSBmb3Igb2lkYydcbiAgICB9KVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsICdvaWRjRGlzdHJpYnV0aW9uJywge1xuICAgICAgZG9tYWluTmFtZXM6IGRpc3RyaWJ1dGlvbkRvbWFpbk5hbWVzLFxuICAgICAgY29tbWVudDogJ0Rpc2NvdmVyeSBlbmRwb2ludCBmb3IgT0lEQycsXG4gICAgICBjZXJ0aWZpY2F0ZTogb2lkY0NlcnRpZmljYXRlLFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogbmV3IGNsb3VkZnJvbnRPcmlnaW5zLlMzT3JpZ2luKG9pZGNidWNrZXQsIHsgb3JpZ2luQWNjZXNzSWRlbnRpdHk6IGNsb3VkZnJvbnRPQUkgfSksXG4gICAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQU1xuICAgICAgfVxuICAgIH0pXG5cbiAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tIExhbWJkYSBIYW5kbGVycyBEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgY29uc3QgaXNzdWVyID0gdXNlQ3VzdG9tRG9tYWluID8gJ2h0dHBzOi8vJyArIG9pZGNEb21haW5OYW1lIDogJ2h0dHBzOi8vJyArIGRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lXG5cbiAgICBjb25zdCByb3RhdGVLZXlzUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAncm90YXRlS2V5c1JvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpXVxuICAgIH0pXG4gICAgY29uc3Qgcm90YXRlS2V5cyA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgJ2tleXJvdGF0ZScsIHtcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE4X1gsXG4gICAgICByb2xlOiByb3RhdGVLZXlzUm9sZSxcbiAgICAgIGFyY2hpdGVjdHVyZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFMzX0JVQ0tFVDogb2lkY2J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBJU1NVRVI6IGlzc3VlclxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBzaWduUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnc2lnblJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpXVxuICAgIH0pXG4gICAgY29uc3Qgc2lnbiA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgJ3NpZ24nLCB7XG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgcm9sZTogc2lnblJvbGUsXG4gICAgICBhcmNoaXRlY3R1cmUsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBJU1NVRVI6IGlzc3VlcixcbiAgICAgICAgREVGQVVMVF9BVURJRU5DRTogcHJvcHMuZGVmYXVsdEF1ZGllbmNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU05TIFRvcGljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIHRoaXMuZmFpbGVkUm90YXRpb25Ub3BpYyA9IG5ldyBzbnMuVG9waWModGhpcywgJ3N0cycpXG4gICAgY29uc3Qgc25zRmFpbCA9IG5ldyB0YXNrcy5TbnNQdWJsaXNoKHRoaXMsICdzbnNGYWlsZWQnLCB7XG4gICAgICB0b3BpYzogdGhpcy5mYWlsZWRSb3RhdGlvblRvcGljLFxuICAgICAgc3ViamVjdDogJ1NUUyBLZXlSb3RhdGUgc3RlcCBmdW5jdGlvbiBleGVjdXRpb24gZmFpbGVkJyxcbiAgICAgIG1lc3NhZ2U6IHNmbi5UYXNrSW5wdXQuZnJvbUpzb25QYXRoQXQoJyQnKVxuICAgIH0pXG5cbiAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tIFN0ZXAgZnVuY3Rpb25zIERlZmluaXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBjb25zdCBkZWxldGVQcmV2aW91c1N0ZXAgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKHRoaXMsICdkZWxldGUgUHJldmlvdXMnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogcm90YXRlS2V5cyxcbiAgICAgIHBheWxvYWQ6IHNmbi5UYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgIHN0ZXA6ICdkZWxldGVQcmV2aW91cydcbiAgICAgIH0pLFxuICAgICAgb3V0cHV0UGF0aDogJyQuUGF5bG9hZCdcbiAgICB9KVxuXG4gICAgY29uc3QgbW92ZVByZXZpb3VzU3RlcCA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UodGhpcywgJ21vdmUgUHJldmlvdXMnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogcm90YXRlS2V5cyxcbiAgICAgIHBheWxvYWQ6IHNmbi5UYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgIHN0ZXA6ICdtb3ZlUHJldmlvdXMnXG4gICAgICB9KSxcbiAgICAgIG91dHB1dFBhdGg6ICckLlBheWxvYWQnXG4gICAgfSlcblxuICAgIGNvbnN0IG1vdmVDdXJyZW50U3RlcCA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UodGhpcywgJ21vdmUgQ3VycmVudCcsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiByb3RhdGVLZXlzLFxuICAgICAgcGF5bG9hZDogc2ZuLlRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgc3RlcDogJ21vdmVDdXJyZW50J1xuICAgICAgfSksXG4gICAgICBvdXRwdXRQYXRoOiAnJC5QYXlsb2FkJ1xuICAgIH0pXG5cbiAgICBjb25zdCBjcmVhdGVQZW5kaW5nU3RlcCA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UodGhpcywgJ2NyZWF0ZSBQZW5kaW5nJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHJvdGF0ZUtleXMsXG4gICAgICBwYXlsb2FkOiBzZm4uVGFza0lucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICBzdGVwOiAnY3JlYXRlUGVuZGluZydcbiAgICAgIH0pLFxuICAgICAgb3V0cHV0UGF0aDogJyQuUGF5bG9hZCdcbiAgICB9KVxuXG4gICAgY29uc3QgZ2VuZXJhdGVBcnRpZmFjdHNTdGVwID0gbmV3IHRhc2tzLkxhbWJkYUludm9rZSh0aGlzLCAnZ2VuZXJhdGUgYXJ0aWZhY3RzJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHJvdGF0ZUtleXMsXG4gICAgICBwYXlsb2FkOiBzZm4uVGFza0lucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICBzdGVwOiAnZ2VuZXJhdGVBcnRpZmFjdHMnXG4gICAgICB9KSxcbiAgICAgIG91dHB1dFBhdGg6ICckLlBheWxvYWQnXG4gICAgfSlcblxuICAgIGNvbnN0IGpvYkZhaWxlZCA9IG5ldyBzZm4uRmFpbCh0aGlzLCAnRmFpbGVkJywge1xuICAgICAgY2F1c2U6ICdBV1MgQmF0Y2ggSm9iIEZhaWxlZCcsXG4gICAgICBlcnJvcjogJ0Rlc2NyaWJlSm9iIHJldHVybmVkIEZBSUxFRCdcbiAgICB9KVxuXG4gICAgY29uc3Qgam9iU3VjY2VzcyA9IG5ldyBzZm4uU3VjY2VlZCh0aGlzLCAnU3VjY2VzcyEnKVxuXG4gICAgZGVsZXRlUHJldmlvdXNTdGVwLmFkZENhdGNoKHNuc0ZhaWwpXG4gICAgbW92ZVByZXZpb3VzU3RlcC5hZGRDYXRjaChzbnNGYWlsKVxuICAgIG1vdmVDdXJyZW50U3RlcC5hZGRDYXRjaChzbnNGYWlsKVxuICAgIGNyZWF0ZVBlbmRpbmdTdGVwLmFkZENhdGNoKHNuc0ZhaWwpXG4gICAgZ2VuZXJhdGVBcnRpZmFjdHNTdGVwLmFkZENhdGNoKHNuc0ZhaWwpXG5cbiAgICAvLyBDcmVhdGUgY2hhaW5cbiAgICBjb25zdCBkZWZpbml0aW9uID0gZGVsZXRlUHJldmlvdXNTdGVwXG4gICAgICAubmV4dChtb3ZlUHJldmlvdXNTdGVwKVxuICAgICAgLm5leHQobW92ZUN1cnJlbnRTdGVwKVxuICAgICAgLm5leHQoY3JlYXRlUGVuZGluZ1N0ZXApXG4gICAgICAubmV4dChnZW5lcmF0ZUFydGlmYWN0c1N0ZXApXG4gICAgICAubmV4dChqb2JTdWNjZXNzKVxuXG4gICAgc25zRmFpbC5uZXh0KGpvYkZhaWxlZClcblxuICAgIC8vIENyZWF0ZSBzdGF0ZSBtYWNoaW5lXG4gICAgY29uc3Qgcm90YXRlS2V5c01hY2hpbmUgPSBuZXcgc2ZuLlN0YXRlTWFjaGluZSh0aGlzLCAnUm90YXRlS2V5cycsIHtcbiAgICAgIGRlZmluaXRpb24sXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KVxuICAgIH0pXG5cbiAgICByb3RhdGVLZXlzLmdyYW50SW52b2tlKHJvdGF0ZUtleXNNYWNoaW5lLnJvbGUpXG4gICAgb2lkY2J1Y2tldC5ncmFudFJlYWRXcml0ZShyb3RhdGVLZXlzKVxuXG4gICAgY29uc3Qgc3RhdGVtZW50U2lnbiA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KClcbiAgICBzdGF0ZW1lbnRTaWduLmFkZEFjdGlvbnMoJ2ttczoqJylcbiAgICBzdGF0ZW1lbnRTaWduLmFkZFJlc291cmNlcygnKicpXG4gICAgY29uc3Qgc2lnblBvbGljeSA9IG5ldyBpYW0uTWFuYWdlZFBvbGljeSh0aGlzLCAnU2lnblBvbGljeScsIHtcbiAgICAgIHN0YXRlbWVudHM6IFtzdGF0ZW1lbnRTaWduXVxuICAgIH0pXG4gICAgc2lnblJvbGUuYWRkTWFuYWdlZFBvbGljeShzaWduUG9saWN5KVxuXG4gICAgY29uc3Qgc3RhdGVtZW50Um90YXRlS2V5cyA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KClcbiAgICBzdGF0ZW1lbnRSb3RhdGVLZXlzLmFkZEFjdGlvbnMoJ2ttczoqJylcbiAgICBzdGF0ZW1lbnRSb3RhdGVLZXlzLmFkZFJlc291cmNlcygnKicpXG4gICAgY29uc3Qgcm90YXRlS2V5c1BvbGljeSA9IG5ldyBpYW0uTWFuYWdlZFBvbGljeSh0aGlzLCAnUm90YXRlS2V5c1BvbGljeScsIHtcbiAgICAgIHN0YXRlbWVudHM6IFtzdGF0ZW1lbnRSb3RhdGVLZXlzXVxuICAgIH0pXG4gICAgcm90YXRlS2V5c1JvbGUuYWRkTWFuYWdlZFBvbGljeShyb3RhdGVLZXlzUG9saWN5KVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLSBFdmVudHMgUnVsZSBEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgLy8gUnVuIGV2ZXJ5IDMgbW9udGhzIGF0IDggUE0gVVRDXG4gICAgY29uc3Qgc2NoZWR1bGVkUm90YXRlUnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnc2NoZWR1bGVkUm90YXRlUnVsZScsIHtcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbignY3JvbigwIDIwIDEgKi8zID8gKiknKVxuICAgIH0pXG4gICAgc2NoZWR1bGVkUm90YXRlUnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKHJvdGF0ZUtleXNNYWNoaW5lKSlcblxuICAgIC8vIENyZWF0ZSBzdGF0ZSBtYWNoaW5lIGFuZCB0cmlnZ2VyIHRvIHBvcHVsYXRlIGluaXRpYWwga2V5c1xuICAgIGlmICghcHJvcHMuZGlzYWJsZUtleVJvdGF0ZU9uQ3JlYXRlKSB7XG4gICAgICBjb25zdCByb3RhdGVPbmNlID0gbmV3IHRhc2tzLlN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbih0aGlzLCAncm90YXRlT25jZScsIHtcbiAgICAgICAgc3RhdGVNYWNoaW5lOiByb3RhdGVLZXlzTWFjaGluZSxcbiAgICAgICAgaW50ZWdyYXRpb25QYXR0ZXJuOiBzZm4uSW50ZWdyYXRpb25QYXR0ZXJuLlJVTl9KT0JcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJvdGF0ZVR3aWNlID0gbmV3IHRhc2tzLlN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbih0aGlzLCAncm90YXRlVHdpY2UnLCB7XG4gICAgICAgIHN0YXRlTWFjaGluZTogcm90YXRlS2V5c01hY2hpbmUsXG4gICAgICAgIGludGVncmF0aW9uUGF0dGVybjogc2ZuLkludGVncmF0aW9uUGF0dGVybi5SVU5fSk9CXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwb3B1bGF0ZUtleXMgPSBuZXcgc2ZuLlN0YXRlTWFjaGluZSh0aGlzLCAncG9wdWxhdGVLZXlzJywge1xuICAgICAgICBkZWZpbml0aW9uOiByb3RhdGVPbmNlLm5leHQocm90YXRlVHdpY2UpLFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygxMClcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGluaXRpYWxSdW5SdWxlID0gbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdpbml0aWFsUnVuUnVsZScsIHtcbiAgICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgICAgc291cmNlOiBbJ2F3cy5jbG91ZGZvcm1hdGlvbiddLFxuICAgICAgICAgIHJlc291cmNlczogW2Nkay5TdGFjay5vZih0aGlzKS5zdGFja0lkXSxcbiAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0Nsb3VkRm9ybWF0aW9uIFN0YWNrIFN0YXR1cyBDaGFuZ2UnXSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICdzdGF0dXMtZGV0YWlscyc6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBbJ0NSRUFURV9DT01QTEVURSddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBpbml0aWFsUnVuUnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKHBvcHVsYXRlS2V5cykpXG4gICAgfVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQVBJIEdhdGV3YXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIC8vIG9ubHkgc2V0IHBvbGljeSB3aGVuIG9yZ0lkIGlzIHNldFxuICAgIGxldCBhcGlQb2xpY3k6IFBvbGljeURvY3VtZW50IHwgdW5kZWZpbmVkXG4gICAgaWYgKHByb3BzLm9yZ0lkKSB7XG4gICAgICBhcGlQb2xpY3kgPSBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFsnZXhlY3V0ZS1hcGk6SW52b2tlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgICAgICBuZXcgT3JnYW5pemF0aW9uUHJpbmNpcGFsKHByb3BzLm9yZ0lkKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnQVBJR2F0ZXdheUFjY2Vzc0xvZ3MnLCB7XG4gICAgICByZXRlbnRpb246IDdcbiAgICB9KVxuXG4gICAgLy8gQ3JlYXRlIEFQSVxuICAgIGNvbnN0IGFwaSA9IG5ldyBhcGlnYXRld2F5LkxhbWJkYVJlc3RBcGkodGhpcywgJ2p3ay1zdHMtYXBpJywge1xuICAgICAgZGVzY3JpcHRpb246ICdTVFMgVG9rZW4gQVBJIEdhdGV3YXknLFxuICAgICAgaGFuZGxlcjogc2lnbixcbiAgICAgIGRlZmF1bHRNZXRob2RPcHRpb25zOiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhcGlnYXRld2F5LkF1dGhvcml6YXRpb25UeXBlLklBTVxuICAgICAgfSxcbiAgICAgIGVuZHBvaW50Q29uZmlndXJhdGlvbjoge1xuICAgICAgICB0eXBlczogW2FwaWdhdGV3YXkuRW5kcG9pbnRUeXBlLlJFR0lPTkFMXVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogYXBpUG9saWN5LFxuICAgICAgZGVwbG95T3B0aW9uczoge1xuICAgICAgICBsb2dnaW5nTGV2ZWw6IE1ldGhvZExvZ2dpbmdMZXZlbC5JTkZPLFxuICAgICAgICBhY2Nlc3NMb2dEZXN0aW5hdGlvbjogbmV3IGFwaWdhdGV3YXkuTG9nR3JvdXBMb2dEZXN0aW5hdGlvbihsb2dHcm91cClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0gUm91dGU1MyBEZWZpbml0aW9uIGZvciBjdXN0b20gZG9tYWluIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGlmICh1c2VDdXN0b21Eb21haW4gJiYgaG9zdGVkWm9uZSkge1xuICAgICAgYXBpLmFkZERvbWFpbk5hbWUoJ2FwaUN1c3RvbURvbWFpbk5hbWUnLCB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRva2VuRG9tYWluTmFtZSxcbiAgICAgICAgY2VydGlmaWNhdGU6IHRva2VuQ2VydGlmaWNhdGUhXG4gICAgICB9KVxuXG4gICAgICAvLyBBZGQgQSByZWNvcmQgZm9yIGNsb3VkZnJvbnQgZGlzdHJpYnV0aW9uXG5cbiAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgJ29pZGNSZWNvcmQnLCB7XG4gICAgICAgIHJlY29yZE5hbWU6IG9pZGNEb21haW5OYW1lLFxuICAgICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgcm91dGU1M3RhcmdldHMuQ2xvdWRGcm9udFRhcmdldChkaXN0cmlidXRpb24pKVxuICAgICAgfSlcblxuICAgICAgbmV3IHJvdXRlNTMuQVJlY29yZCh0aGlzLCAndG9rZW5SZWNvcmQnLCB7XG4gICAgICAgIHJlY29yZE5hbWU6IHRva2VuRG9tYWluTmFtZSxcbiAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IHJvdXRlNTN0YXJnZXRzLkFwaUdhdGV3YXkoYXBpKSlcbiAgICAgIH0pXG5cbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICd0b2tlbkVuZHBvaW50Jywge1xuICAgICAgICB2YWx1ZTogJ2h0dHBzOi8vJyArIHRva2VuRG9tYWluTmFtZSArICcvdG9rZW4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VybCBvZiB0aGUgdG9rZW4gZW5kcG9pbnQnLFxuICAgICAgICBleHBvcnROYW1lOiAndG9rZW5FbmRwb2ludCdcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICd0b2tlbkVuZHBvaW50Jywge1xuICAgICAgICB2YWx1ZTogYXBpLnVybCArICd0b2tlbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVXJsIG9mIHRoZSB0b2tlbiBlbmRwb2ludCcsXG4gICAgICAgIGV4cG9ydE5hbWU6ICd0b2tlbkVuZHBvaW50J1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnaXNzdWVyJywge1xuICAgICAgdmFsdWU6IGlzc3VlcixcbiAgICAgIGRlc2NyaXB0aW9uOiAnVXJsIG9mIHRoZSBpc3N1ZXInLFxuICAgICAgZXhwb3J0TmFtZTogJ2lzc3VlcidcbiAgICB9KVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV0FGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBpZiAocHJvcHMuYXBpR3dXYWYgPT09IHdhZlVzYWdlLkNvbnN0cnVjdFByb3ZpZGVkKSB7XG4gICAgICAvLyBBUEkgZ2F0ZXdheSBXQUYgQUNMIGFuZCBydWxlc1xuICAgICAgY29uc3QgQVBJR2F0ZXdheVdlYkFDTCA9IG5ldyB3YWZ2Mi5DZm5XZWJBQ0wodGhpcywgJ0FQSUdhdGV3YXlXZWJBQ0wnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyBXZWJBQ0wgZm9yIEF1dGggQVBpIEdhdGV3YXknLFxuICAgICAgICBzY29wZTogJ1JFR0lPTkFMJyxcbiAgICAgICAgZGVmYXVsdEFjdGlvbjogeyBhbGxvdzoge30gfSxcbiAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgIG1ldHJpY05hbWU6ICdBUElXZWJBQ0wnLFxuICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0FXUy1BV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgICAgIHByaW9yaXR5OiAwLFxuICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG92ZXJyaWRlQWN0aW9uOiB7XG4gICAgICAgICAgICAgIG5vbmU6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIG1ldHJpY05hbWU6ICdBV1MtQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdBV1MtQVdTTWFuYWdlZFJ1bGVzQW1hem9uSXBSZXB1dGF0aW9uTGlzdCcsXG4gICAgICAgICAgICBwcmlvcml0eTogMSxcbiAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICBtYW5hZ2VkUnVsZUdyb3VwU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0FtYXpvbklwUmVwdXRhdGlvbkxpc3QnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvdmVycmlkZUFjdGlvbjoge1xuICAgICAgICAgICAgICBub25lOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBtZXRyaWNOYW1lOiAnQVdTLUFXU01hbmFnZWRSdWxlc0FtYXpvbklwUmVwdXRhdGlvbkxpc3QnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnYXBpLWd3LUF1dGhBUElHZW9Mb2NhdGlvbicsXG4gICAgICAgICAgICBwcmlvcml0eTogMyxcbiAgICAgICAgICAgIGFjdGlvbjogeyBibG9jazoge30gfSxcbiAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgbWV0cmljTmFtZTogJ0F1dGhBUElHZW9Mb2NhdGlvbicsXG4gICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgZ2VvTWF0Y2hTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZXM6IFsnQlknLCAnQ04nLCAnSVInLCAnUlUnLCAnU1knLCAnS1AnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnYXBpLWd3LXJhdGVMaW1pdFJ1bGUnLFxuICAgICAgICAgICAgcHJpb3JpdHk6IDQsXG4gICAgICAgICAgICBhY3Rpb246IHsgYmxvY2s6IHt9IH0sXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgIG1ldHJpY05hbWU6ICdyYXRlTGltaXRSdWxlJyxcbiAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICByYXRlQmFzZWRTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGVLZXlUeXBlOiAnSVAnLFxuICAgICAgICAgICAgICAgIGxpbWl0OiAxMDBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgLy8gV2ViIEFDTCBBc3NvY2lhdGlvblxuICAgICAgbmV3IHdhZnYyLkNmbldlYkFDTEFzc29jaWF0aW9uKHRoaXMsICdBUElHYXRld2F5V2ViQUNMQXNzb2NpYXRpb24nLCB7XG4gICAgICAgIHdlYkFjbEFybjogQVBJR2F0ZXdheVdlYkFDTC5hdHRyQXJuLFxuICAgICAgICByZXNvdXJjZUFybjogYXBpLmRlcGxveW1lbnRTdGFnZS5zdGFnZUFyblxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHByb3BzLmFwaUd3V2FmID09PSB3YWZVc2FnZS5Qcm92aWRlV2ViQWNsQXJuICYmIHByb3BzLmFwaUd3V2FmV2ViQWNsQXJuKSB7XG4gICAgICAvLyBXZWIgQUNMIEFzc29jaWF0aW9uXG4gICAgICBuZXcgd2FmdjIuQ2ZuV2ViQUNMQXNzb2NpYXRpb24odGhpcywgJ0FQSUdhdGV3YXlXZWJBQ0xBc3NvY2lhdGlvbicsIHtcbiAgICAgICAgd2ViQWNsQXJuOiBwcm9wcy5hcGlHd1dhZldlYkFjbEFybixcbiAgICAgICAgcmVzb3VyY2VBcm46IGFwaS5kZXBsb3ltZW50U3RhZ2Uuc3RhZ2VBcm5cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xvdWR3YXRjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ1N0ZXBGdW5jdGlvbkVycm9yJywge1xuICAgICAgYWxhcm1OYW1lOiBwcm9wcy5hbGFybU5hbWVLZXlSb3RhdGlvblN0ZXBGdW5jdGlvbkZhaWxlZCA/PyAnc3RzLWtleV9yb3RhdGVfc2ZuLWFsYXJtJyxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgbWV0cmljOiByb3RhdGVLZXlzTWFjaGluZS5tZXRyaWNGYWlsZWQoKSxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246ICdLZXkgUm90YXRpb24gRmFpbGVkJyxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElOR1xuICAgIH0pXG5cbiAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnQXBpR2F0ZXdheTVYWEFsYXJtJywge1xuICAgICAgYWxhcm1OYW1lOiBwcm9wcy5hbGFybU5hbWVBcGlHYXRld2F5NXh4ID8/ICdzdHMtNXh4X2FwaV9ndy1hbGFybScsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIG1ldHJpYzogYXBpLm1ldHJpY1NlcnZlckVycm9yKCksXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiAnNXh4IFNUUyBBUEkgZ2F0ZXdheSBmYWlsdXJlcycsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkdcbiAgICB9KVxuXG4gICAgY29uc3Qgc2lnbkVycm9ycyA9IHNpZ24ubWV0cmljRXJyb3JzKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMSlcbiAgICB9KVxuXG4gICAgY29uc3Qgcm90YXRlRXJyb3JzID0gcm90YXRlS2V5cy5tZXRyaWNFcnJvcnMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcygxKVxuICAgIH0pXG5cbiAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnTGFtYmRhU2lnbkVycm9yJywge1xuICAgICAgYWxhcm1OYW1lOiBwcm9wcy5hbGFybU5hbWVTaWduTGFtYmRhRmFpbGVkID8/ICdzdHMtc2lnbl9lcnJvcnNfbGFtYmRhLWFsYXJtJyxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgbWV0cmljOiBzaWduRXJyb3JzLFxuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogJ1NpZ24gTGFtYmRhIEZhaWxlZCcsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkdcbiAgICB9KVxuXG4gICAgbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ0xhbWJkYVJvdGF0ZUVycm9yJywge1xuICAgICAgYWxhcm1OYW1lOiBwcm9wcy5hbGFybU5hbWVLZXlSb3RhdGlvbkxhbWJkYUZhaWxlZCA/PyAnc3RzLWtleV9yb3RhdGVfZXJyb3JzX2xhbWJkYS1hbGFybScsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIG1ldHJpYzogcm90YXRlRXJyb3JzLFxuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogJ0tleSBSb3RhdGlvbiBMYW1iZGEgRmFpbGVkJyxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElOR1xuICAgIH0pXG4gIH1cbn1cbiJdfQ==
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUE0QztBQUM1QyxFQUFFO0FBQ0Ysc0NBQXNDOzs7QUFFdEMsbUNBQW1DO0FBQ25DLG1DQUFrQztBQUNsQyxpREFBZ0Q7QUFDaEQscURBQW9EO0FBQ3BELDZEQUE0RDtBQUM1RCwyQ0FBMEM7QUFDMUMsaURBQTJFO0FBQzNFLHlDQUF3QztBQUN4QywrQ0FBcUQ7QUFDckQseURBQXdEO0FBQ3hELHdFQUF1RTtBQUN2RSxpREFBZ0Q7QUFDaEQsMERBQXlEO0FBQ3pELDBEQUF5RDtBQUN6RCxtREFBa0Q7QUFDbEQsa0VBQWlFO0FBQ2pFLHlEQUF3RDtBQUN4RCwrREFBK0Q7QUFDL0QsK0NBQThDO0FBQzlDLDJDQUEwQztBQUMxQyw2Q0FBNEM7QUFDNUMseURBQXdEO0FBQ3hELCtEQUE2RDtBQUM3RCw4REFBNkQ7QUFDN0QsMkNBQXNDO0FBSXRDLElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNsQixpRUFBaUIsQ0FBQTtJQUNqQiwrREFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsUUFBUSx3QkFBUixRQUFRLFFBR25CO0FBZ0ZELDJCQUEyQjtBQUMzQixNQUFhLFNBQVUsU0FBUSxzQkFBUztJQU10QyxZQUFhLEdBQWMsRUFBRSxFQUFVLEVBQUUsS0FBcUI7O1FBQzVELEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFZCw0RUFBNEU7UUFFNUUsSUFBSSx1QkFBdUIsR0FBYSxFQUFFLENBQUE7UUFDMUMsSUFBSSxlQUF5QyxDQUFBO1FBQzdDLElBQUksZ0JBQTBDLENBQUE7UUFDOUMsSUFBSSxVQUFtQyxDQUFBO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUN4RSxNQUFN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WUFDNUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQjtZQUN4RSxTQUFTLEVBQUUsQ0FBQztZQUNaLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsZ0JBQWdCLEVBQUUsb0JBQW9CO1lBQ3RDLGdCQUFnQixFQUFFLGlDQUFnQixDQUFDLGFBQWE7U0FDakQsQ0FBQyxDQUFBO1FBRUYsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUM5QyxTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0NBQWdDLG1DQUFJLG9DQUFvQztZQUN6RixrQkFBa0IsRUFBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCO1lBQ3hFLFNBQVMsRUFBRSxDQUFDO1lBQ1osaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixNQUFNLEVBQUUsWUFBWTtZQUNwQixnQkFBZ0IsRUFBRSw0QkFBNEI7WUFDOUMsZ0JBQWdCLEVBQUUsaUNBQWdCLENBQUMsYUFBYTtTQUNqRCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFwZUQsOEJBb2VDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMyBBbGxpYW5kZXIgTlZcbi8vXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJ1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnXG5pbXBvcnQgKiBhcyBzZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnXG5pbXBvcnQgKiBhcyB0YXNrcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcydcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJ1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uUHJpbmNpcGFsLCBQb2xpY3lEb2N1bWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nXG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnXG5pbXBvcnQgeyBCdWNrZXRFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJ1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCdcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnRPcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnXG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cydcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJ1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInXG5pbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJ1xuaW1wb3J0ICogYXMgcm91dGU1M3RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0cydcbmltcG9ydCAqIGFzIGFwaWdhdGV3YXkgZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknXG5pbXBvcnQgeyBNZXRob2RMb2dnaW5nTGV2ZWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSdcbmltcG9ydCAqIGFzIHdhZnYyIGZyb20gJ2F3cy1jZGstbGliL2F3cy13YWZ2MidcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJ1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncydcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnXG5pbXBvcnQgeyBUcmVhdE1pc3NpbmdEYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnXG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlanMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJ1xuaW1wb3J0IHsgSUNlcnRpZmljYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlcidcbmltcG9ydCB7IElIb3N0ZWRab25lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnXG5cbmV4cG9ydCBlbnVtIHdhZlVzYWdlIHtcbiAgQ29uc3RydWN0UHJvdmlkZWQsXG4gIFByb3ZpZGVXZWJBY2xBcm5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBd3NKd3RTdHNQcm9wcyB7XG4gIC8qKlxuICAgKiBkZWZhdWx0QXVkaWVuY2Ugd2hpY2ggaXMgdXNlZCBpbiBkZSBKV1Qnc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEF1ZGllbmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvc3RlZFpvbmVJZCBvZiB0aGUgZG9tYWluIHVzZWQgZm9yIGhvc3RpbmcgdGhlIHN0cyBmdW5jdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBob3N0ZWRab25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICogT3B0aW9uYWwgc3ViZG9tYWluIG5hbWUgb2Ygb2lkYyBkaXNjb3ZlcnksIGRlZmF1bHQ6IG9pZGMuXG4gICovXG4gIHJlYWRvbmx5IG9pZGNTdWJkb21haW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICogT3B0aW9uYWwgc3ViZG9tYWluIG5hbWUgb2YgdGhlIHRva2VuIGFwaSAob24gYXBpIGd3KSwgZGVmYXVsdDogdG9rZW4uXG4gICovXG4gIHJlYWRvbmx5IHRva2VuU3ViZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB3YWYgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIEFQSSBHV1xuICAgKlxuICAgKiBOb25lOiBubyB3YWYgaXMgdXNlZFxuICAgKiBDb25zdHJ1Y3RQcm92aWRlZDogdGhlIGNvbnN0cnVjdCB3aWxsIGRlcGxveSBhIHdhZkFjbCB3aXRoIG9waW5pb25hdGVkIHJ1bGVzXG4gICAqIFByb3ZpZGVXZWJBY2xBcm46IHByb3ZpZGUgeW91ciBvd24gYXJuXG4gICAqL1xuICByZWFkb25seSBhcGlHd1dhZj86IHdhZlVzYWdlO1xuXG4gIC8qKlxuICAgKiBBcm4gb2YgdGhlIHdhZiB3ZWJBY2wgcnVsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIEFQSSBHV1xuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpR3dXYWZXZWJBY2xBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIE9yZ2FuaXphdGlvbiAwLXh4eHhcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgQXJjaGl0ZWN0dXJlXG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBsYW1iZGEuQXJjaGl0ZWN0dXJlXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJvb2xlYW4gdG8gc3BlY2lmeSBpZiBrZXkgcm90YXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZCBvbiBjcmVhdGlvbiBvZiB0aGUgc3RhY2ssIGRlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlS2V5Um90YXRlT25DcmVhdGU/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciB0aGUgQ2xvdWRXYXRjaCBBbGFybSBtb25pdG9yaW5nIFN0ZXAgRnVuY3Rpb24gZmFpbHVyZXMsIGRlZmF1bHQ6IHN0cy1rZXlfcm90YXRlX3Nmbi1hbGFybVxuICAgKi9cbiAgcmVhZG9ubHkgYWxhcm1OYW1lS2V5Um90YXRpb25TdGVwRnVuY3Rpb25GYWlsZWQ/OiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIG5hbWUgZm9yIHRoZSBDbG91ZFdhdGNoIEFsYXJtIG1vbml0b3JpbmcgNXh4IGVycm9ycyBvbiB0aGUgQVBJIEdhdGV3YXksIGRlZmF1bHQ6IHN0cy01eHhfYXBpX2d3LWFsYXJtXG4gICAqL1xuICByZWFkb25seSBhbGFybU5hbWVBcGlHYXRld2F5NXh4Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciB0aGUgQ2xvdWRXYXRjaCBBbGFybSBtb25pdG9yaW5nIFNpZ24gTGFtYmRhIGZhaWx1cmVzLCBkZWZhdWx0OiBzdHMtc2lnbl9lcnJvcnNfbGFtYmRhLWFsYXJtXG4gICAqL1xuICByZWFkb25seSBhbGFybU5hbWVTaWduTGFtYmRhRmFpbGVkPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciB0aGUgQ2xvdWRXYXRjaCBBbGFybSBtb25pdG9yaW5nIEtleSBSb3RhdGlvbiBMYW1iZGEgZmFpbHVyZXMsIGRlZmF1bHQ6IHN0cy1rZXlfcm90YXRlX2Vycm9yc19sYW1iZGEtYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IGFsYXJtTmFtZUtleVJvdGF0aW9uTGFtYmRhRmFpbGVkPzogc3RyaW5nXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuZXhwb3J0IGNsYXNzIEF3c0p3dFN0cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBTTlMgdG9waWMgdXNlZCB0byBwdWJsaXNoIGVycm9ycyBmcm9tIHRoZSBTdGVwIEZ1bmN0aW9uIHJvdGF0aW9uIGZsb3dcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYWlsZWRSb3RhdGlvblRvcGljOiBzbnMuVG9waWNcblxuICBjb25zdHJ1Y3RvciAoYXBwOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBd3NKd3RTdHNQcm9wcykge1xuICAgIHN1cGVyKGFwcCwgaWQpXG5cbiAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDdXN0b20gZG9tYWluIHRoaW5naWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBsZXQgZGlzdHJpYnV0aW9uRG9tYWluTmFtZXM6IHN0cmluZ1tdID0gW11cbiAgICBsZXQgb2lkY0NlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWRcbiAgICBsZXQgdG9rZW5DZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkXG4gICAgbGV0IGhvc3RlZFpvbmU6IElIb3N0ZWRab25lIHwgdW5kZWZpbmVkXG4gICAgY29uc3Qgb2lkY1N1YmRvbWFpbiA9IHByb3BzLm9pZGNTdWJkb21haW4gPyBwcm9wcy5vaWRjU3ViZG9tYWluIDogJ29pZGMnXG4gICAgY29uc3QgdG9rZW5TdWJkb21haW4gPSBwcm9wcy50b2tlblN1YmRvbWFpbiA/IHByb3BzLnRva2VuU3ViZG9tYWluIDogJ3Rva2VuJ1xuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IHByb3BzLmFyY2hpdGVjdHVyZSA/IHByb3BzLmFyY2hpdGVjdHVyZSA6IGxhbWJkYS5BcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAgbGV0IG9pZGNEb21haW5OYW1lID0gJydcbiAgICBsZXQgdG9rZW5Eb21haW5OYW1lID0gJydcblxuICAgIGNvbnN0IHVzZUN1c3RvbURvbWFpbiA9IHByb3BzLmhvc3RlZFpvbmVJZCAmJiBwcm9wcy5ob3N0ZWRab25lTmFtZVxuXG4gICAgaWYgKHVzZUN1c3RvbURvbWFpbikge1xuICAgICAgb2lkY0RvbWFpbk5hbWUgPSBvaWRjU3ViZG9tYWluICsgJy4nICsgcHJvcHMuaG9zdGVkWm9uZU5hbWVcbiAgICAgIHRva2VuRG9tYWluTmFtZSA9IHRva2VuU3ViZG9tYWluICsgJy4nICsgcHJvcHMuaG9zdGVkWm9uZU5hbWVcblxuICAgICAgZGlzdHJpYnV0aW9uRG9tYWluTmFtZXMgPSBbb2lkY0RvbWFpbk5hbWVdXG5cbiAgICAgIGhvc3RlZFpvbmUgPSByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnaG9zdGVkWm9uZScsXG4gICAgICAgIHtcbiAgICAgICAgICB6b25lTmFtZTogcHJvcHMuaG9zdGVkWm9uZU5hbWUhLFxuICAgICAgICAgIGhvc3RlZFpvbmVJZDogcHJvcHMuaG9zdGVkWm9uZUlkIVxuICAgICAgICB9XG4gICAgICApXG5cbiAgICAgIG9pZGNDZXJ0aWZpY2F0ZSA9IG5ldyBhY20uRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0Nyb3NzUmVnaW9uQ2VydGlmaWNhdGUnLCB7XG4gICAgICAgIGRvbWFpbk5hbWU6IG9pZGNEb21haW5OYW1lLFxuICAgICAgICBob3N0ZWRab25lLFxuICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnXG4gICAgICB9KVxuXG4gICAgICB0b2tlbkNlcnRpZmljYXRlID0gbmV3IGFjbS5DZXJ0aWZpY2F0ZSh0aGlzLCAndG9rZW5DZXJ0aWZpY2F0ZScsIHtcbiAgICAgICAgZG9tYWluTmFtZTogdG9rZW5Eb21haW5OYW1lLFxuICAgICAgICB2YWxpZGF0aW9uOiBhY20uQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUzMgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgLy8gQ3JlYXRlIGJ1Y2tldCB3aGVyZSBvaWRjIGluZm9ybWF0aW9uIGNhbiBiZSBzdG9yZWRcbiAgICBjb25zdCBvaWRjYnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnb2lkY2J1Y2tldCcsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTExcbiAgICB9KVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xvdWRmcm9udCBEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGNvbnN0IGNsb3VkZnJvbnRPQUkgPSBuZXcgY2xvdWRmcm9udC5PcmlnaW5BY2Nlc3NJZGVudGl0eSh0aGlzLCAnY2xvdWRmcm9udC1PQUknLCB7XG4gICAgICBjb21tZW50OiAnT0FJIGZvciBvaWRjJ1xuICAgIH0pXG5cbiAgICBjb25zdCBkaXN0cmlidXRpb24gPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24odGhpcywgJ29pZGNEaXN0cmlidXRpb24nLCB7XG4gICAgICBkb21haW5OYW1lczogZGlzdHJpYnV0aW9uRG9tYWluTmFtZXMsXG4gICAgICBjb21tZW50OiAnRGlzY292ZXJ5IGVuZHBvaW50IGZvciBPSURDJyxcbiAgICAgIGNlcnRpZmljYXRlOiBvaWRjQ2VydGlmaWNhdGUsXG4gICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgb3JpZ2luOiBuZXcgY2xvdWRmcm9udE9yaWdpbnMuUzNPcmlnaW4ob2lkY2J1Y2tldCwgeyBvcmlnaW5BY2Nlc3NJZGVudGl0eTogY2xvdWRmcm9udE9BSSB9KSxcbiAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0gTGFtYmRhIEhhbmRsZXJzIERlZmluaXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBjb25zdCBpc3N1ZXIgPSB1c2VDdXN0b21Eb21haW4gPyAnaHR0cHM6Ly8nICsgb2lkY0RvbWFpbk5hbWUgOiAnaHR0cHM6Ly8nICsgZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWVcblxuICAgIGNvbnN0IHJvdGF0ZUtleXNSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdyb3RhdGVLZXlzUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyldXG4gICAgfSlcbiAgICBjb25zdCByb3RhdGVLZXlzID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCAna2V5cm90YXRlJywge1xuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgIHJvbGU6IHJvdGF0ZUtleXNSb2xlLFxuICAgICAgYXJjaGl0ZWN0dXJlLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgUzNfQlVDS0VUOiBvaWRjYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIElTU1VFUjogaXNzdWVyXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IHNpZ25Sb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdzaWduUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyldXG4gICAgfSlcbiAgICBjb25zdCBzaWduID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCAnc2lnbicsIHtcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE4X1gsXG4gICAgICByb2xlOiBzaWduUm9sZSxcbiAgICAgIGFyY2hpdGVjdHVyZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIElTU1VFUjogaXNzdWVyLFxuICAgICAgICBERUZBVUxUX0FVRElFTkNFOiBwcm9wcy5kZWZhdWx0QXVkaWVuY2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTTlMgVG9waWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgdGhpcy5mYWlsZWRSb3RhdGlvblRvcGljID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnc3RzJylcbiAgICBjb25zdCBzbnNGYWlsID0gbmV3IHRhc2tzLlNuc1B1Ymxpc2godGhpcywgJ3Nuc0ZhaWxlZCcsIHtcbiAgICAgIHRvcGljOiB0aGlzLmZhaWxlZFJvdGF0aW9uVG9waWMsXG4gICAgICBzdWJqZWN0OiAnU1RTIEtleVJvdGF0ZSBzdGVwIGZ1bmN0aW9uIGV4ZWN1dGlvbiBmYWlsZWQnLFxuICAgICAgbWVzc2FnZTogc2ZuLlRhc2tJbnB1dC5mcm9tSnNvblBhdGhBdCgnJCcpXG4gICAgfSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0gU3RlcCBmdW5jdGlvbnMgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGNvbnN0IGRlbGV0ZVByZXZpb3VzU3RlcCA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UodGhpcywgJ2RlbGV0ZSBQcmV2aW91cycsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiByb3RhdGVLZXlzLFxuICAgICAgcGF5bG9hZDogc2ZuLlRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgc3RlcDogJ2RlbGV0ZVByZXZpb3VzJ1xuICAgICAgfSksXG4gICAgICBvdXRwdXRQYXRoOiAnJC5QYXlsb2FkJ1xuICAgIH0pXG5cbiAgICBjb25zdCBtb3ZlUHJldmlvdXNTdGVwID0gbmV3IHRhc2tzLkxhbWJkYUludm9rZSh0aGlzLCAnbW92ZSBQcmV2aW91cycsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiByb3RhdGVLZXlzLFxuICAgICAgcGF5bG9hZDogc2ZuLlRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgc3RlcDogJ21vdmVQcmV2aW91cydcbiAgICAgIH0pLFxuICAgICAgb3V0cHV0UGF0aDogJyQuUGF5bG9hZCdcbiAgICB9KVxuXG4gICAgY29uc3QgbW92ZUN1cnJlbnRTdGVwID0gbmV3IHRhc2tzLkxhbWJkYUludm9rZSh0aGlzLCAnbW92ZSBDdXJyZW50Jywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHJvdGF0ZUtleXMsXG4gICAgICBwYXlsb2FkOiBzZm4uVGFza0lucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICBzdGVwOiAnbW92ZUN1cnJlbnQnXG4gICAgICB9KSxcbiAgICAgIG91dHB1dFBhdGg6ICckLlBheWxvYWQnXG4gICAgfSlcblxuICAgIGNvbnN0IGNyZWF0ZVBlbmRpbmdTdGVwID0gbmV3IHRhc2tzLkxhbWJkYUludm9rZSh0aGlzLCAnY3JlYXRlIFBlbmRpbmcnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogcm90YXRlS2V5cyxcbiAgICAgIHBheWxvYWQ6IHNmbi5UYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgIHN0ZXA6ICdjcmVhdGVQZW5kaW5nJ1xuICAgICAgfSksXG4gICAgICBvdXRwdXRQYXRoOiAnJC5QYXlsb2FkJ1xuICAgIH0pXG5cbiAgICBjb25zdCBnZW5lcmF0ZUFydGlmYWN0c1N0ZXAgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKHRoaXMsICdnZW5lcmF0ZSBhcnRpZmFjdHMnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogcm90YXRlS2V5cyxcbiAgICAgIHBheWxvYWQ6IHNmbi5UYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgIHN0ZXA6ICdnZW5lcmF0ZUFydGlmYWN0cydcbiAgICAgIH0pLFxuICAgICAgb3V0cHV0UGF0aDogJyQuUGF5bG9hZCdcbiAgICB9KVxuXG4gICAgY29uc3Qgam9iRmFpbGVkID0gbmV3IHNmbi5GYWlsKHRoaXMsICdGYWlsZWQnLCB7XG4gICAgICBjYXVzZTogJ0FXUyBCYXRjaCBKb2IgRmFpbGVkJyxcbiAgICAgIGVycm9yOiAnRGVzY3JpYmVKb2IgcmV0dXJuZWQgRkFJTEVEJ1xuICAgIH0pXG5cbiAgICBjb25zdCBqb2JTdWNjZXNzID0gbmV3IHNmbi5TdWNjZWVkKHRoaXMsICdTdWNjZXNzIScpXG5cbiAgICBkZWxldGVQcmV2aW91c1N0ZXAuYWRkQ2F0Y2goc25zRmFpbClcbiAgICBtb3ZlUHJldmlvdXNTdGVwLmFkZENhdGNoKHNuc0ZhaWwpXG4gICAgbW92ZUN1cnJlbnRTdGVwLmFkZENhdGNoKHNuc0ZhaWwpXG4gICAgY3JlYXRlUGVuZGluZ1N0ZXAuYWRkQ2F0Y2goc25zRmFpbClcbiAgICBnZW5lcmF0ZUFydGlmYWN0c1N0ZXAuYWRkQ2F0Y2goc25zRmFpbClcblxuICAgIC8vIENyZWF0ZSBjaGFpblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWxldGVQcmV2aW91c1N0ZXBcbiAgICAgIC5uZXh0KG1vdmVQcmV2aW91c1N0ZXApXG4gICAgICAubmV4dChtb3ZlQ3VycmVudFN0ZXApXG4gICAgICAubmV4dChjcmVhdGVQZW5kaW5nU3RlcClcbiAgICAgIC5uZXh0KGdlbmVyYXRlQXJ0aWZhY3RzU3RlcClcbiAgICAgIC5uZXh0KGpvYlN1Y2Nlc3MpXG5cbiAgICBzbnNGYWlsLm5leHQoam9iRmFpbGVkKVxuXG4gICAgLy8gQ3JlYXRlIHN0YXRlIG1hY2hpbmVcbiAgICBjb25zdCByb3RhdGVLZXlzTWFjaGluZSA9IG5ldyBzZm4uU3RhdGVNYWNoaW5lKHRoaXMsICdSb3RhdGVLZXlzJywge1xuICAgICAgZGVmaW5pdGlvbkJvZHk6IHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKFxuICAgICAgICBkZWZpbml0aW9uXG4gICAgICApLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSlcbiAgICB9KVxuXG4gICAgcm90YXRlS2V5cy5ncmFudEludm9rZShyb3RhdGVLZXlzTWFjaGluZS5yb2xlKVxuICAgIG9pZGNidWNrZXQuZ3JhbnRSZWFkV3JpdGUocm90YXRlS2V5cylcblxuICAgIGNvbnN0IHN0YXRlbWVudFNpZ24gPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCgpXG4gICAgc3RhdGVtZW50U2lnbi5hZGRBY3Rpb25zKCdrbXM6KicpXG4gICAgc3RhdGVtZW50U2lnbi5hZGRSZXNvdXJjZXMoJyonKVxuICAgIGNvbnN0IHNpZ25Qb2xpY3kgPSBuZXcgaWFtLk1hbmFnZWRQb2xpY3kodGhpcywgJ1NpZ25Qb2xpY3knLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbc3RhdGVtZW50U2lnbl1cbiAgICB9KVxuICAgIHNpZ25Sb2xlLmFkZE1hbmFnZWRQb2xpY3koc2lnblBvbGljeSlcblxuICAgIGNvbnN0IHN0YXRlbWVudFJvdGF0ZUtleXMgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCgpXG4gICAgc3RhdGVtZW50Um90YXRlS2V5cy5hZGRBY3Rpb25zKCdrbXM6KicpXG4gICAgc3RhdGVtZW50Um90YXRlS2V5cy5hZGRSZXNvdXJjZXMoJyonKVxuICAgIGNvbnN0IHJvdGF0ZUtleXNQb2xpY3kgPSBuZXcgaWFtLk1hbmFnZWRQb2xpY3kodGhpcywgJ1JvdGF0ZUtleXNQb2xpY3knLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbc3RhdGVtZW50Um90YXRlS2V5c11cbiAgICB9KVxuICAgIHJvdGF0ZUtleXNSb2xlLmFkZE1hbmFnZWRQb2xpY3kocm90YXRlS2V5c1BvbGljeSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnRzIFJ1bGUgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIC8vIFJ1biBldmVyeSAzIG1vbnRocyBhdCA4IFBNIFVUQ1xuICAgIGNvbnN0IHNjaGVkdWxlZFJvdGF0ZVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ3NjaGVkdWxlZFJvdGF0ZVJ1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oJ2Nyb24oMCAyMCAxICovMyA/ICopJylcbiAgICB9KVxuICAgIHNjaGVkdWxlZFJvdGF0ZVJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLlNmblN0YXRlTWFjaGluZShyb3RhdGVLZXlzTWFjaGluZSkpXG5cbiAgICAvLyBDcmVhdGUgc3RhdGUgbWFjaGluZSBhbmQgdHJpZ2dlciB0byBwb3B1bGF0ZSBpbml0aWFsIGtleXNcbiAgICBpZiAoIXByb3BzLmRpc2FibGVLZXlSb3RhdGVPbkNyZWF0ZSkge1xuICAgICAgY29uc3Qgcm90YXRlT25jZSA9IG5ldyB0YXNrcy5TdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb24odGhpcywgJ3JvdGF0ZU9uY2UnLCB7XG4gICAgICAgIHN0YXRlTWFjaGluZTogcm90YXRlS2V5c01hY2hpbmUsXG4gICAgICAgIGludGVncmF0aW9uUGF0dGVybjogc2ZuLkludGVncmF0aW9uUGF0dGVybi5SVU5fSk9CXG4gICAgICB9KVxuXG4gICAgICBjb25zdCByb3RhdGVUd2ljZSA9IG5ldyB0YXNrcy5TdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb24odGhpcywgJ3JvdGF0ZVR3aWNlJywge1xuICAgICAgICBzdGF0ZU1hY2hpbmU6IHJvdGF0ZUtleXNNYWNoaW5lLFxuICAgICAgICBpbnRlZ3JhdGlvblBhdHRlcm46IHNmbi5JbnRlZ3JhdGlvblBhdHRlcm4uUlVOX0pPQlxuICAgICAgfSlcblxuICAgICAgY29uc3QgcG9wdWxhdGVLZXlzID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUodGhpcywgJ3BvcHVsYXRlS2V5cycsIHtcbiAgICAgICAgZGVmaW5pdGlvbkJvZHk6IHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKFxuICAgICAgICAgIHJvdGF0ZU9uY2UubmV4dChyb3RhdGVUd2ljZSlcbiAgICAgICAgKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMTApXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBpbml0aWFsUnVuUnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnaW5pdGlhbFJ1blJ1bGUnLCB7XG4gICAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAgIHNvdXJjZTogWydhd3MuY2xvdWRmb3JtYXRpb24nXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtjZGsuU3RhY2sub2YodGhpcykuc3RhY2tJZF0sXG4gICAgICAgICAgZGV0YWlsVHlwZTogWydDbG91ZEZvcm1hdGlvbiBTdGFjayBTdGF0dXMgQ2hhbmdlJ10sXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAnc3RhdHVzLWRldGFpbHMnOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogWydDUkVBVEVfQ09NUExFVEUnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaW5pdGlhbFJ1blJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLlNmblN0YXRlTWFjaGluZShwb3B1bGF0ZUtleXMpKVxuICAgIH1cblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFQSSBHYXRld2F5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICAvLyBvbmx5IHNldCBwb2xpY3kgd2hlbiBvcmdJZCBpcyBzZXRcbiAgICBsZXQgYXBpUG9saWN5OiBQb2xpY3lEb2N1bWVudCB8IHVuZGVmaW5lZFxuICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgYXBpUG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbJ2V4ZWN1dGUtYXBpOkludm9rZSddLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgICAgICAgbmV3IE9yZ2FuaXphdGlvblByaW5jaXBhbChwcm9wcy5vcmdJZClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ0FQSUdhdGV3YXlBY2Nlc3NMb2dzJywge1xuICAgICAgcmV0ZW50aW9uOiA3XG4gICAgfSlcblxuICAgIC8vIENyZWF0ZSBBUElcbiAgICBjb25zdCBhcGkgPSBuZXcgYXBpZ2F0ZXdheS5MYW1iZGFSZXN0QXBpKHRoaXMsICdqd2stc3RzLWFwaScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnU1RTIFRva2VuIEFQSSBHYXRld2F5JyxcbiAgICAgIGhhbmRsZXI6IHNpZ24sXG4gICAgICBkZWZhdWx0TWV0aG9kT3B0aW9uczoge1xuICAgICAgICBhdXRob3JpemF0aW9uVHlwZTogYXBpZ2F0ZXdheS5BdXRob3JpemF0aW9uVHlwZS5JQU1cbiAgICAgIH0sXG4gICAgICBlbmRwb2ludENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdHlwZXM6IFthcGlnYXRld2F5LkVuZHBvaW50VHlwZS5SRUdJT05BTF1cbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGFwaVBvbGljeSxcbiAgICAgIGRlcGxveU9wdGlvbnM6IHtcbiAgICAgICAgbG9nZ2luZ0xldmVsOiBNZXRob2RMb2dnaW5nTGV2ZWwuSU5GTyxcbiAgICAgICAgYWNjZXNzTG9nRGVzdGluYXRpb246IG5ldyBhcGlnYXRld2F5LkxvZ0dyb3VwTG9nRGVzdGluYXRpb24obG9nR3JvdXApXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tIFJvdXRlNTMgRGVmaW5pdGlvbiBmb3IgY3VzdG9tIGRvbWFpbiAtLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBpZiAodXNlQ3VzdG9tRG9tYWluICYmIGhvc3RlZFpvbmUpIHtcbiAgICAgIGFwaS5hZGREb21haW5OYW1lKCdhcGlDdXN0b21Eb21haW5OYW1lJywge1xuICAgICAgICBkb21haW5OYW1lOiB0b2tlbkRvbWFpbk5hbWUsXG4gICAgICAgIGNlcnRpZmljYXRlOiB0b2tlbkNlcnRpZmljYXRlIVxuICAgICAgfSlcblxuICAgICAgLy8gQWRkIEEgcmVjb3JkIGZvciBjbG91ZGZyb250IGRpc3RyaWJ1dGlvblxuXG4gICAgICBuZXcgcm91dGU1My5BUmVjb3JkKHRoaXMsICdvaWRjUmVjb3JkJywge1xuICAgICAgICByZWNvcmROYW1lOiBvaWRjRG9tYWluTmFtZSxcbiAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IHJvdXRlNTN0YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQoZGlzdHJpYnV0aW9uKSlcbiAgICAgIH0pXG5cbiAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgJ3Rva2VuUmVjb3JkJywge1xuICAgICAgICByZWNvcmROYW1lOiB0b2tlbkRvbWFpbk5hbWUsXG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyByb3V0ZTUzdGFyZ2V0cy5BcGlHYXRld2F5KGFwaSkpXG4gICAgICB9KVxuXG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAndG9rZW5FbmRwb2ludCcsIHtcbiAgICAgICAgdmFsdWU6ICdodHRwczovLycgKyB0b2tlbkRvbWFpbk5hbWUgKyAnL3Rva2VuJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdVcmwgb2YgdGhlIHRva2VuIGVuZHBvaW50JyxcbiAgICAgICAgZXhwb3J0TmFtZTogJ3Rva2VuRW5kcG9pbnQnXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAndG9rZW5FbmRwb2ludCcsIHtcbiAgICAgICAgdmFsdWU6IGFwaS51cmwgKyAndG9rZW4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VybCBvZiB0aGUgdG9rZW4gZW5kcG9pbnQnLFxuICAgICAgICBleHBvcnROYW1lOiAndG9rZW5FbmRwb2ludCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ2lzc3VlcicsIHtcbiAgICAgIHZhbHVlOiBpc3N1ZXIsXG4gICAgICBkZXNjcmlwdGlvbjogJ1VybCBvZiB0aGUgaXNzdWVyJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdpc3N1ZXInXG4gICAgfSlcblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdBRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgaWYgKHByb3BzLmFwaUd3V2FmID09PSB3YWZVc2FnZS5Db25zdHJ1Y3RQcm92aWRlZCkge1xuICAgICAgLy8gQVBJIGdhdGV3YXkgV0FGIEFDTCBhbmQgcnVsZXNcbiAgICAgIGNvbnN0IEFQSUdhdGV3YXlXZWJBQ0wgPSBuZXcgd2FmdjIuQ2ZuV2ViQUNMKHRoaXMsICdBUElHYXRld2F5V2ViQUNMJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgV2ViQUNMIGZvciBBdXRoIEFQaSBHYXRld2F5JyxcbiAgICAgICAgc2NvcGU6ICdSRUdJT05BTCcsXG4gICAgICAgIGRlZmF1bHRBY3Rpb246IHsgYWxsb3c6IHt9IH0sXG4gICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICBtZXRyaWNOYW1lOiAnQVBJV2ViQUNMJyxcbiAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBydWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdBV1MtQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCcsXG4gICAgICAgICAgICBwcmlvcml0eTogMCxcbiAgICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgICBtYW5hZ2VkUnVsZUdyb3VwU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0NvbW1vblJ1bGVTZXQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvdmVycmlkZUFjdGlvbjoge1xuICAgICAgICAgICAgICBub25lOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBtZXRyaWNOYW1lOiAnQVdTLUFXU01hbmFnZWRSdWxlc0NvbW1vblJ1bGVTZXQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnQVdTLUFXU01hbmFnZWRSdWxlc0FtYXpvbklwUmVwdXRhdGlvbkxpc3QnLFxuICAgICAgICAgICAgcHJpb3JpdHk6IDEsXG4gICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgbWFuYWdlZFJ1bGVHcm91cFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICAgIHZlbmRvck5hbWU6ICdBV1MnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHtcbiAgICAgICAgICAgICAgbm9uZToge31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWV0cmljTmFtZTogJ0FXUy1BV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2FwaS1ndy1BdXRoQVBJR2VvTG9jYXRpb24nLFxuICAgICAgICAgICAgcHJpb3JpdHk6IDMsXG4gICAgICAgICAgICBhY3Rpb246IHsgYmxvY2s6IHt9IH0sXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICAgIG1ldHJpY05hbWU6ICdBdXRoQVBJR2VvTG9jYXRpb24nLFxuICAgICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgIGdlb01hdGNoU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgY291bnRyeUNvZGVzOiBbJ0JZJywgJ0NOJywgJ0lSJywgJ1JVJywgJ1NZJywgJ0tQJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2FwaS1ndy1yYXRlTGltaXRSdWxlJyxcbiAgICAgICAgICAgIHByaW9yaXR5OiA0LFxuICAgICAgICAgICAgYWN0aW9uOiB7IGJsb2NrOiB7fSB9LFxuICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICAgICAgICBtZXRyaWNOYW1lOiAncmF0ZUxpbWl0UnVsZScsXG4gICAgICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgcmF0ZUJhc2VkU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRlS2V5VHlwZTogJ0lQJyxcbiAgICAgICAgICAgICAgICBsaW1pdDogMTAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIC8vIFdlYiBBQ0wgQXNzb2NpYXRpb25cbiAgICAgIG5ldyB3YWZ2Mi5DZm5XZWJBQ0xBc3NvY2lhdGlvbih0aGlzLCAnQVBJR2F0ZXdheVdlYkFDTEFzc29jaWF0aW9uJywge1xuICAgICAgICB3ZWJBY2xBcm46IEFQSUdhdGV3YXlXZWJBQ0wuYXR0ckFybixcbiAgICAgICAgcmVzb3VyY2VBcm46IGFwaS5kZXBsb3ltZW50U3RhZ2Uuc3RhZ2VBcm5cbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChwcm9wcy5hcGlHd1dhZiA9PT0gd2FmVXNhZ2UuUHJvdmlkZVdlYkFjbEFybiAmJiBwcm9wcy5hcGlHd1dhZldlYkFjbEFybikge1xuICAgICAgLy8gV2ViIEFDTCBBc3NvY2lhdGlvblxuICAgICAgbmV3IHdhZnYyLkNmbldlYkFDTEFzc29jaWF0aW9uKHRoaXMsICdBUElHYXRld2F5V2ViQUNMQXNzb2NpYXRpb24nLCB7XG4gICAgICAgIHdlYkFjbEFybjogcHJvcHMuYXBpR3dXYWZXZWJBY2xBcm4sXG4gICAgICAgIHJlc291cmNlQXJuOiBhcGkuZGVwbG95bWVudFN0YWdlLnN0YWdlQXJuXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsb3Vkd2F0Y2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIG5ldyBjbG91ZHdhdGNoLkFsYXJtKHRoaXMsICdTdGVwRnVuY3Rpb25FcnJvcicsIHtcbiAgICAgIGFsYXJtTmFtZTogcHJvcHMuYWxhcm1OYW1lS2V5Um90YXRpb25TdGVwRnVuY3Rpb25GYWlsZWQgPz8gJ3N0cy1rZXlfcm90YXRlX3Nmbi1hbGFybScsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIG1ldHJpYzogcm90YXRlS2V5c01hY2hpbmUubWV0cmljRmFpbGVkKCksXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiAnS2V5IFJvdGF0aW9uIEZhaWxlZCcsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkdcbiAgICB9KVxuXG4gICAgbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ0FwaUdhdGV3YXk1WFhBbGFybScsIHtcbiAgICAgIGFsYXJtTmFtZTogcHJvcHMuYWxhcm1OYW1lQXBpR2F0ZXdheTV4eCA/PyAnc3RzLTV4eF9hcGlfZ3ctYWxhcm0nLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICBtZXRyaWM6IGFwaS5tZXRyaWNTZXJ2ZXJFcnJvcigpLFxuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogJzV4eCBTVFMgQVBJIGdhdGV3YXkgZmFpbHVyZXMnLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HXG4gICAgfSlcblxuICAgIGNvbnN0IHNpZ25FcnJvcnMgPSBzaWduLm1ldHJpY0Vycm9ycyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDEpXG4gICAgfSlcblxuICAgIGNvbnN0IHJvdGF0ZUVycm9ycyA9IHJvdGF0ZUtleXMubWV0cmljRXJyb3JzKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMSlcbiAgICB9KVxuXG4gICAgbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ0xhbWJkYVNpZ25FcnJvcicsIHtcbiAgICAgIGFsYXJtTmFtZTogcHJvcHMuYWxhcm1OYW1lU2lnbkxhbWJkYUZhaWxlZCA/PyAnc3RzLXNpZ25fZXJyb3JzX2xhbWJkYS1hbGFybScsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIG1ldHJpYzogc2lnbkVycm9ycyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246ICdTaWduIExhbWJkYSBGYWlsZWQnLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HXG4gICAgfSlcblxuICAgIG5ldyBjbG91ZHdhdGNoLkFsYXJtKHRoaXMsICdMYW1iZGFSb3RhdGVFcnJvcicsIHtcbiAgICAgIGFsYXJtTmFtZTogcHJvcHMuYWxhcm1OYW1lS2V5Um90YXRpb25MYW1iZGFGYWlsZWQgPz8gJ3N0cy1rZXlfcm90YXRlX2Vycm9yc19sYW1iZGEtYWxhcm0nLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICBtZXRyaWM6IHJvdGF0ZUVycm9ycyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246ICdLZXkgUm90YXRpb24gTGFtYmRhIEZhaWxlZCcsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkdcbiAgICB9KVxuICB9XG59XG4iXX0=
@@ -107,10 +107,11 @@ async function updateOrCreateAlias(aliasName, keyId) {
107
107
  }
108
108
  }
109
109
  async function getKeyIdForAlias(keyId) {
110
+ var _a;
110
111
  try {
111
112
  const response = await client.send(new client_kms_1.DescribeKeyCommand({ KeyId: keyId }));
112
113
  console.log(response);
113
- return response.KeyMetadata?.KeyId;
114
+ return (_a = response.KeyMetadata) === null || _a === void 0 ? void 0 : _a.KeyId;
114
115
  }
115
116
  catch (err) {
116
117
  if (err instanceof client_kms_1.NotFoundException) {
@@ -184,10 +185,10 @@ async function uploadToS3(key, contents) {
184
185
  // Write jwk to s3 bucket
185
186
  await s3client.send(new client_s3_1.PutObjectCommand({
186
187
  Bucket: s3Bucket,
187
- Key: key,
188
+ Key: key, // File name you want to save as in S3
188
189
  Body: Buffer.from(JSON.stringify(contents)),
189
190
  ContentType: 'application/json',
190
191
  ContentEncoding: ''
191
192
  }));
192
193
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgua2V5cm90YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmtleXJvdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNENBQTRDO0FBQzVDLEVBQUU7QUFDRixzQ0FBc0M7OztBQUV0QyxvREFXNEI7QUFDNUIsa0RBQStEO0FBQy9ELHlDQUF5QztBQUV6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFaEMsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUE7QUFDM0MsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUE7QUFDekMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUE7QUFFekMsTUFBTSxPQUFPLEdBQWE7SUFDeEIsY0FBYztJQUNkLGFBQWE7SUFDYixhQUFhO0NBQ2QsQ0FBQTtBQUVNLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxLQUFVLEVBQWdCLEVBQUU7SUFDeEQsbUNBQW1DO0lBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXpCLGlEQUFpRDtJQUNqRCxRQUFRLElBQUksRUFBRTtRQUNaLEtBQUssZ0JBQWdCO1lBQ25CLE1BQU0sY0FBYyxFQUFFLENBQUE7WUFDdEIsTUFBSztRQUNQLEtBQUssY0FBYztZQUNqQixNQUFNLFlBQVksRUFBRSxDQUFBO1lBQ3BCLE1BQUs7UUFDUCxLQUFLLGFBQWE7WUFDaEIsTUFBTSxXQUFXLEVBQUUsQ0FBQTtZQUNuQixNQUFLO1FBQ1AsS0FBSyxlQUFlO1lBQ2xCLE1BQU0sYUFBYSxFQUFFLENBQUE7WUFDckIsTUFBSztRQUNQLEtBQUssbUJBQW1CO1lBQ3RCLE1BQU0sWUFBWSxFQUFFLENBQUE7WUFDcEIsTUFBTSwyQkFBMkIsRUFBRSxDQUFBO1lBQ25DLE1BQUs7UUFFUDtZQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7S0FDOUI7QUFD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QVc7SUFDekQsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSwrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBRSxHQUFXLEVBQUUsUUFBZ0I7SUFDdEQsMkNBQTJDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFBO0lBRXRDLE1BQU0sUUFBUSxHQUFHLElBQUksb0JBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVqQyx5QkFBeUI7SUFDekIsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksNEJBQWdCLENBQUM7UUFDdkMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsR0FBRyxFQUFFLEdBQUc7UUFDUixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0IsZUFBZSxFQUFFLEVBQUU7S0FDcEIsQ0FBQyxDQUFDLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMyBBbGxpYW5kZXIgTlZcbi8vXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBLTVNDbGllbnQsXG4gIERlc2NyaWJlS2V5Q29tbWFuZCxcbiAgR2V0UHVibGljS2V5Q29tbWFuZCxcbiAgQ3JlYXRlS2V5Q29tbWFuZCxcbiAgVXBkYXRlQWxpYXNDb21tYW5kLFxuICBTY2hlZHVsZUtleURlbGV0aW9uQ29tbWFuZCxcbiAgVGFnUmVzb3VyY2VDb21tYW5kLFxuICBUYWcsXG4gIE5vdEZvdW5kRXhjZXB0aW9uLFxuICBDcmVhdGVBbGlhc0NvbW1hbmRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcydcbmltcG9ydCB7IFMzQ2xpZW50LCBQdXRPYmplY3RDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJ1xuaW1wb3J0IHsgS0VZVVRJTCwgS0pVUiB9IGZyb20gJ2pzcnNhc2lnbidcblxuY29uc3QgY2xpZW50ID0gbmV3IEtNU0NsaWVudCh7fSlcblxuY29uc3QgQUxJQVNfUFJFVklPVVMgPSAnYWxpYXMvc3RzL1BSRVZJT1VTJ1xuY29uc3QgQUxJQVNfQ1VSUkVOVCA9ICdhbGlhcy9zdHMvQ1VSUkVOVCdcbmNvbnN0IEFMSUFTX1BFTkRJTkcgPSAnYWxpYXMvc3RzL1BFTkRJTkcnXG5cbmNvbnN0IEFMSUFTRVM6IHN0cmluZ1tdID0gW1xuICBBTElBU19QUkVWSU9VUyxcbiAgQUxJQVNfQ1VSUkVOVCxcbiAgQUxJQVNfUEVORElOR1xuXVxuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChldmVudDogYW55KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgLy8gcmV0cmlldmUgdGhlIHN0ZXAgZnJvbSB0aGUgZXZlbnRcbiAgY29uc3Qgc3RlcCA9IChldmVudC5zdGVwKVxuXG4gIC8vIG1hdGNoIHRoZSBzdGVwIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25cbiAgc3dpdGNoIChzdGVwKSB7XG4gICAgY2FzZSAnZGVsZXRlUHJldmlvdXMnOlxuICAgICAgYXdhaXQgZGVsZXRlUHJldmlvdXMoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdtb3ZlUHJldmlvdXMnOlxuICAgICAgYXdhaXQgbW92ZVByZXZpb3VzKClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW92ZUN1cnJlbnQnOlxuICAgICAgYXdhaXQgbW92ZUN1cnJlbnQoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdjcmVhdGVQZW5kaW5nJzpcbiAgICAgIGF3YWl0IGNyZWF0ZVBlbmRpbmcoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdnZW5lcmF0ZUFydGlmYWN0cyc6XG4gICAgICBhd2FpdCBnZW5lcmF0ZUpXS1MoKVxuICAgICAgYXdhaXQgZ2VuZXJhdGVPcGVuSURDb25maWd1cmF0aW9uKClcbiAgICAgIGJyZWFrXG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS5sb2coJ2ludmFsaWQgc3RlcCcpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlUHJldmlvdXMgKCkge1xuICBjb25zb2xlLmxvZygnRGVsZXRpbmcgUFJFVklPVVMgYWxpYXNlZCBrZXknKVxuXG4gIGNvbnN0IHByZXZLZXlJZCA9IGF3YWl0IGdldEtleUlkRm9yQWxpYXMoQUxJQVNfUFJFVklPVVMpXG4gIGlmIChwcmV2S2V5SWQpIHtcbiAgICBjb25zdCBTY2hlZHVsZURlbGV0ZVJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQoXG4gICAgICBuZXcgU2NoZWR1bGVLZXlEZWxldGlvbkNvbW1hbmQoeyBLZXlJZDogcHJldktleUlkIH0pXG4gICAgKVxuICAgIGNvbnNvbGUubG9nKFNjaGVkdWxlRGVsZXRlUmVzcG9uc2UpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ05vIFBSRVZJT1VTIGtleSBhdCB0aGUgbW9tZW50LCBza2lwIGRlbGV0aW9uJylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlUHJldmlvdXMgKCkge1xuICBjb25zb2xlLmxvZygnbW92aW5nIFBSRVZJT1VTIGFsaWFzJylcbiAgY29uc3QgY3VycmVudEtleUlkID0gYXdhaXQgZ2V0S2V5SWRGb3JBbGlhcyhBTElBU19DVVJSRU5UKVxuICBpZiAoY3VycmVudEtleUlkKSB7XG4gICAgYXdhaXQgdXBkYXRlT3JDcmVhdGVBbGlhcyhBTElBU19QUkVWSU9VUywgY3VycmVudEtleUlkKVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdObyBDVVJSRU5UIGtleSBhdCB0aGUgbW9tZW50LCBza2lwIGFzc2lnbmluZyB0aGUgUFJFVklPVVMgYWxpYXMgdG8gdGhpcyBrZXkuJylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlQ3VycmVudCAoKSB7XG4gIGNvbnNvbGUubG9nKCdNb3ZpbmcgQ1VSUkVOVCBhbGlhcycpXG5cbiAgY29uc3QgcGVuZGluZ0tleUlkID0gYXdhaXQgZ2V0S2V5SWRGb3JBbGlhcyhBTElBU19QRU5ESU5HKVxuICBpZiAocGVuZGluZ0tleUlkKSB7XG4gICAgYXdhaXQgdXBkYXRlT3JDcmVhdGVBbGlhcyhBTElBU19DVVJSRU5ULCBwZW5kaW5nS2V5SWQpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ05vIFBFTkRJTkcga2V5IGF0IHRoZSBtb21lbnQsIHNraXAgYXNzaWduaW5nIHRoZSBDVVJSRU5UIGFsaWFzIHRvIHRoaXMga2V5LicpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVuZGluZyAoKSB7XG4gIGNvbnNvbGUubG9nKCdDcmVhdGluZyBuZXcga2V5IGZvciBQRU5ESU5HJylcblxuICAvLyBDcmVhdGUgbmV3IGtleVxuICBjb25zdCBjcmVhdGVSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVLZXlDb21tYW5kKHtcbiAgICBLZXlTcGVjOiAnUlNBXzIwNDgnLFxuICAgIEtleVVzYWdlOiAnU0lHTl9WRVJJRlknXG4gIH0pKVxuICBjb25zb2xlLmxvZyhjcmVhdGVSZXNwb25zZSlcblxuICAvLyBVcGRhdGUgdGhlIG5ldyBrZXkgd2l0aCBwZW5kaW5nIGFsaWFzXG4gIGF3YWl0IHVwZGF0ZU9yQ3JlYXRlQWxpYXMoQUxJQVNfUEVORElORywgY3JlYXRlUmVzcG9uc2UuS2V5TWV0YWRhdGEhLktleUlkISlcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlT3JDcmVhdGVBbGlhcyAoYWxpYXNOYW1lOiBzdHJpbmcsIGtleUlkOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBVcGRhdGVBbGlhc0NvbW1hbmQoe1xuICAgICAgQWxpYXNOYW1lOiBhbGlhc05hbWUsXG4gICAgICBUYXJnZXRLZXlJZDoga2V5SWRcbiAgICB9KSlcbiAgICBjb25zb2xlLmxvZyh1cGRhdGVSZXNwb25zZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEZvdW5kRXhjZXB0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZygnQUxJQVMgbm90IGZvdW5kLCBjcmVhdGluZyBpdC4nKVxuICAgICAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgQ3JlYXRlQWxpYXNDb21tYW5kKHtcbiAgICAgICAgQWxpYXNOYW1lOiBhbGlhc05hbWUsXG4gICAgICAgIFRhcmdldEtleUlkOiBrZXlJZFxuICAgICAgfSkpXG4gICAgICBjb25zb2xlLmxvZyhjcmVhdGVSZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgKGVycilcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0S2V5SWRGb3JBbGlhcyAoa2V5SWQ6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlS2V5Q29tbWFuZCh7IEtleUlkOiBrZXlJZCB9KSlcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSlcbiAgICByZXR1cm4gcmVzcG9uc2UuS2V5TWV0YWRhdGE/LktleUlkXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlSldLUyAoKSB7XG4gIGNvbnN0IGFsbEtleXM6IG9iamVjdFtdID0gW11cblxuICBmb3IgKGNvbnN0IGtleUFsaWFzIG9mIEFMSUFTRVMpIHtcbiAgICBjb25zdCBrZXlJZCA9IGF3YWl0IGdldEtleUlkRm9yQWxpYXMoa2V5QWxpYXMpXG4gICAgaWYgKGtleUlkKSB7XG4gICAgICBjb25zdCBqd2tDb250ZW50cyA9IGF3YWl0IGdlbmVyYXRlSldLKGtleUFsaWFzKVxuICAgICAgYXdhaXQgc2V0S01TS2V5VGFncyhrZXlJZCwgW3sgVGFnS2V5OiAnandrX2tpZCcsIFRhZ1ZhbHVlOiBqd2tDb250ZW50cy5raWQgfV0pXG4gICAgICBhbGxLZXlzLnB1c2goandrQ29udGVudHMpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0geyBrZXlzOiBhbGxLZXlzIH1cblxuICBhd2FpdCB1cGxvYWRUb1MzKCdkaXNjb3Zlcnkva2V5cycsIHJlc3VsdClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPcGVuSURDb25maWd1cmF0aW9uICgpIHtcbiAgY29uc3QgaXNzdWVyID0gcHJvY2Vzcy5lbnYuSVNTVUVSXG5cbiAgY29uc3Qgb3BlbklkQ29uZmlndXJhdGlvbiA9IHtcbiAgICBpc3N1ZXIsXG4gICAgandrc191cmk6IGAke2lzc3Vlcn0vZGlzY292ZXJ5L2tleXNgLFxuICAgIHJlc3BvbnNlX3R5cGVzX3N1cHBvcnRlZDogW1xuICAgICAgJ3Rva2VuJ1xuICAgIF0sXG4gICAgaWRfdG9rZW5fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDogW1xuICAgICAgJ1JTMjU2J1xuICAgIF0sXG4gICAgc2NvcGVzX3N1cHBvcnRlZDogW1xuICAgICAgJ29wZW5pZCdcbiAgICBdLFxuICAgIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ6IFtcbiAgICAgICdjbGllbnRfc2VjcmV0X2Jhc2ljJ1xuICAgIF0sXG4gICAgY2xhaW1zX3N1cHBvcnRlZDogW1xuICAgICAgJ2F1ZCcsXG4gICAgICAnZXhwJyxcbiAgICAgICdpYXQnLFxuICAgICAgJ2lzcycsXG4gICAgICAnc3ViJ1xuICAgIF1cbiAgfVxuXG4gIGF3YWl0IHVwbG9hZFRvUzMoJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJywgb3BlbklkQ29uZmlndXJhdGlvbilcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVKV0sgKGtleUFsaWFzOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAvLyBHZXQgdGhlIHB1YmxpYyBrZXkgZnJvbSBrbXNcbiAgY29uc3QgZ2V0UHViS2V5UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0UHVibGljS2V5Q29tbWFuZCh7IEtleUlkOiBrZXlBbGlhcyB9KSlcblxuICAvLyBnZW5lcmF0ZSBIRVggZm9ybWF0IGZyb20gdGhlIHJlc3BvbnNlIChERVIpXG4gIGNvbnN0IHB1YktleUhleCA9IEJ1ZmZlci5mcm9tKGdldFB1YktleVJlc3BvbnNlLlB1YmxpY0tleSBhcyBVaW50OEFycmF5KS50b1N0cmluZygnaGV4JylcblxuICAvLyBHZXQgdGhlIHB1YiBrZXkgaW4gcGVtIGZvcm1hdFxuICBjb25zdCBwdWJLZXlQZW0gPSBLSlVSLmFzbjEuQVNOMVV0aWwuZ2V0UEVNU3RyaW5nRnJvbUhleChwdWJLZXlIZXgsICdQVUJMSUMgS0VZJylcblxuICAvLyByZXR1cm4gdGhlIEpXSyBmb3JtYXQgZm9yIHRoZSBrZXlcbiAgY29uc3QgandrOiBhbnkgPSBLRVlVVElMLmdldEpXSyhwdWJLZXlQZW0pXG5cbiAgandrLnVzZSA9ICdzaWcnXG4gIGp3ay5hbGcgPSAnUlMyNTYnXG5cbiAgcmV0dXJuIGp3a1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRLTVNLZXlUYWdzIChrZXlBbGlhczogc3RyaW5nLCB0YWdzOiBUYWdbXSkge1xuICByZXR1cm4gYXdhaXQgY2xpZW50LnNlbmQobmV3IFRhZ1Jlc291cmNlQ29tbWFuZCh7IEtleUlkOiBrZXlBbGlhcywgVGFnczogdGFncyB9KSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkVG9TMyAoa2V5OiBzdHJpbmcsIGNvbnRlbnRzOiBvYmplY3QpIHtcbiAgLy8gZ2V0IFMzIGJ1Y2tldCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICBjb25zdCBzM0J1Y2tldCA9IHByb2Nlc3MuZW52LlMzX0JVQ0tFVFxuXG4gIGNvbnN0IHMzY2xpZW50ID0gbmV3IFMzQ2xpZW50KHt9KVxuXG4gIC8vIFdyaXRlIGp3ayB0byBzMyBidWNrZXRcbiAgYXdhaXQgczNjbGllbnQuc2VuZChuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XG4gICAgQnVja2V0OiBzM0J1Y2tldCxcbiAgICBLZXk6IGtleSwgLy8gRmlsZSBuYW1lIHlvdSB3YW50IHRvIHNhdmUgYXMgaW4gUzNcbiAgICBCb2R5OiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShjb250ZW50cykpLFxuICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgQ29udGVudEVuY29kaW5nOiAnJ1xuICB9KSlcbn1cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgua2V5cm90YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmtleXJvdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNENBQTRDO0FBQzVDLEVBQUU7QUFDRixzQ0FBc0M7OztBQUV0QyxvREFXNEI7QUFDNUIsa0RBQStEO0FBQy9ELHlDQUF5QztBQUV6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFaEMsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUE7QUFDM0MsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUE7QUFDekMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUE7QUFFekMsTUFBTSxPQUFPLEdBQWE7SUFDeEIsY0FBYztJQUNkLGFBQWE7SUFDYixhQUFhO0NBQ2QsQ0FBQTtBQUVNLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxLQUFVLEVBQWdCLEVBQUU7SUFDeEQsbUNBQW1DO0lBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXpCLGlEQUFpRDtJQUNqRCxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxnQkFBZ0I7WUFDbkIsTUFBTSxjQUFjLEVBQUUsQ0FBQTtZQUN0QixNQUFLO1FBQ1AsS0FBSyxjQUFjO1lBQ2pCLE1BQU0sWUFBWSxFQUFFLENBQUE7WUFDcEIsTUFBSztRQUNQLEtBQUssYUFBYTtZQUNoQixNQUFNLFdBQVcsRUFBRSxDQUFBO1lBQ25CLE1BQUs7UUFDUCxLQUFLLGVBQWU7WUFDbEIsTUFBTSxhQUFhLEVBQUUsQ0FBQTtZQUNyQixNQUFLO1FBQ1AsS0FBSyxtQkFBbUI7WUFDdEIsTUFBTSxZQUFZLEVBQUUsQ0FBQTtZQUNwQixNQUFNLDJCQUEyQixFQUFFLENBQUE7WUFDbkMsTUFBSztRQUVQO1lBQ0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMvQixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBMUJZLFFBQUEsT0FBTyxXQTBCbkI7QUFFRCxLQUFLLFVBQVUsY0FBYztJQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUE7SUFFNUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQzlDLElBQUksdUNBQTBCLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDckQsQ0FBQTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUNyQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxZQUFZO0lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUNwQyxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzFELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsTUFBTSxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDekQsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLDhFQUE4RSxDQUFDLENBQUE7SUFDN0YsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsV0FBVztJQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUE7SUFFbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMxRCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQ3hELENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFBO0lBQzVGLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGFBQWE7SUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBRTNDLGlCQUFpQjtJQUNqQixNQUFNLGNBQWMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSw2QkFBZ0IsQ0FBQztRQUM1RCxPQUFPLEVBQUUsVUFBVTtRQUNuQixRQUFRLEVBQUUsYUFBYTtLQUN4QixDQUFDLENBQUMsQ0FBQTtJQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7SUFFM0Isd0NBQXdDO0lBQ3hDLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxXQUFZLENBQUMsS0FBTSxDQUFDLENBQUE7QUFDOUUsQ0FBQztBQUVELEtBQUssVUFBVSxtQkFBbUIsQ0FBRSxTQUFpQixFQUFFLEtBQWE7SUFDbEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksK0JBQWtCLENBQUM7WUFDOUQsU0FBUyxFQUFFLFNBQVM7WUFDcEIsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDLENBQUE7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxHQUFHLFlBQVksOEJBQWlCLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUE7WUFDNUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksK0JBQWtCLENBQUM7Z0JBQzlELFNBQVMsRUFBRSxTQUFTO2dCQUNwQixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDLENBQUMsQ0FBQTtZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsZ0JBQWdCLENBQUUsS0FBYTs7SUFDNUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksK0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQzVFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckIsT0FBTyxNQUFBLFFBQVEsQ0FBQyxXQUFXLDBDQUFFLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksR0FBRyxZQUFZLDhCQUFpQixFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxDQUFBO1FBQ1gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLFlBQVk7SUFDekIsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFBO0lBRTVCLEtBQUssTUFBTSxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM5QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDL0MsTUFBTSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQzlFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUVoQyxNQUFNLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBRUQsS0FBSyxVQUFVLDJCQUEyQjtJQUN4QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUVqQyxNQUFNLG1CQUFtQixHQUFHO1FBQzFCLE1BQU07UUFDTixRQUFRLEVBQUUsR0FBRyxNQUFNLGlCQUFpQjtRQUNwQyx3QkFBd0IsRUFBRTtZQUN4QixPQUFPO1NBQ1I7UUFDRCxxQ0FBcUMsRUFBRTtZQUNyQyxPQUFPO1NBQ1I7UUFDRCxnQkFBZ0IsRUFBRTtZQUNoQixRQUFRO1NBQ1Q7UUFDRCxxQ0FBcUMsRUFBRTtZQUNyQyxxQkFBcUI7U0FDdEI7UUFDRCxnQkFBZ0IsRUFBRTtZQUNoQixLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztTQUNOO0tBQ0YsQ0FBQTtJQUVELE1BQU0sVUFBVSxDQUFDLGtDQUFrQyxFQUFFLG1CQUFtQixDQUFDLENBQUE7QUFDM0UsQ0FBQztBQUVELEtBQUssVUFBVSxXQUFXLENBQUUsUUFBZ0I7SUFDMUMsOEJBQThCO0lBQzlCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksZ0NBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRXpGLDhDQUE4QztJQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQXVCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFeEYsZ0NBQWdDO0lBQ2hDLE1BQU0sU0FBUyxHQUFHLGdCQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFFakYsb0NBQW9DO0lBQ3BDLE1BQU0sR0FBRyxHQUFRLG1CQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRTFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFBO0lBQ2YsR0FBRyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUE7SUFFakIsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsS0FBSyxVQUFVLGFBQWEsQ0FBRSxRQUFnQixFQUFFLElBQVc7SUFDekQsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSwrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBRSxHQUFXLEVBQUUsUUFBZ0I7SUFDdEQsMkNBQTJDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFBO0lBRXRDLE1BQU0sUUFBUSxHQUFHLElBQUksb0JBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVqQyx5QkFBeUI7SUFDekIsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksNEJBQWdCLENBQUM7UUFDdkMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxzQ0FBc0M7UUFDaEQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxXQUFXLEVBQUUsa0JBQWtCO1FBQy9CLGVBQWUsRUFBRSxFQUFFO0tBQ3BCLENBQUMsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjMgQWxsaWFuZGVyIE5WXG4vL1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgS01TQ2xpZW50LFxuICBEZXNjcmliZUtleUNvbW1hbmQsXG4gIEdldFB1YmxpY0tleUNvbW1hbmQsXG4gIENyZWF0ZUtleUNvbW1hbmQsXG4gIFVwZGF0ZUFsaWFzQ29tbWFuZCxcbiAgU2NoZWR1bGVLZXlEZWxldGlvbkNvbW1hbmQsXG4gIFRhZ1Jlc291cmNlQ29tbWFuZCxcbiAgVGFnLFxuICBOb3RGb3VuZEV4Y2VwdGlvbixcbiAgQ3JlYXRlQWxpYXNDb21tYW5kXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1rbXMnXG5pbXBvcnQgeyBTM0NsaWVudCwgUHV0T2JqZWN0Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMydcbmltcG9ydCB7IEtFWVVUSUwsIEtKVVIgfSBmcm9tICdqc3JzYXNpZ24nXG5cbmNvbnN0IGNsaWVudCA9IG5ldyBLTVNDbGllbnQoe30pXG5cbmNvbnN0IEFMSUFTX1BSRVZJT1VTID0gJ2FsaWFzL3N0cy9QUkVWSU9VUydcbmNvbnN0IEFMSUFTX0NVUlJFTlQgPSAnYWxpYXMvc3RzL0NVUlJFTlQnXG5jb25zdCBBTElBU19QRU5ESU5HID0gJ2FsaWFzL3N0cy9QRU5ESU5HJ1xuXG5jb25zdCBBTElBU0VTOiBzdHJpbmdbXSA9IFtcbiAgQUxJQVNfUFJFVklPVVMsXG4gIEFMSUFTX0NVUlJFTlQsXG4gIEFMSUFTX1BFTkRJTkdcbl1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoZXZlbnQ6IGFueSk6IFByb21pc2U8YW55PiA9PiB7XG4gIC8vIHJldHJpZXZlIHRoZSBzdGVwIGZyb20gdGhlIGV2ZW50XG4gIGNvbnN0IHN0ZXAgPSAoZXZlbnQuc3RlcClcblxuICAvLyBtYXRjaCB0aGUgc3RlcCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uXG4gIHN3aXRjaCAoc3RlcCkge1xuICAgIGNhc2UgJ2RlbGV0ZVByZXZpb3VzJzpcbiAgICAgIGF3YWl0IGRlbGV0ZVByZXZpb3VzKClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW92ZVByZXZpb3VzJzpcbiAgICAgIGF3YWl0IG1vdmVQcmV2aW91cygpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21vdmVDdXJyZW50JzpcbiAgICAgIGF3YWl0IG1vdmVDdXJyZW50KClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnY3JlYXRlUGVuZGluZyc6XG4gICAgICBhd2FpdCBjcmVhdGVQZW5kaW5nKClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnZ2VuZXJhdGVBcnRpZmFjdHMnOlxuICAgICAgYXdhaXQgZ2VuZXJhdGVKV0tTKClcbiAgICAgIGF3YWl0IGdlbmVyYXRlT3BlbklEQ29uZmlndXJhdGlvbigpXG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIHN0ZXAnKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVByZXZpb3VzICgpIHtcbiAgY29uc29sZS5sb2coJ0RlbGV0aW5nIFBSRVZJT1VTIGFsaWFzZWQga2V5JylcblxuICBjb25zdCBwcmV2S2V5SWQgPSBhd2FpdCBnZXRLZXlJZEZvckFsaWFzKEFMSUFTX1BSRVZJT1VTKVxuICBpZiAocHJldktleUlkKSB7XG4gICAgY29uc3QgU2NoZWR1bGVEZWxldGVSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKFxuICAgICAgbmV3IFNjaGVkdWxlS2V5RGVsZXRpb25Db21tYW5kKHsgS2V5SWQ6IHByZXZLZXlJZCB9KVxuICAgIClcbiAgICBjb25zb2xlLmxvZyhTY2hlZHVsZURlbGV0ZVJlc3BvbnNlKVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdObyBQUkVWSU9VUyBrZXkgYXQgdGhlIG1vbWVudCwgc2tpcCBkZWxldGlvbicpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbW92ZVByZXZpb3VzICgpIHtcbiAgY29uc29sZS5sb2coJ21vdmluZyBQUkVWSU9VUyBhbGlhcycpXG4gIGNvbnN0IGN1cnJlbnRLZXlJZCA9IGF3YWl0IGdldEtleUlkRm9yQWxpYXMoQUxJQVNfQ1VSUkVOVClcbiAgaWYgKGN1cnJlbnRLZXlJZCkge1xuICAgIGF3YWl0IHVwZGF0ZU9yQ3JlYXRlQWxpYXMoQUxJQVNfUFJFVklPVVMsIGN1cnJlbnRLZXlJZClcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZygnTm8gQ1VSUkVOVCBrZXkgYXQgdGhlIG1vbWVudCwgc2tpcCBhc3NpZ25pbmcgdGhlIFBSRVZJT1VTIGFsaWFzIHRvIHRoaXMga2V5LicpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbW92ZUN1cnJlbnQgKCkge1xuICBjb25zb2xlLmxvZygnTW92aW5nIENVUlJFTlQgYWxpYXMnKVxuXG4gIGNvbnN0IHBlbmRpbmdLZXlJZCA9IGF3YWl0IGdldEtleUlkRm9yQWxpYXMoQUxJQVNfUEVORElORylcbiAgaWYgKHBlbmRpbmdLZXlJZCkge1xuICAgIGF3YWl0IHVwZGF0ZU9yQ3JlYXRlQWxpYXMoQUxJQVNfQ1VSUkVOVCwgcGVuZGluZ0tleUlkKVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdObyBQRU5ESU5HIGtleSBhdCB0aGUgbW9tZW50LCBza2lwIGFzc2lnbmluZyB0aGUgQ1VSUkVOVCBhbGlhcyB0byB0aGlzIGtleS4nKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVBlbmRpbmcgKCkge1xuICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgbmV3IGtleSBmb3IgUEVORElORycpXG5cbiAgLy8gQ3JlYXRlIG5ldyBrZXlcbiAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgQ3JlYXRlS2V5Q29tbWFuZCh7XG4gICAgS2V5U3BlYzogJ1JTQV8yMDQ4JyxcbiAgICBLZXlVc2FnZTogJ1NJR05fVkVSSUZZJ1xuICB9KSlcbiAgY29uc29sZS5sb2coY3JlYXRlUmVzcG9uc2UpXG5cbiAgLy8gVXBkYXRlIHRoZSBuZXcga2V5IHdpdGggcGVuZGluZyBhbGlhc1xuICBhd2FpdCB1cGRhdGVPckNyZWF0ZUFsaWFzKEFMSUFTX1BFTkRJTkcsIGNyZWF0ZVJlc3BvbnNlLktleU1ldGFkYXRhIS5LZXlJZCEpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU9yQ3JlYXRlQWxpYXMgKGFsaWFzTmFtZTogc3RyaW5nLCBrZXlJZDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXBkYXRlUmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgVXBkYXRlQWxpYXNDb21tYW5kKHtcbiAgICAgIEFsaWFzTmFtZTogYWxpYXNOYW1lLFxuICAgICAgVGFyZ2V0S2V5SWQ6IGtleUlkXG4gICAgfSkpXG4gICAgY29uc29sZS5sb2codXBkYXRlUmVzcG9uc2UpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ0FMSUFTIG5vdCBmb3VuZCwgY3JlYXRpbmcgaXQuJylcbiAgICAgIGNvbnN0IGNyZWF0ZVJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IENyZWF0ZUFsaWFzQ29tbWFuZCh7XG4gICAgICAgIEFsaWFzTmFtZTogYWxpYXNOYW1lLFxuICAgICAgICBUYXJnZXRLZXlJZDoga2V5SWRcbiAgICAgIH0pKVxuICAgICAgY29uc29sZS5sb2coY3JlYXRlUmVzcG9uc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IChlcnIpXG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEtleUlkRm9yQWxpYXMgKGtleUlkOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUtleUNvbW1hbmQoeyBLZXlJZDoga2V5SWQgfSkpXG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpXG4gICAgcmV0dXJuIHJlc3BvbnNlLktleU1ldGFkYXRhPy5LZXlJZFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUpXS1MgKCkge1xuICBjb25zdCBhbGxLZXlzOiBvYmplY3RbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBrZXlBbGlhcyBvZiBBTElBU0VTKSB7XG4gICAgY29uc3Qga2V5SWQgPSBhd2FpdCBnZXRLZXlJZEZvckFsaWFzKGtleUFsaWFzKVxuICAgIGlmIChrZXlJZCkge1xuICAgICAgY29uc3QgandrQ29udGVudHMgPSBhd2FpdCBnZW5lcmF0ZUpXSyhrZXlBbGlhcylcbiAgICAgIGF3YWl0IHNldEtNU0tleVRhZ3Moa2V5SWQsIFt7IFRhZ0tleTogJ2p3a19raWQnLCBUYWdWYWx1ZTogandrQ29udGVudHMua2lkIH1dKVxuICAgICAgYWxsS2V5cy5wdXNoKGp3a0NvbnRlbnRzKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHsga2V5czogYWxsS2V5cyB9XG5cbiAgYXdhaXQgdXBsb2FkVG9TMygnZGlzY292ZXJ5L2tleXMnLCByZXN1bHQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3BlbklEQ29uZmlndXJhdGlvbiAoKSB7XG4gIGNvbnN0IGlzc3VlciA9IHByb2Nlc3MuZW52LklTU1VFUlxuXG4gIGNvbnN0IG9wZW5JZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgaXNzdWVyLFxuICAgIGp3a3NfdXJpOiBgJHtpc3N1ZXJ9L2Rpc2NvdmVyeS9rZXlzYCxcbiAgICByZXNwb25zZV90eXBlc19zdXBwb3J0ZWQ6IFtcbiAgICAgICd0b2tlbidcbiAgICBdLFxuICAgIGlkX3Rva2VuX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ6IFtcbiAgICAgICdSUzI1NidcbiAgICBdLFxuICAgIHNjb3Blc19zdXBwb3J0ZWQ6IFtcbiAgICAgICdvcGVuaWQnXG4gICAgXSxcbiAgICB0b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZHNfc3VwcG9ydGVkOiBbXG4gICAgICAnY2xpZW50X3NlY3JldF9iYXNpYydcbiAgICBdLFxuICAgIGNsYWltc19zdXBwb3J0ZWQ6IFtcbiAgICAgICdhdWQnLFxuICAgICAgJ2V4cCcsXG4gICAgICAnaWF0JyxcbiAgICAgICdpc3MnLFxuICAgICAgJ3N1YidcbiAgICBdXG4gIH1cblxuICBhd2FpdCB1cGxvYWRUb1MzKCcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbicsIG9wZW5JZENvbmZpZ3VyYXRpb24pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlSldLIChrZXlBbGlhczogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gR2V0IHRoZSBwdWJsaWMga2V5IGZyb20ga21zXG4gIGNvbnN0IGdldFB1YktleVJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFB1YmxpY0tleUNvbW1hbmQoeyBLZXlJZDoga2V5QWxpYXMgfSkpXG5cbiAgLy8gZ2VuZXJhdGUgSEVYIGZvcm1hdCBmcm9tIHRoZSByZXNwb25zZSAoREVSKVxuICBjb25zdCBwdWJLZXlIZXggPSBCdWZmZXIuZnJvbShnZXRQdWJLZXlSZXNwb25zZS5QdWJsaWNLZXkgYXMgVWludDhBcnJheSkudG9TdHJpbmcoJ2hleCcpXG5cbiAgLy8gR2V0IHRoZSBwdWIga2V5IGluIHBlbSBmb3JtYXRcbiAgY29uc3QgcHViS2V5UGVtID0gS0pVUi5hc24xLkFTTjFVdGlsLmdldFBFTVN0cmluZ0Zyb21IZXgocHViS2V5SGV4LCAnUFVCTElDIEtFWScpXG5cbiAgLy8gcmV0dXJuIHRoZSBKV0sgZm9ybWF0IGZvciB0aGUga2V5XG4gIGNvbnN0IGp3azogYW55ID0gS0VZVVRJTC5nZXRKV0socHViS2V5UGVtKVxuXG4gIGp3ay51c2UgPSAnc2lnJ1xuICBqd2suYWxnID0gJ1JTMjU2J1xuXG4gIHJldHVybiBqd2tcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0S01TS2V5VGFncyAoa2V5QWxpYXM6IHN0cmluZywgdGFnczogVGFnW10pIHtcbiAgcmV0dXJuIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBUYWdSZXNvdXJjZUNvbW1hbmQoeyBLZXlJZDoga2V5QWxpYXMsIFRhZ3M6IHRhZ3MgfSkpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZFRvUzMgKGtleTogc3RyaW5nLCBjb250ZW50czogb2JqZWN0KSB7XG4gIC8vIGdldCBTMyBidWNrZXQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgY29uc3QgczNCdWNrZXQgPSBwcm9jZXNzLmVudi5TM19CVUNLRVRcblxuICBjb25zdCBzM2NsaWVudCA9IG5ldyBTM0NsaWVudCh7fSlcblxuICAvLyBXcml0ZSBqd2sgdG8gczMgYnVja2V0XG4gIGF3YWl0IHMzY2xpZW50LnNlbmQobmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgIEJ1Y2tldDogczNCdWNrZXQsXG4gICAgS2V5OiBrZXksIC8vIEZpbGUgbmFtZSB5b3Ugd2FudCB0byBzYXZlIGFzIGluIFMzXG4gICAgQm9keTogQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY29udGVudHMpKSxcbiAgICBDb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIENvbnRlbnRFbmNvZGluZzogJydcbiAgfSkpXG59XG4iXX0=
@@ -10,10 +10,11 @@ const logger_1 = require("@aws-lambda-powertools/logger");
10
10
  const KEY_ALIAS_CURRENT = 'alias/sts/CURRENT';
11
11
  const logger = new logger_1.Logger();
12
12
  const handler = async (apiEvent, context) => {
13
- const identityArn = getARNFromIdentity(apiEvent.requestContext.identity?.userArn);
13
+ var _a, _b, _c, _d;
14
+ const identityArn = getARNFromIdentity((_a = apiEvent.requestContext.identity) === null || _a === void 0 ? void 0 : _a.userArn);
14
15
  logger.debug(identityArn);
15
16
  if (identityArn === undefined || identityArn === null) {
16
- logger.info(`Unable to resolve identityArn for userArn: ${apiEvent.requestContext.identity?.userArn}`);
17
+ logger.info(`Unable to resolve identityArn for userArn: ${(_b = apiEvent.requestContext.identity) === null || _b === void 0 ? void 0 : _b.userArn}`);
17
18
  return respond('Unable to resolve identity', 400);
18
19
  }
19
20
  let aud = process.env.DEFAULT_AUDIENCE;
@@ -23,13 +24,13 @@ const handler = async (apiEvent, context) => {
23
24
  const kms = new client_kms_1.KMSClient({});
24
25
  // Get KeyID which will be sent as kid in JWT token
25
26
  const currentResponse = await kms.send(new client_kms_1.DescribeKeyCommand({ KeyId: `${KEY_ALIAS_CURRENT}` }));
26
- const currentKeyId = currentResponse.KeyMetadata?.KeyId;
27
+ const currentKeyId = (_c = currentResponse.KeyMetadata) === null || _c === void 0 ? void 0 : _c.KeyId;
27
28
  if (currentKeyId === undefined) {
28
29
  return respond('KMS key could not be retrieved', 500);
29
30
  }
30
31
  // Retrieve Tags for KMS Key - the key is tagged with the `kid` from the JWK which is used in the JWT headers
31
32
  const listResourceTagsResponse = await kms.send(new client_kms_1.ListResourceTagsCommand({ KeyId: currentKeyId }));
32
- const kid = getTagValueFromTags('jwk_kid', listResourceTagsResponse.Tags ?? []);
33
+ const kid = getTagValueFromTags('jwk_kid', (_d = listResourceTagsResponse.Tags) !== null && _d !== void 0 ? _d : []);
33
34
  if (kid == null) {
34
35
  return respond('KMS key is not correctly tagged', 500);
35
36
  }
@@ -48,7 +49,7 @@ const handler = async (apiEvent, context) => {
48
49
  notBeforeDate.setTime(notBeforeDate.getTime() - 5 * 60 * 1000); // 5m before issuedAtDate
49
50
  // JWT Token payload
50
51
  const payload = {
51
- sub: `${identityArn}`,
52
+ sub: `${identityArn}`, // Set role arn as message for payload
52
53
  aud,
53
54
  iss,
54
55
  iat: Math.floor(issuedAtDate.getTime() / 1000),
@@ -86,23 +87,24 @@ function respond(message, statusCode = 200) {
86
87
  };
87
88
  }
88
89
  function getARNFromIdentity(identityArn) {
90
+ var _a, _b;
89
91
  if (identityArn === undefined || identityArn === null) {
90
92
  return null;
91
93
  }
92
94
  // Regex for converting arn to base role
93
95
  const captGroups = [
94
96
  'arn:aws:sts:',
95
- '(?<regionName>[^:]*)',
97
+ '(?<regionName>[^:]*)', // group 1
96
98
  ':',
97
- '(?<accountId>\\d{12})',
99
+ '(?<accountId>\\d{12})', // group 2
98
100
  ':assumed-role\\/',
99
- '(?<roleName>[A-z0-9\\-]+?)',
101
+ '(?<roleName>[A-z0-9\\-]+?)', // group 3
100
102
  '\\/',
101
- '(?<user>[^:]*)',
103
+ '(?<user>[^:]*)', // group 4
102
104
  '$'
103
105
  ];
104
106
  const regex = new RegExp(captGroups.join(''));
105
- const { regionName, accountId, roleName } = regex.exec(identityArn)?.groups ?? {};
107
+ const { regionName, accountId, roleName } = (_b = (_a = regex.exec(identityArn)) === null || _a === void 0 ? void 0 : _a.groups) !== null && _b !== void 0 ? _b : {};
106
108
  if (regionName === undefined || accountId === undefined || roleName === undefined) {
107
109
  return null;
108
110
  }
@@ -117,4 +119,4 @@ function getTagValueFromTags(tagKey, tags) {
117
119
  }
118
120
  return null;
119
121
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsRUFBRTtBQUNGLHNDQUFzQzs7O0FBR3RDLG9EQUE4RztBQUM5Ryx5Q0FBaUM7QUFFakMsMERBQXNEO0FBRXRELE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUE7QUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQTtBQUVwQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsUUFBeUIsRUFBRSxPQUFnQixFQUFrQyxFQUFFO0lBQzNHLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2pGLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBWSxDQUFDLENBQUE7SUFFMUIsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUN0RyxPQUFPLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLENBQUMsQ0FBQTtLQUNsRDtJQUVELElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUE7SUFFdEMsSUFBSSxRQUFRLENBQUMscUJBQXFCLElBQUksUUFBUSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtRQUN4RSxHQUFHLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQTtLQUN6QztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUU3QixtREFBbUQ7SUFDbkQsTUFBTSxlQUFlLEdBQUcsTUFBTSxHQUFHLENBQUMs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VyxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUVqRixJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQ2pGLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFFRCxzQkFBc0I7SUFDdEIsT0FBTyxlQUFlLFVBQVUsSUFBSSxTQUFTLFNBQVMsUUFBUSxFQUFFLENBQUE7QUFDbEUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUUsTUFBYyxFQUFFLElBQVc7SUFDdkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDdEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUN6QixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUE7U0FDcEI7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjMgQWxsaWFuZGVyIE5WXG4vL1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29udGV4dCwgQVBJR2F0ZXdheVByb3h5UmVzdWx0LCBBUElHYXRld2F5RXZlbnQgfSBmcm9tICdhd3MtbGFtYmRhJ1xuaW1wb3J0IHsgS01TQ2xpZW50LCBTaWduQ29tbWFuZCwgRGVzY3JpYmVLZXlDb21tYW5kLCBMaXN0UmVzb3VyY2VUYWdzQ29tbWFuZCwgVGFnIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcydcbmltcG9ydCBiYXNlNjR1cmwgZnJvbSAnYmFzZTY0dXJsJ1xuXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAYXdzLWxhbWJkYS1wb3dlcnRvb2xzL2xvZ2dlcidcblxuY29uc3QgS0VZX0FMSUFTX0NVUlJFTlQgPSAnYWxpYXMvc3RzL0NVUlJFTlQnXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKClcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoYXBpRXZlbnQ6IEFQSUdhdGV3YXlFdmVudCwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8QVBJR2F0ZXdheVByb3h5UmVzdWx0PiA9PiB7XG4gIGNvbnN0IGlkZW50aXR5QXJuID0gZ2V0QVJORnJvbUlkZW50aXR5KGFwaUV2ZW50LnJlcXVlc3RDb250ZXh0LmlkZW50aXR5Py51c2VyQXJuKVxuICBsb2dnZXIuZGVidWcoaWRlbnRpdHlBcm4hKVxuXG4gIGlmIChpZGVudGl0eUFybiA9PT0gdW5kZWZpbmVkIHx8IGlkZW50aXR5QXJuID09PSBudWxsKSB7XG4gICAgbG9nZ2VyLmluZm8oYFVuYWJsZSB0byByZXNvbHZlIGlkZW50aXR5QXJuIGZvciB1c2VyQXJuOiAke2FwaUV2ZW50LnJlcXVlc3RDb250ZXh0LmlkZW50aXR5Py51c2VyQXJufWApXG4gICAgcmV0dXJuIHJlc3BvbmQoJ1VuYWJsZSB0byByZXNvbHZlIGlkZW50aXR5JywgNDAwKVxuICB9XG5cbiAgbGV0IGF1ZCA9IHByb2Nlc3MuZW52LkRFRkFVTFRfQVVESUVOQ0VcblxuICBpZiAoYXBpRXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzICYmIGFwaUV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycy5hdWQpIHtcbiAgICBhdWQgPSBhcGlFdmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMuYXVkXG4gIH1cblxuICBjb25zdCBrbXMgPSBuZXcgS01TQ2xpZW50KHt9KVxuXG4gIC8vIEdldCBLZXlJRCB3aGljaCB3aWxsIGJlIHNlbnQgYXMga2lkIGluIEpXVCB0b2tlblxuICBjb25zdCBjdXJyZW50UmVzcG9uc2UgPSBhd2FpdCBrbXMuc2VuZChuZXcgRGVzY3JpYmVLZXlDb21tYW5kKHsgS2V5SWQ6IGAke0tFWV9BTElBU19DVVJSRU5UfWAgfSkpXG4gIGNvbnN0IGN1cnJlbnRLZXlJZCA9IGN1cnJlbnRSZXNwb25zZS5LZXlNZXRhZGF0YT8uS2V5SWRcblxuICBpZiAoY3VycmVudEtleUlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzcG9uZCgnS01TIGtleSBjb3VsZCBub3QgYmUgcmV0cmlldmVkJywgNTAwKVxuICB9XG5cbiAgLy8gUmV0cmlldmUgVGFncyBmb3IgS01TIEtleSAtIHRoZSBrZXkgaXMgdGFnZ2VkIHdpdGggdGhlIGBraWRgIGZyb20gdGhlIEpXSyB3aGljaCBpcyB1c2VkIGluIHRoZSBKV1QgaGVhZGVyc1xuICBjb25zdCBsaXN0UmVzb3VyY2VUYWdzUmVzcG9uc2UgPSBhd2FpdCBrbXMuc2VuZChuZXcgTGlzdFJlc291cmNlVGFnc0NvbW1hbmQoeyBLZXlJZDogY3VycmVudEtleUlkIH0pKVxuICBjb25zdCBraWQgPSBnZXRUYWdWYWx1ZUZyb21UYWdzKCdqd2tfa2lkJywgbGlzdFJlc291cmNlVGFnc1Jlc3BvbnNlLlRhZ3MgPz8gW10pXG5cbiAgaWYgKGtpZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3BvbmQoJ0tNUyBrZXkgaXMgbm90IGNvcnJlY3RseSB0YWdnZWQnLCA1MDApXG4gIH1cblxuICBjb25zdCBpc3MgPSBwcm9jZXNzLmVudi5JU1NVRVJcblxuICAvLyBKV1QgVG9rZW4gaGVhZGVyc1xuICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7XG4gICAgYWxnOiAnUlMyNTYnLFxuICAgIHR5cDogJ0pXVCcsXG4gICAga2lkOiBgJHtraWR9YFxuICB9XG5cbiAgLy8gcHJlcGFyZSB0b2tlbiBsaWZldGltZSBwcm9wZXJ0eSB2YWx1ZXNcbiAgY29uc3QgaXNzdWVkQXREYXRlID0gbmV3IERhdGUoKVxuICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKGlzc3VlZEF0RGF0ZSlcbiAgY29uc3Qgbm90QmVmb3JlRGF0ZSA9IG5ldyBEYXRlKGlzc3VlZEF0RGF0ZSlcbiAgZXhwaXJhdGlvbkRhdGUuc2V0VGltZShleHBpcmF0aW9uRGF0ZS5nZXRUaW1lKCkgKyA2MCAqIDYwICogMTAwMCkgLy8gdmFsaWQgZm9yIG9uZSBob3VyXG4gIG5vdEJlZm9yZURhdGUuc2V0VGltZShub3RCZWZvcmVEYXRlLmdldFRpbWUoKSAtIDUgKiA2MCAqIDEwMDApIC8vIDVtIGJlZm9yZSBpc3N1ZWRBdERhdGVcblxuICAvLyBKV1QgVG9rZW4gcGF5bG9hZFxuICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgc3ViOiBgJHtpZGVudGl0eUFybn1gLCAvLyBTZXQgcm9sZSBhcm4gYXMgbWVzc2FnZSBmb3IgcGF5bG9hZFxuICAgIGF1ZCxcbiAgICBpc3MsXG4gICAgaWF0OiBNYXRoLmZsb29yKGlzc3VlZEF0RGF0ZS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICBleHA6IE1hdGguZmxvb3IoZXhwaXJhdGlvbkRhdGUuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgbmJmOiBNYXRoLmZsb29yKG5vdEJlZm9yZURhdGUuZ2V0VGltZSgpIC8gMTAwMClcbiAgfVxuXG4gIC8vIFByZXBhcmUgbWVzc2FnZSB0byBiZSBzaWduZWQgYnkgS01TXG4gIGNvbnN0IHRva2VuSGVhZGVycyA9IGJhc2U2NHVybChKU09OLnN0cmluZ2lmeShoZWFkZXJzKSlcbiAgY29uc3QgdG9rZW5QYXlsb2FkID0gYmFzZTY0dXJsKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKVxuXG4gIC8vIFNpZ24gbWVzc2FnZSB3aXRoIEtNU1xuICBjb25zdCBzaWduUmVzcG9uc2UgPSBhd2FpdCBrbXMuc2VuZChuZXcgU2lnbkNvbW1hbmQoe1xuICAgIEtleUlkOiBjdXJyZW50S2V5SWQsXG4gICAgTWVzc2FnZTogQnVmZmVyLmZyb20oYCR7dG9rZW5IZWFkZXJzfS4ke3Rva2VuUGF5bG9hZH1gKSxcbiAgICBTaWduaW5nQWxnb3JpdGhtOiAnUlNBU1NBX1BLQ1MxX1YxXzVfU0hBXzI1NicsXG4gICAgTWVzc2FnZVR5cGU6ICdSQVcnXG4gIH0pKVxuICBsb2dnZXIuZGVidWcoSlNPTi5zdHJpbmdpZnkoc2lnblJlc3BvbnNlKSlcblxuICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXJcbiAgICAuZnJvbShzaWduUmVzcG9uc2UuU2lnbmF0dXJlIGFzIFVpbnQ4QXJyYXkpXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgIC5yZXBsYWNlKC89L2csICcnKVxuXG4gIGNvbnN0IHRva2VuID0gYCR7dG9rZW5IZWFkZXJzfS4ke3Rva2VuUGF5bG9hZH0uJHtzaWduYXR1cmV9YFxuICBsb2dnZXIuZGVidWcodG9rZW4pXG5cbiAgcmV0dXJuIHJlc3BvbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgIHRva2VuXG4gIH0pKVxufVxuXG5mdW5jdGlvbiByZXNwb25kIChtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlciA9IDIwMCkge1xuICByZXR1cm4ge1xuICAgIHN0YXR1c0NvZGUsXG4gICAgYm9keTogbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFSTkZyb21JZGVudGl0eSAoaWRlbnRpdHlBcm46IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKGlkZW50aXR5QXJuID09PSB1bmRlZmluZWQgfHwgaWRlbnRpdHlBcm4gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gUmVnZXggZm9yIGNvbnZlcnRpbmcgYXJuIHRvIGJhc2Ugcm9sZVxuICBjb25zdCBjYXB0R3JvdXBzID0gW1xuICAgICdhcm46YXdzOnN0czonLFxuICAgICcoPzxyZWdpb25OYW1lPlteOl0qKScsIC8vIGdyb3VwIDFcbiAgICAnOicsXG4gICAgJyg/PGFjY291bnRJZD5cXFxcZHsxMn0pJywgLy8gZ3JvdXAgMlxuICAgICc6YXNzdW1lZC1yb2xlXFxcXC8nLFxuICAgICcoPzxyb2xlTmFtZT5bQS16MC05XFxcXC1dKz8pJywgLy8gZ3JvdXAgM1xuICAgICdcXFxcLycsXG4gICAgJyg/PHVzZXI+W146XSopJywgLy8gZ3JvdXAgNFxuICAgICckJ1xuICBdXG5cbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGNhcHRHcm91cHMuam9pbignJykpXG4gIGNvbnN0IHsgcmVnaW9uTmFtZSwgYWNjb3VudElkLCByb2xlTmFtZSB9ID0gcmVnZXguZXhlYyhpZGVudGl0eUFybik/Lmdyb3VwcyA/PyB7fVxuXG4gIGlmIChyZWdpb25OYW1lID09PSB1bmRlZmluZWQgfHwgYWNjb3VudElkID09PSB1bmRlZmluZWQgfHwgcm9sZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBCdWlsZCBiYXNlIHJvbGUgYXJuXG4gIHJldHVybiBgYXJuOmF3czppYW06JHtyZWdpb25OYW1lfToke2FjY291bnRJZH06cm9sZS8ke3JvbGVOYW1lfWBcbn1cblxuZnVuY3Rpb24gZ2V0VGFnVmFsdWVGcm9tVGFncyAodGFnS2V5OiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICBpZiAodGFnLlRhZ0tleSA9PT0gdGFnS2V5KSB7XG4gICAgICByZXR1cm4gdGFnLlRhZ1ZhbHVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiJdfQ==
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsRUFBRTtBQUNGLHNDQUFzQzs7O0FBR3RDLG9EQUE4RztBQUM5Ryx5Q0FBaUM7QUFFakMsMERBQXNEO0FBRXRELE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUE7QUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQTtBQUVwQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsUUFBeUIsRUFBRSxPQUFnQixFQUFrQyxFQUFFOztJQUMzRyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFBLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSwwQ0FBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVksQ0FBQyxDQUFBO0lBRTFCLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsMENBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUN0RyxPQUFPLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUV0QyxJQUFJLFFBQVEsQ0FBQyxxQkFBcUIsSUFBSSxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUE7SUFDMUMsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUU3QixtREFBbUQ7SUFD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SUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQUEsTUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxNQUFNLG1DQUFJLEVBQUUsQ0FBQTtJQUVqRixJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLE9BQU8sZUFBZSxVQUFVLElBQUksU0FBUyxTQUFTLFFBQVEsRUFBRSxDQUFBO0FBQ2xFLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFFLE1BQWMsRUFBRSxJQUFXO0lBQ3ZELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQTtRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjMgQWxsaWFuZGVyIE5WXG4vL1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29udGV4dCwgQVBJR2F0ZXdheVByb3h5UmVzdWx0LCBBUElHYXRld2F5RXZlbnQgfSBmcm9tICdhd3MtbGFtYmRhJ1xuaW1wb3J0IHsgS01TQ2xpZW50LCBTaWduQ29tbWFuZCwgRGVzY3JpYmVLZXlDb21tYW5kLCBMaXN0UmVzb3VyY2VUYWdzQ29tbWFuZCwgVGFnIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcydcbmltcG9ydCBiYXNlNjR1cmwgZnJvbSAnYmFzZTY0dXJsJ1xuXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAYXdzLWxhbWJkYS1wb3dlcnRvb2xzL2xvZ2dlcidcblxuY29uc3QgS0VZX0FMSUFTX0NVUlJFTlQgPSAnYWxpYXMvc3RzL0NVUlJFTlQnXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKClcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoYXBpRXZlbnQ6IEFQSUdhdGV3YXlFdmVudCwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8QVBJR2F0ZXdheVByb3h5UmVzdWx0PiA9PiB7XG4gIGNvbnN0IGlkZW50aXR5QXJuID0gZ2V0QVJORnJvbUlkZW50aXR5KGFwaUV2ZW50LnJlcXVlc3RDb250ZXh0LmlkZW50aXR5Py51c2VyQXJuKVxuICBsb2dnZXIuZGVidWcoaWRlbnRpdHlBcm4hKVxuXG4gIGlmIChpZGVudGl0eUFybiA9PT0gdW5kZWZpbmVkIHx8IGlkZW50aXR5QXJuID09PSBudWxsKSB7XG4gICAgbG9nZ2VyLmluZm8oYFVuYWJsZSB0byByZXNvbHZlIGlkZW50aXR5QXJuIGZvciB1c2VyQXJuOiAke2FwaUV2ZW50LnJlcXVlc3RDb250ZXh0LmlkZW50aXR5Py51c2VyQXJufWApXG4gICAgcmV0dXJuIHJlc3BvbmQoJ1VuYWJsZSB0byByZXNvbHZlIGlkZW50aXR5JywgNDAwKVxuICB9XG5cbiAgbGV0IGF1ZCA9IHByb2Nlc3MuZW52LkRFRkFVTFRfQVVESUVOQ0VcblxuICBpZiAoYXBpRXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzICYmIGFwaUV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycy5hdWQpIHtcbiAgICBhdWQgPSBhcGlFdmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMuYXVkXG4gIH1cblxuICBjb25zdCBrbXMgPSBuZXcgS01TQ2xpZW50KHt9KVxuXG4gIC8vIEdldCBLZXlJRCB3aGljaCB3aWxsIGJlIHNlbnQgYXMga2lkIGluIEpXVCB0b2tlblxuICBjb25zdCBjdXJyZW50UmVzcG9uc2UgPSBhd2FpdCBrbXMuc2VuZChuZXcgRGVzY3JpYmVLZXlDb21tYW5kKHsgS2V5SWQ6IGAke0tFWV9BTElBU19DVVJSRU5UfWAgfSkpXG4gIGNvbnN0IGN1cnJlbnRLZXlJZCA9IGN1cnJlbnRSZXNwb25zZS5LZXlNZXRhZGF0YT8uS2V5SWRcblxuICBpZiAoY3VycmVudEtleUlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzcG9uZCgnS01TIGtleSBjb3VsZCBub3QgYmUgcmV0cmlldmVkJywgNTAwKVxuICB9XG5cbiAgLy8gUmV0cmlldmUgVGFncyBmb3IgS01TIEtleSAtIHRoZSBrZXkgaXMgdGFnZ2VkIHdpdGggdGhlIGBraWRgIGZyb20gdGhlIEpXSyB3aGljaCBpcyB1c2VkIGluIHRoZSBKV1QgaGVhZGVyc1xuICBjb25zdCBsaXN0UmVzb3VyY2VUYWdzUmVzcG9uc2UgPSBhd2FpdCBrbXMuc2VuZChuZXcgTGlzdFJlc291cmNlVGFnc0NvbW1hbmQoeyBLZXlJZDogY3VycmVudEtleUlkIH0pKVxuICBjb25zdCBraWQgPSBnZXRUYWdWYWx1ZUZyb21UYWdzKCdqd2tfa2lkJywgbGlzdFJlc291cmNlVGFnc1Jlc3BvbnNlLlRhZ3MgPz8gW10pXG5cbiAgaWYgKGtpZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3BvbmQoJ0tNUyBrZXkgaXMgbm90IGNvcnJlY3RseSB0YWdnZWQnLCA1MDApXG4gIH1cblxuICBjb25zdCBpc3MgPSBwcm9jZXNzLmVudi5JU1NVRVJcblxuICAvLyBKV1QgVG9rZW4gaGVhZGVyc1xuICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7XG4gICAgYWxnOiAnUlMyNTYnLFxuICAgIHR5cDogJ0pXVCcsXG4gICAga2lkOiBgJHtraWR9YFxuICB9XG5cbiAgLy8gcHJlcGFyZSB0b2tlbiBsaWZldGltZSBwcm9wZXJ0eSB2YWx1ZXNcbiAgY29uc3QgaXNzdWVkQXREYXRlID0gbmV3IERhdGUoKVxuICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKGlzc3VlZEF0RGF0ZSlcbiAgY29uc3Qgbm90QmVmb3JlRGF0ZSA9IG5ldyBEYXRlKGlzc3VlZEF0RGF0ZSlcbiAgZXhwaXJhdGlvbkRhdGUuc2V0VGltZShleHBpcmF0aW9uRGF0ZS5nZXRUaW1lKCkgKyA2MCAqIDYwICogMTAwMCkgLy8gdmFsaWQgZm9yIG9uZSBob3VyXG4gIG5vdEJlZm9yZURhdGUuc2V0VGltZShub3RCZWZvcmVEYXRlLmdldFRpbWUoKSAtIDUgKiA2MCAqIDEwMDApIC8vIDVtIGJlZm9yZSBpc3N1ZWRBdERhdGVcblxuICAvLyBKV1QgVG9rZW4gcGF5bG9hZFxuICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgc3ViOiBgJHtpZGVudGl0eUFybn1gLCAvLyBTZXQgcm9sZSBhcm4gYXMgbWVzc2FnZSBmb3IgcGF5bG9hZFxuICAgIGF1ZCxcbiAgICBpc3MsXG4gICAgaWF0OiBNYXRoLmZsb29yKGlzc3VlZEF0RGF0ZS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICBleHA6IE1hdGguZmxvb3IoZXhwaXJhdGlvbkRhdGUuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgbmJmOiBNYXRoLmZsb29yKG5vdEJlZm9yZURhdGUuZ2V0VGltZSgpIC8gMTAwMClcbiAgfVxuXG4gIC8vIFByZXBhcmUgbWVzc2FnZSB0byBiZSBzaWduZWQgYnkgS01TXG4gIGNvbnN0IHRva2VuSGVhZGVycyA9IGJhc2U2NHVybChKU09OLnN0cmluZ2lmeShoZWFkZXJzKSlcbiAgY29uc3QgdG9rZW5QYXlsb2FkID0gYmFzZTY0dXJsKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKVxuXG4gIC8vIFNpZ24gbWVzc2FnZSB3aXRoIEtNU1xuICBjb25zdCBzaWduUmVzcG9uc2UgPSBhd2FpdCBrbXMuc2VuZChuZXcgU2lnbkNvbW1hbmQoe1xuICAgIEtleUlkOiBjdXJyZW50S2V5SWQsXG4gICAgTWVzc2FnZTogQnVmZmVyLmZyb20oYCR7dG9rZW5IZWFkZXJzfS4ke3Rva2VuUGF5bG9hZH1gKSxcbiAgICBTaWduaW5nQWxnb3JpdGhtOiAnUlNBU1NBX1BLQ1MxX1YxXzVfU0hBXzI1NicsXG4gICAgTWVzc2FnZVR5cGU6ICdSQVcnXG4gIH0pKVxuICBsb2dnZXIuZGVidWcoSlNPTi5zdHJpbmdpZnkoc2lnblJlc3BvbnNlKSlcblxuICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXJcbiAgICAuZnJvbShzaWduUmVzcG9uc2UuU2lnbmF0dXJlIGFzIFVpbnQ4QXJyYXkpXG4gICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgIC5yZXBsYWNlKC89L2csICcnKVxuXG4gIGNvbnN0IHRva2VuID0gYCR7dG9rZW5IZWFkZXJzfS4ke3Rva2VuUGF5bG9hZH0uJHtzaWduYXR1cmV9YFxuICBsb2dnZXIuZGVidWcodG9rZW4pXG5cbiAgcmV0dXJuIHJlc3BvbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgIHRva2VuXG4gIH0pKVxufVxuXG5mdW5jdGlvbiByZXNwb25kIChtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlciA9IDIwMCkge1xuICByZXR1cm4ge1xuICAgIHN0YXR1c0NvZGUsXG4gICAgYm9keTogbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFSTkZyb21JZGVudGl0eSAoaWRlbnRpdHlBcm46IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKGlkZW50aXR5QXJuID09PSB1bmRlZmluZWQgfHwgaWRlbnRpdHlBcm4gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gUmVnZXggZm9yIGNvbnZlcnRpbmcgYXJuIHRvIGJhc2Ugcm9sZVxuICBjb25zdCBjYXB0R3JvdXBzID0gW1xuICAgICdhcm46YXdzOnN0czonLFxuICAgICcoPzxyZWdpb25OYW1lPlteOl0qKScsIC8vIGdyb3VwIDFcbiAgICAnOicsXG4gICAgJyg/PGFjY291bnRJZD5cXFxcZHsxMn0pJywgLy8gZ3JvdXAgMlxuICAgICc6YXNzdW1lZC1yb2xlXFxcXC8nLFxuICAgICcoPzxyb2xlTmFtZT5bQS16MC05XFxcXC1dKz8pJywgLy8gZ3JvdXAgM1xuICAgICdcXFxcLycsXG4gICAgJyg/PHVzZXI+W146XSopJywgLy8gZ3JvdXAgNFxuICAgICckJ1xuICBdXG5cbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGNhcHRHcm91cHMuam9pbignJykpXG4gIGNvbnN0IHsgcmVnaW9uTmFtZSwgYWNjb3VudElkLCByb2xlTmFtZSB9ID0gcmVnZXguZXhlYyhpZGVudGl0eUFybik/Lmdyb3VwcyA/PyB7fVxuXG4gIGlmIChyZWdpb25OYW1lID09PSB1bmRlZmluZWQgfHwgYWNjb3VudElkID09PSB1bmRlZmluZWQgfHwgcm9sZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBCdWlsZCBiYXNlIHJvbGUgYXJuXG4gIHJldHVybiBgYXJuOmF3czppYW06JHtyZWdpb25OYW1lfToke2FjY291bnRJZH06cm9sZS8ke3JvbGVOYW1lfWBcbn1cblxuZnVuY3Rpb24gZ2V0VGFnVmFsdWVGcm9tVGFncyAodGFnS2V5OiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICBpZiAodGFnLlRhZ0tleSA9PT0gdGFnS2V5KSB7XG4gICAgICByZXR1cm4gdGFnLlRhZ1ZhbHVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiJdfQ==