@aws-cdk/toolkit-lib 1.19.1 → 1.19.3

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 (80) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/bootstrap/private/helpers.js +2 -2
  4. package/lib/actions/diff/private/helpers.js +6 -6
  5. package/lib/actions/refactor/private/mapping-helpers.js +3 -3
  6. package/lib/api/aws-auth/awscli-compatible.js +2 -2
  7. package/lib/api/aws-auth/base-credentials.js +2 -2
  8. package/lib/api/aws-auth/credential-plugins.js +3 -3
  9. package/lib/api/aws-auth/sdk-provider.js +6 -6
  10. package/lib/api/aws-auth/sdk.js +3 -3
  11. package/lib/api/bootstrap/bootstrap-environment.js +12 -12
  12. package/lib/api/cloud-assembly/context-store.js +2 -2
  13. package/lib/api/cloud-assembly/private/context-aware-source.js +2 -2
  14. package/lib/api/cloud-assembly/private/exec.d.ts +3 -0
  15. package/lib/api/cloud-assembly/private/exec.js +38 -5
  16. package/lib/api/cloud-assembly/private/helpers.js +2 -2
  17. package/lib/api/cloud-assembly/private/prepare-source.js +2 -2
  18. package/lib/api/cloud-assembly/private/stack-assembly.js +6 -6
  19. package/lib/api/cloud-assembly/source-builder.js +2 -2
  20. package/lib/api/cloud-assembly/stack-collection.js +8 -4
  21. package/lib/api/cloudformation/evaluate-cloudformation-template.js +2 -2
  22. package/lib/api/cloudformation/stack-helpers.js +2 -2
  23. package/lib/api/cloudformation/template-body-parameter.js +3 -3
  24. package/lib/api/context.js +2 -2
  25. package/lib/api/deployments/asset-publishing.js +3 -3
  26. package/lib/api/deployments/assets.js +5 -5
  27. package/lib/api/deployments/cfn-api.js +9 -9
  28. package/lib/api/deployments/checks.js +5 -5
  29. package/lib/api/deployments/deploy-stack.js +7 -7
  30. package/lib/api/deployments/deployment-result.js +2 -2
  31. package/lib/api/deployments/deployments.js +12 -12
  32. package/lib/api/drift/drift.js +3 -3
  33. package/lib/api/environment/environment-access.js +5 -5
  34. package/lib/api/environment/environment-resources.js +8 -8
  35. package/lib/api/garbage-collection/garbage-collector.js +7 -7
  36. package/lib/api/garbage-collection/progress-printer.js +2 -2
  37. package/lib/api/garbage-collection/stack-refresh.js +3 -3
  38. package/lib/api/hotswap/appsync-mapping-templates.js +2 -2
  39. package/lib/api/hotswap/bedrock-agentcore-runtimes.js +6 -6
  40. package/lib/api/hotswap/common.js +4 -4
  41. package/lib/api/hotswap/hotswap-deployments.js +2 -2
  42. package/lib/api/hotswap/lambda-functions.js +2 -2
  43. package/lib/api/notices/cached-data-source.js +2 -2
  44. package/lib/api/notices/web-data-source.js +9 -9
  45. package/lib/api/plugin/plugin.js +5 -5
  46. package/lib/api/refactoring/context.js +4 -4
  47. package/lib/api/refactoring/graph.js +3 -3
  48. package/lib/api/refactoring/index.js +5 -5
  49. package/lib/api/refactoring/stack-definitions.js +2 -2
  50. package/lib/api/resource-import/importer.js +2 -2
  51. package/lib/api/rwlock.js +3 -3
  52. package/lib/api/settings.js +3 -3
  53. package/lib/api/stack-events/stack-activity-monitor.d.ts +41 -4
  54. package/lib/api/stack-events/stack-activity-monitor.js +99 -9
  55. package/lib/api/stack-events/stack-event-poller.d.ts +5 -2
  56. package/lib/api/stack-events/stack-event-poller.js +7 -5
  57. package/lib/api/toolkit-info.js +9 -9
  58. package/lib/api/work-graph/work-graph-builder.js +3 -3
  59. package/lib/api/work-graph/work-graph.js +4 -4
  60. package/lib/context-providers/ami.js +2 -2
  61. package/lib/context-providers/cc-api-provider.js +9 -9
  62. package/lib/context-providers/hosted-zones.js +4 -4
  63. package/lib/context-providers/index.js +3 -3
  64. package/lib/context-providers/keys.js +3 -3
  65. package/lib/context-providers/load-balancers.js +10 -10
  66. package/lib/context-providers/security-groups.js +5 -5
  67. package/lib/context-providers/ssm-parameters.js +3 -3
  68. package/lib/context-providers/vpcs.js +7 -7
  69. package/lib/index_bg.wasm +0 -0
  70. package/lib/private/activity-printer/base.js +5 -5
  71. package/lib/private/activity-printer/current.js +2 -2
  72. package/lib/toolkit/toolkit-error.d.ts +31 -5
  73. package/lib/toolkit/toolkit-error.js +54 -14
  74. package/lib/toolkit/toolkit.js +21 -16
  75. package/lib/util/cloudformation.d.ts +18 -1
  76. package/lib/util/cloudformation.js +29 -3
  77. package/lib/util/directories.js +2 -2
  78. package/lib/util/objects.js +3 -3
  79. package/lib/util/version-range.js +5 -5
  80. package/package.json +11 -11
@@ -136,7 +136,7 @@ class ResourceImporter {
136
136
  await this.ioHelper.defaults.warn(`Ignoring updated/deleted resources (--force): ${offendingResources.join(', ')}`);
137
137
  }
138
138
  else {
139
- throw new toolkit_error_1.ToolkitError('No resource updates or deletes are allowed on import operation. Make sure to resolve pending changes ' +
139
+ throw new toolkit_error_1.ToolkitError('ImportNonAdditionChanges', 'No resource updates or deletes are allowed on import operation. Make sure to resolve pending changes ' +
140
140
  `to existing resources, before attempting an import. Updated/deleted resources: ${offendingResources.join(', ')} (--force to override)`);
141
141
  }
142
142
  }
@@ -328,4 +328,4 @@ function removeNonImportResources(stack) {
328
328
  delete template.Outputs;
329
329
  return template;
330
330
  }
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2ZkEsNERBS0M7QUFsZ0JELCtCQUE4QjtBQUU5Qix3REFBd0Q7QUFHeEQsK0JBQStCO0FBQy9CLCtCQUErQjtBQUUvQiwrREFBMkQ7QUFFM0QsZ0RBQXFFO0FBQ3JFLDJDQUFrRDtBQW1GbEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDbkIsZ0JBQWdCLENBQU07SUFFYixLQUFLLENBQW9DO0lBQ3pDLEdBQUcsQ0FBYztJQUNqQixRQUFRLENBQVc7SUFFcEMsWUFDRSxLQUF3QyxFQUN4QyxLQUE0QjtRQUU1QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxTQUErQjtRQUNwRSxNQUFNLEdBQUcsR0FBYyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUU3RCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsU0FBUztZQUNYLENBQUM7WUFFRCxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FB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LENBQUMsUUFBUSxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDdEMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3hCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCAqIGFzIGNmbkRpZmYgZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGlmZmVyZW5jZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJ5LCBSZXNvdXJjZVRvSW1wb3J0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB0eXBlIHsgRGVwbG95bWVudE1ldGhvZCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgYXNzZXJ0SXNTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBJTywgdHlwZSBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBUYWcgfSBmcm9tICcuLi90YWdzJztcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VzVG9JbXBvcnQgPSBSZXNvdXJjZVRvSW1wb3J0W107XG5leHBvcnQgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMgPSBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJ5W107XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VJbXBvcnRlclByb3BzIHtcbiAgZGVwbG95bWVudHM6IERlcGxveW1lbnRzO1xuICBpb0hlbHBlcjogSW9IZWxwZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0RGVwbG95bWVudE9wdGlvbnMge1xuICAvKipcbiAgICogUm9sZSB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIGZvciBkZXBsb3ltZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBzdGFjayByb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IG1ldGhvZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENoYW5nZSBzZXQgd2l0aCBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRNZXRob2Q/OiBEZXBsb3ltZW50TWV0aG9kO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0YWdzIChwYXNzIHRocm91Z2ggdG8gQ2xvdWRGb3JtYXRpb24pXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBVc2UgcHJldmlvdXMgdmFsdWVzIGZvciB1bnNwZWNpZmllZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIElmIG5vdCBzZXQsIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBldmVyeSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1c2VQcmV2aW91c1BhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNldCBvZiBwYXJhbWV0ZXJzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBwaHlzaWNhbCByZXNvdXJjZSBvZiBhIGdpdmVuIHR5cGVcbiAqIGZvciB0aGUgaW1wb3J0IG9wZXJhdGlvbiwgZXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAgXCJBV1M6OlMzOjpCdWNrZXRcIjogW1tcIkJ1Y2tldE5hbWVcIl1dLFxuICogICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IFtbXCJUYWJsZU5hbWVcIl0sIFtcIlRhYmxlQXJuXCJdLCBbXCJUYWJsZVN0cmVhbUFyblwiXV0sXG4gKiAgIFwiQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5XCI6IFtbXCJIb3N0ZWRab25lSWRcIiwgXCJOYW1lXCJdXSxcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJzID0geyBbcmVzb3VyY2VUeXBlOiBzdHJpbmddOiBzdHJpbmdbXVtdIH07XG5cbnR5cGUgUmVzb3VyY2VJZGVudGlmaWVyUHJvcGVydGllcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogTWFwcGluZyBvZiBDREsgcmVzb3VyY2VzIChMMSBjb25zdHJ1Y3RzKSB0byBwaHlzaWNhbCByZXNvdXJjZXMgdG8gYmUgaW1wb3J0ZWRcbiAqIGluIHRoZWlyIHBsYWNlLCBleGFtcGxlOlxuICpcbiAqIGBgYFxuICoge1xuICogICBcIk15U3RhY2svTXlTM0J1Y2tldC9SZXNvdXJjZVwiOiB7XG4gKiAgICAgXCJCdWNrZXROYW1lXCI6IFwibXktbWFudWFsbHktY3JlYXRlZC1zMy1idWNrZXRcIlxuICogICB9LFxuICogICBcIk15U3RhY2svTXlWcGMvUmVzb3VyY2VcIjoge1xuICogICAgIFwiVnBjSWRcIjogXCJ2cGMtMTIzNDU2Nzg5XCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbnR5cGUgUmVzb3VyY2VNYXAgPSB7IFtsb2dpY2FsUmVzb3VyY2U6IHN0cmluZ106IFJlc291cmNlSWRlbnRpZmllclByb3BlcnRpZXMgfTtcblxuLyoqXG4gKiBSZXNvdXJjZSBpbXBvcnRpbmcgdXRpbGl0eSBjbGFzc1xuICpcbiAqIC0gRGV0ZXJtaW5lcyB0aGUgcmVzb3VyY2VzIGFkZGVkIHRvIGEgdGVtcGxhdGUgKGNvbXBhcmVkIHRvIHRoZSBkZXBsb3llZCB2ZXJzaW9uKVxuICogLSBMb29rIHVwIHRoZSBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvblxuICogICAtIExvYWQgdGhlbSBmcm9tIGEgZmlsZSwgb3JcbiAqICAgLSBBc2sgdGhlIHVzZXIsIGJhc2VkIG9uIGluZm9ybWF0aW9uIHN1cHBsaWVkIHRvIHVzIGJ5IENsb3VkRm9ybWF0aW9uJ3MgR2V0VGVtcGxhdGVTdW1tYXJ5XG4gKiAtIFRyYW5zbGF0ZSB0aGUgaW5wdXQgdG8gYSBzdHJ1Y3R1cmUgZXhwZWN0ZWQgYnkgQ2xvdWRGb3JtYXRpb24sIHVwZGF0ZSB0aGUgdGVtcGxhdGUgdG8gYWRkIHRoZVxuICogICBpbXBvcnRhYmxlIHJlc291cmNlcywgdGhlbiBydW4gYW4gSU1QT1JUIGNoYW5nZXNldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlSW1wb3J0ZXIge1xuICBwcml2YXRlIF9jdXJyZW50VGVtcGxhdGU6IGFueTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBEZXBsb3ltZW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICBwcm9wczogUmVzb3VyY2VJbXBvcnRlclByb3BzLFxuICApIHtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2s7XG4gICAgdGhpcy5jZm4gPSBwcm9wcy5kZXBsb3ltZW50cztcbiAgICB0aGlzLmlvSGVscGVyID0gcHJvcHMuaW9IZWxwZXI7XG4gIH1cblxuICAvKipcbiAgICogQXNrIHRoZSB1c2VyIGZvciByZXNvdXJjZXMgdG8gaW1wb3J0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXNrRm9yUmVzb3VyY2VJZGVudGlmaWVycyhhdmFpbGFibGU6IEltcG9ydGFibGVSZXNvdXJjZVtdKTogUHJvbWlzZTxJbXBvcnRNYXA+IHtcbiAgICBjb25zdCByZXQ6IEltcG9ydE1hcCA9IHsgaW1wb3J0UmVzb3VyY2VzOiBbXSwgcmVzb3VyY2VNYXA6IHt9IH07XG4gICAgY29uc3QgcmVzb3VyY2VJZGVudGlmaWVycyA9IGF3YWl0IHRoaXMucmVzb3VyY2VJZGVudGlmaWVycygpO1xuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBhdmFpbGFibGUpIHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBhd2FpdCB0aGlzLmFza0ZvclJlc291cmNlSWRlbnRpZmllcihyZXNvdXJjZUlkZW50aWZpZXJzLCByZXNvdXJjZSk7XG4gICAgICBpZiAoIWlkZW50aWZpZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJldC5pbXBvcnRSZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG4gICAgICByZXQucmVzb3VyY2VNYXBbcmVzb3VyY2UubG9naWNhbElkXSA9IGlkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSByZXNvdXJjZXMgdG8gaW1wb3J0IGZyb20gYSBmaWxlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFJlc291cmNlSWRlbnRpZmllcnMoYXZhaWxhYmxlOiBJbXBvcnRhYmxlUmVzb3VyY2VbXSwgZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8SW1wb3J0TWFwPiB7XG4gICAgY29uc3QgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkSnNvbihmaWxlbmFtZSk7XG5cbiAgICBjb25zdCByZXQ6IEltcG9ydE1hcCA9IHsgaW1wb3J0UmVzb3VyY2VzOiBbXSwgcmVzb3VyY2VNYXA6IHt9IH07XG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBhdmFpbGFibGUpIHtcbiAgICAgIGNvbnN0IGRlc2NyID0gdGhpcy5kZXNjcmliZVJlc291cmNlKHJlc291cmNlLmxvZ2ljYWxJZCk7XG4gICAgICBjb25zdCBpZFByb3BzID0gY29udGVudHNbcmVzb3VyY2UubG9naWNhbElkXTtcbiAgICAgIGlmIChpZFByb3BzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoJyVzOiBpbXBvcnRpbmcgdXNpbmcgJXMnLCBjaGFsay5ibHVlKGRlc2NyKSwgY2hhbGsuYmx1ZShmbXRkaWN0KGlkUHJvcHMpKSkpO1xuXG4gICAgICAgIHJldC5pbXBvcnRSZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG4gICAgICAgIHJldC5yZXNvdXJjZU1hcFtyZXNvdXJjZS5sb2dpY2FsSWRdID0gaWRQcm9wcztcbiAgICAgICAgZGVsZXRlIGNvbnRlbnRzW3Jlc291cmNlLmxvZ2ljYWxJZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KCclczogc2tpcHBpbmcnLCBjaGFsay5ibHVlKGRlc2NyKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVua25vd24gPSBPYmplY3Qua2V5cyhjb250ZW50cyk7XG4gICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKGBVbnJlY29nbml6ZWQgcmVzb3VyY2UgaWRlbnRpZmllcnMgaW4gbWFwcGluZyBmaWxlOiAke3Vua25vd24uam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uIHRoZSBwcm92aWRlZCByZXNvdXJjZSBtYXBwaW5nLCBwcmVwYXJlIENGTiBzdHJ1Y3R1cmVzIGZvciBpbXBvcnQgKHRlbXBsYXRlLFxuICAgKiBSZXNvdXJjZXNUb0ltcG9ydCBzdHJ1Y3R1cmUpIGFuZCBwZXJmb3JtIHRoZSBpbXBvcnQgb3BlcmF0aW9uIChDbG91ZEZvcm1hdGlvbiBkZXBsb3ltZW50KVxuICAgKlxuICAgKiBAcGFyYW0gaW1wb3J0TWFwIC0gTWFwcGluZyBmcm9tIENESyBjb25zdHJ1Y3QgdHJlZSBwYXRoIHRvIHBoeXNpY2FsIHJlc291cmNlIGltcG9ydCBpZGVudGlmaWVyc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiBkZXBsb3kgb3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0UmVzb3VyY2VzRnJvbU1hcChpbXBvcnRNYXA6IEltcG9ydE1hcCwgb3B0aW9uczogSW1wb3J0RGVwbG95bWVudE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc291cmNlc1RvSW1wb3J0OiBSZXNvdXJjZXNUb0ltcG9ydCA9IGF3YWl0IHRoaXMubWFrZVJlc291cmNlc1RvSW1wb3J0KGltcG9ydE1hcCk7XG4gICAgY29uc3QgdXBkYXRlZFRlbXBsYXRlID0gYXdhaXQgdGhpcy5jdXJyZW50VGVtcGxhdGVXaXRoQWRkaXRpb25zKGltcG9ydE1hcC5pbXBvcnRSZXNvdXJjZXMpO1xuXG4gICAgYXdhaXQgdGhpcy5pbXBvcnRSZXNvdXJjZXModXBkYXRlZFRlbXBsYXRlLCByZXNvdXJjZXNUb0ltcG9ydCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQmFzZWQgb24gdGhlIGFwcCBhbmQgcmVzb3VyY2VzIGZpbGUgZ2VuZXJhdGVkIGJ5IGNkayBtaWdyYXRlLiBSZW1vdmVzIGFsbCBpdGVtcyBmcm9tIHRoZSB0ZW1wbGF0ZSB0aGF0XG4gICAqIGNhbm5vdCBiZSBpbmNsdWRlZCBpbiBhbiBpbXBvcnQgY2hhbmdlLXNldCBmb3IgbmV3IHN0YWNrcyBhbmQgcGVyZm9ybXMgdGhlIGltcG9ydCBvcGVyYXRpb24sXG4gICAqIGNyZWF0aW5nIHRoZSBuZXcgc3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSByZXNvdXJjZXNUb0ltcG9ydCAtIFRoZSBtYXBwaW5nIGNyZWF0ZWQgYnkgY2RrIG1pZ3JhdGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gZGVwbG95IG9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGltcG9ydFJlc291cmNlc0Zyb21NaWdyYXRlKHJlc291cmNlc1RvSW1wb3J0OiBSZXNvdXJjZXNUb0ltcG9ydCwgb3B0aW9uczogSW1wb3J0RGVwbG95bWVudE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHVwZGF0ZWRUZW1wbGF0ZSA9IHRoaXMucmVtb3ZlTm9uSW1wb3J0UmVzb3VyY2VzKCk7XG5cbiAgICBhd2FpdCB0aGlzLmltcG9ydFJlc291cmNlcyh1cGRhdGVkVGVtcGxhdGUsIHJlc291cmNlc1RvSW1wb3J0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0UmVzb3VyY2VzKG92ZXJyaWRlVGVtcGxhdGU6IGFueSwgcmVzb3VyY2VzVG9JbXBvcnQ6IFJlc291cmNlc1RvSW1wb3J0LCBvcHRpb25zOiBJbXBvcnREZXBsb3ltZW50T3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNmbi5kZXBsb3lTdGFjayh7XG4gICAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgICBkZXBsb3lOYW1lOiB0aGlzLnN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgb3ZlcnJpZGVUZW1wbGF0ZSxcbiAgICAgICAgcmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0SXNTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQocmVzdWx0KTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3VsdC5ub09wXG4gICAgICAgID8gJyDinIUgICVzIChubyBjaGFuZ2VzKSdcbiAgICAgICAgOiAnIOKchSAgJXMnO1xuXG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ1xcbicgKyBjaGFsay5ncmVlbihmb3JtYXQobWVzc2FnZSwgdGhpcy5zdGFjay5kaXNwbGF5TmFtZSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9FMzkwMC5tc2coZm9ybWF0KCdcXG4g4p2MICAlcyBmYWlsZWQ6ICVzJywgY2hhbGsuYm9sZCh0aGlzLnN0YWNrLmRpc3BsYXlOYW1lKSwgZSksIHsgZXJyb3I6IGUgYXMgYW55IH0pKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBkaWZmIGJldHdlZW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIGFuZCB0aGUgbmV3IHRlbXBsYXRlLCBlbnN1cmUgdGhhdCBpdCBpcyB2YWxpZFxuICAgKiBmb3IgaW1wb3J0aW5nIGFuZCByZXR1cm4gYSBsaXN0IG9mIHJlc291cmNlcyB0aGF0IGFyZSBiZWluZyBhZGRlZCBpbiB0aGUgbmV3IHZlcnNpb25cbiAgICpcbiAgICogQHJldHVybiBtYXBwaW5nIGxvZ2ljYWxSZXNvdXJjZUlkIC0+IHJlc291cmNlRGlmZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcyhhbGxvd05vbkFkZGl0aW9ucyA9IGZhbHNlKTogUHJvbWlzZTxEaXNjb3ZlckltcG9ydGFibGVSZXNvdXJjZXNSZXN1bHQ+IHtcbiAgICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSBhd2FpdCB0aGlzLmN1cnJlbnRUZW1wbGF0ZSgpO1xuXG4gICAgY29uc3QgZGlmZiA9IGNmbkRpZmYuZnVsbERpZmYoY3VycmVudFRlbXBsYXRlLCB0aGlzLnN0YWNrLnRlbXBsYXRlKTtcblxuICAgIC8vIElnbm9yZSBjaGFuZ2VzIHRvIENES01ldGFkYXRhXG4gICAgY29uc3QgcmVzb3VyY2VDaGFuZ2VzID0gT2JqZWN0LmVudHJpZXMoZGlmZi5yZXNvdXJjZXMuY2hhbmdlcylcbiAgICAgIC5maWx0ZXIoKFtsb2dpY2FsSWQsIF9dKSA9PiBsb2dpY2FsSWQgIT09ICdDREtNZXRhZGF0YScpO1xuXG4gICAgLy8gU3BsaXQgdGhlIGNoYW5nZXMgaW50byBhZGRpdGlvbnMgYW5kIG5vbi1hZGRpdGlvbnMuIEltcG9ydHMgb25seSBtYWtlIHNlbnNlXG4gICAgLy8gZm9yIG5ld2x5LWFkZGVkIHJlc291cmNlcy5cbiAgICBjb25zdCBub25BZGRpdGlvbnMgPSByZXNvdXJjZUNoYW5nZXMuZmlsdGVyKChbXywgZGlmXSkgPT4gIWRpZi5pc0FkZGl0aW9uKTtcbiAgICBjb25zdCBhZGRpdGlvbnMgPSByZXNvdXJjZUNoYW5nZXMuZmlsdGVyKChbXywgZGlmXSkgPT4gZGlmLmlzQWRkaXRpb24pO1xuXG4gICAgaWYgKG5vbkFkZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9mZmVuZGluZ1Jlc291cmNlcyA9IG5vbkFkZGl0aW9ucy5tYXAoKFtsb2dJZCwgX10pID0+IHRoaXMuZGVzY3JpYmVSZXNvdXJjZShsb2dJZCkpO1xuXG4gICAgICBpZiAoYWxsb3dOb25BZGRpdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKGBJZ25vcmluZyB1cGRhdGVkL2RlbGV0ZWQgcmVzb3VyY2VzICgtLWZvcmNlKTogJHtvZmZlbmRpbmdSZXNvdXJjZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ05vIHJlc291cmNlIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgYWxsb3dlZCBvbiBpbXBvcnQgb3BlcmF0aW9uLiBNYWtlIHN1cmUgdG8gcmVzb2x2ZSBwZW5kaW5nIGNoYW5nZXMgJyArXG4gICAgICAgICAgYHRvIGV4aXN0aW5nIHJlc291cmNlcywgYmVmb3JlIGF0dGVtcHRpbmcgYW4gaW1wb3J0LiBVcGRhdGVkL2RlbGV0ZWQgcmVzb3VyY2VzOiAke29mZmVuZGluZ1Jlc291cmNlcy5qb2luKCcsICcpfSAoLS1mb3JjZSB0byBvdmVycmlkZSlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXNvdXJjZXMgaW4gdGhlIG5ldyB0ZW1wbGF0ZSwgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGFyZSBhIHBvdGVudGlhbCBpbXBvcnQgY2FuZGlkYXRlc1xuICAgIHJldHVybiB7XG4gICAgICBhZGRpdGlvbnM6IGFkZGl0aW9ucy5tYXAoKFtsb2dpY2FsSWQsIHJlc291cmNlRGlmZl0pID0+ICh7XG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgcmVzb3VyY2VEaWZmLFxuICAgICAgICByZXNvdXJjZURlZmluaXRpb246IGFkZERlZmF1bHREZWxldGlvblBvbGljeSh0aGlzLnN0YWNrLnRlbXBsYXRlPy5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdID8/IHt9KSxcbiAgICAgIH0pKSxcbiAgICAgIGhhc05vbkFkZGl0aW9uczogbm9uQWRkaXRpb25zLmxlbmd0aCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgZW52aXJvbm1lbnQgb2YgYSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoKTogUHJvbWlzZTxjeGFwaS5FbnZpcm9ubWVudD4ge1xuICAgIHJldHVybiB0aGlzLmNmbi5yZXNvbHZlRW52aXJvbm1lbnQodGhpcy5zdGFjayk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnRseSBkZXBsb3llZCB0ZW1wbGF0ZSBvZiB0aGUgZ2l2ZW4gc3RhY2sgKFNJTkdMRVRPTilcbiAgICpcbiAgICogQHJldHVybnMgQ3VycmVudGx5IGRlcGxveWVkIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGN1cnJlbnRUZW1wbGF0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5fY3VycmVudFRlbXBsYXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VGVtcGxhdGUgPSBhd2FpdCB0aGlzLmNmbi5yZWFkQ3VycmVudFRlbXBsYXRlKHRoaXMuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFRlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgd2l0aCB0aGUgZ2l2ZW4gcmVzb3VyY2VzIGFkZGVkIHRvIGl0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGN1cnJlbnRUZW1wbGF0ZVdpdGhBZGRpdGlvbnMoYWRkaXRpb25zOiBJbXBvcnRhYmxlUmVzb3VyY2VbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLmN1cnJlbnRUZW1wbGF0ZSgpO1xuICAgIGlmICghdGVtcGxhdGUuUmVzb3VyY2VzKSB7XG4gICAgICB0ZW1wbGF0ZS5SZXNvdXJjZXMgPSB7fTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFkZCBvZiBhZGRpdGlvbnMpIHtcbiAgICAgIHRlbXBsYXRlLlJlc291cmNlc1thZGQubG9naWNhbElkXSA9IGFkZC5yZXNvdXJjZURlZmluaXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGxpc3Qgb2YgaW1wb3J0IGlkZW50aWZpZXJzIGZvciBhbGwgcmVzb3VyY2UgdHlwZXMgdXNlZCBpbiB0aGUgZ2l2ZW5cbiAgICogdGVtcGxhdGUgdGhhdCBkbyBzdXBwb3J0IHRoZSBpbXBvcnQgb3BlcmF0aW9uIChTSU5HTEVUT04pXG4gICAqXG4gICAqIEByZXR1cm5zIGEgbWFwcGluZyBmcm9tIGEgcmVzb3VyY2UgdHlwZSB0byBhIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCB0b2dldGhlciBpZGVudGlmeSB0aGUgcmVzb3VyY2UgZm9yIGltcG9ydFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvdXJjZUlkZW50aWZpZXJzKCk6IFByb21pc2U8UmVzb3VyY2VJZGVudGlmaWVycz4ge1xuICAgIGNvbnN0IHJldDogUmVzb3VyY2VJZGVudGlmaWVycyA9IHt9O1xuICAgIGNvbnN0IHJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcyA9IGF3YWl0IHRoaXMuY2ZuLnJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcyh0aGlzLnN0YWNrKTtcbiAgICBmb3IgKGNvbnN0IHN1bW1hcnkgb2YgcmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzKSB7XG4gICAgICBpZiAoJ1Jlc291cmNlVHlwZScgaW4gc3VtbWFyeSAmJiBzdW1tYXJ5LlJlc291cmNlVHlwZSAmJiAnUmVzb3VyY2VJZGVudGlmaWVycycgaW4gc3VtbWFyeSAmJiBzdW1tYXJ5LlJlc291cmNlSWRlbnRpZmllcnMpIHtcbiAgICAgICAgcmV0W3N1bW1hcnkuUmVzb3VyY2VUeXBlXSA9IChzdW1tYXJ5LlJlc291cmNlSWRlbnRpZmllcnMgPz8gW10pPy5tYXAoeCA9PiB4LnNwbGl0KCcsJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzayBmb3IgdGhlIGltcG9ydGFibGUgaWRlbnRpZmllciBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG4gICAqXG4gICAqIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGlkZW50aWZpZXIgdW5kZXIgd2hpY2ggYSByZXNvdXJjZSBjYW4gYmUgaW1wb3J0ZWQuIFRoZSBgaW1wb3J0YFxuICAgKiBvcGVyYXRpb24gbmVlZHMgZXhhY3RseSBvbmUgb2YgdGhlbS5cbiAgICpcbiAgICogLSBJZiB3ZSBjYW4gZ2V0IG9uZSBmcm9tIHRoZSB0ZW1wbGF0ZSwgd2Ugd2lsbCB1c2Ugb25lLlxuICAgKiAtIE90aGVyd2lzZSwgd2Ugd2lsbCBhc2sgdGhlIHVzZXIgZm9yIG9uZSBvZiB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhc2tGb3JSZXNvdXJjZUlkZW50aWZpZXIoXG4gICAgcmVzb3VyY2VJZGVudGlmaWVyczogUmVzb3VyY2VJZGVudGlmaWVycyxcbiAgICBjaGc6IEltcG9ydGFibGVSZXNvdXJjZSxcbiAgKTogUHJvbWlzZTxSZXNvdXJjZUlkZW50aWZpZXJQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGhpcy5kZXNjcmliZVJlc291cmNlKGNoZy5sb2dpY2FsSWQpO1xuXG4gICAgLy8gU2tpcCByZXNvdXJjZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpbXBvcnRpbmdcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBjaGcucmVzb3VyY2VEaWZmLm5ld1Jlc291cmNlVHlwZTtcbiAgICBpZiAocmVzb3VyY2VUeXBlID09PSB1bmRlZmluZWQgfHwgIShyZXNvdXJjZVR5cGUgaW4gcmVzb3VyY2VJZGVudGlmaWVycykpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihgJHtyZXNvdXJjZU5hbWV9OiB1bnN1cHBvcnRlZCByZXNvdXJjZSB0eXBlICR7cmVzb3VyY2VUeXBlfSwgc2tpcHBpbmcgaW1wb3J0LmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBpZFByb3BTZXRzID0gcmVzb3VyY2VJZGVudGlmaWVyc1tyZXNvdXJjZVR5cGVdO1xuXG4gICAgLy8gUmV0YWluIG9ubHkgbGl0ZXJhbCBzdHJpbmdzOiBzdHJpcCBwb3RlbnRpYWwgQ0ZOIGludHJpbnNpY3NcbiAgICBjb25zdCByZXNvdXJjZVByb3BzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGNoZy5yZXNvdXJjZURlZmluaXRpb24uUHJvcGVydGllcyA/PyB7fSlcbiAgICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnKSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgIC8vIEZpbmQgcHJvcGVydHkgc2V0cyB0aGF0IGFyZSBmdWxseSBzYXRpc2ZpZWQgaW4gdGhlIHRlbXBsYXRlLCBhc2sgdGhlIHVzZXIgdG8gY29uZmlybSB0aGVtXG4gICAgY29uc3Qgc2F0aXNmaWVkUHJvcFNldHMgPSBpZFByb3BTZXRzLmZpbHRlcihwcyA9PiBwcy5ldmVyeShwID0+IHJlc291cmNlUHJvcHNbcF0pKTtcbiAgICBmb3IgKGNvbnN0IHNhdGlzZmllZFByb3BTZXQgb2Ygc2F0aXNmaWVkUHJvcFNldHMpIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZVByb3BzID0gT2JqZWN0LmZyb21FbnRyaWVzKHNhdGlzZmllZFByb3BTZXQubWFwKHAgPT4gW3AsIHJlc291cmNlUHJvcHNbcF1dKSk7XG4gICAgICBjb25zdCBkaXNwbGF5Q2FuZGlkYXRlUHJvcHMgPSBmbXRkaWN0KGNhbmRpZGF0ZVByb3BzKTtcblxuICAgICAgY29uc3QgaW1wb3J0VGhlUmVzb3VyY2UgPSBhd2FpdCB0aGlzLmlvSGVscGVyLnJlcXVlc3RSZXNwb25zZShJTy5DREtfVE9PTEtJVF9JMzEwMC5yZXEoYCR7Y2hhbGsuYmx1ZShyZXNvdXJjZU5hbWUpfSAoJHtyZXNvdXJjZVR5cGV9KTogaW1wb3J0IHdpdGggJHtjaGFsay55ZWxsb3coZGlzcGxheUNhbmRpZGF0ZVByb3BzKX1gLCB7XG4gICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgdHlwZTogcmVzb3VyY2VUeXBlLFxuICAgICAgICAgIHByb3BzOiBjYW5kaWRhdGVQcm9wcyxcbiAgICAgICAgICBzdHJpbmdpZmllZFByb3BzOiBkaXNwbGF5Q2FuZGlkYXRlUHJvcHMsXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgICBpZiAoaW1wb3J0VGhlUmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZVByb3BzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGdvdCBoZXJlIGFuZCB0aGUgdXNlciByZWplY3RlZCBhbnkgYXZhaWxhYmxlIGlkZW50aWZpZXJzLCB0aGVuIGFwcGFyZW50bHkgdGhleSBkb24ndCB3YW50IHRoZSByZXNvdXJjZSBhdCBhbGxcbiAgICBpZiAoc2F0aXNmaWVkUHJvcFNldHMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGNoYWxrLmdyZXkoYFNraXBwaW5nIGltcG9ydCBvZiAke3Jlc291cmNlTmFtZX1gKSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFdlIGNhbm5vdCBhdXRvLWltcG9ydCB0aGlzLCBhc2sgdGhlIHVzZXIgZm9yIG9uZSBvZiB0aGUgcHJvcHNcbiAgICAvLyBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgY2FzZXMgaXMgd2hhdCB3ZSBwcmludDogZm9yIG11bHRpcGxlIHByb3BlcnRpZXMsIHdlIHByaW50IGEgcHJlYW1ibGVcbiAgICBjb25zdCBwcmVmaXggPSBgJHtjaGFsay5ibHVlKHJlc291cmNlTmFtZSl9ICgke3Jlc291cmNlVHlwZX0pYDtcbiAgICBjb25zdCBwcm9tcHRQYXR0ZXJuID0gYCR7cHJlZml4fTogZW50ZXIgJXNgO1xuICAgIGlmIChpZFByb3BTZXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IHByZWFtYmxlID0gYCR7cHJlZml4fTogZW50ZXIgb25lIG9mICR7aWRQcm9wU2V0cy5tYXAoeCA9PiBjaGFsay5ibHVlKHguam9pbignKycpKSkuam9pbignLCAnKX0gdG8gaW1wb3J0IChsZWF2ZSBhbGwgZW1wdHkgdG8gc2tpcClgO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKHByZWFtYmxlKTtcbiAgICB9XG5cbiAgICAvLyBEbyB0aGUgaW5wdXQgbG9vcCBoZXJlXG4gICAgZm9yIChjb25zdCBpZFByb3BzIG9mIGlkUHJvcFNldHMpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGlkUHJvcCBvZiBpZFByb3BzKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSB2YWx1ZSBmcm9tIHRoZSB0ZW1wbGF0ZSwgdXNlIGl0IGFzIGRlZmF1bHQuIFRoaXMgd2lsbCBvbmx5IGJlIGEgcGFydGlhbFxuICAgICAgICAvLyBpZGVudGlmaWVyIGlmIHByZXNlbnQsIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIGRvbmUgdGhlIGltcG9ydCBhbHJlYWR5IGFib3ZlLlxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZXNvdXJjZVByb3BzW2lkUHJvcF0gPz8gJyc7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmlvSGVscGVyLnJlcXVlc3RSZXNwb25zZShJTy5DREtfVE9PTEtJVF9JMzExMC5yZXEoXG4gICAgICAgICAgZm9ybWF0KHByb21wdFBhdHRlcm4sIGNoYWxrLmJsdWUoaWRQcm9wKSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVzb3VyY2VOYW1lLFxuICAgICAgICAgICAgICB0eXBlOiByZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICAgIGlkUHJvcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZURlc2NyaXB0aW9uOiBkZWZhdWx0VmFsdWUgPyB1bmRlZmluZWQgOiAnZW1wdHkgdG8gc2tpcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICkpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0W2lkUHJvcF0gPSByZXNwb25zZTtcbiAgICAgICAgLy8gQWxzbyBzdGljayB0aGlzIHByb3BlcnR5IGludG8gJ3Jlc291cmNlUHJvcHMnLCBzbyB0aGF0IGl0IG1heSBiZSByZXVzZWQgYnkgYSBzdWJzZXF1ZW50IHF1ZXN0aW9uXG4gICAgICAgIC8vIChmb3IgYSBkaWZmZXJlbnQgY29tcG91bmQgaWRlbnRpZmllciB0aGF0IGludm9sdmVzIHRoZSBzYW1lIHByb3BlcnR5KS4gSnVzdCBhIHNtYWxsIFVYIGVuaGFuY2VtZW50LlxuICAgICAgICByZXNvdXJjZVByb3BzW2lkUHJvcF0gPSByZXNwb25zZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHVzZXIgZ2F2ZSBpbnB1dHMgZm9yIGFsbCB2YWx1ZXMsIHdlIGFyZSBjb21wbGV0ZVxuICAgICAgaWYgKE9iamVjdC5rZXlzKGlucHV0KS5sZW5ndGggPT09IGlkUHJvcHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oY2hhbGsuZ3JleShgU2tpcHBpbmcgaW1wb3J0IG9mICR7cmVzb3VyY2VOYW1lfWApKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGludGVybmFsIFwicmVzb3VyY2UgbWFwcGluZ1wiIHN0cnVjdHVyZSB0byBDbG91ZEZvcm1hdGlvbiBhY2NlcHRlZCBcIlJlc291cmNlc1RvSW1wb3J0XCIgc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIG1ha2VSZXNvdXJjZXNUb0ltcG9ydChyZXNvdXJjZU1hcDogSW1wb3J0TWFwKTogUHJvbWlzZTxSZXNvdXJjZXNUb0ltcG9ydD4ge1xuICAgIHJldHVybiByZXNvdXJjZU1hcC5pbXBvcnRSZXNvdXJjZXMubWFwKHJlcyA9PiAoe1xuICAgICAgTG9naWNhbFJlc291cmNlSWQ6IHJlcy5sb2dpY2FsSWQsXG4gICAgICBSZXNvdXJjZVR5cGU6IHJlcy5yZXNvdXJjZURpZmYubmV3UmVzb3VyY2VUeXBlISxcbiAgICAgIFJlc291cmNlSWRlbnRpZmllcjogcmVzb3VyY2VNYXAucmVzb3VyY2VNYXBbcmVzLmxvZ2ljYWxJZF0sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgQ2xvdWRGb3JtYXRpb24gbG9naWNhbCByZXNvdXJjZSBJRCB0byBDREsgY29uc3RydWN0IHRyZWUgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0gbG9naWNhbElkIC0gQ2xvdWRGb3JtYXRpb24gbG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2UgKHRoZSBrZXkgaW4gdGhlIHRlbXBsYXRlJ3MgUmVzb3VyY2VzIHNlY3Rpb24pXG4gICAqIEByZXR1cm5zIEZvcndhcmQtc2xhc2ggc2VwYXJhdGVkIHBhdGggb2YgdGhlIHJlc291cmNlIGluIENESyBjb25zdHJ1Y3QgdHJlZSwgZS5nLiBNeVN0YWNrL015QnVja2V0L1Jlc291cmNlXG4gICAqL1xuICBwcml2YXRlIGRlc2NyaWJlUmVzb3VyY2UobG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnRlbXBsYXRlPy5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdPy5NZXRhZGF0YT8uWydhd3M6Y2RrOnBhdGgnXSA/PyBsb2dpY2FsSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBDREtNZXRhZGF0YSBhbmQgT3V0cHV0cyBpbiB0aGUgdGVtcGxhdGUgc28gdGhhdCBvbmx5IHJlc291cmNlcyBmb3IgaW1wb3J0aW5nIGFyZSBsZWZ0LlxuICAgKiBAcmV0dXJucyB0ZW1wbGF0ZSB3aXRoIGltcG9ydCByZXNvdXJjZXMgb25seVxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVOb25JbXBvcnRSZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHJlbW92ZU5vbkltcG9ydFJlc291cmNlcyh0aGlzLnN0YWNrKTtcbiAgfVxufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgcmVzb3VyY2UgaW4gdGhlIHRlbXBsYXRlIHRoYXQgaXMgaW1wb3J0YWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydGFibGVSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgZGVmaW5pdGlvbiBpbiB0aGUgbmV3IHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZURlZmluaXRpb246IGFueTtcblxuICAvKipcbiAgICogVGhlIGRpZmYgYXMgcmVwb3J0ZWQgYnkgYGNsb3VkZm9ybWF0aW9uLWRpZmZgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEaWZmOiBSZXNvdXJjZURpZmZlcmVuY2U7XG59XG5cbi8qKlxuICogVGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBleGVjdXRlIGFuIGltcG9ydCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRNYXAge1xuICAvKipcbiAgICogTWFwcGluZyBsb2dpY2FsIElEcyB0byBwaHlzaWNhbCBuYW1lc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VNYXA6IFJlc291cmNlTWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0aW9uIG9mIHJlc291cmNlcyB3ZSBhcmUgYWN0dWFsbHkgaW1wb3J0aW5nXG4gICAqXG4gICAqIEZvciBlYWNoIG9mIHRoZSByZXNvdXJjZXMgaW4gdGhpcyBsaXN0LCB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgZW50cnkgaW5cbiAgICogdGhlIGByZXNvdXJjZU1hcGAgbWFwLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0UmVzb3VyY2VzOiBJbXBvcnRhYmxlUmVzb3VyY2VbXTtcbn1cblxuZnVuY3Rpb24gZm10ZGljdDxBPih4czogUmVjb3JkPHN0cmluZywgQT4pIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHhzKS5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogQWRkIGEgZGVmYXVsdCBgRGVsZXRpb25Qb2xpY3lgIHBvbGljeS5cbiAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnUmV0YWluJywgdG8gbG93ZXIgcmlzayBvZiB1bmludGVudGlvbmFsbHlcbiAqIGRlbGV0aW5nIHN0YXRlZnVsIHJlc291cmNlcyBpbiB0aGUgcHJvY2VzcyBvZiBpbXBvcnRpbmcgdG8gQ0RLLlxuICovXG5mdW5jdGlvbiBhZGREZWZhdWx0RGVsZXRpb25Qb2xpY3kocmVzb3VyY2U6IGFueSk6IGFueSB7XG4gIGlmIChyZXNvdXJjZS5EZWxldGlvblBvbGljeSkge1xuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb3VyY2UsXG4gICAgRGVsZXRpb25Qb2xpY3k6ICdSZXRhaW4nLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlc1Jlc3VsdCB7XG4gIHJlYWRvbmx5IGFkZGl0aW9uczogSW1wb3J0YWJsZVJlc291cmNlW107XG4gIHJlYWRvbmx5IGhhc05vbkFkZGl0aW9uczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vbkltcG9ydFJlc291cmNlcyhzdGFjazpjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBzdGFjay50ZW1wbGF0ZTtcbiAgZGVsZXRlIHRlbXBsYXRlLlJlc291cmNlcy5DREtNZXRhZGF0YTtcbiAgZGVsZXRlIHRlbXBsYXRlLk91dHB1dHM7XG4gIHJldHVybiB0ZW1wbGF0ZTtcbn1cbiJdfQ==
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2ZkEsNERBS0M7QUFsZ0JELCtCQUE4QjtBQUU5Qix3REFBd0Q7QUFHeEQsK0JBQStCO0FBQy9CLCtCQUErQjtBQUUvQiwrREFBMkQ7QUFFM0QsZ0RBQXFFO0FBQ3JFLDJDQUFrRDtBQW1GbEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDbkIsZ0JBQWdCLENBQU07SUFFYixLQUFLLENBQW9DO0lBQ3pDLEdBQUcsQ0FBYztJQUNqQixRQUFRLENBQVc7SUFFcEMsWUFDRSxLQUF3QyxFQUN4QyxLQUE0QjtRQUU1QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxTQUErQjtRQUNwRSxNQUFNLEdBQUcsR0FBYyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUU3RCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsU0FBUztZQUNYLENBQUM7WUFFRCxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FB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QVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDdEMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3hCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCAqIGFzIGNmbkRpZmYgZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGlmZmVyZW5jZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJ5LCBSZXNvdXJjZVRvSW1wb3J0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB0eXBlIHsgRGVwbG95bWVudE1ldGhvZCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZGVwbG95JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgYXNzZXJ0SXNTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBJTywgdHlwZSBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBUYWcgfSBmcm9tICcuLi90YWdzJztcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VzVG9JbXBvcnQgPSBSZXNvdXJjZVRvSW1wb3J0W107XG5leHBvcnQgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMgPSBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJ5W107XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VJbXBvcnRlclByb3BzIHtcbiAgZGVwbG95bWVudHM6IERlcGxveW1lbnRzO1xuICBpb0hlbHBlcjogSW9IZWxwZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0RGVwbG95bWVudE9wdGlvbnMge1xuICAvKipcbiAgICogUm9sZSB0byBwYXNzIHRvIENsb3VkRm9ybWF0aW9uIGZvciBkZXBsb3ltZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBzdGFjayByb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IG1ldGhvZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENoYW5nZSBzZXQgd2l0aCBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRNZXRob2Q/OiBEZXBsb3ltZW50TWV0aG9kO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0YWdzIChwYXNzIHRocm91Z2ggdG8gQ2xvdWRGb3JtYXRpb24pXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBVc2UgcHJldmlvdXMgdmFsdWVzIGZvciB1bnNwZWNpZmllZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIElmIG5vdCBzZXQsIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGZvciBldmVyeSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1c2VQcmV2aW91c1BhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSb2xsYmFjayBmYWlsZWQgZGVwbG95bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2s/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNldCBvZiBwYXJhbWV0ZXJzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBwaHlzaWNhbCByZXNvdXJjZSBvZiBhIGdpdmVuIHR5cGVcbiAqIGZvciB0aGUgaW1wb3J0IG9wZXJhdGlvbiwgZXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAgXCJBV1M6OlMzOjpCdWNrZXRcIjogW1tcIkJ1Y2tldE5hbWVcIl1dLFxuICogICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IFtbXCJUYWJsZU5hbWVcIl0sIFtcIlRhYmxlQXJuXCJdLCBbXCJUYWJsZVN0cmVhbUFyblwiXV0sXG4gKiAgIFwiQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5XCI6IFtbXCJIb3N0ZWRab25lSWRcIiwgXCJOYW1lXCJdXSxcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJzID0geyBbcmVzb3VyY2VUeXBlOiBzdHJpbmddOiBzdHJpbmdbXVtdIH07XG5cbnR5cGUgUmVzb3VyY2VJZGVudGlmaWVyUHJvcGVydGllcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogTWFwcGluZyBvZiBDREsgcmVzb3VyY2VzIChMMSBjb25zdHJ1Y3RzKSB0byBwaHlzaWNhbCByZXNvdXJjZXMgdG8gYmUgaW1wb3J0ZWRcbiAqIGluIHRoZWlyIHBsYWNlLCBleGFtcGxlOlxuICpcbiAqIGBgYFxuICoge1xuICogICBcIk15U3RhY2svTXlTM0J1Y2tldC9SZXNvdXJjZVwiOiB7XG4gKiAgICAgXCJCdWNrZXROYW1lXCI6IFwibXktbWFudWFsbHktY3JlYXRlZC1zMy1idWNrZXRcIlxuICogICB9LFxuICogICBcIk15U3RhY2svTXlWcGMvUmVzb3VyY2VcIjoge1xuICogICAgIFwiVnBjSWRcIjogXCJ2cGMtMTIzNDU2Nzg5XCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbnR5cGUgUmVzb3VyY2VNYXAgPSB7IFtsb2dpY2FsUmVzb3VyY2U6IHN0cmluZ106IFJlc291cmNlSWRlbnRpZmllclByb3BlcnRpZXMgfTtcblxuLyoqXG4gKiBSZXNvdXJjZSBpbXBvcnRpbmcgdXRpbGl0eSBjbGFzc1xuICpcbiAqIC0gRGV0ZXJtaW5lcyB0aGUgcmVzb3VyY2VzIGFkZGVkIHRvIGEgdGVtcGxhdGUgKGNvbXBhcmVkIHRvIHRoZSBkZXBsb3llZCB2ZXJzaW9uKVxuICogLSBMb29rIHVwIHRoZSBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvblxuICogICAtIExvYWQgdGhlbSBmcm9tIGEgZmlsZSwgb3JcbiAqICAgLSBBc2sgdGhlIHVzZXIsIGJhc2VkIG9uIGluZm9ybWF0aW9uIHN1cHBsaWVkIHRvIHVzIGJ5IENsb3VkRm9ybWF0aW9uJ3MgR2V0VGVtcGxhdGVTdW1tYXJ5XG4gKiAtIFRyYW5zbGF0ZSB0aGUgaW5wdXQgdG8gYSBzdHJ1Y3R1cmUgZXhwZWN0ZWQgYnkgQ2xvdWRGb3JtYXRpb24sIHVwZGF0ZSB0aGUgdGVtcGxhdGUgdG8gYWRkIHRoZVxuICogICBpbXBvcnRhYmxlIHJlc291cmNlcywgdGhlbiBydW4gYW4gSU1QT1JUIGNoYW5nZXNldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlSW1wb3J0ZXIge1xuICBwcml2YXRlIF9jdXJyZW50VGVtcGxhdGU6IGFueTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBEZXBsb3ltZW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICBwcm9wczogUmVzb3VyY2VJbXBvcnRlclByb3BzLFxuICApIHtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2s7XG4gICAgdGhpcy5jZm4gPSBwcm9wcy5kZXBsb3ltZW50cztcbiAgICB0aGlzLmlvSGVscGVyID0gcHJvcHMuaW9IZWxwZXI7XG4gIH1cblxuICAvKipcbiAgICogQXNrIHRoZSB1c2VyIGZvciByZXNvdXJjZXMgdG8gaW1wb3J0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXNrRm9yUmVzb3VyY2VJZGVudGlmaWVycyhhdmFpbGFibGU6IEltcG9ydGFibGVSZXNvdXJjZVtdKTogUHJvbWlzZTxJbXBvcnRNYXA+IHtcbiAgICBjb25zdCByZXQ6IEltcG9ydE1hcCA9IHsgaW1wb3J0UmVzb3VyY2VzOiBbXSwgcmVzb3VyY2VNYXA6IHt9IH07XG4gICAgY29uc3QgcmVzb3VyY2VJZGVudGlmaWVycyA9IGF3YWl0IHRoaXMucmVzb3VyY2VJZGVudGlmaWVycygpO1xuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBhdmFpbGFibGUpIHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBhd2FpdCB0aGlzLmFza0ZvclJlc291cmNlSWRlbnRpZmllcihyZXNvdXJjZUlkZW50aWZpZXJzLCByZXNvdXJjZSk7XG4gICAgICBpZiAoIWlkZW50aWZpZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJldC5pbXBvcnRSZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG4gICAgICByZXQucmVzb3VyY2VNYXBbcmVzb3VyY2UubG9naWNhbElkXSA9IGlkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSByZXNvdXJjZXMgdG8gaW1wb3J0IGZyb20gYSBmaWxlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFJlc291cmNlSWRlbnRpZmllcnMoYXZhaWxhYmxlOiBJbXBvcnRhYmxlUmVzb3VyY2VbXSwgZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8SW1wb3J0TWFwPiB7XG4gICAgY29uc3QgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkSnNvbihmaWxlbmFtZSk7XG5cbiAgICBjb25zdCByZXQ6IEltcG9ydE1hcCA9IHsgaW1wb3J0UmVzb3VyY2VzOiBbXSwgcmVzb3VyY2VNYXA6IHt9IH07XG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBhdmFpbGFibGUpIHtcbiAgICAgIGNvbnN0IGRlc2NyID0gdGhpcy5kZXNjcmliZVJlc291cmNlKHJlc291cmNlLmxvZ2ljYWxJZCk7XG4gICAgICBjb25zdCBpZFByb3BzID0gY29udGVudHNbcmVzb3VyY2UubG9naWNhbElkXTtcbiAgICAgIGlmIChpZFByb3BzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhmb3JtYXQoJyVzOiBpbXBvcnRpbmcgdXNpbmcgJXMnLCBjaGFsay5ibHVlKGRlc2NyKSwgY2hhbGsuYmx1ZShmbXRkaWN0KGlkUHJvcHMpKSkpO1xuXG4gICAgICAgIHJldC5pbXBvcnRSZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG4gICAgICAgIHJldC5yZXNvdXJjZU1hcFtyZXNvdXJjZS5sb2dpY2FsSWRdID0gaWRQcm9wcztcbiAgICAgICAgZGVsZXRlIGNvbnRlbnRzW3Jlc291cmNlLmxvZ2ljYWxJZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oZm9ybWF0KCclczogc2tpcHBpbmcnLCBjaGFsay5ibHVlKGRlc2NyKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVua25vd24gPSBPYmplY3Qua2V5cyhjb250ZW50cyk7XG4gICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKGBVbnJlY29nbml6ZWQgcmVzb3VyY2UgaWRlbnRpZmllcnMgaW4gbWFwcGluZyBmaWxlOiAke3Vua25vd24uam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uIHRoZSBwcm92aWRlZCByZXNvdXJjZSBtYXBwaW5nLCBwcmVwYXJlIENGTiBzdHJ1Y3R1cmVzIGZvciBpbXBvcnQgKHRlbXBsYXRlLFxuICAgKiBSZXNvdXJjZXNUb0ltcG9ydCBzdHJ1Y3R1cmUpIGFuZCBwZXJmb3JtIHRoZSBpbXBvcnQgb3BlcmF0aW9uIChDbG91ZEZvcm1hdGlvbiBkZXBsb3ltZW50KVxuICAgKlxuICAgKiBAcGFyYW0gaW1wb3J0TWFwIC0gTWFwcGluZyBmcm9tIENESyBjb25zdHJ1Y3QgdHJlZSBwYXRoIHRvIHBoeXNpY2FsIHJlc291cmNlIGltcG9ydCBpZGVudGlmaWVyc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byBDbG91ZEZvcm1hdGlvbiBkZXBsb3kgb3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0UmVzb3VyY2VzRnJvbU1hcChpbXBvcnRNYXA6IEltcG9ydE1hcCwgb3B0aW9uczogSW1wb3J0RGVwbG95bWVudE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc291cmNlc1RvSW1wb3J0OiBSZXNvdXJjZXNUb0ltcG9ydCA9IGF3YWl0IHRoaXMubWFrZVJlc291cmNlc1RvSW1wb3J0KGltcG9ydE1hcCk7XG4gICAgY29uc3QgdXBkYXRlZFRlbXBsYXRlID0gYXdhaXQgdGhpcy5jdXJyZW50VGVtcGxhdGVXaXRoQWRkaXRpb25zKGltcG9ydE1hcC5pbXBvcnRSZXNvdXJjZXMpO1xuXG4gICAgYXdhaXQgdGhpcy5pbXBvcnRSZXNvdXJjZXModXBkYXRlZFRlbXBsYXRlLCByZXNvdXJjZXNUb0ltcG9ydCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQmFzZWQgb24gdGhlIGFwcCBhbmQgcmVzb3VyY2VzIGZpbGUgZ2VuZXJhdGVkIGJ5IGNkayBtaWdyYXRlLiBSZW1vdmVzIGFsbCBpdGVtcyBmcm9tIHRoZSB0ZW1wbGF0ZSB0aGF0XG4gICAqIGNhbm5vdCBiZSBpbmNsdWRlZCBpbiBhbiBpbXBvcnQgY2hhbmdlLXNldCBmb3IgbmV3IHN0YWNrcyBhbmQgcGVyZm9ybXMgdGhlIGltcG9ydCBvcGVyYXRpb24sXG4gICAqIGNyZWF0aW5nIHRoZSBuZXcgc3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSByZXNvdXJjZXNUb0ltcG9ydCAtIFRoZSBtYXBwaW5nIGNyZWF0ZWQgYnkgY2RrIG1pZ3JhdGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gQ2xvdWRGb3JtYXRpb24gZGVwbG95IG9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGltcG9ydFJlc291cmNlc0Zyb21NaWdyYXRlKHJlc291cmNlc1RvSW1wb3J0OiBSZXNvdXJjZXNUb0ltcG9ydCwgb3B0aW9uczogSW1wb3J0RGVwbG95bWVudE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHVwZGF0ZWRUZW1wbGF0ZSA9IHRoaXMucmVtb3ZlTm9uSW1wb3J0UmVzb3VyY2VzKCk7XG5cbiAgICBhd2FpdCB0aGlzLmltcG9ydFJlc291cmNlcyh1cGRhdGVkVGVtcGxhdGUsIHJlc291cmNlc1RvSW1wb3J0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0UmVzb3VyY2VzKG92ZXJyaWRlVGVtcGxhdGU6IGFueSwgcmVzb3VyY2VzVG9JbXBvcnQ6IFJlc291cmNlc1RvSW1wb3J0LCBvcHRpb25zOiBJbXBvcnREZXBsb3ltZW50T3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNmbi5kZXBsb3lTdGFjayh7XG4gICAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgICBkZXBsb3lOYW1lOiB0aGlzLnN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgb3ZlcnJpZGVUZW1wbGF0ZSxcbiAgICAgICAgcmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0SXNTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQocmVzdWx0KTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3VsdC5ub09wXG4gICAgICAgID8gJyDinIUgICVzIChubyBjaGFuZ2VzKSdcbiAgICAgICAgOiAnIOKchSAgJXMnO1xuXG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oJ1xcbicgKyBjaGFsay5ncmVlbihmb3JtYXQobWVzc2FnZSwgdGhpcy5zdGFjay5kaXNwbGF5TmFtZSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9FMzkwMC5tc2coZm9ybWF0KCdcXG4g4p2MICAlcyBmYWlsZWQ6ICVzJywgY2hhbGsuYm9sZCh0aGlzLnN0YWNrLmRpc3BsYXlOYW1lKSwgZSksIHsgZXJyb3I6IGUgYXMgYW55IH0pKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBkaWZmIGJldHdlZW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIGFuZCB0aGUgbmV3IHRlbXBsYXRlLCBlbnN1cmUgdGhhdCBpdCBpcyB2YWxpZFxuICAgKiBmb3IgaW1wb3J0aW5nIGFuZCByZXR1cm4gYSBsaXN0IG9mIHJlc291cmNlcyB0aGF0IGFyZSBiZWluZyBhZGRlZCBpbiB0aGUgbmV3IHZlcnNpb25cbiAgICpcbiAgICogQHJldHVybiBtYXBwaW5nIGxvZ2ljYWxSZXNvdXJjZUlkIC0+IHJlc291cmNlRGlmZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcyhhbGxvd05vbkFkZGl0aW9ucyA9IGZhbHNlKTogUHJvbWlzZTxEaXNjb3ZlckltcG9ydGFibGVSZXNvdXJjZXNSZXN1bHQ+IHtcbiAgICBjb25zdCBjdXJyZW50VGVtcGxhdGUgPSBhd2FpdCB0aGlzLmN1cnJlbnRUZW1wbGF0ZSgpO1xuXG4gICAgY29uc3QgZGlmZiA9IGNmbkRpZmYuZnVsbERpZmYoY3VycmVudFRlbXBsYXRlLCB0aGlzLnN0YWNrLnRlbXBsYXRlKTtcblxuICAgIC8vIElnbm9yZSBjaGFuZ2VzIHRvIENES01ldGFkYXRhXG4gICAgY29uc3QgcmVzb3VyY2VDaGFuZ2VzID0gT2JqZWN0LmVudHJpZXMoZGlmZi5yZXNvdXJjZXMuY2hhbmdlcylcbiAgICAgIC5maWx0ZXIoKFtsb2dpY2FsSWQsIF9dKSA9PiBsb2dpY2FsSWQgIT09ICdDREtNZXRhZGF0YScpO1xuXG4gICAgLy8gU3BsaXQgdGhlIGNoYW5nZXMgaW50byBhZGRpdGlvbnMgYW5kIG5vbi1hZGRpdGlvbnMuIEltcG9ydHMgb25seSBtYWtlIHNlbnNlXG4gICAgLy8gZm9yIG5ld2x5LWFkZGVkIHJlc291cmNlcy5cbiAgICBjb25zdCBub25BZGRpdGlvbnMgPSByZXNvdXJjZUNoYW5nZXMuZmlsdGVyKChbXywgZGlmXSkgPT4gIWRpZi5pc0FkZGl0aW9uKTtcbiAgICBjb25zdCBhZGRpdGlvbnMgPSByZXNvdXJjZUNoYW5nZXMuZmlsdGVyKChbXywgZGlmXSkgPT4gZGlmLmlzQWRkaXRpb24pO1xuXG4gICAgaWYgKG5vbkFkZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9mZmVuZGluZ1Jlc291cmNlcyA9IG5vbkFkZGl0aW9ucy5tYXAoKFtsb2dJZCwgX10pID0+IHRoaXMuZGVzY3JpYmVSZXNvdXJjZShsb2dJZCkpO1xuXG4gICAgICBpZiAoYWxsb3dOb25BZGRpdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKGBJZ25vcmluZyB1cGRhdGVkL2RlbGV0ZWQgcmVzb3VyY2VzICgtLWZvcmNlKTogJHtvZmZlbmRpbmdSZXNvdXJjZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ltcG9ydE5vbkFkZGl0aW9uQ2hhbmdlcycsICdObyByZXNvdXJjZSB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGFsbG93ZWQgb24gaW1wb3J0IG9wZXJhdGlvbi4gTWFrZSBzdXJlIHRvIHJlc29sdmUgcGVuZGluZyBjaGFuZ2VzICcgK1xuICAgICAgICAgIGB0byBleGlzdGluZyByZXNvdXJjZXMsIGJlZm9yZSBhdHRlbXB0aW5nIGFuIGltcG9ydC4gVXBkYXRlZC9kZWxldGVkIHJlc291cmNlczogJHtvZmZlbmRpbmdSZXNvdXJjZXMuam9pbignLCAnKX0gKC0tZm9yY2UgdG8gb3ZlcnJpZGUpYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzb3VyY2VzIGluIHRoZSBuZXcgdGVtcGxhdGUsIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBhcmUgYSBwb3RlbnRpYWwgaW1wb3J0IGNhbmRpZGF0ZXNcbiAgICByZXR1cm4ge1xuICAgICAgYWRkaXRpb25zOiBhZGRpdGlvbnMubWFwKChbbG9naWNhbElkLCByZXNvdXJjZURpZmZdKSA9PiAoe1xuICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgIHJlc291cmNlRGlmZixcbiAgICAgICAgcmVzb3VyY2VEZWZpbml0aW9uOiBhZGREZWZhdWx0RGVsZXRpb25Qb2xpY3kodGhpcy5zdGFjay50ZW1wbGF0ZT8uUmVzb3VyY2VzPy5bbG9naWNhbElkXSA/PyB7fSksXG4gICAgICB9KSksXG4gICAgICBoYXNOb25BZGRpdGlvbnM6IG5vbkFkZGl0aW9ucy5sZW5ndGggPiAwLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVudmlyb25tZW50IG9mIGEgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUVudmlyb25tZW50KCk6IFByb21pc2U8Y3hhcGkuRW52aXJvbm1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jZm4ucmVzb2x2ZUVudmlyb25tZW50KHRoaXMuc3RhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50bHkgZGVwbG95ZWQgdGVtcGxhdGUgb2YgdGhlIGdpdmVuIHN0YWNrIChTSU5HTEVUT04pXG4gICAqXG4gICAqIEByZXR1cm5zIEN1cnJlbnRseSBkZXBsb3llZCBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjdXJyZW50VGVtcGxhdGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFRlbXBsYXRlID0gYXdhaXQgdGhpcy5jZm4ucmVhZEN1cnJlbnRUZW1wbGF0ZSh0aGlzLnN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGVtcGxhdGUsIHdpdGggdGhlIGdpdmVuIHJlc291cmNlcyBhZGRlZCB0byBpdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjdXJyZW50VGVtcGxhdGVXaXRoQWRkaXRpb25zKGFkZGl0aW9uczogSW1wb3J0YWJsZVJlc291cmNlW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5jdXJyZW50VGVtcGxhdGUoKTtcbiAgICBpZiAoIXRlbXBsYXRlLlJlc291cmNlcykge1xuICAgICAgdGVtcGxhdGUuUmVzb3VyY2VzID0ge307XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhZGQgb2YgYWRkaXRpb25zKSB7XG4gICAgICB0ZW1wbGF0ZS5SZXNvdXJjZXNbYWRkLmxvZ2ljYWxJZF0gPSBhZGQucmVzb3VyY2VEZWZpbml0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIGltcG9ydCBpZGVudGlmaWVycyBmb3IgYWxsIHJlc291cmNlIHR5cGVzIHVzZWQgaW4gdGhlIGdpdmVuXG4gICAqIHRlbXBsYXRlIHRoYXQgZG8gc3VwcG9ydCB0aGUgaW1wb3J0IG9wZXJhdGlvbiAoU0lOR0xFVE9OKVxuICAgKlxuICAgKiBAcmV0dXJucyBhIG1hcHBpbmcgZnJvbSBhIHJlc291cmNlIHR5cGUgdG8gYSBsaXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgdG9nZXRoZXIgaWRlbnRpZnkgdGhlIHJlc291cmNlIGZvciBpbXBvcnRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzb3VyY2VJZGVudGlmaWVycygpOiBQcm9taXNlPFJlc291cmNlSWRlbnRpZmllcnM+IHtcbiAgICBjb25zdCByZXQ6IFJlc291cmNlSWRlbnRpZmllcnMgPSB7fTtcbiAgICBjb25zdCByZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMgPSBhd2FpdCB0aGlzLmNmbi5yZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXModGhpcy5zdGFjayk7XG4gICAgZm9yIChjb25zdCBzdW1tYXJ5IG9mIHJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcykge1xuICAgICAgaWYgKCdSZXNvdXJjZVR5cGUnIGluIHN1bW1hcnkgJiYgc3VtbWFyeS5SZXNvdXJjZVR5cGUgJiYgJ1Jlc291cmNlSWRlbnRpZmllcnMnIGluIHN1bW1hcnkgJiYgc3VtbWFyeS5SZXNvdXJjZUlkZW50aWZpZXJzKSB7XG4gICAgICAgIHJldFtzdW1tYXJ5LlJlc291cmNlVHlwZV0gPSAoc3VtbWFyeS5SZXNvdXJjZUlkZW50aWZpZXJzID8/IFtdKT8ubWFwKHggPT4geC5zcGxpdCgnLCcpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc2sgZm9yIHRoZSBpbXBvcnRhYmxlIGlkZW50aWZpZXIgZm9yIHRoZSBnaXZlbiByZXNvdXJjZVxuICAgKlxuICAgKiBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBpZGVudGlmaWVyIHVuZGVyIHdoaWNoIGEgcmVzb3VyY2UgY2FuIGJlIGltcG9ydGVkLiBUaGUgYGltcG9ydGBcbiAgICogb3BlcmF0aW9uIG5lZWRzIGV4YWN0bHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIC0gSWYgd2UgY2FuIGdldCBvbmUgZnJvbSB0aGUgdGVtcGxhdGUsIHdlIHdpbGwgdXNlIG9uZS5cbiAgICogLSBPdGhlcndpc2UsIHdlIHdpbGwgYXNrIHRoZSB1c2VyIGZvciBvbmUgb2YgdGhlbS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXNrRm9yUmVzb3VyY2VJZGVudGlmaWVyKFxuICAgIHJlc291cmNlSWRlbnRpZmllcnM6IFJlc291cmNlSWRlbnRpZmllcnMsXG4gICAgY2hnOiBJbXBvcnRhYmxlUmVzb3VyY2UsXG4gICk6IFByb21pc2U8UmVzb3VyY2VJZGVudGlmaWVyUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IHRoaXMuZGVzY3JpYmVSZXNvdXJjZShjaGcubG9naWNhbElkKTtcblxuICAgIC8vIFNraXAgcmVzb3VyY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgaW1wb3J0aW5nXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gY2hnLnJlc291cmNlRGlmZi5uZXdSZXNvdXJjZVR5cGU7XG4gICAgaWYgKHJlc291cmNlVHlwZSA9PT0gdW5kZWZpbmVkIHx8ICEocmVzb3VyY2VUeXBlIGluIHJlc291cmNlSWRlbnRpZmllcnMpKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oYCR7cmVzb3VyY2VOYW1lfTogdW5zdXBwb3J0ZWQgcmVzb3VyY2UgdHlwZSAke3Jlc291cmNlVHlwZX0sIHNraXBwaW5nIGltcG9ydC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaWRQcm9wU2V0cyA9IHJlc291cmNlSWRlbnRpZmllcnNbcmVzb3VyY2VUeXBlXTtcblxuICAgIC8vIFJldGFpbiBvbmx5IGxpdGVyYWwgc3RyaW5nczogc3RyaXAgcG90ZW50aWFsIENGTiBpbnRyaW5zaWNzXG4gICAgY29uc3QgcmVzb3VyY2VQcm9wcyA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhjaGcucmVzb3VyY2VEZWZpbml0aW9uLlByb3BlcnRpZXMgPz8ge30pXG4gICAgICAuZmlsdGVyKChbXywgdl0pID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJykpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAvLyBGaW5kIHByb3BlcnR5IHNldHMgdGhhdCBhcmUgZnVsbHkgc2F0aXNmaWVkIGluIHRoZSB0ZW1wbGF0ZSwgYXNrIHRoZSB1c2VyIHRvIGNvbmZpcm0gdGhlbVxuICAgIGNvbnN0IHNhdGlzZmllZFByb3BTZXRzID0gaWRQcm9wU2V0cy5maWx0ZXIocHMgPT4gcHMuZXZlcnkocCA9PiByZXNvdXJjZVByb3BzW3BdKSk7XG4gICAgZm9yIChjb25zdCBzYXRpc2ZpZWRQcm9wU2V0IG9mIHNhdGlzZmllZFByb3BTZXRzKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVQcm9wcyA9IE9iamVjdC5mcm9tRW50cmllcyhzYXRpc2ZpZWRQcm9wU2V0Lm1hcChwID0+IFtwLCByZXNvdXJjZVByb3BzW3BdXSkpO1xuICAgICAgY29uc3QgZGlzcGxheUNhbmRpZGF0ZVByb3BzID0gZm10ZGljdChjYW5kaWRhdGVQcm9wcyk7XG5cbiAgICAgIGNvbnN0IGltcG9ydFRoZVJlc291cmNlID0gYXdhaXQgdGhpcy5pb0hlbHBlci5yZXF1ZXN0UmVzcG9uc2UoSU8uQ0RLX1RPT0xLSVRfSTMxMDAucmVxKGAke2NoYWxrLmJsdWUocmVzb3VyY2VOYW1lKX0gKCR7cmVzb3VyY2VUeXBlfSk6IGltcG9ydCB3aXRoICR7Y2hhbGsueWVsbG93KGRpc3BsYXlDYW5kaWRhdGVQcm9wcyl9YCwge1xuICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgIHR5cGU6IHJlc291cmNlVHlwZSxcbiAgICAgICAgICBwcm9wczogY2FuZGlkYXRlUHJvcHMsXG4gICAgICAgICAgc3RyaW5naWZpZWRQcm9wczogZGlzcGxheUNhbmRpZGF0ZVByb3BzLFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuICAgICAgaWYgKGltcG9ydFRoZVJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGVQcm9wcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBnb3QgaGVyZSBhbmQgdGhlIHVzZXIgcmVqZWN0ZWQgYW55IGF2YWlsYWJsZSBpZGVudGlmaWVycywgdGhlbiBhcHBhcmVudGx5IHRoZXkgZG9uJ3Qgd2FudCB0aGUgcmVzb3VyY2UgYXQgYWxsXG4gICAgaWYgKHNhdGlzZmllZFByb3BTZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhjaGFsay5ncmV5KGBTa2lwcGluZyBpbXBvcnQgb2YgJHtyZXNvdXJjZU5hbWV9YCkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBXZSBjYW5ub3QgYXV0by1pbXBvcnQgdGhpcywgYXNrIHRoZSB1c2VyIGZvciBvbmUgb2YgdGhlIHByb3BzXG4gICAgLy8gVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIGNhc2VzIGlzIHdoYXQgd2UgcHJpbnQ6IGZvciBtdWx0aXBsZSBwcm9wZXJ0aWVzLCB3ZSBwcmludCBhIHByZWFtYmxlXG4gICAgY29uc3QgcHJlZml4ID0gYCR7Y2hhbGsuYmx1ZShyZXNvdXJjZU5hbWUpfSAoJHtyZXNvdXJjZVR5cGV9KWA7XG4gICAgY29uc3QgcHJvbXB0UGF0dGVybiA9IGAke3ByZWZpeH06IGVudGVyICVzYDtcbiAgICBpZiAoaWRQcm9wU2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBwcmVhbWJsZSA9IGAke3ByZWZpeH06IGVudGVyIG9uZSBvZiAke2lkUHJvcFNldHMubWFwKHggPT4gY2hhbGsuYmx1ZSh4LmpvaW4oJysnKSkpLmpvaW4oJywgJyl9IHRvIGltcG9ydCAobGVhdmUgYWxsIGVtcHR5IHRvIHNraXApYDtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhwcmVhbWJsZSk7XG4gICAgfVxuXG4gICAgLy8gRG8gdGhlIGlucHV0IGxvb3AgaGVyZVxuICAgIGZvciAoY29uc3QgaWRQcm9wcyBvZiBpZFByb3BTZXRzKSB7XG4gICAgICBjb25zdCBpbnB1dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgZm9yIChjb25zdCBpZFByb3Agb2YgaWRQcm9wcykge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdmFsdWUgZnJvbSB0aGUgdGVtcGxhdGUsIHVzZSBpdCBhcyBkZWZhdWx0LiBUaGlzIHdpbGwgb25seSBiZSBhIHBhcnRpYWxcbiAgICAgICAgLy8gaWRlbnRpZmllciBpZiBwcmVzZW50LCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSBkb25lIHRoZSBpbXBvcnQgYWxyZWFkeSBhYm92ZS5cbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcmVzb3VyY2VQcm9wc1tpZFByb3BdID8/ICcnO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5pb0hlbHBlci5yZXF1ZXN0UmVzcG9uc2UoSU8uQ0RLX1RPT0xLSVRfSTMxMTAucmVxKFxuICAgICAgICAgIGZvcm1hdChwcm9tcHRQYXR0ZXJuLCBjaGFsay5ibHVlKGlkUHJvcCkpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHJlc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogcmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgICBpZFByb3AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VEZXNjcmlwdGlvbjogZGVmYXVsdFZhbHVlID8gdW5kZWZpbmVkIDogJ2VtcHR5IHRvIHNraXAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICApKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dFtpZFByb3BdID0gcmVzcG9uc2U7XG4gICAgICAgIC8vIEFsc28gc3RpY2sgdGhpcyBwcm9wZXJ0eSBpbnRvICdyZXNvdXJjZVByb3BzJywgc28gdGhhdCBpdCBtYXkgYmUgcmV1c2VkIGJ5IGEgc3Vic2VxdWVudCBxdWVzdGlvblxuICAgICAgICAvLyAoZm9yIGEgZGlmZmVyZW50IGNvbXBvdW5kIGlkZW50aWZpZXIgdGhhdCBpbnZvbHZlcyB0aGUgc2FtZSBwcm9wZXJ0eSkuIEp1c3QgYSBzbWFsbCBVWCBlbmhhbmNlbWVudC5cbiAgICAgICAgcmVzb3VyY2VQcm9wc1tpZFByb3BdID0gcmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB1c2VyIGdhdmUgaW5wdXRzIGZvciBhbGwgdmFsdWVzLCB3ZSBhcmUgY29tcGxldGVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhpbnB1dCkubGVuZ3RoID09PSBpZFByb3BzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGNoYWxrLmdyZXkoYFNraXBwaW5nIGltcG9ydCBvZiAke3Jlc291cmNlTmFtZX1gKSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBpbnRlcm5hbCBcInJlc291cmNlIG1hcHBpbmdcIiBzdHJ1Y3R1cmUgdG8gQ2xvdWRGb3JtYXRpb24gYWNjZXB0ZWQgXCJSZXNvdXJjZXNUb0ltcG9ydFwiIHN0cnVjdHVyZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBtYWtlUmVzb3VyY2VzVG9JbXBvcnQocmVzb3VyY2VNYXA6IEltcG9ydE1hcCk6IFByb21pc2U8UmVzb3VyY2VzVG9JbXBvcnQ+IHtcbiAgICByZXR1cm4gcmVzb3VyY2VNYXAuaW1wb3J0UmVzb3VyY2VzLm1hcChyZXMgPT4gKHtcbiAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiByZXMubG9naWNhbElkLFxuICAgICAgUmVzb3VyY2VUeXBlOiByZXMucmVzb3VyY2VEaWZmLm5ld1Jlc291cmNlVHlwZSEsXG4gICAgICBSZXNvdXJjZUlkZW50aWZpZXI6IHJlc291cmNlTWFwLnJlc291cmNlTWFwW3Jlcy5sb2dpY2FsSWRdLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IENsb3VkRm9ybWF0aW9uIGxvZ2ljYWwgcmVzb3VyY2UgSUQgdG8gQ0RLIGNvbnN0cnVjdCB0cmVlIHBhdGhcbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxJZCAtIENsb3VkRm9ybWF0aW9uIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlICh0aGUga2V5IGluIHRoZSB0ZW1wbGF0ZSdzIFJlc291cmNlcyBzZWN0aW9uKVxuICAgKiBAcmV0dXJucyBGb3J3YXJkLXNsYXNoIHNlcGFyYXRlZCBwYXRoIG9mIHRoZSByZXNvdXJjZSBpbiBDREsgY29uc3RydWN0IHRyZWUsIGUuZy4gTXlTdGFjay9NeUJ1Y2tldC9SZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSBkZXNjcmliZVJlc291cmNlKGxvZ2ljYWxJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay50ZW1wbGF0ZT8uUmVzb3VyY2VzPy5bbG9naWNhbElkXT8uTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ10gPz8gbG9naWNhbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgQ0RLTWV0YWRhdGEgYW5kIE91dHB1dHMgaW4gdGhlIHRlbXBsYXRlIHNvIHRoYXQgb25seSByZXNvdXJjZXMgZm9yIGltcG9ydGluZyBhcmUgbGVmdC5cbiAgICogQHJldHVybnMgdGVtcGxhdGUgd2l0aCBpbXBvcnQgcmVzb3VyY2VzIG9ubHlcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlTm9uSW1wb3J0UmVzb3VyY2VzKCkge1xuICAgIHJldHVybiByZW1vdmVOb25JbXBvcnRSZXNvdXJjZXModGhpcy5zdGFjayk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IGlzIGltcG9ydGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRhYmxlUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIGRlZmluaXRpb24gaW4gdGhlIG5ldyB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEZWZpbml0aW9uOiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBkaWZmIGFzIHJlcG9ydGVkIGJ5IGBjbG91ZGZvcm1hdGlvbi1kaWZmYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlRGlmZjogUmVzb3VyY2VEaWZmZXJlbmNlO1xufVxuXG4vKipcbiAqIFRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZXhlY3V0ZSBhbiBpbXBvcnQgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0TWFwIHtcbiAgLyoqXG4gICAqIE1hcHBpbmcgbG9naWNhbCBJRHMgdG8gcGh5c2ljYWwgbmFtZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTWFwOiBSZXNvdXJjZU1hcDtcblxuICAvKipcbiAgICogVGhlIHNlbGVjdGlvbiBvZiByZXNvdXJjZXMgd2UgYXJlIGFjdHVhbGx5IGltcG9ydGluZ1xuICAgKlxuICAgKiBGb3IgZWFjaCBvZiB0aGUgcmVzb3VyY2VzIGluIHRoaXMgbGlzdCwgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IGluXG4gICAqIHRoZSBgcmVzb3VyY2VNYXBgIG1hcC5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydFJlc291cmNlczogSW1wb3J0YWJsZVJlc291cmNlW107XG59XG5cbmZ1bmN0aW9uIGZtdGRpY3Q8QT4oeHM6IFJlY29yZDxzdHJpbmcsIEE+KSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh4cykubWFwKChbaywgdl0pID0+IGAke2t9PSR7dn1gKS5qb2luKCcsICcpO1xufVxuXG4vKipcbiAqIEFkZCBhIGRlZmF1bHQgYERlbGV0aW9uUG9saWN5YCBwb2xpY3kuXG4gKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gJ1JldGFpbicsIHRvIGxvd2VyIHJpc2sgb2YgdW5pbnRlbnRpb25hbGx5XG4gKiBkZWxldGluZyBzdGF0ZWZ1bCByZXNvdXJjZXMgaW4gdGhlIHByb2Nlc3Mgb2YgaW1wb3J0aW5nIHRvIENESy5cbiAqL1xuZnVuY3Rpb24gYWRkRGVmYXVsdERlbGV0aW9uUG9saWN5KHJlc291cmNlOiBhbnkpOiBhbnkge1xuICBpZiAocmVzb3VyY2UuRGVsZXRpb25Qb2xpY3kpIHtcbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIERlbGV0aW9uUG9saWN5OiAnUmV0YWluJyxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNjb3ZlckltcG9ydGFibGVSZXNvdXJjZXNSZXN1bHQge1xuICByZWFkb25seSBhZGRpdGlvbnM6IEltcG9ydGFibGVSZXNvdXJjZVtdO1xuICByZWFkb25seSBoYXNOb25BZGRpdGlvbnM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOb25JbXBvcnRSZXNvdXJjZXMoc3RhY2s6Y3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gc3RhY2sudGVtcGxhdGU7XG4gIGRlbGV0ZSB0ZW1wbGF0ZS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGE7XG4gIGRlbGV0ZSB0ZW1wbGF0ZS5PdXRwdXRzO1xuICByZXR1cm4gdGVtcGxhdGU7XG59XG4iXX0=
package/lib/api/rwlock.js CHANGED
@@ -34,7 +34,7 @@ class RWLock {
34
34
  await this.assertNoOtherWriters();
35
35
  const readers = await this._currentReaders();
36
36
  if (readers.length > 0) {
37
- throw new toolkit_error_1.ToolkitError(`Other CLIs (PID=${readers}) are currently reading from ${this.directory}. Invoke the CLI in sequence, or use '--output' to synth into different directories.`);
37
+ throw new toolkit_error_1.ToolkitError('ConcurrentReadLock', `Other CLIs (PID=${readers}) are currently reading from ${this.directory}. Invoke the CLI in sequence, or use '--output' to synth into different directories.`);
38
38
  }
39
39
  await writeFileAtomic(this.writerFile, this.pidString);
40
40
  let released = false;
@@ -94,7 +94,7 @@ class RWLock {
94
94
  async assertNoOtherWriters() {
95
95
  const writer = await this._currentWriter();
96
96
  if (writer) {
97
- throw new toolkit_error_1.ToolkitError(`Another CLI (PID=${writer}) is currently synthing to ${this.directory}. Invoke the CLI in sequence, or use '--output' to synth into different directories.`);
97
+ throw new toolkit_error_1.ToolkitError('ConcurrentWriteLock', `Another CLI (PID=${writer}) is currently synthing to ${this.directory}. Invoke the CLI in sequence, or use '--output' to synth into different directories.`);
98
98
  }
99
99
  }
100
100
  /**
@@ -201,4 +201,4 @@ function processExists(pid) {
201
201
  }
202
202
  }
203
203
  /* c8 ignore stop */
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicndsb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicndsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0IsNERBQXdEO0FBRXhEOzs7Ozs7Ozs7R0FTRztBQUNILHFCQUFxQixDQUFDLCtCQUErQjtBQUNyRCxNQUFhLE1BQU07SUFLVztJQUpYLFNBQVMsQ0FBUztJQUNsQixVQUFVLENBQVM7SUFDNUIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV4QixZQUE0QixTQUFpQjtRQUFqQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksNEJBQVksQ0FBQyxtQkFBbUIsT0FBTyxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsc0ZBQXNGLENBQUMsQ0FBQztRQUN6TCxDQUFDO1FBRUQsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLDhHQUE4RztnQkFDOUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNkLE1BQU0s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Q0FBQztBQUNILENBQUM7QUFDRCxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIEEgc2luZ2xlLXdyaXRlci9tdWx0aS1yZWFkZXIgbG9jayBvbiBhIGRpcmVjdG9yeVxuICpcbiAqIEl0IHVzZXMgbWFya2VyIGZpbGVzIHdpdGggUElEcyBpbiB0aGVtIGFzIGEgbG9ja2luZyBtYXJrZXI7IHRoZSBQSURzIHdpbGwgYmVcbiAqIGNoZWNrZWQgZm9yIGxpdmVuZXNzLCBzbyB0aGF0IGlmIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGhvdXQgY2xlYW5pbmcgdXAgdGhlXG4gKiBmaWxlcyB0aGUgbG9jayBpcyBpbXBsaWNpdGx5IHJlbGVhc2VkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgbm90IDEwMCUgcmFjZSBzYWZlLCBidXQgaW4gcHJhY3RpY2UgaXQgc2hvdWxkIGJlIGEgbG90XG4gKiBiZXR0ZXIgdGhhbiB0aGUgMCBwcm90ZWN0aW9uIHdlIGhhdmUgdG9kYXkuXG4gKi9cbi8qIGM4IGlnbm9yZSBzdGFydCAqLyAvLyBjb2RlIHBhdGhzIGFyZSB1bnByZWRpY3RhYmxlXG5leHBvcnQgY2xhc3MgUldMb2NrIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwaWRTdHJpbmc6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB3cml0ZXJGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZENvdW50ZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZykge1xuICAgIHRoaXMucGlkU3RyaW5nID0gYCR7cHJvY2Vzcy5waWR9YDtcblxuICAgIHRoaXMud3JpdGVyRmlsZSA9IHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwgJ3N5bnRoLmxvY2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlIGEgd3JpdGVyIGxvY2suXG4gICAqXG4gICAqIE5vIG90aGVyIHJlYWRlcnMgb3Igd3JpdGVycyBtdXN0IGV4aXN0IGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFjcXVpcmVXcml0ZSgpOiBQcm9taXNlPElXcml0ZUxvY2s+IHtcbiAgICBhd2FpdCB0aGlzLmFzc2VydE5vT3RoZXJXcml0ZXJzKCk7XG5cbiAgICBjb25zdCByZWFkZXJzID0gYXdhaXQgdGhpcy5fY3VycmVudFJlYWRlcnMoKTtcbiAgICBpZiAocmVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBPdGhlciBDTElzIChQSUQ9JHtyZWFkZXJzfSkgYXJlIGN1cnJlbnRseSByZWFkaW5nIGZyb20gJHt0aGlzLmRpcmVjdG9yeX0uIEludm9rZSB0aGUgQ0xJIGluIHNlcXVlbmNlLCBvciB1c2UgJy0tb3V0cHV0JyB0byBzeW50aCBpbnRvIGRpZmZlcmVudCBkaXJlY3Rvcmllcy5gKTtcbiAgICB9XG5cbiAgICBhd2FpdCB3cml0ZUZpbGVBdG9taWModGhpcy53cml0ZXJGaWxlLCB0aGlzLnBpZFN0cmluZyk7XG5cbiAgICBsZXQgcmVsZWFzZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsZWFzZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZWxlYXNpbmcgbmVlZHMgYSBmbGFnLCBvdGhlcndpc2Ugd2UgbWlnaHQgZGVsZXRlIGEgZmlsZSB0aGF0IHNvbWUgb3RoZXIgbG9jayBoYXMgY3JlYXRlZCBpbiB0aGUgbWVhbiB0aW1lLlxuICAgICAgICBpZiAoIXJlbGVhc2VkKSB7XG4gICAgICAgICAgYXdhaXQgZGVsZXRlRmlsZSh0aGlzLndyaXRlckZpbGUpO1xuICAgICAgICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNvbnZlcnRUb1JlYWRlckxvY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQWNxdWlyZSB0aGUgcmVhZCBsb2NrIGJlZm9yZSByZWxlYXNpbmcgdGhlIHdyaXRlIGxvY2suIFNsaWdodGx5IGxlc3NcbiAgICAgICAgLy8gY2hhbmNlIG9mIHJhY2luZyFcbiAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy5kb0FjcXVpcmVSZWFkKCk7XG4gICAgICAgIGF3YWl0IGRlbGV0ZUZpbGUodGhpcy53cml0ZXJGaWxlKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlIGEgcmVhZCBsb2NrXG4gICAqXG4gICAqIFdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgYW55IHdyaXRlcnMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWNxdWlyZVJlYWQoKTogUHJvbWlzZTxJUmVhZExvY2s+IHtcbiAgICBhd2FpdCB0aGlzLmFzc2VydE5vT3RoZXJXcml0ZXJzKCk7XG4gICAgcmV0dXJuIHRoaXMuZG9BY3F1aXJlUmVhZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGFpbnMgdGhlIG5hbWUgZm8gYSAobmV3KSBgcmVhZGVyRmlsZWAgdG8gdXNlLiBUaGlzIGluY2x1ZGVzIGEgY291bnRlciBzb1xuICAgKiB0aGF0IGlmIG11bHRpcGxlIHRocmVhZHMgb2YgdGhlIHNhbWUgUElEIGF0dGVtcHQgdG8gY29uY3VycmVudGx5IGFjcXVpcmVcbiAgICogdGhlIHNhbWUgbG9jaywgdGhleSdyZSBndWFyYW50ZWVkIHRvIHVzZSBhIGRpZmZlcmVudCByZWFkZXIgZmlsZSBuYW1lIChvbmx5XG4gICAqIG9uZSB0aHJlYWQgd2lsbCBldmVyIGV4ZWN1dGUgSlMgY29kZSBhdCBvbmNlLCBndWFyYW50ZWVpbmcgdGhlIHJlYWRDb3VudGVyXG4gICAqIGlzIGluY3JlbWVudGVkIFwiYXRvbWljYWxseVwiIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhpcyBQSUQuKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZGVyRmlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksIGByZWFkLiR7dGhpcy5waWRTdHJpbmd9LiR7Kyt0aGlzLnJlYWRDb3VudGVyfS5sb2NrYCk7XG4gIH1cblxuICAvKipcbiAgICogRG8gdGhlIGFjdHVhbCBhY3F1aXJpbmcgb2YgYSByZWFkIGxvY2suXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRvQWNxdWlyZVJlYWQoKTogUHJvbWlzZTxJUmVhZExvY2s+IHtcbiAgICBjb25zdCByZWFkZXJGaWxlID0gdGhpcy5yZWFkZXJGaWxlKCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlQXRvbWljKHJlYWRlckZpbGUsIHRoaXMucGlkU3RyaW5nKTtcblxuICAgIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICByZWxlYXNlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFJlbGVhc2luZyBuZWVkcyBhIGZsYWcsIG90aGVyd2lzZSB3ZSBtaWdodCBkZWxldGUgYSBmaWxlIHRoYXQgc29tZSBvdGhlciBsb2NrIGhhcyBjcmVhdGVkIGluIHRoZSBtZWFuIHRpbWUuXG4gICAgICAgIGlmICghcmVsZWFzZWQpIHtcbiAgICAgICAgICBhd2FpdCBkZWxldGVGaWxlKHJlYWRlckZpbGUpO1xuICAgICAgICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhc3NlcnROb090aGVyV3JpdGVycygpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBhd2FpdCB0aGlzLl9jdXJyZW50V3JpdGVyKCk7XG4gICAgaWYgKHdyaXRlcikge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgQW5vdGhlciBDTEkgKFBJRD0ke3dyaXRlcn0pIGlzIGN1cnJlbnRseSBzeW50aGluZyB0byAke3RoaXMuZGlyZWN0b3J5fS4gSW52b2tlIHRoZSBDTEkgaW4gc2VxdWVuY2UsIG9yIHVzZSAnLS1vdXRwdXQnIHRvIHN5bnRoIGludG8gZGlmZmVyZW50IGRpcmVjdG9yaWVzLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgY3VycmVudCB3cml0ZXIgKGlmIGFueSlcbiAgICpcbiAgICogUHVibGljbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gRG8gbm90IHVzZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgX2N1cnJlbnRXcml0ZXIoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IHJlYWRGaWxlSWZFeGlzdHModGhpcy53cml0ZXJGaWxlKTtcbiAgICBpZiAoIWNvbnRlbnRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBpZCA9IHBhcnNlSW50KGNvbnRlbnRzLCAxMCk7XG4gICAgaWYgKCFwcm9jZXNzRXhpc3RzKHBpZCkpIHtcbiAgICAgIC8vIERvIGNsZWFudXAgb2YgYSBzdHJheSBmaWxlIG5vd1xuICAgICAgYXdhaXQgZGVsZXRlRmlsZSh0aGlzLndyaXRlckZpbGUpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBjdXJyZW50IHJlYWRlcnMgKGlmIGFueSlcbiAgICpcbiAgICogUHVibGljbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gRG8gbm90IHVzZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgX2N1cnJlbnRSZWFkZXJzKCk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCByZSA9IC9ecmVhZFxcLihbXi5dKylcXC5bXi5dK1xcLmxvY2skLztcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gICAgbGV0IGNoaWxkcmVuO1xuICAgIHRyeSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5kaXJlY3RvcnksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBDYW4ndCBiZSBsb2NrZWQgaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0XG4gICAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZm5hbWUgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IG0gPSBmbmFtZS5tYXRjaChyZSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBwaWQgPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChwcm9jZXNzRXhpc3RzKHBpZCkpIHtcbiAgICAgICAgICByZXQucHVzaChwaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERvIGNsZWFudXAgb2YgYSBzdHJheSBmaWxlIG5vd1xuICAgICAgICAgIGF3YWl0IGRlbGV0ZUZpbGUocGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBmbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogQW4gYWNxdWlyZWQgbG9ja1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWFkTG9jayB7XG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBsb2NrLiBDYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEFuIGFjcXVpcmVkIHdyaXRlciBsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVdyaXRlTG9jayBleHRlbmRzIElSZWFkTG9jayB7XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSB3cml0ZXIgbG9jayB0byBhIHJlYWRlciBsb2NrXG4gICAqL1xuICBjb252ZXJ0VG9SZWFkZXJMb2NrKCk6IFByb21pc2U8SVJlYWRMb2NrPjtcbn1cblxuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIGNvZGUgcGF0aHMgYXJlIHVucHJlZGljdGFibGVcbmFzeW5jIGZ1bmN0aW9uIHJlYWRGaWxlSWZFeGlzdHMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuLyogYzggaWdub3JlIHN0b3AgKi9cblxubGV0IHRtcENvdW50ZXIgPSAwO1xuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIGNvZGUgcGF0aHMgYXJlIHVucHJlZGljdGFibGVcbmFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUF0b21pYyhmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlbmFtZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCB0bXBGaWxlID0gYCR7ZmlsZW5hbWV9LiR7cHJvY2Vzcy5waWR9XyR7Kyt0bXBDb3VudGVyfWA7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0bXBGaWxlLCBjb250ZW50cywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgYXdhaXQgZnMucmVuYW1lKHRtcEZpbGUsIGZpbGVuYW1lKTtcbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqLyAvLyBjb2RlIHBhdGhzIGFyZSB1bnByZWRpY3RhYmxlXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy51bmxpbmsoZmlsZW5hbWUpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG4vKiBjOCBpZ25vcmUgc3RhcnQgKi8gLy8gY29kZSBwYXRocyBhcmUgdW5wcmVkaWN0YWJsZVxuZnVuY3Rpb24gcHJvY2Vzc0V4aXN0cyhwaWQ6IG51bWJlcikge1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbChwaWQsIDApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuIl19
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicndsb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicndsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0IsNERBQXdEO0FBRXhEOzs7Ozs7Ozs7R0FTRztBQUNILHFCQUFxQixDQUFDLCtCQUErQjtBQUNyRCxNQUFhLE1BQU07SUFLVztJQUpYLFNBQVMsQ0FBUztJQUNsQixVQUFVLENBQVM7SUFDNUIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV4QixZQUE0QixTQUFpQjtRQUFqQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksNEJBQVksQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsT0FBTyxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsc0ZBQXNGLENBQUMsQ0FBQztRQUMvTSxDQUFDO1FBRUQsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLDhHQUE4RztnQkFDOUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFD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QUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFDRCxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIEEgc2luZ2xlLXdyaXRlci9tdWx0aS1yZWFkZXIgbG9jayBvbiBhIGRpcmVjdG9yeVxuICpcbiAqIEl0IHVzZXMgbWFya2VyIGZpbGVzIHdpdGggUElEcyBpbiB0aGVtIGFzIGEgbG9ja2luZyBtYXJrZXI7IHRoZSBQSURzIHdpbGwgYmVcbiAqIGNoZWNrZWQgZm9yIGxpdmVuZXNzLCBzbyB0aGF0IGlmIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGhvdXQgY2xlYW5pbmcgdXAgdGhlXG4gKiBmaWxlcyB0aGUgbG9jayBpcyBpbXBsaWNpdGx5IHJlbGVhc2VkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgbm90IDEwMCUgcmFjZSBzYWZlLCBidXQgaW4gcHJhY3RpY2UgaXQgc2hvdWxkIGJlIGEgbG90XG4gKiBiZXR0ZXIgdGhhbiB0aGUgMCBwcm90ZWN0aW9uIHdlIGhhdmUgdG9kYXkuXG4gKi9cbi8qIGM4IGlnbm9yZSBzdGFydCAqLyAvLyBjb2RlIHBhdGhzIGFyZSB1bnByZWRpY3RhYmxlXG5leHBvcnQgY2xhc3MgUldMb2NrIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwaWRTdHJpbmc6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB3cml0ZXJGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZENvdW50ZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZykge1xuICAgIHRoaXMucGlkU3RyaW5nID0gYCR7cHJvY2Vzcy5waWR9YDtcblxuICAgIHRoaXMud3JpdGVyRmlsZSA9IHBhdGguam9pbih0aGlzLmRpcmVjdG9yeSwgJ3N5bnRoLmxvY2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlIGEgd3JpdGVyIGxvY2suXG4gICAqXG4gICAqIE5vIG90aGVyIHJlYWRlcnMgb3Igd3JpdGVycyBtdXN0IGV4aXN0IGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFjcXVpcmVXcml0ZSgpOiBQcm9taXNlPElXcml0ZUxvY2s+IHtcbiAgICBhd2FpdCB0aGlzLmFzc2VydE5vT3RoZXJXcml0ZXJzKCk7XG5cbiAgICBjb25zdCByZWFkZXJzID0gYXdhaXQgdGhpcy5fY3VycmVudFJlYWRlcnMoKTtcbiAgICBpZiAocmVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb25jdXJyZW50UmVhZExvY2snLCBgT3RoZXIgQ0xJcyAoUElEPSR7cmVhZGVyc30pIGFyZSBjdXJyZW50bHkgcmVhZGluZyBmcm9tICR7dGhpcy5kaXJlY3Rvcnl9LiBJbnZva2UgdGhlIENMSSBpbiBzZXF1ZW5jZSwgb3IgdXNlICctLW91dHB1dCcgdG8gc3ludGggaW50byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuYCk7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlQXRvbWljKHRoaXMud3JpdGVyRmlsZSwgdGhpcy5waWRTdHJpbmcpO1xuXG4gICAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbGVhc2U6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gUmVsZWFzaW5nIG5lZWRzIGEgZmxhZywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGRlbGV0ZSBhIGZpbGUgdGhhdCBzb21lIG90aGVyIGxvY2sgaGFzIGNyZWF0ZWQgaW4gdGhlIG1lYW4gdGltZS5cbiAgICAgICAgaWYgKCFyZWxlYXNlZCkge1xuICAgICAgICAgIGF3YWl0IGRlbGV0ZUZpbGUodGhpcy53cml0ZXJGaWxlKTtcbiAgICAgICAgICByZWxlYXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb252ZXJ0VG9SZWFkZXJMb2NrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEFjcXVpcmUgdGhlIHJlYWQgbG9jayBiZWZvcmUgcmVsZWFzaW5nIHRoZSB3cml0ZSBsb2NrLiBTbGlnaHRseSBsZXNzXG4gICAgICAgIC8vIGNoYW5jZSBvZiByYWNpbmchXG4gICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuZG9BY3F1aXJlUmVhZCgpO1xuICAgICAgICBhd2FpdCBkZWxldGVGaWxlKHRoaXMud3JpdGVyRmlsZSk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWNxdWlyZSBhIHJlYWQgbG9ja1xuICAgKlxuICAgKiBXaWxsIGZhaWwgaWYgdGhlcmUgYXJlIGFueSB3cml0ZXJzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFjcXVpcmVSZWFkKCk6IFByb21pc2U8SVJlYWRMb2NrPiB7XG4gICAgYXdhaXQgdGhpcy5hc3NlcnROb090aGVyV3JpdGVycygpO1xuICAgIHJldHVybiB0aGlzLmRvQWNxdWlyZVJlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRhaW5zIHRoZSBuYW1lIGZvIGEgKG5ldykgYHJlYWRlckZpbGVgIHRvIHVzZS4gVGhpcyBpbmNsdWRlcyBhIGNvdW50ZXIgc29cbiAgICogdGhhdCBpZiBtdWx0aXBsZSB0aHJlYWRzIG9mIHRoZSBzYW1lIFBJRCBhdHRlbXB0IHRvIGNvbmN1cnJlbnRseSBhY3F1aXJlXG4gICAqIHRoZSBzYW1lIGxvY2ssIHRoZXkncmUgZ3VhcmFudGVlZCB0byB1c2UgYSBkaWZmZXJlbnQgcmVhZGVyIGZpbGUgbmFtZSAob25seVxuICAgKiBvbmUgdGhyZWFkIHdpbGwgZXZlciBleGVjdXRlIEpTIGNvZGUgYXQgb25jZSwgZ3VhcmFudGVlaW5nIHRoZSByZWFkQ291bnRlclxuICAgKiBpcyBpbmNyZW1lbnRlZCBcImF0b21pY2FsbHlcIiBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoaXMgUElELikuXG4gICAqL1xuICBwcml2YXRlIHJlYWRlckZpbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgcmVhZC4ke3RoaXMucGlkU3RyaW5nfS4keysrdGhpcy5yZWFkQ291bnRlcn0ubG9ja2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIERvIHRoZSBhY3R1YWwgYWNxdWlyaW5nIG9mIGEgcmVhZCBsb2NrLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkb0FjcXVpcmVSZWFkKCk6IFByb21pc2U8SVJlYWRMb2NrPiB7XG4gICAgY29uc3QgcmVhZGVyRmlsZSA9IHRoaXMucmVhZGVyRmlsZSgpO1xuICAgIGF3YWl0IHdyaXRlRmlsZUF0b21pYyhyZWFkZXJGaWxlLCB0aGlzLnBpZFN0cmluZyk7XG5cbiAgICBsZXQgcmVsZWFzZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsZWFzZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZWxlYXNpbmcgbmVlZHMgYSBmbGFnLCBvdGhlcndpc2Ugd2UgbWlnaHQgZGVsZXRlIGEgZmlsZSB0aGF0IHNvbWUgb3RoZXIgbG9jayBoYXMgY3JlYXRlZCBpbiB0aGUgbWVhbiB0aW1lLlxuICAgICAgICBpZiAoIXJlbGVhc2VkKSB7XG4gICAgICAgICAgYXdhaXQgZGVsZXRlRmlsZShyZWFkZXJGaWxlKTtcbiAgICAgICAgICByZWxlYXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0Tm9PdGhlcldyaXRlcnMoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gYXdhaXQgdGhpcy5fY3VycmVudFdyaXRlcigpO1xuICAgIGlmICh3cml0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0NvbmN1cnJlbnRXcml0ZUxvY2snLCBgQW5vdGhlciBDTEkgKFBJRD0ke3dyaXRlcn0pIGlzIGN1cnJlbnRseSBzeW50aGluZyB0byAke3RoaXMuZGlyZWN0b3J5fS4gSW52b2tlIHRoZSBDTEkgaW4gc2VxdWVuY2UsIG9yIHVzZSAnLS1vdXRwdXQnIHRvIHN5bnRoIGludG8gZGlmZmVyZW50IGRpcmVjdG9yaWVzLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgY3VycmVudCB3cml0ZXIgKGlmIGFueSlcbiAgICpcbiAgICogUHVibGljbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gRG8gbm90IHVzZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgX2N1cnJlbnRXcml0ZXIoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IHJlYWRGaWxlSWZFeGlzdHModGhpcy53cml0ZXJGaWxlKTtcbiAgICBpZiAoIWNvbnRlbnRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBpZCA9IHBhcnNlSW50KGNvbnRlbnRzLCAxMCk7XG4gICAgaWYgKCFwcm9jZXNzRXhpc3RzKHBpZCkpIHtcbiAgICAgIC8vIERvIGNsZWFudXAgb2YgYSBzdHJheSBmaWxlIG5vd1xuICAgICAgYXdhaXQgZGVsZXRlRmlsZSh0aGlzLndyaXRlckZpbGUpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBjdXJyZW50IHJlYWRlcnMgKGlmIGFueSlcbiAgICpcbiAgICogUHVibGljbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gRG8gbm90IHVzZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgX2N1cnJlbnRSZWFkZXJzKCk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCByZSA9IC9ecmVhZFxcLihbXi5dKylcXC5bXi5dK1xcLmxvY2skLztcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gICAgbGV0IGNoaWxkcmVuO1xuICAgIHRyeSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5kaXJlY3RvcnksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBDYW4ndCBiZSBsb2NrZWQgaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0XG4gICAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZm5hbWUgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IG0gPSBmbmFtZS5tYXRjaChyZSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBwaWQgPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChwcm9jZXNzRXhpc3RzKHBpZCkpIHtcbiAgICAgICAgICByZXQucHVzaChwaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERvIGNsZWFudXAgb2YgYSBzdHJheSBmaWxlIG5vd1xuICAgICAgICAgIGF3YWl0IGRlbGV0ZUZpbGUocGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBmbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogQW4gYWNxdWlyZWQgbG9ja1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWFkTG9jayB7XG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBsb2NrLiBDYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEFuIGFjcXVpcmVkIHdyaXRlciBsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVdyaXRlTG9jayBleHRlbmRzIElSZWFkTG9jayB7XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSB3cml0ZXIgbG9jayB0byBhIHJlYWRlciBsb2NrXG4gICAqL1xuICBjb252ZXJ0VG9SZWFkZXJMb2NrKCk6IFByb21pc2U8SVJlYWRMb2NrPjtcbn1cblxuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIGNvZGUgcGF0aHMgYXJlIHVucHJlZGljdGFibGVcbmFzeW5jIGZ1bmN0aW9uIHJlYWRGaWxlSWZFeGlzdHMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuLyogYzggaWdub3JlIHN0b3AgKi9cblxubGV0IHRtcENvdW50ZXIgPSAwO1xuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIGNvZGUgcGF0aHMgYXJlIHVucHJlZGljdGFibGVcbmFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUF0b21pYyhmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlbmFtZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCB0bXBGaWxlID0gYCR7ZmlsZW5hbWV9LiR7cHJvY2Vzcy5waWR9XyR7Kyt0bXBDb3VudGVyfWA7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0bXBGaWxlLCBjb250ZW50cywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgYXdhaXQgZnMucmVuYW1lKHRtcEZpbGUsIGZpbGVuYW1lKTtcbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqLyAvLyBjb2RlIHBhdGhzIGFyZSB1bnByZWRpY3RhYmxlXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy51bmxpbmsoZmlsZW5hbWUpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuXG4vKiBjOCBpZ25vcmUgc3RhcnQgKi8gLy8gY29kZSBwYXRocyBhcmUgdW5wcmVkaWN0YWJsZVxuZnVuY3Rpb24gcHJvY2Vzc0V4aXN0cyhwaWQ6IG51bWJlcikge1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbChwaWQsIDApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuIl19
@@ -48,7 +48,7 @@ class Settings {
48
48
  }
49
49
  clear() {
50
50
  if (this.readOnly) {
51
- throw new toolkit_error_1.ToolkitError('Cannot clear(): settings are readonly');
51
+ throw new toolkit_error_1.ToolkitError('SettingsReadOnly', 'Cannot clear(): settings are readonly');
52
52
  }
53
53
  this.settings = {};
54
54
  }
@@ -60,7 +60,7 @@ class Settings {
60
60
  }
61
61
  set(path, value) {
62
62
  if (this.readOnly) {
63
- throw new toolkit_error_1.ToolkitError(`Can't set ${path}: settings object is readonly`);
63
+ throw new toolkit_error_1.ToolkitError('SettingsReadOnly', `Can't set ${path}: settings object is readonly`);
64
64
  }
65
65
  if (path.length === 0) {
66
66
  // deepSet can't handle this case
@@ -104,4 +104,4 @@ function isTransientValue(value) {
104
104
  value !== null &&
105
105
  value[exports.TRANSIENT_CONTEXT_KEY]);
106
106
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsZ0NBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQiw0REFBd0Q7QUFDeEQsZ0NBQWdDO0FBSWhDOztHQUVHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQWEsUUFBUTtJQVVUO0lBQ1E7SUFWWCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBb0I7UUFDNUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN6QixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUNVLFdBQXdCLEVBQUUsRUFDbEIsV0FBVyxLQUFLO1FBRHhCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVE7SUFFbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBZ0I7UUFDaEMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hFLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBZTtRQUMxQixPQUFPLElBQUksUUFBUSxDQUFDLElB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b3MnO1xuaW1wb3J0ICogYXMgZnNfcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc01hcCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogSWYgYSBjb250ZXh0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIHRoaXMga2V5IHNldCB0byBhIHRydXRoeSB2YWx1ZSwgaXQgd29uJ3QgYmUgc2F2ZWQgdG8gY2RrLmNvbnRleHQuanNvblxuICovXG5leHBvcnQgY29uc3QgVFJBTlNJRU5UX0NPTlRFWFRfS0VZID0gJyRkb250U2F2ZUNvbnRleHQnO1xuXG4vKipcbiAqIEEgc2luZ2xlIGJhZyBvZiBzZXR0aW5nc1xuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ3Mge1xuICBwdWJsaWMgc3RhdGljIG1lcmdlQWxsKC4uLnNldHRpbmdzOiBTZXR0aW5nc1tdKTogU2V0dGluZ3Mge1xuICAgIGxldCByZXQgPSBuZXcgU2V0dGluZ3MoKTtcbiAgICBmb3IgKGNvbnN0IHNldHRpbmcgb2Ygc2V0dGluZ3MpIHtcbiAgICAgIHJldCA9IHJldC5tZXJnZShzZXR0aW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IFNldHRpbmdzTWFwID0ge30sXG4gICAgcHVibGljIHJlYWRvbmx5IHJlYWRPbmx5ID0gZmFsc2UsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kSG9tZURpcihmaWxlTmFtZSk7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKGV4cGFuZGVkLCBzdHJpcFRyYW5zaWVudFZhbHVlcyh0aGlzLnNldHRpbmdzKSwge1xuICAgICAgc3BhY2VzOiAyLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoW10pO1xuICB9XG5cbiAgcHVibGljIG1lcmdlKG90aGVyOiBTZXR0aW5ncyk6IFNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IFNldHRpbmdzKHV0aWwuZGVlcE1lcmdlKHRoaXMuc2V0dGluZ3MsIG90aGVyLnNldHRpbmdzKSk7XG4gIH1cblxuICBwdWJsaWMgc3ViU2V0dGluZ3Moa2V5UHJlZml4OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBuZXcgU2V0dGluZ3ModGhpcy5nZXQoa2V5UHJlZml4KSB8fCB7fSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG1ha2VSZWFkT25seSgpOiBTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBTZXR0aW5ncyh0aGlzLnNldHRpbmdzLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ2Fubm90IGNsZWFyKCk6IHNldHRpbmdzIGFyZSByZWFkb25seScpO1xuICAgIH1cbiAgICB0aGlzLnNldHRpbmdzID0ge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldHRpbmdzKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0KHBhdGg6IHN0cmluZ1tdKTogYW55IHtcbiAgICByZXR1cm4gdXRpbC5kZWVwQ2xvbmUodXRpbC5kZWVwR2V0KHRoaXMuc2V0dGluZ3MsIHBhdGgpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQocGF0aDogc3RyaW5nW10sIHZhbHVlOiBhbnkpOiBTZXR0aW5ncyB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYENhbid0IHNldCAke3BhdGh9OiBzZXR0aW5ncyBvYmplY3QgaXMgcmVhZG9ubHlgKTtcbiAgICB9XG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBkZWVwU2V0IGNhbid0IGhhbmRsZSB0aGlzIGNhc2VcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5kZWVwU2V0KHRoaXMuc2V0dGluZ3MsIHBhdGgsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgdW5zZXQocGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNldChwYXRoLCB1bmRlZmluZWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGFuZEhvbWVEaXIoeDogc3RyaW5nKSB7XG4gIGlmICh4LnN0YXJ0c1dpdGgoJ34nKSkge1xuICAgIHJldHVybiBmc19wYXRoLmpvaW4ob3MuaG9tZWRpcigpLCB4LnNsaWNlKDEpKTtcbiAgfVxuICByZXR1cm4geDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGNvbnRleHQgdmFsdWUgdGhhdCBhcmUgbm90IHRyYW5zaWVudCBjb250ZXh0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBzdHJpcFRyYW5zaWVudFZhbHVlcyhvYmo6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgY29uc3QgcmV0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIGlmICghaXNUcmFuc2llbnRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJldFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgdHJhbnNpZW50IGNvbnRleHQgdmFsdWVcbiAqXG4gKiBWYWx1ZXMgdGhhdCBhcmUgb2JqZWN0cyB3aXRoIGEgbWFnaWMga2V5IHNldCB0byBhIHRydXRoeSB2YWx1ZSBhcmUgY29uc2lkZXJlZCB0cmFuc2llbnQuXG4gKi9cbmZ1bmN0aW9uIGlzVHJhbnNpZW50VmFsdWUodmFsdWU6IGFueSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICh2YWx1ZSBhcyBhbnkpW1RSQU5TSUVOVF9DT05URVhUX0tFWV1cbiAgKTtcbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsZ0NBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQiw0REFBd0Q7QUFDeEQsZ0NBQWdDO0FBSWhDOztHQUVHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQWEsUUFBUTtJQVVUO0lBQ1E7SUFWWCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBb0I7UUFDNUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN6QixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUNVLFdBQXdCLEVBQUUsRUFDbEIsV0FBVyxLQUFLO1FBRHhCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVE7SUFFbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBZ0I7UUFDaEMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hFLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBZTtRQUMxQixPQUFPLElBQUksUUFBUSxDQUFDLElB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OlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgZnNfcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc01hcCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogSWYgYSBjb250ZXh0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIHRoaXMga2V5IHNldCB0byBhIHRydXRoeSB2YWx1ZSwgaXQgd29uJ3QgYmUgc2F2ZWQgdG8gY2RrLmNvbnRleHQuanNvblxuICovXG5leHBvcnQgY29uc3QgVFJBTlNJRU5UX0NPTlRFWFRfS0VZID0gJyRkb250U2F2ZUNvbnRleHQnO1xuXG4vKipcbiAqIEEgc2luZ2xlIGJhZyBvZiBzZXR0aW5nc1xuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ3Mge1xuICBwdWJsaWMgc3RhdGljIG1lcmdlQWxsKC4uLnNldHRpbmdzOiBTZXR0aW5nc1tdKTogU2V0dGluZ3Mge1xuICAgIGxldCByZXQgPSBuZXcgU2V0dGluZ3MoKTtcbiAgICBmb3IgKGNvbnN0IHNldHRpbmcgb2Ygc2V0dGluZ3MpIHtcbiAgICAgIHJldCA9IHJldC5tZXJnZShzZXR0aW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IFNldHRpbmdzTWFwID0ge30sXG4gICAgcHVibGljIHJlYWRvbmx5IHJlYWRPbmx5ID0gZmFsc2UsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kSG9tZURpcihmaWxlTmFtZSk7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKGV4cGFuZGVkLCBzdHJpcFRyYW5zaWVudFZhbHVlcyh0aGlzLnNldHRpbmdzKSwge1xuICAgICAgc3BhY2VzOiAyLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoW10pO1xuICB9XG5cbiAgcHVibGljIG1lcmdlKG90aGVyOiBTZXR0aW5ncyk6IFNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IFNldHRpbmdzKHV0aWwuZGVlcE1lcmdlKHRoaXMuc2V0dGluZ3MsIG90aGVyLnNldHRpbmdzKSk7XG4gIH1cblxuICBwdWJsaWMgc3ViU2V0dGluZ3Moa2V5UHJlZml4OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBuZXcgU2V0dGluZ3ModGhpcy5nZXQoa2V5UHJlZml4KSB8fCB7fSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG1ha2VSZWFkT25seSgpOiBTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBTZXR0aW5ncyh0aGlzLnNldHRpbmdzLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU2V0dGluZ3NSZWFkT25seScsICdDYW5ub3QgY2xlYXIoKTogc2V0dGluZ3MgYXJlIHJlYWRvbmx5Jyk7XG4gICAgfVxuICAgIHRoaXMuc2V0dGluZ3MgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0dGluZ3MpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQocGF0aDogc3RyaW5nW10pOiBhbnkge1xuICAgIHJldHVybiB1dGlsLmRlZXBDbG9uZSh1dGlsLmRlZXBHZXQodGhpcy5zZXR0aW5ncywgcGF0aCkpO1xuICB9XG5cbiAgcHVibGljIHNldChwYXRoOiBzdHJpbmdbXSwgdmFsdWU6IGFueSk6IFNldHRpbmdzIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU2V0dGluZ3NSZWFkT25seScsIGBDYW4ndCBzZXQgJHtwYXRofTogc2V0dGluZ3Mgb2JqZWN0IGlzIHJlYWRvbmx5YCk7XG4gICAgfVxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gZGVlcFNldCBjYW4ndCBoYW5kbGUgdGhpcyBjYXNlXG4gICAgICB0aGlzLnNldHRpbmdzID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVlcFNldCh0aGlzLnNldHRpbmdzLCBwYXRoLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHVuc2V0KHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZXQocGF0aCwgdW5kZWZpbmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRIb21lRGlyKHg6IHN0cmluZykge1xuICBpZiAoeC5zdGFydHNXaXRoKCd+JykpIHtcbiAgICByZXR1cm4gZnNfcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgeC5zbGljZSgxKSk7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBjb250ZXh0IHZhbHVlIHRoYXQgYXJlIG5vdCB0cmFuc2llbnQgY29udGV4dCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gc3RyaXBUcmFuc2llbnRWYWx1ZXMob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGNvbnN0IHJldDogYW55ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBpZiAoIWlzVHJhbnNpZW50VmFsdWUodmFsdWUpKSB7XG4gICAgICByZXRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHRyYW5zaWVudCBjb250ZXh0IHZhbHVlXG4gKlxuICogVmFsdWVzIHRoYXQgYXJlIG9iamVjdHMgd2l0aCBhIG1hZ2ljIGtleSBzZXQgdG8gYSB0cnV0aHkgdmFsdWUgYXJlIGNvbnNpZGVyZWQgdHJhbnNpZW50LlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaWVudFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAodmFsdWUgYXMgYW55KVtUUkFOU0lFTlRfQ09OVEVYVF9LRVldXG4gICk7XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  import type { CloudFormationStackArtifact } from '@aws-cdk/cloud-assembly-api';
2
+ import type { StackEvent } from '@aws-sdk/client-cloudformation';
2
3
  import type { ICloudFormationClient } from '../aws-auth/private';
3
4
  import { type IoHelper } from '../io/private';
4
5
  export interface StackActivityMonitorProps {
@@ -47,6 +48,16 @@ export interface StackActivityMonitorProps {
47
48
  */
48
49
  readonly pollingInterval?: number;
49
50
  }
51
+ /**
52
+ * Drives the monitoring of a Stack deployment
53
+ *
54
+ * ```
55
+ * ┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
56
+ * │ Stack │ poll() │ Stack │ process(ev) │ Stack │
57
+ * │ EventPoller │◀───────│ ActivityMonitor │─────────────▶│ ProgressMonitor │
58
+ * └───────────────────────┘ └───────────────────────┘ └───────────────────────┘
59
+ * ```
60
+ */
50
61
  export declare class StackActivityMonitor {
51
62
  /**
52
63
  * The poller used to read stack events
@@ -57,7 +68,12 @@ export declare class StackActivityMonitor {
57
68
  * Printers can decide to update a view less frequently if desired
58
69
  */
59
70
  private readonly pollingInterval;
60
- readonly errors: string[];
71
+ /**
72
+ * A list of all non-cancellation errors we have seen.
73
+ *
74
+ * By the nature of the order we see events in, will be ordered from oldest to newest.
75
+ */
76
+ private readonly _errors;
61
77
  private monitorId?;
62
78
  private readonly progressMonitor;
63
79
  /**
@@ -72,6 +88,23 @@ export declare class StackActivityMonitor {
72
88
  private readonly stackName;
73
89
  private readonly stack;
74
90
  constructor({ cfn, ioHelper, stack, stackName, resourcesTotal, changeSetCreationTime, pollingInterval, }: StackActivityMonitorProps);
91
+ /**
92
+ * Return error messages of all encountered errors (that aren't cancellations)
93
+ */
94
+ get allErrorMessages(): string[];
95
+ /**
96
+ * Return error codeds of all encountered errors (that aren't cancellations nor stack errors)
97
+ *
98
+ * We don't need to include nested stack errors because our poller will poll the nested stack,
99
+ * and have returned the actual error as well.
100
+ */
101
+ get allErrorCodes(): string[];
102
+ /**
103
+ * Take our best guess at the error code of the root cause
104
+ *
105
+ * The first error that occurs is the root cause.
106
+ */
107
+ get rootCauseErrorCode(): string | undefined;
75
108
  start(): Promise<this>;
76
109
  stop(): Promise<void>;
77
110
  private scheduleNextTick;
@@ -80,9 +113,7 @@ export declare class StackActivityMonitor {
80
113
  /**
81
114
  * Reads all new events from the stack history
82
115
  *
83
- * The events are returned in reverse chronological order; we continue to the next page if we
84
- * see a next page and the last event in the page is new to us (and within the time window).
85
- * haven't seen the final event
116
+ * The events are returned in chronological order by the underlying poller.
86
117
  */
87
118
  private readNewEvents;
88
119
  /**
@@ -98,4 +129,10 @@ export declare class StackActivityMonitor {
98
129
  private formatActivity;
99
130
  private checkForErrors;
100
131
  }
132
+ /**
133
+ * Extract an error code from the given stack event.
134
+ *
135
+ * Always contains the services, and includes the handler error code if available.
136
+ */
137
+ export declare function extractErrorCode(event: StackEvent): string;
101
138
  //# sourceMappingURL=stack-activity-monitor.d.ts.map