obsidian-dev-utils 91.0.1 → 92.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/demo-vault-helper/main.js +65 -2
- package/dist/integration-test-plugin/main.js +171 -102
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +5 -0
- package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +49 -1
- package/dist/lib/cjs/obsidian/demo-vault-helper.d.cts +7 -2
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +22 -1
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +14 -0
- package/dist/lib/cjs/obsidian/vault.cjs +1 -1
- package/dist/lib/cjs/obsidian/vault.d.cts +3 -0
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +185 -4
- package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +106 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +12 -0
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +5 -0
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
- package/dist/lib/esm/obsidian/demo-vault-helper.d.mts +7 -2
- package/dist/lib/esm/obsidian/demo-vault-helper.mjs +53 -2
- package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +14 -0
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +22 -1
- package/dist/lib/esm/obsidian/vault.d.mts +3 -0
- package/dist/lib/esm/obsidian/vault.mjs +1 -1
- package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +106 -1
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +186 -4
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +12 -0
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +1 -1
- package/package.json +2 -2
|
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
const LIBRARY_VERSION = "
|
|
24
|
+
const LIBRARY_VERSION = "92.1.0";
|
|
25
25
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-dev-utils.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-dev-utils.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-dev-utils.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-dev-utils.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACCJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
26
26
|
export {
|
|
27
27
|
LIBRARY_STYLES,
|
|
@@ -112,6 +112,11 @@ export type PatchHandlerFunction<$Object extends object, MethodName extends Meth
|
|
|
112
112
|
* @typeParam MethodName - The method name being patched.
|
|
113
113
|
*/
|
|
114
114
|
export interface PatchHandlerParams<$Object extends object, MethodName extends MethodKeys<$Object>> {
|
|
115
|
+
/**
|
|
116
|
+
* Invokes the original method with the original `this` and arguments.
|
|
117
|
+
*
|
|
118
|
+
* @returns Whatever the original method returns.
|
|
119
|
+
*/
|
|
115
120
|
fallback(this: void): ReturnType<ExtractFunction<$Object, MethodName>>;
|
|
116
121
|
/**
|
|
117
122
|
* The original arguments of the intercepted call, as a tuple.
|
|
@@ -120,4 +120,4 @@ export {
|
|
|
120
120
|
around,
|
|
121
121
|
hasPatchToken
|
|
122
122
|
};
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IENvbmRpdGlvbmFsS2V5czwkT2JqZWN0LCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgJE9iamVjdDtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGEgcGxhaW4gZnVuY3Rpb24gKGEgXCJyZWFsIG1ldGhvZFwiKS4gRnVuY3Rpb24tbGlrZSBvYmplY3RzIHRoYXQgY2FycnkgZXh0cmEgbWVtYmVycyBhcmVcbiAqIGV4Y2x1ZGVkIFx1MjAxNCBlLmcuIGEgYERlYm91bmNlcmAgKHdoaWNoIGFkZHMgYGNhbmNlbGAvYHJ1bmApIGJlbG9uZ3MgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LFxuICogbm90IHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uIFRoZSBjaGVjayBpcyB3aGV0aGVyIHRoZSBtZW1iZXIgaGFzIGFueSBvd24ga2V5cyBiZXlvbmQgYSBiYXJlXG4gKiBmdW5jdGlvbidzIChgRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+YCBpcyBgbmV2ZXJgKS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIGtleXMgYXJlIGZpbHRlcmVkLlxuICovXG5leHBvcnQgdHlwZSBNZXRob2RLZXlzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gTWV0aG9kS2V5c01hcDwkT2JqZWN0PltGdW5jdGlvbktleXM8JE9iamVjdD5dO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJGdW5jdGlvblBhdGNofS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgRnVuY3Rpb25OYW1lIGV4dGVuZHMgRnVuY3Rpb25LZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgJG9iamVjdDogJE9iamVjdDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uTmFtZTtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwYXRjaCB1bmluc3RhbGxzIGl0c2VsZiB0aGUgZmlyc3QgdGltZSB0aGUgcGF0Y2hlZCBmdW5jdGlvbiBpcyBpbnZva2VkIChieVxuICAgKiB1bmxvYWRpbmcgdGhpcyBjb21wb25lbnQpLCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLlxuICAgKiBJbnRlbmRlZCBmb3IgYSBjb21wb25lbnQgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHBhdGNoLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIHJldHVybnMgdGhlIHBhdGNoZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbFZhbHVlIC0gVGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgVGhlIHBhdGNoZWQgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcGF0Y2hIYW5kbGVyKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSk6ICRPYmplY3RbRnVuY3Rpb25OYW1lXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6ICRPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IE1ldGhvZE5hbWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcGF0Y2ggdW5pbnN0YWxscyBpdHNlbGYgdGhlIGZpcnN0IHRpbWUgdGhlIHBhdGNoZWQgbWV0aG9kIGlzIGludm9rZWQsIHJlc3RvcmluZ1xuICAgKiB0aGUgb3JpZ2luYWwgXHUyMDE0IHNvIHRoZSBpbnRlcmNlcHRpb24gaGFwcGVucyBleGFjdGx5IG9uY2UuIEV4aXN0aW5nIGNhbGxlcnMgdGhhdCBvbWl0IGl0IGFyZVxuICAgKiB1bmFmZmVjdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBvbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGNoIGhhbmRsZXIgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBwYXRjaEhhbmRsZXI6IFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0byBpZGVudGlmeSB0aGUgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwYXRjaFRva2VuPzogc3ltYm9sO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBwb3N0LXBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBydW5zIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdFBhdGNoSGFuZGxlcj86IFBvc3RQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcbn1cblxuLyoqXG4gKiBBIHBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBpbnRlcmNlcHRzIGNhbGxzIHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0Y2hIYW5kbGVyRnVuY3Rpb248JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+ID0gKFxuICBwYXJhbXM6IFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0LCBNZXRob2ROYW1lPlxuKSA9PiBSZXR1cm5UeXBlPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUGF0Y2hIYW5kbGVyRnVuY3Rpb259IGNhbGxiYWNrLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICBmYWxsYmFjayh0aGlzOiB2b2lkKTogUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnRzIG9mIHRoZSBpbnRlcmNlcHRlZCBjYWxsLCBhcyBhIHR1cGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxBcmd1bWVudHM6IFBhcmFtZXRlcnM8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsICh1bnBhdGNoZWQpIG1ldGhvZC4gQ2FsbCB2aWEgYG9yaWdpbmFsRm4uY2FsbChvcmlnaW5hbFRoaXMsIC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIG1ldGhvZCwgYnV0IHdpdGggdGhlIGB0aGlzYCBjb250ZXh0IGFscmVhZHkgYm91bmQgdG8gdGhlIG9yaWdpbmFsIG9iamVjdC4gQ2FsbCB2aWEgYG9yaWdpbmFsTWV0aG9kQm91bmQoLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZEJvdW5kOiBPbWl0VGhpc1BhcmFtZXRlcjxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYHRoaXNgIGNvbnRleHQgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbFRoaXM6ICRPYmplY3Q7XG59XG5cbi8qKlxuICogQSBwb3N0LXBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBydW5zIGFmdGVyIGEgcGF0Y2ggaXMgYXBwbGllZC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUG9zdFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiA9IChcbiAgcGFyYW1zOiBQb3N0UGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QsIE1ldGhvZE5hbWU+XG4pID0+IE1heWJlUmV0dXJuPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUG9zdFBhdGNoSGFuZGxlckZ1bmN0aW9ufSBjYWxsYmFjay5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3N0UGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0Y2hlZCBtZXRob2QuXG4gICAqL1xuICByZWFkb25seSBwYXRjaGVkTWV0aG9kOiBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG59XG5cbnR5cGUgRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiA9IEdlbmVyaWNGdW5jdGlvbjxQYXJhbWV0ZXJzPEV4dHJhY3Q8JE9iamVjdFtNZXRob2ROYW1lXSwgR2VuZXJpY0Z1bmN0aW9uPj4sIFJldHVyblR5cGU8RXh0cmFjdDwkT2JqZWN0W01ldGhvZE5hbWVdLCBHZW5lcmljRnVuY3Rpb24+Pj47XG5cbnR5cGUgRnVsbEZhY3RvcmllczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0tleSBpbiBrZXlvZiAkT2JqZWN0XTogKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbS2V5XSkgPT4gJE9iamVjdFtLZXldO1xufTtcblxudHlwZSBNZXRob2RLZXlzTWFwPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbS2V5IGluIEZ1bmN0aW9uS2V5czwkT2JqZWN0Pl06IFtFeGNsdWRlPGtleW9mIE5vbk51bGxhYmxlPCRPYmplY3RbS2V5XT4sIGtleW9mIEdlbmVyaWNGdW5jdGlvbj5dIGV4dGVuZHMgW25ldmVyXSA/IEtleSA6IG5ldmVyO1xufTtcblxudHlwZSBPcmlnaW5hbEZhY3RvcmllczwkT2JqZWN0IGV4dGVuZHMgR2VuZXJpY09iamVjdD4gPSBQYXJhbWV0ZXJzPHR5cGVvZiBvcmlnaW5hbEFyb3VuZDwkT2JqZWN0Pj5bMV07XG5cbnR5cGUgVW5pbnN0YWxsZXIgPSAoKSA9PiB2b2lkO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFuYWdlcyBtb25rZXktcGF0Y2hlcyB3aXRoIGxpZmVjeWNsZS1ib3VuZCBjbGVhbnVwLlxuICogQWxsIHBhdGNoZXMgcmVnaXN0ZXJlZCB2aWEgdGhpcyBjb21wb25lbnQgYXJlIGF1dG9tYXRpY2FsbHkgdW5pbnN0YWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25rZXlBcm91bmRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBwYXRjaCBmb3IgYSBzaW5nbGUgZnVuY3Rpb24tbGlrZSBtZW1iZXIgKGEgbWV0aG9kLCBvciBhIGNhbGxhYmxlIHN1Y2ggYXMgYSBgRGVib3VuY2VyYCkgdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEB0eXBlUGFyYW0gRnVuY3Rpb25OYW1lIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBvZiB0aGUgcGF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGdW5jdGlvblBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uTmFtZSBleHRlbmRzIEZ1bmN0aW9uS2V5czwkT2JqZWN0Pj4oXG4gICAgcGFyYW1zOiBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8JE9iamVjdCwgRnVuY3Rpb25OYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgZmFjdG9yaWVzOiBGYWN0b3JpZXM8JE9iamVjdD4gPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1pbW1lZGlhdGUtbXV0YXRpb24gLS0gQSBjb21wdXRlZCBrZXkgaW4gYW4gb2JqZWN0IGxpdGVyYWwgZG9lcyBub3QgbWF0Y2ggYFBhcnRpYWw8RnVsbEZhY3RvcmllczwkT2JqZWN0Pj5gIHdoZW4gdGhlIGtleSB0eXBlIGlzIGdlbmVyaWM7IGFzc2lnbmluZyBhZnRlciBkZWNsYXJhdGlvbiBrZWVwcyB0aGUgdGFyZ2V0IHR5cGUga25vd24uXG4gICAgZmFjdG9yaWVzW3BhcmFtcy5mdW5jdGlvbk5hbWVdID0gKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSk6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSA9PiB7XG4gICAgICBjb25zdCBwYXRjaGVkVmFsdWUgPSBwYXJhbXMucGF0Y2hIYW5kbGVyKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgaWYgKCFwYXJhbXMub25jZSkge1xuICAgICAgICByZXR1cm4gcGF0Y2hlZFZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBIGBvbmNlYCBwYXRjaCB1bmxvYWRzIHRoaXMgY29tcG9uZW50IGFmdGVyIHRoZSBmaXJzdCBpbnZvY2F0aW9uIFx1MjAxNCBydW5uaW5nIHRoZSByZWdpc3RlcmVkXG4gICAgICAvLyBVbmluc3RhbGxlciBhbmQgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbC4gYHVubG9hZENvbXBvbmVudGAgaXMgYW4gYXJyb3cgc28gaXQgY2FwdHVyZXMgdGhlXG4gICAgICAvLyBDb21wb25lbnQgYHRoaXNgOyB0aGUgbmVzdGVkIGBvbmNlUGF0Y2hlZFZhbHVlYCBtdXN0IGJlIGEgZnVuY3Rpb24gdG8gcmVjZWl2ZSB0aGUgY2FsbC10aW1lXG4gICAgICAvLyBgdGhpc2AuIE93biBtZW1iZXJzIChlLmcuIGEgYERlYm91bmNlcmAncyBgY2FuY2VsYC9gcnVuYCkgYXJlIGNvcGllZCBvbnRvIGl0IHNvIGZ1bmN0aW9uLWxpa2VcbiAgICAgIC8vIFZhbHVlcyBrZWVwIHdvcmtpbmcuXG4gICAgICBjb25zdCB1bmxvYWRDb21wb25lbnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gb25jZVBhdGNoZWRWYWx1ZSh0aGlzOiB1bmtub3duLCAuLi4kYXJndW1lbnRzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShwYXRjaGVkVmFsdWUsIHRoaXMsICRhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHVubG9hZENvbXBvbmVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvbmNlUGF0Y2hlZFZhbHVlLCBwYXRjaGVkVmFsdWUpIGFzICRPYmplY3RbRnVuY3Rpb25OYW1lXTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWdpc3RlclBhdGNoKHBhcmFtcy4kb2JqZWN0LCBmYWN0b3JpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNpbmdsZS1tZXRob2QgcGF0Y2ggdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck1ldGhvZFBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIGNvbnN0IE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PihcbiAgICBwYXJhbXM6IE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyTWV0aG9kUGF0Y2hQYXJhbXM8JE9iamVjdCwgTWV0aG9kTmFtZT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGlmIChwYXJhbXMucGF0Y2hUb2tlbikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBwYXJhbXMuJG9iamVjdFtwYXJhbXMubWV0aG9kTmFtZV0gYXMgR2VuZXJpY0Z1bmN0aW9uO1xuICAgICAgZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpLnNldChvcmlnaW5hbE1ldGhvZCwgcGFyYW1zLnBhdGNoVG9rZW4pO1xuICAgIH1cblxuICAgIHR5cGUgJEZ1bmN0aW9uID0gRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uUGF0Y2goe1xuICAgICAgJG9iamVjdDogcGFyYW1zLiRvYmplY3QsXG4gICAgICBmdW5jdGlvbk5hbWU6IHBhcmFtcy5tZXRob2ROYW1lLFxuICAgICAgb25jZTogcGFyYW1zLm9uY2UgPz8gZmFsc2UsXG4gICAgICBwYXRjaEhhbmRsZXI6IChvcmlnaW5hbE1ldGhvZFJhdykgPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsTWV0aG9kUmF3IGFzICRGdW5jdGlvbjtcbiAgICAgICAgY29uc3QgZmluYWxQYXRjaGVkTWV0aG9kID0gcGFyYW1zLnBvc3RQYXRjaEhhbmRsZXI/Lih7XG4gICAgICAgICAgb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgcGF0Y2hlZE1ldGhvZFxuICAgICAgICB9KSA/PyBwYXRjaGVkTWV0aG9kO1xuICAgICAgICByZXR1cm4gZmluYWxQYXRjaGVkTWV0aG9kIGFzICRPYmplY3RbTWV0aG9kTmFtZV07XG5cbiAgICAgICAgZnVuY3Rpb24gcGF0Y2hlZE1ldGhvZCh0aGlzOiAkT2JqZWN0LCAuLi5vcmlnaW5hbEFyZ3VtZW50czogUGFyYW1ldGVyczwkRnVuY3Rpb24+KTogUmV0dXJuVHlwZTwkRnVuY3Rpb24+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnQgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGB0aGlzYCBjb250ZXh0LlxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGhpcyA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtcy5wYXRjaEhhbmRsZXIoe1xuICAgICAgICAgICAgZmFsbGJhY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmd1bWVudHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yaWdpbmFsQXJndW1lbnRzLFxuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZEJvdW5kOiBvcmlnaW5hbE1ldGhvZC5iaW5kKG9yaWdpbmFsVGhpcyksXG4gICAgICAgICAgICBvcmlnaW5hbFRoaXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHBhdGNoIHVzaW5nIHJhdyBmYWN0b3JpZXMgKGFkdmFuY2VkIEFQSSkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGNvbnN0IHVuaW5zdGFsbGVyID0gYXJvdW5kKCRvYmplY3QsIGZhY3Rvcmllcyk7XG4gICAgdGhpcy5yZWdpc3Rlcih1bmluc3RhbGxlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgcGF0Y2ggdG8gdGhlIG9iamVjdC5cbiAqIEJldHRlciBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIGBtb25rZXktYXJvdW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSB1bmluc3RhbGxlciB0aGF0IHJlbW92ZXMgdGhlIHBhdGNoIHdoZW4gY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJvdW5kPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogVW5pbnN0YWxsZXIge1xuICByZXR1cm4gb3JpZ2luYWxBcm91bmQoJG9iamVjdCBhcyBHZW5lcmljT2JqZWN0LCBmYWN0b3JpZXMgYXMgT3JpZ2luYWxGYWN0b3JpZXM8R2VuZXJpY09iamVjdD4pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZ1bmN0aW9uIGhhcyBhIHNwZWNpZmljIHBhdGNoIHRva2VuLlxuICpcbiAqIEBwYXJhbSAkZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcGFyYW0gcGF0Y2hUb2tlbiAtIFRoZSBwYXRjaCB0b2tlbiB0byBjaGVjayBmb3IuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgdGhlIHBhdGNoIHRva2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUGF0Y2hUb2tlbigkZnVuY3Rpb246IEdlbmVyaWNGdW5jdGlvbiwgcGF0Y2hUb2tlbjogc3ltYm9sKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCkuZ2V0KCRmdW5jdGlvbikgPT09IHBhdGNoVG9rZW47XG59XG5cbmZ1bmN0aW9uIGdldE1vbmtleUFyb3VuZFBhdGNoZXMoKTogV2Vha01hcDxHZW5lcmljRnVuY3Rpb24sIHN5bWJvbD4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdtb25rZXlBcm91bmRQYXRjaGVzJywgbmV3IFdlYWtNYXA8R2VuZXJpY0Z1bmN0aW9uLCBzeW1ib2w+KCkpLnZhbHVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLFVBQVUsc0JBQXNCO0FBTXpDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsbUJBQW1CO0FBK0xyQixNQUFNLDhCQUE4QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE5QyxzQkFDTCxRQUNNO0FBQ04sU0FBSyxhQUFhO0FBRWxCLFVBQU0sWUFBZ0MsQ0FBQztBQUV2QyxjQUFVLE9BQU8sWUFBWSxJQUFJLENBQUMsa0JBQWdFO0FBQ2hHLFlBQU0sZUFBZSxPQUFPLGFBQWEsYUFBYTtBQUN0RCxVQUFJLENBQUMsT0FBTyxNQUFNO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBT0EsWUFBTSxrQkFBa0IsTUFBWTtBQUNsQyxhQUFLLE9BQU87QUFBQSxNQUNkO0FBQ0EsZUFBUyxvQkFBbUMsWUFBZ0M7QUFDMUUsWUFBSTtBQUNGLGlCQUFPLFFBQVEsTUFBTSxjQUFjLE1BQU0sVUFBVTtBQUFBLFFBQ3JELFVBQUU7QUFDQSwwQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLE9BQU8sT0FBTyxrQkFBa0IsWUFBWTtBQUFBLElBQ3JEO0FBRUEsU0FBSyxjQUFjLE9BQU8sU0FBUyxTQUFTO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sb0JBQ0wsUUFDTTtBQUNOLFNBQUssYUFBYTtBQUVsQixRQUFJLE9BQU8sWUFBWTtBQUNyQixZQUFNLGlCQUFpQixPQUFPLFFBQVEsT0FBTyxVQUFVO0FBQ3ZELDZCQUF1QixFQUFFLElBQUksZ0JBQWdCLE9BQU8sVUFBVTtBQUFBLElBQ2hFO0FBSUEsU0FBSyxzQkFBc0I7QUFBQSxNQUN6QixTQUFTLE9BQU87QUFBQSxNQUNoQixjQUFjLE9BQU87QUFBQSxNQUNyQixNQUFNLE9BQU8sUUFBUTtBQUFBLE1BQ3JCLGNBQWMsQ0FBQyxzQkFBc0I7QUFDbkMsY0FBTSxpQkFBaUI7QUFDdkIsY0FBTSxxQkFBcUIsT0FBTyxtQkFBbUI7QUFBQSxVQUNuRDtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUMsS0FBSztBQUNOLGVBQU87QUFFUCxpQkFBUyxpQkFBZ0MsbUJBQWlFO0FBRXhHLGdCQUFNLGVBQWU7QUFDckIsaUJBQU8sT0FBTyxhQUFhO0FBQUEsWUFDekIsV0FBVztBQUNULHFCQUFPLGVBQWUsS0FBSyxjQUFjLEdBQUcsaUJBQWlCO0FBQUEsWUFDL0Q7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EscUJBQXFCLGVBQWUsS0FBSyxZQUFZO0FBQUEsWUFDckQ7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sY0FBc0MsU0FBa0IsV0FBcUM7QUFDbEcsU0FBSyxhQUFhO0FBRWxCLFVBQU0sY0FBYyxPQUFPLFNBQVMsU0FBUztBQUM3QyxTQUFLLFNBQVMsV0FBVztBQUFBLEVBQzNCO0FBQ0Y7QUFXTyxTQUFTLE9BQStCLFNBQWtCLFdBQTRDO0FBQzNHLFNBQU8sZUFBZSxTQUEwQixTQUE2QztBQUMvRjtBQVNPLFNBQVMsY0FBYyxXQUE0QixZQUE2QjtBQUNyRixTQUFPLHVCQUF1QixFQUFFLElBQUksU0FBUyxNQUFNO0FBQ3JEO0FBRUEsU0FBUyx5QkFBMkQ7QUFDbEUsU0FBTyx5QkFBeUIsdUJBQXVCLG9CQUFJLFFBQWlDLENBQUMsRUFBRTtBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSAkT2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yaWVzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gUGFydGlhbDxGdWxsRmFjdG9yaWVzPCRPYmplY3Q+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uS2V5czwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IENvbmRpdGlvbmFsS2V5czwkT2JqZWN0LCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgJE9iamVjdDtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGEgcGxhaW4gZnVuY3Rpb24gKGEgXCJyZWFsIG1ldGhvZFwiKS4gRnVuY3Rpb24tbGlrZSBvYmplY3RzIHRoYXQgY2FycnkgZXh0cmEgbWVtYmVycyBhcmVcbiAqIGV4Y2x1ZGVkIFx1MjAxNCBlLmcuIGEgYERlYm91bmNlcmAgKHdoaWNoIGFkZHMgYGNhbmNlbGAvYHJ1bmApIGJlbG9uZ3MgdG8ge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LFxuICogbm90IHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uIFRoZSBjaGVjayBpcyB3aGV0aGVyIHRoZSBtZW1iZXIgaGFzIGFueSBvd24ga2V5cyBiZXlvbmQgYSBiYXJlXG4gKiBmdW5jdGlvbidzIChgRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBHZW5lcmljRnVuY3Rpb24+YCBpcyBgbmV2ZXJgKS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIGtleXMgYXJlIGZpbHRlcmVkLlxuICovXG5leHBvcnQgdHlwZSBNZXRob2RLZXlzPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0gTWV0aG9kS2V5c01hcDwkT2JqZWN0PltGdW5jdGlvbktleXM8JE9iamVjdD5dO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJGdW5jdGlvblBhdGNofS5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8JE9iamVjdCBleHRlbmRzIG9iamVjdCwgRnVuY3Rpb25OYW1lIGV4dGVuZHMgRnVuY3Rpb25LZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgJG9iamVjdDogJE9iamVjdDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uTmFtZTtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwYXRjaCB1bmluc3RhbGxzIGl0c2VsZiB0aGUgZmlyc3QgdGltZSB0aGUgcGF0Y2hlZCBmdW5jdGlvbiBpcyBpbnZva2VkIChieVxuICAgKiB1bmxvYWRpbmcgdGhpcyBjb21wb25lbnQpLCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLlxuICAgKiBJbnRlbmRlZCBmb3IgYSBjb21wb25lbnQgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHBhdGNoLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIHJldHVybnMgdGhlIHBhdGNoZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbFZhbHVlIC0gVGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgVGhlIHBhdGNoZWQgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcGF0Y2hIYW5kbGVyKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSk6ICRPYmplY3RbRnVuY3Rpb25OYW1lXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6ICRPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IE1ldGhvZE5hbWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcGF0Y2ggdW5pbnN0YWxscyBpdHNlbGYgdGhlIGZpcnN0IHRpbWUgdGhlIHBhdGNoZWQgbWV0aG9kIGlzIGludm9rZWQsIHJlc3RvcmluZ1xuICAgKiB0aGUgb3JpZ2luYWwgXHUyMDE0IHNvIHRoZSBpbnRlcmNlcHRpb24gaGFwcGVucyBleGFjdGx5IG9uY2UuIEV4aXN0aW5nIGNhbGxlcnMgdGhhdCBvbWl0IGl0IGFyZVxuICAgKiB1bmFmZmVjdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBvbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGNoIGhhbmRsZXIgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBwYXRjaEhhbmRsZXI6IFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0byBpZGVudGlmeSB0aGUgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwYXRjaFRva2VuPzogc3ltYm9sO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBwb3N0LXBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBydW5zIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdFBhdGNoSGFuZGxlcj86IFBvc3RQYXRjaEhhbmRsZXJGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcbn1cblxuLyoqXG4gKiBBIHBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBpbnRlcmNlcHRzIGNhbGxzIHRvIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0Y2hIYW5kbGVyRnVuY3Rpb248JE9iamVjdCBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8JE9iamVjdD4+ID0gKFxuICBwYXJhbXM6IFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0LCBNZXRob2ROYW1lPlxuKSA9PiBSZXR1cm5UeXBlPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUGF0Y2hIYW5kbGVyRnVuY3Rpb259IGNhbGxiYWNrLlxuICpcbiAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdGNoSGFuZGxlclBhcmFtczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czwkT2JqZWN0Pj4ge1xuICAvKipcbiAgICogSW52b2tlcyB0aGUgb3JpZ2luYWwgbWV0aG9kIHdpdGggdGhlIG9yaWdpbmFsIGB0aGlzYCBhbmQgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGF0ZXZlciB0aGUgb3JpZ2luYWwgbWV0aG9kIHJldHVybnMuXG4gICAqL1xuICBmYWxsYmFjayh0aGlzOiB2b2lkKTogUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnRzIG9mIHRoZSBpbnRlcmNlcHRlZCBjYWxsLCBhcyBhIHR1cGxlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxBcmd1bWVudHM6IFBhcmFtZXRlcnM8RXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+PjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsICh1bnBhdGNoZWQpIG1ldGhvZC4gQ2FsbCB2aWEgYG9yaWdpbmFsRm4uY2FsbChvcmlnaW5hbFRoaXMsIC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIG1ldGhvZCwgYnV0IHdpdGggdGhlIGB0aGlzYCBjb250ZXh0IGFscmVhZHkgYm91bmQgdG8gdGhlIG9yaWdpbmFsIG9iamVjdC4gQ2FsbCB2aWEgYG9yaWdpbmFsTWV0aG9kQm91bmQoLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZEJvdW5kOiBPbWl0VGhpc1BhcmFtZXRlcjxFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYHRoaXNgIGNvbnRleHQgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbFRoaXM6ICRPYmplY3Q7XG59XG5cbi8qKlxuICogQSBwb3N0LXBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBydW5zIGFmdGVyIGEgcGF0Y2ggaXMgYXBwbGllZC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUG9zdFBhdGNoSGFuZGxlckZ1bmN0aW9uPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiA9IChcbiAgcGFyYW1zOiBQb3N0UGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QsIE1ldGhvZE5hbWU+XG4pID0+IE1heWJlUmV0dXJuPEV4dHJhY3RGdW5jdGlvbjwkT2JqZWN0LCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUG9zdFBhdGNoSGFuZGxlckZ1bmN0aW9ufSBjYWxsYmFjay5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IGJlaW5nIHBhdGNoZWQuXG4gKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgYmVpbmcgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3N0UGF0Y2hIYW5kbGVyUGFyYW1zPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiB7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0Y2hlZCBtZXRob2QuXG4gICAqL1xuICByZWFkb25seSBwYXRjaGVkTWV0aG9kOiBFeHRyYWN0RnVuY3Rpb248JE9iamVjdCwgTWV0aG9kTmFtZT47XG59XG5cbnR5cGUgRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PiA9IEdlbmVyaWNGdW5jdGlvbjxQYXJhbWV0ZXJzPEV4dHJhY3Q8JE9iamVjdFtNZXRob2ROYW1lXSwgR2VuZXJpY0Z1bmN0aW9uPj4sIFJldHVyblR5cGU8RXh0cmFjdDwkT2JqZWN0W01ldGhvZE5hbWVdLCBHZW5lcmljRnVuY3Rpb24+Pj47XG5cbnR5cGUgRnVsbEZhY3RvcmllczwkT2JqZWN0IGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0tleSBpbiBrZXlvZiAkT2JqZWN0XTogKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbS2V5XSkgPT4gJE9iamVjdFtLZXldO1xufTtcblxudHlwZSBNZXRob2RLZXlzTWFwPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbS2V5IGluIEZ1bmN0aW9uS2V5czwkT2JqZWN0Pl06IFtFeGNsdWRlPGtleW9mIE5vbk51bGxhYmxlPCRPYmplY3RbS2V5XT4sIGtleW9mIEdlbmVyaWNGdW5jdGlvbj5dIGV4dGVuZHMgW25ldmVyXSA/IEtleSA6IG5ldmVyO1xufTtcblxudHlwZSBPcmlnaW5hbEZhY3RvcmllczwkT2JqZWN0IGV4dGVuZHMgR2VuZXJpY09iamVjdD4gPSBQYXJhbWV0ZXJzPHR5cGVvZiBvcmlnaW5hbEFyb3VuZDwkT2JqZWN0Pj5bMV07XG5cbnR5cGUgVW5pbnN0YWxsZXIgPSAoKSA9PiB2b2lkO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFuYWdlcyBtb25rZXktcGF0Y2hlcyB3aXRoIGxpZmVjeWNsZS1ib3VuZCBjbGVhbnVwLlxuICogQWxsIHBhdGNoZXMgcmVnaXN0ZXJlZCB2aWEgdGhpcyBjb21wb25lbnQgYXJlIGF1dG9tYXRpY2FsbHkgdW5pbnN0YWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25rZXlBcm91bmRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBwYXRjaCBmb3IgYSBzaW5nbGUgZnVuY3Rpb24tbGlrZSBtZW1iZXIgKGEgbWV0aG9kLCBvciBhIGNhbGxhYmxlIHN1Y2ggYXMgYSBgRGVib3VuY2VyYCkgdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEB0eXBlUGFyYW0gRnVuY3Rpb25OYW1lIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBvZiB0aGUgcGF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGdW5jdGlvblBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uTmFtZSBleHRlbmRzIEZ1bmN0aW9uS2V5czwkT2JqZWN0Pj4oXG4gICAgcGFyYW1zOiBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8JE9iamVjdCwgRnVuY3Rpb25OYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgZmFjdG9yaWVzOiBGYWN0b3JpZXM8JE9iamVjdD4gPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1pbW1lZGlhdGUtbXV0YXRpb24gLS0gQSBjb21wdXRlZCBrZXkgaW4gYW4gb2JqZWN0IGxpdGVyYWwgZG9lcyBub3QgbWF0Y2ggYFBhcnRpYWw8RnVsbEZhY3RvcmllczwkT2JqZWN0Pj5gIHdoZW4gdGhlIGtleSB0eXBlIGlzIGdlbmVyaWM7IGFzc2lnbmluZyBhZnRlciBkZWNsYXJhdGlvbiBrZWVwcyB0aGUgdGFyZ2V0IHR5cGUga25vd24uXG4gICAgZmFjdG9yaWVzW3BhcmFtcy5mdW5jdGlvbk5hbWVdID0gKG9yaWdpbmFsVmFsdWU6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSk6ICRPYmplY3RbRnVuY3Rpb25OYW1lXSA9PiB7XG4gICAgICBjb25zdCBwYXRjaGVkVmFsdWUgPSBwYXJhbXMucGF0Y2hIYW5kbGVyKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgaWYgKCFwYXJhbXMub25jZSkge1xuICAgICAgICByZXR1cm4gcGF0Y2hlZFZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBIGBvbmNlYCBwYXRjaCB1bmxvYWRzIHRoaXMgY29tcG9uZW50IGFmdGVyIHRoZSBmaXJzdCBpbnZvY2F0aW9uIFx1MjAxNCBydW5uaW5nIHRoZSByZWdpc3RlcmVkXG4gICAgICAvLyBVbmluc3RhbGxlciBhbmQgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbC4gYHVubG9hZENvbXBvbmVudGAgaXMgYW4gYXJyb3cgc28gaXQgY2FwdHVyZXMgdGhlXG4gICAgICAvLyBDb21wb25lbnQgYHRoaXNgOyB0aGUgbmVzdGVkIGBvbmNlUGF0Y2hlZFZhbHVlYCBtdXN0IGJlIGEgZnVuY3Rpb24gdG8gcmVjZWl2ZSB0aGUgY2FsbC10aW1lXG4gICAgICAvLyBgdGhpc2AuIE93biBtZW1iZXJzIChlLmcuIGEgYERlYm91bmNlcmAncyBgY2FuY2VsYC9gcnVuYCkgYXJlIGNvcGllZCBvbnRvIGl0IHNvIGZ1bmN0aW9uLWxpa2VcbiAgICAgIC8vIFZhbHVlcyBrZWVwIHdvcmtpbmcuXG4gICAgICBjb25zdCB1bmxvYWRDb21wb25lbnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gb25jZVBhdGNoZWRWYWx1ZSh0aGlzOiB1bmtub3duLCAuLi4kYXJndW1lbnRzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShwYXRjaGVkVmFsdWUsIHRoaXMsICRhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHVubG9hZENvbXBvbmVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvbmNlUGF0Y2hlZFZhbHVlLCBwYXRjaGVkVmFsdWUpIGFzICRPYmplY3RbRnVuY3Rpb25OYW1lXTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWdpc3RlclBhdGNoKHBhcmFtcy4kb2JqZWN0LCBmYWN0b3JpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNpbmdsZS1tZXRob2QgcGF0Y2ggdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck1ldGhvZFBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIGNvbnN0IE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPCRPYmplY3Q+PihcbiAgICBwYXJhbXM6IE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyTWV0aG9kUGF0Y2hQYXJhbXM8JE9iamVjdCwgTWV0aG9kTmFtZT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGlmIChwYXJhbXMucGF0Y2hUb2tlbikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBwYXJhbXMuJG9iamVjdFtwYXJhbXMubWV0aG9kTmFtZV0gYXMgR2VuZXJpY0Z1bmN0aW9uO1xuICAgICAgZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpLnNldChvcmlnaW5hbE1ldGhvZCwgcGFyYW1zLnBhdGNoVG9rZW4pO1xuICAgIH1cblxuICAgIHR5cGUgJEZ1bmN0aW9uID0gRXh0cmFjdEZ1bmN0aW9uPCRPYmplY3QsIE1ldGhvZE5hbWU+O1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uUGF0Y2goe1xuICAgICAgJG9iamVjdDogcGFyYW1zLiRvYmplY3QsXG4gICAgICBmdW5jdGlvbk5hbWU6IHBhcmFtcy5tZXRob2ROYW1lLFxuICAgICAgb25jZTogcGFyYW1zLm9uY2UgPz8gZmFsc2UsXG4gICAgICBwYXRjaEhhbmRsZXI6IChvcmlnaW5hbE1ldGhvZFJhdykgPT4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsTWV0aG9kUmF3IGFzICRGdW5jdGlvbjtcbiAgICAgICAgY29uc3QgZmluYWxQYXRjaGVkTWV0aG9kID0gcGFyYW1zLnBvc3RQYXRjaEhhbmRsZXI/Lih7XG4gICAgICAgICAgb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgcGF0Y2hlZE1ldGhvZFxuICAgICAgICB9KSA/PyBwYXRjaGVkTWV0aG9kO1xuICAgICAgICByZXR1cm4gZmluYWxQYXRjaGVkTWV0aG9kIGFzICRPYmplY3RbTWV0aG9kTmFtZV07XG5cbiAgICAgICAgZnVuY3Rpb24gcGF0Y2hlZE1ldGhvZCh0aGlzOiAkT2JqZWN0LCAuLi5vcmlnaW5hbEFyZ3VtZW50czogUGFyYW1ldGVyczwkRnVuY3Rpb24+KTogUmV0dXJuVHlwZTwkRnVuY3Rpb24+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnQgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGB0aGlzYCBjb250ZXh0LlxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGhpcyA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtcy5wYXRjaEhhbmRsZXIoe1xuICAgICAgICAgICAgZmFsbGJhY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmd1bWVudHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yaWdpbmFsQXJndW1lbnRzLFxuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZEJvdW5kOiBvcmlnaW5hbE1ldGhvZC5iaW5kKG9yaWdpbmFsVGhpcyksXG4gICAgICAgICAgICBvcmlnaW5hbFRoaXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHBhdGNoIHVzaW5nIHJhdyBmYWN0b3JpZXMgKGFkdmFuY2VkIEFQSSkuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gJE9iamVjdCAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclBhdGNoPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVMb2FkZWQoKTtcblxuICAgIGNvbnN0IHVuaW5zdGFsbGVyID0gYXJvdW5kKCRvYmplY3QsIGZhY3Rvcmllcyk7XG4gICAgdGhpcy5yZWdpc3Rlcih1bmluc3RhbGxlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgcGF0Y2ggdG8gdGhlIG9iamVjdC5cbiAqIEJldHRlciBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIGBtb25rZXktYXJvdW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtICRPYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSB1bmluc3RhbGxlciB0aGF0IHJlbW92ZXMgdGhlIHBhdGNoIHdoZW4gY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJvdW5kPCRPYmplY3QgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6ICRPYmplY3QsIGZhY3RvcmllczogRmFjdG9yaWVzPCRPYmplY3Q+KTogVW5pbnN0YWxsZXIge1xuICByZXR1cm4gb3JpZ2luYWxBcm91bmQoJG9iamVjdCBhcyBHZW5lcmljT2JqZWN0LCBmYWN0b3JpZXMgYXMgT3JpZ2luYWxGYWN0b3JpZXM8R2VuZXJpY09iamVjdD4pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZ1bmN0aW9uIGhhcyBhIHNwZWNpZmljIHBhdGNoIHRva2VuLlxuICpcbiAqIEBwYXJhbSAkZnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcGFyYW0gcGF0Y2hUb2tlbiAtIFRoZSBwYXRjaCB0b2tlbiB0byBjaGVjayBmb3IuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgdGhlIHBhdGNoIHRva2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUGF0Y2hUb2tlbigkZnVuY3Rpb246IEdlbmVyaWNGdW5jdGlvbiwgcGF0Y2hUb2tlbjogc3ltYm9sKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCkuZ2V0KCRmdW5jdGlvbikgPT09IHBhdGNoVG9rZW47XG59XG5cbmZ1bmN0aW9uIGdldE1vbmtleUFyb3VuZFBhdGNoZXMoKTogV2Vha01hcDxHZW5lcmljRnVuY3Rpb24sIHN5bWJvbD4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdtb25rZXlBcm91bmRQYXRjaGVzJywgbmV3IFdlYWtNYXA8R2VuZXJpY0Z1bmN0aW9uLCBzeW1ib2w+KCkpLnZhbHVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLFVBQVUsc0JBQXNCO0FBTXpDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsbUJBQW1CO0FBb01yQixNQUFNLDhCQUE4QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE5QyxzQkFDTCxRQUNNO0FBQ04sU0FBSyxhQUFhO0FBRWxCLFVBQU0sWUFBZ0MsQ0FBQztBQUV2QyxjQUFVLE9BQU8sWUFBWSxJQUFJLENBQUMsa0JBQWdFO0FBQ2hHLFlBQU0sZUFBZSxPQUFPLGFBQWEsYUFBYTtBQUN0RCxVQUFJLENBQUMsT0FBTyxNQUFNO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBT0EsWUFBTSxrQkFBa0IsTUFBWTtBQUNsQyxhQUFLLE9BQU87QUFBQSxNQUNkO0FBQ0EsZUFBUyxvQkFBbUMsWUFBZ0M7QUFDMUUsWUFBSTtBQUNGLGlCQUFPLFFBQVEsTUFBTSxjQUFjLE1BQU0sVUFBVTtBQUFBLFFBQ3JELFVBQUU7QUFDQSwwQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLE9BQU8sT0FBTyxrQkFBa0IsWUFBWTtBQUFBLElBQ3JEO0FBRUEsU0FBSyxjQUFjLE9BQU8sU0FBUyxTQUFTO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sb0JBQ0wsUUFDTTtBQUNOLFNBQUssYUFBYTtBQUVsQixRQUFJLE9BQU8sWUFBWTtBQUNyQixZQUFNLGlCQUFpQixPQUFPLFFBQVEsT0FBTyxVQUFVO0FBQ3ZELDZCQUF1QixFQUFFLElBQUksZ0JBQWdCLE9BQU8sVUFBVTtBQUFBLElBQ2hFO0FBSUEsU0FBSyxzQkFBc0I7QUFBQSxNQUN6QixTQUFTLE9BQU87QUFBQSxNQUNoQixjQUFjLE9BQU87QUFBQSxNQUNyQixNQUFNLE9BQU8sUUFBUTtBQUFBLE1BQ3JCLGNBQWMsQ0FBQyxzQkFBc0I7QUFDbkMsY0FBTSxpQkFBaUI7QUFDdkIsY0FBTSxxQkFBcUIsT0FBTyxtQkFBbUI7QUFBQSxVQUNuRDtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUMsS0FBSztBQUNOLGVBQU87QUFFUCxpQkFBUyxpQkFBZ0MsbUJBQWlFO0FBRXhHLGdCQUFNLGVBQWU7QUFDckIsaUJBQU8sT0FBTyxhQUFhO0FBQUEsWUFDekIsV0FBVztBQUNULHFCQUFPLGVBQWUsS0FBSyxjQUFjLEdBQUcsaUJBQWlCO0FBQUEsWUFDL0Q7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EscUJBQXFCLGVBQWUsS0FBSyxZQUFZO0FBQUEsWUFDckQ7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sY0FBc0MsU0FBa0IsV0FBcUM7QUFDbEcsU0FBSyxhQUFhO0FBRWxCLFVBQU0sY0FBYyxPQUFPLFNBQVMsU0FBUztBQUM3QyxTQUFLLFNBQVMsV0FBVztBQUFBLEVBQzNCO0FBQ0Y7QUFXTyxTQUFTLE9BQStCLFNBQWtCLFdBQTRDO0FBQzNHLFNBQU8sZUFBZSxTQUEwQixTQUE2QztBQUMvRjtBQVNPLFNBQVMsY0FBYyxXQUE0QixZQUE2QjtBQUNyRixTQUFPLHVCQUF1QixFQUFFLElBQUksU0FBUyxNQUFNO0FBQ3JEO0FBRUEsU0FBUyx5QkFBMkQ7QUFDbEUsU0FBTyx5QkFBeUIsdUJBQXVCLG9CQUFJLFFBQWlDLENBQUMsRUFBRTtBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
* It also creates CodeScript Toolkit's invocable-scripts folder if it is missing, so every demo vault
|
|
19
19
|
* has the same layout even when the vault ships no invocable scripts — the vaults themselves commit no
|
|
20
20
|
* empty folder for it.
|
|
21
|
+
*
|
|
22
|
+
* Finally it raises the sandbox notice explaining that the opened vault is a throwaway copy, so a user
|
|
23
|
+
* who writes their own notes in it is never surprised by them being absent from the next copy.
|
|
21
24
|
*/
|
|
22
25
|
import type { App } from 'obsidian';
|
|
23
26
|
/**
|
|
@@ -36,9 +39,11 @@ export interface BootstrapDemoVaultParams {
|
|
|
36
39
|
* reload. If CodeScript Toolkit is already enabled but the settings just changed, it is reloaded
|
|
37
40
|
* (disabled then enabled) so it re-reads `data.json`; when the settings were already in place, nothing is
|
|
38
41
|
* reloaded (so a routine vault re-open does not re-run CodeScript Toolkit's startup). CodeScript Toolkit
|
|
39
|
-
* then runs the vault's `startup.ts`.
|
|
42
|
+
* then runs the vault's `startup.ts`. Finally it raises the sandbox notice describing the opened vault
|
|
43
|
+
* as a throwaway copy.
|
|
40
44
|
*
|
|
41
45
|
* @param params - The {@link BootstrapDemoVaultParams}.
|
|
42
|
-
* @returns A {@link Promise} that resolves once CodeScript Toolkit is installed, configured, and enabled
|
|
46
|
+
* @returns A {@link Promise} that resolves once CodeScript Toolkit is installed, configured, and enabled
|
|
47
|
+
* and the sandbox notice has been shown.
|
|
43
48
|
*/
|
|
44
49
|
export declare function bootstrapDemoVault(params: BootstrapDemoVaultParams): Promise<void>;
|
|
@@ -21,7 +21,12 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
import {
|
|
24
|
+
import { Notice } from "obsidian";
|
|
25
|
+
import {
|
|
26
|
+
basename,
|
|
27
|
+
join
|
|
28
|
+
} from "../path.mjs";
|
|
29
|
+
import { ensureNonNullable } from "../type-guards.mjs";
|
|
25
30
|
import {
|
|
26
31
|
configureCommunityPlugin,
|
|
27
32
|
ConfigureCommunityPluginResult,
|
|
@@ -32,13 +37,19 @@ import {
|
|
|
32
37
|
const CODE_SCRIPT_TOOLKIT_PLUGIN_ID = "fix-require-modules";
|
|
33
38
|
const CODE_SCRIPT_TOOLKIT_MODULES_ROOT = "_assets/CodeScriptToolkit";
|
|
34
39
|
const CODE_SCRIPT_TOOLKIT_SETTINGS = {
|
|
40
|
+
defaultCodeButtonConfig: "---\nsourceVisibility: collapsed\n---",
|
|
35
41
|
invocableScriptsFolder: "Invocables",
|
|
36
42
|
modulesRoot: CODE_SCRIPT_TOOLKIT_MODULES_ROOT,
|
|
37
43
|
shouldHandleProtocolUrls: true,
|
|
38
44
|
startupScriptPath: "startup.ts"
|
|
39
45
|
};
|
|
46
|
+
const DEMO_VAULT_HELPER_PLUGIN_ID = "demo-vault-helper";
|
|
47
|
+
const PLUGINS_FOLDER_NAME = "plugins";
|
|
48
|
+
const OPEN_DEMO_VAULT_COMMAND_NAME = "Open demo vault";
|
|
49
|
+
const SANDBOX_NOTICE_DURATION_IN_MILLISECONDS = 0;
|
|
40
50
|
async function bootstrapDemoVault(params) {
|
|
41
51
|
const { app } = params;
|
|
52
|
+
const demoedPluginId = await getDemoedPluginId(app);
|
|
42
53
|
await installCommunityPlugin({ app, pluginId: CODE_SCRIPT_TOOLKIT_PLUGIN_ID });
|
|
43
54
|
const result = await configureCommunityPlugin({
|
|
44
55
|
app,
|
|
@@ -52,6 +63,26 @@ async function bootstrapDemoVault(params) {
|
|
|
52
63
|
await disableCommunityPlugin({ app, pluginId: CODE_SCRIPT_TOOLKIT_PLUGIN_ID });
|
|
53
64
|
await enableCommunityPlugin({ app, pluginId: CODE_SCRIPT_TOOLKIT_PLUGIN_ID });
|
|
54
65
|
}
|
|
66
|
+
showSandboxNotice(app, demoedPluginId);
|
|
67
|
+
}
|
|
68
|
+
function buildSandboxNoticeFragment(pluginName, basePath) {
|
|
69
|
+
return createFragment((fragment) => {
|
|
70
|
+
if (pluginName === null) {
|
|
71
|
+
fragment.appendText("This is a demo vault.");
|
|
72
|
+
} else {
|
|
73
|
+
fragment.appendText("This is a demo vault for ");
|
|
74
|
+
fragment.createEl("b", { text: pluginName });
|
|
75
|
+
fragment.appendText(".");
|
|
76
|
+
}
|
|
77
|
+
fragment.appendText(" It is a temporary sandbox");
|
|
78
|
+
if (basePath !== null) {
|
|
79
|
+
fragment.appendText(" at ");
|
|
80
|
+
fragment.createEl("code", { text: basePath });
|
|
81
|
+
}
|
|
82
|
+
fragment.appendText(", cleaned up automatically about a day after you last use it \u2014 copy anything you want to keep into your own vault. Running ");
|
|
83
|
+
fragment.createEl("b", { text: pluginName === null ? OPEN_DEMO_VAULT_COMMAND_NAME : `${pluginName}: ${OPEN_DEMO_VAULT_COMMAND_NAME}` });
|
|
84
|
+
fragment.appendText(" again creates a new copy with the latest plugin version, so your notes will not appear in it.");
|
|
85
|
+
});
|
|
55
86
|
}
|
|
56
87
|
async function ensureInvocableScriptsFolder(app) {
|
|
57
88
|
const invocableScriptsFolderPath = join(CODE_SCRIPT_TOOLKIT_MODULES_ROOT, CODE_SCRIPT_TOOLKIT_SETTINGS.invocableScriptsFolder);
|
|
@@ -59,7 +90,27 @@ async function ensureInvocableScriptsFolder(app) {
|
|
|
59
90
|
await app.vault.adapter.mkdir(invocableScriptsFolderPath);
|
|
60
91
|
}
|
|
61
92
|
}
|
|
93
|
+
async function getDemoedPluginId(app) {
|
|
94
|
+
const pluginsFolderPath = join(app.vault.configDir, PLUGINS_FOLDER_NAME);
|
|
95
|
+
if (!await app.vault.adapter.exists(pluginsFolderPath)) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const listedFiles = await app.vault.adapter.list(pluginsFolderPath);
|
|
99
|
+
const demoedPluginIds = listedFiles.folders.map((folderPath) => basename(folderPath)).filter((pluginId) => pluginId !== DEMO_VAULT_HELPER_PLUGIN_ID);
|
|
100
|
+
return demoedPluginIds.length === 1 ? ensureNonNullable(demoedPluginIds[0]) : null;
|
|
101
|
+
}
|
|
102
|
+
function getVaultBasePath(app) {
|
|
103
|
+
return isBasePathAdapter(app.vault.adapter) ? app.vault.adapter.getBasePath() : null;
|
|
104
|
+
}
|
|
105
|
+
function isBasePathAdapter(adapter) {
|
|
106
|
+
return typeof Reflect.get(adapter, "getBasePath") === "function";
|
|
107
|
+
}
|
|
108
|
+
function showSandboxNotice(app, demoedPluginId) {
|
|
109
|
+
const pluginName = demoedPluginId === null ? null : app.plugins.manifests[demoedPluginId]?.name ?? demoedPluginId;
|
|
110
|
+
const fragment = buildSandboxNoticeFragment(pluginName, getVaultBasePath(app));
|
|
111
|
+
new Notice(fragment, SANDBOX_NOTICE_DURATION_IN_MILLISECONDS);
|
|
112
|
+
}
|
|
62
113
|
export {
|
|
63
114
|
bootstrapDemoVault
|
|
64
115
|
};
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2RlbW8tdmF1bHQtaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBDb2RlU2NyaXB0IFRvb2xraXQuXG4gKlxuICogQSBwbHVnaW4ncyBkZW1vIHZhdWx0IHNob3djYXNlcyB0aGUgcGx1Z2luIHRocm91Z2ggbm90ZXMgd2hvc2UgYGNvZGUtYnV0dG9uYHMgcnVuIFR5cGVTY3JpcHQgdmlhXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQuIEEgZGVtbyB2YXVsdCB0aGF0IGRvZXMgbm90IGl0c2VsZiBzaGlwIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIENvZGVTY3JpcHQgVG9vbGtpdCBjb25maWcgYW5kIG5vIG1hbnVhbCBzZXR1cCwgc28gaXQgY2FuIGJlIGRyaXZlbiBmcm9tIGEgdGlueVxuICogY29tbWl0dGVkIGJvb3RzdHJhcCBwbHVnaW4gKGBkZW1vLXZhdWx0LWhlbHBlcmApIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBldmVyeSBkZW1vIHZhdWx0IGF0IHJlbGVhc2VcbiAqIHRpbWUuXG4gKlxuICogSXQgd3JpdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIHNldHRpbmdzIEJFRk9SRSBlbmFibGluZyBpdCwgc28gdGhlIHBsdWdpbiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgXHUyMDE0XG4gKiBubyByZWxvYWQuIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgICh2aWEgaXRzIGBzdGFydHVwU2NyaXB0UGF0aGBcbiAqIHNldHRpbmcpLCB3aGljaCBpcyB3aGVyZSBlYWNoIHZhdWx0IG9wZW5zIGl0cyBzdGFydCBub3RlIGFuZCBkb2VzIGFueSBwbHVnaW4tc3BlY2lmaWMgc2V0dXAuXG4gKlxuICogSXQgYWxzbyBjcmVhdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIGludm9jYWJsZS1zY3JpcHRzIGZvbGRlciBpZiBpdCBpcyBtaXNzaW5nLCBzbyBldmVyeSBkZW1vIHZhdWx0XG4gKiBoYXMgdGhlIHNhbWUgbGF5b3V0IGV2ZW4gd2hlbiB0aGUgdmF1bHQgc2hpcHMgbm8gaW52b2NhYmxlIHNjcmlwdHMgXHUyMDE0IHRoZSB2YXVsdHMgdGhlbXNlbHZlcyBjb21taXQgbm9cbiAqIGVtcHR5IGZvbGRlciBmb3IgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICcuLi9wYXRoLnRzJztcbmltcG9ydCB7XG4gIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbixcbiAgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LFxuICBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBlbmFibGVDb21tdW5pdHlQbHVnaW4sXG4gIGluc3RhbGxDb21tdW5pdHlQbHVnaW5cbn0gZnJvbSAnLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbn1cblxuLyoqXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQncyBzZXR0aW5ncywgd3JpdHRlbiBpbnRvIGl0cyBgZGF0YS5qc29uYCBiZWZvcmUgaXQgaXMgZW5hYmxlZC5cbiAqL1xuaW50ZXJmYWNlIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIGZvbGRlciAodW5kZXIge0BsaW5rIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3MubW9kdWxlc1Jvb3R9KSBob2xkaW5nIGludm9jYWJsZSBzY3JpcHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW52b2NhYmxlU2NyaXB0c0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgZm9sZGVyIHRoYXQgYHJlcXVpcmUoJy9cdTIwMjYnKWAgcmVzb2x2ZXMgbW9kdWxlIHBhdGhzIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBtb2R1bGVzUm9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIENvZGVTY3JpcHQgVG9vbGtpdCBoYW5kbGVzIGBvYnNpZGlhbjovL2AgcHJvdG9jb2wgVVJMcy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhhbmRsZVByb3RvY29sVXJsczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgb2YgdGhlIHNjcmlwdCBydW4gb24gbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0dXBTY3JpcHRQYXRoOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lEID0gJ2ZpeC1yZXF1aXJlLW1vZHVsZXMnO1xuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QgPSAnX2Fzc2V0cy9Db2RlU2NyaXB0VG9vbGtpdCc7XG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTOiBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzID0ge1xuICBpbnZvY2FibGVTY3JpcHRzRm9sZGVyOiAnSW52b2NhYmxlcycsXG4gIG1vZHVsZXNSb290OiBDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCxcbiAgc2hvdWxkSGFuZGxlUHJvdG9jb2xVcmxzOiB0cnVlLFxuICBzdGFydHVwU2NyaXB0UGF0aDogJ3N0YXJ0dXAudHMnXG59O1xuXG4vKipcbiAqIEJvb3RzdHJhcHMgYSBkZW1vIHZhdWx0IHNvIGl0cyBub3RlcycgYGNvZGUtYnV0dG9uYHMgd29yayB3aXRoIG5vIG1hbnVhbCBzZXR1cDogaW5zdGFsbHMgQ29kZVNjcmlwdFxuICogVG9vbGtpdCBmcm9tIHRoZSBjb21tdW5pdHkgc3RvcmUgKGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCksIHdyaXRlcyBpdHMgc2V0dGluZ3MsIHRoZW4gZW5hYmxlc1xuICogaXQgXHUyMDE0IHdyaXRpbmcgdGhlIHNldHRpbmdzIEJFRk9SRSBlbmFibGluZyBzbyBhIGZyZXNoIGVuYWJsZSBsb2FkcyBpdCBhbHJlYWR5IGNvbmZpZ3VyZWQsIHdpdGggbm9cbiAqIHJlbG9hZC4gSWYgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGFscmVhZHkgZW5hYmxlZCBidXQgdGhlIHNldHRpbmdzIGp1c3QgY2hhbmdlZCwgaXQgaXMgcmVsb2FkZWRcbiAqIChkaXNhYmxlZCB0aGVuIGVuYWJsZWQpIHNvIGl0IHJlLXJlYWRzIGBkYXRhLmpzb25gOyB3aGVuIHRoZSBzZXR0aW5ncyB3ZXJlIGFscmVhZHkgaW4gcGxhY2UsIG5vdGhpbmcgaXNcbiAqIHJlbG9hZGVkIChzbyBhIHJvdXRpbmUgdmF1bHQgcmUtb3BlbiBkb2VzIG5vdCByZS1ydW4gQ29kZVNjcmlwdCBUb29sa2l0J3Mgc3RhcnR1cCkuIENvZGVTY3JpcHQgVG9vbGtpdFxuICogdGhlbiBydW5zIHRoZSB2YXVsdCdzIGBzdGFydHVwLnRzYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCb290c3RyYXBEZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIENvZGVTY3JpcHQgVG9vbGtpdCBpcyBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQsIGFuZCBlbmFibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwRGVtb1ZhdWx0KHBhcmFtczogQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTXG4gIH0pO1xuICBhd2FpdCBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcCk7XG5cbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMoQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQpKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIH0gZWxzZSBpZiAocmVzdWx0ID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2Vzcykge1xuICAgIC8vIEFscmVhZHkgZW5hYmxlZCB3aXRoIHN0YWxlIHNldHRpbmdzIFx1MjAxNCByZWxvYWQgc28gQ29kZVNjcmlwdCBUb29sa2l0IHJlLXJlYWRzIHRoZSBmcmVzaGx5IHdyaXR0ZW4gZGF0YS5qc29uLlxuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgfVxufVxuXG4vLyBDcmVhdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIGludm9jYWJsZS1zY3JpcHRzIGZvbGRlciAodW5kZXIgYG1vZHVsZXNSb290YCkgaWYgaXQgaXMgbWlzc2luZy5cbi8vIEV2ZXJ5IGRlbW8gdmF1bHQgdGhlbiBoYXMgdGhlIHNhbWUgQ29kZVNjcmlwdCBUb29sa2l0IGxheW91dCBldmVuIHdoZW4gaXQgc2hpcHMgbm8gaW52b2NhYmxlIHNjcmlwdHMuXG4vLyBUaGUgY29tbWl0dGVkIHZhdWx0IHRoZXJlZm9yZSBjYXJyaWVzIG5vIG90aGVyd2lzZS1lbXB0eSBwbGFjZWhvbGRlciBmb2xkZXIuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcDogQXBwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoID0gam9pbihDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCwgQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HUy5pbnZvY2FibGVTY3JpcHRzRm9sZGVyKTtcbiAgaWYgKCFhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoaW52b2NhYmxlU2NyaXB0c0ZvbGRlclBhdGgpKSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoaW52b2NhYmxlU2NyaXB0c0ZvbGRlclBhdGgpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQSxTQUFTLFlBQVk7QUFDckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFxQ1AsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxtQ0FBbUM7QUFDekMsTUFBTSwrQkFBMEQ7QUFBQSxFQUM5RCx3QkFBd0I7QUFBQSxFQUN4QixhQUFhO0FBQUEsRUFDYiwwQkFBMEI7QUFBQSxFQUMxQixtQkFBbUI7QUFDckI7QUFjQSxlQUFzQixtQkFBbUIsUUFBaUQ7QUFDeEYsUUFBTSxFQUFFLElBQUksSUFBSTtBQUNoQixRQUFNLHVCQUF1QixFQUFFLEtBQUssVUFBVSw4QkFBOEIsQ0FBQztBQUM3RSxRQUFNLFNBQVMsTUFBTSx5QkFBeUI7QUFBQSxJQUM1QztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLEVBQ1osQ0FBQztBQUNELFFBQU0sNkJBQTZCLEdBQUc7QUFFdEMsTUFBSSxDQUFDLElBQUksUUFBUSxlQUFlLElBQUksNkJBQTZCLEdBQUc7QUFDbEUsVUFBTSxzQkFBc0IsRUFBRSxLQUFLLFVBQVUsOEJBQThCLENBQUM7QUFBQSxFQUM5RSxXQUFXLFdBQVcsK0JBQStCLFNBQVM7QUFFNUQsVUFBTSx1QkFBdUIsRUFBRSxLQUFLLFVBQVUsOEJBQThCLENBQUM7QUFDN0UsVUFBTSxzQkFBc0IsRUFBRSxLQUFLLFVBQVUsOEJBQThCLENBQUM7QUFBQSxFQUM5RTtBQUNGO0FBS0EsZUFBZSw2QkFBNkIsS0FBeUI7QUFDbkUsUUFBTSw2QkFBNkIsS0FBSyxrQ0FBa0MsNkJBQTZCLHNCQUFzQjtBQUM3SCxNQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sUUFBUSxPQUFPLDBCQUEwQixHQUFHO0FBQy9ELFVBQU0sSUFBSSxNQUFNLFFBQVEsTUFBTSwwQkFBMEI7QUFBQSxFQUMxRDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2RlbW8tdmF1bHQtaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBDb2RlU2NyaXB0IFRvb2xraXQuXG4gKlxuICogQSBwbHVnaW4ncyBkZW1vIHZhdWx0IHNob3djYXNlcyB0aGUgcGx1Z2luIHRocm91Z2ggbm90ZXMgd2hvc2UgYGNvZGUtYnV0dG9uYHMgcnVuIFR5cGVTY3JpcHQgdmlhXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQuIEEgZGVtbyB2YXVsdCB0aGF0IGRvZXMgbm90IGl0c2VsZiBzaGlwIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIENvZGVTY3JpcHQgVG9vbGtpdCBjb25maWcgYW5kIG5vIG1hbnVhbCBzZXR1cCwgc28gaXQgY2FuIGJlIGRyaXZlbiBmcm9tIGEgdGlueVxuICogY29tbWl0dGVkIGJvb3RzdHJhcCBwbHVnaW4gKGBkZW1vLXZhdWx0LWhlbHBlcmApIHRoYXQgaXMgaW5qZWN0ZWQgaW50byBldmVyeSBkZW1vIHZhdWx0IGF0IHJlbGVhc2VcbiAqIHRpbWUuXG4gKlxuICogSXQgd3JpdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIHNldHRpbmdzIEJFRk9SRSBlbmFibGluZyBpdCwgc28gdGhlIHBsdWdpbiBsb2FkcyBhbHJlYWR5IGNvbmZpZ3VyZWQgXHUyMDE0XG4gKiBubyByZWxvYWQuIENvZGVTY3JpcHQgVG9vbGtpdCB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgICh2aWEgaXRzIGBzdGFydHVwU2NyaXB0UGF0aGBcbiAqIHNldHRpbmcpLCB3aGljaCBpcyB3aGVyZSBlYWNoIHZhdWx0IG9wZW5zIGl0cyBzdGFydCBub3RlIGFuZCBkb2VzIGFueSBwbHVnaW4tc3BlY2lmaWMgc2V0dXAuXG4gKlxuICogSXQgYWxzbyBjcmVhdGVzIENvZGVTY3JpcHQgVG9vbGtpdCdzIGludm9jYWJsZS1zY3JpcHRzIGZvbGRlciBpZiBpdCBpcyBtaXNzaW5nLCBzbyBldmVyeSBkZW1vIHZhdWx0XG4gKiBoYXMgdGhlIHNhbWUgbGF5b3V0IGV2ZW4gd2hlbiB0aGUgdmF1bHQgc2hpcHMgbm8gaW52b2NhYmxlIHNjcmlwdHMgXHUyMDE0IHRoZSB2YXVsdHMgdGhlbXNlbHZlcyBjb21taXQgbm9cbiAqIGVtcHR5IGZvbGRlciBmb3IgaXQuXG4gKlxuICogRmluYWxseSBpdCByYWlzZXMgdGhlIHNhbmRib3ggbm90aWNlIGV4cGxhaW5pbmcgdGhhdCB0aGUgb3BlbmVkIHZhdWx0IGlzIGEgdGhyb3dhd2F5IGNvcHksIHNvIGEgdXNlclxuICogd2hvIHdyaXRlcyB0aGVpciBvd24gbm90ZXMgaW4gaXQgaXMgbmV2ZXIgc3VycHJpc2VkIGJ5IHRoZW0gYmVpbmcgYWJzZW50IGZyb20gdGhlIG5leHQgY29weS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRGF0YUFkYXB0ZXJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBqb2luXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQge1xuICBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4sXG4gIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdCxcbiAgZGlzYWJsZUNvbW11bml0eVBsdWdpbixcbiAgZW5hYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBkZXNrdG9wIHZhdWx0IGFkYXB0ZXIgdGhhdCBrbm93cyB0aGUgdmF1bHQncyBhYnNvbHV0ZSBwYXRoLlxuICovXG5pbnRlcmZhY2UgQmFzZVBhdGhBZGFwdGVyIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIGdldEJhc2VQYXRoKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQncyBzZXR0aW5ncywgd3JpdHRlbiBpbnRvIGl0cyBgZGF0YS5qc29uYCBiZWZvcmUgaXQgaXMgZW5hYmxlZC5cbiAqL1xuaW50ZXJmYWNlIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIFlBTUwgZnJvbnRtYXR0ZXIgbWVyZ2VkIGludG8gZXZlcnkgYGNvZGUtYnV0dG9uYCBibG9jaydzIG93biBjb25maWcsIHVzZWQgaGVyZSB0byB0dXJuIHRoZVxuICAgKiBzb3VyY2Ugdmlld2VyIG9uIGZvciBldmVyeSBidXR0b24gaW4gZXZlcnkgZGVtbyB2YXVsdCB3aXRob3V0IGVkaXRpbmcgYSBzaW5nbGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb2RlQnV0dG9uQ29uZmlnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgaG9sZGluZyBpbnZvY2FibGUgc2NyaXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IGludm9jYWJsZVNjcmlwdHNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGF0IGByZXF1aXJlKCcvXHUyMDI2JylgIHJlc29sdmVzIG1vZHVsZSBwYXRocyBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlc1Jvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBDb2RlU2NyaXB0IFRvb2xraXQgaGFuZGxlcyBgb2JzaWRpYW46Ly9gIHByb3RvY29sIFVSTHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVQcm90b2NvbFVybHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoICh1bmRlciB7QGxpbmsgQ29kZVNjcmlwdFRvb2xraXRTZXR0aW5ncy5tb2R1bGVzUm9vdH0pIG9mIHRoZSBzY3JpcHQgcnVuIG9uIGxvYWQuXG4gICAqL1xuICByZWFkb25seSBzdGFydHVwU2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCA9ICdmaXgtcmVxdWlyZS1tb2R1bGVzJztcbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfTU9EVUxFU19ST09UID0gJ19hc3NldHMvQ29kZVNjcmlwdFRvb2xraXQnO1xuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HUzogQ29kZVNjcmlwdFRvb2xraXRTZXR0aW5ncyA9IHtcbiAgZGVmYXVsdENvZGVCdXR0b25Db25maWc6ICctLS1cXG5zb3VyY2VWaXNpYmlsaXR5OiBjb2xsYXBzZWRcXG4tLS0nLFxuICBpbnZvY2FibGVTY3JpcHRzRm9sZGVyOiAnSW52b2NhYmxlcycsXG4gIG1vZHVsZXNSb290OiBDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCxcbiAgc2hvdWxkSGFuZGxlUHJvdG9jb2xVcmxzOiB0cnVlLFxuICBzdGFydHVwU2NyaXB0UGF0aDogJ3N0YXJ0dXAudHMnXG59O1xuXG5jb25zdCBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSUQgPSAnZGVtby12YXVsdC1oZWxwZXInO1xuY29uc3QgUExVR0lOU19GT0xERVJfTkFNRSA9ICdwbHVnaW5zJztcbmNvbnN0IE9QRU5fREVNT19WQVVMVF9DT01NQU5EX05BTUUgPSAnT3BlbiBkZW1vIHZhdWx0Jztcbi8vIGAwYCBhc2tzIE9ic2lkaWFuIHRvIGtlZXAgdGhlIG5vdGljZSB1cCB1bnRpbCB0aGUgdXNlciBjbGlja3MgaXQgXHUyMDE0IHRoZSBzYW1lIHRyZWF0bWVudCBPYnNpZGlhbiBnaXZlc1xuLy8gSXRzIG93biBzYW5kYm94LXZhdWx0IG5vdGljZSwgYW5kIHdoYXQgdGhlIGRlbW8tdmF1bHQgbm90aWNlIGlzIG1vZGVsbGVkIG9uLlxuY29uc3QgU0FOREJPWF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gMDtcblxuLyoqXG4gKiBCb290c3RyYXBzIGEgZGVtbyB2YXVsdCBzbyBpdHMgbm90ZXMnIGBjb2RlLWJ1dHRvbmBzIHdvcmsgd2l0aCBubyBtYW51YWwgc2V0dXA6IGluc3RhbGxzIENvZGVTY3JpcHRcbiAqIFRvb2xraXQgZnJvbSB0aGUgY29tbXVuaXR5IHN0b3JlIChpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQpLCB3cml0ZXMgaXRzIHNldHRpbmdzLCB0aGVuIGVuYWJsZXNcbiAqIGl0IFx1MjAxNCB3cml0aW5nIHRoZSBzZXR0aW5ncyBCRUZPUkUgZW5hYmxpbmcgc28gYSBmcmVzaCBlbmFibGUgbG9hZHMgaXQgYWxyZWFkeSBjb25maWd1cmVkLCB3aXRoIG5vXG4gKiByZWxvYWQuIElmIENvZGVTY3JpcHQgVG9vbGtpdCBpcyBhbHJlYWR5IGVuYWJsZWQgYnV0IHRoZSBzZXR0aW5ncyBqdXN0IGNoYW5nZWQsIGl0IGlzIHJlbG9hZGVkXG4gKiAoZGlzYWJsZWQgdGhlbiBlbmFibGVkKSBzbyBpdCByZS1yZWFkcyBgZGF0YS5qc29uYDsgd2hlbiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IGluIHBsYWNlLCBub3RoaW5nIGlzXG4gKiByZWxvYWRlZCAoc28gYSByb3V0aW5lIHZhdWx0IHJlLW9wZW4gZG9lcyBub3QgcmUtcnVuIENvZGVTY3JpcHQgVG9vbGtpdCdzIHN0YXJ0dXApLiBDb2RlU2NyaXB0IFRvb2xraXRcbiAqIHRoZW4gcnVucyB0aGUgdmF1bHQncyBgc3RhcnR1cC50c2AuIEZpbmFsbHkgaXQgcmFpc2VzIHRoZSBzYW5kYm94IG5vdGljZSBkZXNjcmliaW5nIHRoZSBvcGVuZWQgdmF1bHRcbiAqIGFzIGEgdGhyb3dhd2F5IGNvcHkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBDb2RlU2NyaXB0IFRvb2xraXQgaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkLCBhbmQgZW5hYmxlZFxuICogYW5kIHRoZSBzYW5kYm94IG5vdGljZSBoYXMgYmVlbiBzaG93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcERlbW9WYXVsdChwYXJhbXM6IEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICAvLyBSZXNvbHZlZCBCRUZPUkUgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGluc3RhbGxlZC4gQXQgcmVsZWFzZSB0aW1lIHRoZSB2YXVsdCBjYXJyaWVzIGV4YWN0bHkgdHdvXG4gIC8vIFBsdWdpbiBmb2xkZXJzIFx1MjAxNCB0aGlzIGhlbHBlciBhbmQgdGhlIHBsdWdpbiBiZWluZyBkZW1vbnN0cmF0ZWQgXHUyMDE0IHNvIGRyb3BwaW5nIHRoZSBoZWxwZXIgbGVhdmVzIHRoZVxuICAvLyBEZW1vbnN0cmF0ZWQgb25lLiBSZWFkaW5nIHRoZSBmb2xkZXIgbGF0ZXIgd291bGQgYWxzbyBzZWUgQ29kZVNjcmlwdCBUb29sa2l0IGFuZCBhbnl0aGluZyBhIGRlbW9cbiAgLy8gTm90ZSdzIHByZXJlcXVpc2l0ZXMgaW5zdGFsbGVkLCBsZWF2aW5nIG5vIHdheSB0byB0ZWxsIHdoaWNoIHBsdWdpbiB0aGUgdmF1bHQgaXMgZm9yLlxuICBjb25zdCBkZW1vZWRQbHVnaW5JZCA9IGF3YWl0IGdldERlbW9lZFBsdWdpbklkKGFwcCk7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTXG4gIH0pO1xuICBhd2FpdCBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcCk7XG5cbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMoQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQpKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgfSk7XG4gIH0gZWxzZSBpZiAocmVzdWx0ID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2Vzcykge1xuICAgIC8vIEFscmVhZHkgZW5hYmxlZCB3aXRoIHN0YWxlIHNldHRpbmdzIFx1MjAxNCByZWxvYWQgc28gQ29kZVNjcmlwdCBUb29sa2l0IHJlLXJlYWRzIHRoZSBmcmVzaGx5IHdyaXR0ZW4gZGF0YS5qc29uLlxuICAgIGF3YWl0IGRpc2FibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgfVxuXG4gIHNob3dTYW5kYm94Tm90aWNlKGFwcCwgZGVtb2VkUGx1Z2luSWQpO1xufVxuXG4vLyBCdWlsZHMgdGhlIHNhbmRib3ggbm90aWNlIGNvbnRlbnQ6IHdoYXQgdGhpcyB2YXVsdCBpcywgd2hlcmUgaXQgbGl2ZXMsIGhvdyBsb25nIGl0IGxpdmVzLCBhbmQgd2h5XG4vLyBSZS1ydW5uaW5nIHRoZSBjb21tYW5kIHByb2R1Y2VzIGEgdmF1bHQgd2l0aG91dCB0aGUgbm90ZXMganVzdCB3cml0dGVuIGhlcmUuXG4vL1xuLy8gRXZlcnkgY2xhaW0gaGFzIHRvIHN0YXkgdHJ1ZSBvZiB0aGUgb3BlbmVyIChgZGVza3RvcC1kZW1vLXZhdWx0LW9wZW5lci50c2ApOiBpdCBleHRyYWN0cyBhIEZSRVNIIGNvcHlcbi8vIEludG8gaXRzIG93biBmb2xkZXIgb24gZXZlcnkgb3BlbiwgYW5kIGRlbGV0ZXMgZXh0cmFjdGVkIGZvbGRlcnMgb2xkZXIgdGhhbiBhIGRheSBvbiBlYWNoIGxhdGVyIG9wZW4uXG4vLyBTbyB0aGUgdmF1bHQgaXMgYSB0ZW1wb3Jhcnkgc2FuZGJveCBcdTIwMTQgaXQgbXVzdCBuZXZlciBiZSBkZXNjcmliZWQgYXMgYSBwbGFjZSB3b3JrIGNhbiBiZSBsZWZ0LlxuZnVuY3Rpb24gYnVpbGRTYW5kYm94Tm90aWNlRnJhZ21lbnQocGx1Z2luTmFtZTogbnVsbCB8IHN0cmluZywgYmFzZVBhdGg6IG51bGwgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50KChmcmFnbWVudCkgPT4ge1xuICAgIGlmIChwbHVnaW5OYW1lID09PSBudWxsKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdUaGlzIGlzIGEgZGVtbyB2YXVsdC4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnVGhpcyBpcyBhIGRlbW8gdmF1bHQgZm9yICcpO1xuICAgICAgZnJhZ21lbnQuY3JlYXRlRWwoJ2InLCB7IHRleHQ6IHBsdWdpbk5hbWUgfSk7XG4gICAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcuJyk7XG4gICAgfVxuXG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnIEl0IGlzIGEgdGVtcG9yYXJ5IHNhbmRib3gnKTtcbiAgICBpZiAoYmFzZVBhdGggIT09IG51bGwpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJyBhdCAnKTtcbiAgICAgIGZyYWdtZW50LmNyZWF0ZUVsKCdjb2RlJywgeyB0ZXh0OiBiYXNlUGF0aCB9KTtcbiAgICB9XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnLCBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgYWJvdXQgYSBkYXkgYWZ0ZXIgeW91IGxhc3QgdXNlIGl0IFx1MjAxNCBjb3B5IGFueXRoaW5nIHlvdSB3YW50IHRvIGtlZXAgaW50byB5b3VyIG93biB2YXVsdC4gUnVubmluZyAnKTtcbiAgICBmcmFnbWVudC5jcmVhdGVFbCgnYicsIHsgdGV4dDogcGx1Z2luTmFtZSA9PT0gbnVsbCA/IE9QRU5fREVNT19WQVVMVF9DT01NQU5EX05BTUUgOiBgJHtwbHVnaW5OYW1lfTogJHtPUEVOX0RFTU9fVkFVTFRfQ09NTUFORF9OQU1FfWAgfSk7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnIGFnYWluIGNyZWF0ZXMgYSBuZXcgY29weSB3aXRoIHRoZSBsYXRlc3QgcGx1Z2luIHZlcnNpb24sIHNvIHlvdXIgbm90ZXMgd2lsbCBub3QgYXBwZWFyIGluIGl0LicpO1xuICB9KTtcbn1cblxuLy8gQ3JlYXRlcyBDb2RlU2NyaXB0IFRvb2xraXQncyBpbnZvY2FibGUtc2NyaXB0cyBmb2xkZXIgKHVuZGVyIGBtb2R1bGVzUm9vdGApIGlmIGl0IGlzIG1pc3NpbmcuXG4vLyBFdmVyeSBkZW1vIHZhdWx0IHRoZW4gaGFzIHRoZSBzYW1lIENvZGVTY3JpcHQgVG9vbGtpdCBsYXlvdXQgZXZlbiB3aGVuIGl0IHNoaXBzIG5vIGludm9jYWJsZSBzY3JpcHRzLlxuLy8gVGhlIGNvbW1pdHRlZCB2YXVsdCB0aGVyZWZvcmUgY2FycmllcyBubyBvdGhlcndpc2UtZW1wdHkgcGxhY2Vob2xkZXIgZm9sZGVyLlxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlSW52b2NhYmxlU2NyaXB0c0ZvbGRlcihhcHA6IEFwcCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCA9IGpvaW4oQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QsIENPREVfU0NSSVBUX1RPT0xLSVRfU0VUVElOR1MuaW52b2NhYmxlU2NyaXB0c0ZvbGRlcik7XG4gIGlmICghYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoKSkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoKTtcbiAgfVxufVxuXG4vLyBJZGVudGlmaWVzIHRoZSBwbHVnaW4gdGhlIHZhdWx0IGRlbW9uc3RyYXRlcyBhcyB0aGUgb25seSBpbnN0YWxsZWQgcGx1Z2luIHRoYXQgaXMgbm90IHRoaXMgaGVscGVyLlxuLy8gQ2FsbCBpdCBCRUZPUkUgYW55dGhpbmcgZWxzZSBpcyBpbnN0YWxsZWQgKHNlZSBgYm9vdHN0cmFwRGVtb1ZhdWx0YCkuIEFueSBvdGhlciBjb3VudCBcdTIwMTQgYSB2YXVsdFxuLy8gT3BlbmVkIGFmdGVyIHRoZSBwbHVnaW4gZm9sZGVyIHdhcyBoYW5kLWVkaXRlZCwgb3Igb25lIHRoYXQgc2hpcHMgbm90aGluZyBidXQgdGhlIGhlbHBlciBcdTIwMTQgaXNcbi8vIEFtYmlndW91cywgYW5kIGFuIGFtYmlndW91cyBhbnN3ZXIgYmVjb21lcyBnZW5lcmljIG5vdGljZSB3b3JkaW5nIHJhdGhlciB0aGFuIGEgd3JvbmcgcGx1Z2luIG5hbWUuXG5hc3luYyBmdW5jdGlvbiBnZXREZW1vZWRQbHVnaW5JZChhcHA6IEFwcCk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBwbHVnaW5zRm9sZGVyUGF0aCA9IGpvaW4oYXBwLnZhdWx0LmNvbmZpZ0RpciwgUExVR0lOU19GT0xERVJfTkFNRSk7XG4gIGlmICghYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHBsdWdpbnNGb2xkZXJQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGlzdGVkRmlsZXMgPSBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5saXN0KHBsdWdpbnNGb2xkZXJQYXRoKTtcbiAgY29uc3QgZGVtb2VkUGx1Z2luSWRzID0gbGlzdGVkRmlsZXMuZm9sZGVyc1xuICAgIC5tYXAoKGZvbGRlclBhdGgpID0+IGJhc2VuYW1lKGZvbGRlclBhdGgpKVxuICAgIC5maWx0ZXIoKHBsdWdpbklkKSA9PiBwbHVnaW5JZCAhPT0gREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lEKTtcbiAgcmV0dXJuIGRlbW9lZFBsdWdpbklkcy5sZW5ndGggPT09IDEgPyBlbnN1cmVOb25OdWxsYWJsZShkZW1vZWRQbHVnaW5JZHNbMF0pIDogbnVsbDtcbn1cblxuLy8gUmVzb2x2ZXMgdGhlIHZhdWx0J3MgYWJzb2x1dGUgcGF0aCBmb3IgdGhlIG5vdGljZS4gT25seSB0aGUgZGVza3RvcCBhZGFwdGVyIGtub3dzIGl0OiBgRGF0YUFkYXB0ZXJgXG4vLyBEb2VzIG5vdCBkZWNsYXJlIGBnZXRCYXNlUGF0aGAsIGFuZCBgRmlsZVN5c3RlbUFkYXB0ZXJgIGlzIGEgZGVza3RvcC1vbmx5IGNsYXNzIHRoYXQgaXMgbm90IGd1YXJhbnRlZWRcbi8vIFRvIGV4aXN0IGVsc2V3aGVyZSBcdTIwMTQgc28gYGluc3RhbmNlb2ZgIHdvdWxkIHRocm93IHJhdGhlciB0aGFuIGFuc3dlci4gSXQgaXMgcmVhY2hlZCBpbnN0ZWFkIHRocm91Z2ggYVxuLy8gTmFycm93IGhhbmQtZGVjbGFyZWQgc2hhcGUgcGx1cyBhIHJ1bnRpbWUgY2hlY2sgKHNlZSBMOSkuIEFuIGFkYXB0ZXIgd2l0aG91dCBpdCB5aWVsZHMgbm8gcGF0aCwgYW5kXG4vLyBUaGUgbm90aWNlIHRoZW4gb21pdHMgdGhlIHNlbnRlbmNlIG5hbWluZyBpdCByYXRoZXIgdGhhbiByZW5kZXJpbmcgYHVuZGVmaW5lZGAuXG5mdW5jdGlvbiBnZXRWYXVsdEJhc2VQYXRoKGFwcDogQXBwKTogbnVsbCB8IHN0cmluZyB7XG4gIHJldHVybiBpc0Jhc2VQYXRoQWRhcHRlcihhcHAudmF1bHQuYWRhcHRlcikgPyBhcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNCYXNlUGF0aEFkYXB0ZXIoYWRhcHRlcjogRGF0YUFkYXB0ZXIpOiBhZGFwdGVyIGlzIEJhc2VQYXRoQWRhcHRlciAmIERhdGFBZGFwdGVyIHtcbiAgcmV0dXJuIHR5cGVvZiBSZWZsZWN0LmdldChhZGFwdGVyLCAnZ2V0QmFzZVBhdGgnKSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLy8gVGVsbHMgdGhlIHVzZXIgdGhpcyB2YXVsdCBpcyBhIHNhbmRib3gsIHVzaW5nIE9ic2lkaWFuJ3Mgb3duIHNhbmRib3gtdmF1bHQgdHJlYXRtZW50OiBhbiBpbmZpbml0ZVxuLy8gRHVyYXRpb24sIGRpc21pc3NlZCBieSBjbGlja2luZyBpdC4gUmFpc2VkIGxhc3QsIHNvIGl0IGlzIHRoZSBuZXdlc3Qgbm90aWNlIG9uIHNjcmVlbiBvbmNlXG4vLyBDb2RlU2NyaXB0IFRvb2xraXQncyBzdGFydHVwIHNjcmlwdCBoYXMgZG9uZSBpdHMgb3duIHdvcmsuXG5mdW5jdGlvbiBzaG93U2FuZGJveE5vdGljZShhcHA6IEFwcCwgZGVtb2VkUGx1Z2luSWQ6IG51bGwgfCBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcGx1Z2luTmFtZSA9IGRlbW9lZFBsdWdpbklkID09PSBudWxsID8gbnVsbCA6IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1tkZW1vZWRQbHVnaW5JZF0/Lm5hbWUgPz8gZGVtb2VkUGx1Z2luSWQ7XG4gIGNvbnN0IGZyYWdtZW50ID0gYnVpbGRTYW5kYm94Tm90aWNlRnJhZ21lbnQocGx1Z2luTmFtZSwgZ2V0VmF1bHRCYXNlUGF0aChhcHApKTtcbiAgbmV3IE5vdGljZShmcmFnbWVudCwgU0FOREJPWF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQVMsY0FBYztBQUV2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBcURQLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sbUNBQW1DO0FBQ3pDLE1BQU0sK0JBQTBEO0FBQUEsRUFDOUQseUJBQXlCO0FBQUEsRUFDekIsd0JBQXdCO0FBQUEsRUFDeEIsYUFBYTtBQUFBLEVBQ2IsMEJBQTBCO0FBQUEsRUFDMUIsbUJBQW1CO0FBQ3JCO0FBRUEsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSwrQkFBK0I7QUFHckMsTUFBTSwwQ0FBMEM7QUFnQmhELGVBQXNCLG1CQUFtQixRQUFpRDtBQUN4RixRQUFNLEVBQUUsSUFBSSxJQUFJO0FBS2hCLFFBQU0saUJBQWlCLE1BQU0sa0JBQWtCLEdBQUc7QUFDbEQsUUFBTSx1QkFBdUIsRUFBRSxLQUFLLFVBQVUsOEJBQThCLENBQUM7QUFDN0UsUUFBTSxTQUFTLE1BQU0seUJBQXlCO0FBQUEsSUFDNUM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFDRCxRQUFNLDZCQUE2QixHQUFHO0FBRXRDLE1BQUksQ0FBQyxJQUFJLFFBQVEsZUFBZSxJQUFJLDZCQUE2QixHQUFHO0FBQ2xFLFVBQU0sc0JBQXNCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQUEsRUFDOUUsV0FBVyxXQUFXLCtCQUErQixTQUFTO0FBRTVELFVBQU0sdUJBQXVCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQzdFLFVBQU0sc0JBQXNCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQUEsRUFDOUU7QUFFQSxvQkFBa0IsS0FBSyxjQUFjO0FBQ3ZDO0FBUUEsU0FBUywyQkFBMkIsWUFBMkIsVUFBMkM7QUFDeEcsU0FBTyxlQUFlLENBQUMsYUFBYTtBQUNsQyxRQUFJLGVBQWUsTUFBTTtBQUN2QixlQUFTLFdBQVcsdUJBQXVCO0FBQUEsSUFDN0MsT0FBTztBQUNMLGVBQVMsV0FBVywyQkFBMkI7QUFDL0MsZUFBUyxTQUFTLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxlQUFTLFdBQVcsR0FBRztBQUFBLElBQ3pCO0FBRUEsYUFBUyxXQUFXLDRCQUE0QjtBQUNoRCxRQUFJLGFBQWEsTUFBTTtBQUNyQixlQUFTLFdBQVcsTUFBTTtBQUMxQixlQUFTLFNBQVMsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDOUM7QUFDQSxhQUFTLFdBQVcsa0lBQTZIO0FBQ2pKLGFBQVMsU0FBUyxLQUFLLEVBQUUsTUFBTSxlQUFlLE9BQU8sK0JBQStCLEdBQUcsVUFBVSxLQUFLLDRCQUE0QixHQUFHLENBQUM7QUFDdEksYUFBUyxXQUFXLGdHQUFnRztBQUFBLEVBQ3RILENBQUM7QUFDSDtBQUtBLGVBQWUsNkJBQTZCLEtBQXlCO0FBQ25FLFFBQU0sNkJBQTZCLEtBQUssa0NBQWtDLDZCQUE2QixzQkFBc0I7QUFDN0gsTUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLFFBQVEsT0FBTywwQkFBMEIsR0FBRztBQUMvRCxVQUFNLElBQUksTUFBTSxRQUFRLE1BQU0sMEJBQTBCO0FBQUEsRUFDMUQ7QUFDRjtBQU1BLGVBQWUsa0JBQWtCLEtBQWtDO0FBQ2pFLFFBQU0sb0JBQW9CLEtBQUssSUFBSSxNQUFNLFdBQVcsbUJBQW1CO0FBQ3ZFLE1BQUksQ0FBQyxNQUFNLElBQUksTUFBTSxRQUFRLE9BQU8saUJBQWlCLEdBQUc7QUFDdEQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGNBQWMsTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLGlCQUFpQjtBQUNsRSxRQUFNLGtCQUFrQixZQUFZLFFBQ2pDLElBQUksQ0FBQyxlQUFlLFNBQVMsVUFBVSxDQUFDLEVBQ3hDLE9BQU8sQ0FBQyxhQUFhLGFBQWEsMkJBQTJCO0FBQ2hFLFNBQU8sZ0JBQWdCLFdBQVcsSUFBSSxrQkFBa0IsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJO0FBQ2hGO0FBT0EsU0FBUyxpQkFBaUIsS0FBeUI7QUFDakQsU0FBTyxrQkFBa0IsSUFBSSxNQUFNLE9BQU8sSUFBSSxJQUFJLE1BQU0sUUFBUSxZQUFZLElBQUk7QUFDbEY7QUFFQSxTQUFTLGtCQUFrQixTQUFnRTtBQUN6RixTQUFPLE9BQU8sUUFBUSxJQUFJLFNBQVMsYUFBYSxNQUFNO0FBQ3hEO0FBS0EsU0FBUyxrQkFBa0IsS0FBVSxnQkFBcUM7QUFDeEUsUUFBTSxhQUFhLG1CQUFtQixPQUFPLE9BQU8sSUFBSSxRQUFRLFVBQVUsY0FBYyxHQUFHLFFBQVE7QUFDbkcsUUFBTSxXQUFXLDJCQUEyQixZQUFZLGlCQUFpQixHQUFHLENBQUM7QUFDN0UsTUFBSSxPQUFPLFVBQVUsdUNBQXVDO0FBQzlEOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -41,6 +41,10 @@
|
|
|
41
41
|
*
|
|
42
42
|
* The wrapped modal can still be closed normally; the floating bar is cleaned up automatically when
|
|
43
43
|
* the modal closes (even if it is closed while minimized).
|
|
44
|
+
*
|
|
45
|
+
* Clicking the dimmed background behind the modal **minimizes** it rather than closing it, so a stray
|
|
46
|
+
* click past the dialog no longer cancels the operation the modal is running — pass
|
|
47
|
+
* `{ shouldMinimizeOnClickOutside: false }` to keep Obsidian's native close-on-background-click.
|
|
44
48
|
*/
|
|
45
49
|
import { Modal } from 'obsidian';
|
|
46
50
|
import { MonkeyAroundComponent } from '../components/monkey-around-component.mjs';
|
|
@@ -48,6 +52,14 @@ import { MonkeyAroundComponent } from '../components/monkey-around-component.mjs
|
|
|
48
52
|
* Options for constructing a {@link MinimizableModal}.
|
|
49
53
|
*/
|
|
50
54
|
export interface MinimizableModalConstructorOptions {
|
|
55
|
+
/**
|
|
56
|
+
* Whether clicking the dimmed background behind the modal minimizes it instead of closing it.
|
|
57
|
+
* Obsidian's native behavior is to close, which cancels whatever operation the modal is running;
|
|
58
|
+
* minimizing keeps that operation alive so the user can peek at the involved notes and come back.
|
|
59
|
+
*
|
|
60
|
+
* @default `true`
|
|
61
|
+
*/
|
|
62
|
+
readonly shouldMinimizeOnClickOutside?: boolean;
|
|
51
63
|
/**
|
|
52
64
|
* Whether the minimized bar shows a Cancel button that closes the wrapped modal. Closing lets the
|
|
53
65
|
* wrapped modal's own `onClose` define what "cancel" means (e.g. releasing a held lock).
|
|
@@ -86,6 +98,7 @@ export declare class MinimizableModal<TModal extends Modal> {
|
|
|
86
98
|
private minimizedBarEl;
|
|
87
99
|
private peekLockComponent;
|
|
88
100
|
private peekLockEntry;
|
|
101
|
+
private readonly shouldMinimizeOnClickOutside;
|
|
89
102
|
private readonly shouldShowCancelButton;
|
|
90
103
|
/**
|
|
91
104
|
* Wraps the given modal, adding a minimize button and wiring up cleanup on close.
|
|
@@ -110,6 +123,7 @@ export declare class MinimizableModal<TModal extends Modal> {
|
|
|
110
123
|
private enablePeekLock;
|
|
111
124
|
private flashBar;
|
|
112
125
|
private handleClose;
|
|
126
|
+
private handleContainerClick;
|
|
113
127
|
private patchOnClose;
|
|
114
128
|
private removeMinimizedBar;
|
|
115
129
|
}
|