obsidian-dev-utils 56.0.2 → 57.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/lib/cjs/async.cjs +10 -2
  3. package/dist/lib/cjs/async.d.cts +1 -1
  4. package/dist/lib/cjs/library.cjs +1 -1
  5. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +1 -1
  6. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +2 -1
  7. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +1 -1
  8. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +2 -1
  9. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +1 -1
  10. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +2 -1
  11. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +1 -1
  12. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +2 -1
  13. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +1 -1
  14. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +2 -1
  15. package/dist/lib/cjs/obsidian/command-handlers/index.cjs +6 -3
  16. package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +1 -0
  17. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +160 -0
  18. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +24 -0
  19. package/dist/lib/cjs/obsidian/plugin/components/abort-signal-component.cjs +5 -1
  20. package/dist/lib/cjs/obsidian/plugin/components/abort-signal-component.d.cts +4 -0
  21. package/dist/lib/cjs/obsidian/plugin/components/async-error-handler-component.cjs +5 -1
  22. package/dist/lib/cjs/obsidian/plugin/components/async-error-handler-component.d.cts +4 -0
  23. package/dist/lib/cjs/obsidian/plugin/components/console-debug-component.cjs +5 -1
  24. package/dist/lib/cjs/obsidian/plugin/components/console-debug-component.d.cts +4 -0
  25. package/dist/lib/cjs/obsidian/plugin/components/i18n-component.cjs +5 -1
  26. package/dist/lib/cjs/obsidian/plugin/components/i18n-component.d.cts +4 -0
  27. package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.cjs +5 -1
  28. package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.d.cts +4 -0
  29. package/dist/lib/cjs/obsidian/plugin/components/plugin-context-component.cjs +5 -1
  30. package/dist/lib/cjs/obsidian/plugin/components/plugin-context-component.d.cts +4 -0
  31. package/dist/lib/cjs/obsidian/plugin/components/plugin-notice-component.cjs +5 -1
  32. package/dist/lib/cjs/obsidian/plugin/components/plugin-notice-component.d.cts +4 -0
  33. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.cjs +2 -5
  34. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-component.d.cts +1 -5
  35. package/dist/lib/cjs/obsidian/plugin/components/plugin-settings-tab-component.cjs +4 -10
  36. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +21 -17
  37. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +7 -8
  38. package/dist/lib/esm/async.d.mts +1 -1
  39. package/dist/lib/esm/async.mjs +10 -2
  40. package/dist/lib/esm/library.mjs +1 -1
  41. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +2 -1
  42. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +1 -1
  43. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +2 -1
  44. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +1 -1
  45. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +2 -1
  46. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +1 -1
  47. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +2 -1
  48. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +1 -1
  49. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.d.mts +2 -1
  50. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +1 -1
  51. package/dist/lib/esm/obsidian/command-handlers/index.d.mts +1 -0
  52. package/dist/lib/esm/obsidian/command-handlers/index.mjs +4 -2
  53. package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.d.mts +24 -0
  54. package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.mjs +52 -0
  55. package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.d.mts +4 -0
  56. package/dist/lib/esm/obsidian/plugin/components/abort-signal-component.mjs +5 -1
  57. package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.d.mts +4 -0
  58. package/dist/lib/esm/obsidian/plugin/components/async-error-handler-component.mjs +5 -1
  59. package/dist/lib/esm/obsidian/plugin/components/console-debug-component.d.mts +4 -0
  60. package/dist/lib/esm/obsidian/plugin/components/console-debug-component.mjs +5 -1
  61. package/dist/lib/esm/obsidian/plugin/components/i18n-component.d.mts +4 -0
  62. package/dist/lib/esm/obsidian/plugin/components/i18n-component.mjs +5 -1
  63. package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.d.mts +4 -0
  64. package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.mjs +5 -1
  65. package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.d.mts +4 -0
  66. package/dist/lib/esm/obsidian/plugin/components/plugin-context-component.mjs +5 -1
  67. package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.d.mts +4 -0
  68. package/dist/lib/esm/obsidian/plugin/components/plugin-notice-component.mjs +5 -1
  69. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.d.mts +1 -5
  70. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-component.mjs +2 -4
  71. package/dist/lib/esm/obsidian/plugin/components/plugin-settings-tab-component.mjs +4 -10
  72. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +7 -8
  73. package/dist/lib/esm/obsidian/plugin/plugin.mjs +21 -17
  74. package/obsidian/command-handlers/open-settings-command-handler/package.json +6 -0
  75. package/package.json +1 -1
@@ -49,12 +49,11 @@ const defaultTransformer = new GroupTransformer([
49
49
  new SetTransformer(),
50
50
  new TwoWayMapTransformer()
51
51
  ]);
52
- const PLUGIN_SETTINGS_COMPONENT_KEY = "PluginSettingsComponent";
53
52
  class PluginSettingsComponentBase extends AsyncComponentBase {
54
53
  /**
55
54
  * Component key for {@link registerComponent} replacement.
56
55
  */
57
- static COMPONENT_KEY = PLUGIN_SETTINGS_COMPONENT_KEY;
56
+ static COMPONENT_KEY = Symbol(PluginSettingsComponentBase.name);
58
57
  /**
59
58
  * Gets the readonly default settings.
60
59
  *
@@ -457,7 +456,6 @@ class EmptyPluginSettingsComponent extends PluginSettingsComponentBase {
457
456
  }
458
457
  export {
459
458
  EmptyPluginSettingsComponent,
460
- PLUGIN_SETTINGS_COMPONENT_KEY,
461
459
  PluginSettingsComponentBase
462
460
  };
463
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIHBsdWdpbiBzZXR0aW5nczogZGF0YSwgcGVyc2lzdGVuY2UsIHZhbGlkYXRpb24sIGFuZCBldmVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgc2luZ2xlIHB1YmxpYy1mYWNpbmcgc2V0dGluZ3MgQVBJIGZvciBwbHVnaW4gYXV0aG9ycy5cbiAqIEFsbCBzZXR0aW5ncyBsb2dpYyAobG9hZCwgc2F2ZSwgdmFsaWRhdGUsIHRyYW5zZm9ybSwgY2xvbmUpIGlzIGhhbmRsZWQgZGlyZWN0bHlcbiAqIGJ5IHRoaXMgY29tcG9uZW50IFx1MjAxNCBubyBzZXBhcmF0ZSBtYW5hZ2VyIGNsYXNzIGlzIG5lZWRlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFzeW5jRXZlbnRSZWYgfSBmcm9tICcuLi8uLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy90cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4uLy4uLy4uL3R5cGUudHMnO1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJy4uLy4uLy4uL2FzeW5jLWV2ZW50cy50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGRlZXBFcXVhbCxcbiAgZ2V0QWxsS2V5c1xufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtdXRpbHMudHMnO1xuaW1wb3J0IHsgRGF0ZVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL2RhdGUtdHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgRHVyYXRpb25UcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy9kdXJhdGlvbi10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBHcm91cFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL2dyb3VwLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IE1hcFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL21hcC10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBTZXRUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy9zZXQtdHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgU2tpcFByaXZhdGVQcm9wZXJ0eVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL3NraXAtcHJpdmF0ZS1wcm9wZXJ0eS10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBUd29XYXlNYXBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy90d28td2F5LW1hcC10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBBc3luY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FzeW5jLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyByZWdpc3RlckFzeW5jRXZlbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FzeW5jLWV2ZW50cy1jb21wb25lbnQudHMnO1xuXG5jb25zdCBkZWZhdWx0VHJhbnNmb3JtZXIgPSBuZXcgR3JvdXBUcmFuc2Zvcm1lcihbXG4gIG5ldyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIoKSxcbiAgbmV3IERhdGVUcmFuc2Zvcm1lcigpLFxuICBuZXcgRHVyYXRpb25UcmFuc2Zvcm1lcigpLFxuICBuZXcgTWFwVHJhbnNmb3JtZXIoKSxcbiAgbmV3IFNldFRyYW5zZm9ybWVyKCksXG4gIG5ldyBUd29XYXlNYXBUcmFuc2Zvcm1lcigpXG5dKTtcblxuLyoqXG4gKiBDb21wb25lbnQga2V5IHVzZWQgYnkge0BsaW5rIHJlZ2lzdGVyQ29tcG9uZW50fSB0byBpZGVudGlmeSBzZXR0aW5ncyBjb21wb25lbnRzLlxuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1NFVFRJTkdTX0NPTVBPTkVOVF9LRVkgPSAnUGx1Z2luU2V0dGluZ3NDb21wb25lbnQnO1xuXG4vKipcbiAqIFBhcmFtcyBmb3IgY3JlYXRpbmcgYSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGxvYWQgZGF0YSBmcm9tIHRoZSBwbHVnaW4ncyBkYXRhIGZpbGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWREYXRhOiAoKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIHNhdmUgZGF0YSB0byB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIHNhdmUuXG4gICAqL1xuICByZWFkb25seSBzYXZlRGF0YTogKGRhdGE6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSBzbmFwc2hvdCBvZiBwbHVnaW4gc2V0dGluZ3Mgc3RhdGUsIGluY2x1ZGluZyByYXcgaW5wdXQgdmFsdWVzLCBlZmZlY3RpdmUgKHZhbGlkYXRlZCkgdmFsdWVzLFxuICogYW5kIHBlci1wcm9wZXJ0eSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBlZmZlY3RpdmUgc2V0dGluZ3MgdmFsdWVzIHVzZWQgYnkgdGhlIHBsdWdpbi4gSW52YWxpZCBwcm9wZXJ0aWVzIGFyZSByZXBsYWNlZCB3aXRoIGRlZmF1bHRzLlxuICAgKi9cbiAgZWZmZWN0aXZlVmFsdWVzOiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIHJhdyBpbnB1dCB2YWx1ZXMgYXMgZW50ZXJlZCBieSB0aGUgdXNlci4gTWF5IGNvbnRhaW4gaW52YWxpZCB2YWx1ZXMuXG4gICAqL1xuICBpbnB1dFZhbHVlczogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFBlci1wcm9wZXJ0eSB2YWxpZGF0aW9uIG1lc3NhZ2VzLiBFbXB0eSBzdHJpbmcgbWVhbnMgdmFsaWQuXG4gICAqL1xuICB2YWxpZGF0aW9uTWVzc2FnZXM6IFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZWFkb25seSB2ZXJzaW9uIG9mIHtAbGluayBQbHVnaW5TZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRvbmx5UGx1Z2luU2V0dGluZ3M8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+ID0gUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzPjtcblxuLyoqXG4gKiBSZWFkb25seSB2ZXJzaW9uIG9mIHtAbGluayBQbHVnaW5TZXR0aW5nc1N0YXRlfSBmb3IgdXNlIGluIGV2ZW50IGNhbGxiYWNrcyBhbmQgcHVibGljIGdldHRlcnMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4+O1xuXG4vKipcbiAqIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZvciBhIHNldHRpbmdzIHByb3BlcnR5LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lLlxuICovXG5leHBvcnQgdHlwZSBTZXR0aW5nc1ZhbGlkYXRvcjxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCwgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4gPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4gPSAoXG4gIHZhbHVlOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdLFxuICBzZXR0aW5nczogUGx1Z2luU2V0dGluZ3NcbikgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PjtcblxudHlwZSBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+O1xuXG50eXBlIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+XTtcblxudHlwZSBWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFBhcnRpYWw8UmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCBzdHJpbmc+PjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50cy5cbiAqXG4gKiBNYW5hZ2VzIHNldHRpbmdzIGRhdGEsIHBlcnNpc3RlbmNlLCB2YWxpZGF0aW9uLCBhbmQgZXZlbnRzLlxuICogUGx1Z2luIGF1dGhvcnMgZXh0ZW5kIHRoaXMgY2xhc3MgYW5kIGltcGxlbWVudCB7QGxpbmsgY3JlYXRlRGVmYXVsdFNldHRpbmdzfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIEFzeW5jQ29tcG9uZW50QmFzZSB7XG4gIC8qKlxuICAgKiBDb21wb25lbnQga2V5IGZvciB7QGxpbmsgcmVnaXN0ZXJDb21wb25lbnR9IHJlcGxhY2VtZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QT05FTlRfS0VZID0gUExVR0lOX1NFVFRJTkdTX0NPTVBPTkVOVF9LRVk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlYWRvbmx5IGRlZmF1bHQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNldHRpbmdzIChhcyBhIHJlYWRvbmx5IG9iamVjdCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWFkb25seSBlZmZlY3RpdmUgc2V0dGluZ3MgKHZhbGlkYXRlZCwgd2l0aCBkZWZhdWx0cyBzdWJzdGl0dXRlZCBmb3IgaW52YWxpZCB2YWx1ZXMpLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVhZG9ubHkgZWZmZWN0aXZlIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5ncygpOiBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5nc1N0YXRlLmVmZmVjdGl2ZVZhbHVlcyBhcyBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgc3RhdGUgc25hcHNob3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldHRpbmdzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5nc1N0YXRlKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSBhcyBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhc3luY0V2ZW50cyA9IG5ldyBBc3luY0V2ZW50cygpO1xuICBwcml2YXRlIGN1cnJlbnRTdGF0ZTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz47XG4gIHByaXZhdGUgbGFzdFNhdmVkU3RhdGU6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIHJlYWRvbmx5IGxlZ2FjeVNldHRpbmdzQ29udmVydGVyczogKChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkRGF0YUZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+O1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5TmFtZXM6IFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+W107XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZURhdGFGbjogKGRhdGE6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9ycyA9IG5ldyBNYXA8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtcyBmb3IgbG9hZGluZy9zYXZpbmcgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50UGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvYWREYXRhRm4gPSBwYXJhbXMubG9hZERhdGEuYmluZChwYXJhbXMpO1xuICAgIHRoaXMuc2F2ZURhdGFGbiA9IHBhcmFtcy5zYXZlRGF0YS5iaW5kKHBhcmFtcyk7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMucHJvcGVydHlOYW1lcyA9IGdldEFsbEtleXModGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5yZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgYW5kIHNhdmVzIHRoZW0uXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc0VkaXRvciAtIFRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVkaXRBbmRTYXZlKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZWRpdChzZXR0aW5nc0VkaXRvcik7XG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlKGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIHNldHRpbmdzIGFyZSBzYWZlLlxuICAgKlxuICAgKiBJdCBydW5zIHZhbGlkYXRpb24gZm9yIGVhY2ggcHJvcGVydHkgYW5kIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlIHZhbGlkYXRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2FmZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnN1cmVTYWZlKHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlKHNldHRpbmdzKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gZGVmYXVsdHNbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNhZmUgY29weSBvZiB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc2FmZSBjb3B5IG9mIHRoZSBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTYWZlQ29weShzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgY29uc3Qgc2FmZVNldHRpbmdzID0gYXdhaXQgdGhpcy5jbG9uZVNldHRpbmdzKHNldHRpbmdzKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVNhZmUoc2FmZVNldHRpbmdzKTtcbiAgICByZXR1cm4gc2FmZVNldHRpbmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgZnJvbSB0aGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGlzSW5pdGlhbExvYWQgLSBXaGV0aGVyIHRoZSBzZXR0aW5ncyBhcmUgYmVpbmcgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRGcm9tRmlsZShpc0luaXRpYWxMb2FkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERhdGFGbigpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudFN0YXRlID0gdGhpcy5jcmVhdGVEZWZhdWx0U3RhdGUoKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgc2V0dGluZ3MgZnJvbSBkYXRhLmpzb24uIEV4cGVjdGVkIE9iamVjdCwgZ290OiAke3R5cGVvZiBkYXRhfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGRhdGEgYXMgR2VuZXJpY09iamVjdDtcbiAgICAgIGNvbnN0IHBhcnNlZFNldHRpbmdzID0gYXdhaXQgdGhpcy5yYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZCk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZShwYXJzZWRTZXR0aW5ncyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5SW1wbChwcm9wZXJ0eU5hbWUsIHBhcnNlZFNldHRpbmdzW3Byb3BlcnR5TmFtZV0sIHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSBhd2FpdCB0aGlzLmNsb25lU3RhdGUodGhpcy5jdXJyZW50U3RhdGUpO1xuXG4gICAgICBjb25zdCBuZXdSZWNvcmQgPSBhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuXG4gICAgICBpZiAoIWRlZXBFcXVhbChuZXdSZWNvcmQsIGRhdGEpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5hc3luY0V2ZW50cy50cmlnZ2VyQXN5bmMoJ2xvYWRTZXR0aW5ncycsIHRoaXMuY3VycmVudFN0YXRlLCBpc0luaXRpYWxMb2FkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgYGxvYWRTZXR0aW5nc2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQWx3YXlzIGBsb2FkU2V0dGluZ3NgLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb24oXG4gICAgbmFtZTogJ2xvYWRTZXR0aW5ncycsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgaXNJbml0aWFsTG9hZDogYm9vbGVhblxuICAgICkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmO1xuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgYHNhdmVTZXR0aW5nc2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQWx3YXlzIGBzYXZlU2V0dGluZ3NgLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb24oXG4gICAgbmFtZTogJ3NhdmVTZXR0aW5ncycsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIG5ld1N0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgICBjb250ZXh0OiB1bmtub3duXG4gICAgKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWY7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGFuIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0gdGhpc0FyZyAtIFRoZSBgdGhpc2AgY29udGV4dC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHVibGljIG9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNFdmVudHMub24obmFtZSwgY2FsbGJhY2ssIHRoaXNBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHJlbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRGcm9tRmlsZShmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgc2V0dGluZ3MgZnJvbSBmaWxlIGFuZCByZWdpc3RlcnMgZXZlbnQgaGFuZGxlcnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLm9uKCdsb2FkU2V0dGluZ3MnLCB0aGlzLm9uTG9hZFNldHRpbmdzLmJpbmQodGhpcykpKTtcbiAgICByZWdpc3RlckFzeW5jRXZlbnQodGhpcywgdGhpcy5vbignc2F2ZVNldHRpbmdzJywgdGhpcy5vblNhdmVTZXR0aW5ncy5iaW5kKHRoaXMpKSk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnJvbUZpbGUodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGVnYWN5IHNldHRpbmdzIGNvbnZlcnRlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBMZWdhY3lTZXR0aW5ncyAtIFRoZSBsZWdhY3kgc2V0dGluZ3MgY2xhc3MuXG4gICAqIEBwYXJhbSBsZWdhY3lTZXR0aW5nc0NsYXNzIC0gVGhlIGxlZ2FjeSBzZXR0aW5ncyBjbGFzcy5cbiAgICogQHBhcmFtIGNvbnZlcnRlciAtIFRoZSBjb252ZXJ0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJMZWdhY3lTZXR0aW5nc0NvbnZlcnRlcjxMZWdhY3lTZXR0aW5ncyBleHRlbmRzIG9iamVjdD4oXG4gICAgbGVnYWN5U2V0dGluZ3NDbGFzczogbmV3ICgpID0+IExlZ2FjeVNldHRpbmdzLFxuICAgIGNvbnZlcnRlcjogKGxlZ2FjeVNldHRpbmdzOiBQYXJ0aWFsPExlZ2FjeVNldHRpbmdzPiAmIFBhcnRpYWw8UGx1Z2luU2V0dGluZ3M+KSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIHRoaXMubGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzLnB1c2gobGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXIpO1xuXG4gICAgZnVuY3Rpb24gbGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXIocmVjb3JkOiBHZW5lcmljT2JqZWN0KTogdm9pZCB7XG4gICAgICBjb25zdCBsZWdhY3lTZXR0aW5nc0tleXMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMobmV3IGxlZ2FjeVNldHRpbmdzQ2xhc3MoKSkpO1xuICAgICAgY29uc3QgcGx1Z2luU2V0dGluZ0tleXMgPSBuZXcgU2V0PHN0cmluZz4odGhhdC5wcm9wZXJ0eU5hbWVzKTtcbiAgICAgIGNvbnN0IGxlZ2FjeVNldHRpbmdzID0gcmVjb3JkIGFzIFBhcnRpYWw8TGVnYWN5U2V0dGluZ3M+ICYgUGFydGlhbDxQbHVnaW5TZXR0aW5ncz47XG4gICAgICBjb252ZXJ0ZXIobGVnYWN5U2V0dGluZ3MpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobGVnYWN5U2V0dGluZ3MpKSB7XG4gICAgICAgIGlmIChwbHVnaW5TZXR0aW5nS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsZWdhY3lTZXR0aW5nc0tleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YWxpZGF0b3IgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgLSBUaGUgdmFsaWRhdG9yLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyVmFsaWRhdG9yPFByb3BlcnR5TmFtZSBleHRlbmRzIFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+PihcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZSxcbiAgICB2YWxpZGF0b3I6IFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzLCBQcm9wZXJ0eU5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdG9ycy5zZXQocHJvcGVydHlOYW1lLCB2YWxpZGF0b3IgYXMgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3M+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldmFsaWRhdGUoKTogUHJvbWlzZTxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+IHtcbiAgICBhd2FpdCB0aGlzLmVkaXQobm9vcCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgc2F2ZSB0byBmaWxlIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVRvRmlsZShjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChkZWVwRXF1YWwodGhpcy5sYXN0U2F2ZWRTdGF0ZS5pbnB1dFZhbHVlcywgdGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgIGF3YWl0IHRoaXMuYXN5bmNFdmVudHMudHJpZ2dlckFzeW5jKCdzYXZlU2V0dGluZ3MnLCB0aGlzLmN1cnJlbnRTdGF0ZSwgdGhpcy5sYXN0U2F2ZWRTdGF0ZSwgY29udGV4dCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IGF3YWl0IHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVkaXQoKHNldHRpbmdzKSA9PiB7XG4gICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWRhdGlvbiByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcl0gb2YgdGhpcy52YWxpZGF0b3JzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB2YWxpZGF0b3Ioc2V0dGluZ3NbcHJvcGVydHlOYW1lXSwgc2V0dGluZ3MpO1xuICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHJlc3VsdFtwcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNldHRpbmdzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZURlZmF1bHRTZXR0aW5ncygpOiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogR2V0cyB0aGUgdHJhbnNmb3JtZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRUcmFuc2Zvcm1lcigpOiBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIGRlZmF1bHRUcmFuc2Zvcm1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIHJlY29yZCBpcyBsb2FkZWQgZnJvbSBkaXNrLlxuICAgKlxuICAgKiBAcGFyYW0gcmVjb3JkIC0gVGhlIHJlY29yZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRSZWNvcmQocmVjb3JkOiBHZW5lcmljT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgdGhpcy5sZWdhY3lTZXR0aW5nc0NvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnZlcnRlcihyZWNvcmQpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBzZXR0aW5ncyBhcmUgbG9hZGVkIG9yIHJlbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2xvYWRlZFN0YXRlIC0gVGhlIGxvYWRlZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9pc0luaXRpYWxMb2FkIC0gV2hldGhlciB0aGlzIGlzIHRoZSBpbml0aWFsIGxvYWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2FkU2V0dGluZ3MoXG4gICAgX2xvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIF9pc0luaXRpYWxMb2FkOiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICpcbiAgICogQHBhcmFtIF9uZXdTdGF0ZSAtIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBfb2xkU3RhdGUgLSBUaGUgb2xkIHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgc2F2ZSBjb250ZXh0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU2F2ZVNldHRpbmdzKFxuICAgIF9uZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBfb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgX2NvbnRleHQ6IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyByZWNvcmQgaXMgYWJvdXQgdG8gYmUgc2F2ZWQgdG8gZGlzay5cbiAgICpcbiAgICogQHBhcmFtIF9yZWNvcmQgLSBUaGUgcmVjb3JkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU2F2aW5nUmVjb3JkKF9yZWNvcmQ6IEdlbmVyaWNPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXJzLlxuICAgKiBPdmVycmlkZSB0byByZWdpc3RlciBsZWdhY3kgc2V0dGluZ3MgY29udmVydGVycy5cbiAgICovXG4gIHByb3RlY3RlZCByZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3JzLlxuICAgKiBPdmVycmlkZSB0byByZWdpc3RlciB2YWxpZGF0b3JzIGZvciBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsb25lU2V0dGluZ3Moc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuc2V0dGluZ3NUb1Jhd1JlY29yZChzZXR0aW5ncyk7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHJlY29yZCk7XG4gICAgY29uc3QgY2xvbmVSZWNvcmQgPSBKU09OLnBhcnNlKGpzb24pIGFzIEdlbmVyaWNPYmplY3Q7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmF3UmVjb3JkVG9TZXR0aW5ncyhjbG9uZVJlY29yZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsb25lU3RhdGUoXG4gICAgc3RhdGU6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+XG4gICk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZWZmZWN0aXZlVmFsdWVzOiBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc3RhdGUuZWZmZWN0aXZlVmFsdWVzKSxcbiAgICAgIGlucHV0VmFsdWVzOiBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc3RhdGUuaW5wdXRWYWx1ZXMpLFxuICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzOiB7IC4uLnN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdFN0YXRlKCk6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZWZmZWN0aXZlVmFsdWVzOiB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpLFxuICAgICAgaW5wdXRWYWx1ZXM6IHRoaXMuY3JlYXRlRGVmYXVsdFNldHRpbmdzKCksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IGNhc3RUbzxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+KHt9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXQoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0dGluZ3NFZGl0b3IodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0W3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICA/IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV1cbiAgICAgICAgICA6IHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUHJvcGVydHlOYW1lKHByb3A6IHVua25vd24pOiBwcm9wIGlzIFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnR5TmFtZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHByb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByYXdSZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmF3UmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLm9uTG9hZFJlY29yZChyYXdSZWNvcmQpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdSZWNvcmQpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIGdldExpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKGBVbmtub3duIHByb3BlcnR5OiAke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIGdldExpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKFxuICAgICAgICAgICdQb3NzaWJsZSBpbnZhbGlkIHZhbHVlIHR5cGUuIEl0IG1pZ2h0IGxlYWQgdG8gYW4gdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgcGx1Z2luLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmNlIGl0IGlzIGEgZmFsc2UtbmVnYXRpdmUgd2FybmluZywgYXMgd2UgYXJlIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgb2YgdGhlIHZhbHVlIGluIHJ1bnRpbWUuJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHZhbHVlIGFzIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVUb0ZpbGVJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGFGbihhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJvcGVydHlJbXBsKFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sXG4gICAgdmFsdWU6IFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZT86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlID8/ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2UgPyBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldHRpbmdzVG9SYXdSZWNvcmQoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxHZW5lcmljT2JqZWN0PiB7XG4gICAgY29uc3QgcmF3UmVjb3JkOiBHZW5lcmljT2JqZWN0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgIHJhd1JlY29yZFtwcm9wZXJ0eU5hbWVdID0gc2V0dGluZ3NbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9uU2F2aW5nUmVjb3JkKHJhd1JlY29yZCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm1lcigpLnRyYW5zZm9ybU9iamVjdFJlY3Vyc2l2ZWx5KHJhd1JlY29yZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5vLW9wIHNldHRpbmdzIGNvbXBvbmVudCBmb3IgcGx1Z2lucyB3aXRob3V0IHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgRW1wdHlQbHVnaW5TZXR0aW5nc0NvbXBvbmVudCBleHRlbmRzIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZW1wdHkgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuIFVzZXMgbm8tb3AgbG9hZC9zYXZlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zPzogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRQYXJhbXMpIHtcbiAgICBzdXBlcihcbiAgICAgIHBhcmFtcyA/PyB7XG4gICAgICAgIGxvYWREYXRhOiBhc3luYyAoKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgICAgICAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0sXG4gICAgICAgIHNhdmVEYXRhOiBub29wQXN5bmNcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZW1wdHkgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZURlZmF1bHRTZXR0aW5ncygpOiBvYmplY3Qge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLDBCQUEwQjtBQUVuQyxNQUFNLHFCQUFxQixJQUFJLGlCQUFpQjtBQUFBLEVBQzlDLElBQUksK0JBQStCO0FBQUEsRUFDbkMsSUFBSSxnQkFBZ0I7QUFBQSxFQUNwQixJQUFJLG9CQUFvQjtBQUFBLEVBQ3hCLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUkscUJBQXFCO0FB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QUssS0FBSyxPQUFPLFFBQVEsU0FBUyxHQUFHO0FBQzdELFVBQUksQ0FBQyxLQUFLLG9CQUFvQixZQUFZLEdBQUc7QUFDM0MsdUJBQWUsaURBQWlELEVBQUUscUJBQXFCLFlBQVksRUFBRTtBQUNyRztBQUFBLE1BQ0Y7QUFFQSxVQUFJLE9BQU8sVUFBVSxPQUFPLFNBQVMsWUFBWSxHQUFHO0FBQ2xELHVCQUFlLGlEQUFpRDtBQUFBLFVBQzlEO0FBQUEsVUFDQTtBQUFBLFlBQ0UsY0FBYyxTQUFTLFlBQVk7QUFBQSxZQUNuQztBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFlBQVksSUFBSTtBQUFBLElBQzNCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLE1BQWMsaUJBQWdDO0FBQzVDLFVBQU0sS0FBSyxXQUFXLE1BQU0sS0FBSyxvQkFBb0IsS0FBSyxhQUFhLFdBQVcsQ0FBQztBQUFBLEVBQ3JGO0FBQUEsRUFFUSxnQkFDTixjQUNBLE9BQ0EsbUJBQ007QUFDTixVQUFNLFdBQVcsS0FBSztBQUN0QixTQUFLLGFBQWEsWUFBWSxZQUFZLElBQUk7QUFDOUMsU0FBSyxhQUFhLG1CQUFtQixZQUFZLElBQUkscUJBQXFCO0FBQzFFLFNBQUssYUFBYSxnQkFBZ0IsWUFBWSxJQUFJLG9CQUFvQixTQUFTLFlBQVksSUFBSTtBQUFBLEVBQ2pHO0FBQUEsRUFFQSxNQUFjLG9CQUFvQixVQUFrRDtBQUNsRixVQUFNLFlBQTJCLENBQUM7QUFFbEMsZUFBVyxnQkFBZ0IsS0FBSyxlQUFlO0FBQzdDLGdCQUFVLFlBQVksSUFBSSxTQUFTLFlBQVk7QUFBQSxJQUNqRDtBQUVBLFVBQU0sS0FBSyxlQUFlLFNBQVM7QUFFbkMsV0FBTyxLQUFLLGVBQWUsRUFBRSwyQkFBMkIsU0FBUztBQUFBLEVBQ25FO0FBQ0Y7QUFLTyxNQUFNLHFDQUFxQyw0QkFBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNN0UsWUFBWSxRQUF3QztBQUN6RDtBQUFBLE1BQ0UsVUFBVTtBQUFBLFFBQ1IsVUFBVSxZQUE2QjtBQUNyQyxnQkFBTSxVQUFVO0FBQ2hCLGlCQUFPLENBQUM7QUFBQSxRQUNWO0FBQUEsUUFDQSxVQUFVO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT21CLHdCQUFnQztBQUNqRCxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
461
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIHBsdWdpbiBzZXR0aW5nczogZGF0YSwgcGVyc2lzdGVuY2UsIHZhbGlkYXRpb24sIGFuZCBldmVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgc2luZ2xlIHB1YmxpYy1mYWNpbmcgc2V0dGluZ3MgQVBJIGZvciBwbHVnaW4gYXV0aG9ycy5cbiAqIEFsbCBzZXR0aW5ncyBsb2dpYyAobG9hZCwgc2F2ZSwgdmFsaWRhdGUsIHRyYW5zZm9ybSwgY2xvbmUpIGlzIGhhbmRsZWQgZGlyZWN0bHlcbiAqIGJ5IHRoaXMgY29tcG9uZW50IFx1MjAxNCBubyBzZXBhcmF0ZSBtYW5hZ2VyIGNsYXNzIGlzIG5lZWRlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFzeW5jRXZlbnRSZWYgfSBmcm9tICcuLi8uLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy90cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4uLy4uLy4uL3R5cGUudHMnO1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJy4uLy4uLy4uL2FzeW5jLWV2ZW50cy50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGRlZXBFcXVhbCxcbiAgZ2V0QWxsS2V5c1xufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtdXRpbHMudHMnO1xuaW1wb3J0IHsgRGF0ZVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL2RhdGUtdHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgRHVyYXRpb25UcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy9kdXJhdGlvbi10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBHcm91cFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL2dyb3VwLXRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IE1hcFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL21hcC10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBTZXRUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy9zZXQtdHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgU2tpcFByaXZhdGVQcm9wZXJ0eVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3JtZXJzL3NraXAtcHJpdmF0ZS1wcm9wZXJ0eS10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBUd29XYXlNYXBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uLy4uL3RyYW5zZm9ybWVycy90d28td2F5LW1hcC10cmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBBc3luY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FzeW5jLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyByZWdpc3RlckFzeW5jRXZlbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FzeW5jLWV2ZW50cy1jb21wb25lbnQudHMnO1xuXG5jb25zdCBkZWZhdWx0VHJhbnNmb3JtZXIgPSBuZXcgR3JvdXBUcmFuc2Zvcm1lcihbXG4gIG5ldyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIoKSxcbiAgbmV3IERhdGVUcmFuc2Zvcm1lcigpLFxuICBuZXcgRHVyYXRpb25UcmFuc2Zvcm1lcigpLFxuICBuZXcgTWFwVHJhbnNmb3JtZXIoKSxcbiAgbmV3IFNldFRyYW5zZm9ybWVyKCksXG4gIG5ldyBUd29XYXlNYXBUcmFuc2Zvcm1lcigpXG5dKTtcblxuLyoqXG4gKiBQYXJhbXMgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRQYXJhbXMge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBsb2FkIGRhdGEgZnJvbSB0aGUgcGx1Z2luJ3MgZGF0YSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBsb2FkRGF0YTogKCkgPT4gUHJvbWlzZTx1bmtub3duPjtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBzYXZlIGRhdGEgdG8gdGhlIHBsdWdpbidzIGRhdGEgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBzYXZlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2F2ZURhdGE6IChkYXRhOiB1bmtub3duKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgc25hcHNob3Qgb2YgcGx1Z2luIHNldHRpbmdzIHN0YXRlLCBpbmNsdWRpbmcgcmF3IGlucHV0IHZhbHVlcywgZWZmZWN0aXZlICh2YWxpZGF0ZWQpIHZhbHVlcyxcbiAqIGFuZCBwZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgZWZmZWN0aXZlIHNldHRpbmdzIHZhbHVlcyB1c2VkIGJ5IHRoZSBwbHVnaW4uIEludmFsaWQgcHJvcGVydGllcyBhcmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cy5cbiAgICovXG4gIGVmZmVjdGl2ZVZhbHVlczogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSByYXcgaW5wdXQgdmFsdWVzIGFzIGVudGVyZWQgYnkgdGhlIHVzZXIuIE1heSBjb250YWluIGludmFsaWQgdmFsdWVzLlxuICAgKi9cbiAgaW5wdXRWYWx1ZXM6IFBsdWdpblNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBQZXItcHJvcGVydHkgdmFsaWRhdGlvbiBtZXNzYWdlcy4gRW1wdHkgc3RyaW5nIG1lYW5zIHZhbGlkLlxuICAgKi9cbiAgdmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3N9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiA9IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbi8qKlxuICogUmVhZG9ubHkgdmVyc2lvbiBvZiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NTdGF0ZX0gZm9yIHVzZSBpbiBldmVudCBjYWxsYmFja3MgYW5kIHB1YmxpYyBnZXR0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+ID0gUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+PjtcblxuLyoqXG4gKiBBIHZhbGlkYXRvciBmdW5jdGlvbiBmb3IgYSBzZXR0aW5ncyBwcm9wZXJ0eS5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+ID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+ID0gKFxuICB2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSxcbiAgc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzXG4pID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG5cbnR5cGUgUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPjtcblxudHlwZSBQcm9wZXJ0eVZhbHVlczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPl07XG5cbnR5cGUgVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gPSBQYXJ0aWFsPFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPj47XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudHMuXG4gKlxuICogTWFuYWdlcyBzZXR0aW5ncyBkYXRhLCBwZXJzaXN0ZW5jZSwgdmFsaWRhdGlvbiwgYW5kIGV2ZW50cy5cbiAqIFBsdWdpbiBhdXRob3JzIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBpbXBsZW1lbnQge0BsaW5rIGNyZWF0ZURlZmF1bHRTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBBc3luY0NvbXBvbmVudEJhc2Uge1xuICAvKipcbiAgICogQ29tcG9uZW50IGtleSBmb3Ige0BsaW5rIHJlZ2lzdGVyQ29tcG9uZW50fSByZXBsYWNlbWVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09NUE9ORU5UX0tFWSA9IFN5bWJvbChQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UubmFtZSk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlYWRvbmx5IGRlZmF1bHQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNldHRpbmdzIChhcyBhIHJlYWRvbmx5IG9iamVjdCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFNldHRpbmdzOiBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWFkb25seSBlZmZlY3RpdmUgc2V0dGluZ3MgKHZhbGlkYXRlZCwgd2l0aCBkZWZhdWx0cyBzdWJzdGl0dXRlZCBmb3IgaW52YWxpZCB2YWx1ZXMpLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVhZG9ubHkgZWZmZWN0aXZlIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5ncygpOiBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5nc1N0YXRlLmVmZmVjdGl2ZVZhbHVlcyBhcyBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgc3RhdGUgc25hcHNob3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNldHRpbmdzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5nc1N0YXRlKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSBhcyBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhc3luY0V2ZW50cyA9IG5ldyBBc3luY0V2ZW50cygpO1xuICBwcml2YXRlIGN1cnJlbnRTdGF0ZTogUGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz47XG4gIHByaXZhdGUgbGFzdFNhdmVkU3RhdGU6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIHJlYWRvbmx5IGxlZ2FjeVNldHRpbmdzQ29udmVydGVyczogKChyZWNvcmQ6IEdlbmVyaWNPYmplY3QpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkRGF0YUZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+O1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5TmFtZXM6IFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+W107XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZURhdGFGbjogKGRhdGE6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9ycyA9IG5ldyBNYXA8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gc2V0dGluZ3MgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtcyBmb3IgbG9hZGluZy9zYXZpbmcgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50UGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvYWREYXRhRm4gPSBwYXJhbXMubG9hZERhdGEuYmluZChwYXJhbXMpO1xuICAgIHRoaXMuc2F2ZURhdGFGbiA9IHBhcmFtcy5zYXZlRGF0YS5iaW5kKHBhcmFtcyk7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMucHJvcGVydHlOYW1lcyA9IGdldEFsbEtleXModGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5yZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgYW5kIHNhdmVzIHRoZW0uXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc0VkaXRvciAtIFRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVkaXRBbmRTYXZlKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LCBjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZWRpdChzZXR0aW5nc0VkaXRvcik7XG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlKGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIHNldHRpbmdzIGFyZSBzYWZlLlxuICAgKlxuICAgKiBJdCBydW5zIHZhbGlkYXRpb24gZm9yIGVhY2ggcHJvcGVydHkgYW5kIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlIHZhbGlkYXRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2FmZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnN1cmVTYWZlKHNldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlKHNldHRpbmdzKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gZGVmYXVsdHNbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNhZmUgY29weSBvZiB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc2FmZSBjb3B5IG9mIHRoZSBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTYWZlQ29weShzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpOiBQcm9taXNlPFBsdWdpblNldHRpbmdzPiB7XG4gICAgY29uc3Qgc2FmZVNldHRpbmdzID0gYXdhaXQgdGhpcy5jbG9uZVNldHRpbmdzKHNldHRpbmdzKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVNhZmUoc2FmZVNldHRpbmdzKTtcbiAgICByZXR1cm4gc2FmZVNldHRpbmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgZnJvbSB0aGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGlzSW5pdGlhbExvYWQgLSBXaGV0aGVyIHRoZSBzZXR0aW5ncyBhcmUgYmVpbmcgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRGcm9tRmlsZShpc0luaXRpYWxMb2FkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERhdGFGbigpO1xuICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudFN0YXRlID0gdGhpcy5jcmVhdGVEZWZhdWx0U3RhdGUoKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgc2V0dGluZ3MgZnJvbSBkYXRhLmpzb24uIEV4cGVjdGVkIE9iamVjdCwgZ290OiAke3R5cGVvZiBkYXRhfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGRhdGEgYXMgR2VuZXJpY09iamVjdDtcbiAgICAgIGNvbnN0IHBhcnNlZFNldHRpbmdzID0gYXdhaXQgdGhpcy5yYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZCk7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZShwYXJzZWRTZXR0aW5ncyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHRoaXMucHJvcGVydHlOYW1lcykge1xuICAgICAgICB0aGlzLnNldFByb3BlcnR5SW1wbChwcm9wZXJ0eU5hbWUsIHBhcnNlZFNldHRpbmdzW3Byb3BlcnR5TmFtZV0sIHZhbGlkYXRpb25SZXN1bHRbcHJvcGVydHlOYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFNhdmVkU3RhdGUgPSBhd2FpdCB0aGlzLmNsb25lU3RhdGUodGhpcy5jdXJyZW50U3RhdGUpO1xuXG4gICAgICBjb25zdCBuZXdSZWNvcmQgPSBhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuXG4gICAgICBpZiAoIWRlZXBFcXVhbChuZXdSZWNvcmQsIGRhdGEpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5hc3luY0V2ZW50cy50cmlnZ2VyQXN5bmMoJ2xvYWRTZXR0aW5ncycsIHRoaXMuY3VycmVudFN0YXRlLCBpc0luaXRpYWxMb2FkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgYGxvYWRTZXR0aW5nc2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQWx3YXlzIGBsb2FkU2V0dGluZ3NgLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb24oXG4gICAgbmFtZTogJ2xvYWRTZXR0aW5ncycsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgaXNJbml0aWFsTG9hZDogYm9vbGVhblxuICAgICkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmO1xuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgYHNhdmVTZXR0aW5nc2AgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gQWx3YXlzIGBzYXZlU2V0dGluZ3NgLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgb24oXG4gICAgbmFtZTogJ3NhdmVTZXR0aW5ncycsXG4gICAgY2FsbGJhY2s6IChcbiAgICAgIG5ld1N0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgICBjb250ZXh0OiB1bmtub3duXG4gICAgKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWY7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGFuIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0gdGhpc0FyZyAtIFRoZSBgdGhpc2AgY29udGV4dC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHVibGljIG9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNFdmVudHMub24obmFtZSwgY2FsbGJhY2ssIHRoaXNBcmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHJlbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRGcm9tRmlsZShmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgc2V0dGluZ3MgZnJvbSBmaWxlIGFuZCByZWdpc3RlcnMgZXZlbnQgaGFuZGxlcnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCB0aGlzLm9uKCdsb2FkU2V0dGluZ3MnLCB0aGlzLm9uTG9hZFNldHRpbmdzLmJpbmQodGhpcykpKTtcbiAgICByZWdpc3RlckFzeW5jRXZlbnQodGhpcywgdGhpcy5vbignc2F2ZVNldHRpbmdzJywgdGhpcy5vblNhdmVTZXR0aW5ncy5iaW5kKHRoaXMpKSk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnJvbUZpbGUodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGVnYWN5IHNldHRpbmdzIGNvbnZlcnRlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBMZWdhY3lTZXR0aW5ncyAtIFRoZSBsZWdhY3kgc2V0dGluZ3MgY2xhc3MuXG4gICAqIEBwYXJhbSBsZWdhY3lTZXR0aW5nc0NsYXNzIC0gVGhlIGxlZ2FjeSBzZXR0aW5ncyBjbGFzcy5cbiAgICogQHBhcmFtIGNvbnZlcnRlciAtIFRoZSBjb252ZXJ0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJMZWdhY3lTZXR0aW5nc0NvbnZlcnRlcjxMZWdhY3lTZXR0aW5ncyBleHRlbmRzIG9iamVjdD4oXG4gICAgbGVnYWN5U2V0dGluZ3NDbGFzczogbmV3ICgpID0+IExlZ2FjeVNldHRpbmdzLFxuICAgIGNvbnZlcnRlcjogKGxlZ2FjeVNldHRpbmdzOiBQYXJ0aWFsPExlZ2FjeVNldHRpbmdzPiAmIFBhcnRpYWw8UGx1Z2luU2V0dGluZ3M+KSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIHRoaXMubGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXJzLnB1c2gobGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXIpO1xuXG4gICAgZnVuY3Rpb24gbGVnYWN5U2V0dGluZ3NDb252ZXJ0ZXIocmVjb3JkOiBHZW5lcmljT2JqZWN0KTogdm9pZCB7XG4gICAgICBjb25zdCBsZWdhY3lTZXR0aW5nc0tleXMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMobmV3IGxlZ2FjeVNldHRpbmdzQ2xhc3MoKSkpO1xuICAgICAgY29uc3QgcGx1Z2luU2V0dGluZ0tleXMgPSBuZXcgU2V0PHN0cmluZz4odGhhdC5wcm9wZXJ0eU5hbWVzKTtcbiAgICAgIGNvbnN0IGxlZ2FjeVNldHRpbmdzID0gcmVjb3JkIGFzIFBhcnRpYWw8TGVnYWN5U2V0dGluZ3M+ICYgUGFydGlhbDxQbHVnaW5TZXR0aW5ncz47XG4gICAgICBjb252ZXJ0ZXIobGVnYWN5U2V0dGluZ3MpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobGVnYWN5U2V0dGluZ3MpKSB7XG4gICAgICAgIGlmIChwbHVnaW5TZXR0aW5nS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsZWdhY3lTZXR0aW5nc0tleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YWxpZGF0b3IgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgLSBUaGUgdmFsaWRhdG9yLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyVmFsaWRhdG9yPFByb3BlcnR5TmFtZSBleHRlbmRzIFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+PihcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZSxcbiAgICB2YWxpZGF0b3I6IFNldHRpbmdzVmFsaWRhdG9yPFBsdWdpblNldHRpbmdzLCBQcm9wZXJ0eU5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdG9ycy5zZXQocHJvcGVydHlOYW1lLCB2YWxpZGF0b3IgYXMgU2V0dGluZ3NWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3M+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldmFsaWRhdGUoKTogUHJvbWlzZTxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+IHtcbiAgICBhd2FpdCB0aGlzLmVkaXQobm9vcCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgc2F2ZSB0byBmaWxlIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVRvRmlsZShjb250ZXh0PzogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChkZWVwRXF1YWwodGhpcy5sYXN0U2F2ZWRTdGF0ZS5pbnB1dFZhbHVlcywgdGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgIGF3YWl0IHRoaXMuYXN5bmNFdmVudHMudHJpZ2dlckFzeW5jKCdzYXZlU2V0dGluZ3MnLCB0aGlzLmN1cnJlbnRTdGF0ZSwgdGhpcy5sYXN0U2F2ZWRTdGF0ZSwgY29udGV4dCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRTdGF0ZSA9IGF3YWl0IHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBQcm9wZXJ0eU5hbWVzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVkaXQoKHNldHRpbmdzKSA9PiB7XG4gICAgICBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWRhdGlvbiByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PFBsdWdpblNldHRpbmdzPj4ge1xuICAgIGNvbnN0IHJlc3VsdDogVmFsaWRhdGlvblJlc3VsdDxQbHVnaW5TZXR0aW5ncz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcl0gb2YgdGhpcy52YWxpZGF0b3JzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSBhd2FpdCB2YWxpZGF0b3Ioc2V0dGluZ3NbcHJvcGVydHlOYW1lXSwgc2V0dGluZ3MpO1xuICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHJlc3VsdFtwcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNldHRpbmdzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZURlZmF1bHRTZXR0aW5ncygpOiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogR2V0cyB0aGUgdHJhbnNmb3JtZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRUcmFuc2Zvcm1lcigpOiBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIGRlZmF1bHRUcmFuc2Zvcm1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIHJlY29yZCBpcyBsb2FkZWQgZnJvbSBkaXNrLlxuICAgKlxuICAgKiBAcGFyYW0gcmVjb3JkIC0gVGhlIHJlY29yZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvYWRSZWNvcmQocmVjb3JkOiBHZW5lcmljT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgdGhpcy5sZWdhY3lTZXR0aW5nc0NvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnZlcnRlcihyZWNvcmQpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBzZXR0aW5ncyBhcmUgbG9hZGVkIG9yIHJlbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2xvYWRlZFN0YXRlIC0gVGhlIGxvYWRlZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICogQHBhcmFtIF9pc0luaXRpYWxMb2FkIC0gV2hldGhlciB0aGlzIGlzIHRoZSBpbml0aWFsIGxvYWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2FkU2V0dGluZ3MoXG4gICAgX2xvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LFxuICAgIF9pc0luaXRpYWxMb2FkOiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICpcbiAgICogQHBhcmFtIF9uZXdTdGF0ZSAtIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBfb2xkU3RhdGUgLSBUaGUgb2xkIHNldHRpbmdzIHN0YXRlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgc2F2ZSBjb250ZXh0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU2F2ZVNldHRpbmdzKFxuICAgIF9uZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPixcbiAgICBfb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgX2NvbnRleHQ6IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyByZWNvcmQgaXMgYWJvdXQgdG8gYmUgc2F2ZWQgdG8gZGlzay5cbiAgICpcbiAgICogQHBhcmFtIF9yZWNvcmQgLSBUaGUgcmVjb3JkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU2F2aW5nUmVjb3JkKF9yZWNvcmQ6IEdlbmVyaWNPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGxlZ2FjeSBzZXR0aW5ncyBjb252ZXJ0ZXJzLlxuICAgKiBPdmVycmlkZSB0byByZWdpc3RlciBsZWdhY3kgc2V0dGluZ3MgY29udmVydGVycy5cbiAgICovXG4gIHByb3RlY3RlZCByZWdpc3RlckxlZ2FjeVNldHRpbmdzQ29udmVydGVycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSB2YWxpZGF0b3JzLlxuICAgKiBPdmVycmlkZSB0byByZWdpc3RlciB2YWxpZGF0b3JzIGZvciBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsb25lU2V0dGluZ3Moc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuc2V0dGluZ3NUb1Jhd1JlY29yZChzZXR0aW5ncyk7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHJlY29yZCk7XG4gICAgY29uc3QgY2xvbmVSZWNvcmQgPSBKU09OLnBhcnNlKGpzb24pIGFzIEdlbmVyaWNPYmplY3Q7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmF3UmVjb3JkVG9TZXR0aW5ncyhjbG9uZVJlY29yZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsb25lU3RhdGUoXG4gICAgc3RhdGU6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+XG4gICk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZWZmZWN0aXZlVmFsdWVzOiBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc3RhdGUuZWZmZWN0aXZlVmFsdWVzKSxcbiAgICAgIGlucHV0VmFsdWVzOiBhd2FpdCB0aGlzLmNsb25lU2V0dGluZ3Moc3RhdGUuaW5wdXRWYWx1ZXMpLFxuICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzOiB7IC4uLnN0YXRlLnZhbGlkYXRpb25NZXNzYWdlcyB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdFN0YXRlKCk6IFBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZWZmZWN0aXZlVmFsdWVzOiB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpLFxuICAgICAgaW5wdXRWYWx1ZXM6IHRoaXMuY3JlYXRlRGVmYXVsdFNldHRpbmdzKCksXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IGNhc3RUbzxSZWNvcmQ8UHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4+KHt9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVkaXQoc2V0dGluZ3NFZGl0b3I6IChzZXR0aW5nczogUGx1Z2luU2V0dGluZ3MpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0dGluZ3NFZGl0b3IodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZS5pbnB1dFZhbHVlcyk7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0W3Byb3BlcnR5TmFtZV0gPz8gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2VcbiAgICAgICAgICA/IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV1cbiAgICAgICAgICA6IHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUHJvcGVydHlOYW1lKHByb3A6IHVua25vd24pOiBwcm9wIGlzIFByb3BlcnR5TmFtZXM8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnR5TmFtZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHByb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByYXdSZWNvcmRUb1NldHRpbmdzKHJhd1JlY29yZDogR2VuZXJpY09iamVjdCk6IFByb21pc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByYXdSZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmF3UmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLm9uTG9hZFJlY29yZChyYXdSZWNvcmQpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdSZWNvcmQpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIGdldExpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKGBVbmtub3duIHByb3BlcnR5OiAke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIGdldExpYkRlYnVnZ2VyKCdQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U6cmF3UmVjb3JkVG9TZXR0aW5ncycpKFxuICAgICAgICAgICdQb3NzaWJsZSBpbnZhbGlkIHZhbHVlIHR5cGUuIEl0IG1pZ2h0IGxlYWQgdG8gYW4gdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgcGx1Z2luLiBUaGVyZSBpcyBhbHNvIGEgY2hhbmNlIGl0IGlzIGEgZmFsc2UtbmVnYXRpdmUgd2FybmluZywgYXMgd2UgYXJlIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgb2YgdGhlIHZhbHVlIGluIHJ1bnRpbWUuJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRzW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHZhbHVlIGFzIFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVUb0ZpbGVJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGFGbihhd2FpdCB0aGlzLnNldHRpbmdzVG9SYXdSZWNvcmQodGhpcy5jdXJyZW50U3RhdGUuaW5wdXRWYWx1ZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJvcGVydHlJbXBsKFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lczxQbHVnaW5TZXR0aW5ncz4sXG4gICAgdmFsdWU6IFByb3BlcnR5VmFsdWVzPFBsdWdpblNldHRpbmdzPixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZT86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuZGVmYXVsdFNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmlucHV0VmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXNbcHJvcGVydHlOYW1lXSA9IHZhbGlkYXRpb25NZXNzYWdlID8/ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YXRlLmVmZmVjdGl2ZVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gdmFsaWRhdGlvbk1lc3NhZ2UgPyBkZWZhdWx0c1twcm9wZXJ0eU5hbWVdIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldHRpbmdzVG9SYXdSZWNvcmQoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKTogUHJvbWlzZTxHZW5lcmljT2JqZWN0PiB7XG4gICAgY29uc3QgcmF3UmVjb3JkOiBHZW5lcmljT2JqZWN0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiB0aGlzLnByb3BlcnR5TmFtZXMpIHtcbiAgICAgIHJhd1JlY29yZFtwcm9wZXJ0eU5hbWVdID0gc2V0dGluZ3NbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9uU2F2aW5nUmVjb3JkKHJhd1JlY29yZCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm1lcigpLnRyYW5zZm9ybU9iamVjdFJlY3Vyc2l2ZWx5KHJhd1JlY29yZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5vLW9wIHNldHRpbmdzIGNvbXBvbmVudCBmb3IgcGx1Z2lucyB3aXRob3V0IHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgRW1wdHlQbHVnaW5TZXR0aW5nc0NvbXBvbmVudCBleHRlbmRzIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZW1wdHkgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuIFVzZXMgbm8tb3AgbG9hZC9zYXZlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zPzogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRQYXJhbXMpIHtcbiAgICBzdXBlcihcbiAgICAgIHBhcmFtcyA/PyB7XG4gICAgICAgIGxvYWREYXRhOiBhc3luYyAoKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgICAgICAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0sXG4gICAgICAgIHNhdmVEYXRhOiBub29wQXN5bmNcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZW1wdHkgZGVmYXVsdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZURlZmF1bHRTZXR0aW5ncygpOiBvYmplY3Qge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkEsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLDBCQUEwQjtBQUVuQyxNQUFNLHFCQUFxQixJQUFJLGlCQUFpQjtBQUFBLEVBQzlDLElBQUksK0JBQStCO0FBQUEsRUFDbkMsSUFBSSxnQkFBZ0I7QUFBQSxFQUNwQixJQUFJLG9CQUFvQjtBQUFBLEVBQ3hCLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUksZUFBZTtBQUFBLEVBQ25CLElBQUkscUJBQXFCO0FBQzNCLENBQUM7QUFtRk0sTUFBZSxvQ0FBbUUsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJMUcsT0FBdUIsZ0JBQWdCLE9BQU8sNEJBQTRCLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPOUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFP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
@@ -22,6 +22,8 @@ if you want to view the source, please visit the github repository of this plugi
22
22
  })();
23
23
 
24
24
  import { Component } from "obsidian";
25
+ import { CommandHandlerComponent } from "../../command-handlers/command-handler-component.mjs";
26
+ import { OpenSettingsCommandHandler } from "../../command-handlers/open-settings-command-handler.mjs";
25
27
  class PluginSettingsTabComponent extends Component {
26
28
  /**
27
29
  * Creates a new plugin settings tab component.
@@ -41,18 +43,10 @@ class PluginSettingsTabComponent extends Component {
41
43
  */
42
44
  onload() {
43
45
  this.plugin.addSettingTab(this.settingsTab);
44
- this.plugin.addCommand({
45
- callback: () => {
46
- this.plugin.app.setting.openTabById(this.plugin.manifest.id);
47
- this.plugin.app.setting.open();
48
- },
49
- icon: "settings",
50
- id: "open-settings",
51
- name: "Open settings"
52
- });
46
+ this.addChild(new CommandHandlerComponent(this.plugin, new OpenSettingsCommandHandler(this.plugin.manifest.name, this.settingsTab)));
53
47
  }
54
48
  }
55
49
  export {
56
50
  PluginSettingsTabComponent
57
51
  };
58
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgcmVnaXN0ZXJzIGEgcGx1Z2luIHNldHRpbmdzIHRhYiB3aXRoIE9ic2lkaWFuLlxuICogQWxzbyByZWdpc3RlcnMgYW4gXCJPcGVuIFNldHRpbmdzXCIgY29tbWFuZCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlIH0gZnJvbSAnLi4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyc7XG5cbi8qKlxuICogV3JhcHMgYSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlfSBhbmQgcmVnaXN0ZXJzIGl0IHdpdGggT2JzaWRpYW4gb24gbG9hZC5cbiAqIEFsc28gcmVnaXN0ZXJzIGFuIFwiT3BlbiBTZXR0aW5nc1wiIGNvbW1hbmQgdG8gb3BlbiB0aGUgc2V0dGluZ3MgdGFiIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblNldHRpbmdzVGFiQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYiBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgT2JzaWRpYW4gcGx1Z2luIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gc2V0dGluZ3NUYWIgLSBUaGUgc2V0dGluZ3MgdGFiIHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW4sXG4gICAgcHVibGljIHJlYWRvbmx5IHNldHRpbmdzVGFiOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8b2JqZWN0PlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc2V0dGluZ3MgdGFiIGFuZCBhbiBcIk9wZW4gU2V0dGluZ3NcIiBjb21tYW5kIHdpdGggT2JzaWRpYW4uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luLmFkZFNldHRpbmdUYWIodGhpcy5zZXR0aW5nc1RhYik7XG4gICAgdGhpcy5wbHVnaW4uYWRkQ29tbWFuZCh7XG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLnBsdWdpbi5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZCh0aGlzLnBsdWdpbi5tYW5pZmVzdC5pZCk7XG4gICAgICAgIHRoaXMucGx1Z2luLmFwcC5zZXR0aW5nLm9wZW4oKTtcbiAgICAgIH0sXG4gICAgICBpY29uOiAnc2V0dGluZ3MnLFxuICAgICAgaWQ6ICdvcGVuLXNldHRpbmdzJyxcbiAgICAgIG5hbWU6ICdPcGVuIHNldHRpbmdzJ1xuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsaUJBQWlCO0FBUW5CLE1BQU0sbUNBQW1DLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9qRCxZQUNZLFFBQ0QsYUFDaEI7QUFDQSxVQUFNO0FBSFc7QUFDRDtBQUFBLEVBR2xCO0FBQUEsRUFKbUI7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRRixTQUFlO0FBQzdCLFNBQUssT0FBTyxjQUFjLEtBQUssV0FBVztBQUMxQyxTQUFLLE9BQU8sV0FBVztBQUFBLE1BQ3JCLFVBQVUsTUFBTTtBQUNkLGFBQUssT0FBTyxJQUFJLFFBQVEsWUFBWSxLQUFLLE9BQU8sU0FBUyxFQUFFO0FBQzNELGFBQUssT0FBTyxJQUFJLFFBQVEsS0FBSztBQUFBLE1BQy9CO0FBQUEsTUFDQSxNQUFNO0FBQUEsTUFDTixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsSUFDUixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgcmVnaXN0ZXJzIGEgcGx1Z2luIHNldHRpbmdzIHRhYiB3aXRoIE9ic2lkaWFuLlxuICogQWxzbyByZWdpc3RlcnMgYW4gXCJPcGVuIFNldHRpbmdzXCIgY29tbWFuZCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlIH0gZnJvbSAnLi4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyc7XG5cbmltcG9ydCB7IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbWFuZC1oYW5kbGVycy9jb21tYW5kLWhhbmRsZXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE9wZW5TZXR0aW5nc0NvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vY29tbWFuZC1oYW5kbGVycy9vcGVuLXNldHRpbmdzLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogV3JhcHMgYSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlfSBhbmQgcmVnaXN0ZXJzIGl0IHdpdGggT2JzaWRpYW4gb24gbG9hZC5cbiAqIEFsc28gcmVnaXN0ZXJzIGFuIFwiT3BlbiBTZXR0aW5nc1wiIGNvbW1hbmQgdG8gb3BlbiB0aGUgc2V0dGluZ3MgdGFiIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblNldHRpbmdzVGFiQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYiBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgT2JzaWRpYW4gcGx1Z2luIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gc2V0dGluZ3NUYWIgLSBUaGUgc2V0dGluZ3MgdGFiIHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW4sXG4gICAgcHVibGljIHJlYWRvbmx5IHNldHRpbmdzVGFiOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8b2JqZWN0PlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc2V0dGluZ3MgdGFiIGFuZCBhbiBcIk9wZW4gU2V0dGluZ3NcIiBjb21tYW5kIHdpdGggT2JzaWRpYW4uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luLmFkZFNldHRpbmdUYWIodGhpcy5zZXR0aW5nc1RhYik7XG4gICAgdGhpcy5hZGRDaGlsZChuZXcgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQodGhpcy5wbHVnaW4sIG5ldyBPcGVuU2V0dGluZ3NDb21tYW5kSGFuZGxlcih0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lLCB0aGlzLnNldHRpbmdzVGFiKSkpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsaUJBQWlCO0FBSTFCLFNBQVMsK0JBQStCO0FBQ3hDLFNBQVMsa0NBQWtDO0FBTXBDLE1BQU0sbUNBQW1DLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9qRCxZQUNZLFFBQ0QsYUFDaEI7QUFDQSxVQUFNO0FBSFc7QUFDRDtBQUFBLEVBR2xCO0FBQUEsRUFKbUI7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRRixTQUFlO0FBQzdCLFNBQUssT0FBTyxjQUFjLEtBQUssV0FBVztBQUMxQyxTQUFLLFNBQVMsSUFBSSx3QkFBd0IsS0FBSyxRQUFRLElBQUksMkJBQTJCLEtBQUssT0FBTyxTQUFTLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQztBQUFBLEVBQ3JJO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -24,10 +24,6 @@ export interface RegisterComponentParams<T extends Component = Component> {
24
24
  * The component to register.
25
25
  */
26
26
  readonly component: T;
27
- /**
28
- * Optional key. Defaults to the component's constructor name.
29
- */
30
- readonly key?: string;
31
27
  /**
32
28
  * Whether this component should be loaded before the plugin's `onloadImpl()` runs.
33
29
  * Components marked with this flag are force-loaded during `onload()`, ensuring they are
@@ -62,8 +58,8 @@ export declare abstract class PluginBase extends ObsidianPlugin {
62
58
  * The settings component. Manages plugin settings lifecycle.
63
59
  */
64
60
  protected readonly settingsComponent: PluginSettingsComponentBase<object>;
65
- private readonly componentsMap;
66
- private readonly preloadKeys;
61
+ private readonly preloadComponents;
62
+ private readonly singletonComponents;
67
63
  /**
68
64
  * Creates a new PluginBase.
69
65
  *
@@ -95,8 +91,11 @@ export declare abstract class PluginBase extends ObsidianPlugin {
95
91
  */
96
92
  protected onloadImpl(): Promise<void>;
97
93
  /**
98
- * Registers a component with the plugin. If a component with the same key is already registered,
99
- * the old component is removed and replaced.
94
+ * Registers a component with the plugin.
95
+ *
96
+ * If the component's class defines a static `COMPONENT_KEY` symbol, it is treated as a singleton —
97
+ * registering another component with the same key replaces the previous one.
98
+ * Components without a `COMPONENT_KEY` are multi-instance and simply added.
100
99
  *
101
100
  * @typeParam T - The component type.
102
101
  * @param params - The registration params.
@@ -32,7 +32,6 @@ import {
32
32
  } from "../../async.mjs";
33
33
  import { printError } from "../../error.mjs";
34
34
  import { noopAsync } from "../../function.mjs";
35
- import { assertNonNullable } from "../../type-guards.mjs";
36
35
  import { AbortSignalComponent } from "./components/abort-signal-component.mjs";
37
36
  import { AsyncErrorHandlerComponent } from "./components/async-error-handler-component.mjs";
38
37
  import { ConsoleDebugComponent } from "./components/console-debug-component.mjs";
@@ -62,8 +61,8 @@ class PluginBase extends ObsidianPlugin {
62
61
  * The settings component. Manages plugin settings lifecycle.
63
62
  */
64
63
  settingsComponent;
65
- componentsMap = /* @__PURE__ */ new Map();
66
- preloadKeys = /* @__PURE__ */ new Set();
64
+ preloadComponents = [];
65
+ singletonComponents = /* @__PURE__ */ new Map();
67
66
  /**
68
67
  * Creates a new PluginBase.
69
68
  *
@@ -98,9 +97,7 @@ class PluginBase extends ObsidianPlugin {
98
97
  */
99
98
  async onload() {
100
99
  await super.onload();
101
- for (const key of this.preloadKeys) {
102
- const component = this.componentsMap.get(key);
103
- assertNonNullable(component, `Component with key '${key}' not found`);
100
+ for (const component of this.preloadComponents) {
104
101
  await component.load();
105
102
  }
106
103
  await this.onloadImpl();
@@ -121,25 +118,32 @@ class PluginBase extends ObsidianPlugin {
121
118
  await noopAsync();
122
119
  }
123
120
  /**
124
- * Registers a component with the plugin. If a component with the same key is already registered,
125
- * the old component is removed and replaced.
121
+ * Registers a component with the plugin.
122
+ *
123
+ * If the component's class defines a static `COMPONENT_KEY` symbol, it is treated as a singleton —
124
+ * registering another component with the same key replaces the previous one.
125
+ * Components without a `COMPONENT_KEY` are multi-instance and simply added.
126
126
  *
127
127
  * @typeParam T - The component type.
128
128
  * @param params - The registration params.
129
129
  * @returns The registered component.
130
130
  */
131
131
  registerComponent(params) {
132
- const resolvedKey = params.key ?? params.component.constructor.name;
133
- const oldComponent = this.componentsMap.get(resolvedKey);
134
- if (oldComponent) {
135
- this.removeChild(oldComponent);
132
+ const singletonKey = params.component.constructor.COMPONENT_KEY;
133
+ if (singletonKey) {
134
+ const oldComponent = this.singletonComponents.get(singletonKey);
135
+ if (oldComponent) {
136
+ this.removeChild(oldComponent);
137
+ const preloadIndex = this.preloadComponents.indexOf(oldComponent);
138
+ if (preloadIndex !== -1) {
139
+ this.preloadComponents.splice(preloadIndex, 1);
140
+ }
141
+ }
142
+ this.singletonComponents.set(singletonKey, params.component);
136
143
  }
137
- this.componentsMap.set(resolvedKey, params.component);
138
144
  this.addChild(params.component);
139
145
  if (params.shouldPreload) {
140
- this.preloadKeys.add(resolvedKey);
141
- } else {
142
- this.preloadKeys.delete(resolvedKey);
146
+ this.preloadComponents.push(params.component);
143
147
  }
144
148
  return params.component;
145
149
  }
@@ -174,4 +178,4 @@ export {
174
178
  reloadPlugin,
175
179
  showErrorAndDisablePlugin
176
180
  };
177
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICogU3ViY2xhc3NlcyBhZGQgdGhlaXIgb3duIGNvbXBvbmVudHMgdmlhIHtAbGluayByZWdpc3RlckNvbXBvbmVudH0gaW4gdGhlaXIgY29uc3RydWN0b3IuXG4gKiBBbnkgdW5pdmVyc2FsIGNvbXBvbmVudCBjYW4gYmUgcmVwbGFjZWQgYnkgY2FsbGluZyB7QGxpbmsgcmVnaXN0ZXJDb21wb25lbnR9IHdpdGggYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgY2xhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgTm90aWNlLFxuICBQbHVnaW4gYXMgT2JzaWRpYW5QbHVnaW5cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseUFmdGVyRGVsYXlcbn0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQWJvcnRTaWduYWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29uc29sZS1kZWJ1Zy1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgSTE4bkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pMThuLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBMaWZlY3ljbGVFdmVudHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbGlmZWN5Y2xlLWV2ZW50cy1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IEVtcHR5UGx1Z2luU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luQmFzZS5yZWdpc3RlckNvbXBvbmVudH0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGNvbXBvbmVudCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyQ29tcG9uZW50UGFyYW1zPFQgZXh0ZW5kcyBDb21wb25lbnQgPSBDb21wb25lbnQ+IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnQ6IFQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGtleS4gRGVmYXVsdHMgdG8gdGhlIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjb21wb25lbnQgc2hvdWxkIGJlIGxvYWRlZCBiZWZvcmUgdGhlIHBsdWdpbidzIGBvbmxvYWRJbXBsKClgIHJ1bnMuXG4gICAqIENvbXBvbmVudHMgbWFya2VkIHdpdGggdGhpcyBmbGFnIGFyZSBmb3JjZS1sb2FkZWQgZHVyaW5nIGBvbmxvYWQoKWAsIGVuc3VyaW5nIHRoZXkgYXJlXG4gICAqIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBwbHVnaW4gbG9naWMgZXhlY3V0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQcmVsb2FkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVnaXN0ZXJDb21wb25lbnR9IGluIHRoZWlyIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luQmFzZSBleHRlbmRzIE9ic2lkaWFuUGx1Z2luIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgY29tcG9uZW50LiBBYm9ydGVkIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhYm9ydFNpZ25hbENvbXBvbmVudDogQWJvcnRTaWduYWxDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zb2xlIGRlYnVnIGNvbXBvbmVudC4gUHJvdmlkZXMgbmFtZXNwYWNlZCBkZWJ1ZyBsb2dnaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudDogQ29uc29sZURlYnVnQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIGV2ZW50cyBjb21wb25lbnQuIFByb3ZpZGVzIGxvYWQsIGxheW91dFJlYWR5LCBhbmQgdW5sb2FkIGV2ZW50cy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBsaWZlY3ljbGVFdmVudHNDb21wb25lbnQ6IExpZmVjeWNsZUV2ZW50c0NvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIG5vdGljZSBjb21wb25lbnQuIERpc3BsYXlzIG5vdGljZXMgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQuIE1hbmFnZXMgcGx1Z2luIHNldHRpbmdzIGxpZmVjeWNsZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIENvbXBvbmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFBsdWdpbkJhc2UuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gbWFuaWZlc3QgLSBUaGUgcGx1Z2luIG1hbmlmZXN0LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBtYW5pZmVzdDogUGx1Z2luTWFuaWZlc3QpIHtcbiAgICBzdXBlcihhcHAsIG1hbmlmZXN0KTtcblxuICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBQbHVnaW5Db250ZXh0Q29tcG9uZW50KGFwcCwgbWFuaWZlc3QuaWQpLCBzaG91bGRQcmVsb2FkOiB0cnVlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBJMThuQ29tcG9uZW50KCksIHNob3VsZFByZWxvYWQ6IHRydWUgfSk7XG4gICAgdGhpcy5ub3RpY2VDb21wb25lbnQgPSB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50KHsgY29tcG9uZW50OiBuZXcgUGx1Z2luTm90aWNlQ29tcG9uZW50KG1hbmlmZXN0Lm5hbWUpIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCh0aGlzLm5vdGljZUNvbXBvbmVudCkgfSk7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbXBvbmVudCA9IHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBBYm9ydFNpZ25hbENvbXBvbmVudChtYW5pZmVzdC5pZCkgfSk7XG4gICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50KHsgY29tcG9uZW50OiBuZXcgQ29uc29sZURlYnVnQ29tcG9uZW50KG1hbmlmZXN0LmlkKSB9KTtcbiAgICB0aGlzLmxpZmVjeWNsZUV2ZW50c0NvbXBvbmVudCA9IHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBMaWZlY3ljbGVFdmVudHNDb21wb25lbnQoYXBwKSB9KTtcbiAgICB0aGlzLnNldHRpbmdzQ29tcG9uZW50ID0gdGhpcy5yZWdpc3RlckNvbXBvbmVudCh7IGNvbXBvbmVudDogbmV3IEVtcHR5UGx1Z2luU2V0dGluZ3NDb21wb25lbnQoKSwgc2hvdWxkUHJlbG9hZDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyBpZiBuZWVkZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBhd2FpdCBzdXBlci5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKWAgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZT8uKCk7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5nc0NvbXBvbmVudC5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZC4gRm9yY2UtbG9hZHMgY29tcG9uZW50cyB0aGF0IG11c3QgYmUgcmVhZHlcbiAgICogYmVmb3JlIHBsdWdpbiBsb2dpYywgdGhlbiBjYWxscyBgb25sb2FkSW1wbCgpYC5cbiAgICpcbiAgICogVXN1YWxseSwgeW91IGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QuIE92ZXJyaWRlIHtAbGluayBvbmxvYWRJbXBsfSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vbmxvYWQoKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMucHJlbG9hZEtleXMpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c01hcC5nZXQoa2V5KTtcbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKGNvbXBvbmVudCwgYENvbXBvbmVudCB3aXRoIGtleSAnJHtrZXl9JyBub3QgZm91bmRgKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiAtLSBDb21wb25lbnQubG9hZCgpIHJldHVybnMgdm9pZHxQcm9taXNlIGF0IHJ1bnRpbWUgZGVzcGl0ZSB2b2lkIHR5cGluZy5cbiAgICAgIGF3YWl0IChjb21wb25lbnQubG9hZCgpIGFzIFByb21pc2FibGU8dm9pZD4pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub25sb2FkSW1wbCgpO1xuICAgIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheSh0aGlzLmFmdGVyTG9hZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbGF5b3V0IGlzIHJlYWR5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTGF5b3V0UmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGFsbCBwcmUtbG9hZCBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZC4gT3ZlcnJpZGUgdGhpcyB0byBhZGQgcGx1Z2luLXNwZWNpZmljIGxvZ2ljLlxuICAgKlxuICAgKiBAcmVtYXJrcyBJdCBpcyBpbXBvcnRhbnQgdG8gY2FsbCBgc3VwZXIub25sb2FkSW1wbCgpYCBpbiBvdmVycmlkZGVuIG1ldGhvZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbmxvYWRJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNvbXBvbmVudCB3aXRoIHRoZSBwbHVnaW4uIElmIGEgY29tcG9uZW50IHdpdGggdGhlIHNhbWUga2V5IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCxcbiAgICogdGhlIG9sZCBjb21wb25lbnQgaXMgcmVtb3ZlZCBhbmQgcmVwbGFjZWQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSBjb21wb25lbnQgdHlwZS5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZWdpc3RyYXRpb24gcGFyYW1zLlxuICAgKiBAcmV0dXJucyBUaGUgcmVnaXN0ZXJlZCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVnaXN0ZXJDb21wb25lbnQ8VCBleHRlbmRzIENvbXBvbmVudD4ocGFyYW1zOiBSZWdpc3RlckNvbXBvbmVudFBhcmFtczxUPik6IFQge1xuICAgIGNvbnN0IHJlc29sdmVkS2V5ID0gcGFyYW1zLmtleSA/PyBwYXJhbXMuY29tcG9uZW50LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3Qgb2xkQ29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzTWFwLmdldChyZXNvbHZlZEtleSk7XG4gICAgaWYgKG9sZENvbXBvbmVudCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChvbGRDb21wb25lbnQpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudHNNYXAuc2V0KHJlc29sdmVkS2V5LCBwYXJhbXMuY29tcG9uZW50KTtcbiAgICB0aGlzLmFkZENoaWxkKHBhcmFtcy5jb21wb25lbnQpO1xuXG4gICAgaWYgKHBhcmFtcy5zaG91bGRQcmVsb2FkKSB7XG4gICAgICB0aGlzLnByZWxvYWRLZXlzLmFkZChyZXNvbHZlZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlbG9hZEtleXMuZGVsZXRlKHJlc29sdmVkS2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLmNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWZ0ZXJMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50LmFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5saWZlY3ljbGVFdmVudHNDb21wb25lbnQudHJpZ2dlckxpZmVjeWNsZUV2ZW50KCdsb2FkJyk7XG4gICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoY29udmVydEFzeW5jVG9TeW5jKHRoaXMub25MYXlvdXRSZWFkeUJhc2UuYmluZCh0aGlzKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkxheW91dFJlYWR5QmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vbkxheW91dFJlYWR5KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMubGlmZWN5Y2xlRXZlbnRzQ29tcG9uZW50LnRyaWdnZXJMaWZlY3ljbGVFdmVudCgnbGF5b3V0UmVhZHknKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGJ5IGRpc2FibGluZyBhbmQgdGhlbiByZS1lbmFibGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZWxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbihwbHVnaW46IE9ic2lkaWFuUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBhd2FpdCBwbHVnaW5zLmVuYWJsZVBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IE9ic2lkaWFuUGx1Z2luLCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbmV3IE5vdGljZShtZXNzYWdlKTtcbiAgcHJpbnRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICBhd2FpdCBwbHVnaW4uYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbihwbHVnaW4ubWFuaWZlc3QuaWQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0EsVUFBVTtBQUFBLE9BQ0w7QUFJUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsa0NBQWtDO0FBQzNDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsb0NBQW9DO0FBZ0N0QyxNQUFlLG1CQUFtQixl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
181
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICogU3ViY2xhc3NlcyBhZGQgdGhlaXIgb3duIGNvbXBvbmVudHMgdmlhIHtAbGluayByZWdpc3RlckNvbXBvbmVudH0gaW4gdGhlaXIgY29uc3RydWN0b3IuXG4gKiBBbnkgdW5pdmVyc2FsIGNvbXBvbmVudCBjYW4gYmUgcmVwbGFjZWQgYnkgY2FsbGluZyB7QGxpbmsgcmVnaXN0ZXJDb21wb25lbnR9IHdpdGggYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgY2xhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgTm90aWNlLFxuICBQbHVnaW4gYXMgT2JzaWRpYW5QbHVnaW5cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseUFmdGVyRGVsYXlcbn0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IEFib3J0U2lnbmFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Fib3J0LXNpZ25hbC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29uc29sZURlYnVnQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IEkxOG5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaTE4bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTGlmZWN5Y2xlRXZlbnRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xpZmVjeWNsZS1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLWNvbnRleHQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBFbXB0eVBsdWdpblNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpbkJhc2UucmVnaXN0ZXJDb21wb25lbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBjb21wb25lbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckNvbXBvbmVudFBhcmFtczxUIGV4dGVuZHMgQ29tcG9uZW50ID0gQ29tcG9uZW50PiB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50OiBUO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29tcG9uZW50IHNob3VsZCBiZSBsb2FkZWQgYmVmb3JlIHRoZSBwbHVnaW4ncyBgb25sb2FkSW1wbCgpYCBydW5zLlxuICAgKiBDb21wb25lbnRzIG1hcmtlZCB3aXRoIHRoaXMgZmxhZyBhcmUgZm9yY2UtbG9hZGVkIGR1cmluZyBgb25sb2FkKClgLCBlbnN1cmluZyB0aGV5IGFyZVxuICAgKiBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgcGx1Z2luIGxvZ2ljIGV4ZWN1dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUHJlbG9hZD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBDb21wb25lbnRDbGFzc1dpdGhLZXkge1xuICBDT01QT05FTlRfS0VZOiBzeW1ib2w7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgT2JzaWRpYW4gcGx1Z2lucyB3aXRoIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBSZWdpc3RlcnMgdW5pdmVyc2FsIGNvbXBvbmVudHMgYXV0b21hdGljYWxseS4gU3ViY2xhc3NlcyBhZGQgb3IgcmVwbGFjZSBjb21wb25lbnRzXG4gKiB2aWEge0BsaW5rIHJlZ2lzdGVyQ29tcG9uZW50fSBpbiB0aGVpciBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBPYnNpZGlhblBsdWdpbiB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC4gQWJvcnRlZCB3aGVuIHRoZSBwbHVnaW4gaXMgdW5sb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWJvcnRTaWduYWxDb21wb25lbnQ6IEFib3J0U2lnbmFsQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuIFByb3ZpZGVzIG5hbWVzcGFjZWQgZGVidWcgbG9nZ2luZy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25zb2xlRGVidWdDb21wb25lbnQ6IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBldmVudHMgY29tcG9uZW50LiBQcm92aWRlcyBsb2FkLCBsYXlvdXRSZWFkeSwgYW5kIHVubG9hZCBldmVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGlmZWN5Y2xlRXZlbnRzQ29tcG9uZW50OiBMaWZlY3ljbGVFdmVudHNDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50LiBEaXNwbGF5cyBub3RpY2VzIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgY29tcG9uZW50LiBNYW5hZ2VzIHBsdWdpbiBzZXR0aW5ncyBsaWZlY3ljbGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlbG9hZENvbXBvbmVudHM6IENvbXBvbmVudFtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgc2luZ2xldG9uQ29tcG9uZW50cyA9IG5ldyBNYXA8c3ltYm9sLCBDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUGx1Z2luQmFzZS5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBtYW5pZmVzdCAtIFRoZSBwbHVnaW4gbWFuaWZlc3QuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXBwOiBBcHAsIG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdCkge1xuICAgIHN1cGVyKGFwcCwgbWFuaWZlc3QpO1xuXG4gICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudCh7IGNvbXBvbmVudDogbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoYXBwLCBtYW5pZmVzdC5pZCksIHNob3VsZFByZWxvYWQ6IHRydWUgfSk7XG4gICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudCh7IGNvbXBvbmVudDogbmV3IEkxOG5Db21wb25lbnQoKSwgc2hvdWxkUHJlbG9hZDogdHJ1ZSB9KTtcbiAgICB0aGlzLm5vdGljZUNvbXBvbmVudCA9IHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQobWFuaWZlc3QubmFtZSkgfSk7XG4gICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudCh7IGNvbXBvbmVudDogbmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMubm90aWNlQ29tcG9uZW50KSB9KTtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5yZWdpc3RlckNvbXBvbmVudCh7IGNvbXBvbmVudDogbmV3IEFib3J0U2lnbmFsQ29tcG9uZW50KG1hbmlmZXN0LmlkKSB9KTtcbiAgICB0aGlzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCA9IHRoaXMucmVnaXN0ZXJDb21wb25lbnQoeyBjb21wb25lbnQ6IG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQobWFuaWZlc3QuaWQpIH0pO1xuICAgIHRoaXMubGlmZWN5Y2xlRXZlbnRzQ29tcG9uZW50ID0gdGhpcy5yZWdpc3RlckNvbXBvbmVudCh7IGNvbXBvbmVudDogbmV3IExpZmVjeWNsZUV2ZW50c0NvbXBvbmVudChhcHApIH0pO1xuICAgIHRoaXMuc2V0dGluZ3NDb21wb25lbnQgPSB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50KHsgY29tcG9uZW50OiBuZXcgRW1wdHlQbHVnaW5TZXR0aW5nc0NvbXBvbmVudCgpLCBzaG91bGRQcmVsb2FkOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzQ29tcG9uZW50Lm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLiBGb3JjZS1sb2FkcyBjb21wb25lbnRzIHRoYXQgbXVzdCBiZSByZWFkeVxuICAgKiBiZWZvcmUgcGx1Z2luIGxvZ2ljLCB0aGVuIGNhbGxzIGBvbmxvYWRJbXBsKClgLlxuICAgKlxuICAgKiBVc3VhbGx5LCB5b3UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZC4gT3ZlcnJpZGUge0BsaW5rIG9ubG9hZEltcGx9IGluc3RlYWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5wcmVsb2FkQ29tcG9uZW50cykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uIC0tIENvbXBvbmVudC5sb2FkKCkgcmV0dXJucyB2b2lkfFByb21pc2UgYXQgcnVudGltZSBkZXNwaXRlIHZvaWQgdHlwaW5nLlxuICAgICAgYXdhaXQgKGNvbXBvbmVudC5sb2FkKCkgYXMgUHJvbWlzYWJsZTx2b2lkPik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5vbmxvYWRJbXBsKCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHlBZnRlckRlbGF5KHRoaXMuYWZ0ZXJMb2FkLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBsYXlvdXQgaXMgcmVhZHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25MYXlvdXRSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgYWxsIHByZS1sb2FkIGNvbXBvbmVudHMgYXJlIGluaXRpYWxpemVkLiBPdmVycmlkZSB0aGlzIHRvIGFkZCBwbHVnaW4tc3BlY2lmaWMgbG9naWMuXG4gICAqXG4gICAqIEByZW1hcmtzIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIGBzdXBlci5vbmxvYWRJbXBsKClgIGluIG92ZXJyaWRkZW4gbWV0aG9kLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9ubG9hZEltcGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY29tcG9uZW50IHdpdGggdGhlIHBsdWdpbi5cbiAgICpcbiAgICogSWYgdGhlIGNvbXBvbmVudCdzIGNsYXNzIGRlZmluZXMgYSBzdGF0aWMgYENPTVBPTkVOVF9LRVlgIHN5bWJvbCwgaXQgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZXRvbiBcdTIwMTRcbiAgICogcmVnaXN0ZXJpbmcgYW5vdGhlciBjb21wb25lbnQgd2l0aCB0aGUgc2FtZSBrZXkgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZS5cbiAgICogQ29tcG9uZW50cyB3aXRob3V0IGEgYENPTVBPTkVOVF9LRVlgIGFyZSBtdWx0aS1pbnN0YW5jZSBhbmQgc2ltcGx5IGFkZGVkLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgY29tcG9uZW50IHR5cGUuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVnaXN0cmF0aW9uIHBhcmFtcy5cbiAgICogQHJldHVybnMgVGhlIHJlZ2lzdGVyZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBDb21wb25lbnQ+KHBhcmFtczogUmVnaXN0ZXJDb21wb25lbnRQYXJhbXM8VD4pOiBUIHtcbiAgICBjb25zdCBzaW5nbGV0b25LZXkgPSAocGFyYW1zLmNvbXBvbmVudC5jb25zdHJ1Y3RvciBhcyBQYXJ0aWFsPENvbXBvbmVudENsYXNzV2l0aEtleT4pLkNPTVBPTkVOVF9LRVk7XG5cbiAgICBpZiAoc2luZ2xldG9uS2V5KSB7XG4gICAgICBjb25zdCBvbGRDb21wb25lbnQgPSB0aGlzLnNpbmdsZXRvbkNvbXBvbmVudHMuZ2V0KHNpbmdsZXRvbktleSk7XG4gICAgICBpZiAob2xkQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQob2xkQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgcHJlbG9hZEluZGV4ID0gdGhpcy5wcmVsb2FkQ29tcG9uZW50cy5pbmRleE9mKG9sZENvbXBvbmVudCk7XG4gICAgICAgIGlmIChwcmVsb2FkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5wcmVsb2FkQ29tcG9uZW50cy5zcGxpY2UocHJlbG9hZEluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zaW5nbGV0b25Db21wb25lbnRzLnNldChzaW5nbGV0b25LZXksIHBhcmFtcy5jb21wb25lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkQ2hpbGQocGFyYW1zLmNvbXBvbmVudCk7XG5cbiAgICBpZiAocGFyYW1zLnNob3VsZFByZWxvYWQpIHtcbiAgICAgIHRoaXMucHJlbG9hZENvbXBvbmVudHMucHVzaChwYXJhbXMuY29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLmNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWZ0ZXJMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50LmFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5saWZlY3ljbGVFdmVudHNDb21wb25lbnQudHJpZ2dlckxpZmVjeWNsZUV2ZW50KCdsb2FkJyk7XG4gICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoY29udmVydEFzeW5jVG9TeW5jKHRoaXMub25MYXlvdXRSZWFkeUJhc2UuYmluZCh0aGlzKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkxheW91dFJlYWR5QmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vbkxheW91dFJlYWR5KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMubGlmZWN5Y2xlRXZlbnRzQ29tcG9uZW50LnRyaWdnZXJMaWZlY3ljbGVFdmVudCgnbGF5b3V0UmVhZHknKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGJ5IGRpc2FibGluZyBhbmQgdGhlbiByZS1lbmFibGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZWxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbihwbHVnaW46IE9ic2lkaWFuUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBhd2FpdCBwbHVnaW5zLmVuYWJsZVBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IE9ic2lkaWFuUGx1Z2luLCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbmV3IE5vdGljZShtZXNzYWdlKTtcbiAgcHJpbnRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICBhd2FpdCBwbHVnaW4uYXBwLnBsdWdpbnMuZGlzYWJsZVBsdWdpbihwbHVnaW4ubWFuaWZlc3QuaWQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0EsVUFBVTtBQUFBLE9BQ0w7QUFJUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsaUJB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
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs",
3
+ "module": "../../../dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.mjs",
4
+ "type": "module",
5
+ "types": "../../../dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "56.0.2",
3
+ "version": "57.0.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
5
5
  "keywords": [
6
6
  "obsidian"