@mnaoumov/obsidian-lib 7.0.0 → 8.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/components/incremental-file-index-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +20 -6
- package/dist/lib/cjs/__merged.d.cts +2 -0
- package/dist/lib/cjs/active-file-provider.cjs +6 -6
- package/dist/lib/cjs/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/app.cjs +5 -5
- package/dist/lib/cjs/async-with-notice.cjs +5 -5
- package/dist/lib/cjs/attachment-path.cjs +6 -6
- package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
- package/dist/lib/cjs/backlink-index.cjs +13 -19
- package/dist/lib/cjs/backlink-index.d.cts +1 -1
- package/dist/lib/cjs/backlink.cjs +5 -5
- package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
- package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
- package/dist/lib/cjs/callout.cjs +5 -5
- package/dist/lib/cjs/canvas.cjs +5 -5
- package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
- package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
- package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
- package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
- package/dist/lib/cjs/codemirror/index.cjs +5 -5
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
- package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
- package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/index.cjs +5 -5
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-registrar.cjs +6 -6
- package/dist/lib/cjs/command-registrar.d.cts +2 -2
- package/dist/lib/cjs/community-plugins.cjs +6 -6
- package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +5 -5
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
- package/dist/lib/cjs/components/component-ex.cjs +5 -5
- package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
- package/dist/lib/cjs/components/disposable-component.cjs +5 -5
- package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +340 -0
- package/dist/lib/cjs/components/incremental-file-index-component.d.cts +152 -0
- package/dist/lib/cjs/components/index.cjs +9 -6
- package/dist/lib/cjs/components/index.d.cts +1 -0
- package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
- package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
- package/dist/lib/cjs/components/registry-component.cjs +5 -5
- package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
- package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +5 -5
- package/dist/lib/cjs/css-class.cjs +5 -5
- package/dist/lib/cjs/data-handler.cjs +6 -6
- package/dist/lib/cjs/data-handler.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
- package/dist/lib/cjs/data-stores/index.cjs +5 -5
- package/dist/lib/cjs/data-stores/local-data-store.cjs +5 -5
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
- package/dist/lib/cjs/dataview-link.cjs +5 -5
- package/dist/lib/cjs/dataview.cjs +12 -12
- package/dist/lib/cjs/dataview.d.cts +6 -6
- package/dist/lib/cjs/debug.cjs +5 -5
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
- package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
- package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
- package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
- package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
- package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
- package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
- package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor.cjs +5 -5
- package/dist/lib/cjs/events.cjs +5 -5
- package/dist/lib/cjs/extensions-registrar.cjs +6 -6
- package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
- package/dist/lib/cjs/file-change.cjs +6 -6
- package/dist/lib/cjs/file-change.d.cts +3 -3
- package/dist/lib/cjs/file-explorer.cjs +5 -5
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +5 -5
- package/dist/lib/cjs/folder-note.cjs +6 -6
- package/dist/lib/cjs/folder-note.d.cts +1 -1
- package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
- package/dist/lib/cjs/frontmatter.cjs +6 -6
- package/dist/lib/cjs/frontmatter.d.cts +7 -7
- package/dist/lib/cjs/generated-during-build.cjs +7 -7
- package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
- package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
- package/dist/lib/cjs/html-element.cjs +5 -5
- package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
- package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
- package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
- package/dist/lib/cjs/i18n/i18n.cjs +5 -5
- package/dist/lib/cjs/i18n/index.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
- package/dist/lib/cjs/index.cjs +9 -6
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
- package/dist/lib/cjs/library-styles.cjs +5 -5
- package/dist/lib/cjs/library.cjs +5 -5
- package/dist/lib/cjs/link-name.cjs +5 -5
- package/dist/lib/cjs/link-update-progress.cjs +5 -5
- package/dist/lib/cjs/link.cjs +7 -7
- package/dist/lib/cjs/link.d.cts +2 -2
- package/dist/lib/cjs/logger.cjs +5 -5
- package/dist/lib/cjs/loop.cjs +5 -5
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
- package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/markdown-view.cjs +5 -5
- package/dist/lib/cjs/markdown.cjs +5 -5
- package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
- package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
- package/dist/lib/cjs/metadata-cache.cjs +6 -6
- package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
- package/dist/lib/cjs/modals/alert.cjs +5 -5
- package/dist/lib/cjs/modals/confirm.cjs +5 -5
- package/dist/lib/cjs/modals/index.cjs +5 -5
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
- package/dist/lib/cjs/modals/modal.cjs +5 -5
- package/dist/lib/cjs/modals/prompt.cjs +14 -14
- package/dist/lib/cjs/modals/select-item.cjs +5 -5
- package/dist/lib/cjs/modals/select-option.cjs +5 -5
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
- package/dist/lib/cjs/note-priority.cjs +5 -5
- package/dist/lib/cjs/notebook-navigator.cjs +6 -6
- package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
- package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +5 -5
- package/dist/lib/cjs/obsidian-word-characters.cjs +231 -0
- package/dist/lib/cjs/obsidian-word-characters.d.cts +59 -0
- package/dist/lib/cjs/parse-link.cjs +6 -6
- package/dist/lib/cjs/parse-link.d.cts +2 -2
- package/dist/lib/cjs/path-settings.cjs +6 -6
- package/dist/lib/cjs/pdf.cjs +5 -5
- package/dist/lib/cjs/plugin/index.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
- package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
- package/dist/lib/cjs/plugin/plugin.cjs +6 -6
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
- package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
- package/dist/lib/cjs/popovers/index.cjs +5 -5
- package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/property-entry.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +6 -6
- package/dist/lib/cjs/react/app-context.cjs +5 -5
- package/dist/lib/cjs/react/index.cjs +5 -5
- package/dist/lib/cjs/reference.cjs +6 -6
- package/dist/lib/cjs/reference.d.cts +6 -6
- package/dist/lib/cjs/resource-lock.cjs +6 -6
- package/dist/lib/cjs/resource-url.cjs +5 -5
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
- package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
- package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
- package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
- package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
- package/dist/lib/cjs/setting-ex.cjs +5 -5
- package/dist/lib/cjs/setting-group-ex.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
- package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
- package/dist/lib/cjs/templater.cjs +6 -6
- package/dist/lib/cjs/templater.d.cts +9 -9
- package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
- package/dist/lib/cjs/transformers/index.cjs +5 -5
- package/dist/lib/cjs/trusted-input.cjs +5 -5
- package/dist/lib/cjs/validation.cjs +6 -6
- package/dist/lib/cjs/validation.d.cts +1 -1
- package/dist/lib/cjs/vault-delete.cjs +5 -5
- package/dist/lib/cjs/vault-transaction.cjs +6 -6
- package/dist/lib/cjs/vault.cjs +5 -5
- package/dist/lib/cjs/view-registrar.cjs +6 -6
- package/dist/lib/cjs/view-registrar.d.cts +1 -1
- package/dist/lib/cjs/workspace.cjs +5 -5
- package/dist/lib/esm/__merged.d.mts +2 -0
- package/dist/lib/esm/__merged.mjs +15 -1
- package/dist/lib/esm/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/active-file-provider.mjs +1 -1
- package/dist/lib/esm/attachment-path.mjs +1 -1
- package/dist/lib/esm/backlink-index.d.mts +1 -1
- package/dist/lib/esm/backlink-index.mjs +8 -14
- package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
- package/dist/lib/esm/bases-view-registrar.mjs +1 -1
- package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
- package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
- package/dist/lib/esm/command-registrar.d.mts +2 -2
- package/dist/lib/esm/command-registrar.mjs +1 -1
- package/dist/lib/esm/community-plugins.mjs +1 -1
- package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
- package/dist/lib/esm/components/incremental-file-index-component.d.mts +152 -0
- package/dist/lib/esm/components/incremental-file-index-component.mjs +260 -0
- package/dist/lib/esm/components/index.d.mts +1 -0
- package/dist/lib/esm/components/index.mjs +3 -1
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
- package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
- package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
- package/dist/lib/esm/data-handler.d.mts +2 -2
- package/dist/lib/esm/data-handler.mjs +1 -1
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
- package/dist/lib/esm/dataview.d.mts +6 -6
- package/dist/lib/esm/dataview.mjs +7 -7
- package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
- package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
- package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
- package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
- package/dist/lib/esm/extensions-registrar.d.mts +1 -1
- package/dist/lib/esm/extensions-registrar.mjs +1 -1
- package/dist/lib/esm/file-change.d.mts +3 -3
- package/dist/lib/esm/file-change.mjs +1 -1
- package/dist/lib/esm/folder-note.d.mts +1 -1
- package/dist/lib/esm/folder-note.mjs +1 -1
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
- package/dist/lib/esm/frontmatter.d.mts +7 -7
- package/dist/lib/esm/frontmatter.mjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
- package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
- package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
- package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/link.d.mts +2 -2
- package/dist/lib/esm/link.mjs +2 -2
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
- package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
- package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
- package/dist/lib/esm/metadata-cache.mjs +1 -1
- package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
- package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
- package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
- package/dist/lib/esm/modals/prompt.mjs +9 -9
- package/dist/lib/esm/notebook-navigator.d.mts +3 -3
- package/dist/lib/esm/notebook-navigator.mjs +1 -1
- package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian-word-characters.d.mts +59 -0
- package/dist/lib/esm/obsidian-word-characters.mjs +139 -0
- package/dist/lib/esm/parse-link.d.mts +2 -2
- package/dist/lib/esm/parse-link.mjs +1 -1
- package/dist/lib/esm/path-settings.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
- package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
- package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
- package/dist/lib/esm/queue.mjs +1 -1
- package/dist/lib/esm/reference.d.mts +6 -6
- package/dist/lib/esm/reference.mjs +1 -1
- package/dist/lib/esm/resource-lock.mjs +1 -1
- package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
- package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
- package/dist/lib/esm/setting-components/month-component.mjs +1 -1
- package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
- package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
- package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
- package/dist/lib/esm/setting-components/week-component.mjs +1 -1
- package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
- package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
- package/dist/lib/esm/templater.d.mts +9 -9
- package/dist/lib/esm/templater.mjs +1 -1
- package/dist/lib/esm/validation.d.mts +1 -1
- package/dist/lib/esm/validation.mjs +1 -1
- package/dist/lib/esm/vault-transaction.mjs +1 -1
- package/dist/lib/esm/view-registrar.d.mts +1 -1
- package/dist/lib/esm/view-registrar.mjs +1 -1
- package/dist/styles.css +2 -2
- package/package.json +6 -3
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -138,7 +138,7 @@ const ROOT_UNSAFE_ITEM_TITLE_KEYS = [
|
|
|
138
138
|
"plugins.file-explorer.menu-opt-rename",
|
|
139
139
|
"plugins.search.menu-opt-search-in-folder"
|
|
140
140
|
];
|
|
141
|
-
const SHARED_STATE_KEY = "
|
|
141
|
+
const SHARED_STATE_KEY = "fileExplorerRootMenuV1";
|
|
142
142
|
var FileExplorerRootMenuSpot = /* @__PURE__ */ ((FileExplorerRootMenuSpot2) => {
|
|
143
143
|
FileExplorerRootMenuSpot2["EmptyArea"] = "empty-area";
|
|
144
144
|
FileExplorerRootMenuSpot2["VaultName"] = "vault-name";
|
|
@@ -173,7 +173,7 @@ class FileExplorerRootMenuComponent extends import_component_ex.ComponentEx {
|
|
|
173
173
|
*/
|
|
174
174
|
onload() {
|
|
175
175
|
super.onload();
|
|
176
|
-
const state = getSharedState(
|
|
176
|
+
const state = getSharedState();
|
|
177
177
|
const subscription = {
|
|
178
178
|
handler: this.handler,
|
|
179
179
|
install: () => installRootMenu(this.app, state),
|
|
@@ -216,14 +216,11 @@ function dispatchBeforeShow(state, params) {
|
|
|
216
216
|
function getFileExplorerLeaf(app) {
|
|
217
217
|
return app.workspace.getLeavesOfType(import_implementations.ViewType.FileExplorer)[0] ?? null;
|
|
218
218
|
}
|
|
219
|
-
function getSharedState(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
statesByApp.set(app, state);
|
|
225
|
-
}
|
|
226
|
-
return state;
|
|
219
|
+
function getSharedState() {
|
|
220
|
+
return (0, import_obsidian_lib_state.getObsidianLibState)(SHARED_STATE_KEY, {
|
|
221
|
+
installation: null,
|
|
222
|
+
subscriptions: []
|
|
223
|
+
}).value;
|
|
227
224
|
}
|
|
228
225
|
function installRootMenu(app, state) {
|
|
229
226
|
let isUninstalled = false;
|
|
@@ -340,4 +337,4 @@ function removeRootUnsafeItems(menu) {
|
|
|
340
337
|
FileExplorerRootMenuSpot,
|
|
341
338
|
VAULT_NAME_SELECTORS
|
|
342
339
|
});
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogT3BlbnMgYW5kIGV4dGVuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIGNvbnRleHQgbWVudSBmb3IgdGhlIHZhdWx0IHJvb3QsIGF0IHRoZSB0d28gc3BvdHMgdGhhdCBzdGFuZCBmb3IgaXQ6IHRoZVxuICogdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGFuZCB0aGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICpcbiAqIE9ic2lkaWFuIGFscmVhZHkgb3BlbnMgYSBtZW51IGZvciB0aGUgZW1wdHkgYXJlYTogdGhlIHZpZXcncyBvd24gYGNvbnRleHRtZW51YCBsaXN0ZW5lciBvbiBpdHMgZmlsZXMgY29udGFpbmVyIGNhbGxzXG4gKiBgb25GaWxlQ29udGV4dE1lbnUoZXZ0LCB2YXVsdC5nZXRSb290KCkpYCwgd2hpY2ggYnVpbGRzIGEge0BsaW5rIE1lbnV9LCB0cmlnZ2VycyBgZmlsZS1tZW51YCB3aXRoIHRoZSByb290IGZvbGRlciBhbmRcbiAqIHRoZSBzb3VyY2UgYGZpbGUtZXhwbG9yZXItY29udGV4dC1tZW51YCwgYW5kIHNob3dzIGl0LiBUaGUgdmF1bHQgbmFtZSAoYC53b3Jrc3BhY2UtZHJhd2VyLXZhdWx0LXN3aXRjaGVyYCBvbiBkZXNrdG9wLFxuICogYC53b3Jrc3BhY2UtZHJhd2VyLWhlYWRlci1uYW1lYCBvbiBtb2JpbGUsIHdoZXJlIE9ic2lkaWFuIGJ1aWxkcyBubyBzd2l0Y2hlcikgb3BlbnMgYSBkaWZmZXJlbnQgbWVudTogb24gZGVza3RvcFxuICogT2JzaWRpYW4gYWRkcyBgU2hvdyBpbiBzeXN0ZW0gZXhwbG9yZXJgIGFuZCBgQ29weSBwYXRoYCB0byB0aGUgcGVyLWV2ZW50IG1lbnUgYE1lbnUuZm9yRXZlbnRgIGhhbmRzIG91dC4gVGhlIGhhbmRsZXJzXG4gKiBnZXQgdGhhdCBtZW51LCBzbyBhIHJpZ2h0LWNsaWNrIHRoZXJlIG5ldmVyIG9wZW5zIGEgc2Vjb25kIG9uZS4gQSBzdWJzY3JpYmVyIHRoYXQgcHJlc2VudHMgdGhlIHJvb3QgYXMgYSBmb2xkZXJcbiAqIHJlcGxhY2VzIGl0IHdpdGggdGhlIHJvb3QncyBmb2xkZXIgbWVudSBpbnN0ZWFkLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYW5kIHNldmVyYWwgb2YgdGhlbSBtYXkgd2FudCB0aGlzIG1lbnUuIFR3byBjb3BpZXMgcGF0Y2hpbmcgdGhlXG4gKiBzYW1lIHByb3RvdHlwZSBhbmQgbGlzdGVuaW5nIG9uIHRoZSBzYW1lIGVsZW1lbnQgd291bGQgb3BlbiBpdCB0d2ljZSwgc28gdGhlcmUgaXMgT05FIGluc3RhbGxhdGlvbiBwZXIge0BsaW5rIEFwcH0sXG4gKiBrZXB0IGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSBhbmQgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGUgb3RoZXJzXG4gKiByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgaXQgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXQgYmV0d2VlblxuICogY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIHJlYWQgc3RydWN0dXJhbGx5LCBhbmQgYSBjaGFuZ2UgdG8gd2hhdCBhIGZpZWxkXG4gKiBtZWFucyBtb3ZlcyB0byBhIG5ldyBrZXkgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRpbmcgdGhlIG9sZCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGaWxlRXhwbG9yZXJWaWV3IH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldFByb3RvdHlwZU9mIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVJdGVtLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50cyB0aGF0IHN0YW5kIGZvciB0aGUgdmF1bHQgcm9vdCBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGluIHByaW9yaXR5IG9yZGVyLiBPYnNpZGlhbiBidWlsZHNcbiAqIGAud29ya3NwYWNlLWRyYXdlci12YXVsdC1zd2l0Y2hlcmAgb25seSBvbiBkZXNrdG9wOyBvbiBtb2JpbGUgdGhlIHZhdWx0IG5hbWUgaXMgdGhlIGRyYXdlciBoZWFkZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX05BTUVfU0VMRUNUT1JTID0gW1xuICAnLndvcmtzcGFjZS1kcmF3ZXItdmF1bHQtc3dpdGNoZXInLFxuICAnLndvcmtzcGFjZS1kcmF3ZXItaGVhZGVyLW5hbWUnXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRoZSBgc291cmNlYCBPYnNpZGlhbiBwYXNzZXMgd2l0aCBgZmlsZS1tZW51YCB3aGVuIHRoZSBGaWxlIEV4cGxvcmVyIG9wZW5zIGEgbWVudS5cbiAqL1xuY29uc3QgRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSA9ICdmaWxlLWV4cGxvcmVyLWNvbnRleHQtbWVudSc7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbXMgdGhhdCBtdXN0IG5vdCBhY3Qgb24gdGhlIHZhdWx0IHJvb3QsIGJ5IHRoZSBsb2NhbGl6YXRpb24ga2V5IG9mIHRoZWlyIHRpdGxlLiBUaGV5IGFwcGVhciBvbmx5IHdoZW5cbiAqIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIsIGZyb20gT2JzaWRpYW4gaXRzZWxmIG9yIGZyb20gYW5vdGhlciBwbHVnaW4ncyBgZmlsZS1tZW51YCBoYW5kbGVyLlxuICovXG5jb25zdCBST09UX1VOU0FGRV9JVEVNX1RJVExFX0tFWVMgPSBbXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIuYWN0aW9uLW1vdmUtZm9sZGVyJyxcbiAgJ3BsdWdpbnMuZmlsZS1leHBsb3Jlci5tZW51LW9wdC1kZWxldGUnLFxuICAncGx1Z2lucy5maWxlLWV4cGxvcmVyLm1lbnUtb3B0LW1ha2UtY29weScsXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIubWVudS1vcHQtcmVuYW1lJyxcbiAgJ3BsdWdpbnMuc2VhcmNoLm1lbnUtb3B0LXNlYXJjaC1pbi1mb2xkZXInXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ2ZpbGVFeHBsb3JlclJvb3RNZW51QnlBcHBWMSc7XG5cbi8qKlxuICogV2hpY2ggc3BvdCBvZiB0aGUgRmlsZSBFeHBsb3JlciB0aGUgdmF1bHQtcm9vdCBtZW51IHdhcyBvcGVuZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90IHtcbiAgLyoqXG4gICAqIFRoZSBlbXB0eSBhcmVhIGJlbG93IHRoZSBmaWxlIGxpc3QuXG4gICAqL1xuICBFbXB0eUFyZWEgPSAnZW1wdHktYXJlYScsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBuYW1lIGF0IHRoZSB0b3Agb2YgdGhlIGxlZnQgc2lkZWJhci5cbiAgICovXG4gIFZhdWx0TmFtZSA9ICd2YXVsdC1uYW1lJ1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBGaWxlRXhwbG9yZXJSb290TWVudUNvbXBvbmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBlYWNoIHRpbWUgdGhlIHZhdWx0LXJvb3QgbWVudSBpcyBhYm91dCB0byBiZSBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcm9vdCBpcyBwcmVzZW50ZWQgYXMgYW4gb3JkaW5hcnkgZm9sZGVyIHdoaWxlIGl0cyBtZW51IGlzIGJ1aWx0LCBzbyB0aGF0IE9ic2lkaWFuIGFuZCBvdGhlciBwbHVnaW5zIGFkZFxuICAgKiB0aGUgaXRlbXMgdGhleSBhZGQgdG8gYW55IGZvbGRlci4gVGhlIGl0ZW1zIHRoYXQgbXVzdCBub3QgYWN0IG9uIHRoZSByb290IChyZW5hbWUsIGRlbGV0ZSwgbW92ZSwgbWFrZSBhIGNvcHkgYW5kXG4gICAqIHNlYXJjaCBpbiBmb2xkZXIpIGFyZSByZW1vdmVkIGFnYWluIGJlZm9yZSB0aGUgbWVudSBpcyBzaG93bi4gT24gdGhlIHZhdWx0IG5hbWUsIHRoZSByb290J3MgZm9sZGVyIG1lbnUgdGhlbiByZXBsYWNlc1xuICAgKiBPYnNpZGlhbidzIHZhdWx0IG1lbnUuIEl0IGhvbGRzIHdoaWxlIGFueSBzdWJzY3JpYmVyIGFza3MgZm9yIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgb2YgdGhlIHZhdWx0LXJvb3QgbWVudS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlciA9IChwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcykgPT4gdm9pZDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhIHtAbGluayBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJ9LlxuICpcbiAqIFRoZSBzaGFwZSBpcyBwYXJ0IG9mIHRoZSB3aXJlIGZvcm1hdCBiZXR3ZWVuIGNvcGllcyBvZiB0aGlzIGxpYnJhcnk6IGZpZWxkcyBhcmUgb25seSBldmVyIGFkZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWVudSwgYWJvdXQgdG8gYmUgc2hvd246IHRoZSByb290J3MgZm9sZGVyIG1lbnUsIGFmdGVyIGV2ZXJ5IGBmaWxlLW1lbnVgIGhhbmRsZXIgaGFzIHJ1biwgb3Igb24gdGhlIHZhdWx0IG5hbWUgdGhlXG4gICAqIHZhdWx0IG1lbnUgT2JzaWRpYW4gYnVpbGRzIHRoZXJlLiBBIG1lbnUgc3RpbGwgZW1wdHkgYWZ0ZXIgZXZlcnkgaGFuZGxlciBpcyBub3Qgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgcmlnaHQtY2xpY2sgb3IgbG9uZy1wcmVzcyB0aGF0IG9wZW5lZCB0aGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogVEZvbGRlcjtcblxuICAvKipcbiAgICogV2hpY2ggc3BvdCB0aGUgbWVudSB3YXMgb3BlbmVkIGZyb20uXG4gICAqL1xuICByZWFkb25seSBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3Q7XG59XG5cbmludGVyZmFjZSBGaWxlRXhwbG9yZXJSb290TWVudUluc3RhbGxhdGlvbiB7XG4gIHJlYWRvbmx5IG93bmVyOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbjtcbiAgdW5pbnN0YWxsOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIGluc3RhbGxhdGlvbjogRmlsZUV4cGxvcmVyUm9vdE1lbnVJbnN0YWxsYXRpb24gfCBudWxsO1xuICByZWFkb25seSBzdWJzY3JpcHRpb25zOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbltdO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb24ge1xuICBoYW5kbGVyOiAocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG4gIGluc3RhbGw6ICgpID0+ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHNob3VsZFByZXNlbnRSb290QXNGb2xkZXI6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51IGV4dGVuZHMgRmlsZUV4cGxvcmVyVmlldyB7XG4gIG9uRmlsZUNvbnRleHRNZW51OiAobW91c2VFdmVudDogTW91c2VFdmVudCwgZmlsZTogVEFic3RyYWN0RmlsZSkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIE9wZW5Sb290TWVudVBhcmFtcyB7XG4gIHJlYWRvbmx5IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIHJlYWRvbmx5IG9wZW5OYXRpdmU6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IFRGb2xkZXI7XG4gIHJlYWRvbmx5IHNwb3Q6IEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdDtcbn1cblxuLyoqXG4gKiBIYW5kcyB0aGUgY29yZSBGaWxlIEV4cGxvcmVyJ3MgdmF1bHQtcm9vdCBtZW51IHRvIGEgaGFuZGxlciwgYW5kIG9wZW5zIHRoYXQgbWVudSBmcm9tIHRoZSB2YXVsdCBuYW1lIHRvby5cbiAqXG4gKiBBbnkgbnVtYmVyIG9mIHRoZXNlLCBpbiBhbnkgbnVtYmVyIG9mIHBsdWdpbnMsIHNoYXJlIG9uZSBpbnN0YWxsYXRpb24gcGVyIHtAbGluayBBcHB9LlxuICovXG5leHBvcnQgY2xhc3MgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgZWFjaCB0aW1lIHRoZSB2YXVsdC1yb290IG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFuZGxlcjogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIgd2hpbGUgaXRzIG1lbnUgaXMgYnVpbHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIGV4cGxvcmVyIHJvb3QgbWVudSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLmhhbmRsZXIgPSBwYXJhbXMuaGFuZGxlcjtcbiAgICB0aGlzLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIgPSBwYXJhbXMuc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIHRoZSBzaGFyZWQgaW5zdGFsbGF0aW9uLCBpbnN0YWxsaW5nIGl0IHdoZW4gbm9ib2R5IGhhcyB5ZXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTaGFyZWRTdGF0ZSh0aGlzLmFwcCk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbiA9IHtcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlcixcbiAgICAgIGluc3RhbGw6ICgpID0+IGluc3RhbGxSb290TWVudSh0aGlzLmFwcCwgc3RhdGUpLFxuICAgICAgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcjogdGhpcy5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyXG4gICAgfTtcbiAgICBzdGF0ZS5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPz89IHsgb3duZXI6IHN1YnNjcmlwdGlvbiwgdW5pbnN0YWxsOiBzdWJzY3JpcHRpb24uaW5zdGFsbCgpIH07XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMuc3BsaWNlKHN0YXRlLnN1YnNjcmlwdGlvbnMuaW5kZXhPZihzdWJzY3JpcHRpb24pLCAxKTtcbiAgICAgIGlmIChzdGF0ZS5pbnN0YWxsYXRpb24/Lm93bmVyICE9PSBzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24udW5pbnN0YWxsKCk7XG4gICAgICBjb25zdCBuZXh0T3duZXIgPSBzdGF0ZS5zdWJzY3JpcHRpb25zWzBdO1xuICAgICAgc3RhdGUuaW5zdGFsbGF0aW9uID0gbmV4dE93bmVyID8geyBvd25lcjogbmV4dE93bmVyLCB1bmluc3RhbGw6IG5leHRPd25lci5pbnN0YWxsKCkgfSA6IG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2goc3RhdGU6IEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGUsIHBhcmFtczogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyUGFyYW1zKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5zdWJzY3JpcHRpb25zLnNvbWUoKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIpKSB7XG4gICAgcmVtb3ZlUm9vdFVuc2FmZUl0ZW1zKHBhcmFtcy5tZW51KTtcbiAgfVxuXG4gIC8vIEEgc25hcHNob3Q6IGEgaGFuZGxlciBtYXkgdW5sb2FkIGl0cyBvd24gY29tcG9uZW50LCBvciBhbm90aGVyIG9uZSwgd2hpbGUgdGhlIG1lbnUgaXMgZGlzcGF0Y2hlZC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy1zcHJlYWQgLS0gVGhlIGNvcHkgaXMgdGhlIHBvaW50OiB0aGUgbGlzdCBtYXkgY2hhbmdlIGR1cmluZyB0aGUgbG9vcC5cbiAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgWy4uLnN0YXRlLnN1YnNjcmlwdGlvbnNdKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmlwdGlvbi5oYW5kbGVyKHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSBleHBsb3JlciByb290IG1lbnUgaGFuZGxlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlU2hvdyhzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSwgcGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgdW5pbnN0YWxsU2hvd1BhdGNoID0gYXJvdW5kKHBhcmFtcy5tZW51LCB7XG4gICAgc2hvd0F0TW91c2VFdmVudDogKG5leHQpID0+XG4gICAgICBmdW5jdGlvbiBwYXRjaGVkU2hvd0F0TW91c2VFdmVudCh0aGlzOiBNZW51LCBzaG93TW91c2VFdmVudDogTW91c2VFdmVudCk6IE1lbnUge1xuICAgICAgICB1bmluc3RhbGxTaG93UGF0Y2goKTtcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUsIHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBwYXJhbXMubWVudS5pdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzIDogbmV4dC5jYWxsKHRoaXMsIHNob3dNb3VzZUV2ZW50KTtcbiAgICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVFeHBsb3JlckxlYWYoYXBwOiBBcHApOiBudWxsIHwgV29ya3NwYWNlTGVhZiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5GaWxlRXhwbG9yZXIpWzBdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFN0YXRlKGFwcDogQXBwKTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlc0J5QXBwID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZShTSEFSRURfU1RBVEVfS0VZLCBuZXcgV2Vha01hcDxBcHAsIEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGU+KCkpLnZhbHVlO1xuICBsZXQgc3RhdGUgPSBzdGF0ZXNCeUFwcC5nZXQoYXBwKTtcbiAgaWYgKCFzdGF0ZSkge1xuICAgIHN0YXRlID0geyBpbnN0YWxsYXRpb246IG51bGwsIHN1YnNjcmlwdGlvbnM6IFtdIH07XG4gICAgc3RhdGVzQnlBcHAuc2V0KGFwcCwgc3RhdGUpO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbFJvb3RNZW51KGFwcDogQXBwLCBzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSk6ICgpID0+IHZvaWQge1xuICBsZXQgaXNVbmluc3RhbGxlZCA9IGZhbHNlO1xuICBsZXQgcGVuZGluZ1Nwb3Q6IEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCB8IG51bGwgPSBudWxsO1xuICBsZXQgdW5pbnN0YWxsUGF0Y2g6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyeVBhdGNoKCk6IHZvaWQge1xuICAgIGlmIChpc1VuaW5zdGFsbGVkIHx8IHVuaW5zdGFsbFBhdGNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlldyA9IGdldEZpbGVFeHBsb3JlckxlYWYoYXBwKT8udmlldztcbiAgICBpZiAoIWlzRmlsZUV4cGxvcmVyVmlldyh2aWV3KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVuaW5zdGFsbFBhdGNoID0gYXJvdW5kKGdldFByb3RvdHlwZU9mKHZpZXcpLCB7XG4gICAgICBvbkZpbGVDb250ZXh0TWVudTogKG5leHQpID0+XG4gICAgICAgIGZ1bmN0aW9uIHBhdGNoZWRPbkZpbGVDb250ZXh0TWVudSh0aGlzOiBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51LCBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHx8ICFmaWxlLmlzUm9vdCgpKSB7XG4gICAgICAgICAgICBuZXh0LmNhbGwodGhpcywgbW91c2VFdmVudCwgZmlsZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3BlblJvb3RNZW51KHtcbiAgICAgICAgICAgIG1vdXNlRXZlbnQsXG4gICAgICAgICAgICBvcGVuTmF0aXZlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCBtb3VzZUV2ZW50LCBmaWxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb290Rm9sZGVyOiBmaWxlLFxuICAgICAgICAgICAgc3BvdDogcGVuZGluZ1Nwb3QgPz8gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LkVtcHR5QXJlYVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUm9vdE1lbnUocGFyYW1zOiBPcGVuUm9vdE1lbnVQYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG1vdXNlRXZlbnQsIG9wZW5OYXRpdmUsIHJvb3RGb2xkZXIsIHNwb3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBldmVudFJlZiA9IGFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtbWVudScsIChtZW51LCBmaWxlLCBzb3VyY2UpID0+IHtcbiAgICAgIGlmIChmaWxlICE9PSByb290Rm9sZGVyIHx8IHNvdXJjZSAhPT0gRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICAgIGRpc3BhdGNoQmVmb3JlU2hvdyhzdGF0ZSwgeyBtZW51LCBtb3VzZUV2ZW50LCByb290Rm9sZGVyLCBzcG90IH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdG9yZUlzUm9vdCA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24uc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcilcbiAgICAgID8gcHJlc2VudEFzRm9sZGVyKHJvb3RGb2xkZXIpXG4gICAgICA6IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb3Blbk5hdGl2ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZXN0b3JlSXNSb290Py4oKTtcbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuRnJvbVZhdWx0TmFtZShtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNPblZhdWx0TmFtZSA9IG1vdXNlRXZlbnQuY29tcG9zZWRQYXRoKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBWQVVMVF9OQU1FX1NFTEVDVE9SUy5zb21lKChzZWxlY3RvcikgPT4gdGFyZ2V0Lm1hdGNoZXMoc2VsZWN0b3IpKSk7XG4gICAgaWYgKCFpc09uVmF1bHROYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYE1lbnUuZm9yRXZlbnRgIGhhbmRzIGV2ZXJ5IGxpc3RlbmVyIG9mIG9uZSBldmVudCB0aGUgc2FtZSBtZW51IGFuZCBzaG93cyBpdCBvbiB0aGUgbmV4dCB0YXNrLiBPYnNpZGlhbidzIG93blxuICAgIC8vIGxpc3RlbmVyIG9uIHRoZSB2YXVsdCBuYW1lIGFkZHMgaXRzIHZhdWx0IGl0ZW1zIHRvIGl0IGFmdGVyIHRoaXMgY2FwdHVyZS1waGFzZSBvbmUgaGFzIHJ1bi5cbiAgICBjb25zdCB2YXVsdE1lbnUgPSBNZW51LmZvckV2ZW50KG1vdXNlRXZlbnQpO1xuICAgIGNvbnN0IHJvb3RGb2xkZXIgPSBhcHAudmF1bHQuZ2V0Um9vdCgpO1xuICAgIGNvbnN0IGxlYWYgPSBnZXRGaWxlRXhwbG9yZXJMZWFmKGFwcCk7XG4gICAgaWYgKCFsZWFmIHx8IHN0YXRlLnN1YnNjcmlwdGlvbnMuZXZlcnkoKHN1YnNjcmlwdGlvbikgPT4gIXN1YnNjcmlwdGlvbi5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyKSkge1xuICAgICAgZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlLCB7IG1lbnU6IHZhdWx0TWVudSwgbW91c2VFdmVudCwgcm9vdEZvbGRlciwgc3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LlZhdWx0TmFtZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVzZW50ZWQgYXMgYSBmb2xkZXIsIHRoZSByb290J3MgZm9sZGVyIG1lbnUgcmVwbGFjZXMgdGhlIHZhdWx0IG1lbnUgcmF0aGVyIHRoYW4gb3BlbmluZyBvbiB0b3Agb2YgaXQuXG4gICAgZnVuY3Rpb24gc3VwcHJlc3NWYXVsdE1lbnVTaG93KCk6IE1lbnUge1xuICAgICAgdW5pbnN0YWxsVmF1bHRNZW51U2hvd1BhdGNoKCk7XG4gICAgICByZXR1cm4gdmF1bHRNZW51O1xuICAgIH1cbiAgICBjb25zdCB1bmluc3RhbGxWYXVsdE1lbnVTaG93UGF0Y2ggPSBhcm91bmQodmF1bHRNZW51LCB7IHNob3dBdE1vdXNlRXZlbnQ6ICgpID0+IHN1cHByZXNzVmF1bHRNZW51U2hvdyB9KTtcbiAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBsZWFmLmxvYWRJZkRlZmVycmVkKCk7XG4gICAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgIWlzRmlsZUV4cGxvcmVyVmlldyh2aWV3KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeVBhdGNoKCk7XG4gICAgICB2aWV3LnRyZWUuY2xlYXJTZWxlY3RlZERvbXMoKTtcbiAgICAgIHBlbmRpbmdTcG90ID0gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LlZhdWx0TmFtZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZpZXcub25GaWxlQ29udGV4dE1lbnUobW91c2VFdmVudCwgcm9vdEZvbGRlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBwZW5kaW5nU3BvdCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0cnlQYXRjaCgpO1xuICBjb25zdCBsYXlvdXRDaGFuZ2VFdmVudFJlZiA9IGFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCB0cnlQYXRjaCk7XG4gIGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSh0cnlQYXRjaCk7XG4gIGNvbnN0IGRvYyA9IGFwcC53b3Jrc3BhY2UuY29udGFpbmVyRWwuZG9jO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvcGVuRnJvbVZhdWx0TmFtZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNVbmluc3RhbGxlZCA9IHRydWU7XG4gICAgdW5pbnN0YWxsUGF0Y2g/LigpO1xuICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGxheW91dENoYW5nZUV2ZW50UmVmKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvcGVuRnJvbVZhdWx0TmFtZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0ZpbGVFeHBsb3JlclZpZXcodmlldzogdW5rbm93bik6IHZpZXcgaXMgRmlsZUV4cGxvcmVyVmlld1dpdGhDb250ZXh0TWVudSB7XG4gIHJldHVybiB0eXBlb2YgKHZpZXcgYXMgUGFydGlhbDxGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51PiB8IHVuZGVmaW5lZCk/Lm9uRmlsZUNvbnRleHRNZW51ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBwcmVzZW50QXNGb2xkZXIocm9vdEZvbGRlcjogVEZvbGRlcik6ICgpID0+IHZvaWQge1xuICBjb25zdCBvd25Jc1Jvb3REZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyb290Rm9sZGVyLCAnaXNSb290Jyk7XG4gIHJvb3RGb2xkZXIuaXNSb290ID0gKCk6IGJvb2xlYW4gPT4gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG93bklzUm9vdERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyb290Rm9sZGVyLCAnaXNSb290Jywgb3duSXNSb290RGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSAocm9vdEZvbGRlciBhcyBQYXJ0aWFsPFRGb2xkZXI+KS5pc1Jvb3Q7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVSb290VW5zYWZlSXRlbXMobWVudTogTWVudSk6IHZvaWQge1xuICBjb25zdCB1bnNhZmVUaXRsZXMgPSBuZXcgU2V0PG51bGwgfCBzdHJpbmc+KFJPT1RfVU5TQUZFX0lURU1fVElUTEVfS0VZUy5tYXAoKGtleSkgPT4gYWN0aXZlV2luZG93LmkxOG5leHQudChrZXkpKSk7XG4gIG1lbnUuaXRlbXMgPSBtZW51Lml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIShpdGVtIGluc3RhbmNlb2YgTWVudUl0ZW0pIHx8ICF1bnNhZmVUaXRsZXMuaGFzKGl0ZW0udGl0bGVFbC50ZXh0Q29udGVudCkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTZCQSxtQkFBa0M7QUFDbEMsMEJBQStCO0FBQy9CLDZCQUF5QjtBQUN6QixzQkFJTztBQUVQLGdDQUFvQztBQUNwQywwQkFB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
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogT3BlbnMgYW5kIGV4dGVuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIGNvbnRleHQgbWVudSBmb3IgdGhlIHZhdWx0IHJvb3QsIGF0IHRoZSB0d28gc3BvdHMgdGhhdCBzdGFuZCBmb3IgaXQ6IHRoZVxuICogdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGFuZCB0aGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICpcbiAqIE9ic2lkaWFuIGFscmVhZHkgb3BlbnMgYSBtZW51IGZvciB0aGUgZW1wdHkgYXJlYTogdGhlIHZpZXcncyBvd24gYGNvbnRleHRtZW51YCBsaXN0ZW5lciBvbiBpdHMgZmlsZXMgY29udGFpbmVyIGNhbGxzXG4gKiBgb25GaWxlQ29udGV4dE1lbnUoZXZ0LCB2YXVsdC5nZXRSb290KCkpYCwgd2hpY2ggYnVpbGRzIGEge0BsaW5rIE1lbnV9LCB0cmlnZ2VycyBgZmlsZS1tZW51YCB3aXRoIHRoZSByb290IGZvbGRlciBhbmRcbiAqIHRoZSBzb3VyY2UgYGZpbGUtZXhwbG9yZXItY29udGV4dC1tZW51YCwgYW5kIHNob3dzIGl0LiBUaGUgdmF1bHQgbmFtZSAoYC53b3Jrc3BhY2UtZHJhd2VyLXZhdWx0LXN3aXRjaGVyYCBvbiBkZXNrdG9wLFxuICogYC53b3Jrc3BhY2UtZHJhd2VyLWhlYWRlci1uYW1lYCBvbiBtb2JpbGUsIHdoZXJlIE9ic2lkaWFuIGJ1aWxkcyBubyBzd2l0Y2hlcikgb3BlbnMgYSBkaWZmZXJlbnQgbWVudTogb24gZGVza3RvcFxuICogT2JzaWRpYW4gYWRkcyBgU2hvdyBpbiBzeXN0ZW0gZXhwbG9yZXJgIGFuZCBgQ29weSBwYXRoYCB0byB0aGUgcGVyLWV2ZW50IG1lbnUgYE1lbnUuZm9yRXZlbnRgIGhhbmRzIG91dC4gVGhlIGhhbmRsZXJzXG4gKiBnZXQgdGhhdCBtZW51LCBzbyBhIHJpZ2h0LWNsaWNrIHRoZXJlIG5ldmVyIG9wZW5zIGEgc2Vjb25kIG9uZS4gQSBzdWJzY3JpYmVyIHRoYXQgcHJlc2VudHMgdGhlIHJvb3QgYXMgYSBmb2xkZXJcbiAqIHJlcGxhY2VzIGl0IHdpdGggdGhlIHJvb3QncyBmb2xkZXIgbWVudSBpbnN0ZWFkLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYW5kIHNldmVyYWwgb2YgdGhlbSBtYXkgd2FudCB0aGlzIG1lbnUuIFR3byBjb3BpZXMgcGF0Y2hpbmcgdGhlXG4gKiBzYW1lIHByb3RvdHlwZSBhbmQgbGlzdGVuaW5nIG9uIHRoZSBzYW1lIGVsZW1lbnQgd291bGQgb3BlbiBpdCB0d2ljZSwgc28gdGhlcmUgaXMgT05FIGluc3RhbGxhdGlvbiBwZXIge0BsaW5rIEFwcH0sXG4gKiBrZXB0IGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSBhbmQgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGUgb3RoZXJzXG4gKiByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgaXQgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXQgYmV0d2VlblxuICogY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIHJlYWQgc3RydWN0dXJhbGx5LCBhbmQgYSBjaGFuZ2UgdG8gd2hhdCBhIGZpZWxkXG4gKiBtZWFucyBtb3ZlcyB0byBhIG5ldyBrZXkgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRpbmcgdGhlIG9sZCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGaWxlRXhwbG9yZXJWaWV3IH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldFByb3RvdHlwZU9mIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVJdGVtLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50cyB0aGF0IHN0YW5kIGZvciB0aGUgdmF1bHQgcm9vdCBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGluIHByaW9yaXR5IG9yZGVyLiBPYnNpZGlhbiBidWlsZHNcbiAqIGAud29ya3NwYWNlLWRyYXdlci12YXVsdC1zd2l0Y2hlcmAgb25seSBvbiBkZXNrdG9wOyBvbiBtb2JpbGUgdGhlIHZhdWx0IG5hbWUgaXMgdGhlIGRyYXdlciBoZWFkZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX05BTUVfU0VMRUNUT1JTID0gW1xuICAnLndvcmtzcGFjZS1kcmF3ZXItdmF1bHQtc3dpdGNoZXInLFxuICAnLndvcmtzcGFjZS1kcmF3ZXItaGVhZGVyLW5hbWUnXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRoZSBgc291cmNlYCBPYnNpZGlhbiBwYXNzZXMgd2l0aCBgZmlsZS1tZW51YCB3aGVuIHRoZSBGaWxlIEV4cGxvcmVyIG9wZW5zIGEgbWVudS5cbiAqL1xuY29uc3QgRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSA9ICdmaWxlLWV4cGxvcmVyLWNvbnRleHQtbWVudSc7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbXMgdGhhdCBtdXN0IG5vdCBhY3Qgb24gdGhlIHZhdWx0IHJvb3QsIGJ5IHRoZSBsb2NhbGl6YXRpb24ga2V5IG9mIHRoZWlyIHRpdGxlLiBUaGV5IGFwcGVhciBvbmx5IHdoZW5cbiAqIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIsIGZyb20gT2JzaWRpYW4gaXRzZWxmIG9yIGZyb20gYW5vdGhlciBwbHVnaW4ncyBgZmlsZS1tZW51YCBoYW5kbGVyLlxuICovXG5jb25zdCBST09UX1VOU0FGRV9JVEVNX1RJVExFX0tFWVMgPSBbXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIuYWN0aW9uLW1vdmUtZm9sZGVyJyxcbiAgJ3BsdWdpbnMuZmlsZS1leHBsb3Jlci5tZW51LW9wdC1kZWxldGUnLFxuICAncGx1Z2lucy5maWxlLWV4cGxvcmVyLm1lbnUtb3B0LW1ha2UtY29weScsXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIubWVudS1vcHQtcmVuYW1lJyxcbiAgJ3BsdWdpbnMuc2VhcmNoLm1lbnUtb3B0LXNlYXJjaC1pbi1mb2xkZXInXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ2ZpbGVFeHBsb3JlclJvb3RNZW51VjEnO1xuXG4vKipcbiAqIFdoaWNoIHNwb3Qgb2YgdGhlIEZpbGUgRXhwbG9yZXIgdGhlIHZhdWx0LXJvb3QgbWVudSB3YXMgb3BlbmVkIGZyb20uXG4gKi9cbmV4cG9ydCBlbnVtIEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCB7XG4gIC8qKlxuICAgKiBUaGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICAgKi9cbiAgRW1wdHlBcmVhID0gJ2VtcHR5LWFyZWEnLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIuXG4gICAqL1xuICBWYXVsdE5hbWUgPSAndmF1bHQtbmFtZSdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgZWFjaCB0aW1lIHRoZSB2YXVsdC1yb290IG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVyOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJvb3QgaXMgcHJlc2VudGVkIGFzIGFuIG9yZGluYXJ5IGZvbGRlciB3aGlsZSBpdHMgbWVudSBpcyBidWlsdCwgc28gdGhhdCBPYnNpZGlhbiBhbmQgb3RoZXIgcGx1Z2lucyBhZGRcbiAgICogdGhlIGl0ZW1zIHRoZXkgYWRkIHRvIGFueSBmb2xkZXIuIFRoZSBpdGVtcyB0aGF0IG11c3Qgbm90IGFjdCBvbiB0aGUgcm9vdCAocmVuYW1lLCBkZWxldGUsIG1vdmUsIG1ha2UgYSBjb3B5IGFuZFxuICAgKiBzZWFyY2ggaW4gZm9sZGVyKSBhcmUgcmVtb3ZlZCBhZ2FpbiBiZWZvcmUgdGhlIG1lbnUgaXMgc2hvd24uIE9uIHRoZSB2YXVsdCBuYW1lLCB0aGUgcm9vdCdzIGZvbGRlciBtZW51IHRoZW4gcmVwbGFjZXNcbiAgICogT2JzaWRpYW4ncyB2YXVsdCBtZW51LiBJdCBob2xkcyB3aGlsZSBhbnkgc3Vic2NyaWJlciBhc2tzIGZvciBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIG9mIHRoZSB2YXVsdC1yb290IG1lbnUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgdHlwZSBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXIgPSAocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSB7QGxpbmsgRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyfS5cbiAqXG4gKiBUaGUgc2hhcGUgaXMgcGFydCBvZiB0aGUgd2lyZSBmb3JtYXQgYmV0d2VlbiBjb3BpZXMgb2YgdGhpcyBsaWJyYXJ5OiBmaWVsZHMgYXJlIG9ubHkgZXZlciBhZGRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbnUsIGFib3V0IHRvIGJlIHNob3duOiB0aGUgcm9vdCdzIGZvbGRlciBtZW51LCBhZnRlciBldmVyeSBgZmlsZS1tZW51YCBoYW5kbGVyIGhhcyBydW4sIG9yIG9uIHRoZSB2YXVsdCBuYW1lIHRoZVxuICAgKiB2YXVsdCBtZW51IE9ic2lkaWFuIGJ1aWxkcyB0aGVyZS4gQSBtZW51IHN0aWxsIGVtcHR5IGFmdGVyIGV2ZXJ5IGhhbmRsZXIgaXMgbm90IHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVudTogTWVudTtcblxuICAvKipcbiAgICogVGhlIHJpZ2h0LWNsaWNrIG9yIGxvbmctcHJlc3MgdGhhdCBvcGVuZWQgdGhlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFdoaWNoIHNwb3QgdGhlIG1lbnUgd2FzIG9wZW5lZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90O1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVJbnN0YWxsYXRpb24ge1xuICByZWFkb25seSBvd25lcjogRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb247XG4gIHJlYWRvbmx5IHVuaW5zdGFsbDogKCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBTdWJzY3JpYmVyIGNoYW5nZXMgcmVwbGFjZSBvciBjbGVhciB0aGUgc2hhcmVkIG1lbnUgaW5zdGFsbGF0aW9uLlxuICBpbnN0YWxsYXRpb246IEZpbGVFeHBsb3JlclJvb3RNZW51SW5zdGFsbGF0aW9uIHwgbnVsbDtcbiAgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb25bXTtcbn1cblxuaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51U3Vic2NyaXB0aW9uIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogKHBhcmFtczogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyUGFyYW1zKSA9PiB2b2lkO1xuICByZWFkb25seSBpbnN0YWxsOiAoKSA9PiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyVmlld1dpdGhDb250ZXh0TWVudSBleHRlbmRzIEZpbGVFeHBsb3JlclZpZXcge1xuICByZWFkb25seSBvbkZpbGVDb250ZXh0TWVudTogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGZpbGU6IFRBYnN0cmFjdEZpbGUpID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBPcGVuUm9vdE1lbnVQYXJhbXMge1xuICByZWFkb25seSBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xuICByZWFkb25seSBvcGVuTmF0aXZlOiAoKSA9PiB2b2lkO1xuICByZWFkb25seSByb290Rm9sZGVyOiBURm9sZGVyO1xuICByZWFkb25seSBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3Q7XG59XG5cbi8qKlxuICogSGFuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIHZhdWx0LXJvb3QgbWVudSB0byBhIGhhbmRsZXIsIGFuZCBvcGVucyB0aGF0IG1lbnUgZnJvbSB0aGUgdmF1bHQgbmFtZSB0b28uXG4gKlxuICogQW55IG51bWJlciBvZiB0aGVzZSwgaW4gYW55IG51bWJlciBvZiBwbHVnaW5zLCBzaGFyZSBvbmUgaW5zdGFsbGF0aW9uIHBlciB7QGxpbmsgQXBwfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQ2FsbGVkIGVhY2ggdGltZSB0aGUgdmF1bHQtcm9vdCBtZW51IGlzIGFib3V0IHRvIGJlIHNob3duLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhbmRsZXI6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcm9vdCBpcyBwcmVzZW50ZWQgYXMgYW4gb3JkaW5hcnkgZm9sZGVyIHdoaWxlIGl0cyBtZW51IGlzIGJ1aWx0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3VsZFByZXNlbnRSb290QXNGb2xkZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBleHBsb3JlciByb290IG1lbnUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5oYW5kbGVyID0gcGFyYW1zLmhhbmRsZXI7XG4gICAgdGhpcy5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyID0gcGFyYW1zLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbiwgaW5zdGFsbGluZyBpdCB3aGVuIG5vYm9keSBoYXMgeWV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U2hhcmVkU3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb246IEZpbGVFeHBsb3JlclJvb3RNZW51U3Vic2NyaXB0aW9uID0ge1xuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgICAgaW5zdGFsbDogKCkgPT4gaW5zdGFsbFJvb3RNZW51KHRoaXMuYXBwLCBzdGF0ZSksXG4gICAgICBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyOiB0aGlzLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXJcbiAgICB9O1xuICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIHN0YXRlLmluc3RhbGxhdGlvbiA/Pz0geyBvd25lcjogc3Vic2NyaXB0aW9uLCB1bmluc3RhbGw6IHN1YnNjcmlwdGlvbi5pbnN0YWxsKCkgfTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3RhdGUuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbiksIDEpO1xuICAgICAgaWYgKHN0YXRlLmluc3RhbGxhdGlvbj8ub3duZXIgIT09IHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmluc3RhbGxhdGlvbi51bmluc3RhbGwoKTtcbiAgICAgIGNvbnN0IG5leHRPd25lciA9IHN0YXRlLnN1YnNjcmlwdGlvbnNbMF07XG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPSBuZXh0T3duZXIgPyB7IG93bmVyOiBuZXh0T3duZXIsIHVuaW5zdGFsbDogbmV4dE93bmVyLmluc3RhbGwoKSB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaChzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSwgcGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLnN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24uc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcikpIHtcbiAgICByZW1vdmVSb290VW5zYWZlSXRlbXMocGFyYW1zLm1lbnUpO1xuICB9XG5cbiAgLy8gQSBzbmFwc2hvdDogYSBoYW5kbGVyIG1heSB1bmxvYWQgaXRzIG93biBjb21wb25lbnQsIG9yIGFub3RoZXIgb25lLCB3aGlsZSB0aGUgbWVudSBpcyBkaXNwYXRjaGVkLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXNwcmVhZCAtLSBUaGUgY29weSBpcyB0aGUgcG9pbnQ6IHRoZSBsaXN0IG1heSBjaGFuZ2UgZHVyaW5nIHRoZSBsb29wLlxuICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBbLi4uc3RhdGUuc3Vic2NyaXB0aW9uc10pIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaXB0aW9uLmhhbmRsZXIocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIGV4cGxvcmVyIHJvb3QgbWVudSBoYW5kbGVyIGZhaWxlZCcsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlOiBGaWxlRXhwbG9yZXJSb290TWVudVNoYXJlZFN0YXRlLCBwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB1bmluc3RhbGxTaG93UGF0Y2ggPSBhcm91bmQocGFyYW1zLm1lbnUsIHtcbiAgICBzaG93QXRNb3VzZUV2ZW50OiAobmV4dCkgPT5cbiAgICAgIGZ1bmN0aW9uIHBhdGNoZWRTaG93QXRNb3VzZUV2ZW50KHRoaXM6IE1lbnUsIHNob3dNb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogTWVudSB7XG4gICAgICAgIHVuaW5zdGFsbFNob3dQYXRjaCgpO1xuICAgICAgICBkaXNwYXRjaChzdGF0ZSwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tZW51Lml0ZW1zLmxlbmd0aCA9PT0gMCA/IHRoaXMgOiBuZXh0LmNhbGwodGhpcywgc2hvd01vdXNlRXZlbnQpO1xuICAgICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyTGVhZihhcHA6IEFwcCk6IG51bGwgfCBXb3Jrc3BhY2VMZWFmIHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFZpZXdUeXBlLkZpbGVFeHBsb3JlcilbMF0gPz8gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkU3RhdGUoKTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkxpYlN0YXRlPEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGU+KFNIQVJFRF9TVEFURV9LRVksIHtcbiAgICBpbnN0YWxsYXRpb246IG51bGwsXG4gICAgc3Vic2NyaXB0aW9uczogW11cbiAgfSkudmFsdWU7XG59XG5mdW5jdGlvbiBpbnN0YWxsUm9vdE1lbnUoYXBwOiBBcHAsIHN0YXRlOiBGaWxlRXhwbG9yZXJSb290TWVudVNoYXJlZFN0YXRlKTogKCkgPT4gdm9pZCB7XG4gIGxldCBpc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGxldCBwZW5kaW5nU3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90IHwgbnVsbCA9IG51bGw7XG4gIGxldCB1bmluc3RhbGxQYXRjaDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJ5UGF0Y2goKTogdm9pZCB7XG4gICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgdW5pbnN0YWxsUGF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3ID0gZ2V0RmlsZUV4cGxvcmVyTGVhZihhcHApPy52aWV3O1xuICAgIGlmICghaXNGaWxlRXhwbG9yZXJWaWV3KHZpZXcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdW5pbnN0YWxsUGF0Y2ggPSBhcm91bmQoZ2V0UHJvdG90eXBlT2YodmlldyksIHtcbiAgICAgIG9uRmlsZUNvbnRleHRNZW51OiAobmV4dCkgPT5cbiAgICAgICAgZnVuY3Rpb24gcGF0Y2hlZE9uRmlsZUNvbnRleHRNZW51KHRoaXM6IEZpbGVFeHBsb3JlclZpZXdXaXRoQ29udGV4dE1lbnUsIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikgfHwgIWZpbGUuaXNSb290KCkpIHtcbiAgICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCBtb3VzZUV2ZW50LCBmaWxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcGVuUm9vdE1lbnUoe1xuICAgICAgICAgICAgbW91c2VFdmVudCxcbiAgICAgICAgICAgIG9wZW5OYXRpdmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIG1vdXNlRXZlbnQsIGZpbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvb3RGb2xkZXI6IGZpbGUsXG4gICAgICAgICAgICBzcG90OiBwZW5kaW5nU3BvdCA/PyBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuRW1wdHlBcmVhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Sb290TWVudShwYXJhbXM6IE9wZW5Sb290TWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbW91c2VFdmVudCwgb3Blbk5hdGl2ZSwgcm9vdEZvbGRlciwgc3BvdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gYXBwLndvcmtzcGFjZS5vbignZmlsZS1tZW51JywgKG1lbnUsIGZpbGUsIHNvdXJjZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgIT09IHJvb3RGb2xkZXIgfHwgc291cmNlICE9PSBGSUxFX0VYUExPUkVSX01FTlVfU09VUkNFKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBwLndvcmtzcGFjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlLCB7IG1lbnUsIG1vdXNlRXZlbnQsIHJvb3RGb2xkZXIsIHNwb3QgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN0b3JlSXNSb290ID0gc3RhdGUuc3Vic2NyaXB0aW9ucy5zb21lKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyKVxuICAgICAgPyBwcmVzZW50QXNGb2xkZXIocm9vdEZvbGRlcilcbiAgICAgIDogbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBvcGVuTmF0aXZlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc3RvcmVJc1Jvb3Q/LigpO1xuICAgICAgYXBwLndvcmtzcGFjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Gcm9tVmF1bHROYW1lKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc09uVmF1bHROYW1lID0gbW91c2VFdmVudC5jb21wb3NlZFBhdGgoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIFZBVUxUX05BTUVfU0VMRUNUT1JTLnNvbWUoKHNlbGVjdG9yKSA9PiB0YXJnZXQubWF0Y2hlcyhzZWxlY3RvcikpKTtcbiAgICBpZiAoIWlzT25WYXVsdE5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBgTWVudS5mb3JFdmVudGAgaGFuZHMgZXZlcnkgbGlzdGVuZXIgb2Ygb25lIGV2ZW50IHRoZSBzYW1lIG1lbnUgYW5kIHNob3dzIGl0IG9uIHRoZSBuZXh0IHRhc2suIE9ic2lkaWFuJ3Mgb3duXG4gICAgLy8gbGlzdGVuZXIgb24gdGhlIHZhdWx0IG5hbWUgYWRkcyBpdHMgdmF1bHQgaXRlbXMgdG8gaXQgYWZ0ZXIgdGhpcyBjYXB0dXJlLXBoYXNlIG9uZSBoYXMgcnVuLlxuICAgIGNvbnN0IHZhdWx0TWVudSA9IE1lbnUuZm9yRXZlbnQobW91c2VFdmVudCk7XG4gICAgY29uc3Qgcm9vdEZvbGRlciA9IGFwcC52YXVsdC5nZXRSb290KCk7XG4gICAgY29uc3QgbGVhZiA9IGdldEZpbGVFeHBsb3JlckxlYWYoYXBwKTtcbiAgICBpZiAoIWxlYWYgfHwgc3RhdGUuc3Vic2NyaXB0aW9ucy5ldmVyeSgoc3Vic2NyaXB0aW9uKSA9PiAhc3Vic2NyaXB0aW9uLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIpKSB7XG4gICAgICBkaXNwYXRjaEJlZm9yZVNob3coc3RhdGUsIHsgbWVudTogdmF1bHRNZW51LCBtb3VzZUV2ZW50LCByb290Rm9sZGVyLCBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuVmF1bHROYW1lIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXNlbnRlZCBhcyBhIGZvbGRlciwgdGhlIHJvb3QncyBmb2xkZXIgbWVudSByZXBsYWNlcyB0aGUgdmF1bHQgbWVudSByYXRoZXIgdGhhbiBvcGVuaW5nIG9uIHRvcCBvZiBpdC5cbiAgICBmdW5jdGlvbiBzdXBwcmVzc1ZhdWx0TWVudVNob3coKTogTWVudSB7XG4gICAgICB1bmluc3RhbGxWYXVsdE1lbnVTaG93UGF0Y2goKTtcbiAgICAgIHJldHVybiB2YXVsdE1lbnU7XG4gICAgfVxuICAgIGNvbnN0IHVuaW5zdGFsbFZhdWx0TWVudVNob3dQYXRjaCA9IGFyb3VuZCh2YXVsdE1lbnUsIHsgc2hvd0F0TW91c2VFdmVudDogKCkgPT4gc3VwcHJlc3NWYXVsdE1lbnVTaG93IH0pO1xuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGxlYWYubG9hZElmRGVmZXJyZWQoKTtcbiAgICAgIGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG4gICAgICBpZiAoaXNVbmluc3RhbGxlZCB8fCAhaXNGaWxlRXhwbG9yZXJWaWV3KHZpZXcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5UGF0Y2goKTtcbiAgICAgIHZpZXcudHJlZS5jbGVhclNlbGVjdGVkRG9tcygpO1xuICAgICAgcGVuZGluZ1Nwb3QgPSBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuVmF1bHROYW1lO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmlldy5vbkZpbGVDb250ZXh0TWVudShtb3VzZUV2ZW50LCByb290Rm9sZGVyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHBlbmRpbmdTcG90ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyeVBhdGNoKCk7XG4gIGNvbnN0IGxheW91dENoYW5nZUV2ZW50UmVmID0gYXBwLndvcmtzcGFjZS5vbignbGF5b3V0LWNoYW5nZScsIHRyeVBhdGNoKTtcbiAgYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHRyeVBhdGNoKTtcbiAgY29uc3QgZG9jID0gYXBwLndvcmtzcGFjZS5jb250YWluZXJFbC5kb2M7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIG9wZW5Gcm9tVmF1bHROYW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpc1VuaW5zdGFsbGVkID0gdHJ1ZTtcbiAgICB1bmluc3RhbGxQYXRjaD8uKCk7XG4gICAgYXBwLndvcmtzcGFjZS5vZmZyZWYobGF5b3V0Q2hhbmdlRXZlbnRSZWYpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIG9wZW5Gcm9tVmF1bHROYW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRmlsZUV4cGxvcmVyVmlldyh2aWV3OiB1bmtub3duKTogdmlldyBpcyBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51IHtcbiAgcmV0dXJuIHR5cGVvZiAodmlldyBhcyBQYXJ0aWFsPEZpbGVFeHBsb3JlclZpZXdXaXRoQ29udGV4dE1lbnU+IHwgdW5kZWZpbmVkKT8ub25GaWxlQ29udGV4dE1lbnUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIHByZXNlbnRBc0ZvbGRlcihyb290Rm9sZGVyOiBURm9sZGVyKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IG93bklzUm9vdERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJvb3RGb2xkZXIsICdpc1Jvb3QnKTtcbiAgcm9vdEZvbGRlci5pc1Jvb3QgPSAoKTogYm9vbGVhbiA9PiBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAob3duSXNSb290RGVzY3JpcHRvcikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvb3RGb2xkZXIsICdpc1Jvb3QnLCBvd25Jc1Jvb3REZXNjcmlwdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIChyb290Rm9sZGVyIGFzIFBhcnRpYWw8VEZvbGRlcj4pLmlzUm9vdDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJvb3RVbnNhZmVJdGVtcyhtZW51OiBNZW51KTogdm9pZCB7XG4gIGNvbnN0IHVuc2FmZVRpdGxlcyA9IG5ldyBTZXQ8bnVsbCB8IHN0cmluZz4oUk9PVF9VTlNBRkVfSVRFTV9USVRMRV9LRVlTLm1hcCgoa2V5KSA9PiBhY3RpdmVXaW5kb3cuaTE4bmV4dC50KGtleSkpKTtcbiAgbWVudS5pdGVtcyA9IG1lbnUuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhKGl0ZW0gaW5zdGFuY2VvZiBNZW51SXRlbSkgfHwgIXVuc2FmZVRpdGxlcy5oYXMoaXRlbS50aXRsZUVsLnRleHRDb250ZW50KSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkJBLG1CQUFrQztBQUNsQywwQkFBK0I7QUFDL0IsNkJBQXlCO0FBQ3pCLHNCQUlPO0FB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
|
|
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
14
14
|
__isPatched: true
|
|
15
15
|
}
|
|
16
16
|
);
|
|
17
|
-
function extractDefault(module) {
|
|
18
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
17
|
+
function extractDefault($module) {
|
|
18
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
19
19
|
}
|
|
20
20
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
21
21
|
"@codemirror/autocomplete",
|
|
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
57
57
|
return process;
|
|
58
58
|
}
|
|
59
59
|
} else {
|
|
60
|
-
const module = originalRequire?.(id);
|
|
61
|
-
if (module) {
|
|
62
|
-
return extractDefault(module);
|
|
60
|
+
const $module = originalRequire?.(id);
|
|
61
|
+
if ($module) {
|
|
62
|
+
return extractDefault($module);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
(function patchObsidianRequire() {
|
|
33
|
+
const originalRequire = require;
|
|
34
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
require = Object.assign(
|
|
38
|
+
(id) => requirePatched(id),
|
|
39
|
+
originalRequire,
|
|
40
|
+
{
|
|
41
|
+
__isPatched: true
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
|
+
}
|
|
47
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
|
+
"@codemirror/autocomplete",
|
|
49
|
+
"@codemirror/collab",
|
|
50
|
+
"@codemirror/commands",
|
|
51
|
+
"@codemirror/language",
|
|
52
|
+
"@codemirror/lint",
|
|
53
|
+
"@codemirror/search",
|
|
54
|
+
"@codemirror/state",
|
|
55
|
+
"@codemirror/text",
|
|
56
|
+
"@codemirror/view",
|
|
57
|
+
"@lezer/common",
|
|
58
|
+
"@lezer/highlight",
|
|
59
|
+
"@lezer/lr",
|
|
60
|
+
"obsidian"
|
|
61
|
+
]);
|
|
62
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
63
|
+
"@codemirror/closebrackets",
|
|
64
|
+
"@codemirror/comment",
|
|
65
|
+
"@codemirror/fold",
|
|
66
|
+
"@codemirror/gutter",
|
|
67
|
+
"@codemirror/highlight",
|
|
68
|
+
"@codemirror/history",
|
|
69
|
+
"@codemirror/matchbrackets",
|
|
70
|
+
"@codemirror/panel",
|
|
71
|
+
"@codemirror/rangeset",
|
|
72
|
+
"@codemirror/rectangular-selection",
|
|
73
|
+
"@codemirror/stream-parser",
|
|
74
|
+
"@codemirror/tooltip"
|
|
75
|
+
]);
|
|
76
|
+
function requirePatched(id) {
|
|
77
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
78
|
+
return originalRequire?.(id);
|
|
79
|
+
}
|
|
80
|
+
const app = globalThis.app;
|
|
81
|
+
if (app?.isMobile) {
|
|
82
|
+
if (id === "process" || id === "node:process") {
|
|
83
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
84
|
+
return process;
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
|
|
97
|
+
"use strict";
|
|
98
|
+
var __defProp = Object.defineProperty;
|
|
99
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
100
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
101
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
102
|
+
var __export = (target, all) => {
|
|
103
|
+
for (var name in all)
|
|
104
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
105
|
+
};
|
|
106
|
+
var __copyProps = (to, from, except, desc) => {
|
|
107
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
108
|
+
for (let key of __getOwnPropNames(from))
|
|
109
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
110
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
111
|
+
}
|
|
112
|
+
return to;
|
|
113
|
+
};
|
|
114
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
115
|
+
var incremental_file_index_component_exports = {};
|
|
116
|
+
__export(incremental_file_index_component_exports, {
|
|
117
|
+
IncrementalFileIndexComponent: () => IncrementalFileIndexComponent
|
|
118
|
+
});
|
|
119
|
+
module.exports = __toCommonJS(incremental_file_index_component_exports);
|
|
120
|
+
var import_async = require('@mnaoumov/typescript-lib/async');
|
|
121
|
+
var import_function = require('@mnaoumov/typescript-lib/function');
|
|
122
|
+
var import_obsidian = require('obsidian');
|
|
123
|
+
var import_component_ex = require('./component-ex.cjs');
|
|
124
|
+
const SAVE_DEBOUNCE_IN_MILLISECONDS = 5e3;
|
|
125
|
+
class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
|
|
126
|
+
/**
|
|
127
|
+
* Whether startup reconciliation has completed.
|
|
128
|
+
*
|
|
129
|
+
* @returns Whether the index completed its first reconciliation.
|
|
130
|
+
*/
|
|
131
|
+
get isBuilt() {
|
|
132
|
+
return this.isBuiltValue;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Projection, notifications and persistence supplied by the consumer.
|
|
136
|
+
*/
|
|
137
|
+
options;
|
|
138
|
+
isBuiltValue = false;
|
|
139
|
+
readTail = (0, import_function.noopAsync)();
|
|
140
|
+
records = /* @__PURE__ */ new Map();
|
|
141
|
+
requestSave;
|
|
142
|
+
revision = 0;
|
|
143
|
+
revisions = /* @__PURE__ */ new WeakMap();
|
|
144
|
+
savedRevision = 0;
|
|
145
|
+
savePromise = null;
|
|
146
|
+
/**
|
|
147
|
+
* Creates an index with consumer-owned projection and persistence.
|
|
148
|
+
*
|
|
149
|
+
* @param params - The index dependencies.
|
|
150
|
+
*/
|
|
151
|
+
constructor(params) {
|
|
152
|
+
super();
|
|
153
|
+
this.options = { accepts: params.accepts, app: params.app, indexFile: params.indexFile, load: params.load, onRemove: params.onRemove, onSet: params.onSet, save: params.save };
|
|
154
|
+
this.requestSave = (0, import_obsidian.debounce)(
|
|
155
|
+
() => {
|
|
156
|
+
(0, import_async.invokeAsyncSafely)(() => this.flush());
|
|
157
|
+
},
|
|
158
|
+
SAVE_DEBOUNCE_IN_MILLISECONDS,
|
|
159
|
+
false
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Saves a snapshot after previous writes finish, including changes arriving during a write.
|
|
164
|
+
*
|
|
165
|
+
* @returns Completion of the serialized writes; rejects on persistence failure without marking it saved.
|
|
166
|
+
*/
|
|
167
|
+
async flush() {
|
|
168
|
+
if (this.savePromise) {
|
|
169
|
+
await this.savePromise;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.savePromise = this.saveChanges();
|
|
173
|
+
try {
|
|
174
|
+
await this.savePromise;
|
|
175
|
+
} finally {
|
|
176
|
+
this.savePromise = null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Returns a shallow snapshot; consumers must treat records as immutable.
|
|
181
|
+
*
|
|
182
|
+
* @returns Current records by vault-relative path.
|
|
183
|
+
*/
|
|
184
|
+
getRecords() {
|
|
185
|
+
return new Map(this.records);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Registers changes before startup restoration.
|
|
189
|
+
*/
|
|
190
|
+
onload() {
|
|
191
|
+
const { app } = this.options;
|
|
192
|
+
this.registerEvent(app.metadataCache.on("changed", (file, content) => {
|
|
193
|
+
this.setText(file, content);
|
|
194
|
+
}));
|
|
195
|
+
this.registerEvent(app.vault.on("create", this.queueScan.bind(this)));
|
|
196
|
+
this.registerEvent(app.vault.on("modify", this.queueScan.bind(this)));
|
|
197
|
+
this.registerEvent(app.vault.on("delete", (file) => {
|
|
198
|
+
if (file instanceof import_obsidian.TFile) {
|
|
199
|
+
this.removeRecord(file.path);
|
|
200
|
+
} else {
|
|
201
|
+
this.removeTree(file.path);
|
|
202
|
+
}
|
|
203
|
+
}));
|
|
204
|
+
this.registerEvent(app.vault.on("rename", (file, oldPath) => {
|
|
205
|
+
this.rename(file, oldPath);
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Reuses unchanged saved records and reads other files one at a time.
|
|
210
|
+
*
|
|
211
|
+
* @returns Completion of startup reconciliation.
|
|
212
|
+
*/
|
|
213
|
+
async onloadAsync() {
|
|
214
|
+
const saved = await this.options.load();
|
|
215
|
+
for (const file of this.options.app.vault.getFiles()) {
|
|
216
|
+
if (this.isUnloaded()) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (!this.options.accepts(file) || this.revisions.has(file) || this.options.app.vault.getFileByPath(file.path) !== file) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
const entry = saved.get(file.path);
|
|
223
|
+
if (entry?.mtime === file.stat.mtime && entry.size === file.stat.size) {
|
|
224
|
+
this.setRecord(file.path, entry);
|
|
225
|
+
} else {
|
|
226
|
+
await this.scanFile(file);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
await this.readTail;
|
|
230
|
+
if (this.isUnloaded()) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
this.isBuiltValue = true;
|
|
234
|
+
this.markDirty();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Cancels the debounce and flushes completed indexes before disposing event listeners.
|
|
238
|
+
*/
|
|
239
|
+
onunload() {
|
|
240
|
+
this.requestSave.cancel();
|
|
241
|
+
if (this.isBuiltValue) {
|
|
242
|
+
(0, import_async.invokeAsyncSafely)(() => this.flush());
|
|
243
|
+
}
|
|
244
|
+
super.onunload();
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Rebuilds projections for every accepted file, for example after a consumer learns new names to find in text.
|
|
248
|
+
* Events arriving during the scan supersede its older reads. Consumers coordinate any domain scan markers.
|
|
249
|
+
*
|
|
250
|
+
* @returns Completion of the bounded full scan.
|
|
251
|
+
*/
|
|
252
|
+
async rescan() {
|
|
253
|
+
for (const file of this.options.app.vault.getFiles()) {
|
|
254
|
+
await this.scanFile(file);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
markDirty() {
|
|
258
|
+
this.revision++;
|
|
259
|
+
if (this.isBuiltValue && !this.isUnloaded()) {
|
|
260
|
+
this.requestSave();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
queueScan(file) {
|
|
264
|
+
if (file instanceof import_obsidian.TFile) {
|
|
265
|
+
(0, import_async.invokeAsyncSafely)(() => this.scanFile(file));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
removeRecord(path) {
|
|
269
|
+
if (!this.records.delete(path)) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
this.options.onRemove(path);
|
|
273
|
+
this.markDirty();
|
|
274
|
+
}
|
|
275
|
+
removeTree(path) {
|
|
276
|
+
for (const key of this.records.keys()) {
|
|
277
|
+
if (!(key === path || key.startsWith(`${path}/`))) {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
this.removeRecord(key);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
rename(file, oldPath) {
|
|
284
|
+
if (file instanceof import_obsidian.TFile) {
|
|
285
|
+
this.removeRecord(oldPath);
|
|
286
|
+
} else {
|
|
287
|
+
this.removeTree(oldPath);
|
|
288
|
+
}
|
|
289
|
+
this.queueScan(file);
|
|
290
|
+
if (file instanceof import_obsidian.TFolder) {
|
|
291
|
+
import_obsidian.Vault.recurseChildren(file, this.queueScan.bind(this));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
async saveChanges() {
|
|
295
|
+
while (this.isBuiltValue && this.savedRevision !== this.revision) {
|
|
296
|
+
const revision = this.revision;
|
|
297
|
+
await this.options.save(new Map(this.records));
|
|
298
|
+
this.savedRevision = revision;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async scanFile(file) {
|
|
302
|
+
if (this.isUnloaded() || !this.options.accepts(file)) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
this.removeRecord(file.path);
|
|
306
|
+
const token = {};
|
|
307
|
+
this.revisions.set(file, token);
|
|
308
|
+
const { path } = file;
|
|
309
|
+
const { mtime, size } = file.stat;
|
|
310
|
+
const isCurrent = () => !this.isUnloaded() && this.revisions.get(file) === token && file.path === path && file.stat.mtime === mtime && file.stat.size === size && this.options.app.vault.getFileByPath(path) === file;
|
|
311
|
+
const read = this.readTail.then(async () => {
|
|
312
|
+
if (!isCurrent()) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const content = await this.options.app.vault.cachedRead(file);
|
|
316
|
+
if (!isCurrent()) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
this.setText(file, content);
|
|
320
|
+
});
|
|
321
|
+
this.readTail = read.catch(import_function.noop);
|
|
322
|
+
await read;
|
|
323
|
+
}
|
|
324
|
+
setRecord(path, entry) {
|
|
325
|
+
this.records.set(path, entry);
|
|
326
|
+
this.options.onSet(path, entry.record);
|
|
327
|
+
this.markDirty();
|
|
328
|
+
}
|
|
329
|
+
setText(file, content) {
|
|
330
|
+
this.revisions.set(file, {});
|
|
331
|
+
if (!this.isUnloaded() && this.options.accepts(file)) {
|
|
332
|
+
this.setRecord(file.path, { mtime: file.stat.mtime, record: this.options.indexFile({ content, file }), size: file.stat.size });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
337
|
+
0 && (module.exports = {
|
|
338
|
+
IncrementalFileIndexComponent
|
|
339
|
+
});
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIHByb2plY3Rpb24gYW5kIHRoZSBmaWxlIHN0YXRzIG9ic2VydmVkIGJlZm9yZSByZWFkaW5nIGl0cyB0ZXh0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleGVkRmlsZVJlY29yZDxUPiB7XG4gIC8qKlxuICAgKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNvbnN1bWVyJ3MgaW1tdXRhYmxlIHByb2plY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZWNvcmQ6IFQ7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogSW5wdXRzIHRvIGEgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleEZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGV4dCByZWFkIGZyb20gdGhlIHZhdWx0LCBvciBzdXBwbGllZCBieSBhIG1ldGFkYXRhLWNhY2hlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgYmVpbmcgaW5kZXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IFRGaWxlO1xufVxuXG4vKipcbiAqIEtlZXBzIHBlci1maWxlIHByb2plY3Rpb25zIGN1cnJlbnQgd2hpbGUgbG9hZGVkLiBDYWxsIGxvYWRXaXRoUHJvbWlzZXMgYWZ0ZXIgbWV0YWRhdGEgcmVhZGluZXNzIGlmIHRoZVxuICogcHJvamVjdGlvbiBuZWVkcyBjYWNoZWQgbWV0YWRhdGEuIExpc3RlbmVycyBhcmUgaW5zdGFsbGVkIGJlZm9yZSByZXN0b3JhdGlvbiwgYW5kIGV2ZW50cyB3aW4gb3ZlciBvbGRlciByZWFkcy5cbiAqIFJlYWRzIGFyZSBzZXF1ZW50aWFsLCBib3VuZGluZyBtZW1vcnkgYW5kIEkvTzsgY29uc3VtZXJzIG93biBzY2hlbWEsIHN0b3JhZ2UgbG9jYXRpb24gYW5kIHNlY29uZGFyeSBpbmRleGVzLlxuICogVW5jaGFuZ2VkIHJlY29yZHMgYXJlIHJldXNlZCBieSBtdGltZSBhbmQgc2l6ZSwgd2hpY2ggY2Fubm90IGRldGVjdCBhIHNhbWUtc3RhdCBleHRlcm5hbCByZXdyaXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50PFQ+IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogV2hldGhlciBzdGFydHVwIHJlY29uY2lsaWF0aW9uIGhhcyBjb21wbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluZGV4IGNvbXBsZXRlZCBpdHMgZmlyc3QgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQnVpbHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCdWlsdFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3Rpb24sIG5vdGlmaWNhdGlvbnMgYW5kIHBlcnNpc3RlbmNlIHN1cHBsaWVkIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IGFjY2VwdHM6IHBhcmFtcy5hY2NlcHRzLCBhcHA6IHBhcmFtcy5hcHAsIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSwgbG9hZDogcGFyYW1zLmxvYWQsIG9uUmVtb3ZlOiBwYXJhbXMub25SZW1vdmUsIG9uU2V0OiBwYXJhbXMub25TZXQsIHNhdmU6IHBhcmFtcy5zYXZlIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5xdWV1ZVNjYW4uYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9uKys7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlICYmICF0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0U2F2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlUmVjb3JkKG9sZFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gICAgfVxuICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUNoYW5nZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRoaXMuaXNCdWlsdFZhbHVlICYmIHRoaXMuc2F2ZWRSZXZpc2lvbiAhPT0gdGhpcy5yZXZpc2lvbikge1xuICAgICAgY29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLnNhdmUobmV3IE1hcCh0aGlzLnJlY29yZHMpKTtcbiAgICAgIHRoaXMuc2F2ZWRSZXZpc2lvbiA9IHJldmlzaW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2NhbkZpbGUoZmlsZTogVEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkgfHwgIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlUmVjb3JkKGZpbGUucGF0aCk7XG4gICAgY29uc3QgdG9rZW4gPSB7fTtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwgdG9rZW4pO1xuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcbiAgICBjb25zdCB7IG10aW1lLCBzaXplIH0gPSBmaWxlLnN0YXQ7XG4gICAgY29uc3QgaXNDdXJyZW50ID0gKCk6IGJvb2xlYW4gPT5cbiAgICAgICF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLnJldmlzaW9ucy5nZXQoZmlsZSkgPT09IHRva2VuICYmIGZpbGUucGF0aCA9PT0gcGF0aFxuICAgICAgJiYgZmlsZS5zdGF0Lm10aW1lID09PSBtdGltZSAmJiBmaWxlLnN0YXQuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCkgPT09IGZpbGU7XG4gICAgY29uc3QgcmVhZCA9IHRoaXMucmVhZFRhaWwudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VGV4dChmaWxlLCBjb250ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlYWRUYWlsID0gcmVhZC5jYXRjaChub29wKTtcbiAgICBhd2FpdCByZWFkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZWNvcmQocGF0aDogc3RyaW5nLCBlbnRyeTogSW5kZXhlZEZpbGVSZWNvcmQ8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZHMuc2V0KHBhdGgsIGVudHJ5KTtcbiAgICB0aGlzLm9wdGlvbnMub25TZXQocGF0aCwgZW50cnkucmVjb3JkKTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0KGZpbGU6IFRGaWxlLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwge30pO1xuICAgIGlmICghdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5vcHRpb25zLmFjY2VwdHMoZmlsZSkpIHtcbiAgICAgIHRoaXMuc2V0UmVjb3JkKGZpbGUucGF0aCwgeyBtdGltZTogZmlsZS5zdGF0Lm10aW1lLCByZWNvcmQ6IHRoaXMub3B0aW9ucy5pbmRleEZpbGUoeyBjb250ZW50LCBmaWxlIH0pLCBzaXplOiBmaWxlLnN0YXQuc2l6ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLG1CQUFrQztBQUNsQyxzQkFHTztBQUNQLHNCQUtPO0FBRVAsMEJBQTRCO0FBRTVCLE1BQU0sZ0NBQWdDO0FBZ0YvQixNQUFNLHNDQUF5QyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1oRSxJQUFXLFVBQW1CO0FBQzVCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUttQjtBQUFBLEVBRVgsZUFBZTtBQUFBLEVBQ2YsZUFBMEIsMkJBQVU7QUFBQSxFQUMzQixVQUFVLG9CQUFJLElBQWtDO0FBQUEsRUFDaEQ7QUFBQSxFQUNULFdBQVc7QUFBQSxFQUNGLFlBQVksb0JBQUksUUFBdUI7QUFBQSxFQUNoRCxnQkFBZ0I7QUFBQSxFQUNoQixjQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
|