@fjall/components-infrastructure 0.88.3 → 0.89.2

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.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/app.d.ts +33 -10
  3. package/dist/lib/app.js +79 -36
  4. package/dist/lib/aspects/index.d.ts +1 -0
  5. package/dist/lib/aspects/index.js +6 -0
  6. package/dist/lib/config/aws/accountAuditRole.d.ts +20 -0
  7. package/dist/lib/config/aws/accountAuditRole.js +38 -0
  8. package/dist/lib/config/aws/accountMonitoringRole.d.ts +22 -0
  9. package/dist/lib/config/aws/accountMonitoringRole.js +133 -0
  10. package/dist/lib/config/aws/cloudTrail.d.ts +0 -3
  11. package/dist/lib/config/aws/cloudTrail.js +2 -2
  12. package/dist/lib/config/aws/disasterRecovery.js +53 -20
  13. package/dist/lib/config/aws/ecrDefaultImage.js +4 -3
  14. package/dist/lib/config/aws/index.d.ts +4 -0
  15. package/dist/lib/config/aws/index.js +5 -1
  16. package/dist/lib/config/aws/oidcConnector.d.ts +8 -0
  17. package/dist/lib/config/aws/oidcConnector.js +46 -0
  18. package/dist/lib/config/aws/platform.d.ts +2 -0
  19. package/dist/lib/config/aws/platform.js +6 -0
  20. package/dist/lib/config/index.d.ts +2 -0
  21. package/dist/lib/config/index.js +21 -0
  22. package/dist/lib/patterns/aws/account.js +22 -10
  23. package/dist/lib/patterns/aws/cdn.d.ts +19 -40
  24. package/dist/lib/patterns/aws/cdn.js +21 -17
  25. package/dist/lib/patterns/aws/compute.d.ts +9 -720
  26. package/dist/lib/patterns/aws/compute.js +27 -432
  27. package/dist/lib/patterns/aws/computeEc2.d.ts +67 -0
  28. package/dist/lib/patterns/aws/computeEc2.js +46 -0
  29. package/dist/lib/patterns/aws/computeEcs.d.ts +446 -0
  30. package/dist/lib/patterns/aws/computeEcs.js +246 -0
  31. package/dist/lib/patterns/aws/computeLambda.d.ts +220 -0
  32. package/dist/lib/patterns/aws/computeLambda.js +147 -0
  33. package/dist/lib/patterns/aws/database.d.ts +7 -87
  34. package/dist/lib/patterns/aws/database.js +15 -38
  35. package/dist/lib/patterns/aws/domainDelegation.d.ts +8 -0
  36. package/dist/lib/patterns/aws/domainDelegation.js +54 -0
  37. package/dist/lib/patterns/aws/domainFactory.d.ts +8 -0
  38. package/dist/lib/patterns/aws/domainFactory.js +23 -0
  39. package/dist/lib/patterns/aws/index.d.ts +4 -1
  40. package/dist/lib/patterns/aws/index.js +6 -2
  41. package/dist/lib/patterns/aws/interfaces/cdn.d.ts +26 -0
  42. package/dist/lib/patterns/aws/interfaces/cdn.js +14 -0
  43. package/dist/lib/patterns/aws/interfaces/connector.d.ts +4 -181
  44. package/dist/lib/patterns/aws/interfaces/connector.js +16 -113
  45. package/dist/lib/patterns/aws/interfaces/domain.d.ts +2 -0
  46. package/dist/lib/patterns/aws/interfaces/domain.js +6 -0
  47. package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -0
  48. package/dist/lib/patterns/aws/interfaces/index.js +5 -2
  49. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +9 -6
  50. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  51. package/dist/lib/patterns/aws/network.js +6 -9
  52. package/dist/lib/patterns/aws/organisation.d.ts +4 -2
  53. package/dist/lib/patterns/aws/organisation.js +21 -8
  54. package/dist/lib/patterns/aws/payload.js +21 -12
  55. package/dist/lib/patterns/aws/storage.d.ts +3 -2
  56. package/dist/lib/patterns/aws/storage.js +1 -1
  57. package/dist/lib/resources/aws/audit/auditRole.js +4 -4
  58. package/dist/lib/resources/aws/audit/index.d.ts +1 -0
  59. package/dist/lib/resources/aws/audit/index.js +6 -0
  60. package/dist/lib/resources/aws/backup/backupPlan.js +3 -2
  61. package/dist/lib/resources/aws/backup/backupVault.js +5 -3
  62. package/dist/lib/resources/aws/base/awsStack.d.ts +4 -2
  63. package/dist/lib/resources/aws/base/awsStack.js +8 -2
  64. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +14 -0
  65. package/dist/lib/resources/aws/cdn/cloudFront.js +52 -18
  66. package/dist/lib/resources/aws/compute/ec2.js +18 -22
  67. package/dist/lib/resources/aws/compute/ecs.d.ts +23 -10
  68. package/dist/lib/resources/aws/compute/ecs.js +121 -64
  69. package/dist/lib/resources/aws/compute/index.d.ts +1 -0
  70. package/dist/lib/resources/aws/compute/index.js +2 -1
  71. package/dist/lib/resources/aws/compute/lambda.d.ts +0 -2
  72. package/dist/lib/resources/aws/compute/lambda.js +12 -27
  73. package/dist/lib/resources/aws/database/dynamodb.js +3 -13
  74. package/dist/lib/resources/aws/database/index.d.ts +8 -2
  75. package/dist/lib/resources/aws/database/index.js +19 -3
  76. package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -3
  77. package/dist/lib/resources/aws/database/rdsAurora.js +32 -68
  78. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +6 -6
  79. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +25 -29
  80. package/dist/lib/resources/aws/database/rdsDefaults.d.ts +11 -0
  81. package/dist/lib/resources/aws/database/rdsDefaults.js +15 -0
  82. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +39 -0
  83. package/dist/lib/resources/aws/database/rdsHelpers.js +75 -0
  84. package/dist/lib/resources/aws/database/rdsInstance.d.ts +7 -8
  85. package/dist/lib/resources/aws/database/rdsInstance.js +40 -84
  86. package/dist/lib/resources/aws/database/rdsProxyOutput.d.ts +7 -0
  87. package/dist/lib/resources/aws/database/rdsProxyOutput.js +18 -0
  88. package/dist/lib/resources/aws/iam/index.d.ts +0 -1
  89. package/dist/lib/resources/aws/iam/index.js +1 -2
  90. package/dist/lib/resources/aws/index.d.ts +0 -1
  91. package/dist/lib/resources/aws/index.js +1 -2
  92. package/dist/lib/resources/aws/logging/cloudTrail.js +13 -3
  93. package/dist/lib/resources/aws/logging/index.d.ts +2 -0
  94. package/dist/lib/resources/aws/logging/index.js +19 -0
  95. package/dist/lib/resources/aws/messaging/index.d.ts +3 -2
  96. package/dist/lib/resources/aws/messaging/index.js +4 -3
  97. package/dist/lib/resources/aws/messaging/sqs.js +14 -11
  98. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -2
  99. package/dist/lib/resources/aws/messaging/utils.js +3 -4
  100. package/dist/lib/resources/aws/monitoring/index.d.ts +0 -1
  101. package/dist/lib/resources/aws/monitoring/index.js +4 -17
  102. package/dist/lib/resources/aws/networking/domain.d.ts +13 -0
  103. package/dist/lib/resources/aws/networking/domain.js +102 -0
  104. package/dist/lib/resources/aws/networking/domainCertificate.d.ts +13 -0
  105. package/dist/lib/resources/aws/networking/domainCertificate.js +28 -0
  106. package/dist/lib/resources/aws/networking/hostedZone.d.ts +28 -0
  107. package/dist/lib/resources/aws/networking/hostedZone.js +150 -0
  108. package/dist/lib/resources/aws/networking/index.d.ts +4 -0
  109. package/dist/lib/resources/aws/networking/index.js +5 -1
  110. package/dist/lib/resources/aws/networking/ipamPool.js +57 -31
  111. package/dist/lib/resources/aws/networking/securityGroup.d.ts +5 -0
  112. package/dist/lib/resources/aws/networking/securityGroup.js +14 -0
  113. package/dist/lib/resources/aws/networking/vpc.js +9 -4
  114. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +17 -0
  115. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +66 -0
  116. package/dist/lib/resources/aws/organisation/index.d.ts +1 -0
  117. package/dist/lib/resources/aws/organisation/index.js +4 -2
  118. package/dist/lib/resources/aws/secrets/index.d.ts +0 -1
  119. package/dist/lib/resources/aws/secrets/index.js +1 -2
  120. package/dist/lib/resources/aws/storage/ecr.d.ts +0 -1
  121. package/dist/lib/resources/aws/storage/ecr.js +5 -5
  122. package/dist/lib/resources/aws/storage/s3.d.ts +3 -3
  123. package/dist/lib/resources/aws/storage/s3.js +1 -1
  124. package/dist/lib/resources/aws/utilities/index.d.ts +5 -0
  125. package/dist/lib/resources/aws/utilities/index.js +22 -0
  126. package/dist/lib/utils/backupTierMapping.d.ts +11 -0
  127. package/dist/lib/utils/backupTierMapping.js +17 -0
  128. package/dist/lib/utils/capitaliseString.d.ts +1 -12
  129. package/dist/lib/utils/capitaliseString.js +8 -28
  130. package/dist/lib/utils/connections.d.ts +46 -0
  131. package/dist/lib/utils/connections.js +159 -0
  132. package/dist/lib/utils/connector.d.ts +183 -0
  133. package/dist/lib/utils/connector.js +117 -0
  134. package/dist/lib/utils/databaseTypes.d.ts +85 -0
  135. package/dist/lib/utils/databaseTypes.js +34 -0
  136. package/dist/lib/utils/dnsRecords.d.ts +4 -0
  137. package/dist/lib/utils/dnsRecords.js +108 -0
  138. package/dist/lib/utils/domainTypes.d.ts +37 -0
  139. package/dist/lib/utils/domainTypes.js +10 -0
  140. package/dist/lib/utils/env.d.ts +42 -0
  141. package/dist/lib/utils/env.js +122 -0
  142. package/dist/lib/utils/getConfig.d.ts +0 -5
  143. package/dist/lib/utils/getConfig.js +42 -19
  144. package/dist/lib/utils/index.d.ts +7 -0
  145. package/dist/lib/utils/index.js +8 -1
  146. package/dist/lib/utils/removalPolicy.d.ts +2 -0
  147. package/dist/lib/utils/removalPolicy.js +16 -0
  148. package/dist/lib/utils/standardTagsAspect.d.ts +4 -0
  149. package/dist/lib/utils/standardTagsAspect.js +8 -8
  150. package/dist/lib/utils/vpcUtils.d.ts +14 -0
  151. package/dist/lib/utils/vpcUtils.js +28 -0
  152. package/package.json +7 -6
@@ -1,2 +1,3 @@
1
+ export * from "./ec2";
1
2
  export * from "./ecs";
2
3
  export * from "./lambda";
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ec2"), exports);
17
18
  __exportStar(require("./ecs"), exports);
18
19
  __exportStar(require("./lambda"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9jb21wdXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0I7QUFDdEIsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZWNzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYW1iZGFcIjtcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9jb21wdXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0I7QUFDdEIsd0NBQXNCO0FBQ3RCLDJDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VjMlwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZWNzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYW1iZGFcIjtcbiJdfQ==
@@ -46,7 +46,6 @@ export declare class SingletonFunction extends singletonFunction {
46
46
  * The Lambda's execution role (auto-generated by CDK)
47
47
  */
48
48
  get executionRole(): IRole | undefined;
49
- private addPoliciesToRole;
50
49
  }
51
50
  export declare class LambdaFunction extends Function {
52
51
  private functionUrlValue?;
@@ -103,7 +102,6 @@ export declare class LambdaFunction extends Function {
103
102
  eventPattern?: EventPattern;
104
103
  description?: string;
105
104
  }): Rule;
106
- private addPoliciesToRole;
107
105
  /**
108
106
  * Add secrets support using AWS Parameters and Secrets Lambda Extension.
109
107
  *
@@ -8,14 +8,18 @@ const path = require("path");
8
8
  const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources");
9
9
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
10
10
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
11
- const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
12
11
  const aws_events_1 = require("aws-cdk-lib/aws-events");
13
12
  const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
14
13
  const aws_logs_1 = require("aws-cdk-lib/aws-logs");
15
14
  const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
16
15
  const uuid_1 = require("uuid");
17
- const vpc_1 = require("../networking/vpc");
18
16
  const capitaliseString_1 = require("../../../utils/capitaliseString");
17
+ const vpcUtils_1 = require("../../../utils/vpcUtils");
18
+ function addPoliciesToRole(target, statements) {
19
+ for (const statement of statements) {
20
+ target.addToRolePolicy(statement);
21
+ }
22
+ }
19
23
  /**
20
24
  * AWS Parameters and Secrets Lambda Extension configuration.
21
25
  * @see https://docs.aws.amazon.com/systems-manager/latest/userguide/ps-integration-lambda-extensions.html
@@ -38,7 +42,7 @@ class SingletonFunction extends aws_lambda_1.SingletonFunction {
38
42
  ? aws_cdk_lib_1.Size.mebibytes(props.ephemeralStorageSize)
39
43
  : undefined
40
44
  });
41
- this.addPoliciesToRole(props.inlinePolicy);
45
+ addPoliciesToRole(this, props.inlinePolicy);
42
46
  }
43
47
  /**
44
48
  * The Lambda's execution role (auto-generated by CDK)
@@ -46,27 +50,13 @@ class SingletonFunction extends aws_lambda_1.SingletonFunction {
46
50
  get executionRole() {
47
51
  return this.role;
48
52
  }
49
- addPoliciesToRole(statements) {
50
- for (const statement of statements) {
51
- this.addToRolePolicy(statement);
52
- }
53
- }
54
53
  }
55
54
  exports.SingletonFunction = SingletonFunction;
56
55
  class LambdaFunction extends aws_lambda_1.Function {
57
56
  constructor(scope, id, props) {
58
- // Explicitly set subnet selection to match VPC endpoint placement
59
- // - With NAT: PRIVATE_WITH_EGRESS (can access internet via NAT)
60
- // - Without NAT: PRIVATE_ISOLATED (can access VPC endpoints only, no internet)
61
- let vpcSubnets;
62
- if (props.vpc) {
63
- const hasNatGateways = props.vpc instanceof vpc_1.Vpc ? props.vpc.hasNatGateways : true;
64
- vpcSubnets = {
65
- subnetType: hasNatGateways
66
- ? aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
67
- : aws_ec2_1.SubnetType.PRIVATE_ISOLATED
68
- };
69
- }
57
+ const vpcSubnets = props.vpc
58
+ ? { subnetType: (0, vpcUtils_1.resolvePrivateSubnetType)(props.vpc) }
59
+ : undefined;
70
60
  super(scope, id, {
71
61
  ...props,
72
62
  vpcSubnets,
@@ -81,7 +71,7 @@ class LambdaFunction extends aws_lambda_1.Function {
81
71
  environment: props.environment,
82
72
  logRetention: aws_logs_1.RetentionDays.ONE_WEEK
83
73
  });
84
- this.addPoliciesToRole(props.inlinePolicy);
74
+ addPoliciesToRole(this, props.inlinePolicy);
85
75
  this.addSecretsSupport(props.secrets, props.ssmSecretsPath, props.secretsImport, props.appName, props.functionName, props.architecture);
86
76
  // Sanitise id for CloudFormation output keys (must be alphanumeric)
87
77
  const outputName = (0, capitaliseString_1.toPascalCase)(id);
@@ -209,11 +199,6 @@ class LambdaFunction extends aws_lambda_1.Function {
209
199
  rule.addTarget(new aws_events_targets_1.LambdaFunction(this));
210
200
  return rule;
211
201
  }
212
- addPoliciesToRole(statements) {
213
- for (const statement of statements) {
214
- this.addToRolePolicy(statement);
215
- }
216
- }
217
202
  /**
218
203
  * Add secrets support using AWS Parameters and Secrets Lambda Extension.
219
204
  *
@@ -344,4 +329,4 @@ class LambdaFunction extends aws_lambda_1.Function {
344
329
  }
345
330
  }
346
331
  exports.LambdaFunction = LambdaFunction;
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQVdnQztBQUNoQyx5REFBbUQ7QUFDbkQsNkJBQTZCO0FBQzdCLG1GQUs4QztBQUM5QywrQ0FBNEQ7QUFDNUQsaURBQTBFO0FBQzFFLGlEQUE0RDtBQUM1RCx1REFBMkU7QUFDM0UsdUVBQWdGO0FBQ2hGLG1EQUFxRDtBQUNyRCx1RUFBd0Q7QUFJeEQsK0JBQWtDO0FBR2xDLDJDQUF3QztBQUN4QyxzRUFBK0Q7QUFFL0Q7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRztJQUN4QiwwRkFBMEY7SUFDMUYsT0FBTyxFQUFFLFNBQVM7SUFDbEIsbUZBQW1GO0lBQ25GLGlCQUFpQixFQUFFLElBQUk7Q0FDZixDQUFDO0FBeUNYLE1BQWEsaUJBQWtCLFNBQVEsOEJBQWlCO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFBLFNBQUksR0FBRTtZQUMxQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLElBQUksR0FBRyxFQUFFLG1CQUFtQjtZQUNoRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtnQkFDOUMsQ0FBQyxDQUFDLGtCQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJB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LElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQzFCLFlBQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFlBQXFCO1FBRXJCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRTtnQkFDakUsOENBQThDO2dCQUM5QyxnRkFBZ0YsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxXQUFXLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQXhiRCx3Q0F3YkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjaywgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2luZ2xldG9uRnVuY3Rpb24gYXMgc2luZ2xldG9uRnVuY3Rpb24sXG4gIEZ1bmN0aW9uLFxuICBDb2RlLFxuICB0eXBlIFJ1bnRpbWUsXG4gIEFyY2hpdGVjdHVyZSxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zLFxuICB0eXBlIEludm9rZU1vZGUsXG4gIFN0YXJ0aW5nUG9zaXRpb24sXG4gIExheWVyVmVyc2lvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgRmFjdE5hbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvcmVnaW9uLWluZm9cIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7XG4gIFNxc0V2ZW50U291cmNlLFxuICBEeW5hbW9FdmVudFNvdXJjZSxcbiAgUzNFdmVudFNvdXJjZSxcbiAgdHlwZSBTM0V2ZW50U291cmNlUHJvcHNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWNrZXQsIEV2ZW50VHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgdHlwZSBJUm9sZSwgRWZmZWN0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IHR5cGUgSVZwYywgU3VibmV0VHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSwgdHlwZSBFdmVudFBhdHRlcm4gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gYXMgTGFtYmRhVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBJUXVldWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHR5cGUgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2NhcGl0YWxpc2VTdHJpbmdcIjtcblxuLyoqXG4gKiBBV1MgUGFyYW1ldGVycyBhbmQgU2VjcmV0cyBMYW1iZGEgRXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zeXN0ZW1zLW1hbmFnZXIvbGF0ZXN0L3VzZXJndWlkZS9wcy1pbnRlZ3JhdGlvbi1sYW1iZGEtZXh0ZW5zaW9ucy5odG1sXG4gKi9cbmNvbnN0IFNFQ1JFVFNfRVhURU5TSU9OID0ge1xuICAvKiogRXh0ZW5zaW9uIHZlcnNpb24gZm9yIFJlZ2lvbkluZm8gbG9va3VwIChtYXRjaGVzIFBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMykgKi9cbiAgVkVSU0lPTjogXCIxLjAuMTAzXCIsXG4gIC8qKiBDYWNoZSBUVEwgaW4gc2Vjb25kcyAtIDYwcyBzdXBwb3J0cyBzZWNyZXQgcm90YXRpb24gd2hpbGUgcmVkdWNpbmcgQVBJIGNhbGxzICovXG4gIENBQ0hFX1RUTF9TRUNPTkRTOiBcIjYwXCJcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Qcm9wcyB7XG4gIGNvZGU6IENvZGU7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgbGFtYmRhRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJvbGVEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVudGltZTogUnVudGltZTtcbiAgLyoqIExhbWJkYSBDUFUgYXJjaGl0ZWN0dXJlLiBEZWZhdWx0OiB4ODZfNjQgKi9cbiAgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICB2cGM/OiBJVnBjO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAvKiogRXBoZW1lcmFsIHN0b3JhZ2Ugc2l6ZSBpbiBNaUIgKi9cbiAgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXI7XG4gIGlubGluZVBvbGljeTogUG9saWN5U3RhdGVtZW50W107XG5cbiAgZW5hYmxlRnVuY3Rpb25Vcmw/OiBib29sZWFuO1xuICBmdW5jdGlvblVybEF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgZnVuY3Rpb25VcmxDb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcbiAgLyoqIEludm9rZSBtb2RlIGZvciBGdW5jdGlvbiBVUkwuIFVzZSBSRVNQT05TRV9TVFJFQU0gZm9yIExhbWJkYSBzdHJlYW1pbmcuICovXG4gIGZ1bmN0aW9uVXJsSW52b2tlTW9kZT86IEludm9rZU1vZGU7XG5cbiAgZW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcblxuICB0YWdzPzogS2V5VmFsdWU7XG5cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIHNlY3JldHM/OiBzdHJpbmdbXTtcbiAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmc7XG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xldG9uRnVuY3Rpb25Qcm9wcyBleHRlbmRzIExhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICB1dWlkPzogc3RyaW5nO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZXRvbkZ1bmN0aW9uIGV4dGVuZHMgc2luZ2xldG9uRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xldG9uRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB1dWlkOiBwcm9wcy51dWlkID8/IHV1aWQoKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gc2luZ2xldG9uIGxhbWJkYWAsXG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lLFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemU6IHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplXG4gICAgICAgID8gU2l6ZS5tZWJpYnl0ZXMocHJvcHMuZXBoZW1lcmFsU3RvcmFnZVNpemUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFBvbGljaWVzVG9Sb2xlKHByb3BzLmlubGluZVBvbGljeSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExhbWJkYSdzIGV4ZWN1dGlvbiByb2xlIChhdXRvLWdlbmVyYXRlZCBieSBDREspXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4ZWN1dGlvblJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvbGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFBvbGljaWVzVG9Sb2xlKHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdKSB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24ge1xuICBwcml2YXRlIGZ1bmN0aW9uVXJsVmFsdWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IExhbWJkYUZ1bmN0aW9uUHJvcHMpIHtcbiAgICAvLyBFeHBsaWNpdGx5IHNldCBzdWJuZXQgc2VsZWN0aW9uIHRvIG1hdGNoIFZQQyBlbmRwb2ludCBwbGFjZW1lbnRcbiAgICAvLyAtIFdpdGggTkFUOiBQUklWQVRFX1dJVEhfRUdSRVNTIChjYW4gYWNjZXNzIGludGVybmV0IHZpYSBOQVQpXG4gICAgLy8gLSBXaXRob3V0IE5BVDogUFJJVkFURV9JU09MQVRFRCAoY2FuIGFjY2VzcyBWUEMgZW5kcG9pbnRzIG9ubHksIG5vIGludGVybmV0KVxuICAgIGxldCB2cGNTdWJuZXRzO1xuICAgIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIGNvbnN0IGhhc05hdEdhdGV3YXlzID1cbiAgICAgICAgcHJvcHMudnBjIGluc3RhbmNlb2YgVnBjID8gcHJvcHMudnBjLmhhc05hdEdhdGV3YXlzIDogdHJ1ZTtcbiAgICAgIHZwY1N1Ym5ldHMgPSB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IGhhc05hdEdhdGV3YXlzXG4gICAgICAgICAgPyBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgICAgICA6IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdnBjU3VibmV0cyxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXRcbiAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKHByb3BzLnRpbWVvdXQpXG4gICAgICAgIDogRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSB8fCAxMjgsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogcHJvcHMuZXBoZW1lcmFsU3RvcmFnZVNpemVcbiAgICAgICAgPyBTaXplLm1lYmlieXRlcyhwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IExhbWJkYWAsXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1dFRUtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkUG9saWNpZXNUb1JvbGUocHJvcHMuaW5saW5lUG9saWN5KTtcblxuICAgIHRoaXMuYWRkU2VjcmV0c1N1cHBvcnQoXG4gICAgICBwcm9wcy5zZWNyZXRzLFxuICAgICAgcHJvcHMuc3NtU2VjcmV0c1BhdGgsXG4gICAgICBwcm9wcy5zZWNyZXRzSW1wb3J0LFxuICAgICAgcHJvcHMuYXBwTmFtZSxcbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIHByb3BzLmFyY2hpdGVjdHVyZVxuICAgICk7XG5cbiAgICAvLyBTYW5pdGlzZSBpZCBmb3IgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleXMgKG11c3QgYmUgYWxwaGFudW1lcmljKVxuICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b1Bhc2NhbENhc2UoaWQpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZUZ1bmN0aW9uVXJsKSB7XG4gICAgICBjb25zdCBmdW5jdGlvblVybCA9IHRoaXMuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgICBhdXRoVHlwZTogcHJvcHMuZnVuY3Rpb25VcmxBdXRoVHlwZSB8fCBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGNvcnM6IHByb3BzLmZ1bmN0aW9uVXJsQ29ycyxcbiAgICAgICAgaW52b2tlTW9kZTogcHJvcHMuZnVuY3Rpb25VcmxJbnZva2VNb2RlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mdW5jdGlvblVybFZhbHVlID0gZnVuY3Rpb25VcmwudXJsO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RnVuY3Rpb25VcmxgLCB7XG4gICAgICAgIGtleTogYCR7b3V0cHV0TmFtZX1GdW5jdGlvblVybGAsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvblVybC51cmwsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtpZH0gRnVuY3Rpb24gVVJMYFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUZ1bmN0aW9uQXJuYCwge1xuICAgICAga2V5OiBgJHtvdXRwdXROYW1lfUZ1bmN0aW9uQXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246IGAke2lkfSBGdW5jdGlvbiBBUk5gXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc2NoZWR1bGVFeHByZXNzaW9uKSB7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUodGhpcywgYCR7aWR9U2NoZWR1bGVSdWxlYCwge1xuICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuZXhwcmVzc2lvbihwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24pXG4gICAgICB9KTtcbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFUYXJnZXQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhJ3MgZXhlY3V0aW9uIHJvbGUgKGF1dG8tZ2VuZXJhdGVkIGJ5IENESylcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhlY3V0aW9uUm9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIExhbWJkYSBmdW5jdGlvbiBVUkwgaWYgZW5hYmxlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvblVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uVXJsVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIFNRUyBxdWV1ZSBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gbWVzc2FnZXMgYXJyaXZlIGluIHRoZSBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBhZGRTcXNFdmVudFNvdXJjZShcbiAgICBxdWV1ZTogSVF1ZXVlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBiYXRjaFNpemU/OiBudW1iZXI7XG4gICAgICBtYXhCYXRjaGluZ1dpbmRvdz86IG51bWJlcjtcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFNxc0V2ZW50U291cmNlKHF1ZXVlLCB7XG4gICAgICBiYXRjaFNpemU6IG9wdGlvbnM/LmJhdGNoU2l6ZSA/PyAxMCxcbiAgICAgIG1heEJhdGNoaW5nV2luZG93OiBvcHRpb25zPy5tYXhCYXRjaGluZ1dpbmRvd1xuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMob3B0aW9ucy5tYXhCYXRjaGluZ1dpbmRvdylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlczogb3B0aW9ucz8ucmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXMgPz8gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIER5bmFtb0RCIHRhYmxlIHN0cmVhbSBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gaXRlbXMgYXJlIG1vZGlmaWVkIGluIHRoZSB0YWJsZS5cbiAgICogUmVxdWlyZXMgRHluYW1vREIgU3RyZWFtcyB0byBiZSBlbmFibGVkIG9uIHRoZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyBhZGREeW5hbW9EYkV2ZW50U291cmNlKFxuICAgIHRhYmxlOiBJVGFibGUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAgIHN0YXJ0aW5nUG9zaXRpb24/OiBcIlRSSU1fSE9SSVpPTlwiIHwgXCJMQVRFU1RcIjtcbiAgICAgIG1heEJhdGNoaW5nV2luZG93PzogbnVtYmVyO1xuICAgICAgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcbiAgICAgIHBhcmFsbGVsaXphdGlvbkZhY3Rvcj86IG51bWJlcjtcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0aW5nUG9zaXRpb24gPVxuICAgICAgb3B0aW9ucz8uc3RhcnRpbmdQb3NpdGlvbiA9PT0gXCJUUklNX0hPUklaT05cIlxuICAgICAgICA/IFN0YXJ0aW5nUG9zaXRpb24uVFJJTV9IT1JJWk9OXG4gICAgICAgIDogU3RhcnRpbmdQb3NpdGlvbi5MQVRFU1Q7XG5cbiAgICBjb25zdCBldmVudFNvdXJjZSA9IG5ldyBEeW5hbW9FdmVudFNvdXJjZSh0YWJsZSwge1xuICAgICAgc3RhcnRpbmdQb3NpdGlvbixcbiAgICAgIGJhdGNoU2l6ZTogb3B0aW9ucz8uYmF0Y2hTaXplID8/IDEwMCxcbiAgICAgIG1heEJhdGNoaW5nV2luZG93OiBvcHRpb25zPy5tYXhCYXRjaGluZ1dpbmRvd1xuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMob3B0aW9ucy5tYXhCYXRjaGluZ1dpbmRvdylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZXRyeUF0dGVtcHRzOiBvcHRpb25zPy5yZXRyeUF0dGVtcHRzLFxuICAgICAgcGFyYWxsZWxpemF0aW9uRmFjdG9yOiBvcHRpb25zPy5wYXJhbGxlbGl6YXRpb25GYWN0b3IsXG4gICAgICByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlczogb3B0aW9ucz8ucmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXMgPz8gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBTMyBidWNrZXQgYXMgYW4gZXZlbnQgc291cmNlIGZvciB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdGhlIExhbWJkYSB3aGVuIG9iamVjdHMgYXJlIGNyZWF0ZWQsIG1vZGlmaWVkLCBvciBkZWxldGVkLlxuICAgKiBVc2VmdWwgZm9yIElTUiBjYWNoZSBpbnZhbGlkYXRpb24gYW5kIGZpbGUgcHJvY2Vzc2luZyB3b3JrZmxvd3MuXG4gICAqL1xuICBwdWJsaWMgYWRkUzNFdmVudFNvdXJjZShcbiAgICBidWNrZXQ6IEJ1Y2tldCxcbiAgICBvcHRpb25zPzoge1xuICAgICAgZXZlbnRzPzogQXJyYXk8XG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfUkVNT1ZFRFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9QVVRcIlxuICAgICAgICB8IFwiT0JKRUNUX0NSRUFURURfUE9TVFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9DT1BZXCJcbiAgICAgICAgfCBcIk9CSkVDVF9SRU1PVkVEX0RFTEVURVwiXG4gICAgICA+O1xuICAgICAgZmlsdGVycz86IEFycmF5PHsgcHJlZml4Pzogc3RyaW5nOyBzdWZmaXg/OiBzdHJpbmcgfT47XG4gICAgfVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFR5cGVzID0gKG9wdGlvbnM/LmV2ZW50cyA/PyBbXCJPQkpFQ1RfQ1JFQVRFRFwiXSkubWFwKChldmVudCkgPT4ge1xuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX1JFTU9WRURcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9SRU1PVkVEO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURfUFVUXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9QVVQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9QT1NUXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9QT1NUO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURfQ09QWVwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURURfQ09QWTtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9SRU1PVkVEX0RFTEVURVwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRURfREVMRVRFO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gZXZlbnQ7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIFMzIGV2ZW50IHR5cGU6ICR7X2V4aGF1c3RpdmV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHMzRXZlbnRTb3VyY2VQcm9wczogUzNFdmVudFNvdXJjZVByb3BzID0ge1xuICAgICAgZXZlbnRzOiBldmVudFR5cGVzLFxuICAgICAgZmlsdGVyczogb3B0aW9ucz8uZmlsdGVyc1xuICAgIH07XG5cbiAgICBjb25zdCBldmVudFNvdXJjZSA9IG5ldyBTM0V2ZW50U291cmNlKGJ1Y2tldCwgczNFdmVudFNvdXJjZVByb3BzKTtcbiAgICB0aGlzLmFkZEV2ZW50U291cmNlKGV2ZW50U291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gRXZlbnRCcmlkZ2UgcnVsZSBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gZXZlbnRzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIGFyZSBwdWJsaXNoZWQuXG4gICAqIFVzZWZ1bCBmb3Igc2NoZWR1bGVkIGpvYnMsIGNyb3NzLXNlcnZpY2UgZXZlbnQgaGFuZGxpbmcsIGFuZCBjdXN0b20gZXZlbnQgcGF0dGVybnMuXG4gICAqL1xuICBwdWJsaWMgYWRkRXZlbnRCcmlkZ2VFdmVudFNvdXJjZShcbiAgICBydWxlSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBzY2hlZHVsZT86IHN0cmluZztcbiAgICAgIGV2ZW50UGF0dGVybj86IEV2ZW50UGF0dGVybjtcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIH1cbiAgKTogUnVsZSB7XG4gICAgaWYgKCFvcHRpb25zLnNjaGVkdWxlICYmICFvcHRpb25zLmV2ZW50UGF0dGVybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV2ZW50QnJpZGdlIHJ1bGUgcmVxdWlyZXMgZWl0aGVyIHNjaGVkdWxlIG9yIGV2ZW50UGF0dGVyblwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZSh0aGlzLCBydWxlSWQsIHtcbiAgICAgIHNjaGVkdWxlOiBvcHRpb25zLnNjaGVkdWxlXG4gICAgICAgID8gU2NoZWR1bGUuZXhwcmVzc2lvbihvcHRpb25zLnNjaGVkdWxlKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50UGF0dGVybjogb3B0aW9ucy5ldmVudFBhdHRlcm4sXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvblxuICAgIH0pO1xuXG4gICAgcnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYVRhcmdldCh0aGlzKSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFBvbGljaWVzVG9Sb2xlKHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdKSB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNlY3JldHMgc3VwcG9ydCB1c2luZyBBV1MgUGFyYW1ldGVycyBhbmQgU2VjcmV0cyBMYW1iZGEgRXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGUgZXh0ZW5zaW9uIGZldGNoZXMgc2VjcmV0cyBhdCBydW50aW1lIGZyb206XG4gICAqIC0gU1NNIFBhcmFtZXRlciBTdG9yZTogdmlhIGh0dHA6Ly9sb2NhbGhvc3Q6Mjc3My9zeXN0ZW1zbWFuYWdlci9wYXJhbWV0ZXJzL2dldFxuICAgKiAtIFNlY3JldHMgTWFuYWdlcjogdmlhIGh0dHA6Ly9sb2NhbGhvc3Q6Mjc3My9zZWNyZXRzbWFuYWdlci9nZXRcbiAgICpcbiAgICogVGhpcyByZXBsYWNlcyB0aGUgaW5zZWN1cmUgdW5zYWZlVW53cmFwKCkgcGF0dGVybiB3aGljaCByZXNvbHZlZCBzZWNyZXRzIGF0XG4gICAqIGRlcGxveSB0aW1lIGFuZCBleHBvc2VkIHRoZW0gaW4gTGFtYmRhIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFkZFNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM/OiBzdHJpbmdbXSxcbiAgICBzc21TZWNyZXRzUGF0aD86IHN0cmluZyxcbiAgICBzZWNyZXRzSW1wb3J0PzogUmVjb3JkPHN0cmluZywgU2VjcmV0SW1wb3J0PixcbiAgICBhcHBOYW1lPzogc3RyaW5nLFxuICAgIGZ1bmN0aW9uTmFtZT86IHN0cmluZyxcbiAgICBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmVcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaGFzU2VjcmV0c01hbmFnZXIgPVxuICAgICAgc2VjcmV0c0ltcG9ydCAmJiBPYmplY3Qua2V5cyhzZWNyZXRzSW1wb3J0KS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFoYXNTZWNyZXRzTWFuYWdlciAmJiAhKHNlY3JldHMgJiYgc2VjcmV0cy5sZW5ndGggPiAwKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5hZGRTZWNyZXRzRXh0ZW5zaW9uTGF5ZXIoYXJjaGl0ZWN0dXJlKTtcblxuICAgIGlmIChoYXNTZWNyZXRzTWFuYWdlcikge1xuICAgICAgdGhpcy5hZGRTZWNyZXRzTWFuYWdlclN1cHBvcnQoc2VjcmV0c0ltcG9ydCk7XG4gICAgfVxuXG4gICAgaWYgKHNlY3JldHMgJiYgc2VjcmV0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFkZFNzbVNlY3JldHNTdXBwb3J0KHNlY3JldHMsIHNzbVNlY3JldHNQYXRoLCBhcHBOYW1lLCBmdW5jdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkU2VjcmV0c1Jlc29sdmVyTGF5ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gbGF5ZXIuXG4gICAqIFVzZXMgQ0RLJ3MgcmVnaW9uYWxGYWN0KCkgdG8gcmVzb2x2ZSB0aGUgY29ycmVjdCBBUk4gYXQgZGVwbG95IHRpbWUsXG4gICAqIGhhbmRsaW5nIHRoZSBmYWN0IHRoYXQgQVdTIHB1Ymxpc2hlcyB0aGUgbGF5ZXIgZnJvbSBkaWZmZXJlbnQgYWNjb3VudHNcbiAgICogaW4gZGlmZmVyZW50IHJlZ2lvbnMuIFRoaXMgYXBwcm9hY2ggd29ya3Mgd2l0aCBDREsgdG9rZW5zLlxuICAgKiBDb25maWd1cmVzIGNhY2hlIFRUTCBmb3Igcm90YXRpb24gc3VwcG9ydC5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c0V4dGVuc2lvbkxheWVyKGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgYXJjaFN0cmluZyA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IEFyY2hpdGVjdHVyZS5BUk1fNjQgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gICAgY29uc3QgZmFjdE5hbWUgPSBGYWN0TmFtZS5wYXJhbXNBbmRTZWNyZXRzTGFtYmRhTGF5ZXIoXG4gICAgICBTRUNSRVRTX0VYVEVOU0lPTi5WRVJTSU9OLFxuICAgICAgYXJjaFN0cmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBsYXllckFybiA9IHN0YWNrLnJlZ2lvbmFsRmFjdChmYWN0TmFtZSk7XG5cbiAgICB0aGlzLmFkZExheWVycyhcbiAgICAgIExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5vZGUuaWR9U2VjcmV0c0V4dGVuc2lvbmAsXG4gICAgICAgIGxheWVyQXJuXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlNFQ1JFVFNfTUFOQUdFUl9UVExcIixcbiAgICAgIFNFQ1JFVFNfRVhURU5TSU9OLkNBQ0hFX1RUTF9TRUNPTkRTXG4gICAgKTtcbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJTU01fUEFSQU1FVEVSX1NUT1JFX1RUTFwiLFxuICAgICAgU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBTZWNyZXRzIE1hbmFnZXIgc3VwcG9ydCBmb3IgQ0RLLW1hbmFnZWQgc2VjcmV0cyAoZS5nLiwgZGF0YWJhc2UgY3JlZGVudGlhbHMpLlxuICAgKiBTdG9yZXMgQVJOICsgZmllbGQgYXMgZW52IHZhcnMgLSB0aGUgTGFtYmRhIEV4dGVuc2lvbiBmZXRjaGVzIGFjdHVhbCB2YWx1ZXMgYXQgcnVudGltZS5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c01hbmFnZXJTdXBwb3J0KFxuICAgIHNlY3JldHNJbXBvcnQ6IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD5cbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNJbXBvcnQpKSB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfUltcG9ydGVkU2VjcmV0JHtrZXl9YCxcbiAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfQVJOYCwgc2VjcmV0LnNlY3JldEFybik7XG4gICAgICBpZiAoc2VjcmV0SW1wb3J0LmZpZWxkKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfRklFTERgLCBzZWNyZXRJbXBvcnQuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpEZXNjcmliZUtleVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBzdXBwb3J0IGZvciB1c2VyLW1hbmFnZWQgc2VjcmV0cyAodmlhIGZqYWxsIHNlY3JldCBhZGQpLlxuICAgKiBTdG9yZXMgYmFzZSBwYXRoIGFuZCBzZWNyZXQgbmFtZXMgYXMgZW52IHZhcnMgZm9yIGNvbnN1bWVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGFkZFNzbVNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM6IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiU1NNX1NFQ1JFVFNfUEFUSFwiLCBiYXNlUGF0aCk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudChcIlNTTV9TRUNSRVRfTkFNRVNcIiwgc2VjcmV0cy5qb2luKFwiLFwiKSk7XG5cbiAgICBjb25zdCBzY29wZWRQYXRoID0gYCR7YmFzZVBhdGh9LypgO1xuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCIsIFwic3NtOkdldFBhcmFtZXRlcnNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn06KjpwYXJhbWV0ZXIke3Njb3BlZFBhdGh9YFxuICAgICAgICBdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgXCJrbXM6VmlhU2VydmljZVwiOiBgc3NtLiR7U3RhY2sub2YodGhpcykucmVnaW9ufS5hbWF6b25hd3MuY29tYFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgRmphbGwgc2VjcmV0cyByZXNvbHZlciBsYXllciBhbmQgc2V0IEFXU19MQU1CREFfRVhFQ19XUkFQUEVSLlxuICAgKlxuICAgKiBUaGUgcmVzb2x2ZXIgaXMgYSBiYXNoIHdyYXBwZXIgKyBOb2RlLmpzIHNjcmlwdCB0aGF0IHJ1bnMgYmVmb3JlIHRoZSBMYW1iZGFcbiAgICogcnVudGltZS4gSXQgY2FsbHMgdGhlIEV4dGVuc2lvbiBIVFRQIEFQSSAobG9jYWxob3N0OjI3NzMpIHRvIHJlc29sdmUgU1NNXG4gICAqIHBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLCBleHBvcnRpbmcgdGhlbSBhcyBwbGFpbiBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgc28gaGFuZGxlciBjb2RlIGNhbiBzaW1wbHkgcmVhZCBwcm9jZXNzLmVudi5cbiAgICpcbiAgICogVGhlIGxheWVyIGlzIGNyZWF0ZWQgb25jZSBwZXIgc3RhY2sgYW5kIHNoYXJlZCBhY3Jvc3MgYWxsIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGFkZFNlY3JldHNSZXNvbHZlckxheWVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgbGF5ZXJJZCA9IFwiRmphbGxTZWNyZXRzUmVzb2x2ZXJMYXllclwiO1xuICAgIGxldCByZXNvbHZlckxheWVyID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQobGF5ZXJJZCkgYXNcbiAgICAgIHwgTGF5ZXJWZXJzaW9uXG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghcmVzb2x2ZXJMYXllcikge1xuICAgICAgcmVzb2x2ZXJMYXllciA9IG5ldyBMYXllclZlcnNpb24oc3RhY2ssIGxheWVySWQsIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJsYXllcnNcIiwgXCJzZWNyZXRzLXJlc29sdmVyXCIpXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiRmphbGwgc2VjcmV0cyByZXNvbHZlciDigJQgcmVzb2x2ZXMgU1NNIGFuZCBTTSBzZWNyZXRzIGJlZm9yZSBoYW5kbGVyXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkTGF5ZXJzKHJlc29sdmVyTGF5ZXIpO1xuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXCJBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUlwiLCBcIi9vcHQvYmluL3Jlc29sdmUtc2VjcmV0c1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgU1NNIHNlY3JldHMgcGF0aCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUGF0dGVybjogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBpZiAoIWFwcE5hbWUgfHwgIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhbWJkYSBmdW5jdGlvbiBoYXMgc2VjcmV0cyBkZWZpbmVkIGJ1dCBubyBzc21TZWNyZXRzUGF0aCBpcyBzZXQgXCIgK1xuICAgICAgICAgIFwiYW5kIGFwcE5hbWUvZnVuY3Rpb25OYW1lIGFyZSBub3QgYXZhaWxhYmxlLiBcIiArXG4gICAgICAgICAgXCJFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIGV4cGxpY2l0bHksIG9yIGVuc3VyZSBBcHAuZ2V0TmFtZSgpIHJldHVybnMgYSB2YWx1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9L2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gO1xuICB9XG59XG4iXX0=
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQVdnQztBQUNoQyx5REFBbUQ7QUFDbkQsNkJBQTZCO0FBQzdCLG1GQUs4QztBQUM5QywrQ0FBNEQ7QUFDNUQsaURBQTBFO0FBRTFFLHVEQUEyRTtBQUMzRSx1RUFBZ0Y7QUFDaEYsbURBQXFEO0FBQ3JELHVFQUF3RDtBQUl4RCwrQkFBa0M7QUFHbEMsc0VBQStEO0FBQy9ELHNEQUFtRTtBQUVuRSxTQUFTLGlCQUFpQixDQUN4QixNQUFpRSxFQUNqRSxVQUE2QjtJQUU3QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLDBGQUEwRjtJQUMxRixPQUFPLEVBQUUsU0FBUztJQUNsQixtRkFBbUY7SUFDbkYsaUJBQWlCLEVBQUUsSUFBSTtDQUNmLENBQUM7QUF5Q1gsTUFBYSxpQkFBa0IsU0FBUSw4QkFBaUI7SUFDdEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUEsU0FBSSxHQUFFO1lBQzFCLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsbUJBQW1CO1lBQ2hFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixvQkFBb0IsRUFBRSxL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LE9BQU8sV0FBVyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUF4YUQsd0NBd2FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiwgU3RhY2ssIFNpemUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFNpbmdsZXRvbkZ1bmN0aW9uIGFzIHNpbmdsZXRvbkZ1bmN0aW9uLFxuICBGdW5jdGlvbixcbiAgQ29kZSxcbiAgdHlwZSBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9ucyxcbiAgdHlwZSBJbnZva2VNb2RlLFxuICBTdGFydGluZ1Bvc2l0aW9uLFxuICBMYXllclZlcnNpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSBcImF3cy1jZGstbGliL3JlZ2lvbi1pbmZvXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1xuICBTcXNFdmVudFNvdXJjZSxcbiAgRHluYW1vRXZlbnRTb3VyY2UsXG4gIFMzRXZlbnRTb3VyY2UsXG4gIHR5cGUgUzNFdmVudFNvdXJjZVByb3BzXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgQnVja2V0LCBFdmVudFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIHR5cGUgSVJvbGUsIEVmZmVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgUnVsZSwgU2NoZWR1bGUsIHR5cGUgRXZlbnRQYXR0ZXJuIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIGFzIExhbWJkYVRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHNcIjtcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgSVF1ZXVlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIjtcbmltcG9ydCB7IHR5cGUgSVRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi9zZWNyZXRzXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZ1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVByaXZhdGVTdWJuZXRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3ZwY1V0aWxzXCI7XG5cbmZ1bmN0aW9uIGFkZFBvbGljaWVzVG9Sb2xlKFxuICB0YXJnZXQ6IHsgYWRkVG9Sb2xlUG9saWN5OiAoc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpID0+IHZvaWQgfSxcbiAgc3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W11cbikge1xuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgdGFyZ2V0LmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogQVdTIFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTGFtYmRhIEV4dGVuc2lvbiBjb25maWd1cmF0aW9uLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3lzdGVtcy1tYW5hZ2VyL2xhdGVzdC91c2VyZ3VpZGUvcHMtaW50ZWdyYXRpb24tbGFtYmRhLWV4dGVuc2lvbnMuaHRtbFxuICovXG5jb25zdCBTRUNSRVRTX0VYVEVOU0lPTiA9IHtcbiAgLyoqIEV4dGVuc2lvbiB2ZXJzaW9uIGZvciBSZWdpb25JbmZvIGxvb2t1cCAobWF0Y2hlcyBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMpICovXG4gIFZFUlNJT046IFwiMS4wLjEwM1wiLFxuICAvKiogQ2FjaGUgVFRMIGluIHNlY29uZHMgLSA2MHMgc3VwcG9ydHMgc2VjcmV0IHJvdGF0aW9uIHdoaWxlIHJlZHVjaW5nIEFQSSBjYWxscyAqL1xuICBDQUNIRV9UVExfU0VDT05EUzogXCI2MFwiXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICBjb2RlOiBDb2RlO1xuICBoYW5kbGVyOiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bnRpbWU6IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgQ1BVIGFyY2hpdGVjdHVyZS4gRGVmYXVsdDogeDg2XzY0ICovXG4gIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcbiAgdnBjPzogSVZwYztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIEVwaGVtZXJhbCBzdG9yYWdlIHNpemUgaW4gTWlCICovXG4gIGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyO1xuICBpbmxpbmVQb2xpY3k6IFBvbGljeVN0YXRlbWVudFtdO1xuXG4gIGVuYWJsZUZ1bmN0aW9uVXJsPzogYm9vbGVhbjtcbiAgZnVuY3Rpb25VcmxBdXRoVHlwZT86IEZ1bmN0aW9uVXJsQXV0aFR5cGU7XG4gIGZ1bmN0aW9uVXJsQ29ycz86IEZ1bmN0aW9uVXJsQ29yc09wdGlvbnM7XG4gIC8qKiBJbnZva2UgbW9kZSBmb3IgRnVuY3Rpb24gVVJMLiBVc2UgUkVTUE9OU0VfU1RSRUFNIGZvciBMYW1iZGEgc3RyZWFtaW5nLiAqL1xuICBmdW5jdGlvblVybEludm9rZU1vZGU/OiBJbnZva2VNb2RlO1xuXG4gIGVudmlyb25tZW50PzogS2V5VmFsdWU7XG5cbiAgdGFncz86IEtleVZhbHVlO1xuXG4gIHNjaGVkdWxlRXhwcmVzc2lvbj86IHN0cmluZztcblxuICBzZWNyZXRzPzogc3RyaW5nW107XG4gIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nO1xuICBzZWNyZXRzSW1wb3J0PzogUmVjb3JkPHN0cmluZywgU2VjcmV0SW1wb3J0PjtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZXRvbkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBMYW1iZGFGdW5jdGlvblByb3BzIHtcbiAgdXVpZD86IHN0cmluZztcbiAgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGV0b25GdW5jdGlvbiBleHRlbmRzIHNpbmdsZXRvbkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNpbmdsZXRvbkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdXVpZDogcHJvcHMudXVpZCA/PyB1dWlkKCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IHNpbmdsZXRvbiBsYW1iZGFgLFxuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICAgICAgICA/IFNpemUubWViaWJ5dGVzKHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgYWRkUG9saWNpZXNUb1JvbGUodGhpcywgcHJvcHMuaW5saW5lUG9saWN5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhJ3MgZXhlY3V0aW9uIHJvbGUgKGF1dG8tZ2VuZXJhdGVkIGJ5IENESylcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhlY3V0aW9uUm9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIHByaXZhdGUgZnVuY3Rpb25VcmxWYWx1ZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGFtYmRhRnVuY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IHZwY1N1Ym5ldHMgPSBwcm9wcy52cGNcbiAgICAgID8geyBzdWJuZXRUeXBlOiByZXNvbHZlUHJpdmF0ZVN1Ym5ldFR5cGUocHJvcHMudnBjKSB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2cGNTdWJuZXRzLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dFxuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJvcHMudGltZW91dClcbiAgICAgICAgOiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplIHx8IDEyOCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICAgICAgICA/IFNpemUubWViaWJ5dGVzKHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gTGFtYmRhYCxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgIH0pO1xuXG4gICAgYWRkUG9saWNpZXNUb1JvbGUodGhpcywgcHJvcHMuaW5saW5lUG9saWN5KTtcblxuICAgIHRoaXMuYWRkU2VjcmV0c1N1cHBvcnQoXG4gICAgICBwcm9wcy5zZWNyZXRzLFxuICAgICAgcHJvcHMuc3NtU2VjcmV0c1BhdGgsXG4gICAgICBwcm9wcy5zZWNyZXRzSW1wb3J0LFxuICAgICAgcHJvcHMuYXBwTmFtZSxcbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIHByb3BzLmFyY2hpdGVjdHVyZVxuICAgICk7XG5cbiAgICAvLyBTYW5pdGlzZSBpZCBmb3IgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleXMgKG11c3QgYmUgYWxwaGFudW1lcmljKVxuICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b1Bhc2NhbENhc2UoaWQpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZUZ1bmN0aW9uVXJsKSB7XG4gICAgICBjb25zdCBmdW5jdGlvblVybCA9IHRoaXMuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgICBhdXRoVHlwZTogcHJvcHMuZnVuY3Rpb25VcmxBdXRoVHlwZSB8fCBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGNvcnM6IHByb3BzLmZ1bmN0aW9uVXJsQ29ycyxcbiAgICAgICAgaW52b2tlTW9kZTogcHJvcHMuZnVuY3Rpb25VcmxJbnZva2VNb2RlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mdW5jdGlvblVybFZhbHVlID0gZnVuY3Rpb25VcmwudXJsO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RnVuY3Rpb25VcmxgLCB7XG4gICAgICAgIGtleTogYCR7b3V0cHV0TmFtZX1GdW5jdGlvblVybGAsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvblVybC51cmwsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtpZH0gRnVuY3Rpb24gVVJMYFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUZ1bmN0aW9uQXJuYCwge1xuICAgICAga2V5OiBgJHtvdXRwdXROYW1lfUZ1bmN0aW9uQXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246IGAke2lkfSBGdW5jdGlvbiBBUk5gXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc2NoZWR1bGVFeHByZXNzaW9uKSB7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUodGhpcywgYCR7aWR9U2NoZWR1bGVSdWxlYCwge1xuICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuZXhwcmVzc2lvbihwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24pXG4gICAgICB9KTtcbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFUYXJnZXQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhJ3MgZXhlY3V0aW9uIHJvbGUgKGF1dG8tZ2VuZXJhdGVkIGJ5IENESylcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhlY3V0aW9uUm9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIExhbWJkYSBmdW5jdGlvbiBVUkwgaWYgZW5hYmxlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvblVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uVXJsVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIFNRUyBxdWV1ZSBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gbWVzc2FnZXMgYXJyaXZlIGluIHRoZSBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBhZGRTcXNFdmVudFNvdXJjZShcbiAgICBxdWV1ZTogSVF1ZXVlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBiYXRjaFNpemU/OiBudW1iZXI7XG4gICAgICBtYXhCYXRjaGluZ1dpbmRvdz86IG51bWJlcjtcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFNxc0V2ZW50U291cmNlKHF1ZXVlLCB7XG4gICAgICBiYXRjaFNpemU6IG9wdGlvbnM/LmJhdGNoU2l6ZSA/PyAxMCxcbiAgICAgIG1heEJhdGNoaW5nV2luZG93OiBvcHRpb25zPy5tYXhCYXRjaGluZ1dpbmRvd1xuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMob3B0aW9ucy5tYXhCYXRjaGluZ1dpbmRvdylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlczogb3B0aW9ucz8ucmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXMgPz8gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIER5bmFtb0RCIHRhYmxlIHN0cmVhbSBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gaXRlbXMgYXJlIG1vZGlmaWVkIGluIHRoZSB0YWJsZS5cbiAgICogUmVxdWlyZXMgRHluYW1vREIgU3RyZWFtcyB0byBiZSBlbmFibGVkIG9uIHRoZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyBhZGREeW5hbW9EYkV2ZW50U291cmNlKFxuICAgIHRhYmxlOiBJVGFibGUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAgIHN0YXJ0aW5nUG9zaXRpb24/OiBcIlRSSU1fSE9SSVpPTlwiIHwgXCJMQVRFU1RcIjtcbiAgICAgIG1heEJhdGNoaW5nV2luZG93PzogbnVtYmVyO1xuICAgICAgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcbiAgICAgIHBhcmFsbGVsaXphdGlvbkZhY3Rvcj86IG51bWJlcjtcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0aW5nUG9zaXRpb24gPVxuICAgICAgb3B0aW9ucz8uc3RhcnRpbmdQb3NpdGlvbiA9PT0gXCJUUklNX0hPUklaT05cIlxuICAgICAgICA/IFN0YXJ0aW5nUG9zaXRpb24uVFJJTV9IT1JJWk9OXG4gICAgICAgIDogU3RhcnRpbmdQb3NpdGlvbi5MQVRFU1Q7XG5cbiAgICBjb25zdCBldmVudFNvdXJjZSA9IG5ldyBEeW5hbW9FdmVudFNvdXJjZSh0YWJsZSwge1xuICAgICAgc3RhcnRpbmdQb3NpdGlvbixcbiAgICAgIGJhdGNoU2l6ZTogb3B0aW9ucz8uYmF0Y2hTaXplID8/IDEwMCxcbiAgICAgIG1heEJhdGNoaW5nV2luZG93OiBvcHRpb25zPy5tYXhCYXRjaGluZ1dpbmRvd1xuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMob3B0aW9ucy5tYXhCYXRjaGluZ1dpbmRvdylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZXRyeUF0dGVtcHRzOiBvcHRpb25zPy5yZXRyeUF0dGVtcHRzLFxuICAgICAgcGFyYWxsZWxpemF0aW9uRmFjdG9yOiBvcHRpb25zPy5wYXJhbGxlbGl6YXRpb25GYWN0b3IsXG4gICAgICByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlczogb3B0aW9ucz8ucmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXMgPz8gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBTMyBidWNrZXQgYXMgYW4gZXZlbnQgc291cmNlIGZvciB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdGhlIExhbWJkYSB3aGVuIG9iamVjdHMgYXJlIGNyZWF0ZWQsIG1vZGlmaWVkLCBvciBkZWxldGVkLlxuICAgKiBVc2VmdWwgZm9yIElTUiBjYWNoZSBpbnZhbGlkYXRpb24gYW5kIGZpbGUgcHJvY2Vzc2luZyB3b3JrZmxvd3MuXG4gICAqL1xuICBwdWJsaWMgYWRkUzNFdmVudFNvdXJjZShcbiAgICBidWNrZXQ6IEJ1Y2tldCxcbiAgICBvcHRpb25zPzoge1xuICAgICAgZXZlbnRzPzogQXJyYXk8XG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfUkVNT1ZFRFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9QVVRcIlxuICAgICAgICB8IFwiT0JKRUNUX0NSRUFURURfUE9TVFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9DT1BZXCJcbiAgICAgICAgfCBcIk9CSkVDVF9SRU1PVkVEX0RFTEVURVwiXG4gICAgICA+O1xuICAgICAgZmlsdGVycz86IEFycmF5PHsgcHJlZml4Pzogc3RyaW5nOyBzdWZmaXg/OiBzdHJpbmcgfT47XG4gICAgfVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFR5cGVzID0gKG9wdGlvbnM/LmV2ZW50cyA/PyBbXCJPQkpFQ1RfQ1JFQVRFRFwiXSkubWFwKChldmVudCkgPT4ge1xuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX1JFTU9WRURcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9SRU1PVkVEO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURfUFVUXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9QVVQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9QT1NUXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9QT1NUO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURfQ09QWVwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURURfQ09QWTtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9SRU1PVkVEX0RFTEVURVwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRURfREVMRVRFO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gZXZlbnQ7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIFMzIGV2ZW50IHR5cGU6ICR7X2V4aGF1c3RpdmV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHMzRXZlbnRTb3VyY2VQcm9wczogUzNFdmVudFNvdXJjZVByb3BzID0ge1xuICAgICAgZXZlbnRzOiBldmVudFR5cGVzLFxuICAgICAgZmlsdGVyczogb3B0aW9ucz8uZmlsdGVyc1xuICAgIH07XG5cbiAgICBjb25zdCBldmVudFNvdXJjZSA9IG5ldyBTM0V2ZW50U291cmNlKGJ1Y2tldCwgczNFdmVudFNvdXJjZVByb3BzKTtcbiAgICB0aGlzLmFkZEV2ZW50U291cmNlKGV2ZW50U291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gRXZlbnRCcmlkZ2UgcnVsZSBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gZXZlbnRzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIGFyZSBwdWJsaXNoZWQuXG4gICAqIFVzZWZ1bCBmb3Igc2NoZWR1bGVkIGpvYnMsIGNyb3NzLXNlcnZpY2UgZXZlbnQgaGFuZGxpbmcsIGFuZCBjdXN0b20gZXZlbnQgcGF0dGVybnMuXG4gICAqL1xuICBwdWJsaWMgYWRkRXZlbnRCcmlkZ2VFdmVudFNvdXJjZShcbiAgICBydWxlSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBzY2hlZHVsZT86IHN0cmluZztcbiAgICAgIGV2ZW50UGF0dGVybj86IEV2ZW50UGF0dGVybjtcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIH1cbiAgKTogUnVsZSB7XG4gICAgaWYgKCFvcHRpb25zLnNjaGVkdWxlICYmICFvcHRpb25zLmV2ZW50UGF0dGVybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV2ZW50QnJpZGdlIHJ1bGUgcmVxdWlyZXMgZWl0aGVyIHNjaGVkdWxlIG9yIGV2ZW50UGF0dGVyblwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZSh0aGlzLCBydWxlSWQsIHtcbiAgICAgIHNjaGVkdWxlOiBvcHRpb25zLnNjaGVkdWxlXG4gICAgICAgID8gU2NoZWR1bGUuZXhwcmVzc2lvbihvcHRpb25zLnNjaGVkdWxlKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50UGF0dGVybjogb3B0aW9ucy5ldmVudFBhdHRlcm4sXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvblxuICAgIH0pO1xuXG4gICAgcnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYVRhcmdldCh0aGlzKSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNlY3JldHMgc3VwcG9ydCB1c2luZyBBV1MgUGFyYW1ldGVycyBhbmQgU2VjcmV0cyBMYW1iZGEgRXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGUgZXh0ZW5zaW9uIGZldGNoZXMgc2VjcmV0cyBhdCBydW50aW1lIGZyb206XG4gICAqIC0gU1NNIFBhcmFtZXRlciBTdG9yZTogdmlhIGh0dHA6Ly9sb2NhbGhvc3Q6Mjc3My9zeXN0ZW1zbWFuYWdlci9wYXJhbWV0ZXJzL2dldFxuICAgKiAtIFNlY3JldHMgTWFuYWdlcjogdmlhIGh0dHA6Ly9sb2NhbGhvc3Q6Mjc3My9zZWNyZXRzbWFuYWdlci9nZXRcbiAgICpcbiAgICogVGhpcyByZXBsYWNlcyB0aGUgaW5zZWN1cmUgdW5zYWZlVW53cmFwKCkgcGF0dGVybiB3aGljaCByZXNvbHZlZCBzZWNyZXRzIGF0XG4gICAqIGRlcGxveSB0aW1lIGFuZCBleHBvc2VkIHRoZW0gaW4gTGFtYmRhIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFkZFNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM/OiBzdHJpbmdbXSxcbiAgICBzc21TZWNyZXRzUGF0aD86IHN0cmluZyxcbiAgICBzZWNyZXRzSW1wb3J0PzogUmVjb3JkPHN0cmluZywgU2VjcmV0SW1wb3J0PixcbiAgICBhcHBOYW1lPzogc3RyaW5nLFxuICAgIGZ1bmN0aW9uTmFtZT86IHN0cmluZyxcbiAgICBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmVcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaGFzU2VjcmV0c01hbmFnZXIgPVxuICAgICAgc2VjcmV0c0ltcG9ydCAmJiBPYmplY3Qua2V5cyhzZWNyZXRzSW1wb3J0KS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFoYXNTZWNyZXRzTWFuYWdlciAmJiAhKHNlY3JldHMgJiYgc2VjcmV0cy5sZW5ndGggPiAwKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5hZGRTZWNyZXRzRXh0ZW5zaW9uTGF5ZXIoYXJjaGl0ZWN0dXJlKTtcblxuICAgIGlmIChoYXNTZWNyZXRzTWFuYWdlcikge1xuICAgICAgdGhpcy5hZGRTZWNyZXRzTWFuYWdlclN1cHBvcnQoc2VjcmV0c0ltcG9ydCk7XG4gICAgfVxuXG4gICAgaWYgKHNlY3JldHMgJiYgc2VjcmV0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFkZFNzbVNlY3JldHNTdXBwb3J0KHNlY3JldHMsIHNzbVNlY3JldHNQYXRoLCBhcHBOYW1lLCBmdW5jdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkU2VjcmV0c1Jlc29sdmVyTGF5ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gbGF5ZXIuXG4gICAqIFVzZXMgQ0RLJ3MgcmVnaW9uYWxGYWN0KCkgdG8gcmVzb2x2ZSB0aGUgY29ycmVjdCBBUk4gYXQgZGVwbG95IHRpbWUsXG4gICAqIGhhbmRsaW5nIHRoZSBmYWN0IHRoYXQgQVdTIHB1Ymxpc2hlcyB0aGUgbGF5ZXIgZnJvbSBkaWZmZXJlbnQgYWNjb3VudHNcbiAgICogaW4gZGlmZmVyZW50IHJlZ2lvbnMuIFRoaXMgYXBwcm9hY2ggd29ya3Mgd2l0aCBDREsgdG9rZW5zLlxuICAgKiBDb25maWd1cmVzIGNhY2hlIFRUTCBmb3Igcm90YXRpb24gc3VwcG9ydC5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c0V4dGVuc2lvbkxheWVyKGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgYXJjaFN0cmluZyA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IEFyY2hpdGVjdHVyZS5BUk1fNjQgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gICAgY29uc3QgZmFjdE5hbWUgPSBGYWN0TmFtZS5wYXJhbXNBbmRTZWNyZXRzTGFtYmRhTGF5ZXIoXG4gICAgICBTRUNSRVRTX0VYVEVOU0lPTi5WRVJTSU9OLFxuICAgICAgYXJjaFN0cmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBsYXllckFybiA9IHN0YWNrLnJlZ2lvbmFsRmFjdChmYWN0TmFtZSk7XG5cbiAgICB0aGlzLmFkZExheWVycyhcbiAgICAgIExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5vZGUuaWR9U2VjcmV0c0V4dGVuc2lvbmAsXG4gICAgICAgIGxheWVyQXJuXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlNFQ1JFVFNfTUFOQUdFUl9UVExcIixcbiAgICAgIFNFQ1JFVFNfRVhURU5TSU9OLkNBQ0hFX1RUTF9TRUNPTkRTXG4gICAgKTtcbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJTU01fUEFSQU1FVEVSX1NUT1JFX1RUTFwiLFxuICAgICAgU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBTZWNyZXRzIE1hbmFnZXIgc3VwcG9ydCBmb3IgQ0RLLW1hbmFnZWQgc2VjcmV0cyAoZS5nLiwgZGF0YWJhc2UgY3JlZGVudGlhbHMpLlxuICAgKiBTdG9yZXMgQVJOICsgZmllbGQgYXMgZW52IHZhcnMgLSB0aGUgTGFtYmRhIEV4dGVuc2lvbiBmZXRjaGVzIGFjdHVhbCB2YWx1ZXMgYXQgcnVudGltZS5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c01hbmFnZXJTdXBwb3J0KFxuICAgIHNlY3JldHNJbXBvcnQ6IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD5cbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNJbXBvcnQpKSB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfUltcG9ydGVkU2VjcmV0JHtrZXl9YCxcbiAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfQVJOYCwgc2VjcmV0LnNlY3JldEFybik7XG4gICAgICBpZiAoc2VjcmV0SW1wb3J0LmZpZWxkKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfRklFTERgLCBzZWNyZXRJbXBvcnQuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpEZXNjcmliZUtleVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBzdXBwb3J0IGZvciB1c2VyLW1hbmFnZWQgc2VjcmV0cyAodmlhIGZqYWxsIHNlY3JldCBhZGQpLlxuICAgKiBTdG9yZXMgYmFzZSBwYXRoIGFuZCBzZWNyZXQgbmFtZXMgYXMgZW52IHZhcnMgZm9yIGNvbnN1bWVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGFkZFNzbVNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM6IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiU1NNX1NFQ1JFVFNfUEFUSFwiLCBiYXNlUGF0aCk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudChcIlNTTV9TRUNSRVRfTkFNRVNcIiwgc2VjcmV0cy5qb2luKFwiLFwiKSk7XG5cbiAgICBjb25zdCBzY29wZWRQYXRoID0gYCR7YmFzZVBhdGh9LypgO1xuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCIsIFwic3NtOkdldFBhcmFtZXRlcnNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn06KjpwYXJhbWV0ZXIke3Njb3BlZFBhdGh9YFxuICAgICAgICBdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgXCJrbXM6VmlhU2VydmljZVwiOiBgc3NtLiR7U3RhY2sub2YodGhpcykucmVnaW9ufS5hbWF6b25hd3MuY29tYFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgRmphbGwgc2VjcmV0cyByZXNvbHZlciBsYXllciBhbmQgc2V0IEFXU19MQU1CREFfRVhFQ19XUkFQUEVSLlxuICAgKlxuICAgKiBUaGUgcmVzb2x2ZXIgaXMgYSBiYXNoIHdyYXBwZXIgKyBOb2RlLmpzIHNjcmlwdCB0aGF0IHJ1bnMgYmVmb3JlIHRoZSBMYW1iZGFcbiAgICogcnVudGltZS4gSXQgY2FsbHMgdGhlIEV4dGVuc2lvbiBIVFRQIEFQSSAobG9jYWxob3N0OjI3NzMpIHRvIHJlc29sdmUgU1NNXG4gICAqIHBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLCBleHBvcnRpbmcgdGhlbSBhcyBwbGFpbiBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgc28gaGFuZGxlciBjb2RlIGNhbiBzaW1wbHkgcmVhZCBwcm9jZXNzLmVudi5cbiAgICpcbiAgICogVGhlIGxheWVyIGlzIGNyZWF0ZWQgb25jZSBwZXIgc3RhY2sgYW5kIHNoYXJlZCBhY3Jvc3MgYWxsIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGFkZFNlY3JldHNSZXNvbHZlckxheWVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgbGF5ZXJJZCA9IFwiRmphbGxTZWNyZXRzUmVzb2x2ZXJMYXllclwiO1xuICAgIGxldCByZXNvbHZlckxheWVyID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQobGF5ZXJJZCkgYXNcbiAgICAgIHwgTGF5ZXJWZXJzaW9uXG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghcmVzb2x2ZXJMYXllcikge1xuICAgICAgcmVzb2x2ZXJMYXllciA9IG5ldyBMYXllclZlcnNpb24oc3RhY2ssIGxheWVySWQsIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJsYXllcnNcIiwgXCJzZWNyZXRzLXJlc29sdmVyXCIpXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiRmphbGwgc2VjcmV0cyByZXNvbHZlciDigJQgcmVzb2x2ZXMgU1NNIGFuZCBTTSBzZWNyZXRzIGJlZm9yZSBoYW5kbGVyXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkTGF5ZXJzKHJlc29sdmVyTGF5ZXIpO1xuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXCJBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUlwiLCBcIi9vcHQvYmluL3Jlc29sdmUtc2VjcmV0c1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgU1NNIHNlY3JldHMgcGF0aCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUGF0dGVybjogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBpZiAoIWFwcE5hbWUgfHwgIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhbWJkYSBmdW5jdGlvbiBoYXMgc2VjcmV0cyBkZWZpbmVkIGJ1dCBubyBzc21TZWNyZXRzUGF0aCBpcyBzZXQgXCIgK1xuICAgICAgICAgIFwiYW5kIGFwcE5hbWUvZnVuY3Rpb25OYW1lIGFyZSBub3QgYXZhaWxhYmxlLiBcIiArXG4gICAgICAgICAgXCJFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIGV4cGxpY2l0bHksIG9yIGVuc3VyZSBBcHAuZ2V0TmFtZSgpIHJldHVybnMgYSB2YWx1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9L2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gO1xuICB9XG59XG4iXX0=
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DynamoDBTable = void 0;
4
4
  const constructs_1 = require("constructs");
5
5
  const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const removalPolicy_1 = require("../../../utils/removalPolicy");
6
7
  const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
7
8
  function toAttributeType(type) {
8
9
  switch (type) {
@@ -37,17 +38,6 @@ function toStreamViewType(stream) {
37
38
  return undefined;
38
39
  }
39
40
  }
40
- function toRemovalPolicy(policy) {
41
- switch (policy) {
42
- case "RETAIN":
43
- return aws_cdk_lib_1.RemovalPolicy.RETAIN;
44
- case "SNAPSHOT":
45
- return aws_cdk_lib_1.RemovalPolicy.SNAPSHOT;
46
- case "DESTROY":
47
- default:
48
- return aws_cdk_lib_1.RemovalPolicy.DESTROY;
49
- }
50
- }
51
41
  function toProjectionType(type) {
52
42
  switch (type) {
53
43
  case "ALL":
@@ -81,7 +71,7 @@ class DynamoDBTable extends constructs_1.Construct {
81
71
  writeCapacity: props.billingMode === "PROVISIONED" ? props.writeCapacity : undefined,
82
72
  stream: toStreamViewType(props.stream),
83
73
  pointInTimeRecovery: props.pointInTimeRecovery ?? true,
84
- removalPolicy: toRemovalPolicy(props.removalPolicy),
74
+ removalPolicy: (0, removalPolicy_1.toRemovalPolicy)(props.removalPolicy),
85
75
  timeToLiveAttribute: props.timeToLiveAttribute
86
76
  });
87
77
  if (props.globalSecondaryIndexes) {
@@ -178,4 +168,4 @@ class DynamoDBTable extends constructs_1.Construct {
178
168
  }
179
169
  }
180
170
  exports.DynamoDBTable = DynamoDBTable;
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1vZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9keW5hbW9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQXVEO0FBQ3ZELDJEQVFrQztBQWlDbEMsU0FBUyxlQUFlLENBQUMsSUFBMkI7SUFDbEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssR0FBRztZQUNOLE9BQU8sNEJBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUIsS0FBSyxHQUFHO1lBQ04sT0FBTyw0QkFBYSxDQUFDLE1BQU0sQ0FBQztRQUM5QixLQUFLLEdBQUc7WUFDTixPQUFPLDRCQUFhLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsSUFBd0M7SUFDN0QsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssYUFBYTtZQUNoQixPQUFPLDBCQUFXLENBQUMsV0FBVyxDQUFDO1FBQ2pDLEtBQUssaUJBQWlCLENBQUM7UUFDdkI7WUFDRSxPQUFPLDBCQUFXLENBQUMsZUFBZSxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBdUU7SUFFdkUsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssV0FBVztZQUNkLE9BQU8sNkJBQWMsQ0FBQyxTQUFTLENBQUM7UUFDbEMsS0FBSyxXQUFXO1lBQ2QsT0FBTyw2QkFBYyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxLQUFLLG9CQUFvQjtZQUN2QixPQUFPLDZCQUFjLENBQUMsa0JBQWtCLENBQUM7UUFDM0MsS0FBSyxXQUFXO1lBQ2QsT0FBTyw2QkFBYyxDQUFDLFNBQVMsQ0FBQztRQUNsQztZQUNFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLE1BQTBDO0lB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Q0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE9BQW1CO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLE9BQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLE9BQW1CO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsT0FBbUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsT0FBbUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUF2SUQsc0NBdUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgVGFibGUsXG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEJpbGxpbmdNb2RlLFxuICBTdHJlYW1WaWV3VHlwZSxcbiAgUHJvamVjdGlvblR5cGUsXG4gIHR5cGUgR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyxcbiAgdHlwZSBJVGFibGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuZXhwb3J0IHR5cGUgRHluYW1vREJBdHRyaWJ1dGVUeXBlID0gXCJTXCIgfCBcIk5cIiB8IFwiQlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCS2V5U2NoZW1hIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBEeW5hbW9EQkF0dHJpYnV0ZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vREJHbG9iYWxTZWNvbmRhcnlJbmRleCB7XG4gIGluZGV4TmFtZTogc3RyaW5nO1xuICBwYXJ0aXRpb25LZXk6IER5bmFtb0RCS2V5U2NoZW1hO1xuICBzb3J0S2V5PzogRHluYW1vREJLZXlTY2hlbWE7XG4gIHByb2plY3Rpb25UeXBlPzogXCJBTExcIiB8IFwiS0VZU19PTkxZXCIgfCBcIklOQ0xVREVcIjtcbiAgbm9uS2V5QXR0cmlidXRlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCVGFibGVQcm9wcyB7XG4gIHRhYmxlTmFtZT86IHN0cmluZztcbiAgcGFydGl0aW9uS2V5OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgc29ydEtleT86IER5bmFtb0RCS2V5U2NoZW1hO1xuICBiaWxsaW5nTW9kZT86IFwiUEFZX1BFUl9SRVFVRVNUXCIgfCBcIlBST1ZJU0lPTkVEXCI7XG4gIHJlYWRDYXBhY2l0eT86IG51bWJlcjtcbiAgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcbiAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcz86IER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXhbXTtcbiAgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgc3RyZWFtPzogXCJORVdfSU1BR0VcIiB8IFwiT0xEX0lNQUdFXCIgfCBcIk5FV19BTkRfT0xEX0lNQUdFU1wiIHwgXCJLRVlTX09OTFlcIjtcbiAgcG9pbnRJblRpbWVSZWNvdmVyeT86IGJvb2xlYW47XG4gIGVuY3J5cHRpb24/OiBcIkFXU19PV05FRFwiIHwgXCJBV1NfTUFOQUdFRFwiIHwgXCJDVVNUT01FUl9NQU5BR0VEXCI7XG4gIHJlbW92YWxQb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCIgfCBcIlNOQVBTSE9UXCI7XG59XG5cbmZ1bmN0aW9uIHRvQXR0cmlidXRlVHlwZSh0eXBlOiBEeW5hbW9EQkF0dHJpYnV0ZVR5cGUpOiBBdHRyaWJ1dGVUeXBlIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcIlNcIjpcbiAgICAgIHJldHVybiBBdHRyaWJ1dGVUeXBlLlNUUklORztcbiAgICBjYXNlIFwiTlwiOlxuICAgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGUuTlVNQkVSO1xuICAgIGNhc2UgXCJCXCI6XG4gICAgICByZXR1cm4gQXR0cmlidXRlVHlwZS5CSU5BUlk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9CaWxsaW5nTW9kZShtb2RlPzogXCJQQVlfUEVSX1JFUVVFU1RcIiB8IFwiUFJPVklTSU9ORURcIik6IEJpbGxpbmdNb2RlIHtcbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBcIlBST1ZJU0lPTkVEXCI6XG4gICAgICByZXR1cm4gQmlsbGluZ01vZGUuUFJPVklTSU9ORUQ7XG4gICAgY2FzZSBcIlBBWV9QRVJfUkVRVUVTVFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3RyZWFtVmlld1R5cGUoXG4gIHN0cmVhbT86IFwiTkVXX0lNQUdFXCIgfCBcIk9MRF9JTUFHRVwiIHwgXCJORVdfQU5EX09MRF9JTUFHRVNcIiB8IFwiS0VZU19PTkxZXCJcbik6IFN0cmVhbVZpZXdUeXBlIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChzdHJlYW0pIHtcbiAgICBjYXNlIFwiTkVXX0lNQUdFXCI6XG4gICAgICByZXR1cm4gU3RyZWFtVmlld1R5cGUuTkVXX0lNQUdFO1xuICAgIGNhc2UgXCJPTERfSU1BR0VcIjpcbiAgICAgIHJldHVybiBTdHJlYW1WaWV3VHlwZS5PTERfSU1BR0U7XG4gICAgY2FzZSBcIk5FV19BTkRfT0xEX0lNQUdFU1wiOlxuICAgICAgcmV0dXJuIFN0cmVhbVZpZXdUeXBlLk5FV19BTkRfT0xEX0lNQUdFUztcbiAgICBjYXNlIFwiS0VZU19PTkxZXCI6XG4gICAgICByZXR1cm4gU3RyZWFtVmlld1R5cGUuS0VZU19PTkxZO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUmVtb3ZhbFBvbGljeShcbiAgcG9saWN5PzogXCJERVNUUk9ZXCIgfCBcIlJFVEFJTlwiIHwgXCJTTkFQU0hPVFwiXG4pOiBSZW1vdmFsUG9saWN5IHtcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlIFwiUkVUQUlOXCI6XG4gICAgICByZXR1cm4gUmVtb3ZhbFBvbGljeS5SRVRBSU47XG4gICAgY2FzZSBcIlNOQVBTSE9UXCI6XG4gICAgICByZXR1cm4gUmVtb3ZhbFBvbGljeS5TTkFQU0hPVDtcbiAgICBjYXNlIFwiREVTVFJPWVwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUHJvamVjdGlvblR5cGUoXG4gIHR5cGU/OiBcIkFMTFwiIHwgXCJLRVlTX09OTFlcIiB8IFwiSU5DTFVERVwiXG4pOiBQcm9qZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJBTExcIjpcbiAgICAgIHJldHVybiBQcm9qZWN0aW9uVHlwZS5BTEw7XG4gICAgY2FzZSBcIktFWVNfT05MWVwiOlxuICAgICAgcmV0dXJuIFByb2plY3Rpb25UeXBlLktFWVNfT05MWTtcbiAgICBjYXNlIFwiSU5DTFVERVwiOlxuICAgICAgcmV0dXJuIFByb2plY3Rpb25UeXBlLklOQ0xVREU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtb0RCVGFibGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSB0YWJsZTogVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IER5bmFtb0RCVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgdGhpcy50YWJsZSA9IG5ldyBUYWJsZSh0aGlzLCBgJHtpZH1UYWJsZWAsIHtcbiAgICAgIHRhYmxlTmFtZTogcHJvcHMudGFibGVOYW1lLFxuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIG5hbWU6IHByb3BzLnBhcnRpdGlvbktleS5uYW1lLFxuICAgICAgICB0eXBlOiB0b0F0dHJpYnV0ZVR5cGUocHJvcHMucGFydGl0aW9uS2V5LnR5cGUpXG4gICAgICB9LFxuICAgICAgc29ydEtleTogcHJvcHMuc29ydEtleVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG5hbWU6IHByb3BzLnNvcnRLZXkubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHRvQXR0cmlidXRlVHlwZShwcm9wcy5zb3J0S2V5LnR5cGUpXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGJpbGxpbmdNb2RlOiB0b0JpbGxpbmdNb2RlKHByb3BzLmJpbGxpbmdNb2RlKSxcbiAgICAgIHJlYWRDYXBhY2l0eTpcbiAgICAgICAgcHJvcHMuYmlsbGluZ01vZGUgPT09IFwiUFJPVklTSU9ORURcIiA/IHByb3BzLnJlYWRDYXBhY2l0eSA6IHVuZGVmaW5lZCxcbiAgICAgIHdyaXRlQ2FwYWNpdHk6XG4gICAgICAgIHByb3BzLmJpbGxpbmdNb2RlID09PSBcIlBST1ZJU0lPTkVEXCIgPyBwcm9wcy53cml0ZUNhcGFjaXR5IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtOiB0b1N0cmVhbVZpZXdUeXBlKHByb3BzLnN0cmVhbSksXG4gICAgICBwb2ludEluVGltZVJlY292ZXJ5OiBwcm9wcy5wb2ludEluVGltZVJlY292ZXJ5ID8/IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiB0b1JlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSksXG4gICAgICB0aW1lVG9MaXZlQXR0cmlidXRlOiBwcm9wcy50aW1lVG9MaXZlQXR0cmlidXRlXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgZm9yIChjb25zdCBnc2kgb2YgcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgICBjb25zdCBnc2lQcm9wczogR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyA9IHtcbiAgICAgICAgICBpbmRleE5hbWU6IGdzaS5pbmRleE5hbWUsXG4gICAgICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgICAgICBuYW1lOiBnc2kucGFydGl0aW9uS2V5Lm5hbWUsXG4gICAgICAgICAgICB0eXBlOiB0b0F0dHJpYnV0ZVR5cGUoZ3NpLnBhcnRpdGlvbktleS50eXBlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc29ydEtleTogZ3NpLnNvcnRLZXlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGdzaS5zb3J0S2V5Lm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdG9BdHRyaWJ1dGVUeXBlKGdzaS5zb3J0S2V5LnR5cGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByb2plY3Rpb25UeXBlOiB0b1Byb2plY3Rpb25UeXBlKGdzaS5wcm9qZWN0aW9uVHlwZSksXG4gICAgICAgICAgbm9uS2V5QXR0cmlidXRlczogZ3NpLm5vbktleUF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleChnc2lQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1UYWJsZU5hbWVgLCB7XG4gICAgICBrZXk6IGAke2lkfVRhYmxlTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy50YWJsZS50YWJsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYER5bmFtb0RCIHRhYmxlIG5hbWUgZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1UYWJsZUFybmAsIHtcbiAgICAgIGtleTogYCR7aWR9VGFibGVBcm5gLFxuICAgICAgdmFsdWU6IHRoaXMudGFibGUudGFibGVBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYER5bmFtb0RCIHRhYmxlIEFSTiBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc3RyZWFtKSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfVRhYmxlU3RyZWFtQXJuYCwge1xuICAgICAgICBrZXk6IGAke2lkfVRhYmxlU3RyZWFtQXJuYCxcbiAgICAgICAgdmFsdWU6IHRoaXMudGFibGUudGFibGVTdHJlYW1Bcm4gfHwgXCJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBEeW5hbW9EQiB0YWJsZSBzdHJlYW0gQVJOIGZvciAke2lkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIER5bmFtb0RCIHRhYmxlIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUudGFibGVOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRHluYW1vREIgdGFibGUgQVJOLlxuICAgKi9cbiAgcHVibGljIGdldFRhYmxlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUudGFibGVBcm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBEeW5hbW9EQiB0YWJsZSBzdHJlYW0gQVJOIChpZiBzdHJlYW1pbmcgaXMgZW5hYmxlZCkuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFibGVTdHJlYW1Bcm4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS50YWJsZVN0cmVhbUFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgQ0RLIFRhYmxlIGNvbnN0cnVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXRUYWJsZSgpOiBJVGFibGUge1xuICAgIHJldHVybiB0aGlzLnRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRSZWFkRGF0YShncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRXcml0ZURhdGEoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgZnVsbCBhY2Nlc3MgKHJlYWQsIHdyaXRlLCBkZWxldGUpIHRvIHRoZSBncmFudGVlLlxuICAgKi9cbiAgcHVibGljIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50RnVsbEFjY2VzcyhncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBzdHJlYW0gcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFN0cmVhbVJlYWQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFN0cmVhbVJlYWQoZ3JhbnRlZSk7XG4gIH1cbn1cbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1vZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9keW5hbW9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQXdDO0FBQ3hDLGdFQUErRDtBQUMvRCwyREFRa0M7QUFpQ2xDLFNBQVMsZUFBZSxDQUFDLElBQTJCO0lBQ2xELFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLEdBQUc7WUFDTixPQUFPLDRCQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLEtBQUssR0FBRztZQUNOLE9BQU8sNEJBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUIsS0FBSyxHQUFHO1lBQ04sT0FBTyw0QkFBYSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQXdDO0lBQzdELFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLGFBQWE7WUFDaEIsT0FBTywwQkFBVyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxLQUFLLGlCQUFpQixDQUFDO1FBQ3ZCO1lBQ0UsT0FBTywwQkFBVyxDQUFDLGVBQWUsQ0FBQztJQUN2QyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLE1BQXVFO0lBRXZFLFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLFdBQVc7WUFDZCxPQUFPLDZCQUFjLENBQUMsU0FBUyxDQUFDO1FBQ2xDLEtBQUssV0FBVztZQUNkLE9BQU8sNkJBQWMsQ0FBQyxTQUFTLENBQUM7UUFDbEMsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyw2QkFBYyxDQUFDLGtCQUFrQixDQUFDO1FBQzNDLEtBQUssV0FBVztZQUNkLE9BQU8sNkJBQWMsQ0FBQyxTQUFTLENBQUM7UUFDbEM7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdC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UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsT0FBbUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsT0FBbUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQXZJRCxzQ0F1SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0b1JlbW92YWxQb2xpY3kgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVtb3ZhbFBvbGljeVwiO1xuaW1wb3J0IHtcbiAgVGFibGUsXG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEJpbGxpbmdNb2RlLFxuICBTdHJlYW1WaWV3VHlwZSxcbiAgUHJvamVjdGlvblR5cGUsXG4gIHR5cGUgR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyxcbiAgdHlwZSBJVGFibGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuZXhwb3J0IHR5cGUgRHluYW1vREJBdHRyaWJ1dGVUeXBlID0gXCJTXCIgfCBcIk5cIiB8IFwiQlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCS2V5U2NoZW1hIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBEeW5hbW9EQkF0dHJpYnV0ZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vREJHbG9iYWxTZWNvbmRhcnlJbmRleCB7XG4gIGluZGV4TmFtZTogc3RyaW5nO1xuICBwYXJ0aXRpb25LZXk6IER5bmFtb0RCS2V5U2NoZW1hO1xuICBzb3J0S2V5PzogRHluYW1vREJLZXlTY2hlbWE7XG4gIHByb2plY3Rpb25UeXBlPzogXCJBTExcIiB8IFwiS0VZU19PTkxZXCIgfCBcIklOQ0xVREVcIjtcbiAgbm9uS2V5QXR0cmlidXRlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCVGFibGVQcm9wcyB7XG4gIHRhYmxlTmFtZT86IHN0cmluZztcbiAgcGFydGl0aW9uS2V5OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgc29ydEtleT86IER5bmFtb0RCS2V5U2NoZW1hO1xuICBiaWxsaW5nTW9kZT86IFwiUEFZX1BFUl9SRVFVRVNUXCIgfCBcIlBST1ZJU0lPTkVEXCI7XG4gIHJlYWRDYXBhY2l0eT86IG51bWJlcjtcbiAgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcbiAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcz86IER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXhbXTtcbiAgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgc3RyZWFtPzogXCJORVdfSU1BR0VcIiB8IFwiT0xEX0lNQUdFXCIgfCBcIk5FV19BTkRfT0xEX0lNQUdFU1wiIHwgXCJLRVlTX09OTFlcIjtcbiAgcG9pbnRJblRpbWVSZWNvdmVyeT86IGJvb2xlYW47XG4gIGVuY3J5cHRpb24/OiBcIkFXU19PV05FRFwiIHwgXCJBV1NfTUFOQUdFRFwiIHwgXCJDVVNUT01FUl9NQU5BR0VEXCI7XG4gIHJlbW92YWxQb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCIgfCBcIlNOQVBTSE9UXCI7XG59XG5cbmZ1bmN0aW9uIHRvQXR0cmlidXRlVHlwZSh0eXBlOiBEeW5hbW9EQkF0dHJpYnV0ZVR5cGUpOiBBdHRyaWJ1dGVUeXBlIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcIlNcIjpcbiAgICAgIHJldHVybiBBdHRyaWJ1dGVUeXBlLlNUUklORztcbiAgICBjYXNlIFwiTlwiOlxuICAgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGUuTlVNQkVSO1xuICAgIGNhc2UgXCJCXCI6XG4gICAgICByZXR1cm4gQXR0cmlidXRlVHlwZS5CSU5BUlk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9CaWxsaW5nTW9kZShtb2RlPzogXCJQQVlfUEVSX1JFUVVFU1RcIiB8IFwiUFJPVklTSU9ORURcIik6IEJpbGxpbmdNb2RlIHtcbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBcIlBST1ZJU0lPTkVEXCI6XG4gICAgICByZXR1cm4gQmlsbGluZ01vZGUuUFJPVklTSU9ORUQ7XG4gICAgY2FzZSBcIlBBWV9QRVJfUkVRVUVTVFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3RyZWFtVmlld1R5cGUoXG4gIHN0cmVhbT86IFwiTkVXX0lNQUdFXCIgfCBcIk9MRF9JTUFHRVwiIHwgXCJORVdfQU5EX09MRF9JTUFHRVNcIiB8IFwiS0VZU19PTkxZXCJcbik6IFN0cmVhbVZpZXdUeXBlIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChzdHJlYW0pIHtcbiAgICBjYXNlIFwiTkVXX0lNQUdFXCI6XG4gICAgICByZXR1cm4gU3RyZWFtVmlld1R5cGUuTkVXX0lNQUdFO1xuICAgIGNhc2UgXCJPTERfSU1BR0VcIjpcbiAgICAgIHJldHVybiBTdHJlYW1WaWV3VHlwZS5PTERfSU1BR0U7XG4gICAgY2FzZSBcIk5FV19BTkRfT0xEX0lNQUdFU1wiOlxuICAgICAgcmV0dXJuIFN0cmVhbVZpZXdUeXBlLk5FV19BTkRfT0xEX0lNQUdFUztcbiAgICBjYXNlIFwiS0VZU19PTkxZXCI6XG4gICAgICByZXR1cm4gU3RyZWFtVmlld1R5cGUuS0VZU19PTkxZO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUHJvamVjdGlvblR5cGUoXG4gIHR5cGU/OiBcIkFMTFwiIHwgXCJLRVlTX09OTFlcIiB8IFwiSU5DTFVERVwiXG4pOiBQcm9qZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJBTExcIjpcbiAgICAgIHJldHVybiBQcm9qZWN0aW9uVHlwZS5BTEw7XG4gICAgY2FzZSBcIktFWVNfT05MWVwiOlxuICAgICAgcmV0dXJuIFByb2plY3Rpb25UeXBlLktFWVNfT05MWTtcbiAgICBjYXNlIFwiSU5DTFVERVwiOlxuICAgICAgcmV0dXJuIFByb2plY3Rpb25UeXBlLklOQ0xVREU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtb0RCVGFibGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSB0YWJsZTogVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IER5bmFtb0RCVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgdGhpcy50YWJsZSA9IG5ldyBUYWJsZSh0aGlzLCBgJHtpZH1UYWJsZWAsIHtcbiAgICAgIHRhYmxlTmFtZTogcHJvcHMudGFibGVOYW1lLFxuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIG5hbWU6IHByb3BzLnBhcnRpdGlvbktleS5uYW1lLFxuICAgICAgICB0eXBlOiB0b0F0dHJpYnV0ZVR5cGUocHJvcHMucGFydGl0aW9uS2V5LnR5cGUpXG4gICAgICB9LFxuICAgICAgc29ydEtleTogcHJvcHMuc29ydEtleVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG5hbWU6IHByb3BzLnNvcnRLZXkubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHRvQXR0cmlidXRlVHlwZShwcm9wcy5zb3J0S2V5LnR5cGUpXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGJpbGxpbmdNb2RlOiB0b0JpbGxpbmdNb2RlKHByb3BzLmJpbGxpbmdNb2RlKSxcbiAgICAgIHJlYWRDYXBhY2l0eTpcbiAgICAgICAgcHJvcHMuYmlsbGluZ01vZGUgPT09IFwiUFJPVklTSU9ORURcIiA/IHByb3BzLnJlYWRDYXBhY2l0eSA6IHVuZGVmaW5lZCxcbiAgICAgIHdyaXRlQ2FwYWNpdHk6XG4gICAgICAgIHByb3BzLmJpbGxpbmdNb2RlID09PSBcIlBST1ZJU0lPTkVEXCIgPyBwcm9wcy53cml0ZUNhcGFjaXR5IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtOiB0b1N0cmVhbVZpZXdUeXBlKHByb3BzLnN0cmVhbSksXG4gICAgICBwb2ludEluVGltZVJlY292ZXJ5OiBwcm9wcy5wb2ludEluVGltZVJlY292ZXJ5ID8/IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiB0b1JlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSksXG4gICAgICB0aW1lVG9MaXZlQXR0cmlidXRlOiBwcm9wcy50aW1lVG9MaXZlQXR0cmlidXRlXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgZm9yIChjb25zdCBnc2kgb2YgcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgICBjb25zdCBnc2lQcm9wczogR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyA9IHtcbiAgICAgICAgICBpbmRleE5hbWU6IGdzaS5pbmRleE5hbWUsXG4gICAgICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgICAgICBuYW1lOiBnc2kucGFydGl0aW9uS2V5Lm5hbWUsXG4gICAgICAgICAgICB0eXBlOiB0b0F0dHJpYnV0ZVR5cGUoZ3NpLnBhcnRpdGlvbktleS50eXBlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc29ydEtleTogZ3NpLnNvcnRLZXlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGdzaS5zb3J0S2V5Lm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdG9BdHRyaWJ1dGVUeXBlKGdzaS5zb3J0S2V5LnR5cGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByb2plY3Rpb25UeXBlOiB0b1Byb2plY3Rpb25UeXBlKGdzaS5wcm9qZWN0aW9uVHlwZSksXG4gICAgICAgICAgbm9uS2V5QXR0cmlidXRlczogZ3NpLm5vbktleUF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleChnc2lQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1UYWJsZU5hbWVgLCB7XG4gICAgICBrZXk6IGAke2lkfVRhYmxlTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy50YWJsZS50YWJsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYER5bmFtb0RCIHRhYmxlIG5hbWUgZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1UYWJsZUFybmAsIHtcbiAgICAgIGtleTogYCR7aWR9VGFibGVBcm5gLFxuICAgICAgdmFsdWU6IHRoaXMudGFibGUudGFibGVBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYER5bmFtb0RCIHRhYmxlIEFSTiBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc3RyZWFtKSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfVRhYmxlU3RyZWFtQXJuYCwge1xuICAgICAgICBrZXk6IGAke2lkfVRhYmxlU3RyZWFtQXJuYCxcbiAgICAgICAgdmFsdWU6IHRoaXMudGFibGUudGFibGVTdHJlYW1Bcm4gfHwgXCJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBEeW5hbW9EQiB0YWJsZSBzdHJlYW0gQVJOIGZvciAke2lkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIER5bmFtb0RCIHRhYmxlIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUudGFibGVOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRHluYW1vREIgdGFibGUgQVJOLlxuICAgKi9cbiAgcHVibGljIGdldFRhYmxlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUudGFibGVBcm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBEeW5hbW9EQiB0YWJsZSBzdHJlYW0gQVJOIChpZiBzdHJlYW1pbmcgaXMgZW5hYmxlZCkuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFibGVTdHJlYW1Bcm4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS50YWJsZVN0cmVhbUFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgQ0RLIFRhYmxlIGNvbnN0cnVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXRUYWJsZSgpOiBJVGFibGUge1xuICAgIHJldHVybiB0aGlzLnRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRSZWFkRGF0YShncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRXcml0ZURhdGEoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIGdyYW50ZWUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgZnVsbCBhY2Nlc3MgKHJlYWQsIHdyaXRlLCBkZWxldGUpIHRvIHRoZSBncmFudGVlLlxuICAgKi9cbiAgcHVibGljIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50RnVsbEFjY2VzcyhncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBzdHJlYW0gcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ3JhbnRlZS5cbiAgICovXG4gIHB1YmxpYyBncmFudFN0cmVhbVJlYWQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFN0cmVhbVJlYWQoZ3JhbnRlZSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,10 @@
1
- export * from "./database";
1
+ import { DatabaseInsightsMode, PerformanceInsightRetention } from "aws-cdk-lib/aws-rds";
2
+ export * from "./dynamodb";
2
3
  export * from "./rdsAurora";
4
+ export * from "./rdsAuroraGlobal";
5
+ export * from "./rdsDefaults";
6
+ export * from "./rdsHelpers";
3
7
  export * from "./rdsInstance";
4
- export * from "./dynamodb";
8
+ export * from "./rdsProxyOutput";
9
+ export declare function getDatabaseInsightsRetention(mode: "standard" | "advanced"): PerformanceInsightRetention;
10
+ export declare function getCdkDatabaseInsightsMode(mode: "standard" | "advanced"): DatabaseInsightsMode;
@@ -14,8 +14,24 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./database"), exports);
17
+ exports.getDatabaseInsightsRetention = getDatabaseInsightsRetention;
18
+ exports.getCdkDatabaseInsightsMode = getCdkDatabaseInsightsMode;
19
+ const aws_rds_1 = require("aws-cdk-lib/aws-rds");
20
+ __exportStar(require("./dynamodb"), exports);
18
21
  __exportStar(require("./rdsAurora"), exports);
22
+ __exportStar(require("./rdsAuroraGlobal"), exports);
23
+ __exportStar(require("./rdsDefaults"), exports);
24
+ __exportStar(require("./rdsHelpers"), exports);
19
25
  __exportStar(require("./rdsInstance"), exports);
20
- __exportStar(require("./dynamodb"), exports);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1QixnREFBOEI7QUFDOUIsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jkc0F1cm9yYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmRzSW5zdGFuY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2R5bmFtb2RiXCI7XG4iXX0=
26
+ __exportStar(require("./rdsProxyOutput"), exports);
27
+ function getDatabaseInsightsRetention(mode) {
28
+ return mode === "advanced"
29
+ ? aws_rds_1.PerformanceInsightRetention.MONTHS_15
30
+ : aws_rds_1.PerformanceInsightRetention.DEFAULT;
31
+ }
32
+ function getCdkDatabaseInsightsMode(mode) {
33
+ return mode === "advanced"
34
+ ? aws_rds_1.DatabaseInsightsMode.ADVANCED
35
+ : aws_rds_1.DatabaseInsightsMode.STANDARD;
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsb0VBTUM7QUFFRCxnRUFNQztBQTNCRCxpREFHNkI7QUFFN0IsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1QixvREFBa0M7QUFDbEMsZ0RBQThCO0FBQzlCLCtDQUE2QjtBQUM3QixnREFBOEI7QUFDOUIsbURBQWlDO0FBRWpDLFNBQWdCLDRCQUE0QixDQUMxQyxJQUE2QjtJQUU3QixPQUFPLElBQUksS0FBSyxVQUFVO1FBQ3hCLENBQUMsQ0FBQyxxQ0FBMkIsQ0FBQyxTQUFTO1FBQ3ZDLENBQUMsQ0FBQyxxQ0FBMkIsQ0FBQyxPQUFPLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUN4QyxJQUE2QjtJQUU3QixPQUFPLElBQUksS0FBSyxVQUFVO1FBQ3hCLENBQUMsQ0FBQyw4QkFBb0IsQ0FBQyxRQUFRO1FBQy9CLENBQUMsQ0FBQyw4QkFBb0IsQ0FBQyxRQUFRLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGFiYXNlSW5zaWdodHNNb2RlLFxuICBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZHluYW1vZGJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jkc0F1cm9yYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmRzQXVyb3JhR2xvYmFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZHNEZWZhdWx0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmRzSGVscGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmRzSW5zdGFuY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jkc1Byb3h5T3V0cHV0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhYmFzZUluc2lnaHRzUmV0ZW50aW9uKFxuICBtb2RlOiBcInN0YW5kYXJkXCIgfCBcImFkdmFuY2VkXCJcbik6IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbiB7XG4gIHJldHVybiBtb2RlID09PSBcImFkdmFuY2VkXCJcbiAgICA/IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfMTVcbiAgICA6IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5ERUZBVUxUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2RrRGF0YWJhc2VJbnNpZ2h0c01vZGUoXG4gIG1vZGU6IFwic3RhbmRhcmRcIiB8IFwiYWR2YW5jZWRcIlxuKTogRGF0YWJhc2VJbnNpZ2h0c01vZGUge1xuICByZXR1cm4gbW9kZSA9PT0gXCJhZHZhbmNlZFwiXG4gICAgPyBEYXRhYmFzZUluc2lnaHRzTW9kZS5BRFZBTkNFRFxuICAgIDogRGF0YWJhc2VJbnNpZ2h0c01vZGUuU1RBTkRBUkQ7XG59XG4iXX0=
@@ -3,7 +3,7 @@ import { Connections, type IConnectable, type IVpc } from "aws-cdk-lib/aws-ec2";
3
3
  import { DatabaseCluster, type CfnDBCluster, type IClusterEngine } from "aws-cdk-lib/aws-rds";
4
4
  import { Construct } from "constructs";
5
5
  import { Secret } from "../secrets";
6
- import { type EngineConfig, type ProxyConfig, type CredentialsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type PerformanceInsightsConfig } from "../../../patterns/aws/database";
6
+ import { type EngineConfig, type ProxyConfig, type CredentialsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type DatabaseInsightsConfig } from "../../../utils/databaseTypes";
7
7
  interface RdsProps {
8
8
  vpc: IVpc;
9
9
  databaseName?: string;
@@ -19,7 +19,7 @@ interface RdsProps {
19
19
  monitoringInterval?: Duration;
20
20
  preferredMaintenanceWindow?: string;
21
21
  port?: number;
22
- performanceInsights?: PerformanceInsightsConfig | false;
22
+ databaseInsights?: DatabaseInsightsConfig | false;
23
23
  /** Skips secret rotation for secondary clusters in global database */
24
24
  isGlobalSecondary?: boolean;
25
25
  secretReplicaRegions?: string[];
@@ -62,6 +62,5 @@ export declare class RdsAurora extends Construct implements IConnectable {
62
62
  getCredentials(): Secret;
63
63
  getCfnCluster(): CfnDBCluster | undefined;
64
64
  getDatabaseCluster(): DatabaseCluster;
65
- private getPerformanceInsightRetention;
66
65
  }
67
66
  export {};