terraconstructs 0.0.9 → 0.0.11

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 (136) hide show
  1. package/.jsii +1391 -145
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.js +1 -1
  4. package/lib/aws/aws-stack.js +1 -1
  5. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  6. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  7. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  8. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  9. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  10. package/lib/aws/cloudwatch/alarm.js +1 -1
  11. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  12. package/lib/aws/cloudwatch/dashboard.js +1 -1
  13. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  14. package/lib/aws/cloudwatch/graph.js +8 -8
  15. package/lib/aws/cloudwatch/layout.js +3 -3
  16. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  17. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  18. package/lib/aws/cloudwatch/log-group.js +1 -1
  19. package/lib/aws/cloudwatch/log-query.js +1 -1
  20. package/lib/aws/cloudwatch/log-stream.js +1 -1
  21. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  22. package/lib/aws/cloudwatch/metric.js +2 -2
  23. package/lib/aws/cloudwatch/pattern.js +3 -3
  24. package/lib/aws/cloudwatch/policy.js +1 -1
  25. package/lib/aws/cloudwatch/query-definition.js +2 -2
  26. package/lib/aws/cloudwatch/stats.js +1 -1
  27. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  28. package/lib/aws/cloudwatch/text.js +1 -1
  29. package/lib/aws/cloudwatch/variable.js +3 -3
  30. package/lib/aws/cloudwatch/widget.js +1 -1
  31. package/lib/aws/compute/activity.js +1 -1
  32. package/lib/aws/compute/architecture.js +1 -1
  33. package/lib/aws/compute/chain.js +1 -1
  34. package/lib/aws/compute/condition.js +1 -1
  35. package/lib/aws/compute/event-invoke-config.js +1 -1
  36. package/lib/aws/compute/event-source-filter.js +2 -2
  37. package/lib/aws/compute/event-source-mapping.js +1 -1
  38. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  39. package/lib/aws/compute/event-sources/s3.js +1 -1
  40. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  41. package/lib/aws/compute/event-sources/sqs.js +1 -1
  42. package/lib/aws/compute/fields.js +4 -4
  43. package/lib/aws/compute/function-alias.js +1 -1
  44. package/lib/aws/compute/function-base.js +2 -2
  45. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  46. package/lib/aws/compute/function-destinations/function.js +1 -1
  47. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  48. package/lib/aws/compute/function-nodejs.js +1 -1
  49. package/lib/aws/compute/function-url.js +1 -1
  50. package/lib/aws/compute/function.js +1 -1
  51. package/lib/aws/compute/state-graph.js +1 -1
  52. package/lib/aws/compute/state-machine-fragment.js +1 -1
  53. package/lib/aws/compute/state-machine.js +4 -4
  54. package/lib/aws/compute/states/choice.js +1 -1
  55. package/lib/aws/compute/states/custom-state.js +1 -1
  56. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  57. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  58. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  59. package/lib/aws/compute/states/distributed-map.js +1 -1
  60. package/lib/aws/compute/states/fail.js +1 -1
  61. package/lib/aws/compute/states/map-base.js +1 -1
  62. package/lib/aws/compute/states/map.js +1 -1
  63. package/lib/aws/compute/states/parallel.js +1 -1
  64. package/lib/aws/compute/states/pass.js +2 -2
  65. package/lib/aws/compute/states/state.js +1 -1
  66. package/lib/aws/compute/states/succeed.js +1 -1
  67. package/lib/aws/compute/states/task-base.js +2 -2
  68. package/lib/aws/compute/states/task.js +1 -1
  69. package/lib/aws/compute/states/wait.js +2 -2
  70. package/lib/aws/compute/task-credentials.js +1 -1
  71. package/lib/aws/compute/task-input.js +1 -1
  72. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  73. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  74. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  75. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  76. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  77. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  78. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  79. package/lib/aws/compute/types.js +1 -1
  80. package/lib/aws/edge/certificate.js +1 -1
  81. package/lib/aws/edge/distribution.d.ts +5 -19
  82. package/lib/aws/edge/distribution.js +16 -26
  83. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  84. package/lib/aws/edge/dns-record.js +13 -13
  85. package/lib/aws/edge/dns-zone.js +1 -1
  86. package/lib/aws/edge/function.js +2 -2
  87. package/lib/aws/edge/index.d.ts +1 -0
  88. package/lib/aws/edge/index.js +2 -1
  89. package/lib/aws/edge/key-value-store.js +4 -4
  90. package/lib/aws/edge/origin.js +5 -5
  91. package/lib/aws/edge/response-headers-policy.d.ts +374 -0
  92. package/lib/aws/edge/response-headers-policy.js +220 -0
  93. package/lib/aws/encryption/alias.js +1 -1
  94. package/lib/aws/encryption/key.js +1 -1
  95. package/lib/aws/encryption/via-service-principal.js +1 -1
  96. package/lib/aws/iam/grant.js +2 -2
  97. package/lib/aws/iam/managed-policy.js +1 -1
  98. package/lib/aws/iam/oidc-provider.js +1 -1
  99. package/lib/aws/iam/policy-document.js +1 -1
  100. package/lib/aws/iam/policy-statement.js +1 -1
  101. package/lib/aws/iam/policy.js +1 -1
  102. package/lib/aws/iam/principals.js +20 -20
  103. package/lib/aws/iam/role.js +1 -1
  104. package/lib/aws/iam/saml-provider.js +2 -2
  105. package/lib/aws/iam/unknown-principal.js +1 -1
  106. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  107. package/lib/aws/network/subnet-group.js +3 -3
  108. package/lib/aws/network/subnet.js +4 -4
  109. package/lib/aws/notify/archive.js +1 -1
  110. package/lib/aws/notify/connection.js +3 -3
  111. package/lib/aws/notify/event-bus.js +3 -3
  112. package/lib/aws/notify/event-pattern.js +1 -1
  113. package/lib/aws/notify/input.js +2 -2
  114. package/lib/aws/notify/kinesis-stream.js +1 -1
  115. package/lib/aws/notify/queue-policy.js +1 -1
  116. package/lib/aws/notify/queue.js +1 -1
  117. package/lib/aws/notify/resource-policy.js +1 -1
  118. package/lib/aws/notify/rule.js +1 -1
  119. package/lib/aws/notify/schedule.js +1 -1
  120. package/lib/aws/notify/targets/event-bus.js +1 -1
  121. package/lib/aws/notify/targets/function.js +1 -1
  122. package/lib/aws/notify/targets/log-group.js +2 -2
  123. package/lib/aws/notify/targets/sqs.js +1 -1
  124. package/lib/aws/notify/targets/state-machine.js +1 -1
  125. package/lib/aws/storage/bucket-notifications.js +1 -1
  126. package/lib/aws/storage/bucket-policy.js +1 -1
  127. package/lib/aws/storage/bucket-source.js +1 -1
  128. package/lib/aws/storage/bucket.js +1 -1
  129. package/lib/aws/storage/notification-targets/function.js +1 -1
  130. package/lib/aws/storage/notification-targets/queue.js +1 -1
  131. package/lib/aws/storage/origin-access-identity.js +1 -1
  132. package/lib/construct-base.js +2 -2
  133. package/lib/duration.js +1 -1
  134. package/lib/size.js +1 -1
  135. package/lib/stack-base.js +1 -1
  136. package/package.json +1 -1
@@ -98,7 +98,7 @@ class OriginBase {
98
98
  }
99
99
  exports.OriginBase = OriginBase;
100
100
  _a = JSII_RTTI_SYMBOL_1;
101
- OriginBase[_a] = { fqn: "terraconstructs.aws.edge.OriginBase", version: "0.0.9" };
101
+ OriginBase[_a] = { fqn: "terraconstructs.aws.edge.OriginBase", version: "0.0.11" };
102
102
  /**
103
103
  * Throws an error if a value is defined and not an integer or not in a range.
104
104
  */
@@ -171,7 +171,7 @@ function validateCustomHeaders(customHeaders) {
171
171
  class S3Origin {
172
172
  constructor(bucket, props = {}) {
173
173
  this.origin = bucket.isWebsite()
174
- ? new HttpOrigin(bucket.bucketOutputs.websiteDomainName, {
174
+ ? new HttpOrigin(bucket.bucketOutputs.websiteUrl, {
175
175
  protocolPolicy: OriginProtocolPolicy.HTTP_ONLY, // S3 only supports HTTP for website buckets
176
176
  ...props,
177
177
  })
@@ -183,7 +183,7 @@ class S3Origin {
183
183
  }
184
184
  exports.S3Origin = S3Origin;
185
185
  _b = JSII_RTTI_SYMBOL_1;
186
- S3Origin[_b] = { fqn: "terraconstructs.aws.edge.S3Origin", version: "0.0.9" };
186
+ S3Origin[_b] = { fqn: "terraconstructs.aws.edge.S3Origin", version: "0.0.11" };
187
187
  /**
188
188
  * An Origin specific to a S3 bucket (not configured for website hosting).
189
189
  *
@@ -229,7 +229,7 @@ class HttpOrigin extends OriginBase {
229
229
  }
230
230
  exports.HttpOrigin = HttpOrigin;
231
231
  _c = JSII_RTTI_SYMBOL_1;
232
- HttpOrigin[_c] = { fqn: "terraconstructs.aws.edge.HttpOrigin", version: "0.0.9" };
232
+ HttpOrigin[_c] = { fqn: "terraconstructs.aws.edge.HttpOrigin", version: "0.0.11" };
233
233
  /**
234
234
  * Throws an error if a duration is defined and not an integer number of seconds within a range.
235
235
  */
@@ -242,4 +242,4 @@ function validateSecondsInRangeOrUndefined(name, min, max, duration) {
242
242
  throw new Error(`${name}: Must be an int between ${min} and ${max} seconds (inclusive); received ${value}.`);
243
243
  }
244
244
  }
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL29yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLGlDQUE4QjtBQTBEOUI7O0dBRUc7QUFDSCxJQUFZLG9CQU9YO0FBUEQsV0FBWSxvQkFBb0I7SUFDOUIsMkJBQTJCO0lBQzNCLCtDQUF1QixDQUFBO0lBQ3ZCLG1EQUFtRDtJQUNuRCxxREFBNkIsQ0FBQTtJQUM3Qiw0QkFBNEI7SUFDNUIsaURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQVBXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBTy9CO0FBRUQsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3pCLG1DQUFnQixDQUFBO0lBQ2hCLG1DQUFnQixDQUFBO0lBQ2hCLHVDQUFvQixDQUFBO0lBQ3BCLHVDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFMVyxlQUFlLCtCQUFmLGVBQWUsUUFLMUI7QUFFRDs7O0dBR0c7QUFDSCxNQUFzQixVQUFVO0lBTTlCLFlBQXNCLFVBQWtCLEVBQUUsUUFBcUIsRUFBRTtRQUMvRCw2QkFBNkIsQ0FDM0IsbUJBQW1CLEVBQ25CLENBQUMsRUFDRCxFQUFFLEVBQ0YsS0FBSyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUNyQyxDQUFDO1FBQ0YsNkJBQTZCLENBQzNCLG9CQUFvQixFQUNwQixDQUFDLEVBQ0QsQ0FBQyxFQUNELEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUNOLENBQUM7UUFDRixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENB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RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFO1lBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHO1lBQ3RDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRTtZQUN0RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRTtTQUNqRSxDQUFDO0lBQ0osQ0FBQzs7QUE5QkgsZ0NBK0JDOzs7QUFFRDs7R0FFRztBQUNILFNBQVMsaUNBQWlDLENBQ3hDLElBQVksRUFDWixHQUFXLEVBQ1gsR0FBVyxFQUNYLFFBQW1CO0lBRW5CLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzNCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLDRCQUE0QixHQUFHLFFBQVEsR0FBRyxrQ0FBa0MsS0FBSyxHQUFHLENBQzVGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQvbGliL29yaWdpbi50c1xuXG5pbXBvcnQgeyBjbG91ZGZyb250RGlzdHJpYnV0aW9uIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9cIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiLi4vc3RvcmFnZVwiO1xuXG4vL1RPRE86IEFkZCBzdXBwb3J0IGZvciBmYWlsb3ZlciBjb25maWd1cmF0aW9uIHVzZWQgZm9yIE9yaWdpbiBHcm91cHNcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb25jZXB0IG9mIGEgQ2xvdWRGcm9udCBPcmlnaW4uXG4gKiBZb3UgcHJvdmlkZSBvbmUgb3IgbW9yZSBvcmlnaW5zIHdoZW4gY3JlYXRpbmcgYSBEaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU9yaWdpbiB7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgZ2l2ZW4gT3JpZ2luIGlzIGFkZGVkXG4gICAqIChmb3IgdGhlIGZpcnN0IHRpbWUpIHRvIGEgRGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVuZGVyKGlkOiBzdHJpbmcpOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYW4gT3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgQ2xvdWRGcm9udCB3YWl0cyB3aGVuIHRyeWluZyB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW4uXG4gICAqIFZhbGlkIHZhbHVlcyBhcmUgMS0xMCBzZWNvbmRzLCBpbmNsdXNpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMTApXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uVGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgQ2xvdWRGcm9udCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW47IHZhbGlkIHZhbHVlcyBhcmUgMSwgMiwgb3IgMyBhdHRlbXB0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbkF0dGVtcHRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgSFRUUCBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcyB0aGF0IENsb3VkRnJvbnQgYWRkcyB0byByZXF1ZXN0cyBpdCBzZW5kcyB0byB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYW4gT3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpblByb3BzIGV4dGVuZHMgT3JpZ2luT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBwYXRoIHRoYXQgQ2xvdWRGcm9udCBhcHBlbmRzIHRvIHRoZSBvcmlnaW4gZG9tYWluIG5hbWUgd2hlbiBDbG91ZEZyb250IHJlcXVlc3RzIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luLlxuICAgKiBNdXN0IGJlZ2luLCBidXQgbm90IGVuZCwgd2l0aCAnLycgKGUuZy4sICcvcHJvZHVjdGlvbi9pbWFnZXMnKS5cbiAgICpcbiAgICogQGRlZmF1bHQgJy8nXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5QYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hhdCBwcm90b2NvbHMgQ2xvdWRGcm9udCB3aWxsIHVzZSB0byBjb25uZWN0IHRvIGFuIG9yaWdpbi5cbiAqL1xuZXhwb3J0IGVudW0gT3JpZ2luUHJvdG9jb2xQb2xpY3kge1xuICAvKiogQ29ubmVjdCBvbiBIVFRQIG9ubHkgKi9cbiAgSFRUUF9PTkxZID0gXCJodHRwLW9ubHlcIixcbiAgLyoqIENvbm5lY3Qgd2l0aCB0aGUgc2FtZSBwcm90b2NvbCBhcyB0aGUgdmlld2VyICovXG4gIE1BVENIX1ZJRVdFUiA9IFwibWF0Y2gtdmlld2VyXCIsXG4gIC8qKiBDb25uZWN0IG9uIEhUVFBTIG9ubHkgKi9cbiAgSFRUUFNfT05MWSA9IFwiaHR0cHMtb25seVwiLFxufVxuXG5leHBvcnQgZW51bSBPcmlnaW5Tc2xQb2xpY3kge1xuICBTU0xfVjMgPSBcIlNTTHYzXCIsXG4gIFRMU19WMSA9IFwiVExTdjFcIixcbiAgVExTX1YxXzEgPSBcIlRMU3YxLjFcIixcbiAgVExTX1YxXzIgPSBcIlRMU3YxLjJcIixcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlzdHJpYnV0aW9uIG9yaWdpbiwgdGhhdCBkZXNjcmliZXMgdGhlIEFtYXpvbiBTMyBidWNrZXQsIEhUVFAgc2VydmVyIChmb3IgZXhhbXBsZSwgYSB3ZWIgc2VydmVyKSxcbiAqIEFtYXpvbiBNZWRpYVN0b3JlLCBvciBvdGhlciBzZXJ2ZXIgZnJvbSB3aGljaCBDbG91ZEZyb250IGdldHMgeW91ciBmaWxlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9yaWdpbkJhc2UgaW1wbGVtZW50cyBJT3JpZ2luIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JpZ2luUGF0aD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uVGltZW91dD86IER1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25BdHRlbXB0cz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGRvbWFpbk5hbWU6IHN0cmluZywgcHJvcHM6IE9yaWdpblByb3BzID0ge30pIHtcbiAgICB2YWxpZGF0ZUludEluUmFuZ2VPclVuZGVmaW5lZChcbiAgICAgIFwiY29ubmVjdGlvblRpbWVvdXRcIixcbiAgICAgIDEsXG4gICAgICAxMCxcbiAgICAgIHByb3BzLmNvbm5lY3Rpb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICApO1xuICAgIHZhbGlkYXRlSW50SW5SYW5nZU9yVW5kZWZpbmVkKFxuICAgICAgXCJjb25uZWN0aW9uQXR0ZW1wdHNcIixcbiAgICAgIDEsXG4gICAgICAzLFxuICAgICAgcHJvcHMuY29ubmVjdGlvbkF0dGVtcHRzLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICB2YWxpZGF0ZUN1c3RvbUhlYWRlcnMocHJvcHMuY3VzdG9tSGVhZGVycyk7XG5cbiAgICB0aGlzLmRvbWFpbk5hbWUgPSBkb21haW5OYW1lO1xuICAgIHRoaXMub3JpZ2luUGF0aCA9IHRoaXMudmFsaWRhdGVPcmlnaW5QYXRoKHByb3BzLm9yaWdpblBhdGgpO1xuICAgIHRoaXMuY29ubmVjdGlvblRpbWVvdXQgPSBwcm9wcy5jb25uZWN0aW9uVGltZW91dDtcbiAgICB0aGlzLmNvbm5lY3Rpb25BdHRlbXB0cyA9IHByb3BzLmNvbm5lY3Rpb25BdHRlbXB0cztcbiAgICB0aGlzLmN1c3RvbUhlYWRlcnMgPSBwcm9wcy5jdXN0b21IZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBEaXN0cmlidXRpb24gdG8gcmVuZGVyIHRoZSBvcmlnaW4uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKFxuICAgIG9yaWdpbklkOiBzdHJpbmcsXG4gICk6IGNsb3VkZnJvbnREaXN0cmlidXRpb24uQ2xvdWRmcm9udERpc3RyaWJ1dGlvbk9yaWdpbiB7XG4gICAgY29uc3QgczNPcmlnaW5Db25maWcgPSB0aGlzLnJlbmRlclMzT3JpZ2luQ29uZmlnKCk7XG4gICAgY29uc3QgY3VzdG9tT3JpZ2luQ29uZmlnID0gdGhpcy5yZW5kZXJDdXN0b21PcmlnaW5Db25maWcoKTtcblxuICAgIGlmICghczNPcmlnaW5Db25maWcgJiYgIWN1c3RvbU9yaWdpbkNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlN1YmNsYXNzIG11c3Qgb3ZlcnJpZGUgYW5kIHByb3ZpZGUgZWl0aGVyIHMzT3JpZ2luQ29uZmlnIG9yIGN1c3RvbU9yaWdpbkNvbmZpZ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3JpZ2luSWQsXG4gICAgICBkb21haW5OYW1lOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgICBvcmlnaW5QYXRoOiB0aGlzLm9yaWdpblBhdGgsXG4gICAgICBjb25uZWN0aW9uQXR0ZW1wdHM6IHRoaXMuY29ubmVjdGlvbkF0dGVtcHRzLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IHRoaXMuY29ubmVjdGlvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgY3VzdG9tSGVhZGVyOiB0aGlzLnJlbmRlckN1c3RvbUhlYWRlcnMoKSxcbiAgICAgIHMzT3JpZ2luQ29uZmlnLFxuICAgICAgY3VzdG9tT3JpZ2luQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvLyBPdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzIHRvIHByb3ZpZGUgUzMgb3JpZ2luIGNvbmZpZy5cbiAgcHJvdGVjdGVkIHJlbmRlclMzT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5TM09yaWdpbkNvbmZpZ1xuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGRlbiBieSBzdWItY2xhc3NlcyB0byBwcm92aWRlIGN1c3RvbSBvcmlnaW4gY29uZmlnLlxuICBwcm90ZWN0ZWQgcmVuZGVyQ3VzdG9tT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5DdXN0b21PcmlnaW5Db25maWdcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ3VzdG9tSGVhZGVycygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luQ3VzdG9tSGVhZGVyW11cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY3VzdG9tSGVhZGVycyB8fFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21IZWFkZXJzKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbUhlYWRlcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcGF0aCBpcyBkZWZpbmVkLCBpdCBtdXN0IHN0YXJ0IHdpdGggYSAnLycgYW5kIG5vdCBlbmQgd2l0aCBhICcvJy5cbiAgICogVGhpcyBtZXRob2QgdGFrZXMgaW4gdGhlIG9yaWdpblBhdGgsIGFuZCByZXR1cm5zIGl0IGJhY2sgKGlmIHVuZGVmaW5lZCkgb3IgYWRkcy9yZW1vdmVzIHRoZSAnLycgYXMgYXBwcm9wcmlhdGUuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlT3JpZ2luUGF0aChvcmlnaW5QYXRoPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG9yaWdpblBhdGgpKSB7XG4gICAgICByZXR1cm4gb3JpZ2luUGF0aDtcbiAgICB9XG4gICAgaWYgKG9yaWdpblBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHBhdGggPSBvcmlnaW5QYXRoO1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgcGF0aCA9IFwiL1wiICsgcGF0aDtcbiAgICB9XG4gICAgaWYgKHBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGEgdmFsdWUgaXMgZGVmaW5lZCBhbmQgbm90IGFuIGludGVnZXIgb3Igbm90IGluIGEgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSW50SW5SYW5nZU9yVW5kZWZpbmVkKFxuICBuYW1lOiBzdHJpbmcsXG4gIG1pbjogbnVtYmVyLFxuICBtYXg6IG51bWJlcixcbiAgdmFsdWU/OiBudW1iZXIsXG4gIGlzRHVyYXRpb246IGJvb2xlYW4gPSB0cnVlLFxuKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICBjb25zdCBzZWNvbmRzID0gaXNEdXJhdGlvbiA/IFwiIHNlY29uZHNcIiA6IFwiXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bmFtZX06IE11c3QgYmUgYW4gaW50IGJldHdlZW4gJHttaW59IGFuZCAke21heH0ke3NlY29uZHN9IChpbmNsdXNpdmUpOyByZWNlaXZlZCAke3ZhbHVlfS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgY3VzdG9tIGhlYWRlciBhc3NpZ25tZW50IGlzIHByb2hpYml0ZWQgYnkgQ2xvdWRGcm9udC5cbiAqIEBsaW5rOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvYWRkLW9yaWdpbi1jdXN0b20taGVhZGVycy5odG1sI2FkZC1vcmlnaW4tY3VzdG9tLWhlYWRlcnMtZGVueWxpc3RcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDdXN0b21IZWFkZXJzKGN1c3RvbUhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGlmICghY3VzdG9tSGVhZGVycyB8fCBPYmplY3QuZW50cmllcyhjdXN0b21IZWFkZXJzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3VzdG9tSGVhZGVyS2V5cyA9IE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlcnMpO1xuICBjb25zdCBwcm9oaWJpdGVkSGVhZGVyS2V5cyA9IFtcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbm5lY3Rpb25cIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb29raWVcIixcbiAgICBcIkhvc3RcIixcbiAgICBcIklmLU1hdGNoXCIsXG4gICAgXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgIFwiSWYtUmFuZ2VcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIk1heC1Gb3J3YXJkc1wiLFxuICAgIFwiUHJhZ21hXCIsXG4gICAgXCJQcm94eS1BdXRob3JpemF0aW9uXCIsXG4gICAgXCJQcm94eS1Db25uZWN0aW9uXCIsXG4gICAgXCJSYW5nZVwiLFxuICAgIFwiUmVxdWVzdC1SYW5nZVwiLFxuICAgIFwiVEVcIixcbiAgICBcIlRyYWlsZXJcIixcbiAgICBcIlRyYW5zZmVyLUVuY29kaW5nXCIsXG4gICAgXCJVcGdyYWRlXCIsXG4gICAgXCJWaWFcIixcbiAgICBcIlgtUmVhbC1JcFwiLFxuICBdO1xuICBjb25zdCBwcm9oaWJpdGVkSGVhZGVyS2V5UHJlZml4ZXMgPSBbXCJYLUFtei1cIiwgXCJYLUVkZ2UtXCJdO1xuXG4gIGNvbnN0IHByb2hpYml0ZWRIZWFkZXJzS2V5c01hdGNoZXMgPSBjdXN0b21IZWFkZXJLZXlzLmZpbHRlcigoY3VzdG9tS2V5KSA9PiB7XG4gICAgcmV0dXJuIHByb2hpYml0ZWRIZWFkZXJLZXlzXG4gICAgICAubWFwKChwcm9oaWJpdGVkS2V5KSA9PiBwcm9oaWJpdGVkS2V5LnRvTG93ZXJDYXNlKCkpXG4gICAgICAuaW5jbHVkZXMoY3VzdG9tS2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcbiAgY29uc3QgcHJvaGliaXRlZEhlYWRlclByZWZpeE1hdGNoZXMgPSBjdXN0b21IZWFkZXJLZXlzLmZpbHRlcigoY3VzdG9tS2V5KSA9PiB7XG4gICAgcmV0dXJuIHByb2hpYml0ZWRIZWFkZXJLZXlQcmVmaXhlcy5zb21lKChwcm9oaWJpdGVkS2V5UHJlZml4KSA9PlxuICAgICAgY3VzdG9tS2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcm9oaWJpdGVkS2V5UHJlZml4LnRvTG93ZXJDYXNlKCkpLFxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChwcm9oaWJpdGVkSGVhZGVyc0tleXNNYXRjaGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgZm9sbG93aW5nIGhlYWRlcnMgY2Fubm90IGJlIGNvbmZpZ3VyZWQgYXMgY3VzdG9tIG9yaWdpbiBoZWFkZXJzOiAke3Byb2hpYml0ZWRIZWFkZXJzS2V5c01hdGNoZXMuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfVxuICBpZiAocHJvaGliaXRlZEhlYWRlclByZWZpeE1hdGNoZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBmb2xsb3dpbmcgaGVhZGVycyBjYW5ub3QgYmUgdXNlZCBhcyBwcmVmaXhlcyBmb3IgY3VzdG9tIG9yaWdpbiBoZWFkZXJzOiAke3Byb2hpYml0ZWRIZWFkZXJQcmVmaXhNYXRjaGVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zL2xpYi9zMy1vcmlnaW4udHNcblxuLyoqXG4gKiBBbiBPcmlnaW4gdGhhdCBpcyBiYWNrZWQgYnkgYW4gUzMgYnVja2V0LlxuICpcbiAqIElmIHRoZSBidWNrZXQgaXMgY29uZmlndXJlZCBmb3Igd2Vic2l0ZSBob3N0aW5nLCB0aGlzIG9yaWdpbiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBidWNrZXQgYXMgYW5cbiAqIEhUVFAgc2VydmVyIG9yaWdpbiBhbmQgd2lsbCB1c2UgdGhlIGJ1Y2tldCdzIGNvbmZpZ3VyZWQgd2Vic2l0ZSByZWRpcmVjdHMgYW5kIGVycm9yIGhhbmRsaW5nLiBPdGhlcndpc2UsXG4gKiB0aGUgb3JpZ2luIGlzIGNyZWF0ZWQgYXMgYSBidWNrZXQgb3JpZ2luIGFuZCB3aWxsIHVzZSBDbG91ZEZyb250J3MgcmVkaXJlY3QgYW5kIGVycm9yIGhhbmRsaW5nLlxuICovXG5leHBvcnQgY2xhc3MgUzNPcmlnaW4gaW1wbGVtZW50cyBJT3JpZ2luIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmlnaW46IElPcmlnaW47XG5cbiAgY29uc3RydWN0b3IoYnVja2V0OiBJQnVja2V0LCBwcm9wczogT3JpZ2luUHJvcHMgPSB7fSkge1xuICAgIHRoaXMub3JpZ2luID0gYnVja2V0LmlzV2Vic2l0ZSgpXG4gICAgICA/IG5ldyBIdHRwT3JpZ2luKGJ1Y2tldC5idWNrZXRPdXRwdXRzLndlYnNpdGVEb21haW5OYW1lLCB7XG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBfT05MWSwgLy8gUzMgb25seSBzdXBwb3J0cyBIVFRQIGZvciB3ZWJzaXRlIGJ1Y2tldHNcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IFMzQnVja2V0T3JpZ2luKGJ1Y2tldCwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihcbiAgICBvcmlnaW5JZDogc3RyaW5nLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW4ge1xuICAgIHJldHVybiB0aGlzLm9yaWdpbi5yZW5kZXIob3JpZ2luSWQpO1xuICB9XG59XG5cbi8qKlxuICogQW4gT3JpZ2luIHNwZWNpZmljIHRvIGEgUzMgYnVja2V0IChub3QgY29uZmlndXJlZCBmb3Igd2Vic2l0ZSBob3N0aW5nKS5cbiAqXG4gKiBDb250YWlucyBhZGRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBidWNrZXQgcGVybWlzc2lvbnMgYW5kIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdGllcy5cbiAqL1xuY2xhc3MgUzNCdWNrZXRPcmlnaW4gZXh0ZW5kcyBPcmlnaW5CYXNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IElCdWNrZXQsXG4gICAgcHJvcHM6IE9yaWdpblByb3BzLFxuICApIHtcbiAgICBzdXBlcihidWNrZXQuYnVja2V0T3V0cHV0cy5yZWdpb25hbERvbWFpbk5hbWUsIHByb3BzKTtcbiAgICBpZiAoIXRoaXMuYnVja2V0LmJ1Y2tldE91dHB1dHMub3JpZ2luQWNjZXNzSWRlbnRpdHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgYnVja2V0IG11c3QgaGF2ZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGJlIHVzZWQgYXMgYSBDbG91ZEZyb250IG9yaWdpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclMzT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5TM09yaWdpbkNvbmZpZ1xuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gY29uc3RydWN0b3IgdGhyb3dzIGlmIHVuZGVmaW5lZCwgc28gdGhpcyBpcyBzYWZlP1xuICAgICAgb3JpZ2luQWNjZXNzSWRlbnRpdHk6IHRoaXMuYnVja2V0LmJ1Y2tldE91dHB1dHMub3JpZ2luQWNjZXNzSWRlbnRpdHkhLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBPcmlnaW4gYmFja2VkIGJ5IGFuIFMzIHdlYnNpdGUtY29uZmlndXJlZCBidWNrZXQsIGxvYWQgYmFsYW5jZXIsIG9yIGN1c3RvbSBIVFRQIHNlcnZlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luUHJvcHMgZXh0ZW5kcyBPcmlnaW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHByb3RvY29sIChIVFRQIG9yIEhUVFBTKSB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFlcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sUG9saWN5PzogT3JpZ2luUHJvdG9jb2xQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgdmVyc2lvbnMgdG8gdXNlIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCBPcmlnaW5Tc2xQb2xpY3kuVExTX1YxXzJcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblNzbFByb3RvY29scz86IE9yaWdpblNzbFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCBwb3J0IHRoYXQgQ2xvdWRGcm9udCB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgODBcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IDQ0M1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLCBhbHNvIGtub3duIGFzIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dC5cbiAgICogVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gMSB0byAxODAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyBhcmUgcG9zc2libGUgb25seSBhZnRlciBhIGxpbWl0IGluY3JlYXNlIHJlcXVlc3QgZm9yIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dCBxdW90YVxuICAgKiBoYXMgYmVlbiBhcHByb3ZlZCBpbiB0aGUgdGFyZ2V0IGFjY291bnQ7IG90aGVyd2lzZSwgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYXQgZGVwbG95IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzApXG4gICAqL1xuICByZWFkb25seSByZWFkVGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi5cbiAgICogVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gMSB0byAxODAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyBhcmUgcG9zc2libGUgb25seSBhZnRlciBhIGxpbWl0IGluY3JlYXNlIHJlcXVlc3QgZm9yIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dCBxdW90YVxuICAgKiBoYXMgYmVlbiBhcHByb3ZlZCBpbiB0aGUgdGFyZ2V0IGFjY291bnQ7IG90aGVyd2lzZSwgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYXQgZGVwbG95IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoNSlcbiAgICovXG4gIHJlYWRvbmx5IGtlZXBhbGl2ZVRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBbiBPcmlnaW4gZm9yIGFuIEhUVFAgc2VydmVyIG9yIFMzIGJ1Y2tldCBjb25maWd1cmVkIGZvciB3ZWJzaXRlIGhvc3RpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwT3JpZ2luIGV4dGVuZHMgT3JpZ2luQmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGRvbWFpbk5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBIdHRwT3JpZ2luUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoZG9tYWluTmFtZSwgcHJvcHMpO1xuXG4gICAgdmFsaWRhdGVTZWNvbmRzSW5SYW5nZU9yVW5kZWZpbmVkKFwicmVhZFRpbWVvdXRcIiwgMSwgMTgwLCBwcm9wcy5yZWFkVGltZW91dCk7XG4gICAgdmFsaWRhdGVTZWNvbmRzSW5SYW5nZU9yVW5kZWZpbmVkKFxuICAgICAgXCJrZWVwYWxpdmVUaW1lb3V0XCIsXG4gICAgICAxLFxuICAgICAgMTgwLFxuICAgICAgcHJvcHMua2VlcGFsaXZlVGltZW91dCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckN1c3RvbU9yaWdpbkNvbmZpZygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luQ3VzdG9tT3JpZ2luQ29uZmlnXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB7XG4gICAgICBvcmlnaW5Tc2xQcm90b2NvbHM6IHRoaXMucHJvcHMub3JpZ2luU3NsUHJvdG9jb2xzID8/IFtcbiAgICAgICAgT3JpZ2luU3NsUG9saWN5LlRMU19WMV8yLFxuICAgICAgXSxcbiAgICAgIG9yaWdpblByb3RvY29sUG9saWN5OlxuICAgICAgICB0aGlzLnByb3BzLnByb3RvY29sUG9saWN5ID8/IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICBodHRwUG9ydDogdGhpcy5wcm9wcy5odHRwUG9ydCA/PyA4MCxcbiAgICAgIGh0dHBzUG9ydDogdGhpcy5wcm9wcy5odHRwc1BvcnQgPz8gNDQzLFxuICAgICAgb3JpZ2luUmVhZFRpbWVvdXQ6IHRoaXMucHJvcHMucmVhZFRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgb3JpZ2luS2VlcGFsaXZlVGltZW91dDogdGhpcy5wcm9wcy5rZWVwYWxpdmVUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGEgZHVyYXRpb24gaXMgZGVmaW5lZCBhbmQgbm90IGFuIGludGVnZXIgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGEgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2Vjb25kc0luUmFuZ2VPclVuZGVmaW5lZChcbiAgbmFtZTogc3RyaW5nLFxuICBtaW46IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4gIGR1cmF0aW9uPzogRHVyYXRpb24sXG4pIHtcbiAgaWYgKGR1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBkdXJhdGlvbi50b1NlY29uZHMoKTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke25hbWV9OiBNdXN0IGJlIGFuIGludCBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9IHNlY29uZHMgKGluY2x1c2l2ZSk7IHJlY2VpdmVkICR7dmFsdWV9LmAsXG4gICAgKTtcbiAgfVxufVxuIl19
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL29yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLGlDQUE4QjtBQTBEOUI7O0dBRUc7QUFDSCxJQUFZLG9CQU9YO0FBUEQsV0FBWSxvQkFBb0I7SUFDOUIsMkJBQTJCO0lBQzNCLCtDQUF1QixDQUFBO0lBQ3ZCLG1EQUFtRDtJQUNuRCxxREFBNkIsQ0FBQTtJQUM3Qiw0QkFBNEI7SUFDNUIsaURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQVBXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBTy9CO0FBRUQsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3pCLG1DQUFnQixDQUFBO0lBQ2hCLG1DQUFnQixDQUFBO0lBQ2hCLHVDQUFvQixDQUFBO0lBQ3BCLHVDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFMVyxlQUFlLCtCQUFmLGVBQWUsUUFLMUI7QUFFRDs7O0dBR0c7QUFDSCxNQUFzQixVQUFVO0lBTTlCLFlBQXNCLFVBQWtCLEVBQUUsUUFBcUIsRUFBRTtRQUMvRCw2QkFBNkIsQ0FDM0IsbUJBQW1CLEVBQ25CLENBQUMsRUFDRCxFQUFFLEVBQ0YsS0FBSyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUNyQyxDQUFDO1FBQ0YsNkJBQTZCLENBQzNCLG9CQUFvQixFQUNwQixDQUFDLEVBQ0QsQ0FBQyxFQUNELEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUNOLENBQUM7UUFDRixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUNYLFFBQWdCO1FBRWhCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFM0QsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FDYixnRkFBZ0YsQ0FDakYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsUUFBUTtZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMzQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFO1lBQ3RELFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDeEMsY0FBYztZQUNkLGtCQUFrQjtTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELHlEQUF5RDtJQUMvQyxvQkFBb0I7UUFHNUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELDZEQUE2RDtJQUNuRCx3QkFBd0I7UUFHaEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQjtRQUd6QixJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDL0MsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0IsQ0FBQyxVQUFtQjtRQUM1QyxJQUFJLGFBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXZHSCxnQ0F3R0M7OztBQUVEOztHQUVHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsSUFBWSxFQUNaLEdBQVcsRUFDWCxHQUFXLEVBQ1gsS0FBYyxFQUNkLGFBQXNCLElBQUk7SUFFMUIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLDRCQUE0QixHQUFHLFFBQVEsR0FBRyxHQUFHLE9BQU8sMEJBQTBCLEtBQUssR0FBRyxDQUM5RixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHFCQUFxQixDQUFDLGFBQXNDO0lBQ25FLElBQUksQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakUsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsTUFBTSxvQkFBb0IsR0FBRztRQUMzQixlQUFlO1FBQ2YsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixRQUFRO1FBQ1IsTUFBTTtRQUNOLFVBQVU7UUFDVixtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLFVBQVU7UUFDVixxQkFBcUI7UUFDckIsY0FBYztRQUNkLFFBQVE7UUFDUixxQkFBcUI7UUFDckIsa0JBQWtCO1FBQ2xCLE9BQU87UUFDUCxlQUFlO1FBQ2YsSUFBSTtRQUNKLFNBQVM7UUFDVCxtQkFBbUI7UUFDbkIsU0FBUztRQUNULEtBQUs7UUFDTCxXQUFXO0tBQ1osQ0FBQztJQUNGLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFMUQsTUFBTSw0QkFBNEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUN6RSxPQUFPLG9CQUFvQjthQUN4QixHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNuRCxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLDZCQUE2QixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQzFFLE9BQU8sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUM5RCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksNEJBQTRCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0VBQXdFLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsSCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksNkJBQTZCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0VBQStFLDZCQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUMxSCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxpSEFBaUg7QUFFakg7Ozs7OztHQU1HO0FBQ0gsTUFBYSxRQUFRO0lBR25CLFlBQVksTUFBZSxFQUFFLFFBQXFCLEVBQUU7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzlCLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRTtnQkFDOUMsY0FBYyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsRUFBRSw0Q0FBNEM7Z0JBQzVGLEdBQUcsS0FBSzthQUNULENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxNQUFNLENBQ1gsUUFBZ0I7UUFFaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxDQUFDOztBQWhCSCw0QkFpQkM7OztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxVQUFVO0lBQ3JDLFlBQ21CLE1BQWUsRUFDaEMsS0FBa0I7UUFFbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFIckMsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUloQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUNiLG1GQUFtRixDQUNwRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFUyxvQkFBb0I7UUFHNUIsT0FBTztZQUNMLG9EQUFvRDtZQUNwRCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxvQkFBcUI7U0FDdEUsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXlERDs7R0FFRztBQUNILE1BQWEsVUFBVyxTQUFRLFVBQVU7SUFDeEMsWUFDRSxVQUFrQixFQUNELFFBQXlCLEVBQUU7UUFFNUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUZSLFVBQUssR0FBTCxLQUFLLENBQXNCO1FBSTVDLGlDQUFpQyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxpQ0FBaUMsQ0FDL0Isa0JBQWtCLEVBQ2xCLENBQUMsRUFDRCxHQUFHLEVBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVTLHdCQUF3QjtRQUdoQyxPQUFPO1lBQ0wsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSTtnQkFDbkQsZUFBZSxDQUFDLFFBQVE7YUFDekI7WUFDRCxvQkFBb0IsRUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksb0JBQW9CLENBQUMsVUFBVTtZQUM5RCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRTtZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksR0FBRztZQUN0QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUU7WUFDdEQsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUU7U0FDakUsQ0FBQztJQUNKLENBQUM7O0FBOUJILGdDQStCQzs7O0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlDQUFpQyxDQUN4QyxJQUFZLEVBQ1osR0FBVyxFQUNYLEdBQVcsRUFDWCxRQUFtQjtJQUVuQixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMzQixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLEdBQUcsSUFBSSw0QkFBNEIsR0FBRyxRQUFRLEdBQUcsa0NBQWtDLEtBQUssR0FBRyxDQUM1RixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250L2xpYi9vcmlnaW4udHNcblxuaW1wb3J0IHsgY2xvdWRmcm9udERpc3RyaWJ1dGlvbiB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcIi4uL3N0b3JhZ2VcIjtcblxuLy9UT0RPOiBBZGQgc3VwcG9ydCBmb3IgZmFpbG92ZXIgY29uZmlndXJhdGlvbiB1c2VkIGZvciBPcmlnaW4gR3JvdXBzXG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29uY2VwdCBvZiBhIENsb3VkRnJvbnQgT3JpZ2luLlxuICogWW91IHByb3ZpZGUgb25lIG9yIG1vcmUgb3JpZ2lucyB3aGVuIGNyZWF0aW5nIGEgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElPcmlnaW4ge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIGdpdmVuIE9yaWdpbiBpcyBhZGRlZFxuICAgKiAoZm9yIHRoZSBmaXJzdCB0aW1lKSB0byBhIERpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlbmRlcihpZDogc3RyaW5nKTogY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIGFuIE9yaWdpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IENsb3VkRnJvbnQgd2FpdHMgd2hlbiB0cnlpbmcgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byB0aGUgb3JpZ2luLlxuICAgKiBWYWxpZCB2YWx1ZXMgYXJlIDEtMTAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDEwKVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IENsb3VkRnJvbnQgYXR0ZW1wdHMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luOyB2YWxpZCB2YWx1ZXMgYXJlIDEsIDIsIG9yIDMgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDNcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25BdHRlbXB0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIEhUVFAgaGVhZGVyIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCBDbG91ZEZyb250IGFkZHMgdG8gcmVxdWVzdHMgaXQgc2VuZHMgdG8gdGhlIG9yaWdpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIE9yaWdpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Qcm9wcyBleHRlbmRzIE9yaWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgcGF0aCB0aGF0IENsb3VkRnJvbnQgYXBwZW5kcyB0byB0aGUgb3JpZ2luIGRvbWFpbiBuYW1lIHdoZW4gQ2xvdWRGcm9udCByZXF1ZXN0cyBjb250ZW50IGZyb20gdGhlIG9yaWdpbi5cbiAgICogTXVzdCBiZWdpbiwgYnV0IG5vdCBlbmQsIHdpdGggJy8nIChlLmcuLCAnL3Byb2R1Y3Rpb24vaW1hZ2VzJykuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcvJ1xuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHdoYXQgcHJvdG9jb2xzIENsb3VkRnJvbnQgd2lsbCB1c2UgdG8gY29ubmVjdCB0byBhbiBvcmlnaW4uXG4gKi9cbmV4cG9ydCBlbnVtIE9yaWdpblByb3RvY29sUG9saWN5IHtcbiAgLyoqIENvbm5lY3Qgb24gSFRUUCBvbmx5ICovXG4gIEhUVFBfT05MWSA9IFwiaHR0cC1vbmx5XCIsXG4gIC8qKiBDb25uZWN0IHdpdGggdGhlIHNhbWUgcHJvdG9jb2wgYXMgdGhlIHZpZXdlciAqL1xuICBNQVRDSF9WSUVXRVIgPSBcIm1hdGNoLXZpZXdlclwiLFxuICAvKiogQ29ubmVjdCBvbiBIVFRQUyBvbmx5ICovXG4gIEhUVFBTX09OTFkgPSBcImh0dHBzLW9ubHlcIixcbn1cblxuZXhwb3J0IGVudW0gT3JpZ2luU3NsUG9saWN5IHtcbiAgU1NMX1YzID0gXCJTU0x2M1wiLFxuICBUTFNfVjEgPSBcIlRMU3YxXCIsXG4gIFRMU19WMV8xID0gXCJUTFN2MS4xXCIsXG4gIFRMU19WMV8yID0gXCJUTFN2MS4yXCIsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRpc3RyaWJ1dGlvbiBvcmlnaW4sIHRoYXQgZGVzY3JpYmVzIHRoZSBBbWF6b24gUzMgYnVja2V0LCBIVFRQIHNlcnZlciAoZm9yIGV4YW1wbGUsIGEgd2ViIHNlcnZlciksXG4gKiBBbWF6b24gTWVkaWFTdG9yZSwgb3Igb3RoZXIgc2VydmVyIGZyb20gd2hpY2ggQ2xvdWRGcm9udCBnZXRzIHlvdXIgZmlsZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcmlnaW5CYXNlIGltcGxlbWVudHMgSU9yaWdpbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yaWdpblBhdGg/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uQXR0ZW1wdHM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihkb21haW5OYW1lOiBzdHJpbmcsIHByb3BzOiBPcmlnaW5Qcm9wcyA9IHt9KSB7XG4gICAgdmFsaWRhdGVJbnRJblJhbmdlT3JVbmRlZmluZWQoXG4gICAgICBcImNvbm5lY3Rpb25UaW1lb3V0XCIsXG4gICAgICAxLFxuICAgICAgMTAsXG4gICAgICBwcm9wcy5jb25uZWN0aW9uVGltZW91dD8udG9TZWNvbmRzKCksXG4gICAgKTtcbiAgICB2YWxpZGF0ZUludEluUmFuZ2VPclVuZGVmaW5lZChcbiAgICAgIFwiY29ubmVjdGlvbkF0dGVtcHRzXCIsXG4gICAgICAxLFxuICAgICAgMyxcbiAgICAgIHByb3BzLmNvbm5lY3Rpb25BdHRlbXB0cyxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgdmFsaWRhdGVDdXN0b21IZWFkZXJzKHByb3BzLmN1c3RvbUhlYWRlcnMpO1xuXG4gICAgdGhpcy5kb21haW5OYW1lID0gZG9tYWluTmFtZTtcbiAgICB0aGlzLm9yaWdpblBhdGggPSB0aGlzLnZhbGlkYXRlT3JpZ2luUGF0aChwcm9wcy5vcmlnaW5QYXRoKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25UaW1lb3V0ID0gcHJvcHMuY29ubmVjdGlvblRpbWVvdXQ7XG4gICAgdGhpcy5jb25uZWN0aW9uQXR0ZW1wdHMgPSBwcm9wcy5jb25uZWN0aW9uQXR0ZW1wdHM7XG4gICAgdGhpcy5jdXN0b21IZWFkZXJzID0gcHJvcHMuY3VzdG9tSGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgRGlzdHJpYnV0aW9uIHRvIHJlbmRlciB0aGUgb3JpZ2luLlxuICAgKi9cbiAgcHVibGljIHJlbmRlcihcbiAgICBvcmlnaW5JZDogc3RyaW5nLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW4ge1xuICAgIGNvbnN0IHMzT3JpZ2luQ29uZmlnID0gdGhpcy5yZW5kZXJTM09yaWdpbkNvbmZpZygpO1xuICAgIGNvbnN0IGN1c3RvbU9yaWdpbkNvbmZpZyA9IHRoaXMucmVuZGVyQ3VzdG9tT3JpZ2luQ29uZmlnKCk7XG5cbiAgICBpZiAoIXMzT3JpZ2luQ29uZmlnICYmICFjdXN0b21PcmlnaW5Db25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJTdWJjbGFzcyBtdXN0IG92ZXJyaWRlIGFuZCBwcm92aWRlIGVpdGhlciBzM09yaWdpbkNvbmZpZyBvciBjdXN0b21PcmlnaW5Db25maWdcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9yaWdpbklkLFxuICAgICAgZG9tYWluTmFtZTogdGhpcy5kb21haW5OYW1lLFxuICAgICAgb3JpZ2luUGF0aDogdGhpcy5vcmlnaW5QYXRoLFxuICAgICAgY29ubmVjdGlvbkF0dGVtcHRzOiB0aGlzLmNvbm5lY3Rpb25BdHRlbXB0cyxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiB0aGlzLmNvbm5lY3Rpb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIGN1c3RvbUhlYWRlcjogdGhpcy5yZW5kZXJDdXN0b21IZWFkZXJzKCksXG4gICAgICBzM09yaWdpbkNvbmZpZyxcbiAgICAgIGN1c3RvbU9yaWdpbkNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgLy8gT3ZlcnJpZGRlbiBieSBzdWItY2xhc3NlcyB0byBwcm92aWRlIFMzIG9yaWdpbiBjb25maWcuXG4gIHByb3RlY3RlZCByZW5kZXJTM09yaWdpbkNvbmZpZygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luUzNPcmlnaW5Db25maWdcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIE92ZXJyaWRkZW4gYnkgc3ViLWNsYXNzZXMgdG8gcHJvdmlkZSBjdXN0b20gb3JpZ2luIGNvbmZpZy5cbiAgcHJvdGVjdGVkIHJlbmRlckN1c3RvbU9yaWdpbkNvbmZpZygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luQ3VzdG9tT3JpZ2luQ29uZmlnXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckN1c3RvbUhlYWRlcnMoKTpcbiAgICB8IGNsb3VkZnJvbnREaXN0cmlidXRpb24uQ2xvdWRmcm9udERpc3RyaWJ1dGlvbk9yaWdpbkN1c3RvbUhlYWRlcltdXG4gICAgfCB1bmRlZmluZWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmN1c3RvbUhlYWRlcnMgfHxcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tSGVhZGVycykubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21IZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiB7IG5hbWUsIHZhbHVlIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHBhdGggaXMgZGVmaW5lZCwgaXQgbXVzdCBzdGFydCB3aXRoIGEgJy8nIGFuZCBub3QgZW5kIHdpdGggYSAnLycuXG4gICAqIFRoaXMgbWV0aG9kIHRha2VzIGluIHRoZSBvcmlnaW5QYXRoLCBhbmQgcmV0dXJucyBpdCBiYWNrIChpZiB1bmRlZmluZWQpIG9yIGFkZHMvcmVtb3ZlcyB0aGUgJy8nIGFzIGFwcHJvcHJpYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9yaWdpblBhdGgob3JpZ2luUGF0aD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChvcmlnaW5QYXRoKSkge1xuICAgICAgcmV0dXJuIG9yaWdpblBhdGg7XG4gICAgfVxuICAgIGlmIChvcmlnaW5QYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBwYXRoID0gb3JpZ2luUGF0aDtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIHBhdGggPSBcIi9cIiArIHBhdGg7XG4gICAgfVxuICAgIGlmIChwYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciBpZiBhIHZhbHVlIGlzIGRlZmluZWQgYW5kIG5vdCBhbiBpbnRlZ2VyIG9yIG5vdCBpbiBhIHJhbmdlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludEluUmFuZ2VPclVuZGVmaW5lZChcbiAgbmFtZTogc3RyaW5nLFxuICBtaW46IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4gIHZhbHVlPzogbnVtYmVyLFxuICBpc0R1cmF0aW9uOiBib29sZWFuID0gdHJ1ZSxcbikge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgY29uc3Qgc2Vjb25kcyA9IGlzRHVyYXRpb24gPyBcIiBzZWNvbmRzXCIgOiBcIlwiO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke25hbWV9OiBNdXN0IGJlIGFuIGludCBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9JHtzZWNvbmRzfSAoaW5jbHVzaXZlKTsgcmVjZWl2ZWQgJHt2YWx1ZX0uYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGN1c3RvbSBoZWFkZXIgYXNzaWdubWVudCBpcyBwcm9oaWJpdGVkIGJ5IENsb3VkRnJvbnQuXG4gKiBAbGluazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2FkZC1vcmlnaW4tY3VzdG9tLWhlYWRlcnMuaHRtbCNhZGQtb3JpZ2luLWN1c3RvbS1oZWFkZXJzLWRlbnlsaXN0XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ3VzdG9tSGVhZGVycyhjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICBpZiAoIWN1c3RvbUhlYWRlcnMgfHwgT2JqZWN0LmVudHJpZXMoY3VzdG9tSGVhZGVycykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGN1c3RvbUhlYWRlcktleXMgPSBPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJzKTtcbiAgY29uc3QgcHJvaGliaXRlZEhlYWRlcktleXMgPSBbXG4gICAgXCJDYWNoZS1Db250cm9sXCIsXG4gICAgXCJDb25uZWN0aW9uXCIsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiLFxuICAgIFwiQ29va2llXCIsXG4gICAgXCJIb3N0XCIsXG4gICAgXCJJZi1NYXRjaFwiLFxuICAgIFwiSWYtTW9kaWZpZWQtU2luY2VcIixcbiAgICBcIklmLU5vbmUtTWF0Y2hcIixcbiAgICBcIklmLVJhbmdlXCIsXG4gICAgXCJJZi1Vbm1vZGlmaWVkLVNpbmNlXCIsXG4gICAgXCJNYXgtRm9yd2FyZHNcIixcbiAgICBcIlByYWdtYVwiLFxuICAgIFwiUHJveHktQXV0aG9yaXphdGlvblwiLFxuICAgIFwiUHJveHktQ29ubmVjdGlvblwiLFxuICAgIFwiUmFuZ2VcIixcbiAgICBcIlJlcXVlc3QtUmFuZ2VcIixcbiAgICBcIlRFXCIsXG4gICAgXCJUcmFpbGVyXCIsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiLFxuICAgIFwiVXBncmFkZVwiLFxuICAgIFwiVmlhXCIsXG4gICAgXCJYLVJlYWwtSXBcIixcbiAgXTtcbiAgY29uc3QgcHJvaGliaXRlZEhlYWRlcktleVByZWZpeGVzID0gW1wiWC1BbXotXCIsIFwiWC1FZGdlLVwiXTtcblxuICBjb25zdCBwcm9oaWJpdGVkSGVhZGVyc0tleXNNYXRjaGVzID0gY3VzdG9tSGVhZGVyS2V5cy5maWx0ZXIoKGN1c3RvbUtleSkgPT4ge1xuICAgIHJldHVybiBwcm9oaWJpdGVkSGVhZGVyS2V5c1xuICAgICAgLm1hcCgocHJvaGliaXRlZEtleSkgPT4gcHJvaGliaXRlZEtleS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmluY2x1ZGVzKGN1c3RvbUtleS50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG4gIGNvbnN0IHByb2hpYml0ZWRIZWFkZXJQcmVmaXhNYXRjaGVzID0gY3VzdG9tSGVhZGVyS2V5cy5maWx0ZXIoKGN1c3RvbUtleSkgPT4ge1xuICAgIHJldHVybiBwcm9oaWJpdGVkSGVhZGVyS2V5UHJlZml4ZXMuc29tZSgocHJvaGliaXRlZEtleVByZWZpeCkgPT5cbiAgICAgIGN1c3RvbUtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJvaGliaXRlZEtleVByZWZpeC50b0xvd2VyQ2FzZSgpKSxcbiAgICApO1xuICB9KTtcblxuICBpZiAocHJvaGliaXRlZEhlYWRlcnNLZXlzTWF0Y2hlcy5sZW5ndGggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIGZvbGxvd2luZyBoZWFkZXJzIGNhbm5vdCBiZSBjb25maWd1cmVkIGFzIGN1c3RvbSBvcmlnaW4gaGVhZGVyczogJHtwcm9oaWJpdGVkSGVhZGVyc0tleXNNYXRjaGVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cbiAgaWYgKHByb2hpYml0ZWRIZWFkZXJQcmVmaXhNYXRjaGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgZm9sbG93aW5nIGhlYWRlcnMgY2Fubm90IGJlIHVzZWQgYXMgcHJlZml4ZXMgZm9yIGN1c3RvbSBvcmlnaW4gaGVhZGVyczogJHtwcm9oaWJpdGVkSGVhZGVyUHJlZml4TWF0Y2hlcy5qb2luKFwiLCBcIil9YCxcbiAgICApO1xuICB9XG59XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2lucy9saWIvczMtb3JpZ2luLnRzXG5cbi8qKlxuICogQW4gT3JpZ2luIHRoYXQgaXMgYmFja2VkIGJ5IGFuIFMzIGJ1Y2tldC5cbiAqXG4gKiBJZiB0aGUgYnVja2V0IGlzIGNvbmZpZ3VyZWQgZm9yIHdlYnNpdGUgaG9zdGluZywgdGhpcyBvcmlnaW4gd2lsbCBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgYnVja2V0IGFzIGFuXG4gKiBIVFRQIHNlcnZlciBvcmlnaW4gYW5kIHdpbGwgdXNlIHRoZSBidWNrZXQncyBjb25maWd1cmVkIHdlYnNpdGUgcmVkaXJlY3RzIGFuZCBlcnJvciBoYW5kbGluZy4gT3RoZXJ3aXNlLFxuICogdGhlIG9yaWdpbiBpcyBjcmVhdGVkIGFzIGEgYnVja2V0IG9yaWdpbiBhbmQgd2lsbCB1c2UgQ2xvdWRGcm9udCdzIHJlZGlyZWN0IGFuZCBlcnJvciBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIFMzT3JpZ2luIGltcGxlbWVudHMgSU9yaWdpbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JpZ2luOiBJT3JpZ2luO1xuXG4gIGNvbnN0cnVjdG9yKGJ1Y2tldDogSUJ1Y2tldCwgcHJvcHM6IE9yaWdpblByb3BzID0ge30pIHtcbiAgICB0aGlzLm9yaWdpbiA9IGJ1Y2tldC5pc1dlYnNpdGUoKVxuICAgICAgPyBuZXcgSHR0cE9yaWdpbihidWNrZXQuYnVja2V0T3V0cHV0cy53ZWJzaXRlVXJsLCB7XG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBfT05MWSwgLy8gUzMgb25seSBzdXBwb3J0cyBIVFRQIGZvciB3ZWJzaXRlIGJ1Y2tldHNcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IFMzQnVja2V0T3JpZ2luKGJ1Y2tldCwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihcbiAgICBvcmlnaW5JZDogc3RyaW5nLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW4ge1xuICAgIHJldHVybiB0aGlzLm9yaWdpbi5yZW5kZXIob3JpZ2luSWQpO1xuICB9XG59XG5cbi8qKlxuICogQW4gT3JpZ2luIHNwZWNpZmljIHRvIGEgUzMgYnVja2V0IChub3QgY29uZmlndXJlZCBmb3Igd2Vic2l0ZSBob3N0aW5nKS5cbiAqXG4gKiBDb250YWlucyBhZGRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBidWNrZXQgcGVybWlzc2lvbnMgYW5kIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdGllcy5cbiAqL1xuY2xhc3MgUzNCdWNrZXRPcmlnaW4gZXh0ZW5kcyBPcmlnaW5CYXNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IElCdWNrZXQsXG4gICAgcHJvcHM6IE9yaWdpblByb3BzLFxuICApIHtcbiAgICBzdXBlcihidWNrZXQuYnVja2V0T3V0cHV0cy5yZWdpb25hbERvbWFpbk5hbWUsIHByb3BzKTtcbiAgICBpZiAoIXRoaXMuYnVja2V0LmJ1Y2tldE91dHB1dHMub3JpZ2luQWNjZXNzSWRlbnRpdHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgYnVja2V0IG11c3QgaGF2ZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGJlIHVzZWQgYXMgYSBDbG91ZEZyb250IG9yaWdpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclMzT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5TM09yaWdpbkNvbmZpZ1xuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gY29uc3RydWN0b3IgdGhyb3dzIGlmIHVuZGVmaW5lZCwgc28gdGhpcyBpcyBzYWZlP1xuICAgICAgb3JpZ2luQWNjZXNzSWRlbnRpdHk6IHRoaXMuYnVja2V0LmJ1Y2tldE91dHB1dHMub3JpZ2luQWNjZXNzSWRlbnRpdHkhLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBPcmlnaW4gYmFja2VkIGJ5IGFuIFMzIHdlYnNpdGUtY29uZmlndXJlZCBidWNrZXQsIGxvYWQgYmFsYW5jZXIsIG9yIGN1c3RvbSBIVFRQIHNlcnZlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luUHJvcHMgZXh0ZW5kcyBPcmlnaW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHByb3RvY29sIChIVFRQIG9yIEhUVFBTKSB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFlcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sUG9saWN5PzogT3JpZ2luUHJvdG9jb2xQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgdmVyc2lvbnMgdG8gdXNlIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCBPcmlnaW5Tc2xQb2xpY3kuVExTX1YxXzJcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblNzbFByb3RvY29scz86IE9yaWdpblNzbFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCBwb3J0IHRoYXQgQ2xvdWRGcm9udCB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgODBcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IDQ0M1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLCBhbHNvIGtub3duIGFzIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dC5cbiAgICogVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gMSB0byAxODAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyBhcmUgcG9zc2libGUgb25seSBhZnRlciBhIGxpbWl0IGluY3JlYXNlIHJlcXVlc3QgZm9yIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dCBxdW90YVxuICAgKiBoYXMgYmVlbiBhcHByb3ZlZCBpbiB0aGUgdGFyZ2V0IGFjY291bnQ7IG90aGVyd2lzZSwgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYXQgZGVwbG95IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzApXG4gICAqL1xuICByZWFkb25seSByZWFkVGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi5cbiAgICogVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gMSB0byAxODAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyBhcmUgcG9zc2libGUgb25seSBhZnRlciBhIGxpbWl0IGluY3JlYXNlIHJlcXVlc3QgZm9yIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dCBxdW90YVxuICAgKiBoYXMgYmVlbiBhcHByb3ZlZCBpbiB0aGUgdGFyZ2V0IGFjY291bnQ7IG90aGVyd2lzZSwgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYXQgZGVwbG95IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoNSlcbiAgICovXG4gIHJlYWRvbmx5IGtlZXBhbGl2ZVRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBbiBPcmlnaW4gZm9yIGFuIEhUVFAgc2VydmVyIG9yIFMzIGJ1Y2tldCBjb25maWd1cmVkIGZvciB3ZWJzaXRlIGhvc3RpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwT3JpZ2luIGV4dGVuZHMgT3JpZ2luQmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGRvbWFpbk5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBIdHRwT3JpZ2luUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoZG9tYWluTmFtZSwgcHJvcHMpO1xuXG4gICAgdmFsaWRhdGVTZWNvbmRzSW5SYW5nZU9yVW5kZWZpbmVkKFwicmVhZFRpbWVvdXRcIiwgMSwgMTgwLCBwcm9wcy5yZWFkVGltZW91dCk7XG4gICAgdmFsaWRhdGVTZWNvbmRzSW5SYW5nZU9yVW5kZWZpbmVkKFxuICAgICAgXCJrZWVwYWxpdmVUaW1lb3V0XCIsXG4gICAgICAxLFxuICAgICAgMTgwLFxuICAgICAgcHJvcHMua2VlcGFsaXZlVGltZW91dCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckN1c3RvbU9yaWdpbkNvbmZpZygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luQ3VzdG9tT3JpZ2luQ29uZmlnXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB7XG4gICAgICBvcmlnaW5Tc2xQcm90b2NvbHM6IHRoaXMucHJvcHMub3JpZ2luU3NsUHJvdG9jb2xzID8/IFtcbiAgICAgICAgT3JpZ2luU3NsUG9saWN5LlRMU19WMV8yLFxuICAgICAgXSxcbiAgICAgIG9yaWdpblByb3RvY29sUG9saWN5OlxuICAgICAgICB0aGlzLnByb3BzLnByb3RvY29sUG9saWN5ID8/IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICBodHRwUG9ydDogdGhpcy5wcm9wcy5odHRwUG9ydCA/PyA4MCxcbiAgICAgIGh0dHBzUG9ydDogdGhpcy5wcm9wcy5odHRwc1BvcnQgPz8gNDQzLFxuICAgICAgb3JpZ2luUmVhZFRpbWVvdXQ6IHRoaXMucHJvcHMucmVhZFRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgb3JpZ2luS2VlcGFsaXZlVGltZW91dDogdGhpcy5wcm9wcy5rZWVwYWxpdmVUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGEgZHVyYXRpb24gaXMgZGVmaW5lZCBhbmQgbm90IGFuIGludGVnZXIgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGEgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2Vjb25kc0luUmFuZ2VPclVuZGVmaW5lZChcbiAgbmFtZTogc3RyaW5nLFxuICBtaW46IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4gIGR1cmF0aW9uPzogRHVyYXRpb24sXG4pIHtcbiAgaWYgKGR1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBkdXJhdGlvbi50b1NlY29uZHMoKTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke25hbWV9OiBNdXN0IGJlIGFuIGludCBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9IHNlY29uZHMgKGluY2x1c2l2ZSk7IHJlY2VpdmVkICR7dmFsdWV9LmAsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,374 @@
1
+ import { cloudfrontResponseHeadersPolicy } from "@cdktf/provider-aws";
2
+ import { Construct } from "constructs";
3
+ import { Duration } from "../../duration";
4
+ import { AwsConstructBase, AwsConstructProps } from "../aws-construct";
5
+ /**
6
+ * Represents a response headers policy.
7
+ */
8
+ export interface IResponseHeadersPolicy {
9
+ /**
10
+ * The ID of the response headers policy
11
+ * @attribute
12
+ **/
13
+ readonly responseHeadersPolicyId: string;
14
+ }
15
+ /**
16
+ * Properties for creating a Response Headers Policy
17
+ */
18
+ export interface ResponseHeadersPolicyProps extends AwsConstructProps {
19
+ /**
20
+ * A unique name to identify the response headers policy.
21
+ *
22
+ * @default - generated from the `id`
23
+ */
24
+ readonly responseHeadersPolicyName?: string;
25
+ /**
26
+ * A comment to describe the response headers policy.
27
+ *
28
+ * @default - no comment
29
+ */
30
+ readonly comment?: string;
31
+ /**
32
+ * A configuration for a set of HTTP response headers that are used for cross-origin resource sharing (CORS).
33
+ *
34
+ * @default - no cors behavior
35
+ */
36
+ readonly corsBehavior?: ResponseHeadersCorsBehavior;
37
+ /**
38
+ * A configuration for a set of custom HTTP response headers.
39
+ *
40
+ * @default - no custom headers behavior
41
+ */
42
+ readonly customHeadersBehavior?: ResponseCustomHeadersBehavior;
43
+ /**
44
+ * A configuration for a set of security-related HTTP response headers.
45
+ *
46
+ * @default - no security headers behavior
47
+ */
48
+ readonly securityHeadersBehavior?: ResponseSecurityHeadersBehavior;
49
+ /**
50
+ * A list of HTTP response headers that CloudFront removes from HTTP responses
51
+ * that it sends to viewers.
52
+ *
53
+ * @default - no headers are removed
54
+ */
55
+ readonly removeHeaders?: string[];
56
+ /**
57
+ * The percentage of responses that you want CloudFront to add the Server-Timing
58
+ * header to.
59
+ *
60
+ * @default - no Server-Timing header is added to HTTP responses
61
+ */
62
+ readonly serverTimingSamplingRate?: number;
63
+ }
64
+ /**
65
+ * A Response Headers Policy configuration
66
+ *
67
+ * @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html
68
+ * @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/resources/cloudfront_response_headers_policy
69
+ */
70
+ export declare class ResponseHeadersPolicy extends AwsConstructBase implements IResponseHeadersPolicy {
71
+ /**
72
+ * Import an existing Response Headers Policy from its ID.
73
+ */
74
+ static fromResponseHeadersPolicyId(scope: Construct, id: string, responseHeadersPolicyId: string): IResponseHeadersPolicy;
75
+ static fromManagedPolicyName(scope: Construct, id: string, managedResponseHeadersPolicyName: ManagedResponseHeadersPolicy): IResponseHeadersPolicy;
76
+ readonly resource: cloudfrontResponseHeadersPolicy.CloudfrontResponseHeadersPolicy;
77
+ readonly responseHeadersPolicyId: string;
78
+ readonly outputs: Record<string, any>;
79
+ constructor(scope: Construct, id: string, props?: ResponseHeadersPolicyProps);
80
+ private _renderCorsConfig;
81
+ private _renderCustomHeadersConfig;
82
+ private _renderSecurityHeadersConfig;
83
+ private _renderRemoveHeadersConfig;
84
+ private _renderServerTimingHeadersConfig;
85
+ }
86
+ /**
87
+ * Configuration for a set of HTTP response headers that are used for cross-origin resource sharing (CORS).
88
+ * CloudFront adds these headers to HTTP responses that it sends for CORS requests that match a cache behavior
89
+ * associated with this response headers policy.
90
+ */
91
+ export interface ResponseHeadersCorsBehavior {
92
+ /**
93
+ * A Boolean that CloudFront uses as the value for the Access-Control-Allow-Credentials HTTP response header.
94
+ */
95
+ readonly accessControlAllowCredentials: boolean;
96
+ /**
97
+ * A list of HTTP header names that CloudFront includes as values for the Access-Control-Allow-Headers HTTP response header.
98
+ * You can specify `['*']` to allow all headers.
99
+ */
100
+ readonly accessControlAllowHeaders: string[];
101
+ /**
102
+ * A list of HTTP methods that CloudFront includes as values for the Access-Control-Allow-Methods HTTP response header.
103
+ */
104
+ readonly accessControlAllowMethods: string[];
105
+ /**
106
+ * A list of origins (domain names) that CloudFront can use as the value for the Access-Control-Allow-Origin HTTP response header.
107
+ * You can specify `['*']` to allow all origins.
108
+ */
109
+ readonly accessControlAllowOrigins: string[];
110
+ /**
111
+ * A list of HTTP headers that CloudFront includes as values for the Access-Control-Expose-Headers HTTP response header.
112
+ * You can specify `['*']` to expose all headers.
113
+ *
114
+ * @default - no headers exposed
115
+ */
116
+ readonly accessControlExposeHeaders?: string[];
117
+ /**
118
+ * A number that CloudFront uses as the value for the Access-Control-Max-Age HTTP response header.
119
+ *
120
+ * @default - no max age
121
+ */
122
+ readonly accessControlMaxAge?: Duration;
123
+ /**
124
+ * A Boolean that determines whether CloudFront overrides HTTP response headers received from the origin with the ones specified in this response headers policy.
125
+ */
126
+ readonly originOverride: boolean;
127
+ }
128
+ /**
129
+ * Configuration for a set of HTTP response headers that are sent for requests that match a cache behavior
130
+ * that’s associated with this response headers policy.
131
+ */
132
+ export interface ResponseCustomHeadersBehavior {
133
+ /**
134
+ * The list of HTTP response headers and their values.
135
+ */
136
+ readonly customHeaders: ResponseCustomHeader[];
137
+ }
138
+ /**
139
+ * An HTTP response header name and its value.
140
+ * CloudFront includes this header in HTTP responses that it sends for requests that match a cache behavior that’s associated with this response headers policy.
141
+ */
142
+ export interface ResponseCustomHeader {
143
+ /**
144
+ * The HTTP response header name.
145
+ */
146
+ readonly header: string;
147
+ /**
148
+ * A Boolean that determines whether CloudFront overrides a response header with the same name
149
+ * received from the origin with the header specified here.
150
+ */
151
+ readonly override: boolean;
152
+ /**
153
+ * The value for the HTTP response header.
154
+ */
155
+ readonly value: string;
156
+ }
157
+ /**
158
+ * Configuration for a set of security-related HTTP response headers.
159
+ * CloudFront adds these headers to HTTP responses that it sends for requests that match a cache behavior
160
+ * associated with this response headers policy.
161
+ */
162
+ export interface ResponseSecurityHeadersBehavior {
163
+ /**
164
+ * The policy directives and their values that CloudFront includes as values for the Content-Security-Policy HTTP response header.
165
+ *
166
+ * @default - no content security policy
167
+ */
168
+ readonly contentSecurityPolicy?: ResponseHeadersContentSecurityPolicy;
169
+ /**
170
+ * Determines whether CloudFront includes the X-Content-Type-Options HTTP response header with its value set to nosniff.
171
+ *
172
+ * @default - no content type options
173
+ */
174
+ readonly contentTypeOptions?: ResponseHeadersContentTypeOptions;
175
+ /**
176
+ * Determines whether CloudFront includes the X-Frame-Options HTTP response header and the header’s value.
177
+ *
178
+ * @default - no frame options
179
+ */
180
+ readonly frameOptions?: ResponseHeadersFrameOptions;
181
+ /**
182
+ * Determines whether CloudFront includes the Referrer-Policy HTTP response header and the header’s value.
183
+ *
184
+ * @default - no referrer policy
185
+ */
186
+ readonly referrerPolicy?: ResponseHeadersReferrerPolicy;
187
+ /**
188
+ * Determines whether CloudFront includes the Strict-Transport-Security HTTP response header and the header’s value.
189
+ *
190
+ * @default - no strict transport security
191
+ */
192
+ readonly strictTransportSecurity?: ResponseHeadersStrictTransportSecurity;
193
+ /**
194
+ * Determines whether CloudFront includes the X-XSS-Protection HTTP response header and the header’s value.
195
+ *
196
+ * @default - no xss protection
197
+ */
198
+ readonly xssProtection?: ResponseHeadersXSSProtection;
199
+ }
200
+ /**
201
+ * The policy directives and their values that CloudFront includes as values for the Content-Security-Policy HTTP response header.
202
+ */
203
+ export interface ResponseHeadersContentSecurityPolicy {
204
+ /**
205
+ * The policy directives and their values that CloudFront includes as values for the Content-Security-Policy HTTP response header.
206
+ */
207
+ readonly contentSecurityPolicy: string;
208
+ /**
209
+ * A Boolean that determines whether CloudFront overrides the Content-Security-Policy HTTP response header
210
+ * received from the origin with the one specified in this response headers policy.
211
+ */
212
+ readonly override: boolean;
213
+ }
214
+ /**
215
+ * Determines whether CloudFront includes the X-Content-Type-Options HTTP response header with its value set to nosniff.
216
+ */
217
+ export interface ResponseHeadersContentTypeOptions {
218
+ /**
219
+ * A Boolean that determines whether CloudFront overrides the X-Content-Type-Options HTTP response header
220
+ * received from the origin with the one specified in this response headers policy.
221
+ */
222
+ readonly override: boolean;
223
+ }
224
+ /**
225
+ * Determines whether CloudFront includes the X-Frame-Options HTTP response header and the header’s value.
226
+ */
227
+ export interface ResponseHeadersFrameOptions {
228
+ /**
229
+ * The value of the X-Frame-Options HTTP response header.
230
+ */
231
+ readonly frameOption: HeadersFrameOption;
232
+ /**
233
+ * A Boolean that determines whether CloudFront overrides the X-Frame-Options HTTP response header
234
+ * received from the origin with the one specified in this response headers policy.
235
+ */
236
+ readonly override: boolean;
237
+ }
238
+ /**
239
+ * Determines whether CloudFront includes the Referrer-Policy HTTP response header and the header’s value.
240
+ */
241
+ export interface ResponseHeadersReferrerPolicy {
242
+ /**
243
+ * The value of the Referrer-Policy HTTP response header.
244
+ */
245
+ readonly referrerPolicy: HeadersReferrerPolicy;
246
+ /**
247
+ * A Boolean that determines whether CloudFront overrides the Referrer-Policy HTTP response header
248
+ * received from the origin with the one specified in this response headers policy.
249
+ */
250
+ readonly override: boolean;
251
+ }
252
+ /**
253
+ * Determines whether CloudFront includes the Strict-Transport-Security HTTP response header and the header’s value.
254
+ */
255
+ export interface ResponseHeadersStrictTransportSecurity {
256
+ /**
257
+ * A number that CloudFront uses as the value for the max-age directive in the Strict-Transport-Security HTTP response header.
258
+ */
259
+ readonly accessControlMaxAge: Duration;
260
+ /**
261
+ * A Boolean that determines whether CloudFront includes the includeSubDomains directive in the Strict-Transport-Security HTTP response header.
262
+ *
263
+ * @default false
264
+ */
265
+ readonly includeSubdomains?: boolean;
266
+ /**
267
+ * A Boolean that determines whether CloudFront overrides the Strict-Transport-Security HTTP response header
268
+ * received from the origin with the one specified in this response headers policy.
269
+ */
270
+ readonly override: boolean;
271
+ /**
272
+ * A Boolean that determines whether CloudFront includes the preload directive in the Strict-Transport-Security HTTP response header.
273
+ *
274
+ * @default false
275
+ */
276
+ readonly preload?: boolean;
277
+ }
278
+ /**
279
+ * Determines whether CloudFront includes the X-XSS-Protection HTTP response header and the header’s value.
280
+ */
281
+ export interface ResponseHeadersXSSProtection {
282
+ /**
283
+ * A Boolean that determines whether CloudFront includes the mode=block directive in the X-XSS-Protection header.
284
+ *
285
+ * @default false
286
+ */
287
+ readonly modeBlock?: boolean;
288
+ /**
289
+ * A Boolean that determines whether CloudFront overrides the X-XSS-Protection HTTP response header
290
+ * received from the origin with the one specified in this response headers policy.
291
+ */
292
+ readonly override: boolean;
293
+ /**
294
+ * A Boolean that determines the value of the X-XSS-Protection HTTP response header.
295
+ * When this setting is true, the value of the X-XSS-Protection header is 1.
296
+ * When this setting is false, the value of the X-XSS-Protection header is 0.
297
+ */
298
+ readonly protection: boolean;
299
+ /**
300
+ * A reporting URI, which CloudFront uses as the value of the report directive in the X-XSS-Protection header.
301
+ * You cannot specify a ReportUri when ModeBlock is true.
302
+ *
303
+ * @default - no report uri
304
+ */
305
+ readonly reportUri?: string;
306
+ }
307
+ /**
308
+ * Enum representing possible values of the X-Frame-Options HTTP response header.
309
+ */
310
+ export declare enum HeadersFrameOption {
311
+ /**
312
+ * The page can only be displayed in a frame on the same origin as the page itself.
313
+ */
314
+ DENY = "DENY",
315
+ /**
316
+ * The page can only be displayed in a frame on the specified origin.
317
+ */
318
+ SAMEORIGIN = "SAMEORIGIN"
319
+ }
320
+ /**
321
+ * Enum representing possible values of the Referrer-Policy HTTP response header.
322
+ */
323
+ export declare enum HeadersReferrerPolicy {
324
+ /**
325
+ * The referrer policy is not set.
326
+ */
327
+ NO_REFERRER = "no-referrer",
328
+ /**
329
+ * The referrer policy is no-referrer-when-downgrade.
330
+ */
331
+ NO_REFERRER_WHEN_DOWNGRADE = "no-referrer-when-downgrade",
332
+ /**
333
+ * The referrer policy is origin.
334
+ */
335
+ ORIGIN = "origin",
336
+ /**
337
+ * The referrer policy is origin-when-cross-origin.
338
+ */
339
+ ORIGIN_WHEN_CROSS_ORIGIN = "origin-when-cross-origin",
340
+ /**
341
+ * The referrer policy is same-origin.
342
+ */
343
+ SAME_ORIGIN = "same-origin",
344
+ /**
345
+ * The referrer policy is strict-origin.
346
+ */
347
+ STRICT_ORIGIN = "strict-origin",
348
+ /**
349
+ * The referrer policy is strict-origin-when-cross-origin.
350
+ */
351
+ STRICT_ORIGIN_WHEN_CROSS_ORIGIN = "strict-origin-when-cross-origin",
352
+ /**
353
+ * The referrer policy is unsafe-url.
354
+ */
355
+ UNSAFE_URL = "unsafe-url"
356
+ }
357
+ /**
358
+ * A Response Headers Policy configuration
359
+ *
360
+ * @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html
361
+ * @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_response_headers_policy#aws-managed-policies
362
+ */
363
+ export declare enum ManagedResponseHeadersPolicy {
364
+ /** Use this managed policy to allow simple CORS requests from any origin. */
365
+ CORS_ALLOW_ALL_ORIGINS = "Managed-SimpleCORS",//60669652-455b-4ae9-85a4-c4c02393f86c
366
+ /** Use this managed policy to allow CORS requests from any origin, including preflight requests. */
367
+ CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT = "Managed-CORS-With-Preflight",//5cc3b908-e619-4b99-88e5-2cf7f45965bd
368
+ /** Use this managed policy to add a set of security headers to all responses that CloudFront sends to viewers. */
369
+ SECURITY_HEADERS = "Managed-SecurityHeadersPolicy",//67f7725c-6f97-4210-82d7-5512b31e9d03
370
+ /** Use this managed policy to allow simple CORS requests from any origin and add a set of security headers to all responses that CloudFront sends to viewers. */
371
+ CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS = "Managed-CORS-and-SecurityHeadersPolicy",//e61eb60c-9c35-4d20-a928-2b84e02af89c
372
+ /** Use this managed policy to allow CORS requests from any origin, including preflight requests, and add a set of security headers to all responses that CloudFront sends to viewers. */
373
+ CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS = "Managed-CORS-with-preflight-and-SecurityHeadersPolicy"
374
+ }