@mnaoumov/obsidian-lib 10.12.0 → 11.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/worker-component/package.json +6 -0
- package/components/worker-pool-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +409 -292
- package/dist/lib/cjs/__merged.d.cts +17 -8
- package/dist/lib/cjs/anchored-suggest.cjs +1 -1
- package/dist/lib/cjs/app.cjs +2 -2
- package/dist/lib/cjs/async-with-notice.cjs +4 -4
- package/dist/lib/cjs/attachment-path.cjs +9 -9
- package/dist/lib/cjs/attachment-path.d.cts +3 -3
- package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
- package/dist/lib/cjs/backlink-index.cjs +5 -5
- package/dist/lib/cjs/backlink.cjs +7 -7
- package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
- package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
- package/dist/lib/cjs/bug-report.cjs +3 -3
- package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
- package/dist/lib/cjs/bulk-operation.cjs +2 -2
- package/dist/lib/cjs/callout.cjs +6 -6
- package/dist/lib/cjs/canvas.cjs +11 -9
- package/dist/lib/cjs/canvas.d.cts +13 -0
- package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
- package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
- package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
- package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
- package/dist/lib/cjs/codemirror/index.cjs +7 -7
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
- package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
- package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
- package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
- package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/index.cjs +15 -15
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +6 -6
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
- package/dist/lib/cjs/community-plugins.cjs +3 -3
- package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +3 -3
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +1 -1
- package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
- package/dist/lib/cjs/components/component-ex.cjs +21 -11
- package/dist/lib/cjs/components/component-ex.d.cts +11 -0
- package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
- package/dist/lib/cjs/components/disposable-component.cjs +2 -2
- package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -1
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +8 -8
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
- package/dist/lib/cjs/components/index.cjs +46 -40
- package/dist/lib/cjs/components/index.d.cts +2 -0
- package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
- package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
- 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 +68 -28
- package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
- package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +113 -17
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
- package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
- package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
- package/dist/lib/cjs/components/registry-component.cjs +2 -2
- package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
- package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/shared-component-pool-component.cjs +6 -6
- package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
- package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
- package/dist/lib/cjs/components/worker-component.cjs +363 -0
- package/dist/lib/cjs/components/worker-component.d.cts +156 -0
- package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
- package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.cjs +7 -7
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +1 -1
- package/dist/lib/cjs/data-handler.cjs +111 -4
- package/dist/lib/cjs/data-handler.d.cts +92 -1
- package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
- package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
- package/dist/lib/cjs/data-stores/index.cjs +6 -6
- package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
- package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
- package/dist/lib/cjs/dataview-link.cjs +2 -2
- package/dist/lib/cjs/dataview.cjs +27 -7
- package/dist/lib/cjs/dataview.d.cts +14 -0
- package/dist/lib/cjs/debug.cjs +3 -3
- package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
- package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
- package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
- package/dist/lib/cjs/desktop-git-runner.cjs +2 -2
- package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
- package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
- package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
- package/dist/lib/cjs/disposable.cjs +150 -0
- package/dist/lib/cjs/disposable.d.cts +39 -0
- package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
- package/dist/lib/cjs/editor-suggest.cjs +1 -1
- package/dist/lib/cjs/editor.cjs +6 -6
- package/dist/lib/cjs/events.cjs +2 -2
- package/dist/lib/cjs/extensions-registrar.cjs +1 -1
- package/dist/lib/cjs/feature-request.cjs +1 -1
- package/dist/lib/cjs/file-change.cjs +10 -10
- package/dist/lib/cjs/file-explorer.cjs +2 -2
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +10 -10
- package/dist/lib/cjs/folder-note.cjs +4 -4
- package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
- package/dist/lib/cjs/frontmatter.cjs +5 -5
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/hotkey.cjs +1 -1
- package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
- package/dist/lib/cjs/html-element.cjs +2 -2
- package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
- package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
- package/dist/lib/cjs/i18n/i18n.cjs +7 -7
- package/dist/lib/cjs/i18n/index.cjs +4 -4
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
- package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
- package/dist/lib/cjs/index.cjs +145 -127
- package/dist/lib/cjs/index.d.cts +6 -0
- package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
- package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/library-styles.cjs +3 -3
- package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
- package/dist/lib/cjs/link.cjs +76 -56
- package/dist/lib/cjs/link.d.cts +20 -14
- package/dist/lib/cjs/logger.cjs +4 -4
- package/dist/lib/cjs/loop.cjs +10 -16
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
- package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
- package/dist/lib/cjs/markdown-view.cjs +3 -3
- package/dist/lib/cjs/markdown.cjs +12 -12
- package/dist/lib/cjs/metadata-cache.cjs +23 -23
- package/dist/lib/cjs/metadata-cache.d.cts +5 -4
- package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
- package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
- package/dist/lib/cjs/mobile-app-info.cjs +1 -1
- package/dist/lib/cjs/modals/alert.cjs +4 -4
- package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
- package/dist/lib/cjs/modals/confirm.cjs +4 -4
- package/dist/lib/cjs/modals/copy-text-manually.cjs +4 -4
- package/dist/lib/cjs/modals/index.cjs +12 -12
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
- package/dist/lib/cjs/modals/modal.cjs +3 -3
- package/dist/lib/cjs/modals/prompt.cjs +10 -10
- package/dist/lib/cjs/modals/prompt.d.cts +1 -1
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +5 -5
- package/dist/lib/cjs/modals/select-item.cjs +6 -6
- package/dist/lib/cjs/modals/select-option.cjs +3 -3
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/note-priority.cjs +2 -2
- package/dist/lib/cjs/notebook-navigator.cjs +12 -2
- package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
- package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +1 -1
- package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
- package/dist/lib/cjs/parse-link.cjs +14 -14
- package/dist/lib/cjs/path-compatibility.cjs +368 -0
- package/dist/lib/cjs/path-compatibility.d.cts +263 -0
- package/dist/lib/cjs/path-settings.cjs +3 -3
- package/dist/lib/cjs/pdf.cjs +2 -2
- package/dist/lib/cjs/plugin/index.cjs +16 -13
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +8 -8
- package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
- package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
- package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +4 -4
- package/dist/lib/cjs/plugin/plugin-instance.cjs +14 -12
- package/dist/lib/cjs/plugin/plugin-instance.d.cts +7 -0
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
- package/dist/lib/cjs/plugin/plugin.cjs +118 -34
- package/dist/lib/cjs/plugin/plugin.d.cts +28 -5
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
- package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
- package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
- package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
- package/dist/lib/cjs/popovers/index.cjs +3 -3
- package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +8 -8
- package/dist/lib/cjs/react/app-context.cjs +3 -3
- package/dist/lib/cjs/react/index.cjs +1 -1
- package/dist/lib/cjs/reference-definition.cjs +1 -1
- package/dist/lib/cjs/reference.cjs +3 -3
- package/dist/lib/cjs/release-asset.cjs +5 -5
- package/dist/lib/cjs/rendered-markdown.cjs +4 -4
- package/dist/lib/cjs/request-url.cjs +4 -4
- package/dist/lib/cjs/resource-lock.cjs +46 -42
- package/dist/lib/cjs/resource-lock.d.cts +8 -7
- package/dist/lib/cjs/resource-url.cjs +3 -3
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
- package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +30 -30
- package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
- package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
- package/dist/lib/cjs/setting-ex.cjs +26 -26
- package/dist/lib/cjs/setting-group-ex.cjs +2 -2
- package/dist/lib/cjs/settings-recovery.cjs +217 -0
- package/dist/lib/cjs/settings-recovery.d.cts +178 -0
- package/dist/lib/cjs/settings-tabs.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
- package/dist/lib/cjs/templater.cjs +14 -4
- package/dist/lib/cjs/templater.d.cts +6 -0
- package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
- package/dist/lib/cjs/transformers/index.cjs +1 -1
- package/dist/lib/cjs/trusted-input.cjs +1 -1
- package/dist/lib/cjs/validation.cjs +4 -4
- package/dist/lib/cjs/vault-delete.cjs +6 -6
- package/dist/lib/cjs/vault-transaction.cjs +5 -5
- package/dist/lib/cjs/vault.cjs +12 -12
- package/dist/lib/cjs/view-registrar.cjs +1 -1
- package/dist/lib/cjs/virtual-file.cjs +16 -14
- package/dist/lib/cjs/virtual-file.d.cts +2 -1
- package/dist/lib/cjs/wasm.cjs +119 -0
- package/dist/lib/cjs/wasm.d.cts +54 -0
- package/dist/lib/cjs/worker-protocol.cjs +209 -0
- package/dist/lib/cjs/worker-protocol.d.cts +282 -0
- package/dist/lib/cjs/workspace.cjs +1 -1
- package/dist/lib/esm/__merged.d.mts +17 -8
- package/dist/lib/esm/__merged.mjs +133 -3
- package/dist/lib/esm/app.mjs +2 -2
- package/dist/lib/esm/attachment-path.d.mts +3 -3
- package/dist/lib/esm/attachment-path.mjs +2 -2
- package/dist/lib/esm/backlink-index.mjs +2 -2
- package/dist/lib/esm/canvas.d.mts +13 -0
- package/dist/lib/esm/canvas.mjs +6 -5
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
- package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
- package/dist/lib/esm/components/component-ex.d.mts +11 -0
- package/dist/lib/esm/components/component-ex.mjs +19 -6
- package/dist/lib/esm/components/disposable-component.mjs +1 -1
- package/dist/lib/esm/components/index.d.mts +2 -0
- package/dist/lib/esm/components/index.mjs +5 -1
- package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
- package/dist/lib/esm/components/plugin-gate-component.mjs +57 -14
- package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
- package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +99 -3
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
- package/dist/lib/esm/components/worker-component.d.mts +156 -0
- package/dist/lib/esm/components/worker-component.mjs +279 -0
- package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
- package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
- package/dist/lib/esm/components/workspace-layout-state-component.mjs +1 -1
- package/dist/lib/esm/data-handler.d.mts +92 -1
- package/dist/lib/esm/data-handler.mjs +112 -3
- package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
- package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
- package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
- package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
- package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
- package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
- package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
- package/dist/lib/esm/dataview.d.mts +14 -0
- package/dist/lib/esm/dataview.mjs +19 -1
- package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
- package/dist/lib/esm/demo-vault-helper.mjs +29 -1
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
- package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
- package/dist/lib/esm/disposable.d.mts +39 -0
- package/dist/lib/esm/disposable.mjs +64 -0
- package/dist/lib/esm/file-system.mjs +2 -2
- package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
- package/dist/lib/esm/i18n/locales/en.mjs +5 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
- package/dist/lib/esm/index.d.mts +6 -0
- package/dist/lib/esm/index.mjs +13 -1
- package/dist/lib/esm/link.d.mts +20 -14
- package/dist/lib/esm/link.mjs +57 -38
- package/dist/lib/esm/loop.mjs +2 -8
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
- package/dist/lib/esm/metadata-cache.d.mts +5 -4
- package/dist/lib/esm/metadata-cache.mjs +6 -6
- package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
- package/dist/lib/esm/misplaced-attachment.mjs +212 -0
- package/dist/lib/esm/modals/prompt.d.mts +1 -1
- package/dist/lib/esm/modals/prompt.mjs +1 -1
- package/dist/lib/esm/notebook-navigator.d.mts +6 -0
- package/dist/lib/esm/notebook-navigator.mjs +11 -2
- package/dist/lib/esm/parse-link.mjs +4 -4
- package/dist/lib/esm/path-compatibility.d.mts +263 -0
- package/dist/lib/esm/path-compatibility.mjs +277 -0
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +4 -2
- package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
- package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-instance.d.mts +7 -0
- package/dist/lib/esm/plugin/plugin-instance.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.d.mts +28 -5
- package/dist/lib/esm/plugin/plugin.mjs +103 -9
- package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
- package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
- package/dist/lib/esm/release-asset.mjs +1 -1
- package/dist/lib/esm/resource-lock.d.mts +8 -7
- package/dist/lib/esm/resource-lock.mjs +31 -26
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
- package/dist/lib/esm/settings-recovery.d.mts +178 -0
- package/dist/lib/esm/settings-recovery.mjs +125 -0
- package/dist/lib/esm/settings-tabs.mjs +2 -2
- package/dist/lib/esm/templater.d.mts +6 -0
- package/dist/lib/esm/templater.mjs +11 -2
- package/dist/lib/esm/vault.mjs +1 -1
- package/dist/lib/esm/virtual-file.d.mts +2 -1
- package/dist/lib/esm/virtual-file.mjs +7 -5
- package/dist/lib/esm/wasm.d.mts +54 -0
- package/dist/lib/esm/wasm.mjs +30 -0
- package/dist/lib/esm/worker-protocol.d.mts +282 -0
- package/dist/lib/esm/worker-protocol.mjs +113 -0
- package/package.json +9 -8
- package/plugin/third-party-plugin/package.json +6 -0
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
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
|
+
})();
|
|
5
32
|
(function patchObsidianRequire() {
|
|
6
33
|
const originalRequire = require;
|
|
7
34
|
if (!originalRequire || originalRequire.__isPatched) {
|
|
@@ -92,6 +119,7 @@ __export(data_store_replica_exports, {
|
|
|
92
119
|
isDataStoreOperation: () => isDataStoreOperation
|
|
93
120
|
});
|
|
94
121
|
module.exports = __toCommonJS(data_store_replica_exports);
|
|
122
|
+
var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
|
|
95
123
|
class DataStoreReplica {
|
|
96
124
|
/**
|
|
97
125
|
* Creates an empty replica.
|
|
@@ -120,7 +148,7 @@ class DataStoreReplica {
|
|
|
120
148
|
return;
|
|
121
149
|
}
|
|
122
150
|
const previous = this.registers.get(operation.key);
|
|
123
|
-
if (this.kind !== "last-write-wins" && (operation.deleted || rankOf(operation.value) ===
|
|
151
|
+
if (this.kind !== "last-write-wins" && (operation.deleted || rankOf(operation.value) === null)) {
|
|
124
152
|
throw new Error("Min/max stores accept finite numbers or ranked JSON values and do not support deletion");
|
|
125
153
|
}
|
|
126
154
|
if (!previous || this.wins(operation, previous)) {
|
|
@@ -196,9 +224,9 @@ class DataStoreReplica {
|
|
|
196
224
|
const nextRank = rankOf(next.value);
|
|
197
225
|
const previousRank = rankOf(previous.value);
|
|
198
226
|
if (this.kind === "minimum" && nextRank !== previousRank) {
|
|
199
|
-
return
|
|
227
|
+
return (0, import_type_guards.ensureNonNullable)(nextRank) < (0, import_type_guards.ensureNonNullable)(previousRank);
|
|
200
228
|
}
|
|
201
|
-
return this.kind === "maximum" && nextRank !== previousRank ?
|
|
229
|
+
return this.kind === "maximum" && nextRank !== previousRank ? (0, import_type_guards.ensureNonNullable)(nextRank) > (0, import_type_guards.ensureNonNullable)(previousRank) : next.time > previous.time || next.time === previous.time && (next.counter > previous.counter || next.counter === previous.counter && next.device > previous.device);
|
|
202
230
|
}
|
|
203
231
|
}
|
|
204
232
|
function isDataStoreJsonValue(value) {
|
|
@@ -236,7 +264,7 @@ function rankOf(value) {
|
|
|
236
264
|
if (typeof value === "number" && Number.isFinite(value)) {
|
|
237
265
|
return value;
|
|
238
266
|
}
|
|
239
|
-
return typeof value === "object" && value !== null && "rank" in value && "value" in value && typeof value.rank === "number" && Number.isFinite(value.rank) ? value.rank :
|
|
267
|
+
return typeof value === "object" && value !== null && "rank" in value && "value" in value && typeof value.rank === "number" && Number.isFinite(value.rank) ? value.rank : null;
|
|
240
268
|
}
|
|
241
269
|
function tag(operation) {
|
|
242
270
|
return `${operation.device}:${String(operation.sequence)}`;
|
|
@@ -260,4 +288,4 @@ function tagVector(tags) {
|
|
|
260
288
|
isDataStoreJsonValue,
|
|
261
289
|
isDataStoreOperation
|
|
262
290
|
});
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXJlcGxpY2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZXNlIGFyZSBPYnNpZGlhbiByZW5kZXJlciBXZWIgQVBJcywgbm90IE5vZGUgYnVpbHRpbnMuICovXG4vKipcbiAqIEBmaWxlXG4gKlxuICogTWVyZ2Utc2FmZSByZWdpc3RlcnMgYW5kIG9ic2VydmVkLXJlbW92ZSBzZXRzIHVzZWQgYnkgc2hhcmVkIGRhdGEgc3RvcmVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSnNvblZhbHVlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuLyoqXG4gKiBBIHN0b3JlIGZpeGVzIGl0cyBtZXJnZSBydWxlIGZvciBpdHMgZW50aXJlIGxpZmV0aW1lIGFuZCBzY2hlbWEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVN0b3JlTWVyZ2VLaW5kID0gJ2xhc3Qtd3JpdGUtd2lucycgfCAnbWF4aW11bScgfCAnbWluaW11bScgfCAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uLW9uZSBqb3VybmFsIG9wZXJhdGlvbi4gVGhlc2UgZmllbGRzIGZvcm0gYSBwdWJsaXNoZWQgd2lyZSBmb3JtYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgY291bnRlciB3aXRoaW4gdGhlIHdhbGwtY2xvY2sgbWlsbGlzZWNvbmQuXG4gICAqL1xuICByZWFkb25seSBjb3VudGVyOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZW1vdmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVuaXF1ZSB3cml0ZXIgaW5jYXJuYXRpb24sIHN0b3JlZCBsb2NhbGx5IHJhdGhlciB0aGFuIGluIHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZTogc3RyaW5nO1xuICAvKipcbiAgICogUmVjb3JkIGtleSwgb3Igc2V0IG1lbWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKipcbiAgICogU3RyaWN0bHkgaW5jcmVhc2luZyB3cml0ZXIgc2VxdWVuY2UsIHN0YXJ0aW5nIGF0IG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcXVlbmNlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBPYnNlcnZlZCBhZGRpdGlvbiB0YWdzIHJlbW92ZWQgYnkgYSBzZXQgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogSHlicmlkIGxvZ2ljYWwgY2xvY2sgd2FsbCB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogSlNPTi1jb21wYXRpYmxlIHZhbHVlOyBzZXQgbWVtYmVycyB1c2UgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogSW4tbWVtb3J5IENSRFQgc3RhdGUuIEV4cG9ydGVkIG9wZXJhdGlvbnMgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIsIHJlcGVhdGVkbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RvcmVSZXBsaWNhIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZGRpdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdGVycyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3ZhbHMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHJlcGxpY2EuXG4gICAqXG4gICAqIEBwYXJhbSBraW5kIC0gSW1tdXRhYmxlIG1lcmdlIHJ1bGUgZm9yIHRoZSBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkga2luZDogRGF0YVN0b3JlTWVyZ2VLaW5kKSB7fVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIGpvaW5zIG9uZSBqb3VybmFsIG9yIHNuYXBzaG90IG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVW50cnVzdGVkIHBhcnNlZCBvcGVyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXBwbHkodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoIWlzRGF0YVN0b3JlT3BlcmF0aW9uKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgb3BlcmF0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHdpbmRvdy5zdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgdGhpcy5hcHBseVNldChvcGVyYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucmVnaXN0ZXJzLmdldChvcGVyYXRpb24ua2V5KTtcbiAgICBpZiAodGhpcy5raW5kICE9PSAnbGFzdC13cml0ZS13aW5zJyAmJiAob3BlcmF0aW9uLmRlbGV0ZWQgfHwgcmFua09mKG9wZXJhdGlvbi52YWx1ZSkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWluL21heCBzdG9yZXMgYWNjZXB0IGZpbml0ZSBudW1iZXJzIG9yIHJhbmtlZCBKU09OIHZhbHVlcyBhbmQgZG8gbm90IHN1cHBvcnQgZGVsZXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFwcmV2aW91cyB8fCB0aGlzLndpbnMob3BlcmF0aW9uLCBwcmV2aW91cykpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJzLnNldChvcGVyYXRpb24ua2V5LCBvcGVyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB2aXNpYmxlIHJlY29yZHMsIGRldGFjaGVkIGZyb20gaW50ZXJuYWwgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFBhaXJzIGluIGRldGVybWluaXN0aWMga2V5IG9yZGVyLlxuICAgKi9cbiAgcHVibGljIGVudHJpZXMoKTogW3N0cmluZywgdW5rbm93bl1bXSB7XG4gICAgaWYgKHRoaXMua2luZCA9PT0gJ29ic2VydmVkLXJlbW92ZS1zZXQnKSB7XG4gICAgICBjb25zdCBrZXlzID0gbmV3IFNldCh0aGlzLmFjdGl2ZUFkZGl0aW9ucygpLm1hcCgob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5KSk7XG4gICAgICByZXR1cm4gWy4uLmtleXNdLnNvcnQoKS5tYXAoKGtleSkgPT4gW2tleSwgdHJ1ZV0pO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLnRoaXMucmVnaXN0ZXJzLnZhbHVlcygpXS5maWx0ZXIoKG9wZXJhdGlvbikgPT4gIW9wZXJhdGlvbi5kZWxldGVkKVxuICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0LmtleS5sb2NhbGVDb21wYXJlKHNlY29uZC5rZXkpKVxuICAgICAgLm1hcCgob3BlcmF0aW9uKSA9PiBbb3BlcmF0aW9uLmtleSwgd2luZG93LnN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24udmFsdWUpXSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyBtZXJnZWFibGUgc3RhdGUsIHJldGFpbmluZyB0b21ic3RvbmVzIGZvciBsYXRlIG9yIHJldGlyZWQgcmVwbGljYXMuXG4gICAqXG4gICAqIEByZXR1cm5zIERldGVybWluaXN0aWNhbGx5IG9yZGVyZWQgb3BlcmF0aW9ucyBzdWZmaWNpZW50IHRvIHJlY29uc3RydWN0IHRoaXMgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0KCk6IERhdGFTdG9yZU9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVnaXN0ZXJzLnZhbHVlcygpLCAuLi50aGlzLmFjdGl2ZUFkZGl0aW9ucygpLCAuLi50aGlzLnJlbW92YWxzLnZhbHVlcygpXVxuICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IHRhZyhmaXJzdCkubG9jYWxlQ29tcGFyZSh0YWcoc2Vjb25kKSkpLm1hcCgob3BlcmF0aW9uKSA9PiB3aW5kb3cuc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcmVnaXN0ZXIgb3Igc2V0IG1lbWJlcnNoaXAgd2l0aG91dCBlbnVtZXJhdGluZyByZWdpc3RlciBrZXlzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBIGRldGFjaGVkIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCBvciBkZWxldGVkLlxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQWRkaXRpb25zKCkuc29tZSgob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5ID09PSBrZXkpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5yZWdpc3RlcnMuZ2V0KGtleSk7XG4gICAgcmV0dXJuIG9wZXJhdGlvbiAmJiAhb3BlcmF0aW9uLmRlbGV0ZWQgPyB3aW5kb3cuc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbi52YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYWRkaXRpb25zIG9ic2VydmVkIGZvciBhIHNldCBtZW1iZXIsIGZvciBhbiBvYnNlcnZlZCByZW1vdmFsLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gU2V0IG1lbWJlci5cbiAgICogQHJldHVybnMgQWRkaXRpb24gaWRlbnRpdGllcy4gQ29uY3VycmVudCB1bnNlZW4gYWRkaXRpb25zIHN1cnZpdmUgcmVtb3ZhbC5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlZFRhZ3Moa2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFkZGl0aW9ucy52YWx1ZXMoKV0uZmlsdGVyKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbi5rZXkgPT09IGtleSkubWFwKChvcGVyYXRpb24pID0+IHRhZyhvcGVyYXRpb24pKS5zb3J0KCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUFkZGl0aW9ucygpOiBEYXRhU3RvcmVPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFkZGl0aW9ucy52YWx1ZXMoKV0uZmlsdGVyKChvcGVyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0YWdWZWN0b3IodGhpcy5yZW1vdmFscy5nZXQob3BlcmF0aW9uLmtleSk/LnRhZ3MgPz8gW10pO1xuICAgICAgcmV0dXJuIG9wZXJhdGlvbi5zZXF1ZW5jZSA+IChyZW1vdmVkLmdldChvcGVyYXRpb24uZGV2aWNlKSA/PyAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZXQob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAob3BlcmF0aW9uLmRlbGV0ZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5yZW1vdmFscy5nZXQob3BlcmF0aW9uLmtleSk7XG4gICAgICBjb25zdCB2ZWN0b3IgPSB0YWdWZWN0b3IoWy4uLihwcmV2aW91cz8udGFncyA/PyBbXSksIC4uLihvcGVyYXRpb24udGFncyA/PyBbXSldKTtcbiAgICAgIGNvbnN0IHdpbm5lciA9IHByZXZpb3VzICYmIHRoaXMud2lucyhwcmV2aW91cywgb3BlcmF0aW9uKSA/IHByZXZpb3VzIDogb3BlcmF0aW9uO1xuICAgICAgdGhpcy5yZW1vdmFscy5zZXQob3BlcmF0aW9uLmtleSwgeyAuLi53aW5uZXIsIHRhZ3M6IFsuLi52ZWN0b3JdLnNvcnQoKFtmaXJzdF0sIFtzZWNvbmRdKSA9PiBmaXJzdC5sb2NhbGVDb21wYXJlKHNlY29uZCkpLm1hcCgoW2RldmljZSwgc2VxdWVuY2VdKSA9PiBgJHtkZXZpY2V9OiR7U3RyaW5nKHNlcXVlbmNlKX1gKSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wZXJhdGlvbi52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBhZGRpdGlvbnMgdXNlIHRydWUgYXMgdGhlaXIgdmFsdWUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGAke29wZXJhdGlvbi5rZXl9OiR7b3BlcmF0aW9uLmRldmljZX1gO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmFkZGl0aW9ucy5nZXQoa2V5KTtcbiAgICAgIGlmICghcHJldmlvdXMgfHwgb3BlcmF0aW9uLnNlcXVlbmNlID4gcHJldmlvdXMuc2VxdWVuY2UpIHtcbiAgICAgICAgdGhpcy5hZGRpdGlvbnMuc2V0KGtleSwgb3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdpbnMobmV4dDogRGF0YVN0b3JlT3BlcmF0aW9uLCBwcmV2aW91czogRGF0YVN0b3JlT3BlcmF0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFJhbmsgPSByYW5rT2YobmV4dC52YWx1ZSk7XG4gICAgY29uc3QgcHJldmlvdXNSYW5rID0gcmFua09mKHByZXZpb3VzLnZhbHVlKTtcbiAgICBpZiAodGhpcy5raW5kID09PSAnbWluaW11bScgJiYgbmV4dFJhbmsgIT09IHByZXZpb3VzUmFuaykge1xuICAgICAgcmV0dXJuIE51bWJlcihuZXh0UmFuaykgPCBOdW1iZXIocHJldmlvdXNSYW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2luZCA9PT0gJ21heGltdW0nICYmIG5leHRSYW5rICE9PSBwcmV2aW91c1JhbmsgPyBOdW1iZXIobmV4dFJhbmspID4gTnVtYmVyKHByZXZpb3VzUmFuaykgOiBuZXh0LnRpbWUgPiBwcmV2aW91cy50aW1lIHx8IChuZXh0LnRpbWUgPT09IHByZXZpb3VzLnRpbWUgJiYgKG5leHQuY291bnRlciA+IHByZXZpb3VzLmNvdW50ZXJcbiAgICAgIHx8IChuZXh0LmNvdW50ZXIgPT09IHByZXZpb3VzLmNvdW50ZXIgJiYgbmV4dC5kZXZpY2UgPiBwcmV2aW91cy5kZXZpY2UpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCBhIHZhbHVlIHN1cnZpdmVzIEpTT04gdHJhbnNwb3J0IHdpdGhvdXQgY2hhbmdpbmcgaXRzIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gQ2FuZGlkYXRlIGRhdGEtc3RvcmUgdmFsdWUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIGZpbml0ZSwgYWN5Y2xpYyBKU09OIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEpzb25WYWx1ZSB7XG4gIHJldHVybiBpc0pzb25WYWx1ZSh2YWx1ZSwgbmV3IFNldCgpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIHZlcnNpb24tb25lIG9wZXJhdGlvbiB3aXJlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcnNlZCBKU09OLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgb3BlcmF0aW9uIGhhcyB2YWxpZCBpZGVudGl0eSBhbmQgY2xvY2sgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhU3RvcmVPcGVyYXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEYXRhU3RvcmVPcGVyYXRpb24ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAna2V5JyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUua2V5ID09PSAnc3RyaW5nJ1xuICAgICYmICdkZXZpY2UnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZXZpY2UgPT09ICdzdHJpbmcnICYmIC9eW1xcdy1dKyQvLnRlc3QodmFsdWUuZGV2aWNlKVxuICAgICYmICdzZXF1ZW5jZScgaW4gdmFsdWUgJiYgaXNQb3NpdGl2ZUludGVnZXIodmFsdWUuc2VxdWVuY2UpXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLnRpbWUpXG4gICAgJiYgJ2NvdW50ZXInIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLmNvdW50ZXIpXG4gICAgJiYgJ2RlbGV0ZWQnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZWxldGVkID09PSAnYm9vbGVhbicgJiYgJ3ZhbHVlJyBpbiB2YWx1ZSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZS52YWx1ZSlcbiAgICAmJiAoISgndGFncycgaW4gdmFsdWUpIHx8IChBcnJheS5pc0FycmF5KHZhbHVlLnRhZ3MpICYmIHZhbHVlLnRhZ3MuZXZlcnkoKGl0ZW06IHVua25vd24pID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykpKTtcbn1cblxuZnVuY3Rpb24gaXNKc29uVmFsdWUodmFsdWU6IHVua25vd24sIGFuY2VzdG9yczogU2V0PG9iamVjdD4pOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGFuY2VzdG9ycy5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYW5jZXN0b3JzLmFkZCh2YWx1ZSk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZXMuZXZlcnkoKGNoaWxkKSA9PiBpc0pzb25WYWx1ZShjaGlsZCwgYW5jZXN0b3JzKSk7XG4gIGFuY2VzdG9ycy5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gaXNWYWxpZDtcbn1cblxuZnVuY3Rpb24gaXNOb25OZWdhdGl2ZUludGVnZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSAmJiBOdW1iZXIodmFsdWUpID49IDA7XG59XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgTnVtYmVyKHZhbHVlKSA+IDA7XG59XG5cbmZ1bmN0aW9uIHJhbmtPZih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ3JhbmsnIGluIHZhbHVlICYmICd2YWx1ZScgaW4gdmFsdWVcbiAgICAgICYmIHR5cGVvZiB2YWx1ZS5yYW5rID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUucmFuaylcbiAgICA/IHZhbHVlLnJhbmtcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdGFnKG9wZXJhdGlvbjogRGF0YVN0b3JlT3BlcmF0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke29wZXJhdGlvbi5kZXZpY2V9OiR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9YDtcbn1cblxuZnVuY3Rpb24gdGFnVmVjdG9yKHRhZ3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIGNvbnN0IHZlY3RvciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdGFncykge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHZhbHVlLmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgY29uc3QgZGV2aWNlID0gdmFsdWUuc2xpY2UoMCwgc2VwYXJhdG9yKTtcbiAgICBjb25zdCBzZXF1ZW5jZSA9IE51bWJlcih2YWx1ZS5zbGljZShzZXBhcmF0b3IgKyAxKSk7XG4gICAgaWYgKCFkZXZpY2UgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHNlcXVlbmNlKSB8fCBzZXF1ZW5jZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb2JzZXJ2ZWQtcmVtb3ZlIHRhZycpO1xuICAgIH1cbiAgICB2ZWN0b3Iuc2V0KGRldmljZSwgTWF0aC5tYXgoc2VxdWVuY2UsIHZlY3Rvci5nZXQoZGV2aWNlKSA/PyAwKSk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7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
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXJlcGxpY2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1lcmdlLXNhZmUgcmVnaXN0ZXJzIGFuZCBvYnNlcnZlZC1yZW1vdmUgc2V0cyB1c2VkIGJ5IHNoYXJlZCBkYXRhIHN0b3Jlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuLyoqXG4gKiBBIHN0b3JlIGZpeGVzIGl0cyBtZXJnZSBydWxlIGZvciBpdHMgZW50aXJlIGxpZmV0aW1lIGFuZCBzY2hlbWEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVN0b3JlTWVyZ2VLaW5kID0gJ2xhc3Qtd3JpdGUtd2lucycgfCAnbWF4aW11bScgfCAnbWluaW11bScgfCAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uLW9uZSBqb3VybmFsIG9wZXJhdGlvbi4gVGhlc2UgZmllbGRzIGZvcm0gYSBwdWJsaXNoZWQgd2lyZSBmb3JtYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgY291bnRlciB3aXRoaW4gdGhlIHdhbGwtY2xvY2sgbWlsbGlzZWNvbmQuXG4gICAqL1xuICByZWFkb25seSBjb3VudGVyOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZW1vdmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVuaXF1ZSB3cml0ZXIgaW5jYXJuYXRpb24sIHN0b3JlZCBsb2NhbGx5IHJhdGhlciB0aGFuIGluIHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZTogc3RyaW5nO1xuICAvKipcbiAgICogUmVjb3JkIGtleSwgb3Igc2V0IG1lbWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKipcbiAgICogU3RyaWN0bHkgaW5jcmVhc2luZyB3cml0ZXIgc2VxdWVuY2UsIHN0YXJ0aW5nIGF0IG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcXVlbmNlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBPYnNlcnZlZCBhZGRpdGlvbiB0YWdzIHJlbW92ZWQgYnkgYSBzZXQgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogSHlicmlkIGxvZ2ljYWwgY2xvY2sgd2FsbCB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogSlNPTi1jb21wYXRpYmxlIHZhbHVlOyBzZXQgbWVtYmVycyB1c2UgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogSW4tbWVtb3J5IENSRFQgc3RhdGUuIEV4cG9ydGVkIG9wZXJhdGlvbnMgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIsIHJlcGVhdGVkbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RvcmVSZXBsaWNhIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZGRpdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdGVycyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3ZhbHMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHJlcGxpY2EuXG4gICAqXG4gICAqIEBwYXJhbSBraW5kIC0gSW1tdXRhYmxlIG1lcmdlIHJ1bGUgZm9yIHRoZSBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkga2luZDogRGF0YVN0b3JlTWVyZ2VLaW5kKSB7fVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIGpvaW5zIG9uZSBqb3VybmFsIG9yIHNuYXBzaG90IG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVW50cnVzdGVkIHBhcnNlZCBvcGVyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXBwbHkodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoIWlzRGF0YVN0b3JlT3BlcmF0aW9uKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgb3BlcmF0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHdpbmRvdy5zdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgdGhpcy5hcHBseVNldChvcGVyYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucmVnaXN0ZXJzLmdldChvcGVyYXRpb24ua2V5KTtcbiAgICBpZiAodGhpcy5raW5kICE9PSAnbGFzdC13cml0ZS13aW5zJyAmJiAob3BlcmF0aW9uLmRlbGV0ZWQgfHwgcmFua09mKG9wZXJhdGlvbi52YWx1ZSkgPT09IG51bGwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pbi9tYXggc3RvcmVzIGFjY2VwdCBmaW5pdGUgbnVtYmVycyBvciByYW5rZWQgSlNPTiB2YWx1ZXMgYW5kIGRvIG5vdCBzdXBwb3J0IGRlbGV0aW9uJyk7XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgfHwgdGhpcy53aW5zKG9wZXJhdGlvbiwgcHJldmlvdXMpKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5zZXQob3BlcmF0aW9uLmtleSwgb3BlcmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgdmlzaWJsZSByZWNvcmRzLCBkZXRhY2hlZCBmcm9tIGludGVybmFsIHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBQYWlycyBpbiBkZXRlcm1pbmlzdGljIGtleSBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzKCk6IFtzdHJpbmcsIHVua25vd25dW10ge1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IG5ldyBTZXQodGhpcy5hY3RpdmVBZGRpdGlvbnMoKS5tYXAoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmtleSkpO1xuICAgICAgcmV0dXJuIFsuLi5rZXlzXS5zb3J0KCkubWFwKChrZXkpID0+IFtrZXksIHRydWVdKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlZ2lzdGVycy52YWx1ZXMoKV0uZmlsdGVyKChvcGVyYXRpb24pID0+ICFvcGVyYXRpb24uZGVsZXRlZClcbiAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5rZXkubG9jYWxlQ29tcGFyZShzZWNvbmQua2V5KSlcbiAgICAgIC5tYXAoKG9wZXJhdGlvbikgPT4gW29wZXJhdGlvbi5rZXksIHdpbmRvdy5zdHJ1Y3R1cmVkQ2xvbmUob3BlcmF0aW9uLnZhbHVlKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgbWVyZ2VhYmxlIHN0YXRlLCByZXRhaW5pbmcgdG9tYnN0b25lcyBmb3IgbGF0ZSBvciByZXRpcmVkIHJlcGxpY2FzLlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXRlcm1pbmlzdGljYWxseSBvcmRlcmVkIG9wZXJhdGlvbnMgc3VmZmljaWVudCB0byByZWNvbnN0cnVjdCB0aGlzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydCgpOiBEYXRhU3RvcmVPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlZ2lzdGVycy52YWx1ZXMoKSwgLi4udGhpcy5hY3RpdmVBZGRpdGlvbnMoKSwgLi4udGhpcy5yZW1vdmFscy52YWx1ZXMoKV1cbiAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiB0YWcoZmlyc3QpLmxvY2FsZUNvbXBhcmUodGFnKHNlY29uZCkpKS5tYXAoKG9wZXJhdGlvbikgPT4gd2luZG93LnN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHJlZ2lzdGVyIG9yIHNldCBtZW1iZXJzaGlwIHdpdGhvdXQgZW51bWVyYXRpbmcgcmVnaXN0ZXIga2V5cy5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkgb3Igc2V0IG1lbWJlci5cbiAgICogQHJldHVybnMgQSBkZXRhY2hlZCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQgb3IgZGVsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAodGhpcy5raW5kID09PSAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUFkZGl0aW9ucygpLnNvbWUoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmtleSA9PT0ga2V5KSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMucmVnaXN0ZXJzLmdldChrZXkpO1xuICAgIHJldHVybiBvcGVyYXRpb24gJiYgIW9wZXJhdGlvbi5kZWxldGVkID8gd2luZG93LnN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24udmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFkZGl0aW9ucyBvYnNlcnZlZCBmb3IgYSBzZXQgbWVtYmVyLCBmb3IgYW4gb2JzZXJ2ZWQgcmVtb3ZhbC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFNldCBtZW1iZXIuXG4gICAqIEByZXR1cm5zIEFkZGl0aW9uIGlkZW50aXRpZXMuIENvbmN1cnJlbnQgdW5zZWVuIGFkZGl0aW9ucyBzdXJ2aXZlIHJlbW92YWwuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZWRUYWdzKGtleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5hZGRpdGlvbnMudmFsdWVzKCldLmZpbHRlcigob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5ID09PSBrZXkpLm1hcCgob3BlcmF0aW9uKSA9PiB0YWcob3BlcmF0aW9uKSkuc29ydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmVBZGRpdGlvbnMoKTogRGF0YVN0b3JlT3BlcmF0aW9uW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5hZGRpdGlvbnMudmFsdWVzKCldLmZpbHRlcigob3BlcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZW1vdmVkID0gdGFnVmVjdG9yKHRoaXMucmVtb3ZhbHMuZ2V0KG9wZXJhdGlvbi5rZXkpPy50YWdzID8/IFtdKTtcbiAgICAgIHJldHVybiBvcGVyYXRpb24uc2VxdWVuY2UgPiAocmVtb3ZlZC5nZXQob3BlcmF0aW9uLmRldmljZSkgPz8gMCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2V0KG9wZXJhdGlvbjogRGF0YVN0b3JlT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKG9wZXJhdGlvbi5kZWxldGVkKSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucmVtb3ZhbHMuZ2V0KG9wZXJhdGlvbi5rZXkpO1xuICAgICAgY29uc3QgdmVjdG9yID0gdGFnVmVjdG9yKFsuLi4ocHJldmlvdXM/LnRhZ3MgPz8gW10pLCAuLi4ob3BlcmF0aW9uLnRhZ3MgPz8gW10pXSk7XG4gICAgICBjb25zdCB3aW5uZXIgPSBwcmV2aW91cyAmJiB0aGlzLndpbnMocHJldmlvdXMsIG9wZXJhdGlvbikgPyBwcmV2aW91cyA6IG9wZXJhdGlvbjtcbiAgICAgIHRoaXMucmVtb3ZhbHMuc2V0KG9wZXJhdGlvbi5rZXksIHsgLi4ud2lubmVyLCB0YWdzOiBbLi4udmVjdG9yXS5zb3J0KChbZmlyc3RdLCBbc2Vjb25kXSkgPT4gZmlyc3QubG9jYWxlQ29tcGFyZShzZWNvbmQpKS5tYXAoKFtkZXZpY2UsIHNlcXVlbmNlXSkgPT4gYCR7ZGV2aWNlfToke1N0cmluZyhzZXF1ZW5jZSl9YCkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcGVyYXRpb24udmFsdWUgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXQgYWRkaXRpb25zIHVzZSB0cnVlIGFzIHRoZWlyIHZhbHVlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBgJHtvcGVyYXRpb24ua2V5fToke29wZXJhdGlvbi5kZXZpY2V9YDtcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5hZGRpdGlvbnMuZ2V0KGtleSk7XG4gICAgICBpZiAoIXByZXZpb3VzIHx8IG9wZXJhdGlvbi5zZXF1ZW5jZSA+IHByZXZpb3VzLnNlcXVlbmNlKSB7XG4gICAgICAgIHRoaXMuYWRkaXRpb25zLnNldChrZXksIG9wZXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3aW5zKG5leHQ6IERhdGFTdG9yZU9wZXJhdGlvbiwgcHJldmlvdXM6IERhdGFTdG9yZU9wZXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5leHRSYW5rID0gcmFua09mKG5leHQudmFsdWUpO1xuICAgIGNvbnN0IHByZXZpb3VzUmFuayA9IHJhbmtPZihwcmV2aW91cy52YWx1ZSk7XG4gICAgLy8gYGFwcGx5YCBhZG1pdHMgb25seSByYW5rZWQgdmFsdWVzIGludG8gYSBtaW5pbXVtIG9yIG1heGltdW0gc3RvcmUsIHNvIGJvdGggcmFua3MgZXhpc3QgdGhlcmUuXG4gICAgaWYgKHRoaXMua2luZCA9PT0gJ21pbmltdW0nICYmIG5leHRSYW5rICE9PSBwcmV2aW91c1JhbmspIHtcbiAgICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShuZXh0UmFuaykgPCBlbnN1cmVOb25OdWxsYWJsZShwcmV2aW91c1JhbmspO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5raW5kID09PSAnbWF4aW11bScgJiYgbmV4dFJhbmsgIT09IHByZXZpb3VzUmFuayA/IGVuc3VyZU5vbk51bGxhYmxlKG5leHRSYW5rKSA+IGVuc3VyZU5vbk51bGxhYmxlKHByZXZpb3VzUmFuaykgOiBuZXh0LnRpbWUgPiBwcmV2aW91cy50aW1lIHx8IChuZXh0LnRpbWUgPT09IHByZXZpb3VzLnRpbWUgJiYgKG5leHQuY291bnRlciA+IHByZXZpb3VzLmNvdW50ZXJcbiAgICAgIHx8IChuZXh0LmNvdW50ZXIgPT09IHByZXZpb3VzLmNvdW50ZXIgJiYgbmV4dC5kZXZpY2UgPiBwcmV2aW91cy5kZXZpY2UpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCBhIHZhbHVlIHN1cnZpdmVzIEpTT04gdHJhbnNwb3J0IHdpdGhvdXQgY2hhbmdpbmcgaXRzIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gQ2FuZGlkYXRlIGRhdGEtc3RvcmUgdmFsdWUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIGZpbml0ZSwgYWN5Y2xpYyBKU09OIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEpzb25WYWx1ZSB7XG4gIHJldHVybiBpc0pzb25WYWx1ZSh2YWx1ZSwgbmV3IFNldCgpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIHZlcnNpb24tb25lIG9wZXJhdGlvbiB3aXJlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcnNlZCBKU09OLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgb3BlcmF0aW9uIGhhcyB2YWxpZCBpZGVudGl0eSBhbmQgY2xvY2sgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhU3RvcmVPcGVyYXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEYXRhU3RvcmVPcGVyYXRpb24ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAna2V5JyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUua2V5ID09PSAnc3RyaW5nJ1xuICAgICYmICdkZXZpY2UnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZXZpY2UgPT09ICdzdHJpbmcnICYmIC9eW1xcdy1dKyQvLnRlc3QodmFsdWUuZGV2aWNlKVxuICAgICYmICdzZXF1ZW5jZScgaW4gdmFsdWUgJiYgaXNQb3NpdGl2ZUludGVnZXIodmFsdWUuc2VxdWVuY2UpXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLnRpbWUpXG4gICAgJiYgJ2NvdW50ZXInIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLmNvdW50ZXIpXG4gICAgJiYgJ2RlbGV0ZWQnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZWxldGVkID09PSAnYm9vbGVhbicgJiYgJ3ZhbHVlJyBpbiB2YWx1ZSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZS52YWx1ZSlcbiAgICAmJiAoISgndGFncycgaW4gdmFsdWUpIHx8IChBcnJheS5pc0FycmF5KHZhbHVlLnRhZ3MpICYmIHZhbHVlLnRhZ3MuZXZlcnkoKGl0ZW06IHVua25vd24pID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykpKTtcbn1cblxuZnVuY3Rpb24gaXNKc29uVmFsdWUodmFsdWU6IHVua25vd24sIGFuY2VzdG9yczogU2V0PG9iamVjdD4pOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGFuY2VzdG9ycy5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYW5jZXN0b3JzLmFkZCh2YWx1ZSk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZXMuZXZlcnkoKGNoaWxkKSA9PiBpc0pzb25WYWx1ZShjaGlsZCwgYW5jZXN0b3JzKSk7XG4gIGFuY2VzdG9ycy5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gaXNWYWxpZDtcbn1cblxuZnVuY3Rpb24gaXNOb25OZWdhdGl2ZUludGVnZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSAmJiBOdW1iZXIodmFsdWUpID49IDA7XG59XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgTnVtYmVyKHZhbHVlKSA+IDA7XG59XG5cbmZ1bmN0aW9uIHJhbmtPZih2YWx1ZTogdW5rbm93bik6IG51bGwgfCBudW1iZXIge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICdyYW5rJyBpbiB2YWx1ZSAmJiAndmFsdWUnIGluIHZhbHVlXG4gICAgICAmJiB0eXBlb2YgdmFsdWUucmFuayA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlLnJhbmspXG4gICAgPyB2YWx1ZS5yYW5rXG4gICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiB0YWcob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7b3BlcmF0aW9uLmRldmljZX06JHtTdHJpbmcob3BlcmF0aW9uLnNlcXVlbmNlKX1gO1xufVxuXG5mdW5jdGlvbiB0YWdWZWN0b3IodGFnczogcmVhZG9ubHkgc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgY29uc3QgdmVjdG9yID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdmFsdWUubGFzdEluZGV4T2YoJzonKTtcbiAgICBjb25zdCBkZXZpY2UgPSB2YWx1ZS5zbGljZSgwLCBzZXBhcmF0b3IpO1xuICAgIGNvbnN0IHNlcXVlbmNlID0gTnVtYmVyKHZhbHVlLnNsaWNlKHNlcGFyYXRvciArIDEpKTtcbiAgICBpZiAoIWRldmljZSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoc2VxdWVuY2UpIHx8IHNlcXVlbmNlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvYnNlcnZlZC1yZW1vdmUgdGFnJyk7XG4gICAgfVxuICAgIHZlY3Rvci5zZXQoZGV2aWNlLCBNYXRoLm1heChzZXF1ZW5jZSwgdmVjdG9yLmdldChkZXZpY2UpID8/IDApKTtcbiAgfVxuICByZXR1cm4gdmVjdG9yO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -91,8 +91,8 @@ __export(data_store_seeds_exports, {
|
|
|
91
91
|
validateDataStoreSeed: () => validateDataStoreSeed
|
|
92
92
|
});
|
|
93
93
|
module.exports = __toCommonJS(data_store_seeds_exports);
|
|
94
|
-
var import_data_store_replica = require(
|
|
95
|
-
var import_data_store_transport = require(
|
|
94
|
+
var import_data_store_replica = require("./data-store-replica.cjs");
|
|
95
|
+
var import_data_store_transport = require("./data-store-transport.cjs");
|
|
96
96
|
class DataStoreSeeds {
|
|
97
97
|
/**
|
|
98
98
|
* Device-local identity and serialization boundary.
|
|
@@ -146,15 +146,15 @@ class DataStoreSeeds {
|
|
|
146
146
|
/**
|
|
147
147
|
* Reads the newest complete seed for this transport's schema.
|
|
148
148
|
*
|
|
149
|
-
* @returns Seed records, or `
|
|
149
|
+
* @returns Seed records, or `null` if sharing is disabled or no complete seed is available yet.
|
|
150
150
|
*/
|
|
151
151
|
async readLatest() {
|
|
152
152
|
if (!this.share) {
|
|
153
|
-
return
|
|
153
|
+
return null;
|
|
154
154
|
}
|
|
155
155
|
const files = await this.transport.list();
|
|
156
156
|
let newest = -Infinity;
|
|
157
|
-
let entries;
|
|
157
|
+
let entries = null;
|
|
158
158
|
for (const path of files) {
|
|
159
159
|
if (!/\/seed-[\w-]+-manifest\.(?:md|json)$/.test(path)) {
|
|
160
160
|
continue;
|
|
@@ -201,4 +201,4 @@ function isSeed(value) {
|
|
|
201
201
|
DataStoreSeeds,
|
|
202
202
|
validateDataStoreSeed
|
|
203
203
|
});
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXNlZWRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9wdGlvbmFsIGNodW5rZWQgc2VlZHMgZm9yIGV4cGVuc2l2ZSBkZXJpdmVkIGNhY2hlcywgd2l0aCBwZXItZmlsZSB2YWxpZGF0aW9uIGJlZm9yZSByZXVzZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQgeyBpc0RhdGFTdG9yZUpzb25WYWx1ZSB9IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB7IERhdGFTdG9yZVRyYW5zcG9ydCB9IGZyb20gJy4vZGF0YS1zdG9yZS10cmFuc3BvcnQudHMnO1xuXG4vKipcbiAqIEEgZGVyaXZlZCByZWNvcmQgdGFnZ2VkIHdpdGggYm90aCBjaGVhcCBzdGF0aXN0aWNzIGFuZCBhIGNvbnRlbnQgaGFzaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkRW50cnkgZXh0ZW5kcyBEYXRhU3RvcmVTZWVkRmlsZSB7XG4gIC8qKlxuICAgKiBDb250ZW50IGhhc2gsIHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSBvbiBldmVyeSBkZXZpY2UuXG4gICAqL1xuICByZWFkb25seSBoYXNoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb25zdW1lci1kZWZpbmVkIEpTT04gY2FjaGUgcmVjb3JkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IEpzb25WYWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVhcCBmaWxlIGlkZW50aXR5IGFscmVhZHkgYXZhaWxhYmxlIGZyb20gdGhlIHZhdWx0J3MgZmlsZSB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVNlZWRGaWxlIHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcHRpb25hbCBjYWNoZS1zZWVkIHNoYXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZHNDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgZGV2aWNlLWxvY2FsIHN0b3JlIHRoYXQgb3ducyB0aGUgc2VlZCBwdWJsaXNoZXIgaWRlbnRpdHkuXG4gICAqL1xuICByZWFkb25seSBsb2NhbDogTG9jYWxEYXRhU3RvcmU7XG4gIC8qKlxuICAgKiBQZXItc3RvcmUgdXNlciBzZXR0aW5nLiBEaXNhYmxlZCBtZWFucyBuZWl0aGVyIHB1Ymxpc2hpbmcgbm9yIGFkb3B0aW5nIHNlZWRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQsIGJvdW5kZWQgdHJhbnNwb3J0LiBJbmNsdWRlIHRoZSBjb25zdW1lciBzY2hlbWEgdmVyc2lvbiBpbiBpdHMgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ6IERhdGFTdG9yZVRyYW5zcG9ydDtcbn1cblxuLyoqXG4gKiBSZXN1bHRzIG9mIHZhbGlkYXRpbmcgYSBzaGFyZWQgY2FjaGUgc2VlZCBhZ2FpbnN0IHRoZSBsb2NhbCB2YXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkVmFsaWRhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhYnNlbnQgZnJvbSB0aGUgc2VlZCwgb3Igd2l0aCBkaWZmZXJlbnQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYnVpbGQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVmFsaWRhdGVkIHNlZWQgcmVjb3Jkcywgd2l0aCBsb2NhbCBmaWxlIHN0YXRpc3RpY3MuXG4gICAqL1xuICByZWFkb25seSByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcGVyLWZpbGUgc2VlZCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBTZWVkIGVudHJpZXMgZnJvbSBhIHJlY29nbml6ZWQgY29uc3VtZXIgc2NoZW1hLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIC8qKlxuICAgKiBDdXJyZW50IGZpbGUgdHJlZSwgYXZhaWxhYmxlIHdpdGhvdXQgcmVhZGluZyBub3RlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEZpbGVbXTtcbiAgLyoqXG4gICAqIEhhc2hlcyB0ZXh0IG9ubHkgd2hlbiBzaXplIG1hdGNoZXMgYnV0IG10aW1lIGRpZmZlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gRmlsZSByZXF1aXJpbmcgdmFsaWRhdGlvbi5cbiAgICogQHJldHVybnMgSXRzIGNvbnRlbnQgaGFzaC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc2hGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbmludGVyZmFjZSBTZWVkIHtcbiAgcmVhZG9ubHkgZW50cmllczogRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIHJlYWRvbmx5IGZvcm1hdDogMTtcbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIHBlcmZvcm1hbmNlIGhpbnRzLiBTZWVkcyBhcmUgbmV2ZXIgYXV0aG9yaXRhdGl2ZSBzdGF0ZSBhbmQgbXVzdCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHJldXNlLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlU2VlZHMge1xuICAvKipcbiAgICogRGV2aWNlLWxvY2FsIGlkZW50aXR5IGFuZCBzZXJpYWxpemF0aW9uIGJvdW5kYXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsOiBMb2NhbERhdGFTdG9yZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzdG9yZSBzaGFyZXMgY2FjaGUgc2VlZHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQgc25hcHNob3QgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zcG9ydDogRGF0YVN0b3JlVHJhbnNwb3J0O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNhY2hlLXNlZWQgcHVibGlzaGVyIGFuZCByZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBMb2NhbCBpZGVudGl0eSwgdHJhbnNwb3J0IGFuZCB0aGUgcGVyLXN0b3JlIHNoYXJpbmcgc2V0dGluZy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IERhdGFTdG9yZVNlZWRzQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmxvY2FsID0gcGFyYW1zLmxvY2FsO1xuICAgIHRoaXMuc2hhcmUgPSBwYXJhbXMuc2hhcmU7XG4gICAgdGhpcy50cmFuc3BvcnQgPSBwYXJhbXMudHJhbnNwb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGJvdW5kZWQgc2VlZCwgcmVwbGFjaW5nIG9ubHkgdGhpcyBkZXZpY2UncyBlYXJsaWVyIHB1YmxpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGVudHJpZXMgLSBEZXJpdmVkIHJlY29yZHMgd2l0aCBmaWxlIHN0YXRpc3RpY3MgYW5kIGhhc2hlcy5cbiAgICogQHJldHVybnMgV2hldGhlciBzaGFyaW5nIHdhcyBlbmFibGVkIGFuZCB0aGUgc2VlZCB3YXMgcHVibGlzaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2goZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc2hhcmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubG9jYWwuZXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NlZWQtZGV2aWNlLXYxJywgd2luZG93LmNyeXB0by5yYW5kb21VVUlEKCkpO1xuICAgICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvY2FsIHNlZWQgaWRlbnRpdHknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvb3QgPSBgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9zZWVkcy8ke2RldmljZX1gO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgICBjb25zdCBiYXNlID0gYCR7cm9vdH0vc2VlZC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogeyBlbnRyaWVzLCBmb3JtYXQ6IDEsIHRpbWU6IERhdGUubm93KCkgfSB9KTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKGAke3Jvb3R9L3NlZWQtYCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZW1vdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBuZXdlc3QgY29tcGxldGUgc2VlZCBmb3IgdGhpcyB0cmFuc3BvcnQncyBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFNlZWQgcmVjb3Jkcywgb3IgYHVuZGVmaW5lZGAgaWYgc2hhcmluZyBpcyBkaXNhYmxlZCBvciBubyBjb21wbGV0ZSBzZWVkIGlzIGF2YWlsYWJsZSB5ZXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVhZExhdGVzdCgpOiBQcm9taXNlPERhdGFTdG9yZVNlZWRFbnRyeVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmxpc3QoKTtcbiAgICBsZXQgbmV3ZXN0ID0gLUluZmluaXR5O1xuICAgIGxldCBlbnRyaWVzOiBEYXRhU3RvcmVTZWVkRW50cnlbXSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghL1xcL3NlZWQtW1xcdy1dKy1tYW5pZmVzdFxcLig/Om1kfGpzb24pJC8udGVzdChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWVkOiB1bmtub3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VlZCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoIShpc1NlZWQoc2VlZCkgJiYgc2VlZC50aW1lID4gbmV3ZXN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3ZXN0ID0gc2VlZC50aW1lO1xuICAgICAgZW50cmllcyA9IHNlZWQuZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWVkIHVzaW5nIGZyZWUgZmlsZSBzdGF0aXN0aWNzIGZpcnN0LCBoYXNoaW5nIG9ubHkgc2l6ZS1lcXVhbCBtdGltZSBtaXNtYXRjaGVzLlxuICogRmlsZXMgYWJzZW50IGxvY2FsbHkgYXJlIGRpc2NhcmRlZC4gQ29uc3VtZXJzIGluZGV4IG9ubHkgdGhlIHJldHVybmVkIHJlYnVpbGQgcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNlZWQsIGN1cnJlbnQgZmlsZSB0cmVlIGFuZCBjb250ZW50LWhhc2ggcmVhZGVyLlxuICogQHJldHVybnMgUmV1c2FibGUgcmVjb3JkcyBhbmQgdGhlIHBhdGhzIHRoYXQgc3RpbGwgbmVlZCBpbmRleGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGF0YVN0b3JlU2VlZChwYXJhbXM6IFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyk6IFByb21pc2U8RGF0YVN0b3JlU2VlZFZhbGlkYXRpb24+IHtcbiAgY29uc3Qgc2VlZCA9IG5ldyBNYXAocGFyYW1zLmVudHJpZXMubWFwKChlbnRyeSkgPT4gW2VudHJ5LnBhdGgsIGVudHJ5XSkpO1xuICBjb25zdCByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcmVidWlsZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIHBhcmFtcy5maWxlcykge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZC5nZXQoZmlsZS5wYXRoKTtcbiAgICBpZiAoZW50cnk/LnNpemUgPT09IGZpbGUuc2l6ZSAmJiAoZW50cnkubXRpbWUgPT09IGZpbGUubXRpbWUgfHwgZW50cnkuaGFzaCA9PT0gYXdhaXQgcGFyYW1zLmhhc2hGaWxlKGZpbGUucGF0aCkpKSB7XG4gICAgICByZXVzYWJsZS5wdXNoKHsgLi4uZW50cnksIC4uLmZpbGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYnVpbGQucHVzaChmaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZWJ1aWxkLCByZXVzYWJsZSB9O1xufVxuXG5mdW5jdGlvbiBpc1NlZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aW1lID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUudGltZSlcbiAgICAmJiAnZW50cmllcycgaW4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnRyaWVzKSAmJiB2YWx1ZS5lbnRyaWVzLmV2ZXJ5KChlbnRyeTogdW5rbm93bikgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3BhdGgnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJ210aW1lJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkubXRpbWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShlbnRyeS5tdGltZSlcbiAgICAgICYmICdzaXplJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuc2l6ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LnNpemUpXG4gICAgICAmJiAnaGFzaCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5Lmhhc2ggPT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gZW50cnkgJiYgaXNEYXRhU3RvcmVKc29uVmFsdWUoZW50cnkudmFsdWUpXG4gICAgKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EsZ0NBQXFDO0FBQ3JDLGtDQUFtQztBQWdHNUIsTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVosWUFBWSxRQUF5QztBQUMxRCxTQUFLLFFBQVEsT0FBTztBQUNwQixTQUFLLFFBQVEsT0FBTztBQUNwQixTQUFLLFlBQVksT0FBTztBQUFBLEVBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLFFBQVEsU0FBMEQ7QUFDN0UsUUFBSSxDQUFDLEtBQUssT0FBTztBQUNmLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxNQUFNLEtBQUssTUFBTSxVQUFVLFlBQVk7QUFDNUMsWUFBTSxTQUFTLE1BQU0sS0FBSyxNQUFNLFlBQVksa0JB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
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXNlZWRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPcHRpb25hbCBjaHVua2VkIHNlZWRzIGZvciBleHBlbnNpdmUgZGVyaXZlZCBjYWNoZXMsIHdpdGggcGVyLWZpbGUgdmFsaWRhdGlvbiBiZWZvcmUgcmV1c2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKc29uVmFsdWUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IExvY2FsRGF0YVN0b3JlIH0gZnJvbSAnLi9sb2NhbC1kYXRhLXN0b3JlLnRzJztcblxuaW1wb3J0IHsgaXNEYXRhU3RvcmVKc29uVmFsdWUgfSBmcm9tICcuL2RhdGEtc3RvcmUtcmVwbGljYS50cyc7XG5pbXBvcnQgeyBEYXRhU3RvcmVUcmFuc3BvcnQgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuLyoqXG4gKiBBIGRlcml2ZWQgcmVjb3JkIHRhZ2dlZCB3aXRoIGJvdGggY2hlYXAgc3RhdGlzdGljcyBhbmQgYSBjb250ZW50IGhhc2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZEVudHJ5IGV4dGVuZHMgRGF0YVN0b3JlU2VlZEZpbGUge1xuICAvKipcbiAgICogQ29udGVudCBoYXNoLCB1c2luZyB0aGUgc2FtZSBhbGdvcml0aG0gb24gZXZlcnkgZGV2aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzaDogc3RyaW5nO1xuICAvKipcbiAgICogQ29uc3VtZXItZGVmaW5lZCBKU09OIGNhY2hlIHJlY29yZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBKc29uVmFsdWU7XG59XG5cbi8qKlxuICogQ2hlYXAgZmlsZSBpZGVudGl0eSBhbHJlYWR5IGF2YWlsYWJsZSBmcm9tIHRoZSB2YXVsdCdzIGZpbGUgdHJlZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkRmlsZSB7XG4gIC8qKlxuICAgKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbXRpbWU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Igb3B0aW9uYWwgY2FjaGUtc2VlZCBzaGFyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVNlZWRzQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogRGVkaWNhdGVkIGRldmljZS1sb2NhbCBzdG9yZSB0aGF0IG93bnMgdGhlIHNlZWQgcHVibGlzaGVyIGlkZW50aXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWw6IExvY2FsRGF0YVN0b3JlO1xuICAvKipcbiAgICogUGVyLXN0b3JlIHVzZXIgc2V0dGluZy4gRGlzYWJsZWQgbWVhbnMgbmVpdGhlciBwdWJsaXNoaW5nIG5vciBhZG9wdGluZyBzZWVkcy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlOiBib29sZWFuO1xuICAvKipcbiAgICogU3RvcmUtc2NvcGVkLCBib3VuZGVkIHRyYW5zcG9ydC4gSW5jbHVkZSB0aGUgY29uc3VtZXIgc2NoZW1hIHZlcnNpb24gaW4gaXRzIHN0b3JlIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwb3J0OiBEYXRhU3RvcmVUcmFuc3BvcnQ7XG59XG5cbi8qKlxuICogUmVzdWx0cyBvZiB2YWxpZGF0aW5nIGEgc2hhcmVkIGNhY2hlIHNlZWQgYWdhaW5zdCB0aGUgbG9jYWwgdmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZFZhbGlkYXRpb24ge1xuICAvKipcbiAgICogRmlsZXMgYWJzZW50IGZyb20gdGhlIHNlZWQsIG9yIHdpdGggZGlmZmVyZW50IGNvbnRlbnQuXG4gICAqL1xuICByZWFkb25seSByZWJ1aWxkOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFZhbGlkYXRlZCBzZWVkIHJlY29yZHMsIHdpdGggbG9jYWwgZmlsZSBzdGF0aXN0aWNzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2FibGU6IERhdGFTdG9yZVNlZWRFbnRyeVtdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHBlci1maWxlIHNlZWQgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZURhdGFTdG9yZVNlZWRQYXJhbXMge1xuICAvKipcbiAgICogU2VlZCBlbnRyaWVzIGZyb20gYSByZWNvZ25pemVkIGNvbnN1bWVyIHNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IERhdGFTdG9yZVNlZWRFbnRyeVtdO1xuICAvKipcbiAgICogQ3VycmVudCBmaWxlIHRyZWUsIGF2YWlsYWJsZSB3aXRob3V0IHJlYWRpbmcgbm90ZSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM6IHJlYWRvbmx5IERhdGFTdG9yZVNlZWRGaWxlW107XG4gIC8qKlxuICAgKiBIYXNoZXMgdGV4dCBvbmx5IHdoZW4gc2l6ZSBtYXRjaGVzIGJ1dCBtdGltZSBkaWZmZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEZpbGUgcmVxdWlyaW5nIHZhbGlkYXRpb24uXG4gICAqIEByZXR1cm5zIEl0cyBjb250ZW50IGhhc2guXG4gICAqL1xuICByZWFkb25seSBoYXNoRmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgU2VlZCB7XG4gIHJlYWRvbmx5IGVudHJpZXM6IERhdGFTdG9yZVNlZWRFbnRyeVtdO1xuICByZWFkb25seSBmb3JtYXQ6IDE7XG4gIHJlYWRvbmx5IHRpbWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25hbCBwZXJmb3JtYW5jZSBoaW50cy4gU2VlZHMgYXJlIG5ldmVyIGF1dGhvcml0YXRpdmUgc3RhdGUgYW5kIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSByZXVzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTdG9yZVNlZWRzIHtcbiAgLyoqXG4gICAqIERldmljZS1sb2NhbCBpZGVudGl0eSBhbmQgc2VyaWFsaXphdGlvbiBib3VuZGFyeS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBsb2NhbDogTG9jYWxEYXRhU3RvcmU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc3RvcmUgc2hhcmVzIGNhY2hlIHNlZWRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNoYXJlOiBib29sZWFuO1xuICAvKipcbiAgICogU3RvcmUtc2NvcGVkIHNuYXBzaG90IHRyYW5zcG9ydC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc3BvcnQ6IERhdGFTdG9yZVRyYW5zcG9ydDtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjYWNoZS1zZWVkIHB1Ymxpc2hlciBhbmQgcmVhZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gTG9jYWwgaWRlbnRpdHksIHRyYW5zcG9ydCBhbmQgdGhlIHBlci1zdG9yZSBzaGFyaW5nIHNldHRpbmcuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBEYXRhU3RvcmVTZWVkc0NvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgdGhpcy5sb2NhbCA9IHBhcmFtcy5sb2NhbDtcbiAgICB0aGlzLnNoYXJlID0gcGFyYW1zLnNoYXJlO1xuICAgIHRoaXMudHJhbnNwb3J0ID0gcGFyYW1zLnRyYW5zcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYSBib3VuZGVkIHNlZWQsIHJlcGxhY2luZyBvbmx5IHRoaXMgZGV2aWNlJ3MgZWFybGllciBwdWJsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyaWVzIC0gRGVyaXZlZCByZWNvcmRzIHdpdGggZmlsZSBzdGF0aXN0aWNzIGFuZCBoYXNoZXMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgc2hhcmluZyB3YXMgZW5hYmxlZCBhbmQgdGhlIHNlZWQgd2FzIHB1Ymxpc2hlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwdWJsaXNoKGVudHJpZXM6IHJlYWRvbmx5IERhdGFTdG9yZVNlZWRFbnRyeVtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2FsLmV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmxvY2FsLmdldE9yQ3JlYXRlKCdzZWVkLWRldmljZS12MScsIHdpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpKTtcbiAgICAgIGlmICh0eXBlb2YgZGV2aWNlICE9PSAnc3RyaW5nJyB8fCAhL15bXFx3LV0rJC8udGVzdChkZXZpY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2NhbCBzZWVkIGlkZW50aXR5Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCByb290ID0gYCR7dGhpcy50cmFuc3BvcnQucm9vdH0vc2VlZHMvJHtkZXZpY2V9YDtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnQubGlzdCgpO1xuICAgICAgY29uc3QgYmFzZSA9IGAke3Jvb3R9L3NlZWQtJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX0tbWFuaWZlc3RgO1xuICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGVTbmFwc2hvdCh7IGJhc2UsIHBheWxvYWQ6IHsgZW50cmllcywgZm9ybWF0OiAxLCB0aW1lOiBEYXRlLm5vdygpIH0gfSk7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChgJHtyb290fS9zZWVkLWApKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQucmVtb3ZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgbmV3ZXN0IGNvbXBsZXRlIHNlZWQgZm9yIHRoaXMgdHJhbnNwb3J0J3Mgc2NoZW1hLlxuICAgKlxuICAgKiBAcmV0dXJucyBTZWVkIHJlY29yZHMsIG9yIGBudWxsYCBpZiBzaGFyaW5nIGlzIGRpc2FibGVkIG9yIG5vIGNvbXBsZXRlIHNlZWQgaXMgYXZhaWxhYmxlIHlldC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWFkTGF0ZXN0KCk6IFByb21pc2U8RGF0YVN0b3JlU2VlZEVudHJ5W10gfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgbGV0IG5ld2VzdCA9IC1JbmZpbml0eTtcbiAgICBsZXQgZW50cmllczogRGF0YVN0b3JlU2VlZEVudHJ5W10gfCBudWxsID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghL1xcL3NlZWQtW1xcdy1dKy1tYW5pZmVzdFxcLig/Om1kfGpzb24pJC8udGVzdChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWVkOiB1bmtub3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VlZCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoIShpc1NlZWQoc2VlZCkgJiYgc2VlZC50aW1lID4gbmV3ZXN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3ZXN0ID0gc2VlZC50aW1lO1xuICAgICAgZW50cmllcyA9IHNlZWQuZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWVkIHVzaW5nIGZyZWUgZmlsZSBzdGF0aXN0aWNzIGZpcnN0LCBoYXNoaW5nIG9ubHkgc2l6ZS1lcXVhbCBtdGltZSBtaXNtYXRjaGVzLlxuICogRmlsZXMgYWJzZW50IGxvY2FsbHkgYXJlIGRpc2NhcmRlZC4gQ29uc3VtZXJzIGluZGV4IG9ubHkgdGhlIHJldHVybmVkIHJlYnVpbGQgcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNlZWQsIGN1cnJlbnQgZmlsZSB0cmVlIGFuZCBjb250ZW50LWhhc2ggcmVhZGVyLlxuICogQHJldHVybnMgUmV1c2FibGUgcmVjb3JkcyBhbmQgdGhlIHBhdGhzIHRoYXQgc3RpbGwgbmVlZCBpbmRleGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGF0YVN0b3JlU2VlZChwYXJhbXM6IFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyk6IFByb21pc2U8RGF0YVN0b3JlU2VlZFZhbGlkYXRpb24+IHtcbiAgY29uc3Qgc2VlZCA9IG5ldyBNYXAocGFyYW1zLmVudHJpZXMubWFwKChlbnRyeSkgPT4gW2VudHJ5LnBhdGgsIGVudHJ5XSkpO1xuICBjb25zdCByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcmVidWlsZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIHBhcmFtcy5maWxlcykge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZC5nZXQoZmlsZS5wYXRoKTtcbiAgICBpZiAoZW50cnk/LnNpemUgPT09IGZpbGUuc2l6ZSAmJiAoZW50cnkubXRpbWUgPT09IGZpbGUubXRpbWUgfHwgZW50cnkuaGFzaCA9PT0gYXdhaXQgcGFyYW1zLmhhc2hGaWxlKGZpbGUucGF0aCkpKSB7XG4gICAgICByZXVzYWJsZS5wdXNoKHsgLi4uZW50cnksIC4uLmZpbGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYnVpbGQucHVzaChmaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZWJ1aWxkLCByZXVzYWJsZSB9O1xufVxuXG5mdW5jdGlvbiBpc1NlZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aW1lID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUudGltZSlcbiAgICAmJiAnZW50cmllcycgaW4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnRyaWVzKSAmJiB2YWx1ZS5lbnRyaWVzLmV2ZXJ5KChlbnRyeTogdW5rbm93bikgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3BhdGgnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJ210aW1lJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkubXRpbWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShlbnRyeS5tdGltZSlcbiAgICAgICYmICdzaXplJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuc2l6ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LnNpemUpXG4gICAgICAmJiAnaGFzaCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5Lmhhc2ggPT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gZW50cnkgJiYgaXNEYXRhU3RvcmVKc29uVmFsdWUoZW50cnkudmFsdWUpXG4gICAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsZ0NBQXFDO0FBQ3JDLGtDQUFtQztBQWdHNUIsTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVosWUFBWSxRQUF5QztBQUMxRCxTQUFLLFFBQVEsT0FBTztBQUNwQixTQUFLLFFBQVEsT0FBTztBQUNwQixTQUFLLFlBQVksT0FBTztBQUFBLEVBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLFFBQVEsU0FBMEQ7QUFDN0UsUUFBSSxDQUFDLEtBQUssT0FBTztBQUNmLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxNQUFNLEtBQUssTUFBTSxVQUFVLFlBQVk7QUFDNUMsWUFBTSxTQUFTLE1BQU0sS0FBSyxNQUFNLFlBQVksa0JBQWtCLE9BQU8sT0FBTyxXQUFXLENBQUM7QUFDeEYsVUFBSSxPQUFPLFdBQVcsWUFBWSxDQUFDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDMUQsY0FBTSxJQUFJLE1BQU0sNkJBQTZCO0FBQUEsTUFDL0M7QUFDQSxZQUFNLE9BQU8sR0FBRyxLQUFLLFVBQVUsSUFBSSxVQUFVLE1BQU07QUFDbkQsWUFBTSxRQUFRLE1BQU0sS0FBSyxVQUFVLEtBQUs7QUFDeEMsWUFBTSxPQUFPLEdBQUcsSUFBSSxTQUFTLE9BQU8sT0FBTyxXQUFXLENBQUM7QUFDdkQsWUFBTSxL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
|
|
@@ -119,9 +119,9 @@ export declare class DataStoreSeeds {
|
|
|
119
119
|
/**
|
|
120
120
|
* Reads the newest complete seed for this transport's schema.
|
|
121
121
|
*
|
|
122
|
-
* @returns Seed records, or `
|
|
122
|
+
* @returns Seed records, or `null` if sharing is disabled or no complete seed is available yet.
|
|
123
123
|
*/
|
|
124
|
-
readLatest(): Promise<DataStoreSeedEntry[] |
|
|
124
|
+
readLatest(): Promise<DataStoreSeedEntry[] | null>;
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
127
|
* Validates a seed using free file statistics first, hashing only size-equal mtime mismatches.
|
|
@@ -117,9 +117,9 @@ __export(data_store_transport_exports, {
|
|
|
117
117
|
DataStoreTransport: () => DataStoreTransport
|
|
118
118
|
});
|
|
119
119
|
module.exports = __toCommonJS(data_store_transport_exports);
|
|
120
|
-
var import_type_guards = require(
|
|
121
|
-
var import_obsidian = require(
|
|
122
|
-
var import_debug = require(
|
|
120
|
+
var import_type_guards = require("@mnaoumov/typescript-lib/type-guards");
|
|
121
|
+
var import_obsidian = require("obsidian");
|
|
122
|
+
var import_debug = require("../debug.cjs");
|
|
123
123
|
const DEFAULT_MAX_FILE_BYTES = 1e6;
|
|
124
124
|
const MIN_FILE_BYTES = 256;
|
|
125
125
|
const MAX_FILE_BYTES = 4e6;
|
|
@@ -129,6 +129,7 @@ const DOCUMENT_SUFFIX = "\n```\n";
|
|
|
129
129
|
const BISECTION_DIVISOR = 2;
|
|
130
130
|
const HEX_RADIX = 16;
|
|
131
131
|
const HEX_BYTE_LENGTH = 2;
|
|
132
|
+
const JOURNAL_SEGMENT_REG_EXP = /\/log-\d+\.(?:md|json)$/;
|
|
132
133
|
class DataStoreTransport {
|
|
133
134
|
/**
|
|
134
135
|
* Creates a bounded vault transport.
|
|
@@ -186,7 +187,7 @@ class DataStoreTransport {
|
|
|
186
187
|
const files = allFiles.filter((path) => path.startsWith(`${this.root}/devices/`));
|
|
187
188
|
const complete = /* @__PURE__ */ new Set();
|
|
188
189
|
for (const path of files) {
|
|
189
|
-
if (
|
|
190
|
+
if (JOURNAL_SEGMENT_REG_EXP.test(path) && await this.read(path) !== void 0) {
|
|
190
191
|
complete.add(path);
|
|
191
192
|
}
|
|
192
193
|
if (!/\/snapshot-[\w-]+-manifest\.(?:md|json)$/.test(path) || await this.readSnapshot(path) === void 0) {
|
|
@@ -209,8 +210,8 @@ class DataStoreTransport {
|
|
|
209
210
|
const destination = target.root + path.slice(this.root.length);
|
|
210
211
|
target.checkPath(destination);
|
|
211
212
|
if (await target.adapter.exists(destination)) {
|
|
212
|
-
if (await target.adapter.read(destination) !== text) {
|
|
213
|
-
|
|
213
|
+
if (await target.adapter.read(destination) !== text && !await this.copyOverDifferentHistory(target, path, destination, text)) {
|
|
214
|
+
continue;
|
|
214
215
|
}
|
|
215
216
|
} else {
|
|
216
217
|
await target.ensureParent(destination);
|
|
@@ -228,7 +229,7 @@ class DataStoreTransport {
|
|
|
228
229
|
* @returns Whether its document fits the configured cap.
|
|
229
230
|
*/
|
|
230
231
|
fits(value) {
|
|
231
|
-
return
|
|
232
|
+
return this.measure(value) <= this.maxFileBytes;
|
|
232
233
|
}
|
|
233
234
|
/**
|
|
234
235
|
* Lists the store's files recursively, never leaving its folder.
|
|
@@ -249,6 +250,15 @@ class DataStoreTransport {
|
|
|
249
250
|
}
|
|
250
251
|
return files.sort();
|
|
251
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Measures the complete encoded size of a new document without writing.
|
|
255
|
+
*
|
|
256
|
+
* @param value - JSON payload.
|
|
257
|
+
* @returns UTF-8 bytes, encoding wrapper included.
|
|
258
|
+
*/
|
|
259
|
+
measure(value) {
|
|
260
|
+
return new TextEncoder().encode(this.encode(value)).length;
|
|
261
|
+
}
|
|
252
262
|
/**
|
|
253
263
|
* Reads complete fenced Markdown JSON or a version-one JSON envelope. Partial documents remain pending.
|
|
254
264
|
*
|
|
@@ -340,6 +350,32 @@ class DataStoreTransport {
|
|
|
340
350
|
await this.ensureParent(path);
|
|
341
351
|
await this.adapter.write(path, text);
|
|
342
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Publishes an append-only document: an occupied path is rewritten only when the new list strictly extends the stored one.
|
|
355
|
+
* A reader that sees an older copy sees a prefix, so it applies fewer entries and never a different one.
|
|
356
|
+
*
|
|
357
|
+
* @param path - Vault-relative destination within this store.
|
|
358
|
+
* @param values - JSON-compatible entries; the stored entries must be their prefix.
|
|
359
|
+
* @returns A promise that resolves after publication, or at once when the stored list is already identical.
|
|
360
|
+
*/
|
|
361
|
+
async writeAppendOnly(path, values) {
|
|
362
|
+
this.checkPath(path);
|
|
363
|
+
const text = this.encode(values, path.endsWith(".json"));
|
|
364
|
+
this.checkSize(text);
|
|
365
|
+
if (await this.adapter.exists(path)) {
|
|
366
|
+
const stored = await this.readStoredList(path);
|
|
367
|
+
if (stored === null || !isListPrefix(stored, values)) {
|
|
368
|
+
throw new Error("Conflicting immutable data-store document");
|
|
369
|
+
}
|
|
370
|
+
if (stored.length === values.length) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
await this.adapter.write(path, text);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
await this.ensureParent(path);
|
|
377
|
+
await this.adapter.write(path, text);
|
|
378
|
+
}
|
|
343
379
|
/**
|
|
344
380
|
* Publishes an immutable document, accepting only byte-identical retries at an occupied path.
|
|
345
381
|
*
|
|
@@ -416,6 +452,31 @@ class DataStoreTransport {
|
|
|
416
452
|
(0, import_debug.getObsidianLibDebugger)("DataStore")(message);
|
|
417
453
|
throw new Error(message);
|
|
418
454
|
}
|
|
455
|
+
/**
|
|
456
|
+
* Reconciles a destination whose bytes differ from the source. Only a journal segment may differ, because it grows
|
|
457
|
+
* while its device writes it, so either copy may be the older prefix of the other; anything else is a conflict.
|
|
458
|
+
*
|
|
459
|
+
* @param target - Destination transport.
|
|
460
|
+
* @param path - Source path.
|
|
461
|
+
* @param destination - Destination path.
|
|
462
|
+
* @param text - Source bytes.
|
|
463
|
+
* @returns Whether the source was written over the destination, which must then be verified.
|
|
464
|
+
*/
|
|
465
|
+
async copyOverDifferentHistory(target, path, destination, text) {
|
|
466
|
+
const source = JOURNAL_SEGMENT_REG_EXP.test(path) ? await this.readStoredList(path) : null;
|
|
467
|
+
const copied = source === null ? null : await target.readStoredList(destination);
|
|
468
|
+
if (source === null || copied === null) {
|
|
469
|
+
throw new Error("Conflicting immutable data-store history");
|
|
470
|
+
}
|
|
471
|
+
if (isListPrefix(source, copied)) {
|
|
472
|
+
return false;
|
|
473
|
+
}
|
|
474
|
+
if (!isListPrefix(copied, source)) {
|
|
475
|
+
throw new Error("Conflicting immutable data-store history");
|
|
476
|
+
}
|
|
477
|
+
await target.adapter.write(destination, text);
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
419
480
|
encode(value, isJson = this.extension === ".json") {
|
|
420
481
|
const json = JSON.stringify(value);
|
|
421
482
|
if (json === void 0) {
|
|
@@ -440,11 +501,23 @@ class DataStoreTransport {
|
|
|
440
501
|
}
|
|
441
502
|
}
|
|
442
503
|
}
|
|
504
|
+
async readStoredList(path) {
|
|
505
|
+
let value;
|
|
506
|
+
try {
|
|
507
|
+
value = await this.read(path);
|
|
508
|
+
} catch {
|
|
509
|
+
return null;
|
|
510
|
+
}
|
|
511
|
+
return Array.isArray(value) ? value : null;
|
|
512
|
+
}
|
|
443
513
|
}
|
|
444
514
|
async function digest(text) {
|
|
445
515
|
const hash = await window.crypto.subtle.digest("SHA-256", new TextEncoder().encode(text));
|
|
446
516
|
return [...new Uint8Array(hash)].map((byte) => byte.toString(HEX_RADIX).padStart(HEX_BYTE_LENGTH, "0")).join("");
|
|
447
517
|
}
|
|
518
|
+
function isListPrefix(prefix, list) {
|
|
519
|
+
return prefix.length <= list.length && prefix.every((value, index) => JSON.stringify(value) === JSON.stringify(list[index]));
|
|
520
|
+
}
|
|
448
521
|
function isSafeVaultPath(path) {
|
|
449
522
|
return path.split("/").every((part) => part.length > 0 && part !== "." && part !== ".." && !/[<>:"\\|?*\p{Control}]|[. ]$/u.test(part));
|
|
450
523
|
}
|
|
@@ -452,4 +525,4 @@ function isSafeVaultPath(path) {
|
|
|
452
525
|
0 && (module.exports = {
|
|
453
526
|
DataStoreTransport
|
|
454
527
|
});
|
|
455
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXRyYW5zcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaXplLWJvdW5kZWQgTWFya2Rvd24gb3IgSlNPTiB0cmFuc3BvcnQsIHdpdGggdmVyaWZpZWQgY2h1bmtlZCBzbmFwc2hvdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhQWRhcHRlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuXG5jb25zdCBERUZBVUxUX01BWF9GSUxFX0JZVEVTID0gMV8wMDBfMDAwO1xuY29uc3QgTUlOX0ZJTEVfQllURVMgPSAyNTY7XG5jb25zdCBNQVhfRklMRV9CWVRFUyA9IDRfMDAwXzAwMDtcbmNvbnN0IE1BWF9TTkFQU0hPVF9CWVRFUyA9IDY0XzAwMF8wMDA7XG5jb25zdCBET0NVTUVOVF9QUkVGSVggPSAnYGBganNvblxcbic7XG5jb25zdCBET0NVTUVOVF9TVUZGSVggPSAnXFxuYGBgXFxuJztcbmNvbnN0IEJJU0VDVElPTl9ESVZJU09SID0gMjtcbmNvbnN0IEhFWF9SQURJWCA9IDE2O1xuY29uc3QgSEVYX0JZVEVfTEVOR1RIID0gMjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUgc2hhcmVkLXN0b3JlIHZhdWx0IHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVUcmFuc3BvcnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBWYXVsdCBhZGFwdGVyOyBubyBkZXNrdG9wIGZpbGVzeXN0ZW0gQVBJcyBhcmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFkYXB0ZXI6IERhdGFBZGFwdGVyO1xuICAvKipcbiAgICogVmF1bHQtcmVsYXRpdmUgZm9sZGVyLiBIaWRkZW4gc2VnbWVudHMgYXJlIGFsbG93ZWQ7IGNhbGxlcnMgbXVzdCBhcnJhbmdlIHRoZWlyIHN5bmNocm9uaXphdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gZGF0YSdgXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEb2N1bWVudCBlbmNvZGluZy4gSlNPTiByZXF1aXJlcyBhIHN5bmMgdG9vbCBjb25maWd1cmVkIHRvIGNhcnJ5IGFyYml0cmFyeSBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdtYXJrZG93bidgXG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ/OiAnanNvbicgfCAnbWFya2Rvd24nO1xuICAvKipcbiAgICogTWF4aW11bSBVVEYtOCBieXRlcyBpbiBhbnkgZmlsZSwgaW5jbHVkaW5nIGl0cyBlbmNvZGluZyB3cmFwcGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IG1heEZpbGVCeXRlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gVVRGLTggYnl0ZXMgaW4gdGhlIHJlY29uc3RydWN0ZWQgc25hcHNob3QsIGJlZm9yZSBKU09OIHBhcnNpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA2NDAwMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IG1heFNuYXBzaG90Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgbmFtZSBpbmNsdWRpbmcgaXRzIGNvbnN1bWVyIHNjaGVtYSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHB1Ymxpc2hpbmcgYSBjaHVua2VkIHNuYXBzaG90LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVRyYW5zcG9ydFdyaXRlU25hcHNob3RQYXJhbXMge1xuICAvKipcbiAgICogVmF1bHQtcmVsYXRpdmUgYmFzZSBwYXRoIHdpdGhvdXQgaXRzIGV4dGVuc2lvbi4gVXNlIGEgZnJlc2ggdW5pcXVlIG5hbWUgZm9yIGV2ZXJ5IHB1YmxpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZTogc3RyaW5nO1xuICAvKipcbiAgICogSlNPTi1jb21wYXRpYmxlIHNuYXBzaG90LCBpbmNsdWRpbmcgaXRzIGNvbnN1bWVyIHNjaGVtYSBhbmQgY292ZXJhZ2UgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBwYXlsb2FkOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEEgc3RvcmUtc2NvcGVkIHRyYW5zcG9ydC4gRXZlcnkgcHVibGlzaGVkIGRvY3VtZW50IGlzIGltbXV0YWJsZSBleGNlcHQgZGV2aWNlIGFja25vd2xlZGdlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RvcmVUcmFuc3BvcnQge1xuICAvKipcbiAgRmlsZSBleHRlbnNpb24gZm9yIG5ldyBkb2N1bWVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGVuY29kZWQgYnl0ZXMgcGVyIGRvY3VtZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1heEZpbGVCeXRlczogbnVtYmVyO1xuICAvKipcbiAgICogRnVsbCB2YXVsdC1yZWxhdGl2ZSBzdG9yZSByb290LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvb3Q6IHN0cmluZztcbiAgLyoqXG4gICAqIFZhdWx0IGFkYXB0ZXIgdXNlZCBieSB0aGlzIHRyYW5zcG9ydC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhZGFwdGVyOiBEYXRhQWRhcHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhTbmFwc2hvdEJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBib3VuZGVkIHZhdWx0IHRyYW5zcG9ydC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIEFkYXB0ZXIsIGlkZW50aXR5IGFuZCBmaWxlIGJvdW5kcy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1zOiBEYXRhU3RvcmVUcmFuc3BvcnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYWRhcHRlciA9IHBhcmFtcy5hZGFwdGVyO1xuICAgIHRoaXMuZXh0ZW5zaW9uID0gcGFyYW1zLmZvcm1hdCA9PT0gJ2pzb24nID8gJy5qc29uJyA6ICcubWQnO1xuICAgIGNvbnN0IGZvbGRlciA9IHBhcmFtcy5mb2xkZXIgPz8gJ1BsdWdpbiBkYXRhJztcbiAgICBpZiAoXG4gICAgICAhaXNTYWZlVmF1bHRQYXRoKGZvbGRlcilcbiAgICAgIHx8ICEvXltcXHctXSskLy50ZXN0KHBhcmFtcy5wbHVnaW5JZCkgfHwgIS9eW1xcdy1dKyQvLnRlc3QocGFyYW1zLnN0b3JlSWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgc3RvcmUgcmVxdWlyZXMgYSBzYWZlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciBhbmQgc2FmZSBwbHVnaW4vc3RvcmUgaWRzJyk7XG4gICAgfVxuICAgIHRoaXMucm9vdCA9IGAke2ZvbGRlcn0vJHtwYXJhbXMucGx1Z2luSWR9LyR7cGFyYW1zLnN0b3JlSWR9YDtcbiAgICB0aGlzLm1heEZpbGVCeXRlcyA9IHBhcmFtcy5tYXhGaWxlQnl0ZXMgPz8gREVGQVVMVF9NQVhfRklMRV9CWVRFUztcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHRoaXMubWF4RmlsZUJ5dGVzKSB8fCB0aGlzLm1heEZpbGVCeXRlcyA8IE1JTl9GSUxFX0JZVEVTIHx8IHRoaXMubWF4RmlsZUJ5dGVzID4gTUFYX0ZJTEVfQllURVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS1zdG9yZSBmaWxlIGxpbWl0IG11c3QgYmUgYmV0d2VlbiAyNTYgYW5kIDQwMDAwMDAgYnl0ZXMnKTtcbiAgICB9XG4gICAgdGhpcy5tYXhTbmFwc2hvdEJ5dGVzID0gcGFyYW1zLm1heFNuYXBzaG90Qnl0ZXMgPz8gTUFYX1NOQVBTSE9UX0JZVEVTO1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodGhpcy5tYXhTbmFwc2hvdEJ5dGVzKSB8fCB0aGlzLm1heFNuYXBzaG90Qnl0ZXMgPCBNSU5fRklMRV9CWVRFUyB8fCB0aGlzLm1heFNuYXBzaG90Qnl0ZXMgPiBNQVhfU05BUFNIT1RfQllURVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS1zdG9yZSBzbmFwc2hvdCBsaW1pdCBtdXN0IGJlIGJldHdlZW4gMjU2IGFuZCA2NDAwMDAwMCBieXRlcycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgaGlzdG9yeSBieXRlIGZvciBieXRlLCBwcmVzZXJ2aW5nIHNvdXJjZSBmaWxlcyBhbmQgcmVmdXNpbmcgY29uZmxpY3RpbmcgaW1tdXRhYmxlIGRlc3RpbmF0aW9ucy5cbiAgICogQWNrbm93bGVkZ2VtZW50cyBhcmUgbG9jYWwgdG8gZWFjaCBsb2NhdGlvbiBhbmQgYXJlIG5vdCBjb3BpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBEZXN0aW5hdGlvbiBmb3IgdGhpcyBzYW1lIHBsdWdpbiBhbmQgc3RvcmUuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGV2ZXJ5IGNvcGllZCBmaWxlIGhhcyBiZWVuIHZlcmlmaWVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvcHlIaXN0b3J5VG8odGFyZ2V0OiBEYXRhU3RvcmVUcmFuc3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5wYXJhbXMucGx1Z2luSWQgIT09IHRhcmdldC5wYXJhbXMucGx1Z2luSWQgfHwgdGhpcy5wYXJhbXMuc3RvcmVJZCAhPT0gdGFyZ2V0LnBhcmFtcy5zdG9yZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb3B5IGRhdGEtc3RvcmUgaGlzdG9yeSB0byBhIGRpZmZlcmVudCBzdG9yZScpO1xuICAgIH1cbiAgICBjb25zdCBhbGxGaWxlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYWxsRmlsZXMuZmlsdGVyKChwYXRoKSA9PiBwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5yb290fS9kZXZpY2VzL2ApKTtcbiAgICBjb25zdCBjb21wbGV0ZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgaWYgKC9cXC9sb2ctXFxkK1xcLig/Om1kfGpzb24pJC8udGVzdChwYXRoKSAmJiBhd2FpdCB0aGlzLnJlYWQocGF0aCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb21wbGV0ZS5hZGQocGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAoIS9cXC9zbmFwc2hvdC1bXFx3LV0rLW1hbmlmZXN0XFwuKD86bWR8anNvbikkLy50ZXN0KHBhdGgpIHx8IGF3YWl0IHRoaXMucmVhZFNuYXBzaG90KHBhdGgpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBwYXRoLmVuZHNXaXRoKCcuanNvbicpID8gJy5qc29uJyA6ICcubWQnO1xuICAgICAgY29uc3QgYmFzZSA9IHBhdGguc2xpY2UoMCwgLWV4dGVuc2lvbi5sZW5ndGgpO1xuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBmaWxlcykge1xuICAgICAgICBpZiAoY2h1bmsuc3RhcnRzV2l0aChgJHtiYXNlfS1gKSAmJiBjaHVuay5lbmRzV2l0aChleHRlbnNpb24pKSB7XG4gICAgICAgICAgY29tcGxldGUuYWRkKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcGxldGUuYWRkKHBhdGgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgY29tcGxldGUpIHtcbiAgICAgIHRoaXMuY2hlY2tQYXRoKHBhdGgpO1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMuYWRhcHRlci5yZWFkKHBhdGgpO1xuICAgICAgdGhpcy5jaGVja1NpemUodGV4dCk7XG4gICAgICB0YXJnZXQuY2hlY2tTaXplKHRleHQpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSB0YXJnZXQucm9vdCArIHBhdGguc2xpY2UodGhpcy5yb290Lmxlbmd0aCk7XG4gICAgICB0YXJnZXQuY2hlY2tQYXRoKGRlc3RpbmF0aW9uKTtcbiAgICAgIGlmIChhd2FpdCB0YXJnZXQuYWRhcHRlci5leGlzdHMoZGVzdGluYXRpb24pKSB7XG4gICAgICAgIGlmIChhd2FpdCB0YXJnZXQuYWRhcHRlci5yZWFkKGRlc3RpbmF0aW9uKSAhPT0gdGV4dCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmxpY3RpbmcgaW1tdXRhYmxlIGRhdGEtc3RvcmUgaGlzdG9yeScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0YXJnZXQuZW5zdXJlUGFyZW50KGRlc3RpbmF0aW9uKTtcbiAgICAgICAgYXdhaXQgdGFyZ2V0LmFkYXB0ZXIud3JpdGUoZGVzdGluYXRpb24sIHRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRhcmdldC5hZGFwdGVyLnJlYWQoZGVzdGluYXRpb24pICE9PSB0ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS1zdG9yZSBoaXN0b3J5IGNvcHkgZmFpbGVkIHZlcmlmaWNhdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyB0aGUgY29tcGxldGUgZW5jb2RlZCBzaXplIHdpdGhvdXQgd3JpdGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gSlNPTiBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGl0cyBkb2N1bWVudCBmaXRzIHRoZSBjb25maWd1cmVkIGNhcC5cbiAgICovXG4gIHB1YmxpYyBmaXRzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0aGlzLmVuY29kZSh2YWx1ZSkpLmxlbmd0aCA8PSB0aGlzLm1heEZpbGVCeXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyB0aGUgc3RvcmUncyBmaWxlcyByZWN1cnNpdmVseSwgbmV2ZXIgbGVhdmluZyBpdHMgZm9sZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBWYXVsdC1yZWxhdGl2ZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuYWRhcHRlci5leGlzdHModGhpcy5yb290KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gW3RoaXMucm9vdF07XG4gICAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm9sZGVyID0gZW5zdXJlTm9uTnVsbGFibGUocGVuZGluZy5zaGlmdCgpKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5hZGFwdGVyLmxpc3QoZm9sZGVyKTtcbiAgICAgIGZpbGVzLnB1c2goLi4uY2hpbGRyZW4uZmlsZXMuZmlsdGVyKChwYXRoKSA9PiBwYXRoLnN0YXJ0c1dpdGgoYCR7Zm9sZGVyfS9gKSkpO1xuICAgICAgcGVuZGluZy5wdXNoKC4uLmNoaWxkcmVuLmZvbGRlcnMuZmlsdGVyKChwYXRoKSA9PiBwYXRoLnN0YXJ0c1dpdGgoYCR7Zm9sZGVyfS9gKSkpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZXMuc29ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGNvbXBsZXRlIGZlbmNlZCBNYXJrZG93biBKU09OIG9yIGEgdmVyc2lvbi1vbmUgSlNPTiBlbnZlbG9wZS4gUGFydGlhbCBkb2N1bWVudHMgcmVtYWluIHBlbmRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVmF1bHQtcmVsYXRpdmUgZmlsZSB3aXRoaW4gdGhpcyBzdG9yZS5cbiAgICogQHJldHVybnMgUGFyc2VkIEpTT04sIG9yIGB1bmRlZmluZWRgIGZvciBhbiBpbmNvbXBsZXRlIGRvY3VtZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWQocGF0aDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgdGhpcy5jaGVja1BhdGgocGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgdGV4dDogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tTaXplKHRleHQpO1xuICAgIGlmIChwYXRoLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICBsZXQgZG9jdW1lbnQ6IHVua25vd247XG4gICAgICB0cnkge1xuICAgICAgICBkb2N1bWVudCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnIHx8IGRvY3VtZW50ID09PSBudWxsIHx8ICEoJ2Zvcm1hdCcgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmZvcm1hdCAhPT0gMSB8fCAhKCdwYXlsb2FkJyBpbiBkb2N1bWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04gZGF0YS1zdG9yZSBkb2N1bWVudCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnBheWxvYWQ7XG4gICAgfVxuICAgIGlmICghdGV4dC5zdGFydHNXaXRoKERPQ1VNRU5UX1BSRUZJWCkgfHwgIXRleHQuZW5kc1dpdGgoRE9DVU1FTlRfU1VGRklYKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZSh0ZXh0LnNsaWNlKERPQ1VNRU5UX1BSRUZJWC5sZW5ndGgsIC1ET0NVTUVOVF9TVUZGSVgubGVuZ3RoKSk7XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHNuYXBzaG90IG9ubHkgYWZ0ZXIgZXZlcnkgbnVtYmVyZWQgY2h1bmsgYXJyaXZlcyBhbmQgcGFzc2VzIGl0cyBTSEEtMjU2IGNoZWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFZhdWx0LXJlbGF0aXZlIG1hbmlmZXN0IHBhdGguXG4gICAqIEByZXR1cm5zIEl0cyBwYXlsb2FkLCBvciBgdW5kZWZpbmVkYCB3aGlsZSBkZWxpdmVyeSBpcyBpbmNvbXBsZXRlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWRTbmFwc2hvdChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMucmVhZChwYXRoKTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbWFuaWZlc3QgIT09ICdvYmplY3QnIHx8IG1hbmlmZXN0ID09PSBudWxsIHx8ICEoJ2Zvcm1hdCcgaW4gbWFuaWZlc3QpIHx8IG1hbmlmZXN0LmZvcm1hdCAhPT0gMVxuICAgICAgfHwgISgnaGFzaGVzJyBpbiBtYW5pZmVzdCkgfHwgIUFycmF5LmlzQXJyYXkobWFuaWZlc3QuaGFzaGVzKVxuICAgICAgfHwgbWFuaWZlc3QuaGFzaGVzLmxlbmd0aCA9PT0gMCB8fCBtYW5pZmVzdC5oYXNoZXMuc29tZSgoaGFzaDogdW5rbm93bikgPT4gdHlwZW9mIGhhc2ggIT09ICdzdHJpbmcnKVxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBieXRlcyA9IDA7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGhhc2hdIG9mIG1hbmlmZXN0Lmhhc2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhdGguZW5kc1dpdGgoJy5qc29uJykgPyAnLmpzb24nIDogJy5tZCc7XG4gICAgICBjb25zdCBjaHVuayA9IGF3YWl0IHRoaXMucmVhZChgJHtwYXRoLnNsaWNlKDAsIC1leHRlbnNpb24ubGVuZ3RoKX0tJHtTdHJpbmcoaW5kZXgpfSR7ZXh0ZW5zaW9ufWApO1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgfHwgYXdhaXQgZGlnZXN0KGNodW5rKSAhPT0gaGFzaCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYnl0ZXMgKz0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGNodW5rKS5sZW5ndGg7XG4gICAgICBpZiAoYnl0ZXMgPiB0aGlzLm1heFNuYXBzaG90Qnl0ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhLXN0b3JlIHNuYXBzaG90IGV4Y2VlZHMgZGVjb2RlZCBieXRlIGxpbWl0Jyk7XG4gICAgICB9XG4gICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoY2h1bmtzLmpvaW4oJycpKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBkb2N1bWVudCBvd25lZCBieSB0aGUgY2FsbGVyJ3MgZGV2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFZhdWx0LXJlbGF0aXZlIGZpbGUgd2l0aGluIHRoaXMgc3RvcmUuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHJlbW92YWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hlY2tQYXRoKHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci5yZW1vdmUocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGEgY29tcGxldGUgZG9jdW1lbnQsIHJlZnVzaW5nIGFuIG92ZXJzaXplZCB3cml0ZSBiZWZvcmUgYWRhcHRlciBtdXRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBWYXVsdC1yZWxhdGl2ZSBmaWxlIHdpdGhpbiB0aGlzIHN0b3JlLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgcGF5bG9hZC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgYWRhcHRlciBmaW5pc2hlcyB3cml0aW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdyaXRlKHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNoZWNrUGF0aChwYXRoKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5lbmNvZGUodmFsdWUsIHBhdGguZW5kc1dpdGgoJy5qc29uJykpO1xuICAgIHRoaXMuY2hlY2tTaXplKHRleHQpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUGFyZW50KHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci53cml0ZShwYXRoLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYW4gaW1tdXRhYmxlIGRvY3VtZW50LCBhY2NlcHRpbmcgb25seSBieXRlLWlkZW50aWNhbCByZXRyaWVzIGF0IGFuIG9jY3VwaWVkIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVmF1bHQtcmVsYXRpdmUgZGVzdGluYXRpb24gd2l0aGluIHRoaXMgc3RvcmUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEpTT04tY29tcGF0aWJsZSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBwdWJsaWNhdGlvbiBvciBhbiBpZGVudGljYWwgcmV0cnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd3JpdGVJbW11dGFibGUocGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hlY2tQYXRoKHBhdGgpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLmVuY29kZSh2YWx1ZSwgcGF0aC5lbmRzV2l0aCgnLmpzb24nKSk7XG4gICAgdGhpcy5jaGVja1NpemUodGV4dCk7XG4gICAgaWYgKGF3YWl0IHRoaXMuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYXB0ZXIucmVhZChwYXRoKSAhPT0gdGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0aW5nIGltbXV0YWJsZSBkYXRhLXN0b3JlIGRvY3VtZW50Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlUGFyZW50KHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci53cml0ZShwYXRoLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYm91bmRlZCBpbW11dGFibGUgY2h1bmtzIGJlZm9yZSB0aGVpciBtYW5pZmVzdC4gUmVhZGVycyB2ZXJpZnkgZGVsaXZlcnkgY29tcGxldGVuZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVW5pcXVlIGJhc2UgcGF0aCBhbmQgc25hcHNob3QgcGF5bG9hZC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWFuaWZlc3QgaGFzIGJlZW4gcHVibGlzaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdyaXRlU25hcHNob3QocGFyYW1zOiBEYXRhU3RvcmVUcmFuc3BvcnRXcml0ZVNuYXBzaG90UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5wYXlsb2FkKTtcbiAgICBpZiAocGF5bG9hZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90IG11c3QgYmUgSlNPTi1jb21wYXRpYmxlJyk7XG4gICAgfVxuICAgIGlmIChuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocGF5bG9hZCkubGVuZ3RoID4gdGhpcy5tYXhTbmFwc2hvdEJ5dGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEtc3RvcmUgc25hcHNob3QgZXhjZWVkcyBkZWNvZGVkIGJ5dGUgbGltaXQnKTtcbiAgICB9XG4gICAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBwYXlsb2FkLmxlbmd0aCkge1xuICAgICAgbGV0IGxvdyA9IDE7XG4gICAgICBsZXQgaGlnaCA9IE1hdGgubWluKHBheWxvYWQubGVuZ3RoIC0gb2Zmc2V0LCB0aGlzLm1heEZpbGVCeXRlcyk7XG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwoKGxvdyArIGhpZ2gpIC8gQklTRUNUSU9OX0RJVklTT1IpO1xuICAgICAgICBpZiAodGhpcy5maXRzKHBheWxvYWQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBtaWRkbGUpKSkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2gocGF5bG9hZC5zbGljZShvZmZzZXQsIG9mZnNldCArIGxvdykpO1xuICAgICAgb2Zmc2V0ICs9IGxvdztcbiAgICB9XG4gICAgY29uc3QgaGFzaGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICBoYXNoZXMucHVzaChhd2FpdCBkaWdlc3QoY2h1bmspKTtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSB7IGZvcm1hdDogMSwgaGFzaGVzIH07XG4gICAgdGhpcy5jaGVja1NpemUodGhpcy5lbmNvZGUobWFuaWZlc3QpKTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGNodW5rcy5lbnRyaWVzKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGUoYCR7cGFyYW1zLmJhc2V9LSR7U3RyaW5nKGluZGV4KX0ke3RoaXMuZXh0ZW5zaW9ufWAsIGNodW5rKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy53cml0ZShgJHtwYXJhbXMuYmFzZX0ke3RoaXMuZXh0ZW5zaW9ufWAsIG1hbmlmZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tQYXRoKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKGAke3RoaXMucm9vdH0vYCkgfHwgIWlzU2FmZVZhdWx0UGF0aChwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhLXN0b3JlIHBhdGggbGVhdmVzIGl0cyBjb25maWd1cmVkIGZvbGRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tTaXplKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNpemUgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodGV4dCkubGVuZ3RoO1xuICAgIGlmIChzaXplIDw9IHRoaXMubWF4RmlsZUJ5dGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgUGx1Z2luIGRhdGEgc3RvcmU6ICR7U3RyaW5nKHNpemUpfSBieXRlcyBleGNlZWRzIHRoZSAke1N0cmluZyh0aGlzLm1heEZpbGVCeXRlcyl9IGJ5dGUgZmlsZSBsaW1pdC5gO1xuICAgIG5ldyBOb3RpY2UobWVzc2FnZSk7XG4gICAgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcignRGF0YVN0b3JlJykobWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmNvZGUodmFsdWU6IHVua25vd24sIGlzSnNvbiA9IHRoaXMuZXh0ZW5zaW9uID09PSAnLmpzb24nKTogc3RyaW5nIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGlmIChqc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS1zdG9yZSBwYXlsb2FkIG11c3QgYmUgSlNPTi1jb21wYXRpYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiBpc0pzb24gPyBKU09OLnN0cmluZ2lmeSh7IGZvcm1hdDogMSwgcGF5bG9hZDogdmFsdWUgfSkgOiBgJHtET0NVTUVOVF9QUkVGSVh9JHtqc29ufSR7RE9DVU1FTlRfU1VGRklYfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVBhcmVudChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBwYXJ0cy5wb3AoKTtcbiAgICBsZXQgZm9sZGVyID0gJyc7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBmb2xkZXIgPSBmb2xkZXIgPyBgJHtmb2xkZXJ9LyR7cGFydH1gIDogcGFydDtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5hZGFwdGVyLmV4aXN0cyhmb2xkZXIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGFwdGVyLm1rZGlyKGZvbGRlcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmFkYXB0ZXIuZXhpc3RzKGZvbGRlcikpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaWdlc3QodGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0ZXh0KSk7XG4gIHJldHVybiBbLi4ubmV3IFVpbnQ4QXJyYXkoaGFzaCldLm1hcCgoYnl0ZSkgPT4gYnl0ZS50b1N0cmluZyhIRVhfUkFESVgpLnBhZFN0YXJ0KEhFWF9CWVRFX0xFTkdUSCwgJzAnKSkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGlzU2FmZVZhdWx0UGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGguc3BsaXQoJy8nKS5ldmVyeSgocGFydCkgPT4gcGFydC5sZW5ndGggPiAwICYmIHBhcnQgIT09ICcuJyAmJiBwYXJ0ICE9PSAnLi4nICYmICEvWzw+OlwiXFxcXHw/KlxccHtDb250cm9sfV18Wy4gXSQvdS50ZXN0KHBhcnQpKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHlCQUFrQztBQUNsQyxzQkFBdUI7QUFFdkIsbUJBQXVDO0FBRXZDLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0sWUFBWTtBQUNsQixNQUFNLGtCQUFrQjtBQTZEakIsTUFBTSxtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF3QnZCLFlBQStCLFFBQTZDO0FBQTdDO0FBQ3BDLFNBQUssVUFBVSxPQUFPO0FBQ3RCLFNBQUssWUFBWSxPQUFPLFdBQVcsU0FBUyxVQUFVO0FBQ3RELFVBQU0sU0FBUyxPQUFPLFVBQVU7QUFDaEMsUUFDRSxDQUFDLGdCQUFnQixNQUFNLEtBQ3BCLENBQUMsV0FBVyxLQUFLLE9BQU8sUUFBUSxLQUFLLENBQUMsV0FBVyxLQUFLLE9BQU8sT0FBTyxHQUN2RTtBQUNBLFlBQU0sSUFBSSxNQUFNLDRFQUE0RTtBQUFBLElBQzlGO0FBQ0EsU0FBSyxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sUUFBUSxJQUFJLE9BQU8sT0FBTztBQUMxRCxTQUFLLGVBQWUsT0FBTyxnQkFBZ0I7QUFDM0MsUUFBSSxDQUFDLE9BQU8sY0FBYyxLQUFLLFlBQVksS0FBSyxLQUFLLGVBQWUsa0JBQWtCLEtBQUssZUFBZSxnQkFBZ0I7QUFDeEgsWUFBTSxJQUFJLE1BQU0sNkRBQTZEO0FBQUEsSUFDL0U7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
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXRyYW5zcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU2l6ZS1ib3VuZGVkIE1hcmtkb3duIG9yIEpTT04gdHJhbnNwb3J0LCB3aXRoIHZlcmlmaWVkIGNodW5rZWQgc25hcHNob3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGF0YUFkYXB0ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlciB9IGZyb20gJy4uL2RlYnVnLnRzJztcblxuY29uc3QgREVGQVVMVF9NQVhfRklMRV9CWVRFUyA9IDFfMDAwXzAwMDtcbmNvbnN0IE1JTl9GSUxFX0JZVEVTID0gMjU2O1xuY29uc3QgTUFYX0ZJTEVfQllURVMgPSA0XzAwMF8wMDA7XG5jb25zdCBNQVhfU05BUFNIT1RfQllURVMgPSA2NF8wMDBfMDAwO1xuY29uc3QgRE9DVU1FTlRfUFJFRklYID0gJ2BgYGpzb25cXG4nO1xuY29uc3QgRE9DVU1FTlRfU1VGRklYID0gJ1xcbmBgYFxcbic7XG5jb25zdCBCSVNFQ1RJT05fRElWSVNPUiA9IDI7XG5jb25zdCBIRVhfUkFESVggPSAxNjtcbmNvbnN0IEhFWF9CWVRFX0xFTkdUSCA9IDI7XG5jb25zdCBKT1VSTkFMX1NFR01FTlRfUkVHX0VYUCA9IC9cXC9sb2ctXFxkK1xcLig/Om1kfGpzb24pJC87XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHNoYXJlZC1zdG9yZSB2YXVsdCB0cmFuc3BvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlVHJhbnNwb3J0Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVmF1bHQgYWRhcHRlcjsgbm8gZGVza3RvcCBmaWxlc3lzdGVtIEFQSXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBhZGFwdGVyOiBEYXRhQWRhcHRlcjtcbiAgLyoqXG4gICAqIFZhdWx0LXJlbGF0aXZlIGZvbGRlci4gSGlkZGVuIHNlZ21lbnRzIGFyZSBhbGxvd2VkOyBjYWxsZXJzIG11c3QgYXJyYW5nZSB0aGVpciBzeW5jaHJvbml6YXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnUGx1Z2luIGRhdGEnYFxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogRG9jdW1lbnQgZW5jb2RpbmcuIEpTT04gcmVxdWlyZXMgYSBzeW5jIHRvb2wgY29uZmlndXJlZCB0byBjYXJyeSBhcmJpdHJhcnkgZmlsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnbWFya2Rvd24nYFxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0PzogJ2pzb24nIHwgJ21hcmtkb3duJztcbiAgLyoqXG4gICAqIE1heGltdW0gVVRGLTggYnl0ZXMgaW4gYW55IGZpbGUsIGluY2x1ZGluZyBpdHMgZW5jb2Rpbmcgd3JhcHBlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEwMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBtYXhGaWxlQnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIFVURi04IGJ5dGVzIGluIHRoZSByZWNvbnN0cnVjdGVkIHNuYXBzaG90LCBiZWZvcmUgSlNPTiBwYXJzaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjQwMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBtYXhTbmFwc2hvdEJ5dGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogUGx1Z2luIG1hbmlmZXN0IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFN0b3JlIG5hbWUgaW5jbHVkaW5nIGl0cyBjb25zdW1lciBzY2hlbWEgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBwdWJsaXNoaW5nIGEgY2h1bmtlZCBzbmFwc2hvdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVUcmFuc3BvcnRXcml0ZVNuYXBzaG90UGFyYW1zIHtcbiAgLyoqXG4gICAqIFZhdWx0LXJlbGF0aXZlIGJhc2UgcGF0aCB3aXRob3V0IGl0cyBleHRlbnNpb24uIFVzZSBhIGZyZXNoIHVuaXF1ZSBuYW1lIGZvciBldmVyeSBwdWJsaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2U6IHN0cmluZztcbiAgLyoqXG4gICAqIEpTT04tY29tcGF0aWJsZSBzbmFwc2hvdCwgaW5jbHVkaW5nIGl0cyBjb25zdW1lciBzY2hlbWEgYW5kIGNvdmVyYWdlIG1ldGFkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBBIHN0b3JlLXNjb3BlZCB0cmFuc3BvcnQuIEV2ZXJ5IHB1Ymxpc2hlZCBkb2N1bWVudCBpcyBpbW11dGFibGUgZXhjZXB0IGRldmljZSBhY2tub3dsZWRnZW1lbnRzIGFuZCBhcHBlbmQtb25seVxuICogam91cm5hbCBzZWdtZW50cywgd2hpY2ggb25seSB0aGVpciBvd24gZGV2aWNlIHJld3JpdGVzIGFuZCBvbmx5IGJ5IGV4dGVuZGluZyB0aGVtLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlVHJhbnNwb3J0IHtcbiAgLyoqXG4gIEZpbGUgZXh0ZW5zaW9uIGZvciBuZXcgZG9jdW1lbnRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogTWF4aW11bSBlbmNvZGVkIGJ5dGVzIHBlciBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXhGaWxlQnl0ZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEZ1bGwgdmF1bHQtcmVsYXRpdmUgc3RvcmUgcm9vdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYXVsdCBhZGFwdGVyIHVzZWQgYnkgdGhpcyB0cmFuc3BvcnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRhcHRlcjogRGF0YUFkYXB0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U25hcHNob3RCeXRlczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYm91bmRlZCB2YXVsdCB0cmFuc3BvcnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBBZGFwdGVyLCBpZGVudGl0eSBhbmQgZmlsZSBib3VuZHMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBhcmFtczogRGF0YVN0b3JlVHJhbnNwb3J0Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFkYXB0ZXIgPSBwYXJhbXMuYWRhcHRlcjtcbiAgICB0aGlzLmV4dGVuc2lvbiA9IHBhcmFtcy5mb3JtYXQgPT09ICdqc29uJyA/ICcuanNvbicgOiAnLm1kJztcbiAgICBjb25zdCBmb2xkZXIgPSBwYXJhbXMuZm9sZGVyID8/ICdQbHVnaW4gZGF0YSc7XG4gICAgaWYgKFxuICAgICAgIWlzU2FmZVZhdWx0UGF0aChmb2xkZXIpXG4gICAgICB8fCAhL15bXFx3LV0rJC8udGVzdChwYXJhbXMucGx1Z2luSWQpIHx8ICEvXltcXHctXSskLy50ZXN0KHBhcmFtcy5zdG9yZUlkKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIHN0b3JlIHJlcXVpcmVzIGEgc2FmZSB2YXVsdC1yZWxhdGl2ZSBmb2xkZXIgYW5kIHNhZmUgcGx1Z2luL3N0b3JlIGlkcycpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QgPSBgJHtmb2xkZXJ9LyR7cGFyYW1zLnBsdWdpbklkfS8ke3BhcmFtcy5zdG9yZUlkfWA7XG4gICAgdGhpcy5tYXhGaWxlQnl0ZXMgPSBwYXJhbXMubWF4RmlsZUJ5dGVzID8/IERFRkFVTFRfTUFYX0ZJTEVfQllURVM7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih0aGlzLm1heEZpbGVCeXRlcykgfHwgdGhpcy5tYXhGaWxlQnl0ZXMgPCBNSU5fRklMRV9CWVRFUyB8fCB0aGlzLm1heEZpbGVCeXRlcyA+IE1BWF9GSUxFX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEtc3RvcmUgZmlsZSBsaW1pdCBtdXN0IGJlIGJldHdlZW4gMjU2IGFuZCA0MDAwMDAwIGJ5dGVzJyk7XG4gICAgfVxuICAgIHRoaXMubWF4U25hcHNob3RCeXRlcyA9IHBhcmFtcy5tYXhTbmFwc2hvdEJ5dGVzID8/IE1BWF9TTkFQU0hPVF9CWVRFUztcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHRoaXMubWF4U25hcHNob3RCeXRlcykgfHwgdGhpcy5tYXhTbmFwc2hvdEJ5dGVzIDwgTUlOX0ZJTEVfQllURVMgfHwgdGhpcy5tYXhTbmFwc2hvdEJ5dGVzID4gTUFYX1NOQVBTSE9UX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEtc3RvcmUgc25hcHNob3QgbGltaXQgbXVzdCBiZSBiZXR3ZWVuIDI1NiBhbmQgNjQwMDAwMDAgYnl0ZXMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIGhpc3RvcnkgYnl0ZSBmb3IgYnl0ZSwgcHJlc2VydmluZyBzb3VyY2UgZmlsZXMgYW5kIHJlZnVzaW5nIGNvbmZsaWN0aW5nIGltbXV0YWJsZSBkZXN0aW5hdGlvbnMuXG4gICAqIEFja25vd2xlZGdlbWVudHMgYXJlIGxvY2FsIHRvIGVhY2ggbG9jYXRpb24gYW5kIGFyZSBub3QgY29waWVkLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gRGVzdGluYXRpb24gZm9yIHRoaXMgc2FtZSBwbHVnaW4gYW5kIHN0b3JlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBldmVyeSBjb3BpZWQgZmlsZSBoYXMgYmVlbiB2ZXJpZmllZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb3B5SGlzdG9yeVRvKHRhcmdldDogRGF0YVN0b3JlVHJhbnNwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucGFyYW1zLnBsdWdpbklkICE9PSB0YXJnZXQucGFyYW1zLnBsdWdpbklkIHx8IHRoaXMucGFyYW1zLnN0b3JlSWQgIT09IHRhcmdldC5wYXJhbXMuc3RvcmVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29weSBkYXRhLXN0b3JlIGhpc3RvcnkgdG8gYSBkaWZmZXJlbnQgc3RvcmUnKTtcbiAgICB9XG4gICAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICBjb25zdCBmaWxlcyA9IGFsbEZpbGVzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKGAke3RoaXMucm9vdH0vZGV2aWNlcy9gKSk7XG4gICAgY29uc3QgY29tcGxldGUgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmIChKT1VSTkFMX1NFR01FTlRfUkVHX0VYUC50ZXN0KHBhdGgpICYmIGF3YWl0IHRoaXMucmVhZChwYXRoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBsZXRlLmFkZChwYXRoKTtcbiAgICAgIH1cbiAgICAgIGlmICghL1xcL3NuYXBzaG90LVtcXHctXSstbWFuaWZlc3RcXC4oPzptZHxqc29uKSQvLnRlc3QocGF0aCkgfHwgYXdhaXQgdGhpcy5yZWFkU25hcHNob3QocGF0aCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhdGguZW5kc1dpdGgoJy5qc29uJykgPyAnLmpzb24nIDogJy5tZCc7XG4gICAgICBjb25zdCBiYXNlID0gcGF0aC5zbGljZSgwLCAtZXh0ZW5zaW9uLmxlbmd0aCk7XG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChjaHVuay5zdGFydHNXaXRoKGAke2Jhc2V9LWApICYmIGNodW5rLmVuZHNXaXRoKGV4dGVuc2lvbikpIHtcbiAgICAgICAgICBjb21wbGV0ZS5hZGQoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wbGV0ZS5hZGQocGF0aCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBjb21wbGV0ZSkge1xuICAgICAgdGhpcy5jaGVja1BhdGgocGF0aCk7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgICB0aGlzLmNoZWNrU2l6ZSh0ZXh0KTtcbiAgICAgIHRhcmdldC5jaGVja1NpemUodGV4dCk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHRhcmdldC5yb290ICsgcGF0aC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoKTtcbiAgICAgIHRhcmdldC5jaGVja1BhdGgoZGVzdGluYXRpb24pO1xuICAgICAgaWYgKGF3YWl0IHRhcmdldC5hZGFwdGVyLmV4aXN0cyhkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRhcmdldC5hZGFwdGVyLnJlYWQoZGVzdGluYXRpb24pICE9PSB0ZXh0ICYmICFhd2FpdCB0aGlzLmNvcHlPdmVyRGlmZmVyZW50SGlzdG9yeSh0YXJnZXQsIHBhdGgsIGRlc3RpbmF0aW9uLCB0ZXh0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0YXJnZXQuZW5zdXJlUGFyZW50KGRlc3RpbmF0aW9uKTtcbiAgICAgICAgYXdhaXQgdGFyZ2V0LmFkYXB0ZXIud3JpdGUoZGVzdGluYXRpb24sIHRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRhcmdldC5hZGFwdGVyLnJlYWQoZGVzdGluYXRpb24pICE9PSB0ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS1zdG9yZSBoaXN0b3J5IGNvcHkgZmFpbGVkIHZlcmlmaWNhdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyB0aGUgY29tcGxldGUgZW5jb2RlZCBzaXplIHdpdGhvdXQgd3JpdGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gSlNPTiBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGl0cyBkb2N1bWVudCBmaXRzIHRoZSBjb25maWd1cmVkIGNhcC5cbiAgICovXG4gIHB1YmxpYyBmaXRzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZSh2YWx1ZSkgPD0gdGhpcy5tYXhGaWxlQnl0ZXM7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgdGhlIHN0b3JlJ3MgZmlsZXMgcmVjdXJzaXZlbHksIG5ldmVyIGxlYXZpbmcgaXRzIGZvbGRlci5cbiAgICpcbiAgICogQHJldHVybnMgVmF1bHQtcmVsYXRpdmUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmFkYXB0ZXIuZXhpc3RzKHRoaXMucm9vdCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IFt0aGlzLnJvb3RdO1xuICAgIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZvbGRlciA9IGVuc3VyZU5vbk51bGxhYmxlKHBlbmRpbmcuc2hpZnQoKSk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuYWRhcHRlci5saXN0KGZvbGRlcik7XG4gICAgICBmaWxlcy5wdXNoKC4uLmNoaWxkcmVuLmZpbGVzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKGAke2ZvbGRlcn0vYCkpKTtcbiAgICAgIHBlbmRpbmcucHVzaCguLi5jaGlsZHJlbi5mb2xkZXJzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKGAke2ZvbGRlcn0vYCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGVzLnNvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZWFzdXJlcyB0aGUgY29tcGxldGUgZW5jb2RlZCBzaXplIG9mIGEgbmV3IGRvY3VtZW50IHdpdGhvdXQgd3JpdGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gSlNPTiBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyBVVEYtOCBieXRlcywgZW5jb2Rpbmcgd3JhcHBlciBpbmNsdWRlZC5cbiAgICovXG4gIHB1YmxpYyBtZWFzdXJlKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHRoaXMuZW5jb2RlKHZhbHVlKSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGNvbXBsZXRlIGZlbmNlZCBNYXJrZG93biBKU09OIG9yIGEgdmVyc2lvbi1vbmUgSlNPTiBlbnZlbG9wZS4gUGFydGlhbCBkb2N1bWVudHMgcmVtYWluIHBlbmRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVmF1bHQtcmVsYXRpdmUgZmlsZSB3aXRoaW4gdGhpcyBzdG9yZS5cbiAgICogQHJldHVybnMgUGFyc2VkIEpTT04sIG9yIGB1bmRlZmluZWRgIGZvciBhbiBpbmNvbXBsZXRlIGRvY3VtZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWQocGF0aDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgdGhpcy5jaGVja1BhdGgocGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgdGV4dDogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tTaXplKHRleHQpO1xuICAgIGlmIChwYXRoLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICBsZXQgZG9jdW1lbnQ6IHVua25vd247XG4gICAgICB0cnkge1xuICAgICAgICBkb2N1bWVudCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnIHx8IGRvY3VtZW50ID09PSBudWxsIHx8ICEoJ2Zvcm1hdCcgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmZvcm1hdCAhPT0gMSB8fCAhKCdwYXlsb2FkJyBpbiBkb2N1bWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04gZGF0YS1zdG9yZSBkb2N1bWVudCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnBheWxvYWQ7XG4gICAgfVxuICAgIGlmICghdGV4dC5zdGFydHNXaXRoKERPQ1VNRU5UX1BSRUZJWCkgfHwgIXRleHQuZW5kc1dpdGgoRE9DVU1FTlRfU1VGRklYKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZSh0ZXh0LnNsaWNlKERPQ1VNRU5UX1BSRUZJWC5sZW5ndGgsIC1ET0NVTUVOVF9TVUZGSVgubGVuZ3RoKSk7XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHNuYXBzaG90IG9ubHkgYWZ0ZXIgZXZlcnkgbnVtYmVyZWQgY2h1bmsgYXJyaXZlcyBhbmQgcGFzc2VzIGl0cyBTSEEtMjU2IGNoZWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFZhdWx0LXJlbGF0aXZlIG1hbmlmZXN0IHBhdGguXG4gICAqIEByZXR1cm5zIEl0cyBwYXlsb2FkLCBvciBgdW5kZWZpbmVkYCB3aGlsZSBkZWxpdmVyeSBpcyBpbmNvbXBsZXRlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWRTbmFwc2hvdChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMucmVhZChwYXRoKTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbWFuaWZlc3QgIT09ICdvYmplY3QnIHx8IG1hbmlmZXN0ID09PSBudWxsIHx8ICEoJ2Zvcm1hdCcgaW4gbWFuaWZlc3QpIHx8IG1hbmlmZXN0LmZvcm1hdCAhPT0gMVxuICAgICAgfHwgISgnaGFzaGVzJyBpbiBtYW5pZmVzdCkgfHwgIUFycmF5LmlzQXJyYXkobWFuaWZlc3QuaGFzaGVzKVxuICAgICAgfHwgbWFuaWZlc3QuaGFzaGVzLmxlbmd0aCA9PT0gMCB8fCBtYW5pZmVzdC5oYXNoZXMuc29tZSgoaGFzaDogdW5rbm93bikgPT4gdHlwZW9mIGhhc2ggIT09ICdzdHJpbmcnKVxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBieXRlcyA9IDA7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGhhc2hdIG9mIG1hbmlmZXN0Lmhhc2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhdGguZW5kc1dpdGgoJy5qc29uJykgPyAnLmpzb24nIDogJy5tZCc7XG4gICAgICBjb25zdCBjaHVuayA9IGF3YWl0IHRoaXMucmVhZChgJHtwYXRoLnNsaWNlKDAsIC1leHRlbnNpb24ubGVuZ3RoKX0tJHtTdHJpbmcoaW5kZXgpfSR7ZXh0ZW5zaW9ufWApO1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgfHwgYXdhaXQgZGlnZXN0KGNodW5rKSAhPT0gaGFzaCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYnl0ZXMgKz0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGNodW5rKS5sZW5ndGg7XG4gICAgICBpZiAoYnl0ZXMgPiB0aGlzLm1heFNuYXBzaG90Qnl0ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhLXN0b3JlIHNuYXBzaG90IGV4Y2VlZHMgZGVjb2RlZCBieXRlIGxpbWl0Jyk7XG4gICAgICB9XG4gICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoY2h1bmtzLmpvaW4oJycpKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBkb2N1bWVudCBvd25lZCBieSB0aGUgY2FsbGVyJ3MgZGV2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFZhdWx0LXJlbGF0aXZlIGZpbGUgd2l0aGluIHRoaXMgc3RvcmUuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHJlbW92YWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hlY2tQYXRoKHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci5yZW1vdmUocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGEgY29tcGxldGUgZG9jdW1lbnQsIHJlZnVzaW5nIGFuIG92ZXJzaXplZCB3cml0ZSBiZWZvcmUgYWRhcHRlciBtdXRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBWYXVsdC1yZWxhdGl2ZSBmaWxlIHdpdGhpbiB0aGlzIHN0b3JlLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgcGF5bG9hZC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgYWRhcHRlciBmaW5pc2hlcyB3cml0aW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdyaXRlKHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNoZWNrUGF0aChwYXRoKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5lbmNvZGUodmFsdWUsIHBhdGguZW5kc1dpdGgoJy5qc29uJykpO1xuICAgIHRoaXMuY2hlY2tTaXplKHRleHQpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUGFyZW50KHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci53cml0ZShwYXRoLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYW4gYXBwZW5kLW9ubHkgZG9jdW1lbnQ6IGFuIG9jY3VwaWVkIHBhdGggaXMgcmV3cml0dGVuIG9ubHkgd2hlbiB0aGUgbmV3IGxpc3Qgc3RyaWN0bHkgZXh0ZW5kcyB0aGUgc3RvcmVkIG9uZS5cbiAgICogQSByZWFkZXIgdGhhdCBzZWVzIGFuIG9sZGVyIGNvcHkgc2VlcyBhIHByZWZpeCwgc28gaXQgYXBwbGllcyBmZXdlciBlbnRyaWVzIGFuZCBuZXZlciBhIGRpZmZlcmVudCBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVmF1bHQtcmVsYXRpdmUgZGVzdGluYXRpb24gd2l0aGluIHRoaXMgc3RvcmUuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBKU09OLWNvbXBhdGlibGUgZW50cmllczsgdGhlIHN0b3JlZCBlbnRyaWVzIG11c3QgYmUgdGhlaXIgcHJlZml4LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBwdWJsaWNhdGlvbiwgb3IgYXQgb25jZSB3aGVuIHRoZSBzdG9yZWQgbGlzdCBpcyBhbHJlYWR5IGlkZW50aWNhbC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB3cml0ZUFwcGVuZE9ubHkocGF0aDogc3RyaW5nLCB2YWx1ZXM6IHJlYWRvbmx5IHVua25vd25bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hlY2tQYXRoKHBhdGgpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLmVuY29kZSh2YWx1ZXMsIHBhdGguZW5kc1dpdGgoJy5qc29uJykpO1xuICAgIHRoaXMuY2hlY2tTaXplKHRleHQpO1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBhd2FpdCB0aGlzLnJlYWRTdG9yZWRMaXN0KHBhdGgpO1xuICAgICAgaWYgKHN0b3JlZCA9PT0gbnVsbCB8fCAhaXNMaXN0UHJlZml4KHN0b3JlZCwgdmFsdWVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0aW5nIGltbXV0YWJsZSBkYXRhLXN0b3JlIGRvY3VtZW50Jyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RvcmVkLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYXB0ZXIud3JpdGUocGF0aCwgdGV4dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlUGFyZW50KHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci53cml0ZShwYXRoLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYW4gaW1tdXRhYmxlIGRvY3VtZW50LCBhY2NlcHRpbmcgb25seSBieXRlLWlkZW50aWNhbCByZXRyaWVzIGF0IGFuIG9jY3VwaWVkIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVmF1bHQtcmVsYXRpdmUgZGVzdGluYXRpb24gd2l0aGluIHRoaXMgc3RvcmUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEpTT04tY29tcGF0aWJsZSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBwdWJsaWNhdGlvbiBvciBhbiBpZGVudGljYWwgcmV0cnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd3JpdGVJbW11dGFibGUocGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hlY2tQYXRoKHBhdGgpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLmVuY29kZSh2YWx1ZSwgcGF0aC5lbmRzV2l0aCgnLmpzb24nKSk7XG4gICAgdGhpcy5jaGVja1NpemUodGV4dCk7XG4gICAgaWYgKGF3YWl0IHRoaXMuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYXB0ZXIucmVhZChwYXRoKSAhPT0gdGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0aW5nIGltbXV0YWJsZSBkYXRhLXN0b3JlIGRvY3VtZW50Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlUGFyZW50KHBhdGgpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci53cml0ZShwYXRoLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYm91bmRlZCBpbW11dGFibGUgY2h1bmtzIGJlZm9yZSB0aGVpciBtYW5pZmVzdC4gUmVhZGVycyB2ZXJpZnkgZGVsaXZlcnkgY29tcGxldGVuZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVW5pcXVlIGJhc2UgcGF0aCBhbmQgc25hcHNob3QgcGF5bG9hZC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWFuaWZlc3QgaGFzIGJlZW4gcHVibGlzaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdyaXRlU25hcHNob3QocGFyYW1zOiBEYXRhU3RvcmVUcmFuc3BvcnRXcml0ZVNuYXBzaG90UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5wYXlsb2FkKTtcbiAgICBpZiAocGF5bG9hZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90IG11c3QgYmUgSlNPTi1jb21wYXRpYmxlJyk7XG4gICAgfVxuICAgIGlmIChuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocGF5bG9hZCkubGVuZ3RoID4gdGhpcy5tYXhTbmFwc2hvdEJ5dGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEtc3RvcmUgc25hcHNob3QgZXhjZWVkcyBkZWNvZGVkIGJ5dGUgbGltaXQnKTtcbiAgICB9XG4gICAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBwYXlsb2FkLmxlbmd0aCkge1xuICAgICAgbGV0IGxvdyA9IDE7XG4gICAgICBsZXQgaGlnaCA9IE1hdGgubWluKHBheWxvYWQubGVuZ3RoIC0gb2Zmc2V0LCB0aGlzLm1heEZpbGVCeXRlcyk7XG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwoKGxvdyArIGhpZ2gpIC8gQklTRUNUSU9OX0RJVklTT1IpO1xuICAgICAgICBpZiAodGhpcy5maXRzKHBheWxvYWQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBtaWRkbGUpKSkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2gocGF5bG9hZC5zbGljZShvZmZzZXQsIG9mZnNldCArIGxvdykpO1xuICAgICAgb2Zmc2V0ICs9IGxvdztcbiAgICB9XG4gICAgY29uc3QgaGFzaGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICBoYXNoZXMucHVzaChhd2FpdCBkaWdlc3QoY2h1bmspKTtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSB7IGZvcm1hdDogMSwgaGFzaGVzIH07XG4gICAgdGhpcy5jaGVja1NpemUodGhpcy5lbmNvZGUobWFuaWZlc3QpKTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGNodW5rcy5lbnRyaWVzKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGUoYCR7cGFyYW1zLmJhc2V9LSR7U3RyaW5nKGluZGV4KX0ke3RoaXMuZXh0ZW5zaW9ufWAsIGNodW5rKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy53cml0ZShgJHtwYXJhbXMuYmFzZX0ke3RoaXMuZXh0ZW5zaW9ufWAsIG1hbmlmZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tQYXRoKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKGAke3RoaXMucm9vdH0vYCkgfHwgIWlzU2FmZVZhdWx0UGF0aChwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhLXN0b3JlIHBhdGggbGVhdmVzIGl0cyBjb25maWd1cmVkIGZvbGRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tTaXplKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNpemUgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodGV4dCkubGVuZ3RoO1xuICAgIGlmIChzaXplIDw9IHRoaXMubWF4RmlsZUJ5dGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgUGx1Z2luIGRhdGEgc3RvcmU6ICR7U3RyaW5nKHNpemUpfSBieXRlcyBleGNlZWRzIHRoZSAke1N0cmluZyh0aGlzLm1heEZpbGVCeXRlcyl9IGJ5dGUgZmlsZSBsaW1pdC5gO1xuICAgIG5ldyBOb3RpY2UobWVzc2FnZSk7XG4gICAgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcignRGF0YVN0b3JlJykobWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgYSBkZXN0aW5hdGlvbiB3aG9zZSBieXRlcyBkaWZmZXIgZnJvbSB0aGUgc291cmNlLiBPbmx5IGEgam91cm5hbCBzZWdtZW50IG1heSBkaWZmZXIsIGJlY2F1c2UgaXQgZ3Jvd3NcbiAgICogd2hpbGUgaXRzIGRldmljZSB3cml0ZXMgaXQsIHNvIGVpdGhlciBjb3B5IG1heSBiZSB0aGUgb2xkZXIgcHJlZml4IG9mIHRoZSBvdGhlcjsgYW55dGhpbmcgZWxzZSBpcyBhIGNvbmZsaWN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gRGVzdGluYXRpb24gdHJhbnNwb3J0LlxuICAgKiBAcGFyYW0gcGF0aCAtIFNvdXJjZSBwYXRoLlxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gLSBEZXN0aW5hdGlvbiBwYXRoLlxuICAgKiBAcGFyYW0gdGV4dCAtIFNvdXJjZSBieXRlcy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgc291cmNlIHdhcyB3cml0dGVuIG92ZXIgdGhlIGRlc3RpbmF0aW9uLCB3aGljaCBtdXN0IHRoZW4gYmUgdmVyaWZpZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvcHlPdmVyRGlmZmVyZW50SGlzdG9yeSh0YXJnZXQ6IERhdGFTdG9yZVRyYW5zcG9ydCwgcGF0aDogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBKT1VSTkFMX1NFR01FTlRfUkVHX0VYUC50ZXN0KHBhdGgpID8gYXdhaXQgdGhpcy5yZWFkU3RvcmVkTGlzdChwYXRoKSA6IG51bGw7XG4gICAgY29uc3QgY29waWVkID0gc291cmNlID09PSBudWxsID8gbnVsbCA6IGF3YWl0IHRhcmdldC5yZWFkU3RvcmVkTGlzdChkZXN0aW5hdGlvbik7XG4gICAgaWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBjb3BpZWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmxpY3RpbmcgaW1tdXRhYmxlIGRhdGEtc3RvcmUgaGlzdG9yeScpO1xuICAgIH1cbiAgICBpZiAoaXNMaXN0UHJlZml4KHNvdXJjZSwgY29waWVkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWlzTGlzdFByZWZpeChjb3BpZWQsIHNvdXJjZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmxpY3RpbmcgaW1tdXRhYmxlIGRhdGEtc3RvcmUgaGlzdG9yeScpO1xuICAgIH1cbiAgICBhd2FpdCB0YXJnZXQuYWRhcHRlci53cml0ZShkZXN0aW5hdGlvbiwgdGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGVuY29kZSh2YWx1ZTogdW5rbm93biwgaXNKc29uID0gdGhpcy5leHRlbnNpb24gPT09ICcuanNvbicpOiBzdHJpbmcge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgaWYgKGpzb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhLXN0b3JlIHBheWxvYWQgbXVzdCBiZSBKU09OLWNvbXBhdGlibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSnNvbiA/IEpTT04uc3RyaW5naWZ5KHsgZm9ybWF0OiAxLCBwYXlsb2FkOiB2YWx1ZSB9KSA6IGAke0RPQ1VNRU5UX1BSRUZJWH0ke2pzb259JHtET0NVTUVOVF9TVUZGSVh9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlUGFyZW50KHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgIHBhcnRzLnBvcCgpO1xuICAgIGxldCBmb2xkZXIgPSAnJztcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGZvbGRlciA9IGZvbGRlciA/IGAke2ZvbGRlcn0vJHtwYXJ0fWAgOiBwYXJ0O1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLmFkYXB0ZXIuZXhpc3RzKGZvbGRlcikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYXB0ZXIubWtkaXIoZm9sZGVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRhcHRlci5leGlzdHMoZm9sZGVyKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkU3RvcmVkTGlzdChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCB1bmtub3duW10+IHtcbiAgICBsZXQgdmFsdWU6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy5yZWFkKHBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogbnVsbDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaWdlc3QodGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGFzaCA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0ZXh0KSk7XG4gIHJldHVybiBbLi4ubmV3IFVpbnQ4QXJyYXkoaGFzaCldLm1hcCgoYnl0ZSkgPT4gYnl0ZS50b1N0cmluZyhIRVhfUkFESVgpLnBhZFN0YXJ0KEhFWF9CWVRFX0xFTkdUSCwgJzAnKSkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGlzTGlzdFByZWZpeChwcmVmaXg6IHJlYWRvbmx5IHVua25vd25bXSwgbGlzdDogcmVhZG9ubHkgdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcmVmaXgubGVuZ3RoIDw9IGxpc3QubGVuZ3RoICYmIHByZWZpeC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KGxpc3RbaW5kZXhdKSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FmZVZhdWx0UGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGguc3BsaXQoJy8nKS5ldmVyeSgocGFydCkgPT4gcGFydC5sZW5ndGggPiAwICYmIHBhcnQgIT09ICcuJyAmJiBwYXJ0ICE9PSAnLi4nICYmICEvWzw+OlwiXFxcXHw/KlxccHtDb250cm9sfV18Wy4gXSQvdS50ZXN0KHBhcnQpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHlCQUFrQztBQUNsQyxzQkFBdUI7QUFFdkIsbUJBQXVDO0FBRXZDLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0sWUFBWTtBQUNsQixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLDBCQUEwQjtBQThEekIsTUFBTSxtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF3QnZCLFlBQStCLFFBQTZDO0FBQTdDO0FBQ3BD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
|