obsidian-dev-utils 88.7.0 → 89.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.
- package/CHANGELOG.md +23 -0
- package/dist/demo-vault-helper/main.js +20 -23
- package/dist/integration-test-plugin/main.js +2218 -1734
- package/dist/lib/cjs/__merged.cjs +57 -35
- package/dist/lib/cjs/__merged.d.cts +12 -10
- package/dist/lib/cjs/abort-controller.cjs +15 -22
- package/dist/lib/cjs/array.cjs +27 -26
- package/dist/lib/cjs/array.d.cts +25 -7
- package/dist/lib/cjs/async-events.cjs +87 -91
- package/dist/lib/cjs/async-events.d.cts +50 -50
- package/dist/lib/cjs/async.cjs +80 -80
- package/dist/lib/cjs/async.d.cts +23 -23
- package/dist/lib/cjs/beeper.cjs +11 -15
- package/dist/lib/cjs/blob.cjs +14 -25
- package/dist/lib/cjs/codemirror/index.cjs +11 -15
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +11 -15
- package/dist/lib/cjs/debug-controller.cjs +11 -15
- package/dist/lib/cjs/debug.cjs +24 -32
- package/dist/lib/cjs/debug.d.cts +1 -1
- package/dist/lib/cjs/disposable.cjs +59 -43
- package/dist/lib/cjs/disposable.d.cts +27 -8
- package/dist/lib/cjs/enum.cjs +11 -15
- package/dist/lib/cjs/error.cjs +28 -33
- package/dist/lib/cjs/function.cjs +30 -34
- package/dist/lib/cjs/function.d.cts +26 -26
- package/dist/lib/cjs/generated-during-build.cjs +12 -16
- package/dist/lib/cjs/html-element.cjs +84 -89
- package/dist/lib/cjs/html-element.d.cts +15 -15
- package/dist/lib/cjs/index.cjs +11 -15
- package/dist/lib/cjs/integration-test-setup.cjs +11 -15
- package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +11 -15
- package/dist/lib/cjs/jest-setup.cjs +11 -15
- package/dist/lib/cjs/library.cjs +11 -15
- package/dist/lib/cjs/object-utils.cjs +120 -117
- package/dist/lib/cjs/object-utils.d.cts +27 -27
- package/dist/lib/cjs/obsidian/@types/dataview/data-model/value.d.cts +1 -1
- package/dist/lib/cjs/obsidian/@types/dataview/expression/field.d.cts +1 -1
- package/dist/lib/cjs/obsidian/@types/dataview/expression/functions.d.cts +4 -4
- package/dist/lib/cjs/obsidian/active-file-provider.cjs +11 -15
- package/dist/lib/cjs/obsidian/app.cjs +11 -15
- package/dist/lib/cjs/obsidian/async-with-notice.cjs +28 -32
- package/dist/lib/cjs/obsidian/async-with-notice.d.cts +2 -2
- package/dist/lib/cjs/obsidian/attachment-path.cjs +20 -24
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +5 -5
- package/dist/lib/cjs/obsidian/backlink.cjs +12 -16
- package/dist/lib/cjs/obsidian/bases-view-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/callout.cjs +27 -26
- package/dist/lib/cjs/obsidian/callout.d.cts +9 -3
- package/dist/lib/cjs/obsidian/canvas.cjs +13 -16
- package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +18 -20
- package/dist/lib/cjs/obsidian/code-block-markdown-information.cjs +11 -15
- package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +2 -2
- package/dist/lib/cjs/obsidian/code-block-reg-exp.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +18 -16
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +5 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +56 -31
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +42 -8
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +10 -0
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +26 -30
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +8 -8
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +12 -16
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +12 -16
- package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +13 -17
- package/dist/lib/cjs/obsidian/command-handlers/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/community-plugins.cjs +28 -25
- package/dist/lib/cjs/obsidian/community-plugins.d.cts +19 -5
- package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +4 -4
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +13 -16
- package/dist/lib/cjs/obsidian/components/async-events-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/component-ex.cjs +26 -28
- package/dist/lib/cjs/obsidian/components/component-ex.d.cts +3 -3
- package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/components/disposable-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/index.cjs +14 -15
- package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +29 -33
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +55 -55
- package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.cjs +297 -0
- package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.d.cts +139 -0
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +28 -31
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +26 -30
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +8 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/pointer-position-component.cjs +13 -17
- package/dist/lib/cjs/obsidian/components/registry-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +72 -62
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +12 -1
- package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.cjs +16 -20
- package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.d.cts +8 -8
- package/dist/lib/cjs/obsidian/constructors/get-dom-events-handlers-constructor.cjs +14 -18
- package/dist/lib/cjs/obsidian/constructors/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/css-class.cjs +11 -15
- package/dist/lib/cjs/obsidian/data-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/dataview-link.cjs +13 -17
- package/dist/lib/cjs/obsidian/dataview.cjs +35 -41
- package/dist/lib/cjs/obsidian/dataview.d.cts +2 -2
- package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +13 -17
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +22 -26
- package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +23 -21
- package/dist/lib/cjs/obsidian/editor-extension-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/editor-suggest-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/editor.cjs +17 -19
- package/dist/lib/cjs/obsidian/events.cjs +12 -16
- package/dist/lib/cjs/obsidian/events.d.cts +2 -2
- package/dist/lib/cjs/obsidian/extensions-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/file-change.cjs +76 -80
- package/dist/lib/cjs/obsidian/file-change.d.cts +3 -3
- package/dist/lib/cjs/obsidian/file-manager.cjs +33 -22
- package/dist/lib/cjs/obsidian/file-manager.d.cts +20 -1
- package/dist/lib/cjs/obsidian/file-system.cjs +15 -19
- package/dist/lib/cjs/obsidian/file-system.d.cts +3 -3
- package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.cjs +11 -15
- package/dist/lib/cjs/obsidian/frontmatter.cjs +15 -19
- package/dist/lib/cjs/obsidian/hover-link-source-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/html-element.cjs +13 -17
- package/dist/lib/cjs/obsidian/html-element.d.cts +2 -2
- package/dist/lib/cjs/obsidian/i18n/custom-type-options.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/default-translations.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/i18n.cjs +13 -16
- package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +7 -0
- package/dist/lib/cjs/obsidian/i18n/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/locales/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.cjs +11 -15
- package/dist/lib/cjs/obsidian/index.cjs +14 -15
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +11 -15
- package/dist/lib/cjs/obsidian/link-update-progress.cjs +11 -15
- package/dist/lib/cjs/obsidian/link.cjs +91 -81
- package/dist/lib/cjs/obsidian/link.d.cts +22 -22
- package/dist/lib/cjs/obsidian/logger.cjs +21 -25
- package/dist/lib/cjs/obsidian/logger.d.cts +5 -5
- package/dist/lib/cjs/obsidian/loop.cjs +14 -18
- package/dist/lib/cjs/obsidian/loop.d.cts +1 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.cjs +12 -16
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +3 -3
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +35 -40
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +3 -3
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +12 -16
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +3 -3
- package/dist/lib/cjs/obsidian/markdown-view.cjs +11 -15
- package/dist/lib/cjs/obsidian/markdown.cjs +22 -24
- package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +16 -20
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +2 -2
- package/dist/lib/cjs/obsidian/modals/alert.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/confirm.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +28 -32
- package/dist/lib/cjs/obsidian/modals/modal.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/prompt.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/select-item.cjs +16 -20
- package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -1
- package/dist/lib/cjs/obsidian/modals/select-option.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.cjs +26 -28
- package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.d.cts +5 -5
- package/dist/lib/cjs/obsidian/notebook-navigator.cjs +155 -0
- package/dist/lib/cjs/obsidian/notebook-navigator.d.cts +132 -0
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/obsidian-settings.cjs +11 -15
- package/dist/lib/cjs/obsidian/parse-link.cjs +61 -62
- package/dist/lib/cjs/obsidian/parse-link.d.cts +4 -4
- package/dist/lib/cjs/obsidian/path-settings.cjs +27 -25
- package/dist/lib/cjs/obsidian/pdf.cjs +13 -17
- package/dist/lib/cjs/obsidian/pdf.d.cts +2 -2
- package/dist/lib/cjs/obsidian/plugin/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +11 -15
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +156 -52
- package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +17 -21
- package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +2 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +20 -24
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +11 -9
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +29 -33
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +33 -16
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +11 -1
- package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/popovers/field-popover.cjs +11 -15
- package/dist/lib/cjs/obsidian/popovers/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/popovers/popover-anchor.cjs +14 -18
- package/dist/lib/cjs/obsidian/popovers/popover-anchor.d.cts +2 -2
- package/dist/lib/cjs/obsidian/popovers/popover.cjs +19 -23
- package/dist/lib/cjs/obsidian/queue.cjs +16 -20
- package/dist/lib/cjs/obsidian/queue.d.cts +2 -2
- package/dist/lib/cjs/obsidian/react/app-context.cjs +11 -15
- package/dist/lib/cjs/obsidian/react/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/reference.cjs +11 -15
- package/dist/lib/cjs/obsidian/resource-lock.cjs +157 -78
- package/dist/lib/cjs/obsidian/resource-lock.d.cts +5 -0
- package/dist/lib/cjs/obsidian/resource-url.cjs +12 -16
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +18 -22
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +5 -5
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +28 -31
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/date-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/date-time-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/email-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/email-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/month-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +17 -21
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +12 -16
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +15 -19
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/number-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/number-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/password-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/password-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.cjs +16 -20
- package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/telephone-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/telephone-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/text-based-component.cjs +16 -20
- package/dist/lib/cjs/obsidian/setting-components/text-based-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/time-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +15 -19
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +16 -20
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +18 -22
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-range-text-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +16 -19
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +4 -4
- package/dist/lib/cjs/obsidian/setting-components/url-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/url-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/validator-component.cjs +45 -49
- package/dist/lib/cjs/obsidian/setting-components/validator-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/week-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-ex.cjs +76 -80
- package/dist/lib/cjs/obsidian/setting-ex.d.cts +42 -42
- package/dist/lib/cjs/obsidian/setting-group-ex.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-group-ex.d.cts +2 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/validation.cjs +11 -15
- package/dist/lib/cjs/obsidian/vault-delete.cjs +23 -20
- package/dist/lib/cjs/obsidian/vault-delete.d.cts +16 -2
- package/dist/lib/cjs/obsidian/vault-transaction.cjs +17 -18
- package/dist/lib/cjs/obsidian/vault.cjs +81 -63
- package/dist/lib/cjs/obsidian/vault.d.cts +32 -11
- package/dist/lib/cjs/obsidian/view-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/workspace.cjs +12 -16
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +11 -15
- package/dist/lib/cjs/path.cjs +18 -22
- package/dist/lib/cjs/path.d.cts +1 -1
- package/dist/lib/cjs/reg-exp.cjs +38 -35
- package/dist/lib/cjs/reg-exp.d.cts +4 -4
- package/dist/lib/cjs/script-utils/build.cjs +21 -25
- package/dist/lib/cjs/script-utils/build.d.cts +1 -1
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +24 -28
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +36 -34
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +20 -24
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +13 -17
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +16 -20
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +6 -2
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +32 -36
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/check-project-types.cjs +13 -17
- package/dist/lib/cjs/script-utils/check-project-types.d.cts +12 -4
- package/dist/lib/cjs/script-utils/cli-utils.cjs +39 -47
- package/dist/lib/cjs/script-utils/cli-utils.d.cts +6 -6
- package/dist/lib/cjs/script-utils/code-generator.cjs +11 -15
- package/dist/lib/cjs/script-utils/commitlint-config.cjs +11 -15
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +22 -23
- package/dist/lib/cjs/script-utils/demo-vault.cjs +11 -15
- package/dist/lib/cjs/script-utils/env-toggle.cjs +13 -17
- package/dist/lib/cjs/script-utils/exec.cjs +40 -44
- package/dist/lib/cjs/script-utils/exec.d.cts +4 -4
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +12 -16
- package/dist/lib/cjs/script-utils/formatters/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/fs.cjs +13 -17
- package/dist/lib/cjs/script-utils/git.cjs +11 -15
- package/dist/lib/cjs/script-utils/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/json.cjs +15 -19
- package/dist/lib/cjs/script-utils/json.d.cts +2 -2
- package/dist/lib/cjs/script-utils/linters/cspell.cjs +12 -16
- package/dist/lib/cjs/script-utils/linters/eslint-agnostic-core-boundary.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +402 -16
- package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +27 -31
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +27 -31
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +21 -25
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +109 -113
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +13 -17
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +21 -25
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +51 -55
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +9 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +25 -27
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +6 -2
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +33 -37
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +14 -18
- package/dist/lib/cjs/script-utils/linters/index.cjs +14 -15
- package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +18 -17
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.d.cts +2 -2
- package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.cjs +138 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.d.cts +35 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +20 -23
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +18 -22
- package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +54 -18
- package/dist/lib/cjs/script-utils/nano-staged-config.cjs +11 -15
- package/dist/lib/cjs/script-utils/npm-publish.cjs +11 -15
- package/dist/lib/cjs/script-utils/npm-run.cjs +20 -17
- package/dist/lib/cjs/script-utils/npm-run.d.cts +16 -2
- package/dist/lib/cjs/script-utils/npm.cjs +21 -25
- package/dist/lib/cjs/script-utils/npm.d.cts +11 -11
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +11 -15
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +165 -55
- package/dist/lib/cjs/script-utils/root.cjs +11 -15
- package/dist/lib/cjs/script-utils/test-runners/index.cjs +16 -17
- package/dist/lib/cjs/script-utils/test-runners/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/test-runners/integration-test-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/test-runners/vitest-config.cjs +325 -0
- package/dist/lib/cjs/script-utils/test-runners/vitest-config.d.cts +118 -0
- package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +11 -15
- package/dist/lib/cjs/script-utils/validate-declarations.cjs +11 -15
- package/dist/lib/cjs/script-utils/version.cjs +62 -63
- package/dist/lib/cjs/script-utils/version.d.cts +21 -21
- package/dist/lib/cjs/script-utils/warnings-as-errors.cjs +11 -15
- package/dist/lib/cjs/setup.cjs +11 -15
- package/dist/lib/cjs/setup.d.cts +1 -1
- package/dist/lib/cjs/strict-proxy.cjs +30 -34
- package/dist/lib/cjs/strict-proxy.d.cts +2 -2
- package/dist/lib/cjs/string.cjs +90 -93
- package/dist/lib/cjs/string.d.cts +60 -60
- package/dist/lib/cjs/transformers/date-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/duration-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/group-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/index.cjs +11 -15
- package/dist/lib/cjs/transformers/map-transformer.cjs +12 -16
- package/dist/lib/cjs/transformers/set-transformer.cjs +12 -16
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +12 -16
- package/dist/lib/cjs/transformers/typed-transformer.cjs +11 -15
- package/dist/lib/cjs/two-way-map.cjs +11 -15
- package/dist/lib/cjs/type-guards.cjs +16 -20
- package/dist/lib/cjs/type-guards.d.cts +6 -6
- package/dist/lib/cjs/type.cjs +13 -17
- package/dist/lib/cjs/type.d.cts +2 -2
- package/dist/lib/cjs/url.cjs +18 -22
- package/dist/lib/cjs/url.d.cts +4 -4
- package/dist/lib/cjs/value-provider.cjs +15 -19
- package/dist/lib/cjs/value-provider.d.cts +6 -6
- package/dist/lib/cjs/value-wrapper.cjs +11 -15
- package/dist/lib/cjs/vitest-setup.cjs +11 -15
- package/dist/lib/esm/__merged.d.mts +12 -10
- package/dist/lib/esm/__merged.mjs +51 -23
- package/dist/lib/esm/abort-controller.mjs +5 -8
- package/dist/lib/esm/array.d.mts +25 -7
- package/dist/lib/esm/array.mjs +16 -12
- package/dist/lib/esm/async-events.d.mts +50 -50
- package/dist/lib/esm/async-events.mjs +81 -78
- package/dist/lib/esm/async.d.mts +23 -23
- package/dist/lib/esm/async.mjs +70 -66
- package/dist/lib/esm/blob.mjs +4 -11
- package/dist/lib/esm/debug.d.mts +1 -1
- package/dist/lib/esm/debug.mjs +14 -18
- package/dist/lib/esm/disposable.d.mts +27 -8
- package/dist/lib/esm/disposable.mjs +47 -29
- package/dist/lib/esm/error.mjs +18 -19
- package/dist/lib/esm/function.d.mts +26 -26
- package/dist/lib/esm/function.mjs +20 -20
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/html-element.d.mts +15 -15
- package/dist/lib/esm/html-element.mjs +74 -75
- package/dist/lib/esm/object-utils.d.mts +27 -27
- package/dist/lib/esm/object-utils.mjs +109 -102
- package/dist/lib/esm/obsidian/@types/dataview/data-model/value.d.mts +1 -1
- package/dist/lib/esm/obsidian/@types/dataview/expression/field.d.mts +1 -1
- package/dist/lib/esm/obsidian/@types/dataview/expression/functions.d.mts +4 -4
- package/dist/lib/esm/obsidian/app.mjs +1 -1
- package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
- package/dist/lib/esm/obsidian/async-with-notice.mjs +18 -18
- package/dist/lib/esm/obsidian/attachment-path.d.mts +5 -5
- package/dist/lib/esm/obsidian/attachment-path.mjs +10 -10
- package/dist/lib/esm/obsidian/backlink.mjs +2 -2
- package/dist/lib/esm/obsidian/callout.d.mts +9 -3
- package/dist/lib/esm/obsidian/callout.mjs +17 -12
- package/dist/lib/esm/obsidian/canvas.mjs +3 -2
- package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +8 -6
- package/dist/lib/esm/obsidian/code-block-markdown-information.d.mts +2 -2
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +5 -0
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +8 -2
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +42 -8
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +46 -17
- package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +10 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +8 -8
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +16 -16
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +2 -2
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +2 -2
- package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +3 -3
- package/dist/lib/esm/obsidian/community-plugins.d.mts +19 -5
- package/dist/lib/esm/obsidian/community-plugins.mjs +17 -11
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +4 -4
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -2
- package/dist/lib/esm/obsidian/components/component-ex.d.mts +3 -3
- package/dist/lib/esm/obsidian/components/component-ex.mjs +16 -14
- package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/components/console-debug-component.mjs +4 -4
- package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/components/index.mjs +3 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +5 -5
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +55 -55
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +19 -19
- package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.d.mts +139 -0
- package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.mjs +196 -0
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +18 -17
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +8 -8
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +18 -18
- package/dist/lib/esm/obsidian/components/pointer-position-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +12 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +62 -48
- package/dist/lib/esm/obsidian/components/syntax-highlighting-component.d.mts +8 -8
- package/dist/lib/esm/obsidian/components/syntax-highlighting-component.mjs +6 -6
- package/dist/lib/esm/obsidian/constructors/get-dom-events-handlers-constructor.mjs +4 -4
- package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/dataview-link.mjs +3 -3
- package/dist/lib/esm/obsidian/dataview.d.mts +2 -2
- package/dist/lib/esm/obsidian/dataview.mjs +25 -27
- package/dist/lib/esm/obsidian/demo-vault-helper.mjs +4 -3
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +12 -12
- package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +13 -7
- package/dist/lib/esm/obsidian/editor.mjs +7 -5
- package/dist/lib/esm/obsidian/events.d.mts +2 -2
- package/dist/lib/esm/obsidian/events.mjs +2 -2
- package/dist/lib/esm/obsidian/file-change.d.mts +3 -3
- package/dist/lib/esm/obsidian/file-change.mjs +67 -67
- package/dist/lib/esm/obsidian/file-manager.d.mts +20 -1
- package/dist/lib/esm/obsidian/file-manager.mjs +22 -8
- package/dist/lib/esm/obsidian/file-system.d.mts +3 -3
- package/dist/lib/esm/obsidian/file-system.mjs +4 -4
- package/dist/lib/esm/obsidian/frontmatter.mjs +5 -5
- package/dist/lib/esm/obsidian/html-element.d.mts +2 -2
- package/dist/lib/esm/obsidian/html-element.mjs +3 -3
- package/dist/lib/esm/obsidian/i18n/i18n.d.mts +7 -0
- package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -2
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.mjs +3 -1
- package/dist/lib/esm/obsidian/link.d.mts +22 -22
- package/dist/lib/esm/obsidian/link.mjs +76 -62
- package/dist/lib/esm/obsidian/logger.d.mts +5 -5
- package/dist/lib/esm/obsidian/logger.mjs +11 -11
- package/dist/lib/esm/obsidian/loop.d.mts +1 -1
- package/dist/lib/esm/obsidian/loop.mjs +4 -4
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +2 -2
- package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +25 -26
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +2 -2
- package/dist/lib/esm/obsidian/markdown.mjs +12 -10
- package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +2 -2
- package/dist/lib/esm/obsidian/metadata-cache.mjs +6 -6
- package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +18 -18
- package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
- package/dist/lib/esm/obsidian/modals/select-item.mjs +6 -6
- package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.d.mts +5 -5
- package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.mjs +16 -14
- package/dist/lib/esm/obsidian/notebook-navigator.d.mts +132 -0
- package/dist/lib/esm/obsidian/notebook-navigator.mjs +49 -0
- package/dist/lib/esm/obsidian/parse-link.d.mts +4 -4
- package/dist/lib/esm/obsidian/parse-link.mjs +51 -48
- package/dist/lib/esm/obsidian/path-settings.mjs +17 -11
- package/dist/lib/esm/obsidian/pdf.d.mts +2 -2
- package/dist/lib/esm/obsidian/pdf.mjs +3 -3
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +156 -52
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +2 -2
- package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +7 -7
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +11 -9
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +10 -10
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +20 -20
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +11 -1
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +23 -2
- package/dist/lib/esm/obsidian/popovers/popover-anchor.d.mts +2 -2
- package/dist/lib/esm/obsidian/popovers/popover-anchor.mjs +4 -4
- package/dist/lib/esm/obsidian/popovers/popover.mjs +9 -9
- package/dist/lib/esm/obsidian/queue.d.mts +2 -2
- package/dist/lib/esm/obsidian/queue.mjs +6 -6
- package/dist/lib/esm/obsidian/resource-lock.d.mts +5 -0
- package/dist/lib/esm/obsidian/resource-lock.mjs +147 -64
- package/dist/lib/esm/obsidian/resource-url.mjs +2 -2
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +2 -2
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +5 -5
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +8 -8
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +18 -17
- package/dist/lib/esm/obsidian/setting-components/date-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/date-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/date-time-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/email-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/email-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/month-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/month-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +7 -7
- package/dist/lib/esm/obsidian/setting-components/multiple-email-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +5 -5
- package/dist/lib/esm/obsidian/setting-components/number-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/number-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/password-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/password-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +6 -6
- package/dist/lib/esm/obsidian/setting-components/telephone-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/text-based-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +6 -6
- package/dist/lib/esm/obsidian/setting-components/time-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/time-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +5 -5
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +6 -6
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -8
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +4 -4
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +6 -5
- package/dist/lib/esm/obsidian/setting-components/url-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/url-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/validator-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +35 -35
- package/dist/lib/esm/obsidian/setting-components/week-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/week-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-ex.d.mts +42 -42
- package/dist/lib/esm/obsidian/setting-ex.mjs +66 -66
- package/dist/lib/esm/obsidian/setting-group-ex.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-group-ex.mjs +4 -4
- package/dist/lib/esm/obsidian/vault-delete.d.mts +16 -2
- package/dist/lib/esm/obsidian/vault-delete.mjs +12 -6
- package/dist/lib/esm/obsidian/vault-transaction.mjs +8 -4
- package/dist/lib/esm/obsidian/vault.d.mts +32 -11
- package/dist/lib/esm/obsidian/vault.mjs +67 -47
- package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/workspace.mjs +2 -2
- package/dist/lib/esm/path.d.mts +1 -1
- package/dist/lib/esm/path.mjs +7 -7
- package/dist/lib/esm/reg-exp.d.mts +4 -4
- package/dist/lib/esm/reg-exp.mjs +28 -21
- package/dist/lib/esm/script-utils/build.d.mts +1 -1
- package/dist/lib/esm/script-utils/build.mjs +15 -12
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +14 -14
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +26 -20
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +10 -10
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -3
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -6
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +6 -2
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +20 -20
- package/dist/lib/esm/script-utils/check-project-types.d.mts +12 -4
- package/dist/lib/esm/script-utils/check-project-types.mjs +3 -3
- package/dist/lib/esm/script-utils/cli-utils.d.mts +6 -6
- package/dist/lib/esm/script-utils/cli-utils.mjs +29 -33
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +12 -9
- package/dist/lib/esm/script-utils/env-toggle.mjs +3 -3
- package/dist/lib/esm/script-utils/exec.d.mts +4 -4
- package/dist/lib/esm/script-utils/exec.mjs +32 -32
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +2 -2
- package/dist/lib/esm/script-utils/fs.mjs +3 -3
- package/dist/lib/esm/script-utils/json.d.mts +2 -2
- package/dist/lib/esm/script-utils/json.mjs +5 -5
- package/dist/lib/esm/script-utils/linters/cspell.mjs +2 -2
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +392 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +17 -17
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +17 -17
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +11 -11
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +99 -99
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +11 -11
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +9 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +41 -41
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +6 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +15 -13
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +23 -23
- package/dist/lib/esm/script-utils/linters/eslint.mjs +4 -4
- package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.d.mts +2 -2
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/markdownlint-ignores.d.mts +35 -0
- package/dist/lib/esm/script-utils/linters/markdownlint-ignores.mjs +33 -0
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +13 -9
- package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +54 -18
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +8 -8
- package/dist/lib/esm/script-utils/npm-run.d.mts +16 -2
- package/dist/lib/esm/script-utils/npm-run.mjs +9 -3
- package/dist/lib/esm/script-utils/npm.d.mts +11 -11
- package/dist/lib/esm/script-utils/npm.mjs +11 -11
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +165 -55
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +1 -1
- package/dist/lib/esm/script-utils/test-runners/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/test-runners/index.mjs +4 -2
- package/dist/lib/esm/script-utils/test-runners/vitest-config.d.mts +118 -0
- package/dist/lib/esm/script-utils/test-runners/vitest-config.mjs +210 -0
- package/dist/lib/esm/script-utils/validate-declarations.mjs +1 -1
- package/dist/lib/esm/script-utils/version.d.mts +21 -21
- package/dist/lib/esm/script-utils/version.mjs +48 -45
- package/dist/lib/esm/setup.d.mts +1 -1
- package/dist/lib/esm/setup.mjs +1 -1
- package/dist/lib/esm/strict-proxy.d.mts +2 -2
- package/dist/lib/esm/strict-proxy.mjs +20 -20
- package/dist/lib/esm/string.d.mts +60 -60
- package/dist/lib/esm/string.mjs +80 -79
- package/dist/lib/esm/transformers/map-transformer.mjs +2 -2
- package/dist/lib/esm/transformers/set-transformer.mjs +2 -2
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +2 -2
- package/dist/lib/esm/type-guards.d.mts +6 -6
- package/dist/lib/esm/type-guards.mjs +6 -6
- package/dist/lib/esm/type.d.mts +2 -2
- package/dist/lib/esm/type.mjs +3 -3
- package/dist/lib/esm/url.d.mts +4 -4
- package/dist/lib/esm/url.mjs +8 -8
- package/dist/lib/esm/value-provider.d.mts +6 -6
- package/dist/lib/esm/value-provider.mjs +5 -5
- package/dist/templates/scripts/vitest-config.ts +2 -88
- package/obsidian/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
- package/obsidian/notebook-navigator/package.json +6 -0
- package/package.json +17 -33
- package/script-utils/linters/markdownlint-ignores/package.json +6 -0
- package/script-utils/test-runners/vitest-config/package.json +6 -0
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
Notice,
|
|
27
27
|
setIcon
|
|
28
28
|
} from "obsidian";
|
|
29
|
+
import { snapshot } from "../../array.mjs";
|
|
29
30
|
import { invokeAsyncSafely } from "../../async.mjs";
|
|
30
31
|
import { normalizeOptionalProperties } from "../../object-utils.mjs";
|
|
31
32
|
import { getObsidianDevUtilsState } from "../../obsidian-dev-utils-state.mjs";
|
|
@@ -77,7 +78,7 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
77
78
|
* Hides the current notice on unload, unless it is the permanent notice (which is meant to outlive the plugin).
|
|
78
79
|
*/
|
|
79
80
|
onunload() {
|
|
80
|
-
for (const cancelPendingTimer of
|
|
81
|
+
for (const cancelPendingTimer of snapshot(this.pendingTimerCancellations)) {
|
|
81
82
|
cancelPendingTimer();
|
|
82
83
|
}
|
|
83
84
|
if (this.getPermanentNotice() !== this.notice) {
|
|
@@ -205,8 +206,8 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
205
206
|
addPluginCssClasses(closeButtonEl, CssClass.PluginNoticeCloseButton);
|
|
206
207
|
closeButtonEl.addClasses([CssClass.ClickableIcon, CssClass.ModalHeaderButton]);
|
|
207
208
|
setIcon(closeButtonEl, "x");
|
|
208
|
-
closeButtonEl.addEventListener("click", (
|
|
209
|
-
|
|
209
|
+
closeButtonEl.addEventListener("click", ($event) => {
|
|
210
|
+
$event.stopPropagation();
|
|
210
211
|
invokeAsyncSafely(async () => {
|
|
211
212
|
let isCancelled = false;
|
|
212
213
|
await onCloseClick?.({
|
|
@@ -237,7 +238,7 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
237
238
|
if (typeof content === "string") {
|
|
238
239
|
fragment.appendText(content);
|
|
239
240
|
} else {
|
|
240
|
-
fragment.
|
|
241
|
+
fragment.append(content);
|
|
241
242
|
}
|
|
242
243
|
if (abortController) {
|
|
243
244
|
const cancelButton = new ButtonComponent(createDiv());
|
|
@@ -246,7 +247,7 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
246
247
|
cancelButton.buttonEl.addEventListener("click", () => {
|
|
247
248
|
abortController.abort();
|
|
248
249
|
});
|
|
249
|
-
fragment.
|
|
250
|
+
fragment.append(cancelButton.buttonEl);
|
|
250
251
|
}
|
|
251
252
|
return fragment;
|
|
252
253
|
}
|
|
@@ -264,14 +265,14 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
264
265
|
const fragment = createFragment();
|
|
265
266
|
const contentEl = fragment.createDiv();
|
|
266
267
|
addPluginCssClasses(contentEl, CssClass.PluginNoticeContent);
|
|
267
|
-
contentEl.
|
|
268
|
-
contentEl.addEventListener("click", (
|
|
268
|
+
contentEl.append(this.buildPrefixedMessage(message));
|
|
269
|
+
contentEl.addEventListener("click", ($event) => {
|
|
269
270
|
if (requiresExplicitClose) {
|
|
270
|
-
|
|
271
|
+
$event.stopPropagation();
|
|
271
272
|
return;
|
|
272
273
|
}
|
|
273
|
-
if (
|
|
274
|
-
|
|
274
|
+
if ($event.target instanceof Element && $event.target.closest(INTERACTIVE_ELEMENT_SELECTOR)) {
|
|
275
|
+
$event.stopPropagation();
|
|
275
276
|
}
|
|
276
277
|
});
|
|
277
278
|
if (requiresExplicitClose && shouldShowCloseButton) {
|
|
@@ -294,7 +295,7 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
294
295
|
const fragment = createFragment();
|
|
295
296
|
const nameEl = createSpan({ text: this.pluginName });
|
|
296
297
|
addPluginCssClasses(nameEl, CssClass.PluginNoticeName);
|
|
297
|
-
fragment.
|
|
298
|
+
fragment.append(nameEl);
|
|
298
299
|
if (!this._loaded) {
|
|
299
300
|
fragment.appendText(" (unloaded)");
|
|
300
301
|
}
|
|
@@ -302,7 +303,7 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
302
303
|
if (typeof message === "string") {
|
|
303
304
|
fragment.appendText(message);
|
|
304
305
|
} else {
|
|
305
|
-
fragment.
|
|
306
|
+
fragment.append(message);
|
|
306
307
|
}
|
|
307
308
|
return fragment;
|
|
308
309
|
}
|
|
@@ -327,11 +328,11 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
327
328
|
return;
|
|
328
329
|
}
|
|
329
330
|
addPluginCssClasses(notice.containerEl, CssClass.PluginNoticeRequiresExplicitClose);
|
|
330
|
-
notice.containerEl.addEventListener("click", (
|
|
331
|
-
if (
|
|
331
|
+
notice.containerEl.addEventListener("click", ($event) => {
|
|
332
|
+
if ($event.target instanceof Element && $event.target.closest(INTERACTIVE_ELEMENT_SELECTOR)) {
|
|
332
333
|
return;
|
|
333
334
|
}
|
|
334
|
-
|
|
335
|
+
$event.stopPropagation();
|
|
335
336
|
}, { capture: true });
|
|
336
337
|
}
|
|
337
338
|
/**
|
|
@@ -415,8 +416,8 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
415
416
|
const patchComponent = new MonkeyAroundComponent();
|
|
416
417
|
patchComponent.load();
|
|
417
418
|
patchComponent.registerMethodPatch({
|
|
419
|
+
$object: notice,
|
|
418
420
|
methodName: "hide",
|
|
419
|
-
obj: notice,
|
|
420
421
|
once: true,
|
|
421
422
|
patchHandler: ({ fallback }) => {
|
|
422
423
|
fallback();
|
|
@@ -432,4 +433,4 @@ class PluginNoticeComponent extends ComponentEx {
|
|
|
432
433
|
export {
|
|
433
434
|
PluginNoticeComponent
|
|
434
435
|
};
|
|
435
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTm90aWNlLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS1wcm92aWRlci50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGFkZFBsdWdpbkNzc0NsYXNzZXMgfSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBNb25rZXlBcm91bmRDb21wb25lbnQgfSBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcblxuY29uc3QgUEVSTUFORU5UX05PVElDRVNfU1RBVEVfS0VZID0gJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50OnBlcm1hbmVudC1ub3RpY2VzJztcbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gMDtcbmNvbnN0IERFRkFVTFRfREVMQVlfQkVGT1JFX1NIT1dfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuXG4vLyBFbGVtZW50cyBhIHVzZXIgY2xpY2tzIHRvIGFjdCBvbiB0aGVtIHJhdGhlciB0aGFuIHRvIGRpc21pc3MgdGhlIG5vdGljZS4gQSBjbGljayBsYW5kaW5nIG9uIChvclxuLy8gSW5zaWRlKSBvbmUgb2YgdGhlc2UgaXMga2VwdCBmcm9tIGJ1YmJsaW5nIHRvIHRoZSBub3RpY2UsIHNvIHRoZSBub3RpY2Ugc3RheXMgb3Blbi5cbmNvbnN0IElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IgPSAnYSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgbGFiZWwsIFtjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdLCBbcm9sZT1cImJ1dHRvblwiXSwgW3JvbGU9XCJsaW5rXCJdLCBbcm9sZT1cImNoZWNrYm94XCJdLCBbcm9sZT1cInRhYlwiXSwgW3JvbGU9XCJtZW51aXRlbVwiXSc7XG5cbi8qKlxuICogVGhlIGV2ZW50IHBhc3NlZCB0byB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25DbG9zZUNsaWNrfSB3aGVuIHRoZSBub3RpY2Unc1xuICogY2xvc2UgKFgpIGJ1dHRvbiBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCB7XG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSBjbG9zZSwgbGVhdmluZyB0aGUgbm90aWNlIG9wZW4uXG4gICAqL1xuICBjYW5jZWwoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZSB0byBhIGRlbGF5ZWQgbm90aWNlIGNyZWF0ZWQgYnkge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheX0uIEl0IGlzIGFcbiAqIHtAbGluayBEaXNwb3NhYmxlfSAoc28gaXQgY2FuIGJlIHVzZWQgd2l0aCBgdXNpbmdgKSB0aGF0IGFsc28gbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIHRoZVxuICogbm90aWNlIGlzIHNob3duLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2UgZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBub3RpY2UgY29udGVudCwgcmUtYXBwbHlpbmcgdGhlIHBsdWdpbi1uYW1lIHByZWZpeCwgdGhlIGludGVyYWN0aXZlLWNsaWNrIGd1YXJkLCBhbmRcbiAgICogdGhlIENhbmNlbCBidXR0b24uIFVzZWZ1bCBmb3IgcmVwb3J0aW5nIHByb2dyZXNzLiBJZiB0aGUgZGVsYXkgaGFzIG5vdCBlbGFwc2VkIHlldCwgdGhlIG5ldyBjb250ZW50XG4gICAqIGJlY29tZXMgd2hhdCBpcyBzaG93biBvbmNlIGl0IGRvZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIG5ldyBub3RpY2UgY29udGVudC5cbiAgICovXG4gIHNldENvbnRlbnQoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBwcm92aWRlZCwgYSBDYW5jZWwgYnV0dG9uIGlzIGFwcGVuZGVkIHRvIHRoZSBub3RpY2U7IGNsaWNraW5nIGl0IGFib3J0cyB0aGlzIGNvbnRyb2xsZXIuIFdoZW5cbiAgICogb21pdHRlZCwgbm8gQ2FuY2VsIGJ1dHRvbiBpcyBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgb2YgdGhlIENhbmNlbCBidXR0b24gc2hvd24gd2hlbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMuYWJvcnRDb250cm9sbGVyfVxuICAgKiBpcyBwcm92aWRlZC4gV2hlbiBvbWl0dGVkLCB0aGUgbG9jYWxpemVkIGBDYW5jZWxgIGxhYmVsIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIGNvbnRlbnQsIHJlc29sdmVkIGxhemlseSBvbmx5IGlmIHRoZSBkZWxheSBlbGFwc2VzIFx1MjAxNCBzbyBhbiBvcGVyYXRpb24gdGhhdCBmaW5pc2hlc1xuICAgKiBzb29uZXIgbmV2ZXIgYnVpbGRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogSG93IGxvbmcgdGhlIG9wZXJhdGlvbiBtdXN0IHJ1biBiZWZvcmUgdGhlIG5vdGljZSBpcyBzaG93bi4gT3BlcmF0aW9ucyB0aGF0IGZpbmlzaCBzb29uZXIgbmV2ZXJcbiAgICogc2hvdyBhIG5vdGljZSwgYXZvaWRpbmcgYSBkaXN0cmFjdGluZyBmbGFzaC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugc2hvdWxkIHN0YXkgdW50aWwgaXQgaXMgcmVwbGFjZWQsIHRoZSBwbHVnaW4gaXMgcmVsb2FkZWQsIG9yIHRoZSB1c2VyIGRpc21pc3NlcyBpdC5cbiAgICpcbiAgICogQSBwZXJtYW5lbnQgbm90aWNlIGlzIHNob3duIHdpdGggYW4gaW5maW5pdGUgZHVyYXRpb24gYW5kIGlzIG5vdCBoaWRkZW4gd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMsIHNvIGl0IGNhblxuICAgKiBjb21tdW5pY2F0ZSBzdGF0ZSB0aGF0IG91dGxpdmVzIHRoZSBwbHVnaW4gKGUuZy4gYSBjbGVhbnVwIHRoYXQgcmVxdWlyZXMgYSByZWxvYWQpLiBUaGVyZSBpcyBhdCBtb3N0IG9uZSBwZXJtYW5lbnRcbiAgICogbm90aWNlIHBlciBwbHVnaW46IGl0IGlzIGhpZGRlbiBieSB0aGUgbmV4dCB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9IGNhbGwgYW5kIGRpc21pc3NlZFxuICAgKiBhdXRvbWF0aWNhbGx5IHRoZSBuZXh0IHRpbWUgdGhlIGNvbXBvbmVudCBsb2FkcyAoaS5lLiB3aGVuIHRoZSBwbHVnaW4gaXMgcmUtZW5hYmxlZCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUGVybWFuZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIG9jY3VwaWVzIHRoZSBzaW5nbGUgcGVyLXBsdWdpbiByZXVzYWJsZSBzbG90LlxuICAgKlxuICAgKiBBIHJldXNhYmxlIG5vdGljZSB0YWtlcyB0aGUgc2hhcmVkIHNsb3Q6IHRoZSBuZXh0IHJldXNhYmxlIG5vdGljZSBoaWRlcyBpdCwgYW5kIGl0IGlzIGhpZGRlbiBvbiB1bmxvYWQuXG4gICAqIEEgbm9uLXJldXNhYmxlIChzdGFuZGFsb25lKSBub3RpY2UgaXMgbm90IHBsYWNlZCBpbiB0aGUgc2xvdCBcdTIwMTQgaXQgbmV2ZXIgaGlkZXMsIGFuZCBpcyBuZXZlciBoaWRkZW4gYnksIGFcbiAgICogcmV1c2FibGUgbm90aWNlOyBtdWx0aXBsZSBzdGFuZGFsb25lIG5vdGljZXMgY29leGlzdC4gU3RhbmRhbG9uZSBub3RpY2VzIGFyZSBzdGlsbCBoaWRkZW4gdG9nZXRoZXIgb24gdW5sb2FkLlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgbXVzdCBiZSByZXVzYWJsZSAoe0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLmlzUGVybWFuZW50fSBpbXBsaWVzXG4gICAqIGBpc1JldXNhYmxlYCk7IHBhc3NpbmcgYGlzUmV1c2FibGU6IGZhbHNlYCB0b2dldGhlciB3aXRoIGBpc1Blcm1hbmVudDogdHJ1ZWAgdGhyb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUmV1c2FibGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGNsb3NlIChYKSBidXR0b24sIGJlZm9yZSB0aGUgbm90aWNlIGlzIGhpZGRlbi4gQ2FsbFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50LmNhbmNlbH0gb24gdGhlIGV2ZW50IHRvIGNhbmNlbCB0aGUgY2xvc2UgYW5kIGtlZXAgdGhlIG5vdGljZVxuICAgKiBvcGVuIFx1MjAxNCBmb3IgZXhhbXBsZSBhZnRlciB5b3VyIG93biBjb25maXJtYXRpb24gZGVjbGluZXMuIEFuIGFzeW5jIGNhbGxiYWNrIGlzIGF3YWl0ZWQgYmVmb3JlIHRoZVxuICAgKiBub3RpY2UgaXMgaGlkZGVuLiBSdW5zIG9ubHkgd2hlbiBhIGNsb3NlIGJ1dHRvbiBpcyBzaG93biAoYm90aFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkSGlkZU9uQ2xpY2t9IGA9IGZhbHNlYCBhbmRcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZFNob3dDbG9zZUJ1dHRvbn0gYXJlIHNldCkuXG4gICAqL1xuICBvbkNsb3NlQ2xpY2s/KHRoaXM6IHZvaWQsIGV2ZW50OiBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQpOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgbm90aWNlIGlzIGhpZGRlbiBcdTIwMTQgd2hldGhlciBieSB0aGUgdXNlciBjbG9zaW5nIGl0LCBieSBhIGxhdGVyIHJldXNhYmxlXG4gICAqIG5vdGljZSByZXBsYWNpbmcgaXQsIGJ5IGl0cyBkdXJhdGlvbiBlbGFwc2luZywgb3Igb24gY29tcG9uZW50IHVubG9hZC4gSXQgcnVucyBhdCBtb3N0IG9uY2UgcGVyXG4gICAqIG5vdGljZS4gVGhlIHtAbGluayBQbHVnaW5Ob3RpY2VIaWRlSW5mb30gYXJndW1lbnQgZGlzdGluZ3Vpc2hlcyBhIHVzZXIgY2xvc2UgKHRoZSBjbG9zZSBidXR0b24pIGZyb21cbiAgICogYSBwcm9ncmFtbWF0aWMgaGlkZS4gQW4gYXN5bmMgY2FsbGJhY2sgaXMgcnVuIGZpcmUtYW5kLWZvcmdldCAoaXRzIHJlamVjdGlvbiBzdXJmYWNlcyB0aHJvdWdoIHRoZVxuICAgKiBhc3luYy1lcnJvciBwaXBlbGluZSkuXG4gICAqL1xuICBvbkhpZGU/KHRoaXM6IHZvaWQsIGluZm86IFBsdWdpbk5vdGljZUhpZGVJbmZvKTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogV2hldGhlciBjbGlja2luZyB0aGUgbm90aWNlIGhpZGVzIGl0LiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCB0aGUgbm90aWNlIGRpc21pc3NlcyBvbiBjbGljayBsaWtlXG4gICAqIGEgbm9ybWFsIE9ic2lkaWFuIG5vdGljZS4gV2hlbiBgZmFsc2VgLCB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IGl0IGRvZXMgbm90IGRpc21pc3Mgb24gYW55IHN0cmF5XG4gICAqIGNsaWNrLCBhbmQgaW5zdGVhZCBzaG93cyBhIGNsb3NlIChYKSBidXR0b24gdGhhdCBoaWRlcyBpdCBkaXJlY3RseSAoc2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRTaG93Q2xvc2VCdXR0b259IGFuZFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25DbG9zZUNsaWNrfSkuXG4gICAqXG4gICAqIEEgYHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZWAgbm90aWNlIGlzIHNob3duIHdpdGggYW4gaW5maW5pdGUgZHVyYXRpb24gYW5kIGlzIHN0YW5kYWxvbmUgKGltcGxpZXNcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLmlzUmV1c2FibGV9IGA9IGZhbHNlYCksIHNvIGEgbGF0ZXIgbm90aWNlIG5ldmVyXG4gICAqIHNpbGVudGx5IHJlcGxhY2VzIGl0OyBwYXNzaW5nIGBpc1JldXNhYmxlOiB0cnVlYCB0b2dldGhlciB3aXRoIGBzaG91bGRIaWRlT25DbGljazogZmFsc2VgIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIaWRlT25DbGljaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNsb3NlIChYKSBidXR0b24gaXMgc2hvd24gb24gYSBoYXJkLXRvLWNsb3NlIG5vdGljZVxuICAgKiAoe0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZEhpZGVPbkNsaWNrfSBgPSBmYWxzZWApLiBXaGVuIGBmYWxzZWAsIG5vIGNsb3NlXG4gICAqIGJ1dHRvbiBpcyByZW5kZXJlZCBhbmQgdGhlIG5vdGljZSBjYW4gb25seSBiZSBoaWRkZW4gcHJvZ3JhbW1hdGljYWxseS4gSWdub3JlZCB1bmxlc3NcbiAgICogYHNob3VsZEhpZGVPbkNsaWNrYCBpcyBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHdoeSBhIG5vdGljZSB3YXMgaGlkZGVuLCBwYXNzZWQgdG8ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uSGlkZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlSGlkZUluZm8ge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIHdhcyBoaWRkZW4gYnkgdGhlIHVzZXIgY2xpY2tpbmcgaXRzIGNsb3NlIChYKSBidXR0b24gc3BlY2lmaWNhbGx5LiBBbHdheXMgaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlSGlkZUluZm8uaXNVc2VyQWN0aW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGlzQ2xvc2VCdXR0b25DbGlja2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugd2FzIGhpZGRlbiBieSBhIHVzZXIgYWN0aW9uIFx1MjAxNCBjbGlja2luZyB0aGUgY2xvc2UgKFgpIGJ1dHRvbiwgb3IgY2xpY2tpbmcgYVxuICAgKiBkaXNtaXNzaWJsZSBub3RpY2UgdG8gZGlzbWlzcyBpdCBcdTIwMTQgYXMgb3Bwb3NlZCB0byBwcm9ncmFtbWF0aWNhbGx5IChhIGxhdGVyIHJldXNhYmxlIG5vdGljZSByZXBsYWNpbmdcbiAgICogaXQsIGFuIGV4cGxpY2l0IGBoaWRlKClgLCB0aGUgZHVyYXRpb24gZWxhcHNpbmcsIG9yIGNvbXBvbmVudCB1bmxvYWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNVc2VyQWN0aW9uOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kQ2xvc2VCdXR0b25QYXJhbXMge1xuICByZWFkb25seSBjb250ZW50RWw6IEhUTUxFbGVtZW50O1xuICBnZXROb3RpY2UodGhpczogdm9pZCk6IE5vdGljZSB8IG51bGw7XG4gIG9uQ2xvc2VDbGljaz8odGhpczogdm9pZCwgZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCk6IFByb21pc2FibGU8dm9pZD47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBub3RpY2UgdGhpcyBjb250ZW50IGJlbG9uZ3MgdG8sIHVzZWQgYnkgdGhlIGNsb3NlIGJ1dHRvbidzIGhhbmRsZXIuIFRoZSBub3RpY2UgZG9lc1xuICAgKiBub3QgZXhpc3QgeWV0IHdoZW4gdGhlIGNvbnRlbnQgaXMgYnVpbHQsIHNvIGl0IGlzIHJlc29sdmVkIGxhemlseSBhdCBjbGljayB0aW1lLiBSZXF1aXJlZCB3aGVuIGFcbiAgICogY2xvc2UgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgZ2V0Tm90aWNlPyh0aGlzOiB2b2lkKTogTm90aWNlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgcGx1Z2luIG5hbWUgcHJlZml4LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjbG9zZSBidXR0b24gaXMgY2xpY2tlZDsgbWF5IGNhbmNlbCB0aGUgY2xvc2UuIFNlZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25DbG9zZUNsaWNrfS5cbiAgICovXG4gIG9uQ2xvc2VDbGljaz8odGhpczogdm9pZCwgZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBzdG9wcyBldmVyeSBjbGljayBmcm9tIGRpc21pc3NpbmcgaXQgYW5kLCB1bmxlc3Mgc3VwcHJlc3NlZCBieVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zLnNob3VsZFNob3dDbG9zZUJ1dHRvbn0sIGFkZHMgYSBjbG9zZSBidXR0b24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzRXhwbGljaXRDbG9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBjbG9zZSBidXR0b24gd2hlbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zLnJlcXVpcmVzRXhwbGljaXRDbG9zZX0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBpc1JldXNhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBvbkNsb3NlQ2xpY2s6ICgodGhpczogdm9pZCwgZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9uSGlkZTogKCh0aGlzOiB2b2lkLCBpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHJlcXVpcmVzRXhwbGljaXRDbG9zZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgc2hvd2luZyBwbHVnaW4gbm90aWNlcy4gQXV0b21hdGljYWxseSBoaWRlcyB0aGUgcHJldmlvdXMgbm90aWNlIHdoZW4gYSBuZXcgb25lIGlzIHNob3duLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTm90aWNlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBuYW1lIChzaG93biBhcyBwcmVmaXggaW4gbm90aWNlcykuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xvc2VCdXR0b25DbGlja2VkTm90aWNlcyA9IG5ldyBXZWFrU2V0PE5vdGljZT4oKTtcbiAgcHJpdmF0ZSBub3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRhbG9uZU5vdGljZXMgPSBuZXcgU2V0PE5vdGljZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VyQ2xpY2tlZE5vdGljZXMgPSBuZXcgV2Vha1NldDxOb3RpY2U+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gcGFyYW1zLnBsdWdpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBwZXJtYW5lbnQgbm90aWNlIGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgbG9hZCAoZS5nLiBhIHByZXZpb3VzIHBsdWdpbiBzZXNzaW9uKSBvbiBsb2FkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcbiAgICBjb25zdCBwZXJtYW5lbnROb3RpY2UgPSB0aGlzLmdldFBlcm1hbmVudE5vdGljZSgpO1xuICAgIHBlcm1hbmVudE5vdGljZT8uaGlkZSgpO1xuICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBjdXJyZW50IG5vdGljZSBvbiB1bmxvYWQsIHVubGVzcyBpdCBpcyB0aGUgcGVybWFuZW50IG5vdGljZSAod2hpY2ggaXMgbWVhbnQgdG8gb3V0bGl2ZSB0aGUgcGx1Z2luKS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICAvLyBDYW5jZWwgYW55IGRlbGF5ZWQgbm90aWNlIHdob3NlIHRpbWVyIGhhcyBub3QgZmlyZWQgeWV0LCBzbyBpdCBuZXZlciBhcHBlYXJzIGFmdGVyIHVubG9hZC5cbiAgICBmb3IgKGNvbnN0IGNhbmNlbFBlbmRpbmdUaW1lciBvZiBbLi4udGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zXSkge1xuICAgICAgY2FuY2VsUGVuZGluZ1RpbWVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFBlcm1hbmVudE5vdGljZSgpICE9PSB0aGlzLm5vdGljZSkge1xuICAgICAgdGhpcy5ub3RpY2U/LmhpZGUoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGFuZGFsb25lTm90aWNlIG9mIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMpIHtcbiAgICAgIHN0YW5kYWxvbmVOb3RpY2UuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYSBub3RpY2UgbWVzc2FnZSB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIHRoZSBub3RpY2UuXG4gICAqIEByZXR1cm5zIFRoZSBub3RpY2Ugb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZywgb3B0aW9ucz86IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zKTogTm90aWNlIHtcbiAgICBjb25zdCBpc1Blcm1hbmVudCA9IG9wdGlvbnM/LmlzUGVybWFuZW50ID8/IGZhbHNlO1xuICAgIGNvbnN0IHNob3VsZEhpZGVPbkNsaWNrID0gb3B0aW9ucz8uc2hvdWxkSGlkZU9uQ2xpY2sgPz8gdHJ1ZTtcbiAgICBjb25zdCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPSAhc2hvdWxkSGlkZU9uQ2xpY2s7XG4gICAgY29uc3QgaXNSZXVzYWJsZSA9IG9wdGlvbnM/LmlzUmV1c2FibGUgPz8gIXJlcXVpcmVzRXhwbGljaXRDbG9zZTtcblxuICAgIGlmIChvcHRpb25zPy5pc1JldXNhYmxlID09PSB0cnVlICYmIHJlcXVpcmVzRXhwbGljaXRDbG9zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIG5vdGljZSB0aGF0IGRvZXMgbm90IGhpZGUgb24gY2xpY2sgY2Fubm90IGJlIHJldXNhYmxlLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaXNSZXVzYWJsZSA9PT0gZmFsc2UgJiYgaXNQZXJtYW5lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBwZXJtYW5lbnQgbm90aWNlIG11c3QgYmUgcmV1c2FibGUuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGlzUGVybWFuZW50IHx8IHJlcXVpcmVzRXhwbGljaXRDbG9zZSA/IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zaG93Tm90aWNlV2l0aER1cmF0aW9uKHtcbiAgICAgIGR1cmF0aW9uSW5NaWxsaXNlY29uZHMsXG4gICAgICBpc1JldXNhYmxlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9uQ2xvc2VDbGljazogb3B0aW9ucz8ub25DbG9zZUNsaWNrLFxuICAgICAgb25IaWRlOiBvcHRpb25zPy5vbkhpZGUsXG4gICAgICByZXF1aXJlc0V4cGxpY2l0Q2xvc2UsXG4gICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBpc1Blcm1hbmVudCxcbiAgICAgIHNob3VsZFNob3dDbG9zZUJ1dHRvbjogb3B0aW9ucz8uc2hvdWxkU2hvd0Nsb3NlQnV0dG9uID8/IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhIG5vdGljZSBkZXNjcmliaW5nIGEgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiwgYnV0IG9ubHkgb25jZSB0aGUgb3BlcmF0aW9uIGhhcyBydW4gZm9yIGxvbmdlclxuICAgKiB0aGFuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5kZWxheUluTWlsbGlzZWNvbmRzfSBcdTIwMTQgc28gb3BlcmF0aW9uc1xuICAgKiB0aGF0IGZpbmlzaCBzb29uZXIgbmV2ZXIgZmxhc2ggYSBub3RpY2UuIFRoZSBub3RpY2Ugc3RheXMgdW50aWwgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBpc1xuICAgKiBkaXNwb3NlZCAod2hpY2ggYWxzbyBjYW5jZWxzIHRoZSBwZW5kaW5nIHRpbWVyIGlmIGl0IGhhcyBub3QgZmlyZWQgeWV0KSwgc28gaXQgY2FuIGJlIHVzZWQgd2l0aFxuICAgKiBgdXNpbmdgLiBXaGVuIGFuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9IGlzIGdpdmVuLCBhXG4gICAqIENhbmNlbCBidXR0b24gdGhhdCBhYm9ydHMgaXQgaXMgYXBwZW5kZWQgKGFuZCwgYmVpbmcgaW50ZXJhY3RpdmUsIGRvZXMgbm90IGRpc21pc3MgdGhlIG5vdGljZSkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIHVzaW5nIF9ub3RpY2UgPSBwbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZUFmdGVyRGVsYXkoe1xuICAgKiAgIGFib3J0Q29udHJvbGxlcixcbiAgICogICBjb250ZW50OiAoKSA9PiBidWlsZFByb2dyZXNzRnJhZ21lbnQoKVxuICAgKiB9KTtcbiAgICogYXdhaXQgcnVuT3BlcmF0aW9uKGFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlfSB0aGF0IGhpZGVzIHRoZSBub3RpY2UgKG9yIGNhbmNlbHMgdGhlIHBlbmRpbmdcbiAgICogdGltZXIpIHdoZW4gZGlzcG9zZWQgYW5kIGxldHMgdGhlIGNvbnRlbnQgYmUgdXBkYXRlZCB3aGlsZSBpdCBpcyBzaG93bi5cbiAgICovXG4gIHB1YmxpYyBzaG93Tm90aWNlQWZ0ZXJEZWxheShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zKTogUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSB7XG4gICAgbGV0IHNob3duTm90aWNlOiBOb3RpY2UgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaXNEaXNwb3NlZCA9IGZhbHNlO1xuICAgIGxldCB0aW1lcklkID0gMDtcbiAgICBsZXQgY3VycmVudENvbnRlbnQ6IFZhbHVlUHJvdmlkZXI8RG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZz4gPSBwYXJhbXMuY29udGVudDtcblxuICAgIGNvbnN0IGNhbmNlbFBlbmRpbmdUaW1lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICB0aGlzLnBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMuZGVsZXRlKGNhbmNlbFBlbmRpbmdUaW1lcik7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRGVsYXllZE1lc3NhZ2UgPSAoY29udGVudDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQgPT5cbiAgICAgIHRoaXMuYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGREZWxheWVkTm90aWNlTWVzc2FnZVBhcmFtcz4oe1xuICAgICAgICBhYm9ydENvbnRyb2xsZXI6IHBhcmFtcy5hYm9ydENvbnRyb2xsZXIsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHBhcmFtcy5jYW5jZWxCdXR0b25UZXh0LFxuICAgICAgICBjb250ZW50XG4gICAgICB9KSk7XG5cbiAgICB0aW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2FuY2VsUGVuZGluZ1RpbWVyKCk7XG4gICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkQ29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShjdXJyZW50Q29udGVudCwge30pO1xuICAgICAgICAvLyBUaGUgaGFuZGxlIG1heSBoYXZlIGJlZW4gZGlzcG9zZWQgd2hpbGUgdGhlIGNvbnRlbnQgd2FzIGJlaW5nIHJlc29sdmVkOyBkb24ndCBzaG93IGEgc3RhbGUgbm90aWNlLlxuICAgICAgICBpZiAoaXNEaXNwb3NlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzaG93bk5vdGljZSA9IHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICAgICAgZHVyYXRpb25Jbk1pbGxpc2Vjb25kczogUEVSTUFORU5UX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgaXNSZXVzYWJsZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKHJlc29sdmVkQ29udGVudCksXG4gICAgICAgICAgb25DbG9zZUNsaWNrOiB1bmRlZmluZWQsXG4gICAgICAgICAgb25IaWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlOiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBmYWxzZSxcbiAgICAgICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBwYXJhbXMuZGVsYXlJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0RFTEFZX0JFRk9SRV9TSE9XX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICB0aGlzLnBlbmRpbmdUaW1lckNhbmNlbGxhdGlvbnMuYWRkKGNhbmNlbFBlbmRpbmdUaW1lcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2V0Q29udGVudDogKGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgY3VycmVudENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICAvLyBSZS13cmFwIHNvIHRoZSBwcmVmaXgsIGludGVyYWN0aXZlIGd1YXJkLCBhbmQgQ2FuY2VsIGJ1dHRvbiBzdXJ2aXZlIHRoZSBjb250ZW50IHN3YXAuXG4gICAgICAgIHNob3duTm90aWNlPy5zZXRNZXNzYWdlKHRoaXMuYnVpbGROb3RpY2VDb250ZW50KHsgbWVzc2FnZTogYnVpbGREZWxheWVkTWVzc2FnZShjb250ZW50KSB9KSk7XG4gICAgICB9LFxuICAgICAgW1N5bWJvbC5kaXNwb3NlXTogKCk6IHZvaWQgPT4ge1xuICAgICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgICAgY2FuY2VsUGVuZGluZ1RpbWVyKCk7XG4gICAgICAgIHNob3duTm90aWNlPy5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLm5vdGljZSA9PT0gc2hvd25Ob3RpY2UpIHtcbiAgICAgICAgICB0aGlzLm5vdGljZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYSBjbG9zZSAoWCkgYnV0dG9uIHRvIHRoZSBub3RpY2UgY29udGVudC4gQ2xpY2tpbmcgaXQgZmlyZXNcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZENsb3NlQnV0dG9uUGFyYW1zLm9uQ2xvc2VDbGlja30gKHdoaWNoIG1heSBjYW5jZWwgdGhlIGNsb3NlKTsgaWZcbiAgICogbm90IGNhbmNlbGxlZCwgaXQgaGlkZXMgdGhlIG5vdGljZSBhbmQgZHJvcHMgaXQgZnJvbSB0aGUgc3RhbmRhbG9uZS1ub3RpY2UgdHJhY2tpbmcgc2V0LiBUaGUgaGlkZSBpc1xuICAgKiBtYXJrZWQgYXMgYSBjbG9zZS1idXR0b24gY2xpY2sgc28ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uSGlkZX0gY2FuXG4gICAqIGRpc3Rpbmd1aXNoIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZENsb3NlQnV0dG9uKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kQ2xvc2VCdXR0b25QYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCwgZ2V0Tm90aWNlLCBvbkNsb3NlQ2xpY2sgfSA9IHBhcmFtcztcbiAgICBjb25zdCBjbG9zZUJ1dHRvbkVsID0gY29udGVudEVsLmNyZWF0ZUVsKCdidXR0b24nLCB7XG4gICAgICBhdHRyOiB7ICdhcmlhLWxhYmVsJzogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm5vdGljZXMuY2xvc2VBcmlhTGFiZWwpIH1cbiAgICB9KTtcbiAgICAvLyBSZXVzZSBPYnNpZGlhbidzIG1vZGFsIGNsb3NlLWJ1dHRvbiBjbGFzc2VzIHNvIHRoaXMgYnV0dG9uIG1hdGNoZXMgdGhlIG5hdGl2ZSBtb2RhbCBjbG9zZSBidXR0b25cbiAgICAvLyAobG9vayBhbmQgaG92ZXIpOyB0aGUgc3R5bGVzaGVldCBvbmx5IHBvc2l0aW9ucyBpdCBpbiB0aGUgbm90aWNlIGNvcm5lci5cbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNsb3NlQnV0dG9uRWwsIENzc0NsYXNzLlBsdWdpbk5vdGljZUNsb3NlQnV0dG9uKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZENsYXNzZXMoW0Nzc0NsYXNzLkNsaWNrYWJsZUljb24sIENzc0NsYXNzLk1vZGFsSGVhZGVyQnV0dG9uXSk7XG4gICAgc2V0SWNvbihjbG9zZUJ1dHRvbkVsLCAneCcpO1xuICAgIGNsb3NlQnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBpc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBvbkNsb3NlQ2xpY2s/Lih7XG4gICAgICAgICAgY2FuY2VsOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gQ2FuIGJlIGNhbmNlbGxlZCBieSB0aGUgdXNlci5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdGljZSA9IGVuc3VyZU5vbk51bGxhYmxlKGdldE5vdGljZSgpKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbkNsaWNrZWROb3RpY2VzLmFkZChub3RpY2UpO1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBtZXNzYWdlIGZvciBhIGRlbGF5ZWQgbm90aWNlOiB0aGUgcmVzb2x2ZWQgY29udGVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIENhbmNlbFxuICAgKiBidXR0b24gdGhhdCBhYm9ydHMgdGhlIHByb3ZpZGVkIGNvbnRyb2xsZXIgd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IGhvbGRpbmcgdGhlIGNvbnRlbnQgYW5kLCBpZiByZXF1ZXN0ZWQsIGEgQ2FuY2VsIGJ1dHRvbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxheWVkTm90aWNlTWVzc2FnZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCB7IGFib3J0Q29udHJvbGxlciwgY2FuY2VsQnV0dG9uVGV4dCwgY29udGVudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAvLyBgQnV0dG9uQ29tcG9uZW50YCByZXF1aXJlcyBhbiBgSFRNTEVsZW1lbnRgIHBhcmVudCwgc28gYnVpbGQgaXQgb24gYSB0aHJvd2F3YXlcbiAgICAgIC8vIERldGFjaGVkIGVsZW1lbnQgYW5kIG1vdmUgaXRzIGBidXR0b25FbGAgaW50byB0aGUgZnJhZ21lbnQuXG4gICAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNyZWF0ZURpdigpKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KGNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNhbmNlbEJ1dHRvbi5idXR0b25FbCwgQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgICAgIC8vIFRoZSBjbGljayBpcyB3aXJlZCB2aWEgYGFkZEV2ZW50TGlzdGVuZXJgIHJhdGhlciB0aGFuIGBCdXR0b25Db21wb25lbnQub25DbGlja2Agc28gaXRcbiAgICAgIC8vIEJ1YmJsZXMgdGhyb3VnaCB0aGUgaW50ZXJhY3RpdmUtZWxlbWVudCBndWFyZCAoa2VlcGluZyB0aGUgbm90aWNlIG9wZW4pIGFuZCBzdGF5c1xuICAgICAgLy8gRGlyZWN0bHkgZXhlcmNpc2FibGUgdmlhIGEgZGlzcGF0Y2hlZCBET00gZXZlbnQgaW4gdW5pdCB0ZXN0cy5cbiAgICAgIGNhbmNlbEJ1dHRvbi5idXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9KTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCwgcHJlZml4ZWQgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWNlQ29udGVudChwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgZ2V0Tm90aWNlLCBtZXNzYWdlLCBvbkNsb3NlQ2xpY2ssIHJlcXVpcmVzRXhwbGljaXRDbG9zZSA9IGZhbHNlLCBzaG91bGRTaG93Q2xvc2VCdXR0b24gPSB0cnVlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICAgIGNvbnN0IGNvbnRlbnRFbCA9IGZyYWdtZW50LmNyZWF0ZURpdigpO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY29udGVudEVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VDb250ZW50KTtcbiAgICBjb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5idWlsZFByZWZpeGVkTWVzc2FnZShtZXNzYWdlKSk7XG4gICAgY29udGVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgLy8gQSBoYXJkLXRvLWNsb3NlIG5vdGljZSBtdXN0IG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheSBjbGljazsgb25seSBpdHMgY2xvc2UgYnV0dG9uIG1heSBoaWRlIGl0LlxuICAgICAgaWYgKHJlcXVpcmVzRXhwbGljaXRDbG9zZSkge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiBldnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVpcmVzRXhwbGljaXRDbG9zZSAmJiBzaG91bGRTaG93Q2xvc2VCdXR0b24pIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2xvc2VCdXR0b24obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZENsb3NlQnV0dG9uUGFyYW1zPih7XG4gICAgICAgIGNvbnRlbnRFbCxcbiAgICAgICAgZ2V0Tm90aWNlOiBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UpLFxuICAgICAgICBvbkNsb3NlQ2xpY2tcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbm90aWNlIGNvbnRlbnQsIHByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBhIHN0eWxlZCBlbGVtZW50IHNvIGl0IGlzXG4gICAqIHZpc3VhbGx5IGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbWVzc2FnZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gd2l0aCB0aGUgc3R5bGVkIHBsdWdpbiBuYW1lIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBuYW1lRWwgPSBjcmVhdGVTcGFuKHsgdGV4dDogdGhpcy5wbHVnaW5OYW1lIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobmFtZUVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VOYW1lKTtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuYW1lRWwpO1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgKHVubG9hZGVkKScpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdcXG4nKTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2UoKTogTm90aWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpLmdldCh0aGlzLnBsdWdpbk5hbWUpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZXMoKTogTWFwPHN0cmluZywgTm90aWNlPiB7XG4gICAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxNYXA8c3RyaW5nLCBOb3RpY2U+PihQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVksIG5ldyBNYXA8c3RyaW5nLCBOb3RpY2U+KCkpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgbm90aWNlIGhhcmQgdG8gY2xvc2U6IG1hcmtzIGl0cyBvdXRlciBlbGVtZW50IChzbyB0aGUgQ1NTIG5ldXRyYWxpemVzIGl0cyBwYWRkaW5nKSBhbmRcbiAgICogaW5zdGFsbHMgYSBjYXB0dXJlLXBoYXNlIGNsaWNrIGd1YXJkIHRoYXQgc3RvcHMgZXZlcnkgY2xpY2sgZXhjZXB0IG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgKGFcbiAgICogYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3Mgb3duIGRpc21pc3MgaGFuZGxlciBcdTIwMTQgc28gYW5cbiAgICogaW50ZXJhY3RpdmUgY2hpbGQncyBvd24gaGFuZGxlciBzdGlsbCBydW5zIHdoaWxlIGEgc3RyYXkgY2xpY2sgY2Fubm90IGRpc21pc3MgdGhlIG5vdGljZS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2UgdG8gZ3VhcmQuXG4gICAqIEBwYXJhbSByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgLSBXaGV0aGVyIHRoZSBub3RpY2UgcmVxdWlyZXMgZXhwbGljaXQgY2xvc2U7IHdoZW4gYGZhbHNlYCwgbm90aGluZyBpc1xuICAgKiBpbnN0YWxsZWQuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxFeHBsaWNpdENsb3NlR3VhcmRzKG5vdGljZTogTm90aWNlLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXJlcXVpcmVzRXhwbGljaXRDbG9zZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgb3V0ZXIgYC5ub3RpY2VgIGVsZW1lbnQgKGBjb250YWluZXJFbGApIGNhcnJpZXMgT2JzaWRpYW4ncyBkaXNtaXNzLW9uLWNsaWNrIGhhbmRsZXIgYW5kIHRoZVxuICAgIC8vIFBhZGRpbmcgYSBzdHJheSBjbGljayBjb3VsZCBsYW5kIG9uOyBtYXJrIGl0IHNvIHRoZSBzdHlsZXNoZWV0IGRyb3BzIHRoYXQgcGFkZGluZy5cbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG5vdGljZS5jb250YWluZXJFbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlUmVxdWlyZXNFeHBsaWNpdENsb3NlKTtcbiAgICAvLyBTdG9wIGV2ZXJ5IGNsaWNrIG9uIHRoZSBub3RpY2UgXHUyMDE0IGV4Y2VwdCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IFx1MjAxNCBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3NcbiAgICAvLyBEaXNtaXNzIGhhbmRsZXIuIFJlZ2lzdGVyZWQgaW4gdGhlIGNhcHR1cmUgcGhhc2Ugb24gdGhlIG91dGVybW9zdCBlbGVtZW50IHNvIGl0IGFsd2F5cyBydW5zIGZpcnN0LlxuICAgIC8vIExldHRpbmcgYSBjbGljayByZWFjaCBhbiBpbnRlcmFjdGl2ZSBjaGlsZCAoYSBidXR0b24sIGxpbmssIHRoZSBjbG9zZSBidXR0b24sIGV0Yy4pIGlzIHdoYXQga2VlcHNcbiAgICAvLyBJdHMgb3duIGhhbmRsZXIgd29ya2luZzsgdGhlIGJ1YmJsZS1waGFzZSBndWFyZCBvbiB0aGUgY29udGVudCB3cmFwcGVyIHRoZW4gc3RvcHMgdGhhdCBjbGljayBmcm9tXG4gICAgLy8gQnViYmxpbmcgdXAgdG8gT2JzaWRpYW4ncyBkaXNtaXNzIGhhbmRsZXIsIHNvIHRoZSBub3RpY2Ugc3RpbGwgc3RheXMgb3Blbi5cbiAgICBub3RpY2UuY29udGFpbmVyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICBpZiAoZXZ0LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgZXZ0LnRhcmdldC5jbG9zZXN0KElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tzIGEgY2xpY2sgb24gdGhlIG5vdGljZSBzbyB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25IaWRlfSBjYW4gcmVwb3J0IGFcbiAgICogdXNlciBkaXNtaXNzYWwuIE9ic2lkaWFuIGhpZGVzIGEgZGlzbWlzc2libGUgbm90aWNlIHN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZSBjbGljaywgc28gYVxuICAgKiBjYXB0dXJlLXBoYXNlIGxpc3RlbmVyIG1hcmtzIHRoZSBub3RpY2UgYmVmb3JlIHRoYXQgaGlkZSBydW5zOyB0aGUgbWFyayBpcyBjbGVhcmVkIGFmdGVyIHRoZSBldmVudFxuICAgKiBzbyBhIGxhdGVyIHByb2dyYW1tYXRpYyBoaWRlIGlzIG5vdCBtaXNhdHRyaWJ1dGVkLiBBIGNsb3NlLWJ1dHRvbiBjbGljayBpcyB0cmFja2VkIHNlcGFyYXRlbHkgKHNlZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LmFwcGVuZENsb3NlQnV0dG9ufSkuXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHRvIHRyYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsVXNlckNsaWNrVHJhY2tpbmcobm90aWNlOiBOb3RpY2UpOiB2b2lkIHtcbiAgICBub3RpY2UuY29udGFpbmVyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAvLyBPYnNpZGlhbiBkaXNtaXNzZXMgYSBkaXNtaXNzaWJsZSBub3RpY2Ugc3luY2hyb25vdXNseSBkdXJpbmcgdGhpcyBjbGljaywgc28gbWFyayBpdCBub3cgKGJlZm9yZVxuICAgICAgLy8gVGhhdCBoaWRlIHJ1bnMpIGFuZCBjbGVhciBpdCBvbiB0aGUgbmV4dCBtaWNyb3Rhc2sgXHUyMDE0IGFmdGVyIGFueSBzeW5jaHJvbm91cyBkaXNtaXNzLCBidXQgYmVmb3JlIGFcbiAgICAgIC8vIExhdGVyIHByb2dyYW1tYXRpYyBoaWRlLCBzbyB0aGF0IGhpZGUgaXMgbm90IG1pc2F0dHJpYnV0ZWQgYXMgYSB1c2VyIGFjdGlvbi5cbiAgICAgIHRoaXMudXNlckNsaWNrZWROb3RpY2VzLmFkZChub3RpY2UpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnVzZXJDbGlja2VkTm90aWNlcy5kZWxldGUobm90aWNlKTtcbiAgICAgIH0pO1xuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGVybWFuZW50Tm90aWNlKG5vdGljZTogTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpO1xuICAgIGlmIChub3RpY2UpIHtcbiAgICAgIG1hcC5zZXQodGhpcy5wbHVnaW5OYW1lLCBub3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuZGVsZXRlKHRoaXMucGx1Z2luTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIHdpdGggdGhlIGdpdmVuIGR1cmF0aW9uLiBBIHJldXNhYmxlIG5vdGljZSByZXBsYWNlcyB0aGUgY3VycmVudCByZXVzYWJsZSBub3RpY2UgKGFuZFxuICAgKiBpcyBvcHRpb25hbGx5IHJlZ2lzdGVyZWQgYXMgdGhpcyBwbHVnaW4ncyBwZXJtYW5lbnQgbm90aWNlKTsgYSBzdGFuZGFsb25lIG5vdGljZSBpcyB0cmFja2VkXG4gICAqIHNlcGFyYXRlbHksIGxlYXZpbmcgdGhlIHJldXNhYmxlIHNsb3QgdW50b3VjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIG5vdGljZS5cbiAgICovXG4gIHByaXZhdGUgc2hvd05vdGljZVdpdGhEdXJhdGlvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMpOiBOb3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgaXNSZXVzYWJsZSwgbWVzc2FnZSwgb25DbG9zZUNsaWNrLCBvbkhpZGUsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSwgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCwgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uIH0gPSBwYXJhbXM7XG4gICAgLy8gT2JzaWRpYW4ncyBgTm90aWNlYCB0cmVhdHMgYW4gb21pdHRlZCBkdXJhdGlvbiBhcyBpdHMgZGVmYXVsdCwgc28gbWFwIHRoZSBgbnVsbGAgXCJubyBleHBsaWNpdFxuICAgIC8vIER1cmF0aW9uXCIgdmFsdWUgdG8gYHVuZGVmaW5lZGAuXG4gICAgY29uc3Qgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgaGFzQ2xvc2VCdXR0b24gPSByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgJiYgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uO1xuICAgIC8vIFRoZSBjbG9zZSBidXR0b24ncyBjbGljayBoYW5kbGVyIG5lZWRzIHRoZSBgTm90aWNlYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdW50aWwgaXQgaXMgYnVpbHQgZnJvbVxuICAgIC8vIFRoaXMgY29udGVudDsgY2FwdHVyZSBpdCBsYXppbHkgdmlhIGEgaG9sZGVyIHJlc29sdmVkIGF0IGNsaWNrIHRpbWUuIFRoZSBnZXR0ZXIgaXMgY3JlYXRlZCBvbmx5XG4gICAgLy8gV2hlbiBhIGNsb3NlIGJ1dHRvbiBpcyBzaG93bi5cbiAgICBsZXQgYnVpbHROb3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmJ1aWxkTm90aWNlQ29udGVudChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zPih7XG4gICAgICBnZXROb3RpY2U6IGhhc0Nsb3NlQnV0dG9uID8gKCk6IE5vdGljZSB8IG51bGwgPT4gYnVpbHROb3RpY2UgOiB1bmRlZmluZWQsXG4gICAgICBtZXNzYWdlLFxuICAgICAgb25DbG9zZUNsaWNrLFxuICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlLFxuICAgICAgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uXG4gICAgfSkpO1xuXG4gICAgaWYgKCFpc1JldXNhYmxlKSB7XG4gICAgICBidWlsdE5vdGljZSA9IG5ldyBOb3RpY2UoY29udGVudCwgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyk7XG4gICAgICB0aGlzLmluc3RhbGxFeHBsaWNpdENsb3NlR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UpO1xuICAgICAgdGhpcy5pbnN0YWxsVXNlckNsaWNrVHJhY2tpbmcoYnVpbHROb3RpY2UpO1xuICAgICAgdGhpcy53aXJlT25IaWRlKGJ1aWx0Tm90aWNlLCBvbkhpZGUpO1xuICAgICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5hZGQoYnVpbHROb3RpY2UpO1xuICAgICAgcmV0dXJuIGJ1aWx0Tm90aWNlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGNvbnRlbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgIHRoaXMubm90aWNlID0gYnVpbHROb3RpY2U7XG4gICAgdGhpcy5pbnN0YWxsRXhwbGljaXRDbG9zZUd1YXJkcyhidWlsdE5vdGljZSwgcmVxdWlyZXNFeHBsaWNpdENsb3NlKTtcbiAgICB0aGlzLmluc3RhbGxVc2VyQ2xpY2tUcmFja2luZyhidWlsdE5vdGljZSk7XG4gICAgdGhpcy53aXJlT25IaWRlKGJ1aWx0Tm90aWNlLCBvbkhpZGUpO1xuXG4gICAgaWYgKHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKGJ1aWx0Tm90aWNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UobnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsdE5vdGljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhIG5vdGljZSdzIGBoaWRlYCBzbyB0aGUgZ2l2ZW4gY2FsbGJhY2sgcnVucyB0aGUgZmlyc3QgdGltZSB0aGUgbm90aWNlIGlzIGhpZGRlbiBcdTIwMTQgYnkgdGhlXG4gICAqIHVzZXIsIGJ5IGEgcmVwbGFjaW5nIG5vdGljZSwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiB1bmxvYWQuIERvZXMgbm90aGluZyB3aGVuIG5vIGNhbGxiYWNrXG4gICAqIGlzIGdpdmVuLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWNlIC0gVGhlIG5vdGljZSB3aG9zZSBgaGlkZWAgdG8gd3JhcC5cbiAgICogQHBhcmFtIG9uSGlkZSAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gdGhlIGZpcnN0IGhpZGUsIG9yIGB1bmRlZmluZWRgIHRvIHNraXAgd3JhcHBpbmcuXG4gICAqL1xuICBwcml2YXRlIHdpcmVPbkhpZGUobm90aWNlOiBOb3RpY2UsIG9uSGlkZTogKCh0aGlzOiB2b2lkLCBpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIW9uSGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSdW4gYG9uSGlkZWAgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4uIEEgYG9uY2VgIHBhdGNoIG9uIGBoaWRlYCBpbnRlcmNlcHRzIGV4YWN0bHkgb25lXG4gICAgLy8gQ2FsbCB0aGVuIHVuaW5zdGFsbHMgaXRzZWxmICh1bmxvYWRpbmcgdGhpcyBkZWRpY2F0ZWQgY29tcG9uZW50KSwgc28gdGhlcmUgaXMgbm8gbWFudWFsXG4gICAgLy8gU2luZ2xlLWZpcmUgYm9va2tlZXBpbmcgYW5kIG5vIGxpbmdlcmluZyBwYXRjaCBvbiB0aGUgdHJhbnNpZW50IG5vdGljZS4gVGhlIHVzZXItY2xvc2UgZmxhZ3Mgd2VyZVxuICAgIC8vIFNldCBiZWZvcmUgYGhpZGUoKWAgd2FzIGludm9rZWQgKHNlZSBgYXBwZW5kQ2xvc2VCdXR0b25gIC8gYGluc3RhbGxVc2VyQ2xpY2tUcmFja2luZ2ApLCBzbyB0aGV5XG4gICAgLy8gU3RpbGwgaG9sZCB3aGVuIHJlYWQgaGVyZSBhZnRlciBgZmFsbGJhY2soKWAuXG4gICAgY29uc3QgcGF0Y2hDb21wb25lbnQgPSBuZXcgTW9ua2V5QXJvdW5kQ29tcG9uZW50KCk7XG4gICAgcGF0Y2hDb21wb25lbnQubG9hZCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICAgbWV0aG9kTmFtZTogJ2hpZGUnLFxuICAgICAgb2JqOiBub3RpY2UsXG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjayB9KSA9PiB7XG4gICAgICAgIGZhbGxiYWNrKCk7XG4gICAgICAgIGNvbnN0IGlzQ2xvc2VCdXR0b25DbGlja2VkID0gdGhpcy5jbG9zZUJ1dHRvbkNsaWNrZWROb3RpY2VzLmhhcyhub3RpY2UpO1xuICAgICAgICBjb25zdCBpc1VzZXJBY3Rpb24gPSBpc0Nsb3NlQnV0dG9uQ2xpY2tlZCB8fCB0aGlzLnVzZXJDbGlja2VkTm90aWNlcy5oYXMobm90aWNlKTtcbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG9uSGlkZSh7IGlzQ2xvc2VCdXR0b25DbGlja2VkLCBpc1VzZXJBY3Rpb24gfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7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
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTm90aWNlLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJy4uLy4uL2FycmF5LnRzJztcbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4uLy4uL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IE1vbmtleUFyb3VuZENvbXBvbmVudCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG5jb25zdCBQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVkgPSAncGx1Z2luLW5vdGljZS1jb21wb25lbnQ6cGVybWFuZW50LW5vdGljZXMnO1xuY29uc3QgUEVSTUFORU5UX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMgPSAwO1xuY29uc3QgREVGQVVMVF9ERUxBWV9CRUZPUkVfU0hPV19JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5cbi8vIEVsZW1lbnRzIGEgdXNlciBjbGlja3MgdG8gYWN0IG9uIHRoZW0gcmF0aGVyIHRoYW4gdG8gZGlzbWlzcyB0aGUgbm90aWNlLiBBIGNsaWNrIGxhbmRpbmcgb24gKG9yXG4vLyBJbnNpZGUpIG9uZSBvZiB0aGVzZSBpcyBrZXB0IGZyb20gYnViYmxpbmcgdG8gdGhlIG5vdGljZSwgc28gdGhlIG5vdGljZSBzdGF5cyBvcGVuLlxuY29uc3QgSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUiA9ICdhLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBsYWJlbCwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0sIFtyb2xlPVwiYnV0dG9uXCJdLCBbcm9sZT1cImxpbmtcIl0sIFtyb2xlPVwiY2hlY2tib3hcIl0sIFtyb2xlPVwidGFiXCJdLCBbcm9sZT1cIm1lbnVpdGVtXCJdJztcblxuLyoqXG4gKiBUaGUgZXZlbnQgcGFzc2VkIHRvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkNsb3NlQ2xpY2t9IHdoZW4gdGhlIG5vdGljZSdzXG4gKiBjbG9zZSAoWCkgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50IHtcbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGNsb3NlLCBsZWF2aW5nIHRoZSBub3RpY2Ugb3Blbi5cbiAgICovXG4gIGNhbmNlbCgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgaGFuZGxlIHRvIGEgZGVsYXllZCBub3RpY2UgY3JlYXRlZCBieSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS4gSXQgaXMgYVxuICoge0BsaW5rIERpc3Bvc2FibGV9IChzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGB1c2luZ2ApIHRoYXQgYWxzbyBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgdGhlXG4gKiBub3RpY2UgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZSBleHRlbmRzIERpc3Bvc2FibGUge1xuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG5vdGljZSBjb250ZW50LCByZS1hcHBseWluZyB0aGUgcGx1Z2luLW5hbWUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUtY2xpY2sgZ3VhcmQsIGFuZFxuICAgKiB0aGUgQ2FuY2VsIGJ1dHRvbi4gVXNlZnVsIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MuIElmIHRoZSBkZWxheSBoYXMgbm90IGVsYXBzZWQgeWV0LCB0aGUgbmV3IGNvbnRlbnRcbiAgICogYmVjb21lcyB3aGF0IGlzIHNob3duIG9uY2UgaXQgZG9lcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbmV3IG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgc2V0Q29udGVudChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBhIENhbmNlbCBidXR0b24gaXMgYXBwZW5kZWQgdG8gdGhlIG5vdGljZTsgY2xpY2tpbmcgaXQgYWJvcnRzIHRoaXMgY29udHJvbGxlci4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBDYW5jZWwgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBvZiB0aGUgQ2FuY2VsIGJ1dHRvbiBzaG93biB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcy5hYm9ydENvbnRyb2xsZXJ9XG4gICAqIGlzIHByb3ZpZGVkLiBXaGVuIG9taXR0ZWQsIHRoZSBsb2NhbGl6ZWQgYENhbmNlbGAgbGFiZWwgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29udGVudCwgcmVzb2x2ZWQgbGF6aWx5IG9ubHkgaWYgdGhlIGRlbGF5IGVsYXBzZXMgXHUyMDE0IHNvIGFuIG9wZXJhdGlvbiB0aGF0IGZpbmlzaGVzXG4gICAqIHNvb25lciBuZXZlciBidWlsZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgb3BlcmF0aW9uIG11c3QgcnVuIGJlZm9yZSB0aGUgbm90aWNlIGlzIHNob3duLiBPcGVyYXRpb25zIHRoYXQgZmluaXNoIHNvb25lciBuZXZlclxuICAgKiBzaG93IGEgbm90aWNlLCBhdm9pZGluZyBhIGRpc3RyYWN0aW5nIGZsYXNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSBzaG91bGQgc3RheSB1bnRpbCBpdCBpcyByZXBsYWNlZCwgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwgb3IgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgbm90IGhpZGRlbiB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2Fkcywgc28gaXQgY2FuXG4gICAqIGNvbW11bmljYXRlIHN0YXRlIHRoYXQgb3V0bGl2ZXMgdGhlIHBsdWdpbiAoZS5nLiBhIGNsZWFudXAgdGhhdCByZXF1aXJlcyBhIHJlbG9hZCkuIFRoZXJlIGlzIGF0IG1vc3Qgb25lIHBlcm1hbmVudFxuICAgKiBub3RpY2UgcGVyIHBsdWdpbjogaXQgaXMgaGlkZGVuIGJ5IHRoZSBuZXh0IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZX0gY2FsbCBhbmQgZGlzbWlzc2VkXG4gICAqIGF1dG9tYXRpY2FsbHkgdGhlIG5leHQgdGltZSB0aGUgY29tcG9uZW50IGxvYWRzIChpLmUuIHdoZW4gdGhlIHBsdWdpbiBpcyByZS1lbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNQZXJtYW5lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugb2NjdXBpZXMgdGhlIHNpbmdsZSBwZXItcGx1Z2luIHJldXNhYmxlIHNsb3QuXG4gICAqXG4gICAqIEEgcmV1c2FibGUgbm90aWNlIHRha2VzIHRoZSBzaGFyZWQgc2xvdDogdGhlIG5leHQgcmV1c2FibGUgbm90aWNlIGhpZGVzIGl0LCBhbmQgaXQgaXMgaGlkZGVuIG9uIHVubG9hZC5cbiAgICogQSBub24tcmV1c2FibGUgKHN0YW5kYWxvbmUpIG5vdGljZSBpcyBub3QgcGxhY2VkIGluIHRoZSBzbG90IFx1MjAxNCBpdCBuZXZlciBoaWRlcywgYW5kIGlzIG5ldmVyIGhpZGRlbiBieSwgYVxuICAgKiByZXVzYWJsZSBub3RpY2U7IG11bHRpcGxlIHN0YW5kYWxvbmUgbm90aWNlcyBjb2V4aXN0LiBTdGFuZGFsb25lIG5vdGljZXMgYXJlIHN0aWxsIGhpZGRlbiB0b2dldGhlciBvbiB1bmxvYWQuXG4gICAqXG4gICAqIEEgcGVybWFuZW50IG5vdGljZSBtdXN0IGJlIHJldXNhYmxlICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNQZXJtYW5lbnR9IGltcGxpZXNcbiAgICogYGlzUmV1c2FibGVgKTsgcGFzc2luZyBgaXNSZXVzYWJsZTogZmFsc2VgIHRvZ2V0aGVyIHdpdGggYGlzUGVybWFuZW50OiB0cnVlYCB0aHJvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZXVzYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgY2xvc2UgKFgpIGJ1dHRvbiwgYmVmb3JlIHRoZSBub3RpY2UgaXMgaGlkZGVuLiBDYWxsXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQuY2FuY2VsfSBvbiB0aGUgZXZlbnQgdG8gY2FuY2VsIHRoZSBjbG9zZSBhbmQga2VlcCB0aGUgbm90aWNlXG4gICAqIG9wZW4gXHUyMDE0IGZvciBleGFtcGxlIGFmdGVyIHlvdXIgb3duIGNvbmZpcm1hdGlvbiBkZWNsaW5lcy4gQW4gYXN5bmMgY2FsbGJhY2sgaXMgYXdhaXRlZCBiZWZvcmUgdGhlXG4gICAqIG5vdGljZSBpcyBoaWRkZW4uIFJ1bnMgb25seSB3aGVuIGEgY2xvc2UgYnV0dG9uIGlzIHNob3duIChib3RoXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRIaWRlT25DbGlja30gYD0gZmFsc2VgIGFuZFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkU2hvd0Nsb3NlQnV0dG9ufSBhcmUgc2V0KS5cbiAgICovXG4gIG9uQ2xvc2VDbGljaz8odGhpczogdm9pZCwgZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBub3RpY2UgaXMgaGlkZGVuIFx1MjAxNCB3aGV0aGVyIGJ5IHRoZSB1c2VyIGNsb3NpbmcgaXQsIGJ5IGEgbGF0ZXIgcmV1c2FibGVcbiAgICogbm90aWNlIHJlcGxhY2luZyBpdCwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiBjb21wb25lbnQgdW5sb2FkLiBJdCBydW5zIGF0IG1vc3Qgb25jZSBwZXJcbiAgICogbm90aWNlLiBUaGUge0BsaW5rIFBsdWdpbk5vdGljZUhpZGVJbmZvfSBhcmd1bWVudCBkaXN0aW5ndWlzaGVzIGEgdXNlciBjbG9zZSAodGhlIGNsb3NlIGJ1dHRvbikgZnJvbVxuICAgKiBhIHByb2dyYW1tYXRpYyBoaWRlLiBBbiBhc3luYyBjYWxsYmFjayBpcyBydW4gZmlyZS1hbmQtZm9yZ2V0IChpdHMgcmVqZWN0aW9uIHN1cmZhY2VzIHRocm91Z2ggdGhlXG4gICAqIGFzeW5jLWVycm9yIHBpcGVsaW5lKS5cbiAgICovXG4gIG9uSGlkZT8odGhpczogdm9pZCwgaW5mbzogUGx1Z2luTm90aWNlSGlkZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNsaWNraW5nIHRoZSBub3RpY2UgaGlkZXMgaXQuIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSBub3RpY2UgZGlzbWlzc2VzIG9uIGNsaWNrIGxpa2VcbiAgICogYSBub3JtYWwgT2JzaWRpYW4gbm90aWNlLiBXaGVuIGBmYWxzZWAsIHRoZSBub3RpY2UgaXMgaGFyZCB0byBjbG9zZTogaXQgZG9lcyBub3QgZGlzbWlzcyBvbiBhbnkgc3RyYXlcbiAgICogY2xpY2ssIGFuZCBpbnN0ZWFkIHNob3dzIGEgY2xvc2UgKFgpIGJ1dHRvbiB0aGF0IGhpZGVzIGl0IGRpcmVjdGx5IChzZWVcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLnNob3VsZFNob3dDbG9zZUJ1dHRvbn0gYW5kXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkNsb3NlQ2xpY2t9KS5cbiAgICpcbiAgICogQSBgc2hvdWxkSGlkZU9uQ2xpY2s6IGZhbHNlYCBub3RpY2UgaXMgc2hvd24gd2l0aCBhbiBpbmZpbml0ZSBkdXJhdGlvbiBhbmQgaXMgc3RhbmRhbG9uZSAoaW1wbGllc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuaXNSZXVzYWJsZX0gYD0gZmFsc2VgKSwgc28gYSBsYXRlciBub3RpY2UgbmV2ZXJcbiAgICogc2lsZW50bHkgcmVwbGFjZXMgaXQ7IHBhc3NpbmcgYGlzUmV1c2FibGU6IHRydWVgIHRvZ2V0aGVyIHdpdGggYHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZWAgdGhyb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhpZGVPbkNsaWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2xvc2UgKFgpIGJ1dHRvbiBpcyBzaG93biBvbiBhIGhhcmQtdG8tY2xvc2Ugbm90aWNlXG4gICAqICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkSGlkZU9uQ2xpY2t9IGA9IGZhbHNlYCkuIFdoZW4gYGZhbHNlYCwgbm8gY2xvc2VcbiAgICogYnV0dG9uIGlzIHJlbmRlcmVkIGFuZCB0aGUgbm90aWNlIGNhbiBvbmx5IGJlIGhpZGRlbiBwcm9ncmFtbWF0aWNhbGx5LiBJZ25vcmVkIHVubGVzc1xuICAgKiBgc2hvdWxkSGlkZU9uQ2xpY2tgIGlzIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgd2h5IGEgbm90aWNlIHdhcyBoaWRkZW4sIHBhc3NlZCB0byB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25IaWRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VIaWRlSW5mbyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugd2FzIGhpZGRlbiBieSB0aGUgdXNlciBjbGlja2luZyBpdHMgY2xvc2UgKFgpIGJ1dHRvbiBzcGVjaWZpY2FsbHkuIEFsd2F5cyBpbXBsaWVzXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VIaWRlSW5mby5pc1VzZXJBY3Rpb259LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNDbG9zZUJ1dHRvbkNsaWNrZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSB3YXMgaGlkZGVuIGJ5IGEgdXNlciBhY3Rpb24gXHUyMDE0IGNsaWNraW5nIHRoZSBjbG9zZSAoWCkgYnV0dG9uLCBvciBjbGlja2luZyBhXG4gICAqIGRpc21pc3NpYmxlIG5vdGljZSB0byBkaXNtaXNzIGl0IFx1MjAxNCBhcyBvcHBvc2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgKGEgbGF0ZXIgcmV1c2FibGUgbm90aWNlIHJlcGxhY2luZ1xuICAgKiBpdCwgYW4gZXhwbGljaXQgYGhpZGUoKWAsIHRoZSBkdXJhdGlvbiBlbGFwc2luZywgb3IgY29tcG9uZW50IHVubG9hZCkuXG4gICAqL1xuICByZWFkb25seSBpc1VzZXJBY3Rpb246IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbnRlbnRFbDogSFRNTEVsZW1lbnQ7XG4gIGdldE5vdGljZSh0aGlzOiB2b2lkKTogTm90aWNlIHwgbnVsbDtcbiAgb25DbG9zZUNsaWNrPyh0aGlzOiB2b2lkLCBldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KTogUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXMge1xuICByZWFkb25seSBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXI7XG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIG5vdGljZSB0aGlzIGNvbnRlbnQgYmVsb25ncyB0bywgdXNlZCBieSB0aGUgY2xvc2UgYnV0dG9uJ3MgaGFuZGxlci4gVGhlIG5vdGljZSBkb2VzXG4gICAqIG5vdCBleGlzdCB5ZXQgd2hlbiB0aGUgY29udGVudCBpcyBidWlsdCwgc28gaXQgaXMgcmVzb2x2ZWQgbGF6aWx5IGF0IGNsaWNrIHRpbWUuIFJlcXVpcmVkIHdoZW4gYVxuICAgKiBjbG9zZSBidXR0b24gaXMgc2hvd24uXG4gICAqL1xuICBnZXROb3RpY2U/KHRoaXM6IHZvaWQpOiBOb3RpY2UgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIHRoZSBwbHVnaW4gbmFtZSBwcmVmaXguXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNsb3NlIGJ1dHRvbiBpcyBjbGlja2VkOyBtYXkgY2FuY2VsIHRoZSBjbG9zZS4gU2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkNsb3NlQ2xpY2t9LlxuICAgKi9cbiAgb25DbG9zZUNsaWNrPyh0aGlzOiB2b2lkLCBldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWNlIGlzIGhhcmQgdG8gY2xvc2U6IHN0b3BzIGV2ZXJ5IGNsaWNrIGZyb20gZGlzbWlzc2luZyBpdCBhbmQsIHVubGVzcyBzdXBwcmVzc2VkIGJ5XG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMuc2hvdWxkU2hvd0Nsb3NlQnV0dG9ufSwgYWRkcyBhIGNsb3NlIGJ1dHRvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNFeHBsaWNpdENsb3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNsb3NlIGJ1dHRvbiB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMucmVxdWlyZXNFeHBsaWNpdENsb3NlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZVdpdGhEdXJhdGlvblBhcmFtcyB7XG4gIHJlYWRvbmx5IGR1cmF0aW9uSW5NaWxsaXNlY29uZHM6IG51bGwgfCBudW1iZXI7XG4gIHJlYWRvbmx5IGlzUmV1c2FibGU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG9uQ2xvc2VDbGljazogKCh0aGlzOiB2b2lkLCBldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgb25IaWRlOiAoKHRoaXM6IHZvaWQsIGluZm86IFBsdWdpbk5vdGljZUhpZGVJbmZvKSA9PiBQcm9taXNhYmxlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmVxdWlyZXNFeHBsaWNpdENsb3NlOiBib29sZWFuO1xuICByZWFkb25seSBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50OiBib29sZWFuO1xuICByZWFkb25seSBzaG91bGRTaG93Q2xvc2VCdXR0b246IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWFuYWdlcyBzaG93aW5nIHBsdWdpbiBub3RpY2VzLiBBdXRvbWF0aWNhbGx5IGhpZGVzIHRoZSBwcmV2aW91cyBub3RpY2Ugd2hlbiBhIG5ldyBvbmUgaXMgc2hvd24uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIG5hbWUgKHNob3duIGFzIHByZWZpeCBpbiBub3RpY2VzKS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbG9zZUJ1dHRvbkNsaWNrZWROb3RpY2VzID0gbmV3IFdlYWtTZXQ8Tm90aWNlPigpO1xuICBwcml2YXRlIG5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGFsb25lTm90aWNlcyA9IG5ldyBTZXQ8Tm90aWNlPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJDbGlja2VkTm90aWNlcyA9IG5ldyBXZWFrU2V0PE5vdGljZT4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbk5hbWUgPSBwYXJhbXMucGx1Z2luTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzZXMgdGhlIHBlcm1hbmVudCBub3RpY2UgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBsb2FkIChlLmcuIGEgcHJldmlvdXMgcGx1Z2luIHNlc3Npb24pIG9uIGxvYWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuICAgIGNvbnN0IHBlcm1hbmVudE5vdGljZSA9IHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlKCk7XG4gICAgcGVybWFuZW50Tm90aWNlPy5oaWRlKCk7XG4gICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIGN1cnJlbnQgbm90aWNlIG9uIHVubG9hZCwgdW5sZXNzIGl0IGlzIHRoZSBwZXJtYW5lbnQgbm90aWNlICh3aGljaCBpcyBtZWFudCB0byBvdXRsaXZlIHRoZSBwbHVnaW4pLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIENhbmNlbCBhbnkgZGVsYXllZCBub3RpY2Ugd2hvc2UgdGltZXIgaGFzIG5vdCBmaXJlZCB5ZXQsIHNvIGl0IG5ldmVyIGFwcGVhcnMgYWZ0ZXIgdW5sb2FkLlxuICAgIGZvciAoY29uc3QgY2FuY2VsUGVuZGluZ1RpbWVyIG9mIHNuYXBzaG90KHRoaXMucGVuZGluZ1RpbWVyQ2FuY2VsbGF0aW9ucykpIHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKSAhPT0gdGhpcy5ub3RpY2UpIHtcbiAgICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhbmRhbG9uZU5vdGljZSBvZiB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzKSB7XG4gICAgICBzdGFuZGFsb25lTm90aWNlLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyB0aGUgbm90aWNlLlxuICAgKiBAcmV0dXJucyBUaGUgbm90aWNlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzaG93Tm90aWNlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcsIG9wdGlvbnM/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyk6IE5vdGljZSB7XG4gICAgY29uc3QgaXNQZXJtYW5lbnQgPSBvcHRpb25zPy5pc1Blcm1hbmVudCA/PyBmYWxzZTtcbiAgICBjb25zdCBzaG91bGRIaWRlT25DbGljayA9IG9wdGlvbnM/LnNob3VsZEhpZGVPbkNsaWNrID8/IHRydWU7XG4gICAgY29uc3QgcmVxdWlyZXNFeHBsaWNpdENsb3NlID0gIXNob3VsZEhpZGVPbkNsaWNrO1xuICAgIGNvbnN0IGlzUmV1c2FibGUgPSBvcHRpb25zPy5pc1JldXNhYmxlID8/ICFyZXF1aXJlc0V4cGxpY2l0Q2xvc2U7XG5cbiAgICBpZiAob3B0aW9ucz8uaXNSZXVzYWJsZSA9PT0gdHJ1ZSAmJiByZXF1aXJlc0V4cGxpY2l0Q2xvc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBub3RpY2UgdGhhdCBkb2VzIG5vdCBoaWRlIG9uIGNsaWNrIGNhbm5vdCBiZSByZXVzYWJsZS4nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmlzUmV1c2FibGUgPT09IGZhbHNlICYmIGlzUGVybWFuZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgcGVybWFuZW50IG5vdGljZSBtdXN0IGJlIHJldXNhYmxlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPSBpc1Blcm1hbmVudCB8fCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgaXNSZXVzYWJsZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkNsb3NlQ2xpY2s6IG9wdGlvbnM/Lm9uQ2xvc2VDbGljayxcbiAgICAgIG9uSGlkZTogb3B0aW9ucz8ub25IaWRlLFxuICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlLFxuICAgICAgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogaXNQZXJtYW5lbnQsXG4gICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b246IG9wdGlvbnM/LnNob3VsZFNob3dDbG9zZUJ1dHRvbiA/PyB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBub3RpY2UgZGVzY3JpYmluZyBhIGxvbmctcnVubmluZyBvcGVyYXRpb24sIGJ1dCBvbmx5IG9uY2UgdGhlIG9wZXJhdGlvbiBoYXMgcnVuIGZvciBsb25nZXJcbiAgICogdGhhbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMuZGVsYXlJbk1pbGxpc2Vjb25kc30gXHUyMDE0IHNvIG9wZXJhdGlvbnNcbiAgICogdGhhdCBmaW5pc2ggc29vbmVyIG5ldmVyIGZsYXNoIGEgbm90aWNlLiBUaGUgbm90aWNlIHN0YXlzIHVudGlsIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gaXNcbiAgICogZGlzcG9zZWQgKHdoaWNoIGFsc28gY2FuY2VscyB0aGUgcGVuZGluZyB0aW1lciBpZiBpdCBoYXMgbm90IGZpcmVkIHlldCksIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGhcbiAgICogYHVzaW5nYC4gV2hlbiBhbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMuYWJvcnRDb250cm9sbGVyfSBpcyBnaXZlbiwgYVxuICAgKiBDYW5jZWwgYnV0dG9uIHRoYXQgYWJvcnRzIGl0IGlzIGFwcGVuZGVkIChhbmQsIGJlaW5nIGludGVyYWN0aXZlLCBkb2VzIG5vdCBkaXNtaXNzIHRoZSBub3RpY2UpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiB1c2luZyBfbm90aWNlID0gcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2VBZnRlckRlbGF5KHtcbiAgICogICBhYm9ydENvbnRyb2xsZXIsXG4gICAqICAgY29udGVudDogKCkgPT4gYnVpbGRQcm9ncmVzc0ZyYWdtZW50KClcbiAgICogfSk7XG4gICAqIGF3YWl0IHJ1bk9wZXJhdGlvbihhYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50RGVsYXllZE5vdGljZX0gdGhhdCBoaWRlcyB0aGUgbm90aWNlIChvciBjYW5jZWxzIHRoZSBwZW5kaW5nXG4gICAqIHRpbWVyKSB3aGVuIGRpc3Bvc2VkIGFuZCBsZXRzIHRoZSBjb250ZW50IGJlIHVwZGF0ZWQgd2hpbGUgaXQgaXMgc2hvd24uXG4gICAqL1xuICBwdWJsaWMgc2hvd05vdGljZUFmdGVyRGVsYXkocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlQWZ0ZXJEZWxheVBhcmFtcyk6IFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2Uge1xuICAgIGxldCBzaG93bk5vdGljZTogTm90aWNlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICBsZXQgdGltZXJJZCA9IDA7XG4gICAgbGV0IGN1cnJlbnRDb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+ID0gcGFyYW1zLmNvbnRlbnQ7XG5cbiAgICBjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgdGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zLmRlbGV0ZShjYW5jZWxQZW5kaW5nVGltZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZERlbGF5ZWRNZXNzYWdlID0gKGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50ID0+XG4gICAgICB0aGlzLmJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2Uobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXM+KHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyOiBwYXJhbXMuYWJvcnRDb250cm9sbGVyLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBwYXJhbXMuY2FuY2VsQnV0dG9uVGV4dCxcbiAgICAgICAgY29udGVudFxuICAgICAgfSkpO1xuXG4gICAgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZENvbnRlbnQgPSBhd2FpdCByZXNvbHZlVmFsdWUoY3VycmVudENvbnRlbnQsIHt9KTtcbiAgICAgICAgLy8gVGhlIGhhbmRsZSBtYXkgaGF2ZSBiZWVuIGRpc3Bvc2VkIHdoaWxlIHRoZSBjb250ZW50IHdhcyBiZWluZyByZXNvbHZlZDsgZG9uJ3Qgc2hvdyBhIHN0YWxlIG5vdGljZS5cbiAgICAgICAgaWYgKGlzRGlzcG9zZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2hvd25Ob3RpY2UgPSB0aGlzLnNob3dOb3RpY2VXaXRoRHVyYXRpb24oe1xuICAgICAgICAgIGR1cmF0aW9uSW5NaWxsaXNlY29uZHM6IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgIGlzUmV1c2FibGU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogYnVpbGREZWxheWVkTWVzc2FnZShyZXNvbHZlZENvbnRlbnQpLFxuICAgICAgICAgIG9uQ2xvc2VDbGljazogdW5kZWZpbmVkLFxuICAgICAgICAgIG9uSGlkZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlcXVpcmVzRXhwbGljaXRDbG9zZTogZmFsc2UsXG4gICAgICAgICAgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogZmFsc2UsXG4gICAgICAgICAgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgcGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9ERUxBWV9CRUZPUkVfU0hPV19JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgdGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zLmFkZChjYW5jZWxQZW5kaW5nVGltZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNldENvbnRlbnQ6IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGN1cnJlbnRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgLy8gUmUtd3JhcCBzbyB0aGUgcHJlZml4LCBpbnRlcmFjdGl2ZSBndWFyZCwgYW5kIENhbmNlbCBidXR0b24gc3Vydml2ZSB0aGUgY29udGVudCBzd2FwLlxuICAgICAgICBzaG93bk5vdGljZT8uc2V0TWVzc2FnZSh0aGlzLmJ1aWxkTm90aWNlQ29udGVudCh7IG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UoY29udGVudCkgfSkpO1xuICAgICAgfSxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgICAgICBzaG93bk5vdGljZT8uaGlkZSgpO1xuICAgICAgICBpZiAodGhpcy5ub3RpY2UgPT09IHNob3duTm90aWNlKSB7XG4gICAgICAgICAgdGhpcy5ub3RpY2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgY2xvc2UgKFgpIGJ1dHRvbiB0byB0aGUgbm90aWNlIGNvbnRlbnQuIENsaWNraW5nIGl0IGZpcmVzXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcy5vbkNsb3NlQ2xpY2t9ICh3aGljaCBtYXkgY2FuY2VsIHRoZSBjbG9zZSk7IGlmXG4gICAqIG5vdCBjYW5jZWxsZWQsIGl0IGhpZGVzIHRoZSBub3RpY2UgYW5kIGRyb3BzIGl0IGZyb20gdGhlIHN0YW5kYWxvbmUtbm90aWNlIHRyYWNraW5nIHNldC4gVGhlIGhpZGUgaXNcbiAgICogbWFya2VkIGFzIGEgY2xvc2UtYnV0dG9uIGNsaWNrIHNvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkhpZGV9IGNhblxuICAgKiBkaXN0aW5ndWlzaCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRDbG9zZUJ1dHRvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZENsb3NlQnV0dG9uUGFyYW1zKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250ZW50RWwsIGdldE5vdGljZSwgb25DbG9zZUNsaWNrIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgY2xvc2VCdXR0b25FbCA9IGNvbnRlbnRFbC5jcmVhdGVFbCgnYnV0dG9uJywge1xuICAgICAgYXR0cjogeyAnYXJpYS1sYWJlbCc6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5ub3RpY2VzLmNsb3NlQXJpYUxhYmVsKSB9XG4gICAgfSk7XG4gICAgLy8gUmV1c2UgT2JzaWRpYW4ncyBtb2RhbCBjbG9zZS1idXR0b24gY2xhc3NlcyBzbyB0aGlzIGJ1dHRvbiBtYXRjaGVzIHRoZSBuYXRpdmUgbW9kYWwgY2xvc2UgYnV0dG9uXG4gICAgLy8gKGxvb2sgYW5kIGhvdmVyKTsgdGhlIHN0eWxlc2hlZXQgb25seSBwb3NpdGlvbnMgaXQgaW4gdGhlIG5vdGljZSBjb3JuZXIuXG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhjbG9zZUJ1dHRvbkVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VDbG9zZUJ1dHRvbik7XG4gICAgY2xvc2VCdXR0b25FbC5hZGRDbGFzc2VzKFtDc3NDbGFzcy5DbGlja2FibGVJY29uLCBDc3NDbGFzcy5Nb2RhbEhlYWRlckJ1dHRvbl0pO1xuICAgIHNldEljb24oY2xvc2VCdXR0b25FbCwgJ3gnKTtcbiAgICBjbG9zZUJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgaXNDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgb25DbG9zZUNsaWNrPy4oe1xuICAgICAgICAgIGNhbmNlbDogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIENhbiBiZSBjYW5jZWxsZWQgYnkgdGhlIHVzZXIuXG4gICAgICAgIGlmIChpc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3RpY2UgPSBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UoKSk7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b25DbGlja2VkTm90aWNlcy5hZGQobm90aWNlKTtcbiAgICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5kZWxldGUobm90aWNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbWVzc2FnZSBmb3IgYSBkZWxheWVkIG5vdGljZTogdGhlIHJlc29sdmVkIGNvbnRlbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBDYW5jZWxcbiAgICogYnV0dG9uIHRoYXQgYWJvcnRzIHRoZSBwcm92aWRlZCBjb250cm9sbGVyIHdoZW4gY2xpY2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSBob2xkaW5nIHRoZSBjb250ZW50IGFuZCwgaWYgcmVxdWVzdGVkLCBhIENhbmNlbCBidXR0b24uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2UocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zKTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgY29uc3QgeyBhYm9ydENvbnRyb2xsZXIsIGNhbmNlbEJ1dHRvblRleHQsIGNvbnRlbnQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dChjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKGNvbnRlbnQpO1xuICAgIH1cblxuICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIC8vIGBCdXR0b25Db21wb25lbnRgIHJlcXVpcmVzIGFuIGBIVE1MRWxlbWVudGAgcGFyZW50LCBzbyBidWlsZCBpdCBvbiBhIHRocm93YXdheVxuICAgICAgLy8gRGV0YWNoZWQgZWxlbWVudCBhbmQgbW92ZSBpdHMgYGJ1dHRvbkVsYCBpbnRvIHRoZSBmcmFnbWVudC5cbiAgICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQoY3JlYXRlRGl2KCkpO1xuICAgICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQoY2FuY2VsQnV0dG9uVGV4dCA/PyB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMuYnV0dG9ucy5jYW5jZWwpKTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLCBDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuICAgICAgLy8gVGhlIGNsaWNrIGlzIHdpcmVkIHZpYSBgYWRkRXZlbnRMaXN0ZW5lcmAgcmF0aGVyIHRoYW4gYEJ1dHRvbkNvbXBvbmVudC5vbkNsaWNrYCBzbyBpdFxuICAgICAgLy8gQnViYmxlcyB0aHJvdWdoIHRoZSBpbnRlcmFjdGl2ZS1lbGVtZW50IGd1YXJkIChrZWVwaW5nIHRoZSBub3RpY2Ugb3BlbikgYW5kIHN0YXlzXG4gICAgICAvLyBEaXJlY3RseSBleGVyY2lzYWJsZSB2aWEgYSBkaXNwYXRjaGVkIERPTSBldmVudCBpbiB1bml0IHRlc3RzLlxuICAgICAgY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKGNhbmNlbEJ1dHRvbi5idXR0b25FbCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50IHdyYXBwZWQgaW4gYSBjb250YWluZXIgdGhhdCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZVxuICAgKiBlbGVtZW50IGluc2lkZSBpdCBpcyBjbGlja2VkLiBPYnNpZGlhbiBkaXNtaXNzZXMgYSBub3RpY2Ugb24gYW55IGNsaWNrIHRoYXQgYnViYmxlcyB1cCB0byBpdHNcbiAgICogZWxlbWVudDsgdGhlIGNvbnRhaW5lciBpbnRlcmNlcHRzIGNsaWNrcyBvcmlnaW5hdGluZyBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IChhIGxpbmssIGJ1dHRvbixcbiAgICogaW5wdXQsIGV0Yy4pIGFuZCBzdG9wcyB0aGVtIHRoZXJlLCBzbyB0aGUgZWxlbWVudCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgYnV0IHRoZSBub3RpY2Ugc3RheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCwgcHJlZml4ZWQgbm90aWNlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWNlQ29udGVudChwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgZ2V0Tm90aWNlLCBtZXNzYWdlLCBvbkNsb3NlQ2xpY2ssIHJlcXVpcmVzRXhwbGljaXRDbG9zZSA9IGZhbHNlLCBzaG91bGRTaG93Q2xvc2VCdXR0b24gPSB0cnVlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICAgIGNvbnN0IGNvbnRlbnRFbCA9IGZyYWdtZW50LmNyZWF0ZURpdigpO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY29udGVudEVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VDb250ZW50KTtcbiAgICBjb250ZW50RWwuYXBwZW5kKHRoaXMuYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZSkpO1xuICAgIGNvbnRlbnRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgIC8vIEEgaGFyZC10by1jbG9zZSBub3RpY2UgbXVzdCBub3QgZGlzbWlzcyBvbiBhbnkgc3RyYXkgY2xpY2s7IG9ubHkgaXRzIGNsb3NlIGJ1dHRvbiBtYXkgaGlkZSBpdC5cbiAgICAgIGlmIChyZXF1aXJlc0V4cGxpY2l0Q2xvc2UpIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoJGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgJGV2ZW50LnRhcmdldC5jbG9zZXN0KElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IpKSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChyZXF1aXJlc0V4cGxpY2l0Q2xvc2UgJiYgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uKSB7XG4gICAgICB0aGlzLmFwcGVuZENsb3NlQnV0dG9uKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcz4oe1xuICAgICAgICBjb250ZW50RWwsXG4gICAgICAgIGdldE5vdGljZTogZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKSxcbiAgICAgICAgb25DbG9zZUNsaWNrXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG5vdGljZSBjb250ZW50LCBwcmVmaXhpbmcgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcGx1Z2luIG5hbWUgaW4gYSBzdHlsZWQgZWxlbWVudCBzbyBpdCBpc1xuICAgKiB2aXN1YWxseSBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIG1lc3NhZ2UgYm9keS5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIHRoZSBwbHVnaW4gbmFtZSBwcmVmaXguXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IHdpdGggdGhlIHN0eWxlZCBwbHVnaW4gbmFtZSBwcmVmaXggZm9sbG93ZWQgYnkgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgY29uc3QgbmFtZUVsID0gY3JlYXRlU3Bhbih7IHRleHQ6IHRoaXMucGx1Z2luTmFtZSB9KTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG5hbWVFbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlTmFtZSk7XG4gICAgZnJhZ21lbnQuYXBwZW5kKG5hbWVFbCk7XG4gICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJyAodW5sb2FkZWQpJyk7XG4gICAgfVxuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ1xcbicpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQobWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtYW5lbnROb3RpY2UoKTogTm90aWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpLmdldCh0aGlzLnBsdWdpbk5hbWUpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZXMoKTogTWFwPHN0cmluZywgTm90aWNlPiB7XG4gICAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxNYXA8c3RyaW5nLCBOb3RpY2U+PihQRVJNQU5FTlRfTk9USUNFU19TVEFURV9LRVksIG5ldyBNYXA8c3RyaW5nLCBOb3RpY2U+KCkpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgbm90aWNlIGhhcmQgdG8gY2xvc2U6IG1hcmtzIGl0cyBvdXRlciBlbGVtZW50IChzbyB0aGUgQ1NTIG5ldXRyYWxpemVzIGl0cyBwYWRkaW5nKSBhbmRcbiAgICogaW5zdGFsbHMgYSBjYXB0dXJlLXBoYXNlIGNsaWNrIGd1YXJkIHRoYXQgc3RvcHMgZXZlcnkgY2xpY2sgZXhjZXB0IG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgKGFcbiAgICogYnV0dG9uLCBsaW5rLCB0aGUgY2xvc2UgYnV0dG9uLCBldGMuKSBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3Mgb3duIGRpc21pc3MgaGFuZGxlciBcdTIwMTQgc28gYW5cbiAgICogaW50ZXJhY3RpdmUgY2hpbGQncyBvd24gaGFuZGxlciBzdGlsbCBydW5zIHdoaWxlIGEgc3RyYXkgY2xpY2sgY2Fubm90IGRpc21pc3MgdGhlIG5vdGljZS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2UgdG8gZ3VhcmQuXG4gICAqIEBwYXJhbSByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgLSBXaGV0aGVyIHRoZSBub3RpY2UgcmVxdWlyZXMgZXhwbGljaXQgY2xvc2U7IHdoZW4gYGZhbHNlYCwgbm90aGluZyBpc1xuICAgKiBpbnN0YWxsZWQuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxFeHBsaWNpdENsb3NlR3VhcmRzKG5vdGljZTogTm90aWNlLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXJlcXVpcmVzRXhwbGljaXRDbG9zZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgb3V0ZXIgYC5ub3RpY2VgIGVsZW1lbnQgKGBjb250YWluZXJFbGApIGNhcnJpZXMgT2JzaWRpYW4ncyBkaXNtaXNzLW9uLWNsaWNrIGhhbmRsZXIgYW5kIHRoZVxuICAgIC8vIFBhZGRpbmcgYSBzdHJheSBjbGljayBjb3VsZCBsYW5kIG9uOyBtYXJrIGl0IHNvIHRoZSBzdHlsZXNoZWV0IGRyb3BzIHRoYXQgcGFkZGluZy5cbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG5vdGljZS5jb250YWluZXJFbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlUmVxdWlyZXNFeHBsaWNpdENsb3NlKTtcbiAgICAvLyBTdG9wIGV2ZXJ5IGNsaWNrIG9uIHRoZSBub3RpY2UgXHUyMDE0IGV4Y2VwdCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IFx1MjAxNCBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3NcbiAgICAvLyBEaXNtaXNzIGhhbmRsZXIuIFJlZ2lzdGVyZWQgaW4gdGhlIGNhcHR1cmUgcGhhc2Ugb24gdGhlIG91dGVybW9zdCBlbGVtZW50IHNvIGl0IGFsd2F5cyBydW5zIGZpcnN0LlxuICAgIC8vIExldHRpbmcgYSBjbGljayByZWFjaCBhbiBpbnRlcmFjdGl2ZSBjaGlsZCAoYSBidXR0b24sIGxpbmssIHRoZSBjbG9zZSBidXR0b24sIGV0Yy4pIGlzIHdoYXQga2VlcHNcbiAgICAvLyBJdHMgb3duIGhhbmRsZXIgd29ya2luZzsgdGhlIGJ1YmJsZS1waGFzZSBndWFyZCBvbiB0aGUgY29udGVudCB3cmFwcGVyIHRoZW4gc3RvcHMgdGhhdCBjbGljayBmcm9tXG4gICAgLy8gQnViYmxpbmcgdXAgdG8gT2JzaWRpYW4ncyBkaXNtaXNzIGhhbmRsZXIsIHNvIHRoZSBub3RpY2Ugc3RpbGwgc3RheXMgb3Blbi5cbiAgICBub3RpY2UuY29udGFpbmVyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICBpZiAoJGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgJGV2ZW50LnRhcmdldC5jbG9zZXN0KElOVEVSQUNUSVZFX0VMRU1FTlRfU0VMRUNUT1IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tzIGEgY2xpY2sgb24gdGhlIG5vdGljZSBzbyB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25IaWRlfSBjYW4gcmVwb3J0IGFcbiAgICogdXNlciBkaXNtaXNzYWwuIE9ic2lkaWFuIGhpZGVzIGEgZGlzbWlzc2libGUgbm90aWNlIHN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZSBjbGljaywgc28gYVxuICAgKiBjYXB0dXJlLXBoYXNlIGxpc3RlbmVyIG1hcmtzIHRoZSBub3RpY2UgYmVmb3JlIHRoYXQgaGlkZSBydW5zOyB0aGUgbWFyayBpcyBjbGVhcmVkIGFmdGVyIHRoZSBldmVudFxuICAgKiBzbyBhIGxhdGVyIHByb2dyYW1tYXRpYyBoaWRlIGlzIG5vdCBtaXNhdHRyaWJ1dGVkLiBBIGNsb3NlLWJ1dHRvbiBjbGljayBpcyB0cmFja2VkIHNlcGFyYXRlbHkgKHNlZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LmFwcGVuZENsb3NlQnV0dG9ufSkuXG4gICAqXG4gICAqIEBwYXJhbSBub3RpY2UgLSBUaGUgbm90aWNlIHRvIHRyYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsVXNlckNsaWNrVHJhY2tpbmcobm90aWNlOiBOb3RpY2UpOiB2b2lkIHtcbiAgICBub3RpY2UuY29udGFpbmVyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAvLyBPYnNpZGlhbiBkaXNtaXNzZXMgYSBkaXNtaXNzaWJsZSBub3RpY2Ugc3luY2hyb25vdXNseSBkdXJpbmcgdGhpcyBjbGljaywgc28gbWFyayBpdCBub3cgKGJlZm9yZVxuICAgICAgLy8gVGhhdCBoaWRlIHJ1bnMpIGFuZCBjbGVhciBpdCBvbiB0aGUgbmV4dCBtaWNyb3Rhc2sgXHUyMDE0IGFmdGVyIGFueSBzeW5jaHJvbm91cyBkaXNtaXNzLCBidXQgYmVmb3JlIGFcbiAgICAgIC8vIExhdGVyIHByb2dyYW1tYXRpYyBoaWRlLCBzbyB0aGF0IGhpZGUgaXMgbm90IG1pc2F0dHJpYnV0ZWQgYXMgYSB1c2VyIGFjdGlvbi5cbiAgICAgIHRoaXMudXNlckNsaWNrZWROb3RpY2VzLmFkZChub3RpY2UpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnVzZXJDbGlja2VkTm90aWNlcy5kZWxldGUobm90aWNlKTtcbiAgICAgIH0pO1xuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGVybWFuZW50Tm90aWNlKG5vdGljZTogTm90aWNlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuZ2V0UGVybWFuZW50Tm90aWNlcygpO1xuICAgIGlmIChub3RpY2UpIHtcbiAgICAgIG1hcC5zZXQodGhpcy5wbHVnaW5OYW1lLCBub3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuZGVsZXRlKHRoaXMucGx1Z2luTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIHdpdGggdGhlIGdpdmVuIGR1cmF0aW9uLiBBIHJldXNhYmxlIG5vdGljZSByZXBsYWNlcyB0aGUgY3VycmVudCByZXVzYWJsZSBub3RpY2UgKGFuZFxuICAgKiBpcyBvcHRpb25hbGx5IHJlZ2lzdGVyZWQgYXMgdGhpcyBwbHVnaW4ncyBwZXJtYW5lbnQgbm90aWNlKTsgYSBzdGFuZGFsb25lIG5vdGljZSBpcyB0cmFja2VkXG4gICAqIHNlcGFyYXRlbHksIGxlYXZpbmcgdGhlIHJldXNhYmxlIHNsb3QgdW50b3VjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIG5vdGljZS5cbiAgICovXG4gIHByaXZhdGUgc2hvd05vdGljZVdpdGhEdXJhdGlvbihwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMpOiBOb3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgaXNSZXVzYWJsZSwgbWVzc2FnZSwgb25DbG9zZUNsaWNrLCBvbkhpZGUsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSwgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCwgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uIH0gPSBwYXJhbXM7XG4gICAgLy8gT2JzaWRpYW4ncyBgTm90aWNlYCB0cmVhdHMgYW4gb21pdHRlZCBkdXJhdGlvbiBhcyBpdHMgZGVmYXVsdCwgc28gbWFwIHRoZSBgbnVsbGAgXCJubyBleHBsaWNpdFxuICAgIC8vIER1cmF0aW9uXCIgdmFsdWUgdG8gYHVuZGVmaW5lZGAuXG4gICAgY29uc3Qgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgaGFzQ2xvc2VCdXR0b24gPSByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgJiYgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uO1xuICAgIC8vIFRoZSBjbG9zZSBidXR0b24ncyBjbGljayBoYW5kbGVyIG5lZWRzIHRoZSBgTm90aWNlYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgdW50aWwgaXQgaXMgYnVpbHQgZnJvbVxuICAgIC8vIFRoaXMgY29udGVudDsgY2FwdHVyZSBpdCBsYXppbHkgdmlhIGEgaG9sZGVyIHJlc29sdmVkIGF0IGNsaWNrIHRpbWUuIFRoZSBnZXR0ZXIgaXMgY3JlYXRlZCBvbmx5XG4gICAgLy8gV2hlbiBhIGNsb3NlIGJ1dHRvbiBpcyBzaG93bi5cbiAgICBsZXQgYnVpbHROb3RpY2U6IE5vdGljZSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmJ1aWxkTm90aWNlQ29udGVudChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zPih7XG4gICAgICBnZXROb3RpY2U6IGhhc0Nsb3NlQnV0dG9uID8gKCk6IE5vdGljZSB8IG51bGwgPT4gYnVpbHROb3RpY2UgOiB1bmRlZmluZWQsXG4gICAgICBtZXNzYWdlLFxuICAgICAgb25DbG9zZUNsaWNrLFxuICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlLFxuICAgICAgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uXG4gICAgfSkpO1xuXG4gICAgaWYgKCFpc1JldXNhYmxlKSB7XG4gICAgICBidWlsdE5vdGljZSA9IG5ldyBOb3RpY2UoY29udGVudCwgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyk7XG4gICAgICB0aGlzLmluc3RhbGxFeHBsaWNpdENsb3NlR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UpO1xuICAgICAgdGhpcy5pbnN0YWxsVXNlckNsaWNrVHJhY2tpbmcoYnVpbHROb3RpY2UpO1xuICAgICAgdGhpcy53aXJlT25IaWRlKGJ1aWx0Tm90aWNlLCBvbkhpZGUpO1xuICAgICAgdGhpcy5zdGFuZGFsb25lTm90aWNlcy5hZGQoYnVpbHROb3RpY2UpO1xuICAgICAgcmV0dXJuIGJ1aWx0Tm90aWNlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWNlPy5oaWRlKCk7XG4gICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGNvbnRlbnQsIG5vdGljZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpO1xuICAgIHRoaXMubm90aWNlID0gYnVpbHROb3RpY2U7XG4gICAgdGhpcy5pbnN0YWxsRXhwbGljaXRDbG9zZUd1YXJkcyhidWlsdE5vdGljZSwgcmVxdWlyZXNFeHBsaWNpdENsb3NlKTtcbiAgICB0aGlzLmluc3RhbGxVc2VyQ2xpY2tUcmFja2luZyhidWlsdE5vdGljZSk7XG4gICAgdGhpcy53aXJlT25IaWRlKGJ1aWx0Tm90aWNlLCBvbkhpZGUpO1xuXG4gICAgaWYgKHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKGJ1aWx0Tm90aWNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UobnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsdE5vdGljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhIG5vdGljZSdzIGBoaWRlYCBzbyB0aGUgZ2l2ZW4gY2FsbGJhY2sgcnVucyB0aGUgZmlyc3QgdGltZSB0aGUgbm90aWNlIGlzIGhpZGRlbiBcdTIwMTQgYnkgdGhlXG4gICAqIHVzZXIsIGJ5IGEgcmVwbGFjaW5nIG5vdGljZSwgYnkgaXRzIGR1cmF0aW9uIGVsYXBzaW5nLCBvciBvbiB1bmxvYWQuIERvZXMgbm90aGluZyB3aGVuIG5vIGNhbGxiYWNrXG4gICAqIGlzIGdpdmVuLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWNlIC0gVGhlIG5vdGljZSB3aG9zZSBgaGlkZWAgdG8gd3JhcC5cbiAgICogQHBhcmFtIG9uSGlkZSAtIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gdGhlIGZpcnN0IGhpZGUsIG9yIGB1bmRlZmluZWRgIHRvIHNraXAgd3JhcHBpbmcuXG4gICAqL1xuICBwcml2YXRlIHdpcmVPbkhpZGUobm90aWNlOiBOb3RpY2UsIG9uSGlkZTogKCh0aGlzOiB2b2lkLCBpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIW9uSGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSdW4gYG9uSGlkZWAgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4uIEEgYG9uY2VgIHBhdGNoIG9uIGBoaWRlYCBpbnRlcmNlcHRzIGV4YWN0bHkgb25lXG4gICAgLy8gQ2FsbCB0aGVuIHVuaW5zdGFsbHMgaXRzZWxmICh1bmxvYWRpbmcgdGhpcyBkZWRpY2F0ZWQgY29tcG9uZW50KSwgc28gdGhlcmUgaXMgbm8gbWFudWFsXG4gICAgLy8gU2luZ2xlLWZpcmUgYm9va2tlZXBpbmcgYW5kIG5vIGxpbmdlcmluZyBwYXRjaCBvbiB0aGUgdHJhbnNpZW50IG5vdGljZS4gVGhlIHVzZXItY2xvc2UgZmxhZ3Mgd2VyZVxuICAgIC8vIFNldCBiZWZvcmUgYGhpZGUoKWAgd2FzIGludm9rZWQgKHNlZSBgYXBwZW5kQ2xvc2VCdXR0b25gIC8gYGluc3RhbGxVc2VyQ2xpY2tUcmFja2luZ2ApLCBzbyB0aGV5XG4gICAgLy8gU3RpbGwgaG9sZCB3aGVuIHJlYWQgaGVyZSBhZnRlciBgZmFsbGJhY2soKWAuXG4gICAgY29uc3QgcGF0Y2hDb21wb25lbnQgPSBuZXcgTW9ua2V5QXJvdW5kQ29tcG9uZW50KCk7XG4gICAgcGF0Y2hDb21wb25lbnQubG9hZCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICAgJG9iamVjdDogbm90aWNlLFxuICAgICAgbWV0aG9kTmFtZTogJ2hpZGUnLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSkgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICBjb25zdCBpc0Nsb3NlQnV0dG9uQ2xpY2tlZCA9IHRoaXMuY2xvc2VCdXR0b25DbGlja2VkTm90aWNlcy5oYXMobm90aWNlKTtcbiAgICAgICAgY29uc3QgaXNVc2VyQWN0aW9uID0gaXNDbG9zZUJ1dHRvbkNsaWNrZWQgfHwgdGhpcy51c2VyQ2xpY2tlZE5vdGljZXMuaGFzKG5vdGljZSk7XG4gICAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBvbkhpZGUoeyBpc0Nsb3NlQnV0dG9uQ2xpY2tlZCwgaXNVc2VyQWN0aW9uIH0pO1xuICAg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
|
|
@@ -192,11 +192,11 @@ export declare class PluginSettingsComponentBase<PluginSettings extends object>
|
|
|
192
192
|
* Remove an event listener.
|
|
193
193
|
*
|
|
194
194
|
* @typeParam EventName - The name of the event.
|
|
195
|
-
* @typeParam
|
|
195
|
+
* @typeParam Arguments - The types of the arguments the event callback accepts.
|
|
196
196
|
* @param name - The name of the event.
|
|
197
197
|
* @param callback - The callback to remove.
|
|
198
198
|
*/
|
|
199
|
-
off<EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings>,
|
|
199
|
+
off<EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings>, Arguments extends EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings> ? PluginSettingsComponentBaseEventMap<PluginSettings>[EventName] : unknown[]>(name: EventName, callback: (...$arguments: Arguments) => Promisable<void>): void;
|
|
200
200
|
/**
|
|
201
201
|
* Remove an event listener by reference.
|
|
202
202
|
*
|
|
@@ -207,30 +207,30 @@ export declare class PluginSettingsComponentBase<PluginSettings extends object>
|
|
|
207
207
|
* Add an event listener.
|
|
208
208
|
*
|
|
209
209
|
* @typeParam EventName - The name of the event.
|
|
210
|
-
* @typeParam
|
|
210
|
+
* @typeParam Arguments - The types of the arguments the event callback accepts.
|
|
211
211
|
* @param name - The name of the event.
|
|
212
212
|
* @param callback - The callback to call when the event is triggered.
|
|
213
|
-
* @param
|
|
213
|
+
* @param thisArgument - The context passed as `this` to the `callback`.
|
|
214
214
|
* @returns A reference to the event listener.
|
|
215
215
|
*
|
|
216
216
|
* @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
|
|
217
217
|
*/
|
|
218
|
-
on<EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings>,
|
|
218
|
+
on<EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings>, Arguments extends EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings> ? PluginSettingsComponentBaseEventMap<PluginSettings>[EventName] : unknown[]>(name: EventName, callback: (...$arguments: Arguments) => Promisable<void>, thisArgument?: unknown): AsyncEventRef;
|
|
219
219
|
/**
|
|
220
220
|
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
221
221
|
*
|
|
222
222
|
* Add an event listener that will be called only once.
|
|
223
223
|
*
|
|
224
224
|
* @typeParam EventName - The name of the event.
|
|
225
|
-
* @typeParam
|
|
225
|
+
* @typeParam Arguments - The types of the arguments the event callback accepts.
|
|
226
226
|
* @param name - The name of the event.
|
|
227
227
|
* @param callback - The callback to call when the event is triggered.
|
|
228
|
-
* @param
|
|
228
|
+
* @param thisArgument - The context passed as `this` to the `callback`.
|
|
229
229
|
* @returns A reference to the event listener.
|
|
230
230
|
*
|
|
231
231
|
* @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
|
|
232
232
|
*/
|
|
233
|
-
once<EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings>,
|
|
233
|
+
once<EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings>, Arguments extends EventName extends keyof PluginSettingsComponentBaseEventMap<PluginSettings> ? PluginSettingsComponentBaseEventMap<PluginSettings>[EventName] : unknown[]>(name: EventName, callback: (...$arguments: Arguments) => Promisable<void>, thisArgument?: unknown): AsyncEventRef;
|
|
234
234
|
/**
|
|
235
235
|
* Called when the external settings change.
|
|
236
236
|
*
|