@aws-cdk/toolkit-lib 1.27.0 → 1.29.0

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 (50) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/validate/index.d.ts +10 -0
  4. package/lib/actions/validate/index.js +1 -1
  5. package/lib/api/bootstrap/deploy-bootstrap.js +2 -1
  6. package/lib/api/cloud-assembly/environment.js +16 -4
  7. package/lib/api/deployments/cfn-api.d.ts +24 -6
  8. package/lib/api/deployments/cfn-api.js +81 -33
  9. package/lib/api/deployments/deploy-stack.js +8 -1
  10. package/lib/api/deployments/deployment-result.d.ts +6 -0
  11. package/lib/api/deployments/deployment-result.js +1 -1
  12. package/lib/api/hotswap/hotswap-deployments.js +2 -1
  13. package/lib/api/hotswap/lambda-functions.js +3 -33
  14. package/lib/api/io/private/index.d.ts +1 -0
  15. package/lib/api/io/private/index.js +2 -1
  16. package/lib/api/io/private/messages.d.ts +1 -0
  17. package/lib/api/io/private/messages.js +8 -4
  18. package/lib/api/io/private/span.d.ts +6 -0
  19. package/lib/api/io/private/span.js +10 -3
  20. package/lib/api/stack-events/stack-activity-monitor.d.ts +13 -1
  21. package/lib/api/stack-events/stack-activity-monitor.js +12 -2
  22. package/lib/api/stack-events/stack-event-poller.d.ts +7 -0
  23. package/lib/api/stack-events/stack-event-poller.js +20 -1
  24. package/lib/api/validate/validate-formatting.d.ts +5 -0
  25. package/lib/api/validate/validate-formatting.js +127 -0
  26. package/lib/api/work-graph/work-graph-builder.d.ts +3 -0
  27. package/lib/api/work-graph/work-graph-builder.js +38 -3
  28. package/lib/api/work-graph/work-graph-types.d.ts +19 -7
  29. package/lib/api/work-graph/work-graph-types.js +1 -1
  30. package/lib/api/work-graph/work-graph.d.ts +2 -1
  31. package/lib/api/work-graph/work-graph.js +8 -1
  32. package/lib/index_bg.wasm +0 -0
  33. package/lib/payloads/stack-activity.d.ts +6 -0
  34. package/lib/payloads/stack-activity.js +1 -1
  35. package/lib/private/activity-printer/base.d.ts +7 -1
  36. package/lib/private/activity-printer/base.js +16 -2
  37. package/lib/private/activity-printer/current.js +12 -6
  38. package/lib/private/activity-printer/history.js +15 -12
  39. package/lib/private/tools.d.ts +2 -0
  40. package/lib/private/tools.js +120 -0
  41. package/lib/private/tools.js.plain +21 -0
  42. package/lib/toolkit/toolkit.d.ts +2 -1
  43. package/lib/toolkit/toolkit.js +104 -19
  44. package/lib/toolkit/types.d.ts +30 -0
  45. package/lib/toolkit/types.js +1 -1
  46. package/lib/util/index.d.ts +0 -1
  47. package/lib/util/index.js +1 -2
  48. package/package.json +15 -13
  49. package/lib/util/archive.d.ts +0 -2
  50. package/lib/util/archive.js +0 -86
package/build-info.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "comment": "Generated at 2026-05-27T15:09:55Z by build-info.sh",
3
- "commit": "71fd29e"
2
+ "comment": "Generated at 2026-06-15T12:57:42Z by build-info.sh",
3
+ "commit": "425ccb0"
4
4
  }
package/db.json.gz CHANGED
Binary file
@@ -5,6 +5,16 @@ export interface ValidateOptions {
5
5
  * Select the stacks to validate
6
6
  */
7
7
  readonly stacks?: StackSelector;
8
+ /**
9
+ * Submit templates to CloudFormation for early validation.
10
+ *
11
+ * Creates a non-executing change set per stack and reports any
12
+ * early validation errors (invalid resource types, property validation, name conflicts).
13
+ * Requires AWS credentials.
14
+ *
15
+ * @default true
16
+ */
17
+ readonly online?: boolean;
8
18
  }
9
19
  /**
10
20
  * The result of the validate action
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQb2xpY3lWYWxpZGF0aW9uUmVwb3J0SnNvbiwgUG9saWN5VmFsaWRhdGlvblJlcG9ydENvbmNsdXNpb24sIFBsdWdpblJlcG9ydEpzb24gfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vYXBpL2Nsb3VkLWFzc2VtYmx5JztcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZU9wdGlvbnMge1xuICAvKipcbiAgICogU2VsZWN0IHRoZSBzdGFja3MgdG8gdmFsaWRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrcz86IFN0YWNrU2VsZWN0b3I7XG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB0aGUgdmFsaWRhdGUgYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB2YWxpZGF0aW9uIHBhc3NlZCBvciBmYWlsZWQgb3ZlcmFsbC5cbiAgICogJ3N1Y2Nlc3MnIGlmIG5vIHBsdWdpbnMgcmVwb3J0ZWQgZmFpbHVyZXMgKG9yIG5vIHBsdWdpbnMgcmFuKS5cbiAgICogJ2ZhaWx1cmUnIGlmIGFueSBwbHVnaW4gcmVwb3J0ZWQgYSBmYWlsdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uY2x1c2lvbjogUG9saWN5VmFsaWRhdGlvblJlcG9ydENvbmNsdXNpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgdmFsaWRhdGlvbiByZXBvcnRcbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvcnRzIGZyb20gZWFjaCB2YWxpZGF0aW9uIHBsdWdpblxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luUmVwb3J0czogUGx1Z2luUmVwb3J0SnNvbltdO1xufVxuXG5leHBvcnQgdHlwZSB7IFBvbGljeVZhbGlkYXRpb25SZXBvcnRKc29uLCBQb2xpY3lWYWxpZGF0aW9uUmVwb3J0Q29uY2x1c2lvbiwgUGx1Z2luUmVwb3J0SnNvbiB9O1xuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQb2xpY3lWYWxpZGF0aW9uUmVwb3J0SnNvbiwgUG9saWN5VmFsaWRhdGlvblJlcG9ydENvbmNsdXNpb24sIFBsdWdpblJlcG9ydEpzb24gfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vYXBpL2Nsb3VkLWFzc2VtYmx5JztcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZU9wdGlvbnMge1xuICAvKipcbiAgICogU2VsZWN0IHRoZSBzdGFja3MgdG8gdmFsaWRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrcz86IFN0YWNrU2VsZWN0b3I7XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCB0ZW1wbGF0ZXMgdG8gQ2xvdWRGb3JtYXRpb24gZm9yIGVhcmx5IHZhbGlkYXRpb24uXG4gICAqXG4gICAqIENyZWF0ZXMgYSBub24tZXhlY3V0aW5nIGNoYW5nZSBzZXQgcGVyIHN0YWNrIGFuZCByZXBvcnRzIGFueVxuICAgKiBlYXJseSB2YWxpZGF0aW9uIGVycm9ycyAoaW52YWxpZCByZXNvdXJjZSB0eXBlcywgcHJvcGVydHkgdmFsaWRhdGlvbiwgbmFtZSBjb25mbGljdHMpLlxuICAgKiBSZXF1aXJlcyBBV1MgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG9ubGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB0aGUgdmFsaWRhdGUgYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB2YWxpZGF0aW9uIHBhc3NlZCBvciBmYWlsZWQgb3ZlcmFsbC5cbiAgICogJ3N1Y2Nlc3MnIGlmIG5vIHBsdWdpbnMgcmVwb3J0ZWQgZmFpbHVyZXMgKG9yIG5vIHBsdWdpbnMgcmFuKS5cbiAgICogJ2ZhaWx1cmUnIGlmIGFueSBwbHVnaW4gcmVwb3J0ZWQgYSBmYWlsdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uY2x1c2lvbjogUG9saWN5VmFsaWRhdGlvblJlcG9ydENvbmNsdXNpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgdmFsaWRhdGlvbiByZXBvcnRcbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvcnRzIGZyb20gZWFjaCB2YWxpZGF0aW9uIHBsdWdpblxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luUmVwb3J0czogUGx1Z2luUmVwb3J0SnNvbltdO1xufVxuXG5leHBvcnQgdHlwZSB7IFBvbGljeVZhbGlkYXRpb25SZXBvcnRKc29uLCBQb2xpY3lWYWxpZGF0aW9uUmVwb3J0Q29uY2x1c2lvbiwgUGx1Z2luUmVwb3J0SnNvbiB9O1xuIl19
@@ -72,6 +72,7 @@ class BootstrapStack {
72
72
  noOp: true,
73
73
  outputs: {},
74
74
  stackArn: this.currentToolkitInfo.bootstrapStack.stackId,
75
+ deleteFailures: [],
75
76
  };
76
77
  // Validate that the bootstrap stack we're trying to replace is from the same variant as the one we're trying to deploy
77
78
  const currentVariant = this.currentToolkitInfo.variant;
@@ -160,4 +161,4 @@ function bootstrapVersionFromTemplate(template) {
160
161
  function bootstrapVariantFromTemplate(template) {
161
162
  return template.Parameters?.[bootstrap_props_1.BOOTSTRAP_VARIANT_PARAMETER]?.Default ?? bootstrap_props_1.DEFAULT_BOOTSTRAP_VARIANT;
162
163
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWJvb3RzdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlcGxveS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEtBLG9FQWVDO0FBRUQsb0VBRUM7QUE3TEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixvRUFBcUY7QUFDckYsMEVBQThEO0FBQzlELCtCQUErQjtBQUUvQix1REFLMkI7QUFHM0IsZ0RBQXFFO0FBQ3JFLDhEQUEwRDtBQUMxRCxtRUFBNkU7QUFDN0UsZ0RBQXNFO0FBRXRFLHNDQUFpQztBQUNqQyw2RUFBMkU7QUFDM0Usa0RBQTBFO0FBRTFFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLGNBQWM7SUFhTjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFqQlosTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBd0IsRUFBRSxXQUF3QixFQUFFLGdCQUF3QixFQUFFLFFBQWtCO1FBQ3pILGdCQUFnQixHQUFHLGdCQUFnQixJQUFJLHlDQUEwQixDQUFDO1FBRWxFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxXQUFXLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsYUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRXpGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSwwQkFBVyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFMUcsT0FBTyxJQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxZQUNtQixXQUF3QixFQUN4QixHQUFRLEVB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QUFDO1FBQ1osQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLFFBQWE7SUFDeEQsT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsNkNBQTJCLENBQUMsRUFBRSxPQUFPLElBQUksMkNBQXlCLENBQUM7QUFDbEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IENsb3VkQXNzZW1ibHlCdWlsZGVyLCBFbnZpcm9ubWVudFV0aWxzIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IEFydGlmYWN0VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucyB9IGZyb20gJy4vYm9vdHN0cmFwLXByb3BzJztcbmltcG9ydCB7XG4gIEJPT1RTVFJBUF9WQVJJQU5UX1BBUkFNRVRFUixcbiAgQk9PVFNUUkFQX1ZFUlNJT05fT1VUUFVULFxuICBCT09UU1RSQVBfVkVSU0lPTl9SRVNPVVJDRSxcbiAgREVGQVVMVF9CT09UU1RSQVBfVkFSSUFOVCxcbn0gZnJvbSAnLi9ib290c3RyYXAtcHJvcHMnO1xuaW1wb3J0IHR5cGUgeyBTREssIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IGFzc2VydElzU3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgZGVwbG95U3RhY2sgfSBmcm9tICcuLi9kZXBsb3ltZW50cy9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFja0RpYWdub3NlciB9IGZyb20gJy4uL2RpYWdub3Npbmcvc3RhY2stZGlhZ25vc2VyJztcbmltcG9ydCB7IE5vQm9vdHN0cmFwU3RhY2tFbnZpcm9ubWVudFJlc291cmNlcyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuaW1wb3J0IHsgTk9fU09VUkNFX1RSQUNFIH0gZnJvbSAnLi4vc291cmNlLXRyYWNpbmcvcHJpdmF0ZS9zb3VyY2UtdHJhY2luZyc7XG5pbXBvcnQgeyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRSwgVG9vbGtpdEluZm8gfSBmcm9tICcuLi90b29sa2l0LWluZm8nO1xuXG4vKipcbiAqIEEgY2xhc3MgdG8gaG9sZCBzdGF0ZSBhcm91bmQgc3RhY2sgYm9vdHN0cmFwcGluZ1xuICpcbiAqIFRoaXMgY2xhc3MgZXhpc3RzIHNvIHdlIGNhbiBicmVhayBib290c3RyYXBwaW5nIGludG8gMiBwaGFzZXM6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGN1cnJlbnQgPSBCb290c3RyYXBTdGFjay5sb29rdXAoLi4uKTtcbiAqIC8vIC4uLlxuICogY3VycmVudC51cGRhdGUobmV3VGVtcGxhdGUsIC4uLik7XG4gKiBgYGBcbiAqXG4gKiBBbmQgZG8gc29tZXRoaW5nIGluIGJldHdlZW4gdGhlIHR3byBwaGFzZXMgKHN1Y2ggYXMgbG9vayBhdCB0aGVcbiAqIGN1cnJlbnQgYm9vdHN0cmFwIHN0YWNrIGFuZCBkb2luZyBzb21ldGhpbmcgaW50ZWxsaWdlbnQpLlxuICovXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGxvb2t1cChzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCwgdG9vbGtpdFN0YWNrTmFtZTogc3RyaW5nLCBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICB0b29sa2l0U3RhY2tOYW1lID0gdG9vbGtpdFN0YWNrTmFtZSA/PyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRTtcblxuICAgIGNvbnN0IHJlc29sdmVkRW52aXJvbm1lbnQgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IHNkayA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudmlyb25tZW50LCBNb2RlLkZvcldyaXRpbmcpKS5zZGs7XG5cbiAgICBjb25zdCBjdXJyZW50VG9vbGtpdEluZm8gPSBhd2FpdCBUb29sa2l0SW5mby5sb29rdXAocmVzb2x2ZWRFbnZpcm9ubWVudCwgc2RrLCBpb0hlbHBlciwgdG9vbGtpdFN0YWNrTmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEJvb3RzdHJhcFN0YWNrKHNka1Byb3ZpZGVyLCBzZGssIHJlc29sdmVkRW52aXJvbm1lbnQsIHRvb2xraXRTdGFja05hbWUsIGN1cnJlbnRUb29sa2l0SW5mbywgaW9IZWxwZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2RrOiBTREssXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZEVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRUb29sa2l0SW5mbzogVG9vbGtpdEluZm8sXG4gICAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJhbWV0ZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5mb3VuZCA/IHRoaXMuY3VycmVudFRvb2xraXRJbmZvLmJvb3RzdHJhcFN0YWNrLnBhcmFtZXRlcnMgOiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVybWluYXRpb25Qcm90ZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5mb3VuZCA/IHRoaXMuY3VycmVudFRvb2xraXRJbmZvLmJvb3RzdHJhcFN0YWNrLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwYXJ0aXRpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2RrLmN1cnJlbnRBY2NvdW50KCkpLnBhcnRpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgZGVwbG95bWVudCBvZiBhIGJvb3RzdHJhcCBzdGFjaywgZ2l2ZW4gYSB0ZW1wbGF0ZSBhbmQgc29tZSBwYXJhbWV0ZXJzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlKFxuICAgIHRlbXBsYXRlOiBhbnksXG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbiAgICBvcHRpb25zOiBPbWl0PEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucywgJ3BhcmFtZXRlcnMnPixcbiAgKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgJiYgIW9wdGlvbnMuZm9yY2VEZXBsb3ltZW50KSB7XG4gICAgICAvLyBTYWZldHkgY2hlY2tzXG4gICAgICBjb25zdCBhYm9ydFJlc3BvbnNlID0ge1xuICAgICAgICB0eXBlOiAnZGlkLWRlcGxveS1zdGFjaycsXG4gICAgICAgIG5vT3A6IHRydWUsXG4gICAgICAgIG91dHB1dHM6IHt9LFxuICAgICAgICBzdGFja0FybjogdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uYm9vdHN0cmFwU3RhY2suc3RhY2tJZCxcbiAgICAgIH0gc2F0aXNmaWVzIFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdDtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgYm9vdHN0cmFwIHN0YWNrIHdlJ3JlIHRyeWluZyB0byByZXBsYWNlIGlzIGZyb20gdGhlIHNhbWUgdmFyaWFudCBhcyB0aGUgb25lIHdlJ3JlIHRyeWluZyB0byBkZXBsb3lcbiAgICAgIGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8udmFyaWFudDtcbiAgICAgIGNvbnN0IG5ld1ZhcmlhbnQgPSBib290c3RyYXBWYXJpYW50RnJvbVRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICAgIGlmIChjdXJyZW50VmFyaWFudCAhPT0gbmV3VmFyaWFudCkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgYEJvb3RzdHJhcCBzdGFjayBhbHJlYWR5IGV4aXN0cywgY29udGFpbmluZyAnJHtjdXJyZW50VmFyaWFudH0nLiBOb3Qgb3ZlcndyaXRpbmcgaXQgd2l0aCBhIHRlbXBsYXRlIGNvbnRhaW5pbmcgJyR7bmV3VmFyaWFudH0nICh1c2UgLS1mb3JjZSBpZiB5b3UgaW50ZW5kIHRvIG92ZXJ3cml0ZSlgLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWJvcnRSZXNwb25zZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB3ZSdyZSBub3QgZG93bmdyYWRpbmcgdGhlIGJvb3RzdHJhcCBzdGFja1xuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAgY29uc3QgY3VycmVudFZlcnNpb24gPSB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby52ZXJzaW9uO1xuICAgICAgaWYgKG5ld1ZlcnNpb24gPCBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgYEJvb3RzdHJhcCBzdGFjayBhbHJlYWR5IGF0IHZlcnNpb24gJHtjdXJyZW50VmVyc2lvbn0uIE5vdCBkb3duZ3JhZGluZyBpdCB0byB2ZXJzaW9uICR7bmV3VmVyc2lvbn0gKHVzZSAtLWZvcmNlIGlmIHlvdSBpbnRlbmQgdG8gZG93bmdyYWRlKWAsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChuZXdWZXJzaW9uID09PSAwKSB7XG4gICAgICAgICAgLy8gQSBkb3duZ3JhZGUgd2l0aCAwIGFzIHRhcmdldCB2ZXJzaW9uIG1lYW5zIHdlIHByb2JhYmx5IGhhdmUgYSBuZXctc3R5bGUgYm9vdHN0cmFwIGluIHRoZSBhY2NvdW50LFxuICAgICAgICAgIC8vIGFuZCBhbiBvbGQtc3R5bGUgYm9vdHN0cmFwIGFzIGN1cnJlbnQgdGFyZ2V0LCB3aGljaCBtZWFucyB0aGUgdXNlciBwcm9iYWJseSBmb3Jnb3QgdG8gcHV0IHRoaXMgZmxhZyBpbi5cbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgICBcIihEaWQgeW91IHNldCB0aGUgJ0Bhd3MtY2RrL2NvcmU6bmV3U3R5bGVTdGFja1N5bnRoZXNpcycgZmVhdHVyZSBmbGFnIGluIGNkay5qc29uPylcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydFJlc3BvbnNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG91dGRpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrLWJvb3RzdHJhcCcpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBDbG91ZEFzc2VtYmx5QnVpbGRlcihvdXRkaXIpO1xuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0gYCR7dGhpcy50b29sa2l0U3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYDtcbiAgICAgIGF3YWl0IGZzLndyaXRlSnNvbihwYXRoLmpvaW4oYnVpbGRlci5vdXRkaXIsIHRlbXBsYXRlRmlsZSksIHRlbXBsYXRlLCB7XG4gICAgICAgIHNwYWNlczogMixcbiAgICAgIH0pO1xuXG4gICAgICBidWlsZGVyLmFkZEFydGlmYWN0KHRoaXMudG9vbGtpdFN0YWNrTmFtZSwge1xuICAgICAgICB0eXBlOiBBcnRpZmFjdFR5cGUuQVdTX0NMT1VERk9STUFUSU9OX1NUQUNLLFxuICAgICAgICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRVdGlscy5mb3JtYXQodGhpcy5yZXNvbHZlZEVudmlyb25tZW50LmFjY291bnQsIHRoaXMucmVzb2x2ZWRFbnZpcm9ubWVudC5yZWdpb24pLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdGVtcGxhdGVGaWxlLFxuICAgICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogb3B0aW9ucy50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYXNzZW1ibHkgPSBidWlsZGVyLmJ1aWxkQXNzZW1ibHkoKTtcblxuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgZGVwbG95U3RhY2soe1xuICAgICAgICBzdGFjazogYXNzZW1ibHkuZ2V0U3RhY2tCeU5hbWUodGhpcy50b29sa2l0U3RhY2tOYW1lKSxcbiAgICAgICAgcmVzb2x2ZWRFbnZpcm9ubWVudDogdGhpcy5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgICAgICBzZGs6IHRoaXMuc2RrLFxuICAgICAgICBzZGtQcm92aWRlcjogdGhpcy5zZGtQcm92aWRlcixcbiAgICAgICAgZm9yY2VEZXBsb3ltZW50OiBvcHRpb25zLmZvcmNlRGVwbG95bWVudCxcbiAgICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgICB0YWdzOiBvcHRpb25zLnRhZ3MsXG4gICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgICBleGVjdXRlOiBvcHRpb25zLmV4ZWN1dGUsXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IG9wdGlvbnMuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMgPz8gdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVycyA/PyB0cnVlLFxuICAgICAgICAvLyBPYnZpb3VzbHkgd2UgY2FuJ3QgbmVlZCBhIGJvb3RzdHJhcCBzdGFjayB0byBkZXBsb3kgYSBib290c3RyYXAgc3RhY2tcbiAgICAgICAgZW52UmVzb3VyY2VzOiBuZXcgTm9Cb290c3RyYXBTdGFja0Vudmlyb25tZW50UmVzb3VyY2VzKHRoaXMucmVzb2x2ZWRFbnZpcm9ubWVudCwgdGhpcy5zZGssIHRoaXMuaW9IZWxwZXIpLFxuICAgICAgICBkaWFnbm9zZXI6IG5ldyBDbG91ZEZvcm1hdGlvblN0YWNrRGlhZ25vc2VyKHtcbiAgICAgICAgICBzZGs6IHRoaXMuc2RrLFxuICAgICAgICAgIHNvdXJjZVRyYWNlcjogTk9fU09VUkNFX1RSQUNFLFxuICAgICAgICAgIGlvSGVscGVyOiB0aGlzLmlvSGVscGVyLFxuICAgICAgICAgIHRvcExldmVsU3RhY2tIaWVyYXJjaGljYWxJZDogdGhpcy50b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICB9KSxcbiAgICAgIH0sIHRoaXMuaW9IZWxwZXIpO1xuXG4gICAgICBhc3NlcnRJc1N1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdChyZXQpO1xuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5ybShvdXRkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IHZlcnNpb25Tb3VyY2VzID0gW1xuICAgIHRlbXBsYXRlLk91dHB1dHM/LltCT09UU1RSQVBfVkVSU0lPTl9PVVRQVVRdPy5WYWx1ZSxcbiAgICB0ZW1wbGF0ZS5SZXNvdXJjZXM/LltCT09UU1RSQVBfVkVSU0lPTl9SRVNPVVJDRV0/LlByb3BlcnRpZXM/LlZhbHVlLFxuICBdO1xuXG4gIGZvciAoY29uc3QgdnMgb2YgdmVyc2lvblNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHZzID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHZzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZzID09PSAnc3RyaW5nJyAmJiAhaXNOYU4ocGFyc2VJbnQodnMsIDEwKSkpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2cywgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFZhcmlhbnRGcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiB0ZW1wbGF0ZS5QYXJhbWV0ZXJzPy5bQk9PVFNUUkFQX1ZBUklBTlRfUEFSQU1FVEVSXT8uRGVmYXVsdCA/PyBERUZBVUxUX0JPT1RTVFJBUF9WQVJJQU5UO1xufVxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWJvb3RzdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlcGxveS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMktBLG9FQWVDO0FBRUQsb0VBRUM7QUE5TEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixvRUFBcUY7QUFDckYsMEVBQThEO0FBQzlELCtCQUErQjtBQUUvQix1REFLMkI7QUFHM0IsZ0RBQXFFO0FBQ3JFLDhEQUEwRDtBQUMxRCxtRUFBNkU7QUFDN0UsZ0RBQXNFO0FBRXRFLHNDQUFpQztBQUNqQyw2RUFBMkU7QUFDM0Usa0RBQTBFO0FBRTFFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLGNBQWM7SUFhTjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFqQlosTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBd0IsRUFBRSxXQUF3QixFQUFFLGdCQUF3QixFQUFFLFFBQWtCO1FBQ3pILGdCQUFnQixHQUFHLGdCQUFnQixJQUFJLHlDQUEwQixDQUFDO1FBRWxFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxXQUFXLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsYUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRXpGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSwwQkFBVyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFMUcsT0FBTyxJQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxZQUNtQixXQUF3QixFQUN4QixHQUFRLEVB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Q0FBQztZQUMzQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FBQyxRQUFhO0lBQ3hELE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLDZDQUEyQixDQUFDLEVBQUUsT0FBTyxJQUFJLDJDQUF5QixDQUFDO0FBQ2xHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgeyBDbG91ZEFzc2VtYmx5QnVpbGRlciwgRW52aXJvbm1lbnRVdGlscyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgeyBBcnRpZmFjdFR5cGUgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHR5cGUgeyBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL2Jvb3RzdHJhcC1wcm9wcyc7XG5pbXBvcnQge1xuICBCT09UU1RSQVBfVkFSSUFOVF9QQVJBTUVURVIsXG4gIEJPT1RTVFJBUF9WRVJTSU9OX09VVFBVVCxcbiAgQk9PVFNUUkFQX1ZFUlNJT05fUkVTT1VSQ0UsXG4gIERFRkFVTFRfQk9PVFNUUkFQX1ZBUklBTlQsXG59IGZyb20gJy4vYm9vdHN0cmFwLXByb3BzJztcbmltcG9ydCB0eXBlIHsgU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBhc3NlcnRJc1N1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IGRlcGxveVN0YWNrIH0gZnJvbSAnLi4vZGVwbG95bWVudHMvZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uU3RhY2tEaWFnbm9zZXIgfSBmcm9tICcuLi9kaWFnbm9zaW5nL3N0YWNrLWRpYWdub3Nlcic7XG5pbXBvcnQgeyBOb0Jvb3RzdHJhcFN0YWNrRW52aXJvbm1lbnRSZXNvdXJjZXMgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luJztcbmltcG9ydCB7IE5PX1NPVVJDRV9UUkFDRSB9IGZyb20gJy4uL3NvdXJjZS10cmFjaW5nL3ByaXZhdGUvc291cmNlLXRyYWNpbmcnO1xuaW1wb3J0IHsgREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUUsIFRvb2xraXRJbmZvIH0gZnJvbSAnLi4vdG9vbGtpdC1pbmZvJztcblxuLyoqXG4gKiBBIGNsYXNzIHRvIGhvbGQgc3RhdGUgYXJvdW5kIHN0YWNrIGJvb3RzdHJhcHBpbmdcbiAqXG4gKiBUaGlzIGNsYXNzIGV4aXN0cyBzbyB3ZSBjYW4gYnJlYWsgYm9vdHN0cmFwcGluZyBpbnRvIDIgcGhhc2VzOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBjdXJyZW50ID0gQm9vdHN0cmFwU3RhY2subG9va3VwKC4uLik7XG4gKiAvLyAuLi5cbiAqIGN1cnJlbnQudXBkYXRlKG5ld1RlbXBsYXRlLCAuLi4pO1xuICogYGBgXG4gKlxuICogQW5kIGRvIHNvbWV0aGluZyBpbiBiZXR3ZWVuIHRoZSB0d28gcGhhc2VzIChzdWNoIGFzIGxvb2sgYXQgdGhlXG4gKiBjdXJyZW50IGJvb3RzdHJhcCBzdGFjayBhbmQgZG9pbmcgc29tZXRoaW5nIGludGVsbGlnZW50KS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJvb3RzdHJhcFN0YWNrIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBsb29rdXAoc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsIHRvb2xraXRTdGFja05hbWU6IHN0cmluZywgaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gICAgdG9vbGtpdFN0YWNrTmFtZSA9IHRvb2xraXRTdGFja05hbWUgPz8gREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUU7XG5cbiAgICBjb25zdCByZXNvbHZlZEVudmlyb25tZW50ID0gYXdhaXQgc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KTtcbiAgICBjb25zdCBzZGsgPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQocmVzb2x2ZWRFbnZpcm9ubWVudCwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuXG4gICAgY29uc3QgY3VycmVudFRvb2xraXRJbmZvID0gYXdhaXQgVG9vbGtpdEluZm8ubG9va3VwKHJlc29sdmVkRW52aXJvbm1lbnQsIHNkaywgaW9IZWxwZXIsIHRvb2xraXRTdGFja05hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBCb290c3RyYXBTdGFjayhzZGtQcm92aWRlciwgc2RrLCByZXNvbHZlZEVudmlyb25tZW50LCB0b29sa2l0U3RhY2tOYW1lLCBjdXJyZW50VG9vbGtpdEluZm8sIGlvSGVscGVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNkazogU0RLLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZWRFbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50VG9vbGtpdEluZm86IFRvb2xraXRJbmZvLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgPyB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5ib290c3RyYXBTdGFjay5wYXJhbWV0ZXJzIDoge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgPyB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5ib290c3RyYXBTdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGFydGl0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNkay5jdXJyZW50QWNjb3VudCgpKS5wYXJ0aXRpb247XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgYWN0dWFsIGRlcGxveW1lbnQgb2YgYSBib290c3RyYXAgc3RhY2ssIGdpdmVuIGEgdGVtcGxhdGUgYW5kIHNvbWUgcGFyYW1ldGVyc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZShcbiAgICB0ZW1wbGF0ZTogYW55LFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgb3B0aW9uczogT21pdDxCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMsICdwYXJhbWV0ZXJzJz4sXG4gICk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRvb2xraXRJbmZvLmZvdW5kICYmICFvcHRpb25zLmZvcmNlRGVwbG95bWVudCkge1xuICAgICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgICAgY29uc3QgYWJvcnRSZXNwb25zZSA9IHtcbiAgICAgICAgdHlwZTogJ2RpZC1kZXBsb3ktc3RhY2snLFxuICAgICAgICBub09wOiB0cnVlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46IHRoaXMuY3VycmVudFRvb2xraXRJbmZvLmJvb3RzdHJhcFN0YWNrLnN0YWNrSWQsXG4gICAgICAgIGRlbGV0ZUZhaWx1cmVzOiBbXSxcbiAgICAgIH0gc2F0aXNmaWVzIFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdDtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgYm9vdHN0cmFwIHN0YWNrIHdlJ3JlIHRyeWluZyB0byByZXBsYWNlIGlzIGZyb20gdGhlIHNhbWUgdmFyaWFudCBhcyB0aGUgb25lIHdlJ3JlIHRyeWluZyB0byBkZXBsb3lcbiAgICAgIGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8udmFyaWFudDtcbiAgICAgIGNvbnN0IG5ld1ZhcmlhbnQgPSBib290c3RyYXBWYXJpYW50RnJvbVRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICAgIGlmIChjdXJyZW50VmFyaWFudCAhPT0gbmV3VmFyaWFudCkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgYEJvb3RzdHJhcCBzdGFjayBhbHJlYWR5IGV4aXN0cywgY29udGFpbmluZyAnJHtjdXJyZW50VmFyaWFudH0nLiBOb3Qgb3ZlcndyaXRpbmcgaXQgd2l0aCBhIHRlbXBsYXRlIGNvbnRhaW5pbmcgJyR7bmV3VmFyaWFudH0nICh1c2UgLS1mb3JjZSBpZiB5b3UgaW50ZW5kIHRvIG92ZXJ3cml0ZSlgLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWJvcnRSZXNwb25zZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB3ZSdyZSBub3QgZG93bmdyYWRpbmcgdGhlIGJvb3RzdHJhcCBzdGFja1xuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAgY29uc3QgY3VycmVudFZlcnNpb24gPSB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby52ZXJzaW9uO1xuICAgICAgaWYgKG5ld1ZlcnNpb24gPCBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgYEJvb3RzdHJhcCBzdGFjayBhbHJlYWR5IGF0IHZlcnNpb24gJHtjdXJyZW50VmVyc2lvbn0uIE5vdCBkb3duZ3JhZGluZyBpdCB0byB2ZXJzaW9uICR7bmV3VmVyc2lvbn0gKHVzZSAtLWZvcmNlIGlmIHlvdSBpbnRlbmQgdG8gZG93bmdyYWRlKWAsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChuZXdWZXJzaW9uID09PSAwKSB7XG4gICAgICAgICAgLy8gQSBkb3duZ3JhZGUgd2l0aCAwIGFzIHRhcmdldCB2ZXJzaW9uIG1lYW5zIHdlIHByb2JhYmx5IGhhdmUgYSBuZXctc3R5bGUgYm9vdHN0cmFwIGluIHRoZSBhY2NvdW50LFxuICAgICAgICAgIC8vIGFuZCBhbiBvbGQtc3R5bGUgYm9vdHN0cmFwIGFzIGN1cnJlbnQgdGFyZ2V0LCB3aGljaCBtZWFucyB0aGUgdXNlciBwcm9iYWJseSBmb3Jnb3QgdG8gcHV0IHRoaXMgZmxhZyBpbi5cbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgICBcIihEaWQgeW91IHNldCB0aGUgJ0Bhd3MtY2RrL2NvcmU6bmV3U3R5bGVTdGFja1N5bnRoZXNpcycgZmVhdHVyZSBmbGFnIGluIGNkay5qc29uPylcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYm9ydFJlc3BvbnNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG91dGRpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrLWJvb3RzdHJhcCcpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBDbG91ZEFzc2VtYmx5QnVpbGRlcihvdXRkaXIpO1xuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0gYCR7dGhpcy50b29sa2l0U3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYDtcbiAgICAgIGF3YWl0IGZzLndyaXRlSnNvbihwYXRoLmpvaW4oYnVpbGRlci5vdXRkaXIsIHRlbXBsYXRlRmlsZSksIHRlbXBsYXRlLCB7XG4gICAgICAgIHNwYWNlczogMixcbiAgICAgIH0pO1xuXG4gICAgICBidWlsZGVyLmFkZEFydGlmYWN0KHRoaXMudG9vbGtpdFN0YWNrTmFtZSwge1xuICAgICAgICB0eXBlOiBBcnRpZmFjdFR5cGUuQVdTX0NMT1VERk9STUFUSU9OX1NUQUNLLFxuICAgICAgICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRVdGlscy5mb3JtYXQodGhpcy5yZXNvbHZlZEVudmlyb25tZW50LmFjY291bnQsIHRoaXMucmVzb2x2ZWRFbnZpcm9ubWVudC5yZWdpb24pLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdGVtcGxhdGVGaWxlLFxuICAgICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogb3B0aW9ucy50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYXNzZW1ibHkgPSBidWlsZGVyLmJ1aWxkQXNzZW1ibHkoKTtcblxuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgZGVwbG95U3RhY2soe1xuICAgICAgICBzdGFjazogYXNzZW1ibHkuZ2V0U3RhY2tCeU5hbWUodGhpcy50b29sa2l0U3RhY2tOYW1lKSxcbiAgICAgICAgcmVzb2x2ZWRFbnZpcm9ubWVudDogdGhpcy5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgICAgICBzZGs6IHRoaXMuc2RrLFxuICAgICAgICBzZGtQcm92aWRlcjogdGhpcy5zZGtQcm92aWRlcixcbiAgICAgICAgZm9yY2VEZXBsb3ltZW50OiBvcHRpb25zLmZvcmNlRGVwbG95bWVudCxcbiAgICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgICB0YWdzOiBvcHRpb25zLnRhZ3MsXG4gICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgICBleGVjdXRlOiBvcHRpb25zLmV4ZWN1dGUsXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IG9wdGlvbnMuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMgPz8gdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiBvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVycyA/PyB0cnVlLFxuICAgICAgICAvLyBPYnZpb3VzbHkgd2UgY2FuJ3QgbmVlZCBhIGJvb3RzdHJhcCBzdGFjayB0byBkZXBsb3kgYSBib290c3RyYXAgc3RhY2tcbiAgICAgICAgZW52UmVzb3VyY2VzOiBuZXcgTm9Cb290c3RyYXBTdGFja0Vudmlyb25tZW50UmVzb3VyY2VzKHRoaXMucmVzb2x2ZWRFbnZpcm9ubWVudCwgdGhpcy5zZGssIHRoaXMuaW9IZWxwZXIpLFxuICAgICAgICBkaWFnbm9zZXI6IG5ldyBDbG91ZEZvcm1hdGlvblN0YWNrRGlhZ25vc2VyKHtcbiAgICAgICAgICBzZGs6IHRoaXMuc2RrLFxuICAgICAgICAgIHNvdXJjZVRyYWNlcjogTk9fU09VUkNFX1RSQUNFLFxuICAgICAgICAgIGlvSGVscGVyOiB0aGlzLmlvSGVscGVyLFxuICAgICAgICAgIHRvcExldmVsU3RhY2tIaWVyYXJjaGljYWxJZDogdGhpcy50b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICB9KSxcbiAgICAgIH0sIHRoaXMuaW9IZWxwZXIpO1xuXG4gICAgICBhc3NlcnRJc1N1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdChyZXQpO1xuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5ybShvdXRkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IHZlcnNpb25Tb3VyY2VzID0gW1xuICAgIHRlbXBsYXRlLk91dHB1dHM/LltCT09UU1RSQVBfVkVSU0lPTl9PVVRQVVRdPy5WYWx1ZSxcbiAgICB0ZW1wbGF0ZS5SZXNvdXJjZXM/LltCT09UU1RSQVBfVkVSU0lPTl9SRVNPVVJDRV0/LlByb3BlcnRpZXM/LlZhbHVlLFxuICBdO1xuXG4gIGZvciAoY29uc3QgdnMgb2YgdmVyc2lvblNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHZzID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHZzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZzID09PSAnc3RyaW5nJyAmJiAhaXNOYU4ocGFyc2VJbnQodnMsIDEwKSkpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2cywgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFZhcmlhbnRGcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiB0ZW1wbGF0ZS5QYXJhbWV0ZXJzPy5bQk9PVFNUUkFQX1ZBUklBTlRfUEFSQU1FVEVSXT8uRGVmYXVsdCA/PyBERUZBVUxUX0JPT1RTVFJBUF9WQVJJQU5UO1xufVxuIl19
@@ -66,12 +66,24 @@ function contextFromSettings(settings) {
66
66
  * Convert settings to context/environment variables
67
67
  */
68
68
  function synthParametersFromSettings(settings) {
69
+ // These are the environment variables that will switch on debugging in the
70
+ // CDK framework.
71
+ //
72
+ // - CDK_DEBUG: an environment variable instead of a context variable, so it can also
73
+ // be accessed in framework code where we don't have access to a construct tree.
74
+ // - JSII_HOST_STACK_TRACES: have the jsii client library send call stacks
75
+ // across so we can read them in JS-land. Only set if not already set by the
76
+ // user, this allows them to switch it off by setting `JSII_HOST_STACK_TRACES=0`.
77
+ const debugEnvVars = {
78
+ CDK_DEBUG: 'true',
79
+ };
80
+ if (process.env.JSII_HOST_STACK_TRACES === undefined) {
81
+ debugEnvVars.JSII_HOST_STACK_TRACES = '1';
82
+ }
69
83
  return {
70
84
  context: contextFromSettings(settings),
71
85
  env: {
72
- // An environment variable instead of a context variable, so it can also
73
- // be accessed in framework code where we don't have access to a construct tree.
74
- ...settings.get(['debug']) ? { CDK_DEBUG: 'true' } : {},
86
+ ...settings.get(['debugApp']) ? debugEnvVars : {},
75
87
  },
76
88
  };
77
89
  }
@@ -188,4 +200,4 @@ function quoteSpaces(part) {
188
200
  }
189
201
  return part;
190
202
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSw4REFnQkM7QUFPRCxrREFpQ0M7QUFLRCxrRUFZQztBQUVELDREQVFDO0FBbUJELDBDQW1CQztBQTlJRCw2QkFBNkI7QUFDN0IseUNBQXlDO0FBQ3pDLCtCQUErQjtBQU8vQjs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsR0FBZ0IsRUFDaEIsT0FBdUM7SUFFdkMsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBRXBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ2xELE1BQU0sT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLGtCQUFrQiw2QkFBNkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoSCxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO0lBQzFELElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLG1CQUFtQiw2QkFBNkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxRQUFrQjtJQUVsQixNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFDO0lBRTVDLE1BQU0sWUFBWSxHQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FB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TUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLE9BQU87WUFDTCxRQUFRO1lBQ1Isc0NBQXNDO1lBQ3RDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3JELENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFPRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsSUFBWTtJQUMvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksSUFBSSxHQUFHLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL3NldHRpbmdzJztcblxuZXhwb3J0IHR5cGUgRW52ID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbmV4cG9ydCB0eXBlIENvbnRleHQgPSB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblxuLyoqXG4gKiBJZiB3ZSBkb24ndCBoYXZlIHJlZ2lvbi9hY2NvdW50IGRlZmluZWQgaW4gY29udGV4dCwgd2UgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IFNESyBiZWhhdmlvclxuICogd2hlcmUgcmVnaW9uIGlzIHJldHJpZXZlZCBmcm9tIH4vLmF3cy9jb25maWcgYW5kIGFjY291bnQgaXMgYmFzZWQgb24gZGVmYXVsdCBjcmVkZW50aWFscyBwcm92aWRlclxuICogY2hhaW4gYW5kIHRoZW4gU1RTIGlzIHF1ZXJpZWQuXG4gKlxuICogVGhpcyBpcyBkb25lIG9wcG9ydHVuaXN0aWNhbGx5OiBmb3IgZXhhbXBsZSwgaWYgd2UgY2FuJ3QgYWNjZXNzIFNUUyBmb3Igc29tZSByZWFzb24gb3IgdGhlIHJlZ2lvblxuICogaXMgbm90IGNvbmZpZ3VyZWQsIHRoZSBjb250ZXh0IHZhbHVlIHdpbGwgYmUgJ251bGwnIGFuZCB0aGVyZSBjb3VsZCBmYWlsdXJlcyBkb3duIHRoZSBsaW5lLiBJblxuICogc29tZSBjYXNlcywgc3ludGhlc2lzIGRvZXMgbm90IHJlcXVpcmUgcmVnaW9uL2FjY291bnQgaW5mb3JtYXRpb24gYXQgYWxsLCBzbyB0aGF0IG1pZ2h0IGJlIHBlcmZlY3RseVxuICogZmluZSBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBjb250ZXh0IGtleS92YWx1ZSBiYXNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZURlZmF1bHRFbnZpcm9ubWVudChcbiAgYXdzOiBTZGtQcm92aWRlcixcbiAgZGVidWdGbjogKG1zZzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+LFxuKTogUHJvbWlzZTxFbnY+IHtcbiAgY29uc3QgZW52OiBFbnYgPSB7fTtcblxuICBlbnZbY3hhcGkuREVGQVVMVF9SRUdJT05fRU5WXSA9IGF3cy5kZWZhdWx0UmVnaW9uO1xuICBhd2FpdCBkZWJ1Z0ZuKGBTZXR0aW5nIFwiJHtjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZ9XCIgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gJHtlbnZbY3hhcGkuREVGQVVMVF9SRUdJT05fRU5WXX1gKTtcblxuICBjb25zdCBhY2NvdW50SWQgPSAoYXdhaXQgYXdzLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQ7XG4gIGlmIChhY2NvdW50SWQpIHtcbiAgICBlbnZbY3hhcGkuREVGQVVMVF9BQ0NPVU5UX0VOVl0gPSBhY2NvdW50SWQ7XG4gICAgYXdhaXQgZGVidWdGbihgU2V0dGluZyBcIiR7Y3hhcGkuREVGQVVMVF9BQ0NPVU5UX0VOVn1cIiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAke2VudltjeGFwaS5ERUZBVUxUX0FDQ09VTlRfRU5WXX1gKTtcbiAgfVxuXG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNvbnRleHQgZnJvbSBzZXR0aW5ncy5cbiAqXG4gKiBNdXRhdGVzIHRoZSBgY29udGV4dGAgb2JqZWN0IGFuZCByZXR1cm5zIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGV4dEZyb21TZXR0aW5ncyhcbiAgc2V0dGluZ3M6IFNldHRpbmdzLFxuKSB7XG4gIGNvbnN0IGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgY29uc3QgcGF0aE1ldGFkYXRhOiBib29sZWFuID0gc2V0dGluZ3MuZ2V0KFsncGF0aE1ldGFkYXRhJ10pID8/IHRydWU7XG4gIGlmIChwYXRoTWV0YWRhdGEpIHtcbiAgICBjb250ZXh0W2N4YXBpLlBBVEhfTUVUQURBVEFfRU5BQkxFX0NPTlRFWFRdID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TWV0YWRhdGE6IGJvb2xlYW4gPSBzZXR0aW5ncy5nZXQoWydhc3NldE1ldGFkYXRhJ10pID8/IHRydWU7XG4gIGlmIChhc3NldE1ldGFkYXRhKSB7XG4gICAgY29udGV4dFtjeGFwaS5BU1NFVF9SRVNPVVJDRV9NRVRBREFUQV9FTkFCTEVEX0NPTlRFWFRdID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb25SZXBvcnRpbmc6IGJvb2xlYW4gPSBzZXR0aW5ncy5nZXQoWyd2ZXJzaW9uUmVwb3J0aW5nJ10pID8/IHRydWU7XG4gIGlmICh2ZXJzaW9uUmVwb3J0aW5nKSB7XG4gICAgY29udGV4dFtjeGFwaS5BTkFMWVRJQ1NfUkVQT1JUSU5HX0VOQUJMRURfQ09OVEVYVF0gPSB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgdG8ga2VlcCBvbiBkb2luZyB0aGlzIGZvciBmcmFtZXdvcmsgdmVyc2lvbiBmcm9tIGJlZm9yZSB0aGlzIGZsYWcgd2FzIGRlcHJlY2F0ZWQuXG4gIGlmICghdmVyc2lvblJlcG9ydGluZykge1xuICAgIGNvbnRleHRbJ2F3czpjZGs6ZGlzYWJsZS12ZXJzaW9uLXJlcG9ydGluZyddID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWdpbmdFbmFibGVkID0gc2V0dGluZ3MuZ2V0KFsnc3RhZ2luZyddKSA/PyB0cnVlO1xuICBpZiAoIXN0YWdpbmdFbmFibGVkKSB7XG4gICAgY29udGV4dFtjeGFwaS5ESVNBQkxFX0FTU0VUX1NUQUdJTkdfQ09OVEVYVF0gPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgYnVuZGxpbmdTdGFja3MgPSBzZXR0aW5ncy5nZXQoWydidW5kbGluZ1N0YWNrcyddKSA/PyBbJyoqJ107XG4gIGNvbnRleHRbY3hhcGkuQlVORExJTkdfU1RBQ0tTXSA9IGJ1bmRsaW5nU3RhY2tzO1xuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2V0dGluZ3MgdG8gY29udGV4dC9lbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bnRoUGFyYW1ldGVyc0Zyb21TZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiB7XG4gIGNvbnRleHQ6IENvbnRleHQ7XG4gIGVudjogRW52O1xufSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dEZyb21TZXR0aW5ncyhzZXR0aW5ncyksXG4gICAgZW52OiB7XG4gICAgICAvLyBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgY29udGV4dCB2YXJpYWJsZSwgc28gaXQgY2FuIGFsc29cbiAgICAgIC8vIGJlIGFjY2Vzc2VkIGluIGZyYW1ld29yayBjb2RlIHdoZXJlIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGEgY29uc3RydWN0IHRyZWUuXG4gICAgICAuLi5zZXR0aW5ncy5nZXQoWydkZWJ1ZyddKSA/IHsgQ0RLX0RFQlVHOiAndHJ1ZScgfSA6IHt9LFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFjZUF2YWlsYWJsZUZvckNvbnRleHQoZW52OiBFbnYsIGxpbWl0OiBudW1iZXIpIHtcbiAgY29uc3Qgc2l6ZSA9ICh2YWx1ZT86IHN0cmluZykgPT4gdmFsdWUgIT0gbnVsbCA/IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKSA6IDA7XG5cbiAgY29uc3QgdXNlZFNwYWNlID0gT2JqZWN0LmVudHJpZXMoZW52KVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gayA9PT0gY3hhcGkuQ09OVEVYVF9FTlYgPyBzaXplKGspIDogc2l6ZShrKSArIHNpemUodikpXG4gICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuXG4gIHJldHVybiBNYXRoLm1heCgwLCBsaW1pdCAtIHVzZWRTcGFjZSk7XG59XG5cbi8qKlxuICogR3Vlc3MgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4gKlxuICogSW5wdXQgaXMgdGhlIFwiYXBwXCIgc3RyaW5nIHRoZSB1c2VyIGdhdmUgdXMuIE91dHB1dCBpcyB0aGUgY29tbWFuZCBsaW5lIHdlIGFyZSBnb2luZyB0byBleGVjdXRlLlxuICpcbiAqIC0gT24gV2luZG93czogaXQncyBoYXJkIHRvIHZlcmlmeSBpZiByZWdpc3RyeSBhc3NvY2lhdGlvbnMgaGF2ZSBvciBoYXZlIG5vdFxuICogICBiZWVuIHNldCB1cCBmb3IgdGhpcyBmaWxlIHR5cGUgKGkuZS4sIFNoZWxsRXhlYydpbmcgdGhlIGZpbGUgd2lsbCB3b3JrIG9yIG5vdCksXG4gKiAgIHNvIHdlJ2xsIGFzc3VtZSB0aGUgd29yc3QgYW5kIHRha2UgY29udHJvbCBvdXJzZWx2ZXMuXG4gKlxuICogLSBPbiBQT1NJWDogaWYgdGhlIGZpbGUgaXMgTk9UIG1hcmtlZCBhcyBleGVjdXRhYmxlLCBndWVzcyB0aGUgaW50ZXJwcmV0ZXIuIElmIGl0IGlzIGV4ZWN1dGFibGUsXG4gKiAgIHRoZSBjb3JyZWN0IGludGVycHJldGVyIHNob3VsZCBiZSBpbiB0aGUgZmlsZSdzIHNoZWJhbmcgYW5kIHdlIGp1c3QgZXhlY3V0ZSBpdCBkaXJlY3RseS5cbiAqXG4gKiBUaGUgYmVoYXZpb3Igb2Ygb25seSBndWVzc2luZyB0aGUgaW50ZXJwcmV0ZXIgaWYgdGhlIGNvbW1hbmQgbGluZSBpcyBhIHNpbmdsZSBmaWxlIG5hbWVcbiAqIGlzIGEgYml0IGxpbWl0ZWQ6IHdlIGNhbid0IHB1dCBhIGAuanNgIGZpbGUgd2l0aCBhcmd1bWVudHMgaW4gdGhlIGNvbW1hbmQgbGluZSBhbmQgaGF2ZVxuICogaXQgd29yayBwcm9wZXJseS4gTmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIHRoZSBiZWhhdmlvciB3ZSBoYXZlIGhhZCBmb3IgYSBsb25nIHRpbWUgYW5kIG5vYm9keVxuICogaGFzIHJlYWxseSBjb21wbGFpbmVkIGFib3V0IGl0LCBzbyB3ZSdsbCBrZWVwIGl0IGZvciBub3cuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBndWVzc0V4ZWN1dGFibGUoY29tbWFuZExpbmU6IHN0cmluZywgZGVidWdGbjogKG1zZzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gVGhlIGNvbW1hbmQgbGluZSB3aXRoIHNwYWNlcyBpbiBpdCBjb3VsZCByZWZlcmVuY2UgYSBmaWxlIG9uIGRpc2suIElmIHRydWUsXG4gIC8vIHdlIHF1b3RlIGl0IGFuZCByZXR1cm4gdGhhdCwgb3B0aW9uYWxseSBieSBwcmVmaXhpbmcgYW4gaW50ZXJwcmV0ZXIuXG4gIGNvbnN0IGZ1bGxGaWxlID0gYXdhaXQgY2hlY2tGaWxlKGNvbW1hbmRMaW5lKTtcbiAgaWYgKGZ1bGxGaWxlKSB7XG4gICAgcmV0dXJuIGd1ZXNzSW50ZXJwcmV0ZXIoZnVsbEZpbGUpO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCB0aGUgZmlyc3Qgd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lIGNvdWxkIHJlZmVyZW5jZSBhIGZpbGUgb25cbiAgLy8gZGlzayAocXVvdGVkIG9yIG5vbi1xdW90ZWQpLiBJZiB0cnVlLCB3ZSBvcHRpb25hbGx5IHByZWZpeCBhbiBpbnRlcnByZXRlci5cbiAgY29uc3QgW2ZpcnN0LCByZXN0XSA9IHNwbGl0Rmlyc3RTaGVsbFdvcmQoY29tbWFuZExpbmUpO1xuICBjb25zdCBmaXJzdEZpbGUgPSBhd2FpdCBjaGVja0ZpbGUoZmlyc3QpO1xuICBpZiAoZmlyc3RGaWxlKSB7XG4gICAgcmV0dXJuIGAke2d1ZXNzSW50ZXJwcmV0ZXIoZmlyc3RGaWxlKX0gJHtyZXN0fWAudHJpbSgpO1xuICB9XG5cbiAgLy8gV2UgY291bGRuJ3QgcGFyc2UgaXQsIHNvIGp1c3QgdXNlIHRoZSBnaXZlbiBjb21tYW5kIGxpbmUuXG4gIGF3YWl0IGRlYnVnRm4oYE5vdCBhIGZpbGU6ICcke2NvbW1hbmRMaW5lfScuIFVzaW5nICcke2NvbW1hbmRMaW5lfSBhcyBjb21tYW5kLWxpbmVgKTtcbiAgcmV0dXJuIGNvbW1hbmRMaW5lO1xufVxuXG4vKipcbiAqIEd1ZXNzIHRoZSByaWdodCBpbnRlcnByZXRlciB0byB1c2UgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmV0dXJuIGEgKHBhcnRpYWwpIGNvbW1hbmQgbGluZSB0byBleGVjdXRlIGl0LlxuICpcbiAqIFRoaXMgbWF5IGVudGFpbDpcbiAqXG4gKiAtIFByZWZpeGluZyBhbiBpbnRlcnByZXRlciBpZiBuZWNlc3NhcnlcbiAqIC0gUXVvdGluZyB0aGUgZmlsZSBuYW1lIGlmIG5lY2Vzc2FyeVxuICovXG5mdW5jdGlvbiBndWVzc0ludGVycHJldGVyKGZpbGU6IEZpbGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuICBjb25zdCBoYW5kbGVyID0gRVhURU5TSU9OX01BUFtwYXRoLmV4dG5hbWUoZmlsZS5maWxlTmFtZSldO1xuICBpZiAoaGFuZGxlciAmJiAoIWZpbGUuaXNFeGVjdXRhYmxlIHx8IGlzV2luZG93cykpIHtcbiAgICByZXR1cm4gaGFuZGxlcihmaWxlLmZpbGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBxdW90ZVNwYWNlcyhmaWxlLmZpbGVOYW1lKTtcbn1cblxuLyoqXG4gKiBNYXBwaW5nIG9mIGV4dGVuc2lvbnMgdG8gY29tbWFuZC1saW5lIGdlbmVyYXRvcnNcbiAqL1xuY29uc3QgRVhURU5TSU9OX01BUDogUmVjb3JkPHN0cmluZywgQ29tbWFuZEdlbmVyYXRvcj4gPSB7XG4gICcuanMnOiBleGVjdXRlTm9kZSxcbn07XG5cbnR5cGUgQ29tbWFuZEdlbmVyYXRvciA9IChmaWxlOiBzdHJpbmcpID0+IHN0cmluZztcblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBnaXZlbiBmaWxlIHdpdGggdGhlIHNhbWUgJ25vZGUnIHByb2Nlc3MgYXMgaXMgcnVubmluZyB0aGUgY3VycmVudCBwcm9jZXNzXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVOb2RlKHNjcmlwdEZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtxdW90ZVNwYWNlcyhwcm9jZXNzLmV4ZWNQYXRoKX0gJHtxdW90ZVNwYWNlcyhzY3JpcHRGaWxlKX1gO1xufVxuXG4vKipcbiAqIFBhcnNlIG9mZiB0aGUgZmlyc3QgcXVvdGVkIG9yIHVucXVvdGVkIHNoZWxsIHdvcmQuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0Rmlyc3RTaGVsbFdvcmQoY29tbWFuZExpbmU6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLnRyaW0oKTtcbiAgaWYgKGNvbW1hbmRMaW5lWzBdID09PSAnXCInKSB7XG4gICAgLy8gU3BsaXQgb24gdGhlIG5leHQgcXVvdGUsIGlnbm9yZSBhbnkgZXNjYXBpbmdcbiAgICBjb25zdCBlbmRRdW90ZSA9IGNvbW1hbmRMaW5lLmluZGV4T2YoJ1wiJywgMSk7XG4gICAgcmV0dXJuIGVuZFF1b3RlID4gLTEgPyBbY29tbWFuZExpbmUuc2xpY2UoMSwgZW5kUXVvdGUpLCBjb21tYW5kTGluZS5zbGljZShlbmRRdW90ZSArIDEpLnRyaW0oKV0gOiBbY29tbWFuZExpbmUsICcnXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTcGxpdCBvbiB0aGUgZmlyc3Qgc3BhY2VcbiAgICBjb25zdCBzcGFjZSA9IGNvbW1hbmRMaW5lLmluZGV4T2YoJyAnKTtcbiAgICByZXR1cm4gc3BhY2UgPiAtMSA/IFtjb21tYW5kTGluZS5zbGljZSgwLCBzcGFjZSksIGNvbW1hbmRMaW5lLnNsaWNlKHNwYWNlICsgMSldIDogW2NvbW1hbmRMaW5lLCAnJ107XG4gIH1cbn1cblxuLyoqXG4gKiBMb29rIHVwIGEgZmlsZSBhbmQgc2VlIGlmIGl0IGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZUluZm8gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmc3RhdCA9IGF3YWl0IGZzLnN0YXQoZmlsZU5hbWUpO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlTmFtZSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICBpc0V4ZWN1dGFibGU6IChmc3RhdC5tb2RlICYgZnMuY29uc3RhbnRzLlhfT0spICE9PSAwLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEZpbGVJbmZvIHtcbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNFeGVjdXRhYmxlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFF1b3RlIGEgc2hlbGwgcGFydCBpZiBpdCBjb250YWlucyBzcGFjZXNcbiAqXG4gKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gc3BhY2VzLCBub3RoaW5nIGVsc2UuXG4gKi9cbmZ1bmN0aW9uIHF1b3RlU3BhY2VzKHBhcnQ6IHN0cmluZykge1xuICBpZiAocGFydC5pbmNsdWRlcygnICcpKSB7XG4gICAgcmV0dXJuIGBcIiR7cGFydH1cImA7XG4gIH1cbiAgcmV0dXJuIHBhcnQ7XG59XG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSw4REFnQkM7QUFPRCxrREFpQ0M7QUFLRCxrRUF5QkM7QUFFRCw0REFRQztBQW1CRCwwQ0FtQkM7QUEzSkQsNkJBQTZCO0FBQzdCLHlDQUF5QztBQUN6QywrQkFBK0I7QUFPL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUseUJBQXlCLENBQzdDLEdBQWdCLEVBQ2hCLE9BQXVDO0lBRXZDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUVwQixHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUNsRCxNQUFNLE9BQU8sQ0FBQyxZQUFZLEtBQUssQ0FBQyxrQkFBa0IsNkJBQTZCLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEgsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUMxRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sQ0FBQyxZQUFZLEtBQUssQ0FBQyxtQkFBbUIsNkJBQTZCLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsUUFBa0I7SUFFbEIsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQztJQUU1QyxNQUFNLFlBQVksR0FBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDckUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBWSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDdkUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzdFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFDRCw0RkFBNEY7SUFDNUYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDekQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLGNBQWMsQ0FBQztJQUVoRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxRQUFrQjtJQUk1RCwyRUFBMkU7SUFDM0UsaUJBQWlCO0lBQ2pCLEVBQUU7SUFDRixxRkFBcUY7SUFDckYsZ0ZBQWdGO0lBQ2hGLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsaUZBQWlGO0lBQ2pGLE1BQU0sWUFBWSxHQUEyQjtRQUMzQyxTQUFTLEVBQUUsTUFBTTtLQUNsQixDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3JELFlBQVksQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLEdBQUcsRUFBRTtZQUNILEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNsRDtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsR0FBUSxFQUFFLEtBQWE7SUFDOUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQUMsV0FBbUIsRUFBRSxPQUF1QztJQUNoRyw4RUFBOEU7SUFDOUUsdUVBQXVFO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsNERBQTREO0lBQzVELE1BQU0sT0FBTyxDQUFDLGdCQUFnQixXQUFXLGFBQWEsV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JGLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFjO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO0lBRS9DLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzNELElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQXFDO0lBQ3RELEtBQUssRUFBRSxXQUFXO0NBQ25CLENBQUM7QUFJRjs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLFVBQWtCO0lBQ3JDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsV0FBbUI7SUFDOUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMzQiwrQ0FBK0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEgsQ0FBQztTQUFNLENBQUM7UUFDTiwyQkFBMkI7UUFDM0IsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLFNBQVMsQ0FBQyxRQUFnQjtJQUN2QyxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsT0FBTztZQUNMLFFBQVE7WUFDUixzQ0FBc0M7WUFDdEMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDckQsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQU9EOzs7O0dBSUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdzIH0gZnJvbSAnLi4vc2V0dGluZ3MnO1xuXG5leHBvcnQgdHlwZSBFbnYgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuZXhwb3J0IHR5cGUgQ29udGV4dCA9IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXG4vKipcbiAqIElmIHdlIGRvbid0IGhhdmUgcmVnaW9uL2FjY291bnQgZGVmaW5lZCBpbiBjb250ZXh0LCB3ZSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgU0RLIGJlaGF2aW9yXG4gKiB3aGVyZSByZWdpb24gaXMgcmV0cmlldmVkIGZyb20gfi8uYXdzL2NvbmZpZyBhbmQgYWNjb3VudCBpcyBiYXNlZCBvbiBkZWZhdWx0IGNyZWRlbnRpYWxzIHByb3ZpZGVyXG4gKiBjaGFpbiBhbmQgdGhlbiBTVFMgaXMgcXVlcmllZC5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgb3Bwb3J0dW5pc3RpY2FsbHk6IGZvciBleGFtcGxlLCBpZiB3ZSBjYW4ndCBhY2Nlc3MgU1RTIGZvciBzb21lIHJlYXNvbiBvciB0aGUgcmVnaW9uXG4gKiBpcyBub3QgY29uZmlndXJlZCwgdGhlIGNvbnRleHQgdmFsdWUgd2lsbCBiZSAnbnVsbCcgYW5kIHRoZXJlIGNvdWxkIGZhaWx1cmVzIGRvd24gdGhlIGxpbmUuIEluXG4gKiBzb21lIGNhc2VzLCBzeW50aGVzaXMgZG9lcyBub3QgcmVxdWlyZSByZWdpb24vYWNjb3VudCBpbmZvcm1hdGlvbiBhdCBhbGwsIHNvIHRoYXQgbWlnaHQgYmUgcGVyZmVjdGx5XG4gKiBmaW5lIGluIGNlcnRhaW4gc2NlbmFyaW9zLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQga2V5L3ZhbHVlIGJhc2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlRGVmYXVsdEVudmlyb25tZW50KFxuICBhd3M6IFNka1Byb3ZpZGVyLFxuICBkZWJ1Z0ZuOiAobXNnOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4sXG4pOiBQcm9taXNlPEVudj4ge1xuICBjb25zdCBlbnY6IEVudiA9IHt9O1xuXG4gIGVudltjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZdID0gYXdzLmRlZmF1bHRSZWdpb247XG4gIGF3YWl0IGRlYnVnRm4oYFNldHRpbmcgXCIke2N4YXBpLkRFRkFVTFRfUkVHSU9OX0VOVn1cIiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAke2VudltjeGFwaS5ERUZBVUxUX1JFR0lPTl9FTlZdfWApO1xuXG4gIGNvbnN0IGFjY291bnRJZCA9IChhd2FpdCBhd3MuZGVmYXVsdEFjY291bnQoKSk/LmFjY291bnRJZDtcbiAgaWYgKGFjY291bnRJZCkge1xuICAgIGVudltjeGFwaS5ERUZBVUxUX0FDQ09VTlRfRU5WXSA9IGFjY291bnRJZDtcbiAgICBhd2FpdCBkZWJ1Z0ZuKGBTZXR0aW5nIFwiJHtjeGFwaS5ERUZBVUxUX0FDQ09VTlRfRU5WfVwiIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICR7ZW52W2N4YXBpLkRFRkFVTFRfQUNDT1VOVF9FTlZdfWApO1xuICB9XG5cbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY29udGV4dCBmcm9tIHNldHRpbmdzLlxuICpcbiAqIE11dGF0ZXMgdGhlIGBjb250ZXh0YCBvYmplY3QgYW5kIHJldHVybnMgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250ZXh0RnJvbVNldHRpbmdzKFxuICBzZXR0aW5nczogU2V0dGluZ3MsXG4pIHtcbiAgY29uc3QgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBjb25zdCBwYXRoTWV0YWRhdGE6IGJvb2xlYW4gPSBzZXR0aW5ncy5nZXQoWydwYXRoTWV0YWRhdGEnXSkgPz8gdHJ1ZTtcbiAgaWYgKHBhdGhNZXRhZGF0YSkge1xuICAgIGNvbnRleHRbY3hhcGkuUEFUSF9NRVRBREFUQV9FTkFCTEVfQ09OVEVYVF0gPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgYXNzZXRNZXRhZGF0YTogYm9vbGVhbiA9IHNldHRpbmdzLmdldChbJ2Fzc2V0TWV0YWRhdGEnXSkgPz8gdHJ1ZTtcbiAgaWYgKGFzc2V0TWV0YWRhdGEpIHtcbiAgICBjb250ZXh0W2N4YXBpLkFTU0VUX1JFU09VUkNFX01FVEFEQVRBX0VOQUJMRURfQ09OVEVYVF0gPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvblJlcG9ydGluZzogYm9vbGVhbiA9IHNldHRpbmdzLmdldChbJ3ZlcnNpb25SZXBvcnRpbmcnXSkgPz8gdHJ1ZTtcbiAgaWYgKHZlcnNpb25SZXBvcnRpbmcpIHtcbiAgICBjb250ZXh0W2N4YXBpLkFOQUxZVElDU19SRVBPUlRJTkdfRU5BQkxFRF9DT05URVhUXSA9IHRydWU7XG4gIH1cbiAgLy8gV2UgbmVlZCB0byBrZWVwIG9uIGRvaW5nIHRoaXMgZm9yIGZyYW1ld29yayB2ZXJzaW9uIGZyb20gYmVmb3JlIHRoaXMgZmxhZyB3YXMgZGVwcmVjYXRlZC5cbiAgaWYgKCF2ZXJzaW9uUmVwb3J0aW5nKSB7XG4gICAgY29udGV4dFsnYXdzOmNkazpkaXNhYmxlLXZlcnNpb24tcmVwb3J0aW5nJ10gPSB0cnVlO1xuICB9XG5cbiAgY29uc3Qgc3RhZ2luZ0VuYWJsZWQgPSBzZXR0aW5ncy5nZXQoWydzdGFnaW5nJ10pID8/IHRydWU7XG4gIGlmICghc3RhZ2luZ0VuYWJsZWQpIHtcbiAgICBjb250ZXh0W2N4YXBpLkRJU0FCTEVfQVNTRVRfU1RBR0lOR19DT05URVhUXSA9IHRydWU7XG4gIH1cblxuICBjb25zdCBidW5kbGluZ1N0YWNrcyA9IHNldHRpbmdzLmdldChbJ2J1bmRsaW5nU3RhY2tzJ10pID8/IFsnKionXTtcbiAgY29udGV4dFtjeGFwaS5CVU5ETElOR19TVEFDS1NdID0gYnVuZGxpbmdTdGFja3M7XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQ29udmVydCBzZXR0aW5ncyB0byBjb250ZXh0L2Vudmlyb25tZW50IHZhcmlhYmxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGhQYXJhbWV0ZXJzRnJvbVNldHRpbmdzKHNldHRpbmdzOiBTZXR0aW5ncyk6IHtcbiAgY29udGV4dDogQ29udGV4dDtcbiAgZW52OiBFbnY7XG59IHtcbiAgLy8gVGhlc2UgYXJlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIHN3aXRjaCBvbiBkZWJ1Z2dpbmcgaW4gdGhlXG4gIC8vIENESyBmcmFtZXdvcmsuXG4gIC8vXG4gIC8vIC0gQ0RLX0RFQlVHOiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgY29udGV4dCB2YXJpYWJsZSwgc28gaXQgY2FuIGFsc29cbiAgLy8gYmUgYWNjZXNzZWQgaW4gZnJhbWV3b3JrIGNvZGUgd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYSBjb25zdHJ1Y3QgdHJlZS5cbiAgLy8gLSBKU0lJX0hPU1RfU1RBQ0tfVFJBQ0VTOiBoYXZlIHRoZSBqc2lpIGNsaWVudCBsaWJyYXJ5IHNlbmQgY2FsbCBzdGFja3NcbiAgLy8gYWNyb3NzIHNvIHdlIGNhbiByZWFkIHRoZW0gaW4gSlMtbGFuZC4gT25seSBzZXQgaWYgbm90IGFscmVhZHkgc2V0IGJ5IHRoZVxuICAvLyB1c2VyLCB0aGlzIGFsbG93cyB0aGVtIHRvIHN3aXRjaCBpdCBvZmYgYnkgc2V0dGluZyBgSlNJSV9IT1NUX1NUQUNLX1RSQUNFUz0wYC5cbiAgY29uc3QgZGVidWdFbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIENES19ERUJVRzogJ3RydWUnLFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuSlNJSV9IT1NUX1NUQUNLX1RSQUNFUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWdFbnZWYXJzLkpTSUlfSE9TVF9TVEFDS19UUkFDRVMgPSAnMSc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbnRleHQ6IGNvbnRleHRGcm9tU2V0dGluZ3Moc2V0dGluZ3MpLFxuICAgIGVudjoge1xuICAgICAgLi4uc2V0dGluZ3MuZ2V0KFsnZGVidWdBcHAnXSkgPyBkZWJ1Z0VudlZhcnMgOiB7fSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BhY2VBdmFpbGFibGVGb3JDb250ZXh0KGVudjogRW52LCBsaW1pdDogbnVtYmVyKSB7XG4gIGNvbnN0IHNpemUgPSAodmFsdWU/OiBzdHJpbmcpID0+IHZhbHVlICE9IG51bGwgPyBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSkgOiAwO1xuXG4gIGNvbnN0IHVzZWRTcGFjZSA9IE9iamVjdC5lbnRyaWVzKGVudilcbiAgICAubWFwKChbaywgdl0pID0+IGsgPT09IGN4YXBpLkNPTlRFWFRfRU5WID8gc2l6ZShrKSA6IHNpemUoaykgKyBzaXplKHYpKVxuICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICByZXR1cm4gTWF0aC5tYXgoMCwgbGltaXQgLSB1c2VkU3BhY2UpO1xufVxuXG4vKipcbiAqIEd1ZXNzIHRoZSBleGVjdXRhYmxlIGZyb20gdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudFxuICpcbiAqIElucHV0IGlzIHRoZSBcImFwcFwiIHN0cmluZyB0aGUgdXNlciBnYXZlIHVzLiBPdXRwdXQgaXMgdGhlIGNvbW1hbmQgbGluZSB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZS5cbiAqXG4gKiAtIE9uIFdpbmRvd3M6IGl0J3MgaGFyZCB0byB2ZXJpZnkgaWYgcmVnaXN0cnkgYXNzb2NpYXRpb25zIGhhdmUgb3IgaGF2ZSBub3RcbiAqICAgYmVlbiBzZXQgdXAgZm9yIHRoaXMgZmlsZSB0eXBlIChpLmUuLCBTaGVsbEV4ZWMnaW5nIHRoZSBmaWxlIHdpbGwgd29yayBvciBub3QpLFxuICogICBzbyB3ZSdsbCBhc3N1bWUgdGhlIHdvcnN0IGFuZCB0YWtlIGNvbnRyb2wgb3Vyc2VsdmVzLlxuICpcbiAqIC0gT24gUE9TSVg6IGlmIHRoZSBmaWxlIGlzIE5PVCBtYXJrZWQgYXMgZXhlY3V0YWJsZSwgZ3Vlc3MgdGhlIGludGVycHJldGVyLiBJZiBpdCBpcyBleGVjdXRhYmxlLFxuICogICB0aGUgY29ycmVjdCBpbnRlcnByZXRlciBzaG91bGQgYmUgaW4gdGhlIGZpbGUncyBzaGViYW5nIGFuZCB3ZSBqdXN0IGV4ZWN1dGUgaXQgZGlyZWN0bHkuXG4gKlxuICogVGhlIGJlaGF2aW9yIG9mIG9ubHkgZ3Vlc3NpbmcgdGhlIGludGVycHJldGVyIGlmIHRoZSBjb21tYW5kIGxpbmUgaXMgYSBzaW5nbGUgZmlsZSBuYW1lXG4gKiBpcyBhIGJpdCBsaW1pdGVkOiB3ZSBjYW4ndCBwdXQgYSBgLmpzYCBmaWxlIHdpdGggYXJndW1lbnRzIGluIHRoZSBjb21tYW5kIGxpbmUgYW5kIGhhdmVcbiAqIGl0IHdvcmsgcHJvcGVybHkuIE5ldmVydGhlbGVzcywgdGhpcyBpcyB0aGUgYmVoYXZpb3Igd2UgaGF2ZSBoYWQgZm9yIGEgbG9uZyB0aW1lIGFuZCBub2JvZHlcbiAqIGhhcyByZWFsbHkgY29tcGxhaW5lZCBhYm91dCBpdCwgc28gd2UnbGwga2VlcCBpdCBmb3Igbm93LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3Vlc3NFeGVjdXRhYmxlKGNvbW1hbmRMaW5lOiBzdHJpbmcsIGRlYnVnRm46IChtc2c6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFRoZSBjb21tYW5kIGxpbmUgd2l0aCBzcGFjZXMgaW4gaXQgY291bGQgcmVmZXJlbmNlIGEgZmlsZSBvbiBkaXNrLiBJZiB0cnVlLFxuICAvLyB3ZSBxdW90ZSBpdCBhbmQgcmV0dXJuIHRoYXQsIG9wdGlvbmFsbHkgYnkgcHJlZml4aW5nIGFuIGludGVycHJldGVyLlxuICBjb25zdCBmdWxsRmlsZSA9IGF3YWl0IGNoZWNrRmlsZShjb21tYW5kTGluZSk7XG4gIGlmIChmdWxsRmlsZSkge1xuICAgIHJldHVybiBndWVzc0ludGVycHJldGVyKGZ1bGxGaWxlKTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgdGhlIGZpcnN0IHdvcmQgb24gdGhlIGNvbW1hbmQgbGluZSBjb3VsZCByZWZlcmVuY2UgYSBmaWxlIG9uXG4gIC8vIGRpc2sgKHF1b3RlZCBvciBub24tcXVvdGVkKS4gSWYgdHJ1ZSwgd2Ugb3B0aW9uYWxseSBwcmVmaXggYW4gaW50ZXJwcmV0ZXIuXG4gIGNvbnN0IFtmaXJzdCwgcmVzdF0gPSBzcGxpdEZpcnN0U2hlbGxXb3JkKGNvbW1hbmRMaW5lKTtcbiAgY29uc3QgZmlyc3RGaWxlID0gYXdhaXQgY2hlY2tGaWxlKGZpcnN0KTtcbiAgaWYgKGZpcnN0RmlsZSkge1xuICAgIHJldHVybiBgJHtndWVzc0ludGVycHJldGVyKGZpcnN0RmlsZSl9ICR7cmVzdH1gLnRyaW0oKTtcbiAgfVxuXG4gIC8vIFdlIGNvdWxkbid0IHBhcnNlIGl0LCBzbyBqdXN0IHVzZSB0aGUgZ2l2ZW4gY29tbWFuZCBsaW5lLlxuICBhd2FpdCBkZWJ1Z0ZuKGBOb3QgYSBmaWxlOiAnJHtjb21tYW5kTGluZX0nLiBVc2luZyAnJHtjb21tYW5kTGluZX0gYXMgY29tbWFuZC1saW5lYCk7XG4gIHJldHVybiBjb21tYW5kTGluZTtcbn1cblxuLyoqXG4gKiBHdWVzcyB0aGUgcmlnaHQgaW50ZXJwcmV0ZXIgdG8gdXNlIHRvIGV4ZWN1dGUgdGhlIGdpdmVuIGZpbGUgYW5kIHJldHVybiBhIChwYXJ0aWFsKSBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBpdC5cbiAqXG4gKiBUaGlzIG1heSBlbnRhaWw6XG4gKlxuICogLSBQcmVmaXhpbmcgYW4gaW50ZXJwcmV0ZXIgaWYgbmVjZXNzYXJ5XG4gKiAtIFF1b3RpbmcgdGhlIGZpbGUgbmFtZSBpZiBuZWNlc3NhcnlcbiAqL1xuZnVuY3Rpb24gZ3Vlc3NJbnRlcnByZXRlcihmaWxlOiBGaWxlSW5mbyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzV2luZG93cyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG5cbiAgY29uc3QgaGFuZGxlciA9IEVYVEVOU0lPTl9NQVBbcGF0aC5leHRuYW1lKGZpbGUuZmlsZU5hbWUpXTtcbiAgaWYgKGhhbmRsZXIgJiYgKCFmaWxlLmlzRXhlY3V0YWJsZSB8fCBpc1dpbmRvd3MpKSB7XG4gICAgcmV0dXJuIGhhbmRsZXIoZmlsZS5maWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gcXVvdGVTcGFjZXMoZmlsZS5maWxlTmFtZSk7XG59XG5cbi8qKlxuICogTWFwcGluZyBvZiBleHRlbnNpb25zIHRvIGNvbW1hbmQtbGluZSBnZW5lcmF0b3JzXG4gKi9cbmNvbnN0IEVYVEVOU0lPTl9NQVA6IFJlY29yZDxzdHJpbmcsIENvbW1hbmRHZW5lcmF0b3I+ID0ge1xuICAnLmpzJzogZXhlY3V0ZU5vZGUsXG59O1xuXG50eXBlIENvbW1hbmRHZW5lcmF0b3IgPSAoZmlsZTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgZ2l2ZW4gZmlsZSB3aXRoIHRoZSBzYW1lICdub2RlJyBwcm9jZXNzIGFzIGlzIHJ1bm5pbmcgdGhlIGN1cnJlbnQgcHJvY2Vzc1xuICovXG5mdW5jdGlvbiBleGVjdXRlTm9kZShzY3JpcHRGaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cXVvdGVTcGFjZXMocHJvY2Vzcy5leGVjUGF0aCl9ICR7cXVvdGVTcGFjZXMoc2NyaXB0RmlsZSl9YDtcbn1cblxuLyoqXG4gKiBQYXJzZSBvZmYgdGhlIGZpcnN0IHF1b3RlZCBvciB1bnF1b3RlZCBzaGVsbCB3b3JkLlxuICovXG5mdW5jdGlvbiBzcGxpdEZpcnN0U2hlbGxXb3JkKGNvbW1hbmRMaW5lOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgY29tbWFuZExpbmUgPSBjb21tYW5kTGluZS50cmltKCk7XG4gIGlmIChjb21tYW5kTGluZVswXSA9PT0gJ1wiJykge1xuICAgIC8vIFNwbGl0IG9uIHRoZSBuZXh0IHF1b3RlLCBpZ25vcmUgYW55IGVzY2FwaW5nXG4gICAgY29uc3QgZW5kUXVvdGUgPSBjb21tYW5kTGluZS5pbmRleE9mKCdcIicsIDEpO1xuICAgIHJldHVybiBlbmRRdW90ZSA+IC0xID8gW2NvbW1hbmRMaW5lLnNsaWNlKDEsIGVuZFF1b3RlKSwgY29tbWFuZExpbmUuc2xpY2UoZW5kUXVvdGUgKyAxKS50cmltKCldIDogW2NvbW1hbmRMaW5lLCAnJ107XG4gIH0gZWxzZSB7XG4gICAgLy8gU3BsaXQgb24gdGhlIGZpcnN0IHNwYWNlXG4gICAgY29uc3Qgc3BhY2UgPSBjb21tYW5kTGluZS5pbmRleE9mKCcgJyk7XG4gICAgcmV0dXJuIHNwYWNlID4gLTEgPyBbY29tbWFuZExpbmUuc2xpY2UoMCwgc3BhY2UpLCBjb21tYW5kTGluZS5zbGljZShzcGFjZSArIDEpXSA6IFtjb21tYW5kTGluZSwgJyddO1xuICB9XG59XG5cbi8qKlxuICogTG9vayB1cCBhIGZpbGUgYW5kIHNlZSBpZiBpdCBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tGaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVJbmZvIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZnN0YXQgPSBhd2FpdCBmcy5zdGF0KGZpbGVOYW1lKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZU5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgaXNFeGVjdXRhYmxlOiAoZnN0YXQubW9kZSAmIGZzLmNvbnN0YW50cy5YX09LKSAhPT0gMCxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmludGVyZmFjZSBGaWxlSW5mbyB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzRXhlY3V0YWJsZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBRdW90ZSBhIHNoZWxsIHBhcnQgaWYgaXQgY29udGFpbnMgc3BhY2VzXG4gKlxuICogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHNwYWNlcywgbm90aGluZyBlbHNlLlxuICovXG5mdW5jdGlvbiBxdW90ZVNwYWNlcyhwYXJ0OiBzdHJpbmcpIHtcbiAgaWYgKHBhcnQuaW5jbHVkZXMoJyAnKSkge1xuICAgIHJldHVybiBgXCIke3BhcnR9XCJgO1xuICB9XG4gIHJldHVybiBwYXJ0O1xufVxuIl19
@@ -1,24 +1,35 @@
1
1
  import * as cxapi from '@aws-cdk/cloud-assembly-api';
2
2
  import { type DescribeChangeSetCommandOutput, type Parameter, type ResourceToImport } from '@aws-sdk/client-cloudformation';
3
3
  import type { Deployments } from './deployments';
4
+ import type { StackDiagnosis } from '../../actions/diagnose';
4
5
  import type { ICloudFormationClient, SdkProvider } from '../aws-auth/private';
5
6
  import type { Template, TemplateBodyParameter, TemplateParameter } from '../cloudformation';
6
7
  import { CloudFormationStack } from '../cloudformation';
7
8
  import { CloudFormationStackDiagnoser } from '../diagnosing/stack-diagnoser';
8
9
  import type { IoHelper } from '../io/private';
9
10
  import type { ResourcesToImport } from '../resource-import';
11
+ export interface ChangeSetReport {
12
+ readonly description: DescribeChangeSetCommandOutput;
13
+ readonly diagnosis: StackDiagnosis;
14
+ }
15
+ /**
16
+ * Waits for a ChangeSet to reach a terminal state and returns the diagnosis without throwing.
17
+ */
18
+ export declare function waitForChangeSetReport(cfn: ICloudFormationClient, ioHelper: IoHelper, stackNameOrArn: string, changeSetNameOrArn: string, { fetchAll, diagnoser }: {
19
+ fetchAll: boolean;
20
+ diagnoser: CloudFormationStackDiagnoser;
21
+ }): Promise<ChangeSetReport>;
10
22
  /**
11
23
  * Waits for a ChangeSet to be available for triggering a StackUpdate.
12
24
  *
13
25
  * Will return a changeset that is either ready to be executed or has no changes.
14
26
  * Will throw in other cases.
15
27
  *
16
- * @param cfn - a CloudFormation client
17
- * @param stackNameOrArn - the name or ARN of the Stack that the ChangeSet belongs to, prefer passing an ARN if available
18
- * @param changeSetNameOrArn - the name or ARN of the ChangeSet, prefer passing an ARN if available
19
- * @param fetchAll - if true, fetches all pages of the ChangeSet before returning.
20
- *
21
- * @returns the CloudFormation description of the ChangeSet
28
+ * @param cfn - a CloudFormation client
29
+ * @param stackNameOrArn - the name or ARN of the Stack the ChangeSet belongs to, prefer ARN
30
+ * @param changeSetNameOrArn - the name or ARN of the ChangeSet, prefer ARN
31
+ * @param fetchAll - if true, fetches all pages of the ChangeSet before returning.
32
+ * @returns the CloudFormation description of the ChangeSet
22
33
  */
23
34
  export declare function waitForChangeSet(cfn: ICloudFormationClient, ioHelper: IoHelper, stackNameOrArn: string, changeSetNameOrArn: string, { fetchAll, diagnoser }: {
24
35
  fetchAll: boolean;
@@ -75,6 +86,13 @@ export declare function createDiffChangeSet(ioHelper: IoHelper, options: Omit<Pr
75
86
  * bucket and assumed roles and such.
76
87
  */
77
88
  export declare function uploadStackTemplateAssets(stack: cxapi.CloudFormationStackArtifact, deployments: Deployments): Promise<void>;
89
+ /**
90
+ * Create a change set for online validation (never executes, returns diagnosis instead of throwing).
91
+ *
92
+ * Uses the same env preparation as diff, but calls `waitForChangeSetReport` to return
93
+ * the diagnosis rather than throwing on failure. Always cleans up the change set afterwards.
94
+ */
95
+ export declare function createValidationChangeSet(ioHelper: IoHelper, options: Omit<PrepareChangeSetOptions, 'includeNestedStacks' | 'diagnoser' | 'sdkProvider'>): Promise<ChangeSetReport>;
78
96
  /**
79
97
  * Waits for a CloudFormation stack to stabilize in a complete/available state
80
98
  * after a delete operation is issued.