obsidian-dev-utils 67.0.0 → 69.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 +24 -0
- package/dist/dev/main.js +487 -267
- package/dist/lib/cjs/@types/debug.d.cts +1 -0
- package/dist/lib/cjs/abort-controller.d.cts +1 -0
- package/dist/lib/cjs/array.d.cts +1 -0
- package/dist/lib/cjs/async-events.cjs +178 -18
- package/dist/lib/cjs/async-events.d.cts +261 -9
- package/dist/lib/cjs/async.d.cts +1 -0
- package/dist/lib/cjs/blob.d.cts +1 -0
- package/dist/lib/cjs/codemirror/index.d.cts +1 -0
- package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -0
- package/dist/lib/cjs/css-class.d.cts +1 -0
- package/dist/lib/cjs/debug-controller.d.cts +1 -0
- package/dist/lib/cjs/debug.d.cts +1 -0
- package/dist/lib/cjs/enum.d.cts +1 -0
- package/dist/lib/cjs/error.cjs +6 -7
- package/dist/lib/cjs/error.d.cts +1 -0
- package/dist/lib/cjs/function.cjs +6 -2
- package/dist/lib/cjs/function.d.cts +7 -0
- package/dist/lib/cjs/html-element.d.cts +1 -0
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/library.d.cts +4 -0
- package/dist/lib/cjs/object-utils.cjs +1 -1
- package/dist/lib/cjs/object-utils.d.cts +3 -0
- package/dist/lib/cjs/obsidian/@types/dataview/api/data-array.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/api/extensions.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/api/inline-api.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/api/plugin-api.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/api/result.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/common.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/csv.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/inline-field.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/markdown-file.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/persister.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/web-worker/import-entry.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/web-worker/import-impl.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-import/web-worker/import-manager.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-index/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-index/resolver.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-index/source.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-model/markdown.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-model/serialized/markdown.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-model/transferable.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/data-model/value.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/expression/binaryop.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/expression/context.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/expression/field.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/expression/functions.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/expression/parse.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/main.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/query/engine.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/query/parse.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/query/query.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/settings.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/typings/obsidian-ex.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/typings/workers.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/export/markdown.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/lp-render.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/markdown.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/refreshable-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/render.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/calendar-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/inline-field-live-preview.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/inline-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/js-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/list-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/table-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/ui/views/task-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/util/hash.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/util/locale.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/util/media.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/dataview/util/normalize.d.cts +1 -0
- package/dist/lib/cjs/obsidian/@types/i18next.d.cts +1 -0
- package/dist/lib/cjs/obsidian/active-file-provider.cjs +1 -1
- package/dist/lib/cjs/obsidian/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/obsidian/app.d.cts +1 -0
- package/dist/lib/cjs/obsidian/async-with-notice.d.cts +1 -0
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +1 -0
- package/dist/lib/cjs/obsidian/backlink.d.cts +1 -0
- package/dist/lib/cjs/obsidian/callout.d.cts +1 -0
- package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +4 -4
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-registrar.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/abort-signal-component.d.cts +3 -6
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +3 -2
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.d.cts +3 -6
- package/dist/lib/cjs/obsidian/components/async-events-component.cjs +2 -20
- package/dist/lib/cjs/obsidian/components/async-events-component.d.cts +2 -18
- package/dist/lib/cjs/obsidian/components/component-ex.cjs +235 -0
- package/dist/lib/cjs/obsidian/components/component-ex.d.cts +56 -0
- package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +3 -6
- package/dist/lib/cjs/obsidian/components/disposable-component.cjs +1 -9
- package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +1 -10
- package/dist/lib/cjs/obsidian/components/i18n-component.cjs +4 -8
- package/dist/lib/cjs/obsidian/components/i18n-component.d.cts +4 -7
- package/dist/lib/cjs/obsidian/components/index.cjs +9 -6
- package/dist/lib/cjs/obsidian/components/index.d.cts +3 -1
- package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +3 -2
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +3 -3
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +4 -4
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +3 -6
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -6
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +53 -12
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +54 -18
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +3 -2
- package/dist/lib/cjs/obsidian/components/registry-component.cjs +180 -0
- package/dist/lib/cjs/obsidian/components/registry-component.d.cts +37 -0
- package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.d.cts +1 -0
- package/dist/lib/cjs/obsidian/constructors/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/data-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/dataview-link.d.cts +1 -0
- package/dist/lib/cjs/obsidian/dataview.d.cts +1 -0
- package/dist/lib/cjs/obsidian/editor.d.cts +1 -0
- package/dist/lib/cjs/obsidian/file-change.d.cts +1 -0
- package/dist/lib/cjs/obsidian/file-manager.d.cts +1 -0
- package/dist/lib/cjs/obsidian/file-system.d.cts +1 -0
- package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.d.cts +1 -0
- package/dist/lib/cjs/obsidian/frontmatter.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/custom-type-options.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/default-translations.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/locales/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +1 -0
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/is-in-obsidian.d.cts +1 -0
- package/dist/lib/cjs/obsidian/link.d.cts +1 -0
- package/dist/lib/cjs/obsidian/logger.d.cts +1 -0
- package/dist/lib/cjs/obsidian/loop.d.cts +1 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +1 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +1 -0
- package/dist/lib/cjs/obsidian/markdown-view.d.cts +1 -0
- package/dist/lib/cjs/obsidian/markdown.cjs +2 -3
- package/dist/lib/cjs/obsidian/markdown.d.cts +1 -0
- package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/alert.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/confirm.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/modal.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/prompt.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -0
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.d.cts +1 -0
- package/dist/lib/cjs/obsidian/obsidian-settings.d.cts +1 -0
- package/dist/lib/cjs/obsidian/path-settings.d.cts +1 -0
- package/dist/lib/cjs/obsidian/pdf.d.cts +1 -0
- package/dist/lib/cjs/obsidian/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +1 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +1 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-id.d.cts +1 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +21 -20
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +8 -3
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +35 -76
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +36 -36
- package/dist/lib/cjs/obsidian/queue.d.cts +1 -0
- package/dist/lib/cjs/obsidian/react/app-context.d.cts +1 -0
- package/dist/lib/cjs/obsidian/react/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/reference.d.cts +1 -0
- package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +1 -2
- package/dist/lib/cjs/obsidian/rename-delete-handler.d.cts +1 -0
- package/dist/lib/cjs/obsidian/resource-url.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/date-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/date-time-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/email-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/file-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/month-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/number-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/password-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/telephone-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/text-based-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/time-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +3 -1
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +3 -0
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/typed-range-text-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/url-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/validator-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-components/week-component.d.cts +1 -0
- package/dist/lib/cjs/obsidian/setting-ex.cjs +3 -1
- package/dist/lib/cjs/obsidian/setting-ex.d.cts +3 -0
- package/dist/lib/cjs/obsidian/setting-group-ex.d.cts +1 -0
- package/dist/lib/cjs/obsidian/validation.d.cts +1 -0
- package/dist/lib/cjs/obsidian/vault-delete.d.cts +1 -0
- package/dist/lib/cjs/obsidian/vault.d.cts +1 -0
- package/dist/lib/cjs/obsidian/workspace.d.cts +1 -0
- package/dist/lib/cjs/path.d.cts +1 -0
- package/dist/lib/cjs/reg-exp.d.cts +1 -0
- package/dist/lib/cjs/script-utils/build.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild.d.cts +1 -0
- package/dist/lib/cjs/script-utils/bundlers/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/cli-utils.d.cts +1 -0
- package/dist/lib/cjs/script-utils/code-generator.d.cts +1 -0
- package/dist/lib/cjs/script-utils/commitlint-config.d.cts +1 -0
- package/dist/lib/cjs/script-utils/exec.d.cts +1 -0
- package/dist/lib/cjs/script-utils/formatters/dprint.d.cts +1 -0
- package/dist/lib/cjs/script-utils/formatters/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/fs.d.cts +1 -0
- package/dist/lib/cjs/script-utils/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/json.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/cspell.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +2 -1
- package/dist/lib/cjs/script-utils/linters/eslint-config.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-members.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +2 -2
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +222 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +5 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint.d.cts +1 -0
- package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +1 -0
- package/dist/lib/cjs/script-utils/npm-publish.d.cts +1 -0
- package/dist/lib/cjs/script-utils/npm-run.d.cts +1 -0
- package/dist/lib/cjs/script-utils/npm.d.cts +1 -0
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +1 -0
- package/dist/lib/cjs/script-utils/root.d.cts +1 -0
- package/dist/lib/cjs/script-utils/test-runners/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/test-runners/vitest.d.cts +1 -0
- package/dist/lib/cjs/script-utils/version.d.cts +1 -0
- package/dist/lib/cjs/strict-proxy.d.cts +1 -0
- package/dist/lib/cjs/string.d.cts +1 -0
- package/dist/lib/cjs/transformers/date-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/duration-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/group-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/index.d.cts +1 -0
- package/dist/lib/cjs/transformers/map-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/set-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +1 -0
- package/dist/lib/cjs/transformers/typed-transformer.d.cts +1 -0
- package/dist/lib/cjs/two-way-map.d.cts +1 -0
- package/dist/lib/cjs/type-guards.d.cts +1 -0
- package/dist/lib/cjs/type.d.cts +1 -0
- package/dist/lib/cjs/url.d.cts +1 -0
- package/dist/lib/cjs/value-provider.d.cts +1 -0
- package/dist/lib/esm/@types/debug.d.mts +1 -0
- package/dist/lib/esm/abort-controller.d.mts +1 -0
- package/dist/lib/esm/array.d.mts +1 -0
- package/dist/lib/esm/async-events.d.mts +261 -9
- package/dist/lib/esm/async-events.mjs +175 -17
- package/dist/lib/esm/async.d.mts +1 -0
- package/dist/lib/esm/blob.d.mts +1 -0
- package/dist/lib/esm/codemirror/index.d.mts +1 -0
- package/dist/lib/esm/codemirror/state-field-spec.d.mts +1 -0
- package/dist/lib/esm/css-class.d.mts +1 -0
- package/dist/lib/esm/debug-controller.d.mts +1 -0
- package/dist/lib/esm/debug.d.mts +1 -0
- package/dist/lib/esm/enum.d.mts +1 -0
- package/dist/lib/esm/error.d.mts +1 -0
- package/dist/lib/esm/error.mjs +6 -7
- package/dist/lib/esm/function.d.mts +7 -0
- package/dist/lib/esm/function.mjs +5 -2
- package/dist/lib/esm/html-element.d.mts +1 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/library.d.mts +4 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/object-utils.d.mts +3 -0
- package/dist/lib/esm/object-utils.mjs +1 -1
- package/dist/lib/esm/obsidian/@types/dataview/api/data-array.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/api/extensions.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/api/inline-api.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/api/plugin-api.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/api/result.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/common.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/csv.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/inline-field.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/markdown-file.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/persister.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/web-worker/import-entry.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/web-worker/import-impl.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-import/web-worker/import-manager.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-index/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-index/resolver.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-index/source.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-model/markdown.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-model/serialized/markdown.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-model/transferable.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/data-model/value.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/expression/binaryop.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/expression/context.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/expression/field.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/expression/functions.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/expression/parse.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/main.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/query/engine.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/query/parse.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/query/query.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/settings.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/typings/obsidian-ex.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/typings/workers.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/export/markdown.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/lp-render.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/markdown.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/refreshable-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/render.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/calendar-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/inline-field-live-preview.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/inline-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/js-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/list-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/table-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/ui/views/task-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/util/hash.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/util/locale.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/util/media.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/dataview/util/normalize.d.mts +1 -0
- package/dist/lib/esm/obsidian/@types/i18next.d.mts +1 -0
- package/dist/lib/esm/obsidian/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/obsidian/active-file-provider.mjs +1 -1
- package/dist/lib/esm/obsidian/app.d.mts +1 -0
- package/dist/lib/esm/obsidian/async-with-notice.d.mts +1 -0
- package/dist/lib/esm/obsidian/attachment-path.d.mts +1 -0
- package/dist/lib/esm/obsidian/backlink.d.mts +1 -0
- package/dist/lib/esm/obsidian/callout.d.mts +1 -0
- package/dist/lib/esm/obsidian/code-block-markdown-information.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +4 -4
- package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/global-command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-registrar.d.mts +1 -0
- package/dist/lib/esm/obsidian/components/abort-signal-component.d.mts +3 -6
- package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +3 -2
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/async-error-handler-component.d.mts +3 -6
- package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/async-events-component.d.mts +2 -18
- package/dist/lib/esm/obsidian/components/async-events-component.mjs +2 -19
- package/dist/lib/esm/obsidian/components/component-ex.d.mts +56 -0
- package/dist/lib/esm/obsidian/components/component-ex.mjs +130 -0
- package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +3 -6
- package/dist/lib/esm/obsidian/components/console-debug-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/disposable-component.d.mts +1 -10
- package/dist/lib/esm/obsidian/components/disposable-component.mjs +1 -8
- package/dist/lib/esm/obsidian/components/i18n-component.d.mts +4 -7
- package/dist/lib/esm/obsidian/components/i18n-component.mjs +4 -8
- package/dist/lib/esm/obsidian/components/index.d.mts +3 -1
- package/dist/lib/esm/obsidian/components/index.mjs +6 -4
- package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +3 -2
- package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +3 -3
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +4 -4
- package/dist/lib/esm/obsidian/components/plugin-context-component.d.mts +3 -6
- package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -6
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +54 -18
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +53 -12
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.d.mts +3 -2
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/registry-component.d.mts +37 -0
- package/dist/lib/esm/obsidian/components/registry-component.mjs +72 -0
- package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.d.mts +1 -0
- package/dist/lib/esm/obsidian/constructors/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/data-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/dataview-link.d.mts +1 -0
- package/dist/lib/esm/obsidian/dataview.d.mts +1 -0
- package/dist/lib/esm/obsidian/editor.d.mts +1 -0
- package/dist/lib/esm/obsidian/file-change.d.mts +1 -0
- package/dist/lib/esm/obsidian/file-manager.d.mts +1 -0
- package/dist/lib/esm/obsidian/file-system.d.mts +1 -0
- package/dist/lib/esm/obsidian/frontmatter-link-cache-with-offsets.d.mts +1 -0
- package/dist/lib/esm/obsidian/frontmatter.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/custom-type-options.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/default-translations.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/i18n.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/locales/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/is-in-obsidian.d.mts +1 -0
- package/dist/lib/esm/obsidian/link.d.mts +1 -0
- package/dist/lib/esm/obsidian/logger.d.mts +1 -0
- package/dist/lib/esm/obsidian/loop.d.mts +1 -0
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +1 -0
- package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +1 -0
- package/dist/lib/esm/obsidian/markdown-view.d.mts +1 -0
- package/dist/lib/esm/obsidian/markdown.d.mts +1 -0
- package/dist/lib/esm/obsidian/markdown.mjs +2 -3
- package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/alert.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/confirm.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/modal.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/prompt.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -0
- package/dist/lib/esm/obsidian/obsidian-protocol-handler-registrar.d.mts +1 -0
- package/dist/lib/esm/obsidian/obsidian-settings.d.mts +1 -0
- package/dist/lib/esm/obsidian/path-settings.d.mts +1 -0
- package/dist/lib/esm/obsidian/pdf.d.mts +1 -0
- package/dist/lib/esm/obsidian/plugin/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +1 -0
- package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +1 -0
- package/dist/lib/esm/obsidian/plugin/plugin-id.d.mts +1 -0
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +8 -3
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +22 -21
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +36 -36
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +35 -77
- package/dist/lib/esm/obsidian/queue.d.mts +1 -0
- package/dist/lib/esm/obsidian/react/app-context.d.mts +1 -0
- package/dist/lib/esm/obsidian/react/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/reference.d.mts +1 -0
- package/dist/lib/esm/obsidian/rename-delete-handler.d.mts +1 -0
- package/dist/lib/esm/obsidian/rename-delete-handler.mjs +1 -2
- package/dist/lib/esm/obsidian/resource-url.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/date-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/date-time-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/email-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/file-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/month-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/multiple-email-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/multiple-file-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/number-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/password-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/telephone-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/text-based-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/time-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +3 -0
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +3 -1
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/typed-range-text-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/url-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/validator-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/value-component-with-change-tracking.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-components/week-component.d.mts +1 -0
- package/dist/lib/esm/obsidian/setting-ex.d.mts +3 -0
- package/dist/lib/esm/obsidian/setting-ex.mjs +3 -1
- package/dist/lib/esm/obsidian/setting-group-ex.d.mts +1 -0
- package/dist/lib/esm/obsidian/validation.d.mts +1 -0
- package/dist/lib/esm/obsidian/vault-delete.d.mts +1 -0
- package/dist/lib/esm/obsidian/vault.d.mts +1 -0
- package/dist/lib/esm/obsidian/workspace.d.mts +1 -0
- package/dist/lib/esm/path.d.mts +1 -0
- package/dist/lib/esm/reg-exp.d.mts +1 -0
- package/dist/lib/esm/script-utils/build.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/rename-css-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild.d.mts +1 -0
- package/dist/lib/esm/script-utils/bundlers/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/cli-utils.d.mts +1 -0
- package/dist/lib/esm/script-utils/code-generator.d.mts +1 -0
- package/dist/lib/esm/script-utils/commitlint-config.d.mts +1 -0
- package/dist/lib/esm/script-utils/exec.d.mts +1 -0
- package/dist/lib/esm/script-utils/formatters/dprint.d.mts +1 -0
- package/dist/lib/esm/script-utils/formatters/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/fs.d.mts +1 -0
- package/dist/lib/esm/script-utils/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/json.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/cspell.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-config.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +2 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +2 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-members.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +2 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +5 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +112 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/rule-tester-helper.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/markdownlint.d.mts +1 -0
- package/dist/lib/esm/script-utils/nano-staged-config.d.mts +1 -0
- package/dist/lib/esm/script-utils/npm-publish.d.mts +1 -0
- package/dist/lib/esm/script-utils/npm-run.d.mts +1 -0
- package/dist/lib/esm/script-utils/npm.d.mts +1 -0
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +1 -0
- package/dist/lib/esm/script-utils/root.d.mts +1 -0
- package/dist/lib/esm/script-utils/test-runners/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/test-runners/vitest.d.mts +1 -0
- package/dist/lib/esm/script-utils/version.d.mts +1 -0
- package/dist/lib/esm/strict-proxy.d.mts +1 -0
- package/dist/lib/esm/string.d.mts +1 -0
- package/dist/lib/esm/transformers/date-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/duration-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/group-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/index.d.mts +1 -0
- package/dist/lib/esm/transformers/map-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/set-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +1 -0
- package/dist/lib/esm/transformers/typed-transformer.d.mts +1 -0
- package/dist/lib/esm/two-way-map.d.mts +1 -0
- package/dist/lib/esm/type-guards.d.mts +1 -0
- package/dist/lib/esm/type.d.mts +1 -0
- package/dist/lib/esm/url.d.mts +1 -0
- package/dist/lib/esm/value-provider.d.mts +1 -0
- package/obsidian/Components/component-ex/package.json +6 -0
- package/obsidian/Components/registry-component/package.json +6 -0
- package/package.json +25 -23
- package/script-utils/linters/eslint-rules/require-method-template/package.json +6 -0
- package/dist/lib/cjs/obsidian/components/async-component.cjs +0 -183
- package/dist/lib/cjs/obsidian/components/async-component.d.cts +0 -43
- package/dist/lib/esm/obsidian/components/async-component.d.mts +0 -43
- package/dist/lib/esm/obsidian/components/async-component.mjs +0 -73
- package/obsidian/Components/async-component/package.json +0 -6
package/dist/lib/cjs/array.d.cts
CHANGED
|
@@ -125,15 +125,19 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
125
125
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
126
|
var async_events_exports = {};
|
|
127
127
|
__export(async_events_exports, {
|
|
128
|
-
AsyncEvents: () => AsyncEvents
|
|
128
|
+
AsyncEvents: () => AsyncEvents,
|
|
129
|
+
AsyncEventsBase: () => AsyncEventsBase,
|
|
130
|
+
mixinAsyncEvents: () => mixinAsyncEvents
|
|
129
131
|
});
|
|
130
132
|
module.exports = __toCommonJS(async_events_exports);
|
|
131
133
|
var import_array = require('./array.cjs');
|
|
132
|
-
class
|
|
134
|
+
class AsyncEventsBase {
|
|
133
135
|
eventRefsMap = /* @__PURE__ */ new Map();
|
|
134
136
|
/**
|
|
135
137
|
* Remove an event listener.
|
|
136
138
|
*
|
|
139
|
+
* @typeParam EventName - The name of the event.
|
|
140
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
137
141
|
* @param name - The name of the event.
|
|
138
142
|
* @param callback - The callback to remove.
|
|
139
143
|
*
|
|
@@ -142,6 +146,7 @@ class AsyncEvents {
|
|
|
142
146
|
* events.off('my-event', myListener);
|
|
143
147
|
* ```
|
|
144
148
|
*/
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
145
150
|
off(name, callback) {
|
|
146
151
|
const eventRefs = this.eventRefsMap.get(name);
|
|
147
152
|
if (!eventRefs) {
|
|
@@ -175,6 +180,8 @@ class AsyncEvents {
|
|
|
175
180
|
/**
|
|
176
181
|
* Add an event listener.
|
|
177
182
|
*
|
|
183
|
+
* @typeParam EventName - The name of the event.
|
|
184
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
178
185
|
* @param name - The name of the event.
|
|
179
186
|
* @param callback - The callback to call when the event is triggered.
|
|
180
187
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
@@ -188,6 +195,7 @@ class AsyncEvents {
|
|
|
188
195
|
* });
|
|
189
196
|
* ```
|
|
190
197
|
*/
|
|
198
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
191
199
|
on(name, callback, thisArg) {
|
|
192
200
|
let eventRefs = this.eventRefsMap.get(name);
|
|
193
201
|
if (!eventRefs) {
|
|
@@ -195,7 +203,7 @@ class AsyncEvents {
|
|
|
195
203
|
this.eventRefsMap.set(name, eventRefs);
|
|
196
204
|
}
|
|
197
205
|
const eventRef = {
|
|
198
|
-
|
|
206
|
+
asyncEventSource: this,
|
|
199
207
|
callback,
|
|
200
208
|
name,
|
|
201
209
|
thisArg
|
|
@@ -206,6 +214,8 @@ class AsyncEvents {
|
|
|
206
214
|
/**
|
|
207
215
|
* Add an event listener that will be triggered only once.
|
|
208
216
|
*
|
|
217
|
+
* @typeParam EventName - The name of the event.
|
|
218
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
209
219
|
* @param name - The name of the event.
|
|
210
220
|
* @param callback - The callback to call when the event is triggered.
|
|
211
221
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
@@ -219,6 +229,7 @@ class AsyncEvents {
|
|
|
219
229
|
* });
|
|
220
230
|
* ```
|
|
221
231
|
*/
|
|
232
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
222
233
|
once(name, callback, thisArg) {
|
|
223
234
|
const originalEventRef = this.on(name, callback, thisArg);
|
|
224
235
|
const cleanupEventRef = this.on(name, () => {
|
|
@@ -230,6 +241,7 @@ class AsyncEvents {
|
|
|
230
241
|
/**
|
|
231
242
|
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
232
243
|
*
|
|
244
|
+
* @typeParam EventName - The name of the event.
|
|
233
245
|
* @param name - The name of the event.
|
|
234
246
|
* @param args - The data to pass to the event listeners.
|
|
235
247
|
*
|
|
@@ -238,7 +250,6 @@ class AsyncEvents {
|
|
|
238
250
|
* events.trigger('my-event', 'arg1', 'arg2');
|
|
239
251
|
* ```
|
|
240
252
|
*/
|
|
241
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
242
253
|
trigger(name, ...args) {
|
|
243
254
|
const eventRefs = this.eventRefsMap.get(name) ?? [];
|
|
244
255
|
for (const eventRef of eventRefs.slice()) {
|
|
@@ -248,10 +259,11 @@ class AsyncEvents {
|
|
|
248
259
|
/**
|
|
249
260
|
* Trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
250
261
|
*
|
|
262
|
+
* @typeParam EventName - The name of the event.
|
|
251
263
|
* @param name - The name of the event.
|
|
252
264
|
* @param args - The data to pass to the event listeners.
|
|
265
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
253
266
|
*/
|
|
254
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
255
267
|
async triggerAsync(name, ...args) {
|
|
256
268
|
const eventRefs = this.eventRefsMap.get(name) ?? [];
|
|
257
269
|
for (const eventRef of eventRefs.slice()) {
|
|
@@ -261,6 +273,7 @@ class AsyncEvents {
|
|
|
261
273
|
/**
|
|
262
274
|
* Try to trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
263
275
|
*
|
|
276
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
264
277
|
* @param eventRef - The event reference.
|
|
265
278
|
* @param args - The data to pass to the event listeners.
|
|
266
279
|
*
|
|
@@ -274,37 +287,184 @@ class AsyncEvents {
|
|
|
274
287
|
try {
|
|
275
288
|
const result = eventRef.callback.call(eventRef.thisArg, ...args);
|
|
276
289
|
if (result instanceof Promise) {
|
|
277
|
-
result.catch(
|
|
278
|
-
window.setTimeout(() => {
|
|
279
|
-
throw e;
|
|
280
|
-
}, 0);
|
|
281
|
-
});
|
|
290
|
+
result.catch(throwDelayed);
|
|
282
291
|
}
|
|
283
292
|
} catch (e) {
|
|
284
|
-
|
|
285
|
-
throw e;
|
|
286
|
-
}, 0);
|
|
293
|
+
throwDelayed(e);
|
|
287
294
|
}
|
|
288
295
|
}
|
|
289
296
|
/**
|
|
290
297
|
* Try to trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
291
298
|
*
|
|
299
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
292
300
|
* @param eventRef - The event reference.
|
|
293
301
|
* @param args - The data to pass to the event listeners.
|
|
302
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
294
303
|
*/
|
|
295
304
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
296
305
|
async tryTriggerAsync(eventRef, args) {
|
|
297
306
|
try {
|
|
298
307
|
await eventRef.callback.call(eventRef.thisArg, ...args);
|
|
299
308
|
} catch (e) {
|
|
300
|
-
|
|
301
|
-
throw e;
|
|
302
|
-
}, 0);
|
|
309
|
+
throwDelayed(e);
|
|
303
310
|
}
|
|
304
311
|
}
|
|
305
312
|
}
|
|
313
|
+
class AsyncEvents extends AsyncEventsBase {
|
|
314
|
+
/**
|
|
315
|
+
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
316
|
+
*
|
|
317
|
+
* @typeParam EventName - The name of the event.
|
|
318
|
+
* @param name - The name of the event.
|
|
319
|
+
* @param args - The data to pass to the event listeners.
|
|
320
|
+
*/
|
|
321
|
+
trigger(name, ...args) {
|
|
322
|
+
super.trigger(name, ...args);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
326
|
+
*
|
|
327
|
+
* @typeParam EventName - The name of the event.
|
|
328
|
+
* @param name - The name of the event.
|
|
329
|
+
* @param args - The data to pass to the event listeners.
|
|
330
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
331
|
+
*/
|
|
332
|
+
triggerAsync(name, ...args) {
|
|
333
|
+
return super.triggerAsync(name, ...args);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Try to trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
337
|
+
*
|
|
338
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
339
|
+
* @param eventRef - The event reference.
|
|
340
|
+
* @param args - The data to pass to the event listeners.
|
|
341
|
+
*/
|
|
342
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
343
|
+
tryTrigger(eventRef, args) {
|
|
344
|
+
super.tryTrigger(eventRef, args);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Try to trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
348
|
+
*
|
|
349
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
350
|
+
* @param eventRef - The event reference.
|
|
351
|
+
* @param args - The data to pass to the event listeners.
|
|
352
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
353
|
+
*/
|
|
354
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
355
|
+
async tryTriggerAsync(eventRef, args) {
|
|
356
|
+
return super.tryTriggerAsync(eventRef, args);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
function mixinAsyncEvents() {
|
|
360
|
+
return function inner(baseClass) {
|
|
361
|
+
class AsyncEventsMixin extends baseClass {
|
|
362
|
+
#asyncEvents = new AsyncEvents();
|
|
363
|
+
/**
|
|
364
|
+
* Remove an event listener.
|
|
365
|
+
*
|
|
366
|
+
* @typeParam EventName - The name of the event.
|
|
367
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
368
|
+
* @param name - The name of the event.
|
|
369
|
+
* @param callback - The callback to remove.
|
|
370
|
+
*/
|
|
371
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
372
|
+
off(name, callback) {
|
|
373
|
+
this.#asyncEvents.off(name, callback);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Remove an event listener by reference.
|
|
377
|
+
*
|
|
378
|
+
* @param eventRef - The event reference to remove.
|
|
379
|
+
*/
|
|
380
|
+
offref(eventRef) {
|
|
381
|
+
this.#asyncEvents.offref(eventRef);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Add an event listener.
|
|
385
|
+
*
|
|
386
|
+
* @typeParam EventName - The name of the event.
|
|
387
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
388
|
+
* @param name - The name of the event.
|
|
389
|
+
* @param callback - The callback to call when the event is triggered.
|
|
390
|
+
* @param thisArg - The context passed as `this` to the `callback`.
|
|
391
|
+
* @returns A reference to the event listener.
|
|
392
|
+
*/
|
|
393
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
394
|
+
on(name, callback, thisArg) {
|
|
395
|
+
return this.#asyncEvents.on(name, callback, thisArg);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Add an event listener that will be called only once.
|
|
399
|
+
*
|
|
400
|
+
* @typeParam EventName - The name of the event.
|
|
401
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
402
|
+
* @param name - The name of the event.
|
|
403
|
+
* @param callback - The callback to call when the event is triggered.
|
|
404
|
+
* @param thisArg - The context passed as `this` to the `callback`.
|
|
405
|
+
* @returns A reference to the event listener.
|
|
406
|
+
*/
|
|
407
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- We need to use the dummy parameter to get type inference.
|
|
408
|
+
once(name, callback, thisArg) {
|
|
409
|
+
return this.#asyncEvents.once(name, callback, thisArg);
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
413
|
+
*
|
|
414
|
+
* @typeParam EventName - The name of the event.
|
|
415
|
+
* @param name - The name of the event.
|
|
416
|
+
* @param args - The data to pass to the event listeners.
|
|
417
|
+
*/
|
|
418
|
+
trigger(name, ...args) {
|
|
419
|
+
this.#asyncEvents.trigger(name, ...args);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Trigger an event asynchronously.
|
|
423
|
+
*
|
|
424
|
+
* @typeParam EventName - The name of the event.
|
|
425
|
+
* @param name - The name of the event.
|
|
426
|
+
* @param args - The data to pass to the event listeners.
|
|
427
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
428
|
+
*/
|
|
429
|
+
async triggerAsync(name, ...args) {
|
|
430
|
+
await this.#asyncEvents.triggerAsync(name, ...args);
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Try to trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
434
|
+
*
|
|
435
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
436
|
+
* @param eventRef - The event reference.
|
|
437
|
+
* @param args - The data to pass to the event listeners.
|
|
438
|
+
*/
|
|
439
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Parity with Obsidian's Events.tryTrigger.
|
|
440
|
+
tryTrigger(eventRef, args) {
|
|
441
|
+
this.#asyncEvents.tryTrigger(eventRef, args);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Try to trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
445
|
+
*
|
|
446
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
447
|
+
* @param eventRef - The event reference.
|
|
448
|
+
* @param args - The data to pass to the event listeners.
|
|
449
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
450
|
+
*/
|
|
451
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Parity with Obsidian's Events.tryTrigger.
|
|
452
|
+
async tryTriggerAsync(eventRef, args) {
|
|
453
|
+
await this.#asyncEvents.tryTriggerAsync(eventRef, args);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
return AsyncEventsMixin;
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
function throwDelayed(error) {
|
|
460
|
+
window.setTimeout(() => {
|
|
461
|
+
throw error;
|
|
462
|
+
}, 0);
|
|
463
|
+
}
|
|
306
464
|
// Annotate the CommonJS export names for ESM import in node:
|
|
307
465
|
0 && (module.exports = {
|
|
308
|
-
AsyncEvents
|
|
466
|
+
AsyncEvents,
|
|
467
|
+
AsyncEventsBase,
|
|
468
|
+
mixinAsyncEvents
|
|
309
469
|
});
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLWV2ZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEFzeW5jIGV2ZW50IGVtaXR0ZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuXG5pbXBvcnQgeyBmaWx0ZXJJblBsYWNlIH0gZnJvbSAnLi9hcnJheS50cyc7XG5cbi8qKlxuICogQXN5bmMgZXZlbnQgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRXZlbnRSZWYge1xuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlci5cbiAgICovXG4gIGFzeW5jRXZlbnRzOiBBc3luY0V2ZW50cztcblxuICAvKipcbiAgICogQSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICovXG4gIGNhbGxiYWNrOiBHZW5lcmljQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEEgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKi9cbiAgdGhpc0FyZzogdW5rbm93bjtcbn1cblxudHlwZSBHZW5lcmljQ2FsbGJhY2sgPSBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbjx1bmtub3duW10+O1xuXG4vKipcbiAqIEFzeW5jIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEFzeW5jRXZlbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFJlZnNNYXAgPSBuZXcgTWFwPHN0cmluZywgQXN5bmNFdmVudFJlZltdPigpO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub2ZmKCdteS1ldmVudCcsIG15TGlzdGVuZXIpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvZmY8QXJncyBleHRlbmRzIHVua25vd25bXT4obmFtZTogc3RyaW5nLCBjYWxsYmFjazogR2VuZXJpY1Byb21pc2FibGVWb2lkRnVuY3Rpb248QXJncz4pOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFJlZnMgPSB0aGlzLmV2ZW50UmVmc01hcC5nZXQobmFtZSk7XG4gICAgaWYgKCFldmVudFJlZnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWx0ZXJJblBsYWNlKGV2ZW50UmVmcywgKGV2ZW50UmVmKSA9PiBldmVudFJlZi5jYWxsYmFjayAhPT0gY2FsbGJhY2spO1xuICAgIGlmIChldmVudFJlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmV2ZW50UmVmc01hcC5kZWxldGUobmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBieSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFJlZiAtIFRoZSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub2ZmcmVmKG15UmVmKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb2ZmcmVmKGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRSZWZzID0gdGhpcy5ldmVudFJlZnNNYXAuZ2V0KGV2ZW50UmVmLm5hbWUpO1xuICAgIGlmICghZXZlbnRSZWZzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmlsdGVySW5QbGFjZShldmVudFJlZnMsIChzdG9yZWRFdmVudFJlZikgPT4gc3RvcmVkRXZlbnRSZWYgIT09IGV2ZW50UmVmKTtcbiAgICBpZiAoZXZlbnRSZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5ldmVudFJlZnNNYXAuZGVsZXRlKGV2ZW50UmVmLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGNvbnRleHQgcGFzc2VkIGFzIGB0aGlzYCB0byB0aGUgYGNhbGxiYWNrYC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub24oJ215LWV2ZW50JywgYXN5bmMgKGFyZzEsIGFyZzIpID0+IHtcbiAgICogICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAqICAgICBjb25zb2xlLmxvZyhhcmcxLCBhcmcyKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEdlbmVyaWNQcm9taXNhYmxlVm9pZEZ1bmN0aW9uPEFyZ3M+LCB0aGlzQXJnPzogdW5rbm93bik6IEFzeW5jRXZlbnRSZWYge1xuICAgIGxldCBldmVudFJlZnMgPSB0aGlzLmV2ZW50UmVmc01hcC5nZXQobmFtZSk7XG4gICAgaWYgKCFldmVudFJlZnMpIHtcbiAgICAgIGV2ZW50UmVmcyA9IFtdO1xuICAgICAgdGhpcy5ldmVudFJlZnNNYXAuc2V0KG5hbWUsIGV2ZW50UmVmcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRSZWY6IEFzeW5jRXZlbnRSZWYgPSB7XG4gICAgICBhc3luY0V2ZW50czogdGhpcyxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayBhcyBHZW5lcmljQ2FsbGJhY2ssXG4gICAgICBuYW1lLFxuICAgICAgdGhpc0FyZ1xuICAgIH07XG4gICAgZXZlbnRSZWZzLnB1c2goZXZlbnRSZWYpO1xuICAgIHJldHVybiBldmVudFJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCBvbmx5IG9uY2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGNvbnRleHQgcGFzc2VkIGFzIGB0aGlzYCB0byB0aGUgYGNhbGxiYWNrYC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub25jZSgnbXktZXZlbnQnLCBhc3luYyAoYXJnMSwgYXJnMikgPT4ge1xuICAgKiAgICAgYXdhaXQgc2xlZXAoMTAwKTtcbiAgICogICAgIGNvbnNvbGUubG9nKGFyZzEsIGFyZzIpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25jZTxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbjxBcmdzPiwgdGhpc0FyZz86IHVua25vd24pOiBBc3luY0V2ZW50UmVmIHtcbiAgICBjb25zdCBvcmlnaW5hbEV2ZW50UmVmID0gdGhpcy5vbihuYW1lLCBjYWxsYmFjaywgdGhpc0FyZyk7XG4gICAgY29uc3QgY2xlYW51cEV2ZW50UmVmID0gdGhpcy5vbihuYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLm9mZnJlZihvcmlnaW5hbEV2ZW50UmVmKTtcbiAgICAgIHRoaXMub2ZmcmVmKGNsZWFudXBFdmVudFJlZik7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsRXZlbnRSZWY7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudCwgZXhlY3V0aW5nIGFsbCB0aGUgbGlzdGVuZXJzIGluIG9yZGVyIGV2ZW4gaWYgc29tZSBvZiB0aGVtIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy50cmlnZ2VyKCdteS1ldmVudCcsICdhcmcxJywgJ2FyZzInKTtcbiAgICogYGBgXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgcHVibGljIHRyaWdnZXI8QXJncyBleHRlbmRzIHVua25vd25bXT4obmFtZTogc3RyaW5nLCAuLi5hcmdzOiBBcmdzKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRSZWZzID0gdGhpcy5ldmVudFJlZnNNYXAuZ2V0KG5hbWUpID8/IFtdO1xuICAgIGZvciAoY29uc3QgZXZlbnRSZWYgb2YgZXZlbnRSZWZzLnNsaWNlKCkpIHtcbiAgICAgIHRoaXMudHJ5VHJpZ2dlcihldmVudFJlZiwgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnQgYXN5bmNocm9ub3VzbHksIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBhc3luYyB0cmlnZ2VyQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXT4obmFtZTogc3RyaW5nLCAuLi5hcmdzOiBBcmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXZlbnRSZWZzID0gdGhpcy5ldmVudFJlZnNNYXAuZ2V0KG5hbWUpID8/IFtdO1xuICAgIGZvciAoY29uc3QgZXZlbnRSZWYgb2YgZXZlbnRSZWZzLnNsaWNlKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJ5VHJpZ2dlckFzeW5jKGV2ZW50UmVmLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHRyaWdnZXIgYW4gZXZlbnQsIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIGV2ZW50IHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy50cnlUcmlnZ2VyKG15UmVmLCBbJ2FyZzEnLCAnYXJnMiddKTtcbiAgICogYGBgXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgcHVibGljIHRyeVRyaWdnZXI8QXJncyBleHRlbmRzIHVua25vd25bXT4oZXZlbnRSZWY6IEFzeW5jRXZlbnRSZWYsIGFyZ3M6IEFyZ3MpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZlbnRSZWYuY2FsbGJhY2suY2FsbChldmVudFJlZi50aGlzQXJnLCAuLi5hcmdzKTtcbiAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJlc3VsdC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gdHJpZ2dlciBhbiBldmVudCBhc3luY2hyb25vdXNseSwgZXhlY3V0aW5nIGFsbCB0aGUgbGlzdGVuZXJzIGluIG9yZGVyIGV2ZW4gaWYgc29tZSBvZiB0aGVtIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRSZWYgLSBUaGUgZXZlbnQgcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0gYXJncyAtIFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGV2ZW50IGxpc3RlbmVycy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICBwdWJsaWMgYXN5bmMgdHJ5VHJpZ2dlckFzeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmLCBhcmdzOiBBcmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV2ZW50UmVmLmNhbGxiYWNrLmNhbGwoZXZlbnRSZWYudGhpc0FyZywgLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxtQkFBOEI7QUFnQ3ZCLE1BQU0sWUFBWTtBQUFBLEVBQ04sZUFBZSxvQkFBSSxJQUE2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWExRCxJQUE0QixNQUFjLFVBQXFEO0FBQ3BHLFVBQU0sWUFBWSxLQUFLLGFBQWEsSUFBSSxJQUFJO0FBQzVDLFFBQUksQ0FBQyxXQUFXO0FBQ2Q7QUFBQSxJQUNGO0FBRUEsb0NBQWMsV0FBVyxDQUFDLGFBQWEsU0FBUyxhQUFhLFFBQVE7QUFDckUsUUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixXQUFL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
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLWV2ZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEFzeW5jIGV2ZW50IGVtaXR0ZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBYnN0cmFjdENvbnN0cnVjdG9yLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY1Byb21pc2FibGVWb2lkRnVuY3Rpb24gfSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJy4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGZpbHRlckluUGxhY2UgfSBmcm9tICcuL2FycmF5LnRzJztcblxuLyoqXG4gKiBBc3luYyBldmVudCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXN5bmNFdmVudFJlZiB7XG4gIC8qKlxuICAgKiBBbiBldmVudCBzb3VyY2UuXG4gICAqL1xuICBhc3luY0V2ZW50U291cmNlOiBHZW5lcmljQXN5bmNFdmVudFNvdXJjZTtcblxuICAvKipcbiAgICogQSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICovXG4gIGNhbGxiYWNrOiBHZW5lcmljQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEEgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKi9cbiAgdGhpc0FyZzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBBc3luYyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gRXZlbnRNYXAgLSBNYXBzIGV2ZW50IG5hbWVzIHRvIHRoZWlyIGFyZ3VtZW50IHR1cGxlcy5cbiAqIFdoZW4gb21pdHRlZCwgdGhlIGVtaXR0ZXIgYWNjZXB0cyBhbnkgc3RyaW5nIGV2ZW50IG5hbWUgd2l0aCBhbnkgYXJndW1lbnRzLlxuICogV2hlbiBwcm92aWRlZCwgbWV0aG9kcyBlbmZvcmNlIGNvcnJlY3QgZXZlbnQgbmFtZXMgYW5kIGFyZ3VtZW50IHR5cGVzXG4gKiB3aXRoIGZ1bGwgYXV0b2NvbXBsZXRlLiBXb3JrcyB3aXRoIGJvdGggYHR5cGVgIGFsaWFzZXMgYW5kIGBpbnRlcmZhY2VgIGRlY2xhcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFVudHlwZWQgKGRlZmF1bHQpIFx1MjAxNCBhbnkgZXZlbnQgbmFtZSwgYW55IGFyZ3M6XG4gKiBjb25zdCBldmVudHMgPSBuZXcgQXN5bmNFdmVudHMoKTtcbiAqIGV2ZW50cy5vbignbXktZXZlbnQnLCAoYXJnMTogc3RyaW5nKSA9PiB7IC4uLiB9KTtcbiAqXG4gKiAvLyBUeXBlZCBcdTIwMTQgb25seSBkZWNsYXJlZCBldmVudHMgd2l0aCBjb3JyZWN0IGFyZ3M6XG4gKiBpbnRlcmZhY2UgTXlFdmVudE1hcCB7XG4gKiAgIHNhdmU6IFtkYXRhOiBzdHJpbmddO1xuICogICBsb2FkOiBbaWQ6IG51bWJlciwgZm9yY2U6IGJvb2xlYW5dO1xuICogfVxuICogY29uc3QgZXZlbnRzID0gbmV3IEFzeW5jRXZlbnRzPE15RXZlbnRNYXA+KCk7XG4gKiBldmVudHMub24oJ3NhdmUnLCAoZGF0YSkgPT4geyAuLi4gfSk7ICAgLy8gZGF0YTogc3RyaW5nIFx1MjAxNCBhdXRvY29tcGxldGUgb24gZXZlbnQgbmFtZVxuICogZXZlbnRzLm9uKCdsb2FkJywgKGlkLCBmb3JjZSkgPT4geyAuLi4gfSk7IC8vIGlkOiBudW1iZXIsIGZvcmNlOiBib29sZWFuXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0V2ZW50U291cmNlPEV2ZW50TWFwIGV4dGVuZHMgRXZlbnRNYXBDb25zdHJhaW50PEV2ZW50TWFwPiA9IEV2ZW50TWFwQmFzZT4gZXh0ZW5kcyBHZW5lcmljQXN5bmNFdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byByZW1vdmUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy5vZmYoJ215LWV2ZW50JywgbXlMaXN0ZW5lcik7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIG9mZjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPiwgQXJncyBleHRlbmRzIENhbGxiYWNrQXJnczxFdmVudE1hcCwgRXZlbnROYW1lPj4oXG4gICAgbmFtZTogRXZlbnROYW1lLFxuICAgIGNhbGxiYWNrOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzYWJsZTx2b2lkPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHRoaXNBcmcgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy5vbignbXktZXZlbnQnLCBhc3luYyAoYXJnMSwgYXJnMikgPT4ge1xuICAgKiAgICAgYXdhaXQgc2xlZXAoMTAwKTtcbiAgICogICAgIGNvbnNvbGUubG9nKGFyZzEsIGFyZzIpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgb248RXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxFdmVudE1hcD4sIEFyZ3MgZXh0ZW5kcyBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4+KFxuICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICBjYWxsYmFjazogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZjtcblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgb25seSBvbmNlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHRoaXNBcmcgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy5vbmNlKCdteS1ldmVudCcsIGFzeW5jIChhcmcxLCBhcmcyKSA9PiB7XG4gICAqICAgICBhd2FpdCBzbGVlcCgxMDApO1xuICAgKiAgICAgY29uc29sZS5sb2coYXJnMSwgYXJnMik7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICBvbmNlPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXZlbnRNYXA+LCBBcmdzIGV4dGVuZHMgQ2FsbGJhY2tBcmdzPEV2ZW50TWFwLCBFdmVudE5hbWU+PihcbiAgICBuYW1lOiBFdmVudE5hbWUsXG4gICAgY2FsbGJhY2s6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWY7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGV4cG9zaW5nIGV2ZW50LXRyaWdnZXJpbmcgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyBvZiBtaXhpbi1jcmVhdGVkIGNsYXNzZXMuXG4gKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgYHByb3RlY3RlZGAgYXQgcnVudGltZSBidXQgc3VyZmFjZWQgaW4gdGhlIGRlY2xhcmF0aW9uIHR5cGVcbiAqIGJlY2F1c2UgVHlwZVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IGBwcm90ZWN0ZWRgIGluIGFub255bW91cy1jbGFzcyByZXR1cm4gdHlwZXMuXG4gKlxuICogQHR5cGVQYXJhbSBFdmVudE1hcCAtIE1hcHMgZXZlbnQgbmFtZXMgdG8gdGhlaXIgYXJndW1lbnQgdHVwbGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRXZlbnRUcmlnZ2VyPEV2ZW50TWFwIGV4dGVuZHMgRXZlbnRNYXBDb25zdHJhaW50PEV2ZW50TWFwPiA9IEV2ZW50TWFwQmFzZT4ge1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudCwgZXhlY3V0aW5nIGFsbCB0aGUgbGlzdGVuZXJzIGluIG9yZGVyIGV2ZW4gaWYgc29tZSBvZiB0aGVtIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgdHJpZ2dlcjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPj4obmFtZTogRXZlbnROYW1lLCAuLi5hcmdzOiBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGV2ZW50IGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGxpc3RlbmVycyBoYXZlIGNvbXBsZXRlZC5cbiAgICovXG4gIHRyaWdnZXJBc3luYzxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPj4obmFtZTogRXZlbnROYW1lLCAuLi5hcmdzOiBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUcnkgdG8gdHJpZ2dlciBhbiBldmVudCwgZXhlY3V0aW5nIGFsbCB0aGUgbGlzdGVuZXJzIGluIG9yZGVyIGV2ZW4gaWYgc29tZSBvZiB0aGVtIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIGV2ZW50IHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgdHJ5VHJpZ2dlcjxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihldmVudFJlZjogQXN5bmNFdmVudFJlZiwgYXJnczogQXJncyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyeSB0byB0cmlnZ2VyIGFuIGV2ZW50IGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIGV2ZW50IHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgbGlzdGVuZXJzIGhhdmUgY29tcGxldGVkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHRyeVRyaWdnZXJBc3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihldmVudFJlZjogQXN5bmNFdmVudFJlZiwgYXJnczogQXJncyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgY2FsbGJhY2sgYXJndW1lbnQgdHlwZXMgZm9yIGFuIGV2ZW50LlxuICpcbiAqIC0gV2hlbiBgRXZlbnRNYXBgIGhhcyBhbiBpbmRleCBzaWduYXR1cmUgKHVudHlwZWQgZGVmYXVsdCk6IHJldHVybnMgYHVua25vd25bXWAsXG4gKiAgIGFsbG93aW5nIGBBcmdzYCB0byBiZSBpbmZlcnJlZCBmcmVlbHkgZnJvbSB0aGUgY2FsbGJhY2suXG4gKiAtIFdoZW4gYEV2ZW50TWFwYCBoYXMgZXhwbGljaXQga2V5cyBvbmx5ICh0eXBlZCBtYXApOiByZXR1cm5zIGBFdmVudE1hcFtFdmVudE5hbWVdYCxcbiAqICAgZW5mb3JjaW5nIHRoZSBkZWNsYXJlZCBhcmd1bWVudCB0eXBlcyBhbmQgZW5hYmxpbmcgYXV0b2NvbXBsZXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRXZlbnRNYXAgLSBNYXBzIGV2ZW50IG5hbWVzIHRvIHRoZWlyIGFyZ3VtZW50IHR1cGxlcy5cbiAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZSBleHRlbmRzIHN0cmluZz4gPSBzdHJpbmcgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcCA/IHVua25vd25bXVxuICA6IChFdmVudE5hbWUgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcCA/IEV2ZW50TWFwW0V2ZW50TmFtZV0gOiB1bmtub3duW10pO1xuXG4vKipcbiAqIEJhc2UgZXZlbnQgbWFwIHR5cGUgZm9yIHVudHlwZWQgZW1pdHRlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TWFwQmFzZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBldmVudCBzb3VyY2UsIHVzZWQgYnkge0BsaW5rIEFzeW5jRXZlbnRSZWZ9XG4gKiBzbyB0aGF0IHJlZnMgY2FuIGJlIHN0b3JlZCByZWdhcmRsZXNzIG9mIHRoZSBlbWl0dGVyJ3MgYEV2ZW50TWFwYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljQXN5bmNFdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgYnkgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRSZWYgLSBUaGUgcmVmZXJlbmNlIHRvIHJlbW92ZS5cbiAgICovXG4gIG9mZnJlZihldmVudFJlZjogQXN5bmNFdmVudFJlZik6IHZvaWQ7XG59XG5cbnR5cGUgRXZlbnRNYXBDb25zdHJhaW50PFQ+ID0gUmVjb3JkPGtleW9mIFQsIHVua25vd25bXT47XG5cbnR5cGUgR2VuZXJpY0NhbGxiYWNrID0gR2VuZXJpY1Byb21pc2FibGVWb2lkRnVuY3Rpb248dW5rbm93bltdPjtcblxuLyoqXG4gKiBBc3luYyBldmVudCBzb3VyY2UgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHR5cGVQYXJhbSBFdmVudE1hcCAtIE1hcHMgZXZlbnQgbmFtZXMgdG8gdGhlaXIgYXJndW1lbnQgdHVwbGVzLlxuICogV2hlbiBvbWl0dGVkLCB0aGUgZW1pdHRlciBhY2NlcHRzIGFueSBzdHJpbmcgZXZlbnQgbmFtZSB3aXRoIGFueSBhcmd1bWVudHMuXG4gKiBXaGVuIHByb3ZpZGVkLCBtZXRob2RzIGVuZm9yY2UgY29ycmVjdCBldmVudCBuYW1lcyBhbmQgYXJndW1lbnQgdHlwZXNcbiAqIHdpdGggZnVsbCBhdXRvY29tcGxldGUuIFdvcmtzIHdpdGggYm90aCBgdHlwZWAgYWxpYXNlcyBhbmQgYGludGVyZmFjZWAgZGVjbGFyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gVW50eXBlZCAoZGVmYXVsdCkgXHUyMDE0IGFueSBldmVudCBuYW1lLCBhbnkgYXJnczpcbiAqIGNvbnN0IGV2ZW50cyA9IG5ldyBBc3luY0V2ZW50cygpO1xuICogZXZlbnRzLm9uKCdteS1ldmVudCcsIChhcmcxOiBzdHJpbmcpID0+IHsgLi4uIH0pO1xuICpcbiAqIC8vIFR5cGVkIFx1MjAxNCBvbmx5IGRlY2xhcmVkIGV2ZW50cyB3aXRoIGNvcnJlY3QgYXJnczpcbiAqIGludGVyZmFjZSBNeUV2ZW50TWFwIHtcbiAqICAgc2F2ZTogW2RhdGE6IHN0cmluZ107XG4gKiAgIGxvYWQ6IFtpZDogbnVtYmVyLCBmb3JjZTogYm9vbGVhbl07XG4gKiB9XG4gKiBjb25zdCBldmVudHMgPSBuZXcgQXN5bmNFdmVudHM8TXlFdmVudE1hcD4oKTtcbiAqIGV2ZW50cy5vbignc2F2ZScsIChkYXRhKSA9PiB7IC4uLiB9KTsgICAvLyBkYXRhOiBzdHJpbmcgXHUyMDE0IGF1dG9jb21wbGV0ZSBvbiBldmVudCBuYW1lXG4gKiBldmVudHMub24oJ2xvYWQnLCAoaWQsIGZvcmNlKSA9PiB7IC4uLiB9KTsgLy8gaWQ6IG51bWJlciwgZm9yY2U6IGJvb2xlYW5cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXN5bmNFdmVudHNCYXNlPEV2ZW50TWFwIGV4dGVuZHMgRXZlbnRNYXBDb25zdHJhaW50PEV2ZW50TWFwPiA9IEV2ZW50TWFwQmFzZT4gaW1wbGVtZW50cyBBc3luY0V2ZW50U291cmNlPEV2ZW50TWFwPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRSZWZzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFzeW5jRXZlbnRSZWZbXT4oKTtcblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub2ZmKCdteS1ldmVudCcsIG15TGlzdGVuZXIpO1xuICAgKiBgYGBcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICBwdWJsaWMgb2ZmPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXZlbnRNYXA+LCBBcmdzIGV4dGVuZHMgQ2FsbGJhY2tBcmdzPEV2ZW50TWFwLCBFdmVudE5hbWU+PihcbiAgICBuYW1lOiBFdmVudE5hbWUsXG4gICAgY2FsbGJhY2s6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50UmVmcyA9IHRoaXMuZXZlbnRSZWZzTWFwLmdldChuYW1lKTtcbiAgICBpZiAoIWV2ZW50UmVmcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbHRlckluUGxhY2UoZXZlbnRSZWZzLCAoZXZlbnRSZWYpID0+IGV2ZW50UmVmLmNhbGxiYWNrICE9PSBjYWxsYmFjayk7XG4gICAgaWYgKGV2ZW50UmVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZXZlbnRSZWZzTWFwLmRlbGV0ZShuYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy5vZmZyZWYobXlSZWYpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvZmZyZWYoZXZlbnRSZWY6IEFzeW5jRXZlbnRSZWYpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFJlZnMgPSB0aGlzLmV2ZW50UmVmc01hcC5nZXQoZXZlbnRSZWYubmFtZSk7XG4gICAgaWYgKCFldmVudFJlZnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWx0ZXJJblBsYWNlKGV2ZW50UmVmcywgKHN0b3JlZEV2ZW50UmVmKSA9PiBzdG9yZWRFdmVudFJlZiAhPT0gZXZlbnRSZWYpO1xuICAgIGlmIChldmVudFJlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmV2ZW50UmVmc01hcC5kZWxldGUoZXZlbnRSZWYubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBldmVudCBjYWxsYmFjayBhY2NlcHRzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgKiBAcGFyYW0gdGhpc0FyZyAtIFRoZSBjb250ZXh0IHBhc3NlZCBhcyBgdGhpc2AgdG8gdGhlIGBjYWxsYmFja2AuXG4gICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogZXZlbnRzLm9uKCdteS1ldmVudCcsIGFzeW5jIChhcmcxLCBhcmcyKSA9PiB7XG4gICAqICAgICBhd2FpdCBzbGVlcCgxMDApO1xuICAgKiAgICAgY29uc29sZS5sb2coYXJnMSwgYXJnMik7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICBwdWJsaWMgb248RXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxFdmVudE1hcD4sIEFyZ3MgZXh0ZW5kcyBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4+KFxuICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICBjYWxsYmFjazogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgbGV0IGV2ZW50UmVmcyA9IHRoaXMuZXZlbnRSZWZzTWFwLmdldChuYW1lKTtcbiAgICBpZiAoIWV2ZW50UmVmcykge1xuICAgICAgZXZlbnRSZWZzID0gW107XG4gICAgICB0aGlzLmV2ZW50UmVmc01hcC5zZXQobmFtZSwgZXZlbnRSZWZzKTtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudFJlZjogQXN5bmNFdmVudFJlZiA9IHtcbiAgICAgIGFzeW5jRXZlbnRTb3VyY2U6IHRoaXMsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2sgYXMgR2VuZXJpY0NhbGxiYWNrLFxuICAgICAgbmFtZSxcbiAgICAgIHRoaXNBcmdcbiAgICB9O1xuICAgIGV2ZW50UmVmcy5wdXNoKGV2ZW50UmVmKTtcbiAgICByZXR1cm4gZXZlbnRSZWY7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgb25seSBvbmNlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGNvbnRleHQgcGFzc2VkIGFzIGB0aGlzYCB0byB0aGUgYGNhbGxiYWNrYC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub25jZSgnbXktZXZlbnQnLCBhc3luYyAoYXJnMSwgYXJnMikgPT4ge1xuICAgKiAgICAgYXdhaXQgc2xlZXAoMTAwKTtcbiAgICogICAgIGNvbnNvbGUubG9nKGFyZzEsIGFyZzIpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgcHVibGljIG9uY2U8RXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxFdmVudE1hcD4sIEFyZ3MgZXh0ZW5kcyBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4+KFxuICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICBjYWxsYmFjazogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZz86IHVua25vd25cbiAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgY29uc3Qgb3JpZ2luYWxFdmVudFJlZiA9IHRoaXMub24obmFtZSwgY2FsbGJhY2ssIHRoaXNBcmcpO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudFJlZiA9IHRoaXMub24obmFtZSwgKCkgPT4ge1xuICAgICAgdGhpcy5vZmZyZWYob3JpZ2luYWxFdmVudFJlZik7XG4gICAgICB0aGlzLm9mZnJlZihjbGVhbnVwRXZlbnRSZWYpO1xuICAgIH0pO1xuICAgIHJldHVybiBvcmlnaW5hbEV2ZW50UmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnQsIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gYXJncyAtIFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogZXZlbnRzLnRyaWdnZXIoJ215LWV2ZW50JywgJ2FyZzEnLCAnYXJnMicpO1xuICAgKiBgYGBcbiAgICovXG4gIHByb3RlY3RlZCB0cmlnZ2VyPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXZlbnRNYXA+PihuYW1lOiBFdmVudE5hbWUsIC4uLmFyZ3M6IENhbGxiYWNrQXJnczxFdmVudE1hcCwgRXZlbnROYW1lPik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50UmVmcyA9IHRoaXMuZXZlbnRSZWZzTWFwLmdldChuYW1lKSA/PyBbXTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50UmVmIG9mIGV2ZW50UmVmcy5zbGljZSgpKSB7XG4gICAgICB0aGlzLnRyeVRyaWdnZXIoZXZlbnRSZWYsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGV2ZW50IGFzeW5jaHJvbm91c2x5LCBleGVjdXRpbmcgYWxsIHRoZSBsaXN0ZW5lcnMgaW4gb3JkZXIgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgbGlzdGVuZXJzIGhhdmUgY29tcGxldGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHRyaWdnZXJBc3luYzxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPj4obmFtZTogRXZlbnROYW1lLCAuLi5hcmdzOiBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBldmVudFJlZnMgPSB0aGlzLmV2ZW50UmVmc01hcC5nZXQobmFtZSkgPz8gW107XG4gICAgZm9yIChjb25zdCBldmVudFJlZiBvZiBldmVudFJlZnMuc2xpY2UoKSkge1xuICAgICAgYXdhaXQgdGhpcy50cnlUcmlnZ2VyQXN5bmMoZXZlbnRSZWYsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gdHJpZ2dlciBhbiBldmVudCwgZXhlY3V0aW5nIGFsbCB0aGUgbGlzdGVuZXJzIGluIG9yZGVyIGV2ZW4gaWYgc29tZSBvZiB0aGVtIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIGV2ZW50IHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy50cnlUcmlnZ2VyKG15UmVmLCBbJ2FyZzEnLCAnYXJnMiddKTtcbiAgICogYGBgXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgcHJvdGVjdGVkIHRyeVRyaWdnZXI8QXJncyBleHRlbmRzIHVua25vd25bXT4oZXZlbnRSZWY6IEFzeW5jRXZlbnRSZWYsIGFyZ3M6IEFyZ3MpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZlbnRSZWYuY2FsbGJhY2suY2FsbChldmVudFJlZi50aGlzQXJnLCAuLi5hcmdzKTtcbiAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJlc3VsdC5jYXRjaCh0aHJvd0RlbGF5ZWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93RGVsYXllZChlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHRyaWdnZXIgYW4gZXZlbnQgYXN5bmNocm9ub3VzbHksIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBldmVudFJlZiAtIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGxpc3RlbmVycyBoYXZlIGNvbXBsZXRlZC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICBwcm90ZWN0ZWQgYXN5bmMgdHJ5VHJpZ2dlckFzeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmLCBhcmdzOiBBcmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV2ZW50UmVmLmNhbGxiYWNrLmNhbGwoZXZlbnRSZWYudGhpc0FyZywgLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3dEZWxheWVkKGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBleHRlbmRzIHtAbGluayBBc3luY0V2ZW50c0Jhc2V9IGFuZCBwcm92aWRlcyBwdWJsaWMgbWV0aG9kcyBmb3IgdHJpZ2dlcmluZyBldmVudHMuXG4gKlxuICogVGhpcyBjbGFzcyBleGlzdHMgYXMgcGFyaXR5IHdpdGgge0BsaW5rIG9ic2lkaWFuI0V2ZW50c30uIEJ1dCBleHBvc2luZyBwdWJsaWNseSBgdHJpZ2dlcigpYCBtZXRob2RzIHZpb2xhdGVzIGVuY2Fwc3VsYXRpb24uXG4gKlxuICogQXZvaWQgdXNpbmcgaXQgaW4gZmF2b3Igb2Yge0BsaW5rIEFzeW5jRXZlbnRzQmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBFdmVudE1hcCAtIFRoZSB0eXBlIG9mIHRoZSBldmVudCBtYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3luY0V2ZW50czxFdmVudE1hcCBleHRlbmRzIEV2ZW50TWFwQ29uc3RyYWludDxFdmVudE1hcD4gPSBFdmVudE1hcEJhc2U+IGV4dGVuZHMgQXN5bmNFdmVudHNCYXNlPEV2ZW50TWFwPiB7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGV2ZW50LCBleGVjdXRpbmcgYWxsIHRoZSBsaXN0ZW5lcnMgaW4gb3JkZXIgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdHJpZ2dlcjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPj4obmFtZTogRXZlbnROYW1lLCAuLi5hcmdzOiBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4pOiB2b2lkIHtcbiAgICBzdXBlci50cmlnZ2VyKG5hbWUsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gZXZlbnQgYXN5bmNocm9ub3VzbHksIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gYXJncyAtIFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGV2ZW50IGxpc3RlbmVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBsaXN0ZW5lcnMgaGF2ZSBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdHJpZ2dlckFzeW5jPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXZlbnRNYXA+PihuYW1lOiBFdmVudE5hbWUsIC4uLmFyZ3M6IENhbGxiYWNrQXJnczxFdmVudE1hcCwgRXZlbnROYW1lPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBzdXBlci50cmlnZ2VyQXN5bmMobmFtZSwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHRyaWdnZXIgYW4gZXZlbnQsIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBldmVudFJlZiAtIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvdmVycmlkZSB0cnlUcmlnZ2VyPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmLCBhcmdzOiBBcmdzKTogdm9pZCB7XG4gICAgc3VwZXIudHJ5VHJpZ2dlcihldmVudFJlZiwgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHRyaWdnZXIgYW4gZXZlbnQgYXN5bmNocm9ub3VzbHksIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gICAqIEBwYXJhbSBldmVudFJlZiAtIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGxpc3RlbmVycyBoYXZlIGNvbXBsZXRlZC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgdHJ5VHJpZ2dlckFzeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmLCBhcmdzOiBBcmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHN1cGVyLnRyeVRyaWdnZXJBc3luYyhldmVudFJlZiwgYXJncyk7XG4gIH1cbn1cblxuLyoqXG4gKiBNaXhpbiB0aGF0IGFkZHMge0BsaW5rIEFzeW5jRXZlbnRTb3VyY2V9IGRlbGVnYXRpb24gdG8gYSBiYXNlIGNsYXNzLlxuICpcbiAqIEFsbCBldmVudCBtZXRob2RzIGRlbGVnYXRlIHRvIGEgcHJpdmF0ZSB7QGxpbmsgQXN5bmNFdmVudHNCYXNlfSBpbnN0YW5jZS5cbiAqIFRoZSBgRXZlbnRNYXBgIGdlbmVyaWMgaXMgZml4ZWQgYXQgbWl4aW4tYXBwbGljYXRpb24gdGltZSBcdTIwMTQgaWYgeW91IG5lZWQgYSBjbGFzc1xuICogdGhhdCBpcyBpdHNlbGYgZ2VuZXJpYyBvdmVyIGl0cyBldmVudCBtYXAsIHVzZSBjb21wb3NpdGlvbiBpbnN0ZWFkLlxuICpcbiAqIEB0eXBlUGFyYW0gRXZlbnRNYXAgLSBNYXBzIGV2ZW50IG5hbWVzIHRvIHRoZWlyIGFyZ3VtZW50IHR1cGxlcy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGJhc2UgY2xhc3MgYW5kIHJldHVybnMgYSBuZXcgY2xhc3MgZXh0ZW5kaW5nIGl0IHdpdGgge0BsaW5rIEFzeW5jRXZlbnRTb3VyY2V9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW50ZXJmYWNlIE15RXZlbnRzIHtcbiAqICAgc2F2ZTogW2RhdGE6IHN0cmluZ107XG4gKiB9XG4gKiBjbGFzcyBNeUNvbXBvbmVudCBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8TXlFdmVudHM+KCkoQ29tcG9uZW50KSB7XG4gKiAgIC8vIG9uKCksIG9mZigpLCBvbmNlKCksIG9mZnJlZigpIGFyZSBhdmFpbGFibGVcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW5Bc3luY0V2ZW50czxFdmVudE1hcCBleHRlbmRzIEV2ZW50TWFwQ29uc3RyYWludDxFdmVudE1hcD4gPSBFdmVudE1hcEJhc2U+KCkge1xuICByZXR1cm4gZnVuY3Rpb24gaW5uZXI8VEJhc2UgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPG9iamVjdD4+KFxuICAgIGJhc2VDbGFzczogVEJhc2VcbiAgKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxBc3luY0V2ZW50U291cmNlPEV2ZW50TWFwPiAmIEFzeW5jRXZlbnRUcmlnZ2VyPEV2ZW50TWFwPj4gJiBUQmFzZSB7XG4gICAgYWJzdHJhY3QgY2xhc3MgQXN5bmNFdmVudHNNaXhpbiBleHRlbmRzIGJhc2VDbGFzcyBpbXBsZW1lbnRzIEFzeW5jRXZlbnRTb3VyY2U8RXZlbnRNYXA+IHtcbiAgICAgIHJlYWRvbmx5ICNhc3luY0V2ZW50cyA9IG5ldyBBc3luY0V2ZW50czxFdmVudE1hcD4oKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAgICAgKlxuICAgICAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAgICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZXZlbnQgY2FsbGJhY2sgYWNjZXB0cy5cbiAgICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgICAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS5cbiAgICAgICAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gICAgICBwdWJsaWMgb2ZmPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXZlbnRNYXA+LCBBcmdzIGV4dGVuZHMgQ2FsbGJhY2tBcmdzPEV2ZW50TWFwLCBFdmVudE5hbWU+PihcbiAgICAgICAgbmFtZTogRXZlbnROYW1lLFxuICAgICAgICBjYWxsYmFjazogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8dm9pZD5cbiAgICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLiNhc3luY0V2ZW50cy5vZmYobmFtZSwgY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBieSByZWZlcmVuY2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIGV2ZW50IHJlZmVyZW5jZSB0byByZW1vdmUuXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBvZmZyZWYoZXZlbnRSZWY6IEFzeW5jRXZlbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jYXN5bmNFdmVudHMub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAgICAgKlxuICAgICAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAgICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZXZlbnQgY2FsbGJhY2sgYWNjZXB0cy5cbiAgICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgICAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAgICogQHBhcmFtIHRoaXNBcmcgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgLlxuICAgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgICovXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbiAgICAgIHB1YmxpYyBvbjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPiwgQXJncyBleHRlbmRzIENhbGxiYWNrQXJnczxFdmVudE1hcCwgRXZlbnROYW1lPj4oXG4gICAgICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICAgICAgY2FsbGJhY2s6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgICAgICB0aGlzQXJnPzogdW5rbm93blxuICAgICAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhc3luY0V2ZW50cy5vbihuYW1lLCBjYWxsYmFjaywgdGhpc0FyZyk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlLlxuICAgICAgICpcbiAgICAgICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgICAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGV2ZW50IGNhbGxiYWNrIGFjY2VwdHMuXG4gICAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICAgICAqIEBwYXJhbSB0aGlzQXJnIC0gVGhlIGNvbnRleHQgcGFzc2VkIGFzIGB0aGlzYCB0byB0aGUgYGNhbGxiYWNrYC5cbiAgICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCBsaXN0ZW5lci5cbiAgICAgICAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gICAgICBwdWJsaWMgb25jZTxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPiwgQXJncyBleHRlbmRzIENhbGxiYWNrQXJnczxFdmVudE1hcCwgRXZlbnROYW1lPj4oXG4gICAgICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICAgICAgY2FsbGJhY2s6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICAgICAgICB0aGlzQXJnPzogdW5rbm93blxuICAgICAgKTogQXN5bmNFdmVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhc3luY0V2ZW50cy5vbmNlKG5hbWUsIGNhbGxiYWNrLCB0aGlzQXJnKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUcmlnZ2VyIGFuIGV2ZW50LCBleGVjdXRpbmcgYWxsIHRoZSBsaXN0ZW5lcnMgaW4gb3JkZXIgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3cgYW4gZXJyb3IuXG4gICAgICAgKlxuICAgICAgICogQHR5cGVQYXJhbSBFdmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICAgICAqIEBwYXJhbSBhcmdzIC0gVGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICovXG4gICAgICBwcm90ZWN0ZWQgdHJpZ2dlcjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV2ZW50TWFwPj4obmFtZTogRXZlbnROYW1lLCAuLi5hcmdzOiBDYWxsYmFja0FyZ3M8RXZlbnRNYXAsIEV2ZW50TmFtZT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jYXN5bmNFdmVudHMudHJpZ2dlcihuYW1lLCAuLi5hcmdzKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUcmlnZ2VyIGFuIGV2ZW50IGFzeW5jaHJvbm91c2x5LlxuICAgICAgICpcbiAgICAgICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAgICAgKiBAcGFyYW0gYXJncyAtIFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgbGlzdGVuZXJzIGhhdmUgY29tcGxldGVkLlxuICAgICAgICovXG4gICAgICBwcm90ZWN0ZWQgYXN5bmMgdHJpZ2dlckFzeW5jPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXZlbnRNYXA+PihuYW1lOiBFdmVudE5hbWUsIC4uLmFyZ3M6IENhbGxiYWNrQXJnczxFdmVudE1hcCwgRXZlbnROYW1lPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLiNhc3luY0V2ZW50cy50cmlnZ2VyQXN5bmMobmFtZSwgLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVHJ5IHRvIHRyaWdnZXIgYW4gZXZlbnQsIGV4ZWN1dGluZyBhbGwgdGhlIGxpc3RlbmVycyBpbiBvcmRlciBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdyBhbiBlcnJvci5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAgICAgICAqIEBwYXJhbSBldmVudFJlZiAtIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAgICAgKiBAcGFyYW0gYXJncyAtIFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gUGFyaXR5IHdpdGggT2JzaWRpYW4ncyBFdmVudHMudHJ5VHJpZ2dlci5cbiAgICAgIHByb3RlY3RlZCB0cnlUcmlnZ2VyPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmLCBhcmdzOiBBcmdzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuI2FzeW5jRXZlbnRzLnRyeVRyaWdnZXIoZXZlbnRSZWYsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRyeSB0byB0cmlnZ2VyIGFuIGV2ZW50IGFzeW5jaHJvbm91c2x5LCBleGVjdXRpbmcgYWxsIHRoZSBsaXN0ZW5lcnMgaW4gb3JkZXIgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3cgYW4gZXJyb3IuXG4gICAgICAgKlxuICAgICAgICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gICAgICAgKiBAcGFyYW0gZXZlbnRSZWYgLSBUaGUgZXZlbnQgcmVmZXJlbmNlLlxuICAgICAgICogQHBhcmFtIGFyZ3MgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGxpc3RlbmVycyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgICAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gUGFyaXR5IHdpdGggT2JzaWRpYW4ncyBFdmVudHMudHJ5VHJpZ2dlci5cbiAgICAgIHByb3RlY3RlZCBhc3luYyB0cnlUcmlnZ2VyQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXT4oZXZlbnRSZWY6IEFzeW5jRXZlbnRSZWYsIGFyZ3M6IEFyZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy4jYXN5bmNFdmVudHMudHJ5VHJpZ2dlckFzeW5jKGV2ZW50UmVmLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXN5bmNFdmVudHNNaXhpbiBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPEFzeW5jRXZlbnRTb3VyY2U8RXZlbnRNYXA+ICYgQXN5bmNFdmVudFRyaWdnZXI8RXZlbnRNYXA+PiAmIFRCYXNlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0aHJvd0RlbGF5ZWQoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRocm93IGVycm9yO1xuICB9LCAwKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxtQkFBOEI7QUF1T3ZCLE1BQWUsZ0JBQW9IO0FBQUEsRUFDdkgsZUFBZSxvQkFBSSxJQUE2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWdCMUQsSUFDTCxNQUNBLFVBQ007QUFDTixVQUFNLFlBQVksS0FBSyxhQUFhLElBQUksSUFBSTtBQUM1QyxRQUFJLENBQUMsV0FBVztBQUNkO0FBQUEsSUFDRjtBQUVBLG9DQUFjLFdBQVcsQ0FBQyxhQUFh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
|